From 133c581b75dfe1faf4151025a3ae039988a40806 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Thu, 8 Aug 2024 10:03:02 +0500 Subject: [PATCH 001/156] Support has been provided for the new ecosystem --- fearless.xcodeproj/project.pbxproj | 414 +- .../xcshareddata/swiftpm/Package.resolved | 621 +- .../ApplicationLayer/ServiceAssembly.swift | 236 + .../SubstrateAccountInfoFetching.swift | 269 +- .../Balance/AccountInfoRemoteService.swift | 102 + .../Balance/BalanceLocksFetching.swift | 3 +- .../EthereumRemoteBalanceFetching.swift | 137 +- ...t => SubstrateRemoteBalanceFetching.swift} | 132 +- .../Balance/TonRemoteBalanceFetching.swift | 238 + .../Models/TonConnectConfiguration.swift | 9 + .../Services/Models/TonConnectManifest.swift | 13 + .../Models/TonConnectParameters.swift | 17 + .../Services/SearchService.swift | 1 + .../Tokens/EthereumTransferService.swift | 6 +- .../Tokens/SubstrateTransferService.swift | 5 +- .../WalletConnect/WalletConnectSigner.swift | 8 +- .../StakingRewardsFetcherAssembly.swift | 2 +- .../ApplicationLayer/TonJettonInjector.swift | 69 + .../AddressChainDefiner.swift | 1 + .../Common/Crypto/KeystoreExportWrapper.swift | 6 +- fearless/Common/Crypto/SigningWrapper.swift | 2 +- .../DataProvider/ExistentialDeposit.swift | 34 +- .../DataProvider/PriceProviderFactory.swift | 6 +- .../Sources/PriceDataSource.swift | 24 +- .../PriceLocalStorageSubscriber.swift | 39 +- .../WalletLocalStorageSubscriber.swift | 70 +- .../Events/MetaAccountModelChangedEvent.swift | 1 + .../Events/SelectedAccountChanged.swift | 1 + .../Events/WalletNameChanged.swift | 2 + fearless/Common/Extension/Task.swift | 17 + ...setTransactionData+ArrowsquidHistory.swift | 1 + ...setTransactionData+GiantsquidHistory.swift | 1 + ...AssetTransactionData+SubqueryHistory.swift | 2 +- ...AssetTransactionData+SubsquidHistory.swift | 2 +- .../Wallet/AssetTransactionData+Ton.swift | 116 + .../Wallet/SearchData+Contacts.swift | 2 +- .../TransactionHistoryItem+Extrinsic.swift | 1 + .../Helpers/AccountProviderFactory.swift | 1 + .../Helpers/AccountRepositoryFactory.swift | 2 + .../Common/Helpers/AddressConversion.swift | 96 - .../Common/Helpers/ChainAccountFetching.swift | 92 - .../Common/Helpers/ChainAssetsFetching.swift | 9 +- .../Common/Helpers/EthereumNodeFetching.swift | 1 + .../AvailableExportOptionsProvider.swift | 79 +- fearless/Common/Model/ChainAction.swift | 5 +- fearless/Common/Model/ChainAsset.swift | 6 +- .../Model/ChainRegistry/ChainModel.swift | 10 +- .../ExternalApiExplorerType.swift | 2 + .../ManagedMetaAccountModel.swift | 1 + .../ChainRegistry/MetaAccountModel.swift | 281 - fearless/Common/Model/DisplayAddress.swift | 6 - fearless/Common/Model/KeystoreTag.swift | 30 + .../AccountOperationFactoryError.swift | 1 + .../MetaAccountOperationFactory.swift | 197 +- .../Common/Protocols/AccountFetching.swift | 17 +- .../AccountSelectionPresentable.swift | 1 + .../Protocols/RuntimeConstantFetching.swift | 27 + .../ChainRegistry/ChainRegistry.swift | 82 +- .../ChainRegistry/ChainSyncService.swift | 22 + .../ConnectionPool/TonAPIAssembly.swift | 40 + ...edControllerStashAccountCheckService.swift | 1 + .../ExtrinsicOperationFactory.swift | 21 +- .../ExtrinsicService/ExtrinsicService.swift | 18 - .../NominatorPayoutInfoFactory.swift | 1 + .../PayoutRewardsService+Fetch.swift | 1 + .../PayoutValidatorForValidatorFactory.swift | 1 + ...idPayoutValidatorForNominatorFactory.swift | 1 + ...yPayoutValidatorsForNominatorFactory.swift | 1 + ...dPayoutValidatorsForNominatorFactory.swift | 1 + .../ValidatorPayoutInfoFactory.swift | 1 + .../AccountInfoUpdatingService.swift | 17 +- ...ereumWalletRemoteSubscriptionService.swift | 11 +- .../Common/Services/ServiceCoordinator.swift | 31 +- .../TransactionSubscription.swift | 1 + .../EntityToModel/ChainModelMapper.swift | 35 +- .../EntityToModel/MetaAccountMapper.swift | 157 - .../SubstrateStorageVersion.swift | 3 + .../UserStorage/UserStorageVersion.swift | 3 + .../Storage/SelectedWalletSettings.swift | 2 + .../.xccurrentversion | 2 +- .../contents | 167 + .../Storage/SubstrateDataStorageFacade.swift | 2 +- .../Storage/UserDataStorageFacade.swift | 2 +- .../SubstrateCallFactoryDefault.swift | 8 +- .../SubstrateCallFactoryProtocol.swift | 3 +- .../Common/Substrate/Types/AccountInfo.swift | 4 +- .../Substrate/Types/EraRewardPoints.swift | 11 + .../Validators/BaseDataValidatorFactory.swift | 2 +- .../Common/View/SearchTriangularedView.swift | 13 +- fearless/Common/View/SymbolView.swift | 4 +- ...ft => BalanceRepositoryCacheWrapper.swift} | 32 +- .../EtherscanHistoryOperationFactory.swift | 4 +- .../Main/HistoryOperationFactory.swift | 2 + .../Main/OklinkHistoryOperationFactory.swift | 4 +- .../SubqueryHistoryOperationFactory.swift | 6 +- .../Main/TonHistoryOperationFactory.swift | 188 + .../Main/ZetaHistoryOperationFactory.swift | 2 +- .../ParachainHistoryOperationFactory.swift | 2 +- .../BlockExplorer/History/TonModels.swift | 669 + .../GiantsquidRewardOperationFactory.swift | 1 + .../Rewards/ReefRewardOperationFactory.swift | 1 + .../Rewards/RewardOperationFactory.swift | 2 +- .../CoreLayer/TonComponents/TonAccount.swift | 23 + .../CoreLayer/TonComponents/TonAddress.swift | 18 + .../AccountConfirmInteractor.swift | 1 + .../BaseAccountConfirmInteractor.swift | 1 + .../AccountCreatePresenter.swift | 2 +- .../AccountImportInteractor.swift | 1 + .../BaseAccountImportInteractor.swift | 6 +- .../Model/AccountImportRequest.swift | 6 +- .../AddAccount+AccountConfirmInteractor.swift | 1 + .../AddAccount+AccountImportInteractor.swift | 1 + .../Modules/AllDone/AllDonePresenter.swift | 53 +- .../AssetListSearchAssembly.swift | 1 + .../AssetManagementAssembly.swift | 28 +- .../AssetManagementProtocols.swift | 2 + .../AssetManagementRouter.swift | 1 + .../BackupCreatePasswordInteractor.swift | 7 +- .../BackupPasswordInteractor.swift | 1 + .../BackupWallet/BackupWalletAssembly.swift | 1 + .../BackupWallet/BackupWalletProtocols.swift | 2 + .../BackupWallet/BackupWalletRouter.swift | 1 + .../BackupWalletViewModelFactory.swift | 1 + .../BackupWalletName/WalletNameAssembly.swift | 1 + .../WalletNameInteractor.swift | 1 + .../WalletNamePresenter.swift | 1 + .../BalanceInfoDependencyContainer.swift | 3 +- .../BalanceLocksDetailInteractor.swift | 1 + .../Modules/Banners/BannersAssembly.swift | 1 + .../Modules/Banners/BannersInteractor.swift | 1 + .../ClaimCrowdloanRewardsInteractor.swift | 1 + .../CreateContactInteractor.swift | 1 + .../CrossChain/CrossChainAssembly.swift | 3 +- .../CrossChain/CrossChainInteractor.swift | 1 + .../CrossChain/CrossChainPresenter.swift | 1 + .../CrossChain/CrossChainViewController.swift | 2 +- .../CrossChainConfirmationInteractor.swift | 1 + ...ossChainConfirmationViewModelFactory.swift | 8 +- .../CrossChainDepsContainer.swift | 20 +- .../CrowdloanContributionInteractor.swift | 1 + .../CrowdloanContributionConfirmData.swift | 1 + ...owdloanContributionConfirmInteractor.swift | 1 + ...rowdloanContributionConfirmProtocols.swift | 1 + ...wdloanContributionConfirmViewFactory.swift | 3 +- ...rowdloanContributionSetupViewFactory.swift | 3 +- .../CrowdloanListInteractor.swift | 1 + .../CrowdloansListInteractor+Protocols.swift | 1 + .../AccountExportPasswordInteractor.swift | 1 + fearless/Modules/Export/ExportFlow.swift | 26 +- .../ExportMnemonicInteractor.swift | 3 +- .../ExportMnemonicWireframe.swift | 1 + .../ExportMnemonicConfirmInteractor.swift | 1 + .../ExportMnemonicConfirmProtocols.swift | 1 + .../ExportMnemonicConfirmViewFactory.swift | 1 + .../ExportRestoreJsonInteractor.swift | 1 + .../GetPreinstalledWalletInteractor.swift | 1 + .../LiquidityPoolDetailsInteractor.swift | 2 + .../Resources/chains.json | 16859 ++++++++-------- ...LiquidityPoolRemoveLiquidityAssembly.swift | 6 +- ...quidityPoolRemoveLiquidityInteractor.swift | 1 + ...tyPoolRemoveLiquidityConfirmAssembly.swift | 6 +- .../LiquidityPoolSupplyAssembly.swift | 6 +- .../LiquidityPoolSupplyInteractor.swift | 1 + .../LiquidityPoolSupplyConfirmAssembly.swift | 6 +- ...LiquidityPoolSupplyConfirmInteractor.swift | 1 + ...vailableLiquidityPoolsListInteractor.swift | 1 + ...AvailableLiquidityPoolsListPresenter.swift | 1 + ...leLiquidityPoolsListViewModelFactory.swift | 1 + .../UserLiquidityPoolsListInteractor.swift | 2 + .../UserLiquidityPoolsListPresenter.swift | 1 + ...erLiquidityPoolsListViewModelFactory.swift | 1 + .../MainTabBar/MainTabBarProtocol.swift | 1 + .../MainTabBar/MainTabBarViewFactory.swift | 2 +- .../MainTabBar/MainTabBarWireframe.swift | 9 +- .../MainNftContainerAssembly.swift | 1 + .../MainNftContainerRouter.swift | 1 + .../NftCollectionProtocols.swift | 2 + .../NftCollection/NftCollectionRouter.swift | 1 + .../NFT/NftDetails/NftDetailsAssembly.swift | 1 + .../NFT/NftDetails/NftDetailsPresenter.swift | 1 + .../NFT/NftDetails/NftDetailsProtocols.swift | 2 + .../NFT/NftDetails/NftDetailsRouter.swift | 1 + .../Modules/NFT/NftSend/NftSendAssembly.swift | 10 +- .../NFT/NftSend/NftSendPresenter.swift | 1 + .../NFT/NftSend/NftSendViewController.swift | 2 +- .../NftSendConfirmAssembly.swift | 7 +- .../NftSendConfirmPresenter.swift | 1 + .../NetworkIssuesNotificationAssembly.swift | 1 + .../ChainAccount/ChainAccountInteractor.swift | 19 +- .../ChainAccount/ChainAccountPresenter.swift | 2 +- .../ChainAccountViewFactory.swift | 12 +- .../ChainAccount/ChainAccountWireframe.swift | 4 +- .../ChainAccountViewModelFactory.swift | 3 +- .../ChainAssetListAssembly.swift | 16 +- .../ChainAssetListDependencyContainer.swift | 1 + .../ChainAssetListInteractor.swift | 24 +- .../ChainAssetList/ChainAssetListRouter.swift | 4 +- .../WalletSendConfirmViewModelFactory.swift | 71 - .../WalletSendConfirmViewState.swift | 6 - .../WalletSendConfirmInteractor.swift | 178 - .../WalletSendConfirmPresenter.swift | 394 - .../WalletSendConfirmProtocols.swift | 48 - .../WalletSendConfirmViewController.swift | 81 - .../WalletSendConfirmViewFactory.swift | 124 - .../Modules/Profile/ProfileWireframe.swift | 1 + .../ReceiveAndRequestAssetPresenter.swift | 9 +- .../SelectCurrencyAssembly.swift | 1 + .../SelectExportAccountRouter.swift | 1 + fearless/Modules/Send/SendAssembly.swift | 95 - .../Send/SendDependencyContainer.swift | 213 - fearless/Modules/Send/SendInteractor.swift | 316 - fearless/Modules/Send/SendPresenter.swift | 1258 -- fearless/Modules/Send/SendProtocols.swift | 119 - .../Send/ViewModel/SendViewModelFactory.swift | 41 - .../AnalyticsValidatorsInteractor.swift | 1 + .../AnalyticsValidatorsViewModelFactory.swift | 1 + .../ControllerAccountInteractor.swift | 1 + ...trollerAccountConfirmationInteractor.swift | 1 + .../Staking/Model/ElectedValidatorInfo.swift | 2 + .../Staking/Model/ExistingBonding.swift | 1 + .../Staking/Model/InitiatedBonding.swift | 1 + .../Staking/Model/RewardDestination.swift | 1 + .../Operations/IdentityOperationFactory.swift | 1 + .../Operations/SlashesOperationFactory.swift | 1 + .../ParachainCollatorOperationFactory.swift | 12 + .../RelaychainValidatorOperationFactory.swift | 63 +- ...ctValidatorsConfirmParachainStrategy.swift | 1 + ...tValidatorsConfirmPoolViewModelState.swift | 2 +- ...rsConfirmPoolInitiatedViewModelState.swift | 2 +- .../SelectValidatorsConfirmationModel.swift | 1 + ...lectValidatorsStartParachainStrategy.swift | 1 + .../Flow/Pool/ValidatorInfoPoolStrategy.swift | 2 + .../ValidatorInfoRelaychainStrategy.swift | 2 + .../ValidatorSearchPresenter.swift | 1 + .../YourValidatorListRelaychainStrategy.swift | 1 + .../StakingAmountViewFactory.swift | 3 +- .../StakingBalanceRelaychainStrategy.swift | 1 + ...akingBalanceRelaychainViewModelState.swift | 1 + .../StakingBondMoreViewFactory.swift | 3 +- ...ndMoreConfirmationRelaychainStrategy.swift | 1 + .../StakingMainRelaychainStrategy.swift | 1 + .../StakingMainInteractor+InputProtocol.swift | 1 + .../StakingMainInteractor+Subscription.swift | 3 +- .../States/NominatorState+Status.swift | 1 + .../States/ValidatorState+Status.swift | 1 + ...youtConfirmationPoolViewModelFactory.swift | 1 + ...ngPayoutConfirmationViewModelFactory.swift | 1 + ...PayoutConfirmationrelaychainStrategy.swift | 1 + ...onfirmationParachainViewModelFactory.swift | 1 + ...RebondConfirmationRelaychainStrategy.swift | 1 + ...nfirmationRelaychainViewModelFactory.swift | 1 + .../StakingRedeemRelaychainStrategy.swift | 1 + ...RedeemConfirmationRelaychainStrategy.swift | 1 + .../StakingRewardDestConfirmInteractor.swift | 1 + ...ingRewardDestConfirmViewModelFactory.swift | 1 + .../StakingRewardDestSetupInteractor.swift | 1 + ...akingUnbondConfirmRelaychainStrategy.swift | 1 + .../StakingPoolJoinConfigAssembly.swift | 3 +- .../StakingPoolCreateAssembly.swift | 3 +- .../StakingPoolCreateViewModelFactory.swift | 1 + .../StakingPoolMainAssembly.swift | 3 +- .../StakingPoolManagementAssembly.swift | 3 +- .../SwapTransactionViewModelFactory.swift | 1 + .../ConfirmTransferAssembly.swift | 50 + .../ConfirmTransferPresenter.swift | 201 + .../ConfirmTransferProtocols.swift | 25 + .../ConfirmTransferRouter.swift} | 5 +- .../ConfirmTransferViewController.swift | 85 + .../ConfirmTransferViewLayout.swift | 22 + .../Models}/WalletSendConfirmViewModel.swift | 0 .../WalletSendConfirmViewModelFactory.swift | 185 + .../WalletSendConfirmViewLayout.swift | 0 .../Transfer/BokoloTransferFlowUseCase.swift | 317 + .../EthereumTransferFlowUseCase.swift | 179 + .../Transfer/Models}/RecipientViewModel.swift | 2 +- .../Models}/SelectNetworkViewModel.swift | 0 .../Transfer/Models}/SendFlow.swift | 20 +- .../Models/SendViewModelFactory.swift | 130 + .../Transfer/Models}/TipViewModel.swift | 0 .../Transfer}/SendViewLayout.swift | 32 +- .../Transfer/SoraQrTransferFlowUseCase.swift | 176 + .../SubstrateTransferFlowUseCase.swift | 219 + .../Transfer/TonTransferFlowUseCase.swift | 237 + .../Transfer/Transfer/TransferAssembly.swift | 87 + .../Transfer/TransferFlowUseCase.swift | 204 + .../Transfer/TransferInteractor.swift | 237 + .../Transfer/Transfer/TransferPresenter.swift | 845 + .../Transfer/Transfer/TransferProtocols.swift | 53 + .../Transfer/TransferRouter.swift} | 54 +- .../Transfer/Transfer/TransferSendFlow.swift | 33 + .../Transfer/TransferViewController.swift} | 149 +- .../Transfer/TransferViewLayout.swift | 22 + .../SendDataValidatingFactory.swift | 37 +- ...tConnectConfirmationViewModelFactory.swift | 2 +- .../WalletConnectSessionViewModel.swift | 1 + .../ViewModels/WalletDetailsFlow.swift | 1 + .../WalletDetailsInteractor.swift | 3 +- .../WalletDetailsPresenter.swift | 6 + .../WalletMainContainerViewModelFactory.swift | 12 +- .../WalletMainContainerAssembly.swift | 1 + .../WalletMainContainerRouter.swift | 4 +- .../WalletOption/WalletOptionProtocols.swift | 2 + .../WalletOption/WalletOptionRouter.swift | 1 + .../WalletsManagmentPresenter.swift | 1 + .../WalletsManagmentProtocols.swift | 2 + .../WalletsManagmentViewLayout.swift | 1 + .../ConfirmTransferTests.swift | 16 + .../Modules/Transfer/TransferTests.swift | 16 + 308 files changed, 15913 insertions(+), 13192 deletions(-) create mode 100644 fearless/ApplicationLayer/ServiceAssembly.swift create mode 100644 fearless/ApplicationLayer/Services/Balance/AccountInfoRemoteService.swift rename fearless/ApplicationLayer/Services/Balance/{AccountInfo => }/EthereumRemoteBalanceFetching.swift (76%) rename fearless/ApplicationLayer/Services/Balance/{RemoteSubscription/AccountInfoRemoteService.swift => SubstrateRemoteBalanceFetching.swift} (70%) create mode 100644 fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift create mode 100644 fearless/ApplicationLayer/Services/Models/TonConnectConfiguration.swift create mode 100644 fearless/ApplicationLayer/Services/Models/TonConnectManifest.swift create mode 100644 fearless/ApplicationLayer/Services/Models/TonConnectParameters.swift create mode 100644 fearless/ApplicationLayer/TonJettonInjector.swift create mode 100644 fearless/Common/Extension/Task.swift create mode 100644 fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift delete mode 100644 fearless/Common/Helpers/AddressConversion.swift delete mode 100644 fearless/Common/Helpers/ChainAccountFetching.swift delete mode 100644 fearless/Common/Model/ChainRegistry/MetaAccountModel.swift delete mode 100644 fearless/Common/Model/DisplayAddress.swift create mode 100644 fearless/Common/Services/ChainRegistry/ConnectionPool/TonAPIAssembly.swift delete mode 100644 fearless/Common/Storage/EntityToModel/MetaAccountMapper.swift create mode 100644 fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents rename fearless/CoreLayer/CoreComponents/Repository/{EthereumBalanceRepositoryCacheWrapper.swift => BalanceRepositoryCacheWrapper.swift} (59%) create mode 100644 fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/TonHistoryOperationFactory.swift create mode 100644 fearless/CoreLayer/OperationFactory/BlockExplorer/History/TonModels.swift create mode 100644 fearless/CoreLayer/TonComponents/TonAccount.swift create mode 100644 fearless/CoreLayer/TonComponents/TonAddress.swift delete mode 100644 fearless/Modules/NewWallet/WalletSendConfirm/ViewModels/WalletSendConfirmViewModelFactory.swift delete mode 100644 fearless/Modules/NewWallet/WalletSendConfirm/ViewModels/WalletSendConfirmViewState.swift delete mode 100644 fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmInteractor.swift delete mode 100644 fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmPresenter.swift delete mode 100644 fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmProtocols.swift delete mode 100644 fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmViewController.swift delete mode 100644 fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmViewFactory.swift delete mode 100644 fearless/Modules/Send/SendAssembly.swift delete mode 100644 fearless/Modules/Send/SendDependencyContainer.swift delete mode 100644 fearless/Modules/Send/SendInteractor.swift delete mode 100644 fearless/Modules/Send/SendPresenter.swift delete mode 100644 fearless/Modules/Send/SendProtocols.swift delete mode 100644 fearless/Modules/Send/ViewModel/SendViewModelFactory.swift create mode 100644 fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferAssembly.swift create mode 100644 fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferPresenter.swift create mode 100644 fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferProtocols.swift rename fearless/Modules/{NewWallet/WalletSendConfirm/WalletSendConfirmWireframe.swift => Transfer/ConfirmTransfer/ConfirmTransferRouter.swift} (91%) create mode 100644 fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferViewController.swift create mode 100644 fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferViewLayout.swift rename fearless/Modules/{NewWallet/WalletSendConfirm/ViewModels => Transfer/ConfirmTransfer/Models}/WalletSendConfirmViewModel.swift (100%) create mode 100644 fearless/Modules/Transfer/ConfirmTransfer/Models/WalletSendConfirmViewModelFactory.swift rename fearless/Modules/{NewWallet/WalletSendConfirm => Transfer/ConfirmTransfer}/WalletSendConfirmViewLayout.swift (100%) create mode 100644 fearless/Modules/Transfer/Transfer/BokoloTransferFlowUseCase.swift create mode 100644 fearless/Modules/Transfer/Transfer/EthereumTransferFlowUseCase.swift rename fearless/Modules/{Send/ViewModel => Transfer/Transfer/Models}/RecipientViewModel.swift (84%) rename fearless/Modules/{Send/ViewModel => Transfer/Transfer/Models}/SelectNetworkViewModel.swift (100%) rename fearless/Modules/{Send => Transfer/Transfer/Models}/SendFlow.swift (69%) create mode 100644 fearless/Modules/Transfer/Transfer/Models/SendViewModelFactory.swift rename fearless/Modules/{Send/ViewModel => Transfer/Transfer/Models}/TipViewModel.swift (100%) rename fearless/Modules/{Send => Transfer/Transfer}/SendViewLayout.swift (88%) create mode 100644 fearless/Modules/Transfer/Transfer/SoraQrTransferFlowUseCase.swift create mode 100644 fearless/Modules/Transfer/Transfer/SubstrateTransferFlowUseCase.swift create mode 100644 fearless/Modules/Transfer/Transfer/TonTransferFlowUseCase.swift create mode 100644 fearless/Modules/Transfer/Transfer/TransferAssembly.swift create mode 100644 fearless/Modules/Transfer/Transfer/TransferFlowUseCase.swift create mode 100644 fearless/Modules/Transfer/Transfer/TransferInteractor.swift create mode 100644 fearless/Modules/Transfer/Transfer/TransferPresenter.swift create mode 100644 fearless/Modules/Transfer/Transfer/TransferProtocols.swift rename fearless/Modules/{Send/SendRouter.swift => Transfer/Transfer/TransferRouter.swift} (89%) create mode 100644 fearless/Modules/Transfer/Transfer/TransferSendFlow.swift rename fearless/Modules/{Send/SendViewController.swift => Transfer/Transfer/TransferViewController.swift} (68%) create mode 100644 fearless/Modules/Transfer/Transfer/TransferViewLayout.swift rename fearless/Modules/{Send => Transfer}/Validators/SendDataValidatingFactory.swift (86%) create mode 100644 fearlessTests/Modules/ConfirmTransfer/ConfirmTransferTests.swift create mode 100644 fearlessTests/Modules/Transfer/TransferTests.swift diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index 97062d3804..2d6179f174 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 52; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -15,7 +15,6 @@ 04F9CF04588676D79EFB8570 /* ClaimCrowdloanRewardsAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBAA28C551344F1457D76DD5 /* ClaimCrowdloanRewardsAssembly.swift */; }; 054C4BCDEC29ED5F74A36E8B /* ExportMnemonicPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61EBE466BDCF77E65FDCDF81 /* ExportMnemonicPresenter.swift */; }; 05A6BB4F8F0912404A4D8413 /* WalletTransactionDetailsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82FD4E0BB1ABA364AFD2E891 /* WalletTransactionDetailsPresenter.swift */; }; - 06197BBE4299DC971C42DB92 /* WalletSendConfirmPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A687FBDA0912F8727CE0D81 /* WalletSendConfirmPresenter.swift */; }; 0678271BE1BA5BBC084F478A /* RecommendedValidatorListWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57C624E71FCE0FFF8EAD5BA9 /* RecommendedValidatorListWireframe.swift */; }; 06826AA6DBAEA5BBF45BB5CA /* LiquidityPoolSupplyConfirmInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4594686D10DBB7627B8C9A12 /* LiquidityPoolSupplyConfirmInteractor.swift */; }; 069C7D4C9648112115B90234 /* NftSendConfirmProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20EB6F377A05C11850066B9F /* NftSendConfirmProtocols.swift */; }; @@ -50,6 +49,13 @@ 070CDD8A2ACBE59700F3F20A /* ReceiveAndRequestAssetAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 070CDD812ACBE59700F3F20A /* ReceiveAndRequestAssetAssembly.swift */; }; 070CDD8B2ACBE59700F3F20A /* ReceiveAndRequestAssetProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 070CDD822ACBE59700F3F20A /* ReceiveAndRequestAssetProtocols.swift */; }; 070CDD8C2ACBE59700F3F20A /* ReceiveAndRequestAssetInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 070CDD832ACBE59700F3F20A /* ReceiveAndRequestAssetInteractor.swift */; }; + 070ED7D22C3E7DE100DF4098 /* TonSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 070ED7D12C3E7DE100DF4098 /* TonSwift */; }; + 070ED7DB2C45321300DF4098 /* TonRemoteBalanceFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = 070ED7DA2C45321300DF4098 /* TonRemoteBalanceFetching.swift */; }; + 070ED7EB2C4543D900DF4098 /* EventSource in Frameworks */ = {isa = PBXBuildFile; productRef = 070ED7EA2C4543D900DF4098 /* EventSource */; }; + 070ED7ED2C4543D900DF4098 /* StreamURLSessionTransport in Frameworks */ = {isa = PBXBuildFile; productRef = 070ED7EC2C4543D900DF4098 /* StreamURLSessionTransport */; }; + 070ED7EF2C4543D900DF4098 /* TonAPI in Frameworks */ = {isa = PBXBuildFile; productRef = 070ED7EE2C4543D900DF4098 /* TonAPI */; }; + 070ED7F12C4543D900DF4098 /* TonStreamingAPI in Frameworks */ = {isa = PBXBuildFile; productRef = 070ED7F02C4543D900DF4098 /* TonStreamingAPI */; }; + 070ED7F62C454A1500DF4098 /* TonAPIAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 070ED7F52C454A1500DF4098 /* TonAPIAssembly.swift */; }; 0713097D28C63893002B17D0 /* ScamSyncService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0713097C28C63893002B17D0 /* ScamSyncService.swift */; }; 0713097F28C6F60D002B17D0 /* ScamSyncServiceFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0713097E28C6F60D002B17D0 /* ScamSyncServiceFactory.swift */; }; 0713098128C6F7BB002B17D0 /* CDScamInfo+CoreDataCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0713098028C6F7BB002B17D0 /* CDScamInfo+CoreDataCodable.swift */; }; @@ -59,6 +65,12 @@ 0716C85028880304004C8CB1 /* UIResponder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0716C84E28880304004C8CB1 /* UIResponder.swift */; }; 071BC67529274F47007685D1 /* HashCopiedEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071BC67429274F47007685D1 /* HashCopiedEvent.swift */; }; 071BC677292B21CC007685D1 /* UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071BC676292B21CC007685D1 /* UIImage.swift */; }; + 0723EDA02C48E37400880620 /* SoraQrTransferFlowUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0723ED9F2C48E37400880620 /* SoraQrTransferFlowUseCase.swift */; }; + 0723EDA22C48F2C900880620 /* TransferSendFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0723EDA12C48F2C900880620 /* TransferSendFlow.swift */; }; + 0723EDA42C49369D00880620 /* TransferFlowUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0723EDA32C49369D00880620 /* TransferFlowUseCase.swift */; }; + 0723EDA62C50B87B00880620 /* BokoloTransferFlowUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0723EDA52C50B87B00880620 /* BokoloTransferFlowUseCase.swift */; }; + 0723EDA82C50D6FE00880620 /* SubstrateTransferFlowUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0723EDA72C50D6FD00880620 /* SubstrateTransferFlowUseCase.swift */; }; + 0723EDB22C50FAD900880620 /* EthereumTransferFlowUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0723EDB12C50FAD900880620 /* EthereumTransferFlowUseCase.swift */; }; 0726FFAC2AC4399C00336D76 /* WalletConnectPolkadorSigner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0726FFAA2AC4399C00336D76 /* WalletConnectPolkadorSigner.swift */; }; 0726FFAD2AC4399C00336D76 /* WalletConnectPolkadotParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0726FFAB2AC4399C00336D76 /* WalletConnectPolkadotParser.swift */; }; 0726FFB02AC439DE00336D76 /* WalletConnectExtrinsic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0726FFAE2AC439DE00336D76 /* WalletConnectExtrinsic.swift */; }; @@ -71,6 +83,9 @@ 07349F3228FE5EEB00A802B9 /* SwipeCellButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07349F3128FE5EEB00A802B9 /* SwipeCellButton.swift */; }; 073B34BC2AE8CC4500DC5106 /* WalletConnectDisconnectService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 073B34BB2AE8CC4500DC5106 /* WalletConnectDisconnectService.swift */; }; 073B34BF2AE91FE600DC5106 /* WalletConnectProposalDataValidating.swift in Sources */ = {isa = PBXBuildFile; fileRef = 073B34BE2AE91FE600DC5106 /* WalletConnectProposalDataValidating.swift */; }; + 073DE30C2C5B99D6003B4990 /* TonHistoryOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 073DE30B2C5B99D6003B4990 /* TonHistoryOperationFactory.swift */; }; + 073DE30F2C5BA35B003B4990 /* TonModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 073DE30E2C5BA35B003B4990 /* TonModels.swift */; }; + 073DE3112C5BB783003B4990 /* AssetTransactionData+Ton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 073DE3102C5BB783003B4990 /* AssetTransactionData+Ton.swift */; }; 074EB7AA290B9E20000A2A6A /* ApplicationStatusAlertEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 074EB7A9290B9E20000A2A6A /* ApplicationStatusAlertEvent.swift */; }; 074EB7AD290B9F64000A2A6A /* AddressCopiedEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 074EB7AC290B9F64000A2A6A /* AddressCopiedEvent.swift */; }; 074EB7AF290BA057000A2A6A /* ConnectionOfflineEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 074EB7AE290BA056000A2A6A /* ConnectionOfflineEvent.swift */; }; @@ -108,16 +123,21 @@ 076D9D6229506CFA002762E3 /* polkaswapSettings.json in Resources */ = {isa = PBXBuildFile; fileRef = 076D9D6129506CE3002762E3 /* polkaswapSettings.json */; }; 076D9D6629507B39002762E3 /* PolkaswapSettingsFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 076D9D6529507B39002762E3 /* PolkaswapSettingsFactory.swift */; }; 076D9D6829509F1C002762E3 /* PolkaswapSettingMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 076D9D6729509F1C002762E3 /* PolkaswapSettingMapper.swift */; }; + 0778A12A2C5763D6008A1254 /* Task.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0778A1292C5763D6008A1254 /* Task.swift */; }; + 0778A12E2C58D0F2008A1254 /* TonJettonInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0778A12D2C58D0F2008A1254 /* TonJettonInjector.swift */; }; 0783EEAE2AE1342F006476F4 /* UIColor+Gradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0783EEAD2AE1342F006476F4 /* UIColor+Gradient.swift */; }; 0783EEB02AE1867A006476F4 /* WalletConnectEthereumTransferService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0783EEAF2AE1867A006476F4 /* WalletConnectEthereumTransferService.swift */; }; 0783EEB22AE193F3006476F4 /* BokoloConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0783EEB12AE193F3006476F4 /* BokoloConstants.swift */; }; 078E34C128058B9D00DF187A /* DocumentType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 078E34C028058B9D00DF187A /* DocumentType.swift */; }; 078E34C328058BFD00DF187A /* DocumentPickerPresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 078E34C228058BFD00DF187A /* DocumentPickerPresentable.swift */; }; 078FD51027F310FE00F031E6 /* StartViewHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 078FD50F27F310FE00F031E6 /* StartViewHelper.swift */; }; + 07A949842C466E8C00613B9D /* SubstrateRemoteBalanceFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07A949832C466E8C00613B9D /* SubstrateRemoteBalanceFetching.swift */; }; + 07A949872C47C39800613B9D /* ServiceAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07A949862C47C39800613B9D /* ServiceAssembly.swift */; }; 07AC51132AD8040C000970B8 /* XorlessTransfer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07AC51122AD8040C000970B8 /* XorlessTransfer.swift */; }; 07B018D128C7135400E05510 /* ScamInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07B018D028C7135400E05510 /* ScamInfo.swift */; }; 07B018D328C714B300E05510 /* ScamServiceOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07B018D228C714B300E05510 /* ScamServiceOperationFactory.swift */; }; 07B018DB28C9D66300E05510 /* ScamWarningExpandableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07B018DA28C9D66300E05510 /* ScamWarningExpandableView.swift */; }; + 07B56CFA2C520B5B00E924AA /* TonTransferFlowUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07B56CF92C520B5B00E924AA /* TonTransferFlowUseCase.swift */; }; 07B6BC7A28B78E8000621864 /* SheetAlertPresentableStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07B6BC7928B78E8000621864 /* SheetAlertPresentableStyle.swift */; }; 07B6BC7C28B875D800621864 /* UIControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07B6BC7B28B875D800621864 /* UIControl.swift */; }; 07B6BC7F28BC71DB00621864 /* NetworkIssuesNotificationViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07B6BC7E28BC71DB00621864 /* NetworkIssuesNotificationViewModelFactory.swift */; }; @@ -205,7 +225,9 @@ 07FBC9E228BE24E900ED65B4 /* MissingAccountFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07FBC9E128BE24E900ED65B4 /* MissingAccountFetcher.swift */; }; 07FBC9E628BE29C900ED65B4 /* ChainIssuesCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07FBC9E528BE29C900ED65B4 /* ChainIssuesCenter.swift */; }; 07FD95C027F4384900F07064 /* UIFont+dynamicSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07FD95BF27F4384900F07064 /* UIFont+dynamicSize.swift */; }; + 084DDCBC4CE8438770EB48DE /* ConfirmTransferRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD1C635488F941373CDBE377 /* ConfirmTransferRouter.swift */; }; 093C10C88C0A209158EA75D1 /* UsernameSetupTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C5EF68BE0E29D2305CB7337 /* UsernameSetupTests.swift */; }; + 0A2BBD1BB87EBB75BBD919F7 /* ConfirmTransferViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 537D889708D5E1615C662992 /* ConfirmTransferViewLayout.swift */; }; 0A4820F04EC9DA9DD515EC3A /* MainNftContainerRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C1CA1EF5BF1151E0DFB298C /* MainNftContainerRouter.swift */; }; 0AAFEFA17F249F4BEF051F6B /* ControllerAccountConfirmationPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54FB887490A8B33890B4E0E4 /* ControllerAccountConfirmationPresenter.swift */; }; 0B2B9C6E2BA2E924D6A54F4B /* CrowdloanListInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4E78D69E8EBC3EB4D01F8EF /* CrowdloanListInteractor.swift */; }; @@ -213,6 +235,7 @@ 0B6D0B65AC659C6239B1C496 /* ClaimCrowdloanRewardsProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7219B81CEA13CD60BD8FAFE /* ClaimCrowdloanRewardsProtocols.swift */; }; 0BD66304BF73EBDFE1857380 /* WarningAlertPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BCAF4A12D0F22D3C9035A1A /* WarningAlertPresenter.swift */; }; 0BE766EBE26CC38D305BA69D /* ClaimCrowdloanRewardsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4774F00EDBB28F374797637 /* ClaimCrowdloanRewardsInteractor.swift */; }; + 0C154A425E0B8175F0A3FCC4 /* ConfirmTransferTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E29D11C365629B959F44DFA /* ConfirmTransferTests.swift */; }; 0C2AA829B5CB89B39E0FA95E /* CrowdloanContributionConfirmProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF01941105BCD02536538362 /* CrowdloanContributionConfirmProtocols.swift */; }; 0C4F3F7AB14F4851C12974B6 /* WarningAlertProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 446B4A7184327D64AE8F0610 /* WarningAlertProtocols.swift */; }; 0CA307BC2F570941CD22C9AA /* ExportMnemonicConfirmViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF4688AF0658F8BB7A90C2BE /* ExportMnemonicConfirmViewFactory.swift */; }; @@ -220,7 +243,6 @@ 0D05777212DFA8CFC5A692E3 /* WalletsManagmentViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2970944BE4B937A39E07C608 /* WalletsManagmentViewController.swift */; }; 0D6C27413F73190438306EC1 /* NetworkInfoInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8D61B74FE9C5199FD0AEBC /* NetworkInfoInteractor.swift */; }; 0D7DDA00BBF1D0CFD9A26306 /* LiquidityPoolSupplyProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FB7091F743BBACC09553298 /* LiquidityPoolSupplyProtocols.swift */; }; - 0DAA7B1B7DF576C761DEF046 /* WalletSendConfirmWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A22A2EB487E282DCA93C676 /* WalletSendConfirmWireframe.swift */; }; 0DAEDA34F5BCECE5BD64DF26 /* WalletTransactionHistoryWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B3B14C046584AAAF483715F /* WalletTransactionHistoryWireframe.swift */; }; 0E30EB59B860DE611FF0DC7D /* NftCollectionRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92E3687D398A32597A888B82 /* NftCollectionRouter.swift */; }; 0E6C2939AFB3D125C760D5A0 /* CrowdloanContributionSetupProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7484BA696561262926D87FE5 /* CrowdloanContributionSetupProtocols.swift */; }; @@ -244,6 +266,7 @@ 180B223378B806EB6C0DC7F0 /* SelectedValidatorListFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0033D320A9033F5200279087 /* SelectedValidatorListFlow.swift */; }; 1870655BC8B762AA57717EC6 /* PolkaswapTransaktionSettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F04623D6CE10669D914CA2F /* PolkaswapTransaktionSettingsViewController.swift */; }; 19A29027666EB5388CBFAD61 /* StakingRewardDetailsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D613E20E96E7BA5B8F4B9799 /* StakingRewardDetailsInteractor.swift */; }; + 19C7939FFE0178C1A7E68631 /* TransferPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0524F9F46A9D77159B2B14FE /* TransferPresenter.swift */; }; 1A2A55DCA9403CCE2A98E93E /* WalletTransactionDetailsViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1211B723BB656770C4EA5BC2 /* WalletTransactionDetailsViewFactory.swift */; }; 1BC06B323C5E5DE1B5A62CB4 /* PolkaswapTransaktionSettingsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD730FFB75B5D76EA939042D /* PolkaswapTransaktionSettingsInteractor.swift */; }; 1BEADE77C6236CB3BF719A47 /* CrowdloanContributionSetupViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C96E41F878ED0A0A6F469D3 /* CrowdloanContributionSetupViewFactory.swift */; }; @@ -269,6 +292,7 @@ 257AF452E202DC6B8A576559 /* StakingPoolCreateConfirmViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5555FA26DF1BD5483F7544B5 /* StakingPoolCreateConfirmViewLayout.swift */; }; 25A837D8E6138EDAFA9240CD /* WalletsManagmentViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0960D0A04ACDF443B5C5E185 /* WalletsManagmentViewLayout.swift */; }; 2624D8CEBB61A185A5E8B994 /* AccountExportPasswordViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6DE4840EBB9892A5E35FB443 /* AccountExportPasswordViewController.xib */; }; + 26F0F2A52C7EFD38CBC2F1C3 /* ConfirmTransferAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BD8F497D1380B608E046658 /* ConfirmTransferAssembly.swift */; }; 270C21973CB61F0BF3D2D1E3 /* CrowdloanListProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02ACCC85B2CCF3D9392CA9B4 /* CrowdloanListProtocols.swift */; }; 272C9E2101FEE14CE4A79249 /* ChainAccountBalanceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61BE50276590067C81F4761F /* ChainAccountBalanceTests.swift */; }; 278F5341DC043EBED7C0733D /* CrowdloanListViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = E70C8A9C6BF8AE46CAE1CB61 /* CrowdloanListViewFactory.swift */; }; @@ -290,6 +314,7 @@ 2C3124A5EBC1AD57C01EEA17 /* SelectValidatorsStartInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEFED3DAA18BCEF0BFA15728 /* SelectValidatorsStartInteractor.swift */; }; 2CF2F93AF862CF54FC46B560 /* PurchaseInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91D44421CCD7AD220A05CD0E /* PurchaseInteractor.swift */; }; 2CFEBF8B7B9C820D1A80B60B /* StakingPoolCreateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A6A52B8A4D734D5BCADE355 /* StakingPoolCreateTests.swift */; }; + 2DEDA5E3970B445CBBE2F1D1 /* TransferAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = A90D38E873CA7EBD23FC14B5 /* TransferAssembly.swift */; }; 2E57C70427E8AB3D00AF075A /* CrowdloanWikiTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E57C70327E8AB3D00AF075A /* CrowdloanWikiTableViewCell.swift */; }; 2E57C70B27E9EC0F00AF075A /* ProfileViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E57C70A27E9EC0E00AF075A /* ProfileViewState.swift */; }; 2E57C70D27E9ED5400AF075A /* ProfileViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E57C70C27E9ED5300AF075A /* ProfileViewModel.swift */; }; @@ -299,6 +324,7 @@ 306E249AD210DFAA8C03D435 /* AllDonePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A654294D46A966EE99764F /* AllDonePresenter.swift */; }; 30C7FD6C58F1ED50AFB456FD /* LiquidityPoolRemoveLiquidityAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = C61BE0DFC48282DFDBB820C9 /* LiquidityPoolRemoveLiquidityAssembly.swift */; }; 3133215566E418F40844A60E /* ExportMnemonicWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ACA4A5B186EE6D40BFE9D66 /* ExportMnemonicWireframe.swift */; }; + 3152634A9E3FBF5E463CF56E /* ConfirmTransferViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20FAD50119EE0DBA135AC9A7 /* ConfirmTransferViewController.swift */; }; 31E260D462BF33CFCDFEBA6C /* AnalyticsRewardDetailsProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE294DDEAB7902D7CE1F1BA1 /* AnalyticsRewardDetailsProtocols.swift */; }; 3229E306230161AA99B14BDD /* StakingRewardPayoutsViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 336395FFC4B2104A9651A2DE /* StakingRewardPayoutsViewFactory.swift */; }; 3245549CB47E65B28A2C01CD /* WalletOptionInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326260E461C031624CDB62BA /* WalletOptionInteractor.swift */; }; @@ -389,6 +415,7 @@ 5E8504507116E0177D70314B /* LiquidityPoolSupplyViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 438E01C5C877428168E9F3F8 /* LiquidityPoolSupplyViewLayout.swift */; }; 5E9402965D385607E04156DC /* NftDetailsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32DEDC1A0ED429DD43EC621E /* NftDetailsPresenter.swift */; }; 5F5825D27863628412B672CA /* NftSendConfirmRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803E71983CD61FFBFE98DA7A /* NftSendConfirmRouter.swift */; }; + 604162EC2B721993E397E6B0 /* ConfirmTransferPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DD32F4D6D8DABF991E09C7C /* ConfirmTransferPresenter.swift */; }; 607699C7CEEDA3598613DCA0 /* NetworkInfoViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EDA19BC3280F1838C687EC8 /* NetworkInfoViewFactory.swift */; }; 60C22E112CA857A2EA5A129E /* LiquidityPoolsOverviewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC76E7D99A98423180BC572F /* LiquidityPoolsOverviewTests.swift */; }; 61B5A91FBEF633FCC8D965B6 /* LiquidityPoolsOverviewAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC863A9CE29C63B740C6E4D9 /* LiquidityPoolsOverviewAssembly.swift */; }; @@ -425,6 +452,7 @@ 6FAC7E8F0DACB3F2AA0BE825 /* LiquidityPoolSupplyConfirmProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCCD9A6B753FD1510D3DD311 /* LiquidityPoolSupplyConfirmProtocols.swift */; }; 705F5EEDD70D6941D138D3F9 /* ContactsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E4DF941DE0EDEF99A843A9D /* ContactsInteractor.swift */; }; 709ABA5647D7DFF36EBCE73E /* WarningAlertViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4B7FA75791904AF541BE380 /* WarningAlertViewFactory.swift */; }; + 709EF639857F35CA2EF69D06 /* TransferViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E8E30C194FD07DC9ECCBE74 /* TransferViewController.swift */; }; 70EAB410A0106F22C2183847 /* StakingUnbondSetupTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61E1CD099F7C30ABE0E8A001 /* StakingUnbondSetupTests.swift */; }; 719B429B58B9A0551381F92F /* FiltersViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECBF10B7D4707E4D7D6387CF /* FiltersViewFactory.swift */; }; 7258EEAE786D51F57ECE1E4F /* NodeSelectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 605CA30BCCB5F23C64E6D6EC /* NodeSelectionViewController.swift */; }; @@ -447,6 +475,7 @@ 78E3117D66E60D72F2501F09 /* NftSendConfirmViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86182A9129A59C6753C4D465 /* NftSendConfirmViewLayout.swift */; }; 794029A3A00B085D6CFE3FF1 /* StakingUnbondConfirmFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40B10454C90325D80CCBEC60 /* StakingUnbondConfirmFlow.swift */; }; 79BB283470BB561FA646A235 /* WalletTransactionDetailsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB67BB02A5FD525C8ACA5521 /* WalletTransactionDetailsTests.swift */; }; + 7AB0A0585C89ED136B07A995 /* TransferInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8647FEB1772B20938D9E8D63 /* TransferInteractor.swift */; }; 7B7B34D621DC2FE76E0F5DB4 /* NetworkIssuesNotificationRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3211D250E4167C916B8B9D6A /* NetworkIssuesNotificationRouter.swift */; }; 7BC6FB48B9B4EC790923FF1E /* StakingPoolCreateRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6897929D244B5C29E3FD0727 /* StakingPoolCreateRouter.swift */; }; 7BEEF481CD12F404AD746FB5 /* WalletChainAccountDashboardViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5408FF305E4A49A683BC43E0 /* WalletChainAccountDashboardViewLayout.swift */; }; @@ -517,8 +546,6 @@ 841937872544772F00CFA50C /* animatedBg.gif in Resources */ = {isa = PBXBuildFile; fileRef = 841937862544772F00CFA50C /* animatedBg.gif */; }; 841AAC2126F6860B00F0A25E /* AssetBalanceFormatterFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841AAC2026F6860B00F0A25E /* AssetBalanceFormatterFactory.swift */; }; 841AAC2326F6879900F0A25E /* AssetBalanceDisplayInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841AAC2226F6879900F0A25E /* AssetBalanceDisplayInfo.swift */; }; - 841AAC2526F692EF00F0A25E /* AddressConversion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841AAC2426F692EF00F0A25E /* AddressConversion.swift */; }; - 841AAC2726F6A2A500F0A25E /* ChainAccountFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841AAC2626F6A2A500F0A25E /* ChainAccountFetching.swift */; }; 841AAC2D26F7315300F0A25E /* CrowdloanRemoteSubscriptionService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841AAC2C26F7315300F0A25E /* CrowdloanRemoteSubscriptionService.swift */; }; 841AAC2F26F73E0C00F0A25E /* LocalStorageKeyFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841AAC2E26F73E0C00F0A25E /* LocalStorageKeyFactory.swift */; }; 841B45292603D91800C08693 /* EraValidatorsServiceStub.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841B45282603D91800C08693 /* EraValidatorsServiceStub.swift */; }; @@ -719,8 +746,6 @@ 84585A31251C0B9300390F7A /* NetworkInfoMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84585A30251C0B9300390F7A /* NetworkInfoMode.swift */; }; 845B821526EF657700D25C72 /* PersistentValueSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845B821426EF657700D25C72 /* PersistentValueSettings.swift */; }; 845B821726EF7FED00D25C72 /* SelectedWalletSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845B821626EF7FED00D25C72 /* SelectedWalletSettings.swift */; }; - 845B821926EF808D00D25C72 /* MetaAccountMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845B821826EF808D00D25C72 /* MetaAccountMapper.swift */; }; - 845B821B26EF80BC00D25C72 /* MetaAccountModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845B821A26EF80BC00D25C72 /* MetaAccountModel.swift */; }; 845B821D26EF80DB00D25C72 /* ChainAccountModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845B821C26EF80DB00D25C72 /* ChainAccountModel.swift */; }; 845B821F26EF8E8900D25C72 /* ManagedMetaAccountModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845B821E26EF8E8900D25C72 /* ManagedMetaAccountModel.swift */; }; 845B822126EF8F1A00D25C72 /* ManagedMetaAccountMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845B822026EF8F1A00D25C72 /* ManagedMetaAccountMapper.swift */; }; @@ -842,7 +867,6 @@ 847119D5262EF95A00716580 /* PayoutInfoFactoryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 847119D4262EF95A00716580 /* PayoutInfoFactoryProtocol.swift */; }; 847119EB262EFF3800716580 /* ValidatorPayoutInfoFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 847119EA262EFF3800716580 /* ValidatorPayoutInfoFactory.swift */; }; 8471538D2653B29100CB91D8 /* ChangeRewardDestinationViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8471538C2653B29100CB91D8 /* ChangeRewardDestinationViewModelFactory.swift */; }; - 84729741260A9C13009B86D0 /* DisplayAddress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84729740260A9C13009B86D0 /* DisplayAddress.swift */; }; 8472974D260A9CDF009B86D0 /* SelectValidatorsConfirmationModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8472974C260A9CDF009B86D0 /* SelectValidatorsConfirmationModel.swift */; }; 84729758260AA519009B86D0 /* SelectValidatorsConfirmInteractorBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84729757260AA519009B86D0 /* SelectValidatorsConfirmInteractorBase.swift */; }; 8472975D260B1B71009B86D0 /* ExistingBonding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8472975C260B1B71009B86D0 /* ExistingBonding.swift */; }; @@ -1311,6 +1335,7 @@ 85547F698B551ACD387D84E2 /* SelectValidatorsStartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E62CD2831DCF0A2D5DBB08F /* SelectValidatorsStartViewController.swift */; }; 85A093F6055DDD2E2E9253F2 /* ControllerAccountProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = F829E7F8B39EE7D977001510 /* ControllerAccountProtocols.swift */; }; 85B1B7387F09A8405C4E688A /* WalletSendConfirmTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AF4258723E2FACBBA556D00 /* WalletSendConfirmTests.swift */; }; + 85E0298F05FF6D4B9F113E47 /* TransferRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA8C84B54C44C4D28D54B657 /* TransferRouter.swift */; }; 872DF7DE5A001DF5B8A4E288 /* StakingBondMoreConfirmationFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96BA5883C1103D3A2218D839 /* StakingBondMoreConfirmationFlow.swift */; }; 87C1FC2909A8360DDBA625E5 /* LiquidityPoolSupplyInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BA528679A82B9A327853804 /* LiquidityPoolSupplyInteractor.swift */; }; 885551F78A5926D16D5AF0CB /* ControllerAccountPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E5CB64B91B35804B3671456 /* ControllerAccountPresenter.swift */; }; @@ -1347,7 +1372,6 @@ 94EB0971EDA635A626CA8B72 /* StakingPoolCreateInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8D9DD27C76FE239728ED5F8 /* StakingPoolCreateInteractor.swift */; }; 9565BEB636E6D386B0C0FBE5 /* StakingPayoutConfirmationViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BE0492B98AB9C1540846B39 /* StakingPayoutConfirmationViewFactory.swift */; }; 9659B32D4622C8D9679298DF /* ChainSelectionViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = F15D1C78B2844216802DA000 /* ChainSelectionViewFactory.swift */; }; - 96B2C3B29C0EA1A068ED5FB1 /* WalletSendConfirmProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF834BF779244B8AF7746B04 /* WalletSendConfirmProtocols.swift */; }; 96EBE5F57C97C7A7A525E864 /* SwapTransactionDetailProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC265B5F209B038633AE0E3F /* SwapTransactionDetailProtocols.swift */; }; 982BB3FA25BA6AD5443B24C6 /* NetworkIssuesNotificationPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35EAD41DB1444DA38D8C65E2 /* NetworkIssuesNotificationPresenter.swift */; }; 991BF0BF6DD4D4243073E8C9 /* NftSendConfirmAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9C58C9D53A7EA34E5CB00C /* NftSendConfirmAssembly.swift */; }; @@ -1529,6 +1553,7 @@ B15D513381B7626AB90018F0 /* StakingPoolInfoInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C9F68A6BF3D3A6D8234 /* StakingPoolInfoInteractor.swift */; }; B1CCC5B7BF30F6ACA309B112 /* StakingRedeemViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB7F5F9B54BE4234C5682BDE /* StakingRedeemViewController.swift */; }; B2E3219218E3F54EEB7D5C3C /* NftSendViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0A0CC21B0CD2A47B9B28841 /* NftSendViewController.swift */; }; + B3329255AB6C6493CDA806D6 /* TransferViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75796C9C1AC23FDE8E1E31DB /* TransferViewLayout.swift */; }; B40863AA7377BFE5F8A30259 /* LiquidityPoolSupplyConfirmTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A43F0468DEBA7500C6B23AF /* LiquidityPoolSupplyConfirmTests.swift */; }; B478746C8342468ECACE3478 /* StakingRewardDetailsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D3BFF5C921FEB356E2C39A4 /* StakingRewardDetailsTests.swift */; }; B51AD1836313CE26F369ED3F /* CustomValidatorListWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D540DFC00C25D8F73CFDC3 /* CustomValidatorListWireframe.swift */; }; @@ -1540,7 +1565,6 @@ BA7AEE82627CFC0AFD69B299 /* RecommendedValidatorListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA2580363AC3E4A9CD40256E /* RecommendedValidatorListPresenter.swift */; }; BC2DF589C6623601C39EF8F4 /* LiquidityPoolSupplyPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31F848482B2AD7D6831B0CCE /* LiquidityPoolSupplyPresenter.swift */; }; BD571417BD18C711B76E1D62 /* ExportSeedWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B4C1B5D56DB69BA0AECF731 /* ExportSeedWireframe.swift */; }; - BDE80F08EBEE3B0C95598EA8 /* WalletSendConfirmInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAE152D16E6C78D297BFFC3C /* WalletSendConfirmInteractor.swift */; }; BE3F6213B26F35EB6324DBD8 /* ControllerAccountWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDB9EDB05686DF11958145E1 /* ControllerAccountWireframe.swift */; }; BE98780A37B6F68759D770EB /* WalletTransactionHistoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F8DF39247202A30B63F05DA /* WalletTransactionHistoryTests.swift */; }; BEA539EE97A287868FD8BE46 /* AssetSelectionViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9622C6C3102EF12BEE78D63D /* AssetSelectionViewFactory.swift */; }; @@ -1689,12 +1713,14 @@ D403B7725ED25E20A20F9D6A /* WalletMainContainerViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44FDDC470A6921DC2258939E /* WalletMainContainerViewLayout.swift */; }; D41CA684433AD861BEC2213B /* WalletTransactionHistoryViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE29083D5CE7EA0D886D069A /* WalletTransactionHistoryViewFactory.swift */; }; D565DB5ED3B8B4D9BCFB4C21 /* CustomValidatorListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14E3337CDD7C831AEAA4582F /* CustomValidatorListPresenter.swift */; }; + D5C25B13DB0180C0A78C2372 /* ConfirmTransferProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 759EAF04B9064529D6862A14 /* ConfirmTransferProtocols.swift */; }; D6511F7C3E55197F82AB552C /* RecommendedValidatorListViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE4AF0849E32E5B9C72E2ABB /* RecommendedValidatorListViewFactory.swift */; }; D83B47B07C0D40A327AC44F7 /* CustomValidatorListViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = F52B8815D6AF5E69B145D245 /* CustomValidatorListViewFactory.swift */; }; D8581E5440A19D977E17BFDE /* StakingAmountViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = D39D54DC9992CF9CB6699AA3 /* StakingAmountViewFactory.swift */; }; D886425A55425810AD070AB5 /* ControllerAccountConfirmationWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = C96C3B5ABF4A8124848EFD17 /* ControllerAccountConfirmationWireframe.swift */; }; D8C33C4064C3B2F30BB478A5 /* LiquidityPoolSupplyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C4CAC8978B0848DF5FD6FE /* LiquidityPoolSupplyTests.swift */; }; D9E803290BE797D889EA372D /* AssetSelectionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2655EE5CFAAD20C0FF59188 /* AssetSelectionTests.swift */; }; + D9FEC396410376629DEB9625 /* TransferProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD417B638E8EFD33EBDC91DF /* TransferProtocols.swift */; }; DA5B38EE4622B33AFCA11A50 /* WalletsManagmentPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41E19988955B1C159EDA2555 /* WalletsManagmentPresenter.swift */; }; DA62812C23210601F4ECF84D /* ContactsProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B06C949668CFFDE6F739CC0 /* ContactsProtocols.swift */; }; DAAD3A3FCBA0C0E613167EBF /* ContactsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AD3D74F8E0B0F097092FDD7 /* ContactsPresenter.swift */; }; @@ -1713,6 +1739,7 @@ DE9FA0FA5A6B685CBD593025 /* AllDoneInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C705CA1083C1EE58426D90CD /* AllDoneInteractor.swift */; }; DFD5EDA2F7C096DB3A5368E4 /* CustomValidatorListTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9A16451B21451996CAA31F8 /* CustomValidatorListTests.swift */; }; DFF0320CF3AA41142DEAC5F2 /* LiquidityPoolsOverviewInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6717FF1B7777400B62F028C3 /* LiquidityPoolsOverviewInteractor.swift */; }; + E01C6EA1C6DB699485EEA5F5 /* TransferTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7525F0A27140F3C058CA5B0C /* TransferTests.swift */; }; E14F809C3917EFA4B5388AC8 /* AccountConfirmViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = A14CA4551FCC2EBD078E2242 /* AccountConfirmViewFactory.swift */; }; E1772980B5A4EB33D1801204 /* PolkaswapAdjustmentViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25FF82C2FD912021A1F20876 /* PolkaswapAdjustmentViewLayout.swift */; }; E2645EB7614F4C7A60B48777 /* PolkaswapAdjustmentProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A9EBD3B7AEA5EF594DFEB49 /* PolkaswapAdjustmentProtocols.swift */; }; @@ -1730,7 +1757,6 @@ E6981A506AC931D30E85169E /* WalletOptionPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFD95EE4822A564C0D4D1CFE /* WalletOptionPresenter.swift */; }; E7CAD629FF0D4E97594F7A05 /* YourValidatorListInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B60728FCFBC8A9BE4C7B50B /* YourValidatorListInteractor.swift */; }; E8B8D3D290DC7057144559CE /* WalletChainAccountDashboardPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E83833EB33E51A12F96F83B /* WalletChainAccountDashboardPresenter.swift */; }; - EA16E259F0B0C1D3A6A1902A /* WalletSendConfirmViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF4A813A6FB09F9FE5891578 /* WalletSendConfirmViewController.swift */; }; EA8ECCD37FE5D6478018D3FC /* RecommendedValidatorListViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C0FA282377DCAB7C59ACFB6 /* RecommendedValidatorListViewController.xib */; }; EB544E8D26ABEE4ADE2F939F /* AnalyticsRewardDetailsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC0C84704B8876688E59FA58 /* AnalyticsRewardDetailsInteractor.swift */; }; EB5F587A71CCE1F0F86154CF /* ControllerAccountViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 002A29AE58EB53E915330490 /* ControllerAccountViewFactory.swift */; }; @@ -1859,7 +1885,6 @@ F4BDDCBE2657A57F005336BA /* TransferValidatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4BDDCBD2657A57F005336BA /* TransferValidatorTests.swift */; }; F4C086B826D10E3400716AEC /* UIRefreshControl+ProgramaticallyBeginRefresh.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4C086B726D10E3400716AEC /* UIRefreshControl+ProgramaticallyBeginRefresh.swift */; }; F4C086C726D1159E00716AEC /* SubqueryEraStakersInfoSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4C086C626D1159E00716AEC /* SubqueryEraStakersInfoSource.swift */; }; - F4CBA064CDCF0F6EEFE1DDA1 /* WalletSendConfirmViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12441689D2AF47D508D16CCF /* WalletSendConfirmViewFactory.swift */; }; F4D551A12643DD240002363F /* AccountSelectionPresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4D551A02643DD240002363F /* AccountSelectionPresentable.swift */; }; F4D6FF0E26B3DD6E002313AF /* AnalyticsRewardsProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4D6FF0D26B3DD6E002313AF /* AnalyticsRewardsProtocols.swift */; }; F4D6FF1326B3DDDF002313AF /* AnalyticsRewardsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4D6FF1226B3DDDF002313AF /* AnalyticsRewardsViewController.swift */; }; @@ -2212,7 +2237,6 @@ FA38C9A827607213005C5577 /* BaseService.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA38C9A727607213005C5577 /* BaseService.swift */; }; FA38C9C12761E68B005C5577 /* AccountViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA38C9C02761E68B005C5577 /* AccountViewModel.swift */; }; FA38C9C32761E77A005C5577 /* AccountViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA38C9C22761E77A005C5577 /* AccountViewModelFactory.swift */; }; - FA38C9CB276305A3005C5577 /* WalletSendConfirmViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA38C9CA276305A3005C5577 /* WalletSendConfirmViewState.swift */; }; FA38C9CD276305B6005C5577 /* WalletSendConfirmViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA38C9CC276305B6005C5577 /* WalletSendConfirmViewModel.swift */; }; FA38C9CF27634A18005C5577 /* WalletSendConfirmViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA38C9CE27634A18005C5577 /* WalletSendConfirmViewModelFactory.swift */; }; FA3F5B17281A790A00BEF03B /* StakingAmountFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA3F5B16281A790A00BEF03B /* StakingAmountFlow.swift */; }; @@ -2801,16 +2825,9 @@ FAC0BBD0291D0EB000E6F106 /* TipViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBB6291D0EAF00E6F106 /* TipViewModel.swift */; }; FAC0BBD1291D0EB000E6F106 /* RecipientViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBB7291D0EAF00E6F106 /* RecipientViewModel.swift */; }; FAC0BBD2291D0EB000E6F106 /* SelectNetworkViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBB8291D0EAF00E6F106 /* SelectNetworkViewModel.swift */; }; - FAC0BBD3291D0EB000E6F106 /* SendDependencyContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBB9291D0EAF00E6F106 /* SendDependencyContainer.swift */; }; - FAC0BBD4291D0EB000E6F106 /* SendPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBBA291D0EAF00E6F106 /* SendPresenter.swift */; }; - FAC0BBD5291D0EB000E6F106 /* SendProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBBB291D0EAF00E6F106 /* SendProtocols.swift */; }; FAC0BBD6291D0EB000E6F106 /* SendFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBBC291D0EAF00E6F106 /* SendFlow.swift */; }; FAC0BBD7291D0EB000E6F106 /* SendViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBBD291D0EAF00E6F106 /* SendViewLayout.swift */; }; - FAC0BBD8291D0EB000E6F106 /* SendAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBBE291D0EAF00E6F106 /* SendAssembly.swift */; }; - FAC0BBD9291D0EB000E6F106 /* SendViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBBF291D0EAF00E6F106 /* SendViewController.swift */; }; - FAC0BBDA291D0EB000E6F106 /* SendRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBC0291D0EAF00E6F106 /* SendRouter.swift */; }; FAC0BBDB291D0EB000E6F106 /* SendDataValidatingFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBC2291D0EAF00E6F106 /* SendDataValidatingFactory.swift */; }; - FAC0BBDC291D0EB000E6F106 /* SendInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBC3291D0EAF00E6F106 /* SendInteractor.swift */; }; FAC0BBDD291D0EB000E6F106 /* SelectAssetViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBC6291D0EB000E6F106 /* SelectAssetViewModelFactory.swift */; }; FAC0BBDE291D0EB000E6F106 /* SelectAssetAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBC7291D0EB000E6F106 /* SelectAssetAssembly.swift */; }; FAC0BBDF291D0EB000E6F106 /* SelectAssetRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBC8291D0EB000E6F106 /* SelectAssetRouter.swift */; }; @@ -3055,7 +3072,7 @@ FAF9C2B32AAF3FDF00A61D21 /* GetPreinstalledWalletViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF9C2AC2AAF3FDF00A61D21 /* GetPreinstalledWalletViewController.swift */; }; FAF9C2B42AAF3FDF00A61D21 /* GetPreinstalledWalletProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF9C2AD2AAF3FDF00A61D21 /* GetPreinstalledWalletProtocols.swift */; }; FAF9C2B72AAF3FF100A61D21 /* GetPreinstalledWalletTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF9C2B62AAF3FF100A61D21 /* GetPreinstalledWalletTests.swift */; }; - FAFB47D72ABD589C0008F8CA /* EthereumBalanceRepositoryCacheWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAFB47D62ABD589C0008F8CA /* EthereumBalanceRepositoryCacheWrapper.swift */; }; + FAFB47D72ABD589C0008F8CA /* BalanceRepositoryCacheWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAFB47D62ABD589C0008F8CA /* BalanceRepositoryCacheWrapper.swift */; }; FAFBEE81284621800036D08C /* SelectedValidatorListParachainViewModelState.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAFBEE80284621800036D08C /* SelectedValidatorListParachainViewModelState.swift */; }; FAFBEE83284621900036D08C /* SelectedValidatorListParachainViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAFBEE82284621900036D08C /* SelectedValidatorListParachainViewModelFactory.swift */; }; FAFDB2C329112A00003971FB /* SubstrateCallPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAFDB2C229112A00003971FB /* SubstrateCallPath.swift */; }; @@ -3155,6 +3172,7 @@ 04361405728BBC71AD2D014F /* WarningAlertInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WarningAlertInteractor.swift; sourceTree = ""; }; 04806331BF10F63A49326941 /* NetworkInfoWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkInfoWireframe.swift; sourceTree = ""; }; 04EF69DFE142600FF2708A13 /* ControllerAccountConfirmationViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountConfirmationViewController.swift; sourceTree = ""; }; + 0524F9F46A9D77159B2B14FE /* TransferPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TransferPresenter.swift; sourceTree = ""; }; 0533F9E531CDFB721D697769 /* YourValidatorListPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = YourValidatorListPresenter.swift; sourceTree = ""; }; 06F6B892F62579DE761073CA /* LiquidityPoolSupplyConfirmPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmPresenter.swift; sourceTree = ""; }; 0702B31429701759003519F5 /* AmountInputViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AmountInputViewModel.swift; sourceTree = ""; }; @@ -3188,6 +3206,10 @@ 070CDD812ACBE59700F3F20A /* ReceiveAndRequestAssetAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReceiveAndRequestAssetAssembly.swift; sourceTree = ""; }; 070CDD822ACBE59700F3F20A /* ReceiveAndRequestAssetProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReceiveAndRequestAssetProtocols.swift; sourceTree = ""; }; 070CDD832ACBE59700F3F20A /* ReceiveAndRequestAssetInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReceiveAndRequestAssetInteractor.swift; sourceTree = ""; }; + 070ED7D32C3E80E300DF4098 /* shared-features-spm */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = "shared-features-spm"; path = "../shared-features-spm"; sourceTree = ""; }; + 070ED7D62C3FBB8800DF4098 /* SubstrateDataModel_v8.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = SubstrateDataModel_v8.xcdatamodel; sourceTree = ""; }; + 070ED7DA2C45321300DF4098 /* TonRemoteBalanceFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonRemoteBalanceFetching.swift; sourceTree = ""; }; + 070ED7F52C454A1500DF4098 /* TonAPIAssembly.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonAPIAssembly.swift; sourceTree = ""; }; 0713097C28C63893002B17D0 /* ScamSyncService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScamSyncService.swift; sourceTree = ""; }; 0713097E28C6F60D002B17D0 /* ScamSyncServiceFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScamSyncServiceFactory.swift; sourceTree = ""; }; 0713098028C6F7BB002B17D0 /* CDScamInfo+CoreDataCodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CDScamInfo+CoreDataCodable.swift"; sourceTree = ""; }; @@ -3197,6 +3219,12 @@ 0716C84E28880304004C8CB1 /* UIResponder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIResponder.swift; sourceTree = ""; }; 071BC67429274F47007685D1 /* HashCopiedEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HashCopiedEvent.swift; sourceTree = ""; }; 071BC676292B21CC007685D1 /* UIImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIImage.swift; sourceTree = ""; }; + 0723ED9F2C48E37400880620 /* SoraQrTransferFlowUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoraQrTransferFlowUseCase.swift; sourceTree = ""; }; + 0723EDA12C48F2C900880620 /* TransferSendFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransferSendFlow.swift; sourceTree = ""; }; + 0723EDA32C49369D00880620 /* TransferFlowUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransferFlowUseCase.swift; sourceTree = ""; }; + 0723EDA52C50B87B00880620 /* BokoloTransferFlowUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BokoloTransferFlowUseCase.swift; sourceTree = ""; }; + 0723EDA72C50D6FD00880620 /* SubstrateTransferFlowUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubstrateTransferFlowUseCase.swift; sourceTree = ""; }; + 0723EDB12C50FAD900880620 /* EthereumTransferFlowUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EthereumTransferFlowUseCase.swift; sourceTree = ""; }; 0726FFAA2AC4399C00336D76 /* WalletConnectPolkadorSigner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletConnectPolkadorSigner.swift; sourceTree = ""; }; 0726FFAB2AC4399C00336D76 /* WalletConnectPolkadotParser.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletConnectPolkadotParser.swift; sourceTree = ""; }; 0726FFAE2AC439DE00336D76 /* WalletConnectExtrinsic.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletConnectExtrinsic.swift; sourceTree = ""; }; @@ -3209,6 +3237,9 @@ 07349F3128FE5EEB00A802B9 /* SwipeCellButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwipeCellButton.swift; sourceTree = ""; }; 073B34BB2AE8CC4500DC5106 /* WalletConnectDisconnectService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletConnectDisconnectService.swift; sourceTree = ""; }; 073B34BE2AE91FE600DC5106 /* WalletConnectProposalDataValidating.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletConnectProposalDataValidating.swift; sourceTree = ""; }; + 073DE30B2C5B99D6003B4990 /* TonHistoryOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonHistoryOperationFactory.swift; sourceTree = ""; }; + 073DE30E2C5BA35B003B4990 /* TonModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonModels.swift; sourceTree = ""; }; + 073DE3102C5BB783003B4990 /* AssetTransactionData+Ton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+Ton.swift"; sourceTree = ""; }; 074EB7A9290B9E20000A2A6A /* ApplicationStatusAlertEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationStatusAlertEvent.swift; sourceTree = ""; }; 074EB7AC290B9F64000A2A6A /* AddressCopiedEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddressCopiedEvent.swift; sourceTree = ""; }; 074EB7AE290BA056000A2A6A /* ConnectionOfflineEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectionOfflineEvent.swift; sourceTree = ""; }; @@ -3246,6 +3277,9 @@ 076D9D6129506CE3002762E3 /* polkaswapSettings.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = polkaswapSettings.json; sourceTree = ""; }; 076D9D6529507B39002762E3 /* PolkaswapSettingsFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PolkaswapSettingsFactory.swift; sourceTree = ""; }; 076D9D6729509F1C002762E3 /* PolkaswapSettingMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PolkaswapSettingMapper.swift; sourceTree = ""; }; + 0778A1292C5763D6008A1254 /* Task.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Task.swift; sourceTree = ""; }; + 0778A12B2C57C63D008A1254 /* ton-swift */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = "ton-swift"; path = "../DRadmir/ton-swift"; sourceTree = ""; }; + 0778A12D2C58D0F2008A1254 /* TonJettonInjector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonJettonInjector.swift; sourceTree = ""; }; 0783EEAD2AE1342F006476F4 /* UIColor+Gradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+Gradient.swift"; sourceTree = ""; }; 0783EEAF2AE1867A006476F4 /* WalletConnectEthereumTransferService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletConnectEthereumTransferService.swift; sourceTree = ""; }; 0783EEB12AE193F3006476F4 /* BokoloConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BokoloConstants.swift; sourceTree = ""; }; @@ -3255,10 +3289,13 @@ 07A4F5242B5004E60007C54A /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/InfoPlist.strings"; sourceTree = ""; }; 07A4F5252B5004E60007C54A /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/Localizable.strings"; sourceTree = ""; }; 07A4F5262B5004E60007C54A /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "pt-PT"; path = "pt-PT.lproj/Localizable.stringsdict"; sourceTree = ""; }; + 07A949832C466E8C00613B9D /* SubstrateRemoteBalanceFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubstrateRemoteBalanceFetching.swift; sourceTree = ""; }; + 07A949862C47C39800613B9D /* ServiceAssembly.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServiceAssembly.swift; sourceTree = ""; }; 07AC51122AD8040C000970B8 /* XorlessTransfer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XorlessTransfer.swift; sourceTree = ""; }; 07B018D028C7135400E05510 /* ScamInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScamInfo.swift; sourceTree = ""; }; 07B018D228C714B300E05510 /* ScamServiceOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScamServiceOperationFactory.swift; sourceTree = ""; }; 07B018DA28C9D66300E05510 /* ScamWarningExpandableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScamWarningExpandableView.swift; sourceTree = ""; }; + 07B56CF92C520B5B00E924AA /* TonTransferFlowUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonTransferFlowUseCase.swift; sourceTree = ""; }; 07B6BC7928B78E8000621864 /* SheetAlertPresentableStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SheetAlertPresentableStyle.swift; sourceTree = ""; }; 07B6BC7B28B875D800621864 /* UIControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIControl.swift; sourceTree = ""; }; 07B6BC7E28BC71DB00621864 /* NetworkIssuesNotificationViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkIssuesNotificationViewModelFactory.swift; sourceTree = ""; }; @@ -3366,7 +3403,6 @@ 0F67BB672040911E4A165446 /* PolkaswapSwapConfirmationViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapSwapConfirmationViewLayout.swift; sourceTree = ""; }; 112609AE5629962646248BF0 /* LiquidityPoolSupplyConfirmAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmAssembly.swift; sourceTree = ""; }; 1211B723BB656770C4EA5BC2 /* WalletTransactionDetailsViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionDetailsViewFactory.swift; sourceTree = ""; }; - 12441689D2AF47D508D16CCF /* WalletSendConfirmViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmViewFactory.swift; sourceTree = ""; }; 1366336078BCA34EFB4C6FF9 /* CrowdloanContributionConfirmInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionConfirmInteractor.swift; sourceTree = ""; }; 14611E105279789A149B3755 /* AssetNetworksProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetNetworksProtocols.swift; sourceTree = ""; }; 14E3337CDD7C831AEAA4582F /* CustomValidatorListPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CustomValidatorListPresenter.swift; sourceTree = ""; }; @@ -3395,6 +3431,7 @@ 1F3B726402D4DB25059EF156 /* AnalyticsValidatorsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsValidatorsProtocols.swift; sourceTree = ""; }; 200C6B2C85846AED8CA9451A /* ExportMnemonicInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExportMnemonicInteractor.swift; sourceTree = ""; }; 20EB6F377A05C11850066B9F /* NftSendConfirmProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendConfirmProtocols.swift; sourceTree = ""; }; + 20FAD50119EE0DBA135AC9A7 /* ConfirmTransferViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConfirmTransferViewController.swift; sourceTree = ""; }; 21A199872F289F61BCF0C62D /* WalletsManagmentAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletsManagmentAssembly.swift; sourceTree = ""; }; 2222D628B9EA092D1C6B1CAE /* ChainSelectionPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChainSelectionPresenter.swift; sourceTree = ""; }; 22289DD3B70546794C4838CC /* WalletChainAccountDashboardTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletChainAccountDashboardTests.swift; sourceTree = ""; }; @@ -3514,6 +3551,7 @@ 527CD27768E9A75E6CA87FE4 /* AccountConfirmTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountConfirmTests.swift; sourceTree = ""; }; 52A64FCFC95E3841032F910B /* ChainSelectionTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChainSelectionTests.swift; sourceTree = ""; }; 52F8D055D0481469073AA859 /* StakingPayoutConfirmationProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPayoutConfirmationProtocols.swift; sourceTree = ""; }; + 537D889708D5E1615C662992 /* ConfirmTransferViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConfirmTransferViewLayout.swift; sourceTree = ""; }; 5408FF305E4A49A683BC43E0 /* WalletChainAccountDashboardViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletChainAccountDashboardViewLayout.swift; sourceTree = ""; }; 54776237A20227DFE025E3AC /* AllDoneViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AllDoneViewLayout.swift; sourceTree = ""; }; 54FB887490A8B33890B4E0E4 /* ControllerAccountConfirmationPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountConfirmationPresenter.swift; sourceTree = ""; }; @@ -3543,6 +3581,7 @@ 5D39CEB720F336B3A400477E /* ContactsViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ContactsViewLayout.swift; sourceTree = ""; }; 5D5F6F1BDBC4BE780D593700 /* NetworkIssuesNotificationInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkIssuesNotificationInteractor.swift; sourceTree = ""; }; 5D81DBDDD34EA20C3270EDB4 /* AddCustomNodeViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AddCustomNodeViewFactory.swift; sourceTree = ""; }; + 5DD32F4D6D8DABF991E09C7C /* ConfirmTransferPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConfirmTransferPresenter.swift; sourceTree = ""; }; 5E096A576B747C09B14FD38D /* WalletMainContainerAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletMainContainerAssembly.swift; sourceTree = ""; }; 5E11C7AF9A8DEC07246D5626 /* StakingMainTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingMainTests.swift; sourceTree = ""; }; 5F6F7AE5AFF3F2E7BADA02BB /* LiquidityPoolDetailsAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsAssembly.swift; sourceTree = ""; }; @@ -3597,6 +3636,9 @@ 747F68F0421FB144AE3FBA4E /* NftSendViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendViewLayout.swift; sourceTree = ""; }; 7484BA696561262926D87FE5 /* CrowdloanContributionSetupProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionSetupProtocols.swift; sourceTree = ""; }; 748E0AF1A286016CB220155C /* ControllerAccountInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountInteractor.swift; sourceTree = ""; }; + 7525F0A27140F3C058CA5B0C /* TransferTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TransferTests.swift; sourceTree = ""; }; + 75796C9C1AC23FDE8E1E31DB /* TransferViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TransferViewLayout.swift; sourceTree = ""; }; + 759EAF04B9064529D6862A14 /* ConfirmTransferProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConfirmTransferProtocols.swift; sourceTree = ""; }; 75B53E901B1475DE858A2C99 /* ContactsRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ContactsRouter.swift; sourceTree = ""; }; 761FDEBB414B1CFAD6992352 /* AnalyticsRewardDetailsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsRewardDetailsTests.swift; sourceTree = ""; }; 779702BC0E9C9882BEA5C273 /* StakingPoolCreateConfirmInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateConfirmInteractor.swift; sourceTree = ""; }; @@ -3611,6 +3653,7 @@ 7DDDB2B35CD3299F50613141 /* ReferralCrowdloanViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ReferralCrowdloanViewController.swift; sourceTree = ""; }; 7DE7B3D0BE06472153C0A78C /* NftCollectionAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftCollectionAssembly.swift; sourceTree = ""; }; 7E62CD2831DCF0A2D5DBB08F /* SelectValidatorsStartViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartViewController.swift; sourceTree = ""; }; + 7E8E30C194FD07DC9ECCBE74 /* TransferViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TransferViewController.swift; sourceTree = ""; }; 7EADA37D0D22D4CC99A7911A /* StakingPoolInfoViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolInfoViewController.swift; sourceTree = ""; }; 7ED5BEE4CC908012820FE89F /* NetworkInfoProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkInfoProtocols.swift; sourceTree = ""; }; 803E71983CD61FFBFE98DA7A /* NftSendConfirmRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendConfirmRouter.swift; sourceTree = ""; }; @@ -3675,8 +3718,6 @@ 841937862544772F00CFA50C /* animatedBg.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = animatedBg.gif; sourceTree = ""; }; 841AAC2026F6860B00F0A25E /* AssetBalanceFormatterFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetBalanceFormatterFactory.swift; sourceTree = ""; }; 841AAC2226F6879900F0A25E /* AssetBalanceDisplayInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetBalanceDisplayInfo.swift; sourceTree = ""; }; - 841AAC2426F692EF00F0A25E /* AddressConversion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddressConversion.swift; sourceTree = ""; }; - 841AAC2626F6A2A500F0A25E /* ChainAccountFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainAccountFetching.swift; sourceTree = ""; }; 841AAC2C26F7315300F0A25E /* CrowdloanRemoteSubscriptionService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrowdloanRemoteSubscriptionService.swift; sourceTree = ""; }; 841AAC2E26F73E0C00F0A25E /* LocalStorageKeyFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalStorageKeyFactory.swift; sourceTree = ""; }; 841B45282603D91800C08693 /* EraValidatorsServiceStub.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EraValidatorsServiceStub.swift; sourceTree = ""; }; @@ -3880,8 +3921,6 @@ 84585A30251C0B9300390F7A /* NetworkInfoMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkInfoMode.swift; sourceTree = ""; }; 845B821426EF657700D25C72 /* PersistentValueSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PersistentValueSettings.swift; sourceTree = ""; }; 845B821626EF7FED00D25C72 /* SelectedWalletSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedWalletSettings.swift; sourceTree = ""; }; - 845B821826EF808D00D25C72 /* MetaAccountMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetaAccountMapper.swift; sourceTree = ""; }; - 845B821A26EF80BC00D25C72 /* MetaAccountModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetaAccountModel.swift; sourceTree = ""; }; 845B821C26EF80DB00D25C72 /* ChainAccountModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainAccountModel.swift; sourceTree = ""; }; 845B821E26EF8E8900D25C72 /* ManagedMetaAccountModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManagedMetaAccountModel.swift; sourceTree = ""; }; 845B822026EF8F1A00D25C72 /* ManagedMetaAccountMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManagedMetaAccountMapper.swift; sourceTree = ""; }; @@ -4003,7 +4042,6 @@ 847119D4262EF95A00716580 /* PayoutInfoFactoryProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PayoutInfoFactoryProtocol.swift; sourceTree = ""; }; 847119EA262EFF3800716580 /* ValidatorPayoutInfoFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValidatorPayoutInfoFactory.swift; sourceTree = ""; }; 8471538C2653B29100CB91D8 /* ChangeRewardDestinationViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeRewardDestinationViewModelFactory.swift; sourceTree = ""; }; - 84729740260A9C13009B86D0 /* DisplayAddress.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DisplayAddress.swift; sourceTree = ""; }; 8472974C260A9CDF009B86D0 /* SelectValidatorsConfirmationModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsConfirmationModel.swift; sourceTree = ""; }; 84729757260AA519009B86D0 /* SelectValidatorsConfirmInteractorBase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsConfirmInteractorBase.swift; sourceTree = ""; }; 8472975C260B1B71009B86D0 /* ExistingBonding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExistingBonding.swift; sourceTree = ""; }; @@ -4482,6 +4520,7 @@ 85F45A5C6145F863760F4409 /* AccountImportWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountImportWireframe.swift; sourceTree = ""; }; 86182A9129A59C6753C4D465 /* NftSendConfirmViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendConfirmViewLayout.swift; sourceTree = ""; }; 8646C6DACE714085B4B0F799 /* Pods-fearlessAll-fearlessIntegrationTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessAll-fearlessIntegrationTests.debug.xcconfig"; path = "Target Support Files/Pods-fearlessAll-fearlessIntegrationTests/Pods-fearlessAll-fearlessIntegrationTests.debug.xcconfig"; sourceTree = ""; }; + 8647FEB1772B20938D9E8D63 /* TransferInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TransferInteractor.swift; sourceTree = ""; }; 86F7A369E31DCB9ABD556EE9 /* CrowdloanListPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanListPresenter.swift; sourceTree = ""; }; 87F9D215513308538FA3FDC4 /* ContactsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ContactsTests.swift; sourceTree = ""; }; 8821119C96944A0E3526E93A /* StakingRedeemViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRedeemViewFactory.swift; sourceTree = ""; }; @@ -4490,7 +4529,6 @@ 889A825F58F5CB54118A9D35 /* SelectValidatorsStartWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartWireframe.swift; sourceTree = ""; }; 890203CBFFCBF517C0BAA396 /* YourValidatorListTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = YourValidatorListTests.swift; sourceTree = ""; }; 894987C6E4C372A0E0E72E86 /* WalletChainAccountDashboardViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletChainAccountDashboardViewController.swift; sourceTree = ""; }; - 8A687FBDA0912F8727CE0D81 /* WalletSendConfirmPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmPresenter.swift; sourceTree = ""; }; 8A6A52B8A4D734D5BCADE355 /* StakingPoolCreateTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateTests.swift; sourceTree = ""; }; 8AD3D74F8E0B0F097092FDD7 /* ContactsPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ContactsPresenter.swift; sourceTree = ""; }; 8B06C949668CFFDE6F739CC0 /* ContactsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ContactsProtocols.swift; sourceTree = ""; }; @@ -4524,13 +4562,14 @@ 97E2A7A3731FAC0C965A898A /* StakingPoolInfoViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolInfoViewLayout.swift; sourceTree = ""; }; 99198B2B26321E4004840029 /* PolkaswapSwapConfirmationViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapSwapConfirmationViewController.swift; sourceTree = ""; }; 999C15317E0B4FC67B9C17C5 /* StakingAmountProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingAmountProtocols.swift; sourceTree = ""; }; - 9A22A2EB487E282DCA93C676 /* WalletSendConfirmWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmWireframe.swift; sourceTree = ""; }; 9A9EBD3B7AEA5EF594DFEB49 /* PolkaswapAdjustmentProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapAdjustmentProtocols.swift; sourceTree = ""; }; 9AEA7ECB8434DF494D2B25B9 /* ChainAccountTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChainAccountTests.swift; sourceTree = ""; }; 9B5626189788682A84D4E9D7 /* SelectValidatorsConfirmPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectValidatorsConfirmPresenter.swift; sourceTree = ""; }; 9BA528679A82B9A327853804 /* LiquidityPoolSupplyInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyInteractor.swift; sourceTree = ""; }; + 9BD8F497D1380B608E046658 /* ConfirmTransferAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConfirmTransferAssembly.swift; sourceTree = ""; }; 9C01DCD4DA014E8FB50B9F11 /* CrowdloanContributionSetupTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionSetupTests.swift; sourceTree = ""; }; 9C05A688EA7379572BBCE545 /* SelectMarketRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectMarketRouter.swift; sourceTree = ""; }; + 9E29D11C365629B959F44DFA /* ConfirmTransferTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConfirmTransferTests.swift; sourceTree = ""; }; 9FED48DE9B681995E6E4A581 /* LiquidityPoolDetailsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsProtocols.swift; sourceTree = ""; }; A14CA4551FCC2EBD078E2242 /* AccountConfirmViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountConfirmViewFactory.swift; sourceTree = ""; }; A3104ABC4BECF08B0BA836AA /* AccountConfirmViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountConfirmViewController.swift; sourceTree = ""; }; @@ -4546,6 +4585,7 @@ A82E373FFFBF708D7CF0973E /* StakingUnbondSetupViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondSetupViewFactory.swift; sourceTree = ""; }; A84638893DC99974E098719E /* StakingUnbondConfirmWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondConfirmWireframe.swift; sourceTree = ""; }; A865455F8FC60413A6CB8A44 /* ExportSeedInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExportSeedInteractor.swift; sourceTree = ""; }; + A90D38E873CA7EBD23FC14B5 /* TransferAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TransferAssembly.swift; sourceTree = ""; }; A9D05025D7DB75DB7A766586 /* AssetNetworksAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetNetworksAssembly.swift; sourceTree = ""; }; AA2580363AC3E4A9CD40256E /* RecommendedValidatorListPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecommendedValidatorListPresenter.swift; sourceTree = ""; }; AB2349A5057312BDB6C65804 /* StakingAmountViewController.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; path = StakingAmountViewController.xib; sourceTree = ""; }; @@ -4555,6 +4595,7 @@ AC404A4071AF571FAC4C1994 /* AccountExportPasswordProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountExportPasswordProtocols.swift; sourceTree = ""; }; ACAEDA02F409FE23749A1551 /* AccountCreateWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountCreateWireframe.swift; sourceTree = ""; }; AD0EAB8749661CB4428685FB /* SelectMarketProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectMarketProtocols.swift; sourceTree = ""; }; + AD417B638E8EFD33EBDC91DF /* TransferProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TransferProtocols.swift; sourceTree = ""; }; ADD19595322BF8FEC0F1F746 /* StakingPoolCreatePresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreatePresenter.swift; sourceTree = ""; }; ADD348E749EC6A7E3BB069DE /* StakingUnbondConfirmProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondConfirmProtocols.swift; sourceTree = ""; }; AE1000F126679886004753B7 /* ChangeTargetsRecommendationWireframe.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeTargetsRecommendationWireframe.swift; sourceTree = ""; }; @@ -4698,11 +4739,13 @@ B8D9DD27C76FE239728ED5F8 /* StakingPoolCreateInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateInteractor.swift; sourceTree = ""; }; B90CEC70F101AA25A4C00021 /* YourValidatorListViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = YourValidatorListViewController.swift; sourceTree = ""; }; B93A1BA7DFEE1D7728B84949 /* AccountExportPasswordTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountExportPasswordTests.swift; sourceTree = ""; }; + BA8C84B54C44C4D28D54B657 /* TransferRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TransferRouter.swift; sourceTree = ""; }; BAB2478DE3AF0885A3ED7ED8 /* StakingRedeemPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRedeemPresenter.swift; sourceTree = ""; }; BB5E8FAB4C12D7BFEEF576AD /* AnalyticsRewardDetailsWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsRewardDetailsWireframe.swift; sourceTree = ""; }; BB719C069A26244D194C4374 /* WalletChainAccountDashboardViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletChainAccountDashboardViewFactory.swift; sourceTree = ""; }; BB837A15BAAED64BC32F3F44 /* SelectMarketInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectMarketInteractor.swift; sourceTree = ""; }; BC2C9D26B9F9CC048C67796F /* AnalyticsRewardDetailsViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsRewardDetailsViewLayout.swift; sourceTree = ""; }; + BD1C635488F941373CDBE377 /* ConfirmTransferRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConfirmTransferRouter.swift; sourceTree = ""; }; BE7D061906CF67230BF5393A /* NftSendConfirmTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendConfirmTests.swift; sourceTree = ""; }; C0EE58376751B23A9CEAEE1A /* StakingPoolCreateConfirmRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateConfirmRouter.swift; sourceTree = ""; }; C16219B3D0D2A658185C0850 /* MainNftContainerInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MainNftContainerInteractor.swift; sourceTree = ""; }; @@ -4843,7 +4886,6 @@ CD8B6213B00597B3F56F650D /* StakingUnbondSetupFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondSetupFlow.swift; sourceTree = ""; }; CE29083D5CE7EA0D886D069A /* WalletTransactionHistoryViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionHistoryViewFactory.swift; sourceTree = ""; }; CE294DDEAB7902D7CE1F1BA1 /* AnalyticsRewardDetailsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsRewardDetailsProtocols.swift; sourceTree = ""; }; - CF4A813A6FB09F9FE5891578 /* WalletSendConfirmViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmViewController.swift; sourceTree = ""; }; CF891BE39D442C2D06DDF3BB /* StakingRewardDetailsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRewardDetailsProtocols.swift; sourceTree = ""; }; D06A0B252CCD6CAE8C5EDC16 /* AddCustomNodeProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AddCustomNodeProtocols.swift; sourceTree = ""; }; D101339CC1292531CC4DB0AC /* StakingUnbondSetupInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondSetupInteractor.swift; sourceTree = ""; }; @@ -4906,7 +4948,6 @@ EED9939B17C4224C8E153F8A /* SelectValidatorsStartProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartProtocols.swift; sourceTree = ""; }; EF3AD755B2B3DCFB3D14DF91 /* ExportMnemonicProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExportMnemonicProtocols.swift; sourceTree = ""; }; EF65551AE1E858C563054E87 /* ContactsAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ContactsAssembly.swift; sourceTree = ""; }; - EF834BF779244B8AF7746B04 /* WalletSendConfirmProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmProtocols.swift; sourceTree = ""; }; EFB1161D25AF1FC90AA23B7A /* WalletTransactionHistoryViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionHistoryViewLayout.swift; sourceTree = ""; }; EFB278373745C20822442686 /* ExportSeedPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExportSeedPresenter.swift; sourceTree = ""; }; F02C3AF74DE2F2CDBD165803 /* NetworkIssuesNotificationProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkIssuesNotificationProtocols.swift; sourceTree = ""; }; @@ -5376,7 +5417,6 @@ FA38C9A727607213005C5577 /* BaseService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseService.swift; sourceTree = ""; }; FA38C9C02761E68B005C5577 /* AccountViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountViewModel.swift; sourceTree = ""; }; FA38C9C22761E77A005C5577 /* AccountViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountViewModelFactory.swift; sourceTree = ""; }; - FA38C9CA276305A3005C5577 /* WalletSendConfirmViewState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmViewState.swift; sourceTree = ""; }; FA38C9CC276305B6005C5577 /* WalletSendConfirmViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmViewModel.swift; sourceTree = ""; }; FA38C9CE27634A18005C5577 /* WalletSendConfirmViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmViewModelFactory.swift; sourceTree = ""; }; FA3F5B16281A790A00BEF03B /* StakingAmountFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingAmountFlow.swift; sourceTree = ""; }; @@ -5933,16 +5973,9 @@ FAC0BBB6291D0EAF00E6F106 /* TipViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TipViewModel.swift; sourceTree = ""; }; FAC0BBB7291D0EAF00E6F106 /* RecipientViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RecipientViewModel.swift; sourceTree = ""; }; FAC0BBB8291D0EAF00E6F106 /* SelectNetworkViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectNetworkViewModel.swift; sourceTree = ""; }; - FAC0BBB9291D0EAF00E6F106 /* SendDependencyContainer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendDependencyContainer.swift; sourceTree = ""; }; - FAC0BBBA291D0EAF00E6F106 /* SendPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendPresenter.swift; sourceTree = ""; }; - FAC0BBBB291D0EAF00E6F106 /* SendProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendProtocols.swift; sourceTree = ""; }; FAC0BBBC291D0EAF00E6F106 /* SendFlow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendFlow.swift; sourceTree = ""; }; FAC0BBBD291D0EAF00E6F106 /* SendViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendViewLayout.swift; sourceTree = ""; }; - FAC0BBBE291D0EAF00E6F106 /* SendAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendAssembly.swift; sourceTree = ""; }; - FAC0BBBF291D0EAF00E6F106 /* SendViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendViewController.swift; sourceTree = ""; }; - FAC0BBC0291D0EAF00E6F106 /* SendRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendRouter.swift; sourceTree = ""; }; FAC0BBC2291D0EAF00E6F106 /* SendDataValidatingFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendDataValidatingFactory.swift; sourceTree = ""; }; - FAC0BBC3291D0EAF00E6F106 /* SendInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendInteractor.swift; sourceTree = ""; }; FAC0BBC6291D0EB000E6F106 /* SelectAssetViewModelFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectAssetViewModelFactory.swift; sourceTree = ""; }; FAC0BBC7291D0EB000E6F106 /* SelectAssetAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectAssetAssembly.swift; sourceTree = ""; }; FAC0BBC8291D0EB000E6F106 /* SelectAssetRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectAssetRouter.swift; sourceTree = ""; }; @@ -6141,7 +6174,6 @@ FADBA5F02B5FD0C200CFCF30 /* ClaimCrowdloanRewardViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClaimCrowdloanRewardViewModelFactory.swift; sourceTree = ""; }; FADBA5F22B5FE36200CFCF30 /* ChainAccountViewMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainAccountViewMode.swift; sourceTree = ""; }; FADBA5F52B61222C00CFCF30 /* NetworkInfoFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkInfoFetching.swift; sourceTree = ""; }; - FAE152D16E6C78D297BFFC3C /* WalletSendConfirmInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmInteractor.swift; sourceTree = ""; }; FAE39AEE2A9DBDD30011A9D6 /* NftCollectionViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NftCollectionViewModelFactory.swift; sourceTree = ""; }; FAE39AF02A9DBDDA0011A9D6 /* NftCollectionViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NftCollectionViewModel.swift; sourceTree = ""; }; FAE39AF22A9E1A4F0011A9D6 /* ChainsSetupCompleted.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainsSetupCompleted.swift; sourceTree = ""; }; @@ -6197,7 +6229,7 @@ FAF9C2AC2AAF3FDF00A61D21 /* GetPreinstalledWalletViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GetPreinstalledWalletViewController.swift; sourceTree = ""; }; FAF9C2AD2AAF3FDF00A61D21 /* GetPreinstalledWalletProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GetPreinstalledWalletProtocols.swift; sourceTree = ""; }; FAF9C2B62AAF3FF100A61D21 /* GetPreinstalledWalletTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GetPreinstalledWalletTests.swift; sourceTree = ""; }; - FAFB47D62ABD589C0008F8CA /* EthereumBalanceRepositoryCacheWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EthereumBalanceRepositoryCacheWrapper.swift; sourceTree = ""; }; + FAFB47D62ABD589C0008F8CA /* BalanceRepositoryCacheWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BalanceRepositoryCacheWrapper.swift; sourceTree = ""; }; FAFBEE80284621800036D08C /* SelectedValidatorListParachainViewModelState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedValidatorListParachainViewModelState.swift; sourceTree = ""; }; FAFBEE82284621900036D08C /* SelectedValidatorListParachainViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedValidatorListParachainViewModelFactory.swift; sourceTree = ""; }; FAFDB2C229112A00003971FB /* SubstrateCallPath.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SubstrateCallPath.swift; sourceTree = ""; }; @@ -6289,15 +6321,18 @@ FA72546F2AC2F12D00EC47A6 /* Web3Wallet in Frameworks */, FA8810B02BDCAF260084CC4B /* SSFKeyPair in Frameworks */, FA8810AE2BDCAF260084CC4B /* SSFHelpers in Frameworks */, + 070ED7EF2C4543D900DF4098 /* TonAPI in Frameworks */, FA8810A22BDCAF260084CC4B /* SSFChainConnection in Frameworks */, FA8810A02BDCAF260084CC4B /* SSFAssetManagment in Frameworks */, FA88109A2BDCAF260084CC4B /* RobinHood in Frameworks */, FA8810C82BDCAF260084CC4B /* SSFTransferService in Frameworks */, FA72546B2AC2F12D00EC47A6 /* WalletConnectNetworking in Frameworks */, + 070ED7EB2C4543D900DF4098 /* EventSource in Frameworks */, FA8810CA2BDCAF260084CC4B /* SSFUtils in Frameworks */, FA8FD1882AF4BEDD00354482 /* Swime in Frameworks */, FA8810BA2BDCAF260084CC4B /* SSFPools in Frameworks */, FA8810A42BDCAF260084CC4B /* SSFChainRegistry in Frameworks */, + 070ED7ED2C4543D900DF4098 /* StreamURLSessionTransport in Frameworks */, FA8FD1832AF4B55100354482 /* Web3ContractABI in Frameworks */, FA8810B82BDCAF260084CC4B /* SSFPolkaswap in Frameworks */, FA8FD1812AF4B55100354482 /* Web3 in Frameworks */, @@ -6315,6 +6350,7 @@ FA8810C62BDCAF260084CC4B /* SSFStorageQueryKit in Frameworks */, FA8810B42BDCAF260084CC4B /* SSFModels in Frameworks */, FA7254672AC2F12D00EC47A6 /* WalletConnect in Frameworks */, + 070ED7F12C4543D900DF4098 /* TonStreamingAPI in Frameworks */, FA72546D2AC2F12D00EC47A6 /* WalletConnectPairing in Frameworks */, FA7254692AC2F12D00EC47A6 /* WalletConnectAuth in Frameworks */, FA8810C02BDCAF260084CC4B /* SSFRuntimeCodingService in Frameworks */, @@ -6323,6 +6359,7 @@ FA8810C22BDCAF260084CC4B /* SSFSigner in Frameworks */, FA8810982BDCAF260084CC4B /* IrohaCrypto in Frameworks */, FA8810CC2BDCAF260084CC4B /* SSFXCM in Frameworks */, + 070ED7D22C3E7DE100DF4098 /* TonSwift in Frameworks */, C5AFED6C37C2C29E9903D136 /* Pods_fearlessAll_fearless.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -6550,6 +6587,20 @@ path = ScamService; sourceTree = ""; }; + 0723ED9E2C48E35600880620 /* Flows */ = { + isa = PBXGroup; + children = ( + 0723EDA12C48F2C900880620 /* TransferSendFlow.swift */, + 0723EDA32C49369D00880620 /* TransferFlowUseCase.swift */, + 0723ED9F2C48E37400880620 /* SoraQrTransferFlowUseCase.swift */, + 0723EDA72C50D6FD00880620 /* SubstrateTransferFlowUseCase.swift */, + 0723EDA52C50B87B00880620 /* BokoloTransferFlowUseCase.swift */, + 0723EDB12C50FAD900880620 /* EthereumTransferFlowUseCase.swift */, + 07B56CF92C520B5B00E924AA /* TonTransferFlowUseCase.swift */, + ); + name = Flows; + sourceTree = ""; + }; 0726FFA82AC4387F00336D76 /* WalletConnect */ = { isa = PBXGroup; children = ( @@ -6616,6 +6667,14 @@ name = Validators; sourceTree = ""; }; + 073DE30D2C5BA34A003B4990 /* Models */ = { + isa = PBXGroup; + children = ( + 073DE30E2C5BA35B003B4990 /* TonModels.swift */, + ); + name = Models; + sourceTree = ""; + }; 074EB7AB290B9F02000A2A6A /* Events */ = { isa = PBXGroup; children = ( @@ -6702,6 +6761,43 @@ name = ViewModel; sourceTree = ""; }; + 0778A12C2C58D0E1008A1254 /* Ton */ = { + isa = PBXGroup; + children = ( + 0778A12D2C58D0F2008A1254 /* TonJettonInjector.swift */, + ); + name = Ton; + sourceTree = ""; + }; + 07A949822C46600200613B9D /* AccountInfoRemoteService */ = { + isa = PBXGroup; + children = ( + FAD0678F2C2042F30050291F /* AccountInfoRemoteService.swift */, + 070CDD6C2ACAACB900F3F20A /* EthereumRemoteBalanceFetching.swift */, + 070ED7DA2C45321300DF4098 /* TonRemoteBalanceFetching.swift */, + 07A949832C466E8C00613B9D /* SubstrateRemoteBalanceFetching.swift */, + ); + name = AccountInfoRemoteService; + sourceTree = ""; + }; + 07A949852C47C38600613B9D /* ServiceAssembly */ = { + isa = PBXGroup; + children = ( + 07A949862C47C39800613B9D /* ServiceAssembly.swift */, + ); + name = ServiceAssembly; + sourceTree = ""; + }; + 07B56CFB2C53C45100E924AA /* Transfer */ = { + isa = PBXGroup; + children = ( + FAC0BBC1291D0EAF00E6F106 /* Validators */, + 37720679F35B0EF1AAE4E483 /* Transfer */, + 4728D679CE010F910E5F12EC /* ConfirmTransfer */, + ); + path = Transfer; + sourceTree = ""; + }; 07B6BC7D28BC71BF00621864 /* ViewModel */ = { isa = PBXGroup; children = ( @@ -7270,13 +7366,6 @@ path = Pods; sourceTree = ""; }; - 26F53332B25039CD43301CAF /* AccountManagement */ = { - isa = PBXGroup; - children = ( - ); - path = AccountManagement; - sourceTree = ""; - }; 28CCC9C191E2305B65727756 /* NodeSelection */ = { isa = PBXGroup; children = ( @@ -7372,6 +7461,23 @@ path = StakingRewardDetails; sourceTree = ""; }; + 37720679F35B0EF1AAE4E483 /* Transfer */ = { + isa = PBXGroup; + children = ( + FAC0BBB4291D0EAF00E6F106 /* Models */, + 0723ED9E2C48E35600880620 /* Flows */, + FAC0BBBD291D0EAF00E6F106 /* SendViewLayout.swift */, + AD417B638E8EFD33EBDC91DF /* TransferProtocols.swift */, + BA8C84B54C44C4D28D54B657 /* TransferRouter.swift */, + 0524F9F46A9D77159B2B14FE /* TransferPresenter.swift */, + 8647FEB1772B20938D9E8D63 /* TransferInteractor.swift */, + 7E8E30C194FD07DC9ECCBE74 /* TransferViewController.swift */, + 75796C9C1AC23FDE8E1E31DB /* TransferViewLayout.swift */, + A90D38E873CA7EBD23FC14B5 /* TransferAssembly.swift */, + ); + path = Transfer; + sourceTree = ""; + }; 3C30D61B22D5AB28B6EBED5C /* PolkaswapAdjustment */ = { isa = PBXGroup; children = ( @@ -7471,6 +7577,21 @@ path = NftCollection; sourceTree = ""; }; + 4728D679CE010F910E5F12EC /* ConfirmTransfer */ = { + isa = PBXGroup; + children = ( + FA38C9C927630595005C5577 /* Models */, + 5A4416B96A9DD5FB5EEA086E /* WalletSendConfirmViewLayout.swift */, + 759EAF04B9064529D6862A14 /* ConfirmTransferProtocols.swift */, + BD1C635488F941373CDBE377 /* ConfirmTransferRouter.swift */, + 5DD32F4D6D8DABF991E09C7C /* ConfirmTransferPresenter.swift */, + 20FAD50119EE0DBA135AC9A7 /* ConfirmTransferViewController.swift */, + 537D889708D5E1615C662992 /* ConfirmTransferViewLayout.swift */, + 9BD8F497D1380B608E046658 /* ConfirmTransferAssembly.swift */, + ); + path = ConfirmTransfer; + sourceTree = ""; + }; 478C62A42D572C8647512722 /* LiquidityPoolDetails */ = { isa = PBXGroup; children = ( @@ -7665,21 +7786,6 @@ path = ChainAccountBalance; sourceTree = ""; }; - 64D18A46DA9DBF23A06F760C /* WalletSendConfirm */ = { - isa = PBXGroup; - children = ( - FA38C9C927630595005C5577 /* ViewModels */, - EF834BF779244B8AF7746B04 /* WalletSendConfirmProtocols.swift */, - 9A22A2EB487E282DCA93C676 /* WalletSendConfirmWireframe.swift */, - 8A687FBDA0912F8727CE0D81 /* WalletSendConfirmPresenter.swift */, - FAE152D16E6C78D297BFFC3C /* WalletSendConfirmInteractor.swift */, - CF4A813A6FB09F9FE5891578 /* WalletSendConfirmViewController.swift */, - 5A4416B96A9DD5FB5EEA086E /* WalletSendConfirmViewLayout.swift */, - 12441689D2AF47D508D16CCF /* WalletSendConfirmViewFactory.swift */, - ); - path = WalletSendConfirm; - sourceTree = ""; - }; 64FCC7EEABFD71322F5AB7AF /* CustomValidators */ = { isa = PBXGroup; children = ( @@ -7765,6 +7871,8 @@ 749EAA035EECE4D63C56C358 /* LiquidityPoolSupplyConfirm */, 48EAF80DCC0C537917FC5A23 /* LiquidityPoolRemoveLiquidity */, BDB80385E6818AE7707DDFF8 /* LiquidityPoolRemoveLiquidityConfirm */, + FBD5D2C2BD7B0632C232E4CF /* Transfer */, + A53888D7C5E76ACD934B51DC /* ConfirmTransfer */, ); path = Modules; sourceTree = ""; @@ -8052,6 +8160,7 @@ 84D1110B26B922D50016D962 /* ConnectionPool.swift */, 84CA68DC26BEA60A003B9453 /* ConnectionFactory.swift */, FA9A8F482A82034B008FA99F /* EthereumConnectionPool.swift */, + 070ED7F52C454A1500DF4098 /* TonAPIAssembly.swift */, 07ED2EB82C341A0100FF7500 /* NodeApiKeyInjector.swift */, ); path = ConnectionPool; @@ -8648,7 +8757,6 @@ isa = PBXGroup; children = ( FA74359E29C073790085A47E /* ChainSettingsMapper.swift */, - 845B821826EF808D00D25C72 /* MetaAccountMapper.swift */, 84CA68DE26BEAA0F003B9453 /* ChainModelMapper.swift */, 845B822026EF8F1A00D25C72 /* ManagedMetaAccountMapper.swift */, FA6A6DBC27B60A84007D1A20 /* ChainNodeModelMapper.swift */, @@ -9153,6 +9261,8 @@ 8490139F24A80984008F705E = { isa = PBXGroup; children = ( + 0778A12B2C57C63D008A1254 /* ton-swift */, + 070ED7D32C3E80E300DF4098 /* shared-features-spm */, 849013AA24A80984008F705E /* fearless */, 849013C124A80986008F705E /* fearlessTests */, 8438E1D024BFAAD2001BDB13 /* fearlessIntegrationTests */, @@ -9271,7 +9381,6 @@ FA8F6383298253ED004B8CD4 /* AddConnection */, FAADC1AE2926597400DA9903 /* ScanQR */, FAC0BBC4291D0EB000E6F106 /* SelectAsset */, - FAC0BBB3291D0EAF00E6F106 /* Send */, FA2FC7CC28B3807C00CC0A42 /* StakingPool */, 07DE95BE28A169A500E9C2CB /* AssetListSearch */, 07DE95AB28A1119400E9C2CB /* BalanceInfo */, @@ -9285,7 +9394,6 @@ 0D927CDE29F5C9F4CA537F8F /* AccountConfirm */, 4C5888389F25B5C82454F92D /* AccountCreate */, BF6F50DD15230CADAC713359 /* AccountImport */, - 26F53332B25039CD43301CAF /* AccountManagement */, 8468B86824F63C8400B76BC6 /* AddAccount */, 84F4A9DC2551EC7D000CF0A3 /* Export */, 8428766C24AE046200D91AD8 /* LanguageSelection */, @@ -9322,6 +9430,7 @@ 45C94A390068322611CA7C02 /* SwapTransactionDetail */, DA46895F73B0FB1064146E47 /* AssetNetworks */, 0AEF32A92BEEDB9B5A60A433 /* ClaimCrowdloanRewards */, + 07B56CFB2C53C45100E924AA /* Transfer */, ); path = Modules; sourceTree = ""; @@ -9379,6 +9488,7 @@ FAA9BC402B8F17BA00A875BF /* Collection+Average.swift */, FA24FEFD2B95C32200CD9E04 /* Decimal+DoubleValue.swift */, FAC6CDA82BA814F20013A17E /* UIControl+Disable.swift */, + 0778A1292C5763D6008A1254 /* Task.swift */, ); path = Extension; sourceTree = ""; @@ -9411,7 +9521,6 @@ 84893C0624DA890F008F6A3F /* CommonError.swift */, 842876C024AE2A5C00D91AD8 /* ConnectionItem.swift */, 84FAB0622542C8D600319F74 /* ContactItem.swift */, - 84729740260A9C13009B86D0 /* DisplayAddress.swift */, 84754CA12513DB8800854599 /* EmptyAccountIcon.swift */, 84F2FF0625E7AF8F008338D5 /* EraValidatorInfo.swift */, 84F4A9172550331D000CF0A3 /* ExportOption.swift */, @@ -9674,8 +9783,6 @@ 84B677D526AED45500863DC6 /* SharedList.swift */, 841AAC2026F6860B00F0A25E /* AssetBalanceFormatterFactory.swift */, 841AAC2226F6879900F0A25E /* AssetBalanceDisplayInfo.swift */, - 841AAC2426F692EF00F0A25E /* AddressConversion.swift */, - 841AAC2626F6A2A500F0A25E /* ChainAccountFetching.swift */, 844CB57926FA706C00396E13 /* ChainAssetDisplayInfo.swift */, C64ECCE228873F2500CFF434 /* ChainAssetsFetching.swift */, 07F2B75E28AA183C00280C38 /* PrintTimer.swift */, @@ -10001,6 +10108,7 @@ FA7337082A1339890096A291 /* AssetTransactionData+AlchemyHistory.swift */, 07BF3DA02B3D98BD0046ABF4 /* AssetTransactionData+Zeta.swift */, FA9A8F082A6FB8F9008FA99F /* AssetTransactionData+EtherscanHistory.swift */, + 073DE3102C5BB783003B4990 /* AssetTransactionData+Ton.swift */, FA14AE8A2B0788D20066CADF /* AssetTransactionData+SoraSubsquidHistory.swift */, FA7C9A6D2BA007420031580A /* AssetTransactionData+ArrowsquidHistory.swift */, ); @@ -10433,7 +10541,6 @@ 84D1110D26B931C20016D962 /* ChainModel.swift */, 84D1111026B932480016D962 /* AssetModel.swift */, 84D1111226B932C40016D962 /* ChainNodeModel.swift */, - 845B821A26EF80BC00D25C72 /* MetaAccountModel.swift */, 845B821C26EF80DB00D25C72 /* ChainAccountModel.swift */, 845B821E26EF8E8900D25C72 /* ManagedMetaAccountModel.swift */, C63C82FC2769ECCC002EA6A8 /* ChainAssetModel.swift */, @@ -10995,6 +11102,14 @@ path = AccountConfirm; sourceTree = ""; }; + A53888D7C5E76ACD934B51DC /* ConfirmTransfer */ = { + isa = PBXGroup; + children = ( + 9E29D11C365629B959F44DFA /* ConfirmTransferTests.swift */, + ); + path = ConfirmTransfer; + sourceTree = ""; + }; A800B16846A754FEDAF801EC /* AssetSelection */ = { isa = PBXGroup; children = ( @@ -13432,6 +13547,8 @@ FA38C9A227606FDD005C5577 /* ApplicationLayer */ = { isa = PBXGroup; children = ( + 0778A12C2C58D0E1008A1254 /* Ton */, + 07A949852C47C38600613B9D /* ServiceAssembly */, FA22228B2BD237850031DE04 /* Pricing */, FA34EE8D2B98710C0042E73E /* Models */, FA34EE8A2B9870FE0042E73E /* ComponentFactories */, @@ -13473,14 +13590,13 @@ path = Services; sourceTree = ""; }; - FA38C9C927630595005C5577 /* ViewModels */ = { + FA38C9C927630595005C5577 /* Models */ = { isa = PBXGroup; children = ( - FA38C9CA276305A3005C5577 /* WalletSendConfirmViewState.swift */, FA38C9CC276305B6005C5577 /* WalletSendConfirmViewModel.swift */, FA38C9CE27634A18005C5577 /* WalletSendConfirmViewModelFactory.swift */, ); - path = ViewModels; + path = Models; sourceTree = ""; }; FA3F5B0D281A650300BEF03B /* Flow */ = { @@ -13572,6 +13688,7 @@ FA5137B629AC76EB00560EBA /* SubsquidHistoryOperationFactory.swift */, FA5137B729AC76EB00560EBA /* HistoryOperationFactory.swift */, 07BF3D9E2B3D98850046ABF4 /* ZetaHistoryOperationFactory.swift */, + 073DE30B2C5B99D6003B4990 /* TonHistoryOperationFactory.swift */, FA7336FC2A132F740096A291 /* AlchemyHistoryOperationFactory.swift */, FA9A8F012A6F91BA008FA99F /* EtherscanHistoryOperationFactory.swift */, FAE5858E2B0764EC00240FE1 /* SoraSubsquidHistoryOperationFactory.swift */, @@ -13739,6 +13856,7 @@ FA6C175B29935DC700A55254 /* History */ = { isa = PBXGroup; children = ( + 073DE30D2C5BA34A003B4990 /* Models */, FAFFAE3229AC84180074AF1F /* Staking */, FA5137B329AC76EB00560EBA /* Main */, ); @@ -14052,7 +14170,6 @@ C6267B8028BDF6A5001E31BF /* ChainAssetList */, 2C42012908B4F046FC9BB712 /* WalletChainAccountDashboard */, FA6DB7BB2757C9AF00233FBA /* ChainAccount */, - 64D18A46DA9DBF23A06F760C /* WalletSendConfirm */, 5B4415B6DC23A48F6E84B1C2 /* WalletTransactionHistory */, 98D53F0D0FA4CBD6693747C1 /* WalletTransactionDetails */, ); @@ -14467,6 +14584,7 @@ FA9A8F282A725AE9008FA99F /* Balance */ = { isa = PBXGroup; children = ( + 07A949822C46600200613B9D /* AccountInfoRemoteService */, FAD0678C2C2042F30050291F /* RemoteSubscription */, FA34EE992B98712D0042E73E /* BalanceLocksFetching.swift */, FA9A8F292A725AFC008FA99F /* AccountInfo */, @@ -14479,7 +14597,6 @@ FA9A8F292A725AFC008FA99F /* AccountInfo */ = { isa = PBXGroup; children = ( - 070CDD6C2ACAACB900F3F20A /* EthereumRemoteBalanceFetching.swift */, C65A6591288E5CF400679D65 /* AccountInfoFetching.swift */, FA9A8F2A2A725B30008FA99F /* SubstrateAccountInfoFetching.swift */, ); @@ -14961,33 +15078,16 @@ path = RuntimeCall; sourceTree = ""; }; - FAC0BBB3291D0EAF00E6F106 /* Send */ = { + FAC0BBB4291D0EAF00E6F106 /* Models */ = { isa = PBXGroup; children = ( - FAC0BBB4291D0EAF00E6F106 /* ViewModel */, - FAC0BBB9291D0EAF00E6F106 /* SendDependencyContainer.swift */, - FAC0BBBA291D0EAF00E6F106 /* SendPresenter.swift */, - FAC0BBBB291D0EAF00E6F106 /* SendProtocols.swift */, FAC0BBBC291D0EAF00E6F106 /* SendFlow.swift */, - FAC0BBBD291D0EAF00E6F106 /* SendViewLayout.swift */, - FAC0BBBE291D0EAF00E6F106 /* SendAssembly.swift */, - FAC0BBBF291D0EAF00E6F106 /* SendViewController.swift */, - FAC0BBC0291D0EAF00E6F106 /* SendRouter.swift */, - FAC0BBC1291D0EAF00E6F106 /* Validators */, - FAC0BBC3291D0EAF00E6F106 /* SendInteractor.swift */, - ); - path = Send; - sourceTree = ""; - }; - FAC0BBB4291D0EAF00E6F106 /* ViewModel */ = { - isa = PBXGroup; - children = ( FAC0BBB5291D0EAF00E6F106 /* SendViewModelFactory.swift */, FAC0BBB6291D0EAF00E6F106 /* TipViewModel.swift */, FAC0BBB7291D0EAF00E6F106 /* RecipientViewModel.swift */, FAC0BBB8291D0EAF00E6F106 /* SelectNetworkViewModel.swift */, ); - path = ViewModel; + path = Models; sourceTree = ""; }; FAC0BBC1291D0EAF00E6F106 /* Validators */ = { @@ -15128,7 +15228,6 @@ isa = PBXGroup; children = ( FAD0678E2C2042F30050291F /* Requests.swift */, - FAD0678F2C2042F30050291F /* AccountInfoRemoteService.swift */, ); path = RemoteSubscription; sourceTree = ""; @@ -15629,7 +15728,7 @@ FAFB47D52ABD588D0008F8CA /* Repository */ = { isa = PBXGroup; children = ( - FAFB47D62ABD589C0008F8CA /* EthereumBalanceRepositoryCacheWrapper.swift */, + FAFB47D62ABD589C0008F8CA /* BalanceRepositoryCacheWrapper.swift */, ); path = Repository; sourceTree = ""; @@ -15754,6 +15853,14 @@ path = StakingPoolInfo; sourceTree = ""; }; + FBD5D2C2BD7B0632C232E4CF /* Transfer */ = { + isa = PBXGroup; + children = ( + 7525F0A27140F3C058CA5B0C /* TransferTests.swift */, + ); + path = Transfer; + sourceTree = ""; + }; FDE858484C32A17DA1E55997 /* WalletHistoryFilter */ = { isa = PBXGroup; children = ( @@ -15852,6 +15959,11 @@ FA8810CB2BDCAF260084CC4B /* SSFXCM */, FA8810CD2BDCAF260084CC4B /* SoraKeystore */, FA8810CF2BDCAF260084CC4B /* keccak */, + 070ED7D12C3E7DE100DF4098 /* TonSwift */, + 070ED7EA2C4543D900DF4098 /* EventSource */, + 070ED7EC2C4543D900DF4098 /* StreamURLSessionTransport */, + 070ED7EE2C4543D900DF4098 /* TonAPI */, + 070ED7F02C4543D900DF4098 /* TonStreamingAPI */, ); productName = fearless; productReference = 849013A824A80984008F705E /* fearless.app */; @@ -15923,6 +16035,8 @@ FA8FD17F2AF4B55100354482 /* XCRemoteSwiftPackageReference "Web3.swift" */, FA8FD1862AF4BEDD00354482 /* XCRemoteSwiftPackageReference "Swime" */, FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */, + 070ED7D02C3E7DE100DF4098 /* XCRemoteSwiftPackageReference "ton-swift" */, + 070ED7E92C4543D900DF4098 /* XCRemoteSwiftPackageReference "ton-api-swift" */, ); productRefGroup = 849013A924A80984008F705E /* Products */; projectDirPath = ""; @@ -16395,6 +16509,7 @@ FA584C7A2AB2BFE300F6F020 /* MediaType.swift in Sources */, C6264C292799A56E00FCA0DB /* WalletDetailsTableCell.swift in Sources */, 84DA3B1224C6D29100B5E27F /* RuntimeVersion.swift in Sources */, + 073DE30C2C5B99D6003B4990 /* TonHistoryOperationFactory.swift in Sources */, FA176BB82851B42700258125 /* StakingBalanceParachainViewModelFactory.swift in Sources */, 843C49DB24DF373000B71DDA /* AccountImportRequest.swift in Sources */, FA09AD352C37ABA000BE0B9C /* TransactionObserver.swift in Sources */, @@ -16445,6 +16560,7 @@ FA4B92AD2844D0E60003BCEF /* SelectCurrencyViewModelFactory.swift in Sources */, FAC6CDAF2BA81FA00013A17E /* WalletLoggerProtocol.swift in Sources */, FA86442327671C8C00956D8E /* WalletTransactionHistorySection.swift in Sources */, + 0723EDB22C50FAD900880620 /* EthereumTransferFlowUseCase.swift in Sources */, FAA0133228DA12B6000A5230 /* StakingPoolMainRouter.swift in Sources */, 07D05E5F28EF0A0A00B66C70 /* SelectValidatorsConfirmPoolInitiatedStrategy.swift in Sources */, F47BBD8B263189DB0087DA11 /* StakingBalanceAction.swift in Sources */, @@ -16680,6 +16796,7 @@ FA2FC80628B3807C00CC0A42 /* StakingPoolJoinConfigViewController.swift in Sources */, 84EBC55024F660A700459D15 /* EventCenter.swift in Sources */, 849ABE862628154900011A2A /* SubscanRawExtrinsicData.swift in Sources */, + 07A949842C466E8C00613B9D /* SubstrateRemoteBalanceFetching.swift in Sources */, C6CA20442B072B98001503C2 /* NftCollectionFilters.swift in Sources */, FA936BD8286C66BF0059B97A /* StakingRebondConfirmationParachainViewModelState.swift in Sources */, FAADC1A929261F7000DA9903 /* PoolRolesConfirmPresenter.swift in Sources */, @@ -16724,7 +16841,6 @@ 8467FD5324EFD210005D486C /* UserDataStorageFacade.swift in Sources */, C63CB31E284F790F0071AF26 /* DelegationInfoCell.swift in Sources */, FAD429092A86567F001D6A16 /* BannersViewController.swift in Sources */, - FAC0BBD4291D0EB000E6F106 /* SendPresenter.swift in Sources */, AE6F7FE12685E812002BBC3E /* ValidatorListFilterViewController.swift in Sources */, FA2FC7C928B3805400CC0A42 /* JoinPoolCall.swift in Sources */, AEF50586261EE6230098574D /* PurchaseProviderPickerTableViewCell.swift in Sources */, @@ -16756,7 +16872,6 @@ FA256A23274CE7D600875A53 /* MoonbeamAgreeRemarkInfo.swift in Sources */, 849014BE24AA87E4008F705E /* PinSetupPresenter.swift in Sources */, 849ABE63262785F200011A2A /* ControllerMapper.swift in Sources */, - FAC0BBD9291D0EB000E6F106 /* SendViewController.swift in Sources */, FAA0139D28DA131B000A5230 /* StakingBondMorePoolViewModelState.swift in Sources */, FA286B0F2A3043DB008BD527 /* CrossChainConfirmationData.swift in Sources */, 8467FD0224E5D2D9005D486C /* OnboardingMainInteractor.swift in Sources */, @@ -16777,7 +16892,9 @@ FA7741E42B6A350200358315 /* GiantsquidStakingRewardsFetcher.swift in Sources */, FA7C9A702BA007AE0031580A /* ArrowsquidHistoryResponse.swift in Sources */, 845BB8D125E45F1300E5FCDC /* NominateCall.swift in Sources */, + 0778A12A2C5763D6008A1254 /* Task.swift in Sources */, FAD429162A86567F001D6A16 /* BackupSelectWalletRouter.swift in Sources */, + 0723EDA82C50D6FE00880620 /* SubstrateTransferFlowUseCase.swift in Sources */, 840689FC26321F2700A017B1 /* StorageQuery.swift in Sources */, 8423ADD026B2C38600057EDD /* ImportantFlowViewFactory.swift in Sources */, FA38C9CD276305B6005C5577 /* WalletSendConfirmViewModel.swift in Sources */, @@ -16801,7 +16918,6 @@ 84BE209E25E85CCA00B4748C /* ServiceCoordinator.swift in Sources */, 84D1F31E260F585E0077DDFE /* AddAccount.swift in Sources */, 8467FD4324ED5F46005D486C /* ProfileSectionTableViewCell.swift in Sources */, - FA38C9CB276305A3005C5577 /* WalletSendConfirmViewState.swift in Sources */, 076D9D6029504BA3002762E3 /* PolkaswapSettingsSyncService.swift in Sources */, FA7254452AC2E48500EC47A6 /* WalletConnectPayloadFactory.swift in Sources */, 846CA77C27099DD90011124C /* WeaklyAnalyticsRewardSource.swift in Sources */, @@ -16926,7 +17042,6 @@ 84100F3826A6085C00A5054E /* YourValidatorListDescSectionView.swift in Sources */, FAE9EB9F288ABBBE009390B6 /* AnalyticRewardsParachainViewModelState.swift in Sources */, AE528E4F26852E410058935A /* ValidatorSearchViewModelFactory.swift in Sources */, - 841AAC2526F692EF00F0A25E /* AddressConversion.swift in Sources */, 07089AF528B64701001566CA /* ChainReconnectingEvent.swift in Sources */, 8490147624A94A37008F705E /* RootInteractor.swift in Sources */, F40966CE26B297D6008CD244 /* AnalyticsStakeProtocols.swift in Sources */, @@ -16938,7 +17053,6 @@ 8490149924AA7892008F705E /* SharingPresentable.swift in Sources */, FA5137AA29AC6F2F00560EBA /* PolkaswapDisclaimerViewModel.swift in Sources */, 84754C9C2513B26000854599 /* AccountPickerTableViewCell.swift in Sources */, - FAC0BBD5291D0EB000E6F106 /* SendProtocols.swift in Sources */, 8472C5B1265CF9C500E2481B /* StakingRewardDestConfirmViewFactory.swift in Sources */, F4488CF226143E0000AEE6DB /* EraRewardPoints.swift in Sources */, 849DF02F26C53DB900B702F4 /* RuntimeSyncEvents.swift in Sources */, @@ -17099,6 +17213,7 @@ FA37AE3C2859CCD8001DCA96 /* StakingUnbondConfirmParachainViewModelFactory.swift in Sources */, FA38C9C32761E77A005C5577 /* AccountViewModelFactory.swift in Sources */, FA8800562B2C610E000AE5EB /* ReefSubsquidHistory.swift in Sources */, + 073DE3112C5BB783003B4990 /* AssetTransactionData+Ton.swift in Sources */, 84F51060263AE530005D15AE /* TitleValueView.swift in Sources */, FACD427B2A5BE7C6009975AA /* RuntimeSnapshotReady.swift in Sources */, 84DB4E5C25EA71C100A6DF41 /* StringScaleMapper.swift in Sources */, @@ -17348,6 +17463,7 @@ 84C6800E24D6ECE800006BF5 /* ExpandableActionControl.swift in Sources */, 8490148424AA27C1008F705E /* OperationManagerFacade.swift in Sources */, FAD067C72C2044B10050291F /* AssetManagementViewLayout.swift in Sources */, + 0723EDA42C49369D00880620 /* TransferFlowUseCase.swift in Sources */, 2AD0A19025D3D1E100312428 /* GitHubPhishingServiceFactory.swift in Sources */, FA14AE892B0785670066CADF /* SoraSubsquidHistoryResponse.swift in Sources */, FAAA29572B8DED770089AFE6 /* MapKeyType.swift in Sources */, @@ -17443,6 +17559,7 @@ FAD646DA284F58C1007CCB92 /* StakingUnbondSetupRelaychainStrategy.swift in Sources */, FA62625D2AC2E35A005D3D95 /* RawDataInteractor.swift in Sources */, FABA163D2B0C9510001AF2F0 /* NetworkManagmentProtocols.swift in Sources */, + 070ED7F62C454A1500DF4098 /* TonAPIAssembly.swift in Sources */, 84113B6C255B2835009BD21A /* AccountCreateError.swift in Sources */, FA17B4AE27E84911006E0735 /* WarningAlertConfig.swift in Sources */, 849014C024AA87E4008F705E /* ScreenAuthorizationPresenter.swift in Sources */, @@ -17492,7 +17609,6 @@ 84F30EE425FFAC0800039D09 /* StreamableProviderOptions+Substrate.swift in Sources */, FAF9C2A42AAF3FCC00A61D21 /* FeatureToggleService.swift in Sources */, FAD067CB2C2044F00050291F /* OnboardingConfigVersionResolver.swift in Sources */, - FAC0BBDA291D0EB000E6F106 /* SendRouter.swift in Sources */, FA2FC80D28B3807D00CC0A42 /* StakingPoolJoinConfirmRouter.swift in Sources */, 070B2C61289CFE0000F78F82 /* SelectedNetworkButton.swift in Sources */, C6A8D6BD27EF0CF40080F81C /* UIView.swift in Sources */, @@ -17516,6 +17632,7 @@ FA62623B2AC2E35A005D3D95 /* WalletConnectConfirmationProtocols.swift in Sources */, 8448221826B1624E007F4492 /* SelectValidatorsConfirmViewLayout.swift in Sources */, C6267B9528BDF6A5001E31BF /* ChainAssetListPresenter.swift in Sources */, + 0778A12E2C58D0F2008A1254 /* TonJettonInjector.swift in Sources */, FAD429362A8656B7001D6A16 /* UICollectionView.swift in Sources */, 8490145624A9404E008F705E /* AttributedStringDecorator.swift in Sources */, FA80391528DC2DA2007365E8 /* StakingPoolPalletID.swift in Sources */, @@ -17547,7 +17664,6 @@ FA256A28274CE7D600875A53 /* MoonbeamVerifyRemarkData.swift in Sources */, C6267B8F28BDF6A5001E31BF /* ChainAssetListViewModel.swift in Sources */, 84DF21A5253473B0005454AE /* ModalInfoFactory.swift in Sources */, - 841AAC2726F6A2A500F0A25E /* ChainAccountFetching.swift in Sources */, FA6262692AC2E35A005D3D95 /* WalletConnectProposalExpandableTableCell.swift in Sources */, 847C9620255340F2002D288F /* ExportGenericViewController.swift in Sources */, FA86442C27674A8600956D8E /* WalletTransactionHistoryViewState.swift in Sources */, @@ -17560,7 +17676,6 @@ FAFFAE9C29AC84B10074AF1F /* ParachainSubsquidRewardResponse.swift in Sources */, FACD42A52A5BE811009975AA /* Migrating.swift in Sources */, FAA013A328DA1328000A5230 /* TitleMultiValueViewModel.swift in Sources */, - 84729741260A9C13009B86D0 /* DisplayAddress.swift in Sources */, 84F4386125D9A83100AEDA56 /* TimeInterval+Time.swift in Sources */, FA99425A28053C8800D771E5 /* SelectExportAccountProtocols.swift in Sources */, 844EFB5F265FCE180090ACB1 /* CrowdloanContributionInteractor.swift in Sources */, @@ -17925,6 +18040,7 @@ 84EBC55124F660A700459D15 /* EventVisitor.swift in Sources */, FA93A313283653B70021330F /* ValidatorListFilterFlow.swift in Sources */, 8454C21D2632A78900657DAD /* EventRecord.swift in Sources */, + 0723EDA02C48E37400880620 /* SoraQrTransferFlowUseCase.swift in Sources */, FAD429002A86567F001D6A16 /* BackupRiskWarningsViewController.swift in Sources */, FAC0BBE6291D11D600E6F106 /* SelectableAmountInputView.swift in Sources */, 84C4C2F9255DB9510045B582 /* PinChangeInteractor.swift in Sources */, @@ -17979,7 +18095,6 @@ 8D9BC9C36DC891CDD900A895 /* AccountConfirmViewController.swift in Sources */, FA9A8F472A82005F008FA99F /* EthereumWalletRemoteSubscriptionService.swift in Sources */, E14F809C3917EFA4B5388AC8 /* AccountConfirmViewFactory.swift in Sources */, - FAC0BBD3291D0EB000E6F106 /* SendDependencyContainer.swift in Sources */, FA34EED52B98723C0042E73E /* OnboardingStartProtocols.swift in Sources */, AE9EF264260A82B80026910A /* StoriesWireframe.swift in Sources */, 848EAEB02659310A00676CEA /* CrowdloanStatus.swift in Sources */, @@ -18100,7 +18215,7 @@ FAE9EBA7288ABBFC009390B6 /* AnalyticsRewardsRelaychainViewModelState.swift in Sources */, 07F2B76328ACDA7800280C38 /* RuntimeHotBootSnapshotFactory.swift in Sources */, FA38C9C12761E68B005C5577 /* AccountViewModel.swift in Sources */, - FAFB47D72ABD589C0008F8CA /* EthereumBalanceRepositoryCacheWrapper.swift in Sources */, + FAFB47D72ABD589C0008F8CA /* BalanceRepositoryCacheWrapper.swift in Sources */, 8436E94426C853E4003D4EA7 /* RuntimeSnapshotOperationFactory.swift in Sources */, F40966C726B297D6008CD244 /* AnalyticsRewardsViewFactory.swift in Sources */, FA38C96E275897E0005C5577 /* AssetAmountValues.swift in Sources */, @@ -18385,6 +18500,7 @@ FAC6CD942BA802840013A17E /* NumberFormatterFactoryProtocol.swift in Sources */, 0713098128C6F7BB002B17D0 /* CDScamInfo+CoreDataCodable.swift in Sources */, FA93A3162836542D0021330F /* ValidatorListFilterRelaychainViewModelState.swift in Sources */, + 07B56CFA2C520B5B00E924AA /* TonTransferFlowUseCase.swift in Sources */, FA8644512768A13400956D8E /* TwoLabelView.swift in Sources */, F477CD3A262EE0E7004DF739 /* StakingRewardDetailsViewModelFactory.swift in Sources */, 849ABE7C2628116F00011A2A /* NominationsReducer.swift in Sources */, @@ -18466,7 +18582,6 @@ 65909D701527D99837B439D9 /* StakingRewardDetailsWireframe.swift in Sources */, FA62623E2AC2E35A005D3D95 /* WalletConnectConfirmationInteractor.swift in Sources */, 6A977B56FD6441F52660771C /* StakingRewardDetailsPresenter.swift in Sources */, - 845B821926EF808D00D25C72 /* MetaAccountMapper.swift in Sources */, 19A29027666EB5388CBFAD61 /* StakingRewardDetailsInteractor.swift in Sources */, F47BBD692630BB3C0087DA11 /* StakingBalanceViewFactory.swift in Sources */, 846AC7EF2638D9200075F7DA /* YourValidatorTableCell.swift in Sources */, @@ -18481,7 +18596,6 @@ FAF96B582B636FC700E299C1 /* SystemNumberRequest.swift in Sources */, 84BB3CEE267CD6B500676FFE /* CrowdloanContributionDict.swift in Sources */, 849842EC26587B20006BBB9F /* YourCrowdloansTableViewCell.swift in Sources */, - 845B821B26EF80BC00D25C72 /* MetaAccountModel.swift in Sources */, F409673326B29C9B008CD244 /* RewardAnalyticsWidgetViewModel.swift in Sources */, C63CB322285077640071AF26 /* DelegationInfoCellModel.swift in Sources */, FABA16422B0C9510001AF2F0 /* NetworkManagmentFilter.swift in Sources */, @@ -18582,6 +18696,7 @@ 3E1462D9E1C0D490E81FD288 /* StakingUnbondConfirmViewFactory.swift in Sources */, 9B4BE26140C63E07C256CC97 /* StakingRedeemProtocols.swift in Sources */, 078E34C328058BFD00DF187A /* DocumentPickerPresentable.swift in Sources */, + 07A949872C47C39800613B9D /* ServiceAssembly.swift in Sources */, AEE5FB1C264A610C002B8FDC /* StakingRewardDestSetupLayout.swift in Sources */, 07089AF928B78248001566CA /* SheetAlertPresentable.swift in Sources */, 070CDD8A2ACBE59700F3F20A /* ReceiveAndRequestAssetAssembly.swift in Sources */, @@ -18664,6 +18779,7 @@ 0E6C2939AFB3D125C760D5A0 /* CrowdloanContributionSetupProtocols.swift in Sources */, 4E5CD7B8821FA5298EA1598E /* CrowdloanContributionSetupWireframe.swift in Sources */, 9081D43697D992F51E057ED2 /* CrowdloanContributionSetupPresenter.swift in Sources */, + 070ED7DB2C45321300DF4098 /* TonRemoteBalanceFetching.swift in Sources */, 830A27C5447348F1D202D996 /* CrowdloanContributionSetupInteractor.swift in Sources */, AE4C53E5268C6F8300B03CE8 /* ValidatorListFilterSortCell.swift in Sources */, 1062C095BC566A1EA8DE1C06 /* CrowdloanContributionSetupViewController.swift in Sources */, @@ -18708,6 +18824,7 @@ 436D8B9651C88360A6D72E90 /* ChainSelectionWireframe.swift in Sources */, FA2DF9AA2A8F4C470047F440 /* NftListViewModelFactory.swift in Sources */, 3DF50E6F78F1B1052625BA7D /* ChainSelectionPresenter.swift in Sources */, + 073DE30F2C5BA35B003B4990 /* TonModels.swift in Sources */, 59745D3C9602745E1417D2F6 /* ChainSelectionInteractor.swift in Sources */, FAA0137F28DA12F0000A5230 /* StakingRedeemPoolViewModelState.swift in Sources */, FA62623F2AC2E35A005D3D95 /* WalletConnectSessionViewModelFactory.swift in Sources */, @@ -18758,19 +18875,13 @@ FAA0136B28DA12E3000A5230 /* StakingRedeemConfirmationLayout.swift in Sources */, FABA163F2B0C9510001AF2F0 /* NetworkManagmentAssembly.swift in Sources */, FAB707622BB317D300A1131C /* CrossChainViewLoadingCollector.swift in Sources */, - 96B2C3B29C0EA1A068ED5FB1 /* WalletSendConfirmProtocols.swift in Sources */, FAABC4702845BAEE002CF40E /* CustomValidatorParachainListComposer.swift in Sources */, FA2E9BB027A118120023FAD2 /* FiltersViewModelFactory.swift in Sources */, - 0DAA7B1B7DF576C761DEF046 /* WalletSendConfirmWireframe.swift in Sources */, FA6262442AC2E35A005D3D95 /* WalletConnectSessionViewLayout.swift in Sources */, - 06197BBE4299DC971C42DB92 /* WalletSendConfirmPresenter.swift in Sources */, - BDE80F08EBEE3B0C95598EA8 /* WalletSendConfirmInteractor.swift in Sources */, FAC6CDAD2BA81D680013A17E /* FeeViewProtocol.swift in Sources */, FA72542E2AC2E48500EC47A6 /* WalletConnectSignDecision.swift in Sources */, - EA16E259F0B0C1D3A6A1902A /* WalletSendConfirmViewController.swift in Sources */, 775C4C720600DAE242C67192 /* WalletSendConfirmViewLayout.swift in Sources */, FAD429012A86567F001D6A16 /* BackupCreatePasswordViewLayout.swift in Sources */, - F4CBA064CDCF0F6EEFE1DDA1 /* WalletSendConfirmViewFactory.swift in Sources */, 3A7BF8FD79B7130241222C35 /* WalletTransactionHistoryProtocols.swift in Sources */, FAC6CD9D2BA8097C0013A17E /* L10n.swift in Sources */, FAAA291D2B8DBFEE0089AFE6 /* StorageRequestWorkerBuilder.swift in Sources */, @@ -18809,7 +18920,6 @@ 3E053332BA9D170FB1569ABB /* WalletTransactionDetailsProtocols.swift in Sources */, 002561414AF1F8F3B4B65538 /* WalletTransactionDetailsWireframe.swift in Sources */, FA88005D2B319F9D000AE5EB /* BaseStakingAccountResolver.swift in Sources */, - FAC0BBD8291D0EB000E6F106 /* SendAssembly.swift in Sources */, 05A6BB4F8F0912404A4D8413 /* WalletTransactionDetailsPresenter.swift in Sources */, FA99425B28053C8800D771E5 /* SelectExportAccountViewController.swift in Sources */, 69DE177B9D1745FEE848E870 /* WalletTransactionDetailsInteractor.swift in Sources */, @@ -18843,7 +18953,6 @@ FA6262592AC2E35A005D3D95 /* MultiSelectNetworksViewController.swift in Sources */, 7258EEAE786D51F57ECE1E4F /* NodeSelectionViewController.swift in Sources */, 8F0B3FE843167777A1D3771C /* NodeSelectionViewLayout.swift in Sources */, - FAC0BBDC291D0EB000E6F106 /* SendInteractor.swift in Sources */, 07089AF328B63386001566CA /* UIButton.swift in Sources */, FA6262502AC2E35A005D3D95 /* WalletConnectActiveSessionsProtocols.swift in Sources */, FA37AE382859CCA7001DCA96 /* StakingUnbondConfirmParachainStrategy.swift in Sources */, @@ -18880,6 +18989,7 @@ 709ABA5647D7DFF36EBCE73E /* WarningAlertViewFactory.swift in Sources */, 07DFA469289B8D8E0035A8AB /* EducationStoriesInteractor.swift in Sources */, FA389B382840CBE000FF16E9 /* ValidatorSearchParachainStrategy.swift in Sources */, + 0723EDA62C50B87B00880620 /* BokoloTransferFlowUseCase.swift in Sources */, FA7254302AC2E48500EC47A6 /* WalletConnectPayload.swift in Sources */, FAA0139F28DA131B000A5230 /* StakingBondMorePoolStrategy.swift in Sources */, 180B223378B806EB6C0DC7F0 /* SelectedValidatorListFlow.swift in Sources */, @@ -19111,6 +19221,7 @@ BC2DF589C6623601C39EF8F4 /* LiquidityPoolSupplyPresenter.swift in Sources */, 87C1FC2909A8360DDBA625E5 /* LiquidityPoolSupplyInteractor.swift in Sources */, F31469BD18062A4A008FE39E /* LiquidityPoolSupplyViewController.swift in Sources */, + 0723EDA22C48F2C900880620 /* TransferSendFlow.swift in Sources */, 5E8504507116E0177D70314B /* LiquidityPoolSupplyViewLayout.swift in Sources */, DCE13AA9F3BA0EB54F793017 /* LiquidityPoolSupplyAssembly.swift in Sources */, 6FAC7E8F0DACB3F2AA0BE825 /* LiquidityPoolSupplyConfirmProtocols.swift in Sources */, @@ -19131,6 +19242,19 @@ 8A957CAF82C856E61054B02F /* LiquidityPoolRemoveLiquidityConfirmViewController.swift in Sources */, 10DEF797CB3DC5BF0903EC4C /* LiquidityPoolRemoveLiquidityConfirmViewLayout.swift in Sources */, E667BD4B6BA45B9B3464AD85 /* LiquidityPoolRemoveLiquidityConfirmAssembly.swift in Sources */, + D9FEC396410376629DEB9625 /* TransferProtocols.swift in Sources */, + 85E0298F05FF6D4B9F113E47 /* TransferRouter.swift in Sources */, + 19C7939FFE0178C1A7E68631 /* TransferPresenter.swift in Sources */, + 7AB0A0585C89ED136B07A995 /* TransferInteractor.swift in Sources */, + 709EF639857F35CA2EF69D06 /* TransferViewController.swift in Sources */, + B3329255AB6C6493CDA806D6 /* TransferViewLayout.swift in Sources */, + 2DEDA5E3970B445CBBE2F1D1 /* TransferAssembly.swift in Sources */, + D5C25B13DB0180C0A78C2372 /* ConfirmTransferProtocols.swift in Sources */, + 084DDCBC4CE8438770EB48DE /* ConfirmTransferRouter.swift in Sources */, + 604162EC2B721993E397E6B0 /* ConfirmTransferPresenter.swift in Sources */, + 3152634A9E3FBF5E463CF56E /* ConfirmTransferViewController.swift in Sources */, + 0A2BBD1BB87EBB75BBD919F7 /* ConfirmTransferViewLayout.swift in Sources */, + 26F0F2A52C7EFD38CBC2F1C3 /* ConfirmTransferAssembly.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -19307,6 +19431,8 @@ B40863AA7377BFE5F8A30259 /* LiquidityPoolSupplyConfirmTests.swift in Sources */, 6BF307ADE63FA92389340779 /* LiquidityPoolRemoveLiquidityTests.swift in Sources */, ECA54AB8148BBA63084353FD /* LiquidityPoolRemoveLiquidityConfirmTests.swift in Sources */, + E01C6EA1C6DB699485EEA5F5 /* TransferTests.swift in Sources */, + 0C154A425E0B8175F0A3FCC4 /* ConfirmTransferTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -19588,7 +19714,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon$(ICON_SUFFIX)"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 7; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = YLWWUD25VZ; ENABLE_BITCODE = NO; INFOPLIST_FILE = fearless/Info.plist; @@ -19599,7 +19725,7 @@ "$(CONFIGURATION_BUILD_DIR)", "$(FRAMEWORK_SEARCH_PATHS)", ); - MARKETING_VERSION = 2.2.3; + MARKETING_VERSION = 3.8.1; OTHER_SWIFT_FLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -19615,7 +19741,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon$(ICON_SUFFIX)"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 7; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = YLWWUD25VZ; ENABLE_BITCODE = NO; INFOPLIST_FILE = fearless/Info.plist; @@ -19626,7 +19752,7 @@ "$(CONFIGURATION_BUILD_DIR)", "$(FRAMEWORK_SEARCH_PATHS)", ); - MARKETING_VERSION = 2.2.3; + MARKETING_VERSION = 3.8.1; PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -19753,7 +19879,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon$(ICON_SUFFIX)"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 7; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = YLWWUD25VZ; ENABLE_BITCODE = NO; INFOPLIST_FILE = fearless/Info.plist; @@ -19764,7 +19890,7 @@ "$(CONFIGURATION_BUILD_DIR)", "$(FRAMEWORK_SEARCH_PATHS)", ); - MARKETING_VERSION = 2.2.3; + MARKETING_VERSION = 3.8.1; OTHER_SWIFT_FLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -19845,6 +19971,22 @@ /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ + 070ED7D02C3E7DE100DF4098 /* XCRemoteSwiftPackageReference "ton-swift" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/DRadmir/ton-swift"; + requirement = { + branch = main; + kind = branch; + }; + }; + 070ED7E92C4543D900DF4098 /* XCRemoteSwiftPackageReference "ton-api-swift" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/DRadmir/ton-api-swift.git"; + requirement = { + branch = main; + kind = branch; + }; + }; FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/WalletConnect/WalletConnectSwiftV2"; @@ -19880,6 +20022,31 @@ /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ + 070ED7D12C3E7DE100DF4098 /* TonSwift */ = { + isa = XCSwiftPackageProductDependency; + package = 070ED7D02C3E7DE100DF4098 /* XCRemoteSwiftPackageReference "ton-swift" */; + productName = TonSwift; + }; + 070ED7EA2C4543D900DF4098 /* EventSource */ = { + isa = XCSwiftPackageProductDependency; + package = 070ED7E92C4543D900DF4098 /* XCRemoteSwiftPackageReference "ton-api-swift" */; + productName = EventSource; + }; + 070ED7EC2C4543D900DF4098 /* StreamURLSessionTransport */ = { + isa = XCSwiftPackageProductDependency; + package = 070ED7E92C4543D900DF4098 /* XCRemoteSwiftPackageReference "ton-api-swift" */; + productName = StreamURLSessionTransport; + }; + 070ED7EE2C4543D900DF4098 /* TonAPI */ = { + isa = XCSwiftPackageProductDependency; + package = 070ED7E92C4543D900DF4098 /* XCRemoteSwiftPackageReference "ton-api-swift" */; + productName = TonAPI; + }; + 070ED7F02C4543D900DF4098 /* TonStreamingAPI */ = { + isa = XCSwiftPackageProductDependency; + package = 070ED7E92C4543D900DF4098 /* XCRemoteSwiftPackageReference "ton-api-swift" */; + productName = TonStreamingAPI; + }; FA7254662AC2F12D00EC47A6 /* WalletConnect */ = { isa = XCSwiftPackageProductDependency; package = FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */; @@ -20076,6 +20243,7 @@ FAD0679F2C2044490050291F /* SubstrateDataModel.xcdatamodeld */ = { isa = XCVersionGroup; children = ( + 070ED7D62C3FBB8800DF4098 /* SubstrateDataModel_v8.xcdatamodel */, FAD067A02C2044490050291F /* SubstrateDataModel.xcdatamodel */, FAD067A12C2044490050291F /* SubstrateDataModel_v4.xcdatamodel */, FAD067A22C2044490050291F /* SubstrateDataModel_v2.xcdatamodel */, @@ -20084,7 +20252,7 @@ FAD067A52C2044490050291F /* SubstrateDataModel_v6.xcdatamodel */, FAD067A62C2044490050291F /* SubstrateDataModel_v3.xcdatamodel */, ); - currentVersion = FAD067A32C2044490050291F /* SubstrateDataModel_v7.xcdatamodel */; + currentVersion = 070ED7D62C3FBB8800DF4098 /* SubstrateDataModel_v8.xcdatamodel */; path = SubstrateDataModel.xcdatamodeld; sourceTree = ""; versionGroupType = wrapper.xcdatamodel; diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 03bce69202..2a85726f4a 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,303 +1,322 @@ { - "originHash" : "48bf9205e83b67ed7d81b2a0bcc8ef081189084205112c031b7823572f561e20", - "pins" : [ - { - "identity" : "appauth-ios", - "kind" : "remoteSourceControl", - "location" : "https://github.com/openid/AppAuth-iOS.git", - "state" : { - "revision" : "c89ed571ae140f8eb1142735e6e23d7bb8c34cb2", - "version" : "1.7.5" - } - }, - { - "identity" : "bigint", - "kind" : "remoteSourceControl", - "location" : "https://github.com/attaswift/BigInt.git", - "state" : { - "revision" : "0ed110f7555c34ff468e72e1686e59721f2b0da6", - "version" : "5.3.0" - } - }, - { - "identity" : "cryptoswift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/krzyzanowskim/CryptoSwift.git", - "state" : { - "revision" : "c9c3df6ab812de32bae61fc0cd1bf6d45170ebf0", - "version" : "1.8.2" - } - }, - { - "identity" : "fearless-starscream", - "kind" : "remoteSourceControl", - "location" : "https://github.com/soramitsu/fearless-starscream", - "state" : { - "revision" : "3e1de9baeab87de379e0cb01c64d5db18fbf130f", - "version" : "4.0.12" - } - }, - { - "identity" : "google-api-objectivec-client-for-rest", - "kind" : "remoteSourceControl", - "location" : "https://github.com/google/google-api-objectivec-client-for-rest.git", - "state" : { - "revision" : "a8c1e0b1173659d0be452680582c28556372ef74", - "version" : "3.5.5" - } - }, - { - "identity" : "googlesignin-ios", - "kind" : "remoteSourceControl", - "location" : "https://github.com/google/GoogleSignIn-iOS", - "state" : { - "revision" : "a7965d134c5d3567026c523e0a8a583f73b62b0d", - "version" : "7.1.0" - } - }, - { - "identity" : "gtm-session-fetcher", - "kind" : "remoteSourceControl", - "location" : "https://github.com/google/gtm-session-fetcher.git", - "state" : { - "revision" : "a2ab612cb980066ee56d90d60d8462992c07f24b", - "version" : "3.5.0" - } - }, - { - "identity" : "gtmappauth", - "kind" : "remoteSourceControl", - "location" : "https://github.com/google/GTMAppAuth.git", - "state" : { - "revision" : "5d7d66f647400952b1758b230e019b07c0b4b22a", - "version" : "4.1.1" - } - }, - { - "identity" : "nimble", - "kind" : "remoteSourceControl", - "location" : "https://github.com/Quick/Nimble", - "state" : { - "revision" : "e9d769113660769a4d9dd3afb855562c0b7ae7b0", - "version" : "7.3.4" - } - }, - { - "identity" : "promisekit", - "kind" : "remoteSourceControl", - "location" : "https://github.com/mxcl/PromiseKit.git", - "state" : { - "revision" : "8a98e31a47854d3180882c8068cc4d9381bf382d", - "version" : "6.22.1" - } - }, - { - "identity" : "qrcode", - "kind" : "remoteSourceControl", - "location" : "https://github.com/WalletConnect/QRCode", - "state" : { - "revision" : "263f280d2c8144adfb0b6676109846cfc8dd552b", - "version" : "14.3.1" - } - }, - { - "identity" : "quick", - "kind" : "remoteSourceControl", - "location" : "https://github.com/Quick/Quick", - "state" : { - "revision" : "f2b5a06440ea87eba1a167cab37bf6496646c52e", - "version" : "1.3.4" - } - }, - { - "identity" : "reachability.swift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/ashleymills/Reachability.swift", - "state" : { - "revision" : "7cbd73f46a7dfaeca079e18df7324c6de6d1834a", - "version" : "5.2.3" - } - }, - { - "identity" : "secp256k1.swift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/Boilertalk/secp256k1.swift.git", - "state" : { - "revision" : "cd187c632fb812fd93711a9f7e644adb7e5f97f0", - "version" : "0.1.7" - } - }, - { - "identity" : "shared-features-spm", - "kind" : "remoteSourceControl", - "location" : "https://github.com/soramitsu/shared-features-spm.git", - "state" : { - "branch" : "fearless-wallet", - "revision" : "bb864277bcf22a6bd02d5abd7c8f07c5aa37236b" - } - }, - { - "identity" : "swift-atomics", - "kind" : "remoteSourceControl", - "location" : "https://github.com/apple/swift-atomics.git", - "state" : { - "revision" : "cd142fd2f64be2100422d658e7411e39489da985", - "version" : "1.2.0" - } - }, - { - "identity" : "swift-collections", - "kind" : "remoteSourceControl", - "location" : "https://github.com/apple/swift-collections.git", - "state" : { - "revision" : "ee97538f5b81ae89698fd95938896dec5217b148", - "version" : "1.1.1" - } - }, - { - "identity" : "swift-http-types", - "kind" : "remoteSourceControl", - "location" : "https://github.com/apple/swift-http-types", - "state" : { - "revision" : "1ddbea1ee34354a6a2532c60f98501c35ae8edfa", - "version" : "1.2.0" - } - }, - { - "identity" : "swift-nio", - "kind" : "remoteSourceControl", - "location" : "https://github.com/apple/swift-nio.git", - "state" : { - "revision" : "fc79798d5a150d61361a27ce0c51169b889e23de", - "version" : "2.68.0" - } - }, - { - "identity" : "swift-nio-extras", - "kind" : "remoteSourceControl", - "location" : "https://github.com/apple/swift-nio-extras.git", - "state" : { - "revision" : "05c36b57453d23ea63785d58a7dbc7b70ba1745e", - "version" : "1.23.0" - } - }, - { - "identity" : "swift-nio-http2", - "kind" : "remoteSourceControl", - "location" : "https://github.com/apple/swift-nio-http2.git", - "state" : { - "revision" : "a0224f3d20438635dd59c9fcc593520d80d131d0", - "version" : "1.33.0" - } - }, - { - "identity" : "swift-nio-ssl", - "kind" : "remoteSourceControl", - "location" : "https://github.com/apple/swift-nio-ssl.git", - "state" : { - "revision" : "2b09805797f21c380f7dc9bedaab3157c5508efb", - "version" : "2.27.0" - } - }, - { - "identity" : "swift-nio-transport-services", - "kind" : "remoteSourceControl", - "location" : "https://github.com/apple/swift-nio-transport-services.git", - "state" : { - "revision" : "38ac8221dd20674682148d6451367f89c2652980", - "version" : "1.21.0" - } - }, - { - "identity" : "swift-qrcode-generator", - "kind" : "remoteSourceControl", - "location" : "https://github.com/dagronf/swift-qrcode-generator", - "state" : { - "revision" : "5ca09b6a2ad190f94aa3d6ddef45b187f8c0343b", - "version" : "1.0.3" - } - }, - { - "identity" : "swift-system", - "kind" : "remoteSourceControl", - "location" : "https://github.com/apple/swift-system.git", - "state" : { - "revision" : "6a9e38e7bd22a3b8ba80bddf395623cf68f57807", - "version" : "1.3.1" - } - }, - { - "identity" : "swiftimagereadwrite", - "kind" : "remoteSourceControl", - "location" : "https://github.com/dagronf/SwiftImageReadWrite", - "state" : { - "revision" : "5596407d1cf61b953b8e658fa8636a471df3c509", - "version" : "1.1.6" - } - }, - { - "identity" : "swiftybeaver", - "kind" : "remoteSourceControl", - "location" : "https://github.com/SwiftyBeaver/SwiftyBeaver.git", - "state" : { - "revision" : "8cba041db09596183331d123f337d0eb2e6e8e91", - "version" : "2.1.1" - } - }, - { - "identity" : "swime", - "kind" : "remoteSourceControl", - "location" : "https://github.com/sendyhalim/Swime", - "state" : { - "revision" : "4e538834483059ceefaaad8cdb3abe0d7d1c5146", - "version" : "3.1.0" - } - }, - { - "identity" : "tweetnacl-swiftwrap", - "kind" : "remoteSourceControl", - "location" : "https://github.com/bitmark-inc/tweetnacl-swiftwrap", - "state" : { - "revision" : "f8fd111642bf2336b11ef9ea828510693106e954", - "version" : "1.1.0" - } - }, - { - "identity" : "walletconnectswiftv2", - "kind" : "remoteSourceControl", - "location" : "https://github.com/WalletConnect/WalletConnectSwiftV2", - "state" : { - "revision" : "58d2b49eeac5cf94432e2647b9107577c156a25c", - "version" : "1.9.9" - } - }, - { - "identity" : "web3.swift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/bnsports/Web3.swift.git", - "state" : { - "revision" : "a526779488e5fe2fa993d9614f11f57b00cc1858", - "version" : "7.7.7" - } - }, - { - "identity" : "websocket-kit", - "kind" : "remoteSourceControl", - "location" : "https://github.com/vapor/websocket-kit", - "state" : { - "revision" : "4232d34efa49f633ba61afde365d3896fc7f8740", - "version" : "2.15.0" - } - }, - { - "identity" : "xxhash-swift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/daisuke-t-jp/xxHash-Swift", - "state" : { - "revision" : "e86a07ab4867f81481d430e1370a5ec97b6e3359", - "version" : "1.1.1" - } - } - ], - "version" : 3 + "object": { + "pins": [ + { + "package": "AppAuth", + "repositoryURL": "https://github.com/openid/AppAuth-iOS.git", + "state": { + "branch": null, + "revision": "c89ed571ae140f8eb1142735e6e23d7bb8c34cb2", + "version": "1.7.5" + } + }, + { + "package": "BigInt", + "repositoryURL": "https://github.com/attaswift/BigInt.git", + "state": { + "branch": null, + "revision": "0ed110f7555c34ff468e72e1686e59721f2b0da6", + "version": "5.3.0" + } + }, + { + "package": "CryptoSwift", + "repositoryURL": "https://github.com/krzyzanowskim/CryptoSwift.git", + "state": { + "branch": null, + "revision": "c9c3df6ab812de32bae61fc0cd1bf6d45170ebf0", + "version": "1.8.2" + } + }, + { + "package": "Starscream", + "repositoryURL": "https://github.com/soramitsu/fearless-starscream", + "state": { + "branch": null, + "revision": "3e1de9baeab87de379e0cb01c64d5db18fbf130f", + "version": "4.0.12" + } + }, + { + "package": "GoogleAPIClientForREST", + "repositoryURL": "https://github.com/google/google-api-objectivec-client-for-rest.git", + "state": { + "branch": null, + "revision": "a8c1e0b1173659d0be452680582c28556372ef74", + "version": "3.5.5" + } + }, + { + "package": "GoogleSignIn", + "repositoryURL": "https://github.com/google/GoogleSignIn-iOS", + "state": { + "branch": null, + "revision": "a7965d134c5d3567026c523e0a8a583f73b62b0d", + "version": "7.1.0" + } + }, + { + "package": "GTMSessionFetcher", + "repositoryURL": "https://github.com/google/gtm-session-fetcher.git", + "state": { + "branch": null, + "revision": "a2ab612cb980066ee56d90d60d8462992c07f24b", + "version": "3.5.0" + } + }, + { + "package": "GTMAppAuth", + "repositoryURL": "https://github.com/google/GTMAppAuth.git", + "state": { + "branch": null, + "revision": "5d7d66f647400952b1758b230e019b07c0b4b22a", + "version": "4.1.1" + } + }, + { + "package": "Nimble", + "repositoryURL": "https://github.com/Quick/Nimble", + "state": { + "branch": null, + "revision": "e9d769113660769a4d9dd3afb855562c0b7ae7b0", + "version": "7.3.4" + } + }, + { + "package": "PromiseKit", + "repositoryURL": "https://github.com/mxcl/PromiseKit.git", + "state": { + "branch": null, + "revision": "8a98e31a47854d3180882c8068cc4d9381bf382d", + "version": "6.22.1" + } + }, + { + "package": "QRCode", + "repositoryURL": "https://github.com/WalletConnect/QRCode", + "state": { + "branch": null, + "revision": "263f280d2c8144adfb0b6676109846cfc8dd552b", + "version": "14.3.1" + } + }, + { + "package": "Quick", + "repositoryURL": "https://github.com/Quick/Quick", + "state": { + "branch": null, + "revision": "f2b5a06440ea87eba1a167cab37bf6496646c52e", + "version": "1.3.4" + } + }, + { + "package": "Reachability", + "repositoryURL": "https://github.com/ashleymills/Reachability.swift", + "state": { + "branch": null, + "revision": "7cbd73f46a7dfaeca079e18df7324c6de6d1834a", + "version": "5.2.3" + } + }, + { + "package": "secp256k1", + "repositoryURL": "https://github.com/Boilertalk/secp256k1.swift.git", + "state": { + "branch": null, + "revision": "cd187c632fb812fd93711a9f7e644adb7e5f97f0", + "version": "0.1.7" + } + }, + { + "package": "swift-atomics", + "repositoryURL": "https://github.com/apple/swift-atomics.git", + "state": { + "branch": null, + "revision": "cd142fd2f64be2100422d658e7411e39489da985", + "version": "1.2.0" + } + }, + { + "package": "swift-collections", + "repositoryURL": "https://github.com/apple/swift-collections.git", + "state": { + "branch": null, + "revision": "ee97538f5b81ae89698fd95938896dec5217b148", + "version": "1.1.1" + } + }, + { + "package": "swift-http-types", + "repositoryURL": "https://github.com/apple/swift-http-types", + "state": { + "branch": null, + "revision": "1ddbea1ee34354a6a2532c60f98501c35ae8edfa", + "version": "1.2.0" + } + }, + { + "package": "swift-nio", + "repositoryURL": "https://github.com/apple/swift-nio.git", + "state": { + "branch": null, + "revision": "fc79798d5a150d61361a27ce0c51169b889e23de", + "version": "2.68.0" + } + }, + { + "package": "swift-nio-extras", + "repositoryURL": "https://github.com/apple/swift-nio-extras.git", + "state": { + "branch": null, + "revision": "05c36b57453d23ea63785d58a7dbc7b70ba1745e", + "version": "1.23.0" + } + }, + { + "package": "swift-nio-http2", + "repositoryURL": "https://github.com/apple/swift-nio-http2.git", + "state": { + "branch": null, + "revision": "a0224f3d20438635dd59c9fcc593520d80d131d0", + "version": "1.33.0" + } + }, + { + "package": "swift-nio-ssl", + "repositoryURL": "https://github.com/apple/swift-nio-ssl.git", + "state": { + "branch": null, + "revision": "2b09805797f21c380f7dc9bedaab3157c5508efb", + "version": "2.27.0" + } + }, + { + "package": "swift-nio-transport-services", + "repositoryURL": "https://github.com/apple/swift-nio-transport-services.git", + "state": { + "branch": null, + "revision": "38ac8221dd20674682148d6451367f89c2652980", + "version": "1.21.0" + } + }, + { + "package": "swift-openapi-runtime", + "repositoryURL": "https://github.com/apple/swift-openapi-runtime", + "state": { + "branch": null, + "revision": "a51b3bd6f2151e9a6f792ca6937a7242c4758768", + "version": "0.3.6" + } + }, + { + "package": "swift-qrcode-generator", + "repositoryURL": "https://github.com/dagronf/swift-qrcode-generator", + "state": { + "branch": null, + "revision": "5ca09b6a2ad190f94aa3d6ddef45b187f8c0343b", + "version": "1.0.3" + } + }, + { + "package": "swift-system", + "repositoryURL": "https://github.com/apple/swift-system.git", + "state": { + "branch": null, + "revision": "6a9e38e7bd22a3b8ba80bddf395623cf68f57807", + "version": "1.3.1" + } + }, + { + "package": "SwiftFormat", + "repositoryURL": "https://github.com/nicklockwood/SwiftFormat", + "state": { + "branch": null, + "revision": "d6309f7440889427426143b4a0b100b959d3f3e6", + "version": "0.54.3" + } + }, + { + "package": "SwiftImageReadWrite", + "repositoryURL": "https://github.com/dagronf/SwiftImageReadWrite", + "state": { + "branch": null, + "revision": "5596407d1cf61b953b8e658fa8636a471df3c509", + "version": "1.1.6" + } + }, + { + "package": "SwiftyBeaver", + "repositoryURL": "https://github.com/SwiftyBeaver/SwiftyBeaver.git", + "state": { + "branch": null, + "revision": "8cba041db09596183331d123f337d0eb2e6e8e91", + "version": "2.1.1" + } + }, + { + "package": "Swime", + "repositoryURL": "https://github.com/sendyhalim/Swime", + "state": { + "branch": null, + "revision": "4e538834483059ceefaaad8cdb3abe0d7d1c5146", + "version": "3.1.0" + } + }, + { + "package": "TonAPI", + "repositoryURL": "https://github.com/DRadmir/ton-api-swift.git", + "state": { + "branch": "main", + "revision": "8ddff19a40d3d00503cab7fb9d9eb77459169488", + "version": null + } + }, + { + "package": "TweetNacl", + "repositoryURL": "https://github.com/bitmark-inc/tweetnacl-swiftwrap", + "state": { + "branch": null, + "revision": "f8fd111642bf2336b11ef9ea828510693106e954", + "version": "1.1.0" + } + }, + { + "package": "WalletConnect", + "repositoryURL": "https://github.com/WalletConnect/WalletConnectSwiftV2", + "state": { + "branch": null, + "revision": "58d2b49eeac5cf94432e2647b9107577c156a25c", + "version": "1.9.9" + } + }, + { + "package": "Web3", + "repositoryURL": "https://github.com/bnsports/Web3.swift.git", + "state": { + "branch": null, + "revision": "a526779488e5fe2fa993d9614f11f57b00cc1858", + "version": "7.7.7" + } + }, + { + "package": "websocket-kit", + "repositoryURL": "https://github.com/vapor/websocket-kit", + "state": { + "branch": null, + "revision": "4232d34efa49f633ba61afde365d3896fc7f8740", + "version": "2.15.0" + } + }, + { + "package": "xxHash-Swift", + "repositoryURL": "https://github.com/daisuke-t-jp/xxHash-Swift", + "state": { + "branch": null, + "revision": "e86a07ab4867f81481d430e1370a5ec97b6e3359", + "version": "1.1.1" + } + } + ] + }, + "version": 1 } diff --git a/fearless/ApplicationLayer/ServiceAssembly.swift b/fearless/ApplicationLayer/ServiceAssembly.swift new file mode 100644 index 0000000000..dc18546066 --- /dev/null +++ b/fearless/ApplicationLayer/ServiceAssembly.swift @@ -0,0 +1,236 @@ +import Foundation +import SSFTransferService +import SoraKeystore +import SSFStorageQueryKit +import RobinHood +import SSFUtils +import SSFModels + +final class ServiceAssembly { + static let shared = ServiceAssembly() + private init() {} + + lazy var chainRegistry = ChainRegistryFacade.sharedRegistry + lazy var logger = Logger.shared + lazy var operationManager = OperationManagerFacade.sharedManager + lazy var substrateRepositoryFacade = SubstrateDataStorageFacade.shared + lazy var keystore: KeystoreProtocol = Keychain() + lazy var priceLocalSubscriber = PriceLocalStorageSubscriberImpl.shared + lazy var eventCenter = EventCenter.shared + + private var _accountInfoRemoteServiceDefault: AccountInfoRemoteService? + func accountInfoRemoteServiceDefault() -> AccountInfoRemoteService { + if let _accountInfoRemoteServiceDefault { + return _accountInfoRemoteServiceDefault + } + + let service = AccountInfoRemoteServiceDefault( + ethereumRemoteBalanceFetching: ethereumRemoteBalanceFetching(), + tonRemoteBalanceFetching: tonRemoteBalanceFetching(), + substrateRemoteBalanceFetching: substrateRemoteBalanceFetching() + ) + _accountInfoRemoteServiceDefault = service + return service + } + + private var _ethereumRemoteBalanceFetching: AccountInfoRemoteService? + func ethereumRemoteBalanceFetching() -> AccountInfoRemoteService { + if let _ethereumRemoteBalanceFetching { + return _ethereumRemoteBalanceFetching + } + let ethereumBalanceRepositoryWrapper = BalanceRepositoryCacheWrapper( + logger: logger, + repository: accountInfoStorageWrapper(), + operationManager: operationManager + ) + let service = EthereumRemoteBalanceFetching( + chainRegistry: chainRegistry, + repositoryWrapper: ethereumBalanceRepositoryWrapper + ) + _ethereumRemoteBalanceFetching = service + return service + } + + private var _tonRemoteBalanceFetching: AccountInfoRemoteService? + func tonRemoteBalanceFetching() -> AccountInfoRemoteService { + if let _tonRemoteBalanceFetching { + return _tonRemoteBalanceFetching + } + let tonBalanceRepositoryWrapper = BalanceRepositoryCacheWrapper( + logger: logger, + repository: accountInfoStorageWrapper(), + operationManager: operationManager + ) + + let service = TonRemoteBalanceFetchingImpl( + chainRegistry: chainRegistry, + repositoryWrapper: tonBalanceRepositoryWrapper, + jettonInjector: tonJettonInjector() + ) + _tonRemoteBalanceFetching = service + return service + } + + private var _substrateRemoteBalanceFetching: AccountInfoRemoteService? + func substrateRemoteBalanceFetching() -> AccountInfoRemoteService { + if let _substrateRemoteBalanceFetching { + return _substrateRemoteBalanceFetching + } + let storagePerformer = SSFStorageQueryKit.StorageRequestPerformerDefault( + chainRegistry: chainRegistry + ) + let service = SubstrateRemoteBalanceFetchingImpl( + storagePerformer: storagePerformer + ) + _substrateRemoteBalanceFetching = service + return service + } + + private var _accountInfoStorageWrapper: AnyDataProviderRepository? + func accountInfoStorageWrapper() -> AnyDataProviderRepository { + if let _accountInfoStorageWrapper { + return _accountInfoStorageWrapper + } + let service = SubstrateRepositoryFactory( + storageFacade: UserDataStorageFacade.shared + ).createAccountInfoStorageItemRepository() + + _accountInfoStorageWrapper = service + return service + } + + private var _existentialDepositService: ExistentialDepositServiceProtocol? + func existentialDepositService() -> ExistentialDepositServiceProtocol { + if let _existentialDepositService { + return _existentialDepositService + } + let existentialDepositService = ExistentialDepositService( + operationManager: operationManager, + chainRegistry: chainRegistry + ) + _existentialDepositService = existentialDepositService + return existentialDepositService + } + + func transferService(for wallet: MetaAccountModel) -> TransferService { + TransferServiceDefault( + wallet: wallet, + keystore: keystore, + chainRegistry: chainRegistry + ) + } + + private var _storageOperationFactory: StorageRequestFactoryProtocol? + func storageOperationFactory() -> StorageRequestFactoryProtocol { + if let _storageOperationFactory { + return _storageOperationFactory + } + let storageOperationFactory = StorageRequestFactory( + remoteFactory: StorageKeyFactory(), + operationManager: operationManager + ) + _storageOperationFactory = storageOperationFactory + return storageOperationFactory + } + + private var _polkaswapService: PolkaswapService? + func polkaswapService() -> PolkaswapService { + if let _polkaswapService { + return _polkaswapService + } + + let settingsRepository: CoreDataRepository = + substrateRepositoryFacade.createRepository( + filter: nil, + sortDescriptors: [], + mapper: AnyCoreDataMapper(PolkaswapSettingMapper()) + ) + + let operationFactory = PolkaswapOperationFactory( + storageRequestFactory: storageOperationFactory(), + chainRegistry: chainRegistry, + chainId: Chain.soraMain.genesisHash + ) + let polkaswapService = PolkaswapServiceImpl( + polkaswapOperationFactory: operationFactory, + settingsRepository: AnyDataProviderRepository(settingsRepository), + operationManager: operationManager + ) + _polkaswapService = polkaswapService + return polkaswapService + } + + func chainModelRepository( + for filter: NSPredicate? = NSPredicate.enabledCHain(), + sortDescriptors: [NSSortDescriptor] = [] + ) -> AnyDataProviderRepository { + let chainRepository = ChainRepositoryFactory().createRepository( + for: filter, + sortDescriptors: sortDescriptors + ) + return AnyDataProviderRepository(chainRepository) + } + + func asyncChainModelRepository( + for filter: NSPredicate? = NSPredicate.enabledCHain(), + sortDescriptors: [NSSortDescriptor] = [] + ) -> AsyncAnyRepository { + let chainRepository = ChainRepositoryFactory().createAsyncRepository( + for: filter, + sortDescriptors: sortDescriptors + ) + return AsyncAnyRepository(chainRepository) + } + + func addressChainDefiner(wallet: MetaAccountModel) -> AddressChainDefiner { + AddressChainDefiner( + operationManager: operationManager, + chainModelRepository: chainModelRepository(), + wallet: wallet + ) + } + + func chainAssetFetching(qualityOfService: QualityOfService) -> ChainAssetFetchingProtocol { + let operationQueue = OperationQueue() + operationQueue.qualityOfService = qualityOfService + let chainAssetFetching = ChainAssetsFetching( + chainRepository: chainModelRepository(), + operationQueue: operationQueue + ) + return chainAssetFetching + } + + private var _scamInfoAsyncRepository: AsyncAnyRepository? + func scamInfoAsyncRepository() -> AsyncAnyRepository { + if let _scamInfoAsyncRepository { + return _scamInfoAsyncRepository + } + let mapper: CodableCoreDataMapper = + CodableCoreDataMapper(entityIdentifierFieldName: #keyPath(CDScamInfo.address)) + let repository: AsyncCoreDataRepositoryDefault = + substrateRepositoryFacade.createAsyncRepository( + filter: nil, + sortDescriptors: [], + mapper: AnyCoreDataMapper(mapper) + ) + let anyRepository = AsyncAnyRepository(repository) + _scamInfoAsyncRepository = anyRepository + return anyRepository + } + + private var _tonJettonInjector: TonJettonInjector? + func tonJettonInjector() -> TonJettonInjector { + if let _tonJettonInjector { + return _tonJettonInjector + } + + let repo = asyncChainModelRepository() + let injector = TonJettonInjectorImpl( + chainModelRepository: repo, + eventCenter: eventCenter, + logger: logger + ) + _tonJettonInjector = injector + return injector + } +} diff --git a/fearless/ApplicationLayer/Services/Balance/AccountInfo/SubstrateAccountInfoFetching.swift b/fearless/ApplicationLayer/Services/Balance/AccountInfo/SubstrateAccountInfoFetching.swift index c93993653e..b479ee300c 100644 --- a/fearless/ApplicationLayer/Services/Balance/AccountInfo/SubstrateAccountInfoFetching.swift +++ b/fearless/ApplicationLayer/Services/Balance/AccountInfo/SubstrateAccountInfoFetching.swift @@ -127,67 +127,69 @@ final class AccountInfoFetching: AccountInfoFetchingProtocol { completionBlock(chainAsset, nil) return } - if chainAsset.chain.isEthereum { - self?.handleEthereumAccountInfo( - chainAsset: chainAsset, - item: item, completionBlock: - completionBlock - ) - return - } - switch chainAsset.chainAssetType { - case .normal: - self?.handleAccountInfo( - chainAsset: chainAsset, - item: item, - completionBlock: completionBlock - ) - case - .ormlChain, - .ormlAsset, - .foreignAsset, - .stableAssetPoolToken, - .liquidCrowdloan, - .vToken, - .vsToken, - .stable, - .assetId, - .token2, - .xcm: - self?.handleOrmlAccountInfo( - chainAsset: chainAsset, - item: item, - completionBlock: completionBlock - ) - case .equilibrium: - self?.handleEquilibrium( - chainAsset: chainAsset, - accountId: accountId, - item: item, - completionBlock: completionBlock - ) - case .assets: - self?.handleAssetAccount( - chainAsset: chainAsset, - item: item, - completionBlock: completionBlock - ) - case .soraAsset: - if chainAsset.isUtility { + + switch chainAsset.chain.ecosystem { + case .substrate, .ethereumBased: + switch chainAsset.chainAssetType.substrateAssetType { + case .normal: self?.handleAccountInfo( chainAsset: chainAsset, item: item, completionBlock: completionBlock ) - } else { + case + .ormlChain, + .ormlAsset, + .foreignAsset, + .stableAssetPoolToken, + .liquidCrowdloan, + .vToken, + .vsToken, + .stable, + .assetId, + .token2, + .xcm: self?.handleOrmlAccountInfo( chainAsset: chainAsset, item: item, completionBlock: completionBlock ) + case .equilibrium: + self?.handleEquilibrium( + chainAsset: chainAsset, + accountId: accountId, + item: item, + completionBlock: completionBlock + ) + case .assets: + self?.handleAssetAccount( + chainAsset: chainAsset, + item: item, + completionBlock: completionBlock + ) + case .soraAsset: + if chainAsset.isUtility { + self?.handleAccountInfo( + chainAsset: chainAsset, + item: item, + completionBlock: completionBlock + ) + } else { + self?.handleOrmlAccountInfo( + chainAsset: chainAsset, + item: item, + completionBlock: completionBlock + ) + } + case .none: + break } - case .none: - break + case .ethereum, .ton: + self?.handleEthereumAccountInfo( + chainAsset: chainAsset, + item: item, completionBlock: + completionBlock + ) } default: completionBlock(chainAsset, nil) @@ -266,101 +268,102 @@ private extension AccountInfoFetching { return ClosureOperation { [:] } } - if chainAsset.chain.isEthereum { - return ClosureOperation { - let accountInfo = try JSONDecoder().decode(AccountInfo?.self, from: accountInfoStorageWrapper.data) + switch chainAsset.chain.ecosystem { + case .substrate, .ethereumBased: + let chainAssetType = chainAsset.chainAssetType.substrateAssetType.map { type in + guard type == .soraAsset else { + return type + } - return [chainAsset: accountInfo] + /* Sora assets logic */ + if chainAsset.isUtility { + return .normal + } else { + return .soraAsset + } } - } + switch chainAssetType { + case .none: + return ClosureOperation { [chainAsset: nil] } + case .normal: + guard let decodingOperation: StorageDecodingOperation = createDecodingOperation( + for: accountInfoStorageWrapper.data, + chainAsset: chainAsset, + storagePath: .account + ) else { + return ClosureOperation { [chainAsset: nil] } + } - let chainAssetType = chainAsset.chainAssetType.map { type in - guard type == .soraAsset else { - return type - } + let operation = createNormalMappingOperation( + chainAsset: chainAsset, + dependingOn: decodingOperation + ) - /* Sora assets logic */ - if chainAsset.isUtility { - return .normal - } else { - return .soraAsset - } - } - switch chainAssetType { - case .none: - return ClosureOperation { [chainAsset: nil] } - case .normal: - guard let decodingOperation: StorageDecodingOperation = createDecodingOperation( - for: accountInfoStorageWrapper.data, - chainAsset: chainAsset, - storagePath: .account - ) else { - return ClosureOperation { [chainAsset: nil] } - } + return operation + case + .ormlChain, + .ormlAsset, + .foreignAsset, + .stableAssetPoolToken, + .liquidCrowdloan, + .vToken, + .vsToken, + .stable, + .soraAsset, + .assetId, + .token2, + .xcm: + guard let decodingOperation: StorageDecodingOperation = createDecodingOperation( + for: accountInfoStorageWrapper.data, + chainAsset: chainAsset, + storagePath: .tokens + ) else { + return ClosureOperation { [chainAsset: nil] } + } - let operation = createNormalMappingOperation( - chainAsset: chainAsset, - dependingOn: decodingOperation - ) + let operation = createOrmlMappingOperation( + chainAsset: chainAsset, + dependingOn: decodingOperation + ) - return operation - case - .ormlChain, - .ormlAsset, - .foreignAsset, - .stableAssetPoolToken, - .liquidCrowdloan, - .vToken, - .vsToken, - .stable, - .soraAsset, - .assetId, - .token2, - .xcm: - guard let decodingOperation: StorageDecodingOperation = createDecodingOperation( - for: accountInfoStorageWrapper.data, - chainAsset: chainAsset, - storagePath: .tokens - ) else { - return ClosureOperation { [chainAsset: nil] } - } + return operation + case .equilibrium: + guard let decodingOperation: StorageDecodingOperation = createDecodingOperation( + for: accountInfoStorageWrapper.data, + chainAsset: chainAsset, + storagePath: chainAsset.storagePath + ) else { + return ClosureOperation { [chainAsset: nil] } + } - let operation = createOrmlMappingOperation( - chainAsset: chainAsset, - dependingOn: decodingOperation - ) + let operation = createEquilibriumMappingOperation( + chainAsset: chainAsset, + dependingOn: decodingOperation + ) - return operation - case .equilibrium: - guard let decodingOperation: StorageDecodingOperation = createDecodingOperation( - for: accountInfoStorageWrapper.data, - chainAsset: chainAsset, - storagePath: chainAsset.storagePath - ) else { - return ClosureOperation { [chainAsset: nil] } - } + return operation + case .assets: + guard let decodingOperation: StorageDecodingOperation = createDecodingOperation( + for: accountInfoStorageWrapper.data, + chainAsset: chainAsset, + storagePath: .assetsAccount + ) else { + return ClosureOperation { [chainAsset: nil] } + } - let operation = createEquilibriumMappingOperation( - chainAsset: chainAsset, - dependingOn: decodingOperation - ) + let operation = createAssetMappingOperation( + chainAsset: chainAsset, + dependingOn: decodingOperation + ) - return operation - case .assets: - guard let decodingOperation: StorageDecodingOperation = createDecodingOperation( - for: accountInfoStorageWrapper.data, - chainAsset: chainAsset, - storagePath: .assetsAccount - ) else { - return ClosureOperation { [chainAsset: nil] } + return operation } + case .ethereum, .ton: + return ClosureOperation { + let accountInfo = try JSONDecoder().decode(AccountInfo?.self, from: accountInfoStorageWrapper.data) - let operation = createAssetMappingOperation( - chainAsset: chainAsset, - dependingOn: decodingOperation - ) - - return operation + return [chainAsset: accountInfo] + } } } diff --git a/fearless/ApplicationLayer/Services/Balance/AccountInfoRemoteService.swift b/fearless/ApplicationLayer/Services/Balance/AccountInfoRemoteService.swift new file mode 100644 index 0000000000..22fd5b2475 --- /dev/null +++ b/fearless/ApplicationLayer/Services/Balance/AccountInfoRemoteService.swift @@ -0,0 +1,102 @@ +import Foundation +import SSFStorageQueryKit +import SSFChainRegistry +import SSFNetwork +import SSFModels +import SSFUtils +import RobinHood + +protocol AccountInfoRemoteService { + func fetchAccountInfos( + for chain: ChainModel, + wallet: MetaAccountModel + ) async throws -> [ChainAssetId: AccountInfo?] + + func fetchAccountInfo( + for chainAsset: ChainAsset, + wallet: MetaAccountModel + ) async throws -> AccountInfo? + + func fetchAccountInfos( + for chainAssets: [ChainAsset], + wallet: MetaAccountModel + ) async throws -> [ChainAssetKey: AccountInfo?] +} + +final class AccountInfoRemoteServiceDefault: AccountInfoRemoteService { + private let ethereumRemoteBalanceFetching: AccountInfoRemoteService + private let tonRemoteBalanceFetching: AccountInfoRemoteService + private let substrateRemoteBalanceFetching: AccountInfoRemoteService + + init( + ethereumRemoteBalanceFetching: AccountInfoRemoteService, + tonRemoteBalanceFetching: AccountInfoRemoteService, + substrateRemoteBalanceFetching: AccountInfoRemoteService + ) { + self.ethereumRemoteBalanceFetching = ethereumRemoteBalanceFetching + self.tonRemoteBalanceFetching = tonRemoteBalanceFetching + self.substrateRemoteBalanceFetching = substrateRemoteBalanceFetching + } + + // MARK: - AccountInfoStorageService + + func fetchAccountInfos( + for chain: ChainModel, + wallet: MetaAccountModel + ) async throws -> [ChainAssetId: AccountInfo?] { + let fetcher = getFetcher(for: chain.ecosystem) + let accountInfos = try await fetcher.fetchAccountInfos(for: chain, wallet: wallet) + return accountInfos + } + + func fetchAccountInfo( + for chainAsset: ChainAsset, + wallet: MetaAccountModel + ) async throws -> AccountInfo? { + let fetcher = getFetcher(for: chainAsset.chain.ecosystem) + let accountInfos = try await fetcher.fetchAccountInfo(for: chainAsset, wallet: wallet) + return accountInfos + } + + func fetchAccountInfos( + for chainAssets: [ChainAsset], + wallet: MetaAccountModel + ) async throws -> [ChainAssetKey: AccountInfo?] { + let dict = Dictionary(grouping: chainAssets, by: { $0.chain }) + let balances = try await withThrowingTaskGroup( + of: [ChainAssetKey: AccountInfo?].self, + returning: [ChainAssetKey: AccountInfo?].self + ) { [weak self] group in + guard let self else { return [:] } + + dict.forEach { chain, chainAssets in + group.addTask { + let fetcher = self.getFetcher(for: chain.ecosystem) + let result = try await fetcher.fetchAccountInfos(for: chainAssets, wallet: wallet) + return result + } + } + + var result: [ChainAssetKey: AccountInfo?] = [:] + for try await balance in group { + result = result.merging(balance, uniquingKeysWith: { current, _ in current }) + } + return result + } + + return balances + } + + // MARK: - Private methods + + private func getFetcher(for ecosystem: Ecosystem) -> AccountInfoRemoteService { + switch ecosystem { + case .substrate, .ethereumBased: + return substrateRemoteBalanceFetching + case .ethereum: + return ethereumRemoteBalanceFetching + case .ton: + return tonRemoteBalanceFetching + } + } +} diff --git a/fearless/ApplicationLayer/Services/Balance/BalanceLocksFetching.swift b/fearless/ApplicationLayer/Services/Balance/BalanceLocksFetching.swift index 5066e7bdba..d847b7aa03 100644 --- a/fearless/ApplicationLayer/Services/Balance/BalanceLocksFetching.swift +++ b/fearless/ApplicationLayer/Services/Balance/BalanceLocksFetching.swift @@ -3,6 +3,7 @@ import SSFModels import SSFUtils import RobinHood import BigInt +import SSFCrypto enum BalanceLocksFetchingError: Error { case unknownChainAssetType @@ -47,7 +48,7 @@ final class BalanceLocksFetchingDefault { let controllerAddress: String? = try? await storageRequestPerformer.performSingle(controllerRequest) if let controllerAddress { - return try controllerAddress.toAccountId() + return try controllerAddress.toAccountId(using: chainAsset.chain.chainFormat) } let controllerAccountId: Data? = try await storageRequestPerformer.performSingle(controllerRequest) diff --git a/fearless/ApplicationLayer/Services/Balance/AccountInfo/EthereumRemoteBalanceFetching.swift b/fearless/ApplicationLayer/Services/Balance/EthereumRemoteBalanceFetching.swift similarity index 76% rename from fearless/ApplicationLayer/Services/Balance/AccountInfo/EthereumRemoteBalanceFetching.swift rename to fearless/ApplicationLayer/Services/Balance/EthereumRemoteBalanceFetching.swift index 030079c77f..4b78e0be7a 100644 --- a/fearless/ApplicationLayer/Services/Balance/AccountInfo/EthereumRemoteBalanceFetching.swift +++ b/fearless/ApplicationLayer/Services/Balance/EthereumRemoteBalanceFetching.swift @@ -4,33 +4,58 @@ import Web3ContractABI import Web3PromiseKit import SSFModels import RobinHood +import SSFCrypto -final actor EthereumRemoteBalanceFetching { +actor EthereumRemoteBalanceFetching: AccountInfoRemoteService { private let chainRegistry: ChainRegistryProtocol - private let repositoryWrapper: EthereumBalanceRepositoryCacheWrapper + private let repositoryWrapper: BalanceRepositoryCacheWrapper init( chainRegistry: ChainRegistryProtocol, - repositoryWrapper: EthereumBalanceRepositoryCacheWrapper + repositoryWrapper: BalanceRepositoryCacheWrapper ) { self.chainRegistry = chainRegistry self.repositoryWrapper = repositoryWrapper } - nonisolated private func fetchEthereumBalanceOperation(for chainAsset: ChainAsset, address: String) -> AwaitOperation<[ChainAsset: AccountInfo?]> { - AwaitOperation { [weak self] in - let accountInfo = try await self?.fetchETHBalance(for: chainAsset, address: address) - return [chainAsset: accountInfo] + // MARK: - AccountInfoRemoteService + + func fetchAccountInfos( + for chain: SSFModels.ChainModel, + wallet: MetaAccountModel + ) async throws -> [ChainAssetId: AccountInfo?] { + let chainAssets = chain.chainAssets + let response = try await fetch(for: chainAssets, wallet: wallet) + let mapped = response.map { + ($0.key.chainAssetId, $0.value) } + let map = Dictionary(uniqueKeysWithValues: mapped) + return map } - nonisolated private func fetchErc20BalanceOperation(for chainAsset: ChainAsset, address: String) -> AwaitOperation<[ChainAsset: AccountInfo?]> { - AwaitOperation { [weak self] in - let accountInfo = try await self?.fetchERC20Balance(for: chainAsset, address: address) - return [chainAsset: accountInfo] + func fetchAccountInfo( + for chainAsset: SSFModels.ChainAsset, + wallet: MetaAccountModel + ) async throws -> AccountInfo? { + guard let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId else { + throw ConvenienceError(error: "Missing account id for \(chainAsset.debugName)") } + let accountInfo = try await fetch( + for: chainAsset, + accountId: accountId + ) + return accountInfo + } + + func fetchAccountInfos( + for chainAssets: [SSFModels.ChainAsset], + wallet: MetaAccountModel + ) async throws -> [ChainAssetKey: AccountInfo?] { + try await fetchByUniqKey(for: chainAssets, wallet: wallet) } + // MARK: - Private methods + private func fetchETHBalance(for chainAsset: ChainAsset, address: String) async throws -> AccountInfo? { guard let ws = chainRegistry.getEthereumConnection(for: chainAsset.chain.chainId) else { throw ChainRegistryError.connectionUnavailable @@ -45,7 +70,7 @@ final actor EthereumRemoteBalanceFetching { return } if let balance = resp.result { - let accountInfo = AccountInfo(ethBalance: balance.quantity) + let accountInfo = AccountInfo(balance: balance.quantity) unwrapedContinuation.resume(with: .success(accountInfo)) nillableContinuation = nil } else if let error = resp.error { @@ -76,7 +101,7 @@ final actor EthereumRemoteBalanceFetching { } if let response = response, let balance = response["_balance"] as? BigUInt { - let accountInfo = AccountInfo(ethBalance: balance) + let accountInfo = AccountInfo(balance: balance) unwrapedContinuation.resume(with: .success(accountInfo)) nillableContinuation = nil } else if let error = error { @@ -90,42 +115,7 @@ final actor EthereumRemoteBalanceFetching { } } - nonisolated private func cache(accountInfo: AccountInfo?, chainAsset: ChainAsset, accountId: AccountId) throws { - let storagePath = chainAsset.storagePath - - let localKey = try LocalStorageKeyFactory().createFromStoragePath( - storagePath, - chainAssetKey: chainAsset.uniqueKey(accountId: accountId) - ) - - try repositoryWrapper.save(data: accountInfo, identifier: localKey) - } -} - -extension EthereumRemoteBalanceFetching: AccountInfoFetchingProtocol { - func fetch( - for chainAsset: ChainAsset, - accountId: AccountId - ) async throws -> (ChainAsset, AccountInfo?) { - guard let address = try? AddressFactory.address(for: accountId, chain: chainAsset.chain) else { - return (chainAsset, nil) - } - - switch chainAsset.asset.ethereumType { - case .normal: - let accountInfo = try await fetchETHBalance(for: chainAsset, address: address) - try cache(accountInfo: accountInfo, chainAsset: chainAsset, accountId: accountId) - return (chainAsset, accountInfo) - case .erc20, .bep20: - let accountInfo = try await fetchERC20Balance(for: chainAsset, address: address) - try cache(accountInfo: accountInfo, chainAsset: chainAsset, accountId: accountId) - return (chainAsset, accountInfo) - case .none: - return (chainAsset, nil) - } - } - - func fetch( + private func fetch( for chainAssets: [ChainAsset], wallet: MetaAccountModel ) async throws -> [ChainAsset: AccountInfo?] { @@ -134,7 +124,7 @@ extension EthereumRemoteBalanceFetching: AccountInfoFetchingProtocol { return [:] } - let chainAssets = chainAssets.filter { $0.chain.isEthereum } + let chainAssets = chainAssets.filter { $0.chain.ecosystem.isEthereum } chainAssets.forEach { chainAsset in group.addTask { @@ -142,7 +132,7 @@ extension EthereumRemoteBalanceFetching: AccountInfoFetchingProtocol { return (chainAsset, nil) } - switch chainAsset.asset.ethereumType { + switch chainAsset.asset.assetType.ethereumAssetType { case .normal: do { let accountInfo = try await strongSelf.fetchETHBalance(for: chainAsset, address: address) @@ -185,29 +175,29 @@ extension EthereumRemoteBalanceFetching: AccountInfoFetchingProtocol { return balances } - nonisolated func fetch( + private func fetch( for chainAsset: ChainAsset, - accountId: AccountId, - completionBlock: @escaping (ChainAsset, AccountInfo?) -> Void - ) { - Task { - let result = try await fetch(for: chainAsset, accountId: accountId) - completionBlock(result.0, result.1) + accountId: AccountId + ) async throws -> AccountInfo? { + guard let address = try? AddressFactory.address(for: accountId, chain: chainAsset.chain) else { + return nil } - } - nonisolated func fetch( - for chainAssets: [ChainAsset], - wallet: MetaAccountModel, - completionBlock: @escaping ([ChainAsset: AccountInfo?]) -> Void - ) { - Task { - let result = try await fetch(for: chainAssets, wallet: wallet) - completionBlock(result) + switch chainAsset.asset.assetType.ethereumAssetType { + case .normal: + let accountInfo = try await fetchETHBalance(for: chainAsset, address: address) + try cache(accountInfo: accountInfo, chainAsset: chainAsset, accountId: accountId) + return accountInfo + case .erc20, .bep20: + let accountInfo = try await fetchERC20Balance(for: chainAsset, address: address) + try cache(accountInfo: accountInfo, chainAsset: chainAsset, accountId: accountId) + return accountInfo + case .none: + return nil } } - func fetchByUniqKey( + private func fetchByUniqKey( for chainAssets: [ChainAsset], wallet: MetaAccountModel ) async throws -> [ChainAssetKey: AccountInfo?] { @@ -222,4 +212,15 @@ extension EthereumRemoteBalanceFetching: AccountInfoFetchingProtocol { } return Dictionary(uniqueKeysWithValues: mapped) } + + nonisolated private func cache(accountInfo: AccountInfo?, chainAsset: ChainAsset, accountId: AccountId) throws { + let storagePath = chainAsset.storagePath + + let localKey = try LocalStorageKeyFactory().createFromStoragePath( + storagePath, + chainAssetKey: chainAsset.uniqueKey(accountId: accountId) + ) + + try repositoryWrapper.save(data: accountInfo, identifier: localKey) + } } diff --git a/fearless/ApplicationLayer/Services/Balance/RemoteSubscription/AccountInfoRemoteService.swift b/fearless/ApplicationLayer/Services/Balance/SubstrateRemoteBalanceFetching.swift similarity index 70% rename from fearless/ApplicationLayer/Services/Balance/RemoteSubscription/AccountInfoRemoteService.swift rename to fearless/ApplicationLayer/Services/Balance/SubstrateRemoteBalanceFetching.swift index 2698311962..9c8cfeecf3 100644 --- a/fearless/ApplicationLayer/Services/Balance/RemoteSubscription/AccountInfoRemoteService.swift +++ b/fearless/ApplicationLayer/Services/Balance/SubstrateRemoteBalanceFetching.swift @@ -1,40 +1,14 @@ import Foundation -import SSFStorageQueryKit -import SSFChainRegistry -import SSFNetwork import SSFModels -import SSFUtils -import RobinHood - -protocol AccountInfoRemoteService { - func fetchAccountInfos( - for chain: ChainModel, - wallet: MetaAccountModel - ) async throws -> [ChainAssetId: AccountInfo?] - - func fetchAccountInfo( - for chainAsset: ChainAsset, - wallet: MetaAccountModel - ) async throws -> AccountInfo? -} +import SSFStorageQueryKit -final class AccountInfoRemoteServiceDefault: AccountInfoRemoteService { - private let runtimeItemRepository: AsyncAnyRepository - private let ethereumRemoteBalanceFetching: EthereumRemoteBalanceFetching +actor SubstrateRemoteBalanceFetchingImpl: AccountInfoRemoteService { private let storagePerformer: SSFStorageQueryKit.StorageRequestPerformer - init( - runtimeItemRepository: AsyncAnyRepository, - ethereumRemoteBalanceFetching: EthereumRemoteBalanceFetching, - storagePerformer: SSFStorageQueryKit.StorageRequestPerformer - ) { - self.runtimeItemRepository = runtimeItemRepository - self.ethereumRemoteBalanceFetching = ethereumRemoteBalanceFetching + init(storagePerformer: SSFStorageQueryKit.StorageRequestPerformer) { self.storagePerformer = storagePerformer } - // MARK: - AccountInfoStorageService - func fetchAccountInfos( for chain: ChainModel, wallet: MetaAccountModel @@ -42,14 +16,8 @@ final class AccountInfoRemoteServiceDefault: AccountInfoRemoteService { guard let accountId = wallet.fetch(for: chain.accountRequest())?.accountId else { throw ConvenienceError(error: "Missing AccountId for chain: \(chain.name)") } - - if chain.isEthereum { - let accountInfos = try await fetchEthereum(for: chain, wallet: wallet) - return accountInfos - } else { - let accountInfos = try await fetchSubstrate(for: chain, accountId: accountId) - return accountInfos - } + let accountInfos = try await fetchSubstrate(for: chain, accountId: accountId) + return accountInfos } func fetchAccountInfo( @@ -59,22 +27,47 @@ final class AccountInfoRemoteServiceDefault: AccountInfoRemoteService { guard let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId else { throw ConvenienceError(error: "Missing account id for \(chainAsset.debugName)") } - if chainAsset.chain.isEthereum { - let response = try await ethereumRemoteBalanceFetching.fetch( - for: chainAsset, - accountId: accountId - ) - return response.1 - } else { - let request = createSubstrateRequest(for: chainAsset, accountId: accountId) - let response = try await storagePerformer.perform([request], chain: chainAsset.chain) - let map = try createSubstrateMap(from: response, chain: chainAsset.chain) - let accountInfo = map[chainAsset.chainAssetId] ?? nil - return accountInfo + let request = createSubstrateRequest(for: chainAsset, accountId: accountId) + let response = try await storagePerformer.perform([request], chain: chainAsset.chain) + let map = try await createSubstrateMap(from: response, chain: chainAsset.chain) + let accountInfo = map[chainAsset.chainAssetId] ?? nil + return accountInfo + } + + func fetchAccountInfos( + for chainAssets: [ChainAsset], + wallet: MetaAccountModel + ) async throws -> [ChainAssetKey: AccountInfo?] { + let dict = Dictionary(grouping: chainAssets, by: { $0.chain }) + let balances = try await withThrowingTaskGroup( + of: [ChainAssetKey: AccountInfo?].self, + returning: [ChainAssetKey: AccountInfo?].self + ) { [weak self] group in + guard let self else { return [:] } + + dict.forEach { chain, chainAssets in + group.addTask { + guard let accountId = wallet.fetch(for: chain.accountRequest())?.accountId else { + throw ConvenienceError(error: "Missing account id for \(chain.name)") + } + let requests = await chainAssets.asyncMap { await self.createSubstrateRequest(for: $0, accountId: accountId) } + let result = try await self.storagePerformer.perform(requests, chain: chain) + let map = try await self.createSubstrateMap(from: result, chain: chain, accountId: accountId) + return map + } + } + + var result: [ChainAssetKey: AccountInfo?] = [:] + for try await balance in group { + result = result.merging(balance, uniquingKeysWith: { current, _ in current }) + } + return result } + + return balances } - // MARK: - Private substrate methods + // MARK: - Private methods private func fetchSubstrate( for chain: ChainModel, @@ -82,14 +75,14 @@ final class AccountInfoRemoteServiceDefault: AccountInfoRemoteService { ) async throws -> [ChainAssetId: AccountInfo?] { let requests = chain.chainAssets.map { createSubstrateRequest(for: $0, accountId: accountId) } let result = try await storagePerformer.perform(requests, chain: chain) - let map = try createSubstrateMap(from: result, chain: chain) + let map = try await createSubstrateMap(from: result, chain: chain) return map } private func createSubstrateMap( from result: [MixStorageResponse], chain: ChainModel - ) throws -> [ChainAssetId: AccountInfo?] { + ) async throws -> [ChainAssetId: AccountInfo?] { try result.reduce([ChainAssetId: AccountInfo?]()) { part, response in var partial = part let id = ChainAssetId(id: response.request.requestId) @@ -101,6 +94,26 @@ final class AccountInfoRemoteServiceDefault: AccountInfoRemoteService { } } + private func createSubstrateMap( + from result: [MixStorageResponse], + chain: ChainModel, + accountId: AccountId + ) async throws -> [ChainAssetKey: AccountInfo?] { + try result.reduce([ChainAssetKey: AccountInfo?]()) { part, response in + var partial = part + let id = ChainAssetId(id: response.request.requestId) + guard let chainAsset = chain.chainAssets.first(where: { $0.chainAssetId == id }) else { + return part + } + let key = chainAsset.uniqueKey(accountId: accountId) + + let accountInfo = try mapAccountInfo(response: response, chain: chain) + partial[key] = accountInfo + + return partial + } + } + private func mapAccountInfo(response: MixStorageResponse, chain: ChainModel) throws -> AccountInfo? { guard let json = response.json else { return nil @@ -212,19 +225,4 @@ final class AccountInfoRemoteServiceDefault: AccountInfoRemoteService { return request } } - - // MARK: - Private ethereum methods - - private func fetchEthereum( - for chain: ChainModel, - wallet: MetaAccountModel - ) async throws -> [ChainAssetId: AccountInfo?] { - let chainAsset = chain.chainAssets - let response = try await ethereumRemoteBalanceFetching.fetch(for: chainAsset, wallet: wallet) - let mapped = response.map { - ($0.key.chainAssetId, $0.value) - } - let map = Dictionary(uniqueKeysWithValues: mapped) - return map - } } diff --git a/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift b/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift new file mode 100644 index 0000000000..f132fad842 --- /dev/null +++ b/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift @@ -0,0 +1,238 @@ +import Foundation +import TonAPI +import BigInt +import SSFModels +import TonSwift + +enum TonRemoteBalanceFetchingError: Error { + case missingAccount + case balanceError + case jettonNotFound + case utilityNotFound +} + +actor TonRemoteBalanceFetchingImpl: AccountInfoRemoteService { + private let chainRegistry: ChainRegistryProtocol + private let repositoryWrapper: BalanceRepositoryCacheWrapper + private let jettonInjector: TonJettonInjector + + init( + chainRegistry: ChainRegistryProtocol, + repositoryWrapper: BalanceRepositoryCacheWrapper, + jettonInjector: TonJettonInjector + ) { + self.chainRegistry = chainRegistry + self.repositoryWrapper = repositoryWrapper + self.jettonInjector = jettonInjector + } + + // MARK: - AccountInfoRemoteService + + func fetchAccountInfos( + for chain: ChainModel, + wallet: MetaAccountModel + ) async throws -> [ChainAssetId: AccountInfo?] { + guard let accountId = wallet.fetch(for: chain.accountRequest())?.accountId else { + throw TonRemoteBalanceFetchingError.missingAccount + } + let address = try accountId.asTonAddress().toRaw() + + let chainAssets = chain.chainAssets.divide { chainAsset in + chainAsset.chainAssetType.tonAssetType == .normal + } + + guard let normal = chainAssets.slice.first else { + throw TonRemoteBalanceFetchingError.utilityNotFound + } + let jettons = chainAssets.remainder + + let chainAccountInfos = try await getChainAccountInfos(address: address) + let normalBalance = chainAccountInfos.normal + let jettonBalances = chainAccountInfos.jettons + + let jettonsAccountInfos = createJettonsAccountInfos( + jettonBalances: jettonBalances, + jettons: jettons + ) + let jettonsAccountInfoMap = Dictionary( + uniqueKeysWithValues: jettonsAccountInfos.map { ($0.0.chainAssetId, $0.1) } + ) + + let cacheValue = [(normal, normalBalance)] + jettonsAccountInfos + try? cache( + cacheValue, + accountId: accountId + ) + + let normalMap: [ChainAssetId: AccountInfo?] = [normal.chainAssetId: normalBalance] + let union = normalMap.merging(jettonsAccountInfoMap, uniquingKeysWith: { current, _ in current }) + return union + } + + func fetchAccountInfo( + for chainAsset: ChainAsset, + wallet: MetaAccountModel + ) async throws -> AccountInfo? { + guard let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId else { + throw TonRemoteBalanceFetchingError.missingAccount + } + let address = try accountId.asTonAddress().toRaw() + + let accountInfo: AccountInfo + switch chainAsset.chainAssetType.tonAssetType { + case .normal: + accountInfo = try await getAccountInfo(address: address) + case .jetton: + let jettons = try await getAccountJettonsBalances(address: address) + guard let jetton = jettons.first(where: { jetton in + jetton.item.walletAddress.toRaw() == chainAsset.asset.id + }) else { + return nil + } + return AccountInfo(balance: jetton.quantity) + case .none: + return nil + } + + let cacheValue = [(chainAsset, accountInfo)] + try? cache( + cacheValue, + accountId: accountId + ) + return accountInfo + } + + func fetchAccountInfos( + for chainAssets: [ChainAsset], + wallet: MetaAccountModel + ) async throws -> [ChainAssetKey: AccountInfo?] { + let chainAssets = chainAssets.divide { chainAsset in + chainAsset.chainAssetType.tonAssetType == .normal + } + + guard let normal = chainAssets.slice.first else { + throw TonRemoteBalanceFetchingError.utilityNotFound + } + let jettons = chainAssets.remainder + + guard let accountId = wallet.fetch(for: normal.chain.accountRequest())?.accountId else { + throw TonRemoteBalanceFetchingError.missingAccount + } + + let address = try accountId.asTonAddress().toRaw() + let chainAccountInfos = try await getChainAccountInfos(address: address) + let normalBalance = chainAccountInfos.normal + let jettonBalances = chainAccountInfos.jettons + + let jettonsAccountInfos = createJettonsAccountInfos( + jettonBalances: jettonBalances, + jettons: jettons + ) + let jettonsAccountInfoMap = Dictionary( + uniqueKeysWithValues: jettonsAccountInfos.map { ($0.0.uniqueKey(accountId: accountId), $0.1) } + ) + + let cacheValue = [(normal, normalBalance)] + jettonsAccountInfos + try? cache( + cacheValue, + accountId: accountId + ) + + let normalKey = normal.uniqueKey(accountId: accountId) + let normalMap: [ChainAssetKey: AccountInfo?] = [normalKey: normalBalance] + let union = normalMap.merging(jettonsAccountInfoMap, uniquingKeysWith: { current, _ in current }) + return union + } + + // MARK: - Private methods + + private func createJettonsAccountInfos( + jettonBalances: [TonJettonBalance], + jettons: [ChainAsset] + ) -> [(ChainAsset, AccountInfo)] { + let jettonsAccountInfo: [(ChainAsset, AccountInfo)] = jettonBalances.compactMap { jetton in + let chainAsset = jettons.first(where: { $0.asset.id == jetton.item.walletAddress.toRaw() }) + guard let chainAsset else { return nil } + return (chainAsset, AccountInfo(balance: jetton.quantity)) + } + return jettonsAccountInfo + } + + private func getChainAccountInfos( + address: String + ) async throws -> (normal: AccountInfo, jettons: [TonJettonBalance]) { + async let normalBalanceTask = getAccountInfo(address: address) + async let jettonBalancesTask = getAccountJettonsBalances(address: address) + let normalBalance = try await normalBalanceTask + let jettonBalances = try await jettonBalancesTask + return (normalBalance, jettonBalances) + } + + private func getAccountInfo( + address: String + ) async throws -> AccountInfo { + let assembly = try chainRegistry.getTonApiAssembly() + let tonAPIClient = assembly.tonAPIClient() + + let response = try await tonAPIClient.getAccount(.init(path: .init(account_id: address))) + let account = try TonAccount(account: try response.ok.body.json) + let stringBalance = String(account.balance) + guard let balance = BigUInt(string: stringBalance) else { + throw TonRemoteBalanceFetchingError.balanceError + } + + let accountInfo = AccountInfo(balance: balance) + return accountInfo + } + + private func getAccountJettonsBalances( + address: String + ) async throws -> [TonJettonBalance] { + let assembly = try chainRegistry.getTonApiAssembly() + let tonAPIClient = assembly.tonAPIClient() + + let response = try await tonAPIClient.getAccountJettonsBalances( + path: .init(account_id: address), + query: .init(currencies: "USD") + ) + + let jettons = try response.ok.body.json.balances.compactMap { jetton in + do { + let quantity = BigUInt(stringLiteral: jetton.balance) + let walletAddress = try TonSwift.Address.parse(jetton.wallet_address.address) + let jettonInfo = try TonJettonInfo(jettonPreview: jetton.jetton) + let jettonItem = TonJettonItem(jettonInfo: jettonInfo, walletAddress: walletAddress) + let jettonBalance = TonJettonBalance(item: jettonItem, quantity: quantity) + return jettonBalance + } catch { + return nil + } + } + Task { + let items = jettons.map { $0.item } + await jettonInjector.inject(jettonItems: items) + } + return jettons + } + + nonisolated private func cache( + _ cache: [(ChainAsset, AccountInfo)], + accountId: AccountId? + ) throws { + guard let accountId else { + return + } + + let transform = try cache.map { + let storagePath = $0.0.storagePath + + let localKey = try LocalStorageKeyFactory().createFromStoragePath( + storagePath, + chainAssetKey: $0.0.uniqueKey(accountId: accountId) + ) + return (localKey, $0.1) + } + let map = Dictionary(uniqueKeysWithValues: transform) + try repositoryWrapper.save(map: map) + } +} diff --git a/fearless/ApplicationLayer/Services/Models/TonConnectConfiguration.swift b/fearless/ApplicationLayer/Services/Models/TonConnectConfiguration.swift new file mode 100644 index 0000000000..704afa90e8 --- /dev/null +++ b/fearless/ApplicationLayer/Services/Models/TonConnectConfiguration.swift @@ -0,0 +1,9 @@ +// +// TonConnectConfiguration.swift +// fearless +// +// Created by Soramitsu on 07.08.2024. +// Copyright © 2024 Soramitsu. All rights reserved. +// + +import Foundation diff --git a/fearless/ApplicationLayer/Services/Models/TonConnectManifest.swift b/fearless/ApplicationLayer/Services/Models/TonConnectManifest.swift new file mode 100644 index 0000000000..ae17649327 --- /dev/null +++ b/fearless/ApplicationLayer/Services/Models/TonConnectManifest.swift @@ -0,0 +1,13 @@ +import Foundation + +public struct TonConnectManifest: Codable, Equatable { + public let url: URL + public let name: String + public let iconUrl: URL? + public let termsOfUseUrl: URL? + public let privacyPolicyUrl: URL? + + public var host: String { + url.host ?? "" + } +} diff --git a/fearless/ApplicationLayer/Services/Models/TonConnectParameters.swift b/fearless/ApplicationLayer/Services/Models/TonConnectParameters.swift new file mode 100644 index 0000000000..8ca1bc01a4 --- /dev/null +++ b/fearless/ApplicationLayer/Services/Models/TonConnectParameters.swift @@ -0,0 +1,17 @@ +import Foundation + +public struct TonConnectParameters { + public enum Version: String { + case v2 = "2" + } + + public let version: Version + public let clientId: String + public let requestPayload: TonConnectRequestPayload + + public init(version: Version, clientId: String, requestPayload: TonConnectRequestPayload) { + self.version = version + self.clientId = clientId + self.requestPayload = requestPayload + } +} diff --git a/fearless/ApplicationLayer/Services/SearchService.swift b/fearless/ApplicationLayer/Services/SearchService.swift index ce9fb556ba..cd09f517db 100644 --- a/fearless/ApplicationLayer/Services/SearchService.swift +++ b/fearless/ApplicationLayer/Services/SearchService.swift @@ -2,6 +2,7 @@ import RobinHood import IrohaCrypto import SSFModels +import SSFCrypto enum SearchServiceError: Error { case addressInvalid diff --git a/fearless/ApplicationLayer/Services/Transfer/Tokens/EthereumTransferService.swift b/fearless/ApplicationLayer/Services/Transfer/Tokens/EthereumTransferService.swift index b3df8682ab..a014331681 100644 --- a/fearless/ApplicationLayer/Services/Transfer/Tokens/EthereumTransferService.swift +++ b/fearless/ApplicationLayer/Services/Transfer/Tokens/EthereumTransferService.swift @@ -27,7 +27,7 @@ final class EthereumTransferService: BaseEthereumService, TransferServiceProtoco } func estimateFee(for transfer: Transfer) async throws -> BigUInt { - switch transfer.chainAsset.asset.ethereumType { + switch transfer.chainAsset.asset.assetType.ethereumAssetType { case .normal: let address = try EthereumAddress(rawAddress: transfer.receiver.hexToBytes()) let senderAddress = try EthereumAddress(rawAddress: senderAddress.hexToBytes()) @@ -56,7 +56,7 @@ final class EthereumTransferService: BaseEthereumService, TransferServiceProtoco } func estimateFee(for transfer: Transfer, baseFeePerGas: EthereumQuantity) async throws -> BigUInt { - switch transfer.chainAsset.asset.ethereumType { + switch transfer.chainAsset.asset.assetType.ethereumAssetType { case .normal: let address = try EthereumAddress(rawAddress: transfer.receiver.hexToBytes()) let call = EthereumCall(to: address) @@ -214,7 +214,7 @@ final class EthereumTransferService: BaseEthereumService, TransferServiceProtoco // MARK: Transfers func submit(transfer: Transfer) async throws -> String { - switch transfer.chainAsset.asset.ethereumType { + switch transfer.chainAsset.asset.assetType.ethereumAssetType { case .normal: return try await transferNative(transfer: transfer) case .erc20, .bep20: diff --git a/fearless/ApplicationLayer/Services/Transfer/Tokens/SubstrateTransferService.swift b/fearless/ApplicationLayer/Services/Transfer/Tokens/SubstrateTransferService.swift index edd13bd489..b1cecf22c0 100644 --- a/fearless/ApplicationLayer/Services/Transfer/Tokens/SubstrateTransferService.swift +++ b/fearless/ApplicationLayer/Services/Transfer/Tokens/SubstrateTransferService.swift @@ -4,6 +4,7 @@ import SSFExtrinsicKit import SSFSigner import SSFUtils import BigInt +import SSFCrypto final class SubstrateTransferService: TransferServiceProtocol { private let extrinsicService: SSFExtrinsicKit.ExtrinsicServiceProtocol @@ -25,7 +26,7 @@ final class SubstrateTransferService: TransferServiceProtocol { guard let address = address, let accountId = try? AddressFactory.accountId(from: address, chain: chain) else { - return AddressFactory.randomAccountId(for: chain) + return AddressFactory.randomAccountId(for: chain.chainFormat) } return accountId @@ -68,7 +69,7 @@ final class SubstrateTransferService: TransferServiceProtocol { guard let address = address, let accountId = try? AddressFactory.accountId(from: address, chain: chain) else { - return AddressFactory.randomAccountId(for: chain) + return AddressFactory.randomAccountId(for: chain.chainFormat) } return accountId diff --git a/fearless/ApplicationLayer/Services/WalletConnect/WalletConnectSigner.swift b/fearless/ApplicationLayer/Services/WalletConnect/WalletConnectSigner.swift index 058e3bacbd..c9a79cbfe2 100644 --- a/fearless/ApplicationLayer/Services/WalletConnect/WalletConnectSigner.swift +++ b/fearless/ApplicationLayer/Services/WalletConnect/WalletConnectSigner.swift @@ -80,8 +80,8 @@ final class WalletConnectSignerImpl: WalletConnectSigner { let publicKeyData = try extractPublicKey(for: chain) let secretKeyData = try extractPrivateKey(for: chain) - return TransactionSignerAssembly.signer( - for: chain.chainBaseType, + return try TransactionSignerAssembly.signer( + for: chain.ecosystem, publicKeyData: publicKeyData, secretKeyData: secretKeyData, cryptoType: cryptoType @@ -93,9 +93,7 @@ final class WalletConnectSignerImpl: WalletConnectSigner { throw AutoNamespacesError.requiredAccountsNotSatisfied } let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil - let tag: String = chain.isEthereumBased - ? KeystoreTagV2.ethereumSecretKeyTagForMetaId(wallet.metaId, accountId: accountId) - : KeystoreTagV2.substrateSecretKeyTagForMetaId(wallet.metaId, accountId: accountId) + let tag: String = KeystoreTagV2.secretKeyTag(for: chain.ecosystem, metaId: wallet.metaId, accountId: accountId) let secretKey = try keystore.fetchKey(for: tag) diff --git a/fearless/ApplicationLayer/StakingRewards/StakingRewardsFetcherAssembly.swift b/fearless/ApplicationLayer/StakingRewards/StakingRewardsFetcherAssembly.swift index 13fb00f70f..f892f169aa 100644 --- a/fearless/ApplicationLayer/StakingRewards/StakingRewardsFetcherAssembly.swift +++ b/fearless/ApplicationLayer/StakingRewards/StakingRewardsFetcherAssembly.swift @@ -21,7 +21,7 @@ final class StakingRewardsFetcherAssembly { return SoraStakingRewardsFetcher(chain: chain) case .reef: return ReefStakingRewardsFetcher(chain: chain) - case .alchemy, .etherscan, .oklink, .zeta: + case .alchemy, .etherscan, .oklink, .zeta, .ton: throw StakingRewardsFetcherError.missingBlockExplorer(chain: chain.name) } } diff --git a/fearless/ApplicationLayer/TonJettonInjector.swift b/fearless/ApplicationLayer/TonJettonInjector.swift new file mode 100644 index 0000000000..695dbad199 --- /dev/null +++ b/fearless/ApplicationLayer/TonJettonInjector.swift @@ -0,0 +1,69 @@ +import Foundation +import RobinHood +import SSFModels + +protocol TonJettonInjector { + func inject(jettonItems: [TonJettonItem]) async +} + +actor TonJettonInjectorImpl: TonJettonInjector { + private let chainModelRepository: AsyncAnyRepository + private let logger: LoggerProtocol + private let eventCenter: EventCenterProtocol + + init( + chainModelRepository: AsyncAnyRepository, + eventCenter: EventCenterProtocol, + logger: LoggerProtocol + ) { + self.chainModelRepository = chainModelRepository + self.eventCenter = eventCenter + self.logger = logger + } + + func inject(jettonItems: [TonJettonItem]) async { + do { + guard let tonChain = try await chainModelRepository.fetch(by: "-239", options: RepositoryFetchOptions()) else { + throw ConvenienceError(error: "Ton chain is not fetched") + } + let assetModels = map(jettonItems: jettonItems) + let unionAssets = tonChain.assets.union(assetModels) + + guard tonChain.assets.symmetricDifference(unionAssets).isNotEmpty else { + return + } + let updatedChainModel = tonChain.replacingAssets(unionAssets) + await chainModelRepository.save(models: [updatedChainModel]) + + logger.info("The Open Network has been updated with new assets: \(assetModels.map { $0.name })") + } catch { + logger.customError(error) + } + } + + private func map(jettonItems: [TonJettonItem]) -> Set { + let mapped = jettonItems.map { item in + AssetModel( + id: item.walletAddress.toRaw(), + name: item.jettonInfo.name, + symbol: item.jettonInfo.symbol ?? item.jettonInfo.name, + precision: UInt16(item.jettonInfo.fractionDigits), + icon: item.jettonInfo.imageURL, + price: nil, + fiatDayChange: nil, + currencyId: item.jettonInfo.address.toRaw(), // wallet + existentialDeposit: nil, + color: nil, + isUtility: false, + isNative: false, + staking: nil, + purchaseProviders: nil, + assetType: .ton(tonType: .jetton), + priceProvider: nil, + coingeckoPriceId: nil + ) + } + + return Set(mapped) + } +} diff --git a/fearless/Common/AddressChainDefiner/AddressChainDefiner.swift b/fearless/Common/AddressChainDefiner/AddressChainDefiner.swift index 7f7413bcfd..0e08768f09 100644 --- a/fearless/Common/AddressChainDefiner/AddressChainDefiner.swift +++ b/fearless/Common/AddressChainDefiner/AddressChainDefiner.swift @@ -1,5 +1,6 @@ import RobinHood import SSFModels +import SSFCrypto enum AddressValidationResult { case valid(String) diff --git a/fearless/Common/Crypto/KeystoreExportWrapper.swift b/fearless/Common/Crypto/KeystoreExportWrapper.swift index c7fe935f19..ebd8d09dee 100644 --- a/fearless/Common/Crypto/KeystoreExportWrapper.swift +++ b/fearless/Common/Crypto/KeystoreExportWrapper.swift @@ -43,9 +43,7 @@ final class KeystoreExportWrapper: KeystoreExportWrapperProtocol { accountId: AccountId?, genesisHash: String? ) throws -> Data { - let secretKeyTag = chainAccount.isEthereumBased - ? KeystoreTagV2.ethereumSecretKeyTagForMetaId(metaId, accountId: accountId) - : KeystoreTagV2.substrateSecretKeyTagForMetaId(metaId, accountId: accountId) + let secretKeyTag = KeystoreTagV2.secretKeyTag(for: chainAccount.ecosystem, metaId: metaId, accountId: accountId) let secretKey = try keystore.fetchKey(for: secretKeyTag) @@ -69,7 +67,7 @@ final class KeystoreExportWrapper: KeystoreExportWrapperProtocol { let definition = try builder.build( from: keystoreData, password: password, - isEthereum: chainAccount.isEthereumBased + isEthereum: chainAccount.ecosystem.isEthereum || chainAccount.ecosystem.isEthereumBased ) return try jsonEncoder.encode(definition) diff --git a/fearless/Common/Crypto/SigningWrapper.swift b/fearless/Common/Crypto/SigningWrapper.swift index f3eaabb767..003ef7ba89 100644 --- a/fearless/Common/Crypto/SigningWrapper.swift +++ b/fearless/Common/Crypto/SigningWrapper.swift @@ -47,7 +47,7 @@ final class SigningWrapper: SigningWrapperProtocol { self.keystore = keystore self.metaId = metaId accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil - isEthereumBased = accountResponse.isEthereumBased + isEthereumBased = accountResponse.ecosystem.isEthereumBased || accountResponse.ecosystem.isEthereum cryptoType = accountResponse.cryptoType publicKeyData = accountResponse.publicKey } diff --git a/fearless/Common/DataProvider/ExistentialDeposit.swift b/fearless/Common/DataProvider/ExistentialDeposit.swift index a6a345bf05..f25b6d784d 100644 --- a/fearless/Common/DataProvider/ExistentialDeposit.swift +++ b/fearless/Common/DataProvider/ExistentialDeposit.swift @@ -9,6 +9,10 @@ protocol ExistentialDepositServiceProtocol { chainAsset: ChainAsset, completion: @escaping (Result) -> Void ) + + func fetchExistentialDeposit( + chainAsset: ChainAsset + ) async throws -> BigUInt } final class ExistentialDepositService: RuntimeConstantFetching, ExistentialDepositServiceProtocol { @@ -16,18 +20,15 @@ final class ExistentialDepositService: RuntimeConstantFetching, ExistentialDepos private let operationManager: OperationManagerProtocol private let chainRegistry: ChainRegistryProtocol - private let chainId: ChainModel.Id // MARK: - Constructor init( operationManager: OperationManagerProtocol, - chainRegistry: ChainRegistryProtocol, - chainId: ChainModel.Id + chainRegistry: ChainRegistryProtocol ) { self.operationManager = operationManager self.chainRegistry = chainRegistry - self.chainId = chainId } // MARK: - Public methods @@ -36,12 +37,12 @@ final class ExistentialDepositService: RuntimeConstantFetching, ExistentialDepos chainAsset: ChainAsset, completion: @escaping (Result) -> Void ) { - guard let runtimeService = chainRegistry.getRuntimeProvider(for: chainId) else { + guard let runtimeService = chainRegistry.getRuntimeProvider(for: chainAsset.chain.chainId) else { completion(.failure(ChainRegistryError.runtimeMetadaUnavailable)) return } - switch chainAsset.chainAssetType { + switch chainAsset.chainAssetType.substrateAssetType { case .equilibrium: fetchConstant( for: .equilibriumExistentialDeposit, @@ -61,13 +62,28 @@ final class ExistentialDepositService: RuntimeConstantFetching, ExistentialDepos } } + func fetchExistentialDeposit( + chainAsset: ChainAsset + ) async throws -> BigUInt { + try await withUnsafeThrowingContinuation { continuation in + fetchExistentialDeposit(chainAsset: chainAsset) { result in + switch result { + case let .success(success): + continuation.resume(returning: success) + case let .failure(failure): + continuation.resume(throwing: failure) + } + } + } + } + // MARK: - Private methods private func fetchSubAssetsExistentialDeposit( chainAsset: ChainAsset, completion: @escaping (Result) -> Void ) { - guard let connection = chainRegistry.getConnection(for: chainId) else { + guard let connection = chainRegistry.getConnection(for: chainAsset.chain.chainId) else { completion(.failure(ChainRegistryError.connectionUnavailable)) return } @@ -106,11 +122,11 @@ final class ExistentialDepositService: RuntimeConstantFetching, ExistentialDepos chainAsset: ChainAsset, completion: @escaping (Result) -> Void ) { - guard let connection = chainRegistry.getConnection(for: chainId) else { + guard let connection = chainRegistry.getConnection(for: chainAsset.chain.chainId) else { completion(.failure(ChainRegistryError.connectionUnavailable)) return } - guard let runtimeService = chainRegistry.getRuntimeProvider(for: chainId) else { + guard let runtimeService = chainRegistry.getRuntimeProvider(for: chainAsset.chain.chainId) else { completion(.failure(ChainRegistryError.runtimeMetadaUnavailable)) return } diff --git a/fearless/Common/DataProvider/PriceProviderFactory.swift b/fearless/Common/DataProvider/PriceProviderFactory.swift index 2a9cb3c526..8cf614e5ff 100644 --- a/fearless/Common/DataProvider/PriceProviderFactory.swift +++ b/fearless/Common/DataProvider/PriceProviderFactory.swift @@ -4,7 +4,7 @@ import SSFModels import SSFSingleValueCache protocol PriceProviderFactoryProtocol { - func getPricesProvider(currencies: [Currency]?) -> AnySingleValueProvider<[PriceData]> + func getPricesProvider(currencies: [Currency]?, chainAssets: [ChainAsset]) -> AnySingleValueProvider<[PriceData]> } final class PriceProviderFactory: PriceProviderFactoryProtocol { @@ -14,9 +14,9 @@ final class PriceProviderFactory: PriceProviderFactoryProtocol { return queue }() - func getPricesProvider(currencies: [Currency]?) -> AnySingleValueProvider<[SSFModels.PriceData]> { + func getPricesProvider(currencies: [Currency]?, chainAssets: [ChainAsset]) -> AnySingleValueProvider<[SSFModels.PriceData]> { let repository: CoreDataRepository = SingleValueCacheRepositoryFactoryDefault().createSingleValueCacheRepository() - let source = PriceDataSource(currencies: currencies) + let source = PriceDataSource(currencies: currencies, chainAssets: chainAssets) let trigger: DataProviderEventTrigger = [.onFetchPage] let provider = SingleValueProvider( targetIdentifier: PriceDataSource.defaultIdentifier, diff --git a/fearless/Common/DataProvider/Sources/PriceDataSource.swift b/fearless/Common/DataProvider/Sources/PriceDataSource.swift index d1990b896b..e1e57260b2 100644 --- a/fearless/Common/DataProvider/Sources/PriceDataSource.swift +++ b/fearless/Common/DataProvider/Sources/PriceDataSource.swift @@ -34,16 +34,22 @@ final class PriceDataSource: SingleValueProviderSourceProtocol { SoraSubqueryPriceFetcherDefault() }() - private lazy var chainAssets: [ChainAsset] = { - ChainRegistryFacade.sharedRegistry.availableChains.map { $0.chainAssets }.reduce([], +) - }() + private let chainRegistry = ChainRegistryFacade.sharedRegistry + + private lazy var chainAssets: [ChainAsset] = [] - init(currencies: [Currency]?) { + init(currencies: [Currency]?, chainAssets: [ChainAsset]) { self.currencies = currencies + self.chainAssets = chainAssets + setup() } func fetchOperation() -> CompoundOperationWrapper<[PriceData]?> { + guard chainAssets.isNotEmpty else { + return CompoundOperationWrapper.createWithResult([]) + } + let coingeckoOperation = createCoingeckoOperation() let chainlinkOperations = createChainlinkOperations() let soraSubqueryOperation = createSoraSubqueryOperation() @@ -58,7 +64,7 @@ final class PriceDataSource: SingleValueProviderSourceProtocol { let chainlinkPrices = chainlinkOperations.compactMap { try? $0.extractNoCancellableResultData() } - let soraSubqueryPrices = try soraSubqueryOperation.extractNoCancellableResultData() + let soraSubqueryPrices = (try? soraSubqueryOperation.extractNoCancellableResultData()) ?? [] prices = self.merge(coingeckoPrices: coingeckoPrices, chainlinkPrices: chainlinkPrices) prices = self.merge(coingeckoPrices: prices, soraSubqueryPrices: soraSubqueryPrices) @@ -160,6 +166,10 @@ final class PriceDataSource: SingleValueProviderSourceProtocol { } let chainAssets = chainAssets.filter { $0.asset.priceProvider?.type == .sorasubquery } + guard chainAssets.isNotEmpty else { + return BaseOperation.createWithResult([]) + } + let operation = soraOperationFactory.fetchPriceOperation(for: chainAssets) return operation } @@ -170,11 +180,15 @@ final class PriceDataSource: SingleValueProviderSourceProtocol { .map { $0.asset.coingeckoPriceId } .compactMap { $0 } .uniq(predicate: { $0 }) + guard priceIds.isNotEmpty else { + return BaseOperation.createWithResult([]) + } let operation = coingeckoOperationFactory.fetchPriceOperation(for: priceIds, currencies: currencies) return operation } private func createChainlinkOperations() -> [BaseOperation] { + return [] guard currencies?.count == 1, currencies?.first?.id == Currency.defaultCurrency().id else { return [] } diff --git a/fearless/Common/DataProvider/Subscription/PriceLocalStorageSubscriber.swift b/fearless/Common/DataProvider/Subscription/PriceLocalStorageSubscriber.swift index 303b3344ae..47ae63aeae 100644 --- a/fearless/Common/DataProvider/Subscription/PriceLocalStorageSubscriber.swift +++ b/fearless/Common/DataProvider/Subscription/PriceLocalStorageSubscriber.swift @@ -23,7 +23,7 @@ struct PriceLocalStorageSubscriberListener { final class PriceLocalStorageSubscriberImpl: PriceLocalStorageSubscriber { static let shared = PriceLocalStorageSubscriberImpl() - + private let eventCenter = EventCenter.shared private lazy var provider: AnySingleValueProvider<[PriceData]> = { setupProvider() }() @@ -39,7 +39,18 @@ final class PriceLocalStorageSubscriberImpl: PriceLocalStorageSubscriber { private var listeners: [PriceLocalStorageSubscriberListener] = [] private var sourcedCurrencies: Set = [] - private init() {} + private var chainAssets: [ChainAsset] = [] + private let chainsRepository: AsyncCoreDataRepositoryDefault + + private init() { + chainsRepository = ChainRepositoryFactory().createAsyncRepository() + setup() + } + + private func setup() { + eventCenter.add(observer: self) + refreshChainsAndSubscribe() + } // MARK: - PriceLocalStorageSubscriber @@ -118,7 +129,7 @@ final class PriceLocalStorageSubscriberImpl: PriceLocalStorageSubscriber { private func setupProvider() -> AnySingleValueProvider<[PriceData]> { let providerCurrencies = listeners.map { $0.currencies }.compactMap { $0 }.reduce([], +).uniq(predicate: { $0.id }) - let priceProvider = priceLocalSubscriber.getPricesProvider(currencies: providerCurrencies) + let priceProvider = priceLocalSubscriber.getPricesProvider(currencies: providerCurrencies, chainAssets: chainAssets) let updateClosure = { [weak self] (changes: [DataProviderChange<[PriceData]>]) in guard let prices: [PriceData] = changes.reduceToLastChange() else { @@ -232,4 +243,26 @@ final class PriceLocalStorageSubscriberImpl: PriceLocalStorageSubscriber { ) listeners.append(listener) } + + private func refreshChainsAndSubscribe() { + Task { + let chains = try await chainsRepository.fetchAll() + chainAssets = chains.map { $0.chainAssets }.reduce([], +) + + remoteFetchTimer?.invalidate() + remoteFetchTimer = nil + provider = setupProvider() + refreshProviderIfPossible() + } + } +} + +extension PriceLocalStorageSubscriberImpl: EventVisitorProtocol { + func processChainSyncDidComplete(event: ChainSyncDidComplete) { + guard event.newOrUpdatedChains.isNotEmpty else { + return + } + + refreshChainsAndSubscribe() + } } diff --git a/fearless/Common/DataProvider/Subscription/WalletLocalStorageSubscriber.swift b/fearless/Common/DataProvider/Subscription/WalletLocalStorageSubscriber.swift index 637222bdff..aeef180b13 100644 --- a/fearless/Common/DataProvider/Subscription/WalletLocalStorageSubscriber.swift +++ b/fearless/Common/DataProvider/Subscription/WalletLocalStorageSubscriber.swift @@ -77,45 +77,45 @@ extension WalletLocalStorageSubscriber { return } - if chainAsset.chain.isEthereum { - handleEthereumAccountInfo(for: accountId, chainAsset: chainAsset, item: item) - return - } - - if chainAsset.chain.isSora, chainAsset.isUtility { - handleAccountInfo(for: accountId, chainAsset: chainAsset, item: item) - return - } + switch chainAsset.chain.ecosystem { + case .substrate, .ethereumBased: + if chainAsset.chain.isSora, chainAsset.isUtility { + handleAccountInfo(for: accountId, chainAsset: chainAsset, item: item) + return + } - switch chainAsset.chainAssetType { - case .normal: - handleAccountInfo(for: accountId, chainAsset: chainAsset, item: item) - - case - .ormlChain, - .ormlAsset, - .foreignAsset, - .stableAssetPoolToken, - .liquidCrowdloan, - .vToken, - .vsToken, - .stable, - .assetId, - .token2, - .xcm: - handleOrmlAccountInfo(for: accountId, chainAsset: chainAsset, item: item) - case .equilibrium: - handleEquilibrium(for: accountId, chainAsset: chainAsset, item: item) - case .assets: - handleAssetAccount(for: accountId, chainAsset: chainAsset, item: item) - case .soraAsset: - if chainAsset.isUtility { + switch chainAsset.chainAssetType.substrateAssetType { + case .normal: handleAccountInfo(for: accountId, chainAsset: chainAsset, item: item) - } else { + + case + .ormlChain, + .ormlAsset, + .foreignAsset, + .stableAssetPoolToken, + .liquidCrowdloan, + .vToken, + .vsToken, + .stable, + .assetId, + .token2, + .xcm: handleOrmlAccountInfo(for: accountId, chainAsset: chainAsset, item: item) + case .equilibrium: + handleEquilibrium(for: accountId, chainAsset: chainAsset, item: item) + case .assets: + handleAssetAccount(for: accountId, chainAsset: chainAsset, item: item) + case .soraAsset: + if chainAsset.isUtility { + handleAccountInfo(for: accountId, chainAsset: chainAsset, item: item) + } else { + handleOrmlAccountInfo(for: accountId, chainAsset: chainAsset, item: item) + } + case .none: + break } - case .none: - break + case .ethereum, .ton: + handleEthereumAccountInfo(for: accountId, chainAsset: chainAsset, item: item) } } diff --git a/fearless/Common/EventCenter/Events/MetaAccountModelChangedEvent.swift b/fearless/Common/EventCenter/Events/MetaAccountModelChangedEvent.swift index 49c0272646..90b2705aa5 100644 --- a/fearless/Common/EventCenter/Events/MetaAccountModelChangedEvent.swift +++ b/fearless/Common/EventCenter/Events/MetaAccountModelChangedEvent.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels struct MetaAccountModelChangedEvent: EventProtocol { let account: MetaAccountModel diff --git a/fearless/Common/EventCenter/Events/SelectedAccountChanged.swift b/fearless/Common/EventCenter/Events/SelectedAccountChanged.swift index f1e72e1c1e..583ec6fa8d 100644 --- a/fearless/Common/EventCenter/Events/SelectedAccountChanged.swift +++ b/fearless/Common/EventCenter/Events/SelectedAccountChanged.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels struct SelectedAccountChanged: EventProtocol { var account: MetaAccountModel diff --git a/fearless/Common/EventCenter/Events/WalletNameChanged.swift b/fearless/Common/EventCenter/Events/WalletNameChanged.swift index 1f72ac651d..4c9cdef190 100644 --- a/fearless/Common/EventCenter/Events/WalletNameChanged.swift +++ b/fearless/Common/EventCenter/Events/WalletNameChanged.swift @@ -1,3 +1,5 @@ +import SSFModels + struct WalletNameChanged: EventProtocol { let wallet: MetaAccountModel diff --git a/fearless/Common/Extension/Task.swift b/fearless/Common/Extension/Task.swift new file mode 100644 index 0000000000..20e61baa0c --- /dev/null +++ b/fearless/Common/Extension/Task.swift @@ -0,0 +1,17 @@ +import Foundation + +extension Task where Failure == Never, Success == Void { + init( + priority: TaskPriority? = nil, + operation: @escaping () async throws -> Void, + catch: @escaping (Error) -> Void + ) { + self.init(priority: priority) { + do { + _ = try await operation() + } catch { + `catch`(error) + } + } + } +} diff --git a/fearless/Common/Extension/Wallet/AssetTransactionData+ArrowsquidHistory.swift b/fearless/Common/Extension/Wallet/AssetTransactionData+ArrowsquidHistory.swift index 33e01b3a7a..abc2e744e0 100644 --- a/fearless/Common/Extension/Wallet/AssetTransactionData+ArrowsquidHistory.swift +++ b/fearless/Common/Extension/Wallet/AssetTransactionData+ArrowsquidHistory.swift @@ -4,6 +4,7 @@ import BigInt import IrohaCrypto import SSFUtils import SSFModels +import SSFCrypto extension AssetTransactionData { static func createTransaction( diff --git a/fearless/Common/Extension/Wallet/AssetTransactionData+GiantsquidHistory.swift b/fearless/Common/Extension/Wallet/AssetTransactionData+GiantsquidHistory.swift index dfeb95380f..ee55e3f2a2 100644 --- a/fearless/Common/Extension/Wallet/AssetTransactionData+GiantsquidHistory.swift +++ b/fearless/Common/Extension/Wallet/AssetTransactionData+GiantsquidHistory.swift @@ -5,6 +5,7 @@ import IrohaCrypto import SSFUtils import SoraFoundation import SSFModels +import SSFCrypto extension AssetTransactionData { static func createTransaction( diff --git a/fearless/Common/Extension/Wallet/AssetTransactionData+SubqueryHistory.swift b/fearless/Common/Extension/Wallet/AssetTransactionData+SubqueryHistory.swift index 58794f9b7e..a5ecd3835f 100644 --- a/fearless/Common/Extension/Wallet/AssetTransactionData+SubqueryHistory.swift +++ b/fearless/Common/Extension/Wallet/AssetTransactionData+SubqueryHistory.swift @@ -1,5 +1,5 @@ import Foundation - +import SSFCrypto import BigInt import IrohaCrypto import SSFUtils diff --git a/fearless/Common/Extension/Wallet/AssetTransactionData+SubsquidHistory.swift b/fearless/Common/Extension/Wallet/AssetTransactionData+SubsquidHistory.swift index 457c09f3c8..d215d5c5bb 100644 --- a/fearless/Common/Extension/Wallet/AssetTransactionData+SubsquidHistory.swift +++ b/fearless/Common/Extension/Wallet/AssetTransactionData+SubsquidHistory.swift @@ -1,5 +1,5 @@ import Foundation - +import SSFCrypto import BigInt import IrohaCrypto import SSFUtils diff --git a/fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift b/fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift new file mode 100644 index 0000000000..b7f9fed334 --- /dev/null +++ b/fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift @@ -0,0 +1,116 @@ +import Foundation +import BigInt +import SoraFoundation +import SSFModels + +extension AssetTransactionData { + static func createTransaction( + event: TonAccountEvent, + action: AccountEventAction, + address: String, + chain _: ChainModel, + asset: AssetModel + ) -> AssetTransactionData? { + let status: AssetTransactionStatus = event.isInProgress ? .pending : .commited + + switch action.type { + case let .tonTransfer(tonTransfer): + let amountString = String(tonTransfer.amount) + guard + let amountValue = BigUInt(string: amountString), + let amount = Decimal.fromSubstrateAmount(amountValue, precision: Int16(asset.precision)) + else { + return nil + } + + var fees: [AssetTransactionFee] = [] + if let feeValue = BigUInt(string: String(abs(event.fee))), + let feeValue = Decimal.fromSubstrateAmount(feeValue, precision: Int16(asset.precision)) { + let fee = AssetTransactionFee( + identifier: asset.id, + assetId: asset.id, + amount: AmountDecimal(value: feeValue), + context: nil + ) + fees.append(fee) + } + + let friendlyAddress = tonTransfer.sender.address.toFriendly().toString() + let type: TransactionType = friendlyAddress == address ? .outgoing : .incoming + return AssetTransactionData( + transactionId: event.eventId, + status: status, + assetId: "", + peerId: "", + peerFirstName: nil, + peerLastName: nil, + peerName: tonTransfer.recipient.address.toFriendly().toString(), + details: "", + amount: AmountDecimal(value: amount), + fees: fees, + timestamp: Int64(event.timestamp), + type: type.rawValue, + reason: "", + context: nil + ) + case let .contractDeploy(deploy): + return AssetTransactionData( + transactionId: event.eventId, + status: .commited, + assetId: "", + peerId: "", + peerFirstName: action.preview.name, + peerLastName: action.preview.description, + peerName: deploy.address.toFriendly().toString(), + details: "", + amount: AmountDecimal(value: .zero), + fees: [], + timestamp: Int64(event.timestamp), + type: TransactionType.extrinsic.rawValue, + reason: "", + context: nil + ) + case let .jettonTransfer(jettonTransfer): + let amountString = String(jettonTransfer.amount) + guard + let amountValue = BigUInt(string: amountString), + let amount = Decimal.fromSubstrateAmount(amountValue, precision: Int16(asset.precision)) + else { + return nil + } + + var fees: [AssetTransactionFee] = [] + if let feeValue = BigUInt(string: String(abs(event.fee))), + let feeValue = Decimal.fromSubstrateAmount(feeValue, precision: Int16(asset.precision)) { + let fee = AssetTransactionFee( + identifier: asset.id, + assetId: asset.id, + amount: AmountDecimal(value: feeValue), + context: nil + ) + fees.append(fee) + } + + let sender = jettonTransfer.sender?.address.toFriendly().toString() + let type: TransactionType = sender == address ? .outgoing : .incoming + return AssetTransactionData( + transactionId: event.eventId, + status: status, + assetId: "", + peerId: "", + peerFirstName: nil, + peerLastName: nil, + peerName: jettonTransfer.recipientAddress.toFriendly().toString(), + details: "", + amount: AmountDecimal(value: amount), + fees: fees, + timestamp: Int64(event.timestamp), + type: type.rawValue, + reason: "", + context: nil + ) + default: + return nil + } + } +} diff --git a/fearless/Common/Extension/Wallet/SearchData+Contacts.swift b/fearless/Common/Extension/Wallet/SearchData+Contacts.swift index 25a7987f43..28bec6ee81 100644 --- a/fearless/Common/Extension/Wallet/SearchData+Contacts.swift +++ b/fearless/Common/Extension/Wallet/SearchData+Contacts.swift @@ -1,5 +1,5 @@ import Foundation - +import SSFCrypto import IrohaCrypto import SSFModels diff --git a/fearless/Common/Extension/Wallet/TransactionHistoryItem+Extrinsic.swift b/fearless/Common/Extension/Wallet/TransactionHistoryItem+Extrinsic.swift index 6f247885b1..d8d43d1032 100644 --- a/fearless/Common/Extension/Wallet/TransactionHistoryItem+Extrinsic.swift +++ b/fearless/Common/Extension/Wallet/TransactionHistoryItem+Extrinsic.swift @@ -3,6 +3,7 @@ import IrohaCrypto import SSFUtils import BigInt import SSFModels +import SSFCrypto extension TransactionHistoryItem { static func createFromSubscriptionResult( diff --git a/fearless/Common/Helpers/AccountProviderFactory.swift b/fearless/Common/Helpers/AccountProviderFactory.swift index 915229769b..aa9a64fb82 100644 --- a/fearless/Common/Helpers/AccountProviderFactory.swift +++ b/fearless/Common/Helpers/AccountProviderFactory.swift @@ -2,6 +2,7 @@ import Foundation import IrohaCrypto import RobinHood import SSFAccountManagmentStorage +import SSFModels protocol AccountProviderFactoryProtocol { var operationManager: OperationManagerProtocol { get } diff --git a/fearless/Common/Helpers/AccountRepositoryFactory.swift b/fearless/Common/Helpers/AccountRepositoryFactory.swift index dd3fd12057..4bb3d4a383 100644 --- a/fearless/Common/Helpers/AccountRepositoryFactory.swift +++ b/fearless/Common/Helpers/AccountRepositoryFactory.swift @@ -1,6 +1,8 @@ import Foundation import IrohaCrypto import RobinHood +import SSFModels +import SSFAccountManagmentStorage protocol AccountRepositoryFactoryProtocol { // TODO: remove diff --git a/fearless/Common/Helpers/AddressConversion.swift b/fearless/Common/Helpers/AddressConversion.swift deleted file mode 100644 index 5761252826..0000000000 --- a/fearless/Common/Helpers/AddressConversion.swift +++ /dev/null @@ -1,96 +0,0 @@ -import Foundation -import IrohaCrypto -import SSFCrypto -import SSFModels - -enum ChainFormat { - case ethereum - case substrate(_ prefix: UInt16) - - func asSfCrypto() -> SFChainFormat { - switch self { - case .ethereum: - return .sfEthereum - case let .substrate(prefix): - return .sfSubstrate(prefix) - } - } -} - -enum AddressFactory { - private static let substrateFactory = SS58AddressFactory() - - private static func chainFormat(of chain: ChainModel) -> ChainFormat { - chain.isEthereumBased ? .ethereum : .substrate(chain.addressPrefix) - } - - static func address(for accountId: AccountId, chain: ChainModel) throws -> AccountAddress { - try accountId.toAddress(using: chainFormat(of: chain)) - } - - static func address(for accountId: AccountId, chainFormat: ChainFormat) throws -> AccountAddress { - try accountId.toAddress(using: chainFormat) - } - - static func accountId(from address: AccountAddress, chain: ChainModel) throws -> AccountId { - try address.toAccountId(using: chainFormat(of: chain)) - } - - static func randomAccountId(for chain: ChainModel) -> AccountId { - switch chainFormat(of: chain) { - case .ethereum: - return Data(count: EthereumConstants.accountIdLength) - case .substrate: - return Data(count: SubstrateConstants.accountIdLength) - } - } -} - -extension AccountId { - func toAddress(using conversion: ChainFormat) throws -> AccountAddress { - switch conversion { - case .ethereum: - return toHex(includePrefix: true) - case let .substrate(prefix): - return try SS58AddressFactory().address(fromAccountId: self, type: prefix) - } - } -} - -extension AccountAddress { - func toAccountId(using conversion: ChainFormat) throws -> AccountId { - switch conversion { - case .ethereum: - return try AccountId(hexStringSSF: self) - case let .substrate(prefix): - return try SS58AddressFactory().accountId(fromAddress: self, type: prefix) - } - } - - func toAccountId() throws -> AccountId { - if hasPrefix("0x") { - return try AccountId(hexStringSSF: self) - } else { - return try SS58AddressFactory().accountId(from: self) - } - } - - func toAccountIdWithTryExtractPrefix() throws -> AccountId { - if hasPrefix("0x") { - return try AccountId(hexStringSSF: self) - } else { - let prefix = try SS58AddressFactory().type(fromAddress: self) - return try SS58AddressFactory().accountId(fromAddress: self, addressPrefix: prefix.uint16Value) - } - } -} - -extension ChainModel { - var chainFormat: ChainFormat { - if isEthereumBased { - return .ethereum - } else { - return .substrate(addressPrefix) - } - } -} diff --git a/fearless/Common/Helpers/ChainAccountFetching.swift b/fearless/Common/Helpers/ChainAccountFetching.swift deleted file mode 100644 index 1333523f5c..0000000000 --- a/fearless/Common/Helpers/ChainAccountFetching.swift +++ /dev/null @@ -1,92 +0,0 @@ -import Foundation -import SSFModels - -struct ChainAccountResponse: Equatable { - let chainId: ChainModel.Id - let accountId: AccountId - let publicKey: Data - let name: String - let cryptoType: CryptoType - let addressPrefix: UInt16 - let isEthereumBased: Bool - let isChainAccount: Bool - let walletId: String -} - -enum ChainAccountFetchingError: Error { - case accountNotExists -} - -extension ChainAccountResponse { - func toDisplayAddress() throws -> DisplayAddress { - let chainFormat: ChainFormat = isEthereumBased ? .ethereum : .substrate(addressPrefix) - let address = try accountId.toAddress(using: chainFormat) - - return DisplayAddress(address: address, username: name) - } - - func toAddress() -> AccountAddress? { - let chainFormat: ChainFormat = isEthereumBased ? .ethereum : .substrate(addressPrefix) - return try? accountId.toAddress(using: chainFormat) - } - - func chainFormat() -> ChainFormat { - isEthereumBased ? .ethereum : .substrate(addressPrefix) - } -} - -extension MetaAccountModel { - func fetch(for request: ChainAccountRequest) -> ChainAccountResponse? { - if let chainAccount = chainAccounts.first(where: { $0.chainId == request.chainId }) { - guard let cryptoType = CryptoType(rawValue: chainAccount.cryptoType) else { - return nil - } - - return ChainAccountResponse( - chainId: request.chainId, - accountId: chainAccount.accountId, - publicKey: chainAccount.publicKey, - name: name, - cryptoType: cryptoType, - addressPrefix: request.addressPrefix, - isEthereumBased: request.isEthereumBased, - isChainAccount: true, - walletId: metaId - ) - } - - if request.isEthereumBased { - guard let publicKey = ethereumPublicKey, let accountId = ethereumAddress else { - return nil - } - - return ChainAccountResponse( - chainId: request.chainId, - accountId: accountId, - publicKey: publicKey, - name: name, - cryptoType: .ecdsa, - addressPrefix: request.addressPrefix, - isEthereumBased: request.isEthereumBased, - isChainAccount: false, - walletId: metaId - ) - } - - guard let cryptoType = CryptoType(rawValue: substrateCryptoType) else { - return nil - } - - return ChainAccountResponse( - chainId: request.chainId, - accountId: substrateAccountId, - publicKey: substratePublicKey, - name: name, - cryptoType: cryptoType, - addressPrefix: request.addressPrefix, - isEthereumBased: false, - isChainAccount: false, - walletId: metaId - ) - } -} diff --git a/fearless/Common/Helpers/ChainAssetsFetching.swift b/fearless/Common/Helpers/ChainAssetsFetching.swift index dec5afd601..921ef4a826 100644 --- a/fearless/Common/Helpers/ChainAssetsFetching.swift +++ b/fearless/Common/Helpers/ChainAssetsFetching.swift @@ -236,7 +236,14 @@ private extension ChainAssetsFetching { case let .chainIds(ids): return chainAssets.filter { ids.contains($0.chain.chainId) } case .supportNfts: - return chainAssets.filter { $0.chain.isEthereum } + return chainAssets.filter { + switch $0.chain.ecosystem { + case .ethereum, .ton: + return true + case .substrate, .ethereumBased: + return false + } + } case let .assetNames(names): return chainAssets.filter { names.map { $0.lowercased() }.contains($0.asset.symbol.lowercased()) } case let .enabled(wallet): diff --git a/fearless/Common/Helpers/EthereumNodeFetching.swift b/fearless/Common/Helpers/EthereumNodeFetching.swift index c6c6499cc7..34c3f49a07 100644 --- a/fearless/Common/Helpers/EthereumNodeFetching.swift +++ b/fearless/Common/Helpers/EthereumNodeFetching.swift @@ -2,6 +2,7 @@ import Foundation import SSFModels import Web3 import FearlessKeys +import SSFUtils enum EthereumNodeFetchingError: Error { case unknownChain diff --git a/fearless/Common/Model/AvailableExportOptionsProvider.swift b/fearless/Common/Model/AvailableExportOptionsProvider.swift index 6f8b64d684..3e0347de6b 100644 --- a/fearless/Common/Model/AvailableExportOptionsProvider.swift +++ b/fearless/Common/Model/AvailableExportOptionsProvider.swift @@ -1,63 +1,77 @@ import SoraKeystore +import SSFModels + protocol AvailableExportOptionsProviderProtocol { func getAvailableExportOptions( - for account: MetaAccountModel, + for wallet: MetaAccountModel, accountId: AccountId?, - isEthereum: Bool + ecosystem: Ecosystem ) -> [ExportOption] - func getAvailableExportOptions(for wallet: MetaAccountModel, accountId: AccountId?) -> [ExportOption] + func getAvailableExportOptions( + for wallet: MetaAccountModel, + accountId: AccountId? + ) -> [ExportOption] } final class AvailableExportOptionsProvider: AvailableExportOptionsProviderProtocol { let keystore = Keychain() func getAvailableExportOptions( - for account: MetaAccountModel, + for wallet: MetaAccountModel, accountId: AccountId?, - isEthereum: Bool + ecosystem: Ecosystem ) -> [ExportOption] { var options: [ExportOption] = [] - if mnemonicAvailable(for: account, accountId: accountId, isEthereum: isEthereum) { - options.append(.mnemonic) - } + switch ecosystem { + case .substrate, .ethereumBased, .ethereum: + if mnemonicAvailable(for: wallet, accountId: accountId, ecosystem: ecosystem) { + options.append(.mnemonic) + } - if seedAvailable(for: account, accountId: accountId) { - options.append(.seed) - } + if seedAvailable(for: wallet, accountId: accountId) { + options.append(.seed) + } - options.append(.keystore) + options.append(.keystore) + case .ton: + options.append(.mnemonic) + } return options } - func getAvailableExportOptions(for wallet: MetaAccountModel, accountId: AccountId?) -> [ExportOption] { - var options: [ExportOption] = [] - - if mnemonicAvailable(for: wallet, accountId: accountId, isEthereum: true), - mnemonicAvailable(for: wallet, accountId: accountId, isEthereum: false) { - options.append(.mnemonic) - } - if seedAvailable(for: wallet, accountId: accountId) { - options.append(.seed) + func getAvailableExportOptions( + for wallet: MetaAccountModel, + accountId: AccountId? + ) -> [ExportOption] { + let options = Ecosystem.allCases.map { + getAvailableExportOptions(for: wallet, accountId: accountId, ecosystem: $0) } - - options.append(.keystore) - + .reduce([], +) + .uniq(predicate: { $0 }) return options } } private extension AvailableExportOptionsProvider { - func mnemonicAvailable(for account: MetaAccountModel, accountId: AccountId?, isEthereum: Bool) -> Bool { - let entropyTag = KeystoreTagV2.entropyTagForMetaId(account.metaId, accountId: accountId) + func mnemonicAvailable( + for wallet: MetaAccountModel, + accountId: AccountId?, + ecosystem: Ecosystem + ) -> Bool { + let entropyTag = KeystoreTagV2.entropyTagForMetaId(wallet.metaId, accountId: accountId) let entropy = try? keystore.fetchKey(for: entropyTag) - if isEthereum { - if !account.canExportEthereumMnemonic { + + switch ecosystem { + case .substrate, .ton: + return entropy != nil + case .ethereumBased, .ethereum: + if !wallet.canExportEthereumMnemonic { return false } - let derivationPathTag = KeystoreTagV2.ethereumDerivationTagForMetaId(account.metaId, accountId: accountId) + let derivationPathTag = KeystoreTagV2.ethereumDerivationTagForMetaId(wallet.metaId, accountId: accountId) let derivationPath = try? keystore.fetchKey(for: derivationPathTag) guard let path = derivationPath else { return false @@ -65,18 +79,17 @@ private extension AvailableExportOptionsProvider { let dpString = String(data: path, encoding: .utf8) return entropy != nil && dpString != nil } - return entropy != nil } - func seedAvailable(for account: MetaAccountModel, accountId: AccountId?) -> Bool { + func seedAvailable(for wallet: MetaAccountModel, accountId: AccountId?) -> Bool { let ethereumTag = KeystoreTagV2.ethereumSeedTagForMetaId( - account.metaId, + wallet.metaId, accountId: accountId ) let ethereumSeed = try? keystore.fetchKey(for: ethereumTag) let substrateTag = KeystoreTagV2.substrateSeedTagForMetaId( - account.metaId, + wallet.metaId, accountId: accountId ) let substrateSeed = try? keystore.fetchKey(for: substrateTag) diff --git a/fearless/Common/Model/ChainAction.swift b/fearless/Common/Model/ChainAction.swift index b8af3c3a21..1dc01ecc1c 100644 --- a/fearless/Common/Model/ChainAction.swift +++ b/fearless/Common/Model/ChainAction.swift @@ -7,6 +7,7 @@ enum ChainAction { case subscan(url: URL) case etherscan(url: URL) case oklink(url: URL) + case tonviewer(url: URL) case switchNode case export case replace @@ -21,7 +22,7 @@ enum ChainAction { return R.image.iconRetry() case .copyAddress: return R.image.iconCopy() - case .polkascan, .subscan, .etherscan, .reefscan, .oklink: + case .polkascan, .subscan, .etherscan, .reefscan, .oklink, .tonviewer: return R.image.iconOpenWeb() case .replace: return R.image.iconReplace() @@ -54,6 +55,8 @@ enum ChainAction { return R.string.localizable.poolStakingManagementClaimTitle(preferredLanguages: locale.rLanguages) case .oklink: return R.string.localizable.transactionDetailsViewOklink(preferredLanguages: locale.rLanguages) + case .tonviewer: + return "Tonviewer" } } } diff --git a/fearless/Common/Model/ChainAsset.swift b/fearless/Common/Model/ChainAsset.swift index 9d3cb44232..9363e91175 100644 --- a/fearless/Common/Model/ChainAsset.swift +++ b/fearless/Common/Model/ChainAsset.swift @@ -5,13 +5,9 @@ import SSFModels extension ChainAsset { var assetDisplayInfo: AssetBalanceDisplayInfo { asset.displayInfo(with: chain.icon) } - var identifier: String { - [chain.identifier, asset.id].joined(separator: " : ") - } - var storagePath: StorageCodingPath { var storagePath: StorageCodingPath - switch chainAssetType { + switch chainAssetType.substrateAssetType { case .normal, .equilibrium, .none: storagePath = StorageCodingPath.account case diff --git a/fearless/Common/Model/ChainRegistry/ChainModel.swift b/fearless/Common/Model/ChainRegistry/ChainModel.swift index 916b4ba9ee..13dff2201b 100644 --- a/fearless/Common/Model/ChainRegistry/ChainModel.swift +++ b/fearless/Common/Model/ChainRegistry/ChainModel.swift @@ -2,9 +2,7 @@ import Foundation import SSFModels import RobinHood -extension ChainModel: Identifiable { - public var identifier: String { chainId } - +extension ChainModel { var isSupported: Bool { AppVersion.stringValue?.versionLowerThan(iosMinAppVersion) == false } @@ -26,7 +24,7 @@ extension ChainModel: Identifiable { extension ChainModel { func match(_ caip2ChainId: Caip2ChainId) -> Bool { - switch chainBaseType { + switch ecosystem { case .substrate: let namespace = "polkadot" let knownChainCaip2ChainId = Caip2ChainId( @@ -34,13 +32,15 @@ extension ChainModel { reference: chainId ) return knownChainCaip2ChainId.reference.hasPrefix(caip2ChainId.reference) && namespace == caip2ChainId.namespace - case .ethereum: + case .ethereum, .ethereumBased: let namespace = "eip155" let knownChainCaip2ChainId = Caip2ChainId( namespace: namespace, reference: chainId.replacingOccurrences(of: "0x", with: "") ) return caip2ChainId == knownChainCaip2ChainId + case .ton: + return false } } } diff --git a/fearless/Common/Model/ChainRegistry/ExternalApiExplorerType.swift b/fearless/Common/Model/ChainRegistry/ExternalApiExplorerType.swift index 3c89d31e1b..3dfa2976ac 100644 --- a/fearless/Common/Model/ChainRegistry/ExternalApiExplorerType.swift +++ b/fearless/Common/Model/ChainRegistry/ExternalApiExplorerType.swift @@ -16,6 +16,8 @@ extension ChainModel.ExternalApiExplorerType { return R.string.localizable.transactionDetailsViewReefscan(preferredLanguages: locale.rLanguages) case .oklink: return R.string.localizable.transactionDetailsViewOklink(preferredLanguages: locale.rLanguages) + case .tonviewer: + return "View in Tonviewer" case .unknown: return "" } diff --git a/fearless/Common/Model/ChainRegistry/ManagedMetaAccountModel.swift b/fearless/Common/Model/ChainRegistry/ManagedMetaAccountModel.swift index b109333010..2df5e44a63 100644 --- a/fearless/Common/Model/ChainRegistry/ManagedMetaAccountModel.swift +++ b/fearless/Common/Model/ChainRegistry/ManagedMetaAccountModel.swift @@ -1,5 +1,6 @@ import Foundation import RobinHood +import SSFModels struct ManagedMetaAccountModel: Equatable { static let noOrder: UInt32 = 0 diff --git a/fearless/Common/Model/ChainRegistry/MetaAccountModel.swift b/fearless/Common/Model/ChainRegistry/MetaAccountModel.swift deleted file mode 100644 index c39654f65a..0000000000 --- a/fearless/Common/Model/ChainRegistry/MetaAccountModel.swift +++ /dev/null @@ -1,281 +0,0 @@ -import Foundation -import RobinHood -import SSFModels - -typealias MetaAccountId = String - -struct MetaAccountModel: Equatable, Codable { - let metaId: MetaAccountId - let name: String - let substrateAccountId: Data - let substrateCryptoType: UInt8 - let substratePublicKey: Data - let ethereumAddress: Data? - let ethereumPublicKey: Data? - let chainAccounts: Set - let assetKeysOrder: [String]? - let canExportEthereumMnemonic: Bool - let unusedChainIds: [String]? - let selectedCurrency: Currency - let networkManagmentFilter: String? - let assetsVisibility: [AssetVisibility] - let hasBackup: Bool - let favouriteChainIds: [ChainModel.Id] - - var utilsModel: SSFModels.MetaAccountModel { - SSFModels.MetaAccountModel(metaId: metaId, name: name, substrateAccountId: substrateAccountId, substrateCryptoType: substrateCryptoType, substratePublicKey: substratePublicKey, ethereumAddress: ethereumAddress, ethereumPublicKey: ethereumPublicKey, chainAccounts: chainAccounts, assetKeysOrder: assetKeysOrder, assetFilterOptions: [], canExportEthereumMnemonic: canExportEthereumMnemonic, unusedChainIds: unusedChainIds, selectedCurrency: selectedCurrency, networkManagmentFilter: networkManagmentFilter, assetsVisibility: assetsVisibility, zeroBalanceAssetsHidden: false, hasBackup: hasBackup, favouriteChainIds: favouriteChainIds) - } -} - -extension MetaAccountModel { - var supportEthereum: Bool { - ethereumPublicKey != nil || chainAccounts.first(where: { $0.ethereumBased == true }) != nil - } -} - -extension MetaAccountModel: Identifiable { - var identifier: String { metaId } -} - -extension MetaAccountModel { - func isVisible(chainAsset: ChainAsset) -> Bool { - assetsVisibility.first(where: { $0.assetId == chainAsset.identifier })?.hidden == false - } - - func insertingChainAccount(_ newChainAccount: ChainAccountModel) -> MetaAccountModel { - var newChainAccounts = chainAccounts.filter { - $0.chainId != newChainAccount.chainId - } - - newChainAccounts.insert(newChainAccount) - - return MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: newChainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: assetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingEthereumAddress(_ newEthereumAddress: Data?) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: newEthereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: assetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingEthereumPublicKey(_ newEthereumPublicKey: Data?) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: newEthereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: assetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingName(_ walletName: String) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: walletName, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: assetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingAssetKeysOrder(_ newAssetKeysOrder: [String]) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: newAssetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: assetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingUnusedChainIds(_ newUnusedChainIds: [String]) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: newUnusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: assetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingCurrency(_ currency: Currency) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: currency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: assetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingNetworkManagmentFilter(_ identifire: String) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: identifire, - assetsVisibility: assetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingAssetsVisibility(_ newAssetsVisibility: [AssetVisibility]) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: newAssetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingIsBackuped(_ isBackuped: Bool) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: assetsVisibility, - hasBackup: isBackuped, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingFavoutites(_ favouriteChainIds: [ChainModel.Id]) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: assetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } -} diff --git a/fearless/Common/Model/DisplayAddress.swift b/fearless/Common/Model/DisplayAddress.swift deleted file mode 100644 index d6a77695d5..0000000000 --- a/fearless/Common/Model/DisplayAddress.swift +++ /dev/null @@ -1,6 +0,0 @@ -import Foundation - -struct DisplayAddress { - let address: AccountAddress - let username: String -} diff --git a/fearless/Common/Model/KeystoreTag.swift b/fearless/Common/Model/KeystoreTag.swift index 3681930f91..4f76f45b2f 100644 --- a/fearless/Common/Model/KeystoreTag.swift +++ b/fearless/Common/Model/KeystoreTag.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels enum KeystoreTag: String, CaseIterable { case pincode @@ -12,6 +13,21 @@ enum KeystoreTag: String, CaseIterable { enum KeystoreTagV2: String, CaseIterable { case pincode + static func secretKeyTag( + for ecosystem: Ecosystem, + metaId: String, + accountId: AccountId? = nil + ) -> String { + switch ecosystem { + case .substrate: + Self.substrateSecretKeyTagForMetaId(metaId, accountId: accountId) + case .ethereum, .ethereumBased: + Self.ethereumSecretKeyTagForMetaId(metaId, accountId: accountId) + case .ton: + Self.tonSecretKeyTagForMetaId(metaId, accountId: accountId) + } + } + static func substrateSecretKeyTagForMetaId( _ metaId: String, accountId: AccountId? = nil @@ -26,6 +42,13 @@ enum KeystoreTagV2: String, CaseIterable { createTagForMetaId(metaId, accountId: accountId, suffix: "-ethereumSecretKey") } + static func tonSecretKeyTagForMetaId( + _ metaId: String, + accountId: AccountId? = nil + ) -> String { + createTagForMetaId(metaId, accountId: accountId, suffix: "-tonSecretKey") + } + static func entropyTagForMetaId( _ metaId: String, accountId: AccountId? = nil @@ -61,6 +84,13 @@ enum KeystoreTagV2: String, CaseIterable { createTagForMetaId(metaId, accountId: accountId, suffix: "-ethereumSeed") } + static func tonSeedTagForMetaId( + _ metaId: String, + accountId: AccountId? = nil + ) -> String { + createTagForMetaId(metaId, accountId: accountId, suffix: "-tonSeed") + } + private static func createTagForMetaId( _ metaId: String, accountId: AccountId?, diff --git a/fearless/Common/Operation/AccountOperationFactoryError.swift b/fearless/Common/Operation/AccountOperationFactoryError.swift index 6d1dd821e8..7279d6f6d0 100644 --- a/fearless/Common/Operation/AccountOperationFactoryError.swift +++ b/fearless/Common/Operation/AccountOperationFactoryError.swift @@ -6,4 +6,5 @@ enum AccountOperationFactoryError: Error { case unsupportedNetwork case decryption case missingUsername + case unsupportedImport } diff --git a/fearless/Common/Operation/MetaAccountOperationFactory.swift b/fearless/Common/Operation/MetaAccountOperationFactory.swift index eaf4845fcc..97f54e4759 100644 --- a/fearless/Common/Operation/MetaAccountOperationFactory.swift +++ b/fearless/Common/Operation/MetaAccountOperationFactory.swift @@ -5,6 +5,7 @@ import RobinHood import SoraKeystore import SSFModels import SSFCrypto +import TonSwift protocol MetaAccountOperationFactoryProtocol { func newMetaAccountOperation(request: MetaAccountImportMnemonicRequest, isBackuped: Bool) -> BaseOperation @@ -24,6 +25,14 @@ final class MetaAccountOperationFactory { let seed: Data } + private struct TonAccountQuery { + let publicKey: Data + let privateKey: Data + let address: TonSwift.Address + let seed: Data + let contractVersion: TonContractVersion + } + private enum SeedSource { case mnemonic(IRMnemonicProtocol) case seed(Data) @@ -84,13 +93,10 @@ private extension MetaAccountOperationFactory { func saveSecretKey( _ secretKey: Data, metaId: String, - accountId: AccountId? = nil, - ethereumBased: Bool + ecosystem: Ecosystem, + accountId: AccountId? = nil ) throws { - let tag = ethereumBased ? - KeystoreTagV2.ethereumSecretKeyTagForMetaId(metaId, accountId: accountId) : - KeystoreTagV2.substrateSecretKeyTagForMetaId(metaId, accountId: accountId) - + let tag = KeystoreTagV2.secretKeyTag(for: ecosystem, metaId: metaId, accountId: accountId) try keystore.saveKey(secretKey, with: tag) } @@ -123,13 +129,10 @@ private extension MetaAccountOperationFactory { func saveSeed( _ seed: Data, metaId: String, - accountId: AccountId? = nil, - ethereumBased: Bool + ecosystem: Ecosystem, + accountId: AccountId? = nil ) throws { - let tag = ethereumBased ? - KeystoreTagV2.ethereumSeedTagForMetaId(metaId, accountId: accountId) : - KeystoreTagV2.substrateSeedTagForMetaId(metaId, accountId: accountId) - + let tag = KeystoreTagV2.secretKeyTag(for: ecosystem, metaId: metaId, accountId: accountId) try keystore.saveKey(seed, with: tag) } @@ -223,11 +226,35 @@ private extension MetaAccountOperationFactory { ) } + private func getTonQuery( + mnemonic: IRMnemonicProtocol + ) throws -> TonAccountQuery { + let mnemonicArray = mnemonic.allWords() + let seed = Mnemonic.mnemonicToSeed(mnemonicArray: mnemonicArray) + let keypair = try Mnemonic.mnemonicToPrivateKey(mnemonicArray: mnemonicArray) + + /// Currently support version 4 revision 2 + /// Do not forget to change contractVersion if will support v5 contract + let wallet = WalletV4R2(publicKey: keypair.publicKey.data) + let address = try wallet.address() + + return TonAccountQuery( + publicKey: keypair.publicKey.data, + privateKey: keypair.privateKey.data, + address: address, + seed: seed, + contractVersion: .v4R2 + ) + } + func createMetaAccount( name: String, substratePublicKey: Data, substrateCryptoType: CryptoType, ethereumPublicKey: Data?, + tonPublicKey: Data?, + tonAddress: TonSwift.Address?, + tonContractVersion: TonContractVersion?, isBackuped: Bool, defaultChainId: ChainModel.Id? = nil ) throws -> MetaAccountModel { @@ -242,6 +269,9 @@ private extension MetaAccountOperationFactory { substratePublicKey: substratePublicKey, ethereumAddress: ethereumAddress, ethereumPublicKey: ethereumPublicKey, + tonAddress: tonAddress, + tonPublicKey: tonPublicKey, + tonContractVersion: tonContractVersion, chainAccounts: [], assetKeysOrder: nil, canExportEthereumMnemonic: true, @@ -277,24 +307,31 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { ethereumBased: true ) + let tonQuery = try getTonQuery(mnemonic: request.mnemonic) + let metaAccount = try createMetaAccount( name: request.username, substratePublicKey: substrateQuery.publicKey, substrateCryptoType: request.cryptoType, ethereumPublicKey: ethereumQuery.publicKey, + tonPublicKey: tonQuery.publicKey, + tonAddress: tonQuery.address, + tonContractVersion: tonQuery.contractVersion, isBackuped: isBackuped, defaultChainId: request.defaultChainId ) let metaId = metaAccount.metaId - try saveSecretKey(substrateQuery.privateKey, metaId: metaId, ethereumBased: false) + try saveSecretKey(substrateQuery.privateKey, metaId: metaId, ecosystem: .substrate) try saveDerivationPath(request.substrateDerivationPath, metaId: metaId, ethereumBased: false) - try saveSeed(substrateQuery.seed, metaId: metaId, ethereumBased: false) + try saveSeed(substrateQuery.seed, metaId: metaId, ecosystem: .substrate) - try saveSecretKey(ethereumQuery.privateKey, metaId: metaId, ethereumBased: true) + try saveSecretKey(ethereumQuery.privateKey, metaId: metaId, ecosystem: .ethereumBased) try saveDerivationPath(request.ethereumDerivationPath, metaId: metaId, ethereumBased: true) - try saveSeed(ethereumQuery.privateKey, metaId: metaId, ethereumBased: true) + try saveSeed(ethereumQuery.privateKey, metaId: metaId, ecosystem: .ethereumBased) + + try saveSecretKey(tonQuery.privateKey, metaId: metaId, ecosystem: .ton) try saveEntropy(request.mnemonic.entropy(), metaId: metaId) @@ -333,19 +370,22 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { substratePublicKey: substrateQuery.publicKey, substrateCryptoType: request.cryptoType, ethereumPublicKey: ethereumQuery?.publicKey, + tonPublicKey: nil, + tonAddress: nil, + tonContractVersion: nil, isBackuped: isBackuped ) let metaId = metaAccount.metaId - try saveSecretKey(substrateQuery.privateKey, metaId: metaId, ethereumBased: false) + try saveSecretKey(substrateQuery.privateKey, metaId: metaId, ecosystem: .substrate) try saveDerivationPath(request.substrateDerivationPath, metaId: metaId, ethereumBased: false) - try saveSeed(substrateQuery.seed, metaId: metaId, ethereumBased: false) + try saveSeed(substrateQuery.seed, metaId: metaId, ecosystem: .substrate) if let query = ethereumQuery, let derivationPath = request.ethereumDerivationPath { - try saveSecretKey(query.privateKey, metaId: metaId, ethereumBased: true) + try saveSecretKey(query.privateKey, metaId: metaId, ecosystem: .ethereumBased) try saveDerivationPath(derivationPath, metaId: metaId, ethereumBased: true) - try saveSeed(query.privateKey, metaId: metaId, ethereumBased: true) + try saveSeed(query.privateKey, metaId: metaId, ecosystem: .ethereumBased) } return metaAccount @@ -410,9 +450,9 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { let metaId = UUID().uuidString let accountId = try substratePublicKey.rawData().publicKeyToAccountId() - try saveSecretKey(substrateKeystore.secretKeyData, metaId: metaId, ethereumBased: false) + try saveSecretKey(substrateKeystore.secretKeyData, metaId: metaId, ecosystem: .substrate) if let ethereumKeystore = ethereumKeystore { - try saveSecretKey(ethereumKeystore.secretKeyData, metaId: metaId, ethereumBased: true) + try saveSecretKey(ethereumKeystore.secretKeyData, metaId: metaId, ecosystem: .ethereumBased) } return MetaAccountModel( @@ -423,6 +463,9 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { substratePublicKey: substratePublicKey.rawData(), ethereumAddress: ethereumAddress, ethereumPublicKey: ethereumPublicKey?.rawData(), + tonAddress: nil, + tonPublicKey: nil, + tonContractVersion: nil, chainAccounts: [], assetKeysOrder: nil, canExportEthereumMnemonic: true, @@ -438,40 +481,63 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { func importChainAccountOperation(request: ChainAccountImportMnemonicRequest) -> BaseOperation { ClosureOperation { [self] in - let query = try getQuery( - seedSource: .mnemonic(request.mnemonic), - derivationPath: request.derivationPath, - cryptoType: request.cryptoType, - ethereumBased: request.isEthereum - ) - let metaId = request.meta.metaId - let accountId = request.isEthereum ? - try query.publicKey.ethereumAddressFromPublicKey() : try query.publicKey.publicKeyToAccountId() + + let accountId: AccountId + let privateKey: Data + let publicKey: Data + switch request.ecosystem { + case .substrate: + let query = try getQuery( + seedSource: .mnemonic(request.mnemonic), + derivationPath: request.derivationPath, + cryptoType: request.cryptoType, + ethereumBased: false + ) + accountId = try query.publicKey.publicKeyToAccountId() + privateKey = query.privateKey + publicKey = query.publicKey + try saveSeed(query.seed, metaId: metaId, ecosystem: request.ecosystem) + case .ethereum, .ethereumBased: + let query = try getQuery( + seedSource: .mnemonic(request.mnemonic), + derivationPath: request.derivationPath, + cryptoType: request.cryptoType, + ethereumBased: true + ) + accountId = try query.publicKey.ethereumAddressFromPublicKey() + privateKey = query.privateKey + publicKey = query.publicKey + try saveSeed(query.seed, metaId: metaId, ecosystem: request.ecosystem) + case .ton: + let tonQuery = try getTonQuery(mnemonic: request.mnemonic) + accountId = tonQuery.publicKey + privateKey = tonQuery.privateKey + publicKey = tonQuery.publicKey + } try saveSecretKey( - query.privateKey, + privateKey, metaId: metaId, - accountId: accountId, - ethereumBased: request.isEthereum + ecosystem: request.ecosystem, + accountId: accountId ) try saveDerivationPath( request.derivationPath, metaId: metaId, accountId: accountId, - ethereumBased: request.isEthereum + ethereumBased: request.ecosystem.isEthereum || request.ecosystem.isEthereumBased ) - try saveSeed(query.seed, metaId: metaId, accountId: accountId, ethereumBased: request.isEthereum) try saveEntropy(request.mnemonic.entropy(), metaId: metaId, accountId: accountId) let chainAccount = ChainAccountModel( chainId: request.chainId, accountId: accountId, - publicKey: query.publicKey, + publicKey: publicKey, cryptoType: request.cryptoType.rawValue, - ethereumBased: request.isEthereum + ecosystem: request.ecosystem ) return request.meta.insertingChainAccount(chainAccount) @@ -485,34 +551,42 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { seedSource: .seed(seed), derivationPath: request.derivationPath, cryptoType: request.cryptoType, - ethereumBased: request.isEthereum + ethereumBased: request.ecosystem.isEthereum || request.ecosystem.isEthereumBased ) - let accountId = request.isEthereum ? - try query.publicKey.ethereumAddressFromPublicKey() : try query.publicKey.publicKeyToAccountId() + + let accountId: AccountId + switch request.ecosystem { + case .substrate: + accountId = try query.publicKey.publicKeyToAccountId() + case .ethereum, .ethereumBased: + accountId = try query.publicKey.ethereumAddressFromPublicKey() + case .ton: + throw AccountOperationFactoryError.unsupportedImport + } let metaId = request.meta.metaId try saveSecretKey( query.privateKey, metaId: metaId, - accountId: accountId, - ethereumBased: request.isEthereum + ecosystem: request.ecosystem, + accountId: accountId ) try saveDerivationPath( request.derivationPath, metaId: metaId, accountId: accountId, - ethereumBased: request.isEthereum + ethereumBased: request.ecosystem.isEthereum || request.ecosystem.isEthereumBased ) - try saveSeed(seed, metaId: metaId, accountId: accountId, ethereumBased: request.isEthereum) + try saveSeed(seed, metaId: metaId, ecosystem: request.ecosystem) let chainAccount = ChainAccountModel( chainId: request.chainId, accountId: accountId, publicKey: query.publicKey, cryptoType: request.cryptoType.rawValue, - ethereumBased: request.isEthereum + ecosystem: request.ecosystem ) return request.meta.insertingChainAccount(chainAccount) @@ -533,19 +607,14 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { ) guard let keystore = try? keystoreExtractor - .extractFromDefinition(keystoreDefinition, password: request.password) - else { + .extractFromDefinition(keystoreDefinition, password: request.password) else { throw AccountOperationFactoryError.decryption } let publicKey: IRPublicKeyProtocol - if request.isEthereum { - if let privateKey = try? SECPrivateKey(rawData: keystore.secretKeyData) { - publicKey = try SECKeyFactory().derive(fromPrivateKey: privateKey).publicKey() - } else { - throw AccountOperationFactoryError.decryption - } - } else { + let accountId: Data + switch request.ecosystem { + case .substrate: switch request.cryptoType { case .sr25519: publicKey = try SNPublicKey(rawData: keystore.publicKeyData) @@ -554,15 +623,23 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { case .ecdsa: publicKey = try SECPublicKey(rawData: keystore.publicKeyData) } + accountId = try publicKey.rawData().publicKeyToAccountId() + case .ethereum, .ethereumBased: + if let privateKey = try? SECPrivateKey(rawData: keystore.secretKeyData) { + publicKey = try SECKeyFactory().derive(fromPrivateKey: privateKey).publicKey() + } else { + throw AccountOperationFactoryError.decryption + } + accountId = try publicKey.rawData().ethereumAddressFromPublicKey() + case .ton: + throw AccountOperationFactoryError.unsupportedImport } - let accountId = request.isEthereum ? - try publicKey.rawData().ethereumAddressFromPublicKey() : try publicKey.rawData().publicKeyToAccountId() try saveSecretKey( keystore.secretKeyData, metaId: request.meta.metaId, - accountId: accountId, - ethereumBased: request.isEthereum + ecosystem: request.ecosystem, + accountId: accountId ) let chainAccount = ChainAccountModel( @@ -570,7 +647,7 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { accountId: accountId, publicKey: publicKey.rawData(), cryptoType: request.cryptoType.rawValue, - ethereumBased: request.isEthereum + ecosystem: request.ecosystem ) return request.meta.insertingChainAccount(chainAccount) diff --git a/fearless/Common/Protocols/AccountFetching.swift b/fearless/Common/Protocols/AccountFetching.swift index 48365b74e9..1d683b7149 100644 --- a/fearless/Common/Protocols/AccountFetching.swift +++ b/fearless/Common/Protocols/AccountFetching.swift @@ -1,6 +1,7 @@ import Foundation import RobinHood import SSFModels +import SSFAccountManagment protocol AccountFetching { func fetchAllMetaAccounts( @@ -74,7 +75,7 @@ extension AccountFetching { } for chainAccount in meta.chainAccounts { - let chainFormat: ChainFormat = chainAccount.ethereumBased ? .ethereum : .substrate(chain.addressPrefix) + let chainFormat: ChainFormat = chainAccount.ecosystem.isEthereumBased ? .ethereum : .substrate(chain.addressPrefix) if let chainAddress = try? chainAccount.accountId.toAddress(using: chainFormat), chainAddress == address { let account = ChainAccountResponse( @@ -84,7 +85,7 @@ extension AccountFetching { name: meta.name, cryptoType: CryptoType(rawValue: meta.substrateCryptoType) ?? .sr25519, addressPrefix: chain.addressPrefix, - isEthereumBased: chainAccount.ethereumBased, + ecosystem: chainAccount.ecosystem, isChainAccount: true, walletId: meta.metaId ) @@ -163,7 +164,7 @@ extension AccountFetching { name: meta.name, cryptoType: CryptoType(rawValue: meta.substrateCryptoType) ?? .sr25519, addressPrefix: chain.addressPrefix, - isEthereumBased: false, + ecosystem: chainAccount.ecosystem, isChainAccount: true, walletId: meta.metaId )) @@ -204,7 +205,15 @@ extension AccountFetching { } for chainAccount in meta.chainAccounts { - let chainFormat: ChainFormat = chainAccount.ethereumBased ? .ethereum : .substrate(chain.addressPrefix) + let chainFormat: ChainFormat /* = chainAccount.ethereumBased ? .ethereum : .substrate(chain.addressPrefix) */ + switch chainAccount.ecosystem { + case .substrate: + chainFormat = .substrate(chain.addressPrefix) + case .ethereumBased, .ethereum: + chainFormat = .ethereum + case .ton: + chainFormat = .ton(bounceable: true) + } if let chainAddress = try? chainAccount.accountId.toAddress(using: chainFormat), chainAddress == address { closure(.success(meta)) diff --git a/fearless/Common/Protocols/AccountSelectionPresentable.swift b/fearless/Common/Protocols/AccountSelectionPresentable.swift index be34f4d234..7dc284f143 100644 --- a/fearless/Common/Protocols/AccountSelectionPresentable.swift +++ b/fearless/Common/Protocols/AccountSelectionPresentable.swift @@ -1,4 +1,5 @@ import SoraFoundation +import SSFModels protocol AccountSelectionPresentable: AnyObject { func presentAccountSelection( diff --git a/fearless/Common/Protocols/RuntimeConstantFetching.swift b/fearless/Common/Protocols/RuntimeConstantFetching.swift index 9b6902fdd9..dbb08622ed 100644 --- a/fearless/Common/Protocols/RuntimeConstantFetching.swift +++ b/fearless/Common/Protocols/RuntimeConstantFetching.swift @@ -11,6 +11,12 @@ protocol RuntimeConstantFetching { closure: @escaping (Result) -> Void ) + func fetchConstant( + for path: ConstantCodingPath, + runtimeCodingService: RuntimeCodingServiceProtocol, + operationManager: OperationManagerProtocol + ) async throws -> T + func fetchCompoundConstant( for path: ConstantCodingPath, runtimeCodingService: RuntimeCodingServiceProtocol, @@ -64,6 +70,27 @@ extension RuntimeConstantFetching { operationManager.enqueue(operations: [constOperation, codingFactoryOperation], in: .transient) } + func fetchConstant( + for path: ConstantCodingPath, + runtimeCodingService: RuntimeCodingServiceProtocol, + operationManager: OperationManagerProtocol + ) async throws -> T { + try await withUnsafeThrowingContinuation { continuation in + fetchConstant( + for: path, + runtimeCodingService: runtimeCodingService, + operationManager: operationManager + ) { (result: Swift.Result) in + switch result { + case let .success(constant): + continuation.resume(returning: constant) + case let .failure(error): + continuation.resume(throwing: error) + } + } + } + } + func fetchCompoundConstant( for path: ConstantCodingPath, runtimeCodingService: RuntimeCodingServiceProtocol, diff --git a/fearless/Common/Services/ChainRegistry/ChainRegistry.swift b/fearless/Common/Services/ChainRegistry/ChainRegistry.swift index 0e9ed489ab..de53e82f95 100644 --- a/fearless/Common/Services/ChainRegistry/ChainRegistry.swift +++ b/fearless/Common/Services/ChainRegistry/ChainRegistry.swift @@ -15,15 +15,19 @@ protocol ChainRegistryProtocol: AnyObject { func resetConnection(for chainId: ChainModel.Id) func retryConnection(for chainId: ChainModel.Id) func getConnection(for chainId: ChainModel.Id) -> ChainConnection? - func getRuntimeProvider(for chainId: ChainModel.Id) -> RuntimeProviderProtocol? - func getChain(for chainId: ChainModel.Id) -> ChainModel? + func getEthereumConnection(for chainId: ChainModel.Id) -> Web3.Eth? + func chainsSubscribe( _ target: AnyObject, runningInQueue: DispatchQueue, updateClosure: @escaping ([DataProviderChange]) -> Void ) - func getEthereumConnection(for chainId: ChainModel.Id) -> Web3.Eth? func chainsUnsubscribe(_ target: AnyObject) + + func getTonApiAssembly() throws -> TonAPIAssembly + + func getRuntimeProvider(for chainId: ChainModel.Id) -> RuntimeProviderProtocol? + func getChain(for chainId: ChainModel.Id) -> ChainModel? func syncUp() func performHotBoot() func performColdBoot() @@ -53,6 +57,8 @@ final class ChainRegistry { connectionPools.first(where: { $0 is EthereumConnectionPool }) as? EthereumConnectionPool } + private(set) var tonApiAssembly: TonAPIAssembly? + // MARK: - State private var chains: [ChainModel] = [] @@ -124,18 +130,24 @@ final class ChainRegistry { // MARK: - Private DataProviderChange handle methods private func handleInsert(_ chain: ChainModel) throws { - if chain.isEthereum { - try handleNewEthereumChain(newChain: chain) - } else { + switch chain.ecosystem { + case .substrate, .ethereumBased: try handleNewSubstrateChain(newChain: chain) + case .ethereum: + try handleNewEthereumChain(newChain: chain) + case .ton: + handle(ton: chain) } } private func handleUpdate(_ chain: ChainModel) throws { - if chain.isEthereum { - try handleUpdatedEthereumChain(updatedChain: chain) - } else { + switch chain.ecosystem { + case .substrate, .ethereumBased: try handleUpdatedSubstrateChain(updatedChain: chain) + case .ethereum: + try handleUpdatedEthereumChain(updatedChain: chain) + case .ton: + handle(ton: chain) } } @@ -144,10 +156,11 @@ final class ChainRegistry { return } - if removedChain.isEthereum { - handleDeletedEthereumChain(chainId: chainId) - } else { + switch removedChain.ecosystem { + case .substrate, .ethereumBased: handleDeletedSubstrateChain(chainId: chainId) + case .ethereum, .ton: + handleDeletedChain(chainId: chainId) } } @@ -238,16 +251,30 @@ final class ChainRegistry { chains.append(updatedChain) } - private func handleDeletedEthereumChain(chainId: ChainModel.Id) { - chains = chains.filter { $0.chainId != chainId } - } - private func resetEthereumConnection(for _: ChainModel.Id) { // TODO: Reset eth connection } + // MARK: - Private Ton methods + + private func handle(ton chain: ChainModel) { + chains.append(chain) + guard + let node = chain.nodes.first, + node.url != tonApiAssembly?.tonAPIURL + else { + return + } + let apiAssembly = TonAPIAssembly(tonAPIURL: node.url) + tonApiAssembly = apiAssembly + } + // MARK: - Private others methods + private func handleDeletedChain(chainId: ChainModel.Id) { + chains = chains.filter { $0.chainId != chainId } + } + private func syncUpServices() { chainSyncService.syncUp() chainsTypesSyncService.syncUp() @@ -258,7 +285,7 @@ final class ChainRegistry { extension ChainRegistry: ChainRegistryProtocol { var availableChainIds: Set? { - readLock.concurrentlyRead { Set(runtimeVersionSubscriptions.keys + chains.filter { $0.isEthereum }.map { $0.chainId }) } + readLock.concurrentlyRead { Set(chains.map { $0.chainId }) } } var availableChains: [ChainModel] { @@ -375,22 +402,29 @@ extension ChainRegistry: ChainRegistryProtocol { return } - if chain.isEthereum { - resetEthereumConnection(for: chain.chainId) - } else { + switch chain.ecosystem { + case .substrate, .ethereumBased: resetSubstrateConnection(for: chain.chainId) + case .ethereum: + resetEthereumConnection(for: chain.chainId) + case .ton: + break } } func retryConnection(for chainId: ChainModel.Id) { - guard - let chain = chains.first(where: { $0.chainId == chainId }), - let currentConnection = getConnection(for: chainId) - else { + guard let currentConnection = getConnection(for: chainId) else { return } currentConnection.connectIfNeeded() } + + func getTonApiAssembly() throws -> TonAPIAssembly { + guard let tonApiAssembly else { + throw ChainRegistryError.connectionUnavailable + } + return tonApiAssembly + } } // MARK: - ConnectionPoolDelegate diff --git a/fearless/Common/Services/ChainRegistry/ChainSyncService.swift b/fearless/Common/Services/ChainRegistry/ChainSyncService.swift index 4f974e47be..9f85139848 100644 --- a/fearless/Common/Services/ChainRegistry/ChainSyncService.swift +++ b/fearless/Common/Services/ChainRegistry/ChainSyncService.swift @@ -161,6 +161,9 @@ final class ChainSyncService { let newOrUpdated: [ChainModel] = remoteChains.compactMap { remoteItem in if let localItem = localMapping[remoteItem.chainId] { + if localItem.options?.contains(.remoteAssets) == true { + return compareForRemoteAssetsOption(localItem: localItem, remoteItem: remoteItem) + } return localItem != remoteItem ? remoteItem : nil } else { return remoteItem @@ -176,6 +179,25 @@ final class ChainSyncService { handle(syncChanges: syncChanges) } + private func compareForRemoteAssetsOption( + localItem: ChainModel, + remoteItem: ChainModel + ) -> ChainModel? { + let updatedLocalChain = localItem.replacingAssets([]) + let updatedRemoteChain = remoteItem.replacingAssets([]) + + let localUtilityAsset = localItem.assets.first(where: { $0.isUtility }) + let remoteUtilityAsset = remoteItem.assets.first(where: { $0.isUtility }) + + if updatedLocalChain != updatedRemoteChain || localUtilityAsset != remoteUtilityAsset { + let assets = localItem.assets.union(remoteItem.assets) + let remoteChain = remoteItem.replacingAssets(assets) + return remoteChain + } else { + return nil + } + } + private func handle(syncChanges: SyncChanges) { let localSaveOperation = repository.saveOperation({ syncChanges.newOrUpdatedItems diff --git a/fearless/Common/Services/ChainRegistry/ConnectionPool/TonAPIAssembly.swift b/fearless/Common/Services/ChainRegistry/ConnectionPool/TonAPIAssembly.swift new file mode 100644 index 0000000000..5f90b492f6 --- /dev/null +++ b/fearless/Common/Services/ChainRegistry/ConnectionPool/TonAPIAssembly.swift @@ -0,0 +1,40 @@ +// import Foundation +// import StreamURLSessionTransport +// import OpenAPIRuntime +// import HTTPTypes +// import TonAPI +// +// final class TonAPIAssembly { +// let tonAPIURL: URL +// +// init(tonAPIURL: URL) { +// self.tonAPIURL = tonAPIURL +// } +// +// private var _tonAPIClient: TonAPI.Client? +// func tonAPIClient() -> TonAPI.Client { +// if let tonAPIClient = _tonAPIClient { +// return tonAPIClient +// } +// let tonAPIClient = TonAPI.Client( +// serverURL: tonAPIURL, +// transport: transport, +// middlewares: [] +// ) +// _tonAPIClient = tonAPIClient +// return tonAPIClient +// } +// +// // MARK: - Private +// +// private lazy var transport: StreamURLSessionTransport = { +// StreamURLSessionTransport(urlSessionConfiguration: urlSessionConfiguration) +// }() +// +// private var urlSessionConfiguration: URLSessionConfiguration { +// let configuration = URLSessionConfiguration.default +// configuration.timeoutIntervalForRequest = 60 +// configuration.timeoutIntervalForResource = 60 +// return configuration +// } +// } diff --git a/fearless/Common/Services/DeprecatedControllerStashAccountCheckService.swift b/fearless/Common/Services/DeprecatedControllerStashAccountCheckService.swift index 23b5d59352..0ac45a63dc 100644 --- a/fearless/Common/Services/DeprecatedControllerStashAccountCheckService.swift +++ b/fearless/Common/Services/DeprecatedControllerStashAccountCheckService.swift @@ -3,6 +3,7 @@ import RobinHood import SSFUtils import Foundation import SSFRuntimeCodingService +import SSFCrypto enum DeprecatedAccountIssue { case controller(issue: ControllerAccountIssue) diff --git a/fearless/Common/Services/ExtrinsicService/ExtrinsicOperationFactory.swift b/fearless/Common/Services/ExtrinsicService/ExtrinsicOperationFactory.swift index f4c2cc28b7..c8718313bc 100644 --- a/fearless/Common/Services/ExtrinsicService/ExtrinsicOperationFactory.swift +++ b/fearless/Common/Services/ExtrinsicService/ExtrinsicOperationFactory.swift @@ -4,6 +4,7 @@ import SSFUtils import IrohaCrypto import SSFModels import SSFRuntimeCodingService +import SSFCrypto typealias ExtrinsicBuilderClosure = (ExtrinsicBuilderProtocol) throws -> (ExtrinsicBuilderProtocol) typealias ExtrinsicBuilderIndexedClosure = (ExtrinsicBuilderProtocol, Int) throws -> (ExtrinsicBuilderProtocol) @@ -96,22 +97,6 @@ final class ExtrinsicOperationFactory { let engine: JSONRPCEngine let eraOperationFactory: ExtrinsicEraOperationFactoryProtocol - @available(*, deprecated, message: "Use init(accountId:cryptoType:) instead") - init( - address: String, - cryptoType _: CryptoType, - runtimeRegistry: RuntimeCodingServiceProtocol, - engine: JSONRPCEngine, - eraOperationFactory: ExtrinsicEraOperationFactoryProtocol = MortalEraOperationFactory() - ) { - accountId = (try? address.toAccountId()) ?? Data(repeating: 0, count: 32) - chainFormat = .ethereum - cryptoType = .ecdsa - self.runtimeRegistry = runtimeRegistry - self.engine = engine - self.eraOperationFactory = eraOperationFactory - } - init( accountId: AccountId, chainFormat: ChainFormat, @@ -197,9 +182,9 @@ final class ExtrinsicOperationFactory { let era = try eraWrapper.targetOperation.extractNoCancellableResultData().extrinsicEra let eraBlockHash = try eraBlockOperation.extractNoCancellableResultData() - let account: MultiAddress = codingFactory.metadata.multiAddressParameter( + let account: MultiAddress = try codingFactory.metadata.multiAddressParameter( accountId: currentAccountId, - chainFormat: currentChainFormat.asSfCrypto() + chainFormat: currentChainFormat ) let extrinsics: [Data] = try (0 ..< numberOfExtrinsics).map { index in var builder: ExtrinsicBuilderProtocol = diff --git a/fearless/Common/Services/ExtrinsicService/ExtrinsicService.swift b/fearless/Common/Services/ExtrinsicService/ExtrinsicService.swift index 09bf2c1740..a56f605ae7 100644 --- a/fearless/Common/Services/ExtrinsicService/ExtrinsicService.swift +++ b/fearless/Common/Services/ExtrinsicService/ExtrinsicService.swift @@ -56,24 +56,6 @@ final class ExtrinsicService { let operationFactory: ExtrinsicOperationFactoryProtocol let operationManager: OperationManagerProtocol - @available(*, deprecated, message: "Use init(accountId:cryptoType:) instead") - init( - address: String, - cryptoType: CryptoType, - runtimeRegistry: RuntimeCodingServiceProtocol, - engine: JSONRPCEngine, - operationManager: OperationManagerProtocol - ) { - operationFactory = ExtrinsicOperationFactory( - address: address, - cryptoType: cryptoType, - runtimeRegistry: runtimeRegistry, - engine: engine - ) - - self.operationManager = operationManager - } - init( accountId: AccountId, chainFormat: ChainFormat, diff --git a/fearless/Common/Services/PayoutRewardsService/NominatorPayoutInfoFactory.swift b/fearless/Common/Services/PayoutRewardsService/NominatorPayoutInfoFactory.swift index a2a162b3a2..67dd4c3c5d 100644 --- a/fearless/Common/Services/PayoutRewardsService/NominatorPayoutInfoFactory.swift +++ b/fearless/Common/Services/PayoutRewardsService/NominatorPayoutInfoFactory.swift @@ -1,6 +1,7 @@ import Foundation import IrohaCrypto import SSFModels +import SSFCrypto final class NominatorPayoutInfoFactory: PayoutInfoFactoryProtocol { let addressPrefix: UInt16 diff --git a/fearless/Common/Services/PayoutRewardsService/PayoutRewardsService+Fetch.swift b/fearless/Common/Services/PayoutRewardsService/PayoutRewardsService+Fetch.swift index 3a0b82b445..19e6e94249 100644 --- a/fearless/Common/Services/PayoutRewardsService/PayoutRewardsService+Fetch.swift +++ b/fearless/Common/Services/PayoutRewardsService/PayoutRewardsService+Fetch.swift @@ -3,6 +3,7 @@ import SSFUtils import BigInt import IrohaCrypto import SSFRuntimeCodingService +import SSFCrypto extension PayoutRewardsService { func createChainHistoryRangeOperationWrapper( diff --git a/fearless/Common/Services/PayoutRewardsService/PayoutValidatorForValidatorFactory.swift b/fearless/Common/Services/PayoutRewardsService/PayoutValidatorForValidatorFactory.swift index 0918a5e843..f5c4a90a11 100644 --- a/fearless/Common/Services/PayoutRewardsService/PayoutValidatorForValidatorFactory.swift +++ b/fearless/Common/Services/PayoutRewardsService/PayoutValidatorForValidatorFactory.swift @@ -2,6 +2,7 @@ import Foundation import RobinHood import IrohaCrypto import SSFModels +import SSFCrypto final class PayoutValidatorsForValidatorFactory: PayoutValidatorsFactoryProtocol { private let chainAsset: ChainAsset diff --git a/fearless/Common/Services/PayoutRewardsService/SoraSubsquidPayoutValidatorForNominatorFactory.swift b/fearless/Common/Services/PayoutRewardsService/SoraSubsquidPayoutValidatorForNominatorFactory.swift index 845aed97f0..4c8b0de9c1 100644 --- a/fearless/Common/Services/PayoutRewardsService/SoraSubsquidPayoutValidatorForNominatorFactory.swift +++ b/fearless/Common/Services/PayoutRewardsService/SoraSubsquidPayoutValidatorForNominatorFactory.swift @@ -3,6 +3,7 @@ import Foundation import SSFUtils import IrohaCrypto import SSFModels +import SSFCrypto final class SoraSubsquidPayoutValidatorsForNominatorFactory { private let url: URL diff --git a/fearless/Common/Services/PayoutRewardsService/SubqueryPayoutValidatorsForNominatorFactory.swift b/fearless/Common/Services/PayoutRewardsService/SubqueryPayoutValidatorsForNominatorFactory.swift index beabedccff..ef8bb23754 100644 --- a/fearless/Common/Services/PayoutRewardsService/SubqueryPayoutValidatorsForNominatorFactory.swift +++ b/fearless/Common/Services/PayoutRewardsService/SubqueryPayoutValidatorsForNominatorFactory.swift @@ -3,6 +3,7 @@ import Foundation import SSFUtils import IrohaCrypto import SSFModels +import SSFCrypto final class SubqueryPayoutValidatorsForNominatorFactory { private let url: URL diff --git a/fearless/Common/Services/PayoutRewardsService/SubsquidPayoutValidatorsForNominatorFactory.swift b/fearless/Common/Services/PayoutRewardsService/SubsquidPayoutValidatorsForNominatorFactory.swift index e589631193..a32c32f657 100644 --- a/fearless/Common/Services/PayoutRewardsService/SubsquidPayoutValidatorsForNominatorFactory.swift +++ b/fearless/Common/Services/PayoutRewardsService/SubsquidPayoutValidatorsForNominatorFactory.swift @@ -3,6 +3,7 @@ import Foundation import SSFUtils import IrohaCrypto import SSFModels +import SSFCrypto final class SubsquidPayoutValidatorsForNominatorFactory { private let url: URL diff --git a/fearless/Common/Services/PayoutRewardsService/ValidatorPayoutInfoFactory.swift b/fearless/Common/Services/PayoutRewardsService/ValidatorPayoutInfoFactory.swift index 96c9ce2669..2f262ebb2b 100644 --- a/fearless/Common/Services/PayoutRewardsService/ValidatorPayoutInfoFactory.swift +++ b/fearless/Common/Services/PayoutRewardsService/ValidatorPayoutInfoFactory.swift @@ -1,6 +1,7 @@ import Foundation import IrohaCrypto import SSFModels +import SSFCrypto final class ValidatorPayoutInfoFactory: PayoutInfoFactoryProtocol { private let chainAsset: ChainAsset diff --git a/fearless/Common/Services/RemoteSubscription/AccountInfoUpdatingService.swift b/fearless/Common/Services/RemoteSubscription/AccountInfoUpdatingService.swift index e8c41c1b14..068f42154c 100644 --- a/fearless/Common/Services/RemoteSubscription/AccountInfoUpdatingService.swift +++ b/fearless/Common/Services/RemoteSubscription/AccountInfoUpdatingService.swift @@ -15,7 +15,6 @@ final class AccountInfoUpdatingService { private(set) var selectedMetaAccount: MetaAccountModel private let chainRegistry: ChainRegistryProtocol private let substrateRemoteSubscriptionService: WalletRemoteSubscriptionServiceProtocol - private let ethereumRemoteSubscriptionService: WalletRemoteSubscriptionServiceProtocol private let logger: LoggerProtocol? private let eventCenter: EventCenterProtocol private var chains: [ChainModel.Id: ChainModel] = [:] @@ -36,14 +35,12 @@ final class AccountInfoUpdatingService { selectedAccount: MetaAccountModel, chainRegistry: ChainRegistryProtocol, remoteSubscriptionService: WalletRemoteSubscriptionServiceProtocol, - ethereumRemoteSubscriptionService: WalletRemoteSubscriptionServiceProtocol, logger: LoggerProtocol?, eventCenter: EventCenterProtocol ) { selectedMetaAccount = selectedAccount self.chainRegistry = chainRegistry substrateRemoteSubscriptionService = remoteSubscriptionService - self.ethereumRemoteSubscriptionService = ethereumRemoteSubscriptionService self.logger = logger self.eventCenter = eventCenter } @@ -54,14 +51,6 @@ final class AccountInfoUpdatingService { } } - private func getRemoteSubscriptionService(for chainAsset: ChainAsset) -> WalletRemoteSubscriptionServiceProtocol { - if chainAsset.chain.isEthereum { - return ethereumRemoteSubscriptionService - } else { - return substrateRemoteSubscriptionService - } - } - private func handle(changes: [DataProviderChange]) { for change in changes { switch change { @@ -99,11 +88,11 @@ final class AccountInfoUpdatingService { return } - guard !chainAsset.chain.isEthereum else { + guard chainAsset.chain.ecosystem.isSubstrate else { return } - let maybeSubscriptionId = await getRemoteSubscriptionService(for: chainAsset).attachToAccountInfo( + let maybeSubscriptionId = await substrateRemoteSubscriptionService.attachToAccountInfo( of: accountId, chainAsset: chainAsset, queue: nil, @@ -142,7 +131,7 @@ final class AccountInfoUpdatingService { return } - getRemoteSubscriptionService(for: chainAsset).detachFromAccountInfo( + substrateRemoteSubscriptionService.detachFromAccountInfo( for: subscriptionInfo.subscriptionId, chainAssetKey: key, queue: nil diff --git a/fearless/Common/Services/RemoteSubscription/EthereumWalletRemoteSubscriptionService.swift b/fearless/Common/Services/RemoteSubscription/EthereumWalletRemoteSubscriptionService.swift index 2e8f0ff7ff..ce8041b489 100644 --- a/fearless/Common/Services/RemoteSubscription/EthereumWalletRemoteSubscriptionService.swift +++ b/fearless/Common/Services/RemoteSubscription/EthereumWalletRemoteSubscriptionService.swift @@ -3,20 +3,21 @@ import SSFModels import Web3 import Web3ContractABI import RobinHood +import SSFCrypto final class EthereumWalletRemoteSubscriptionService { private let chainRegistry: ChainRegistryProtocol private let logger: LoggerProtocol private let repository: AnyDataProviderRepository private let operationManager: OperationManagerProtocol - private let repositoryWrapper: EthereumBalanceRepositoryCacheWrapper + private let repositoryWrapper: BalanceRepositoryCacheWrapper init( chainRegistry: ChainRegistryProtocol, logger: LoggerProtocol, repository: AnyDataProviderRepository, operationManager: OperationManagerProtocol, - repositoryWrapper: EthereumBalanceRepositoryCacheWrapper + repositoryWrapper: BalanceRepositoryCacheWrapper ) { self.chainRegistry = chainRegistry self.logger = logger @@ -26,7 +27,7 @@ final class EthereumWalletRemoteSubscriptionService { } private func handleNewBlock(ws: Web3.Eth, chainAsset: ChainAsset, accountId: AccountId) throws { - switch chainAsset.asset.ethereumType { + switch chainAsset.asset.assetType.ethereumAssetType { case .normal: try fetchEthBalance(for: chainAsset, ws: ws, accountId: accountId) case .erc20, .bep20: @@ -42,7 +43,7 @@ final class EthereumWalletRemoteSubscriptionService { ws.getBalance(address: ethereumAddress, block: .latest) { [weak self] resp in if let balance = resp.result { - let accountInfo = AccountInfo(ethBalance: balance.quantity) + let accountInfo = AccountInfo(balance: balance.quantity) try? self?.handle(accountInfo: accountInfo, chainAsset: chainAsset, accountId: accountId) } } @@ -55,7 +56,7 @@ final class EthereumWalletRemoteSubscriptionService { let ethAddress = try EthereumAddress(rawAddress: address.hexToBytes()) contract.balanceOf(address: ethAddress).call(completion: { [weak self] response, _ in if let response = response, let balance = response["_balance"] as? BigUInt { - let accountInfo = AccountInfo(ethBalance: balance) + let accountInfo = AccountInfo(balance: balance) try? self?.handle(accountInfo: accountInfo, chainAsset: chainAsset, accountId: accountId) } }) diff --git a/fearless/Common/Services/ServiceCoordinator.swift b/fearless/Common/Services/ServiceCoordinator.swift index 232f3198c9..885a213525 100644 --- a/fearless/Common/Services/ServiceCoordinator.swift +++ b/fearless/Common/Services/ServiceCoordinator.swift @@ -6,6 +6,7 @@ import SSFUtils import SSFChainRegistry import SSFNetwork import SSFStorageQueryKit +import SSFModels protocol ServiceCoordinatorProtocol: ApplicationServiceProtocol { func updateOnAccountChange() @@ -88,47 +89,21 @@ extension ServiceCoordinator { logger: logger ) - let ethereumBalanceRepositoryWrapper = EthereumBalanceRepositoryCacheWrapper( + let ethereumBalanceRepositoryWrapper = BalanceRepositoryCacheWrapper( logger: logger, repository: repository, operationManager: OperationManagerFacade.sharedManager ) - let ethereumWalletRemoteSubscription = EthereumWalletRemoteSubscriptionService( - chainRegistry: chainRegistry, - logger: logger, - repository: repository, - operationManager: OperationManagerFacade.sharedManager, - repositoryWrapper: ethereumBalanceRepositoryWrapper - ) - let accountInfoService = AccountInfoUpdatingService( selectedAccount: selectedMetaAccount, chainRegistry: chainRegistry, remoteSubscriptionService: walletRemoteSubscription, - ethereumRemoteSubscriptionService: ethereumWalletRemoteSubscription, logger: logger, eventCenter: EventCenter.shared ) - let runtimeMetadataRepository: AsyncCoreDataRepositoryDefault = - SubstrateDataStorageFacade.shared.createAsyncRepository() - - let ethereumRemoteBalanceFetching = EthereumRemoteBalanceFetching( - chainRegistry: chainRegistry, - repositoryWrapper: ethereumBalanceRepositoryWrapper - ) - - let storagePerformer = SSFStorageQueryKit.StorageRequestPerformerDefault( - chainRegistry: chainRegistry - ) - - let accountInfoRemote = AccountInfoRemoteServiceDefault( - runtimeItemRepository: AsyncAnyRepository(runtimeMetadataRepository), - ethereumRemoteBalanceFetching: ethereumRemoteBalanceFetching, - storagePerformer: storagePerformer - ) - + let accountInfoRemote = ServiceAssembly.shared.accountInfoRemoteServiceDefault() let walletAssetsObserver = WalletAssetsObserverImpl( wallet: selectedMetaAccount, chainRegistry: chainRegistry, diff --git a/fearless/Common/Services/WebSocketService/StorageSubscription/TransactionSubscription.swift b/fearless/Common/Services/WebSocketService/StorageSubscription/TransactionSubscription.swift index ef3687ad05..b8fc32dfb0 100644 --- a/fearless/Common/Services/WebSocketService/StorageSubscription/TransactionSubscription.swift +++ b/fearless/Common/Services/WebSocketService/StorageSubscription/TransactionSubscription.swift @@ -5,6 +5,7 @@ import RobinHood import BigInt import SSFModels import SSFRuntimeCodingService +import SSFCrypto struct TransactionSubscriptionResult { let processingResult: ExtrinsicProcessingResult diff --git a/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift b/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift index 0c03cef080..084980da40 100644 --- a/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift +++ b/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift @@ -5,6 +5,10 @@ import SSFModels import SSFUtils final class ChainModelMapper { + enum MapperError: Error { + case missingEcosystem + } + var entityIdentifierFieldName: String { #keyPath(CDChain.chainId) } typealias DataProviderModel = ChainModel @@ -50,6 +54,10 @@ final class ChainModelMapper { priceProvider = PriceProvider(type: type, id: id, precision: Int16(precision)) } + guard let assetType = ChainAssetType(storageValue: entity.type) else { + return nil + } + return AssetModel( id: id, name: name, @@ -65,8 +73,7 @@ final class ChainModelMapper { isNative: entity.isNative, staking: staking, purchaseProviders: purchaseProviders, - type: createChainAssetModelType(from: entity.type), - ethereumType: createEthereumAssetType(from: entity.ethereumType), + assetType: assetType, priceProvider: priceProvider, coingeckoPriceId: entity.priceId ) @@ -106,11 +113,10 @@ final class ChainModelMapper { assetEntity.color = $0.color assetEntity.name = $0.name assetEntity.currencyId = $0.currencyId - assetEntity.type = $0.type?.rawValue + assetEntity.type = $0.assetType.rawValue assetEntity.isUtility = $0.isUtility assetEntity.isNative = $0.isNative assetEntity.staking = $0.staking?.rawValue - assetEntity.ethereumType = $0.ethereumType?.rawValue let priceProviderContext = CDPriceProvider(context: context) priceProviderContext.type = $0.priceProvider?.type.rawValue @@ -388,22 +394,6 @@ final class ChainModelMapper { entity.pricingApiUrl = apis?.pricing?.url } - private func createChainAssetModelType(from rawValue: String?) -> SubstrateAssetType? { - guard let rawValue = rawValue else { - return nil - } - - return SubstrateAssetType(rawValue: rawValue) - } - - private func createEthereumAssetType(from rawValue: String?) -> EthereumAssetType? { - guard let rawValue = rawValue else { - return nil - } - - return EthereumAssetType(rawValue: rawValue) - } - private func updateXcmConfig( in entity: CDChain, from xcmConfig: XcmChain?, @@ -452,6 +442,9 @@ final class ChainModelMapper { extension ChainModelMapper: CoreDataMapperProtocol { func transform(entity: CDChain) throws -> ChainModel { + guard let ecosystemRaw = entity.ecosystem, let ecosystem = Ecosystem(rawValue: ecosystemRaw) else { + throw ChainModelMapper.MapperError.missingEcosystem + } let nodes: [ChainNodeModel] = entity.nodes?.compactMap { anyNode in guard let node = anyNode as? CDChainNode else { return nil @@ -499,6 +492,7 @@ extension ChainModelMapper: CoreDataMapperProtocol { } let chainModel = ChainModel( + ecosystem: ecosystem, rank: rank, disabled: entity.disabled, chainId: entity.chainId!, @@ -540,6 +534,7 @@ extension ChainModelMapper: CoreDataMapperProtocol { if let rank = model.rank { entity.rank = "\(rank)" } + entity.ecosystem = model.ecosystem.rawValue entity.disabled = model.disabled entity.chainId = model.chainId entity.paraId = model.paraId diff --git a/fearless/Common/Storage/EntityToModel/MetaAccountMapper.swift b/fearless/Common/Storage/EntityToModel/MetaAccountMapper.swift deleted file mode 100644 index 2f87233738..0000000000 --- a/fearless/Common/Storage/EntityToModel/MetaAccountMapper.swift +++ /dev/null @@ -1,157 +0,0 @@ -import Foundation -import RobinHood -import CoreData -import SSFAccountManagmentStorage -import SSFModels - -final class MetaAccountMapper { - var entityIdentifierFieldName: String { #keyPath(CDMetaAccount.metaId) } - - typealias DataProviderModel = MetaAccountModel - typealias CoreDataEntity = CDMetaAccount -} - -extension MetaAccountMapper: CoreDataMapperProtocol { - func transform(entity: CoreDataEntity) throws -> DataProviderModel { - let chainAccounts: [ChainAccountModel] = try entity.chainAccounts?.compactMap { entity in - guard let chainAccontEntity = entity as? CDChainAccount else { - return nil - } - - let ethereumBased = chainAccontEntity.ethereumBased - - let accountId = try Data(hexStringSSF: chainAccontEntity.accountId!) - return ChainAccountModel( - chainId: chainAccontEntity.chainId!, - accountId: accountId, - publicKey: chainAccontEntity.publicKey!, - cryptoType: UInt8(bitPattern: Int8(chainAccontEntity.cryptoType)), - ethereumBased: ethereumBased - ) - } ?? [] - - var selectedCurrency: Currency? - if let currency = entity.selectedCurrency, - let id = currency.id, - let symbol = currency.symbol, - let name = currency.name, - let icon = currency.icon { - selectedCurrency = Currency( - id: id, - symbol: symbol, - name: name, - icon: icon, - isSelected: currency.isSelected - ) - } - - let substrateAccountId = try Data(hexStringSSF: entity.substrateAccountId!) - let ethereumAddress = try entity.ethereumAddress.map { try Data(hexStringSSF: $0) } - let assetFilterOptions = entity.assetFilterOptions as? [String] - let assetsVisibility: [AssetVisibility]? = (entity.assetsVisibility?.allObjects as? [CDAssetVisibility])?.compactMap { - guard let assetId = $0.assetId else { - return nil - } - - return AssetVisibility(assetId: assetId, hidden: $0.hidden) - } - var favouriteChainIds: [String] = [] - if let entityFavouriteChainIds = entity.favouriteChainIds { - favouriteChainIds = (entityFavouriteChainIds as? [String]) ?? [] - } - - return DataProviderModel( - metaId: entity.metaId!, - name: entity.name!, - substrateAccountId: substrateAccountId, - substrateCryptoType: UInt8(bitPattern: Int8(entity.substrateCryptoType)), - substratePublicKey: entity.substratePublicKey!, - ethereumAddress: ethereumAddress, - ethereumPublicKey: entity.ethereumPublicKey, - chainAccounts: Set(chainAccounts), - assetKeysOrder: entity.assetKeysOrder as? [String], - canExportEthereumMnemonic: entity.canExportEthereumMnemonic, - unusedChainIds: entity.unusedChainIds as? [String], - selectedCurrency: selectedCurrency ?? Currency.defaultCurrency(), - networkManagmentFilter: entity.networkManagmentFilter, - assetsVisibility: assetsVisibility ?? [], - hasBackup: entity.hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func populate( - entity: CoreDataEntity, - from model: DataProviderModel, - using context: NSManagedObjectContext - ) throws { - entity.metaId = model.metaId - entity.name = model.name - entity.substrateAccountId = model.substrateAccountId.toHex() - entity.substrateCryptoType = Int16(bitPattern: UInt16(model.substrateCryptoType)) - entity.substratePublicKey = model.substratePublicKey - entity.ethereumPublicKey = model.ethereumPublicKey - entity.ethereumAddress = model.ethereumAddress?.toHex() - entity.assetKeysOrder = model.assetKeysOrder as? NSArray - entity.canExportEthereumMnemonic = model.canExportEthereumMnemonic - entity.unusedChainIds = model.unusedChainIds as? NSArray - entity.networkManagmentFilter = model.networkManagmentFilter - entity.hasBackup = model.hasBackup - entity.favouriteChainIds = model.favouriteChainIds as? NSArray - - for assetVisibility in model.assetsVisibility { - var assetVisibilityEntity = entity.assetsVisibility?.first { entity in - (entity as? CDAssetVisibility)?.assetId == assetVisibility.assetId - } as? CDAssetVisibility - - if assetVisibilityEntity == nil { - let newEntity = CDAssetVisibility(context: context) - entity.addToAssetsVisibility(newEntity) - assetVisibilityEntity = newEntity - } - - assetVisibilityEntity?.assetId = assetVisibility.assetId - assetVisibilityEntity?.hidden = assetVisibility.hidden - } - - for chainAccount in model.chainAccounts { - var chainAccountEntity = entity.chainAccounts?.first { - if let entity = $0 as? CDChainAccount, - entity.chainId == chainAccount.chainId { - return true - } else { - return false - } - } as? CDChainAccount - - if chainAccountEntity == nil { - let newEntity = CDChainAccount(context: context) - entity.addToChainAccounts(newEntity) - chainAccountEntity = newEntity - } - - chainAccountEntity?.accountId = chainAccount.accountId.toHex() - chainAccountEntity?.chainId = chainAccount.chainId - chainAccountEntity?.cryptoType = Int16(bitPattern: UInt16(chainAccount.cryptoType)) - chainAccountEntity?.publicKey = chainAccount.publicKey - chainAccountEntity?.ethereumBased = chainAccount.ethereumBased - } - - updatedEntityCurrency(for: entity, from: model, context: context) - } - - private func updatedEntityCurrency( - for entity: CoreDataEntity, - from model: DataProviderModel, - context: NSManagedObjectContext - ) { - let currencyEntity = CDCurrency(context: context) - currencyEntity.id = model.selectedCurrency.id - currencyEntity.name = model.selectedCurrency.name - currencyEntity.symbol = model.selectedCurrency.symbol - currencyEntity.icon = model.selectedCurrency.icon - currencyEntity.isSelected = model.selectedCurrency.isSelected ?? false - - entity.selectedCurrency = currencyEntity - } -} diff --git a/fearless/Common/Storage/Migration/SubstrateStorage/SubstrateStorageVersion.swift b/fearless/Common/Storage/Migration/SubstrateStorage/SubstrateStorageVersion.swift index 6398f184e6..817bfc8d20 100644 --- a/fearless/Common/Storage/Migration/SubstrateStorage/SubstrateStorageVersion.swift +++ b/fearless/Common/Storage/Migration/SubstrateStorage/SubstrateStorageVersion.swift @@ -8,6 +8,7 @@ enum SubstrateStorageVersion: String, CaseIterable { case version5 = "SubstrateDataModel_v5" case version6 = "SubstrateDataModel_v6" case version7 = "SubstrateDataModel_v7" + case version8 = "SubstrateDataModel_v8" static var current: SubstrateStorageVersion { guard let currentVersion = allCases.last else { @@ -32,6 +33,8 @@ enum SubstrateStorageVersion: String, CaseIterable { case .version6: return .version7 case .version7: + return .version8 + case .version8: return nil } } diff --git a/fearless/Common/Storage/Migration/UserStorage/UserStorageVersion.swift b/fearless/Common/Storage/Migration/UserStorage/UserStorageVersion.swift index b1535d2386..55bd17c276 100644 --- a/fearless/Common/Storage/Migration/UserStorage/UserStorageVersion.swift +++ b/fearless/Common/Storage/Migration/UserStorage/UserStorageVersion.swift @@ -13,6 +13,7 @@ enum UserStorageVersion: String, CaseIterable { case version10 = "MultiassetUserDataModel_v9" case version11 = "MultiassetUserDataModel_v10" case version12 = "MultiassetUserDataModel_v11" + case version13 = "MultiassetUserDataModel_v12" static var current: UserStorageVersion { guard let currentVersion = allCases.last else { @@ -47,6 +48,8 @@ enum UserStorageVersion: String, CaseIterable { case .version11: return .version12 case .version12: + return .version13 + case .version13: return nil } } diff --git a/fearless/Common/Storage/SelectedWalletSettings.swift b/fearless/Common/Storage/SelectedWalletSettings.swift index 2c954486ca..e97a5ab8da 100644 --- a/fearless/Common/Storage/SelectedWalletSettings.swift +++ b/fearless/Common/Storage/SelectedWalletSettings.swift @@ -1,5 +1,7 @@ import Foundation import RobinHood +import SSFModels +import SSFAccountManagmentStorage final class SelectedWalletSettings: PersistentValueSettings { static let shared = SelectedWalletSettings( diff --git a/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/.xccurrentversion b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/.xccurrentversion index 708a49b1ec..f929d5f67a 100644 --- a/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/.xccurrentversion +++ b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/.xccurrentversion @@ -3,6 +3,6 @@ _XCCurrentVersionName - SubstrateDataModel_v7.xcdatamodel + SubstrateDataModel_v8.xcdatamodel diff --git a/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents new file mode 100644 index 0000000000..f6fe639c47 --- /dev/null +++ b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fearless/Common/Storage/SubstrateDataStorageFacade.swift b/fearless/Common/Storage/SubstrateDataStorageFacade.swift index fe13c417b4..508cc1a071 100644 --- a/fearless/Common/Storage/SubstrateDataStorageFacade.swift +++ b/fearless/Common/Storage/SubstrateDataStorageFacade.swift @@ -2,7 +2,7 @@ import RobinHood import CoreData enum SubstrateStorageParams { - static let modelVersion: SubstrateStorageVersion = .version7 + static let modelVersion: SubstrateStorageVersion = .version8 static let modelDirectory: String = "SubstrateDataModel.momd" static let databaseName = "SubstrateDataModel.sqlite" diff --git a/fearless/Common/Storage/UserDataStorageFacade.swift b/fearless/Common/Storage/UserDataStorageFacade.swift index 877361bfaa..5e26125a52 100644 --- a/fearless/Common/Storage/UserDataStorageFacade.swift +++ b/fearless/Common/Storage/UserDataStorageFacade.swift @@ -3,7 +3,7 @@ import RobinHood import CoreData enum UserStorageParams { - static let modelVersion: UserStorageVersion = .version12 + static let modelVersion: UserStorageVersion = .version13 static let modelDirectory: String = "Modules_SSFAccountManagmentStorage.bundle//UserDataModel.momd" static let databaseName = "UserDataModel.sqlite" diff --git a/fearless/Common/Substrate/CallFactory/SubstrateCallFactoryDefault.swift b/fearless/Common/Substrate/CallFactory/SubstrateCallFactoryDefault.swift index 111f9ebafc..cce48320bd 100644 --- a/fearless/Common/Substrate/CallFactory/SubstrateCallFactoryDefault.swift +++ b/fearless/Common/Substrate/CallFactory/SubstrateCallFactoryDefault.swift @@ -4,6 +4,7 @@ import IrohaCrypto import BigInt import SSFModels import SSFRuntimeCodingService +import SSFCrypto enum SubstrateCallFactoryError: Error { case metadataUnavailable @@ -116,10 +117,11 @@ class SubstrateCallFactoryDefault: SubstrateCallFactoryProtocol { func poolNominate( poolId: UInt32, - targets: [SelectedValidatorInfo] + targets: [SelectedValidatorInfo], + chainFormat: ChainFormat ) throws -> any RuntimeCallable { let addresses: [AccountId] = try targets.map { info in - try info.address.toAccountId() + try info.address.toAccountId(using: chainFormat) } let args = PoolNominateCall(pool_id: "\(poolId)", validators: addresses) @@ -146,7 +148,7 @@ class SubstrateCallFactoryDefault: SubstrateCallFactoryProtocol { amount: BigUInt, chainAsset: ChainAsset ) -> any RuntimeCallable { - switch chainAsset.chainAssetType { + switch chainAsset.chainAssetType.substrateAssetType { case .normal, .none: if chainAsset.chain.isSora { return ormlAssetTransfer( diff --git a/fearless/Common/Substrate/CallFactory/SubstrateCallFactoryProtocol.swift b/fearless/Common/Substrate/CallFactory/SubstrateCallFactoryProtocol.swift index 7fb5de179d..06e47c63f5 100644 --- a/fearless/Common/Substrate/CallFactory/SubstrateCallFactoryProtocol.swift +++ b/fearless/Common/Substrate/CallFactory/SubstrateCallFactoryProtocol.swift @@ -27,7 +27,8 @@ protocol SubstrateCallFactoryProtocol { func nominate(targets: [SelectedValidatorInfo], chainAsset: ChainAsset) throws -> any RuntimeCallable func poolNominate( poolId: UInt32, - targets: [SelectedValidatorInfo] + targets: [SelectedValidatorInfo], + chainFormat: ChainFormat ) throws -> any RuntimeCallable func payout(validatorId: Data, era: EraIndex) throws -> any RuntimeCallable func setPayee(for destination: RewardDestinationArg) -> any RuntimeCallable diff --git a/fearless/Common/Substrate/Types/AccountInfo.swift b/fearless/Common/Substrate/Types/AccountInfo.swift index c122bd0b0f..1b010825bf 100644 --- a/fearless/Common/Substrate/Types/AccountInfo.swift +++ b/fearless/Common/Substrate/Types/AccountInfo.swift @@ -17,11 +17,11 @@ struct AccountInfo: Codable, Equatable { @StringCodable var providers: UInt32 let data: AccountData - init(ethBalance: BigUInt) { + init(balance: BigUInt) { nonce = 0 consumers = 0 providers = 0 - data = AccountData(ethBalance: ethBalance) + data = AccountData(ethBalance: balance) } init(nonce: UInt32, consumers: UInt32, providers: UInt32, data: AccountData) { diff --git a/fearless/Common/Substrate/Types/EraRewardPoints.swift b/fearless/Common/Substrate/Types/EraRewardPoints.swift index 18f74c984d..8ce2042dd6 100644 --- a/fearless/Common/Substrate/Types/EraRewardPoints.swift +++ b/fearless/Common/Substrate/Types/EraRewardPoints.swift @@ -1,4 +1,5 @@ import SSFUtils +import IrohaCrypto import Foundation typealias RewardPoint = UInt32 @@ -29,3 +30,13 @@ struct IndividualReward: Decodable { rewardPoint = rewardScaled.value } } + +private extension AccountAddress { + func toAccountId() throws -> AccountId { + if hasPrefix("0x") { + return try AccountId(hexStringSSF: self) + } else { + return try SS58AddressFactory().accountId(from: self) + } + } +} diff --git a/fearless/Common/Validation/Validators/BaseDataValidatorFactory.swift b/fearless/Common/Validation/Validators/BaseDataValidatorFactory.swift index 175cd7d01d..15d13ef300 100644 --- a/fearless/Common/Validation/Validators/BaseDataValidatorFactory.swift +++ b/fearless/Common/Validation/Validators/BaseDataValidatorFactory.swift @@ -135,7 +135,7 @@ extension BaseDataValidatingFactoryProtocol { return true } - if case .ormlChain = chainAsset.chainAssetType { + if case .ormlChain = chainAsset.chainAssetType.substrateAssetType { return true } diff --git a/fearless/Common/View/SearchTriangularedView.swift b/fearless/Common/View/SearchTriangularedView.swift index d6e6cb4da9..341ea05be4 100644 --- a/fearless/Common/View/SearchTriangularedView.swift +++ b/fearless/Common/View/SearchTriangularedView.swift @@ -11,7 +11,17 @@ final class SearchTriangularedView: UIView { static let pasteButtonSize: CGFloat = 76 } - var isValid = false + var isValid: Bool? = false { + didSet { + guard let isValid else { + backgroundView.set(highlighted: false, animated: true) + return + } + let color = isValid ? .clear : R.color.colorRed()! + backgroundView.highlightedStrokeColor = color + backgroundView.set(highlighted: !isValid, animated: true) + } + } var onPasteTapped: (() -> Void)? private let withPasteButton: Bool @@ -27,7 +37,6 @@ final class SearchTriangularedView: UIView { view.fillColor = R.color.colorSemiBlack()! view.highlightedFillColor = R.color.colorSemiBlack()! view.strokeColor = R.color.colorWhite8()! - view.highlightedStrokeColor = R.color.colorPink()! view.strokeWidth = 0.5 view.shadowOpacity = 0 return view diff --git a/fearless/Common/View/SymbolView.swift b/fearless/Common/View/SymbolView.swift index 6101c1b923..49b2cc3b63 100644 --- a/fearless/Common/View/SymbolView.swift +++ b/fearless/Common/View/SymbolView.swift @@ -2,7 +2,7 @@ import Foundation import UIKit struct SymbolViewModel { - let symbolViewModel: RemoteImageViewModel? + let iconViewModel: RemoteImageViewModel? let shadowColor: CGColor? } @@ -33,7 +33,7 @@ final class SymbolView: UIView { } func bind(viewModel: SymbolViewModel) { - viewModel.symbolViewModel?.loadImage( + viewModel.iconViewModel?.loadImage( on: imageView, targetSize: Constants.imageViewSize, animated: true diff --git a/fearless/CoreLayer/CoreComponents/Repository/EthereumBalanceRepositoryCacheWrapper.swift b/fearless/CoreLayer/CoreComponents/Repository/BalanceRepositoryCacheWrapper.swift similarity index 59% rename from fearless/CoreLayer/CoreComponents/Repository/EthereumBalanceRepositoryCacheWrapper.swift rename to fearless/CoreLayer/CoreComponents/Repository/BalanceRepositoryCacheWrapper.swift index b8d406d263..8329635016 100644 --- a/fearless/CoreLayer/CoreComponents/Repository/EthereumBalanceRepositoryCacheWrapper.swift +++ b/fearless/CoreLayer/CoreComponents/Repository/BalanceRepositoryCacheWrapper.swift @@ -6,15 +6,19 @@ protocol RepositoryCacheWrapper: AnyObject { associatedtype T: Codable, Equatable func save(data: T?, identifier: String) throws + func save(map: [String: T?]) throws } -final class EthereumBalanceRepositoryCacheWrapper: RepositoryCacheWrapper { +final class BalanceRepositoryCacheWrapper: RepositoryCacheWrapper { typealias T = AccountInfo private let logger: LoggerProtocol private let repository: AnyDataProviderRepository private let operationManager: OperationManagerProtocol + private lazy var encoder = JSONEncoder() + private lazy var decoder = JSONDecoder() + private var cache: [String: T?] = [:] private let lock = ReaderWriterLock() @@ -35,19 +39,33 @@ final class EthereumBalanceRepositoryCacheWrapper: RepositoryCacheWrapper { } } - let encoded = try JSONEncoder().encode(data) + let encoded = try encoder.encode(data) let storageWrapper = AccountInfoStorageWrapper(identifier: identifier, data: encoded) + save([storageWrapper]) + } - let operation = repository.saveOperation { - [storageWrapper] - } _: { - [] + func save(map: [String: T?]) throws { + let wrappers = try map.map { identifier, data in + let encoded = try JSONEncoder().encode(data) + let storageWrapper = AccountInfoStorageWrapper(identifier: identifier, data: encoded) + return storageWrapper } + save(wrappers) + } + + private func save(_ wrappers: [AccountInfoStorageWrapper]) { + let operation = repository.saveOperation { + wrappers + } _: { [] } + operation.completionBlock = { [weak self] in self?.lock.exclusivelyWrite { - self?.cache[identifier] = data + wrappers.forEach { wrapper in + let data = try? self?.decoder.decode(T.self, from: wrapper.data) + self?.cache[wrapper.identifier] = data + } } } diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/EtherscanHistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/EtherscanHistoryOperationFactory.swift index 529a6b914d..ca6855ed8e 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/EtherscanHistoryOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/EtherscanHistoryOperationFactory.swift @@ -12,7 +12,7 @@ final class EtherscanHistoryOperationFactory { url: URL, chainAsset: ChainAsset ) -> BaseOperation { - let action: String = chainAsset.asset.ethereumType == .normal ? "txlist" : "tokentx" + let action: String = chainAsset.asset.assetType.ethereumAssetType == .normal ? "txlist" : "tokentx" var urlComponents = URLComponents(string: url.absoluteString) var queryItems = [ URLQueryItem(name: "module", value: "account"), @@ -75,7 +75,7 @@ final class EtherscanHistoryOperationFactory { let remoteTransactions = try remoteOperation.extractNoCancellableResultData().result let transactions = remoteTransactions? - .filter { asset.ethereumType == .normal ? true : $0.contractAddress?.lowercased() == asset.id.lowercased() } + .filter { asset.assetType.ethereumAssetType == .normal ? true : $0.contractAddress?.lowercased() == asset.id.lowercased() } .sorted(by: { $0.timestampInSeconds > $1.timestampInSeconds }) .compactMap { AssetTransactionData.createTransaction(from: $0, address: address, chain: chain, asset: asset) diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/HistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/HistoryOperationFactory.swift index b9f03cfc34..92d6c9000b 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/HistoryOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/HistoryOperationFactory.swift @@ -32,6 +32,8 @@ final class HistoryOperationFactoriesAssembly { return ReefSubsquidHistoryOperationFactory(txStorage: txStorage) case .zeta: return ZetaHistoryOperationFactory() + case .ton: + return TonHistoryOperationFactory() case .none: return nil } diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/OklinkHistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/OklinkHistoryOperationFactory.swift index 82c6c8ec82..0a21d8592d 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/OklinkHistoryOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/OklinkHistoryOperationFactory.swift @@ -17,7 +17,7 @@ final class OklinkHistoryOperationFactory { queryItems?.append(URLQueryItem(name: "address", value: address)) queryItems?.append(URLQueryItem(name: "symbol", value: chainAsset.asset.symbol)) - switch chainAsset.asset.ethereumType { + switch chainAsset.asset.assetType.ethereumAssetType { case .erc20: queryItems?.append(URLQueryItem(name: "protocolType", value: "token_20")) case .bep20, .normal, .none: @@ -83,7 +83,7 @@ final class OklinkHistoryOperationFactory { let remoteTransactions = try remoteOperation.extractNoCancellableResultData().data.first?.transactionLists let transactions = remoteTransactions? - .filter { asset.ethereumType == .normal ? true : $0.tokenContractAddress.lowercased() == asset.id.lowercased() } + .filter { asset.assetType.ethereumAssetType == .normal ? true : $0.tokenContractAddress.lowercased() == asset.id.lowercased() } .sorted(by: { $0.transactionTime > $1.transactionTime }) .compactMap { AssetTransactionData.createTransaction(from: $0, address: address, chain: chain, asset: asset) diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SubqueryHistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SubqueryHistoryOperationFactory.swift index f21954ff50..fd5bf18616 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SubqueryHistoryOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SubqueryHistoryOperationFactory.swift @@ -212,15 +212,15 @@ class SubqueryHistoryOperationFactory { assetId = extrinsic.assetId } - if chainAsset.chainAssetType != .normal, assetId == nil { + if chainAsset.chainAssetType.substrateAssetType != .normal, assetId == nil { return false } - if chainAsset.chainAssetType == .normal, assetId != nil { + if chainAsset.chainAssetType.substrateAssetType == .normal, assetId != nil { return false } - if chainAsset.chainAssetType == .normal, assetId == nil { + if chainAsset.chainAssetType.substrateAssetType == .normal, assetId == nil { return true } diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/TonHistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/TonHistoryOperationFactory.swift new file mode 100644 index 0000000000..a02919c673 --- /dev/null +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/TonHistoryOperationFactory.swift @@ -0,0 +1,188 @@ +import Foundation +import SSFChainConnection +import RobinHood +import SSFModels +import BigInt +import TonAPI +import TonSwift + +final class TonHistoryOperationFactory { + private lazy var tonAPIClient: TonAPI.Client? = { + try? ChainRegistryFacade.sharedRegistry.getTonApiAssembly().tonAPIClient() + }() + + private func createOperation( + address: String, + chainAsset: ChainAsset, + before_lt: Int64? + ) -> BaseOperation { + AwaitOperation { [weak self] in + guard let self else { + throw ConvenienceError(error: "Memory error") + } + let accountId = try TonSwift.Address.parse(address).toRaw() + switch chainAsset.asset.assetType.tonAssetType { + case .normal: + let events = try await self.fetchAccountEvents(address: accountId, before_lt: before_lt) + return events + case .jetton: + guard let jettonAddress = chainAsset.asset.currencyId else { + throw ConvenienceError(error: "Missing jetton address") + } + let events = try await self.fetchJettonsHistory( + accountAddress: accountId, + jettonAddress: jettonAddress, + before_lt: before_lt + ) + return events + case .none: + throw ConvenienceError(error: "Missing asset type") + } + } + } + + private func fetchAccountEvents( + address: String, + before_lt: Int64? + ) async throws -> TonAccountEvents { + guard let tonAPIClient else { + throw ConvenienceError(error: "Client not initialized") + } + let response = try await tonAPIClient.getAccountEvents( + path: .init(account_id: address), + query: .init( + before_lt: before_lt, + limit: 25, + start_date: nil, + end_date: nil + ) + ) + let entity = try response.ok.body.json + let events: [TonAccountEvent] = entity.events.compactMap { + guard let activityEvent = try? TonAccountEvent(accountEvent: $0) else { return nil } + return activityEvent + } + let remoteEvents = TonAccountEvents( + address: try TonSwift.Address.parse(address), + events: events, + startFrom: before_lt ?? 0, + nextFrom: entity.next_from + ) + return remoteEvents +// let tonEvents = filterTonEvents(events: remoteEvents) +// return tonEvents + } + + private func fetchJettonsHistory( + accountAddress: String, + jettonAddress: String, + before_lt: Int64? + ) async throws -> TonAccountEvents { + guard let tonAPIClient else { + throw ConvenienceError(error: "Client not initialized") + } + let response = try await tonAPIClient.getAccountJettonHistoryByID( + path: .init( + account_id: accountAddress, + jetton_id: jettonAddress + ), + query: .init( + before_lt: before_lt, + limit: 25, + start_date: nil, + end_date: nil + ) + ) + let entity = try response.ok.body.json + let events: [TonAccountEvent] = entity.events.compactMap { + guard let activityEvent = try? TonAccountEvent(accountEvent: $0) else { return nil } + return activityEvent + } + return TonAccountEvents( + address: try TonSwift.Address.parse(accountAddress), + events: events, + startFrom: before_lt ?? 0, + nextFrom: entity.next_from + ) + } + +// private func filterTonEvents(events: TonAccountEvents) -> TonAccountEvents { +// let filteredEvents = events.events.compactMap { event -> TonAccountEvent? in +// let filteredActions = event.actions.compactMap { action -> AccountEventAction? in +// guard case .tonTransfer = action.type else { return nil } +// return action +// } +// guard !filteredActions.isEmpty else { return nil } +// return TonAccountEvent( +// eventId: event.eventId, +// timestamp: event.timestamp, +// account: event.account, +// isScam: event.isScam, +// isInProgress: event.isInProgress, +// fee: event.fee, +// actions: filteredActions +// ) +// } +// return filteredEvents +// } + + private func createMapOperation( + dependingOn remoteOperation: BaseOperation, + address: String, + asset: AssetModel, + chain: ChainModel + ) -> BaseOperation { + ClosureOperation { + let events = try remoteOperation.extractNoCancellableResultData().events + + let transactions = events + .compactMap { event in + event.actions.compactMap { + AssetTransactionData.createTransaction( + event: event, + action: $0, + address: address, + chain: chain, + asset: asset + ) + } + } + .reduce([], +) + .sorted(by: { $0.timestamp > $1.timestamp }) + + let context = try remoteOperation.extractNoCancellableResultData().toContext() + return AssetTransactionPageData(transactions: transactions, context: context) + } + } +} + +extension TonHistoryOperationFactory: HistoryOperationFactoryProtocol { + func fetchTransactionHistoryOperation( + asset: AssetModel, + chain: ChainModel, + address: String, + filters _: [WalletTransactionHistoryFilter], + pagination: Pagination + ) -> CompoundOperationWrapper { + var before_lt: Int64? + if let before = pagination.context?["nextFrom"] { + before_lt = Int64(before) + } + let remoteOperation = createOperation( + address: address, + chainAsset: ChainAsset(chain: chain, asset: asset), + before_lt: before_lt + ) + + let mapOperation = createMapOperation( + dependingOn: remoteOperation, + address: address, + asset: asset, + chain: chain + ) + + mapOperation.addDependency(remoteOperation) + + return CompoundOperationWrapper(targetOperation: mapOperation, dependencies: [remoteOperation]) + } +} diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/ZetaHistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/ZetaHistoryOperationFactory.swift index 8421f12f6d..d8b58487a8 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/ZetaHistoryOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/ZetaHistoryOperationFactory.swift @@ -16,7 +16,7 @@ final class ZetaHistoryOperationFactory { let requestFactory = BlockNetworkRequestFactory { var url = url.appendingPathComponent(address) - if case .erc20 = chainAsset.asset.ethereumType { + if case .erc20 = chainAsset.asset.assetType.ethereumAssetType { let contract = chainAsset.asset.id url = url.appendingPathComponent("token-transfers") diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Staking/ParachainHistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Staking/ParachainHistoryOperationFactory.swift index cc6f075102..dff5dc0cb0 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Staking/ParachainHistoryOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Staking/ParachainHistoryOperationFactory.swift @@ -22,7 +22,7 @@ enum ParachainHistoryOperationFactoryAssembly { return ParachainSubsquidHistoryOperationFactory(url: blockExplorer?.url) case .sora: return ParachainSubsquidHistoryOperationFactory(url: blockExplorer?.url) - case .alchemy, .etherscan, .oklink, .reef, .zeta: + case .alchemy, .etherscan, .oklink, .reef, .zeta, .ton: return nil } } diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/TonModels.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/TonModels.swift new file mode 100644 index 0000000000..2e3d6bee89 --- /dev/null +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/TonModels.swift @@ -0,0 +1,669 @@ +import Foundation +import TonSwift +import TonAPI +import BigInt +import SSFModels + +struct TonAccountEvents: Codable { + let address: TonSwift.Address + let events: [TonAccountEvent] + let startFrom: Int64 + let nextFrom: Int64 + + func toContext() -> [String: String]? { + var context: [String: String] = [:] + context["startFrom"] = String(startFrom) + context["nextFrom"] = String(nextFrom) + return context + } +} + +public struct TonAccountEvent: Codable { + public let eventId: String + public let timestamp: TimeInterval + public let account: WalletAccount + public let isScam: Bool + public let isInProgress: Bool + public let fee: Int64 + public let actions: [AccountEventAction] +} + +public struct WalletAccount: Equatable, Codable { + public let address: TonSwift.Address + public let name: String? + public let isScam: Bool + public let isWallet: Bool +} + +public struct AccountEventAction: Codable { + let type: ActionType + let status: AccountEventStatus + let preview: SimplePreview + + struct SimplePreview: Codable { + let name: String + let description: String + let image: URL? + let value: String? + let valueImage: URL? + let accounts: [WalletAccount] + } + + enum ActionType: Codable { + case tonTransfer(TonTransfer) + case contractDeploy(ContractDeploy) + case jettonTransfer(JettonTransfer) + case nftItemTransfer(NFTItemTransfer) + case subscribe(Subscription) + case unsubscribe(Unsubscription) + case auctionBid(AuctionBid) + case nftPurchase(NFTPurchase) + case depositStake(DepositStake) + case withdrawStake(WithdrawStake) + case withdrawStakeRequest(WithdrawStakeRequest) + case jettonSwap(JettonSwap) + case jettonMint(JettonMint) + case jettonBurn(JettonBurn) + case smartContractExec(SmartContractExec) + case domainRenew(DomainRenew) + case unknown + } + + struct TonTransfer: Codable { + let sender: WalletAccount + let recipient: WalletAccount + let amount: Int64 + let comment: String? + } + + struct ContractDeploy: Codable { + let address: TonSwift.Address + } + + struct JettonTransfer: Codable { + let sender: WalletAccount? + let recipient: WalletAccount? + let senderAddress: TonSwift.Address + let recipientAddress: TonSwift.Address + let amount: BigUInt + let jettonInfo: TonJettonInfo + let comment: String? + } + + struct NFTItemTransfer: Codable { + let sender: WalletAccount? + let recipient: WalletAccount? + let nftAddress: TonSwift.Address + let comment: String? + let payload: String? + } + + struct Subscription: Codable { + let subscriber: WalletAccount + let subscriptionAddress: TonSwift.Address + let beneficiary: WalletAccount + let amount: Int64 + let isInitial: Bool + } + + struct Unsubscription: Codable { + let subscriber: WalletAccount + let subscriptionAddress: TonSwift.Address + let beneficiary: WalletAccount + } + + struct AuctionBid: Codable { + let auctionType: String + let price: Price + let nft: TonNFT? + let bidder: WalletAccount + let auction: WalletAccount + } + + struct NFTPurchase: Codable { + let auctionType: String + let nft: TonNFT + let seller: WalletAccount + let buyer: WalletAccount + let price: BigUInt + } + + struct DepositStake: Codable { + let amount: Int64 + let staker: WalletAccount + let pool: WalletAccount + } + + struct WithdrawStake: Codable { + let amount: Int64 + let staker: WalletAccount + let pool: WalletAccount + } + + struct WithdrawStakeRequest: Codable { + let amount: Int64? + let staker: WalletAccount + let pool: WalletAccount + } + + struct RecoverStake: Codable { + let amount: Int64 + let staker: WalletAccount + } + + struct JettonSwap: Codable { + let dex: String + let amountIn: BigUInt + let amountOut: BigUInt + let tonIn: Int64? + let tonOut: Int64? + let user: WalletAccount + let router: WalletAccount + let jettonInfoIn: TonJettonInfo? + let jettonInfoOut: TonJettonInfo? + } + + struct JettonMint: Codable { + let recipient: WalletAccount + let recipientsWallet: TonSwift.Address + let amount: BigUInt + let jettonInfo: TonJettonInfo + } + + struct JettonBurn: Codable { + let sender: WalletAccount + let senderWallet: TonSwift.Address + let amount: BigUInt + let jettonInfo: TonJettonInfo + } + + struct SmartContractExec: Codable { + let executor: WalletAccount + let contract: WalletAccount + let tonAttached: Int64 + let operation: String + let payload: String? + } + + struct DomainRenew: Codable { + let domain: String + let contractAddress: String + let renewer: WalletAccount + } + + struct Price: Codable { + let amount: BigUInt + let tokenName: String + } +} + +enum AccountEventStatus: Codable { + case ok + case failed + case unknown(String) + + var rawValue: String? { + switch self { + case .ok: return nil + case .failed: return "Failed" + case let .unknown(value): + return value + } + } + + init(rawValue: String) { + switch rawValue { + case "ok": self = .ok + case "failed": self = .failed + default: self = .unknown(rawValue) + } + } +} + +public struct TonNFT: Codable { + public let address: TonSwift.Address + public let owner: WalletAccount? + public let name: String? + public let imageURL: URL? + public let preview: Preview + public let description: String? + public let attributes: [Attribute] + public let collection: TonNFTCollection? + public let dns: String? + public let sale: Sale? + public let isHidden: Bool + + public struct Marketplace { + public let name: String + public let url: URL? + } + + public struct Attribute: Codable { + public let key: String + public let value: String + } + + public enum Trust { + public struct Approval { + let name: String + } + + case approvedBy([Approval]) + } + + public struct Preview: Codable { + public let size5: URL? + public let size100: URL? + public let size500: URL? + public let size1500: URL? + } + + public struct Sale: Codable { + public let address: TonSwift.Address + public let market: WalletAccount + public let owner: WalletAccount? + } +} + +public struct TonNFTCollection: Codable { + public let address: TonSwift.Address + public let name: String? + public let description: String? +} + +// MARK: - Inits + +extension TonAccountEvent { + init(accountEvent: Components.Schemas.AccountEvent) throws { + eventId = accountEvent.event_id + timestamp = TimeInterval(accountEvent.timestamp) + account = try WalletAccount(accountAddress: accountEvent.account) + isScam = accountEvent.is_scam + isInProgress = accountEvent.in_progress + fee = accountEvent.extra + actions = accountEvent.actions.compactMap { action -> AccountEventAction? in + do { + let actionType: AccountEventAction.ActionType + if let tonTransfer = action.TonTransfer { + actionType = .tonTransfer(try .init(tonTransfer: tonTransfer)) + } else if let jettonTransfer = action.JettonTransfer { + actionType = .jettonTransfer(try .init(jettonTransfer: jettonTransfer)) + } else if let contractDeploy = action.ContractDeploy { + actionType = .contractDeploy(try .init(contractDeploy: contractDeploy)) + } else if let nftItemTransfer = action.NftItemTransfer { + actionType = .nftItemTransfer(try .init(nftItemTransfer: nftItemTransfer)) + } else if let subscribe = action.Subscribe { + actionType = .subscribe(try .init(subscription: subscribe)) + } else if let unsubscribe = action.UnSubscribe { + actionType = .unsubscribe(try .init(unsubscription: unsubscribe)) + } else if let auctionBid = action.AuctionBid { + actionType = .auctionBid(try .init(auctionBid: auctionBid)) + } else if let nftPurchase = action.NftPurchase { + actionType = .nftPurchase(try .init(nftPurchase: nftPurchase)) + } else if let depositStake = action.DepositStake { + actionType = .depositStake(try .init(depositStake: depositStake)) + } else if let withdrawStake = action.WithdrawStake { + actionType = .withdrawStake(try .init(withdrawStake: withdrawStake)) + } else if let withdrawStakeRequest = action.WithdrawStakeRequest { + actionType = .withdrawStakeRequest(try .init(withdrawStakeRequest: withdrawStakeRequest)) + } else if let jettonSwap = action.JettonSwap { + actionType = .jettonSwap(try .init(jettonSwap: jettonSwap)) + } else if let jettonMint = action.JettonMint { + actionType = .jettonMint(try .init(jettonMint: jettonMint)) + } else if let jettonBurn = action.JettonBurn { + actionType = .jettonBurn(try .init(jettonBurn: jettonBurn)) + } else if let smartContractExec = action.SmartContractExec { + actionType = .smartContractExec(try .init(smartContractExec: smartContractExec)) + } else if let domainRenew = action.DomainRenew { + actionType = .domainRenew(try .init(domainRenew: domainRenew)) + } else { + actionType = .unknown + } + + let status = AccountEventStatus(rawValue: action.status.rawValue) + return AccountEventAction(type: actionType, status: status, preview: try .init(simplePreview: action.simple_preview)) + } catch { + return nil + } + } + } +} + +extension WalletAccount { + init(accountAddress: Components.Schemas.AccountAddress) throws { + address = try TonSwift.Address.parse(accountAddress.address) + name = accountAddress.name + isScam = accountAddress.is_scam + isWallet = accountAddress.is_wallet + } +} + +extension AccountEventAction.SimplePreview { + init(simplePreview: Components.Schemas.ActionSimplePreview) throws { + name = simplePreview.name + description = simplePreview.description + value = simplePreview.value + + var image: URL? + if let actionImage = simplePreview.action_image { + image = URL(string: actionImage) + } + self.image = image + + var valueImage: URL? + if let valueImageString = simplePreview.value_image { + valueImage = URL(string: valueImageString) + } + self.valueImage = valueImage + + accounts = simplePreview.accounts.compactMap { account in + guard let walletAccount = try? WalletAccount(accountAddress: account) else { return nil } + return walletAccount + } + } +} + +extension AccountEventAction.TonTransfer { + init(tonTransfer: Components.Schemas.TonTransferAction) throws { + sender = try WalletAccount(accountAddress: tonTransfer.sender) + recipient = try WalletAccount(accountAddress: tonTransfer.recipient) + amount = tonTransfer.amount + comment = tonTransfer.comment + } +} + +extension AccountEventAction.JettonTransfer { + init(jettonTransfer: Components.Schemas.JettonTransferAction) throws { + var sender: WalletAccount? + var recipient: WalletAccount? + if let senderAccountAddress = jettonTransfer.sender { + sender = try? WalletAccount(accountAddress: senderAccountAddress) + } + if let recipientAccountAddress = jettonTransfer.recipient { + recipient = try? WalletAccount(accountAddress: recipientAccountAddress) + } + + self.sender = sender + self.recipient = recipient + senderAddress = try TonSwift.Address.parse(jettonTransfer.senders_wallet) + recipientAddress = try TonSwift.Address.parse(jettonTransfer.recipients_wallet) + amount = BigUInt(stringLiteral: jettonTransfer.amount) + jettonInfo = try TonJettonInfo(jettonPreview: jettonTransfer.jetton) + comment = jettonTransfer.comment + } +} + +extension AccountEventAction.ContractDeploy { + init(contractDeploy: Components.Schemas.ContractDeployAction) throws { + address = try TonSwift.Address.parse(contractDeploy.address) + } +} + +extension AccountEventAction.NFTItemTransfer { + init(nftItemTransfer: Components.Schemas.NftItemTransferAction) throws { + var sender: WalletAccount? + var recipient: WalletAccount? + if let senderAccountAddress = nftItemTransfer.sender { + sender = try? WalletAccount(accountAddress: senderAccountAddress) + } + if let recipientAccountAddress = nftItemTransfer.recipient { + recipient = try? WalletAccount(accountAddress: recipientAccountAddress) + } + + self.sender = sender + self.recipient = recipient + nftAddress = try TonSwift.Address.parse(nftItemTransfer.nft) + comment = nftItemTransfer.comment + payload = nftItemTransfer.payload + } +} + +extension AccountEventAction.Subscription { + init(subscription: Components.Schemas.SubscriptionAction) throws { + subscriber = try WalletAccount(accountAddress: subscription.subscriber) + subscriptionAddress = try TonSwift.Address.parse(subscription.subscription) + beneficiary = try WalletAccount(accountAddress: subscription.beneficiary) + amount = subscription.amount + isInitial = subscription.initial + } +} + +extension AccountEventAction.Unsubscription { + init(unsubscription: Components.Schemas.UnSubscriptionAction) throws { + subscriber = try WalletAccount(accountAddress: unsubscription.subscriber) + subscriptionAddress = try TonSwift.Address.parse(unsubscription.subscription) + beneficiary = try WalletAccount(accountAddress: unsubscription.beneficiary) + } +} + +extension AccountEventAction.AuctionBid { + init(auctionBid: Components.Schemas.AuctionBidAction) throws { + auctionType = auctionBid.auction_type + price = AccountEventAction.Price(price: auctionBid.amount) + bidder = try WalletAccount(accountAddress: auctionBid.bidder) + auction = try WalletAccount(accountAddress: auctionBid.auction) + + var nft: TonNFT? + if let auctionBidNft = auctionBid.nft { + nft = try TonNFT(nftItem: auctionBidNft) + } + self.nft = nft + } +} + +extension AccountEventAction.NFTPurchase { + init(nftPurchase: Components.Schemas.NftPurchaseAction) throws { + auctionType = nftPurchase.auction_type + nft = try TonNFT(nftItem: nftPurchase.nft) + seller = try WalletAccount(accountAddress: nftPurchase.seller) + buyer = try WalletAccount(accountAddress: nftPurchase.buyer) + price = BigUInt(stringLiteral: nftPurchase.amount.value) + } +} + +extension AccountEventAction.DepositStake { + init(depositStake: Components.Schemas.DepositStakeAction) throws { + amount = depositStake.amount + staker = try WalletAccount(accountAddress: depositStake.staker) + pool = try WalletAccount(accountAddress: depositStake.pool) + } +} + +extension AccountEventAction.WithdrawStake { + init(withdrawStake: Components.Schemas.WithdrawStakeAction) throws { + amount = withdrawStake.amount + staker = try WalletAccount(accountAddress: withdrawStake.staker) + pool = try WalletAccount(accountAddress: withdrawStake.pool) + } +} + +extension AccountEventAction.WithdrawStakeRequest { + init(withdrawStakeRequest: Components.Schemas.WithdrawStakeRequestAction) throws { + amount = withdrawStakeRequest.amount + staker = try WalletAccount(accountAddress: withdrawStakeRequest.staker) + pool = try WalletAccount(accountAddress: withdrawStakeRequest.pool) + } +} + +extension AccountEventAction.RecoverStake { + init(recoverStake: Components.Schemas.ElectionsRecoverStakeAction) throws { + amount = recoverStake.amount + staker = try WalletAccount(accountAddress: recoverStake.staker) + } +} + +extension AccountEventAction.JettonSwap { + init(jettonSwap: Components.Schemas.JettonSwapAction) throws { + dex = jettonSwap.dex + amountIn = BigUInt(stringLiteral: jettonSwap.amount_in) + amountOut = BigUInt(stringLiteral: jettonSwap.amount_out) + tonIn = jettonSwap.ton_in + tonOut = jettonSwap.ton_out + user = try WalletAccount(accountAddress: jettonSwap.user_wallet) + router = try WalletAccount(accountAddress: jettonSwap.router) + if let jettonMasterIn = jettonSwap.jetton_master_in { + jettonInfoIn = try TonJettonInfo(jettonPreview: jettonMasterIn) + } else { + jettonInfoIn = nil + } + if let jettonMasterOut = jettonSwap.jetton_master_out { + jettonInfoOut = try TonJettonInfo(jettonPreview: jettonMasterOut) + } else { + jettonInfoOut = nil + } + } +} + +extension AccountEventAction.JettonMint { + init(jettonMint: Components.Schemas.JettonMintAction) throws { + recipient = try WalletAccount(accountAddress: jettonMint.recipient) + recipientsWallet = try TonSwift.Address.parse(jettonMint.recipients_wallet) + amount = BigUInt(stringLiteral: jettonMint.amount) + jettonInfo = try TonJettonInfo(jettonPreview: jettonMint.jetton) + } +} + +extension AccountEventAction.JettonBurn { + init(jettonBurn: Components.Schemas.JettonBurnAction) throws { + sender = try WalletAccount(accountAddress: jettonBurn.sender) + senderWallet = try TonSwift.Address.parse(jettonBurn.senders_wallet) + amount = BigUInt(stringLiteral: jettonBurn.amount) + jettonInfo = try TonJettonInfo(jettonPreview: jettonBurn.jetton) + } +} + +extension AccountEventAction.SmartContractExec { + init(smartContractExec: Components.Schemas.SmartContractAction) throws { + executor = try WalletAccount(accountAddress: smartContractExec.executor) + contract = try WalletAccount(accountAddress: smartContractExec.contract) + tonAttached = smartContractExec.ton_attached + operation = smartContractExec.operation + payload = smartContractExec.payload + } +} + +extension AccountEventAction.DomainRenew { + init(domainRenew: Components.Schemas.DomainRenewAction) throws { + domain = domainRenew.domain + contractAddress = domainRenew.contract_address + renewer = try WalletAccount(accountAddress: domainRenew.renewer) + } +} + +extension AccountEventAction.Price { + init(price: Components.Schemas.Price) { + amount = BigUInt(stringLiteral: price.value) + tokenName = price.token_name + } +} + +extension TonNFT { + private enum PreviewSize: String { + case size5 = "5x5" + case size100 = "100x100" + case size500 = "500x500" + case size1500 = "1500x1500" + } + + init(nftItem: Components.Schemas.NftItem) throws { + let address = try TonSwift.Address.parse(nftItem.address) + var owner: WalletAccount? + var name: String? + var imageURL: URL? + var description: String? + var collection: TonNFTCollection? + var isHidden = false + + if let ownerAccountAddress = nftItem.owner, + let ownerWalletAccount = try? WalletAccount(accountAddress: ownerAccountAddress) { + owner = ownerWalletAccount + } + + let metadata = nftItem.metadata.additionalProperties.value as [String: AnyObject] + name = metadata["name"] as? String + imageURL = (metadata["image"] as? String).flatMap { URL(string: $0) } + description = metadata["description"] as? String + isHidden = (metadata["render_type"] as? String) == "hidden" + + var attributes = [Attribute]() + if let attributesValue = (metadata["attributes"] as? [AnyObject]) { + attributes = attributesValue + .compactMap { $0 as? [String: AnyObject] } + .compactMap { attributeObject -> Attribute? in + guard let key = attributeObject["trait_type"] as? String else { return nil } + let attributeValue: String + switch attributeObject["value"] { + case .none: return nil + case let .some(value): + switch value { + case let stringValue as String: + attributeValue = stringValue + case let intValue as Int: + attributeValue = String(intValue) + case let doubleValue as Int: + attributeValue = String(doubleValue) + default: + attributeValue = "-" + } + } + return Attribute(key: key, value: attributeValue) + } + } + + if let nftCollection = nftItem.collection, + let address = try? TonSwift.Address.parse(nftCollection.address) { + collection = TonNFTCollection(address: address, name: nftCollection.name, description: nftCollection.description) + } + + if imageURL == nil, + let previewURLString = nftItem.previews?[2].url, + let previewURL = URL(string: previewURLString) { + imageURL = previewURL + } + + var sale: Sale? + if let nftSale = nftItem.sale { + let address = try TonSwift.Address.parse(nftSale.address) + let market = try WalletAccount(accountAddress: nftSale.market) + var ownerWalletAccount: WalletAccount? + if let nftSaleOwner = nftItem.owner { + ownerWalletAccount = try WalletAccount(accountAddress: nftSaleOwner) + } + sale = Sale(address: address, market: market, owner: ownerWalletAccount) + } + + self.address = address + self.owner = owner + self.name = name + self.imageURL = imageURL + self.description = description + self.attributes = attributes + preview = Self.mapPreviews(nftItem.previews) + self.collection = collection + dns = nftItem.dns + self.sale = sale + self.isHidden = isHidden + } + + private static func mapPreviews(_ previews: [Components.Schemas.ImagePreview]?) -> Preview { + var size5: URL? + var size100: URL? + var size500: URL? + var size1500: URL? + + previews?.forEach { preview in + guard let previewSize = PreviewSize(rawValue: preview.resolution) else { return } + switch previewSize { + case .size5: + size5 = URL(string: preview.url) + case .size100: + size100 = URL(string: preview.url) + case .size500: + size500 = URL(string: preview.url) + case .size1500: + size1500 = URL(string: preview.url) + } + } + return Preview(size5: size5, size100: size100, size500: size500, size1500: size1500) + } +} diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/GiantsquidRewardOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/GiantsquidRewardOperationFactory.swift index adb1804817..4b5af6b804 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/GiantsquidRewardOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/GiantsquidRewardOperationFactory.swift @@ -3,6 +3,7 @@ import RobinHood import SSFUtils import SoraFoundation import SSFModels +import SSFCrypto enum GiantsquidRewardOperationFactoryError: Error { case urlMissing diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/ReefRewardOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/ReefRewardOperationFactory.swift index cb9a2467be..88caffc9ea 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/ReefRewardOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/ReefRewardOperationFactory.swift @@ -3,6 +3,7 @@ import RobinHood import SSFUtils import SoraFoundation import SSFModels +import SSFCrypto enum ReefRewardOperationFactoryError: Error { case urlMissing diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/RewardOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/RewardOperationFactory.swift index cf6439b752..33218a1da8 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/RewardOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/RewardOperationFactory.swift @@ -40,7 +40,7 @@ enum RewardOperationFactory { return SoraRewardOperationFactory(url: blockExplorer?.url, chain: chain) case .reef: return ReefRewardOperationFactory(url: blockExplorer?.url, chain: chain) - case .alchemy, .etherscan, .oklink, .zeta: + case .alchemy, .etherscan, .oklink, .zeta, .ton: return GiantsquidRewardOperationFactory(url: blockExplorer?.url, chain: chain) } } diff --git a/fearless/CoreLayer/TonComponents/TonAccount.swift b/fearless/CoreLayer/TonComponents/TonAccount.swift new file mode 100644 index 0000000000..6221c9a6cb --- /dev/null +++ b/fearless/CoreLayer/TonComponents/TonAccount.swift @@ -0,0 +1,23 @@ +import Foundation +import TonAPI +import TonSwift + +struct TonAccount { + let address: TonSwift.Address + let balance: Int64 + let status: String + let name: String? + let icon: String? + let isSuspended: Bool? + let isWallet: Bool + + init(account: Components.Schemas.Account) throws { + address = try TonSwift.Address.parse(account.address) + balance = account.balance + status = account.status + name = account.name + icon = account.icon + isSuspended = account.is_suspended + isWallet = account.is_wallet + } +} diff --git a/fearless/CoreLayer/TonComponents/TonAddress.swift b/fearless/CoreLayer/TonComponents/TonAddress.swift new file mode 100644 index 0000000000..e5bce80e0c --- /dev/null +++ b/fearless/CoreLayer/TonComponents/TonAddress.swift @@ -0,0 +1,18 @@ +import Foundation +import TonSwift + +extension TonSwift.Address { + static func random() -> TonSwift.Address { + TonSwift.Address.mock(workchain: 0, seed: "testResolvableAddressResolvedCoding") + } + + func asAccountId() throws -> AccountId { + try JSONEncoder().encode(self) + } +} + +extension AccountId { + func asTonAddress() throws -> TonSwift.Address { + try JSONDecoder().decode(TonSwift.Address.self, from: self) + } +} diff --git a/fearless/Modules/AccountConfirm/AccountConfirmInteractor.swift b/fearless/Modules/AccountConfirm/AccountConfirmInteractor.swift index 9914ad7dfe..c423ae53e2 100644 --- a/fearless/Modules/AccountConfirm/AccountConfirmInteractor.swift +++ b/fearless/Modules/AccountConfirm/AccountConfirmInteractor.swift @@ -2,6 +2,7 @@ import UIKit import SoraKeystore import IrohaCrypto import RobinHood +import SSFModels class AccountConfirmInteractor: BaseAccountConfirmInteractor { private(set) var settings: SelectedWalletSettings diff --git a/fearless/Modules/AccountConfirm/BaseAccountConfirmInteractor.swift b/fearless/Modules/AccountConfirm/BaseAccountConfirmInteractor.swift index c6d4c3976a..b234c23fb4 100644 --- a/fearless/Modules/AccountConfirm/BaseAccountConfirmInteractor.swift +++ b/fearless/Modules/AccountConfirm/BaseAccountConfirmInteractor.swift @@ -2,6 +2,7 @@ import UIKit import SoraKeystore import IrohaCrypto import RobinHood +import SSFModels class BaseAccountConfirmInteractor { weak var presenter: AccountConfirmInteractorOutputProtocol! diff --git a/fearless/Modules/AccountCreate/AccountCreatePresenter.swift b/fearless/Modules/AccountCreate/AccountCreatePresenter.swift index 7436a70a3d..224f56079b 100644 --- a/fearless/Modules/AccountCreate/AccountCreatePresenter.swift +++ b/fearless/Modules/AccountCreate/AccountCreatePresenter.swift @@ -267,7 +267,7 @@ extension AccountCreatePresenter: AccountCreatePresenterProtocol { username: usernameSetup.username, derivationPath: model.chain.isEthereumBased ? ethereumDerivationPath : substrateDerivationPath, cryptoType: model.chain.isEthereumBased ? .ecdsa : selectedCryptoType, - isEthereum: model.chain.isEthereumBased, + ecosystem: model.chain.ecosystem, meta: model.meta, chainId: model.chain.chainId ) diff --git a/fearless/Modules/AccountImport/AccountImportInteractor.swift b/fearless/Modules/AccountImport/AccountImportInteractor.swift index 12b63d73dc..2466b83509 100644 --- a/fearless/Modules/AccountImport/AccountImportInteractor.swift +++ b/fearless/Modules/AccountImport/AccountImportInteractor.swift @@ -3,6 +3,7 @@ import IrohaCrypto import SSFUtils import RobinHood import SoraKeystore +import SSFModels final class AccountImportInteractor: BaseAccountImportInteractor { private(set) var settings: SelectedWalletSettings diff --git a/fearless/Modules/AccountImport/BaseAccountImportInteractor.swift b/fearless/Modules/AccountImport/BaseAccountImportInteractor.swift index 70dcce9f0b..d7d02156f2 100644 --- a/fearless/Modules/AccountImport/BaseAccountImportInteractor.swift +++ b/fearless/Modules/AccountImport/BaseAccountImportInteractor.swift @@ -120,7 +120,7 @@ extension BaseAccountImportInteractor: AccountImportInteractorInputProtocol { username: request.username, derivationPath: data.derivationPath, cryptoType: request.cryptoType, - isEthereum: request.chain.isEthereumBased, + ecosystem: request.chain.ecosystem, meta: request.meta, chainId: request.chain.chainId ) @@ -131,7 +131,7 @@ extension BaseAccountImportInteractor: AccountImportInteractorInputProtocol { username: request.username, derivationPath: data.derivationPath, cryptoType: request.cryptoType, - isEthereum: request.chain.isEthereumBased, + ecosystem: request.chain.ecosystem, meta: request.meta, chainId: request.chain.chainId ) @@ -142,7 +142,7 @@ extension BaseAccountImportInteractor: AccountImportInteractorInputProtocol { password: data.password, username: request.username, cryptoType: request.cryptoType, - isEthereum: request.chain.isEthereumBased, + ecosystem: request.chain.ecosystem, meta: request.meta, chainId: request.chain.chainId ) diff --git a/fearless/Modules/AccountImport/Model/AccountImportRequest.swift b/fearless/Modules/AccountImport/Model/AccountImportRequest.swift index 1e74009f6d..6d2d7e5c54 100644 --- a/fearless/Modules/AccountImport/Model/AccountImportRequest.swift +++ b/fearless/Modules/AccountImport/Model/AccountImportRequest.swift @@ -67,7 +67,7 @@ struct ChainAccountImportMnemonicRequest { let username: String let derivationPath: String let cryptoType: CryptoType - let isEthereum: Bool + let ecosystem: Ecosystem let meta: MetaAccountModel let chainId: ChainModel.Id } @@ -77,7 +77,7 @@ struct ChainAccountImportSeedRequest { let username: String let derivationPath: String let cryptoType: CryptoType - let isEthereum: Bool + let ecosystem: Ecosystem let meta: MetaAccountModel let chainId: ChainModel.Id } @@ -87,7 +87,7 @@ struct ChainAccountImportKeystoreRequest { let password: String let username: String let cryptoType: CryptoType - let isEthereum: Bool + let ecosystem: Ecosystem let meta: MetaAccountModel let chainId: ChainModel.Id } diff --git a/fearless/Modules/AddAccount/Interactors/AddAccount+AccountConfirmInteractor.swift b/fearless/Modules/AddAccount/Interactors/AddAccount+AccountConfirmInteractor.swift index 0bb8f1706c..787af58a8c 100644 --- a/fearless/Modules/AddAccount/Interactors/AddAccount+AccountConfirmInteractor.swift +++ b/fearless/Modules/AddAccount/Interactors/AddAccount+AccountConfirmInteractor.swift @@ -1,6 +1,7 @@ import UIKit import SoraKeystore import IrohaCrypto +import SSFModels import RobinHood // TODO: Check how to convert this to chain account import diff --git a/fearless/Modules/AddAccount/Interactors/AddAccount+AccountImportInteractor.swift b/fearless/Modules/AddAccount/Interactors/AddAccount+AccountImportInteractor.swift index 5a25ba0487..0c8c1820e6 100644 --- a/fearless/Modules/AddAccount/Interactors/AddAccount+AccountImportInteractor.swift +++ b/fearless/Modules/AddAccount/Interactors/AddAccount+AccountImportInteractor.swift @@ -3,6 +3,7 @@ import IrohaCrypto import SSFUtils import RobinHood import SoraKeystore +import SSFModels extension AddAccount { final class AccountImportInteractor: BaseAccountImportInteractor { diff --git a/fearless/Modules/AllDone/AllDonePresenter.swift b/fearless/Modules/AllDone/AllDonePresenter.swift index 6afa3c5a2b..01412f3e52 100644 --- a/fearless/Modules/AllDone/AllDonePresenter.swift +++ b/fearless/Modules/AllDone/AllDonePresenter.swift @@ -5,6 +5,10 @@ import SSFModels final class AllDonePresenter { // MARK: Private properties + private lazy var wallet: MetaAccountModel? = { + SelectedWalletSettings.shared.value + }() + private weak var view: AllDoneViewInput? private let router: AllDoneRouterInput private let interactor: AllDoneInteractorInput @@ -61,6 +65,12 @@ final class AllDonePresenter { } private func prepareExplorer() { + if chainAsset?.chain.ecosystem == .ton { + let explorer = chainAsset?.chain.externalApi?.explorers?.first(where: { $0.types.contains(.tonAccount) }) + view?.didReceive(explorer: explorer) + self.explorer = explorer + return + } guard hashString != nil else { view?.didReceive(explorer: nil) return @@ -82,23 +92,46 @@ extension AllDonePresenter: AllDoneViewOutput { } func explorerButtonDidTapped() { - guard let explorer = self.explorer, - let hashString = hashString, - let explorerUrl = explorer.explorerUrl(for: hashString, type: explorer.transactionType) - else { + guard let url = prepareUrl() else { return } - router.presentSubscan(from: view, url: explorerUrl) + router.presentSubscan(from: view, url: url) } func shareButtonDidTapped() { - guard let explorer = self.explorer, - let hashString = hashString, - let explorerUrl = explorer.explorerUrl(for: hashString, type: explorer.transactionType) - else { + guard let url = prepareUrl() else { return } - router.share(sources: [explorerUrl], from: view, with: nil) + router.share(sources: [url], from: view, with: nil) + } + + private func prepareUrl() -> URL? { + guard let chainAsset else { + return nil + } + let url: URL + switch chainAsset.chain.ecosystem { + case .ethereumBased, .ethereum, .substrate: + guard + let explorer = self.explorer, + let hashString = hashString, + let explorerUrl = explorer.explorerUrl(for: hashString, type: explorer.transactionType) + else { + return nil + } + url = explorerUrl + case .ton: + guard + let wallet, + let explorer, + let address = try? wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId.asTonAddress().toRaw(), + let explorerUrl = explorer.explorerUrl(for: address, type: .tonAccount) + else { + return nil + } + url = explorerUrl + } + return url } func dismiss() { diff --git a/fearless/Modules/AssetListSearch/AssetListSearchAssembly.swift b/fearless/Modules/AssetListSearch/AssetListSearchAssembly.swift index 1dd4bb5222..c3741264e5 100644 --- a/fearless/Modules/AssetListSearch/AssetListSearchAssembly.swift +++ b/fearless/Modules/AssetListSearch/AssetListSearchAssembly.swift @@ -1,5 +1,6 @@ import UIKit import SoraFoundation +import SSFModels final class AssetListSearchAssembly { static func configureModule(wallet: MetaAccountModel) -> AssetListSearchModuleCreationResult? { diff --git a/fearless/Modules/AssetManagement/AssetManagementAssembly.swift b/fearless/Modules/AssetManagement/AssetManagementAssembly.swift index cf1ed2c2c5..dc4c80ebe7 100644 --- a/fearless/Modules/AssetManagement/AssetManagementAssembly.swift +++ b/fearless/Modules/AssetManagement/AssetManagementAssembly.swift @@ -37,34 +37,8 @@ final class AssetManagementAssembly { assetBalanceFormatterFactory: AssetBalanceFormatterFactory() ) - let repository = SubstrateRepositoryFactory( - storageFacade: UserDataStorageFacade.shared - ).createAccountInfoStorageItemRepository() - let ethereumBalanceRepositoryWrapper = EthereumBalanceRepositoryCacheWrapper( - logger: Logger.shared, - repository: repository, - operationManager: OperationManagerFacade.sharedManager - ) - - let runtimeMetadataRepository: AsyncCoreDataRepositoryDefault = - SubstrateDataStorageFacade.shared.createAsyncRepository() - + let accountInfoRemote = ServiceAssembly.shared.accountInfoRemoteServiceDefault() let chainRegistry = ChainRegistryFacade.sharedRegistry - let ethereumRemoteBalanceFetching = EthereumRemoteBalanceFetching( - chainRegistry: chainRegistry, - repositoryWrapper: ethereumBalanceRepositoryWrapper - ) - - let storagePerformer = SSFStorageQueryKit.StorageRequestPerformerDefault( - chainRegistry: chainRegistry - ) - - let accountInfoRemote = AccountInfoRemoteServiceDefault( - runtimeItemRepository: AsyncAnyRepository(runtimeMetadataRepository), - ethereumRemoteBalanceFetching: ethereumRemoteBalanceFetching, - storagePerformer: storagePerformer - ) - let walletAssetsObserver = WalletAssetsObserverImpl( wallet: wallet, chainRegistry: chainRegistry, diff --git a/fearless/Modules/AssetManagement/AssetManagementProtocols.swift b/fearless/Modules/AssetManagement/AssetManagementProtocols.swift index 5d370ac3c0..1f1a5741c6 100644 --- a/fearless/Modules/AssetManagement/AssetManagementProtocols.swift +++ b/fearless/Modules/AssetManagement/AssetManagementProtocols.swift @@ -1,3 +1,5 @@ +import SSFModels + typealias AssetManagementModuleCreationResult = ( view: AssetManagementViewInput, input: AssetManagementModuleInput diff --git a/fearless/Modules/AssetManagement/AssetManagementRouter.swift b/fearless/Modules/AssetManagement/AssetManagementRouter.swift index dd004b3b9a..54ac744e04 100644 --- a/fearless/Modules/AssetManagement/AssetManagementRouter.swift +++ b/fearless/Modules/AssetManagement/AssetManagementRouter.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels final class AssetManagementRouter: AssetManagementRouterInput { func showSelectNetwork( diff --git a/fearless/Modules/BackupCreatePassword/BackupCreatePasswordInteractor.swift b/fearless/Modules/BackupCreatePassword/BackupCreatePasswordInteractor.swift index 62b334f65a..9a9faccbc9 100644 --- a/fearless/Modules/BackupCreatePassword/BackupCreatePasswordInteractor.swift +++ b/fearless/Modules/BackupCreatePassword/BackupCreatePasswordInteractor.swift @@ -4,6 +4,7 @@ import RobinHood import SoraKeystore import IrohaCrypto import SSFModels +import SSFCrypto protocol BackupCreatePasswordInteractorOutput: AnyObject { func didReceive(error: Error) @@ -128,7 +129,7 @@ final class BackupCreatePasswordInteractor: BaseAccountConfirmInteractor { seeds: [ExportSeedData], password: String ) { - let substrateRestoreSeed = seeds.first(where: { $0.chain.chainBaseType == .substrate }) + let substrateRestoreSeed = seeds.first(where: { $0.chain.ecosystem == .substrate }) let ethereumRestoreSeed = seeds.first(where: { $0.chain.isEthereumBased }) let substrateSeed = substrateRestoreSeed?.seed.toHex(includePrefix: true) @@ -157,7 +158,7 @@ final class BackupCreatePasswordInteractor: BaseAccountConfirmInteractor { jsons: [RestoreJson], password: String ) { - let substrateRestoreJson = jsons.first(where: { $0.chain.chainBaseType == .substrate }) + let substrateRestoreJson = jsons.first(where: { $0.chain.ecosystem == .substrate }) let ethereumRestoreJson = jsons.first(where: { $0.chain.isEthereumBased }) let json = OpenBackupAccount.Json( @@ -365,7 +366,7 @@ extension BackupCreatePasswordInteractor: BackupCreatePasswordInteractorInput { switch flow { case let .multiple(wallet, accounts): let ethereum = accounts.first(where: { $0.chain.isEthereumBased }) - guard let substrate = accounts.first(where: { $0.chain.chainBaseType == .substrate }) else { + guard let substrate = accounts.first(where: { $0.chain.ecosystem == .substrate }) else { return } let accounts = [substrate, ethereum].compactMap { $0 } diff --git a/fearless/Modules/BackupPassword/BackupPasswordInteractor.swift b/fearless/Modules/BackupPassword/BackupPasswordInteractor.swift index 6494f9ef12..2d186100d7 100644 --- a/fearless/Modules/BackupPassword/BackupPasswordInteractor.swift +++ b/fearless/Modules/BackupPassword/BackupPasswordInteractor.swift @@ -1,6 +1,7 @@ import UIKit import RobinHood import SSFCloudStorage +import SSFModels protocol BackupPasswordInteractorOutput: AnyObject { func didReceiveBackup(result: Result) diff --git a/fearless/Modules/BackupWallet/BackupWalletAssembly.swift b/fearless/Modules/BackupWallet/BackupWalletAssembly.swift index 5a14e709dd..31a818ea80 100644 --- a/fearless/Modules/BackupWallet/BackupWalletAssembly.swift +++ b/fearless/Modules/BackupWallet/BackupWalletAssembly.swift @@ -3,6 +3,7 @@ import SoraFoundation import RobinHood import SoraKeystore import SSFCloudStorage +import SSFModels final class BackupWalletAssembly { static func configureModule( diff --git a/fearless/Modules/BackupWallet/BackupWalletProtocols.swift b/fearless/Modules/BackupWallet/BackupWalletProtocols.swift index 9c7b3dc0db..acaa2a9fbb 100644 --- a/fearless/Modules/BackupWallet/BackupWalletProtocols.swift +++ b/fearless/Modules/BackupWallet/BackupWalletProtocols.swift @@ -1,3 +1,5 @@ +import SSFModels + typealias BackupWalletModuleCreationResult = ( view: BackupWalletViewInput, input: BackupWalletModuleInput diff --git a/fearless/Modules/BackupWallet/BackupWalletRouter.swift b/fearless/Modules/BackupWallet/BackupWalletRouter.swift index a9f282461f..c00357da1e 100644 --- a/fearless/Modules/BackupWallet/BackupWalletRouter.swift +++ b/fearless/Modules/BackupWallet/BackupWalletRouter.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels final class BackupWalletRouter: BackupWalletRouterInput { func showMnemonicExport( diff --git a/fearless/Modules/BackupWallet/BackupWalletViewModelFactory.swift b/fearless/Modules/BackupWallet/BackupWalletViewModelFactory.swift index 5f2817dfe4..79017f9025 100644 --- a/fearless/Modules/BackupWallet/BackupWalletViewModelFactory.swift +++ b/fearless/Modules/BackupWallet/BackupWalletViewModelFactory.swift @@ -2,6 +2,7 @@ import Foundation import SoraFoundation import SSFCloudStorage import SSFModels +import SSFCrypto protocol BackupWalletViewModelFactoryProtocol { func createViewModel( diff --git a/fearless/Modules/BackupWalletName/WalletNameAssembly.swift b/fearless/Modules/BackupWalletName/WalletNameAssembly.swift index 106030db4f..c3015654e7 100644 --- a/fearless/Modules/BackupWalletName/WalletNameAssembly.swift +++ b/fearless/Modules/BackupWalletName/WalletNameAssembly.swift @@ -1,5 +1,6 @@ import UIKit import SoraFoundation +import SSFModels final class WalletNameAssembly { static func configureModule(with wallet: MetaAccountModel?) -> WalletNameModuleCreationResult? { diff --git a/fearless/Modules/BackupWalletName/WalletNameInteractor.swift b/fearless/Modules/BackupWalletName/WalletNameInteractor.swift index ad6ebb4688..cac5859d43 100644 --- a/fearless/Modules/BackupWalletName/WalletNameInteractor.swift +++ b/fearless/Modules/BackupWalletName/WalletNameInteractor.swift @@ -1,5 +1,6 @@ import UIKit import RobinHood +import SSFModels protocol WalletNameInteractorOutput: AnyObject { func didReceiveSaveOperation(result: Result) diff --git a/fearless/Modules/BackupWalletName/WalletNamePresenter.swift b/fearless/Modules/BackupWalletName/WalletNamePresenter.swift index c05c880239..7ce80eb48c 100644 --- a/fearless/Modules/BackupWalletName/WalletNamePresenter.swift +++ b/fearless/Modules/BackupWalletName/WalletNamePresenter.swift @@ -1,5 +1,6 @@ import Foundation import SoraFoundation +import SSFModels protocol WalletNameViewInput: ControllerBackedProtocol, HiddableBarWhenPushed, LoadableViewProtocol { func setInputViewModel(_ viewModel: InputViewModelProtocol) diff --git a/fearless/Modules/BalanceInfo/BalanceInfoDependencyContainer.swift b/fearless/Modules/BalanceInfo/BalanceInfoDependencyContainer.swift index 739c9d5e3a..ef72a61c79 100644 --- a/fearless/Modules/BalanceInfo/BalanceInfoDependencyContainer.swift +++ b/fearless/Modules/BalanceInfo/BalanceInfoDependencyContainer.swift @@ -20,8 +20,7 @@ final class BalanceInfoDepencyContainer { let operationManager = OperationManagerFacade.sharedManager let existentialDepositService = ExistentialDepositService( operationManager: operationManager, - chainRegistry: chainRegistry, - chainId: chainAsset.chain.chainId + chainRegistry: chainRegistry ) let balanceLocksFetcher = BalanceLocksFetchingFactory.buildBalanceLocksFetcher(for: chainAsset) diff --git a/fearless/Modules/BalanceLocksDetail/BalanceLocksDetailInteractor.swift b/fearless/Modules/BalanceLocksDetail/BalanceLocksDetailInteractor.swift index e39ada7114..8ce1b49980 100644 --- a/fearless/Modules/BalanceLocksDetail/BalanceLocksDetailInteractor.swift +++ b/fearless/Modules/BalanceLocksDetail/BalanceLocksDetailInteractor.swift @@ -1,5 +1,6 @@ import UIKit import SSFModels +import SSFAccountManagment final class BalanceLocksDetailInteractor { // MARK: - Private properties diff --git a/fearless/Modules/Banners/BannersAssembly.swift b/fearless/Modules/Banners/BannersAssembly.swift index 90be3884a7..5635f9f3a1 100644 --- a/fearless/Modules/Banners/BannersAssembly.swift +++ b/fearless/Modules/Banners/BannersAssembly.swift @@ -1,6 +1,7 @@ import UIKit import SoraFoundation import RobinHood +import SSFModels final class BannersAssembly { static func configureModule( diff --git a/fearless/Modules/Banners/BannersInteractor.swift b/fearless/Modules/Banners/BannersInteractor.swift index 11864bd8f3..902fc324c2 100644 --- a/fearless/Modules/Banners/BannersInteractor.swift +++ b/fearless/Modules/Banners/BannersInteractor.swift @@ -1,5 +1,6 @@ import UIKit import RobinHood +import SSFModels protocol BannersInteractorOutput: AnyObject { func didReceive(error: Error) diff --git a/fearless/Modules/ClaimCrowdloanRewards/ClaimCrowdloanRewardsInteractor.swift b/fearless/Modules/ClaimCrowdloanRewards/ClaimCrowdloanRewardsInteractor.swift index 605720d709..5cb4534b6a 100644 --- a/fearless/Modules/ClaimCrowdloanRewards/ClaimCrowdloanRewardsInteractor.swift +++ b/fearless/Modules/ClaimCrowdloanRewards/ClaimCrowdloanRewardsInteractor.swift @@ -3,6 +3,7 @@ import SSFUtils import SSFModels import RobinHood import SSFSigner +import SSFAccountManagment final class ClaimCrowdloanRewardsInteractor { // MARK: - Private properties diff --git a/fearless/Modules/CreateContact/CreateContactInteractor.swift b/fearless/Modules/CreateContact/CreateContactInteractor.swift index af23a825b9..00464fece5 100644 --- a/fearless/Modules/CreateContact/CreateContactInteractor.swift +++ b/fearless/Modules/CreateContact/CreateContactInteractor.swift @@ -1,5 +1,6 @@ import UIKit import SSFModels +import SSFCrypto final class CreateContactInteractor { // MARK: - Private properties diff --git a/fearless/Modules/CrossChain/CrossChainAssembly.swift b/fearless/Modules/CrossChain/CrossChainAssembly.swift index ea434c3561..6bb9cb0e8f 100644 --- a/fearless/Modules/CrossChain/CrossChainAssembly.swift +++ b/fearless/Modules/CrossChain/CrossChainAssembly.swift @@ -44,8 +44,7 @@ final class CrossChainAssembly { let existentialDepositService = ExistentialDepositService( operationManager: OperationManagerFacade.sharedManager, - chainRegistry: chainRegistry, - chainId: chainAsset.chain.chainId + chainRegistry: chainRegistry ) let runtimeService = chainRegistry.getRuntimeProvider(for: chainAsset.chain.chainId) let storageRequestPerformer: StorageRequestPerformer? = runtimeService.flatMap { diff --git a/fearless/Modules/CrossChain/CrossChainInteractor.swift b/fearless/Modules/CrossChain/CrossChainInteractor.swift index 1d8faf367d..3d25c54ed3 100644 --- a/fearless/Modules/CrossChain/CrossChainInteractor.swift +++ b/fearless/Modules/CrossChain/CrossChainInteractor.swift @@ -4,6 +4,7 @@ import RobinHood import BigInt import SSFExtrinsicKit import SSFModels +import SSFCrypto protocol CrossChainInteractorOutput: AnyObject { func didReceiveAccountInfo( diff --git a/fearless/Modules/CrossChain/CrossChainPresenter.swift b/fearless/Modules/CrossChain/CrossChainPresenter.swift index 751b426b7b..1cd20bd9bd 100644 --- a/fearless/Modules/CrossChain/CrossChainPresenter.swift +++ b/fearless/Modules/CrossChain/CrossChainPresenter.swift @@ -6,6 +6,7 @@ import SSFExtrinsicKit import SSFUtils import SSFModels import SSFQRService +import SSFCrypto protocol CrossChainViewInput: ControllerBackedProtocol, LoadableViewProtocol { func didReceive(assetBalanceViewModel: AssetBalanceViewModelProtocol?) diff --git a/fearless/Modules/CrossChain/CrossChainViewController.swift b/fearless/Modules/CrossChain/CrossChainViewController.swift index efb019c8a3..f5903b2f55 100644 --- a/fearless/Modules/CrossChain/CrossChainViewController.swift +++ b/fearless/Modules/CrossChain/CrossChainViewController.swift @@ -112,7 +112,7 @@ final class CrossChainViewController: UIViewController, ViewHolder, HiddableBarW } private func updatePreviewButton() { - let isEnabled = amountInputViewModel?.isValid == true && rootView.searchView.textField.text.or("").isNotEmpty && rootView.searchView.isValid + let isEnabled = amountInputViewModel?.isValid == true && rootView.searchView.textField.text.or("").isNotEmpty && rootView.searchView.isValid == true rootView.actionButton.set(enabled: isEnabled) } } diff --git a/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationInteractor.swift b/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationInteractor.swift index 892ca4db56..3c46725143 100644 --- a/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationInteractor.swift +++ b/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationInteractor.swift @@ -3,6 +3,7 @@ import SSFXCM import RobinHood import BigInt import SSFModels +import SSFCrypto protocol CrossChainConfirmationInteractorOutput: AnyObject { func didTransfer(result: Result) diff --git a/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationViewModelFactory.swift b/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationViewModelFactory.swift index a6e636d87d..8b92e671ed 100644 --- a/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationViewModelFactory.swift +++ b/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationViewModelFactory.swift @@ -10,7 +10,7 @@ final class CrossChainConfirmationViewModelFactory: CrossChainConfirmationViewMo hex: data.originChainAsset.asset.color )?.cgColor let originSymbolViewModel = SymbolViewModel( - symbolViewModel: data.originChainAsset.chain.icon.map { RemoteImageViewModel(url: $0) }, + iconViewModel: data.originChainAsset.chain.icon.map { RemoteImageViewModel(url: $0) }, shadowColor: originShadowColor ) @@ -18,13 +18,13 @@ final class CrossChainConfirmationViewModelFactory: CrossChainConfirmationViewMo hex: data.originChainAsset.asset.color )?.cgColor let destSymbolViewModel = SymbolViewModel( - symbolViewModel: data.destChainModel.icon.map { RemoteImageViewModel(url: $0) }, + iconViewModel: data.destChainModel.icon.map { RemoteImageViewModel(url: $0) }, shadowColor: destShadowColor ) let doubleImageViewViewModel = PolkaswapDoubleSymbolViewModel( - leftViewModel: originSymbolViewModel.symbolViewModel, - rightViewModel: destSymbolViewModel.symbolViewModel, + leftViewModel: originSymbolViewModel.iconViewModel, + rightViewModel: destSymbolViewModel.iconViewModel, leftShadowColor: originShadowColor, rightShadowColor: destShadowColor ) diff --git a/fearless/Modules/CrossChainConfirmation/CrossChainDepsContainer.swift b/fearless/Modules/CrossChainConfirmation/CrossChainDepsContainer.swift index 1e9c2d76db..a2baeac5bb 100644 --- a/fearless/Modules/CrossChainConfirmation/CrossChainDepsContainer.swift +++ b/fearless/Modules/CrossChainConfirmation/CrossChainDepsContainer.swift @@ -41,13 +41,10 @@ final class CrossChainDepsContainer { originalChainAsset: originalChainAsset, originalRuntimeMetadataItem: originalRuntimeMetadataItem ) - let existentialDepositService = (destChainModel?.chainId).map { - ExistentialDepositService( - operationManager: OperationManagerFacade.sharedManager, - chainRegistry: chainRegistry, - chainId: $0 - ) - } + let existentialDepositService = ExistentialDepositService( + operationManager: OperationManagerFacade.sharedManager, + chainRegistry: chainRegistry + ) let storageRequestPerformer: StorageRequestPerformer? = (destChainModel?.chainId).flatMap { guard let runtimeService = chainRegistry.getRuntimeProvider(for: $0), @@ -99,12 +96,11 @@ final class CrossChainDepsContainer { cryptoType: cryptoType, chainMetadata: originalRuntimeMetadataItem, accountId: accountId, - signingWrapperData: signingWrapperData, - chainType: originalChainAsset.chain.chainBaseType + signingWrapperData: signingWrapperData ) let sourceConfig = ApplicationConfig.shared - let services = XcmAssembly.createExtrincisServices( + let services = try XcmAssembly.createExtrincisServices( fromChainData: fromChainData, sourceConfig: sourceConfig, chainRegistry: ChainRegistryFacade.sharedRegistry @@ -119,9 +115,7 @@ final class CrossChainDepsContainer { accountResponse: ChainAccountResponse ) throws -> Data { let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil - let tag: String = chain.isEthereumBased - ? KeystoreTagV2.ethereumSecretKeyTagForMetaId(metaId, accountId: accountId) - : KeystoreTagV2.substrateSecretKeyTagForMetaId(metaId, accountId: accountId) + let tag: String = KeystoreTagV2.secretKeyTag(for: chain.ecosystem, metaId: metaId, accountId: accountId) let keystore = Keychain() let secretKey = try keystore.fetchKey(for: tag) diff --git a/fearless/Modules/Crowdloan/CrowdloanContribution/CrowdloanContributionInteractor.swift b/fearless/Modules/Crowdloan/CrowdloanContribution/CrowdloanContributionInteractor.swift index 7f81920eb2..6887b056af 100644 --- a/fearless/Modules/Crowdloan/CrowdloanContribution/CrowdloanContributionInteractor.swift +++ b/fearless/Modules/Crowdloan/CrowdloanContribution/CrowdloanContributionInteractor.swift @@ -3,6 +3,7 @@ import RobinHood import BigInt import SSFModels import SSFRuntimeCodingService +import SSFAccountManagment class CrowdloanContributionInteractor: CrowdloanContributionInteractorInputProtocol, RuntimeConstantFetching { weak var presenter: CrowdloanContributionInteractorOutputProtocol! diff --git a/fearless/Modules/Crowdloan/CrowdloanContribution/Model/CrowdloanContributionConfirmData.swift b/fearless/Modules/Crowdloan/CrowdloanContribution/Model/CrowdloanContributionConfirmData.swift index c31f3d9d79..baf9d9c5df 100644 --- a/fearless/Modules/Crowdloan/CrowdloanContribution/Model/CrowdloanContributionConfirmData.swift +++ b/fearless/Modules/Crowdloan/CrowdloanContribution/Model/CrowdloanContributionConfirmData.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels struct CrowdloanContributionConfirmData { let contribution: Decimal diff --git a/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmInteractor.swift b/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmInteractor.swift index 8e660a2ca3..24102a34b0 100644 --- a/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmInteractor.swift +++ b/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmInteractor.swift @@ -3,6 +3,7 @@ import RobinHood import BigInt import SSFModels import SSFRuntimeCodingService +import SSFAccountManagment final class CrowdloanContributionConfirmInteractor: CrowdloanContributionInteractor, AccountFetching { var confirmPresenter: CrowdloanContributionConfirmInteractorOutputProtocol? { diff --git a/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmProtocols.swift b/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmProtocols.swift index 2eecfc1c88..b425faef29 100644 --- a/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmProtocols.swift +++ b/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmProtocols.swift @@ -1,5 +1,6 @@ import SoraFoundation import BigInt +import SSFModels protocol CrowdloanContributionConfirmViewProtocol: ControllerBackedProtocol, Localizable, LoadableViewProtocol { func didReceiveAsset(viewModel: AssetBalanceViewModelProtocol) diff --git a/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmViewFactory.swift b/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmViewFactory.swift index feaaf81e03..2df75e9953 100644 --- a/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmViewFactory.swift +++ b/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmViewFactory.swift @@ -115,8 +115,7 @@ struct CrowdloanContributionConfirmViewFactory { let existentialDepositService = ExistentialDepositService( operationManager: operationManager, - chainRegistry: chainRegistry, - chainId: chainAsset.chain.chainId + chainRegistry: chainRegistry ) let callFactory = SubstrateCallFactoryDefault(runtimeService: runtimeService) diff --git a/fearless/Modules/Crowdloan/CrowdloanContributionSetup/CrowdloanContributionSetupViewFactory.swift b/fearless/Modules/Crowdloan/CrowdloanContributionSetup/CrowdloanContributionSetupViewFactory.swift index cec107e8b7..48c969b18f 100644 --- a/fearless/Modules/Crowdloan/CrowdloanContributionSetup/CrowdloanContributionSetupViewFactory.swift +++ b/fearless/Modules/Crowdloan/CrowdloanContributionSetup/CrowdloanContributionSetupViewFactory.swift @@ -108,8 +108,7 @@ struct CrowdloanContributionSetupViewFactory { let existentialDepositService = ExistentialDepositService( operationManager: operationManager, - chainRegistry: chainRegistry, - chainId: chainAsset.chain.chainId + chainRegistry: chainRegistry ) let callFactory = SubstrateCallFactoryDefault(runtimeService: runtimeService) diff --git a/fearless/Modules/Crowdloan/CrowdloanList/CrowdloanListInteractor.swift b/fearless/Modules/Crowdloan/CrowdloanList/CrowdloanListInteractor.swift index e9a5ebb28e..053376bd06 100644 --- a/fearless/Modules/Crowdloan/CrowdloanList/CrowdloanListInteractor.swift +++ b/fearless/Modules/Crowdloan/CrowdloanList/CrowdloanListInteractor.swift @@ -2,6 +2,7 @@ import UIKit import RobinHood import SSFModels import SSFRuntimeCodingService +import SSFAccountManagment final class CrowdloanListInteractor: RuntimeConstantFetching { weak var presenter: CrowdloanListInteractorOutputProtocol! diff --git a/fearless/Modules/Crowdloan/CrowdloanList/CrowdloansListInteractor+Protocols.swift b/fearless/Modules/Crowdloan/CrowdloanList/CrowdloansListInteractor+Protocols.swift index ac2cc908f7..681241754e 100644 --- a/fearless/Modules/Crowdloan/CrowdloanList/CrowdloansListInteractor+Protocols.swift +++ b/fearless/Modules/Crowdloan/CrowdloanList/CrowdloansListInteractor+Protocols.swift @@ -1,6 +1,7 @@ import Foundation import RobinHood import SSFModels +import SSFAccountManagment extension CrowdloanListInteractor: CrowdloanListInteractorInputProtocol { func setup() { diff --git a/fearless/Modules/Export/AccountExportPassword/AccountExportPasswordInteractor.swift b/fearless/Modules/Export/AccountExportPassword/AccountExportPasswordInteractor.swift index c2525e6c47..b083308c43 100644 --- a/fearless/Modules/Export/AccountExportPassword/AccountExportPasswordInteractor.swift +++ b/fearless/Modules/Export/AccountExportPassword/AccountExportPasswordInteractor.swift @@ -2,6 +2,7 @@ import UIKit import RobinHood import IrohaCrypto import SSFModels +import SSFCrypto enum AccountExportPasswordInteractorError: Error { case missingAccount diff --git a/fearless/Modules/Export/ExportFlow.swift b/fearless/Modules/Export/ExportFlow.swift index a844e529ad..b72db22687 100644 --- a/fearless/Modules/Export/ExportFlow.swift +++ b/fearless/Modules/Export/ExportFlow.swift @@ -11,18 +11,24 @@ enum ExportFlow { } var accountsToExport: [ChainAccountInfo] = [] - accounts.forEach { chainAccountInfo in - if !chainAccountInfo.account.isChainAccount { - if chainAccountInfo.account.isEthereumBased, accountsToExport.first(where: { $0.account.isEthereumBased && !$0.account.isChainAccount }) == nil { - accountsToExport.append(chainAccountInfo) - } - - if !chainAccountInfo.account.isEthereumBased, accountsToExport.first(where: { !$0.account.isEthereumBased && !$0.account.isChainAccount }) == nil { - accountsToExport.append(chainAccountInfo) - } - } else { + if chainAccountInfo.account.isChainAccount { accountsToExport.append(chainAccountInfo) + } else { + switch chainAccountInfo.account.ecosystem { + case .substrate: + if accountsToExport.first(where: { $0.account.ecosystem.isSubstrate }) == nil { + accountsToExport.append(chainAccountInfo) + } + case .ethereumBased, .ethereum: + if accountsToExport.first(where: { $0.account.ecosystem.isEthereum || $0.account.ecosystem.isEthereumBased }) == nil { + accountsToExport.append(chainAccountInfo) + } + case .ton: + if accountsToExport.first(where: { $0.account.ecosystem.isTon }) == nil { + accountsToExport.append(chainAccountInfo) + } + } } } diff --git a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicInteractor.swift b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicInteractor.swift index 491bf2517c..85d3c86b53 100644 --- a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicInteractor.swift +++ b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicInteractor.swift @@ -43,10 +43,11 @@ extension ExportMnemonicInteractor: ExportMnemonicInteractorInputProtocol { KeystoreTagV2.substrateDerivationTagForMetaId(wallet.metaId, accountId: accountId) let derivationPath: String? = try keystore.fetchDeriviationForAddress(derivationPathTag) + let isEthereum = chainAccount.account.ecosystem.isEthereum || chainAccount.account.ecosystem.isEthereumBased let data = ExportMnemonicData( mnemonic: mnemonic, derivationPath: derivationPath, - cryptoType: chainAccount.account.isEthereumBased ? nil : chainAccount.account.cryptoType, + cryptoType: isEthereum ? nil : chainAccount.account.cryptoType, chain: chainAccount.chain ) diff --git a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicWireframe.swift b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicWireframe.swift index 3d36f468c8..d11b7f1460 100644 --- a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicWireframe.swift +++ b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicWireframe.swift @@ -1,5 +1,6 @@ import Foundation import IrohaCrypto +import SSFModels final class ExportMnemonicWireframe: ExportMnemonicWireframeProtocol { func openConfirmationForMnemonic( diff --git a/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmInteractor.swift b/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmInteractor.swift index f77d68b102..3e3c584247 100644 --- a/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmInteractor.swift +++ b/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmInteractor.swift @@ -1,5 +1,6 @@ import UIKit import IrohaCrypto +import SSFModels final class ExportMnemonicConfirmInteractor { weak var presenter: AccountConfirmInteractorOutputProtocol! diff --git a/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmProtocols.swift b/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmProtocols.swift index c37f434434..ff1d893313 100644 --- a/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmProtocols.swift +++ b/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmProtocols.swift @@ -1,5 +1,6 @@ import Foundation import IrohaCrypto +import SSFModels protocol ExportMnemonicConfirmViewFactoryProtocol { static func createViewForMnemonic( diff --git a/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmViewFactory.swift b/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmViewFactory.swift index 00e5fd2b7b..14128769d7 100644 --- a/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmViewFactory.swift +++ b/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmViewFactory.swift @@ -1,6 +1,7 @@ import Foundation import IrohaCrypto import SoraFoundation +import SSFModels final class ExportMnemonicConfirmViewFactory: ExportMnemonicConfirmViewFactoryProtocol { static func createViewForMnemonic( diff --git a/fearless/Modules/Export/ExportRestoreJson/ExportRestoreJsonInteractor.swift b/fearless/Modules/Export/ExportRestoreJson/ExportRestoreJsonInteractor.swift index be665ac7cf..e4d94a9cc6 100644 --- a/fearless/Modules/Export/ExportRestoreJson/ExportRestoreJsonInteractor.swift +++ b/fearless/Modules/Export/ExportRestoreJson/ExportRestoreJsonInteractor.swift @@ -1,6 +1,7 @@ import Foundation import UIKit import IrohaCrypto +import SSFModels final class ExportRestoreJsonInteractor { private let settings: SelectedWalletSettings diff --git a/fearless/Modules/GetPreinstalledWallet/GetPreinstalledWalletInteractor.swift b/fearless/Modules/GetPreinstalledWallet/GetPreinstalledWalletInteractor.swift index 8d834bb137..5ddf9ea255 100644 --- a/fearless/Modules/GetPreinstalledWallet/GetPreinstalledWalletInteractor.swift +++ b/fearless/Modules/GetPreinstalledWallet/GetPreinstalledWalletInteractor.swift @@ -1,6 +1,7 @@ import UIKit import SSFQRService import RobinHood +import SSFModels final class GetPreinstalledWalletInteractor: BaseAccountImportInteractor { // MARK: - Private properties diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/LiquidityPoolDetailsInteractor.swift b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/LiquidityPoolDetailsInteractor.swift index 14626a662c..c71c122cd5 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/LiquidityPoolDetailsInteractor.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/LiquidityPoolDetailsInteractor.swift @@ -3,6 +3,8 @@ import SSFModels import SSFPolkaswap import SSFPools import SSFStorageQueryKit +import SSFAccountManagment +import SSFCrypto protocol LiquidityPoolDetailsInteractorOutput: AnyObject { func didReceiveLiquidityPair(liquidityPair: LiquidityPair?) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/chains.json b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/chains.json index 9beb1d36a9..81ff808b04 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/chains.json +++ b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/chains.json @@ -1,6958 +1,7371 @@ -[{ - "disabled": false, - "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "rank": 8, - "name": "Polkadot", - "externalApi": { +[ + { + "disabled": false, + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "rank": 8, + "name": "Polkadot", + "ecosystem": "substrate", + "externalApi": { "staking": { - "type": "subsquid", - "url": "https://squid.subsquid.io/fearless-polkadot/v/v3/graphql" + "type": "subsquid", + "url": "https://squid.subsquid.io/fearless-polkadot/v/v3/graphql" }, "history": { - "type": "subsquid", - "url": "https://squid.subsquid.io/fearless-polkadot/v/v3/graphql" + "type": "subsquid", + "url": "https://squid.subsquid.io/fearless-polkadot/v/v3/graphql" }, "crowdloans": { - "type": "github", - "url": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/crowdloan/polkadot.json" + "type": "github", + "url": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/crowdloan/polkadot.json" }, - "explorers": [{ + "explorers": [ + { "type": "subscan", "types": [ - "extrinsic", - "account" + "extrinsic", + "account" ], "url": "https://polkadot.subscan.io/{type}/{value}" - }, - { - "type": "polkascan", - "types": [ - "extrinsic", - "account", - "event" - ], - "url": "https://polkascan.io/polkadot/{type}/{value}" - } + }, + { + "type": "polkascan", + "types": [ + "extrinsic", + "account", + "event" + ], + "url": "https://polkascan.io/polkadot/{type}/{value}" + } ] - }, - "assets": [{ - "isUtility": true, - "id": "887a17c7-1370-4de0-97dd-5422e294fa75", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "staking": "relaychain", - "purchaseProviders": [ + }, + "assets": [ + { + "isUtility": true, + "id": "887a17c7-1370-4de0-97dd-5422e294fa75", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "staking": "relaychain", + "purchaseProviders": [ "moonpay", "ramp" - ], - "type": "normal", - "priceProvider": { + ], + "type": "normal", + "priceProvider": { "type": "chainlink", "id": "0xa6bc5baf2000424e90434ba7104ee399dee80dec", "precision": 8 + } } - }], - "xcm": { + ], + "xcm": { "xcmVersion": "v3", "availableAssets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + } ], "availableDestinations": [ - { - "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, - { - "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, - { - "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, - { - "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, - { - "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT", - "minAmount": "11000000000" - } - - ], - "bridgeParachainId": "e92d165ad41e41e215d09713788173aecfdbe34d3bed29409d33a2ef03980738" - } + { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + } + ] + }, + { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + } + ] + }, + { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + } + ] + }, + { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + } + ] + }, + { + "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", + "assets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT", + "minAmount": "11000000000" + } + ], + "bridgeParachainId": "e92d165ad41e41e215d09713788173aecfdbe34d3bed29409d33a2ef03980738" + } ] - }, - "nodes": [{ - "url": "wss://rpc.polkadot.io", - "name": "Parity node" + }, + "nodes": [ + { + "url": "wss://api-polkadot.dwellir.com", + "name": "Dwellir node" }, { - "url": "wss://polkadot-rpc.dwellir.com", - "name": "Dwellir node" + "url": "wss://rpc.polkadot.io", + "name": "Parity node" }, { - "url": "wss://polkadot.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "url": "wss://rpc-polkadot.luckyfriday.io", + "name": "LuckyFriday node" + }, + { + "url": "wss://polkadot.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polkadot.svg", - "addressPrefix": 0, - "options": [ + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polkadot.svg", + "addressPrefix": 0, + "options": [ "crowdloans", "poolStaking" - ] -}, + ] + }, { - "disabled": false, - "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "rank": 9, - "name": "Kusama", - "identityChain": "c1af4cb4eb3918e5db15086c0cc5ec17fb334f728b7c65dd44bfe1e174ff8b3f", - "externalApi": { - "staking": { - "type": "subsquid", - "url": "https://squid.subsquid.io/fearless-kusama-2/v/v3/graphql" - }, - "history": { - "type": "subsquid", - "url": "https://squid.subsquid.io/fearless-kusama-2/v/v3/graphql" - }, - "crowdloans": { - "type": "github", - "url": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/crowdloan/kusama.json" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://kusama.subscan.io/{type}/{value}" - }, - { - "type": "polkascan", - "types": [ - "extrinsic", - "account", - "event" - ], - "url": "https://polkascan.io/kusama/{type}/{value}" - } - ] + "disabled": false, + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "rank": 9, + "name": "Kusama", + "ecosystem": "substrate", + "identityChain": "c1af4cb4eb3918e5db15086c0cc5ec17fb334f728b7c65dd44bfe1e174ff8b3f", + "externalApi": { + "staking": { + "type": "subsquid", + "url": "https://fearless-wallet.squids.live/fearless-kusama-2/v/v4/graphql" + }, + "history": { + "type": "subsquid", + "url": "https://fearless-wallet.squids.live/fearless-kusama-2/v/v4/graphql" }, - "assets": [{ - "id": "1e0c2ec6-935f-49bd-a854-5e12ee6c9f1b", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "staking": "relaychain", - "purchaseProviders": [ - "ramp" + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" ], - "isUtility": true, - "type": "normal" - }], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } + "url": "https://kusama.subscan.io/{type}/{value}" + }, + { + "type": "polkascan", + "types": [ + "extrinsic", + "account", + "event" ], - "availableDestinations": [ - { - "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM", - "minAmount": "50000000000" - } - - ], - "bridgeParachainId": "6d8d9f145c2177fa83512492cdd80a71e29f22473f4a8943a6292149ac319fb9" - } - ] - }, - "nodes": [{ - "url": "wss://kusama-rpc.polkadot.io", - "name": "Parity node" - }, - { - "url": "wss://kusama-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://kusama.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kusama.svg", - "addressPrefix": 2, - "options": [ - "crowdloans", - "poolStaking" - ] - }, - { - "disabled": false, - "chainId": "e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e", - "rank": 108, - "name": "Westend", - "externalApi": { - "crowdloans": { - "type": "github", - "url": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/crowdloan/westend.json" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://westend.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "staking": "relaychain", - "isUtility": true, - "id": "a3868e1b-922e-42d4-b73e-b41712f0843c", - "name": "westend", - "symbol": "wnd", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/WND.svg", - "color": "FFFFFF", - "type": "normal" - }], - "nodes": [{ - "url": "wss://westend-rpc.polkadot.io", - "name": "Parity node" - }, - { - "url": "wss://westend-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://westend.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Westend.svg", - "addressPrefix": 42, - "options": [ - "testnet", - "crowdloans", - "poolStaking" + "url": "https://polkascan.io/kusama/{type}/{value}" + } ] - }, - { - "disabled": false, - "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "1000", - "name": "Kusama AssetHub", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-statemine/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://assethub-kusama.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "1e0c2ec6-935f-49bd-a854-5e12ee6c9f1b", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "purchaseProviders": [ - "ramp" - ], - "isUtility": true, - "type": "normal" - }, - { - "id": "27768227-8a9a-4443-a57d-6013c24f85e9", - "type": "assets", - "name": "tether usd", - "symbol": "usdt", - "precision": 4, - "currencyId": "11", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - }, - { - "id": "3dd9d403-49d2-46c2-a84a-334b31a6a6b7", - "type": "assets", - "name": "rmrk", - "symbol": "rmrk", - "precision": 10, - "currencyId": "8", - "priceId": "rmrk", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", - "color": "392B73", - "inferred": true, - "confidence": 0 - } + }, + "assets": [ + { + "id": "1e0c2ec6-935f-49bd-a854-5e12ee6c9f1b", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "staking": "relaychain", + "purchaseProviders": [ + "ramp" + ], + "isUtility": true, + "type": "normal" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + } ], - "xcm": { + "availableDestinations": [ + { "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - }, - { - "id": "043a5aba-075a-4b14-91ae-f5bffe640477", - "symbol": "USDt" - } - ], - "availableDestinations": [ - { - "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", - "assets": [ - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - } - ] - }, - { - "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", - "assets": [ - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - }, - { - "id": "043a5aba-075a-4b14-91ae-f5bffe640477", - "symbol": "USDt" - } - ] - }, - { - "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", - "assets": [ - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - }, - { - "id": "043a5aba-075a-4b14-91ae-f5bffe640477", - "symbol": "USDt" - } - ] - } + "assets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + } ] - }, - "nodes": [{ - "url": "wss://kusama-asset-hub-rpc.polkadot.io", - "name": "Parity node" - }, - { - "url": "wss://statemine-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://statemine.public.curie.radiumblock.co/ws", - "name": "RadiumBlock node" - }, - { - "url": "wss://rpc-asset-hub-kusama.luckyfriday.io", - "name": "LuckyFriday node" - }, - { - "url": "wss://ksm-rpc.stakeworld.io/assethub", - "name": "Stakeworld node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Assethub.svg", - "addressPrefix": 2, - "options": [ - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "1000", - "name": "Polkadot AssetHub", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-statemint/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://assethub-polkadot.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "isUtility": true, - "id": "887a17c7-1370-4de0-97dd-5422e294fa75", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "purchaseProviders": [ - "moonpay", - "ramp" - ], - "type": "normal" - }, - { - "id": "ea33432f-9bd9-4d42-93bc-cd45a0e8a44c", - "type": "assets", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "1984", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - }, - { - "id": "8f79aa5a-9f31-442c-ac96-01ff80b105e0", - "type": "assets", - "name": "dot is $ded", - "symbol": "ded", - "precision": 10, - "currencyId": "30", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DED.svg", - "color": "FE0186" - }, - { - "id": "44587704-7da8-45c3-9541-be7b81de76ee", - "type": "assets", - "name": "pink", - "symbol": "pink", - "precision": 10, - "currencyId": "23", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PINK.svg", - "color": "FF0066" - } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - }, - { - "id": "1c9cea4c-f369-4bfa-a8c4-3d3264d3d7c2", - "symbol": "USDt" - } - ], - "availableDestinations": [{ - "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, - { - "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", - "assets": [ - { - "id": "1c9cea4c-f369-4bfa-a8c4-3d3264d3d7c2", - "symbol": "USDt" - } - ] - }, - { - "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", - "assets": [ - { - "id": "1c9cea4c-f369-4bfa-a8c4-3d3264d3d7c2", - "symbol": "USDt" - } - ] - } + }, + { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + } ] - }, - "nodes": [{ - "url": "wss://polkadot-asset-hub-rpc.polkadot.io", - "name": "Parity node" - }, - { - "url": "wss://statemint-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://statemint.public.curie.radiumblock.co/ws", - "name": "RadiumBlock node" - }, - { - "url": "wss://rpc-asset-hub-polkadot.luckyfriday.io", - "name": "LuckyFriday node" - }, - { - "url": "wss://dot-rpc.stakeworld.io/assethub", - "name": "Stakeworld node" - }, - { - "url": "wss://statemint.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Assethub.svg", - "addressPrefix": 0, - "options": [ - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "name": "Acala", - "paraId": "2000", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-acala/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://acala.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "c801d6c1-3edf-41a9-9aea-da705eab249b", - "name": "acala", - "symbol": "aca", - "precision": 12, - "priceId": "acala", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal", - "existentialDeposit": "100000000000" - }, - { - "id": "cfe26eae-f566-4b8d-a44c-bd4380c27bc5", - "name": "acala dollar", - "symbol": "ausd", - "currencyId": "kusd", - "precision": 12, - "priceId": "acala-dollar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", - "color": "E40C5B", - "type": "ormlAsset", - "isNative": true, - "existentialDeposit": "100000000000" - }, - { - "id": "70a69d25-a4ba-4c6b-a15d-09f3c2814ddf", - "name": "tapio dot", - "symbol": "tdot", - "precision": 10, - "currencyId": "0", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TDOT.svg", - "color": "FF0066", - "type": "stableAssetPoolToken", - "isNative": true, - "existentialDeposit": "100000000" - }, - { - "id": "fe07f6c5-2b90-4e1a-81e3-8ed85f5a80b9", - "name": "parallel finance", - "symbol": "para", - "precision": 12, - "currencyId": "1", - "priceId": "parallel-finance", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PARA.svg", - "color": "4C19E7", - "type": "foreignAsset", - "existentialDeposit": "100000000000" - }, - { - "id": "b6c22f93-be25-426b-b921-18bf19c49667", - "name": "moonbeam", - "symbol": "glmr", - "precision": 18, - "currencyId": "0", - "priceId": "moonbeam", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF", - "type": "foreignAsset", - "existentialDeposit": "100000000000000000" - }, - { - "id": "471bfcd1-9680-4ba9-a25d-3e9f777ee2c9", - "name": "liquid dot", - "symbol": "ldot", - "precision": 10, - "priceId": "liquid-staking-dot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LDOT.svg", - "color": "FF0066", - "type": "ormlAsset", - "isNative": true, - "existentialDeposit": "500000000" - }, - { - "id": "ffb814ea-c92c-4a1e-8e24-437c93ecd8ff", - "name": "taiga", - "symbol": "tai", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TAI.svg", - "color": "FFFFFF", - "priceId": "taiga", - "type": "ormlAsset", - "isNative": true - }, - { - "id": "ed98bee1-34ce-4aa2-896e-508380dea1c2", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "type": "ormlAsset", - "existentialDeposit": "100000000" - }, - { - "id": "a7b48fb1-5741-487a-98fd-c45f958dd4fd", - "name": "liquid crowdloan dot", - "symbol": "lcdot", - "precision": 10, - "currencyId": "13", - "priceId": "liquid-crowdloan-dot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LCDOT.svg", - "color": "FF0066", - "type": "liquidCrowdloan", - "isNative": true, - "existentialDeposit": "0" - }, - { - "id": "402c606d-691f-4889-a48d-a459a0e37c56", - "name": "inter btc", - "symbol": "ibtc", - "precision": 8, - "currencyId": "3", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", - "color": "F2AE7F", - "type": "foreignAsset" - }, - { - "id": "7fffd65a-d971-4bdc-a6bd-216674b83a97", - "name": "wrapped ether", - "symbol": "weth", - "precision": 18, - "currencyId": "6", - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color":"627EEA", - "type": "foreignAsset" - }, - { - "id": "184a1b21-d512-4de9-ab54-6c014e24f90c", - "name": "astar", - "symbol": "astr", - "precision": 18, - "currencyId": "2", - "priceId": "astar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", - "color": "0AE2FF", - "type": "foreignAsset" - } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - }, - { - "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", - "symbol": "aUSD" - }, - { - "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", - "symbol": "ACA" - }, - { - "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", - "symbol": "GLMR" - }, - { - "id": "163a89b9-d140-44ca-b119-218a54e4235b", - "symbol": "lcDOT" - } - ], - "availableDestinations": [ - { - "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, - { - "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", - "assets": [ - { - "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", - "symbol": "aUSD" - }, - { - "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", - "symbol": "ACA" - }, - { - "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", - "symbol": "GLMR" - } - ] - }, - { - "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", - "assets": [ - { - "id": "163a89b9-d140-44ca-b119-218a54e4235b", - "symbol": "lcDOT" - }, - { - "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", - "symbol": "ACA" - } - ] - }, - { - "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", - "assets": [ - { - "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", - "symbol": "ACA", - "minAmount": "56000000000000" - } - - ], - "bridgeParachainId": "e92d165ad41e41e215d09713788173aecfdbe34d3bed29409d33a2ef03980738" - } + }, + { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + } ] - }, - "nodes": [ - { - "url": "wss://acala-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://rpc-acala.luckyfriday.io", - "name": "LuckyFriday node" - }, - { - "url": "wss://acala-polkadot.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - }, - { - "url": "wss://acala-rpc-0.aca-api.network", - "name": "Acala Foundation node 0" - }, - { - "url": "wss://acala-rpc-3.aca-api.network/ws", - "name": "Acala Foundation node 3" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/acala.svg", - "addressPrefix": 10, - "options": [ - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "name": "Karura", - "paraId": "2000", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-karura/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://karura.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "e71b30a0-2a44-40ff-8b53-a166fadef6c5", - "name": "karura", - "symbol": "kar", - "precision": 12, - "priceId": "karura", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }, - { - "id": "91a69026-0ab7-4db0-af53-8d571fd33ac4", - "name": "acala dollar", - "symbol": "ausd", - "currencyId": "kusd", - "precision": 12, - "priceId": "acala-dollar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", - "color": "E40C5B", - "type": "ormlAsset", - "isNative": true, - "existentialDeposit": "10000000000" - }, - { - "id": "223b0282-b5c9-48ed-87e3-5e9ef6714ac8", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "type": "ormlAsset", - "existentialDeposit": "100000000" - }, - { - "id": "e605149c-0f41-4ec9-960f-21c07e2d9361", - "name": "rmrk", - "symbol": "rmrk", - "currencyId": "0", - "precision": 10, - "priceId": "rmrk", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", - "color": "392B73", - "type": "foreignAsset", - "existentialDeposit": "100000000" - }, - { - "id": "10757cfa-b590-43c1-8524-efc28d798bcb", - "name": "bifrost native coin", - "symbol": "bnc", - "precision": 12, - "priceId": "bifrost-native-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", - "color": "FFFFFF", - "type": "ormlAsset", - "existentialDeposit": "8000000000" - }, - { - "id": "77562113-9e01-49b6-a39d-87a47bde24fe", - "name": "liquid ksm", - "symbol": "lksm", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LKSM.svg", - "color": "FFFFFF", - "type": "ormlAsset", - "isNative": true, - "existentialDeposit": "500000000" - }, - { - "id": "c6fd5a1e-3052-4bdf-b0f3-ad1b7b9fbff0", - "name": "crust shadow", - "symbol": "csm", - "currencyId": "5", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CSM_Crust_Shadow.svg", - "color": "F3AD56", - "priceId": "crust-storage-market", - "type": "foreignAsset", - "existentialDeposit": "1000000000000" - }, - { - "id": "5e9c76a4-9f89-487d-80aa-db0588b60aa4", - "name": "taiga", - "symbol": "tai", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TAI.svg", - "color": "FFFFFF", - "priceId": "taiga", - "type": "ormlAsset", - "isNative": true, - "existentialDeposit": "1000000000000" - }, - { - "id": "4b9f4cba-3b26-4f99-8666-3ee305683706", - "name": "polarisdao", - "symbol": "aris", - "currencyId": "1", - "precision": 8, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ARIS.svg", - "color": "423F47", - "priceId": "polarisdao", - "type": "foreignAsset", - "existentialDeposit": "1000000000000" - }, - { - "id": "3d32d7cb-4de5-427e-9668-a9763648a555", - "name": "quartz", - "symbol": "qtz", - "currencyId": "2", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/QTZ.svg", - "color": "EC5B6D", - "priceId": "quartz", - "type": "foreignAsset", - "existentialDeposit": "1000000000000000000" - }, - { - "id": "17142348-16f6-49f2-9006-098f5562bda0", - "name": "kintsugi ibtc", - "symbol": "kbtc", - "precision": 8, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", - "color": "FFFFFF", - "priceId": "kintsugi-btc", - "type": "ormlAsset", - "existentialDeposit": "66" - }, - { - "id": "6aa4622c-42b9-4976-9f7c-35447bb24128", - "name": "kintsugi", - "symbol": "kint", - "precision": 12, - "priceId": "kintsugi", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", - "color": "FFFFFF", - "type": "ormlAsset", - "existentialDeposit": "133330000" - }, - { - "id": "e27e5b58-3229-4656-b9ff-de309f49f17f", - "name": "phala", - "symbol": "pha", - "precision": 12, - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F", - "type": "ormlAsset", - "existentialDeposit": "40000000000" - }, - { - "id": "8e975c47-df51-48a8-a29e-a89ee0f4bf9e", - "name": "taiga ksm", - "symbol": "taiksm", - "currencyId": "0", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TAIKSM.svg", - "color": "FFFFFF", - "type": "stableAssetPoolToken", - "isNative": true, - "existentialDeposit": "100000000" - }, - { - "id": "536deaa6-49b0-4b54-adc7-9619e15c79b2", - "name": "voucher slot ksm", - "symbol": "vsksm", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VSKSM.svg", - "color": "FFFFFF", - "type": "ormlAsset", - "existentialDeposit": "100000000" - }, - { - "id": "f2257792-ffb9-4dff-95ae-5f98c1cb594b", - "name": "moonriver", - "symbol": "movr", - "currencyId": "3", - "precision": 18, - "priceId": "moonriver", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", - "color": "FFFFFF", - "type": "foreignAsset", - "existentialDeposit": "1000000000000000" - }, - { - "id": "54b7f751-ef62-45b2-ad65-837852de5af4", - "name": "heiko finance", - "symbol": "hko", - "currencyId": "4", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HKO.svg", - "color": "CC3474", - "type": "foreignAsset", - "existentialDeposit": "100000000000" - }, - { - "id": "bb3dc769-394f-40fb-b54f-4a0d0de7e49e", - "name": "kico", - "symbol": "kico", - "currencyId": "6", - "precision": 14, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KICO.svg", - "color": "FFFFFF", - "type": "foreignAsset", - "existentialDeposit": "100000000000000" - }, - { - "id": "5fd5f3ce-4a2c-4647-923e-6c29cc95a4f7", - "name": "tether usd", - "symbol": "usdt", - "currencyId": "7", - "precision": 6, - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "type": "foreignAsset", - "existentialDeposit": "10000" - }, - { - "id": "8cf27ed8-11bf-4b16-be22-5aa6bbc10736", - "name": "integritee", - "symbol": "teer", - "currencyId": "8", - "precision": 12, - "priceId": "integritee", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TEER.svg", - "color": "FFFFFF", - "type": "foreignAsset", - "existentialDeposit": "100000000000" - }, - { - "id": "805e945b-54a6-47ec-a62b-7bcbae46fb70", - "name": "metaverse.network pioneer", - "symbol": "neer", - "currencyId": "9", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NEER.svg", - "color": "B8FBFE", - "type": "foreignAsset", - "existentialDeposit": "100000000000000000" - }, - { - "id": "addd6fed-51af-4088-8d6d-05c73b48b8df", - "name": "calamari network", - "symbol": "kma", - "currencyId": "10", - "precision": 12, - "priceId": "calamari-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KMA.svg", - "color": "FFFFFF", - "type": "foreignAsset", - "existentialDeposit": "100000000000" - }, - { - "id": "f8d6e0db-e50b-46ea-b870-c2e97abb99d7", - "name": "basilisk", - "symbol": "bsx", - "currencyId": "11", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BSX.svg", - "color": "87FCB6", - "type": "foreignAsset", - "existentialDeposit": "1000000000000" - }, - { - "id": "4879d0ed-810b-4792-8e83-387180cc3a9c", - "name": "altair", - "symbol": "air", - "currencyId": "12", - "precision": 18, - "priceId": "altair", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AIR.svg", - "color": "FFFFFF", - "type": "foreignAsset", - "existentialDeposit": "100000000000000000" - }, - { - "id": "e0fe6aac-a52e-4e78-be60-defee1006569", - "name": "crab network", - "symbol": "crab", - "currencyId": "13", - "precision": 18, - "priceId": "darwinia-crab-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRAB.svg", - "color": "581BD1", - "type": "foreignAsset", - "existentialDeposit": "1000000000000000000" - }, - { - "id": "1d534f94-bc5a-41a5-a295-c84f9ee0d95c", - "name": "genshiro", - "symbol": "gens", - "currencyId": "14", - "precision": 9, - "priceId": "genshiro", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GENS.svg", - "color": "FFFFFF", - "type": "foreignAsset", - "existentialDeposit": "1000000000000" - }, - { - "id": "b8f7bcbc-fe2d-457d-903f-c8c126127231", - "name": "equilibrium dollar protocol", - "symbol": "eqd", - "currencyId": "15", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQD.svg", - "color": "4D8BED", - "type": "foreignAsset", - "existentialDeposit": "10000000000" - }, - { - "id": "2433813f-403f-40e1-9e00-688b037113d5", - "name": "turing token", - "symbol": "tur", - "currencyId": "16", - "precision": 10, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUR.svg", - "color": "5DCBD0", - "type": "foreignAsset", - "existentialDeposit": "40000000000" - }, - { - "id": "1a6e5327-80da-439a-8294-8b3dbeb8172c", - "name": "pichu token", - "symbol": "pchu", - "currencyId": "17", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PCHU.svg", - "color": "AE4071", - "type": "foreignAsset", - "existentialDeposit": "100000000000000000" - } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", - "symbol": "BNC" - }, - { - "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", - "symbol": "AUSD" - }, - { - "id": "0fef7483-1f4c-4339-a12c-1b537e8e62ba", - "symbol": "KAR" - }, - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - }, - { - "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", - "symbol": "USDt" - }, - { - "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", - "symbol": "MOVR" - } + }, + { + "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", + "assets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM", + "minAmount": "50000000000" + } ], - "availableDestinations": [ - { - "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", - "assets": [ - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - }, - { - "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", - "symbol": "USDt" - } - ] - }, - { - "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", - "symbol": "BNC" - }, - { - "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", - "symbol": "AUSD" - }, - { - "id": "0fef7483-1f4c-4339-a12c-1b537e8e62ba", - "symbol": "KAR" - } - ] - }, - { - "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", - "symbol": "MOVR" - }, - { - "id": "0fef7483-1f4c-4339-a12c-1b537e8e62ba", - "symbol": "KAR" - }, - { - "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", - "symbol": "AUSD" - } - ] - } - ] - }, - "nodes": [{ - "url": "wss://karura-rpc-0.aca-api.network", - "name": "Acala Foundation node 0" - }, - { - "url": "wss://karura-rpc-2.aca-api.network/ws", - "name": "Acala Foundation node 2" - }, - { - "url": "wss://karura-rpc-3.aca-api.network/ws", - "name": "Acala Foundation node 3" - }, - { - "url": "wss://karura.polkawallet.io", - "name": "Polkawallet node" - }, - { - "url": "wss://karura-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://karura.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Karura.svg", - "addressPrefix": 8, - "options": [ - "utilityFeePayment" + "bridgeParachainId": "6d8d9f145c2177fa83512492cdd80a71e29f22473f4a8943a6292149ac319fb9" + } ] - }, - { - "disabled": false, - "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "rank": 11, - "name": "Moonriver", - "paraId": "2023", - "externalApi": { - "staking": { - "type": "subsquid", - "url": "https://squid.subsquid.io/fearless-moonriver-1/v/v2/graphql" - }, - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-moonriver/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://moonriver.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "35346815-009a-4cf9-a5ad-85a0167e594d", - "name": "moonriver", - "symbol": "movr", - "precision": 18, - "priceId": "moonriver", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", - "color": "FFFFFF", - "staking": "parachain", - "isUtility": true, - "type": "normal" - }, - { - "id": "980af72c-d1b8-46c7-9793-fa87912652ec", - "name": "kusama", - "symbol": "xcksm", - "currencyId": "42259045809535163221576417993425387648", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "type": "assets" - }, - { - "id": "d1ebeaa2-e7ac-4645-8dce-e873ebdbb995", - "type": "assets", - "name": "acala dollar", - "symbol": "xcausd", - "currencyId": "214920334981412447805621250067209749032", - "precision": 12, - "priceId": "acala-dollar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", - "color": "E40C5B" - }, - { - "id": "8e45603e-91c4-4624-8457-9e9b24a98610", - "type": "assets", - "name": "xcrmrk", - "symbol": "xcrmrk", - "currencyId": "182365888117048807484804376330534607370", - "precision": 10, - "priceId": "rmrk", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", - "color": "392B73" - }, - { - "id": "4f9750bb-f3f5-45b3-a180-a0c734f52562", - "type": "assets", - "name": "kintsugi wrapped btc", - "symbol": "xckbtc", - "currencyId": "328179947973504579459046439826496046832", - "precision": 8, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", - "color": "FFFFFF", - "priceId": "kintsugi-btc" - }, - { - "id": "ff8fce18-260f-46c9-85bd-36157d1f756e", - "type": "assets", - "name": "phala token", - "symbol": "xcpha", - "currencyId": "189307976387032586987344677431204943363", - "precision": 12, - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F" - }, - { - "id": "88cfc7c3-6b8e-49a5-8620-e014840d4bf9", - "type": "assets", - "name": "robonomics native token", - "symbol": "xcxrt", - "currencyId": "108036400430056508975016746969135344601", - "precision": 9, - "priceId": "robonomics-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XRT.svg", - "color": "FFFFFF" - }, - { - "id": "db8fdbe6-26b0-4910-a267-d7a58c22c7ec", - "type": "assets", - "name": "kintsugi native token", - "symbol": "xckint", - "currencyId": "175400718394635817552109270754364440562", - "precision": 12, - "priceId": "kintsugi", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", - "color": "FFFFFF" - }, - { - "id": "1854feda-ca0c-4e82-9076-af2c7978f042", - "type": "assets", - "name": "karura", - "symbol": "xckar", - "currencyId": "10810581592933651521121702237638664357", - "precision": 12, - "priceId": "karura", - "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/KAR.svg", - "color": "FFFFFF" - } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "5b1a0b8f-74c9-4073-b288-0d2ca16dfb77", - "symbol": "MOVR" - }, - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", - "symbol": "AUSD" - }, - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - } - ], - "availableDestinations": [ - { - "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", - "assets": [ - { - "id": "5b1a0b8f-74c9-4073-b288-0d2ca16dfb77", - "symbol": "MOVR" - }, - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", - "assets": [ - { - "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", - "symbol": "AUSD" - } - ] - }, - { - "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", - "assets": [ - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - } - ] - } - ] + }, + "nodes": [ + { + "url": "wss://api-kusama.dwellir.com", + "name": "Dwellir node" }, - "nodes": [{ - "url": "wss://wss.moonriver.moonbeam.network", - "name": "PureStake node" - }, - { - "url": "wss://moonriver.unitedbloc.com", - "name": "UnitedBloc node" - }, - { - "url": "wss://wss.api.moonriver.moonbeam.network", - "name": "Moonbeam Foundation node" - }, - { - "url": "wss://moonriver.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Moonriver.svg", - "addressPrefix": 1285, - "options": [ - "ethereumBased" - ] - }, - { - "disabled": false, - "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2007", - "name": "Shiden", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-shiden/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://shiden.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "6dbb524b-a2d7-4c32-b0f9-6825b3e7d2c4", - "name": "shiden network", - "symbol": "sdn", - "precision": 18, - "priceId": "shiden", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/SDN.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }, - { - "id": "52509327-116a-4365-bf7d-03cecf7868bc", - "type": "assets", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "340282366920938463463374607431768211455", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF" - }, - { - "id": "aa494fdc-3411-438c-b69b-a53e36f062a1", - "type": "assets", - "name": "phala token", - "symbol": "pha", - "precision": 12, - "currencyId": "18446744073709551623", - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F" - } - ], - "nodes": [{ - "url": "wss://rpc.shiden.astar.network", - "name": "StakeTechnologies node" - }, - { - "url": "wss://shiden.public.blastapi.io", - "name": "Blast node" - }, - { - "url": "wss://shiden-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://shiden.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Shiden.svg", - "addressPrefix": 5 - }, - { - "disabled": false, - "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2001", - "name": "Bifrost", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-Bifrost/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://bifrost-kusama.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "isUtility": true, - "id": "559e80d6-fb38-4dd5-bbd6-c0a7c2f600e1", - "name": "bifrost native coin", - "symbol": "bnc", - "precision": 12, - "priceId": "bifrost-native-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", - "color": "FFFFFF", - "type": "normal" - }, - { - "id": "922c191c-4cb8-407e-8b81-2cfc52170c3b", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "existentialDeposit": "100000000", - "type": "ormlAsset" - }, - { - "id": "75206b90-456e-48ae-a118-0bf9ab861115", - "name": "rmrk", - "symbol": "rmrk", - "precision": 10, - "priceId": "rmrk", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", - "color": "392B73", - "existentialDeposit": "10000", - "type": "ormlAsset" - }, - { - "id": "5c31c8ae-c045-43f2-849a-88a17ee7b302", - "name": "karura", - "symbol": "kar", - "precision": 12, - "priceId": "karura", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", - "color": "FFFFFF", - "existentialDeposit": "100000000", - "type": "ormlAsset" - }, - { - "id": "07f2a7fc-9b0a-4583-9267-57b68ecd4350", - "name": "voucher ksm", - "symbol": "vksm", - "currencyId": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VKSM.svg", - "color": "FFFFFF", - "existentialDeposit": "100000000", - "isNative": true, - "type": "vToken" - }, - { - "id": "dd0efecb-51a1-481d-a949-80cb7663c105", - "name": "voucher slot ksm", - "symbol": "vsksm", - "currencyId": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VSKSM.svg", - "color": "FFFFFF", - "existentialDeposit": "100000000", - "type": "vsToken", - "isNative": true - }, - { - "id": "94d5e2d9-c2d7-40e6-8893-5832a784b2ea", - "name": "acala dollar", - "symbol": "ausd", - "currencyId": "kusd", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", - "color": "E40C5B", - "priceId": "acala-dollar", - "existentialDeposit": "100000000", - "type": "stable" - }, - { - "id": "2bd78b68-8bd7-4859-928a-1a7b8b57a734", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "priceId": "tether", - "existentialDeposit": "1000", - "type": "foreignAsset", - "currencyId": "0" - }, - { - "id": "e6f78e19-80c7-4e8c-8499-91e03df504a8", - "name": "moonriver", - "symbol": "movr", - "precision": 18, - "priceId": "moonriver", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", - "color": "FFFFFF", - "type": "ormlAsset", - "existentialDeposit": "1000000000000" - }, - { - "id": "fe2c5a55-aff7-4d00-af5c-e90082a5a11e", - "name": "zenlink network", - "symbol": "zlk", - "precision": 18, - "priceId": "zenlink-network-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZLK.svg", - "color": "FFFFFF", - "existentialDeposit": "1000000000000", - "type": "ormlAsset", - "isNative": true - }, - { - "id": "33746c72-6806-47d0-a1c4-7b433df862f1", - "name": "phala", - "symbol": "pha", - "precision": 12, - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F", - "type": "ormlAsset", - "existentialDeposit": "40000000000" - } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", - "symbol": "BNC" - }, - { - "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", - "symbol": "MOVR" - }, - { - "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", - "symbol": "AUSD" - }, - { - "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", - "symbol": "USDt" - } - ], - "availableDestinations": [ - { - "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", - "assets": [ - { - "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", - "symbol": "USDt" - } - ] - }, - { - "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", - "symbol": "BNC" - }, - { - "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", - "symbol": "AUSD" - } - ] - }, - { - "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", - "symbol": "BNC" - }, - { - "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", - "symbol": "MOVR" - } - ] - } - ] + { + "url": "wss://kusama-rpc.polkadot.io", + "name": "Parity node" }, - "nodes": [{ - "url": "wss://bifrost-rpc.liebi.com/ws", - "name": "Liebi node" - }, - { - "url": "wss://bifrost-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://bifrost-parachain.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bifrost.svg", - "addressPrefix": 6, - "types": { - "url": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/type_registry/bifrost.json", - "overridesCommon": true - } - }, - { - "disabled": false, - "chainId": "d43540ba6d3eb4897c28a77d48cb5b729fea37603cbbfc7a86a73b72adb3be8d", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2004", - "name": "Khala", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-khala/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://khala.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "3feb7de3-e881-4c04-a4de-1b9091dbc324", - "name": "phala", - "symbol": "pha", - "precision": 12, - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F", - "isUtility": true, - "type": "normal" - }, - { - "id": "34d7fc9d-d616-4c3e-9398-060b18220a55", - "type": "assets", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "0", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF" - } - ], - "nodes": [{ - "url": "wss://khala-api.phala.network/ws", - "name": "Phala node" - }, - { - "url": "wss://khala-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://khala.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Khala.svg", - "addressPrefix": 30 - }, - { - "disabled": false, - "chainId": "411f057b9107718c9624d6aa4a3f23c1653898297f3d4d529d9bb6511a39dd21", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2086", - "name": "KILT Spiritnet", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://spiritnet.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "f0d5cadc-4999-45f3-8160-15243f2909d3", - "name": "kilt protocol", - "symbol": "kilt", - "precision": 15, - "priceId": "kilt-protocol", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KILT.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://spiritnet.kilt.io/", - "name": "KILT Protocol node" - }, - { - "url": "wss://kilt-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://spiritnet.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/kilt.svg", - "addressPrefix": 38 - }, - { - "disabled": false, - "chainId": "4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2084", - "name": "Calamari", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-calamari/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://calamari.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "39d4080e-e2ab-43f3-bcc2-2fa281d9290c", - "name": "calamari network", - "symbol": "kma", - "precision": 12, - "priceId": "calamari-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KMA.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }, - { - "id": "bd018ed9-069b-4d51-b5db-56b70bb5434c", - "type": "assets", - "name": "moonriver", - "symbol": "movr", - "precision": 18, - "currencyId": "11", - "priceId": "moonriver", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", - "color": "FFFFFF" - }, - { - "id": "003bb609-cae4-4cf0-afad-4230ca17873b", - "type": "assets", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "12", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF" - }, - { - "id": "6094eb13-6084-4909-9232-31b6088ad4cc", - "type": "assets", - "name": "karura", - "symbol": "kar", - "precision": 12, - "currencyId": "8", - "priceId": "karura", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", - "color": "FFFFFF" - } - ], - "nodes": [{ - "url": "wss://calamari.systems", - "name": "Manta Network node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Calamari.svg", - "addressPrefix": 78 - }, - { - "disabled": false, - "chainId": "cd4d732201ebe5d6b014edda071c4203e16867305332301dc8d092044b28e554", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2095", - "name": "Quartz", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-quartz" - } - }, - "assets": [{ - "id": "d0f2e718-99ee-4bc2-8dc2-1ce07f21c5ac", - "name": "quartz", - "symbol": "qtz", - "precision": 18, - "priceId": "quartz", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/QTZ.svg", - "color": "EC5B6D", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://eu-ws-quartz.unique.network", - "name": "Unique Europe node" - }, - { - "url": "wss://ws-quartz.unique.network", - "name": "Geo Load Balancer node" - }, - { - "url": "wss://asia-ws-quartz.unique.network", - "name": "Unique Asia node" - }, - { - "url": "wss://quartz.unique.network", - "name": "Unique node" - }, - { - "url": "wss://us-ws-quartz.unique.network", - "name": "Unique America node" - }, - { - "url": "wss://quartz.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/quartz.svg", - "addressPrefix": 255 - }, - { - "disabled": false, - "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2085", - "name": "Parallel Heiko", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-parallel_heiko" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://parallel-heiko.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "02b54158-4f4f-4077-b6a7-7c9edd75a1ca", - "name": "heiko finance", - "symbol": "hko", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HKO.svg", - "color": "CC3474", - "isUtility": true, - "type": "normal" - }, - { - "id": "382a7dd4-5444-4797-8cec-d921000144ed", - "type": "assets", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "100", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF" - }, - { - "id": "7bd1b0ca-a4a7-4b67-8f8b-cb19e2d3fab8", - "type": "assets", - "name": "moonriver", - "symbol": "movr", - "precision": 18, - "currencyId": "113", - "priceId": "moonriver", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", - "color": "FFFFFF" - }, - { - "id": "b48b21fb-eb3f-4296-9978-8dc42e42f384", - "type": "assets", - "name": "karura", - "symbol": "kar", - "precision": 12, - "currencyId": "107", - "priceId": "karura", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", - "color": "FFFFFF" - }, - { - "id": "535ab9cf-fa62-4e19-ab39-02e5584ef7af", - "type": "assets", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "102", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - }, - { - "id": "7a97a272-c767-4b45-b055-4c521168558c", - "type": "assets", - "name": "kintsugi native token", - "symbol": "kint", - "precision": 12, - "currencyId": "119", - "priceId": "kintsugi", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", - "color": "FFFFFF" - }, - { - "id": "5959efca-47b7-4ec4-a009-5870e2231d52", - "type": "assets", - "name": "kintsugi ibtc", - "symbol": "kbtc", - "precision": 8, - "currencyId": "121", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", - "color": "FFFFFF", - "priceId": "kintsugi-btc" - }, - { - "id": "d0262105-2c85-4167-bde0-50c7cdfe4942", - "type": "assets", - "name": "phala token", - "symbol": "pha", - "precision": 12, - "currencyId": "115", - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F" - } - ], - "nodes": [{ - "url": "wss://heiko-rpc.parallel.fi", - "name": "Parallel node" - }, - { - "url": "wss://parallel-heiko.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/parallelfinance.svg", - "addressPrefix": 110 - }, - { - "disabled": false, - "chainId": "6811a339673c9daa897944dcdac99c6e2939cc88245ed21951a0a3c9a2be75bc", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2087", - "name": "Picasso", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-picasso" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://picasso.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "d24959cd-72fb-4155-9880-86d42b1d1cbb", - "name": "picasso", - "symbol": "pica", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PICA.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://picasso-rpc.composable.finance", - "name": "Composable Finance node" - }, - { - "url": "wss://rpc.composablenodes.tech", - "name": "Composable node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/picasso.svg", - "addressPrefix": 49 - }, - { - "disabled": false, - "chainId": "aa3876c1dc8a1afcc2e9a685a49ff7704cfd36ad8c90bf2702b9d1b00cc40011", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2088", - "name": "Altair", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-altair" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://altair.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "56c7f785-23d6-4199-accf-846be58011e6", - "name": "altair", - "symbol": "air", - "precision": 18, - "priceId": "altair", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AIR.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://fullnode.altair.centrifuge.io", - "name": "Centrifuge node" - }, - { - "url": "wss://altair.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Altair.svg", - "addressPrefix": 136 - }, - { - "disabled": false, - "chainId": "f22b7850cdd5a7657bbfd90ac86441275bbc57ace3d2698a740c7b0ec4de5ec3", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2096", - "name": "Bit.Country Pioneer", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-bit_country_pioneer" - } - }, - "assets": [{ - "id": "d3b93409-97b1-42e0-8dbc-99d3fb93fc10", - "name": "metaverse.network pioneer", - "symbol": "neer", - "precision": 18, - "priceId": "metaverse-network-pioneer", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NEER.svg", - "color": "B8FBFE", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://pioneer.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + { + "url": "wss://rpc-kusama.luckyfriday.io", + "name": "LuckyFriday node" + }, + { + "url": "wss://kusama.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/bitcountry.svg", - "addressPrefix": 268 - }, - { - "disabled": false, - "chainId": "5c7bd13edf349b33eb175ffae85210299e324d852916336027391536e686f267", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2002", - "name": "Clover", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-clover" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://clv.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "4b7ab596-bff4-4fd8-9c60-24ef1cbe9584", - "name": "clover finance", - "symbol": "clv", - "precision": 18, - "priceId": "clover-finance", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CLV.svg", - "color": "73D4FD", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc-para.clover.finance", - "name": "Clover node" - }, - { - "url": "wss://clover.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/clover.svg", - "addressPrefix": 128 - }, - { - "disabled": false, - "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2006", - "name": "Astar", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-astar/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://astar.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "5ab1e8d-81ed-4130-9d29-55b549cc6bab", - "name": "astar", - "symbol": "astr", - "precision": 18, - "priceId": "astar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", - "color": "0AE2FF", - "isUtility": true, - "type": "normal" - }, - { - "id": "d898014a-5c0f-49a1-b563-51017e9dce38", - "type": "assets", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "currencyId": "340282366920938463463374607431768211455", - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066" - }, - { - "id": "af1fc6a0-505c-43d7-b214-d64e4414e2e1", - "type": "assets", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "4294969280", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - }, - { - "id": "3e0a1785-2faa-43bf-8af6-d02c96d6b30e", - "type": "assets", - "name": "equilibrium", - "symbol": "eq", - "precision": 9, - "currencyId": "18446744073709551628", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQ.svg", - "color": "5176E6" - }, - { - "id": "39fb54c8-52c1-4cf7-8412-24ac38b63eb4", - "type": "assets", - "name": "phala token", - "symbol": "pha", - "precision": 12, - "currencyId": "18446744073709551622", - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F" - }, - { - "id": "ee6b0152-326f-4e15-a62f-ac02d357d840", - "type": "assets", - "name": "moonbeam", - "symbol": "glmr", - "precision": 18, - "currencyId": "18446744073709551619", - "priceId": "moonbeam", - "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF" - } - ], - "nodes": [{ - "url": "wss://rpc.astar.network", - "name": "Astar node" - }, - { - "url": "wss://astar.public.blastapi.io", - "name": "Blast node" - }, - { - "url": "wss://astar-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://astar.public.curie.radiumblock.co/ws", - "name": "RadiumBlock node" - }, - { - "url": "wss://astar.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/astar.svg", - "addressPrefix": 5, - "options": [ - "tipRequired" - ] + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kusama.svg", + "addressPrefix": 2, + "options": [ + "poolStaking" + ] }, { - "disabled": false, - "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2012", - "name": "Parallel", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-parallel" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://parallel.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "f78aa731-a33c-4d8d-a3bb-74835064366b", - "name": "parallel finance", - "symbol": "para", - "precision": 12, - "priceId": "parallel-finance", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PARA.svg", - "color": "4C19E7", - "isUtility": true, - "type": "normal" - }, - { - "id": "769ffb89-fd2f-4add-94a1-d2f9f716c143", - "type": "assets", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "currencyId": "101", - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066" - }, - { - "id": "1d850850-a2fb-4728-8dfc-13679c470017", - "type": "assets", - "name": "moonbeam", - "symbol": "glmr", - "precision": 18, - "currencyId": "114", - "priceId": "moonbeam", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF" - }, - { - "id": "5e745a28-9827-4d7f-9df9-e2cfbe4d11a5", - "type": "assets", - "name": "interlay", - "symbol": "intr", - "precision": 10, - "currencyId": "120", - "priceId": "interlay", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", - "color": "FFFFFF" - }, - { - "id": "ba44778d-f7a2-4adb-91f9-efd9a46468a7", - "type": "assets", - "name": "liquid crowdloan dot", - "symbol": "lcdot", - "precision": 10, - "currencyId": "106", - "priceId": "liquid-crowdloan-dot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LCDOT.svg", - "color": "FF0066" - }, - { - "id": "01adcd11-256d-4ac2-966e-9bb87ed5f769", - "type": "assets", - "name": "acala", - "symbol": "aca", - "precision": 12, - "currencyId": "108", - "priceId": "acala", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", - "color": "FFFFFF" - }, - { - "id": "bf70329b-421a-4b68-87eb-ef85e0d0044e", - "type": "assets", - "name": "liquid dot", - "symbol": "ldot", - "precision": 10, - "currencyId": "110", - "priceId": "liquid-staking-dot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LDOT.svg", - "color": "FF0066" - }, - { - "id": "b4dc02ce-3e71-4d92-8e1a-9599a75d20e4", - "type": "assets", - "name": "inter ibtc", - "symbol": "ibtc", - "precision": 8, - "currencyId": "122", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", - "color": "F2AE7F" - }, - { - "id": "c5453123-c85e-4226-b2a8-fbf0deb88e9f", - "type": "assets", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "102", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - }, - { - "id": "e52c5825-3076-4277-84e2-8b45f778d981", - "type": "assets", - "name": "cdot-6/13", - "symbol": "cdot-6/13", - "precision": 10, - "currencyId": "200060013", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/%D1%81DOT.svg", - "color": "FF0066" - }, - { - "id": "1236185c-fa70-481e-befa-deda855054df", - "type": "assets", - "name": "cdot-7/14", - "symbol": "cdot-7/14", - "precision": 10, - "currencyId": "200070014", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/%D1%81DOT.svg", - "color": "FF0066" - }, - { - "id": "afe2d55d-2fa7-4e7b-ab2c-c4c4aea15a87", - "type": "assets", - "name": "cdot-8/15", - "symbol": "cdot-8/15", - "precision": 10, - "currencyId": "200080015", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/%D1%81DOT.svg", - "color": "FF0066" - }, - { - "id": "d6d35753-a3dc-4987-8995-2afbe0a65606", - "type": "assets", - "name": "phala token", - "symbol": "pha", - "precision": 12, - "currencyId": "115", - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F" - } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - }, - { - "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", - "symbol": "GLMR" - }, - { - "id": "bc05b313-67f2-454d-bdfa-78a4feb82259", - "symbol": "lcDOT" - }, - { - "id": "0c7df36b-4ebd-4e66-a78b-77fa08b54c54", - "symbol": "ACA" - }, - { - "id": "a3ecbda6-80b6-492f-a656-5ab0bdcc9d1f", - "symbol": "LDOT" - }, - { - "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", - "symbol": "USDt" - } + "disabled": false, + "chainId": "e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e", + "rank": 108, + "name": "Westend", + "ecosystem": "substrate", + "externalApi": { + "crowdloans": { + "type": "github", + "url": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/crowdloan/westend.json" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" ], - "availableDestinations": [ - { - "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, - { - "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", - "assets": [ - { - "id": "bc05b313-67f2-454d-bdfa-78a4feb82259", - "symbol": "lcDOT" - }, - { - "id": "0c7df36b-4ebd-4e66-a78b-77fa08b54c54", - "symbol": "ACA" - }, - { - "id": "a3ecbda6-80b6-492f-a656-5ab0bdcc9d1f", - "symbol": "LDOT" - } - ] - }, - { - "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", - "assets": [ - { - "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", - "symbol": "GLMR" - } - ] - }, - { - "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", - "assets": [ - { - "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", - "symbol": "USDt" - } - ] - } - - ] + "url": "https://westend.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "staking": "relaychain", + "isUtility": true, + "id": "a3868e1b-922e-42d4-b73e-b41712f0843c", + "name": "westend", + "symbol": "wnd", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/WND.svg", + "color": "FFFFFF", + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://westend-rpc.polkadot.io", + "name": "Parity node" }, - "nodes": [ - { - "url": "wss://parallel-rpc.dwellir.com", - "name": "Dwellir node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/parallelfinance.svg", - "addressPrefix": 172 - }, - { - "disabled": false, - "chainId": "a85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2090", - "name": "Basilisk", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-basilisk" - } - }, - "assets": [{ - "id": "7dae28e2-9f5e-49ff-9140-aa750a9579ea", - "name": "basilisk", - "symbol": "bsx", - "precision": 12, - "priceId": "basilisk", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BSX.svg", - "color": "87FCB6", - "isUtility": true, - "type": "normal" - }, - { - "id": "f7cafffc-c8d9-4441-8d52-84c17082e514", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "1", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "type": "assetId", - "existentialDeposit": "100000000" - }, - { - "id": "125a05b1-1e0b-411d-8628-ffd3b84ed4c8", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "14", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "type": "assetId", - "existentialDeposit": "10000" - } - ], - "nodes": [{ - "url": "wss://rpc.basilisk.cloud", - "name": "Basilisk node" - }, - { - "url": "wss://basilisk-rpc.dwellir.com", - "name": "Dwellir node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Basilisk.svg", - "addressPrefix": 10041 + { + "url": "wss://westend-rpc.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Westend.svg", + "addressPrefix": 42, + "options": [ + "testnet", + "crowdloans", + "poolStaking" + ] }, { - "disabled": false, - "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "rank": 12, - "paraId": "2004", - "name": "Moonbeam", - "externalApi": { - "staking": { - "type": "subsquid", - "url": "https://squid.subsquid.io/fearless-x-moonbeam/v/v2/graphql" - }, - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-moonbeam/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://moonbeam.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "e40c8161-9fc9-4749-a3b8-ed1c0ad16475", - "name": "moonbeam", - "symbol": "glmr", - "precision": 18, - "priceId": "moonbeam", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF", - "staking": "parachain", - "isUtility": true, - "type": "normal" - }, - { - "id": "7e4e064e-2b23-4eb5-96db-e6491c4031e5", - "type": "assets", - "name": "polkadot", - "symbol": "xcdot", - "precision": 10, - "currencyId": "42259045809535163221576417993425387648", - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066" - }, - { - "id": "311e3073-1bfb-40de-b601-20278e457577", - "type": "assets", - "name": "acala dollar", - "symbol": "xcausd", - "precision": 12, - "currencyId": "110021739665376159354538090254163045594", - "priceId": "acala-dollar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", - "color": "E40C5B" - }, - { - "id": "9539da0e-3610-406a-b1b9-c811b6508a17", - "type": "assets", - "name": "acala", - "symbol": "xcaca", - "precision": 12, - "currencyId": "224821240862170613278369189818311486111", - "priceId": "acala", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", - "color": "FFFFFF" - }, - { - "id": "1509c799-b30f-4fde-934e-791f1c88f3d1", - "type": "assets", - "name": "interlay", - "symbol": "xcintr", - "precision": 10, - "currencyId": "101170542313601871197860408087030232491", - "priceId": "interlay", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", - "color": "FFFFFF" - }, - { - "id": "9e738e1a-81be-4ac2-8de0-b56e565699ce", - "type": "assets", - "name": "astar", - "symbol": "xcastr", - "precision": 18, - "currencyId": "224077081838586484055667086558292981199", - "priceId": "astar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", - "color": "0AE2FF" - }, - { - "id": "5d4c759c-0f38-4c63-bdde-9359bdb0fa24", - "type": "assets", - "name": "tether usd", - "symbol": "xcusdt", - "precision": 6, - "currencyId": "311091173110107856861649819128533077277", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - }, - { - "id": "d69e3203-d914-4c70-8f38-ed66ea5d94ea", - "type": "assets", - "name": "equilibrium token", - "symbol": "xceq", - "precision": 9, - "currencyId": "190590555344745888270686124937537713878", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQ.svg", - "color": "5176E6" - }, - { - "id": "6cdc81d9-28a4-4b3c-8358-78a93f207ce7", - "type": "assets", - "name": "equilibrium dollar protocol", - "symbol": "xceqd", - "precision": 9, - "currencyId": "187224307232923873519830480073807488153", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQD.svg", - "color": "4D8BED" - }, - { - "id": "f68a9550-7d4c-4358-81bc-61c5ea233f20", - "type": "assets", - "name": "phala token", - "symbol": "xcpha", - "precision": 12, - "currencyId": "132685552157663328694213725410064821485", - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F" - }, - { - "id": "6fed1ff5-3aa5-4d94-b07a-22dfc0770fc0", - "type": "assets", - "name": "pink", - "symbol": "xcpink", - "precision": 10, - "currencyId": "64174511183114006009298114091987195453", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PINK.svg", - "color": "FF0066" - } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - }, - { - "id": "31b03360-5c73-4733-a72d-65daf4600315", - "symbol": "GLMR" - }, - { - "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", - "symbol": "aUSD" - }, - { - "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", - "symbol": "ACA" - }, - { - "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", - "symbol": "USDt" - } - ], - "availableDestinations": [{ - "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, - { - "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", - "assets": [ - { - "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", - "symbol": "aUSD" - }, - { - "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", - "symbol": "ACA" - }, - { - "id": "31b03360-5c73-4733-a72d-65daf4600315", - "symbol": "GLMR" - } - ] - }, - { - "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", - "assets": [ - { - "id": "31b03360-5c73-4733-a72d-65daf4600315", - "symbol": "GLMR" - } - ] - }, - { - "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", - "assets": [ - { - "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", - "symbol": "USDt" - } - ] - } - ] + "disabled": false, + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "1000", + "name": "Kusama AssetHub", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-statemine-api.squid.tachi.soramitsu.co.jp/graphql" }, - "nodes": [{ - "url": "wss://wss.api.moonbeam.network", - "name": "Moonbeam Foundation node" - }, - { - "url": "wss://moonbeam.unitedbloc.com", - "name": "UnitedBloc node" - }, - { - "url": "wss://moonbeam.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - }, - { - "url": "wss://1rpc.io/glmr", - "name": "Automata 1RPC node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Moonbeam.svg", - "addressPrefix": 1284, - "options": [ - "ethereumBased" - ] - }, - { - "disabled": false, - "chainId": "91bc6e169807aaa54802737e1c504b2577d4fafedd5a02c10293b1cd60e39527", - "rank": 112, - "name": "Moonbase Alpha", - "externalApi": { - "staking": { - "type": "subsquid", - "url": "https://squid.subsquid.io/moonbase-x-fearless/v/v1/graphql" - }, - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-moonbase_alpha" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://moonbase.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "caf10b57-bb4d-437b-81be-d2e1a6acdcc5", - "name": "moonbase alpha", - "symbol": "dev", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF", - "staking": "parachain", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://wss.api.moonbase.moonbeam.network", - "name": "Moonbeam Network node" - }, - { - "url": "wss://moonbase.unitedbloc.com", - "name": "UnitedBloc node" - }, - { - "url": "wss://moonbeam-alpha.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Moonbeam.svg", - "addressPrefix": 1287, - "options": [ - "testnet", - "ethereumBased" + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://assethub-kusama.subscan.io/{type}/{value}" + } ] - }, - { - "disabled": false, - "chainId": "9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2092", - "name": "Kintsugi", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-kintsugi" - } - }, - "assets": [{ - "id": "f5d1db12-0a68-4897-903d-51a887daa1db", - "name": "kintsugi", - "symbol": "kint", - "precision": 12, - "priceId": "kintsugi", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", - "color": "FFFFFF", - "type": "ormlChain", - "isUtility": true - }, - { - "id": "a6761186-60ba-4ea8-bec1-2db08a420301", - "type": "ormlChain", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF" - }, - { - "id": "80662ad9-8920-43ae-859a-33d97e87f74e", - "type": "ormlChain", - "name": "kintsugi ibtc", - "symbol": "kbtc", - "precision": 8, - "priceId": "kintsugi-btc", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", - "color": "FFFFFF" - } - ], - "nodes": [{ - "url": "wss://api-kusama.interlay.io/parachain", - "name": "Kintsugi Labs node" - }, - { - "url": "wss://kintsugi.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/kintsugi.svg", - "addressPrefix": 2092, - "iosMinAppVersion": "2.0.7" - }, - { - "disabled": false, - "chainId": "9de765698374eb576968c8a764168893fb277e65ad3ddafcfe2c49593fc6d663", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2024", - "name": "Genshiro", - "assets": [{ - "id": "e207bcef-ab90-4df4-852f-566c309d778e", - "name": "genshiro", - "symbol": "gens", - "precision": 9, - "priceId": "genshiro", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GENS.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://node.ksm.genshiro.io", - "name": "Genshiro node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Genshiro.svg", - "addressPrefix": 67 - }, - { - "disabled": false, - "chainId": "631ccc82a078481584041656af292834e1ae6daab61d2875b4dd0c14bb9b17bc", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2048", - "name": "Robonomics", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://robonomics.subscan.io/{type}/{value}" - }], - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-robonomics" - } - }, - "assets": [{ - "id": "ca39e03e-dde3-41ac-b1f4-a3d20202b79e", - "name": "robonomics network", - "symbol": "xrt", - "precision": 9, - "priceId": "robonomics-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XRT.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }, - { - "id": "b52b937a-f22b-4bab-a601-476aeeec4f2f", - "type": "assets", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "4294967295", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF" - } - ], - "nodes": [{ - "url": "wss://kusama.rpc.robonomics.network", - "name": "Airalab node" - }, - { - "url": "wss://robonomics.leemo.me", - "name": "Leemo node" - }, - { - "url": "wss://robonomics.0xsamsara.com", - "name": "Samsara node" - }, - { - "url": "wss://robonomics.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/robonomics.svg", - "addressPrefix": 32 - }, - { - "disabled": false, - "chainId": "4a12be580bb959937a1c7a61d5cf24428ed67fa571974b4007645d1886e7c89f", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2100", - "name": "Subsocial", - "assets": [{ - "id": "07f9e907-d099-4893-a67b-96cb2fe63049", - "name": "subsocial", - "symbol": "sub", - "precision": 10, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/SUB.svg", - "color": "AC2489", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://para.subsocial.network", - "name": "Dappforce node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/subsocial_new.svg", - "addressPrefix": 28 - }, - { - "disabled": false, - "chainId": "1bf2a2ecb4a868de66ea8610f2ce7c8c43706561b6476031315f6640fe38e060", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2101", - "name": "Zeitgeist", - "assets": [{ - "id": "2246fe14-4ec4-460c-8d92-e15bd337f8af", - "name": "zeitgeist", - "symbol": "ztg", - "precision": 10, - "priceId": "zeitgeist", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZTG.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://zeitgeist.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - }, - { - "url": "wss://zeitgeist-rpc.dwellir.com", - "name": "Dwellir node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/zeitgeist.svg", - "addressPrefix": 73 - }, - { - "disabled": false, - "chainId": "335369975fced3fc22e23498da306a712f4fd964c957364d53c49cea9db8bc2f", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2021", - "name": "Efinity", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-efinity/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://efinity.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "80b7c347-161d-40a9-aed6-b2f202e3577e", - "name": "efinity", - "symbol": "efi", - "precision": 18, - "priceId": "efinity", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EFI.svg", - "color": "516CD4", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc.efinity.io", - "name": "Efinity node" - }, - { - "url": "wss://efinity-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://efinity.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/efinity.svg", - "addressPrefix": 1110 - }, - { - "disabled": false, - "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2034", - "name": "HydraDX", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-hydradx/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://hydradx.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "fce79b6c-e071-4271-837e-6ec87a719390", - "name": "hydradx", - "symbol": "hdx", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HDX.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }, - { - "id": "4697396b-37c4-426f-a36a-fda1935f365a", - "type": "assetId", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "currencyId": "5", - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "existentialDeposit": "17540000" - }, - { - "id": "0de05a52-3686-486c-a80e-f7feb6e228d7", - "type": "assetId", - "name": "inter ibtc", - "symbol": "ibtc", - "precision": 8, - "currencyId": "11", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", - "color": "F2AE7F", - "existentialDeposit": "36" - }, - { - "id": "880664d6-71f6-473e-95ba-4cc697429578", - "type": "assetId", - "name": "moonbeam", - "symbol": "glmr", - "precision": 18, - "currencyId": "16", - "priceId": "moonbeam", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF", - "existentialDeposit": "34854864344868000" - }, - { - "id": "53bd7f6e-b8eb-468f-a2ec-2bf347e702a7", - "type": "assetId", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "10", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "existentialDeposit": "10000" - } - ], - "nodes": [{ - "url": "wss://rpc.hydradx.cloud", - "name": "Galactic Council node" - }, - { - "url": "wss://hydradx-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://hydradx.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - }, - { - "url": "wss://rpc-lb.data6.zp-labs.net:8443/hydradx/ws/?token=2ZGuGivPJJAxXiT1hR1Yg2MXGjMrhEBYFjgbdPi", - "name": "ZeePrime node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/hydradx.svg", - "addressPrefix": 63 - }, - { - "disabled": false, - "chainId": "b3db41421702df9a7fcac62b53ffeac85f7853cc4e689e0b93aeb3db18c09d82", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2031", - "name": "Centrifuge", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-centrifuge" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://centrifuge.subscan.io//{type}/{value}" - }] - }, - "assets": [{ - "id": "7b1963a6-11f1-461c-a9f1-83d82a54b7ee", - "name": "centrifuge", - "symbol": "cfg", - "precision": 18, - "priceId": "centrifuge", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CFG.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://fullnode.parachain.centrifuge.io", - "name": "Centrufge node" - }, - { - "url": "wss://centrifuge-parachain.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/centrifuge.svg", - "addressPrefix": 36 - }, - { - "disabled": false, - "chainId": "97da7ede98d7bad4e36b4d734b6055425a3be036da2a332ea5a7037656427a21", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2026", - "name": "Nodle Parachain", - "assets": [{ - "id": "e0e1107-e323-43aa-bb93-d7618d2c8cf5", - "name": "nodle network", - "symbol": "nodl", - "precision": 11, - "priceId": "nodle-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NODL.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://eden-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://nodle-parachain.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/nodle.svg", - "addressPrefix": 37 - }, - { - "disabled": false, - "chainId": "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2032", - "name": "Interlay", - "assets": [{ - "id": "7a77b6b0-f015-4ccc-a5bb-3456e17775dd", - "name": "interlay", - "symbol": "intr", - "precision": 10, - "priceId": "interlay", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", - "color": "FFFFFF", - "type": "ormlChain", - "isUtility": true - }, - { - "id": "2a45aeb9-f585-4f1b-9558-ee3aa186a809", - "type": "ormlChain", - "currencyId": "DOT", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066" - }, - { - "id": "fdb17d7c-ca72-4ed7-9fc8-728aa366c843", - "type": "ormlChain", - "name": "inter ibtc", - "symbol": "ibtc", - "precision": 8, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", - "color": "F2AE7F" - } - ], - "nodes": [{ - "url": "wss://api.interlay.io/parachain", - "name": "Kintsugi Labs node" - }, - { - "url": "wss://interlay.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/interlay.svg", - "addressPrefix": 2032 - }, - { - "disabled": false, - "chainId": "da5831fbc8570e3c6336d0d72b8c08f8738beefec812df21ef2afc2982ede09c", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2106", - "name": "Litmus", - "assets": [{ - "id": "15076759-6a5b-4cd6-b84c-e64842f094e5", - "name": "litentry", - "symbol": "lit", - "precision": 12, - "priceId": "litentry", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LIT_KSM.svg", - "color": "6530F0", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc.litmus-parachain.litentry.io", - "name": "Litentry node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/litmus.svg", - "addressPrefix": 131 - }, - { - "disabled": false, - "chainId": "3920bcb4960a1eef5580cd5367ff3f430eef052774f78468852f7b9cb39f8a3c", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2040", - "name": "Polkadex Main Network", - "assets": [{ - "id": "5502c9cb-14f7-4de8-a35d-71263dc3f78f", - "name": "polkadex", - "symbol": "pdex", - "precision": 12, - "priceId": "polkadex", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PDEX.svg", - "color": "D32D79", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://mainnet.polkadex.trade", - "name": "Polkadex Team node" - }, - { - "url": "wss://polkadex.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "Onfinalty node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/polkadex.svg", - "addressPrefix": 88 - }, - { - "disabled": true, - "chainId": "577d331ca43646f547cdaa07ad0aa387a383a93416764480665103081f3eaf14", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2115", - "name": "Dorafactory Network", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/Dora-Factory-x-Fearless-Wallet" - } - }, - "assets": [{ - "id": "c0d1efac-597d-4c56-b5ad-b683b8214ada", - "name": "dora factory", - "symbol": "dora", - "precision": 12, - "priceId": "dora-factory", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DORA.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://kusama.dorafactory.org", - "name": "DORA node" - } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/DoraFactory.svg", - "addressPrefix": 128 - }, - { - "disabled": false, - "chainId": "e7e0962324a3b86c83404dbea483f25fb5dab4c224791c81b756cfc948006174", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2043", - "name": "OriginTrail Parachain", - "assets": [{ - "id": "af5bf9f0-0009-4cf8-98ed-b988268c94f1", - "name": "origitrail parachain", - "symbol": "otp", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OTP.svg", - "color": "6344DF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://parachain-rpc.origin-trail.network", - "name": "TraceLabs node" - } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/OriginTrail.svg", - "addressPrefix": 101 - }, - { - "disabled": false, - "chainId": "84322d9cddbf35088f1e54e9a85c967a41a56a4f43445768125e61af166c7d31", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2037", - "name": "UNIQUE", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/Unique-x-Fearless-Wallet" - } - }, - "assets": [{ - "id": "57d05537-06a2-453b-ac87-d081aee65ec9", - "name": "unique network", - "symbol": "unq", - "precision": 18, - "priceId": "unique-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UNQ.svg", - "color": "65BAF9", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://ws.unique.network", - "name": "Geo Load Balancer node" - }, - { - "url": "wss://eu-ws.unique.network", - "name": "Unique Europe node" - }, - { - "url": "wss://asia-ws.unique.network", - "name": "Unique Asia node" - }, - { - "url": "wss://us-ws.unique.network", - "name": "Unique America node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/unique.svg", - "addressPrefix": 7391 - }, - { - "disabled": false, - "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2030", - "name": "Bifrost Polkadot", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://bifrost.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "dc9e23e8-f4bf-4864-9f2c-c2fbd4b03886", - "name": "bifrost native coin", - "symbol": "bnc", - "precision": 12, - "priceId": "bifrost-native-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }, - { - "id": "fd62d09e-cfae-44f8-81a0-bf99732643fc", - "type": "token2", - "currencyId": "0", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066" - }, - { - "id": "9ff3dbb1-5986-44b9-b247-db82ae3584a1", - "type": "token2", - "currencyId": "1", - "name": "moonbeam", - "symbol": "glmr", - "precision": 18, - "priceId": "moonbeam", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF" - }, - { - "id": "8dc39b21-04c9-4d1d-b9ec-8ea111052e77", - "type": "token2", - "currencyId": "2", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - } - ], - "nodes": [{ - "url": "wss://hk.p.bifrost-rpc.liebi.com/ws", - "name": "Liebi node" - }, - { - "url": "wss://bifrost-polkadot.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bifrost.svg", - "addressPrefix": 6 - }, - { - "disabled": false, - "chainId": "2fc8bb6ed7c0051bdcf4866c322ed32b6276572713607e3297ccf411b8f14aa9", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2013", - "name": "Litentry", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/Litentry-x-Fearless-Wallet" - } - }, - "assets": [{ - "id": "10de552c-20cb-4a86-9bf8-cf5827ca2f71", - "name": "litentry", - "symbol": "lit", - "precision": 12, - "priceId": "litentry", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LIT_DOT.svg", - "color": "02C86A", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc.litentry-parachain.litentry.io", - "name": "Litentry node" - }, - { - "url": "wss://litentry-rpc.dwellir.com", - "name": "Dwellir node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Litentry.svg", - "addressPrefix": 31 - }, - { - "disabled": false, - "chainId": "1bb969d85965e4bb5a651abbedf21a54b6b31a21f66b5401cc3f1e286268d736", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2035", - "name": "Phala", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-phala/graphql" - } - }, - "assets": [{ - "id": "50add3d2-baa6-4bf3-9995-e6532ad51726", - "name": "phala", - "symbol": "pha", - "precision": 12, - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://api.phala.network/ws", - "name": "Phala node" - }, - { - "url": "wss://phala-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://phala.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/phala.svg", - "addressPrefix": 30 - }, - { - "disabled": false, - "chainId": "daab8df776eb52ec604a5df5d388bb62a050a0aaec4556a64265b9d42755552d", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2019", - "name": "Composable Finance", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/Composable-Finance-X-Fearless-Wallet" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://composable.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "7f429a3f-4666-40a2-a506-58bfe01504c4", - "name": "composable finance", - "symbol": "layr", - "precision": 12, - "priceId": "composable-finance-layr", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LAYR.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc.composable.finance", - "name": "Composable node" - }, - { - "url": "wss://composable.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/composable.svg", - "addressPrefix": 49 - }, - { - "disabled": false, - "chainId": "35a06bfec2edf0ff4be89a6428ccd9ff5bd0167d618c5a0d4341f9600a458d14", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2119", - "name": "Bajun Kusama", - "assets": [{ - "id": "cbf84703-ba1d-4a39-ab5e-424756c91422", - "name": "bajun network", - "symbol": "baju", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BAJU.svg", - "color": "69A6DA", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc-parachain.bajun.network", - "name": "AjunaNetwork node" - }, - { - "url": "wss://bajun.public.curie.radiumblock.co/ws", - "name": "RadiumBlock node" - }, - { - "url": "wss://bajun.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bajun.svg", - "addressPrefix": 1337 - }, - { - "disabled": false, - "chainId": "feb426ca713f0f46c96465b8f039890370cf6bfd687c9076ea2843f58a6ae8a7", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2113", - "name": "Kabocha", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/Kabocha-x-Fearless-Wallet" - } - }, - "assets": [{ - "id": "898eb0a1-ede6-437a-97b7-e92407db985f", - "name": "kabocha", - "symbol": "kab", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAB.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://kabocha.jelliedowl.com", - "name": "JelliedOwl node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kabocha.svg", - "addressPrefix": 27 - }, - { - "disabled": true, - "chainId": "52149c30c1eb11460dce6c08b73df8d53bb93b4a15d0a2e7fd5dafe86a73c0da", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2107", - "name": "KICO", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/KICO-x-Fearless-Wallet" - } - }, - "assets": [{ - "id": "3a11badb-fe19-4cf4-9651-4b635a49bb7e", - "name": "kico", - "symbol": "kico", - "precision": 14, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KICO.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc.kico.dico.io", - "name": "DICO Foundation node" - }, - { - "url": "wss://rpc.api.kico.dico.io", - "name": "DICO Foundation 2 node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/KICO.svg", - "addressPrefix": 42 - }, - { - "disabled": true, - "chainId": "d611f22d291c5b7b69f1e105cca03352984c344c4421977efaa4cbdd1834e2aa", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2110", - "name": "Mangata Kusama Mainnet", - "assets": [{ - "id": "27ccf12f-3ae0-4c5e-b337-ee43b7c23928", - "name": "mangata x", - "symbol": "mgx", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MGX.svg", - "color": "10C5C5", - "isUtility": true, - "type": "normal" - }, - { - "id": "f63730eb-9fe2-41e9-9ec3-3cc4e6f02d0a", - "type": "ormlChain", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "4", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF" - }, - { - "id": "459f852b-665c-4743-8b2c-5bc5fc6abdda", - "type": "ormlChain", - "name": "bifrost native coin", - "symbol": "bnc", - "precision": 12, - "currencyId": "14", - "priceId": "bifrost-native-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", - "color": "FFFFFF" - }, - { - "id": "8ef9ca57-f2e4-4edb-9365-2805c7143537", - "type": "ormlChain", - "name": "voucher ksm", - "symbol": "vksm", - "precision": 12, - "currencyId": "15", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VKSM.svg", - "color": "FFFFFF" - }, - { - "id": "31aef057-d42a-419c-b0c4-cd61dc7e96c5", - "type": "ormlChain", - "name": "zenlink network", - "symbol": "zlk", - "precision": 18, - "currencyId": "26", - "priceId": "zenlink-network-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZLK.svg", - "color": "FFFFFF" - }, - { - "id": "3b46e22a-f819-4b2b-9dca-23dec1b66f82", - "type": "ormlChain", - "name": "rmrk", - "symbol": "rmrk", - "precision": 10, - "currencyId": "31", - "priceId": "rmrk", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", - "color": "392B73" - }, - { - "id": "2c28b884-dcbe-4653-91d2-934beefe4f2c", - "type": "ormlChain", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "30", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - }, - { - "id": "a4268819-dd67-45ba-a8f4-32277e3817b1", - "type": "ormlChain", - "name": "turing token", - "symbol": "tur", - "precision": 10, - "currencyId": "7", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUR.svg", - "color": "5DCBD0" - } - ], - "nodes": [{ - "url": "wss://prod-kusama-collator-01.mangatafinance.cloud", - "name": "Mangata node" - }, - { - "url": "wss://kusama-archive.mangata.online", - "name": "Mangata Archive node" - }, - { - "url": "wss://kusama-rpc.mangata.online", - "name": "Mangata RPC node" - }, - { - "url": "wss://mangata-x.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/MagnataX.svg", - "addressPrefix": 42 - }, - { - "disabled": true, - "chainId": "eacdd2d5b42de9769ccbb6e8d9013ab0d90ab105bf601d4aac53e874c145ec21", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2116", - "name": "DataHighway Tanganika", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/DataHighway-Tanganika-x-Fearless-Wallet" - } - }, - "assets": [{ - "id": "15df9971-2e6a-4619-a5ca-9ad571655287", - "name": "datahighway", - "symbol": "dhx", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DHX.svg", - "color": "6C179F", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://tanganika.datahighway.com", - "name": "DataHighway node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/DataHighway.svg", - "addressPrefix": 33 - }, - { - "disabled": false, - "chainId": "89d3ec46d2fb43ef5a9713833373d5ea666b092fa8fd68fbc34596036571b907", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2011", - "name": "Equilibrium", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://equilibrium.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "47d1f5c5-c43d-4082-b577-ba0af91cb1a6", - "name": "equilibrium", - "symbol": "eq", - "currencyId": "25969", - "precision": 9, - "existentialDeposit": "1000000000", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQ.svg", - "color": "5176E6", - "isUtility": true, - "type": "equilibrium" - }, - { - "id": "50bb6d02-1aad-4a94-b41c-2a15b4aee0e8", - "name": "equilibrium dollar protocol", - "symbol": "eqd", - "currencyId": "6648164", - "precision": 9, - "existentialDeposit": "1000000000", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQD.svg", - "color": "4D8BED", - "type": "equilibrium" - }, - { - "id": "6b21d130-7475-4f61-b893-799061fc05bf", - "name": "acala", - "symbol": "aca", - "currencyId": "6382433", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", - "color": "FFFFFF", - "type": "equilibrium" - }, - { - "id": "9c67711c-7f0c-45fa-b7fc-66b655ba17e1", - "name": "bnb", - "symbol": "bnb", - "currencyId": "6450786", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", - "color": "F3BA2F", - "type": "equilibrium" - }, - { - "id": "b62f4a0a-883f-496f-a797-fd2b24abe01b", - "name": "polkadot", - "symbol": "dot", - "currencyId": "6582132", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "type": "equilibrium" - }, - { - "id": "665c8d3d-a035-45fb-9c9c-7cfaf7da96c6", - "name": "astar", - "symbol": "astr", - "currencyId": "1634956402", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", - "color": "0AE2FF", - "type": "equilibrium" - }, - { - "id": "c98efbda-a452-4329-8199-fef32dc9307e", - "name": "acala dollar", - "symbol": "ausd", - "currencyId": "1635087204", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", - "color": "E40C5B", - "type": "equilibrium" - }, - { - "id": "793fc038-c134-4d58-af6d-cb7c1be5a4ea", - "name": "binance usd", - "symbol": "busd", - "currencyId": "1651864420", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", - "color": "F3BA2F", - "type": "equilibrium" - }, - { - "id": "e8c17b03-a94c-4fd3-a599-189a1b5e8e32", - "name": "moonbeam", - "symbol": "glmr", - "currencyId": "1735159154", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF", - "type": "equilibrium" - }, - { - "id": "a9d1b0b2-ad4e-4d86-88c5-72a8947099f0", - "name": "inter ibtc", - "symbol": "ibtc", - "currencyId": "1768060003", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", - "color": "F2AE7F", - "type": "equilibrium" - }, - { - "id": "502acf71-3c1f-4f1c-91d9-179fd2987a34", - "name": "interlay", - "symbol": "intr", - "currencyId": "1768846450", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", - "color": "FFFFFF", - "type": "equilibrium" - }, - { - "id": "f67bfaf7-e081-4355-abda-4f1faaeb3579", - "name": "parallel finance", - "symbol": "para", - "currencyId": "1885434465", - "precision": 9, - "priceId": "parallel-finance", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PARA.svg", - "color": "4C19E7", - "type": "equilibrium" - }, - { - "id": "c1ad2bb4-701a-4711-bacb-59259ff3d57d", - "name": "tether usd", - "symbol": "usdt", - "currencyId": "1970496628", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "type": "equilibrium" - }, - { - "id": "26a16776-71c9-450d-bfaf-df3a8cd6d277", - "name": "fluid xdot", - "symbol": "xdot", - "currencyId": "2019848052", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "type": "equilibrium" - }, - { - "id": "1eb9d66e-a92d-49c5-95fc-fd7a844fc66d", - "name": "equilibrium dot", - "symbol": "eqdot", - "currencyId": "435694104436", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/eqDOT.svg", - "color": "FFFFFF", - "type": "equilibrium" - } - ], - "nodes": [ - { - "url": "wss://equilibrium-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://node.pol.equilibrium.io", - "name": "Equilibrium node" - } + }, + "assets": [ + { + "id": "1e0c2ec6-935f-49bd-a854-5e12ee6c9f1b", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "purchaseProviders": [ + "ramp" + ], + "isUtility": true, + "type": "normal" + }, + { + "id": "27768227-8a9a-4443-a57d-6013c24f85e9", + "type": "assets", + "name": "tether usd", + "symbol": "usdt", + "precision": 4, + "currencyId": "11", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + }, + { + "id": "3dd9d403-49d2-46c2-a84a-334b31a6a6b7", + "type": "assets", + "name": "rmrk", + "symbol": "rmrk", + "precision": 10, + "currencyId": "8", + "priceId": "rmrk", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", + "color": "392B73", + "inferred": true, + "confidence": 0 + } + ], + "xcm": { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + }, + { + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" + }, + { + "id": "043a5aba-075a-4b14-91ae-f5bffe640477", + "symbol": "USDt" + } ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/equilibrium.svg", - "addressPrefix": 68, - "options": [ - "utilityFeePayment" + "availableDestinations": [ + { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + } + ] + }, + { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assets": [ + { + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" + } + ] + }, + { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assets": [ + { + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" + }, + { + "id": "043a5aba-075a-4b14-91ae-f5bffe640477", + "symbol": "USDt" + } + ] + }, + { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assets": [ + { + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" + }, + { + "id": "043a5aba-075a-4b14-91ae-f5bffe640477", + "symbol": "USDt" + } + ] + } ] + }, + "nodes": [ + { + "url": "wss://api-assethub-kusama.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://kusama-asset-hub-rpc.polkadot.io", + "name": "Parity node" + }, + { + "url": "wss://statemine.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + }, + { + "url": "wss://rpc-asset-hub-kusama.luckyfriday.io", + "name": "LuckyFriday node" + }, + { + "url": "wss://ksm-rpc.stakeworld.io/assethub", + "name": "Stakeworld node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Assethub.svg", + "addressPrefix": 2, + "options": [ + "utilityFeePayment" + ] }, { - "disabled": false, - "chainId": "724c168d8e86b78b831c641e2cc822b8d1bf99fa0b4b28fe59985cd6fd580215", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2039", - "name": "Integritee Shell", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-integritee" - } - }, - "assets": [{ - "id": "07c55d3a-b24e-410e-b9ca-7da0707fbd61", - "name": "integritee", - "symbol": "teer", - "precision": 12, - "priceId": "integritee", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TEER.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [ - { - "url": "wss://integritee-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://polkadot.api.integritee.network", - "name": "Integritee node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/integritee.svg", - "addressPrefix": 13 - }, - { - "disabled": false, - "chainId": "0f62b701fb12d02237a33b84818c11f621653d2b1614c777973babf4652b535d", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2114", - "name": "Turing Network", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-turing" - } - }, - "assets": [{ - "id": "148ce615-aea3-42fa-be45-5eb5606813b8", - "name": "turing token", - "symbol": "tur", - "precision": 10, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUR.svg", - "color": "5DCBD0", - "isUtility": true, - "type": "normal" - }, - { - "id": "e8774037-c4a5-42b5-87a4-cf946a60a406", - "type": "assetId", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "1", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "existentialDeposit": "100000000" - } - ], - "nodes": [{ - "url": "wss://rpc.turing.oak.tech", - "name": "OAK node" - }, - { - "url": "wss://turing-rpc.dwellir.com", - "name": "Dwellir node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/OAK.svg", - "addressPrefix": 51 - }, - { - "disabled": false, - "chainId": "7dd99936c1e9e6d1ce7d90eb6f33bea8393b4bf87677d675aa63c9cb3e8c5b5b", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "1001", - "name": "Encointer on Kusama", - "assets": [{ - "id": "1e0c2ec6-935f-49bd-a854-5e12ee6c9f1b", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "purchaseProviders": [ - "ramp" + "disabled": false, + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "1000", + "name": "Polkadot AssetHub", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid.subsquid.io/gs-main-statemint/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" ], - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://kusama.api.encointer.org", - "name": "Encointer Association node" - }, - { - "url": "wss://sys.ibp.network/encointer-kusama", - "name": "IBP-GeoDNS1 node" - }, - { - "url": "wss://sys.dotters.network/encointer-kusama", - "name": "IBP-GeoDNS2 node" - }, - { - "url": "wss://encointer.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/encointer.svg", - "addressPrefix": 2 - }, - { - "disabled": true, - "chainId": "0e06260459b4f9034aba0a75108c08ed73ea51d2763562749b1d3600986c4ea5", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2102", - "name": "Pichiu Network", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/Pichiu-x-Fearless-Wallet" - } - }, - "assets": [{ - "id": "5b196f7c-475a-493e-abbf-9f808d6fb863", - "name": "pichu token", - "symbol": "pchu", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PCHU.svg", - "color": "AE4071", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://kusama.kylin-node.co.uk", - "name": "Kylin Network node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/pichiu.svg", - "addressPrefix": 42 - }, - { - "disabled": false, - "chainId": "d42e9606a995dfe433dc7955dc2a70f495f350f373daa200098ae84437816ad2", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2125", - "name": "InvArch Tinker Network", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/InvArch-Tinker-x-Fearless-Wallet" - } - }, - "assets": [{ - "id": "8b58d683-fdc9-477e-a1b2-2c95b663e4a5", - "name": "tinkernet parachain", - "symbol": "tnkr", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TNKR.svg", - "color": "AC2489", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://invarch-tinkernet.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Tinkernet.svg", - "addressPrefix": 117 - }, - { - "disabled": false, - "chainId": "19a3733beb9cb8a970a308d835599e9005e02dc007a35440e461a451466776f8", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2123", - "name": "GM Parachain", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-gmordie/graphql" - } - }, - "assets": [{ - "id": "19763697-37d8-4643-b840-3fd8565f5d83", - "name": "gm parachain", - "symbol": "fren", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/FREN.svg", - "color": "F7D64D", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://leemo.gmordie.com", - "name": "leemo node" - }, - { - "url": "wss://ws.gm.bldnodes.org", - "name": "bLd Nodes node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/GM%20Parachain.svg", - "addressPrefix": 7013 - }, - { - "disabled": true, - "chainId": "ca93a37c913a25fa8fdb33c7f738afc39379cb71d37874a16d4c091a5aef9f89", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2121", - "name": "Imbue Kusama", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/Imbue-x-Fearless-Wallet" - } - }, - "assets": [{ - "id": "c01b37ab-eefa-427d-ba50-dd7a1cbe1798", - "name": "imbue network", - "symbol": "imbu", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/IMBU.svg", - "color": "C3FD51", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://imbue-kusama.imbue.network", - "name": "Imbue Network node node" - } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Imbue.svg", - "addressPrefix": 42 - }, - { - "disabled": false, - "chainId": "cceae7f3b9947cdb67369c026ef78efa5f34a08fe5808d373c04421ecf4f1aaf", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2124", - "name": "Amplitude", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-amplitude/graphql" - } - }, - "assets": [{ - "id": "b2e6c029-ae73-46f9-9660-51d7034ddc53", - "name": "amplitude", - "symbol": "ampe", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AMPE.svg", - "color": "7CE2A0", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://amplitude-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://rpc-amplitude.pendulumchain.tech", - "name": "PendulumChain node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Amplitude.svg", - "addressPrefix": 57 - }, - { - "disabled": true, - "chainId": "f0b8924b12e8108550d28870bc03f7b45a947e1b2b9abf81bfb0b89ecb60570e", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2046", - "name": "Darwinia2", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://darwinia-parachain.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "b861f610-cf2c-43ad-a660-f6b809a05062", - "name": "darwinia", - "symbol": "ring", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RING.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc.darwinia.network", - "name": "Darwinia Network node" - }, - { - "url": "wss://darwinia-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://parachain-rpc.darwinia.network", - "name": "Darwinia Network 1 node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/darwinia.svg", - "addressPrefix": 18 - }, - { - "disabled": false, - "chainId": "f2584690455deda322214e97edfffaf4c1233b6e4625e39478496b3e2f5a44c5", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2052", - "name": "Kylin Network", - "assets": [{ - "id": "7512aeb7-7bdc-42dc-abe3-80ed764c80bd", - "name": "kylin network", - "symbol": "kyl", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KYL.svg", - "color": "AE4071", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://polkadot.kylin-node.co.uk", - "name": "Kylin Network node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kylin%20Network.svg", - "addressPrefix": 42 - }, - { - "disabled": false, - "chainId": "d4c0c08ca49dc7c680c3dac71a7c0703e5b222f4b6c03fe4c5219bb8f22c18dc", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "name": "Crust Shadow Parachain", - "paraId": "2012", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-crust_shadow_parachain" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://shadow.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "d1e3be8c-880e-46fe-97e3-761c0a58aed1", - "name": "crust shadow", - "symbol": "csm", - "precision": 12, - "priceId": "crust-storage-market", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CSM_Crust_Shadow.svg", - "color": "F3AD56", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc-shadow.crust.network", - "name": "Crust node" - } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/crustshadow.svg", - "addressPrefix": 66 - }, - { - "disabled": true, - "chainId": "6e938c4a786f8df6f38d0c06f00a8573f1f7aabeebf48aee5157a93cc5fe3271", - "name": "Kusama (test)", - "assets": [{ - "id": "03561957-3383-4f9f-8033-1b2c36d88db6", - "name": "kusama", - "symbol": "unit", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "staking": "relaychain", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://ws.relaychain-node-1.k1.tst.fearless.soramitsu.co.jp", - "name": "SORA Kusama Test node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kusama.svg", - "addressPrefix": 2, - "options": [ - "poolStaking" - ] - }, - { - "disabled": true, - "chainId": "fd4d46e9a51e16babf791b94d6dbf771ed1d7de8a11b310aa98c847890fa9ff3", - "name": "Polkadot (test)", - "assets": [{ - "id": "405e7e40-a2f1-45a3-a32f-7f271b2819d2", - "name": "polkadot", - "symbol": "unit", - "precision": 10, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "staking": "relaychain", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://ws.relaychain-node-2.p1.tst.fearless.soramitsu.co.jp/", - "name": "SORA Polkadot Test node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polkadot.svg", - "addressPrefix": 2, - "options": [ - "poolStaking" + "url": "https://assethub-polkadot.subscan.io/{type}/{value}" + } ] - }, - { - "disabled": true, - "chainId": "b34f6cd03a41f0fab38ba9fd5b11cce5f303633c46f39f0c6fdc7c3c602bafa9", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "name": "Snow Kusama", - "assets": [{ - "id": "e739d665-7af5-4e65-ab5f-93f54a5b70b3", - "name": "snow", - "symbol": "icz", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ICZ.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://snow-rpc.icenetwork.io", - "name": "Snow node" - } - + }, + "assets": [ + { + "isUtility": true, + "id": "887a17c7-1370-4de0-97dd-5422e294fa75", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "purchaseProviders": [ + "moonpay", + "ramp" + ], + "type": "normal" + }, + { + "id": "ea33432f-9bd9-4d42-93bc-cd45a0e8a44c", + "type": "assets", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "1984", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + }, + { + "id": "951ca8aa-c390-4512-a35c-d3851440b580", + "type": "assets", + "name": "usd coin", + "symbol": "usdc", + "precision": 6, + "currencyId": "1337", + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4" + }, + { + "id": "8f79aa5a-9f31-442c-ac96-01ff80b105e0", + "type": "assets", + "name": "dot is $ded", + "symbol": "ded", + "precision": 10, + "currencyId": "30", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DED.svg", + "color": "FE0186" + }, + { + "id": "44587704-7da8-45c3-9541-be7b81de76ee", + "type": "assets", + "name": "pink", + "symbol": "pink", + "precision": 10, + "currencyId": "23", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PINK.svg", + "color": "FF0066" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + }, + { + "id": "1c9cea4c-f369-4bfa-a8c4-3d3264d3d7c2", + "symbol": "USDt" + } ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SNOW.svg", - "addressPrefix": 2207 + "availableDestinations": [ + { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + } + ] + }, + { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assets": [ + { + "id": "1c9cea4c-f369-4bfa-a8c4-3d3264d3d7c2", + "symbol": "USDt" + } + ] + }, + { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assets": [ + { + "id": "1c9cea4c-f369-4bfa-a8c4-3d3264d3d7c2", + "symbol": "USDt" + } + ] + } + ] + }, + "nodes": [ + { + "url": "wss://api-assethub-polkadot.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://polkadot-asset-hub-rpc.polkadot.io", + "name": "Parity node" + }, + { + "url": "wss://statemint.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + }, + { + "url": "wss://rpc-asset-hub-polkadot.luckyfriday.io", + "name": "LuckyFriday node" + }, + { + "url": "wss://dot-rpc.stakeworld.io/assethub", + "name": "Stakeworld node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Assethub.svg", + "addressPrefix": 0, + "options": [ + "utilityFeePayment" + ] }, { - "disabled": false, - "chainId": "3266816be9fa51b32cfea58d3e33ca77246bc9618595a4300e44c8856a8d8a17", - "rank": 100, - "name": "SORA test", - "externalApi": { - "history": { - "type": "sora", - "url": "https://api.subquery.network/sq/sora-xor/sora-staging" - }, - "staking": { - "type": "sora", - "url": "https://squid.subsquid.io/sora-stage/v/v5/graphql" - }, - "pricing": { - "type": "sora", - "url": "https://api.subquery.network/sq/sora-xor/sora-test" - } - }, - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b1", - "symbol": "ROC" - } + "disabled": false, + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "name": "Acala", + "ecosystem": "substrate", + "paraId": "2000", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-acala-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" ], - "availableDestinations": [ - { - "chainId": "6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e", - "assets": [ - { - "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b1", - "symbol": "ROC" - } - ] - } - ] + "url": "https://acala.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "c801d6c1-3edf-41a9-9aea-da705eab249b", + "name": "acala", + "symbol": "aca", + "precision": 12, + "priceId": "acala", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal", + "existentialDeposit": "100000000000" + }, + { + "id": "cfe26eae-f566-4b8d-a44c-bd4380c27bc5", + "name": "acala dollar", + "symbol": "ausd", + "currencyId": "kusd", + "precision": 12, + "priceId": "acala-dollar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", + "color": "E40C5B", + "type": "ormlAsset", + "isNative": true, + "existentialDeposit": "100000000000" + }, + { + "id": "70a69d25-a4ba-4c6b-a15d-09f3c2814ddf", + "name": "tapio dot", + "symbol": "tdot", + "precision": 10, + "currencyId": "0", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TDOT.svg", + "color": "FF0066", + "type": "stableAssetPoolToken", + "isNative": true, + "existentialDeposit": "100000000" + }, + { + "id": "fe07f6c5-2b90-4e1a-81e3-8ed85f5a80b9", + "name": "parallel finance", + "symbol": "para", + "precision": 12, + "currencyId": "1", + "priceId": "parallel-finance", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PARA.svg", + "color": "4C19E7", + "type": "foreignAsset", + "existentialDeposit": "100000000000" + }, + { + "id": "b6c22f93-be25-426b-b921-18bf19c49667", + "name": "moonbeam", + "symbol": "glmr", + "precision": 18, + "currencyId": "0", + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF", + "type": "foreignAsset", + "existentialDeposit": "100000000000000000" + }, + { + "id": "471bfcd1-9680-4ba9-a25d-3e9f777ee2c9", + "name": "liquid dot", + "symbol": "ldot", + "precision": 10, + "priceId": "liquid-staking-dot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LDOT.svg", + "color": "FF0066", + "type": "ormlAsset", + "isNative": true, + "existentialDeposit": "500000000" + }, + { + "id": "ffb814ea-c92c-4a1e-8e24-437c93ecd8ff", + "name": "taiga", + "symbol": "tai", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TAI.svg", + "color": "FFFFFF", + "priceId": "taiga", + "type": "ormlAsset", + "isNative": true + }, + { + "id": "ed98bee1-34ce-4aa2-896e-508380dea1c2", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "type": "ormlAsset", + "existentialDeposit": "100000000" + }, + { + "id": "a7b48fb1-5741-487a-98fd-c45f958dd4fd", + "name": "liquid crowdloan dot", + "symbol": "lcdot", + "precision": 10, + "currencyId": "13", + "priceId": "liquid-crowdloan-dot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LCDOT.svg", + "color": "FF0066", + "type": "liquidCrowdloan", + "isNative": true, + "existentialDeposit": "0" + }, + { + "id": "402c606d-691f-4889-a48d-a459a0e37c56", + "name": "inter btc", + "symbol": "ibtc", + "precision": 8, + "currencyId": "3", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", + "color": "F2AE7F", + "type": "foreignAsset" + }, + { + "id": "7fffd65a-d971-4bdc-a6bd-216674b83a97", + "name": "wrapped ether", + "symbol": "weth", + "precision": 18, + "currencyId": "6", + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "627EEA", + "type": "foreignAsset" + }, + { + "id": "184a1b21-d512-4de9-ab54-6c014e24f90c", + "name": "astar", + "symbol": "astr", + "precision": 18, + "currencyId": "2", + "priceId": "astar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", + "color": "0AE2FF", + "type": "foreignAsset" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + }, + { + "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", + "symbol": "aUSD" + }, + { + "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", + "symbol": "ACA" + }, + { + "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", + "symbol": "GLMR" + }, + { + "id": "163a89b9-d140-44ca-b119-218a54e4235b", + "symbol": "lcDOT" + } + ], + "availableDestinations": [ + { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + } + ] + }, + { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assets": [ + { + "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", + "symbol": "aUSD" + }, + { + "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", + "symbol": "ACA" + }, + { + "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", + "symbol": "GLMR" + } + ] + }, + { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assets": [ + { + "id": "163a89b9-d140-44ca-b119-218a54e4235b", + "symbol": "lcDOT" + }, + { + "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", + "symbol": "ACA" + } + ] + }, + { + "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", + "assets": [ + { + "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", + "symbol": "ACA", + "minAmount": "56000000000000" + } + ], + "bridgeParachainId": "e92d165ad41e41e215d09713788173aecfdbe34d3bed29409d33a2ef03980738" + } + ] + }, + "nodes": [ + { + "url": "wss://api-acala.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc-acala.luckyfriday.io", + "name": "LuckyFriday node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/acala.svg", + "addressPrefix": 10, + "options": [ + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "name": "Karura", + "ecosystem": "substrate", + "paraId": "2000", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-karura-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://karura.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "e71b30a0-2a44-40ff-8b53-a166fadef6c5", + "name": "karura", + "symbol": "kar", + "precision": 12, + "priceId": "karura", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + }, + { + "id": "91a69026-0ab7-4db0-af53-8d571fd33ac4", + "name": "acala dollar", + "symbol": "ausd", + "currencyId": "kusd", + "precision": 12, + "priceId": "acala-dollar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", + "color": "E40C5B", + "type": "ormlAsset", + "isNative": true, + "existentialDeposit": "10000000000" + }, + { + "id": "223b0282-b5c9-48ed-87e3-5e9ef6714ac8", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "type": "ormlAsset", + "existentialDeposit": "100000000" + }, + { + "id": "e605149c-0f41-4ec9-960f-21c07e2d9361", + "name": "rmrk", + "symbol": "rmrk", + "currencyId": "0", + "precision": 10, + "priceId": "rmrk", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", + "color": "392B73", + "type": "foreignAsset", + "existentialDeposit": "100000000" + }, + { + "id": "10757cfa-b590-43c1-8524-efc28d798bcb", + "name": "bifrost native coin", + "symbol": "bnc", + "precision": 12, + "priceId": "bifrost-native-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", + "color": "FFFFFF", + "type": "ormlAsset", + "existentialDeposit": "8000000000" + }, + { + "id": "77562113-9e01-49b6-a39d-87a47bde24fe", + "name": "liquid ksm", + "symbol": "lksm", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LKSM.svg", + "color": "FFFFFF", + "type": "ormlAsset", + "isNative": true, + "existentialDeposit": "500000000" + }, + { + "id": "c6fd5a1e-3052-4bdf-b0f3-ad1b7b9fbff0", + "name": "crust shadow", + "symbol": "csm", + "currencyId": "5", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CSM_Crust_Shadow.svg", + "color": "F3AD56", + "priceId": "crust-storage-market", + "type": "foreignAsset", + "existentialDeposit": "1000000000000" + }, + { + "id": "5e9c76a4-9f89-487d-80aa-db0588b60aa4", + "name": "taiga", + "symbol": "tai", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TAI.svg", + "color": "FFFFFF", + "priceId": "taiga", + "type": "ormlAsset", + "isNative": true, + "existentialDeposit": "1000000000000" + }, + { + "id": "4b9f4cba-3b26-4f99-8666-3ee305683706", + "name": "polarisdao", + "symbol": "aris", + "currencyId": "1", + "precision": 8, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ARIS.svg", + "color": "423F47", + "priceId": "polarisdao", + "type": "foreignAsset", + "existentialDeposit": "1000000000000" + }, + { + "id": "3d32d7cb-4de5-427e-9668-a9763648a555", + "name": "quartz", + "symbol": "qtz", + "currencyId": "2", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/QTZ.svg", + "color": "EC5B6D", + "priceId": "quartz", + "type": "foreignAsset", + "existentialDeposit": "1000000000000000000" + }, + { + "id": "17142348-16f6-49f2-9006-098f5562bda0", + "name": "kintsugi ibtc", + "symbol": "kbtc", + "precision": 8, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", + "color": "FFFFFF", + "priceId": "kintsugi-btc", + "type": "ormlAsset", + "existentialDeposit": "66" + }, + { + "id": "6aa4622c-42b9-4976-9f7c-35447bb24128", + "name": "kintsugi", + "symbol": "kint", + "precision": 12, + "priceId": "kintsugi", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", + "color": "FFFFFF", + "type": "ormlAsset", + "existentialDeposit": "133330000" + }, + { + "id": "e27e5b58-3229-4656-b9ff-de309f49f17f", + "name": "phala", + "symbol": "pha", + "precision": 12, + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F", + "type": "ormlAsset", + "existentialDeposit": "40000000000" + }, + { + "id": "8e975c47-df51-48a8-a29e-a89ee0f4bf9e", + "name": "taiga ksm", + "symbol": "taiksm", + "currencyId": "0", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TAIKSM.svg", + "color": "FFFFFF", + "type": "stableAssetPoolToken", + "isNative": true, + "existentialDeposit": "100000000" + }, + { + "id": "536deaa6-49b0-4b54-adc7-9619e15c79b2", + "name": "voucher slot ksm", + "symbol": "vsksm", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VSKSM.svg", + "color": "FFFFFF", + "type": "ormlAsset", + "existentialDeposit": "100000000" + }, + { + "id": "f2257792-ffb9-4dff-95ae-5f98c1cb594b", + "name": "moonriver", + "symbol": "movr", + "currencyId": "3", + "precision": 18, + "priceId": "moonriver", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", + "color": "FFFFFF", + "type": "foreignAsset", + "existentialDeposit": "1000000000000000" + }, + { + "id": "54b7f751-ef62-45b2-ad65-837852de5af4", + "name": "heiko finance", + "symbol": "hko", + "currencyId": "4", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HKO.svg", + "color": "CC3474", + "type": "foreignAsset", + "existentialDeposit": "100000000000" + }, + { + "id": "bb3dc769-394f-40fb-b54f-4a0d0de7e49e", + "name": "kico", + "symbol": "kico", + "currencyId": "6", + "precision": 14, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KICO.svg", + "color": "FFFFFF", + "type": "foreignAsset", + "existentialDeposit": "100000000000000" + }, + { + "id": "5fd5f3ce-4a2c-4647-923e-6c29cc95a4f7", + "name": "tether usd", + "symbol": "usdt", + "currencyId": "7", + "precision": 6, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "type": "foreignAsset", + "existentialDeposit": "10000" + }, + { + "id": "8cf27ed8-11bf-4b16-be22-5aa6bbc10736", + "name": "integritee", + "symbol": "teer", + "currencyId": "8", + "precision": 12, + "priceId": "integritee", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TEER.svg", + "color": "FFFFFF", + "type": "foreignAsset", + "existentialDeposit": "100000000000" + }, + { + "id": "805e945b-54a6-47ec-a62b-7bcbae46fb70", + "name": "metaverse.network pioneer", + "symbol": "neer", + "currencyId": "9", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NEER.svg", + "color": "B8FBFE", + "type": "foreignAsset", + "existentialDeposit": "100000000000000000" + }, + { + "id": "addd6fed-51af-4088-8d6d-05c73b48b8df", + "name": "calamari network", + "symbol": "kma", + "currencyId": "10", + "precision": 12, + "priceId": "calamari-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KMA.svg", + "color": "FFFFFF", + "type": "foreignAsset", + "existentialDeposit": "100000000000" + }, + { + "id": "f8d6e0db-e50b-46ea-b870-c2e97abb99d7", + "name": "basilisk", + "symbol": "bsx", + "currencyId": "11", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BSX.svg", + "color": "87FCB6", + "type": "foreignAsset", + "existentialDeposit": "1000000000000" + }, + { + "id": "4879d0ed-810b-4792-8e83-387180cc3a9c", + "name": "altair", + "symbol": "air", + "currencyId": "12", + "precision": 18, + "priceId": "altair", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AIR.svg", + "color": "FFFFFF", + "type": "foreignAsset", + "existentialDeposit": "100000000000000000" + }, + { + "id": "e0fe6aac-a52e-4e78-be60-defee1006569", + "name": "crab network", + "symbol": "crab", + "currencyId": "13", + "precision": 18, + "priceId": "darwinia-crab-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRAB.svg", + "color": "581BD1", + "type": "foreignAsset", + "existentialDeposit": "1000000000000000000" + }, + { + "id": "1d534f94-bc5a-41a5-a295-c84f9ee0d95c", + "name": "genshiro", + "symbol": "gens", + "currencyId": "14", + "precision": 9, + "priceId": "genshiro", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GENS.svg", + "color": "FFFFFF", + "type": "foreignAsset", + "existentialDeposit": "1000000000000" + }, + { + "id": "b8f7bcbc-fe2d-457d-903f-c8c126127231", + "name": "equilibrium dollar protocol", + "symbol": "eqd", + "currencyId": "15", + "precision": 9, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQD.svg", + "color": "4D8BED", + "type": "foreignAsset", + "existentialDeposit": "10000000000" + }, + { + "id": "2433813f-403f-40e1-9e00-688b037113d5", + "name": "turing token", + "symbol": "tur", + "currencyId": "16", + "precision": 10, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUR.svg", + "color": "5DCBD0", + "type": "foreignAsset", + "existentialDeposit": "40000000000" + }, + { + "id": "1a6e5327-80da-439a-8294-8b3dbeb8172c", + "name": "pichu token", + "symbol": "pchu", + "currencyId": "17", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PCHU.svg", + "color": "AE4071", + "type": "foreignAsset", + "existentialDeposit": "100000000000000000" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + }, + { + "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", + "symbol": "BNC" + }, + { + "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", + "symbol": "AUSD" + }, + { + "id": "0fef7483-1f4c-4339-a12c-1b537e8e62ba", + "symbol": "KAR" + }, + { + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" + }, + { + "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", + "symbol": "USDt" + }, + { + "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", + "symbol": "MOVR" + } + ], + "availableDestinations": [ + { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + } + ] + }, + { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "assets": [ + { + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" + }, + { + "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", + "symbol": "USDt" + } + ] + }, + { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + }, + { + "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", + "symbol": "BNC" + }, + { + "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", + "symbol": "AUSD" + }, + { + "id": "0fef7483-1f4c-4339-a12c-1b537e8e62ba", + "symbol": "KAR" + } + ] + }, + { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + }, + { + "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", + "symbol": "MOVR" + }, + { + "id": "0fef7483-1f4c-4339-a12c-1b537e8e62ba", + "symbol": "KAR" + }, + { + "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", + "symbol": "AUSD" + } + ] + } + ] + }, + "nodes": [ + { + "url": "wss://api-karura.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://karura.polkawallet.io", + "name": "Polkawallet node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Karura.svg", + "addressPrefix": 8, + "options": [ + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "rank": 11, + "name": "Moonriver", + "ecosystem": "ethereumBased", + "paraId": "2023", + "externalApi": { + "staking": { + "type": "subsquid", + "url": "https://squid.subsquid.io/fearless-moonriver-1/v/v2/graphql" + }, + "history": { + "type": "giantsquid", + "url": "https://squid-moonriver-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://moonriver.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "35346815-009a-4cf9-a5ad-85a0167e594d", + "name": "moonriver", + "symbol": "movr", + "precision": 18, + "priceId": "moonriver", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", + "color": "FFFFFF", + "staking": "parachain", + "isUtility": true, + "type": "normal" + }, + { + "id": "980af72c-d1b8-46c7-9793-fa87912652ec", + "name": "kusama", + "symbol": "xcksm", + "currencyId": "42259045809535163221576417993425387648", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "type": "assets" + }, + { + "id": "d1ebeaa2-e7ac-4645-8dce-e873ebdbb995", + "type": "assets", + "name": "acala dollar", + "symbol": "xcausd", + "currencyId": "214920334981412447805621250067209749032", + "precision": 12, + "priceId": "acala-dollar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", + "color": "E40C5B" + }, + { + "id": "8e45603e-91c4-4624-8457-9e9b24a98610", + "type": "assets", + "name": "xcrmrk", + "symbol": "xcrmrk", + "currencyId": "182365888117048807484804376330534607370", + "precision": 10, + "priceId": "rmrk", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", + "color": "392B73" + }, + { + "id": "4f9750bb-f3f5-45b3-a180-a0c734f52562", + "type": "assets", + "name": "kintsugi wrapped btc", + "symbol": "xckbtc", + "currencyId": "328179947973504579459046439826496046832", + "precision": 8, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", + "color": "FFFFFF", + "priceId": "kintsugi-btc" + }, + { + "id": "ff8fce18-260f-46c9-85bd-36157d1f756e", + "type": "assets", + "name": "phala token", + "symbol": "xcpha", + "currencyId": "189307976387032586987344677431204943363", + "precision": 12, + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F" + }, + { + "id": "88cfc7c3-6b8e-49a5-8620-e014840d4bf9", + "type": "assets", + "name": "robonomics native token", + "symbol": "xcxrt", + "currencyId": "108036400430056508975016746969135344601", + "precision": 9, + "priceId": "robonomics-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XRT.svg", + "color": "FFFFFF" + }, + { + "id": "db8fdbe6-26b0-4910-a267-d7a58c22c7ec", + "type": "assets", + "name": "kintsugi native token", + "symbol": "xckint", + "currencyId": "175400718394635817552109270754364440562", + "precision": 12, + "priceId": "kintsugi", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", + "color": "FFFFFF" + }, + { + "id": "1854feda-ca0c-4e82-9076-af2c7978f042", + "type": "assets", + "name": "karura", + "symbol": "xckar", + "currencyId": "10810581592933651521121702237638664357", + "precision": 12, + "priceId": "karura", + "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/KAR.svg", + "color": "FFFFFF" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "5b1a0b8f-74c9-4073-b288-0d2ca16dfb77", + "symbol": "MOVR" + }, + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + }, + { + "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", + "symbol": "AUSD" + }, + { + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" + } + ], + "availableDestinations": [ + { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + } + ] + }, + { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assets": [ + { + "id": "5b1a0b8f-74c9-4073-b288-0d2ca16dfb77", + "symbol": "MOVR" + }, + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + } + ] + }, + { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assets": [ + { + "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", + "symbol": "AUSD" + } + ] + }, + { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "assets": [ + { + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" + } + ] + } + ] + }, + "nodes": [ + { + "url": "wss://api-moonriver.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://wss.moonriver.moonbeam.network", + "name": "PureStake node" + }, + { + "url": "wss://moonriver.unitedbloc.com", + "name": "UnitedBloc node" + }, + { + "url": "wss://wss.api.moonriver.moonbeam.network", + "name": "Moonbeam Foundation node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Moonriver.svg", + "addressPrefix": 1285, + "options": [ + "ethereumBased" + ] + }, + { + "disabled": false, + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2007", + "name": "Shiden", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-shiden-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://shiden.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "6dbb524b-a2d7-4c32-b0f9-6825b3e7d2c4", + "name": "shiden network", + "symbol": "sdn", + "precision": 18, + "priceId": "shiden", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/SDN.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + }, + { + "id": "52509327-116a-4365-bf7d-03cecf7868bc", + "type": "assets", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "340282366920938463463374607431768211455", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + }, + { + "id": "aa494fdc-3411-438c-b69b-a53e36f062a1", + "type": "assets", + "name": "phala token", + "symbol": "pha", + "precision": 12, + "currencyId": "18446744073709551623", + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F" + } + ], + "nodes": [ + { + "url": "wss://api-shiden.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.shiden.astar.network", + "name": "StakeTechnologies node" + }, + { + "url": "wss://shiden.public.blastapi.io", + "name": "Blast node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Shiden.svg", + "addressPrefix": 5 + }, + { + "disabled": false, + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2001", + "name": "Bifrost", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid.subsquid.io/gs-main-Bifrost/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://bifrost-kusama.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "isUtility": true, + "id": "559e80d6-fb38-4dd5-bbd6-c0a7c2f600e1", + "name": "bifrost native coin", + "symbol": "bnc", + "precision": 12, + "priceId": "bifrost-native-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", + "color": "FFFFFF", + "type": "normal" + }, + { + "id": "922c191c-4cb8-407e-8b81-2cfc52170c3b", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "existentialDeposit": "100000000", + "type": "ormlAsset" + }, + { + "id": "75206b90-456e-48ae-a118-0bf9ab861115", + "name": "rmrk", + "symbol": "rmrk", + "precision": 10, + "priceId": "rmrk", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", + "color": "392B73", + "existentialDeposit": "10000", + "type": "ormlAsset" + }, + { + "id": "5c31c8ae-c045-43f2-849a-88a17ee7b302", + "name": "karura", + "symbol": "kar", + "precision": 12, + "priceId": "karura", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", + "color": "FFFFFF", + "existentialDeposit": "100000000", + "type": "ormlAsset" + }, + { + "id": "07f2a7fc-9b0a-4583-9267-57b68ecd4350", + "name": "voucher ksm", + "symbol": "vksm", + "currencyId": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VKSM.svg", + "color": "FFFFFF", + "existentialDeposit": "100000000", + "isNative": true, + "type": "vToken" + }, + { + "id": "dd0efecb-51a1-481d-a949-80cb7663c105", + "name": "voucher slot ksm", + "symbol": "vsksm", + "currencyId": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VSKSM.svg", + "color": "FFFFFF", + "existentialDeposit": "100000000", + "type": "vsToken", + "isNative": true + }, + { + "id": "94d5e2d9-c2d7-40e6-8893-5832a784b2ea", + "name": "acala dollar", + "symbol": "ausd", + "currencyId": "kusd", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", + "color": "E40C5B", + "priceId": "acala-dollar", + "existentialDeposit": "100000000", + "type": "stable" + }, + { + "id": "2bd78b68-8bd7-4859-928a-1a7b8b57a734", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "priceId": "tether", + "existentialDeposit": "1000", + "type": "foreignAsset", + "currencyId": "0" + }, + { + "id": "e6f78e19-80c7-4e8c-8499-91e03df504a8", + "name": "moonriver", + "symbol": "movr", + "precision": 18, + "priceId": "moonriver", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", + "color": "FFFFFF", + "type": "ormlAsset", + "existentialDeposit": "1000000000000" + }, + { + "id": "fe2c5a55-aff7-4d00-af5c-e90082a5a11e", + "name": "zenlink network", + "symbol": "zlk", + "precision": 18, + "priceId": "zenlink-network-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZLK.svg", + "color": "FFFFFF", + "existentialDeposit": "1000000000000", + "type": "ormlAsset", + "isNative": true + }, + { + "id": "33746c72-6806-47d0-a1c4-7b433df862f1", + "name": "phala", + "symbol": "pha", + "precision": 12, + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F", + "type": "ormlAsset", + "existentialDeposit": "40000000000" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + }, + { + "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", + "symbol": "BNC" + }, + { + "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", + "symbol": "MOVR" + }, + { + "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", + "symbol": "AUSD" + }, + { + "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", + "symbol": "USDt" + } + ], + "availableDestinations": [ + { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + } + ] + }, + { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "assets": [ + { + "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", + "symbol": "USDt" + } + ] + }, + { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + }, + { + "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", + "symbol": "BNC" + }, + { + "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", + "symbol": "AUSD" + } + ] + }, + { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + }, + { + "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", + "symbol": "BNC" + }, + { + "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", + "symbol": "MOVR" + } + ] + } + ] + }, + "nodes": [ + { + "url": "wss://api-bifrost-kusama.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://bifrost-rpc.liebi.com/ws", + "name": "Liebi node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bifrost.svg", + "addressPrefix": 6, + "types": { + "url": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/type_registry/bifrost.json", + "overridesCommon": true + } + }, + { + "disabled": false, + "chainId": "d43540ba6d3eb4897c28a77d48cb5b729fea37603cbbfc7a86a73b72adb3be8d", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2004", + "name": "Khala", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-khala-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://khala.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "3feb7de3-e881-4c04-a4de-1b9091dbc324", + "name": "phala", + "symbol": "pha", + "precision": 12, + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F", + "isUtility": true, + "type": "normal" + }, + { + "id": "34d7fc9d-d616-4c3e-9398-060b18220a55", + "type": "assets", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "0", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + } + ], + "nodes": [ + { + "url": "wss://api-khala.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://khala-api.phala.network/ws", + "name": "Phala node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Khala.svg", + "addressPrefix": 30 + }, + { + "disabled": false, + "chainId": "411f057b9107718c9624d6aa4a3f23c1653898297f3d4d529d9bb6511a39dd21", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2086", + "name": "KILT Spiritnet", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-kilt-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://spiritnet.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "f0d5cadc-4999-45f3-8160-15243f2909d3", + "name": "kilt protocol", + "symbol": "kilt", + "precision": 15, + "priceId": "kilt-protocol", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KILT.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://spiritnet.kilt.io/", + "name": "KILT Protocol node" + }, + { + "url": "wss://kilt-rpc.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/kilt.svg", + "addressPrefix": 38 + }, + { + "disabled": false, + "chainId": "4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2084", + "name": "Calamari", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-calamari-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://calamari.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "39d4080e-e2ab-43f3-bcc2-2fa281d9290c", + "name": "calamari network", + "symbol": "kma", + "precision": 12, + "priceId": "calamari-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KMA.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + }, + { + "id": "bd018ed9-069b-4d51-b5db-56b70bb5434c", + "type": "assets", + "name": "moonriver", + "symbol": "movr", + "precision": 18, + "currencyId": "11", + "priceId": "moonriver", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", + "color": "FFFFFF" + }, + { + "id": "003bb609-cae4-4cf0-afad-4230ca17873b", + "type": "assets", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "12", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + }, + { + "id": "6094eb13-6084-4909-9232-31b6088ad4cc", + "type": "assets", + "name": "karura", + "symbol": "kar", + "precision": 12, + "currencyId": "8", + "priceId": "karura", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", + "color": "FFFFFF" + } + ], + "nodes": [ + { + "url": "wss://calamari.systems", + "name": "Manta Network node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Calamari.svg", + "addressPrefix": 78 + }, + { + "disabled": false, + "chainId": "cd4d732201ebe5d6b014edda071c4203e16867305332301dc8d092044b28e554", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2095", + "name": "Quartz", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-quartz" + } + }, + "assets": [ + { + "id": "d0f2e718-99ee-4bc2-8dc2-1ce07f21c5ac", + "name": "quartz", + "symbol": "qtz", + "precision": 18, + "priceId": "quartz", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/QTZ.svg", + "color": "EC5B6D", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-quartz.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://eu-ws-quartz.unique.network", + "name": "Unique Europe node" + }, + { + "url": "wss://ws-quartz.unique.network", + "name": "Geo Load Balancer node" + }, + { + "url": "wss://asia-ws-quartz.unique.network", + "name": "Unique Asia node" + }, + { + "url": "wss://us-ws-quartz.unique.network", + "name": "Unique America node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/quartz.svg", + "addressPrefix": 255 + }, + { + "disabled": false, + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2085", + "name": "Parallel Heiko", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-parallel_heiko" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://parallel-heiko.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "02b54158-4f4f-4077-b6a7-7c9edd75a1ca", + "name": "heiko finance", + "symbol": "hko", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HKO.svg", + "color": "CC3474", + "isUtility": true, + "type": "normal" + }, + { + "id": "382a7dd4-5444-4797-8cec-d921000144ed", + "type": "assets", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "100", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + }, + { + "id": "7bd1b0ca-a4a7-4b67-8f8b-cb19e2d3fab8", + "type": "assets", + "name": "moonriver", + "symbol": "movr", + "precision": 18, + "currencyId": "113", + "priceId": "moonriver", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", + "color": "FFFFFF" + }, + { + "id": "b48b21fb-eb3f-4296-9978-8dc42e42f384", + "type": "assets", + "name": "karura", + "symbol": "kar", + "precision": 12, + "currencyId": "107", + "priceId": "karura", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", + "color": "FFFFFF" + }, + { + "id": "535ab9cf-fa62-4e19-ab39-02e5584ef7af", + "type": "assets", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "102", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + }, + { + "id": "7a97a272-c767-4b45-b055-4c521168558c", + "type": "assets", + "name": "kintsugi native token", + "symbol": "kint", + "precision": 12, + "currencyId": "119", + "priceId": "kintsugi", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", + "color": "FFFFFF" + }, + { + "id": "5959efca-47b7-4ec4-a009-5870e2231d52", + "type": "assets", + "name": "kintsugi ibtc", + "symbol": "kbtc", + "precision": 8, + "currencyId": "121", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", + "color": "FFFFFF", + "priceId": "kintsugi-btc" + }, + { + "id": "d0262105-2c85-4167-bde0-50c7cdfe4942", + "type": "assets", + "name": "phala token", + "symbol": "pha", + "precision": 12, + "currencyId": "115", + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F" + } + ], + "nodes": [ + { + "url": "wss://heiko-rpc.parallel.fi", + "name": "Parallel node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/parallelfinance.svg", + "addressPrefix": 110 + }, + { + "disabled": false, + "chainId": "6811a339673c9daa897944dcdac99c6e2939cc88245ed21951a0a3c9a2be75bc", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2087", + "name": "Picasso", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-picasso-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://picasso.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "d24959cd-72fb-4155-9880-86d42b1d1cbb", + "name": "picasso", + "symbol": "pica", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PICA.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-picasso.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://picasso-rpc.composable.finance", + "name": "Composable Finance node" + }, + { + "url": "wss://rpc.composablenodes.tech", + "name": "Composable node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/picasso.svg", + "addressPrefix": 49 + }, + { + "disabled": false, + "chainId": "aa3876c1dc8a1afcc2e9a685a49ff7704cfd36ad8c90bf2702b9d1b00cc40011", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2088", + "name": "Altair", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-altair-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://altair.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "56c7f785-23d6-4199-accf-846be58011e6", + "name": "altair", + "symbol": "air", + "precision": 18, + "priceId": "altair", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AIR.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://fullnode.altair.centrifuge.io", + "name": "Centrifuge node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Altair.svg", + "addressPrefix": 136 + }, + { + "disabled": false, + "chainId": "f22b7850cdd5a7657bbfd90ac86441275bbc57ace3d2698a740c7b0ec4de5ec3", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2096", + "name": "Pioneer Network", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-bit_country_pioneer" + } + }, + "assets": [ + { + "id": "d3b93409-97b1-42e0-8dbc-99d3fb93fc10", + "name": "metaverse.network pioneer", + "symbol": "neer", + "precision": 18, + "priceId": "metaverse-network-pioneer", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NEER.svg", + "color": "B8FBFE", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://pioneer-rpc-3.bit.country/wss", + "name": "MetaverseNetwork node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/bitcountry.svg", + "addressPrefix": 268 + }, + { + "disabled": false, + "chainId": "5c7bd13edf349b33eb175ffae85210299e324d852916336027391536e686f267", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2002", + "name": "Clover", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-clover" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://clv.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "4b7ab596-bff4-4fd8-9c60-24ef1cbe9584", + "name": "clover finance", + "symbol": "clv", + "precision": 18, + "priceId": "clover-finance", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CLV.svg", + "color": "73D4FD", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc-para.clover.finance", + "name": "Clover node" + }, + { + "url": "wss://clover-rpc.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/clover.svg", + "addressPrefix": 128 + }, + { + "disabled": false, + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2006", + "name": "Astar", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-astar-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://astar.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "5ab1e8d-81ed-4130-9d29-55b549cc6bab", + "name": "astar", + "symbol": "astr", + "precision": 18, + "priceId": "astar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", + "color": "0AE2FF", + "isUtility": true, + "type": "normal" + }, + { + "id": "d898014a-5c0f-49a1-b563-51017e9dce38", + "type": "assets", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "currencyId": "340282366920938463463374607431768211455", + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066" + }, + { + "id": "af1fc6a0-505c-43d7-b214-d64e4414e2e1", + "type": "assets", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "4294969280", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + }, + { + "id": "3e0a1785-2faa-43bf-8af6-d02c96d6b30e", + "type": "assets", + "name": "equilibrium", + "symbol": "eq", + "precision": 9, + "currencyId": "18446744073709551628", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQ.svg", + "color": "5176E6" + }, + { + "id": "39fb54c8-52c1-4cf7-8412-24ac38b63eb4", + "type": "assets", + "name": "phala token", + "symbol": "pha", + "precision": 12, + "currencyId": "18446744073709551622", + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F" + }, + { + "id": "ee6b0152-326f-4e15-a62f-ac02d357d840", + "type": "assets", + "name": "moonbeam", + "symbol": "glmr", + "precision": 18, + "currencyId": "18446744073709551619", + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "5ab1e8d-81ed-4130-9d29-55b549cc6bab", + "symbol": "ASTR" + } + ], + "availableDestinations": [ + { + "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", + "assets": [ + { + "id": "5ab1e8d-81ed-4130-9d29-55b549cc6bab", + "symbol": "ASTR", + "minAmount": "73000000000000000000" + } + ], + "bridgeParachainId": "e92d165ad41e41e215d09713788173aecfdbe34d3bed29409d33a2ef03980738" + } + ] + }, + "nodes": [ + { + "url": "wss://api-astar.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.astar.network", + "name": "Astar node" + }, + { + "url": "wss://astar.public.blastapi.io", + "name": "Blast node" + }, + { + "url": "wss://astar.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/astar.svg", + "addressPrefix": 5, + "options": [ + "tipRequired" + ] + }, + { + "disabled": false, + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2012", + "name": "Parallel", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-parallel-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://parallel.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "f78aa731-a33c-4d8d-a3bb-74835064366b", + "name": "parallel finance", + "symbol": "para", + "precision": 12, + "priceId": "parallel-finance", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PARA.svg", + "color": "4C19E7", + "isUtility": true, + "type": "normal" + }, + { + "id": "769ffb89-fd2f-4add-94a1-d2f9f716c143", + "type": "assets", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "currencyId": "101", + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066" + }, + { + "id": "1d850850-a2fb-4728-8dfc-13679c470017", + "type": "assets", + "name": "moonbeam", + "symbol": "glmr", + "precision": 18, + "currencyId": "114", + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF" + }, + { + "id": "5e745a28-9827-4d7f-9df9-e2cfbe4d11a5", + "type": "assets", + "name": "interlay", + "symbol": "intr", + "precision": 10, + "currencyId": "120", + "priceId": "interlay", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", + "color": "FFFFFF" + }, + { + "id": "ba44778d-f7a2-4adb-91f9-efd9a46468a7", + "type": "assets", + "name": "liquid crowdloan dot", + "symbol": "lcdot", + "precision": 10, + "currencyId": "106", + "priceId": "liquid-crowdloan-dot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LCDOT.svg", + "color": "FF0066" + }, + { + "id": "01adcd11-256d-4ac2-966e-9bb87ed5f769", + "type": "assets", + "name": "acala", + "symbol": "aca", + "precision": 12, + "currencyId": "108", + "priceId": "acala", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", + "color": "FFFFFF" + }, + { + "id": "bf70329b-421a-4b68-87eb-ef85e0d0044e", + "type": "assets", + "name": "liquid dot", + "symbol": "ldot", + "precision": 10, + "currencyId": "110", + "priceId": "liquid-staking-dot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LDOT.svg", + "color": "FF0066" + }, + { + "id": "b4dc02ce-3e71-4d92-8e1a-9599a75d20e4", + "type": "assets", + "name": "inter ibtc", + "symbol": "ibtc", + "precision": 8, + "currencyId": "122", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", + "color": "F2AE7F" + }, + { + "id": "c5453123-c85e-4226-b2a8-fbf0deb88e9f", + "type": "assets", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "102", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + }, + { + "id": "e52c5825-3076-4277-84e2-8b45f778d981", + "type": "assets", + "name": "cdot-6/13", + "symbol": "cdot-6/13", + "precision": 10, + "currencyId": "200060013", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/%D1%81DOT.svg", + "color": "FF0066" + }, + { + "id": "1236185c-fa70-481e-befa-deda855054df", + "type": "assets", + "name": "cdot-7/14", + "symbol": "cdot-7/14", + "precision": 10, + "currencyId": "200070014", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/%D1%81DOT.svg", + "color": "FF0066" + }, + { + "id": "afe2d55d-2fa7-4e7b-ab2c-c4c4aea15a87", + "type": "assets", + "name": "cdot-8/15", + "symbol": "cdot-8/15", + "precision": 10, + "currencyId": "200080015", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/%D1%81DOT.svg", + "color": "FF0066" + }, + { + "id": "d6d35753-a3dc-4987-8995-2afbe0a65606", + "type": "assets", + "name": "phala token", + "symbol": "pha", + "precision": 12, + "currencyId": "115", + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + }, + { + "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", + "symbol": "GLMR" + }, + { + "id": "bc05b313-67f2-454d-bdfa-78a4feb82259", + "symbol": "lcDOT" + }, + { + "id": "0c7df36b-4ebd-4e66-a78b-77fa08b54c54", + "symbol": "ACA" + }, + { + "id": "a3ecbda6-80b6-492f-a656-5ab0bdcc9d1f", + "symbol": "LDOT" + }, + { + "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", + "symbol": "USDt" + } + ], + "availableDestinations": [ + { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + } + ] + }, + { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assets": [ + { + "id": "bc05b313-67f2-454d-bdfa-78a4feb82259", + "symbol": "lcDOT" + }, + { + "id": "0c7df36b-4ebd-4e66-a78b-77fa08b54c54", + "symbol": "ACA" + }, + { + "id": "a3ecbda6-80b6-492f-a656-5ab0bdcc9d1f", + "symbol": "LDOT" + } + ] + }, + { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assets": [ + { + "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", + "symbol": "GLMR" + } + ] + }, + { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assets": [ + { + "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", + "symbol": "USDt" + } + ] + } + ] + }, + "nodes": [ + { + "url": "wss://api-parallel.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.parallel.fi", + "name": "Parallel node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/parallelfinance.svg", + "addressPrefix": 172 + }, + { + "disabled": false, + "chainId": "a85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2090", + "name": "Basilisk", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-basilisk-api.squid.tachi.soramitsu.co.jp/graphql" + } + }, + "assets": [ + { + "id": "7dae28e2-9f5e-49ff-9140-aa750a9579ea", + "name": "basilisk", + "symbol": "bsx", + "precision": 12, + "priceId": "basilisk", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BSX.svg", + "color": "87FCB6", + "isUtility": true, + "type": "normal" + }, + { + "id": "f7cafffc-c8d9-4441-8d52-84c17082e514", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "1", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "type": "assetId", + "existentialDeposit": "100000000" + }, + { + "id": "125a05b1-1e0b-411d-8628-ffd3b84ed4c8", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "14", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "type": "assetId", + "existentialDeposit": "10000" + } + ], + "nodes": [ + { + "url": "wss://api-basilisk.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.basilisk.cloud", + "name": "Basilisk node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Basilisk.svg", + "addressPrefix": 10041 + }, + { + "disabled": false, + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "rank": 12, + "paraId": "2004", + "name": "Moonbeam", + "ecosystem": "ethereumBased", + "externalApi": { + "staking": { + "type": "subsquid", + "url": "https://squid.subsquid.io/fearless-x-moonbeam/v/v2/graphql" + }, + "history": { + "type": "giantsquid", + "url": "https://squid-moonbeam-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://moonbeam.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "e40c8161-9fc9-4749-a3b8-ed1c0ad16475", + "name": "moonbeam", + "symbol": "glmr", + "precision": 18, + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF", + "staking": "parachain", + "isUtility": true, + "type": "normal" + }, + { + "id": "7e4e064e-2b23-4eb5-96db-e6491c4031e5", + "type": "assets", + "name": "polkadot", + "symbol": "xcdot", + "precision": 10, + "currencyId": "42259045809535163221576417993425387648", + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066" + }, + { + "id": "311e3073-1bfb-40de-b601-20278e457577", + "type": "assets", + "name": "acala dollar", + "symbol": "xcausd", + "precision": 12, + "currencyId": "110021739665376159354538090254163045594", + "priceId": "acala-dollar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", + "color": "E40C5B" + }, + { + "id": "9539da0e-3610-406a-b1b9-c811b6508a17", + "type": "assets", + "name": "acala", + "symbol": "xcaca", + "precision": 12, + "currencyId": "224821240862170613278369189818311486111", + "priceId": "acala", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", + "color": "FFFFFF" + }, + { + "id": "1509c799-b30f-4fde-934e-791f1c88f3d1", + "type": "assets", + "name": "interlay", + "symbol": "xcintr", + "precision": 10, + "currencyId": "101170542313601871197860408087030232491", + "priceId": "interlay", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", + "color": "FFFFFF" + }, + { + "id": "9e738e1a-81be-4ac2-8de0-b56e565699ce", + "type": "assets", + "name": "astar", + "symbol": "xcastr", + "precision": 18, + "currencyId": "224077081838586484055667086558292981199", + "priceId": "astar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", + "color": "0AE2FF" + }, + { + "id": "5d4c759c-0f38-4c63-bdde-9359bdb0fa24", + "type": "assets", + "name": "tether usd", + "symbol": "xcusdt", + "precision": 6, + "currencyId": "311091173110107856861649819128533077277", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + }, + { + "id": "d69e3203-d914-4c70-8f38-ed66ea5d94ea", + "type": "assets", + "name": "equilibrium token", + "symbol": "xceq", + "precision": 9, + "currencyId": "190590555344745888270686124937537713878", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQ.svg", + "color": "5176E6" + }, + { + "id": "6cdc81d9-28a4-4b3c-8358-78a93f207ce7", + "type": "assets", + "name": "equilibrium dollar protocol", + "symbol": "xceqd", + "precision": 9, + "currencyId": "187224307232923873519830480073807488153", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQD.svg", + "color": "4D8BED" + }, + { + "id": "f68a9550-7d4c-4358-81bc-61c5ea233f20", + "type": "assets", + "name": "phala token", + "symbol": "xcpha", + "precision": 12, + "currencyId": "132685552157663328694213725410064821485", + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F" + }, + { + "id": "6fed1ff5-3aa5-4d94-b07a-22dfc0770fc0", + "type": "assets", + "name": "pink", + "symbol": "xcpink", + "precision": 10, + "currencyId": "64174511183114006009298114091987195453", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PINK.svg", + "color": "FF0066" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + }, + { + "id": "31b03360-5c73-4733-a72d-65daf4600315", + "symbol": "GLMR" + }, + { + "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", + "symbol": "aUSD" + }, + { + "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", + "symbol": "ACA" + }, + { + "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", + "symbol": "USDt" + } + ], + "availableDestinations": [ + { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + } + ] + }, + { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assets": [ + { + "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", + "symbol": "aUSD" + }, + { + "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", + "symbol": "ACA" + }, + { + "id": "31b03360-5c73-4733-a72d-65daf4600315", + "symbol": "GLMR" + } + ] + }, + { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assets": [ + { + "id": "31b03360-5c73-4733-a72d-65daf4600315", + "symbol": "GLMR" + } + ] + }, + { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assets": [ + { + "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", + "symbol": "USDt" + } + ] + } + ] + }, + "nodes": [ + { + "url": "wss://api-moonbeam.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://wss.api.moonbeam.network", + "name": "Moonbeam Foundation node" + }, + { + "url": "wss://moonbeam.unitedbloc.com", + "name": "UnitedBloc node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Moonbeam.svg", + "addressPrefix": 1284, + "options": [ + "ethereumBased" + ] + }, + { + "disabled": false, + "chainId": "91bc6e169807aaa54802737e1c504b2577d4fafedd5a02c10293b1cd60e39527", + "rank": 111, + "name": "Moonbase Alpha", + "ecosystem": "ethereumBased", + "externalApi": { + "staking": { + "type": "subsquid", + "url": "https://squid.subsquid.io/moonbase-x-fearless/v/v1/graphql" + }, + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-moonbase_alpha" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://moonbase.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "caf10b57-bb4d-437b-81be-d2e1a6acdcc5", + "name": "moonbase alpha", + "symbol": "dev", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF", + "staking": "parachain", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://wss.api.moonbase.moonbeam.network", + "name": "Moonbeam Network node" + }, + { + "url": "wss://moonbase.unitedbloc.com", + "name": "UnitedBloc node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Moonbeam.svg", + "addressPrefix": 1287, + "options": [ + "testnet", + "ethereumBased" + ] + }, + { + "disabled": false, + "chainId": "9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2092", + "name": "Kintsugi", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-kintsugi" + } + }, + "assets": [ + { + "id": "f5d1db12-0a68-4897-903d-51a887daa1db", + "name": "kintsugi", + "symbol": "kint", + "precision": 12, + "priceId": "kintsugi", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", + "color": "FFFFFF", + "type": "ormlChain", + "isUtility": true + }, + { + "id": "a6761186-60ba-4ea8-bec1-2db08a420301", + "type": "ormlChain", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + }, + { + "id": "80662ad9-8920-43ae-859a-33d97e87f74e", + "type": "ormlChain", + "name": "kintsugi ibtc", + "symbol": "kbtc", + "precision": 8, + "priceId": "kintsugi-btc", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", + "color": "FFFFFF" + } + ], + "nodes": [ + { + "url": "wss://api-kintsugi.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://api-kusama.interlay.io/parachain", + "name": "Kintsugi Labs node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/kintsugi.svg", + "addressPrefix": 2092, + "iosMinAppVersion": "2.0.7" + }, + { + "disabled": false, + "chainId": "9de765698374eb576968c8a764168893fb277e65ad3ddafcfe2c49593fc6d663", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2024", + "name": "Genshiro", + "ecosystem": "substrate", + "assets": [ + { + "id": "e207bcef-ab90-4df4-852f-566c309d778e", + "name": "genshiro", + "symbol": "gens", + "currencyId": "1734700659", + "precision": 9, + "priceId": "genshiro", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GENS.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "equilibrium" + } + ], + "nodes": [ + { + "url": "wss://node.ksm.genshiro.io", + "name": "Genshiro node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Genshiro.svg", + "addressPrefix": 67 + }, + { + "disabled": false, + "chainId": "631ccc82a078481584041656af292834e1ae6daab61d2875b4dd0c14bb9b17bc", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2048", + "name": "Robonomics", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://robonomics.subscan.io/{type}/{value}" + } + ], + "history": { + "type": "giantsquid", + "url": "https://squid-robonomics-api.squid.tachi.soramitsu.co.jp/graphql" + } + }, + "assets": [ + { + "id": "ca39e03e-dde3-41ac-b1f4-a3d20202b79e", + "name": "robonomics network", + "symbol": "xrt", + "precision": 9, + "priceId": "robonomics-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XRT.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + }, + { + "id": "b52b937a-f22b-4bab-a601-476aeeec4f2f", + "type": "assets", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "4294967295", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + } + ], + "nodes": [ + { + "url": "wss://kusama.rpc.robonomics.network", + "name": "Airalab node" + }, + { + "url": "wss://robonomics.leemo.me", + "name": "Leemo node" + }, + { + "url": "wss://robonomics.0xsamsara.com", + "name": "Samsara node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/robonomics.svg", + "addressPrefix": 32 + }, + { + "disabled": false, + "chainId": "4a12be580bb959937a1c7a61d5cf24428ed67fa571974b4007645d1886e7c89f", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2101", + "name": "Subsocial", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-subsocial-api.squid.tachi.soramitsu.co.jp/graphql" + } + }, + "assets": [ + { + "id": "07f9e907-d099-4893-a67b-96cb2fe63049", + "name": "subsocial", + "symbol": "sub", + "precision": 10, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/SUB.svg", + "color": "AC2489", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://para.subsocial.network", + "name": "Dappforce node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/subsocial_new.svg", + "addressPrefix": 28 + }, + { + "disabled": false, + "chainId": "1bf2a2ecb4a868de66ea8610f2ce7c8c43706561b6476031315f6640fe38e060", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2092", + "name": "Zeitgeist", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-zeitgeist-api.squid.tachi.soramitsu.co.jp/graphql" + } + }, + "assets": [ + { + "id": "2246fe14-4ec4-460c-8d92-e15bd337f8af", + "name": "zeitgeist", + "symbol": "ztg", + "precision": 10, + "priceId": "zeitgeist", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZTG.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-zeitgeist.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/zeitgeist.svg", + "addressPrefix": 73 + }, + { + "disabled": false, + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2034", + "name": "HydraDX", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-hydradx-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://hydradx.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "fce79b6c-e071-4271-837e-6ec87a719390", + "name": "hydradx", + "symbol": "hdx", + "precision": 12, + "priceId": "hydradx", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HDX.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + }, + { + "id": "4697396b-37c4-426f-a36a-fda1935f365a", + "type": "assetId", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "currencyId": "5", + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "existentialDeposit": "17540000" + }, + { + "id": "0de05a52-3686-486c-a80e-f7feb6e228d7", + "type": "assetId", + "name": "inter ibtc", + "symbol": "ibtc", + "precision": 8, + "currencyId": "11", + "priceId": "interbtc", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", + "color": "F2AE7F", + "existentialDeposit": "36" + }, + { + "id": "880664d6-71f6-473e-95ba-4cc697429578", + "type": "assetId", + "name": "moonbeam", + "symbol": "glmr", + "precision": 18, + "currencyId": "16", + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF", + "existentialDeposit": "34854864344868000" + }, + { + "id": "53bd7f6e-b8eb-468f-a2ec-2bf347e702a7", + "type": "assetId", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "10", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "existentialDeposit": "10000" + } + ], + "nodes": [ + { + "url": "wss://api-hydradx.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.hydradx.cloud", + "name": "Galactic Council node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/hydradx.svg", + "addressPrefix": 63 + }, + { + "disabled": false, + "chainId": "b3db41421702df9a7fcac62b53ffeac85f7853cc4e689e0b93aeb3db18c09d82", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2031", + "name": "Centrifuge", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-centrifuge-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://centrifuge.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "7b1963a6-11f1-461c-a9f1-83d82a54b7ee", + "name": "centrifuge", + "symbol": "cfg", + "precision": 18, + "priceId": "centrifuge", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CFG.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-centrifuge.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://fullnode.parachain.centrifuge.io", + "name": "Centrufge node" + }, + { + "url": "wss://rpc-centrifuge.luckyfriday.io", + "name": "LuckyFriday node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/centrifuge.svg", + "addressPrefix": 36 + }, + { + "disabled": false, + "chainId": "97da7ede98d7bad4e36b4d734b6055425a3be036da2a332ea5a7037656427a21", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2026", + "name": "Nodle Parachain", + "ecosystem": "substrate", + "assets": [ + { + "id": "e0e1107-e323-43aa-bb93-d7618d2c8cf5", + "name": "nodle network", + "symbol": "nodl", + "precision": 11, + "priceId": "nodle-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NODL.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-nodle.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/nodle.svg", + "addressPrefix": 37 + }, + { + "disabled": false, + "chainId": "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2032", + "name": "Interlay", + "ecosystem": "substrate", + "assets": [ + { + "id": "7a77b6b0-f015-4ccc-a5bb-3456e17775dd", + "name": "interlay", + "symbol": "intr", + "precision": 10, + "priceId": "interlay", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", + "color": "FFFFFF", + "type": "ormlChain", + "isUtility": true + }, + { + "id": "2a45aeb9-f585-4f1b-9558-ee3aa186a809", + "type": "ormlChain", + "currencyId": "DOT", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066" + }, + { + "id": "fdb17d7c-ca72-4ed7-9fc8-728aa366c843", + "type": "ormlChain", + "name": "inter ibtc", + "symbol": "ibtc", + "precision": 8, + "priceId": "interbtc", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", + "color": "F2AE7F" + } + ], + "nodes": [ + { + "url": "wss://api-interlay.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://api.interlay.io/parachain", + "name": "Kintsugi Labs node" + }, + { + "url": "wss://rpc-interlay.luckyfriday.io", + "name": "LuckyFriday node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/interlay.svg", + "addressPrefix": 2032 + }, + { + "disabled": false, + "chainId": "da5831fbc8570e3c6336d0d72b8c08f8738beefec812df21ef2afc2982ede09c", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2106", + "name": "Litmus", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-litmus-api.squid.tachi.soramitsu.co.jp/graphql" + } + }, + "assets": [ + { + "id": "15076759-6a5b-4cd6-b84c-e64842f094e5", + "name": "litentry", + "symbol": "lit", + "precision": 12, + "priceId": "litentry", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LIT_KSM.svg", + "color": "6530F0", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc.litmus-parachain.litentry.io", + "name": "Litentry node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/litmus.svg", + "addressPrefix": 131 + }, + { + "disabled": false, + "chainId": "3920bcb4960a1eef5580cd5367ff3f430eef052774f78468852f7b9cb39f8a3c", + "name": "Polkadex Main Network", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-polkadex-api.squid.tachi.soramitsu.co.jp/graphql" + } + }, + "assets": [ + { + "id": "5502c9cb-14f7-4de8-a35d-71263dc3f78f", + "name": "polkadex", + "symbol": "pdex", + "precision": 12, + "priceId": "polkadex", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PDEX.svg", + "color": "D32D79", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://mainnet.polkadex.trade", + "name": "Polkadex Team node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/polkadex.svg", + "addressPrefix": 88 + }, + { + "disabled": true, + "chainId": "577d331ca43646f547cdaa07ad0aa387a383a93416764480665103081f3eaf14", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2115", + "name": "Dorafactory Network", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/Dora-Factory-x-Fearless-Wallet" + } + }, + "assets": [ + { + "id": "c0d1efac-597d-4c56-b5ad-b683b8214ada", + "name": "dora factory", + "symbol": "dora", + "precision": 12, + "priceId": "dora-factory", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DORA.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kusama.dorafactory.org", + "name": "DORA node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/DoraFactory.svg", + "addressPrefix": 128 + }, + { + "disabled": false, + "chainId": "e7e0962324a3b86c83404dbea483f25fb5dab4c224791c81b756cfc948006174", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2043", + "name": "OriginTrail Parachain", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-origintrail-api.squid.tachi.soramitsu.co.jp/graphql" + } + }, + "assets": [ + { + "id": "af5bf9f0-0009-4cf8-98ed-b988268c94f1", + "name": "origitrail parachain", + "symbol": "otp", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OTP.svg", + "color": "6344DF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://parachain-rpc.origin-trail.network", + "name": "TraceLabs node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/OriginTrail.svg", + "addressPrefix": 101 + }, + { + "disabled": false, + "chainId": "84322d9cddbf35088f1e54e9a85c967a41a56a4f43445768125e61af166c7d31", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2037", + "name": "UNIQUE", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/Unique-x-Fearless-Wallet" + } + }, + "assets": [ + { + "id": "57d05537-06a2-453b-ac87-d081aee65ec9", + "name": "unique network", + "symbol": "unq", + "precision": 18, + "priceId": "unique-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UNQ.svg", + "color": "65BAF9", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-unique.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://ws.unique.network", + "name": "Geo Load Balancer node" + }, + { + "url": "wss://eu-ws.unique.network", + "name": "Unique Europe node" + }, + { + "url": "wss://asia-ws.unique.network", + "name": "Unique Asia node" + }, + { + "url": "wss://us-ws.unique.network", + "name": "Unique America node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/unique.svg", + "addressPrefix": 7391 + }, + { + "disabled": false, + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2030", + "name": "Bifrost Polkadot", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-bifrostpolkadot-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://bifrost.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "dc9e23e8-f4bf-4864-9f2c-c2fbd4b03886", + "name": "bifrost native coin", + "symbol": "bnc", + "precision": 12, + "priceId": "bifrost-native-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + }, + { + "id": "fd62d09e-cfae-44f8-81a0-bf99732643fc", + "type": "token2", + "currencyId": "0", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066" + }, + { + "id": "9ff3dbb1-5986-44b9-b247-db82ae3584a1", + "type": "token2", + "currencyId": "1", + "name": "moonbeam", + "symbol": "glmr", + "precision": 18, + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF" + }, + { + "id": "8dc39b21-04c9-4d1d-b9ec-8ea111052e77", + "type": "token2", + "currencyId": "2", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + } + ], + "nodes": [ + { + "url": "wss://api-bifrost-polkadot.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://hk.p.bifrost-rpc.liebi.com/ws", + "name": "Liebi node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bifrost.svg", + "addressPrefix": 6 + }, + { + "disabled": false, + "chainId": "2fc8bb6ed7c0051bdcf4866c322ed32b6276572713607e3297ccf411b8f14aa9", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2013", + "name": "Litentry", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-litentry-api.squid.tachi.soramitsu.co.jp/graphql" + } + }, + "assets": [ + { + "id": "10de552c-20cb-4a86-9bf8-cf5827ca2f71", + "name": "litentry", + "symbol": "lit", + "precision": 12, + "priceId": "litentry", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LIT_DOT.svg", + "color": "02C86A", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-litentry.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.litentry-parachain.litentry.io", + "name": "Litentry node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Litentry.svg", + "addressPrefix": 31 + }, + { + "disabled": false, + "chainId": "1bb969d85965e4bb5a651abbedf21a54b6b31a21f66b5401cc3f1e286268d736", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2035", + "name": "Phala", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-phala-api.squid.tachi.soramitsu.co.jp/graphql" + } + }, + "assets": [ + { + "id": "50add3d2-baa6-4bf3-9995-e6532ad51726", + "name": "phala", + "symbol": "pha", + "precision": 12, + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-phala.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://api.phala.network/ws", + "name": "Phala node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/phala.svg", + "addressPrefix": 30 + }, + { + "disabled": false, + "chainId": "daab8df776eb52ec604a5df5d388bb62a050a0aaec4556a64265b9d42755552d", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2019", + "name": "Composable Finance", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-composable-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://composable.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "7f429a3f-4666-40a2-a506-58bfe01504c4", + "name": "composable finance", + "symbol": "layr", + "precision": 12, + "priceId": "composable-finance-layr", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LAYR.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-composable.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.composable.finance", + "name": "Composable node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/composable.svg", + "addressPrefix": 49 + }, + { + "disabled": false, + "chainId": "35a06bfec2edf0ff4be89a6428ccd9ff5bd0167d618c5a0d4341f9600a458d14", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2119", + "name": "Bajun Kusama", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-bajun-api.squid.tachi.soramitsu.co.jp/graphql" + } + }, + "assets": [ + { + "id": "cbf84703-ba1d-4a39-ab5e-424756c91422", + "name": "bajun network", + "symbol": "baju", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BAJU.svg", + "color": "69A6DA", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc-parachain.bajun.network", + "name": "AjunaNetwork node" + }, + { + "url": "wss://bajun.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bajun.svg", + "addressPrefix": 1337 + }, + { + "disabled": false, + "chainId": "feb426ca713f0f46c96465b8f039890370cf6bfd687c9076ea2843f58a6ae8a7", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2113", + "name": "Kabocha", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-kabocha-api.squid.tachi.soramitsu.co.jp/graphql" + } + }, + "assets": [ + { + "id": "898eb0a1-ede6-437a-97b7-e92407db985f", + "name": "kabocha", + "symbol": "kab", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAB.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kabocha.jelliedowl.com", + "name": "JelliedOwl node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kabocha.svg", + "addressPrefix": 27 + }, + { + "disabled": true, + "chainId": "52149c30c1eb11460dce6c08b73df8d53bb93b4a15d0a2e7fd5dafe86a73c0da", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2107", + "name": "KICO", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/KICO-x-Fearless-Wallet" + } + }, + "assets": [ + { + "id": "3a11badb-fe19-4cf4-9651-4b635a49bb7e", + "name": "kico", + "symbol": "kico", + "precision": 14, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KICO.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc.kico.dico.io", + "name": "DICO Foundation node" + }, + { + "url": "wss://rpc.api.kico.dico.io", + "name": "DICO Foundation 2 node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/KICO.svg", + "addressPrefix": 42 + }, + { + "disabled": true, + "chainId": "d611f22d291c5b7b69f1e105cca03352984c344c4421977efaa4cbdd1834e2aa", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2110", + "name": "Mangata Kusama Mainnet", + "ecosystem": "substrate", + "assets": [ + { + "id": "27ccf12f-3ae0-4c5e-b337-ee43b7c23928", + "name": "mangata x", + "symbol": "mgx", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MGX.svg", + "color": "10C5C5", + "isUtility": true, + "type": "normal" + }, + { + "id": "f63730eb-9fe2-41e9-9ec3-3cc4e6f02d0a", + "type": "ormlChain", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "4", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + }, + { + "id": "459f852b-665c-4743-8b2c-5bc5fc6abdda", + "type": "ormlChain", + "name": "bifrost native coin", + "symbol": "bnc", + "precision": 12, + "currencyId": "14", + "priceId": "bifrost-native-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", + "color": "FFFFFF" + }, + { + "id": "8ef9ca57-f2e4-4edb-9365-2805c7143537", + "type": "ormlChain", + "name": "voucher ksm", + "symbol": "vksm", + "precision": 12, + "currencyId": "15", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VKSM.svg", + "color": "FFFFFF" + }, + { + "id": "31aef057-d42a-419c-b0c4-cd61dc7e96c5", + "type": "ormlChain", + "name": "zenlink network", + "symbol": "zlk", + "precision": 18, + "currencyId": "26", + "priceId": "zenlink-network-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZLK.svg", + "color": "FFFFFF" + }, + { + "id": "3b46e22a-f819-4b2b-9dca-23dec1b66f82", + "type": "ormlChain", + "name": "rmrk", + "symbol": "rmrk", + "precision": 10, + "currencyId": "31", + "priceId": "rmrk", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", + "color": "392B73" + }, + { + "id": "2c28b884-dcbe-4653-91d2-934beefe4f2c", + "type": "ormlChain", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "30", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + }, + { + "id": "a4268819-dd67-45ba-a8f4-32277e3817b1", + "type": "ormlChain", + "name": "turing token", + "symbol": "tur", + "precision": 10, + "currencyId": "7", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUR.svg", + "color": "5DCBD0" + } + ], + "nodes": [ + { + "url": "wss://prod-kusama-collator-01.mangatafinance.cloud", + "name": "Mangata node" + }, + { + "url": "wss://kusama-archive.mangata.online", + "name": "Mangata Archive node" + }, + { + "url": "wss://kusama-rpc.mangata.online", + "name": "Mangata RPC node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/MagnataX.svg", + "addressPrefix": 42 + }, + { + "disabled": true, + "chainId": "eacdd2d5b42de9769ccbb6e8d9013ab0d90ab105bf601d4aac53e874c145ec21", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2116", + "name": "DataHighway Tanganika", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/DataHighway-Tanganika-x-Fearless-Wallet" + } + }, + "assets": [ + { + "id": "15df9971-2e6a-4619-a5ca-9ad571655287", + "name": "datahighway", + "symbol": "dhx", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DHX.svg", + "color": "6C179F", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://tanganika.datahighway.com", + "name": "DataHighway node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/DataHighway.svg", + "addressPrefix": 33 + }, + { + "disabled": true, + "chainId": "89d3ec46d2fb43ef5a9713833373d5ea666b092fa8fd68fbc34596036571b907", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "name": "Equilibrium", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://equilibrium.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "47d1f5c5-c43d-4082-b577-ba0af91cb1a6", + "name": "equilibrium", + "symbol": "eq", + "currencyId": "25969", + "precision": 9, + "existentialDeposit": "1000000000", + "priceId": "equilibrium-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQ.svg", + "color": "5176E6", + "isUtility": true, + "type": "equilibrium" + }, + { + "id": "50bb6d02-1aad-4a94-b41c-2a15b4aee0e8", + "name": "equilibrium dollar protocol", + "symbol": "eqd", + "currencyId": "6648164", + "precision": 9, + "existentialDeposit": "1000000000", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQD.svg", + "color": "4D8BED", + "type": "equilibrium" + }, + { + "id": "6b21d130-7475-4f61-b893-799061fc05bf", + "name": "acala", + "symbol": "aca", + "currencyId": "6382433", + "precision": 9, + "priceId": "acala", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", + "color": "FFFFFF", + "type": "equilibrium" + }, + { + "id": "9c67711c-7f0c-45fa-b7fc-66b655ba17e1", + "name": "bnb", + "symbol": "bnb", + "currencyId": "6450786", + "precision": 9, + "priceId": "binancecoin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", + "color": "F3BA2F", + "type": "equilibrium" + }, + { + "id": "b62f4a0a-883f-496f-a797-fd2b24abe01b", + "name": "polkadot", + "symbol": "dot", + "currencyId": "6582132", + "precision": 9, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "type": "equilibrium" + }, + { + "id": "665c8d3d-a035-45fb-9c9c-7cfaf7da96c6", + "name": "astar", + "symbol": "astr", + "currencyId": "1634956402", + "precision": 9, + "priceId": "astar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", + "color": "0AE2FF", + "type": "equilibrium" + }, + { + "id": "c98efbda-a452-4329-8199-fef32dc9307e", + "name": "acala dollar", + "symbol": "ausd", + "currencyId": "1635087204", + "precision": 9, + "priceId": "acala-dollar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", + "color": "E40C5B", + "type": "equilibrium" + }, + { + "id": "793fc038-c134-4d58-af6d-cb7c1be5a4ea", + "name": "binance usd", + "symbol": "busd", + "currencyId": "1651864420", + "precision": 9, + "priceId": "binance-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", + "color": "F3BA2F", + "type": "equilibrium" + }, + { + "id": "e8c17b03-a94c-4fd3-a599-189a1b5e8e32", + "name": "moonbeam", + "symbol": "glmr", + "currencyId": "1735159154", + "precision": 9, + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF", + "type": "equilibrium" + }, + { + "id": "a9d1b0b2-ad4e-4d86-88c5-72a8947099f0", + "name": "inter ibtc", + "symbol": "ibtc", + "currencyId": "1768060003", + "precision": 9, + "priceId": "interbtc", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", + "color": "F2AE7F", + "type": "equilibrium" + }, + { + "id": "502acf71-3c1f-4f1c-91d9-179fd2987a34", + "name": "interlay", + "symbol": "intr", + "currencyId": "1768846450", + "precision": 9, + "priceId": "interlay", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", + "color": "FFFFFF", + "type": "equilibrium" + }, + { + "id": "f67bfaf7-e081-4355-abda-4f1faaeb3579", + "name": "parallel finance", + "symbol": "para", + "currencyId": "1885434465", + "precision": 9, + "priceId": "parallel-finance", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PARA.svg", + "color": "4C19E7", + "type": "equilibrium" + }, + { + "id": "c1ad2bb4-701a-4711-bacb-59259ff3d57d", + "name": "tether usd", + "symbol": "usdt", + "currencyId": "1970496628", + "precision": 9, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "type": "equilibrium" + }, + { + "id": "26a16776-71c9-450d-bfaf-df3a8cd6d277", + "name": "fluid xdot", + "symbol": "xdot", + "currencyId": "2019848052", + "precision": 9, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "type": "equilibrium" + }, + { + "id": "1eb9d66e-a92d-49c5-95fc-fd7a844fc66d", + "name": "equilibrium dot", + "symbol": "eqdot", + "currencyId": "435694104436", + "precision": 9, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/eqDOT.svg", + "color": "FFFFFF", + "type": "equilibrium" + } + ], + "nodes": [ + { + "url": "wss://api-equilibrium.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/equilibrium.svg", + "addressPrefix": 68, + "options": [ + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "724c168d8e86b78b831c641e2cc822b8d1bf99fa0b4b28fe59985cd6fd580215", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2039", + "name": "Integritee Shell", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-integritee" + } + }, + "assets": [ + { + "id": "07c55d3a-b24e-410e-b9ca-7da0707fbd61", + "name": "integritee", + "symbol": "teer", + "precision": 12, + "priceId": "integritee", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TEER.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-integritee.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/integritee.svg", + "addressPrefix": 13 + }, + { + "disabled": false, + "chainId": "0f62b701fb12d02237a33b84818c11f621653d2b1614c777973babf4652b535d", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2114", + "name": "Turing Network", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-turing" + } + }, + "assets": [ + { + "id": "148ce615-aea3-42fa-be45-5eb5606813b8", + "name": "turing token", + "symbol": "tur", + "precision": 10, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUR.svg", + "color": "5DCBD0", + "isUtility": true, + "type": "normal" + }, + { + "id": "e8774037-c4a5-42b5-87a4-cf946a60a406", + "type": "assetId", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "1", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "existentialDeposit": "100000000" + } + ], + "nodes": [ + { + "url": "wss://api-turing.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.turing.oak.tech", + "name": "OAK node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/OAK.svg", + "addressPrefix": 51 + }, + { + "disabled": false, + "chainId": "7dd99936c1e9e6d1ce7d90eb6f33bea8393b4bf87677d675aa63c9cb3e8c5b5b", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "1001", + "name": "Encointer on Kusama", + "ecosystem": "substrate", + "assets": [ + { + "id": "1e0c2ec6-935f-49bd-a854-5e12ee6c9f1b", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "purchaseProviders": [ + "ramp" + ], + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kusama.api.encointer.org", + "name": "Encointer Association node" + }, + { + "url": "wss://sys.ibp.network/encointer-kusama", + "name": "IBP-GeoDNS1 node" + }, + { + "url": "wss://sys.dotters.network/encointer-kusama", + "name": "IBP-GeoDNS2 node" + }, + { + "url": "wss://ksm-rpc.stakeworld.io/encointer", + "name": "Stakeworld node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/encointer.svg", + "addressPrefix": 2 + }, + { + "disabled": true, + "chainId": "0e06260459b4f9034aba0a75108c08ed73ea51d2763562749b1d3600986c4ea5", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2102", + "name": "Pichiu Network", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/Pichiu-x-Fearless-Wallet" + } + }, + "assets": [ + { + "id": "5b196f7c-475a-493e-abbf-9f808d6fb863", + "name": "pichu token", + "symbol": "pchu", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PCHU.svg", + "color": "AE4071", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kusama.kylin-node.co.uk", + "name": "Kylin Network node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/pichiu.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "d42e9606a995dfe433dc7955dc2a70f495f350f373daa200098ae84437816ad2", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2125", + "name": "InvArch Tinker Network", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/InvArch-Tinker-x-Fearless-Wallet" + } + }, + "assets": [ + { + "id": "8b58d683-fdc9-477e-a1b2-2c95b663e4a5", + "name": "tinkernet parachain", + "symbol": "tnkr", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TNKR.svg", + "color": "AC2489", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-invarch.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Tinkernet.svg", + "addressPrefix": 117 + }, + { + "disabled": true, + "chainId": "19a3733beb9cb8a970a308d835599e9005e02dc007a35440e461a451466776f8", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2123", + "name": "GM Parachain", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid.subsquid.io/gs-main-gmordie/graphql" + } + }, + "assets": [ + { + "id": "19763697-37d8-4643-b840-3fd8565f5d83", + "name": "gm parachain", + "symbol": "fren", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/FREN.svg", + "color": "F7D64D", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://leemo.gmordie.com", + "name": "leemo node" + }, + { + "url": "wss://ws.gm.bldnodes.org", + "name": "bLd Nodes node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/GM%20Parachain.svg", + "addressPrefix": 7013 + }, + { + "disabled": true, + "chainId": "ca93a37c913a25fa8fdb33c7f738afc39379cb71d37874a16d4c091a5aef9f89", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2121", + "name": "Imbue Kusama", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/Imbue-x-Fearless-Wallet" + } + }, + "assets": [ + { + "id": "c01b37ab-eefa-427d-ba50-dd7a1cbe1798", + "name": "imbue network", + "symbol": "imbu", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/IMBU.svg", + "color": "C3FD51", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://imbue-kusama.imbue.network", + "name": "Imbue Network node node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Imbue.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "cceae7f3b9947cdb67369c026ef78efa5f34a08fe5808d373c04421ecf4f1aaf", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2124", + "name": "Amplitude", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-amplitude-api.squid.tachi.soramitsu.co.jp/graphql" + } + }, + "assets": [ + { + "id": "b2e6c029-ae73-46f9-9660-51d7034ddc53", + "name": "amplitude", + "symbol": "ampe", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AMPE.svg", + "color": "7CE2A0", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-amplitude.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc-amplitude.pendulumchain.tech", + "name": "PendulumChain node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Amplitude.svg", + "addressPrefix": 57 + }, + { + "disabled": true, + "chainId": "f0b8924b12e8108550d28870bc03f7b45a947e1b2b9abf81bfb0b89ecb60570e", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2046", + "name": "Darwinia2", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-darwinia-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://darwinia-parachain.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "b861f610-cf2c-43ad-a660-f6b809a05062", + "name": "darwinia", + "symbol": "ring", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RING.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc.darwinia.network", + "name": "Darwinia Network node" + }, + { + "url": "wss://darwinia-rpc.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://parachain-rpc.darwinia.network", + "name": "Darwinia Network 1 node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/darwinia.svg", + "addressPrefix": 18 + }, + { + "disabled": true, + "chainId": "f2584690455deda322214e97edfffaf4c1233b6e4625e39478496b3e2f5a44c5", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2052", + "name": "Kylin Network", + "ecosystem": "substrate", + "assets": [ + { + "id": "7512aeb7-7bdc-42dc-abe3-80ed764c80bd", + "name": "kylin network", + "symbol": "kyl", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KYL.svg", + "color": "AE4071", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://polkadot.kylin-node.co.uk", + "name": "Kylin Network node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kylin%20Network.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "d4c0c08ca49dc7c680c3dac71a7c0703e5b222f4b6c03fe4c5219bb8f22c18dc", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "name": "Crust Shadow Parachain", + "ecosystem": "substrate", + "paraId": "2012", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-crust_shadow_parachain" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://shadow.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "d1e3be8c-880e-46fe-97e3-761c0a58aed1", + "name": "crust shadow", + "symbol": "csm", + "precision": 12, + "priceId": "crust-storage-market", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CSM_Crust_Shadow.svg", + "color": "F3AD56", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc-shadow.crust.network", + "name": "Crust node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/crustshadow.svg", + "addressPrefix": 66 + }, + { + "disabled": true, + "chainId": "6e938c4a786f8df6f38d0c06f00a8573f1f7aabeebf48aee5157a93cc5fe3271", + "name": "Kusama (test)", + "ecosystem": "substrate", + "assets": [ + { + "id": "03561957-3383-4f9f-8033-1b2c36d88db6", + "name": "kusama", + "symbol": "unit", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "staking": "relaychain", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://ws.relaychain-node-1.k1.tst.fearless.soramitsu.co.jp", + "name": "SORA Kusama Test node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kusama.svg", + "addressPrefix": 2, + "options": [ + "poolStaking" + ] + }, + { + "disabled": true, + "chainId": "fd4d46e9a51e16babf791b94d6dbf771ed1d7de8a11b310aa98c847890fa9ff3", + "name": "Polkadot (test)", + "ecosystem": "substrate", + "assets": [ + { + "id": "405e7e40-a2f1-45a3-a32f-7f271b2819d2", + "name": "polkadot", + "symbol": "unit", + "precision": 10, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "staking": "relaychain", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://ws.relaychain-node-2.p1.tst.fearless.soramitsu.co.jp/", + "name": "SORA Polkadot Test node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polkadot.svg", + "addressPrefix": 2, + "options": [ + "poolStaking" + ] + }, + { + "disabled": true, + "chainId": "b34f6cd03a41f0fab38ba9fd5b11cce5f303633c46f39f0c6fdc7c3c602bafa9", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "name": "Snow Kusama", + "ecosystem": "substrate", + "assets": [ + { + "id": "e739d665-7af5-4e65-ab5f-93f54a5b70b3", + "name": "snow", + "symbol": "icz", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ICZ.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://snow-rpc.icenetwork.io", + "name": "Snow node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SNOW.svg", + "addressPrefix": 2207 + }, + { + "disabled": false, + "chainId": "3266816be9fa51b32cfea58d3e33ca77246bc9618595a4300e44c8856a8d8a17", + "rank": 100, + "name": "SORA test", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "sora", + "url": "https://api.subquery.network/sq/sora-xor/sora-staging" + }, + "pricing": { + "type": "sora", + "url": "https://api.subquery.network/sq/sora-xor/sora-staging" + }, + "staking": { + "type": "sora", + "url": "https://squid.subsquid.io/sora-stage/v/v5/graphql" + } + }, + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b1", + "symbol": "ROC" + } + ], + "availableDestinations": [ + { + "chainId": "6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e", + "assets": [ + { + "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b1", + "symbol": "ROC" + } + ] + } + ] + }, + "assets": [ + { + "id": "b5a44630-920e-43ee-809f-61890d0888b0", + "name": "sora", + "symbol": "xor", + "currencyId": "0x0200000000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", + "color": "EE2233", + "isUtility": true, + "type": "soraAsset", + "staking": "relaychain", + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200000000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "0ecacd48-ffd4-4a2e-87e3-c5f72f9a9877", + "name": "sora validator", + "symbol": "val", + "currencyId": "0x0200040000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora-validator-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VAL.svg", + "color": "F3B966", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200040000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "87ba5538-34db-4d53-9104-25f42b0bb55b", + "name": "polkaswap", + "symbol": "pswap", + "currencyId": "0x0200050000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "polkaswap", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PSWAP.svg", + "color": "FF0066", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200050000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "038a7045-af00-466d-b72b-95485c4674b7", + "name": "sora synthetics", + "symbol": "xst", + "currencyId": "0x0200090000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora-synthetics", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XST.svg", + "color": "EE2233", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200090000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "c96e012c-0786-4980-9750-bae61de0aa19", + "name": "sora synthetic usd", + "symbol": "xstusd", + "currencyId": "0x0200080000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora-synthetic-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XSTUSD.svg", + "color": "EE2233", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200080000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "7bcc178d-1ebe-46b8-88fb-79649828f21d", + "name": "demeter", + "symbol": "deo", + "currencyId": "0x00f2f4fda40a4bf1fc3769d156fa695532eec31e265d75068524462c0b80f674", + "precision": 18, + "priceId": "demeter", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DEO.svg", + "color": "54B198", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x00f2f4fda40a4bf1fc3769d156fa695532eec31e265d75068524462c0b80f674" + } + }, + { + "id": "79ba9571-6ea4-4790-8fda-d20ddbad4f33", + "name": "ceres", + "symbol": "ceres", + "currencyId": "0x008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440", + "precision": 18, + "priceId": "ceres", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CERES.svg", + "color": "243579", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440" + } + }, + { + "id": "38eae54b-723d-457c-8d45-4beab249612f", + "name": "noir token", + "symbol": "noir", + "currencyId": "0x0044aee0776cfb826434af8ef0f8e2c7e9e6644cfda0ae0f02c471b1eebc2483", + "precision": 18, + "priceId": "noir-phygital", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NOIR.svg", + "color": "A0A7FF", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x0044aee0776cfb826434af8ef0f8e2c7e9e6644cfda0ae0f02c471b1eebc2483" + } + }, + { + "id": "2565e418-d5bc-4318-99b5-53e893681518", + "name": "umitoken", + "symbol": "umi", + "currencyId": "0x003252667a82d2dd70fa046eea663eaec1f2e37c20879f113b880b04c5ebd805", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UMI.svg", + "color": "3C7EB2", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x003252667a82d2dd70fa046eea663eaec1f2e37c20879f113b880b04c5ebd805" + } + }, + { + "id": "9b040bf8-a852-4e10-aa14-d3793db27a95", + "name": "tether usd", + "symbol": "usdt", + "currencyId": "0x0083a6b3fbc6edae06f115c8953ddd7cbfba0b74579d6ea190f96853073b76f4", + "precision": 18, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "type": "soraAsset" + }, + { + "id": "1b20dfcd-a40d-4850-a407-5a45f3bf4889", + "name": "binance usd", + "symbol": "busd", + "currencyId": "0x00567d096a736f33bf78cad7b01e33463923b9c933ee13ab7e3fb7b23f5f953a", + "precision": 18, + "priceId": "binance-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", + "color": "F3BA2F", + "type": "soraAsset" + }, + { + "id": "5c017385-e702-47d2-8f3a-ac8146c2b9dd", + "name": "usd coin", + "symbol": "usdc", + "currencyId": "0x00ef6658f79d8b560f77b7b20a5d7822f5bc22539c7b4056128258e5829da517", + "precision": 18, + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4", + "type": "soraAsset" + }, + { + "id": "db07f99c-0c76-483a-891f-86fbd028fdc5", + "name": "bokolo cash", + "symbol": "BCSI", + "currencyId": "0x00eacaea6599a04358fda986388ef0bb0c17a553ec819d5de2900c0af0862502", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BCSD.svg", + "color": "FFFFFF", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00eacaea6599a04358fda986388ef0bb0c17a553ec819d5de2900c0af0862502" + } + }, + { + "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b1", + "name": "rococo", + "symbol": "roc", + "precision": 18, + "currencyId": "0x00dc9b4341fde46c9ac80b623d0d43afd9ac205baabdc087cadaa06f92b309c7", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "type": "soraAsset" + }, + { + "id": "ada3b18e-1912-4f96-ad3b-4d0e1b1d1d0a", + "symbol": "tbcd", + "name": "sora tbc dollar", + "currencyId": "0x02000a0000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/TBCD.svg", + "color": "6D8954", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x02000a0000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "eface91d-b2a8-49d2-88e8-640586bda477", + "name": "polkadot", + "symbol": "dot", + "currencyId": "0x0003b1dbee890acfb1b3bc12d1bb3b4295f52755423f84d1751b2545cebf000b", + "precision": 18, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "type": "soraAsset" + }, + { + "id": "191c31de-62b1-41e4-aad3-15a5be1b4cd4", + "name": "dai", + "symbol": "dai", + "currencyId": "0x0200060000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "dai", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", + "color": "F9AF1A", + "type": "soraAsset" + }, + { + "id": "3ab2c884-6c6e-4f92-b87a-a013c80210af", + "name": "ethereum", + "symbol": "eth", + "currencyId": "0x0200070000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "627EEA", + "type": "soraAsset" + } + ], + "nodes": [ + { + "url": "wss://ws.framenode-8.s5.stg1.sora2.soramitsu.co.jp", + "name": "Sora Stage #8" + }, + { + "url": "wss://ws.framenode-1.r0.dev.sora2.soramitsu.co.jp", + "name": "Sora Card Test Node #1" + }, + { + "url": "wss://ws.framenode-2.r0.dev.sora2.soramitsu.co.jp", + "name": "Sora Card Test Node #2" + }, + { + "url": "wss://ws.framenode-3.r0.dev.sora2.soramitsu.co.jp", + "name": "Sora Card Test Node #3" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", + "addressPrefix": 69, + "options": [ + "testnet", + "polkaswap", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", + "rank": 0, + "name": "SORA Mainnet", + "ecosystem": "substrate", + "externalApi": { + "staking": { + "type": "sora", + "url": "https://sora.squids.live/sora/graphql" + }, + "pricing": { + "type": "sora", + "url": "https://api.subquery.network/sq/sora-xor/sora-prod" + }, + "history": { + "type": "sora", + "url": "https://sora.squids.live/sora/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://sora.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "b774c386-5cce-454a-a845-1ec0381538ec", + "name": "sora", + "symbol": "xor", + "currencyId": "0x0200000000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", + "color": "EE2233", + "isUtility": true, + "type": "soraAsset", + "staking": "relaychain", + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200000000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "24d0809e-0a4c-42ea-bdd8-dc7a518f389c", + "name": "sora validator", + "symbol": "val", + "currencyId": "0x0200040000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora-validator-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VAL.svg", + "color": "F3B966", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200040000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "37a999a2-5e90-4448-8b0e-98d06ac8f9d4", + "name": "polkaswap", + "symbol": "pswap", + "currencyId": "0x0200050000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "polkaswap", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PSWAP.svg", + "color": "FF0066", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200050000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "75a0bc9b-a1fb-446e-8781-621036bfd979", + "name": "sora synthetics", + "symbol": "xst", + "currencyId": "0x0200090000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora-synthetics", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XST.svg", + "color": "EE2233", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200090000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "217925d8-c529-4480-98e5-b8bf651129ef", + "name": "sora synthetic usd", + "symbol": "xstusd", + "currencyId": "0x0200080000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora-synthetic-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XSTUSD.svg", + "color": "EE2233", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200080000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "5e3de486-789e-4e47-8f49-870852cfebb6", + "name": "demeter", + "symbol": "deo", + "currencyId": "0x00f2f4fda40a4bf1fc3769d156fa695532eec31e265d75068524462c0b80f674", + "precision": 18, + "priceId": "demeter", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DEO.svg", + "color": "54B198", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x00f2f4fda40a4bf1fc3769d156fa695532eec31e265d75068524462c0b80f674" + } + }, + { + "id": "8fe0cbf4-7ece-45f6-968b-5c1b77accff0", + "name": "ceres", + "symbol": "ceres", + "currencyId": "0x008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440", + "precision": 18, + "priceId": "ceres", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CERES.svg", + "color": "243579", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440" + } + }, + { + "id": "079f2a74-1440-440c-b826-6d85a7dd3a91", + "name": "noir token", + "symbol": "noir", + "currencyId": "0x0044aee0776cfb826434af8ef0f8e2c7e9e6644cfda0ae0f02c471b1eebc2483", + "precision": 18, + "priceId": "noir-phygital", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NOIR.svg", + "color": "A0A7FF", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x0044aee0776cfb826434af8ef0f8e2c7e9e6644cfda0ae0f02c471b1eebc2483" + } + }, + { + "id": "2de2b668-33cd-4e85-a501-4921481e618f", + "name": "umitoken", + "symbol": "umi", + "currencyId": "0x003252667a82d2dd70fa046eea663eaec1f2e37c20879f113b880b04c5ebd805", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UMI.svg", + "color": "3C7EB2", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x003252667a82d2dd70fa046eea663eaec1f2e37c20879f113b880b04c5ebd805" + } + }, + { + "id": "4c7b8da9-b297-4093-b8bc-28d477e7b5ad", + "name": "tether usd", + "symbol": "usdt", + "currencyId": "0x0083a6b3fbc6edae06f115c8953ddd7cbfba0b74579d6ea190f96853073b76f4", + "precision": 18, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x0083a6b3fbc6edae06f115c8953ddd7cbfba0b74579d6ea190f96853073b76f4" + } + }, + { + "id": "23c41bbb-2e1a-4d64-bbab-5080975ecc1c", + "name": "binance usd", + "symbol": "busd", + "currencyId": "0x00567d096a736f33bf78cad7b01e33463923b9c933ee13ab7e3fb7b23f5f953a", + "precision": 18, + "priceId": "binance-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", + "color": "F3BA2F", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00567d096a736f33bf78cad7b01e33463923b9c933ee13ab7e3fb7b23f5f953a" + } + }, + { + "id": "c8ce20ed-8690-4b46-9b3d-872e325ae636", + "name": "usd coin", + "symbol": "usdc", + "currencyId": "0x00ef6658f79d8b560f77b7b20a5d7822f5bc22539c7b4056128258e5829da517", + "precision": 18, + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00ef6658f79d8b560f77b7b20a5d7822f5bc22539c7b4056128258e5829da517" + } + }, + { + "id": "1e6f8ba3-5aeb-41d8-b80e-a44ce0f33716", + "name": "dai", + "symbol": "dai", + "currencyId": "0x0200060000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "dai", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", + "color": "F9AF1A", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200060000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "82f45df3-b6d8-43e7-a440-c0e73ab59785", + "name": "ethereum", + "symbol": "eth", + "currencyId": "0x0200070000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "627EEA", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200070000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "94e573f3-a9f3-4f7e-9244-8492288ca558", + "name": "soshiba", + "symbol": "soshiba", + "currencyId": "0x005aa73d7a4a3fdbe830c7d0ee26c09ba7f1db119da86d5b4dcb6609dac5ceb5", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/SHIB.svg", + "color": "FFA409", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x005aa73d7a4a3fdbe830c7d0ee26c09ba7f1db119da86d5b4dcb6609dac5ceb5" + } + }, + { + "id": "68a46965-94e8-4a03-af65-6237f83d482f", + "symbol": "tbcd", + "name": "sora tbc dollar", + "currencyId": "0x02000a0000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/TBCD.svg", + "color":"6D8954", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x02000a0000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "61f864b5-9fe0-4ba5-b5b6-c338ceaeee91", + "name": "hermes dao", + "symbol": "hmx", + "currencyId": "0x002d4e9e03f192cc33b128319a049f353db98fbf4d98f717fd0b7f66a0462142", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/HMX.svg", + "color":"FFFFFF", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x002d4e9e03f192cc33b128319a049f353db98fbf4d98f717fd0b7f66a0462142" + } + }, + { + "id": "a13169a1-32fa-4b44-aecb-c404c5f3cdbc", + "name": "bokolo cash", + "symbol": "BCSI", + "currencyId": "0x00eacaea6599a04358fda986388ef0bb0c17a553ec819d5de2900c0af0862502", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BCSD.svg", + "color": "FFFFFF", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00eacaea6599a04358fda986388ef0bb0c17a553ec819d5de2900c0af0862502" + } + }, + { + "id": "5416b261-a759-4ba6-bc83-ea79a83c5101", + "name": "kusama", + "symbol": "ksm", + "currencyId": "0x00117b0fa73c4672e03a7d9d774e3b3f91beb893e93d9a8d0430295f44225db8", + "precision": 18, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00117b0fa73c4672e03a7d9d774e3b3f91beb893e93d9a8d0430295f44225db8" + } + }, + { + "id": "cd092a5a-4eb6-4318-9f11-4bf8454d67a2", + "name": "polkadot", + "symbol": "dot", + "currencyId": "0x0003b1dbee890acfb1b3bc12d1bb3b4295f52755423f84d1751b2545cebf000b", + "precision": 18, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x0003b1dbee890acfb1b3bc12d1bb3b4295f52755423f84d1751b2545cebf000b" + } + }, + { + "id": "fb88fa55-b8c8-4ff1-afa8-f72a86a238a4", + "name": "acala", + "symbol": "aca", + "currencyId": "0x001ddbe1a880031da72f7ea421260bec635fa7d1aa72593d5412795408b6b2ba", + "precision": 18, + "priceId": "acala", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", + "color": "FFFFFF", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x001ddbe1a880031da72f7ea421260bec635fa7d1aa72593d5412795408b6b2ba" + } + }, + { + "id": "acc32ee0-8fdc-4743-91e1-f70cc4f3069b", + "name": "astar", + "symbol": "astr", + "currencyId": "0x009dd037fcb32f4fe17c513abd4641a2ece844d106e30788124f0c0acc6e748e", + "precision": 18, + "priceId": "astar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", + "color": "0AE2FF", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x009dd037fcb32f4fe17c513abd4641a2ece844d106e30788124f0c0acc6e748e" + } + }, + { + "id": "0ef3afdc-cdd3-47cc-bd52-817c54ae65b5", + "name": "liberland merit", + "symbol": "llm", + "currencyId": "0x00073edd278e1bd6a7f9d0b27d4f3e93b73c8f0832b58a4df13c69611a99f156", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLM.svg", + "color": "EFB900", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00073edd278e1bd6a7f9d0b27d4f3e93b73c8f0832b58a4df13c69611a99f156" + } + }, + { + "id": "1c3b4fcb-5a5f-4319-9dce-d178006eb9bf", + "name": "liberland dollar", + "symbol": "lld", + "currencyId": "0x00513be65493a7fc3e2128d4230061a530acf40478a4affa20bbba27a310673e", + "precision": 18, + "priceId": "liberland-lld", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLD.svg", + "color": "00437F", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00513be65493a7fc3e2128d4230061a530acf40478a4affa20bbba27a310673e" + } + }, + { + "id": "a543b9a2-f85a-4974-92fc-435d6bc418e5", + "name": "toncoin", + "symbol": "toncoin", + "currencyId": "0x00e8c8923623335128807857dfa38f9212e9803394a2c976e97245d7063bbe10", + "precision": 18, + "priceId": "the-open-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg", + "color": "0098EA", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00e8c8923623335128807857dfa38f9212e9803394a2c976e97245d7063bbe10" + } + }, + { + "id": "59a87850-0194-4040-b92e-b869ee3dd3fa", + "name": "kensetsu token", + "symbol": "ken", + "currencyId": "0x02000b0000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KEN.svg", + "color": "00004E", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x02000b0000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "ffc85c62-c970-4cb4-900c-f7d4831c3695", + "name": "kensetsu usd", + "symbol": "kusd", + "currencyId": "0x02000c0000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KUSD.svg", + "color": "BF0A30", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x02000c0000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "46e8a947-ade7-4c87-83b5-d724a35da919", + "name": "apollo", + "symbol": "apollo", + "currencyId": "0x00efe45135018136733be626b380a87ae663ccf6784a25fe9d9d2be64acecb9d", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/APOLLO.svg", + "color": "EB0EAD", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00efe45135018136733be626b380a87ae663ccf6784a25fe9d9d2be64acecb9d" + } + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "5416b261-a759-4ba6-bc83-ea79a83c5101", + "symbol": "KSM" + }, + { + "id": "cd092a5a-4eb6-4318-9f11-4bf8454d67a2", + "symbol": "DOT" + }, + { + "id": "fb88fa55-b8c8-4ff1-afa8-f72a86a238a4", + "symbol": "ACA" + }, + { + "id": "a6b83d39-a488-4b34-8352-280705a792ea", + "symbol": "LLD" + }, + { + "id": "b774c386-5cce-454a-a845-1ec0381538ec", + "symbol": "XOR" + }, + { + "id": "0ef3afdc-cdd3-47cc-bd52-817c54ae65b5", + "symbol": "LLM" + }, + { + "id": "acc32ee0-8fdc-4743-91e1-f70cc4f3069b", + "symbol": "ASTR" + } + ], + "availableDestinations": [ + { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assets": [ + { + "id": "5416b261-a759-4ba6-bc83-ea79a83c5101", + "symbol": "KSM" + } + ] + }, + { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assets": [ + { + "id": "cd092a5a-4eb6-4318-9f11-4bf8454d67a2", + "symbol": "DOT", + "minAmount": "1100000000000000000" + } + ] + }, + { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assets": [ + { + "id": "fb88fa55-b8c8-4ff1-afa8-f72a86a238a4", + "symbol": "ACA", + "minAmount": "1000000000000000000" + } + ] + }, + { + "chainId": "6bd89e052d67a45bb60a9a23e8581053d5e0d619f15cb9865946937e690c42d6", + "assets": [ + { + "id": "a6b83d39-a488-4b34-8352-280705a792ea", + "symbol": "LLD", + "minAmount": "1000000000000000000" + }, + { + "id": "b774c386-5cce-454a-a845-1ec0381538ec", + "symbol": "XOR" + }, + { + "id": "0ef3afdc-cdd3-47cc-bd52-817c54ae65b5", + "symbol": "LLM" + } + ] + }, + { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assets": [ + { + "id": "acc32ee0-8fdc-4743-91e1-f70cc4f3069b", + "symbol": "ASTR" + } + ] + } + ] + }, + "nodes": [ + { + "url": "wss://ws.mof.sora.org", + "name": "SORA Parliament Ministry of Finance Node" + }, + { + "url": "wss://mof2.sora.org", + "name": "SORA Parliament Ministry of Finance Node" + }, + { + "url": "wss://mof3.sora.org", + "name": "SORA Parliament Ministry of Finance Node" }, - "assets": [{ - "id": "b5a44630-920e-43ee-809f-61890d0888b0", - "name": "sora", - "symbol": "xor", - "currencyId": "0x0200000000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", - "color": "EE2233", - "isUtility": true, - "type": "soraAsset", - "staking": "relaychain", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200000000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "0ecacd48-ffd4-4a2e-87e3-c5f72f9a9877", - "name": "sora validator", - "symbol": "val", - "currencyId": "0x0200040000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora-validator-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VAL.svg", - "color": "F3B966", - "type": "soraAsset", - "isNative": true - }, - { - "id": "87ba5538-34db-4d53-9104-25f42b0bb55b", - "name": "polkaswap", - "symbol": "pswap", - "currencyId": "0x0200050000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "polkaswap", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PSWAP.svg", - "color": "FF0066", - "type": "soraAsset", - "isNative": true - }, - { - "id": "038a7045-af00-466d-b72b-95485c4674b7", - "name": "sora synthetics", - "symbol": "xst", - "currencyId": "0x0200090000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora-synthetics", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XST.svg", - "color": "EE2233", - "type": "soraAsset", - "isNative": true - }, - { - "id": "c96e012c-0786-4980-9750-bae61de0aa19", - "name": "sora synthetic usd", - "symbol": "xstusd", - "currencyId": "0x0200080000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora-synthetic-usd", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XSTUSD.svg", - "color": "EE2233", - "type": "soraAsset", - "isNative": true - }, - { - "id": "7bcc178d-1ebe-46b8-88fb-79649828f21d", - "name": "demeter", - "symbol": "deo", - "currencyId": "0x00f2f4fda40a4bf1fc3769d156fa695532eec31e265d75068524462c0b80f674", - "precision": 18, - "priceId": "demeter", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DEO.svg", - "color": "54B198", - "type": "soraAsset", - "isNative": true - }, - { - "id": "79ba9571-6ea4-4790-8fda-d20ddbad4f33", - "name": "ceres", - "symbol": "ceres", - "currencyId": "0x008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440", - "precision": 18, - "priceId": "ceres", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CERES.svg", - "color": "243579", - "type": "soraAsset", - "isNative": true - }, - { - "id": "38eae54b-723d-457c-8d45-4beab249612f", - "name": "noir token", - "symbol": "noir", - "currencyId": "0x0044aee0776cfb826434af8ef0f8e2c7e9e6644cfda0ae0f02c471b1eebc2483", - "precision": 18, - "priceId": "noir-phygital", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NOIR.svg", - "color": "A0A7FF", - "type": "soraAsset", - "isNative": true - }, - { - "id": "2565e418-d5bc-4318-99b5-53e893681518", - "name": "umitoken", - "symbol": "umi", - "currencyId": "0x003252667a82d2dd70fa046eea663eaec1f2e37c20879f113b880b04c5ebd805", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UMI.svg", - "color": "3C7EB2", - "type": "soraAsset", - "isNative": true - }, - { - "id": "9b040bf8-a852-4e10-aa14-d3793db27a95", - "name": "tether usd", - "symbol": "usdt", - "currencyId": "0x0083a6b3fbc6edae06f115c8953ddd7cbfba0b74579d6ea190f96853073b76f4", - "precision": 18, - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "type": "soraAsset" - }, - { - "id": "1b20dfcd-a40d-4850-a407-5a45f3bf4889", - "name": "binance usd", - "symbol": "busd", - "currencyId": "0x00567d096a736f33bf78cad7b01e33463923b9c933ee13ab7e3fb7b23f5f953a", - "precision": 18, - "priceId": "binance-usd", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", - "color": "F3BA2F", - "type": "soraAsset" - }, - { - "id": "5c017385-e702-47d2-8f3a-ac8146c2b9dd", - "name": "usd coin", - "symbol": "usdc", - "currencyId": "0x00ef6658f79d8b560f77b7b20a5d7822f5bc22539c7b4056128258e5829da517", - "precision": 18, - "priceId": "usd-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4", - "type": "soraAsset" - }, - { - "id": "db07f99c-0c76-483a-891f-86fbd028fdc5", - "name": "bokolo cash", - "symbol": "BCSI", - "currencyId": "0x00eacaea6599a04358fda986388ef0bb0c17a553ec819d5de2900c0af0862502", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BCSD.svg", - "color": "FFFFFF", - "type": "soraAsset" - }, - { - "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b1", - "name": "rococo", - "symbol": "roc", - "precision": 18, - "currencyId": "0x00dc9b4341fde46c9ac80b623d0d43afd9ac205baabdc087cadaa06f92b309c7", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "type": "soraAsset" - }, - { - "id": "ada3b18e-1912-4f96-ad3b-4d0e1b1d1d0a", - "symbol": "tbcd", - "name": "sora tbc dollar", - "currencyId": "0x02000a0000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/TBCD.svg", - "color":"6D8954", - "type": "soraAsset", - "isNative": true - }, - { - "id": "eface91d-b2a8-49d2-88e8-640586bda477", - "name": "polkadot", - "symbol": "dot", - "currencyId": "0x0003b1dbee890acfb1b3bc12d1bb3b4295f52755423f84d1751b2545cebf000b", - "precision": 18, - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "type": "soraAsset" - }, - { - "id": "191c31de-62b1-41e4-aad3-15a5be1b4cd4", - "name": "dai", - "symbol": "dai", - "currencyId": "0x0200060000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "F9AF1A", - "type": "soraAsset" - }, - { - "id": "3ab2c884-6c6e-4f92-b87a-a013c80210af", - "name": "ethereum", - "symbol": "eth", - "currencyId": "0x0200070000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "627EEA", - "type": "soraAsset" - } - - ], - "nodes": [ - { - "url": "wss://ws.framenode-8.s5.stg1.sora2.soramitsu.co.jp", - "name": "Sora Stage #8" - }, - { - "url": "wss://ws.framenode-1.r0.dev.sora2.soramitsu.co.jp", - "name": "Sora Card Test Node #1" - }, - { - "url": "wss://ws.framenode-2.r0.dev.sora2.soramitsu.co.jp", - "name": "Sora Card Test Node #2" - }, - { - "url": "wss://ws.framenode-3.r0.dev.sora2.soramitsu.co.jp", - "name": "Sora Card Test Node #3" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", - "addressPrefix": 69, - "options": [ - "testnet", - "polkaswap" - ] + { + "url": "wss://sora.api.onfinality.io/public-ws", + "name": "OnFinality node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", + "addressPrefix": 69, + "options": [ + "polkaswap", + "utilityFeePayment" + ] }, { - "disabled": false, - "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", - "rank": 0, - "name": "SORA Mainnet", - "externalApi": { - "history": { - "type": "sora", - "url": "https://squid.subsquid.io/sora/v/v5/graphql" - }, - "staking": { - "type" : "sora", - "url": "https://sora.squids.live/sora/v/v7/graphql" - }, - "pricing": { - "type": "sora", - "url": "https://api.subquery.network/sq/sora-xor/sora-prod" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://sora.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "b774c386-5cce-454a-a845-1ec0381538ec", - "name": "sora", - "symbol": "xor", - "currencyId": "0x0200000000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", - "color": "EE2233", - "isUtility": true, - "type": "soraAsset", - "staking": "relaychain", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200000000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "24d0809e-0a4c-42ea-bdd8-dc7a518f389c", - "name": "sora validator", - "symbol": "val", - "currencyId": "0x0200040000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora-validator-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VAL.svg", - "color": "F3B966", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200040000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "37a999a2-5e90-4448-8b0e-98d06ac8f9d4", - "name": "polkaswap", - "symbol": "pswap", - "currencyId": "0x0200050000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "polkaswap", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PSWAP.svg", - "color": "FF0066", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200050000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "75a0bc9b-a1fb-446e-8781-621036bfd979", - "name": "sora synthetics", - "symbol": "xst", - "currencyId": "0x0200090000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora-synthetics", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XST.svg", - "color": "EE2233", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200090000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "217925d8-c529-4480-98e5-b8bf651129ef", - "name": "sora synthetic usd", - "symbol": "xstusd", - "currencyId": "0x0200080000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora-synthetic-usd", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XSTUSD.svg", - "color": "EE2233", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200080000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "5e3de486-789e-4e47-8f49-870852cfebb6", - "name": "demeter", - "symbol": "deo", - "currencyId": "0x00f2f4fda40a4bf1fc3769d156fa695532eec31e265d75068524462c0b80f674", - "precision": 18, - "priceId": "demeter", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DEO.svg", - "color": "54B198", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x00f2f4fda40a4bf1fc3769d156fa695532eec31e265d75068524462c0b80f674" - } - }, - { - "id": "8fe0cbf4-7ece-45f6-968b-5c1b77accff0", - "name": "ceres", - "symbol": "ceres", - "currencyId": "0x008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440", - "precision": 18, - "priceId": "ceres", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CERES.svg", - "color": "243579", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440" - } - }, - { - "id": "079f2a74-1440-440c-b826-6d85a7dd3a91", - "name": "noir token", - "symbol": "noir", - "currencyId": "0x0044aee0776cfb826434af8ef0f8e2c7e9e6644cfda0ae0f02c471b1eebc2483", - "precision": 18, - "priceId": "noir-phygital", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NOIR.svg", - "color": "A0A7FF", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x0044aee0776cfb826434af8ef0f8e2c7e9e6644cfda0ae0f02c471b1eebc2483" - } - }, - { - "id": "2de2b668-33cd-4e85-a501-4921481e618f", - "name": "umitoken", - "symbol": "umi", - "currencyId": "0x003252667a82d2dd70fa046eea663eaec1f2e37c20879f113b880b04c5ebd805", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UMI.svg", - "color": "3C7EB2", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x003252667a82d2dd70fa046eea663eaec1f2e37c20879f113b880b04c5ebd805" - } - }, - { - "id": "4c7b8da9-b297-4093-b8bc-28d477e7b5ad", - "name": "tether usd", - "symbol": "usdt", - "currencyId": "0x0083a6b3fbc6edae06f115c8953ddd7cbfba0b74579d6ea190f96853073b76f4", - "precision": 18, - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0083a6b3fbc6edae06f115c8953ddd7cbfba0b74579d6ea190f96853073b76f4" - } - }, - { - "id": "23c41bbb-2e1a-4d64-bbab-5080975ecc1c", - "name": "binance usd", - "symbol": "busd", - "currencyId": "0x00567d096a736f33bf78cad7b01e33463923b9c933ee13ab7e3fb7b23f5f953a", - "precision": 18, - "priceId": "binance-usd", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", - "color": "F3BA2F", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00567d096a736f33bf78cad7b01e33463923b9c933ee13ab7e3fb7b23f5f953a" - } - }, - { - "id": "c8ce20ed-8690-4b46-9b3d-872e325ae636", - "name": "usd coin", - "symbol": "usdc", - "currencyId": "0x00ef6658f79d8b560f77b7b20a5d7822f5bc22539c7b4056128258e5829da517", - "precision": 18, - "priceId": "usd-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00ef6658f79d8b560f77b7b20a5d7822f5bc22539c7b4056128258e5829da517" - } - }, - { - "id": "1e6f8ba3-5aeb-41d8-b80e-a44ce0f33716", - "name": "dai", - "symbol": "dai", - "currencyId": "0x0200060000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "F9AF1A", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200060000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "82f45df3-b6d8-43e7-a440-c0e73ab59785", - "name": "ethereum", - "symbol": "eth", - "currencyId": "0x0200070000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "627EEA", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200070000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "94e573f3-a9f3-4f7e-9244-8492288ca558", - "name": "soshiba", - "symbol": "soshiba", - "currencyId": "0x005aa73d7a4a3fdbe830c7d0ee26c09ba7f1db119da86d5b4dcb6609dac5ceb5", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/SHIB.svg", - "color": "FFA409", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x005aa73d7a4a3fdbe830c7d0ee26c09ba7f1db119da86d5b4dcb6609dac5ceb5" - } - }, - { - "id": "68a46965-94e8-4a03-af65-6237f83d482f", - "symbol": "tbcd", - "name": "sora tbc dollar", - "currencyId": "0x02000a0000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/TBCD.svg", - "color":"6D8954", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x02000a0000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "61f864b5-9fe0-4ba5-b5b6-c338ceaeee91", - "name": "hermes dao", - "symbol": "hmx", - "currencyId": "0x002d4e9e03f192cc33b128319a049f353db98fbf4d98f717fd0b7f66a0462142", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/HMX.svg", - "color":"FFFFFF", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x002d4e9e03f192cc33b128319a049f353db98fbf4d98f717fd0b7f66a0462142" - } - }, - { - "id": "a13169a1-32fa-4b44-aecb-c404c5f3cdbc", - "name": "bokolo cash", - "symbol": "BCSI", - "currencyId": "0x00eacaea6599a04358fda986388ef0bb0c17a553ec819d5de2900c0af0862502", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BCSD.svg", - "color": "FFFFFF", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00eacaea6599a04358fda986388ef0bb0c17a553ec819d5de2900c0af0862502" - } - }, - { - "id": "5416b261-a759-4ba6-bc83-ea79a83c5101", - "name": "kusama", - "symbol": "ksm", - "currencyId": "0x00117b0fa73c4672e03a7d9d774e3b3f91beb893e93d9a8d0430295f44225db8", - "precision": 18, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00117b0fa73c4672e03a7d9d774e3b3f91beb893e93d9a8d0430295f44225db8" - } - }, - { - "id": "cd092a5a-4eb6-4318-9f11-4bf8454d67a2", - "name": "polkadot", - "symbol": "dot", - "currencyId": "0x0003b1dbee890acfb1b3bc12d1bb3b4295f52755423f84d1751b2545cebf000b", - "precision": 18, - "priceId": "polkadot-sora", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0003b1dbee890acfb1b3bc12d1bb3b4295f52755423f84d1751b2545cebf000b" - } - }, - { - "id": "fb88fa55-b8c8-4ff1-afa8-f72a86a238a4", - "name": "acala", - "symbol": "aca", - "currencyId": "0x001ddbe1a880031da72f7ea421260bec635fa7d1aa72593d5412795408b6b2ba", - "precision": 18, - "priceId": "acala", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", - "color": "FFFFFF", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x001ddbe1a880031da72f7ea421260bec635fa7d1aa72593d5412795408b6b2ba" - } - }, - { - "id": "acc32ee0-8fdc-4743-91e1-f70cc4f3069b", - "name": "astar", - "symbol": "astr", - "currencyId": "0x009dd037fcb32f4fe17c513abd4641a2ece844d106e30788124f0c0acc6e748e", - "precision": 18, - "priceId": "astar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", - "color": "0AE2FF", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x009dd037fcb32f4fe17c513abd4641a2ece844d106e30788124f0c0acc6e748e" - } - }, - { - "id": "0ef3afdc-cdd3-47cc-bd52-817c54ae65b5", - "name": "liberland merit", - "symbol": "llm", - "currencyId": "0x00073edd278e1bd6a7f9d0b27d4f3e93b73c8f0832b58a4df13c69611a99f156", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLM.svg", - "color": "EFB900", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00073edd278e1bd6a7f9d0b27d4f3e93b73c8f0832b58a4df13c69611a99f156" - } - }, - { - "id": "1c3b4fcb-5a5f-4319-9dce-d178006eb9bf", - "name": "liberland dollar", - "symbol": "lld", - "currencyId": "0x00513be65493a7fc3e2128d4230061a530acf40478a4affa20bbba27a310673e", - "precision": 18, - "priceId": "liberland-lld", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLD.svg", - "color": "00437F", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00513be65493a7fc3e2128d4230061a530acf40478a4affa20bbba27a310673e" - } - }, - { - "id": "a543b9a2-f85a-4974-92fc-435d6bc418e5", - "name": "toncoin", - "symbol": "toncoin", - "currencyId": "0x00e8c8923623335128807857dfa38f9212e9803394a2c976e97245d7063bbe10", - "precision": 18, - "priceId": "the-open-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg", - "color": "0098EA", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00e8c8923623335128807857dfa38f9212e9803394a2c976e97245d7063bbe10" - } - } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "5416b261-a759-4ba6-bc83-ea79a83c5101", - "symbol": "KSM" - }, - { - "id": "cd092a5a-4eb6-4318-9f11-4bf8454d67a2", - "symbol": "DOT" - }, - { - "id": "fb88fa55-b8c8-4ff1-afa8-f72a86a238a4", - "symbol": "ACA" - }, - { - "id": "a6b83d39-a488-4b34-8352-280705a792ea", - "symbol": "LLD" - }, - { - "id": "b774c386-5cce-454a-a845-1ec0381538ec", - "symbol": "XOR" - }, - { - "id": "0ef3afdc-cdd3-47cc-bd52-817c54ae65b5", - "symbol": "LLM" - }, - { - "id": "acc32ee0-8fdc-4743-91e1-f70cc4f3069b", - "symbol": "ASTAR" - } - ], - "availableDestinations": [ - { - "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "assets": [ - { - "id": "5416b261-a759-4ba6-bc83-ea79a83c5101", - "symbol": "KSM" - } - ] - }, - { - "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "assets": [ - { - "id": "cd092a5a-4eb6-4318-9f11-4bf8454d67a2", - "symbol": "DOT", - "minAmount": "1100000000000000000" - } - ] - }, - { - "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", - "assets": [ - { - "id": "fb88fa55-b8c8-4ff1-afa8-f72a86a238a4", - "symbol": "ACA", - "minAmount": "1000000000000000000" - } - ] - }, - { - "chainId": "6bd89e052d67a45bb60a9a23e8581053d5e0d619f15cb9865946937e690c42d6", - "assets": [ - { - "id": "a6b83d39-a488-4b34-8352-280705a792ea", - "symbol": "LLD", - "minAmount": "1000000000000000000" - }, - { - "id": "b774c386-5cce-454a-a845-1ec0381538ec", - "symbol": "XOR" - }, - { - "id": "0ef3afdc-cdd3-47cc-bd52-817c54ae65b5", - "symbol": "LLM" - } - ] - }, - { - "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", - "assets": [ - { - "id": "acc32ee0-8fdc-4743-91e1-f70cc4f3069b", - "symbol": "ASTAR" - } - ] - } - ] + "disabled": false, + "chainId": "70255b4d28de0fc4e1a193d7e175ad1ccef431598211c55538f1018651a0344e", + "name": "Aleph Zero", + "ecosystem": "substrate", + "assets": [ + { + "id": "4ea52d6e-a433-4f11-a811-4634068c79a2", + "name": "aleph zero", + "symbol": "azero", + "precision": 12, + "priceId": "aleph-zero", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AZERO.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-aleph-zero-mainnet.dwellir.com", + "name": "Dwellir node" }, - "nodes": [{ - "url": "wss://ws.mof.sora.org", - "name": "SORA Parliament Ministry of Finance Node" - }, - { - "url": "wss://mof2.sora.org", - "name": "SORA Parliament Ministry of Finance Node" - }, - { - "url": "wss://mof3.sora.org", - "name": "SORA Parliament Ministry of Finance Node" - }, - { - "url": "wss://sora.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", - "addressPrefix": 69, - "options": [ - "polkaswap", - "utilityFeePayment" - ] + { + "url": "wss://ws.azero.dev", + "name": "Aleph Zero Foundation node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/white/Aleph%20Zero.svg", + "addressPrefix": 42 }, { - "disabled": false, - "chainId": "70255b4d28de0fc4e1a193d7e175ad1ccef431598211c55538f1018651a0344e", - "name": "Aleph Zero", - "assets": [{ - "id": "4ea52d6e-a433-4f11-a811-4634068c79a2", - "name": "aleph zero", - "symbol": "azero", - "precision": 12, - "priceId": "aleph-zero", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AZERO.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://ws.azero.dev", - "name": "Aleph Zero Foundation node" - } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/white/Aleph%20Zero.svg", - "addressPrefix": 42 + "disabled": false, + "chainId": "00dcb981df86429de8bbacf9803401f09485366c44efbf53af9ecfab03adc7e5", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "1002", + "name": "Kusama BridgeHub", + "ecosystem": "substrate", + "assets": [ + { + "id": "f0f8e709-20f3-44e6-a6c3-89e9e82f78ed", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-kusama-bridge-hub.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://kusama-bridge-hub-rpc.polkadot.io", + "name": "Parity node" + }, + { + "url": "wss://sys.ibp.network/bridgehub-kusama", + "name": "IBP-GeoDNS1 node" + }, + { + "url": "wss://sys.dotters.network/bridgehub-kusama", + "name": "IBP-GeoDNS2 node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bridgehub.svg", + "addressPrefix": 2 }, { - "disabled": false, - "chainId": "00dcb981df86429de8bbacf9803401f09485366c44efbf53af9ecfab03adc7e5", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "1002", - "name": "Kusama BridgeHub", - "assets": [{ - "id": "f0f8e709-20f3-44e6-a6c3-89e9e82f78ed", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://kusama-bridge-hub-rpc.polkadot.io", - "name": "Parity node" - }, - { - "url": "wss://sys.ibp.network/bridgehub-kusama", - "name": "IBP-GeoDNS1 node" - }, - { - "url": "wss://sys.dotters.network/bridgehub-kusama", - "name": "IBP-GeoDNS2 node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bridgehub.svg", - "addressPrefix": 2 + "disabled": false, + "chainId": "6f0f071506de39058fe9a95bbca983ac0e9c5da3443909574e95d52eb078d348", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2222", + "name": "Ipci", + "ecosystem": "substrate", + "assets": [ + { + "id": "b20185e9-2f5c-4c3d-bd5a-c751cd76d439", + "name": "dao ipci", + "symbol": "mito", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MITO.svg", + "color": "0BF0A6", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kusama.rpc.ipci.io", + "name": "Airalab node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/DAOIPCI.svg", + "addressPrefix": 32 }, { - "disabled": false, - "chainId": "6f0f071506de39058fe9a95bbca983ac0e9c5da3443909574e95d52eb078d348", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2222", - "name": "Ipci", - "assets": [{ - "id": "b20185e9-2f5c-4c3d-bd5a-c751cd76d439", - "name": "dao ipci", - "symbol": "mito", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MITO.svg", - "color": "0BF0A6", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://kusama.rpc.ipci.io", - "name": "Airalab node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/DAOIPCI.svg", - "addressPrefix": 32 + "disabled": false, + "chainId": "cdedc8eadbfa209d3f207bba541e57c3c58a667b05a2e1d1e86353c9000758da", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2015", + "name": "Integritee Network (Kusama)", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://integritee.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "c8b67e07-8b3b-4b92-b23d-23b5bb1f8f42", + "name": "integritee", + "symbol": "teer", + "precision": 12, + "priceId": "integritee", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TEER.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kusama.api.integritee.network", + "name": "Integritee node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/integritee.svg", + "addressPrefix": 13 }, { - "disabled": false, - "chainId": "cdedc8eadbfa209d3f207bba541e57c3c58a667b05a2e1d1e86353c9000758da", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2015", - "name": "Integritee Network (Kusama)", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://integritee.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "c8b67e07-8b3b-4b92-b23d-23b5bb1f8f42", - "name": "integritee", - "symbol": "teer", - "precision": 12, - "priceId": "integritee", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TEER.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://kusama.api.integritee.network", - "name": "Integritee node" - }, - { - "url": "wss://integritee-kusama.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/integritee.svg", - "addressPrefix": 13 + "disabled": false, + "chainId": "2991d4125ac465d64c4c0b915fedd7168b5961b7676480636e3747f1ad64cfb9", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2236", + "name": "Subzero", + "ecosystem": "substrate", + "assets": [ + { + "id": "3a1cc15e-903b-4102-9384-364c00e67283", + "name": "zero", + "symbol": "zero", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZERO.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc-1.kusama.node.zero.io", + "name": "ZeroNetwork node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Subzero.svg", + "addressPrefix": 25 }, { - "disabled": false, - "chainId": "2991d4125ac465d64c4c0b915fedd7168b5961b7676480636e3747f1ad64cfb9", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2236", - "name": "Subzero", - "assets": [{ - "id": "3a1cc15e-903b-4102-9384-364c00e67283", - "name": "zero", - "symbol": "zero", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZERO.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc-1.kusama.node.zero.io", - "name": "ZeroNetwork node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Subzero.svg", - "addressPrefix": 25 + "disabled": false, + "chainId": "e358eb1d11b31255a286c12e44fe6780b7edb171d657905a97e39f71d9c6c3ee", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2051", + "name": "Ajuna Polkadot", + "ecosystem": "substrate", + "assets": [ + { + "id": "b0afcb19-5d4c-442c-ac0f-53c64b1ea0ae", + "name": "ajuna network", + "symbol": "ajun", + "precision": 12, + "priceId": "ajuna-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BAJU.svg", + "color": "69A6DA", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc-parachain.ajuna.network", + "name": "AjunaNetwork node" + }, + { + "url": "wss://ajuna.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bajun.svg", + "addressPrefix": 1328 }, { - "disabled": false, - "chainId": "e358eb1d11b31255a286c12e44fe6780b7edb171d657905a97e39f71d9c6c3ee", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2051", - "name": "Ajuna Polkadot", - "assets": [{ - "id": "b0afcb19-5d4c-442c-ac0f-53c64b1ea0ae", - "name": "ajuna network", - "symbol": "ajun", - "precision": 12, - "priceId": "ajuna-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BAJU.svg", - "color": "69A6DA", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc-parachain.ajuna.network", - "name": "AjunaNetwork node" - }, - { - "url": "wss://ajuna.public.curie.radiumblock.co/ws", - "name": "RadiumBlock node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bajun.svg", - "addressPrefix": 1328 + "disabled": false, + "chainId": "c14597baeccb232d662770d2d50ae832ca8c3192693d2b0814e6433f2888ddd6", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2048", + "name": "Bitgreen", + "ecosystem": "substrate", + "assets": [ + { + "id": "26c62511-6300-41ef-b760-c94dd6b0f8a5", + "name": "bitgreen", + "symbol": "bbb", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BBB.svg", + "color": "C0FF00", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://mainnet.bitgreen.org", + "name": "Bitgreen node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bitgreen.svg", + "addressPrefix": 42 }, { - "disabled": false, - "chainId": "c14597baeccb232d662770d2d50ae832ca8c3192693d2b0814e6433f2888ddd6", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2048", - "name": "Bitgreen", - "assets": [{ - "id": "26c62511-6300-41ef-b760-c94dd6b0f8a5", - "name": "bitgreen", - "symbol": "bbb", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BBB.svg", - "color": "C0FF00", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://mainnet.bitgreen.org", - "name": "Bitgreen node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bitgreen.svg", - "addressPrefix": 42 + "disabled": false, + "chainId": "4319cc49ee79495b57a1fec4d2bd43f59052dcc690276de566c2691d6df4f7b8", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2008", + "name": "Crust", + "ecosystem": "substrate", + "assets": [ + { + "id": "07ad91ea-1cb6-47dd-bc57-0e884727c5bf", + "name": "crust network", + "symbol": "cru", + "precision": 12, + "priceId": "crust-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRU.svg", + "color": "FA8C16", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://crust-parachain.crustapps.net", + "name": "Crust node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Crust.svg", + "addressPrefix": 88 }, { - "disabled": false, - "chainId": "4319cc49ee79495b57a1fec4d2bd43f59052dcc690276de566c2691d6df4f7b8", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2008", - "name": "Crust", - "assets": [{ - "id": "07ad91ea-1cb6-47dd-bc57-0e884727c5bf", - "name": "crust network", - "symbol": "cru", - "precision": 12, - "priceId": "crust-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRU.svg", - "color": "FA8C16", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://crust-parachain.crustapps.net", - "name": "Crust node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Crust.svg", - "addressPrefix": 88 + "disabled": false, + "chainId": "4a587bf17a404e3572747add7aab7bbe56e805a5479c6c436f07f36fcc8d3ae1", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2091", + "name": "Frequency", + "ecosystem": "substrate", + "assets": [ + { + "id": "598af8e7-c0ad-4785-80cf-669705c93dd9", + "name": "frequency", + "symbol": "frqcy", + "precision": 8, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/FRQCY.svg", + "color": "4473EC", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-frequency.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://0.rpc.frequency.xyz", + "name": "Frequency 0 node" + }, + { + "url": "wss://1.rpc.frequency.xyz", + "name": "Frequency 1 node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Frequency.svg", + "addressPrefix": 90 }, { - "disabled": false, - "chainId": "4a587bf17a404e3572747add7aab7bbe56e805a5479c6c436f07f36fcc8d3ae1", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2091", - "name": "Frequency", - "assets": [{ - "id": "598af8e7-c0ad-4785-80cf-669705c93dd9", - "name": "frequency", - "symbol": "frqcy", - "precision": 8, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/FRQCY.svg", - "color": "4473EC", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://0.rpc.frequency.xyz", - "name": "Frequency 0 node" - }, - { - "url": "wss://1.rpc.frequency.xyz", - "name": "Frequency 1 node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Frequency.svg", - "addressPrefix": 90 + "disabled": true, + "chainId": "7838c3c774e887c0a53bcba9e64f702361a1a852d5550b86b58cd73827fa1e1e", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2007", + "name": "Kapex", + "ecosystem": "substrate", + "assets": [ + { + "id": "a99dd750-0c15-49df-a86f-6caa577614bc", + "name": "kapex parachain", + "symbol": "kpx", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KPX.svg", + "color": "306EB6", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kapex-rpc.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kapex%20(Totem).svg", + "addressPrefix": 2007 }, { - "disabled": false, - "chainId": "7838c3c774e887c0a53bcba9e64f702361a1a852d5550b86b58cd73827fa1e1e", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2007", - "name": "Kapex", - "assets": [{ - "id": "a99dd750-0c15-49df-a86f-6caa577614bc", - "name": "kapex parachain", - "symbol": "kpx", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KPX.svg", - "color": "306EB6", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://kapex-rpc.dwellir.com", - "name": "Dwellir node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kapex%20(Totem).svg", - "addressPrefix": 2007 + "disabled": false, + "chainId": "5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "rank": 10, + "paraId": "2094", + "name": "Pendulum", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-pendulum-api.squid.tachi.soramitsu.co.jp/graphql" + } + }, + "assets": [ + { + "id": "ebf2822f-2dd4-4f59-aeb3-ae7defa53932", + "name": "pendulum", + "symbol": "pen", + "precision": 12, + "priceId": "pendulum-chain", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PEN.svg", + "color": "8D809E", + "isUtility": true, + "type": "normal" + }, + { + "id": "bc55b3f0-2b34-4561-aeb6-bd4ca9c88b7e", + "type": "xcm", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "1", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "existentialDeposit": "10000" + } + ], + "nodes": [ + { + "url": "wss://api-pendulum.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc-pendulum.prd.pendulumchain.tech", + "name": "PendulumChain node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Pendulum.svg", + "addressPrefix": 56, + "options": [ + "utilityFeePayment" + ] }, { - "disabled": false, - "chainId": "5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "rank": 10, - "paraId": "2094", - "name": "Pendulum", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-pendulum/graphql" - } - }, - "assets": [ - { - "id": "ebf2822f-2dd4-4f59-aeb3-ae7defa53932", - "name": "pendulum", - "symbol": "pen", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PEN.svg", - "color": "8D809E", - "isUtility": true, - "type": "normal" - }, - { - "id": "bc55b3f0-2b34-4561-aeb6-bd4ca9c88b7e", - "type": "xcm", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "1", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "existentialDeposit": "10000" - } - ], - "nodes": [{ - "url": "wss://rpc-pendulum.prd.pendulumchain.tech", - "name": "PendulumChain node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Pendulum.svg", - "addressPrefix": 56, - "options": [ - "utilityFeePayment" - ] + "disabled": false, + "chainId": "6859c81ca95ef624c9dfe4dc6e3381c33e5d6509e35e147092bfbc780f777c4e", + "name": "Ternoa Mainnet", + "ecosystem": "substrate", + "assets": [ + { + "id": "2e447cea-6fe1-4b08-8a97-94cc2ee622a6", + "name": "ternoa", + "symbol": "caps", + "precision": 18, + "priceId": "coin-capsule", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CAPS.svg", + "color": "FF002B", + "isUtility": true, + "type": "normal", + "staking": "relaychain" + } + ], + "nodes": [ + { + "url": "wss://mainnet.ternoa.network", + "name": "CapsuleCorp node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Ternoa.svg", + "addressPrefix": 42 }, { - "disabled": false, - "chainId": "6859c81ca95ef624c9dfe4dc6e3381c33e5d6509e35e147092bfbc780f777c4e", - "name": "Ternoa Mainnet", - "assets": [{ - "id": "2e447cea-6fe1-4b08-8a97-94cc2ee622a6", - "name": "ternoa", - "symbol": "caps", - "precision": 18, - "priceId": "coin-capsule", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CAPS.svg", - "color": "FF002B", - "isUtility": true, - "type": "normal", - "staking": "relaychain" - }], - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-ternoa/graphql" - }, - "staking": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-ternoa/graphql" - } - }, - "nodes": [{ - "url": "wss://mainnet.ternoa.network", - "name": "CapsuleCorp node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Ternoa.svg", - "addressPrefix": 42 + "disabled": true, + "chainId": "6d8d9f145c2177fa83512492cdd80a71e29f22473f4a8943a6292149ac319fb9", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2011", + "name": "SORA Kusama parachain", + "ecosystem": "substrate", + "assets": [ + { + "id": "2df458e8-c4a9-4026-986f-8962a36fe604", + "name": "sora", + "symbol": "xor", + "precision": 12, + "priceId": "sora", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", + "color": "EE2233", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://ws.parachain-collator-1.c1.sora2.soramitsu.co.jp", + "name": "Soramitsu node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", + "addressPrefix": 420 }, { - "disabled": false, - "chainId": "6d8d9f145c2177fa83512492cdd80a71e29f22473f4a8943a6292149ac319fb9", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2011", - "name": "SORA Kusama parachain", - "assets": [{ - "id": "2df458e8-c4a9-4026-986f-8962a36fe604", - "name": "sora", - "symbol": "xor", - "precision": 12, - "priceId": "sora", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", - "color": "EE2233", - "isUtility": true, - "type": "normal", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200000000000000000000000000000000000000000000000000000000000000" - } - }], - "nodes": [{ - "url": "wss://ws.parachain-collator-1.c1.sora2.soramitsu.co.jp", - "name": "Soramitsu node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", - "addressPrefix": 420 + "disabled": true, + "chainId": "e92d165ad41e41e215d09713788173aecfdbe34d3bed29409d33a2ef03980738", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2025", + "name": "SORA Polkadot parachain", + "ecosystem": "substrate", + "assets": [ + { + "id": "a7c696d7-42ce-4ed6-a036-4f0f76386c49", + "name": "sora", + "symbol": "xor", + "precision": 18, + "priceId": "sora", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", + "color": "EE2233", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://ws.parachain-collator-1.pc1.sora2.soramitsu.co.jp", + "name": "Soramitsu node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", + "addressPrefix": 81 }, { - "disabled": false, - "chainId": "e92d165ad41e41e215d09713788173aecfdbe34d3bed29409d33a2ef03980738", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2025", - "name": "SORA Polkadot parachain", - "assets": [{ - "id": "a7c696d7-42ce-4ed6-a036-4f0f76386c49", - "name": "sora", - "symbol": "xor", - "precision": 18, - "priceId": "sora", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", - "color": "EE2233", - "isUtility": true, - "type": "normal", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200000000000000000000000000000000000000000000000000000000000000" - } - }], - "nodes": [{ - "url": "wss://ws.parachain-collator-1.pc1.sora2.soramitsu.co.jp", - "name": "Soramitsu node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", - "addressPrefix": 81 + "disabled": false, + "chainId": "1", + "rank": 1, + "name": "Ethereum", + "ecosystem": "ethereum", + "externalApi": { + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://etherscan.io/{type}/{value}" + } + ], + "history": { + "type": "etherscan", + "url": "https://api.etherscan.io/api" + } + }, + "assets": [ + { + "isUtility": true, + "id": "c2a6c062-d511-4bde-9ce6-ea775d2a302c", + "name": "ethereum", + "symbol": "eth", + "precision": 18, + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "FF0066", + "ethereumType": "normal", + "purchaseProviders": [ + "moonpay", + "ramp" + ], + "priceProvider": { + "type": "chainlink", + "id": "0x639fe6ab55c921f74e7fac1ee960c0b6293ba612", + "precision": 8 + } + }, + { + "isUtility": false, + "id": "0x6B175474E89094C44Da98b954EedeAC495271d0F", + "name": "dai stablecoin", + "symbol": "dai", + "precision": 18, + "priceId": "dai", + "purchaseProviders": [ + "ramp" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", + "color": "FF0066", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "priceId": "tether", + "purchaseProviders": [ + "moonpay", + "ramp" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", + "name": "usd coin", + "symbol": "usdc", + "precision": 6, + "priceId": "usd-coin", + "purchaseProviders": [ + "moonpay", + "ramp" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9", + "name": "aave", + "symbol": "aave", + "precision": 18, + "priceId": "aave", + "purchaseProviders": [ + "moonpay" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AAVE.svg", + "color": "B6509E", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xD533a949740bb3306d119CC777fa900bA034cd52", + "name": "curve dao", + "symbol": "crv", + "precision": 18, + "priceId": "curve-dao-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRV.svg", + "color": "B6509E", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984", + "name": "uniswap", + "symbol": "uni", + "precision": 18, + "priceId": "uniswap", + "purchaseProviders": [ + "moonpay" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UNI.svg", + "color": "FF007A", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x514910771AF9Ca656af840dff83E8264EcF986CA", + "name": "chainlink", + "symbol": "link", + "precision": 18, + "priceId": "chainlink", + "purchaseProviders": [ + "moonpay", + "ramp" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LINK.svg", + "color": "FFFFFF", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x111111111117dC0aa78b770fA6A738034120C302", + "name": "1inch", + "symbol": "1inch", + "precision": 18, + "priceId": "1inch", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/1INCH.svg", + "color": "FFFFFF", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xB8c77482e45F1F44dE1745F52C74426C631bDD52", + "name": "bnb", + "symbol": "bnb", + "precision": 18, + "priceId": "binancecoin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", + "color": "F3BA2F", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0", + "name": "polygon", + "symbol": "matic", + "precision": 18, + "priceId": "matic-network", + "purchaseProviders": [ + "moonpay" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", + "color": "8247E5", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x40FD72257597aA14C7231A7B1aaa29Fce868F677", + "name": "sora", + "symbol": "xor", + "precision": 18, + "priceId": "sora", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", + "color": "EE2233", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xe88f8313e61A97cEc1871EE37fBbe2a8bf3ed1E4", + "name": "sora validator", + "symbol": "val", + "precision": 18, + "priceId": "sora-validator-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VAL.svg", + "color": "F3B966", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x519C1001D550C0a1DaE7d1fC220f7d14c2A521BB", + "name": "polkaswap", + "symbol": "pswap", + "precision": 18, + "priceId": "polkaswap", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PSWAP.svg", + "color": "FF0066", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x2e7B0d4F9B2EaF782eD3D160e3a0a4b1a7930aDA", + "name": "ceres", + "symbol": "ceres", + "precision": 18, + "priceId": "ceres", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CERES.svg", + "color": "243579", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x32a7C02e79c4ea1008dD6564b35F131428673c41", + "name": "crust network", + "symbol": "cru", + "precision": 18, + "priceId": "crust-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRU.svg", + "color": "FA8C16", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x3845badAde8e6dFF049820680d1F14bD3903a5d0", + "name": "the sandbox", + "symbol": "sand", + "precision": 18, + "priceId": "sand", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/SAND.svg", + "color": "4AA4EB", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x236501327e701692a281934230AF0b6BE8Df3353", + "name": "fluence", + "symbol": "flt", + "precision": 18, + "priceId": "fluence-2", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/FLT.svg", + "color": "FFFFFF", + "ethereumType": "erc20" + } + ], + "nodes": [ + { + "url": "https://eth-mainnet.blastapi.io/", + "name": "Blast https" + }, + { + "url": "https://ethereum.publicnode.com", + "name": "Public https" + }, + { + "url": "https://nodes.mewapi.io/rpc/eth", + "name": "MEW https" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Ethereum.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "nft", + "utilityFeePayment" + ] }, { - "disabled": false, - "chainId": "1", - "rank": 1, - "name": "Ethereum", - "externalApi": { - "explorers": [{ - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://etherscan.io/{type}/{value}" - } + "disabled": false, + "chainId": "5", + "rank": 101, + "name": "Ethereum Goerli", + "ecosystem": "ethereum", + "externalApi": { + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" ], - "history": { - "type": "etherscan", - "url": "https://api.etherscan.io/api" - } - }, - "assets": [ - { - "isUtility": true, - "id": "c2a6c062-d511-4bde-9ce6-ea775d2a302c", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "normal", - "priceProvider": { - "type": "chainlink", - "id": "0x639fe6ab55c921f74e7fac1ee960c0b6293ba612", - "precision": 8 - } - }, - { - "isUtility": false, - "id": "0x6B175474E89094C44Da98b954EedeAC495271d0F", - "name": "dai stablecoin", - "symbol": "dai", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xdac17f958d2ee523a2206206994597c13d831ec7", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", - "name": "usd coin", - "symbol": "usdc", - "precision": 6, - "priceId": "usd-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9", - "name": "aave", - "symbol": "aave", - "precision": 18, - "priceId": "aave", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AAVE.svg", - "color": "B6509E", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xD533a949740bb3306d119CC777fa900bA034cd52", - "name": "curve dao", - "symbol": "crv", - "precision": 18, - "priceId": "curve-dao-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRV.svg", - "color": "B6509E", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984", - "name": "uniswap", - "symbol": "uni", - "precision": 18, - "priceId": "uniswap", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UNI.svg", - "color": "FF007A", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x514910771AF9Ca656af840dff83E8264EcF986CA", - "name": "chainlink", - "symbol": "link", - "precision": 18, - "priceId": "chainlink", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LINK.svg", - "color": "FFFFFF", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x111111111117dC0aa78b770fA6A738034120C302", - "name": "1inch", - "symbol": "1inch", - "precision": 18, - "priceId": "1inch", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/1INCH.svg", - "color": "FFFFFF", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xB8c77482e45F1F44dE1745F52C74426C631bDD52", - "name": "bnb", - "symbol": "bnb", - "precision": 18, - "priceId": "binancecoin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", - "color": "F3BA2F", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0", - "name": "polygon", - "symbol": "matic", - "precision": 18, - "priceId": "matic-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", - "color": "8247E5", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x40FD72257597aA14C7231A7B1aaa29Fce868F677", - "name": "sora", - "symbol": "xor", - "precision": 18, - "priceId": "sora", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", - "color": "EE2233", - "type": "normal", - "ethereumType": "erc20", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200000000000000000000000000000000000000000000000000000000000000" - } - }, - { - "isUtility": false, - "id": "0xe88f8313e61A97cEc1871EE37fBbe2a8bf3ed1E4", - "name": "sora validator", - "symbol": "val", - "precision": 18, - "priceId": "sora-validator-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VAL.svg", - "color": "F3B966", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x519C1001D550C0a1DaE7d1fC220f7d14c2A521BB", - "name": "polkaswap", - "symbol": "pswap", - "precision": 18, - "priceId": "polkaswap", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PSWAP.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x2e7B0d4F9B2EaF782eD3D160e3a0a4b1a7930aDA", - "name": "ceres", - "symbol": "ceres", - "precision": 18, - "priceId": "ceres", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CERES.svg", - "color": "243579", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x236501327e701692a281934230AF0b6BE8Df3353", - "name": "fluence", - "symbol": "flt", - "precision": 18, - "priceId": "fluence-2", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/FLT.svg", - "color": "FFFFFF", - "type": "normal", - "ethereumType": "erc20" - } - ], - "nodes": [ - { - "url": "https://eth-mainnet.blastapi.io/", - "name": "Blast https" - }, - { - "url": "wss://eth-mainnet.blastapi.io/", - "name": "Blast wss" - } + "url": "https://goerli.etherscan.io/{type}/{value}" + } ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/ETH.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "nft", - "utilityFeePayment" - ] + "history": { + "type": "etherscan", + "url": "https://api-goerli.etherscan.io/api" + } + }, + "assets": [ + { + "isUtility": true, + "id": "a31e35a9-5026-4816-9b8b-08029627b256", + "name": "ethereum", + "symbol": "eth", + "precision": 18, + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "FF0066", + "ethereumType": "normal" + }, + { + "isUtility": false, + "id": "0x11fE4B6AE13d2a6055C8D9cF65c55bac32B5d844", + "name": "dai stablecoin", + "symbol": "dai", + "precision": 18, + "priceId": "dai", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", + "color": "FF0066", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x07865c6e87b9f70255377e024ace6630c1eaa37f", + "name": "usdc stablecoin", + "symbol": "usdc", + "precision": 6, + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4", + "ethereumType": "erc20" + } + ], + "nodes": [ + { + "url": "https://eth-goerli.blastapi.io/", + "name": "Blast https" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/ETH.svg", + "addressPrefix": 0, + "options": [ + "testnet", + "ethereum", + "utilityFeePayment" + ] }, { - "disabled": false, - "chainId": "5", - "rank": 101, - "name": "Ethereum Goerli", - "externalApi": { - "explorers": [{ - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://goerli.etherscan.io/{type}/{value}" - } + "disabled": false, + "chainId": "56", + "rank": 2, + "name": "BNB Smart Chain", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "etherscan", + "url": "https://api.bscscan.com/api" + }, + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" ], - "history": { - "type": "etherscan", - "url": "https://api-goerli.etherscan.io/api" - } - }, - "assets": [ - { - "isUtility": true, - "id": "a31e35a9-5026-4816-9b8b-08029627b256", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0x11fE4B6AE13d2a6055C8D9cF65c55bac32B5d844", - "name": "dai stablecoin", - "symbol": "dai", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x07865c6e87b9f70255377e024ace6630c1eaa37f", - "name": "usdc stablecoin", - "symbol": "usdc", - "precision": 6, - "priceId": "usd-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4", - "type": "normal", - "ethereumType": "erc20" - } - ], - "nodes": [ - { - "url": "https://eth-goerli.blastapi.io/", - "name": "Blast https" - }, - { - "url": "wss://eth-goerli.blastapi.io/", - "name": "Blast wss" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/ETH.svg", - "addressPrefix": 0, - "options": [ - "testnet", - "ethereum", - "utilityFeePayment" + "url": "https://bscscan.com/{type}/{value}" + } ] + }, + "assets": [ + { + "isUtility": true, + "id": "6e43f1b7-1ec3-48a7-8ecd-8d680578d2b8", + "name": "BNB", + "symbol": "BNB", + "precision": 18, + "priceId": "binancecoin", + "purchaseProviders": [ + "moonpay", + "ramp" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", + "color": "FF0066", + "ethereumType": "normal", + "priceProvider": { + "type": "chainlink", + "id": "0x6970460aabF80C5BE983C6b74e5D06dEDCA95D4A", + "precision": 8 + } + }, + { + "isUtility": false, + "id": "0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3", + "name": "DAI", + "symbol": "DAI", + "precision": 18, + "priceId": "dai", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", + "color": "FF0066", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x2170Ed0880ac9A755fd29B2688956BD959F933F8", + "name": "ethereum", + "symbol": "eth", + "precision": 18, + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "FF0066", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d", + "name": "usd coin", + "symbol": "usdc", + "precision": 18, + "priceId": "usd-coin", + "purchaseProviders": [ + "moonpay" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56", + "name": "binance usd", + "symbol": "busd", + "precision": 18, + "priceId": "binance-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", + "color": "F3BA2F", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0x40af3827F39D0EAcBF4A168f8D4ee67c121D11c9", + "name": "trueusd", + "symbol": "tusd", + "precision": 18, + "priceId": "true-usd", + "purchaseProviders": [ + "moonpay" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUSD.svg", + "color": "005ADD", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0xCC42724C6683B7E57334c4E856f4c9965ED682bD", + "name": "polygon", + "symbol": "matic", + "precision": 18, + "priceId": "matic-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", + "color": "8247E5", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82", + "name": "pancakeswap", + "symbol": "cake", + "precision": 18, + "priceId": "pancakeswap-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CAKE.svg", + "color": "D1884F", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0x965F527D9159dCe6288a2219DB51fc6Eef120dD1", + "name": "biswap", + "symbol": "bsw", + "precision": 18, + "priceId": "biswap", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BSW.svg", + "color": "E42648", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0xa260E12d2B924cb899AE80BB58123ac3fEE1E2F0", + "name": "hooked protocol", + "symbol": "hook", + "precision": 18, + "priceId": "hooked-protocol", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HOOK.svg", + "color": "048EC8", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0xcF6BB5389c92Bdda8a3747Ddb454cB7a64626C63", + "name": "venus", + "symbol": "xvs", + "precision": 18, + "priceId": "venus", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XVS.svg", + "color": "048EC8", + "ethereumType": "bep20" + } + ], + "nodes": [ + { + "url": "https://bsc.publicnode.com", + "name": "Public https" + }, + { + "url": "https://bsc-mainnet.blastapi.io/", + "name": "Blast https" + }, + { + "url": "https://bsc-dataseed1.ninicoin.io/", + "name": "Ninicoin" + }, + { + "url": "https://bsc.nodereal.io/", + "name": "Nodereal" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/bnbchain.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] }, { - "disabled": false, - "chainId": "56", - "rank": 2, - "name": "BNB Smart Chain", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://api.bscscan.com/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://bscscan.com/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "6e43f1b7-1ec3-48a7-8ecd-8d680578d2b8", - "name": "BNB", - "symbol": "BNB", - "precision": 18, - "priceId": "binancecoin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "normal", - "priceProvider": { - "type": "chainlink", - "id": "0x6970460aabF80C5BE983C6b74e5D06dEDCA95D4A", - "precision": 8 - } - }, - { - "isUtility": false, - "id": "0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3", - "name": "DAI", - "symbol": "DAI", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x2170Ed0880ac9A755fd29B2688956BD959F933F8", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "bep20" - }, - { - "isUtility": false, - "id": "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d", - "name": "usd coin", - "symbol": "usdc", - "precision": 18, - "priceId": "usd-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4", - "type": "normal", - "ethereumType": "bep20" - }, - { - "isUtility": false, - "id": "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56", - "name": "binance usd", - "symbol": "busd", - "precision": 18, - "priceId": "binance-usd", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", - "color": "F3BA2F", - "type": "normal", - "ethereumType": "bep20" - }, - { - "isUtility": false, - "id": "0x40af3827F39D0EAcBF4A168f8D4ee67c121D11c9", - "name": "trueusd", - "symbol": "tusd", - "precision": 18, - "priceId": "true-usd", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUSD.svg", - "color": "005ADD", - "type": "normal", - "ethereumType": "bep20" - }, - { - "isUtility": false, - "id": "0xCC42724C6683B7E57334c4E856f4c9965ED682bD", - "name": "polygon", - "symbol": "matic", - "precision": 18, - "priceId": "matic-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", - "color": "8247E5", - "type": "normal", - "ethereumType": "bep20" - }, - { - "isUtility": false, - "id": "0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82", - "name": "pancakeswap", - "symbol": "cake", - "precision": 18, - "priceId": "pancakeswap-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CAKE.svg", - "color": "D1884F", - "type": "normal", - "ethereumType": "bep20" - }, - { - "isUtility": false, - "id": "0x965F527D9159dCe6288a2219DB51fc6Eef120dD1", - "name": "biswap", - "symbol": "bsw", - "precision": 18, - "priceId": "biswap", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BSW.svg", - "color": "E42648", - "type": "normal", - "ethereumType": "bep20" - }, - { - "isUtility": false, - "id": "0xa260E12d2B924cb899AE80BB58123ac3fEE1E2F0", - "name": "hooked protocol", - "symbol": "hook", - "precision": 18, - "priceId": "hooked-protocol", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HOOK.svg", - "color": "048EC8", - "type": "normal", - "ethereumType": "bep20" - }, - { - "isUtility": false, - "id": "0xcF6BB5389c92Bdda8a3747Ddb454cB7a64626C63", - "name": "venus", - "symbol": "xvs", - "precision": 18, - "priceId": "venus", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XVS.svg", - "color": "048EC8", - "type": "normal", - "ethereumType": "bep20" - } - ], - "nodes": [ - { - "url": "https://bsc-mainnet.blastapi.io/", - "name": "Blast https" - }, - { - "url": "wss://bsc-mainnet.blastapi.io/", - "name": "Blast wss" - }, - { - "url": "https://bsc-dataseed1.ninicoin.io/", - "name": "Ninicoin" - }, + "disabled": false, + "chainId": "97", + "rank": 102, + "name": "BNB Smart Chain Testnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "etherscan", + "url": "https://api-testnet.bscscan.com/api" + }, + "explorers": [ { - "url": "https://bsc.nodereal.io/", - "name": "Nodereal" + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://testnet.bscscan.com/{type}/{value}" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/bnbchain.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "97", - "rank": 102, - "name": "BNB Smart Chain Testnet", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://api-testnet.bscscan.com/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://testnet.bscscan.com/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "49e67f26-e01b-4aeb-b741-f0bd727c51e4", - "name": "tBNB", - "symbol": "tBNB", - "precision": 18, - "priceId": "binancecoin", - "color": "FF0066", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", - "type": "normal", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0xEC5dCb5Dbf4B114C9d0F65BcCAb49EC54F6A0867", - "name": "DAI", - "symbol": "DAI", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "bep20" - } - ], - "nodes": [ - { - "url": "https://bsc-testnet.blastapi.io/", - "name": "Blast https" - }, + "assets": [ + { + "isUtility": true, + "id": "49e67f26-e01b-4aeb-b741-f0bd727c51e4", + "name": "tBNB", + "symbol": "tBNB", + "precision": 18, + "priceId": "binancecoin", + "color": "FF0066", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", + "ethereumType": "normal" + }, + { + "isUtility": false, + "id": "0xEC5dCb5Dbf4B114C9d0F65BcCAb49EC54F6A0867", + "name": "DAI", + "symbol": "DAI", + "precision": 18, + "priceId": "dai", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", + "color": "FF0066", + "ethereumType": "bep20" + } + ], + "nodes": [ + { + "url": "https://bsc-testnet.blastapi.io/", + "name": "Blast https" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/bnbchain.svg", + "addressPrefix": 0, + "options": [ + "testnet", + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "11155111", + "name": "Sepolia", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "etherscan", + "url": "https://api-sepolia.etherscan.io/api" + }, + "explorers": [ { - "url": "wss://bsc-testnet.blastapi.io/", - "name": "Blast wss" + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://sepolia.etherscan.io/{type}/{value}" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/bnbchain.svg", - "addressPrefix": 0, - "options": [ - "testnet", - "ethereum", - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "11155111", - "name": "Sepolia", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://api-sepolia.etherscan.io/api" - }, - "explorers": [{ - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://sepolia.etherscan.io/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "c2a6c062-d511-4bde-9ce6-ea775d2a302s", - "name": "sepolia eth", - "symbol": "seth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0x7AF17A48a6336F7dc1beF9D485139f7B6f4FB5C8", - "name": "dai stablecoin", - "symbol": "dai", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "erc20" - } - ], - "nodes": [ - { - "url": "https://eth-sepolia.blastapi.io/", - "name": "Blast https" - }, - { - "url" : "wss://eth-sepolia.blastapi.io/", - "name": "Blast wss" - } - ], + "assets": [ + { + "isUtility": true, + "id": "c2a6c062-d511-4bde-9ce6-ea775d2a302s", + "name": "sepolia eth", + "symbol": "seth", + "precision": 18, + "priceId": "ethereum", "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "addressPrefix": 0, - "options": [ - "testnet", - "ethereum", - "utilityFeePayment" - ] + "color": "FF0066", + "ethereumType": "normal" + }, + { + "isUtility": false, + "id": "0x7AF17A48a6336F7dc1beF9D485139f7B6f4FB5C8", + "name": "dai stablecoin", + "symbol": "dai", + "precision": 18, + "priceId": "dai", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", + "color": "FF0066", + "ethereumType": "erc20" + } + ], + "nodes": [ + { + "url": "https://eth-sepolia.blastapi.io/", + "name": "Blast https" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "addressPrefix": 0, + "options": [ + "testnet", + "ethereum", + "utilityFeePayment", + "nft" + ] + }, + { + "disabled": false, + "chainId": "137", + "rank": 3, + "name": "Polygon", + "ecosystem": "ethereum", + "externalApi": { + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://polygonscan.com/{type}/{value}" + } + ], + "history": { + "type": "etherscan", + "url": "https://api.polygonscan.com/api" + } }, - { - "disabled": false, - "chainId": "137", - "rank": 3, - "name": "Polygon", - "externalApi": { - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://polygonscan.com/{type}/{value}" - } - ], - "history": { - "type": "etherscan", - "url": "https://api.polygonscan.com/api" - } - }, - "assets": [ - { - "isUtility": true, - "id": "0x0000000000000000000000000000000000001010", - "name": "polygon", - "symbol": "matic", - "precision": 18, - "priceId": "matic-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", - "color": "8247E5", - "type": "normal", - "ethereumType": "normal", - "priceProvider": { - "type": "chainlink", - "id": "0x52099d4523531f678dfc568a7b1e5038aadce1d6", - "precision": 8 - } - }, - { - "isUtility": false, - "id": "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619", - "name": "weth", - "symbol": "weth", - "precision": 18, - "priceId": "weth", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/WETH.svg", - "color": "FFFFFF", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", - "name": "usd coin", - "symbol": "usdc", - "precision": 6, - "priceId": "usd-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xc2132D05D31c914a87C6611C10748AEb04B58e8F", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x3BA4c387f786bFEE076A58914F5Bd38d668B42c3", - "name": "bnb", - "symbol": "bnb", - "precision": 18, - "priceId": "binancecoin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", - "color": "F3BA2F", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xdAb529f40E671A1D4bF91361c21bf9f0C9712ab7", - "name": "binance usd", - "symbol": "busd", - "precision": 18, - "priceId": "binance-usd", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", - "color": "F3BA2F", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063", - "name": "dai", - "symbol": "dai", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "F9AF1A", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xD6DF932A45C0f255f85145f286eA0b292B21C90B", - "name": "aave", - "symbol": "aave", - "precision": 18, - "priceId": "aave", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AAVE.svg", - "color": "B6509E", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x172370d5Cd63279eFa6d502DAB29171933a610AF", - "name": "curve dao", - "symbol": "crv", - "precision": 18, - "priceId": "curve-dao-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRV.svg", - "color": "B6509E", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xb33EaAd8d922B1083446DC23f610c2567fB5180f", - "name": "uniswap", - "symbol": "uni", - "precision": 18, - "priceId": "uniswap", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UNI.svg", - "color": "FF007A", - "type": "normal", - "ethereumType": "erc20" - } + "assets": [ + { + "isUtility": true, + "id": "0x0000000000000000000000000000000000001010", + "name": "polygon", + "symbol": "matic", + "precision": 18, + "priceId": "matic-network", + "purchaseProviders": [ + "moonpay", + "ramp" ], - "nodes": [ - { - "url": "https://polygon-mainnet.blastapi.io/", - "name": "Blast https" - }, - { - "url" : "wss://polygon-mainnet.blastapi.io/", - "name": "Blast wss" - } + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", + "color": "FF0066", + "ethereumType": "normal", + "priceProvider": { + "type": "chainlink", + "id": "0x52099d4523531f678dfc568a7b1e5038aadce1d6", + "precision": 8 + } + }, + { + "isUtility": false, + "id": "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619", + "name": "weth", + "symbol": "weth", + "precision": 18, + "priceId": "weth", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/WETH.svg", + "color": "FFFFFF", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", + "name": "usd coin", + "symbol": "usdc", + "precision": 6, + "priceId": "usd-coin", + "purchaseProviders": [ + "moonpay", + "ramp" ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polygon.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "nft", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "80001", - "rank": 103, - "name": "Polygon mumbai testnet", - "externalApi": { - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://mumbai.polygonscan.com/{type}/{value}" - } - ], - "history": { - "type": "etherscan", - "url": "https://api-testnet.polygonscan.com/api" - } - }, - "assets": [ - { - "isUtility": true, - "id": "0x0000000000000000000000000000000000001010", - "name": "polygon", - "symbol": "matic", - "precision": 18, - "priceId": "matic", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", - "color": "8247E5", - "type": "normal", - "ethereumType": "normal" - } + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xc2132D05D31c914a87C6611C10748AEb04B58e8F", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "priceId": "tether", + "purchaseProviders": [ + "moonpay", + "ramp" ], - "nodes": [ - { - "url": "https://polygon-testnet.blastapi.io/", - "name": "Blast https" - }, - { - "url" : "wss://polygon-testnet.blastapi.io/", - "name": "Blast wss" - } + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x3BA4c387f786bFEE076A58914F5Bd38d668B42c3", + "name": "bnb", + "symbol": "bnb", + "precision": 18, + "priceId": "binancecoin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", + "color": "F3BA2F", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xdAb529f40E671A1D4bF91361c21bf9f0C9712ab7", + "name": "binance usd", + "symbol": "busd", + "precision": 18, + "priceId": "binance-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", + "color": "F3BA2F", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063", + "name": "dai", + "symbol": "dai", + "precision": 18, + "priceId": "dai", + "purchaseProviders": [ + "ramp" ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polygon.svg", - "addressPrefix": 0, - "options": [ - "testnet", - "ethereum", - "nft", - "utilityFeePayment" - ] + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", + "color": "F9AF1A", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xD6DF932A45C0f255f85145f286eA0b292B21C90B", + "name": "aave", + "symbol": "aave", + "precision": 18, + "priceId": "aave", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AAVE.svg", + "color": "B6509E", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x172370d5Cd63279eFa6d502DAB29171933a610AF", + "name": "curve dao", + "symbol": "crv", + "precision": 18, + "priceId": "curve-dao-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRV.svg", + "color": "B6509E", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xb33EaAd8d922B1083446DC23f610c2567fB5180f", + "name": "uniswap", + "symbol": "uni", + "precision": 18, + "priceId": "uniswap", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UNI.svg", + "color": "FF007A", + "ethereumType": "erc20" + } + ], + "nodes": [ + { + "url": "https://polygon-mainnet.blastapi.io/", + "name": "Blast https" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polygon.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "nft", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "80001", + "rank": 103, + "name": "Polygon mumbai testnet", + "ecosystem": "ethereum", + "externalApi": { + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://mumbai.polygonscan.com/{type}/{value}" + } + ], + "history": { + "type": "etherscan", + "url": "https://api-testnet.polygonscan.com/api" + } }, - { - "disabled": false, - "chainId": "6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e", - "rank": 109, - "name": "Rococo", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://rococo.subscan.io/{type}/{value}" - }] - }, - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b2", - "symbol": "ROC" - } - ], - "availableDestinations": [ - { - "chainId": "3266816be9fa51b32cfea58d3e33ca77246bc9618595a4300e44c8856a8d8a17", - "assets": [ - { - "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b2", - "symbol": "ROC" - } - ], - "bridgeParachainId" : "8685a8d3e57fa8024b91b8ead6cc97acf953889c6fb0a355602826a1e2db198f" - } - ] - }, - "assets": [ - { - "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b2", - "name": "rococo", - "symbol": "roc", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ROC.svg", - "color": "FFFFFF", - "type": "normal", - "isUtility": true - }], - "nodes": [ - { - "url": "wss://rococo-rpc.polkadot.io", - "name": "Parity node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Rococo.svg", - "addressPrefix": 42, - "options": [ - "testnet" - ] + "assets": [ + { + "isUtility": true, + "id": "0x0000000000000000000000000000000000001010", + "name": "polygon", + "symbol": "matic", + "precision": 18, + "priceId": "matic", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", + "color": "8247E5", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://polygon-testnet.blastapi.io/", + "name": "Blast https" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polygon.svg", + "addressPrefix": 0, + "options": [ + "testnet", + "ethereum", + "nft", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e", + "rank": 109, + "name": "Rococo", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://rococo.subscan.io/{type}/{value}" + } + ] }, - { - "disabled": false, - "chainId": "8685a8d3e57fa8024b91b8ead6cc97acf953889c6fb0a355602826a1e2db198f", - "parentId": "6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e", - "paraId": "2011", - "name": "SORA Rococo parachain", - "assets": [{ - "id": "b5a44630-920e-43ee-809f-61890d0888b0123", - "name": "sora", - "symbol": "rxor", - "currencyId": "0x0200000000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", - "color": "EE2233", - "isUtility": true, - "type": "soraAsset" - }, + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b2", + "symbol": "ROC" + } + ], + "availableDestinations": [ + { + "chainId": "3266816be9fa51b32cfea58d3e33ca77246bc9618595a4300e44c8856a8d8a17", + "assets": [ { - "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b2123", - "name": "rococo", - "symbol": "roc", - "precision": 18, - "currencyId": "0x00dc9b4341fde46c9ac80b623d0d43afd9ac205baabdc087cadaa06f92b309c7", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/WND.svg", - "color": "FFFFFF", - "type": "soraAsset" - }], - "nodes": [{ - "url": "wss://ws.parachain-collator-1.c1.stg1.sora2.soramitsu.co.jp", - "name": "Soramitsu node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", - "addressPrefix": 420, - "options": [ - "testnet" - ] + "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b2", + "symbol": "ROC" + } + ], + "bridgeParachainId": "8685a8d3e57fa8024b91b8ead6cc97acf953889c6fb0a355602826a1e2db198f" + } + ] }, - { - "disabled": false, - "chainId": "3af4ff48ec76d2efc8476730f423ac07e25ad48f5f4c9dc39c778b164d808615", - "name": "Enjin Matrixchain", - "externalApi": { - "explorers": [{ + "assets": [ + { + "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b2", + "name": "rococo", + "symbol": "roc", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ROC.svg", + "color": "FFFFFF", + "type": "normal", + "isUtility": true + } + ], + "nodes": [ + { + "url": "wss://rococo-rpc.polkadot.io", + "name": "Parity node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Rococo.svg", + "addressPrefix": 42, + "options": [ + "testnet" + ] + }, + { + "disabled": false, + "chainId": "8685a8d3e57fa8024b91b8ead6cc97acf953889c6fb0a355602826a1e2db198f", + "parentId": "6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e", + "paraId": "2011", + "name": "SORA Rococo parachain", + "ecosystem": "substrate", + "assets": [ + { + "id": "b5a44630-920e-43ee-809f-61890d0888b0123", + "name": "sora", + "symbol": "rxor", + "currencyId": "0x0200000000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", + "color": "EE2233", + "isUtility": true, + "type": "soraAsset" + }, + { + "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b2123", + "name": "rococo", + "symbol": "roc", + "precision": 18, + "currencyId": "0x00dc9b4341fde46c9ac80b623d0d43afd9ac205baabdc087cadaa06f92b309c7", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/WND.svg", + "color": "FFFFFF", + "type": "soraAsset" + } + ], + "nodes": [ + { + "url": "wss://ws.parachain-collator-1.c1.stg1.sora2.soramitsu.co.jp", + "name": "Soramitsu node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", + "addressPrefix": 420, + "options": [ + "testnet" + ] + }, + { + "disabled": false, + "chainId": "3af4ff48ec76d2efc8476730f423ac07e25ad48f5f4c9dc39c778b164d808615", + "name": "Enjin Matrixchain", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { "type": "subscan", "types": [ "extrinsic", "account" ], "url": "https://enjin.subscan.io//{type}/{value}" - }] - }, - "assets": [{ + } + ] + }, + "assets": [ + { "id": "13c8d9cb-897b-4507-8ae7-ba2c219d270d", "name": "enjin coin", "symbol": "enj", @@ -6962,32 +7375,37 @@ "color": "5A27ED", "isUtility": true, "type": "normal" - }], - "nodes": [{ + } + ], + "nodes": [ + { "url": "wss://rpc.matrix.blockchain.enjin.io", "name": "Enjin Foundation node" } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Enjin.svg", - "addressPrefix": 1110 - }, - { - "disabled": false, - "chainId": "a37725fd8943d2a524cb7ecc65da438f9fa644db78ba24dcd0003e2f95645e8f", - "parentId": "3af4ff48ec76d2efc8476730f423ac07e25ad48f5f4c9dc39c778b164d808615", - "name": "Canary Matrixchain", - "externalApi": { - "explorers": [{ + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Enjin.svg", + "addressPrefix": 1110 + }, + { + "disabled": false, + "chainId": "a37725fd8943d2a524cb7ecc65da438f9fa644db78ba24dcd0003e2f95645e8f", + "parentId": "3af4ff48ec76d2efc8476730f423ac07e25ad48f5f4c9dc39c778b164d808615", + "name": "Canary Matrixchain", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { "type": "subscan", "types": [ "extrinsic", "account" ], "url": "https://matrix.subscan.io///{type}/{value}" - }] - }, - "assets": [{ + } + ] + }, + "assets": [ + { "id": "85c17bd8-2565-4cf3-8e0f-14f38ff55eee", "name": "enjin coin", "symbol": "cenj", @@ -6997,799 +7415,593 @@ "color": "5A27ED", "isUtility": true, "type": "normal" - }], - "nodes": [{ + } + ], + "nodes": [ + { "url": "wss://rpc.matrix.canary.enjin.io", "name": "Enjin Foundation node" } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Enjin.svg", - "addressPrefix": 9030, - "options": [ - "testnet" - ] - }, - { - "disabled": false, - "chainId": "42161", - "rank": 4, - "name": "Arbitrum One", - "externalApi": { - "history": { - "type": "oklink", - "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=ARBITRUM" - }, - "explorers": [ - { - "type": "oklink", - "types": [ - "tx", - "address" - ], - "url": "https://www.okx.com/web3/explorer/arbitrum/{type}/{value}?channelID=flessw" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "37b6375a-0708-4728-bec9-bf15b8680aff", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0x912CE59144191C1204E64559FE8253a0e49E6548", - "name": "arbitrum", - "symbol": "arb", - "precision": 18, - "priceId": "arbitrum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ARB.svg", - "color": "12AAFF", - "type": "normal", - "ethereumType": "erc20" - } - ], - "nodes": [ - { - "url": "https://arbitrum-one.publicnode.com/", - "name": "Public http node" - }, + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Enjin.svg", + "addressPrefix": 9030, + "options": [ + "testnet" + ] + }, + { + "disabled": false, + "chainId": "42161", + "rank": 4, + "name": "Arbitrum One", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "oklink", + "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=ARBITRUM" + }, + "explorers": [ { - "url": "wss://arbitrum-one.publicnode.com/", - "name": "Public wss node" + "type": "oklink", + "types": [ + "tx", + "address" + ], + "url": "https://www.okx.com/web3/explorer/arbitrum/{type}/{value}?channelID=flessw" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Arbitrum.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "chainlinkProvider", - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "10", - "rank": 5, - "name": "OP Mainnet", - "externalApi": { - "history": { - "type": "oklink", - "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=OP" - }, - "explorers": [ - { - "type": "oklink", - "types": [ - "tx", - "address" - ], - "url": "https://www.okx.com/web3/explorer/optimism/{type}/{value}?channelID=flessw" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "08bb34b8-8027-4fea-948d-5243f5cbd6ba", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "normal" - }, + "assets": [ + { + "isUtility": true, + "id": "37b6375a-0708-4728-bec9-bf15b8680aff", + "name": "ethereum", + "symbol": "eth", + "precision": 18, + "priceId": "ethereum", + "purchaseProviders": [ + "moonpay", + "ramp" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "FF0066", + "ethereumType": "normal" + }, + { + "isUtility": false, + "id": "0x912CE59144191C1204E64559FE8253a0e49E6548", + "name": "arbitrum", + "symbol": "arb", + "precision": 18, + "priceId": "arbitrum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ARB.svg", + "color": "12AAFF", + "ethereumType": "erc20" + } + ], + "nodes": [ + { + "url": "https://arbitrum-one.publicnode.com/", + "name": "Public http node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Arbitrum.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "chainlinkProvider", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "10", + "rank": 5, + "name": "OP Mainnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "oklink", + "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=OP" + }, + "explorers": [ { - "isUtility": false, - "id": "0x4200000000000000000000000000000000000042", - "name": "optimism", - "symbol": "op", - "precision": 18, - "priceId": "optimism", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OP.svg", - "color": "FF0420", - "type": "normal", - "ethereumType": "erc20" + "type": "oklink", + "types": [ + "tx", + "address" + ], + "url": "https://www.okx.com/web3/explorer/optimism/{type}/{value}?channelID=flessw" } - ], - "nodes": [ - { - "url": "https://optimism-mainnet.blastapi.io/", - "name": "Blast https node" - }, - { - "url": "wss://optimism-mainnet.blastapi.io/", - "name": "Blast wss node" - }, - { - "url": "https://optimism.publicnode.com/", - "name": "Public http node" - }, - { - "url": "wss://optimism.publicnode.com/", - "name": "Public wss node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Optimism.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "43114", - "rank": 6, - "name": "Avalanche C-Chain", - "externalApi": { - "history": { - "type": "oklink", - "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=AVAXC" - }, - "explorers": [ - { - "type": "oklink", - "types": [ - "tx", - "address" - ], - "url": "https://www.okx.com/web3/explorer/avax/{type}/{value}?channelID=flessw" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "870f6877-c917-48bc-aa64-723416c94ebb", - "name": "avalanche", - "symbol": "avax", - "precision": 18, - "priceId": "avalanche-2", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AVAX.svg", - "color": "E84142", - "type": "normal", - "ethereumType": "normal" + "assets": [ + { + "isUtility": true, + "id": "08bb34b8-8027-4fea-948d-5243f5cbd6ba", + "name": "ethereum", + "symbol": "eth", + "precision": 18, + "priceId": "ethereum", + "purchaseProviders": [ + "moonpay", + "ramp" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "FF0066", + "ethereumType": "normal" + }, + { + "isUtility": false, + "id": "0x4200000000000000000000000000000000000042", + "name": "optimism", + "symbol": "op", + "precision": 18, + "priceId": "optimism", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OP.svg", + "color": "FF0420", + "ethereumType": "erc20" + } + ], + "nodes": [ + { + "url": "https://optimism-mainnet.blastapi.io/", + "name": "Blast https node" + }, + { + "url": "https://optimism.publicnode.com/", + "name": "Public http node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Optimism.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "43114", + "rank": 6, + "name": "Avalanche C-Chain", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "oklink", + "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=AVAXC" + }, + "explorers": [ + { + "type": "oklink", + "types": [ + "tx", + "address" + ], + "url": "https://www.okx.com/web3/explorer/avax/{type}/{value}?channelID=flessw" } - ], - "nodes": [ - { - "url": "https://avalanche-c-chain.publicnode.com/", - "name": "Public https node" - }, - { - "url": "wss://avalanche-c-chain.publicnode.com/ext/bc/C/ws", - "name": "Public wss node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Avalanche.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "195", - "rank": 130, - "name": "X Layer Testnet", - "externalApi": { - "history": { + "assets": [ + { + "isUtility": true, + "id": "870f6877-c917-48bc-aa64-723416c94ebb", + "name": "avalanche", + "symbol": "avax", + "precision": 18, + "priceId": "avalanche-2", + "purchaseProviders": [ + "moonpay", + "ramp" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AVAX.svg", + "color": "E84142", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://avalanche-c-chain.publicnode.com/", + "name": "Public https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Avalanche.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "195", + "rank": 130, + "name": "X Layer Testnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "oklink", + "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=XLAYER_TESTNET" + }, + "explorers": [ + { "type": "oklink", - "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=XLAYER_TESTNET" - }, - "explorers": [ - { - "type": "oklink", - "types": [ - "tx", - "address" - ], - "url": "https://www.okx.com/explorer/xlayer-test/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "a61b1842-30c0-431d-9bbc-fc3370562455", - "name": "okb", - "symbol": "okb", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XLOKB.svg", - "color": "FFFFFF", - "type": "normal", - "ethereumType": "normal" + "types": [ + "tx", + "address" + ], + "url": "https://www.okx.com/explorer/xlayer-test/{type}/{value}" } - ], - "nodes": [ - { - "url": "https://testrpc.xlayer.tech/", - "name": "X Layer Test Tech https node" - }, - { - "url": "wss://testws.xlayer.tech", - "name": "X Layer Test Tech wss node" - }, - { - "url": "https://xlayertestrpc.okx.com/", - "name": "X Layer Test OKX https node" - }, + ] + }, + "assets": [ + { + "isUtility": true, + "id": "a61b1842-30c0-431d-9bbc-fc3370562455", + "name": "okb", + "symbol": "okb", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XLOKB.svg", + "color": "FFFFFF", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://testrpc.xlayer.tech/", + "name": "X Layer Test Tech https node" + }, + { + "url": "https://xlayertestrpc.okx.com/", + "name": "X Layer Test OKX https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/xlayerchain.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "196", + "rank": 13, + "name": "X Layer Mainnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "oklink", + "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=XLAYER" + }, + "explorers": [ { - "url": "wss://xlayertestws.okx.com", - "name": "X Layer Test OKX wss node" + "type": "oklink", + "types": [ + "tx", + "address" + ], + "url": "https://www.okx.com/web3/explorer/xlayer-test/{type}/{value}" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/xlayerchain.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "196", - "rank": 13, - "name": "X Layer Mainnet", - "externalApi": { - "history": { + "assets": [ + { + "isUtility": true, + "id": "dcf40e8d-f041-45b8-8cc8-e5b95bedb86e", + "name": "okb", + "symbol": "okb", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XLOKB.svg", + "color": "FFFFFF", + "priceId": "okb", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://rpc.xlayer.tech/", + "name": "X Layer Tech https node" + }, + { + "url": "https://xlayerrpc.okx.com/", + "name": "X Layer OKX https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/xlayerchain.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "1101", + "rank": 7, + "name": "Polygon zkEVM", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "oklink", + "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=POLYGON_ZKEVM" + }, + "explorers": [ + { "type": "oklink", - "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=XLAYER" - }, - "explorers": [ - { - "type": "oklink", - "types": [ - "tx", - "address" - ], - "url": "https://www.okx.com/web3/explorer/xlayer-test/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "dcf40e8d-f041-45b8-8cc8-e5b95bedb86e", - "name": "okb", - "symbol": "okb", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XLOKB.svg", - "color": "FFFFFF", - "priceId": "okb", - "type": "normal", - "ethereumType": "normal" + "types": [ + "tx", + "address" + ], + "url": "https://www.okx.com/web3/explorer/polygon-zkevm/{type}/{value}?channelID=flessw" } - ], - "nodes": [ - { - "url": "https://rpc.xlayer.tech/", - "name": "X Layer Tech https node" - }, - { - "url": "wss://ws.xlayer.tech/", - "name": "X Layer Tech wss node" - }, - { - "url": "https://xlayerrpc.okx.com/", - "name": "X Layer OKX https node" - }, - { - "url": "wss://xlayerws.okx.com/", - "name": "X Layer OKX wss node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/xlayerchain.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "1101", - "rank": 7, - "name": "Polygon zkEVM", - "externalApi": { - "history": { - "type": "oklink", - "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=POLYGON_ZKEVM" - }, - "explorers": [ - { - "type": "oklink", - "types": [ - "tx", - "address" - ], - "url": "https://www.okx.com/web3/explorer/polygon-zkevm/{type}/{value}?channelID=flessw" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "8f85b561-18f5-4cf0-9077-305ebc84d015", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0xA8CE8aee21bC2A48a5EF670afCc9274C7bbbC035", - "name": "usd coin", - "symbol": "usdc", - "precision": 6, - "priceId": "usd-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xa2036f0538221a77A3937F1379699f44945018d0", - "name": "polygon", - "symbol": "matic", - "precision": 18, - "priceId": "matic-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", - "color": "8247E5", - "type": "normal", - "ethereumType": "erc20" + "assets": [ + { + "isUtility": true, + "id": "8f85b561-18f5-4cf0-9077-305ebc84d015", + "name": "ethereum", + "symbol": "eth", + "precision": 18, + "priceId": "ethereum", + "purchaseProviders": [ + "ramp" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "FF0066", + "ethereumType": "normal" + }, + { + "isUtility": false, + "id": "0xA8CE8aee21bC2A48a5EF670afCc9274C7bbbC035", + "name": "usd coin", + "symbol": "usdc", + "precision": 6, + "priceId": "usd-coin", + "purchaseProviders": [ + "ramp" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xa2036f0538221a77A3937F1379699f44945018d0", + "name": "polygon", + "symbol": "matic", + "precision": 18, + "priceId": "matic-network", + "purchaseProviders": [ + "ramp" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", + "color": "8247E5", + "ethereumType": "erc20" + } + ], + "nodes": [ + { + "url": "https://zkevm-rpc.com", + "name": "Zkevm https node" + }, + { + "url": "https://polygon-zkevm-mainnet.public.blastapi.io", + "name": "Blast https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polygon.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "7001", + "rank": 14, + "name": "ZetaChain Testnet", + "ecosystem": "ethereum", + "assets": [ + { + "isUtility": true, + "id": "0f07791b-b091-49c1-81b7-9facba2b7db3", + "name": "zetachain", + "symbol": "zeta", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZETA.svg", + "color": "235643", + "ethereumType": "normal" + } + ], + "externalApi": { + "history": { + "type": "zeta", + "url": "https://zetachain-athens-3.blockscout.com/api/v2/addresses/" } - ], - "nodes": [ - { - "url": "https://zkevm-rpc.com", - "name": "Zkevm https node" - }, - { - "url": "https://polygon-zkevm-mainnet.public.blastapi.io", - "name": "Blast https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polygon.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] }, - { - "disabled": false, - "chainId": "7001", - "rank": 14, - "name": "ZetaChain Testnet", - "assets": [ - { - "isUtility": true, - "id": "0f07791b-b091-49c1-81b7-9facba2b7db3", - "name": "zetachain", - "symbol": "zeta", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZETA.svg", - "color": "235643", - "type": "normal", - "ethereumType": "normal" + "nodes": [ + { + "url": "https://rpc.ankr.com/zetachain_evm_athens_testnet", + "name": "Ankr https node" + }, + { + "url": "https://zetachain-athens-evm.blockpi.network/v1/rpc/public", + "name": "Blockpi https node" + }, + { + "url": "https://zetachain-testnet-evm.itrocket.net", + "name": "Itrocket https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Zetachain.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "7834781d38e4798d548e34ec947d19deea29df148a7bf32484b7b24dacf8d4b7", + "name": "Reef Mainnet", + "ecosystem": "substrate", + "assets": [ + { + "id": "55697eb0-ca77-47e3-a436-b05460ab1ead", + "name": "reef", + "symbol": "reef", + "precision": 18, + "priceId": "reef", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/REEF.svg", + "color": "C547CB", + "isUtility": true, + "type": "normal", + "staking": "relaychain" + } + ], + "externalApi": { + "history": { + "type": "reef", + "url": "https://squid.subsquid.io/reef-explorer/graphql" + }, + "staking": { + "type": "reef", + "url": "https://squid.subsquid.io/reef-explorer/graphql" + }, + "explorers": [ + { + "type": "reef", + "types": [ + "transfer", + "extrinsic", + "account" + ], + "url": "https://reefscan.com/{type}/{value}" } - ], - "externalApi": { - "history": { - "type": "zeta", - "url": "https://zetachain-athens-3.blockscout.com/api/v2/addresses/" - } - }, - "nodes": [ - { - "url": "https://rpc.ankr.com/zetachain_evm_athens_testnet", - "name": "Ankr https node" - }, - { - "url": "https://zetachain-athens-evm.blockpi.network/v1/rpc/public", - "name": "Blockpi https node" - }, - { - "url": "https://zetachain-testnet-evm.itrocket.net", - "name": "Itrocket https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Zetachain.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "7834781d38e4798d548e34ec947d19deea29df148a7bf32484b7b24dacf8d4b7", - "name": "Reef Mainnet", - "assets": [{ - "id": "55697eb0-ca77-47e3-a436-b05460ab1ead", - "name": "reef", - "symbol": "reef", - "precision": 18, - "priceId": "reef", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/REEF.svg", - "color": "C547CB", - "isUtility": true, - "type": "normal", - "staking": "relaychain" - }], - "externalApi": { - "history": { - "type": "reef", - "url": "https://squid.subsquid.io/reef-explorer/graphql" - }, - "staking": { - "type": "reef", - "url": "https://squid.subsquid.io/reef-explorer/graphql" - }, - "explorers": [{ - "type": "reef", - "types": [ - "transfer", - "extrinsic", - "account" - ], - "url": "https://reefscan.com/{type}/{value}" - }] - }, - "nodes": [{ - "url": "wss://rpc.reefscan.com/ws", - "name": "Reef Community node" - } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/reefchain.svg", - "addressPrefix": 42 - }, - { - "disabled": false, - "chainId": "f3c7ad88f6a80f366c4be216691411ef0622e8b809b1046ea297ef106058d4eb", - "name": "Manta Parachain", - "assets": [{ - "id": "0c41f3da-3c42-413a-aca3-bfb19b717df7", - "name": "manta", - "symbol": "manta", - "precision": 18, - "priceId": "manta-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MANTA.svg", - "color": "29CCB9", - "isUtility": true, - "type": "normal" - }], - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://manta.subscan.io/{type}/{value}" - }] - }, - "nodes": [{ - "url": "wss://ws.manta.systems", - "name": "Manta Community node" - } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/mantachain.svg", - "addressPrefix": 77 - }, - { - "disabled": false, - "chainId": "169", - "name": "Manta Pacific Mainnet", - "assets": [ - { - "isUtility": true, - "id": "af44954d-2be1-4021-ae0b-f05d8180400a", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color":"627EEA", - "type": "normal", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0x95CeF13441Be50d20cA4558CC0a27B601aC544E5", - "name": "manta", - "symbol": "manta", - "precision": 18, - "priceId": "manta-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MANTA.svg", - "color": "8247E5", - "type": "normal", - "ethereumType": "erc20" + "nodes": [ + { + "url": "wss://rpc.reefscan.com/ws", + "name": "Reef Community node" } - ], - "externalApi": { - "history": { - "type": "zeta", - "url": "https://pacific-explorer.manta.network/api/v2/addresses/" - } - }, - "nodes": [ - { - "url": "https://pacific-rpc.manta.network/http", - "name": "Manta https node" - }, - { - "url": "https://1rpc.io/manta", - "name": "1RPC https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/mantachain.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": true, - "chainId": "d8761d3c88f26dc12875c00d3165f7d67243d56fc85b4cf19937601a7916e5a9", - "name": "Enjin Relaychain", - "externalApi": { - "explorers": [{ + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/reefchain.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "f3c7ad88f6a80f366c4be216691411ef0622e8b809b1046ea297ef106058d4eb", + "name": "Manta Parachain", + "ecosystem": "substrate", + "assets": [ + { + "id": "0c41f3da-3c42-413a-aca3-bfb19b717df7", + "name": "manta", + "symbol": "manta", + "precision": 18, + "priceId": "manta-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MANTA.svg", + "color": "29CCB9", + "isUtility": true, + "type": "normal" + } + ], + "externalApi": { + "explorers": [ + { "type": "subscan", "types": [ "extrinsic", "account" ], - "url": "https://enjin.subscan.io/{type}/{value}" - }] + "url": "https://manta.subscan.io/{type}/{value}" + } + ] + }, + "nodes": [ + { + "url": "wss://ws.manta.systems", + "name": "Manta Community node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/mantachain.svg", + "addressPrefix": 77 + }, + { + "disabled": false, + "chainId": "169", + "name": "Manta Pacific Mainnet", + "ecosystem": "ethereum", + "assets": [ + { + "isUtility": true, + "id": "af44954d-2be1-4021-ae0b-f05d8180400a", + "name": "ethereum", + "symbol": "eth", + "precision": 18, + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "627EEA", + "ethereumType": "normal" }, - "assets": [{ - "id": "43748d94-90ba-41b2-8732-326cd943a501", - "name": "enjin coin", - "symbol": "enj", + { + "isUtility": false, + "id": "0x95CeF13441Be50d20cA4558CC0a27B601aC544E5", + "name": "manta", + "symbol": "manta", "precision": 18, - "priceId": "enjincoin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ENJ.svg", - "color": "5A27ED", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc.relay.blockchain.enjin.io", - "name": "Enjin Foundation node" + "priceId": "manta-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MANTA.svg", + "color": "8247E5", + "ethereumType": "erc20" + } + ], + "externalApi": { + "history": { + "type": "zeta", + "url": "https://pacific-explorer.manta.network/api/v2/addresses/" } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Enjin.svg", - "addressPrefix": 2135 }, - { - "disabled": false, - "chainId": "6bd89e052d67a45bb60a9a23e8581053d5e0d619f15cb9865946937e690c42d6", - "name": "Liberland", - "assets": [ - { - "id": "a6b83d39-a488-4b34-8352-280705a792ea", - "name": "liberland dollar", - "symbol": "lld", - "precision": 12, - "priceId": "liberland-lld", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLD.svg", - "color": "00437F", - "isUtility": true, - "type": "normal" - }, + "nodes": [ { - "id": "30b43eb9-36b4-4b40-bf72-330d2e20ee86", - "name": "liberland merit", - "symbol": "llm", - "precision": 12, - "currencyId": "1", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLM.svg", - "color": "EFB900", - "type": "assets" + "url": "https://pacific-rpc.manta.network/http", + "name": "Manta https node" }, { - "id": "2e7179c9-4308-420e-a654-43c92d119717", - "name": "sora xor", - "symbol": "xor", - "precision": 12, - "currencyId": "774441749", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", - "color": "EE2233", - "type": "assets" - } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "a6b83d39-a488-4b34-8352-280705a792e", - "symbol": "LLD" - }, - { - "id": "30b43eb9-36b4-4b40-bf72-330d2e20ee86", - "symbol": "LLM" - }, - { - "id": "2e7179c9-4308-420e-a654-43c92d119717", - "symbol": "XOR" - } - ], - "availableDestinations": [ - { - "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", - "assets": [ - { - "id": "a6b83d39-a488-4b34-8352-280705a792e", - "symbol": "LLD", - "minAmount": "1000000000000" - }, - { - "id": "30b43eb9-36b4-4b40-bf72-330d2e20ee86", - "symbol": "LLM" - }, - { - "id": "2e7179c9-4308-420e-a654-43c92d119717", - "symbol": "XOR" - } - - ] - } - ] - }, - "nodes": [ - { - "url": "wss://mainnet.liberland.org", - "name": "Liberland node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/liberland.svg", - "addressPrefix": 42 - }, - { - "disabled": false, - "chainId": "f3c7ad88f6a80f366c4be216691411ef0622e8b809b1046ea297ef106058d4eb", - "name": "Manta Parachain", - "assets": [{ - "id": "0c41f3da-3c42-413a-aca3-bfb19b717df7", - "name": "manta", - "symbol": "manta", - "precision": 18, - "priceId": "manta-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MANTA.svg", - "color": "29CCB9", - "isUtility": true, - "type": "normal" - }], - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://manta.subscan.io/{type}/{value}" - }] - }, - "nodes": [{ - "url": "wss://ws.manta.systems", - "name": "Manta Community node" - } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/mantachain.svg", - "addressPrefix": 77 - }, - { - "disabled": false, - "chainId": "169", - "name": "Manta Pacific Mainnet", - "assets": [ - { - "isUtility": true, - "id": "af44954d-2be1-4021-ae0b-f05d8180400a", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color":"627EEA", - "type": "normal", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0x95CeF13441Be50d20cA4558CC0a27B601aC544E5", - "name": "manta", - "symbol": "manta", - "precision": 18, - "priceId": "manta-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MANTA.svg", - "color": "8247E5", - "type": "normal", - "ethereumType": "erc20" + "url": "https://1rpc.io/manta", + "name": "1RPC https node" } - ], - "externalApi": { - "history": { - "type": "zeta", - "url": "https://pacific-explorer.manta.network/api/v2/addresses/" - } - }, - "nodes": [ - { - "url": "https://pacific-rpc.manta.network/http", - "name": "Manta https node" - }, - { - "url": "https://1rpc.io/manta", - "name": "1RPC https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/mantachain.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": true, - "chainId": "d8761d3c88f26dc12875c00d3165f7d67243d56fc85b4cf19937601a7916e5a9", - "name": "Enjin Relaychain", - "externalApi": { - "explorers": [{ + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/mantachain.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": true, + "chainId": "d8761d3c88f26dc12875c00d3165f7d67243d56fc85b4cf19937601a7916e5a9", + "name": "Enjin Relaychain", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { "type": "subscan", "types": [ "extrinsic", "account" ], "url": "https://enjin.subscan.io/{type}/{value}" - }] - }, - "assets": [{ + } + ] + }, + "assets": [ + { "id": "43748d94-90ba-41b2-8732-326cd943a501", "name": "enjin coin", "symbol": "enj", @@ -7799,447 +8011,496 @@ "color": "5A27ED", "isUtility": true, "type": "normal" - }], - "nodes": [{ + } + ], + "nodes": [ + { "url": "wss://rpc.relay.blockchain.enjin.io", "name": "Enjin Foundation node" } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Enjin.svg", - "addressPrefix": 2135 - }, - { - "disabled": false, - "chainId": "6bd89e052d67a45bb60a9a23e8581053d5e0d619f15cb9865946937e690c42d6", - "name": "Liberland", - "assets": [ - { - "id": "a6b83d39-a488-4b34-8352-280705a792ea", - "name": "liberland lld", - "symbol": "lld", - "precision": 12, - "priceId": "liberland-lld", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLD.svg", - "color": "00437F", - "isUtility": true, - "type": "normal" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Enjin.svg", + "addressPrefix": 2135 + }, + { + "disabled": false, + "chainId": "6bd89e052d67a45bb60a9a23e8581053d5e0d619f15cb9865946937e690c42d6", + "name": "Liberland", + "ecosystem": "substrate", + "assets": [ + { + "id": "a6b83d39-a488-4b34-8352-280705a792ea", + "name": "liberland dollar", + "symbol": "lld", + "precision": 12, + "priceId": "liberland-lld", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLD.svg", + "color": "00437F", + "isUtility": true, + "type": "normal" + }, + { + "id": "30b43eb9-36b4-4b40-bf72-330d2e20ee86", + "name": "liberland merit", + "symbol": "llm", + "precision": 12, + "currencyId": "1", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLM.svg", + "color": "EFB900", + "type": "assets" + }, + { + "id": "2e7179c9-4308-420e-a654-43c92d119717", + "name": "sora xor", + "symbol": "xor", + "precision": 18, + "currencyId": "774441749", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", + "color": "EE2233", + "type": "assets" } ], - "nodes": [ + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "a6b83d39-a488-4b34-8352-280705a792e", + "symbol": "LLD" + }, + { + "id": "30b43eb9-36b4-4b40-bf72-330d2e20ee86", + "symbol": "LLM" + }, { - "url": "wss://mainnet.liberland.org", - "name": "Liberland node" + "id": "2e7179c9-4308-420e-a654-43c92d119717", + "symbol": "XOR" } ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/liberland.svg", - "addressPrefix": 42 - }, - { - "disabled": false, - "chainId": "248", - "rank": 15, - "name": "Oasys Mainnet", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.oasys.games/api" - }, - "explorers": [ + "availableDestinations": [ + { + "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", + "assets": [ { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://explorer.oasys.games/{type}/{value}" + "id": "a6b83d39-a488-4b34-8352-280705a792e", + "symbol": "LLD", + "minAmount": "1000000000000" + }, + { + "id": "30b43eb9-36b4-4b40-bf72-330d2e20ee86", + "symbol": "LLM" + }, + { + "id": "2e7179c9-4308-420e-a654-43c92d119717", + "symbol": "XOR" } ] - }, - "assets": [ - { - "isUtility": true, - "id": "11d2ece1-ecae-4596-aae4-ee9db83a5e2a", - "name": "oasys", - "symbol": "oas", - "precision": 18, - "priceId": "oasys", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", - "color": "00A84F", - "type": "normal", - "ethereumType": "normal" - } - ], - "nodes": [ - { - "url": "https://oasys.blockpi.network/v1/rpc/public/", - "name": "Blockpi https node" - }, - { - "url": "https://rpc.mainnet.oasys.games/", - "name": "Oasys https node" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/oasys.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "29548", - "rank": 150, - "name": "MCH Verse Mainnet", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.oasys.mycryptoheroes.net/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://explorer.oasys.mycryptoheroes.net/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "dad38228-7e66-46cb-b8f8-bee5a738a18a", - "name": "oasys", - "symbol": "oas", - "precision": 18, - "priceId": "oasys", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", - "color": "00A84F", - "type": "normal", - "ethereumType": "normal" - } - ], - "nodes": [ - { - "url": "https://rpc.oasys.mycryptoheroes.net/", - "name": "MCH https node" - }, - { - "url": "wss://ws.oasys.mycryptoheroes.net/", - "name": "MCH wss node" + "nodes": [ + { + "url": "wss://mainnet.liberland.org", + "name": "Liberland node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/liberland.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "248", + "rank": 15, + "name": "Oasys Mainnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "etherscan", + "url": "https://explorer.oasys.games/api" + }, + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://explorer.oasys.games/{type}/{value}" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/mchverse.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "2400", - "rank": 151, - "name": "TCG Verse Mainnet", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.tcgverse.xyz/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://explorer.tcgverse.xyz/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "e2661f7b-3916-464d-8ea2-5650b6c7de94", - "name": "oasys", - "symbol": "oas", - "precision": 18, - "priceId": "oasys", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", - "color": "00A84F", - "type": "normal", - "ethereumType": "normal" - } - ], - "nodes": [ - { - "url": "https://rpc.tcgverse.xyz/", - "name": "TCG https node" - }, - { - "url": "wss://ws-rpc.tcgverse.xyz/", - "name": "TCG wss node" + "assets": [ + { + "isUtility": true, + "id": "11d2ece1-ecae-4596-aae4-ee9db83a5e2a", + "name": "oasys", + "symbol": "oas", + "precision": 18, + "priceId": "oasys", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", + "color": "00A84F", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://oasys.blockpi.network/v1/rpc/public/", + "name": "Blockpi https node" + }, + { + "url": "https://rpc.mainnet.oasys.games/", + "name": "Oasys https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/oasys.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "29548", + "rank": 150, + "name": "MCH Verse Mainnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "etherscan", + "url": "https://explorer.oasys.mycryptoheroes.net/api" + }, + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://explorer.oasys.mycryptoheroes.net/{type}/{value}" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/tcgverse.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "19011", - "rank": 152, - "name": "HOME Verse Mainnet", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.oasys.homeverse.games/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://explorer.oasys.homeverse.games/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "943d4fe9-76e5-48bd-9220-4fcda4e3b8e4", - "name": "oasys", - "symbol": "oas", - "precision": 18, - "priceId": "oasys", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", - "color": "00A84F", - "type": "normal", - "ethereumType": "normal" + "assets": [ + { + "isUtility": true, + "id": "dad38228-7e66-46cb-b8f8-bee5a738a18a", + "name": "oasys", + "symbol": "oas", + "precision": 18, + "priceId": "oasys", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", + "color": "00A84F", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://rpc.oasys.mycryptoheroes.net/", + "name": "MCH https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/mchverse.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "2400", + "rank": 151, + "name": "TCG Verse Mainnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "etherscan", + "url": "https://explorer.tcgverse.xyz/api" + }, + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://explorer.tcgverse.xyz/{type}/{value}" } - ], - "nodes": [ - { - "url": "https://rpc.mainnet.oasys.homeverse.games/", - "name": "HOME https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/homeverse.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "5555", - "rank": 153, - "name": "Chain Verse Mainnet", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.chainverse.info/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://explorer.chainverse.info/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "f1eeb4f0-d87d-41ef-8e23-af5a535b793c", - "name": "oasys", - "symbol": "oas", - "precision": 18, - "priceId": "oasys", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", - "color": "00A84F", - "type": "normal", - "ethereumType": "normal" + "assets": [ + { + "isUtility": true, + "id": "e2661f7b-3916-464d-8ea2-5650b6c7de94", + "name": "oasys", + "symbol": "oas", + "precision": 18, + "priceId": "oasys", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", + "color": "00A84F", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://rpc.tcgverse.xyz/", + "name": "TCG https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/tcgverse.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "19011", + "rank": 152, + "name": "HOME Verse Mainnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "etherscan", + "url": "https://explorer.oasys.homeverse.games/api" + }, + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://explorer.oasys.homeverse.games/{type}/{value}" } - ], - "nodes": [ - { - "url": "https://rpc.chainverse.info/", - "name": "Chain https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/chainverse.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "7225878", - "rank": 154, - "name": "Saakuru Verse Mainnet", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.saakuru.network/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://explorer.saakuru.network/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "5e15fa7a-b398-49a6-8459-da4b4f660f32", - "name": "oasys", - "symbol": "oas", - "precision": 18, - "priceId": "oasys", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", - "color": "00A84F", - "type": "normal", - "ethereumType": "normal" + "assets": [ + { + "isUtility": true, + "id": "943d4fe9-76e5-48bd-9220-4fcda4e3b8e4", + "name": "oasys", + "symbol": "oas", + "precision": 18, + "priceId": "oasys", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", + "color": "00A84F", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://rpc.mainnet.oasys.homeverse.games/", + "name": "HOME https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/homeverse.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "5555", + "rank": 153, + "name": "Chain Verse Mainnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "etherscan", + "url": "https://explorer.chainverse.info/api" + }, + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://explorer.chainverse.info/{type}/{value}" } - ], - "nodes": [ - { - "url": "https://rpc.saakuru.network/", - "name": "Saakuru https node" - }, - { - "url": "wss://ws.saakuru.network/", - "name": "Saakuru wss node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/saakuruverse.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "50005", - "rank": 155, - "name": "Yooldo Verse Mainnet", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.yooldo-verse.xyz/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://explorer.yooldo-verse.xyz/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "648d069c-c32f-4fbc-af23-14f77a9158aa", - "name": "oasys", - "symbol": "oas", - "precision": 18, - "priceId": "oasys", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", - "color": "00A84F", - "type": "normal", - "ethereumType": "normal" + "assets": [ + { + "isUtility": true, + "id": "f1eeb4f0-d87d-41ef-8e23-af5a535b793c", + "name": "oasys", + "symbol": "oas", + "precision": 18, + "priceId": "oasys", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", + "color": "00A84F", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://rpc.chainverse.info/", + "name": "Chain https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/chainverse.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "7225878", + "rank": 154, + "name": "Saakuru Verse Mainnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "etherscan", + "url": "https://explorer.saakuru.network/api" + }, + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://explorer.saakuru.network/{type}/{value}" } - ], - "nodes": [ - { - "url": "https://rpc.yooldo-verse.xyz/", - "name": "Yooldo https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/yooldoverse.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "30", - "rank": 16, - "name": "Rootstock Mainnet", - "externalApi": { - "history": { - "type": "zeta", - "url": "https://rootstock.blockscout.com//api/v2/addresses/" - } + "assets": [ + { + "isUtility": true, + "id": "5e15fa7a-b398-49a6-8459-da4b4f660f32", + "name": "oasys", + "symbol": "oas", + "precision": 18, + "priceId": "oasys", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", + "color": "00A84F", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://rpc.saakuru.network/", + "name": "Saakuru https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/saakuruverse.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "50005", + "rank": 155, + "name": "Yooldo Verse Mainnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "etherscan", + "url": "https://explorer.yooldo-verse.xyz/api" }, - "assets": [ - { - "isUtility": true, - "id": "defb1fb8-8cf1-49b1-8dd3-b8dac33394a4", - "name": "rootstock rsk rbtc", - "symbol": "rbtc", - "precision": 18, - "priceId": "rootstock", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RBTC.svg", - "color": "", - "type": "normal", - "ethereumType": "normal" + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://explorer.yooldo-verse.xyz/{type}/{value}" } - ], - "nodes": [ - { - "url": "https://public-node.rsk.co/", - "name": "Public https node" - }, - { - "url": "https://mycrypto.rsk.co/", - "name": "Mycrypto https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/rootstock.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "50dd5d206917bf10502c68fb4d18a59fc8aa31586f4e8856b493e43544aa82aa", - "name": "XX network", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-xx-network" - } + "assets": [ + { + "isUtility": true, + "id": "648d069c-c32f-4fbc-af23-14f77a9158aa", + "name": "oasys", + "symbol": "oas", + "precision": 18, + "priceId": "oasys", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", + "color": "00A84F", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://rpc.yooldo-verse.xyz/", + "name": "Yooldo https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/yooldoverse.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "30", + "rank": 16, + "name": "Rootstock Mainnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "zeta", + "url": "https://rootstock.blockscout.com//api/v2/addresses/" + } + }, + "assets": [ + { + "isUtility": true, + "id": "defb1fb8-8cf1-49b1-8dd3-b8dac33394a4", + "name": "rootstock rsk rbtc", + "symbol": "rbtc", + "precision": 18, + "priceId": "rootstock", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RBTC.svg", + "color": "", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://public-node.rsk.co/", + "name": "Public https node" }, - "assets": [{ + { + "url": "https://mycrypto.rsk.co/", + "name": "Mycrypto https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/rootstock.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "50dd5d206917bf10502c68fb4d18a59fc8aa31586f4e8856b493e43544aa82aa", + "name": "XX network", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-xx-network" + } + }, + "assets": [ + { "id": "526dca29-63ff-4683-88d6-852d1455b17b", "name": "xx network", "symbol": "xx", @@ -8249,243 +8510,407 @@ "color": "0AC1C7", "isUtility": true, "type": "normal" - }], - "nodes": [ - { - "url": "wss://xxnetwork-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://rpc.xx.network", - "name": "xx Foundation node #1" - }, - { - "url": "wss://rpc-hetzner.xx.network", - "name": "xx Foundation node #2" - }, - { - "url": "wss://rpc-do.xx.network", - "name": "xx Foundation node #3" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/xxnetwork.svg", - "addressPrefix": 55 - }, - { - "disabled": false, - "chainId": "6660", - "name": "Latest Testnet", - "externalApi": { - "history": { - "type": "zeta", - "url": "https://testscan.latestchain.io/api/v2/addresses/" - } + } + ], + "nodes": [ + { + "url": "wss://xxnetwork-rpc.dwellir.com", + "name": "Dwellir node" }, - "assets": [ - { - "isUtility": true, - "id": "1a31227d-c6fe-4c78-a3d6-353be70e56a6", - "name": "latest", - "symbol": "latest", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LATEST.svg", - "color": "FC81EA", - "type": "normal", - "ethereumType": "normal" - } - - ], - "nodes": [ - { - "url": "https://testnet-rpc.latestchain.io", - "name": "Latest https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/latestchain.svg", - "addressPrefix": 0, - "options": [ - "testnet", - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "9630", - "name": "Latest Mainnet", - "externalApi": { - "history": { - "type": "zeta", - "url": "https://scan.latestchain.io/api/v2/addresses/" - } + { + "url": "wss://rpc.xx.network", + "name": "xx Foundation node #1" + }, + { + "url": "wss://rpc-hetzner.xx.network", + "name": "xx Foundation node #2" }, - "assets": [ - { - "isUtility": true, - "id": "e7094e62-d86d-4c08-8497-9ebc4c9011ea", - "name": "latest", - "symbol": "latest", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LATEST.svg", - "color": "FC81EA", - "type": "normal", - "ethereumType": "normal" + { + "url": "wss://rpc-do.xx.network", + "name": "xx Foundation node #3" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/xxnetwork.svg", + "addressPrefix": 55 + }, + { + "disabled": false, + "chainId": "6660", + "name": "Latest Testnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "zeta", + "url": "https://testscan.latestchain.io/api/v2/addresses/" + } + }, + "assets": [ + { + "isUtility": true, + "id": "1a31227d-c6fe-4c78-a3d6-353be70e56a6", + "name": "latest", + "symbol": "latest", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LATEST.svg", + "color": "FC81EA", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://testnet-rpc.latestchain.io", + "name": "Latest https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/latestchain.svg", + "addressPrefix": 0, + "options": [ + "testnet", + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "9630", + "name": "Latest Mainnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "zeta", + "url": "https://scan.latestchain.io/api/v2/addresses/" + } + }, + "assets": [ + { + "isUtility": true, + "id": "e7094e62-d86d-4c08-8497-9ebc4c9011ea", + "name": "latest", + "symbol": "latest", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LATEST.svg", + "color": "FC81EA", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://mainnet-rpc.latestchain.io", + "name": "Latest https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/latest.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "72778", + "name": "CAGA Ankara Testnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "etherscan", + "url": "https://explorer.ankara-cagacrypto.com/api" + } + }, + "assets": [ + { + "isUtility": true, + "id": "a9270ef5-379a-4228-8d72-e6efb2b5f7b4", + "name": "caga", + "symbol": "caga", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CAGA.svg", + "color": "FFFFFF", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://www.ankara-cagacrypto.com", + "name": "Caga https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/cagachain.svg", + "addressPrefix": 0, + "options": [ + "testnet", + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "6f09966420b2608d1947ccfb0f2a362450d1fc7fd902c29b67c906eaa965a7ae", + "name": "Avail Goldberg Testnet", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://avail-testnet.subscan.io/{type}/{value}" } - - ], - "nodes": [ - { - "url": "https://mainnet-rpc.latestchain.io", - "name": "Latest https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/latest.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "72778", - "name": "CAGA Ankara Testnet", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.ankara-cagacrypto.com/api" - } + "assets": [ + { + "id": "72778e65-53b6-4cb4-bb4c-c029121eb494", + "name": "avail token", + "symbol": "avl", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AVL.svg", + "color": "56E5FF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://goldberg-testnet-rpc.avail.tools/ws", + "name": "Avail Goldberg Testnet node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Avail.svg", + "addressPrefix": 42, + "options": [ + "checkAppId" + ] + }, + { + "disabled": false, + "chainId": "0614f7b74a2e47f7c8d8e2a5335be84bdde9402a43f5decdec03200a87c8b943", + "name": "Analog Testnet", + "ecosystem": "substrate", + "assets": [ + { + "id": "9a8799db-a479-4a73-ae81-3b637c8624d8", + "name": "tanlog", + "symbol": "tanlog", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TANLOG.svg", + "color": "9A74F7", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc.testnet.analog.one", + "name": "Analog Testnet node" + } + ], + "options": [ + "testnet" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Analog.svg", + "addressPrefix": 12850 + }, + { + "disabled": false, + "chainId": "c1af4cb4eb3918e5db15086c0cc5ec17fb334f728b7c65dd44bfe1e174ff8b3f", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "name": "Kusama People", + "ecosystem": "substrate", + "assets": [ + { + "id": "b54f9075-6364-4ad9-8ac2-ed8a604491fd", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kusama-people-rpc.polkadot.io", + "name": "Parity node" + }, + { + "url": "wss://ksm-rpc.stakeworld.io/people", + "name": "Stakeworld node" + } + ], + "options": [ + "identityChain" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/People.svg", + "addressPrefix": 2 + }, + { + "disabled": false, + "chainId": "8217", + "name": "Klaytn Mainnet Cypress", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "oklink", + "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=KLAYTN" }, - "assets": [ - { - "isUtility": true, - "id": "a9270ef5-379a-4228-8d72-e6efb2b5f7b4", - "name": "caga", - "symbol": "caga", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CAGA.svg", - "color": "FFFFFF", - "type": "normal", - "ethereumType": "normal" + "explorers": [ + { + "type": "oklink", + "types": [ + "tx", + "address" + ], + "url": "https://www.okx.com/web3/explorer/klaytn/{type}/{value}?channelID=flessw" } - - ], - "nodes": [ - { - "url": "wss://wss.ankara-cagacrypto.com", - "name": "Caga wss node" - }, - { - "url": "https://www.ankara-cagacrypto.com", - "name": "Caga https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/cagachain.svg", - "addressPrefix": 0, - "options": [ - "testnet", - "ethereum", - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "6f09966420b2608d1947ccfb0f2a362450d1fc7fd902c29b67c906eaa965a7ae", - "name": "Avail Goldberg Testnet", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://avail-testnet.subscan.io/{type}/{value}" - }] - }, - "assets": [ - { - "id": "72778e65-53b6-4cb4-bb4c-c029121eb494", - "name": "avail token", - "symbol": "avl", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AVL.svg", - "color": "56E5FF", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [{ - "url": "wss://goldberg-testnet-rpc.avail.tools/ws", - "name": "Avail Goldberg Testnet node" - } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Avail.svg", - "addressPrefix": 42, - "options": [ - "checkAppId" - ] + "assets": [ + { + "isUtility": true, + "id": "dd80081e-7fc3-4a69-8218-57018d6e31c2", + "name": "klaytn", + "symbol": "klay", + "precision": 18, + "priceId": "klay-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KLAY.svg", + "color": "DE1E41", + "ethereumType": "normal" + }, + { + "isUtility": false, + "id": "0x6270b58be569a7c0b8f47594f191631ae5b2c86c", + "name": "usd coin", + "symbol": "usdc", + "precision": 6, + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xcee8faf64bb97a73bb51e115aa89c17ffa8dd167", + "name": "orbit bridge klaytn usd tether", + "symbol": "ousdt", + "precision": 6, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x078db7827a5531359f6cb63f62cfa20183c4f10c", + "name": "dai stablecoin", + "symbol": "dai", + "precision": 18, + "priceId": "dai", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", + "color": "FF0066", + "ethereumType": "erc20" + } + ], + "nodes": [ + { + "url": "https://public-en-cypress.klaytn.net/", + "name": "Klaytn Foundation https node" + }, + { + "url": "https://klaytn-pokt.nodies.app/", + "name": "POKT free https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Klaytn.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] }, { - "disabled": false, - "chainId": "0614f7b74a2e47f7c8d8e2a5335be84bdde9402a43f5decdec03200a87c8b943", - "name": "Analog Testnet", - "assets": [ - { - "id": "9a8799db-a479-4a73-ae81-3b637c8624d8", - "name": "tanlog", - "symbol": "tanlog", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TANLOG.svg", - "color": "9A74F7", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [{ - "url": "wss://rpc.testnet.analog.one", - "name": "Analog Testnet node" - } - - ], - "options": [ - "testnet" - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Analog.svg", - "addressPrefix": 12850 + "disabled": false, + "chainId": "1001", + "name": "Kaia Kairos Testnet", + "ecosystem": "ethereum", + "assets": [ + { + "isUtility": true, + "id": "2ba4723a-74b4-4a6f-a888-e51937773807", + "name": "klaytn", + "symbol": "klay", + "precision": 18, + "priceId": "klay-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KLAY.svg", + "color": "DE1E41", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://public-en.kairos.node.kaia.io", + "name": "Kairos https node" + }, + { + "url": "https://public-en-baobab.klaytn.net", + "name": "Klaytn Foundation https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Klaytn.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment", + "testnet" + ] }, { - "disabled": false, - "chainId": "c1af4cb4eb3918e5db15086c0cc5ec17fb334f728b7c65dd44bfe1e174ff8b3f", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "name": "Kusama People", - "assets": [ - { - "id": "b54f9075-6364-4ad9-8ac2-ed8a604491fd", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://kusama-people-rpc.polkadot.io", - "name": "Parity node" - }, - { - "url": "wss://ksm-rpc.stakeworld.io/people", - "name": "Stakeworld node" - } + "disabled": false, + "chainId": "-239", + "name": "Ton Mainnet", + "ecosystem": "ton", + "iosMinAppVersion": "3.8.1", + "externalApi": { + "history": { + "type": "ton", + "url": "https://keeper.tonapi.io" + }, + "explorers": [ + { + "type": "tonviewer", + "types": [ + "tonAccount", + "tonTransaction" ], - "options": [ - "identityChain" - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/People.svg", - "addressPrefix": 2 + "url": "https://tonviewer.com/{type}/{value}" + } + ] + }, + "assets": [ + { + "isUtility": true, + "id": "2ba4723a-74b4-4a6f-a888-e51937773807-239", + "name": "toncoin", + "symbol": "ton", + "precision": 9, + "priceId": "the-open-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg", + "color": "0098EA", + "tonType": "normal" + } + ], + "nodes": [ + { + "url": "https://keeper.tonapi.io", + "name": "Keeper api" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg", + "addressPrefix": 0, + "options": ["remoteAssets"] } -] + ] diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidity/LiquidityPoolRemoveLiquidityAssembly.swift b/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidity/LiquidityPoolRemoveLiquidityAssembly.swift index 2461a48159..b6dcfc3e6d 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidity/LiquidityPoolRemoveLiquidityAssembly.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidity/LiquidityPoolRemoveLiquidityAssembly.swift @@ -31,7 +31,7 @@ final class LiquidityPoolRemoveLiquidityAssembly { guard let lpOperationService = try? PolkaswapLiquidityPoolServiceAssembly.buildOperationService( for: chain, - wallet: wallet.utilsModel, + wallet: wallet, chainRegistry: chainRegistry, signingWrapperData: signingWrapperData ) else { @@ -76,9 +76,7 @@ final class LiquidityPoolRemoveLiquidityAssembly { accountResponse: ChainAccountResponse ) throws -> Data { let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil - let tag: String = chain.isEthereumBased - ? KeystoreTagV2.ethereumSecretKeyTagForMetaId(metaId, accountId: accountId) - : KeystoreTagV2.substrateSecretKeyTagForMetaId(metaId, accountId: accountId) + let tag: String = KeystoreTagV2.secretKeyTag(for: chain.ecosystem, metaId: metaId, accountId: accountId) let keystore = Keychain() let secretKey = try keystore.fetchKey(for: tag) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidity/LiquidityPoolRemoveLiquidityInteractor.swift b/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidity/LiquidityPoolRemoveLiquidityInteractor.swift index fffc075e8b..78afce2162 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidity/LiquidityPoolRemoveLiquidityInteractor.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidity/LiquidityPoolRemoveLiquidityInteractor.swift @@ -3,6 +3,7 @@ import SSFPools import SSFPolkaswap import SSFModels import BigInt +import SSFAccountManagment protocol LiquidityPoolRemoveLiquidityInteractorOutput: AnyObject { func didReceivePricesData(result: Result<[PriceData], Error>) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidityConfirm/LiquidityPoolRemoveLiquidityConfirmAssembly.swift b/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidityConfirm/LiquidityPoolRemoveLiquidityConfirmAssembly.swift index f5301ff825..a3c0aa630c 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidityConfirm/LiquidityPoolRemoveLiquidityConfirmAssembly.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidityConfirm/LiquidityPoolRemoveLiquidityConfirmAssembly.swift @@ -32,7 +32,7 @@ final class LiquidityPoolRemoveLiquidityConfirmAssembly { guard let lpOperationService = try? PolkaswapLiquidityPoolServiceAssembly.buildOperationService( for: chain, - wallet: wallet.utilsModel, + wallet: wallet, chainRegistry: chainRegistry, signingWrapperData: signingWrapperData ) else { @@ -75,9 +75,7 @@ final class LiquidityPoolRemoveLiquidityConfirmAssembly { accountResponse: ChainAccountResponse ) throws -> Data { let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil - let tag: String = chain.isEthereumBased - ? KeystoreTagV2.ethereumSecretKeyTagForMetaId(metaId, accountId: accountId) - : KeystoreTagV2.substrateSecretKeyTagForMetaId(metaId, accountId: accountId) + let tag: String = KeystoreTagV2.secretKeyTag(for: chain.ecosystem, metaId: metaId, accountId: accountId) let keystore = Keychain() let secretKey = try keystore.fetchKey(for: tag) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolSupply/LiquidityPoolSupplyAssembly.swift b/fearless/Modules/LiquidityPools/LiquidityPoolSupply/LiquidityPoolSupplyAssembly.swift index 80dd60438b..1e0ee4c2a8 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolSupply/LiquidityPoolSupplyAssembly.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolSupply/LiquidityPoolSupplyAssembly.swift @@ -26,7 +26,7 @@ final class LiquidityPoolSupplyAssembly { guard let lpOperationService = try? PolkaswapLiquidityPoolServiceAssembly.buildOperationService( for: chain, - wallet: wallet.utilsModel, + wallet: wallet, chainRegistry: chainRegistry, signingWrapperData: signingWrapperData ) else { @@ -71,9 +71,7 @@ final class LiquidityPoolSupplyAssembly { accountResponse: ChainAccountResponse ) throws -> Data { let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil - let tag: String = chain.isEthereumBased - ? KeystoreTagV2.ethereumSecretKeyTagForMetaId(metaId, accountId: accountId) - : KeystoreTagV2.substrateSecretKeyTagForMetaId(metaId, accountId: accountId) + let tag: String = KeystoreTagV2.secretKeyTag(for: chain.ecosystem, metaId: metaId, accountId: accountId) let keystore = Keychain() let secretKey = try keystore.fetchKey(for: tag) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolSupply/LiquidityPoolSupplyInteractor.swift b/fearless/Modules/LiquidityPools/LiquidityPoolSupply/LiquidityPoolSupplyInteractor.swift index e7297588ce..76715fc67c 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolSupply/LiquidityPoolSupplyInteractor.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolSupply/LiquidityPoolSupplyInteractor.swift @@ -4,6 +4,7 @@ import SSFPolkaswap import SSFModels import BigInt import SSFStorageQueryKit +import SSFCrypto protocol LiquidityPoolSupplyInteractorOutput: AnyObject { func didReceiveFee(_ fee: BigUInt) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolSupplyConfirm/LiquidityPoolSupplyConfirmAssembly.swift b/fearless/Modules/LiquidityPools/LiquidityPoolSupplyConfirm/LiquidityPoolSupplyConfirmAssembly.swift index 75f86f56cb..ff2c9490d0 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolSupplyConfirm/LiquidityPoolSupplyConfirmAssembly.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolSupplyConfirm/LiquidityPoolSupplyConfirmAssembly.swift @@ -39,7 +39,7 @@ enum LiquidityPoolSupplyConfirmAssembly { guard let lpOperationService = try? PolkaswapLiquidityPoolServiceAssembly.buildOperationService( for: chain, - wallet: wallet.utilsModel, + wallet: wallet, chainRegistry: chainRegistry, signingWrapperData: signingWrapperData ) else { @@ -89,9 +89,7 @@ enum LiquidityPoolSupplyConfirmAssembly { accountResponse: ChainAccountResponse ) throws -> Data { let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil - let tag: String = chain.isEthereumBased - ? KeystoreTagV2.ethereumSecretKeyTagForMetaId(metaId, accountId: accountId) - : KeystoreTagV2.substrateSecretKeyTagForMetaId(metaId, accountId: accountId) + let tag: String = KeystoreTagV2.secretKeyTag(for: chain.ecosystem, metaId: metaId, accountId: accountId) let keystore = Keychain() let secretKey = try keystore.fetchKey(for: tag) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolSupplyConfirm/LiquidityPoolSupplyConfirmInteractor.swift b/fearless/Modules/LiquidityPools/LiquidityPoolSupplyConfirm/LiquidityPoolSupplyConfirmInteractor.swift index beff029912..59a36f6ca6 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolSupplyConfirm/LiquidityPoolSupplyConfirmInteractor.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolSupplyConfirm/LiquidityPoolSupplyConfirmInteractor.swift @@ -3,6 +3,7 @@ import SSFModels import SSFPolkaswap import SSFPools import BigInt +import SSFCrypto protocol LiquidityPoolSupplyConfirmInteractorOutput: AnyObject { func didReceiveFee(_ fee: BigUInt) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListInteractor.swift b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListInteractor.swift index 253f57173f..aeabe59bf5 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListInteractor.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListInteractor.swift @@ -3,6 +3,7 @@ import SSFPools import SSFPolkaswap import SSFModels import SSFStorageQueryKit +import SSFCrypto protocol AvailableLiquidityPoolsListInteractorOutput: AnyObject { func didReceiveLiquidityPairs(pairs: [LiquidityPair]?) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListPresenter.swift b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListPresenter.swift index 236998fd5d..61850ece74 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListPresenter.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListPresenter.swift @@ -4,6 +4,7 @@ import SSFPools import SSFModels import SoraFoundation import SSFStorageQueryKit +import SSFCrypto protocol AvailableLiquidityPoolsListInteractorInput { func setup(with output: AvailableLiquidityPoolsListInteractorOutput) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListViewModelFactory.swift b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListViewModelFactory.swift index 73af29cb1f..2a8f1c088a 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListViewModelFactory.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListViewModelFactory.swift @@ -5,6 +5,7 @@ import SSFPolkaswap import SSFModels import BigInt import SSFStorageQueryKit +import SSFCrypto protocol AvailableLiquidityPoolsListViewModelFactory { func buildViewModel( diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListInteractor.swift b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListInteractor.swift index 4ed9f41f23..857e164967 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListInteractor.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListInteractor.swift @@ -3,6 +3,8 @@ import SSFPools import SSFPolkaswap import SSFModels import SSFStorageQueryKit +import SSFAccountManagment +import SSFCrypto protocol UserLiquidityPoolsListInteractorOutput: AnyObject { func didReceiveLiquidityPairs(pools: [LiquidityPair]?) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListPresenter.swift b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListPresenter.swift index 46cf20244e..5c4dec5fd6 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListPresenter.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListPresenter.swift @@ -4,6 +4,7 @@ import SSFPools import SSFModels import SoraFoundation import SSFStorageQueryKit +import SSFCrypto protocol UserLiquidityPoolsListInteractorInput { func setup(with output: UserLiquidityPoolsListInteractorOutput) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListViewModelFactory.swift b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListViewModelFactory.swift index d26486cef6..e2b9ce3263 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListViewModelFactory.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListViewModelFactory.swift @@ -5,6 +5,7 @@ import SSFPolkaswap import SSFModels import BigInt import SSFStorageQueryKit +import SSFCrypto protocol UserLiquidityPoolsListViewModelFactory { func buildViewModel( diff --git a/fearless/Modules/MainTabBar/MainTabBarProtocol.swift b/fearless/Modules/MainTabBar/MainTabBarProtocol.swift index 9ce7dc6dbb..a24eaf881c 100644 --- a/fearless/Modules/MainTabBar/MainTabBarProtocol.swift +++ b/fearless/Modules/MainTabBar/MainTabBarProtocol.swift @@ -1,5 +1,6 @@ import UIKit import WalletConnectSign +import SSFModels protocol MainTabBarViewProtocol: ControllerBackedProtocol { func didReplaceView(for newView: UIViewController, for index: Int) diff --git a/fearless/Modules/MainTabBar/MainTabBarViewFactory.swift b/fearless/Modules/MainTabBar/MainTabBarViewFactory.swift index 322ab9cfd7..66039c32c6 100644 --- a/fearless/Modules/MainTabBar/MainTabBarViewFactory.swift +++ b/fearless/Modules/MainTabBar/MainTabBarViewFactory.swift @@ -1,7 +1,7 @@ import UIKit import SoraFoundation import SoraKeystore - +import SSFModels import SSFUtils final class MainTabBarViewFactory: MainTabBarViewFactoryProtocol { diff --git a/fearless/Modules/MainTabBar/MainTabBarWireframe.swift b/fearless/Modules/MainTabBar/MainTabBarWireframe.swift index a26cc8b43b..208f6d56bb 100644 --- a/fearless/Modules/MainTabBar/MainTabBarWireframe.swift +++ b/fearless/Modules/MainTabBar/MainTabBarWireframe.swift @@ -1,17 +1,10 @@ import Foundation import UIKit import WalletConnectSign +import SSFModels final class MainTabBarWireframe: MainTabBarWireframeProtocol { func presentPolkaswap(on view: ControllerBackedProtocol?, wallet: MetaAccountModel) { -// guard -// let tabBarController = view?.controller, -// let viewController = LiquidityPoolsOverviewAssembly.configureModule(wallet: wallet)?.view.controller -// else { -// return -// } -// let navigationController = FearlessNavigationController(rootViewController: viewController) - guard let tabBarController = view?.controller, let viewController = PolkaswapAdjustmentAssembly.configureModule(chainAsset: nil, wallet: wallet)?.view.controller diff --git a/fearless/Modules/NFT/MainNftContainer/MainNftContainerAssembly.swift b/fearless/Modules/NFT/MainNftContainer/MainNftContainerAssembly.swift index ccbb7d0eab..2a0c47952e 100644 --- a/fearless/Modules/NFT/MainNftContainer/MainNftContainerAssembly.swift +++ b/fearless/Modules/NFT/MainNftContainer/MainNftContainerAssembly.swift @@ -3,6 +3,7 @@ import SoraFoundation import RobinHood import SSFNetwork import SoraKeystore +import SSFModels final class MainNftContainerAssembly { static func configureModule(wallet: MetaAccountModel) -> MainNftContainerModuleCreationResult? { diff --git a/fearless/Modules/NFT/MainNftContainer/MainNftContainerRouter.swift b/fearless/Modules/NFT/MainNftContainer/MainNftContainerRouter.swift index 7b059187ff..209d00cc37 100644 --- a/fearless/Modules/NFT/MainNftContainer/MainNftContainerRouter.swift +++ b/fearless/Modules/NFT/MainNftContainer/MainNftContainerRouter.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels final class MainNftContainerRouter: MainNftContainerRouterInput { func showCollection( diff --git a/fearless/Modules/NFT/NftCollection/NftCollectionProtocols.swift b/fearless/Modules/NFT/NftCollection/NftCollectionProtocols.swift index 75acb1ecac..18ebbacb90 100644 --- a/fearless/Modules/NFT/NftCollection/NftCollectionProtocols.swift +++ b/fearless/Modules/NFT/NftCollection/NftCollectionProtocols.swift @@ -1,3 +1,5 @@ +import SSFModels + typealias NftCollectionModuleCreationResult = (view: NftCollectionViewInput, input: NftCollectionModuleInput) protocol NftCollectionViewInput: ControllerBackedProtocol { diff --git a/fearless/Modules/NFT/NftCollection/NftCollectionRouter.swift b/fearless/Modules/NFT/NftCollection/NftCollectionRouter.swift index 59d9826543..89a320e4b2 100644 --- a/fearless/Modules/NFT/NftCollection/NftCollectionRouter.swift +++ b/fearless/Modules/NFT/NftCollection/NftCollectionRouter.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels final class NftCollectionRouter: NftCollectionRouterInput { func openNftDetails(nft: NFT, type: NftType, wallet: MetaAccountModel, address: String, from view: ControllerBackedProtocol?) { diff --git a/fearless/Modules/NFT/NftDetails/NftDetailsAssembly.swift b/fearless/Modules/NFT/NftDetails/NftDetailsAssembly.swift index 451e6f5fb7..e6ee79e5f6 100644 --- a/fearless/Modules/NFT/NftDetails/NftDetailsAssembly.swift +++ b/fearless/Modules/NFT/NftDetails/NftDetailsAssembly.swift @@ -1,6 +1,7 @@ import UIKit import SoraFoundation import RobinHood +import SSFModels final class NftDetailsAssembly { static func configureModule( diff --git a/fearless/Modules/NFT/NftDetails/NftDetailsPresenter.swift b/fearless/Modules/NFT/NftDetails/NftDetailsPresenter.swift index dc0c4f95f5..39d0196d02 100644 --- a/fearless/Modules/NFT/NftDetails/NftDetailsPresenter.swift +++ b/fearless/Modules/NFT/NftDetails/NftDetailsPresenter.swift @@ -1,6 +1,7 @@ import Foundation import SoraFoundation import Kingfisher +import SSFModels final class NftDetailsPresenter { // MARK: Private properties diff --git a/fearless/Modules/NFT/NftDetails/NftDetailsProtocols.swift b/fearless/Modules/NFT/NftDetails/NftDetailsProtocols.swift index ceab9a7eb6..b756a8382d 100644 --- a/fearless/Modules/NFT/NftDetails/NftDetailsProtocols.swift +++ b/fearless/Modules/NFT/NftDetails/NftDetailsProtocols.swift @@ -1,3 +1,5 @@ +import SSFModels + typealias NftDetailsModuleCreationResult = (view: NftDetailsViewInput, input: NftDetailsModuleInput) protocol NftDetailsViewInput: ControllerBackedProtocol { diff --git a/fearless/Modules/NFT/NftDetails/NftDetailsRouter.swift b/fearless/Modules/NFT/NftDetails/NftDetailsRouter.swift index bb949c492a..394356f030 100644 --- a/fearless/Modules/NFT/NftDetails/NftDetailsRouter.swift +++ b/fearless/Modules/NFT/NftDetails/NftDetailsRouter.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels final class NftDetailsRouter: NftDetailsRouterInput, SharingPresentable { func openSend(nft: NFT, wallet: MetaAccountModel, from view: ControllerBackedProtocol?) { diff --git a/fearless/Modules/NFT/NftSend/NftSendAssembly.swift b/fearless/Modules/NFT/NftSend/NftSendAssembly.swift index 38e584b51f..15862381be 100644 --- a/fearless/Modules/NFT/NftSend/NftSendAssembly.swift +++ b/fearless/Modules/NFT/NftSend/NftSendAssembly.swift @@ -1,4 +1,5 @@ import UIKit +import SSFAccountManagment import SoraFoundation import SSFModels import SoraKeystore @@ -8,6 +9,7 @@ import SSFUtils enum NftSendAssemblyError: Error { case substrateNftNotImplemented + case tonNftNotImplemented } enum NftSendAssembly { @@ -65,7 +67,7 @@ enum NftSendAssembly { wallet: wallet, logger: Logger.shared, viewModelFactory: - SendViewModelFactory(iconGenerator: UniversalIconGenerator()), + SendViewModelFactory(wallet: wallet, iconGenerator: UniversalIconGenerator()), dataValidatingFactory: dataValidatingFactory ) @@ -89,8 +91,8 @@ enum NftSendAssembly { } let keystore = Keychain() - switch chain.chainBaseType { - case .substrate: + switch chain.ecosystem { + case .substrate, .ethereumBased: throw NftSendAssemblyError.substrateNftNotImplemented case .ethereum: let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil @@ -112,6 +114,8 @@ enum NftSendAssembly { senderAddress: address, logger: Logger.shared ) + case .ton: + throw NftSendAssemblyError.substrateNftNotImplemented } } } diff --git a/fearless/Modules/NFT/NftSend/NftSendPresenter.swift b/fearless/Modules/NFT/NftSend/NftSendPresenter.swift index baaf69bac7..73629dbadd 100644 --- a/fearless/Modules/NFT/NftSend/NftSendPresenter.swift +++ b/fearless/Modules/NFT/NftSend/NftSendPresenter.swift @@ -3,6 +3,7 @@ import SoraFoundation import BigInt import SSFModels import SSFQRService +import SSFCrypto final class NftSendPresenter { // MARK: Private properties diff --git a/fearless/Modules/NFT/NftSend/NftSendViewController.swift b/fearless/Modules/NFT/NftSend/NftSendViewController.swift index 912a257d24..70674eefae 100644 --- a/fearless/Modules/NFT/NftSend/NftSendViewController.swift +++ b/fearless/Modules/NFT/NftSend/NftSendViewController.swift @@ -83,7 +83,7 @@ extension NftSendViewController: NftSendViewInput { func didReceive(viewModel: RecipientViewModel) { rootView.bind(viewModel: viewModel) - rootView.actionButton.set(enabled: viewModel.isValid) + rootView.actionButton.set(enabled: viewModel.isValid == true) } } diff --git a/fearless/Modules/NFT/NftSendConfirm/NftSendConfirmAssembly.swift b/fearless/Modules/NFT/NftSendConfirm/NftSendConfirmAssembly.swift index d42eee029f..52ce78adcf 100644 --- a/fearless/Modules/NFT/NftSendConfirm/NftSendConfirmAssembly.swift +++ b/fearless/Modules/NFT/NftSendConfirm/NftSendConfirmAssembly.swift @@ -4,6 +4,7 @@ import SSFUtils import SSFModels import SoraKeystore import Web3 +import SSFAccountManagment final class NftSendConfirmAssembly { static func configureModule( @@ -66,8 +67,8 @@ final class NftSendConfirmAssembly { } let keystore = Keychain() - switch chain.chainBaseType { - case .substrate: + switch chain.ecosystem { + case .substrate, .ethereumBased: throw NftSendAssemblyError.substrateNftNotImplemented case .ethereum: let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil @@ -89,6 +90,8 @@ final class NftSendConfirmAssembly { senderAddress: address, logger: Logger.shared ) + case .ton: + throw NftSendAssemblyError.tonNftNotImplemented } } } diff --git a/fearless/Modules/NFT/NftSendConfirm/NftSendConfirmPresenter.swift b/fearless/Modules/NFT/NftSendConfirm/NftSendConfirmPresenter.swift index 7fa44e5e10..b151078a3f 100644 --- a/fearless/Modules/NFT/NftSendConfirm/NftSendConfirmPresenter.swift +++ b/fearless/Modules/NFT/NftSendConfirm/NftSendConfirmPresenter.swift @@ -2,6 +2,7 @@ import Foundation import SoraFoundation import SSFModels import BigInt +import SSFCrypto final class NftSendConfirmPresenter { // MARK: Private properties diff --git a/fearless/Modules/NetworkIssuesNotification/NetworkIssuesNotificationAssembly.swift b/fearless/Modules/NetworkIssuesNotification/NetworkIssuesNotificationAssembly.swift index fdf3e14d61..ee8c18f3ea 100644 --- a/fearless/Modules/NetworkIssuesNotification/NetworkIssuesNotificationAssembly.swift +++ b/fearless/Modules/NetworkIssuesNotification/NetworkIssuesNotificationAssembly.swift @@ -1,6 +1,7 @@ import UIKit import SoraFoundation import RobinHood +import SSFModels final class NetworkIssuesNotificationAssembly { static func configureModule( diff --git a/fearless/Modules/NewWallet/ChainAccount/ChainAccountInteractor.swift b/fearless/Modules/NewWallet/ChainAccount/ChainAccountInteractor.swift index 59d22c0ec5..fb41040d2b 100644 --- a/fearless/Modules/NewWallet/ChainAccount/ChainAccountInteractor.swift +++ b/fearless/Modules/NewWallet/ChainAccount/ChainAccountInteractor.swift @@ -24,7 +24,7 @@ final class ChainAccountInteractor { private let walletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterProtocol private let dependencyContainer = BalanceInfoDepencyContainer() private var currentDependencies: BalanceInfoDependencies? - private let ethRemoteBalanceFetching: EthereumRemoteBalanceFetching + private let accountInfoRemoteService: AccountInfoRemoteService private let chainRegistry: ChainRegistryProtocol private var remoteFetchTimer: Timer? @@ -39,7 +39,7 @@ final class ChainAccountInteractor { chainAssetFetching: ChainAssetFetchingProtocol, storageRequestFactory: StorageRequestFactoryProtocol, walletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterProtocol, - ethRemoteBalanceFetching: EthereumRemoteBalanceFetching, + accountInfoRemoteService: AccountInfoRemoteService, chainRegistry: ChainRegistryProtocol ) { self.wallet = wallet @@ -51,7 +51,7 @@ final class ChainAccountInteractor { self.chainAssetFetching = chainAssetFetching self.storageRequestFactory = storageRequestFactory self.walletBalanceSubscriptionAdapter = walletBalanceSubscriptionAdapter - self.ethRemoteBalanceFetching = ethRemoteBalanceFetching + self.accountInfoRemoteService = accountInfoRemoteService self.chainRegistry = chainRegistry } @@ -177,7 +177,7 @@ extension ChainAccountInteractor: ChainAccountInteractorInputProtocol { .getAvailableExportOptions( for: self.wallet, accountId: accountId, - isEthereum: response.isEthereumBased + ecosystem: response.ecosystem ) self.presenter?.didReceiveExportOptions(options: options) default: @@ -200,8 +200,7 @@ extension ChainAccountInteractor: ChainAccountInteractorInputProtocol { func updateData() { guard remoteFetchTimer == nil, - let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId, - chainAsset.chain.isEthereum + !chainAsset.chain.ecosystem.isSubstrate else { return } @@ -210,7 +209,13 @@ extension ChainAccountInteractor: ChainAccountInteractorInputProtocol { timer.invalidate() self?.remoteFetchTimer = nil }) - ethRemoteBalanceFetching.fetch(for: chainAsset, accountId: accountId, completionBlock: { _, _ in }) + Task { + do { + _ = try await accountInfoRemoteService.fetchAccountInfo(for: chainAsset, wallet: wallet) + } catch { + Logger.shared.customError(error) + } + } } func checkIsClaimAvailable() -> Bool { diff --git a/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift b/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift index d0895b57bb..0f20693349 100644 --- a/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift +++ b/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift @@ -283,7 +283,7 @@ extension ChainAccountPresenter: ChainAccountInteractorOutputProtocol { func didReceiveExportOptions(options: [ExportOption]) { var items: [ChainAction] = [] items.append(.export) - if !chainAsset.chain.isEthereum { items.append(.switchNode) } + if chainAsset.chain.ecosystem.isSubstrate || chainAsset.chain.ecosystem.isEthereumBased { items.append(.switchNode) } items.append(.replace) if interactor.checkIsClaimAvailable() { items.append(.claimCrowdloanRewards) } diff --git a/fearless/Modules/NewWallet/ChainAccount/ChainAccountViewFactory.swift b/fearless/Modules/NewWallet/ChainAccount/ChainAccountViewFactory.swift index e7ec9fb734..75c31cbdd2 100644 --- a/fearless/Modules/NewWallet/ChainAccount/ChainAccountViewFactory.swift +++ b/fearless/Modules/NewWallet/ChainAccount/ChainAccountViewFactory.swift @@ -47,15 +47,7 @@ enum ChainAccountViewFactory { let walletBalanceSubscriptionAdapter = WalletBalanceSubscriptionAdapter.shared - let ethereumBalanceRepositoryCacheWrapper = EthereumBalanceRepositoryCacheWrapper( - logger: Logger.shared, - repository: accountInfoRepository, - operationManager: OperationManagerFacade.sharedManager - ) - let ethereumRemoteBalanceFetching = EthereumRemoteBalanceFetching( - chainRegistry: chainRegistry, - repositoryWrapper: ethereumBalanceRepositoryCacheWrapper - ) + let accountInfoRemoteService = ServiceAssembly.shared.accountInfoRemoteServiceDefault() let interactor = ChainAccountInteractor( wallet: wallet, chainAsset: chainAsset, @@ -66,7 +58,7 @@ enum ChainAccountViewFactory { chainAssetFetching: chainAssetFetching, storageRequestFactory: storageRequestFactory, walletBalanceSubscriptionAdapter: walletBalanceSubscriptionAdapter, - ethRemoteBalanceFetching: ethereumRemoteBalanceFetching, + accountInfoRemoteService: accountInfoRemoteService, chainRegistry: chainRegistry ) diff --git a/fearless/Modules/NewWallet/ChainAccount/ChainAccountWireframe.swift b/fearless/Modules/NewWallet/ChainAccount/ChainAccountWireframe.swift index 4df0cde6ce..9845fb8175 100644 --- a/fearless/Modules/NewWallet/ChainAccount/ChainAccountWireframe.swift +++ b/fearless/Modules/NewWallet/ChainAccount/ChainAccountWireframe.swift @@ -24,12 +24,12 @@ final class ChainAccountWireframe: ChainAccountWireframeProtocol { ) } - func presentSendFlow( + @MainActor func presentSendFlow( from view: ControllerBackedProtocol?, chainAsset: ChainAsset, wallet: MetaAccountModel ) { - guard let controller = SendAssembly.configureModule( + guard let controller = TransferAssembly.configureModule( wallet: wallet, initialData: .chainAsset(chainAsset) )?.view.controller else { diff --git a/fearless/Modules/NewWallet/ChainAccount/ViewModels/ChainAccountViewModelFactory.swift b/fearless/Modules/NewWallet/ChainAccount/ViewModels/ChainAccountViewModelFactory.swift index 3fc7e8a686..625c24447a 100644 --- a/fearless/Modules/NewWallet/ChainAccount/ViewModels/ChainAccountViewModelFactory.swift +++ b/fearless/Modules/NewWallet/ChainAccount/ViewModels/ChainAccountViewModelFactory.swift @@ -1,5 +1,6 @@ import Foundation import SSFModels +import SSFCrypto protocol ChainAccountViewModelFactoryProtocol { func buildChainAccountViewModel( @@ -24,7 +25,7 @@ class ChainAccountViewModelFactory: ChainAccountViewModelFactoryProtocol { var address: String? if let chainAccountResponse = wallet.fetch(for: chainAsset.chain.accountRequest()), - let address1 = try? AddressFactory.address(for: chainAccountResponse.accountId, chain: chainAsset.chain) { + let address1 = try? AddressFactory.address(for: chainAccountResponse.accountId, chainFormat: chainAsset.chain.chainFormat(bounceable: false)) { address = address1 } let allAssets = Array(chainAsset.chain.assets) diff --git a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListAssembly.swift b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListAssembly.swift index 504e48a732..f83daf16b0 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListAssembly.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListAssembly.swift @@ -2,6 +2,7 @@ import UIKit import SoraFoundation import RobinHood import SoraKeystore +import SSFModels final class ChainAssetListAssembly { static func configureModule( @@ -26,15 +27,6 @@ final class ChainAssetListAssembly { let priceLocalSubscriber = PriceLocalStorageSubscriberImpl.shared let dependencyContainer = ChainAssetListDependencyContainer() - let ethereumBalanceRepositoryCacheWrapper = EthereumBalanceRepositoryCacheWrapper( - logger: Logger.shared, - repository: accountInfoRepository, - operationManager: OperationManagerFacade.sharedManager - ) - let ethereumRemoteBalanceFetching = EthereumRemoteBalanceFetching( - chainRegistry: chainRegistry, - repositoryWrapper: ethereumBalanceRepositoryCacheWrapper - ) let chainRepository = ChainRepositoryFactory().createRepository( for: NSPredicate.enabledCHain(), sortDescriptors: [NSSortDescriptor.chainsByAddressPrefix] @@ -60,6 +52,7 @@ final class ChainAssetListAssembly { accountInfoFetcher: accountInfoFetcher ) + let remoteBalanceService = ServiceAssembly.shared.accountInfoRemoteServiceDefault() let chainSettingsRepositoryFactory = ChainSettingsRepositoryFactory(storageFacade: UserDataStorageFacade.shared) let chainSettingsRepostiry = chainSettingsRepositoryFactory.createAsyncRepository() let interactor = ChainAssetListInteractor( @@ -69,12 +62,13 @@ final class ChainAssetListAssembly { accountRepository: AnyDataProviderRepository(accountRepository), accountInfoFetchingProvider: accountInfoFetching, dependencyContainer: dependencyContainer, - ethRemoteBalanceFetching: ethereumRemoteBalanceFetching, + remoteBalanceService: remoteBalanceService, chainAssetFetching: chainAssetFetching, userDefaultsStorage: SettingsManager.shared, chainsIssuesCenter: chainsIssuesCenter, chainSettingsRepository: AsyncAnyRepository(chainSettingsRepostiry), - chainRegistry: ChainRegistryFacade.sharedRegistry + chainRegistry: ChainRegistryFacade.sharedRegistry, + logger: Logger.shared ) let router = ChainAssetListRouter() let viewModelFactory = ChainAssetListViewModelFactory( diff --git a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListDependencyContainer.swift b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListDependencyContainer.swift index 9bda654e1d..aec3dd043a 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListDependencyContainer.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListDependencyContainer.swift @@ -1,5 +1,6 @@ import Foundation import RobinHood +import SSFModels struct ChainAssetListDependencies { let chainAssetFetching: ChainAssetFetchingProtocol diff --git a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListInteractor.swift b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListInteractor.swift index 3ee7bf645d..7c4eea4650 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListInteractor.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListInteractor.swift @@ -20,7 +20,7 @@ final class ChainAssetListInteractor { private let accountRepository: AnyDataProviderRepository private let accountInfoFetchingProvider: AccountInfoFetching private let dependencyContainer: ChainAssetListDependencyContainer - private let ethRemoteBalanceFetching: EthereumRemoteBalanceFetching + private let remoteBalanceService: AccountInfoRemoteService private let chainAssetFetching: ChainAssetFetchingProtocol private var chainAssets: [ChainAsset]? private var filters: [ChainAssetsFetching.Filter] = [] @@ -30,6 +30,7 @@ final class ChainAssetListInteractor { private let chainsIssuesCenter: ChainsIssuesCenter private let chainSettingsRepository: AsyncAnyRepository private let chainRegistry: ChainRegistryProtocol + private let logger: LoggerProtocol private let mutex = NSLock() private var remoteFetchTimer: Timer? @@ -47,12 +48,13 @@ final class ChainAssetListInteractor { accountRepository: AnyDataProviderRepository, accountInfoFetchingProvider: AccountInfoFetching, dependencyContainer: ChainAssetListDependencyContainer, - ethRemoteBalanceFetching: EthereumRemoteBalanceFetching, + remoteBalanceService: AccountInfoRemoteService, chainAssetFetching: ChainAssetFetchingProtocol, userDefaultsStorage: SettingsManagerProtocol, chainsIssuesCenter: ChainsIssuesCenter, chainSettingsRepository: AsyncAnyRepository, - chainRegistry: ChainRegistryProtocol + chainRegistry: ChainRegistryProtocol, + logger: LoggerProtocol ) { self.wallet = wallet self.priceLocalSubscriber = priceLocalSubscriber @@ -60,12 +62,13 @@ final class ChainAssetListInteractor { self.accountRepository = accountRepository self.accountInfoFetchingProvider = accountInfoFetchingProvider self.dependencyContainer = dependencyContainer - self.ethRemoteBalanceFetching = ethRemoteBalanceFetching + self.remoteBalanceService = remoteBalanceService self.chainAssetFetching = chainAssetFetching self.userDefaultsStorage = userDefaultsStorage self.chainsIssuesCenter = chainsIssuesCenter self.chainSettingsRepository = chainSettingsRepository self.chainRegistry = chainRegistry + self.logger = logger } // MARK: - Private methods @@ -176,7 +179,13 @@ extension ChainAssetListInteractor: ChainAssetListInteractorInput { self?.output?.didReceiveChainAssets(result: .success(chainAssets)) self?.accountInfoFetchingProvider.fetch(for: chainAssets, wallet: strongSelf.wallet) { accountInfosByChainAssets in - self?.ethRemoteBalanceFetching.fetch(for: chainAssets, wallet: strongSelf.wallet) { _ in } + Task { + do { + _ = try await strongSelf.remoteBalanceService.fetchAccountInfos(for: chainAssets, wallet: strongSelf.wallet) + } catch { + strongSelf.logger.customError(error) + } + } self?.output?.didReceive(accountInfosByChainAssets: accountInfosByChainAssets) self?.subscribeToAccountInfo(for: chainAssets) } @@ -217,7 +226,7 @@ extension ChainAssetListInteractor: ChainAssetListInteractorInput { self?.remoteFetchTimer = nil }) - ethRemoteBalanceFetching.fetch(for: chainAssets, wallet: wallet) { _ in } +// ethRemoteBalanceFetching.fetch(for: chainAssets, wallet: wallet) { _ in } } func getAvailableChainAssets(chainAsset: ChainAsset, completion: @escaping (([ChainAsset]) -> Void)) { @@ -283,7 +292,8 @@ extension ChainAssetListInteractor: EventVisitorProtocol { } if wallet.assetsVisibility != event.account.assetsVisibility { - output?.updateViewModel(isInitSearchState: false) +// output?.updateViewModel(isInitSearchState: false) + updateChainAssets(using: filters, sorts: sorts, useCashe: false) } if wallet.unusedChainIds != event.account.unusedChainIds { diff --git a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListRouter.swift b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListRouter.swift index bf76a08797..b46ce44611 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListRouter.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListRouter.swift @@ -34,12 +34,12 @@ final class ChainAssetListRouter: ChainAssetListRouterInput { ) } - func showSendFlow( + @MainActor func showSendFlow( from view: ControllerBackedProtocol?, chainAsset: ChainAsset, wallet: MetaAccountModel ) { - guard let controller = SendAssembly.configureModule( + guard let controller = TransferAssembly.configureModule( wallet: wallet, initialData: .chainAsset(chainAsset) )?.view.controller else { diff --git a/fearless/Modules/NewWallet/WalletSendConfirm/ViewModels/WalletSendConfirmViewModelFactory.swift b/fearless/Modules/NewWallet/WalletSendConfirm/ViewModels/WalletSendConfirmViewModelFactory.swift deleted file mode 100644 index 4fb1b4160f..0000000000 --- a/fearless/Modules/NewWallet/WalletSendConfirm/ViewModels/WalletSendConfirmViewModelFactory.swift +++ /dev/null @@ -1,71 +0,0 @@ -import Foundation -import SSFModels - -struct WalletSendConfirmViewModelFactoryParameters { - let amount: Decimal - let senderAccountViewModel: AccountViewModel? - let receiverAccountViewModel: AccountViewModel? - let assetBalanceViewModel: AssetBalanceViewModelProtocol? - let tipRequired: Bool - let tipViewModel: BalanceViewModelProtocol? - let feeViewModel: BalanceViewModelProtocol? - let wallet: MetaAccountModel - let locale: Locale - let scamInfo: ScamInfo? - let assetModel: AssetModel -} - -protocol WalletSendConfirmViewModelFactoryProtocol { - func buildViewModel( - parameters: WalletSendConfirmViewModelFactoryParameters - ) -> WalletSendConfirmViewModel -} - -class WalletSendConfirmViewModelFactory: WalletSendConfirmViewModelFactoryProtocol { - let amountFormatterFactory: AssetBalanceFormatterFactoryProtocol - let assetInfo: AssetBalanceDisplayInfo - - init(amountFormatterFactory: AssetBalanceFormatterFactoryProtocol, assetInfo: AssetBalanceDisplayInfo) { - self.amountFormatterFactory = amountFormatterFactory - self.assetInfo = assetInfo - } - - func buildViewModel( - parameters: WalletSendConfirmViewModelFactoryParameters - ) -> WalletSendConfirmViewModel { - let formatter = amountFormatterFactory.createTokenFormatter(for: assetInfo, usageCase: .detailsCrypto) - let inputAmount = formatter.value(for: parameters.locale).stringFromDecimal(parameters.amount) ?? "" - let amountString = R.string.localizable.sendConfirmAmountTitle( - inputAmount, - preferredLanguages: parameters.locale.rLanguages - ) - let amountAttributedString = NSMutableAttributedString(string: amountString) - amountAttributedString.addAttribute( - NSAttributedString.Key.foregroundColor, - value: R.color.colorWhite()!.cgColor, - range: (amountString as NSString).range(of: inputAmount) - ) - let shadowColor = HexColorConverter.hexStringToUIColor( - hex: parameters.assetModel.color - )?.cgColor - let symbolViewModel = SymbolViewModel( - symbolViewModel: parameters.assetModel.icon.map { RemoteImageViewModel(url: $0) }, - shadowColor: shadowColor - ) - return WalletSendConfirmViewModel( - amountAttributedString: amountAttributedString, - amountString: inputAmount, - senderNameString: parameters.wallet.name, - senderAddressString: parameters.senderAccountViewModel?.name ?? "", - receiverAddressString: parameters.receiverAccountViewModel?.name ?? "", - priceString: parameters.assetBalanceViewModel?.price ?? "", - feeAmountString: parameters.feeViewModel?.amount ?? "", - feePriceString: parameters.feeViewModel?.price ?? "", - tipRequired: parameters.tipRequired, - tipAmountString: parameters.tipViewModel?.amount ?? "", - tipPriceString: parameters.tipViewModel?.price ?? "", - showWarning: parameters.scamInfo != nil, - symbolViewModel: symbolViewModel - ) - } -} diff --git a/fearless/Modules/NewWallet/WalletSendConfirm/ViewModels/WalletSendConfirmViewState.swift b/fearless/Modules/NewWallet/WalletSendConfirm/ViewModels/WalletSendConfirmViewState.swift deleted file mode 100644 index b31303cb03..0000000000 --- a/fearless/Modules/NewWallet/WalletSendConfirm/ViewModels/WalletSendConfirmViewState.swift +++ /dev/null @@ -1,6 +0,0 @@ -import Foundation - -enum WalletSendConfirmViewState { - case loading - case loaded(WalletSendConfirmViewModel) -} diff --git a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmInteractor.swift b/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmInteractor.swift deleted file mode 100644 index e67b6e5c2f..0000000000 --- a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmInteractor.swift +++ /dev/null @@ -1,178 +0,0 @@ -import UIKit -import RobinHood -import Web3 -import IrohaCrypto -import SSFModels -import SSFCrypto -import SoraKeystore -import Web3PromiseKit - -final class WalletSendConfirmInteractor: RuntimeConstantFetching { - weak var presenter: WalletSendConfirmInteractorOutputProtocol? - - private let priceLocalSubscriber: PriceLocalStorageSubscriber - private let selectedMetaAccount: MetaAccountModel - private let accountInfoSubscriptionAdapter: AccountInfoSubscriptionAdapterProtocol - private let call: SendConfirmTransferCall - private let chainAsset: ChainAsset - private let wallet: MetaAccountModel - private var equilibriumTotalBalanceService: EquilibriumTotalBalanceServiceProtocol? - let dependencyContainer: SendDepencyContainer - private var balanceProvider: AnyDataProvider? - private var priceProvider: AnySingleValueProvider<[PriceData]>? - private var utilityPriceProvider: AnySingleValueProvider<[PriceData]>? - - init( - selectedMetaAccount: MetaAccountModel, - chainAsset: ChainAsset, - call: SendConfirmTransferCall, - accountInfoSubscriptionAdapter: AccountInfoSubscriptionAdapterProtocol, - priceLocalSubscriber: PriceLocalStorageSubscriber, - dependencyContainer: SendDepencyContainer, - wallet: MetaAccountModel - ) { - self.selectedMetaAccount = selectedMetaAccount - self.chainAsset = chainAsset - self.accountInfoSubscriptionAdapter = accountInfoSubscriptionAdapter - self.priceLocalSubscriber = priceLocalSubscriber - self.call = call - self.dependencyContainer = dependencyContainer - self.wallet = wallet - } - - private func subscribeToAccountInfo() { - var chainsAssets = [chainAsset] - if !chainAsset.isUtility, - let utilityAsset = getFeePaymentChainAsset(for: chainAsset) { - chainsAssets.append(utilityAsset) - } - accountInfoSubscriptionAdapter.subscribe( - chainsAssets: chainsAssets, - handler: self, - deliveryOn: .main - ) - } - - private func subscribeToPrice() { - priceProvider = priceLocalSubscriber.subscribeToPrice(for: chainAsset, listener: self) - if let utilityAsset = getFeePaymentChainAsset(for: chainAsset), utilityAsset != chainAsset { - utilityPriceProvider = priceLocalSubscriber.subscribeToPrice(for: utilityAsset, listener: self) - } - } - - private func subscribeToFee() { - switch call { - case let .transfer(transfer): - Task { - do { - let transferService = try await dependencyContainer.prepareDepencies(chainAsset: chainAsset).transferService - transferService.subscribeForFee(transfer: transfer, listener: self) - } catch { - await MainActor.run { - presenter?.didReceiveFee(result: .failure(error)) - } - } - } - case let .xorlessTransfer(xorlessTransfer): - break - } - } -} - -extension WalletSendConfirmInteractor: WalletSendConfirmInteractorInputProtocol { - func setup() { - subscribeToPrice() - subscribeToAccountInfo() - provideConstants() - subscribeToFee() - } - - func submitExtrinsic() { - Task { - do { - let transferService = try await dependencyContainer.prepareDepencies(chainAsset: chainAsset).transferService - - let txHash: String - switch call { - case let .transfer(transfer): - txHash = try await transferService.submit(transfer: transfer) - case let .xorlessTransfer(transfer): - txHash = try await transferService.submit(transfer: transfer) - } - - await MainActor.run { - presenter?.didTransfer(result: .success(txHash)) - } - } catch { - await MainActor.run { - presenter?.didTransfer(result: .failure(error)) - } - } - } - } - - func getFeePaymentChainAsset(for chainAsset: ChainAsset?) -> ChainAsset? { - guard let chainAsset = chainAsset else { return nil } - if let utilityAsset = chainAsset.chain.utilityAssets().first { - return ChainAsset(chain: chainAsset.chain, asset: utilityAsset) - } - return chainAsset - } - - func fetchEquilibriumTotalBalance(chainAsset: ChainAsset, amount: Decimal) { - if chainAsset.chain.isEquilibrium { - Task { - let service = try await dependencyContainer - .prepareDepencies(chainAsset: chainAsset) - .equilibruimTotalBalanceService - equilibriumTotalBalanceService = service - - let totalBalanceAfterTransfer = equilibriumTotalBalanceService? - .totalBalanceAfterTransfer(chainAsset: chainAsset, amount: amount) ?? .zero - presenter?.didReceive(eqTotalBalance: totalBalanceAfterTransfer) - } - } - } - - func provideConstants() { - Task { - let dependencies = try await dependencyContainer.prepareDepencies(chainAsset: chainAsset) - - dependencies.existentialDepositService.fetchExistentialDeposit( - chainAsset: chainAsset - ) { [weak self] result in - self?.presenter?.didReceiveMinimumBalance(result: result) - } - } - } -} - -extension WalletSendConfirmInteractor: AccountInfoSubscriptionAdapterHandler { - func handleAccountInfo( - result: Swift.Result, - accountId _: AccountId, - chainAsset: ChainAsset - ) { - presenter?.didReceiveAccountInfo(result: result, for: chainAsset) - } -} - -extension WalletSendConfirmInteractor: PriceLocalSubscriptionHandler { - func handlePrice(result: Swift.Result, chainAsset: ChainAsset) { - presenter?.didReceivePriceData(result: result, for: chainAsset.asset.priceId) - } -} - -extension WalletSendConfirmInteractor: TransferFeeEstimationListener { - func didReceiveFee(fee: BigUInt) { - DispatchQueue.main.async { [weak self] in - self?.presenter?.didReceiveFee(result: .success(RuntimeDispatchInfo(feeValue: fee))) - } - } - - func didReceiveFeeError(feeError: Error) { - DispatchQueue.main.async { [weak self] in - self?.presenter?.didReceiveFee(result: .failure(feeError)) - } - } -} diff --git a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmPresenter.swift b/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmPresenter.swift deleted file mode 100644 index 2a70a3a2a3..0000000000 --- a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmPresenter.swift +++ /dev/null @@ -1,394 +0,0 @@ -import Foundation -import Web3 -import BigInt -import SoraFoundation -import IrohaCrypto -import SwiftUI -import SSFModels - -struct SendLoadingCollector { - var feeReady: Bool = false - var balanceReady: Bool = false - var utilityBalanceReady: Bool = false - var edReady: Bool = false - - mutating func reset(isUtility: Bool) { - feeReady = false - balanceReady = false - utilityBalanceReady = !isUtility - edReady = false - } - - var isReady: Bool { - [ - feeReady, - balanceReady, - utilityBalanceReady, - edReady - ].allSatisfy { $0 } - } -} - -final class WalletSendConfirmPresenter { - weak var view: WalletSendConfirmViewProtocol? - private let wireframe: WalletSendConfirmWireframeProtocol - private let interactor: WalletSendConfirmInteractorInputProtocol - private let accountViewModelFactory: AccountViewModelFactoryProtocol - private let dataValidatingFactory: SendDataValidatingFactory - private let logger: LoggerProtocol? - private let chainAsset: ChainAsset - private let call: SendConfirmTransferCall - private let wallet: MetaAccountModel - private let walletSendConfirmViewModelFactory: WalletSendConfirmViewModelFactoryProtocol - private let scamInfo: ScamInfo? - private var feeViewModel: BalanceViewModelProtocol? - - private var balance: Decimal? - private var utilityBalance: Decimal? - private var priceData: PriceData? - private var utilityPriceData: PriceData? - private var fee: Decimal? - private var minimumBalance: BigUInt? - private var eqUilibriumTotalBalance: Decimal? - - private var loadingCollector = SendLoadingCollector() - - init( - interactor: WalletSendConfirmInteractorInputProtocol, - wireframe: WalletSendConfirmWireframeProtocol, - accountViewModelFactory: AccountViewModelFactoryProtocol, - dataValidatingFactory: SendDataValidatingFactory, - walletSendConfirmViewModelFactory: WalletSendConfirmViewModelFactoryProtocol, - logger: LoggerProtocol?, - chainAsset: ChainAsset, - wallet: MetaAccountModel, - call: SendConfirmTransferCall, - scamInfo: ScamInfo?, - feeViewModel: BalanceViewModelProtocol?, - localizationManager: LocalizationManagerProtocol - ) { - self.interactor = interactor - self.wireframe = wireframe - self.accountViewModelFactory = accountViewModelFactory - self.dataValidatingFactory = dataValidatingFactory - self.walletSendConfirmViewModelFactory = walletSendConfirmViewModelFactory - self.logger = logger - self.chainAsset = chainAsset - self.call = call - self.wallet = wallet - self.scamInfo = scamInfo - self.feeViewModel = feeViewModel - self.localizationManager = localizationManager - if let feeViewModel { - fee = Decimal(string: feeViewModel.amount) - } - loadingCollector.feeReady = feeViewModel != nil - } - - private func provideViewModel() { - Task { - let amount = Decimal.fromSubstrateAmount(call.amount, precision: Int16(chainAsset.asset.precision)) ?? .zero - let parameters = WalletSendConfirmViewModelFactoryParameters( - amount: amount, - senderAccountViewModel: provideSenderAccountViewModel(), - receiverAccountViewModel: provideReceiverAccountViewModel(), - assetBalanceViewModel: try await provideAssetVewModel(), - tipRequired: chainAsset.chain.isTipRequired, - tipViewModel: try await provideTipViewModel(), - feeViewModel: feeViewModel, - wallet: wallet, - locale: selectedLocale, - scamInfo: scamInfo, - assetModel: chainAsset.asset - ) - let viewModel = walletSendConfirmViewModelFactory.buildViewModel( - parameters: parameters - ) - - await MainActor.run { - self.view?.didReceive(state: .loaded(viewModel)) - } - } - } - - private func provideReceiverAccountViewModel() -> AccountViewModel? { - let title = R.string.localizable - .walletSendReceiverTitle(preferredLanguages: selectedLocale.rLanguages) - - return accountViewModelFactory.buildViewModel( - title: title, - address: call.receiverAddress, - locale: selectedLocale - ) - } - - private func provideSenderAccountViewModel() -> AccountViewModel? { - guard let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId, - let senderAddress = try? AddressFactory.address(for: accountId, chain: chainAsset.chain) - else { - return nil - } - - let title = R.string.localizable - .transactionDetailsFrom(preferredLanguages: selectedLocale.rLanguages) - - return accountViewModelFactory.buildViewModel( - title: title, - address: senderAddress, - locale: selectedLocale - ) - } - - private func provideAssetVewModel() async throws -> AssetBalanceViewModelProtocol? { - let balanceViewModelFactory = buildBalanceViewModelFactory(wallet: wallet, for: chainAsset) - let amount = Decimal.fromSubstrateAmount(call.amount, precision: Int16(chainAsset.asset.precision)) ?? .zero - return balanceViewModelFactory?.createAssetBalanceViewModel( - amount, - balance: balance, - priceData: priceData - ).value(for: selectedLocale) - } - - private func provideTipViewModel() async throws -> BalanceViewModelProtocol? { - guard - let utilityAsset = interactor.getFeePaymentChainAsset(for: chainAsset), - let balanceViewModelFactory = buildBalanceViewModelFactory(wallet: wallet, for: utilityAsset) - else { return nil } - - let tip = Decimal.fromSubstrateAmount(call.tip ?? .zero, precision: Int16(chainAsset.asset.precision)) - return tip - .map { balanceViewModelFactory.balanceFromPrice($0, priceData: priceData, usageCase: .detailsCrypto) }? - .value(for: selectedLocale) - } - - private func updateFeeViewModel() { - guard - let utilityAsset = interactor.getFeePaymentChainAsset(for: chainAsset), - let balanceViewModelFactory = buildBalanceViewModelFactory(wallet: wallet, for: utilityAsset) - else { - return - } - - let viewModel = fee - .map { balanceViewModelFactory.balanceFromPrice($0, priceData: utilityPriceData, usageCase: .detailsCrypto) }? - .value(for: selectedLocale) - feeViewModel = viewModel - } - - private func buildBalanceViewModelFactory( - wallet: MetaAccountModel, - for chainAsset: ChainAsset? - ) -> BalanceViewModelFactoryProtocol? { - guard let chainAsset = chainAsset else { - return nil - } - let assetInfo = chainAsset.asset - .displayInfo(with: chainAsset.chain.icon) - let balanceViewModelFactory = BalanceViewModelFactory( - targetAssetInfo: assetInfo, - selectedMetaAccount: wallet - ) - return balanceViewModelFactory - } - - private func validateAndSubmitTransfer() { - let amount = Decimal.fromSubstrateAmount(call.amount, precision: Int16(chainAsset.asset.precision)) ?? .zero - let tipPaymentChainAsset = interactor.getFeePaymentChainAsset(for: chainAsset) - let tipPaymentPrecision = tipPaymentChainAsset?.asset.precision ?? chainAsset.asset.precision - let tip = Decimal.fromSubstrateAmount(call.tip ?? .zero, precision: Int16(tipPaymentPrecision)) ?? .zero - - let balanceType: BalanceType = !chainAsset.isUtility ? - .orml(balance: balance, utilityBalance: utilityBalance) : .utility(balance: balance) - - DataValidationRunner(validators: [ - dataValidatingFactory.canPayFeeAndAmount( - balanceType: balanceType, - feeAndTip: (fee ?? 0) + tip, - sendAmount: amount, - locale: selectedLocale - ) - ]).runValidation { [weak self] in - guard let strongSelf = self else { return } - strongSelf.view?.didStartLoading() - strongSelf.interactor.submitExtrinsic() - } - } - - private func submitXorlessTransfer() { - view?.didStartLoading() - interactor.submitExtrinsic() - } - - private func checkLoadingState() { - DispatchQueue.main.async { [unowned self] in - self.view?.didReceive(isLoading: !self.loadingCollector.isReady) - } - } -} - -extension WalletSendConfirmPresenter: WalletSendConfirmPresenterProtocol { - func didTapScamWarningButton() { - let title = R.string.localizable.scamWarningAlertTitle( - chainAsset.asset.symbol.uppercased(), - preferredLanguages: selectedLocale.rLanguages - ) - let message = R.string.localizable.scamWarningAlertSubtitle( - chainAsset.asset.symbolUppercased, - preferredLanguages: selectedLocale.rLanguages - ) - - let sheetViewModel = SheetAlertPresentableViewModel( - title: title, - message: message, - actions: [], - closeAction: R.string.localizable.commonClose(preferredLanguages: selectedLocale.rLanguages), - icon: R.image.iconWarningBig() - ) - wireframe.present( - viewModel: sheetViewModel, - from: view - ) - } - - func setup() { - interactor.setup() - provideViewModel() - loadingCollector.utilityBalanceReady = chainAsset.isUtility - } - - func didTapBackButton() { - wireframe.close(view: view) - } - - func didTapConfirmButton() { - switch call { - case .transfer: - validateAndSubmitTransfer() - case .xorlessTransfer: - submitXorlessTransfer() - } - } -} - -extension WalletSendConfirmPresenter: WalletSendConfirmInteractorOutputProtocol { - func didTransfer(result: Result) { - view?.didStopLoading() - - switch result { - case let .success(hash): - - wireframe.complete(on: view, title: hash, chainAsset: chainAsset) - case let .failure(error): - guard let view = view else { - return - } - - if let rpcError = error as? RPCResponse.Error, rpcError.code == -32000 { - wireframe.presentAmountTooHigh(from: view, locale: selectedLocale) - return - } - - if !wireframe.present(error: error, from: view, locale: selectedLocale) { - wireframe.presentExtrinsicFailed(from: view, locale: selectedLocale) - } - } - } - - func didReceiveAccountInfo(result: Result, for chainAsset: ChainAsset) { - switch result { - case let .success(accountInfo): - if chainAsset == self.chainAsset { - loadingCollector.balanceReady = true - checkLoadingState() - - balance = accountInfo.map { - Decimal.fromSubstrateAmount( - $0.data.sendAvailable, - precision: Int16(chainAsset.asset.precision) - ) - } ?? 0.0 - - provideViewModel() - } else if let utilityAsset = interactor.getFeePaymentChainAsset(for: chainAsset), - utilityAsset == chainAsset { - loadingCollector.utilityBalanceReady = true - checkLoadingState() - - utilityBalance = accountInfo.map { - Decimal.fromSubstrateAmount( - $0.data.sendAvailable, - precision: Int16(utilityAsset.asset.precision) - ) - } ?? 0 - } - case let .failure(error): - logger?.error("Did receive account info error: \(error)") - } - } - - func didReceiveMinimumBalance(result: Result) { - switch result { - case let .success(minimumBalance): - loadingCollector.edReady = true - checkLoadingState() - self.minimumBalance = minimumBalance - - provideViewModel() - case let .failure(error): - loadingCollector.edReady = true - checkLoadingState() - logger?.error("Did receive minimum balance error: \(error)") - } - } - - func didReceivePriceData(result: Result, for priceId: AssetModel.PriceId?) { - switch result { - case let .success(priceData): - if chainAsset.asset.priceId == priceId { - self.priceData = priceData - let utilityChainAsset = interactor.getFeePaymentChainAsset(for: chainAsset) - if utilityChainAsset?.chainAssetId == chainAsset.chainAssetId { - utilityPriceData = priceData - } - } else { - utilityPriceData = priceData - } - provideViewModel() - case let .failure(error): - logger?.error("Did receive price error: \(error)") - } - } - - func didReceiveFee(result: Result) { - switch result { - case let .success(dispatchInfo): - guard let utilityAsset = interactor.getFeePaymentChainAsset(for: chainAsset) else { return } - fee = BigUInt(string: dispatchInfo.fee).map { - Decimal.fromSubstrateAmount($0, precision: Int16(utilityAsset.asset.precision)) - } ?? nil - updateFeeViewModel() - provideViewModel() - let amount = Decimal.fromSubstrateAmount(call.amount, precision: Int16(chainAsset.asset.precision)) ?? .zero - let tipPaymentChainAsset = interactor.getFeePaymentChainAsset(for: chainAsset) - let tipPaymentPrecision = tipPaymentChainAsset?.asset.precision ?? chainAsset.asset.precision - let tip = Decimal.fromSubstrateAmount(call.tip ?? .zero, precision: Int16(tipPaymentPrecision)) ?? .zero - - let fullAmount = amount + fee.or(.zero) + tip - interactor.fetchEquilibriumTotalBalance(chainAsset: chainAsset, amount: fullAmount) - loadingCollector.feeReady = true - checkLoadingState() - case let .failure(error): - logger?.error("Did receive fee error: \(error)") - } - } - - func didReceive(eqTotalBalance: Decimal) { - eqUilibriumTotalBalance = eqTotalBalance - loadingCollector.balanceReady = true - checkLoadingState() - } -} - -extension WalletSendConfirmPresenter: Localizable { - func applyLocalization() {} -} diff --git a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmProtocols.swift b/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmProtocols.swift deleted file mode 100644 index e4a8fd9efa..0000000000 --- a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmProtocols.swift +++ /dev/null @@ -1,48 +0,0 @@ -import BigInt -import Foundation -import SSFModels - -protocol WalletSendConfirmViewProtocol: ControllerBackedProtocol, LoadableViewProtocol { - func didReceive(state: WalletSendConfirmViewState) - func didReceive(isLoading: Bool) -} - -protocol WalletSendConfirmPresenterProtocol: AnyObject { - func setup() - func didTapConfirmButton() - func didTapBackButton() - func didTapScamWarningButton() -} - -protocol WalletSendConfirmInteractorInputProtocol: AnyObject { - var dependencyContainer: SendDepencyContainer { get } - - func setup() - func submitExtrinsic() - func getFeePaymentChainAsset(for chainAsset: ChainAsset?) -> ChainAsset? - func fetchEquilibriumTotalBalance(chainAsset: ChainAsset, amount: Decimal) - func provideConstants() -} - -protocol WalletSendConfirmInteractorOutputProtocol: AnyObject { - func didReceiveAccountInfo(result: Result, for chainAsset: ChainAsset) - func didReceiveMinimumBalance(result: Result) - func didReceivePriceData(result: Result, for priceId: AssetModel.PriceId?) - func didReceiveFee(result: Result) - func didReceive(eqTotalBalance: Decimal) - func didTransfer(result: Result) -} - -protocol WalletSendConfirmWireframeProtocol: - ErrorPresentable, - BaseErrorPresentable, - ModalAlertPresenting, - SheetAlertPresentable { - func close(view: ControllerBackedProtocol?) - func finish(view: ControllerBackedProtocol?) - func complete( - on view: ControllerBackedProtocol?, - title: String, - chainAsset: ChainAsset - ) -} diff --git a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmViewController.swift b/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmViewController.swift deleted file mode 100644 index 076b66d738..0000000000 --- a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmViewController.swift +++ /dev/null @@ -1,81 +0,0 @@ -import UIKit -import SoraFoundation - -final class WalletSendConfirmViewController: UIViewController, ViewHolder, HiddableBarWhenPushed { - typealias RootViewType = WalletSendConfirmViewLayout - - let presenter: WalletSendConfirmPresenterProtocol - - private var state: WalletSendConfirmViewState = .loading - - init(presenter: WalletSendConfirmPresenterProtocol, localizationManager: LocalizationManagerProtocol) { - self.presenter = presenter - super.init(nibName: nil, bundle: nil) - self.localizationManager = localizationManager - } - - @available(*, unavailable) - required init?(coder _: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - override func loadView() { - view = WalletSendConfirmViewLayout() - } - - override func viewDidLoad() { - super.viewDidLoad() - - setupLocalization() - presenter.setup() - - rootView.navigationBar.backButton.addTarget(self, action: #selector(backButtonClicked), for: .touchUpInside) - rootView.receiverWarningButton.addTarget(self, action: #selector(handleScamWarningTapped), for: .touchUpInside) - rootView.confirmButton.addTarget(self, action: #selector(continueButtonClicked), for: .touchUpInside) - } - - private func setupLocalization() { - rootView.locale = selectedLocale - } - - private func applyState(_ state: WalletSendConfirmViewState) { - self.state = state - - switch state { - case .loading: - break - case let .loaded(model): - rootView.bind(confirmViewModel: model) - } - } - - @objc private func continueButtonClicked() { - presenter.didTapConfirmButton() - } - - @objc private func backButtonClicked() { - presenter.didTapBackButton() - } - - @objc private func handleScamWarningTapped() { - presenter.didTapScamWarningButton() - } -} - -extension WalletSendConfirmViewController: WalletSendConfirmViewProtocol { - func didReceive(state: WalletSendConfirmViewState) { - applyState(state) - } - - func didReceive(isLoading: Bool) { - rootView.confirmButton.set(loading: isLoading) - - if !isLoading { - rootView.confirmButton.set(enabled: true, changeStyle: true) - } - } -} - -extension WalletSendConfirmViewController: Localizable { - func applyLocalization() {} -} diff --git a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmViewFactory.swift b/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmViewFactory.swift deleted file mode 100644 index 91163627b0..0000000000 --- a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmViewFactory.swift +++ /dev/null @@ -1,124 +0,0 @@ -import Foundation -import BigInt -import SSFUtils -import SoraFoundation -import SoraKeystore -import SSFModels -import RobinHood - -enum SendConfirmTransferCall { - case transfer(Transfer) - case xorlessTransfer(XorlessTransfer) - - var amount: BigUInt { - switch self { - case let .transfer(transfer): - return transfer.amount - case let .xorlessTransfer(xorlessTransfer): - return xorlessTransfer.amount - } - } - - var receiverAddress: String { - switch self { - case let .transfer(transfer): - return transfer.receiver - case let .xorlessTransfer(xorlessTransfer): - let bokoloId = String(data: xorlessTransfer.additionalData, encoding: .utf8) - if let bokoloAddress = bokoloId, bokoloAddress.isNotEmpty { - return bokoloAddress - } else if let receiver = try? AddressFactory.address(for: xorlessTransfer.receiver, chainFormat: .substrate(69)) { - return receiver - } - return "" - } - } - - var tip: BigUInt? { - switch self { - case let .transfer(transfer): - return transfer.tip - case .xorlessTransfer: - return nil - } - } -} - -enum WalletSendConfirmViewFactory { - static func createView( - wallet: MetaAccountModel, - chainAsset: ChainAsset, - call: SendConfirmTransferCall, - scamInfo: ScamInfo?, - feeViewModel: BalanceViewModelProtocol? - ) -> WalletSendConfirmViewProtocol? { - let interactor = createInteractor( - wallet: wallet, - chainAsset: chainAsset, - call: call - ) - - let wireframe = WalletSendConfirmWireframe() - - let accountViewModelFactory = AccountViewModelFactory(iconGenerator: UniversalIconGenerator()) - let assetInfo = chainAsset.asset.displayInfo(with: chainAsset.chain.icon) - - let dataValidatingFactory = SendDataValidatingFactory(presentable: wireframe) - - let viewModelFactory = WalletSendConfirmViewModelFactory( - amountFormatterFactory: AssetBalanceFormatterFactory(), - assetInfo: assetInfo - ) - - let presenter = WalletSendConfirmPresenter( - interactor: interactor, - wireframe: wireframe, - accountViewModelFactory: accountViewModelFactory, - dataValidatingFactory: dataValidatingFactory, - walletSendConfirmViewModelFactory: viewModelFactory, - logger: Logger.shared, - chainAsset: chainAsset, - wallet: wallet, - call: call, - scamInfo: scamInfo, - feeViewModel: feeViewModel, - localizationManager: LocalizationManager.shared - ) - - let view = WalletSendConfirmViewController( - presenter: presenter, - localizationManager: LocalizationManager.shared - ) - - dataValidatingFactory.view = view - presenter.view = view - interactor.presenter = presenter - - return view - } - - private static func createInteractor( - wallet: MetaAccountModel, - chainAsset: ChainAsset, - call: SendConfirmTransferCall - ) -> WalletSendConfirmInteractor { - let operationManager = OperationManagerFacade.sharedManager - let priceLocalSubscriber = PriceLocalStorageSubscriberImpl.shared - let dependencyContainer = SendDepencyContainer( - wallet: wallet, - operationManager: operationManager - ) - return WalletSendConfirmInteractor( - selectedMetaAccount: wallet, - chainAsset: chainAsset, - call: call, - accountInfoSubscriptionAdapter: AccountInfoSubscriptionAdapter( - walletLocalSubscriptionFactory: WalletLocalSubscriptionFactory.shared, - selectedMetaAccount: wallet - ), - priceLocalSubscriber: priceLocalSubscriber, - dependencyContainer: dependencyContainer, - wallet: wallet - ) - } -} diff --git a/fearless/Modules/Profile/ProfileWireframe.swift b/fearless/Modules/Profile/ProfileWireframe.swift index 7e1f5121f5..1d04112fc9 100644 --- a/fearless/Modules/Profile/ProfileWireframe.swift +++ b/fearless/Modules/Profile/ProfileWireframe.swift @@ -1,5 +1,6 @@ import Foundation import UIKit +import SSFModels final class ProfileWireframe: ProfileWireframeProtocol, AuthorizationPresentable { lazy var rootAnimator: RootControllerAnimationCoordinatorProtocol = RootControllerAnimationCoordinator() diff --git a/fearless/Modules/ReceiveAndRequestAsset/ReceiveAndRequestAssetPresenter.swift b/fearless/Modules/ReceiveAndRequestAsset/ReceiveAndRequestAssetPresenter.swift index 9e3853a7b6..5967f53809 100644 --- a/fearless/Modules/ReceiveAndRequestAsset/ReceiveAndRequestAssetPresenter.swift +++ b/fearless/Modules/ReceiveAndRequestAsset/ReceiveAndRequestAssetPresenter.swift @@ -37,7 +37,7 @@ final class ReceiveAndRequestAssetPresenter { private var pricesData: [PriceData]? = [] private var address: String? { - wallet.fetch(for: chainAsset.chain.accountRequest())?.toAddress() + wallet.fetch(for: chainAsset.chain.accountRequest())?.toAddress(bounceable: false) } // MARK: - Constructors @@ -136,8 +136,11 @@ final class ReceiveAndRequestAssetPresenter { qrOperation = Task { do { - guard let account = wallet.fetch(for: chainAsset.chain.accountRequest()), let address = account.toAddress() else { - throw ChainAccountFetchingError.accountNotExists + guard + let account = wallet.fetch(for: chainAsset.chain.accountRequest()), + let address = account.toAddress(bounceable: false) + else { + throw ConvenienceError(error: "Account not exist") } var qrType: QRType = .address(address) if chainAsset.chain.isSora { diff --git a/fearless/Modules/SelectCurrency/SelectCurrencyAssembly.swift b/fearless/Modules/SelectCurrency/SelectCurrencyAssembly.swift index f3256b02c2..593133ce6b 100644 --- a/fearless/Modules/SelectCurrency/SelectCurrencyAssembly.swift +++ b/fearless/Modules/SelectCurrency/SelectCurrencyAssembly.swift @@ -3,6 +3,7 @@ import SoraFoundation import SoraKeystore import RobinHood import SoraUI +import SSFModels final class SelectCurrencyAssembly { static func configureModule( diff --git a/fearless/Modules/SelectExportAccount/SelectExportAccountRouter.swift b/fearless/Modules/SelectExportAccount/SelectExportAccountRouter.swift index e33d94fa08..f2bb6d7e5f 100644 --- a/fearless/Modules/SelectExportAccount/SelectExportAccountRouter.swift +++ b/fearless/Modules/SelectExportAccount/SelectExportAccountRouter.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels final class SelectExportAccountRouter: SelectExportAccountRouterInput { func showWalletDetails( diff --git a/fearless/Modules/Send/SendAssembly.swift b/fearless/Modules/Send/SendAssembly.swift deleted file mode 100644 index ee644452f6..0000000000 --- a/fearless/Modules/Send/SendAssembly.swift +++ /dev/null @@ -1,95 +0,0 @@ -import UIKit -import SoraFoundation -import RobinHood -import SSFUtils -import SSFModels -import Web3ContractABI -import Web3 -import SoraKeystore -import SSFSigner -import SSFCrypto -import SSFExtrinsicKit -import SSFNetwork -import SSFChainRegistry -import SSFChainConnection - -final class SendAssembly { - static func configureModule( - wallet: MetaAccountModel, - initialData: SendFlowInitialData - ) -> SendModuleCreationResult? { - let localizationManager = LocalizationManager.shared - - let operationManager = OperationManagerFacade.sharedManager - let dependencyContainer = SendDepencyContainer( - wallet: wallet, - operationManager: operationManager - ) - let repositoryFacade = SubstrateDataStorageFacade.shared - let priceLocalSubscriber = PriceLocalStorageSubscriberImpl.shared - let mapper: CodableCoreDataMapper = - CodableCoreDataMapper(entityIdentifierFieldName: #keyPath(CDScamInfo.address)) - let scamRepository: CoreDataRepository = - repositoryFacade.createRepository( - filter: nil, - sortDescriptors: [], - mapper: AnyCoreDataMapper(mapper) - ) - let scamServiceOperationFactory = ScamServiceOperationFactory( - repository: AnyDataProviderRepository(scamRepository) - ) - let chainRepository = ChainRepositoryFactory().createRepository( - for: NSPredicate.enabledCHain(), - sortDescriptors: [NSSortDescriptor.chainsByAddressPrefix] - ) - let operationQueue = OperationQueue() - operationQueue.qualityOfService = .userInitiated - let chainAssetFetching = ChainAssetsFetching( - chainRepository: AnyDataProviderRepository(chainRepository), - operationQueue: operationQueue - ) - let addressChainDefiner = AddressChainDefiner( - operationManager: operationManager, - chainModelRepository: AnyDataProviderRepository(chainRepository), - wallet: wallet - ) - let runtimeMetadataRepository: AsyncCoreDataRepositoryDefault = - SubstrateDataStorageFacade.shared.createAsyncRepository() - let interactor = SendInteractor( - accountInfoSubscriptionAdapter: AccountInfoSubscriptionAdapter( - walletLocalSubscriptionFactory: WalletLocalSubscriptionFactory.shared, - selectedMetaAccount: wallet - ), - priceLocalSubscriber: priceLocalSubscriber, - operationManager: operationManager, - scamServiceOperationFactory: scamServiceOperationFactory, - chainAssetFetching: chainAssetFetching, - dependencyContainer: dependencyContainer, - addressChainDefiner: addressChainDefiner, - runtimeItemRepository: AsyncAnyRepository(runtimeMetadataRepository) - ) - let router = SendRouter() - - let viewModelFactory = SendViewModelFactory(iconGenerator: UniversalIconGenerator()) - let dataValidatingFactory = SendDataValidatingFactory(presentable: router) - let presenter = SendPresenter( - interactor: interactor, - router: router, - localizationManager: localizationManager, - viewModelFactory: viewModelFactory, - dataValidatingFactory: dataValidatingFactory, - logger: Logger.shared, - wallet: wallet, - initialData: initialData - ) - - let view = SendViewController( - initialData: initialData, - output: presenter, - localizationManager: localizationManager - ) - dataValidatingFactory.view = view - - return (view, presenter) - } -} diff --git a/fearless/Modules/Send/SendDependencyContainer.swift b/fearless/Modules/Send/SendDependencyContainer.swift deleted file mode 100644 index 1053e5c923..0000000000 --- a/fearless/Modules/Send/SendDependencyContainer.swift +++ /dev/null @@ -1,213 +0,0 @@ -import SSFUtils -import SoraKeystore -import RobinHood -import SSFModels -import SSFChainRegistry -import SSFNetwork -import SSFExtrinsicKit -import Web3 -import SSFSigner -import SSFCrypto -import Foundation -import SSFRuntimeCodingService - -struct SendDependencies { - let wallet: MetaAccountModel - let chainAsset: ChainAsset - let runtimeService: RuntimeCodingServiceProtocol? - let existentialDepositService: ExistentialDepositServiceProtocol - let equilibruimTotalBalanceService: EquilibriumTotalBalanceServiceProtocol? - let transferService: TransferServiceProtocol - let accountInfoFetching: AccountInfoFetchingProtocol - let polkaswapService: PolkaswapService? - let storageRequestPerformer: StorageRequestPerformer? -} - -final class SendDepencyContainer { - private let wallet: MetaAccountModel - private let operationManager: OperationManagerProtocol - private var currentDependecies: SendDependencies? - private var cachedDependencies: [ChainAssetKey: SendDependencies] = [:] - - init(wallet: MetaAccountModel, operationManager: OperationManagerProtocol) { - self.wallet = wallet - self.operationManager = operationManager - } - - func prepareDepencies(chainAsset: ChainAsset) async throws -> SendDependencies { - guard let accountResponse = wallet.fetch(for: chainAsset.chain.accountRequest()) else { - throw ChainAccountFetchingError.accountNotExists - } - - if let dependencies = cachedDependencies[chainAsset.uniqueKey(accountId: accountResponse.accountId)] { - return dependencies - } - currentDependecies?.transferService.unsubscribe() - - let chainRegistry = ChainRegistryFacade.sharedRegistry - let runtimeService = chainRegistry.getRuntimeProvider( - for: chainAsset.chain.chainId - ) - - let existentialDepositService = ExistentialDepositService( - operationManager: operationManager, - chainRegistry: chainRegistry, - chainId: chainAsset.chain.chainId - ) - - let equilibruimTotalBalanceService = createEqTotalBalanceService(chainAsset: chainAsset) - - let transferService = try await createTransferService(for: chainAsset) - let polkaswapService = createPolkaswapService(chainAsset: chainAsset, chainRegistry: chainRegistry) - let accountInfoFetching = createAccountInfoFetching(for: chainAsset) - - let storageRequestPerformer: StorageRequestPerformer? = runtimeService.flatMap { - guard let connection = chainRegistry.getConnection(for: chainAsset.chain.chainId) else { - return nil - } - - return StorageRequestPerformerDefault(runtimeService: $0, connection: connection) - } - let dependencies = SendDependencies( - wallet: wallet, - chainAsset: chainAsset, - runtimeService: runtimeService, - existentialDepositService: existentialDepositService, - equilibruimTotalBalanceService: equilibruimTotalBalanceService, - transferService: transferService, - accountInfoFetching: accountInfoFetching, - polkaswapService: polkaswapService, - storageRequestPerformer: storageRequestPerformer - ) - - cachedDependencies[chainAsset.uniqueKey(accountId: accountResponse.accountId)] = dependencies - currentDependecies = dependencies - - return dependencies - } - - private func createAccountInfoFetching(for _: ChainAsset) -> AccountInfoFetchingProtocol { - let substrateRepositoryFactory = SubstrateRepositoryFactory( - storageFacade: UserDataStorageFacade.shared - ) - - let accountInfoRepository = substrateRepositoryFactory.createAccountInfoStorageItemRepository() - - let substrateAccountInfoFetching = AccountInfoFetching( - accountInfoRepository: accountInfoRepository, - chainRegistry: ChainRegistryFacade.sharedRegistry, - operationQueue: OperationManagerFacade.sharedDefaultQueue - ) - - return substrateAccountInfoFetching - } - - private func createTransferService(for chainAsset: ChainAsset) async throws -> TransferServiceProtocol { - guard - let accountResponse = wallet.fetch(for: chainAsset.chain.accountRequest()) - else { - throw ChainAccountFetchingError.accountNotExists - } - - switch chainAsset.chain.chainBaseType { - case .substrate: - guard let nativeRuntimeService = ChainRegistryFacade.sharedRegistry.getRuntimeProvider(for: chainAsset.chain.chainId) else { - throw ChainRegistryError.runtimeMetadaUnavailable - } - - let chainRegistry = ChainRegistryFacade.sharedRegistry - let connection = try chainRegistry.getSubstrateConnection(for: chainAsset.chain) - let operationManager = OperationManagerFacade.sharedManager - - let extrinsicService = SSFExtrinsicKit.ExtrinsicService( - accountId: accountResponse.accountId, - chainFormat: chainAsset.chain.chainFormat.asSfCrypto(), - cryptoType: accountResponse.cryptoType, - runtimeRegistry: nativeRuntimeService, - engine: connection, - operationManager: operationManager - ) - let secretKey = try fetchSecretKey(for: chainAsset.chain, accountResponse: accountResponse) - let signer = SubstrateTransactionSigner( - publicKeyData: accountResponse.publicKey, - secretKeyData: secretKey, - cryptoType: accountResponse.cryptoType - ) - - let callFactory = SubstrateCallFactoryDefault(runtimeService: nativeRuntimeService) - return SubstrateTransferService(extrinsicService: extrinsicService, callFactory: callFactory, signer: signer) - case .ethereum: - let secretKey = try fetchSecretKey(for: chainAsset.chain, accountResponse: accountResponse) - - guard let address = accountResponse.toAddress() else { - throw ConvenienceError(error: "Cannot fetch address from chain account") - } - - guard let ws = ChainRegistryFacade.sharedRegistry.getEthereumConnection(for: chainAsset.chain.chainId) else { - throw ChainRegistryError.connectionUnavailable - } - - return EthereumTransferService( - ws: ws, - privateKey: try EthereumPrivateKey(privateKey: secretKey.bytes), - senderAddress: address - ) - } - } - - private func createEqTotalBalanceService(chainAsset: ChainAsset) -> EquilibriumTotalBalanceServiceProtocol? { - guard chainAsset.chain.isEquilibrium else { - return nil - } - if let equilibruimTotalBalanceService = currentDependecies?.equilibruimTotalBalanceService { - return equilibruimTotalBalanceService - } - return EquilibriumTotalBalanceServiceFactory - .createService(wallet: wallet, chainAsset: chainAsset) - } - - private func fetchSecretKey( - for chain: ChainModel, - accountResponse: ChainAccountResponse - ) throws -> Data { - let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil - let tag: String = chain.isEthereumBased - ? KeystoreTagV2.ethereumSecretKeyTagForMetaId(wallet.metaId, accountId: accountId) - : KeystoreTagV2.substrateSecretKeyTagForMetaId(wallet.metaId, accountId: accountId) - - let keystore = Keychain() - let secretKey = try keystore.fetchKey(for: tag) - return secretKey - } - - private func createPolkaswapService( - chainAsset: ChainAsset, - chainRegistry: ChainRegistryProtocol - ) -> PolkaswapService? { - guard chainAsset.chain.isSora else { - return nil - } - let storageOperationFactory = StorageRequestFactory( - remoteFactory: StorageKeyFactory(), - operationManager: operationManager - ) - let repositoryFacade = SubstrateDataStorageFacade.shared - let settingsRepository: CoreDataRepository = - repositoryFacade.createRepository( - filter: nil, - sortDescriptors: [], - mapper: AnyCoreDataMapper(PolkaswapSettingMapper()) - ) - let operationFactory = PolkaswapOperationFactory( - storageRequestFactory: storageOperationFactory, - chainRegistry: chainRegistry, - chainId: chainAsset.chain.chainId - ) - let polkaswapService = PolkaswapServiceImpl( - polkaswapOperationFactory: operationFactory, - settingsRepository: AnyDataProviderRepository(settingsRepository), - operationManager: operationManager - ) - return polkaswapService - } -} diff --git a/fearless/Modules/Send/SendInteractor.swift b/fearless/Modules/Send/SendInteractor.swift deleted file mode 100644 index 762c155ae3..0000000000 --- a/fearless/Modules/Send/SendInteractor.swift +++ /dev/null @@ -1,316 +0,0 @@ -import UIKit -import RobinHood -import Web3 -import SSFModels -import Web3PromiseKit - -final class SendInteractor: RuntimeConstantFetching { - // MARK: - Private properties - - private weak var output: SendInteractorOutput? - - private let priceLocalSubscriber: PriceLocalStorageSubscriber - private let accountInfoSubscriptionAdapter: AccountInfoSubscriptionAdapterProtocol - private let operationManager: OperationManagerProtocol - private let scamServiceOperationFactory: ScamServiceOperationFactoryProtocol - private let chainAssetFetching: ChainAssetFetchingProtocol - private let addressChainDefiner: AddressChainDefiner - private var equilibriumTotalBalanceService: EquilibriumTotalBalanceServiceProtocol? - private let runtimeItemRepository: AsyncAnyRepository - - let dependencyContainer: SendDepencyContainer - - private var priceProvider: AnySingleValueProvider<[PriceData]>? - private var utilityPriceProvider: AnySingleValueProvider<[PriceData]>? - - private var subscriptionId: UInt16? - private var dependencies: SendDependencies? - - init( - accountInfoSubscriptionAdapter: AccountInfoSubscriptionAdapterProtocol, - priceLocalSubscriber: PriceLocalStorageSubscriber, - operationManager: OperationManagerProtocol, - scamServiceOperationFactory: ScamServiceOperationFactoryProtocol, - chainAssetFetching: ChainAssetFetchingProtocol, - dependencyContainer: SendDepencyContainer, - addressChainDefiner: AddressChainDefiner, - runtimeItemRepository: AsyncAnyRepository - ) { - self.accountInfoSubscriptionAdapter = accountInfoSubscriptionAdapter - self.priceLocalSubscriber = priceLocalSubscriber - self.operationManager = operationManager - self.scamServiceOperationFactory = scamServiceOperationFactory - self.chainAssetFetching = chainAssetFetching - self.dependencyContainer = dependencyContainer - self.addressChainDefiner = addressChainDefiner - self.runtimeItemRepository = runtimeItemRepository - } - - // MARK: - Private methods - - private func subscribeToAccountInfo(for chainAsset: ChainAsset, utilityAsset: ChainAsset? = nil) { - guard let dependencies = dependencies else { - return - } - - if let accountId = dependencies.wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId { - dependencies.accountInfoFetching.fetch(for: chainAsset, accountId: accountId) { [weak self] chainAsset, accountInfo in - - DispatchQueue.main.async { - self?.output?.didReceiveAccountInfo(result: .success(accountInfo), for: chainAsset) - } - - let chainAssets: [ChainAsset] = [chainAsset, utilityAsset].compactMap { $0 } - self?.accountInfoSubscriptionAdapter.subscribe( - chainsAssets: chainAssets, - handler: self - ) - } - } - } - - private func subscribeToPrice(for chainAsset: ChainAsset) { - priceProvider = priceLocalSubscriber.subscribeToPrice(for: chainAsset, listener: self) - if let utilityAsset = getFeePaymentChainAsset(for: chainAsset) { - utilityPriceProvider = priceLocalSubscriber.subscribeToPrice(for: utilityAsset, listener: self) - } - } - - private func updateDependencies(for chainAsset: ChainAsset) { - Task { - let dependencies = try await dependencyContainer.prepareDepencies(chainAsset: chainAsset) - self.dependencies = dependencies - - getTokensStatus(for: chainAsset) - - if !chainAsset.isUtility, - let utilityAsset = getFeePaymentChainAsset(for: chainAsset) { - subscribeToAccountInfo(for: chainAsset, utilityAsset: utilityAsset) - provideConstants(for: utilityAsset) - } else { - subscribeToAccountInfo(for: chainAsset) - provideConstants(for: chainAsset) - } - - output?.didReceiveDependencies(for: chainAsset) - } - } - - private func getTokensStatus(for chainAsset: ChainAsset) { - guard - let currencyId = chainAsset.currencyId, - let accountId = dependencies?.wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId - else { - DispatchQueue.main.async { [weak self] in - self?.output?.didReceiveAssetAccountInfo(assetAccountInfo: nil) - } - return - } - - Task { - do { - let accountIdVariant = try AccountIdVariant.build(raw: accountId, chain: chainAsset.chain) - let request = AssetsAccountRequest(accountId: accountIdVariant, currencyId: currencyId) - let assetAccountInfo: AssetAccountInfo? = try await dependencies?.storageRequestPerformer?.performSingle(request) - - await MainActor.run { - output?.didReceiveAssetAccountInfo(assetAccountInfo: assetAccountInfo) - } - } catch { - await MainActor.run { - output?.didReceiveAssetAccountInfoError(error: error) - } - } - } - } -} - -extension SendInteractor: SendInteractorInput { - func setup(with output: SendInteractorOutput) { - self.output = output - } - - func updateSubscriptions(for chainAsset: ChainAsset) { - subscribeToPrice(for: chainAsset) - updateDependencies(for: chainAsset) - } - - func defineAvailableChains( - for asset: AssetModel, - wallet: MetaAccountModel, - completionBlock: @escaping ([ChainModel]?) -> Void - ) { - chainAssetFetching.fetch( - shouldUseCache: true, - filters: [.enabled(wallet: wallet)], - sortDescriptors: [] - ) { result in - DispatchQueue.main.async { - switch result { - case let .success(chainAssets): - let chains = chainAssets.filter { $0.asset.symbolUppercased == asset.symbolUppercased }.map { $0.chain } - completionBlock(chains) - default: - completionBlock(nil) - } - } - } - } - - func estimateFee(for amount: BigUInt, tip: BigUInt?, for address: String?, chainAsset: ChainAsset) { - guard let dependencies = dependencies, let senderAddress = dependencies.wallet.fetch(for: chainAsset.chain.accountRequest())?.toAddress() else { - return - } - - let address = address ?? senderAddress - let appId: BigUInt? = chainAsset.chain.options?.contains(.checkAppId) == true ? .zero : nil - let transfer = Transfer( - chainAsset: chainAsset, - amount: amount, - receiver: address, - tip: tip, - appId: appId - ) - - dependencies.transferService.subscribeForFee(transfer: transfer, listener: self) - } - - func fetchScamInfo(for address: String) { - let allOperation = scamServiceOperationFactory.fetchScamInfoOperation(for: address) - - allOperation.completionBlock = { [weak self] in - guard let result = allOperation.result else { - return - } - - switch result { - case let .success(scamInfo): - DispatchQueue.main.async { - self?.output?.didReceive(scamInfo: scamInfo) - } - case .failure: - break - } - } - operationManager.enqueue(operations: [allOperation], in: .transient) - } - - func getFeePaymentChainAsset(for chainAsset: ChainAsset?) -> ChainAsset? { - guard let chainAsset = chainAsset else { return nil } - if let utilityAsset = chainAsset.chain.utilityChainAssets().first { - return utilityAsset - } - return chainAsset - } - - func getPossibleChains(for address: String) async -> [ChainModel]? { - await addressChainDefiner.getPossibleChains(for: address) - } - - func validate(address: String?, for chain: ChainModel) -> AddressValidationResult { - addressChainDefiner.validate(address: address, for: chain) - } - - func calculateEquilibriumBalance(chainAsset: ChainAsset, amount: Decimal) { - if chainAsset.chain.isEquilibrium { - let totalBalanceAfterTransfer = equilibriumTotalBalanceService? - .totalBalanceAfterTransfer(chainAsset: chainAsset, amount: amount) ?? .zero - output?.didReceive(eqTotalBalance: totalBalanceAfterTransfer) - } - } - - func didReceive(xorlessTransfer: XorlessTransfer) { - guard let dependencies = dependencies else { - return - } - - Task { - do { - let fee = try await dependencies.transferService.estimateFee(for: xorlessTransfer) - await MainActor.run(body: { - output?.didReceiveFee(result: .success(RuntimeDispatchInfo(feeValue: fee))) - }) - } catch { - await MainActor.run(body: { - output?.didReceiveFee(result: .failure(error)) - }) - } - } - } - - func convert(chainAsset: ChainAsset, toChainAsset: ChainAsset, amount: BigUInt) async throws -> SwapValues? { - guard let polkaswapService = dependencies?.polkaswapService else { - throw ConvenienceError(error: "Dependencies not ready") - } - return try await polkaswapService.fetchQuotes(amount: amount, fromChainAsset: chainAsset, toChainAsset: toChainAsset) - } - - func provideConstants(for chainAsset: ChainAsset) { - guard let dependencies = dependencies else { - return - } - - guard let runtimeService = dependencies.runtimeService else { - return - } - - dependencies.existentialDepositService.fetchExistentialDeposit( - chainAsset: chainAsset - ) { [weak self] result in - DispatchQueue.main.async { - self?.output?.didReceiveMinimumBalance(result: result) - } - } - - if chainAsset.chain.isTipRequired { - fetchConstant( - for: .defaultTip, - runtimeCodingService: runtimeService, - operationManager: operationManager - ) { [weak self] (result: Swift.Result) in - DispatchQueue.main.async { - self?.output?.didReceiveTip(result: result) - } - } - } - if chainAsset.chain.isEquilibrium { - equilibriumTotalBalanceService = dependencies.equilibruimTotalBalanceService - } - } -} - -extension SendInteractor: AccountInfoSubscriptionAdapterHandler { - func handleAccountInfo( - result: Swift.Result, - accountId _: AccountId, - chainAsset: ChainAsset - ) { - output?.didReceiveAccountInfo(result: result, for: chainAsset) - } -} - -extension SendInteractor: PriceLocalSubscriptionHandler { - func handlePrice(result: Swift.Result, chainAsset _: ChainAsset) { - output?.didReceivePriceData(result: result) - } -} - -extension SendInteractor: ExtrinsicFeeProxyDelegate { - func didReceiveFee(result: Swift.Result, for _: ExtrinsicFeeId) { - output?.didReceiveFee(result: result) - } -} - -extension SendInteractor: TransferFeeEstimationListener { - func didReceiveFee(fee: BigUInt) { - DispatchQueue.main.async { [weak self] in - self?.output?.didReceiveFee(result: .success(RuntimeDispatchInfo(feeValue: fee))) - } - } - - func didReceiveFeeError(feeError: Error) { - DispatchQueue.main.async { [weak self] in - self?.output?.didReceiveFee(result: .failure(feeError)) - } - } -} diff --git a/fearless/Modules/Send/SendPresenter.swift b/fearless/Modules/Send/SendPresenter.swift deleted file mode 100644 index 5087f302c6..0000000000 --- a/fearless/Modules/Send/SendPresenter.swift +++ /dev/null @@ -1,1258 +0,0 @@ -import Foundation -import SoraFoundation -import BigInt -import SSFUtils -import SSFModels -import SSFQRService - -final class SendPresenter { - enum State { - case initialSelection - case normal - } - - enum ValidationCase { - case validateAmount(completionHandler: () -> Void) - case validateAll - } - - // MARK: Private properties - - private weak var view: SendViewInput? - private let router: SendRouterInput - private let interactor: SendInteractorInput - private let dataValidatingFactory: SendDataValidatingFactory - private let logger: LoggerProtocol? - private let wallet: MetaAccountModel - private let viewModelFactory: SendViewModelFactoryProtocol - private var initialData: SendFlowInitialData - - private weak var moduleOutput: SendModuleOutput? - - private var recipientAddress: String? - private var selectedChain: ChainModel? - private var selectedChainAsset: ChainAsset? { - didSet { - DispatchQueue.main.async { - self.checkSendAllVisibility() - self.view?.setInputAccessoryView(visible: self.selectedChainAsset?.isBokolo == false) - } - } - } - - private var assetAccountInfo: NoneStateOptional = .none - private var frozenBalance: Decimal? - private var selectedAsset: AssetModel? - private var balance: Decimal? - private var utilityBalance: Decimal? - private var prices: [PriceData] = [] - private var tip: Decimal? - private var tipValue: BigUInt? - private var fee: Decimal? - private var minimumBalance: BigUInt? - private var inputResult: AmountInputResult? - private var scamInfo: ScamInfo? - private var state: State = .normal - private var eqUilibriumTotalBalance: Decimal? - private var sendAllEnabled: Bool = false - private var balanceMinusFeeAndTip: Decimal { - let feePaymentChainAsset = interactor.getFeePaymentChainAsset(for: selectedChainAsset) - if feePaymentChainAsset?.identifier != selectedChainAsset?.identifier { - return (balance ?? 0) - (frozenBalance ?? 0) - } - return (balance ?? 0) - (fee ?? 0) - (tip ?? 0) - (frozenBalance ?? 0) - } - - private var freeBalance: Decimal { - (balance ?? 0) - (frozenBalance ?? 0) - } - - private var fullAmount: Decimal { - let feePaymentChainAsset = interactor.getFeePaymentChainAsset(for: selectedChainAsset) - if feePaymentChainAsset?.identifier != selectedChainAsset?.identifier { - return (balance ?? 0) - } - return (balance ?? 0) + (fee ?? 0) + (tip ?? 0) - } - - private var feeViewModel: BalanceViewModelProtocol? - private var balanceViewModelFactoryByAsset: [String: BalanceViewModelFactoryProtocol] = [:] - - // MARK: - Bokolo cash properties - - private var bokoloCashId: Data? - private var bokoloSwapValues: (swap: SwapValues, fee: Decimal?)? - - // MARK: - Constructors - - init( - interactor: SendInteractorInput, - router: SendRouterInput, - localizationManager: LocalizationManagerProtocol, - viewModelFactory: SendViewModelFactoryProtocol, - dataValidatingFactory: SendDataValidatingFactory, - logger: LoggerProtocol? = nil, - wallet: MetaAccountModel, - initialData: SendFlowInitialData - ) { - self.interactor = interactor - self.router = router - self.viewModelFactory = viewModelFactory - self.dataValidatingFactory = dataValidatingFactory - self.logger = logger - self.wallet = wallet - self.initialData = initialData - - self.localizationManager = localizationManager - } - - // MARK: - Private methods - - private func checkSendAllVisibility() { - let visible = minimumBalance.map { $0 > BigUInt.zero && freeBalance > 0 && selectedChainAsset?.isUtility == true } - view?.switchEnableSendAllVisibility(isVisible: visible == true) - } - - private func buildBalanceViewModelFactory( - wallet: MetaAccountModel, - for chainAsset: ChainAsset? - ) -> BalanceViewModelFactoryProtocol? { - guard let chainAsset = chainAsset else { - return nil - } - - if let factory = balanceViewModelFactoryByAsset[chainAsset.asset.id] { - return factory - } - - let assetInfo = chainAsset.asset - .displayInfo(with: chainAsset.chain.icon) - let balanceViewModelFactory = BalanceViewModelFactory( - targetAssetInfo: assetInfo, - selectedMetaAccount: wallet - ) - - balanceViewModelFactoryByAsset[chainAsset.asset.id] = balanceViewModelFactory - return balanceViewModelFactory - } - - private func provideAssetVewModel() { - guard let chainAsset = selectedChainAsset, case .value = assetAccountInfo else { return } - let priceData = prices.first(where: { $0.priceId == chainAsset.asset.priceId }) - let balanceViewModelFactory = buildBalanceViewModelFactory(wallet: wallet, for: chainAsset) - let inputAmount = inputResult?.absoluteValue(from: balanceMinusFeeAndTip) ?? 0.0 - - let viewModel = balanceViewModelFactory?.createAssetBalanceViewModel( - inputAmount, - balance: freeBalance, - priceData: priceData, - selectable: initialData.selectableAsset - ).value(for: selectedLocale) - - DispatchQueue.main.async { - self.view?.didReceive(assetBalanceViewModel: viewModel) - } - - let fullAmount = inputResult?.absoluteValue(from: fullAmount) ?? .zero - interactor.calculateEquilibriumBalance(chainAsset: chainAsset, amount: fullAmount) - } - - private func provideTipViewModel() { - guard let chainAsset = selectedChainAsset, - let utilityAsset = interactor.getFeePaymentChainAsset(for: selectedChainAsset), - let balanceViewModelFactory = buildBalanceViewModelFactory(wallet: wallet, for: utilityAsset) - else { return } - - let priceData = prices.first(where: { $0.priceId == chainAsset.asset.priceId }) - let viewModel = tip - .map { balanceViewModelFactory - .balanceFromPrice( - $0, - priceData: priceData, - usageCase: .detailsCrypto - ) - }?.value(for: selectedLocale) - let tipViewModel = TipViewModel( - balanceViewModel: viewModel, - tipRequired: utilityAsset.chain.isTipRequired - ) - DispatchQueue.main.async { - self.view?.didReceive(tipViewModel: tipViewModel) - } - } - - private func handleFeeReceived() { - if selectedChainAsset?.isBokolo == true { - checkXorFeePaymentPossibles() - } else { - provideFeeViewModel() - } - } - - private func provideFeeViewModel(checkBokolo _: Bool = true) { - guard - let utilityAsset = interactor.getFeePaymentChainAsset(for: selectedChainAsset), - let balanceViewModelFactory = buildBalanceViewModelFactory(wallet: wallet, for: utilityAsset) - else { return } - - let priceData = prices.first(where: { $0.priceId == utilityAsset.asset.priceId }) - let viewModel = fee - .map { balanceViewModelFactory.balanceFromPrice($0, priceData: priceData, usageCase: .detailsCrypto) }? - .value(for: selectedLocale) - - DispatchQueue.main.async { - self.view?.didReceive(feeViewModel: viewModel) - } - feeViewModel = viewModel - } - - private func provideInputViewModel() { - guard let chainAsset = selectedChainAsset else { return } - - let balanceViewModelFactory = buildBalanceViewModelFactory(wallet: wallet, for: chainAsset) - - let available: Decimal - if chainAsset.isBokolo { - available = (balance ?? .zero) - (bokoloSwapValues?.fee ?? .zero) - } else { - available = balanceMinusFeeAndTip - } - let inputAmount = inputResult?.absoluteValue(from: available) - - let inputViewModel = balanceViewModelFactory?.createBalanceInputViewModel(inputAmount) - .value(for: selectedLocale) - - DispatchQueue.main.async { - self.view?.didReceive(amountInputViewModel: inputViewModel) - let isVisible = chainAsset.chain.externalApi?.history != nil - self.view?.setHistoryButton(isVisible: isVisible) - } - } - - private func provideNetworkViewModel(for chain: ChainModel, canEdit: Bool) { - let viewModel = viewModelFactory.buildNetworkViewModel(chain: chain, canEdit: canEdit) - DispatchQueue.main.async { - self.view?.didReceive(selectNetworkViewModel: viewModel) - } - } - - private func refreshFee(for chainAsset: ChainAsset, address: String?) { - switch initialData { - case .bokoloCash: - guard let transfer = prepareXorlessTransfer() else { - return - } - interactor.didReceive(xorlessTransfer: transfer) - case .address, .chainAsset, .soraMainnet, .desiredCryptocurrency: - if selectedChainAsset?.isBokolo == true { - guard let transfer = prepareXorlessTransfer() else { - return - } - interactor.didReceive(xorlessTransfer: transfer) - return - } - let inputAmount = inputResult?.absoluteValue(from: balanceMinusFeeAndTip) ?? 0 - guard let amount = inputAmount.toSubstrateAmount( - precision: Int16(chainAsset.asset.precision) - ) else { - return - } - - DispatchQueue.main.async { [weak self] in - self?.view?.didStartFeeCalculation() - } - - let tip = self.tip?.toSubstrateAmount(precision: Int16(chainAsset.asset.precision)) - interactor.estimateFee(for: amount, tip: tip, for: address, chainAsset: chainAsset) - } - } - - private func handle(newAddress: String) { - guard newAddress.isNotEmpty else { - return - } - recipientAddress = newAddress - guard let chainAsset = selectedChainAsset else { return } - let viewModel = viewModelFactory.buildRecipientViewModel( - address: newAddress, - isValid: interactor.validate(address: newAddress, for: chainAsset.chain).isValid, - canEditing: true - ) - - DispatchQueue.main.async { - self.view?.didReceive(viewModel: viewModel) - } - - interactor.updateSubscriptions(for: chainAsset) - interactor.fetchScamInfo(for: newAddress) - } - - private func handle(selectedChain: ChainModel?) { - self.selectedChain = selectedChain - switch state { - case .initialSelection: - if let chain = selectedChain { - defineOrSelectAsset(for: chain) - } - state = .normal - case .normal: - let optionalAsset: AssetModel? = selectedAsset ?? selectedChainAsset?.asset - if - let selectedChain = selectedChain, - let selectedAsset = optionalAsset, - let selectedChainAsset = selectedChain.chainAssets.first(where: { - $0.asset.symbol.lowercased() == selectedAsset.symbol.lowercased() - }) { - self.selectedChainAsset = selectedChainAsset - handle(selectedChainAsset: selectedChainAsset) - } - } - if selectedChainAsset == nil { - router.dismiss(view: view) - } - } - - private func handle(selectedChainAsset: ChainAsset) { - fee = nil - provideNetworkViewModel(for: selectedChainAsset.chain, canEdit: true) - provideAssetVewModel() - provideInputViewModel() - if let recipientAddress = recipientAddress { - handle(newAddress: recipientAddress) - } else { - interactor.updateSubscriptions(for: selectedChainAsset) - } - } - - private func defineOrSelectAsset(for chain: ChainModel) { - if chain.chainAssets.count == 1, - let selectedChainAsset = chain.chainAssets.first { - self.selectedChainAsset = selectedChainAsset - handle(selectedChainAsset: selectedChainAsset) - } else { - router.showSelectAsset( - from: view, - wallet: wallet, - selectedAssetId: nil, - chainAssets: chain.chainAssets, - output: self - ) - } - } - - private func showInvalidAddressAlert() { - router.present( - message: R.string.localizable.errorInvalidAddress(preferredLanguages: selectedLocale.rLanguages), - title: R.string.localizable.commonWarning(preferredLanguages: selectedLocale.rLanguages), - closeAction: R.string.localizable.commonClose(preferredLanguages: selectedLocale.rLanguages), - from: view - ) - } - - private func showPossibleChainsAlert(_ possibleChains: [ChainModel]) { - let action = SheetAlertPresentableAction( - title: R.string.localizable.commonSelectNetwork(preferredLanguages: selectedLocale.rLanguages) - ) { [weak self] in - guard let strongSelf = self else { return } - strongSelf.router.showSelectNetwork( - from: strongSelf.view, - wallet: strongSelf.wallet, - selectedChainId: nil, - chainModels: possibleChains, - delegate: strongSelf - ) - } - router.present( - message: R.string.localizable.errorInvalidAddress(preferredLanguages: selectedLocale.rLanguages), - title: R.string.localizable.commonWarning(preferredLanguages: selectedLocale.rLanguages), - closeAction: R.string.localizable.commonClose(preferredLanguages: selectedLocale.rLanguages), - from: view, - actions: [action] - ) - } - - private func showSameAddressAlert(_ address: String, successCompletion: @escaping (String) -> Void) { - let action = SheetAlertPresentableAction( - title: R.string.localizable.commonProceed(preferredLanguages: selectedLocale.rLanguages) - ) { - successCompletion(address) - } - router.present( - message: R.string.localizable - .sameAddressTransferWarningMessage(preferredLanguages: selectedLocale.rLanguages), - title: R.string.localizable.commonWarning(preferredLanguages: selectedLocale.rLanguages), - closeAction: R.string.localizable.commonCancel(preferredLanguages: selectedLocale.rLanguages), - from: view, - actions: [action] - ) - } - - private func showIncorrectAddressAlert() { - let dissmissAction = SheetAlertPresentableAction( - title: R.string.localizable.commonClose(preferredLanguages: selectedLocale.rLanguages) - ) { [weak self] in - self?.router.dismiss(view: self?.view) - } - let alertViewModel = SheetAlertPresentableViewModel( - title: R.string.localizable.commonWarning(preferredLanguages: selectedLocale.rLanguages), - message: R.string.localizable.errorInvalidAddress(preferredLanguages: selectedLocale.rLanguages), - actions: [dissmissAction], - closeAction: nil, - dismissCompletion: { [weak self] in - self?.router.dismiss(view: self?.view) - } - ) - router.present(viewModel: alertViewModel, from: view) - } - - private func showUnsupportedAssetAlert() { - let dissmissAction = SheetAlertPresentableAction( - title: R.string.localizable.commonClose(preferredLanguages: selectedLocale.rLanguages) - ) { [weak self] in - self?.router.dismiss(view: self?.view) - } - let assetManagementAction = SheetAlertPresentableAction( - title: R.string.localizable.walletManageAssets(preferredLanguages: selectedLocale.rLanguages), - style: .pinkBackgroundWhiteText - ) { [weak self] in - guard let self else { return } - self.router.showManageAsset(from: self.view, wallet: self.wallet) - } - let alertViewModel = SheetAlertPresentableViewModel( - title: R.string.localizable.commonActionReceive(preferredLanguages: selectedLocale.rLanguages), - message: R.string.localizable.errorScanQrDisabledAsset(preferredLanguages: selectedLocale.rLanguages), - actions: [assetManagementAction, dissmissAction], - closeAction: nil, - dismissCompletion: { [weak self] in - self?.router.dismiss(view: self?.view) - } - ) - router.present(viewModel: alertViewModel, from: view) - } - - private func validateAddress(with chainAsset: ChainAsset, successCompletion: @escaping (String) -> Void) { - switch interactor.validate(address: recipientAddress, for: chainAsset.chain) { - case let .valid(address): - successCompletion(address) - case let .invalid(address): - guard let address = address else { - showInvalidAddressAlert() - return - } - Task { - let possibleChains = await interactor.getPossibleChains(for: address) - await MainActor.run { - guard let possibleChains = possibleChains, possibleChains.isNotEmpty else { - showInvalidAddressAlert() - return - } - - showPossibleChainsAlert(possibleChains) - } - } - case let .sameAddress(address): - showSameAddressAlert(address, successCompletion: successCompletion) - } - } - - private func validateInputData( - with address: String, - chainAsset: ChainAsset, - validationCase: ValidationCase - ) { - let sendAmountDecimal = inputResult?.absoluteValue(from: balanceMinusFeeAndTip) - let spendingValue = (sendAmountDecimal ?? 0) + (fee ?? 0) + (tip ?? 0) - - let balanceType: BalanceType = !chainAsset.isUtility ? - .orml(balance: balance, utilityBalance: utilityBalance) : .utility(balance: utilityBalance) - var minimumBalanceDecimal: Decimal? - if let minBalance = minimumBalance { - let feePaymentChainAsset = interactor.getFeePaymentChainAsset(for: selectedChainAsset).or(chainAsset) - - let precision = feePaymentChainAsset.asset.precision - minimumBalanceDecimal = Decimal.fromSubstrateAmount( - minBalance, - precision: Int16(precision) - ) - } else if chainAsset.chain.isEthereum { - minimumBalanceDecimal = .zero - } - - let spending: Decimal - if chainAsset.isUtility { - spending = spendingValue - } else { - spending = fee.or(.zero) - } - - var validators: [DataValidating?] - switch validationCase { - case let .validateAmount(handler): - validators = [minimumBalance != nil ? dataValidatingFactory.exsitentialDepositIsNotViolated( - spending: spending, - balance: eqUilibriumTotalBalance ?? utilityBalance.or(.zero), - minimumBalance: minimumBalanceDecimal.or(.zero), - chainAsset: chainAsset, - locale: selectedLocale, - sendAllEnabled: sendAllEnabled, - proceedAction: { [weak self] in - guard let self else { - return - } - - self.sendAllEnabled = true - self.view?.switchEnableSendAllState(enabled: self.sendAllEnabled) - handler() - }, - setMaxAction: { [weak self] in - self?.sendAllEnabled = true - self?.view?.switchEnableSendAllState(enabled: true) - self?.selectAmountPercentage(1, validate: false) - }, - cancelAction: { [weak self] in - self?.sendAllEnabled = false - self?.view?.switchEnableSendAllState(enabled: false) - self?.selectAmountPercentage(0, validate: false) - } - ) : nil] - case .validateAll: - validators = [ - dataValidatingFactory.has(fee: fee, locale: selectedLocale, onError: { [weak self] in - self?.refreshFee(for: chainAsset, address: address) - }), - dataValidatingFactory.canPayFeeAndAmount( - balanceType: balanceType, - feeAndTip: (fee ?? 0) + (tip ?? 0), - sendAmount: sendAmountDecimal, - locale: selectedLocale - ), - dataValidatingFactory.exsitentialDepositIsNotViolated( - spending: spending, - balance: eqUilibriumTotalBalance ?? utilityBalance.or(.zero), - minimumBalance: minimumBalanceDecimal.or(.zero), - chainAsset: chainAsset, - locale: selectedLocale, - sendAllEnabled: sendAllEnabled, - proceedAction: { [weak self] in - self?.sendAllEnabled = true - self?.view?.switchEnableSendAllState(enabled: true) - }, - setMaxAction: { [weak self] in - self?.sendAllEnabled = true - self?.view?.switchEnableSendAllState(enabled: true) - self?.selectAmountPercentage(1) - }, - cancelAction: { [weak self] in - self?.sendAllEnabled = false - self?.view?.switchEnableSendAllState(enabled: false) - self?.selectAmountPercentage(0) - } - ) - ] - } - DataValidationRunner(validators: validators.compactMap { $0 }).runValidation { [weak self] in - switch validationCase { - case let .validateAmount(handler): - handler() - case .validateAll: - guard - let strongSelf = self, - let amount = sendAmountDecimal?.toSubstrateAmount(precision: Int16(chainAsset.asset.precision)) - else { return } - let appId: BigUInt? = chainAsset.chain.options?.contains(.checkAppId) == true ? .zero : nil - - let transfer = Transfer( - chainAsset: chainAsset, - amount: amount, - receiver: address, - tip: strongSelf.tipValue, - appId: appId - ) - strongSelf.router.presentConfirm( - from: strongSelf.view, - wallet: strongSelf.wallet, - chainAsset: chainAsset, - call: .transfer(transfer), - scamInfo: strongSelf.scamInfo, - feeViewModel: strongSelf.feeViewModel - ) - } - } - } - - private func validateXorlessTransfer() { - guard - let bokoloChainAsset = selectedChainAsset, - let xorBalance = utilityBalance, - let bokoloBalance = balance - else { - return - } - - var sendAmountDecimal = inputResult?.absoluteValue(from: bokoloBalance) - var balanceType: BalanceType - var feeAndTip: Decimal - var feeForValidation: Decimal? - if let xorFee = fee, xorBalance > xorFee { - balanceType = .orml(balance: bokoloBalance, utilityBalance: xorBalance) - feeAndTip = xorFee - feeForValidation = fee - } else { - balanceType = .utility(balance: bokoloBalance) - feeAndTip = bokoloSwapValues?.fee ?? .zero - sendAmountDecimal = (sendAmountDecimal ?? .zero) - (bokoloSwapValues?.fee ?? .zero) - feeForValidation = bokoloSwapValues?.fee - } - - DataValidationRunner(validators: [ - dataValidatingFactory.has(fee: feeForValidation, locale: selectedLocale, onError: { [weak self] in - guard let transfer = self?.prepareXorlessTransfer() else { - return - } - self?.interactor.didReceive(xorlessTransfer: transfer) - }), - dataValidatingFactory.canPayFeeAndAmount( - balanceType: balanceType, - feeAndTip: feeAndTip, - sendAmount: sendAmountDecimal, - locale: selectedLocale - ) - ]).runValidation { [weak self] in - guard - let strongSelf = self, - let transfer = strongSelf.prepareXorlessTransfer() - else { return } - - strongSelf.router.presentConfirm( - from: strongSelf.view, - wallet: strongSelf.wallet, - chainAsset: bokoloChainAsset, - call: .xorlessTransfer(transfer), - scamInfo: nil, - feeViewModel: strongSelf.feeViewModel - ) - } - } - - private func provideBokoloFeeViewModel(for chainAsset: ChainAsset) { - guard let balanceViewModelFactory = buildBalanceViewModelFactory(wallet: wallet, for: chainAsset) else { return } - - let priceData = prices.first(where: { $0.priceId == chainAsset.asset.priceId }) - let viewModel = bokoloSwapValues?.fee - .map { balanceViewModelFactory.balanceFromPrice($0, priceData: priceData, usageCase: .detailsCrypto) }? - .value(for: selectedLocale) - - view?.didReceive(feeViewModel: viewModel) - feeViewModel = viewModel - } - - // MARK: - QR handlers - - private func handleSora(qrInfo: SoraQRInfo) { - recipientAddress = qrInfo.address - Task { - let possibleChains = await self.interactor.getPossibleChains(for: qrInfo.address) - let chainAsset = possibleChains? - .first(where: { $0.isSora })?.chainAssets - .first(where: { $0.asset.currencyId == qrInfo.assetId }) - - guard let qrChainAsset = chainAsset else { - showUnsupportedAssetAlert() - return - } - - selectedChainAsset = qrChainAsset - - var isUserInteractiveAmount: Bool = true - if let qrAmount = Decimal(string: qrInfo.amount ?? "") { - inputResult = .absolute(qrAmount) - isUserInteractiveAmount = false - } - - let viewModel = viewModelFactory.buildRecipientViewModel( - address: qrInfo.address, - isValid: true, - canEditing: false - ) - - interactor.updateSubscriptions(for: qrChainAsset) - await MainActor.run { [isUserInteractiveAmount] in - view?.didReceive(viewModel: viewModel) - provideInputViewModel() - provideNetworkViewModel(for: qrChainAsset.chain, canEdit: false) - view?.didBlockUserInteractive(isUserInteractiveAmount: isUserInteractiveAmount) - } - } - } - - private func handleBokoloCash(qrInfo: BokoloCashQRInfo) { - recipientAddress = BokoloConstants.bokoloCasheBridgeAddress - Task { - let possibleChains = await self.interactor.getPossibleChains(for: BokoloConstants.bokoloCasheBridgeAddress) - #if F_DEV - let chainAsset = possibleChains? - .first(where: { chain in - switch chain.knownChainEquivalent { - case .soraTest: return true - default: return false - } - })?.chainAssets - .first(where: { $0.asset.currencyId == BokoloConstants.bokoloCashAssetCurrencyId }) - - #else - let chainAsset = possibleChains? - .first(where: { chain in - switch chain.knownChainEquivalent { - case .soraMain: return true - default: return false - } - })?.chainAssets - .first(where: { $0.asset.currencyId == BokoloConstants.bokoloCashAssetCurrencyId }) - #endif - - guard - let qrChainAsset = chainAsset, - let bokoloCashId = qrInfo.address.data(using: .utf8) - else { - showUnsupportedAssetAlert() - return - } - - selectedChainAsset = qrChainAsset - - var isUserInteractiveAmount: Bool = true - if var qrAmount = Decimal(string: qrInfo.transactionAmount ?? ""), qrAmount != .zero { - var drounded = Decimal() - NSDecimalRound(&drounded, &qrAmount, 2, .plain) - inputResult = .absolute(qrAmount) - isUserInteractiveAmount = false - } - - let viewModel = viewModelFactory.buildRecipientViewModel( - address: qrInfo.address, - isValid: true, - canEditing: false - ) - - interactor.updateSubscriptions(for: qrChainAsset) - self.bokoloCashId = bokoloCashId - await MainActor.run { [isUserInteractiveAmount] in - view?.didReceive(viewModel: viewModel) - provideInputViewModel() - let networkViewModel = SelectNetworkViewModel( - chainName: "Bokolo cash", - iconViewModel: BundleImageViewModel(image: R.image.bokolocash()), - canEdit: false - ) - view?.didReceive(selectNetworkViewModel: networkViewModel) - view?.didBlockUserInteractive(isUserInteractiveAmount: isUserInteractiveAmount) - } - } - } - - private func handleDesiredCrypto(qrInfo: DesiredCryptocurrencyQRInfo) { - recipientAddress = qrInfo.address - Task { - let possibleChains = await self.interactor.getPossibleChains(for: qrInfo.address) - let chainAsset = possibleChains? - .first(where: { $0.name.lowercased() == qrInfo.assetName.lowercased() })? - .chainAssets - .first(where: { $0.asset.isUtility }) - - selectedChainAsset = chainAsset - - if let qrAmount = Decimal(string: qrInfo.amount ?? "") { - inputResult = .absolute(qrAmount) - } - guard let chainAsset, wallet.isVisible(chainAsset: chainAsset) else { - await MainActor.run { - showUnsupportedAssetAlert() - } - return - } - - let viewModel = viewModelFactory.buildRecipientViewModel( - address: qrInfo.address, - isValid: true, - canEditing: false - ) - - interactor.updateSubscriptions(for: chainAsset) - await MainActor.run { - view?.didReceive(viewModel: viewModel) - provideInputViewModel() - provideNetworkViewModel(for: chainAsset.chain, canEdit: true) - } - } - } - - private func prepareXorlessTransfer() -> XorlessTransfer? { - do { - guard let selectedChainAsset = selectedChainAsset else { - throw ConvenienceError(error: "Can't prepare xorless transfer") - } - - let receiver: Data - if case .bokoloCash = initialData { - receiver = try AddressFactory.accountId( - from: BokoloConstants.bokoloCasheBridgeAddress, - chain: selectedChainAsset.chain - ) - } else if let recipientAddress = recipientAddress { - receiver = try AddressFactory.accountId(from: recipientAddress, chain: selectedChainAsset.chain) - } else { - receiver = AddressFactory.randomAccountId(for: selectedChainAsset.chain) - } - let filterMode: PolkaswapLiquidityFilterMode = .disabled - let maxAmountIn = ((bokoloSwapValues?.fee ?? .zero) * 1.5).toSubstrateAmount(precision: Int16(selectedChainAsset.asset.precision)) - - let available = (balance ?? .zero) - (bokoloSwapValues?.fee ?? .zero) - let amount = inputResult? - .absoluteValue(from: available) - .toSubstrateAmount(precision: Int16(selectedChainAsset.asset.precision)) - ?? .zero - let fee = fee?.toSubstrateAmount(precision: Int16(selectedChainAsset.asset.precision)) ?? .zero - let feeReserve = BigUInt(10_000_000_000_000_000) - - let dexId = String(bokoloSwapValues?.swap.dexId ?? 0) - let transfer = XorlessTransfer( - dexId: dexId, - assetId: SoraAssetId(wrappedValue: BokoloConstants.bokoloCashAssetCurrencyId), - receiver: receiver, - amount: amount, - desiredXorAmount: fee + feeReserve, - maxAmountIn: maxAmountIn ?? .zero, - selectedSourceTypes: [], - filterMode: PolkaswapCallFilterModeType(wrappedName: filterMode.code, wrappedValue: nil), - additionalData: bokoloCashId ?? Data() - ) - return transfer - } catch { - logger?.customError(error) - return nil - } - } - - private func checkXorFeePaymentPossibles() { - guard - let xorBalance = utilityBalance, - let xorFee = fee - else { - DispatchQueue.main.async { [weak self] in - self?.view?.didReceive(feeViewModel: nil) - } - return - } - - if xorBalance > xorFee { - provideFeeViewModel() - } else { - Task { - guard - let bokoloChainAsset = selectedChainAsset, - let xorChainAsset = interactor.getFeePaymentChainAsset(for: bokoloChainAsset), - let feeValue = xorFee.toSubstrateAmount(precision: Int16(xorChainAsset.asset.precision)) - else { - return - } - guard let bokoloSwap = try await interactor.convert( - chainAsset: xorChainAsset, - toChainAsset: bokoloChainAsset, - amount: feeValue - ) else { - return - } - let bokoloAmount = BigUInt(bokoloSwap.amount) ?? .zero - let bokoloFee = Decimal.fromSubstrateAmount(bokoloAmount, precision: Int16(bokoloChainAsset.asset.precision)) - bokoloSwapValues = (bokoloSwap, bokoloFee) - await MainActor.run { - provideBokoloFeeViewModel(for: bokoloChainAsset) - } - } - } - } -} - -// MARK: - SendViewOutput - -extension SendPresenter: SendViewOutput { - func didLoad(view: SendViewInput) { - self.view = view - interactor.setup(with: self) - - switch initialData { - case let .chainAsset(chainAsset): - selectedChainAsset = chainAsset - interactor.updateSubscriptions(for: chainAsset) - provideNetworkViewModel(for: chainAsset.chain, canEdit: true) - provideInputViewModel() - case let .address(address): - recipientAddress = address - Task { - let possibleChains = await interactor.getPossibleChains(for: address) - await MainActor.run { - guard possibleChains?.isNotEmpty == true else { - showIncorrectAddressAlert() - return - } - let viewModel = viewModelFactory.buildRecipientViewModel( - address: address, - isValid: true, - canEditing: true - ) - view.didReceive(viewModel: viewModel) - didReceive(possibleChains: possibleChains) - } - } - case let .soraMainnet(qrInfo): - handleSora(qrInfo: qrInfo) - case let .bokoloCash(bokoloCashQRInfo): - handleBokoloCash(qrInfo: bokoloCashQRInfo) - case let .desiredCryptocurrency(qrInfo): - handleDesiredCrypto(qrInfo: qrInfo) - } - } - - func selectAmountPercentage(_ percentage: Float, validate: Bool = true) { - inputResult = .rate(Decimal(Double(percentage))) - if let chainAsset = selectedChainAsset, validate { - validateInputData( - with: "", - chainAsset: chainAsset, - validationCase: .validateAmount(completionHandler: { [weak self] in - self?.inputResult = .rate(Decimal(Double(percentage))) - self?.provideAssetVewModel() - self?.provideInputViewModel() - }) - ) - } - - provideAssetVewModel() - provideInputViewModel() - guard let chainAsset = selectedChainAsset else { return } - refreshFee(for: chainAsset, address: recipientAddress) - } - - func updateAmount(_ newValue: Decimal) { - inputResult = .absolute(newValue) - if let chainAsset = selectedChainAsset { - validateInputData( - with: "", - chainAsset: chainAsset, - validationCase: .validateAmount(completionHandler: { [weak self] in - self?.provideAssetVewModel() - }) - ) - } - - provideAssetVewModel() - guard let chainAsset = selectedChainAsset else { return } - refreshFee(for: chainAsset, address: recipientAddress) - } - - func didTapBackButton() { - router.dismiss(view: view) - } - - func didTapContinueButton() { - guard let chainAsset = selectedChainAsset else { return } - if chainAsset.isBokolo { - validateXorlessTransfer() - } else { - validateAddress(with: chainAsset) { [weak self] address in - self?.validateInputData( - with: address, - chainAsset: chainAsset, - validationCase: .validateAll - ) - } - } - } - - func didTapPasteButton() { - if let address = UIPasteboard.general.string { - handle(newAddress: address) - } - } - - func didTapScanButton() { - router.presentScan(from: view, moduleOutput: self) - } - - func didTapHistoryButton() { - guard let chainAsset = selectedChainAsset else { return } - router.presentHistory(from: view, wallet: wallet, chainAsset: chainAsset, moduleOutput: self) - } - - func didTapSelectAsset() { - router.showSelectAsset( - from: view, - wallet: wallet, - selectedAssetId: selectedChainAsset?.asset.id, - chainAssets: nil, - output: self - ) - } - - func didTapSelectNetwork() { - guard let chainAsset = selectedChainAsset else { return } - interactor.defineAvailableChains(for: chainAsset.asset, wallet: wallet) { [weak self] chains in - guard let strongSelf = self, let availableChains = chains else { return } - strongSelf.router.showSelectNetwork( - from: strongSelf.view, - wallet: strongSelf.wallet, - selectedChainId: strongSelf.selectedChainAsset?.chain.chainId, - chainModels: availableChains, - delegate: strongSelf - ) - } - } - - func searchTextDidChanged(_ text: String) { - handle(newAddress: text) - } - - func didSwitchSendAll(_ enabled: Bool) { - sendAllEnabled = enabled - selectAmountPercentage(Float(enabled.intValue), validate: false) - } -} - -// MARK: - SendInteractorOutput - -extension SendPresenter: SendInteractorOutput { - func didReceiveAssetAccountInfo(assetAccountInfo: AssetAccountInfo?) { - self.assetAccountInfo = .value(assetAccountInfo) - frozenBalance = selectedChainAsset.flatMap { Decimal.fromSubstrateAmount((assetAccountInfo?.locked).or(.zero), precision: Int16($0.asset.precision)) } - provideAssetVewModel() - } - - func didReceiveAssetAccountInfoError(error: Error) { - assetAccountInfo = .value(nil) - provideAssetVewModel() - logger?.customError(error) - } - - func didReceive(scamInfo: ScamInfo?) { - self.scamInfo = scamInfo - view?.didReceive(scamInfo: scamInfo) - } - - func didReceiveAccountInfo(result: Result, for chainAsset: ChainAsset) { - switch result { - case let .success(accountInfo): - if chainAsset == selectedChainAsset { - balance = accountInfo.map { - Decimal.fromSubstrateAmount( - $0.data.sendAvailable, - precision: Int16(chainAsset.asset.precision) - ) - } ?? 0.0 - - if chainAsset.isUtility { - utilityBalance = balance - } - checkSendAllVisibility() - } else if let utilityAsset = interactor.getFeePaymentChainAsset(for: chainAsset), - utilityAsset == chainAsset { - utilityBalance = accountInfo.map { - Decimal.fromSubstrateAmount( - $0.data.sendAvailable, - precision: Int16(utilityAsset.asset.precision) - ) - } ?? 0 - } - if selectedChainAsset?.isBokolo == true { - provideAssetVewModel() - checkXorFeePaymentPossibles() - } else { - provideAssetVewModel() - } - case let .failure(error): - logger?.error("Did receive account info error: \(error)") - } - } - - func didReceiveMinimumBalance(result: Result) { - switch result { - case let .success(minimumBalance): - self.minimumBalance = minimumBalance - checkSendAllVisibility() - logger?.info("Did receive minimum balance \(minimumBalance)") - case let .failure(error): - checkSendAllVisibility() - logger?.error("Did receive minimum balance error: \(error)") - } - } - - func didReceivePriceData(result: Result) { - switch result { - case let .success(priceData): - if let priceData = priceData { - prices.append(priceData) - } - provideAssetVewModel() - handleFeeReceived() - provideTipViewModel() - case let .failure(error): - logger?.error("Did receive price error: \(error)") - } - } - - func didReceiveFee(result: Result) { - view?.didStopFeeCalculation() - switch result { - case let .success(dispatchInfo): - guard let chainAsset = selectedChainAsset, - let utilityAsset = interactor.getFeePaymentChainAsset(for: chainAsset) else { return } - fee = BigUInt(string: dispatchInfo.fee).map { - Decimal.fromSubstrateAmount($0, precision: Int16(utilityAsset.asset.precision)) - } ?? nil - - handleFeeReceived() - provideAssetVewModel() - - switch inputResult { - case .rate: - provideInputViewModel() - default: - break - } - case let .failure(error): - logger?.error("Did receive fee error: \(error)") - } - } - - func didReceiveTip(result: Result) { - view?.didStopTipCalculation() - switch result { - case let .success(tip): - guard let chainAsset = selectedChainAsset, let address = recipientAddress else { return } - self.tip = Decimal.fromSubstrateAmount(tip, precision: Int16(chainAsset.asset.precision)) - tipValue = tip - - provideTipViewModel() - refreshFee(for: chainAsset, address: address) - case let .failure(error): - logger?.error("Did receive tip error: \(error)") - // Even though no tip received, let's refresh fee, because we didn't load it at start - guard let chainAsset = selectedChainAsset, let address = recipientAddress else { return } - refreshFee(for: chainAsset, address: address) - } - } - - func didReceive(possibleChains: [ChainModel]?) { - guard let chains = possibleChains else { - router.showSelectAsset( - from: view, - wallet: wallet, - selectedAssetId: nil, - chainAssets: nil, - output: self - ) - return - } - if chains.count == 1, let selectedChain = chains.first { - defineOrSelectAsset(for: selectedChain) - } else { - state = .initialSelection - router.showSelectNetwork( - from: view, - wallet: wallet, - selectedChainId: nil, - chainModels: possibleChains, - delegate: self - ) - } - } - - func didReceive(eqTotalBalance: Decimal) { - eqUilibriumTotalBalance = eqTotalBalance - } - - func didReceiveDependencies(for chainAsset: ChainAsset) { - refreshFee(for: chainAsset, address: recipientAddress) - } -} - -// MARK: - ScanQRModuleOutput - -extension SendPresenter: ScanQRModuleOutput { - func didFinishWith(scanType: QRMatcherType) { - guard let qrInfo = scanType.qrInfo else { - return - } - - initialData = SendFlowInitialData(qrInfoType: qrInfo) - switch qrInfo { - case let .bokoloCash(qrInfo): - handleBokoloCash(qrInfo: qrInfo) - case let .sora(qrInfo): - handleSora(qrInfo: qrInfo) - case let .cex(qrInfo): - searchTextDidChanged(qrInfo.address) - case let .desiredCryptocurrency(qrInfo): - handleDesiredCrypto(qrInfo: qrInfo) - } - } -} - -// MARK: - ContactsModuleOutput - -extension SendPresenter: ContactsModuleOutput { - func didSelect(address: String) { - searchTextDidChanged(address) - } -} - -extension SendPresenter: SendModuleInput {} - -// MARK: - SelectAssetModuleOutput - -extension SendPresenter: SelectAssetModuleOutput { - func assetSelection(didCompleteWith chainAsset: ChainAsset?, contextTag _: Int?) { - selectedAsset = chainAsset?.asset - if let asset = chainAsset?.asset { - if let chain = chainAsset?.chain { - handle(selectedChain: chain) - } else { - state = .normal - interactor.defineAvailableChains(for: asset, wallet: wallet) { [weak self] chains in - if let availableChains = chains, let strongSelf = self { - if availableChains.count == 1 { - self?.handle(selectedChain: availableChains.first) - } else { - strongSelf.router.showSelectNetwork( - from: strongSelf.view, - wallet: strongSelf.wallet, - selectedChainId: strongSelf.selectedChainAsset?.chain.chainId, - chainModels: availableChains, - delegate: strongSelf - ) - } - } - } - } - } else if selectedChainAsset == nil { - router.dismiss(view: view) - } - } -} - -// MARK: - SelectNetworkDelegate - -extension SendPresenter: SelectNetworkDelegate { - func chainSelection( - view _: SelectNetworkViewInput, - didCompleteWith chain: ChainModel?, - contextTag _: Int? - ) { - handle(selectedChain: chain) - } -} - -// MARK: - Localizable - -extension SendPresenter: Localizable { - func applyLocalization() {} -} diff --git a/fearless/Modules/Send/SendProtocols.swift b/fearless/Modules/Send/SendProtocols.swift deleted file mode 100644 index 30cb15a880..0000000000 --- a/fearless/Modules/Send/SendProtocols.swift +++ /dev/null @@ -1,119 +0,0 @@ -import Foundation -import BigInt -import SSFModels - -typealias SendModuleCreationResult = (view: SendViewInput, input: SendModuleInput) - -protocol SendViewInput: ControllerBackedProtocol, LoadableViewProtocol { - func didReceive(assetBalanceViewModel: AssetBalanceViewModelProtocol?) - func didReceive(amountInputViewModel: IAmountInputViewModel?) - func didReceive(selectNetworkViewModel: SelectNetworkViewModel) - func didReceive(feeViewModel: BalanceViewModelProtocol?) - func didReceive(tipViewModel: TipViewModel?) - func didReceive(scamInfo: ScamInfo?) - func didStartFeeCalculation() - func didStopFeeCalculation() - func didStopTipCalculation() - func didReceive(viewModel: RecipientViewModel) - func didBlockUserInteractive(isUserInteractiveAmount: Bool) - func setInputAccessoryView(visible: Bool) - func setHistoryButton(isVisible: Bool) - func switchEnableSendAllState(enabled: Bool) - func switchEnableSendAllVisibility(isVisible: Bool) -} - -protocol SendViewOutput: AnyObject { - func didLoad(view: SendViewInput) - func didTapBackButton() - func didTapContinueButton() - func didTapScanButton() - func didTapHistoryButton() - func didTapPasteButton() - func didTapSelectAsset() - func didTapSelectNetwork() - func searchTextDidChanged(_ text: String) - func selectAmountPercentage(_ percentage: Float, validate: Bool) - func updateAmount(_ newValue: Decimal) - func didSwitchSendAll(_ enabled: Bool) -} - -protocol SendInteractorInput: AnyObject { - var dependencyContainer: SendDepencyContainer { get } - - func setup(with output: SendInteractorOutput) - func updateSubscriptions(for chainAsset: ChainAsset) - func defineAvailableChains( - for asset: AssetModel, - wallet: MetaAccountModel, - completionBlock: @escaping ([ChainModel]?) -> Void - ) - func estimateFee(for amount: BigUInt, tip: BigUInt?, for address: String?, chainAsset: ChainAsset) - func validate(address: String?, for chain: ChainModel) -> AddressValidationResult - func fetchScamInfo(for address: String) - func getFeePaymentChainAsset(for chainAsset: ChainAsset?) -> ChainAsset? - func getPossibleChains(for address: String) async -> [ChainModel]? - func calculateEquilibriumBalance(chainAsset: ChainAsset, amount: Decimal) - func didReceive(xorlessTransfer: XorlessTransfer) - func convert(chainAsset: ChainAsset, toChainAsset: ChainAsset, amount: BigUInt) async throws -> SwapValues? - func provideConstants(for chainAsset: ChainAsset) -} - -protocol SendInteractorOutput: AnyObject { - func didReceiveAccountInfo(result: Result, for chainAsset: ChainAsset) - func didReceiveMinimumBalance(result: Result) - func didReceivePriceData(result: Result) - func didReceiveFee(result: Result) - func didReceiveTip(result: Result) - func didReceive(scamInfo: ScamInfo?) - func didReceive(possibleChains: [ChainModel]?) - func didReceive(eqTotalBalance: Decimal) - func didReceiveDependencies(for chainAsset: ChainAsset) - func didReceiveAssetAccountInfo(assetAccountInfo: AssetAccountInfo?) - func didReceiveAssetAccountInfoError(error: Error) -} - -protocol SendRouterInput: SheetAlertPresentable, ErrorPresentable, BaseErrorPresentable, PresentDismissable { - func presentConfirm( - from view: ControllerBackedProtocol?, - wallet: MetaAccountModel, - chainAsset: ChainAsset, - call: SendConfirmTransferCall, - scamInfo: ScamInfo?, - feeViewModel: BalanceViewModelProtocol? - ) - func presentScan( - from view: ControllerBackedProtocol?, - moduleOutput: ScanQRModuleOutput - ) - - func presentHistory( - from view: ControllerBackedProtocol?, - wallet: MetaAccountModel, - chainAsset: ChainAsset, - moduleOutput: ContactsModuleOutput - ) - - func showSelectNetwork( - from view: ControllerBackedProtocol?, - wallet: MetaAccountModel, - selectedChainId: ChainModel.Id?, - chainModels: [ChainModel]?, - delegate: SelectNetworkDelegate? - ) - - func showSelectAsset( - from view: ControllerBackedProtocol?, - wallet: MetaAccountModel, - selectedAssetId: AssetModel.Id?, - chainAssets: [ChainAsset]?, - output: SelectAssetModuleOutput - ) - func showManageAsset( - from view: ControllerBackedProtocol?, - wallet: MetaAccountModel - ) -} - -protocol SendModuleInput: AnyObject {} - -protocol SendModuleOutput: AnyObject {} diff --git a/fearless/Modules/Send/ViewModel/SendViewModelFactory.swift b/fearless/Modules/Send/ViewModel/SendViewModelFactory.swift deleted file mode 100644 index 91e0c7a81c..0000000000 --- a/fearless/Modules/Send/ViewModel/SendViewModelFactory.swift +++ /dev/null @@ -1,41 +0,0 @@ -import SSFUtils -import SSFModels - -protocol SendViewModelFactoryProtocol { - func buildRecipientViewModel( - address: String, - isValid: Bool, - canEditing: Bool - ) -> RecipientViewModel - func buildNetworkViewModel(chain: ChainModel, canEdit: Bool) -> SelectNetworkViewModel -} - -final class SendViewModelFactory: SendViewModelFactoryProtocol { - private let iconGenerator: IconGenerating - - init(iconGenerator: IconGenerating) { - self.iconGenerator = iconGenerator - } - - func buildRecipientViewModel( - address: String, - isValid: Bool, - canEditing: Bool - ) -> RecipientViewModel { - RecipientViewModel( - address: address, - icon: try? iconGenerator.generateFromAddress(address), - isValid: isValid, - canEditing: canEditing - ) - } - - func buildNetworkViewModel(chain: ChainModel, canEdit: Bool) -> SelectNetworkViewModel { - let iconViewModel = chain.icon.map { RemoteImageViewModel(url: $0) } - return SelectNetworkViewModel( - chainName: chain.name, - iconViewModel: iconViewModel, - canEdit: canEdit - ) - } -} diff --git a/fearless/Modules/Staking/Analytics/Validators/AnalyticsValidatorsInteractor.swift b/fearless/Modules/Staking/Analytics/Validators/AnalyticsValidatorsInteractor.swift index c3043778f1..35941bcb91 100644 --- a/fearless/Modules/Staking/Analytics/Validators/AnalyticsValidatorsInteractor.swift +++ b/fearless/Modules/Staking/Analytics/Validators/AnalyticsValidatorsInteractor.swift @@ -4,6 +4,7 @@ import IrohaCrypto import SSFUtils import SSFModels import SSFRuntimeCodingService +import SSFCrypto final class AnalyticsValidatorsInteractor { weak var presenter: AnalyticsValidatorsInteractorOutputProtocol! diff --git a/fearless/Modules/Staking/Analytics/Validators/ViewModel/AnalyticsValidatorsViewModelFactory.swift b/fearless/Modules/Staking/Analytics/Validators/ViewModel/AnalyticsValidatorsViewModelFactory.swift index 07d7074948..70d783682b 100644 --- a/fearless/Modules/Staking/Analytics/Validators/ViewModel/AnalyticsValidatorsViewModelFactory.swift +++ b/fearless/Modules/Staking/Analytics/Validators/ViewModel/AnalyticsValidatorsViewModelFactory.swift @@ -3,6 +3,7 @@ import SSFUtils import BigInt import IrohaCrypto import SSFModels +import SSFCrypto // swiftlint:disable function_body_length final class AnalyticsValidatorsViewModelFactory: AnalyticsValidatorsViewModelFactoryProtocol { diff --git a/fearless/Modules/Staking/ControllerAccount/ControllerAccountInteractor.swift b/fearless/Modules/Staking/ControllerAccount/ControllerAccountInteractor.swift index f0de4b31c3..94fa335888 100644 --- a/fearless/Modules/Staking/ControllerAccount/ControllerAccountInteractor.swift +++ b/fearless/Modules/Staking/ControllerAccount/ControllerAccountInteractor.swift @@ -5,6 +5,7 @@ import IrohaCrypto import SSFUtils import SSFModels import SSFRuntimeCodingService +import SSFCrypto final class ControllerAccountInteractor { weak var presenter: ControllerAccountInteractorOutputProtocol! diff --git a/fearless/Modules/Staking/ControllerAccountConfirmation/ControllerAccountConfirmationInteractor.swift b/fearless/Modules/Staking/ControllerAccountConfirmation/ControllerAccountConfirmationInteractor.swift index a440017d61..a7b2e8866d 100644 --- a/fearless/Modules/Staking/ControllerAccountConfirmation/ControllerAccountConfirmationInteractor.swift +++ b/fearless/Modules/Staking/ControllerAccountConfirmation/ControllerAccountConfirmationInteractor.swift @@ -4,6 +4,7 @@ import IrohaCrypto import SSFUtils import SSFModels import SSFRuntimeCodingService +import SSFCrypto final class ControllerAccountConfirmationInteractor { weak var presenter: ControllerAccountConfirmationInteractorOutputProtocol! diff --git a/fearless/Modules/Staking/Model/ElectedValidatorInfo.swift b/fearless/Modules/Staking/Model/ElectedValidatorInfo.swift index 071dbc2236..3d2922d9f2 100644 --- a/fearless/Modules/Staking/Model/ElectedValidatorInfo.swift +++ b/fearless/Modules/Staking/Model/ElectedValidatorInfo.swift @@ -1,5 +1,7 @@ import Foundation import IrohaCrypto +import SSFModels +import SSFCrypto struct ElectedValidatorInfo: Equatable, Hashable, Recommendable { let address: String diff --git a/fearless/Modules/Staking/Model/ExistingBonding.swift b/fearless/Modules/Staking/Model/ExistingBonding.swift index 81ee48bac7..4b92a7c38f 100644 --- a/fearless/Modules/Staking/Model/ExistingBonding.swift +++ b/fearless/Modules/Staking/Model/ExistingBonding.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels struct ExistingBonding { let stashAddress: AccountAddress diff --git a/fearless/Modules/Staking/Model/InitiatedBonding.swift b/fearless/Modules/Staking/Model/InitiatedBonding.swift index fe1ed16f69..827a508866 100644 --- a/fearless/Modules/Staking/Model/InitiatedBonding.swift +++ b/fearless/Modules/Staking/Model/InitiatedBonding.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels struct InitiatedBonding { let amount: Decimal diff --git a/fearless/Modules/Staking/Model/RewardDestination.swift b/fearless/Modules/Staking/Model/RewardDestination.swift index 1e1c533fe8..0b3206953f 100644 --- a/fearless/Modules/Staking/Model/RewardDestination.swift +++ b/fearless/Modules/Staking/Model/RewardDestination.swift @@ -1,5 +1,6 @@ import Foundation import IrohaCrypto +import SSFModels enum RewardDestination { case restake diff --git a/fearless/Modules/Staking/Operations/IdentityOperationFactory.swift b/fearless/Modules/Staking/Operations/IdentityOperationFactory.swift index 1c1b9226f1..1578cd12e0 100644 --- a/fearless/Modules/Staking/Operations/IdentityOperationFactory.swift +++ b/fearless/Modules/Staking/Operations/IdentityOperationFactory.swift @@ -4,6 +4,7 @@ import RobinHood import IrohaCrypto import SSFModels import SSFRuntimeCodingService +import SSFCrypto protocol IdentityOperationFactoryProtocol { func createIdentityWrapper( diff --git a/fearless/Modules/Staking/Operations/SlashesOperationFactory.swift b/fearless/Modules/Staking/Operations/SlashesOperationFactory.swift index caa4f89807..a5688d259c 100644 --- a/fearless/Modules/Staking/Operations/SlashesOperationFactory.swift +++ b/fearless/Modules/Staking/Operations/SlashesOperationFactory.swift @@ -4,6 +4,7 @@ import IrohaCrypto import SSFUtils import SSFModels import SSFRuntimeCodingService +import SSFCrypto protocol SlashesOperationFactoryProtocol { func createSlashingSpansOperationForStash( diff --git a/fearless/Modules/Staking/Operations/ValidatorOperationFactory/ParachainCollatorOperationFactory.swift b/fearless/Modules/Staking/Operations/ValidatorOperationFactory/ParachainCollatorOperationFactory.swift index 72f604e62c..4ff237d243 100644 --- a/fearless/Modules/Staking/Operations/ValidatorOperationFactory/ParachainCollatorOperationFactory.swift +++ b/fearless/Modules/Staking/Operations/ValidatorOperationFactory/ParachainCollatorOperationFactory.swift @@ -1,9 +1,11 @@ import Foundation +import IrohaCrypto import SSFUtils import RobinHood import BigInt import SSFModels import SSFRuntimeCodingService +import SSFCrypto final class ParachainCollatorOperationFactory { private let asset: AssetModel @@ -818,3 +820,13 @@ extension ParachainCollatorOperationFactory { return CompoundOperationWrapper(targetOperation: mapOperation, dependencies: dependencies) } } + +private extension AccountAddress { + func toAccountId() throws -> AccountId { + if hasPrefix("0x") { + return try AccountId(hexStringSSF: self) + } else { + return try SS58AddressFactory().accountId(from: self) + } + } +} diff --git a/fearless/Modules/Staking/Operations/ValidatorOperationFactory/RelaychainValidatorOperationFactory.swift b/fearless/Modules/Staking/Operations/ValidatorOperationFactory/RelaychainValidatorOperationFactory.swift index 80642c6195..9546a98cdd 100644 --- a/fearless/Modules/Staking/Operations/ValidatorOperationFactory/RelaychainValidatorOperationFactory.swift +++ b/fearless/Modules/Staking/Operations/ValidatorOperationFactory/RelaychainValidatorOperationFactory.swift @@ -4,6 +4,7 @@ import IrohaCrypto import SSFUtils import SSFModels import SSFRuntimeCodingService +import SSFCrypto // swiftlint:disable type_body_length final class RelaychainValidatorOperationFactory { @@ -149,12 +150,6 @@ final class RelaychainValidatorOperationFactory { } let runtimeOperation = runtimeService.fetchCoderFactoryOperation() - - let oldArgumentExists = runtimeService.snapshot?.metadata.getConstant( - in: ConstantCodingPath.maxNominatorRewardedPerValidator.moduleName, - constantName: ConstantCodingPath.maxNominatorRewardedPerValidator.constantName - ) != nil - let maxNominatorsOperation: BaseOperation = createConstOperation( dependingOn: runtimeOperation, @@ -264,16 +259,8 @@ final class RelaychainValidatorOperationFactory { } let chainFormat = chain.chainFormat - let runtimeOperation = runtimeService.fetchCoderFactoryOperation() - - let hasNominatorsLimit = runtimeService.snapshot?.metadata.getConstant( - in: ConstantCodingPath.maxNominatorRewardedPerValidator.moduleName, - constantName: ConstantCodingPath.maxNominatorRewardedPerValidator.constantName - ) != nil - let rewardCalculatorOperation = rewardService.fetchCalculatorOperation() - let maxNominatorsOperation: BaseOperation = createConstOperation( dependingOn: runtimeOperation, path: .maxNominatorRewardedPerValidator @@ -346,16 +333,8 @@ final class RelaychainValidatorOperationFactory { let chain = chain let chainFormat = chain.chainFormat - let rewardCalculatorOperation = rewardService.fetchCalculatorOperation() - let runtimeOperation = runtimeService.fetchCoderFactoryOperation() - - let oldArgumentExists = runtimeService.snapshot?.metadata.getConstant( - in: ConstantCodingPath.maxNominatorRewardedPerValidator.moduleName, - constantName: ConstantCodingPath.maxNominatorRewardedPerValidator.constantName - ) != nil - let maxNominatorsOperation: BaseOperation = createConstOperation( dependingOn: runtimeOperation, path: .maxNominatorRewardedPerValidator @@ -687,10 +666,6 @@ extension RelaychainValidatorOperationFactory: ValidatorOperationFactoryProtocol } func fetchAllValidators() -> CompoundOperationWrapper<[ElectedValidatorInfo]> { - guard let connection = chainRegistry.getConnection(for: chain.chainId) else { - return CompoundOperationWrapper.createWithError(ChainRegistryError.connectionUnavailable) - } - guard let runtimeService = chainRegistry.getRuntimeProvider(for: chain.chainId) else { return CompoundOperationWrapper.createWithError(ChainRegistryError.runtimeMetadaUnavailable) } @@ -702,11 +677,6 @@ extension RelaychainValidatorOperationFactory: ValidatorOperationFactoryProtocol path: .slashDeferDuration ) - let oldArgumentExists = runtimeService.snapshot?.metadata.getConstant( - in: ConstantCodingPath.maxNominatorRewardedPerValidator.moduleName, - constantName: ConstantCodingPath.maxNominatorRewardedPerValidator.constantName - ) != nil - let maxNominatorsOperation: BaseOperation = createConstOperation( dependingOn: runtimeOperation, @@ -738,7 +708,7 @@ extension RelaychainValidatorOperationFactory: ValidatorOperationFactoryProtocol storagePath: .validatorPrefs, type: .accountId ) - accountId = try key.toAccountId() + accountId = try key.toAccountId(using: self.chain.chainFormat) } else { let extractor = StorageKeyDataExtractor(runtimeService: runtimeService) let key: AccountId = try await extractor.extractKey( @@ -817,10 +787,6 @@ extension RelaychainValidatorOperationFactory: ValidatorOperationFactoryProtocol // swiftlint:disable function_body_length func allElectedOperation() -> CompoundOperationWrapper<[ElectedValidatorInfo]> { - guard let connection = chainRegistry.getConnection(for: chain.chainId) else { - return CompoundOperationWrapper.createWithError(ChainRegistryError.connectionUnavailable) - } - guard let runtimeService = chainRegistry.getRuntimeProvider(for: chain.chainId) else { return CompoundOperationWrapper.createWithError(ChainRegistryError.runtimeMetadaUnavailable) } @@ -833,11 +799,6 @@ extension RelaychainValidatorOperationFactory: ValidatorOperationFactoryProtocol path: .slashDeferDuration ) - let oldArgumentExists = runtimeService.snapshot?.metadata.getConstant( - in: ConstantCodingPath.maxNominatorRewardedPerValidator.moduleName, - constantName: ConstantCodingPath.maxNominatorRewardedPerValidator.constantName - ) != nil - let maxNominatorsOperation: BaseOperation = createConstOperation( dependingOn: runtimeOperation, @@ -964,14 +925,6 @@ extension RelaychainValidatorOperationFactory: ValidatorOperationFactoryProtocol func activeValidatorsOperation( for nominatorAddress: AccountAddress ) -> CompoundOperationWrapper<[SelectedValidatorInfo]> { - guard let connection = chainRegistry.getConnection(for: chain.chainId) else { - return CompoundOperationWrapper.createWithError(ChainRegistryError.connectionUnavailable) - } - - guard let runtimeService = chainRegistry.getRuntimeProvider(for: chain.chainId) else { - return CompoundOperationWrapper.createWithError(ChainRegistryError.runtimeMetadaUnavailable) - } - let eraValidatorsOperation = eraValidatorService.fetchInfoOperation() let activeValidatorsStakeInfoWrapper = createActiveValidatorsStakeInfo( for: nominatorAddress, @@ -1028,14 +981,6 @@ extension RelaychainValidatorOperationFactory: ValidatorOperationFactoryProtocol func pendingValidatorsOperation( for accountIds: [AccountId] ) -> CompoundOperationWrapper<[SelectedValidatorInfo]> { - guard let connection = chainRegistry.getConnection(for: chain.chainId) else { - return CompoundOperationWrapper.createWithError(ChainRegistryError.connectionUnavailable) - } - - guard let runtimeService = chainRegistry.getRuntimeProvider(for: chain.chainId) else { - return CompoundOperationWrapper.createWithError(ChainRegistryError.runtimeMetadaUnavailable) - } - let eraValidatorsOperation = eraValidatorService.fetchInfoOperation() let validatorsStakeInfoWrapper = createValidatorsStakeInfoWrapper( for: accountIds, @@ -1081,10 +1026,6 @@ extension RelaychainValidatorOperationFactory: ValidatorOperationFactoryProtocol func wannabeValidatorsOperation( for accountIdList: [AccountId] ) -> CompoundOperationWrapper<[SelectedValidatorInfo]> { - guard let connection = chainRegistry.getConnection(for: chain.chainId) else { - return CompoundOperationWrapper.createWithError(ChainRegistryError.connectionUnavailable) - } - guard let runtimeService = chainRegistry.getRuntimeProvider(for: chain.chainId) else { return CompoundOperationWrapper.createWithError(ChainRegistryError.runtimeMetadaUnavailable) } diff --git a/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Flow/Parachain/SelectValidatorsConfirmParachainStrategy.swift b/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Flow/Parachain/SelectValidatorsConfirmParachainStrategy.swift index 2949c38d75..5f099913f3 100644 --- a/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Flow/Parachain/SelectValidatorsConfirmParachainStrategy.swift +++ b/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Flow/Parachain/SelectValidatorsConfirmParachainStrategy.swift @@ -2,6 +2,7 @@ import Foundation import RobinHood import SSFModels import SSFRuntimeCodingService +import SSFCrypto protocol SelectValidatorsConfirmParachainStrategyOutput: SelectValidatorsConfirmStrategyOutput { func didReceiveAtStake(snapshot: ParachainStakingCollatorSnapshot?) diff --git a/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Flow/PoolExisting/SelectValidatorsConfirmPoolViewModelState.swift b/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Flow/PoolExisting/SelectValidatorsConfirmPoolViewModelState.swift index c539e2904d..55b33698c3 100644 --- a/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Flow/PoolExisting/SelectValidatorsConfirmPoolViewModelState.swift +++ b/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Flow/PoolExisting/SelectValidatorsConfirmPoolViewModelState.swift @@ -94,7 +94,7 @@ final class SelectValidatorsConfirmPoolExistingViewModelState: SelectValidatorsC return builder } - let nominateCall = try strongSelf.callFactory.poolNominate(poolId: poolId, targets: targets) + let nominateCall = try strongSelf.callFactory.poolNominate(poolId: poolId, targets: targets, chainFormat: strongSelf.chainAsset.chain.chainFormat) return try builder .adding(call: nominateCall) diff --git a/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Flow/PoolInitiated/SelectValidatorsConfirmPoolInitiatedViewModelState.swift b/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Flow/PoolInitiated/SelectValidatorsConfirmPoolInitiatedViewModelState.swift index 5d211065cc..78f22d16cf 100644 --- a/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Flow/PoolInitiated/SelectValidatorsConfirmPoolInitiatedViewModelState.swift +++ b/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Flow/PoolInitiated/SelectValidatorsConfirmPoolInitiatedViewModelState.swift @@ -84,7 +84,7 @@ final class SelectValidatorsConfirmPoolInitiatedViewModelState: SelectValidators return builder } - let nominateCall = try strongSelf.callFactory.poolNominate(poolId: poolId, targets: targets) + let nominateCall = try strongSelf.callFactory.poolNominate(poolId: poolId, targets: targets, chainFormat: strongSelf.chainAsset.chain.chainFormat) return try builder .adding(call: nominateCall) diff --git a/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Model/SelectValidatorsConfirmationModel.swift b/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Model/SelectValidatorsConfirmationModel.swift index ea3b866541..f4bd3bbe49 100644 --- a/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Model/SelectValidatorsConfirmationModel.swift +++ b/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Model/SelectValidatorsConfirmationModel.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels struct SelectValidatorsConfirmRelaychainModel { let wallet: DisplayAddress diff --git a/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsStart/Flow/Parachain/SelectValidatorsStartParachainStrategy.swift b/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsStart/Flow/Parachain/SelectValidatorsStartParachainStrategy.swift index a4019ac30f..02fed9fde4 100644 --- a/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsStart/Flow/Parachain/SelectValidatorsStartParachainStrategy.swift +++ b/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsStart/Flow/Parachain/SelectValidatorsStartParachainStrategy.swift @@ -2,6 +2,7 @@ import Foundation import RobinHood import SSFModels import SSFRuntimeCodingService +import SSFCrypto protocol SelectValidatorsStartParachainStrategyOutput: AnyObject { func didReceiveMaxDelegations(result: Result) diff --git a/fearless/Modules/Staking/SelectValidatorsFlow/ValidatorInfo/Flow/Pool/ValidatorInfoPoolStrategy.swift b/fearless/Modules/Staking/SelectValidatorsFlow/ValidatorInfo/Flow/Pool/ValidatorInfoPoolStrategy.swift index 4601ce7205..d8c6b32aa2 100644 --- a/fearless/Modules/Staking/SelectValidatorsFlow/ValidatorInfo/Flow/Pool/ValidatorInfoPoolStrategy.swift +++ b/fearless/Modules/Staking/SelectValidatorsFlow/ValidatorInfo/Flow/Pool/ValidatorInfoPoolStrategy.swift @@ -1,6 +1,8 @@ import Foundation import RobinHood import SSFModels +import SSFAccountManagment +import SSFCrypto protocol ValidatorInfoPoolStrategyOutput: AnyObject { func didReceiveValidatorInfo(_ validatorInfo: ValidatorInfoProtocol) diff --git a/fearless/Modules/Staking/SelectValidatorsFlow/ValidatorInfo/Flow/Relaychain/ValidatorInfoRelaychainStrategy.swift b/fearless/Modules/Staking/SelectValidatorsFlow/ValidatorInfo/Flow/Relaychain/ValidatorInfoRelaychainStrategy.swift index 4bc00a523e..06e9d3842a 100644 --- a/fearless/Modules/Staking/SelectValidatorsFlow/ValidatorInfo/Flow/Relaychain/ValidatorInfoRelaychainStrategy.swift +++ b/fearless/Modules/Staking/SelectValidatorsFlow/ValidatorInfo/Flow/Relaychain/ValidatorInfoRelaychainStrategy.swift @@ -1,6 +1,8 @@ import Foundation import RobinHood import SSFModels +import SSFAccountManagment +import SSFCrypto protocol ValidatorInfoRelaychainStrategyOutput: AnyObject { func didReceiveValidatorInfo(_ validatorInfo: ValidatorInfoProtocol) diff --git a/fearless/Modules/Staking/SelectValidatorsFlow/ValidatorSearch/ValidatorSearchPresenter.swift b/fearless/Modules/Staking/SelectValidatorsFlow/ValidatorSearch/ValidatorSearchPresenter.swift index ae67f35dd1..f0a6b24b7d 100644 --- a/fearless/Modules/Staking/SelectValidatorsFlow/ValidatorSearch/ValidatorSearchPresenter.swift +++ b/fearless/Modules/Staking/SelectValidatorsFlow/ValidatorSearch/ValidatorSearchPresenter.swift @@ -1,6 +1,7 @@ import SoraFoundation import IrohaCrypto import SSFModels +import SSFCrypto final class ValidatorSearchPresenter { weak var view: ValidatorSearchViewProtocol? diff --git a/fearless/Modules/Staking/SelectValidatorsFlow/YourValidatorList/Flows/Relaychain/YourValidatorListRelaychainStrategy.swift b/fearless/Modules/Staking/SelectValidatorsFlow/YourValidatorList/Flows/Relaychain/YourValidatorListRelaychainStrategy.swift index b6263c49da..b999f052da 100644 --- a/fearless/Modules/Staking/SelectValidatorsFlow/YourValidatorList/Flows/Relaychain/YourValidatorListRelaychainStrategy.swift +++ b/fearless/Modules/Staking/SelectValidatorsFlow/YourValidatorList/Flows/Relaychain/YourValidatorListRelaychainStrategy.swift @@ -2,6 +2,7 @@ import Foundation import RobinHood import SSFModels import SSFRuntimeCodingService +import SSFCrypto protocol YourValidatorListRelaychainStrategyOutput { func didReceiveValidators(result: Result) diff --git a/fearless/Modules/Staking/StakingAmount/StakingAmountViewFactory.swift b/fearless/Modules/Staking/StakingAmount/StakingAmountViewFactory.swift index d19b211ebc..8f8079ff6d 100644 --- a/fearless/Modules/Staking/StakingAmount/StakingAmountViewFactory.swift +++ b/fearless/Modules/Staking/StakingAmount/StakingAmountViewFactory.swift @@ -187,8 +187,7 @@ final class StakingAmountViewFactory: StakingAmountViewFactoryProtocol { let existentialDepositService = ExistentialDepositService( operationManager: operationManager, - chainRegistry: chainRegistry, - chainId: chainAsset.chain.chainId + chainRegistry: chainRegistry ) switch flow { diff --git a/fearless/Modules/Staking/StakingBalance/Flow/Relaychain/StakingBalanceRelaychainStrategy.swift b/fearless/Modules/Staking/StakingBalance/Flow/Relaychain/StakingBalanceRelaychainStrategy.swift index 8d990054e2..3564c2e710 100644 --- a/fearless/Modules/Staking/StakingBalance/Flow/Relaychain/StakingBalanceRelaychainStrategy.swift +++ b/fearless/Modules/Staking/StakingBalance/Flow/Relaychain/StakingBalanceRelaychainStrategy.swift @@ -3,6 +3,7 @@ import RobinHood import SSFUtils import SSFModels import SSFRuntimeCodingService +import SSFCrypto protocol StakingBalanceRelaychainStrategyOutput: AnyObject { func didReceive(ledgerResult: Result) diff --git a/fearless/Modules/Staking/StakingBalance/Flow/Relaychain/StakingBalanceRelaychainViewModelState.swift b/fearless/Modules/Staking/StakingBalance/Flow/Relaychain/StakingBalanceRelaychainViewModelState.swift index e51a1880af..0e5bbd765a 100644 --- a/fearless/Modules/Staking/StakingBalance/Flow/Relaychain/StakingBalanceRelaychainViewModelState.swift +++ b/fearless/Modules/Staking/StakingBalance/Flow/Relaychain/StakingBalanceRelaychainViewModelState.swift @@ -1,5 +1,6 @@ import Foundation import SoraFoundation +import SSFModels final class StakingBalanceRelaychainViewModelState { var stateListener: StakingBalanceModelStateListener? diff --git a/fearless/Modules/Staking/StakingBondMore/StakingBondMoreViewFactory.swift b/fearless/Modules/Staking/StakingBondMore/StakingBondMoreViewFactory.swift index 6b58aa13d5..81ef8e100b 100644 --- a/fearless/Modules/Staking/StakingBondMore/StakingBondMoreViewFactory.swift +++ b/fearless/Modules/Staking/StakingBondMore/StakingBondMoreViewFactory.swift @@ -106,8 +106,7 @@ struct StakingBondMoreViewFactory { let existentialDepositService = ExistentialDepositService( operationManager: operationManager, - chainRegistry: chainRegistry, - chainId: chainAsset.chain.chainId + chainRegistry: chainRegistry ) let feeProxy = ExtrinsicFeeProxy() diff --git a/fearless/Modules/Staking/StakingBondMoreConfirmation/Flow/Relaychain/StakingBondMoreConfirmationRelaychainStrategy.swift b/fearless/Modules/Staking/StakingBondMoreConfirmation/Flow/Relaychain/StakingBondMoreConfirmationRelaychainStrategy.swift index 71456eb925..9522142987 100644 --- a/fearless/Modules/Staking/StakingBondMoreConfirmation/Flow/Relaychain/StakingBondMoreConfirmationRelaychainStrategy.swift +++ b/fearless/Modules/Staking/StakingBondMoreConfirmation/Flow/Relaychain/StakingBondMoreConfirmationRelaychainStrategy.swift @@ -4,6 +4,7 @@ import SSFUtils import SoraKeystore import SSFModels import SSFRuntimeCodingService +import SSFCrypto protocol StakingBondMoreConfirmationRelaychainStrategyOutput: AnyObject { func didReceiveAccountInfo(result: Result) diff --git a/fearless/Modules/Staking/StakingMain/Flow/Relaychain/StakingMainRelaychainStrategy.swift b/fearless/Modules/Staking/StakingMain/Flow/Relaychain/StakingMainRelaychainStrategy.swift index 03a6f6081c..e46d68ca03 100644 --- a/fearless/Modules/Staking/StakingMain/Flow/Relaychain/StakingMainRelaychainStrategy.swift +++ b/fearless/Modules/Staking/StakingMain/Flow/Relaychain/StakingMainRelaychainStrategy.swift @@ -1,5 +1,6 @@ import Foundation import BigInt +import SSFModels protocol StakingMainRelaychainStrategyOutput: AnyObject { func didReceive(totalReward: Result) diff --git a/fearless/Modules/Staking/StakingMain/StakingMainInteractor+InputProtocol.swift b/fearless/Modules/Staking/StakingMain/StakingMainInteractor+InputProtocol.swift index 33008b49e3..78420243dd 100644 --- a/fearless/Modules/Staking/StakingMain/StakingMainInteractor+InputProtocol.swift +++ b/fearless/Modules/Staking/StakingMain/StakingMainInteractor+InputProtocol.swift @@ -2,6 +2,7 @@ import Foundation import SoraFoundation import RobinHood import SSFModels +import SSFCrypto extension StakingMainInteractor: StakingMainInteractorInputProtocol { func changeActiveState(_ isActive: Bool) { diff --git a/fearless/Modules/Staking/StakingMain/StakingMainInteractor+Subscription.swift b/fearless/Modules/Staking/StakingMain/StakingMainInteractor+Subscription.swift index 86278f1d0a..5718b35a68 100644 --- a/fearless/Modules/Staking/StakingMain/StakingMainInteractor+Subscription.swift +++ b/fearless/Modules/Staking/StakingMain/StakingMainInteractor+Subscription.swift @@ -1,9 +1,10 @@ import Foundation import RobinHood import BigInt - +import SSFAccountManagment import SSFUtils import SSFModels +import SSFCrypto extension StakingMainInteractor { func handle(stashItem: StashItem?) { diff --git a/fearless/Modules/Staking/StakingMain/StateMachine/States/NominatorState+Status.swift b/fearless/Modules/Staking/StakingMain/StateMachine/States/NominatorState+Status.swift index 27af28da1e..854453db1f 100644 --- a/fearless/Modules/Staking/StakingMain/StateMachine/States/NominatorState+Status.swift +++ b/fearless/Modules/Staking/StakingMain/StateMachine/States/NominatorState+Status.swift @@ -1,6 +1,7 @@ import Foundation import IrohaCrypto import BigInt +import SSFCrypto extension NominatorState { var status: NominationViewStatus { diff --git a/fearless/Modules/Staking/StakingMain/StateMachine/States/ValidatorState+Status.swift b/fearless/Modules/Staking/StakingMain/StateMachine/States/ValidatorState+Status.swift index bb018823bb..2c3cc021c9 100644 --- a/fearless/Modules/Staking/StakingMain/StateMachine/States/ValidatorState+Status.swift +++ b/fearless/Modules/Staking/StakingMain/StateMachine/States/ValidatorState+Status.swift @@ -2,6 +2,7 @@ import Foundation import IrohaCrypto import BigInt import SSFModels +import SSFCrypto extension ValidatorState { var status: ValidationViewStatus { diff --git a/fearless/Modules/Staking/StakingPayoutConfirmation/Floww/Pool/StakingPayoutConfirmationPoolViewModelFactory.swift b/fearless/Modules/Staking/StakingPayoutConfirmation/Floww/Pool/StakingPayoutConfirmationPoolViewModelFactory.swift index 981c3fc2e5..5382b6ab41 100644 --- a/fearless/Modules/Staking/StakingPayoutConfirmation/Floww/Pool/StakingPayoutConfirmationPoolViewModelFactory.swift +++ b/fearless/Modules/Staking/StakingPayoutConfirmation/Floww/Pool/StakingPayoutConfirmationPoolViewModelFactory.swift @@ -2,6 +2,7 @@ import Foundation import SSFUtils import SoraFoundation import SSFModels +import SSFCrypto final class StakingPayoutConfirmationPoolViewModelFactory { private let chainAsset: ChainAsset diff --git a/fearless/Modules/Staking/StakingPayoutConfirmation/Floww/Relaychain/StakingPayoutConfirmationViewModelFactory.swift b/fearless/Modules/Staking/StakingPayoutConfirmation/Floww/Relaychain/StakingPayoutConfirmationViewModelFactory.swift index 1fdbaf8194..e7bb07c630 100644 --- a/fearless/Modules/Staking/StakingPayoutConfirmation/Floww/Relaychain/StakingPayoutConfirmationViewModelFactory.swift +++ b/fearless/Modules/Staking/StakingPayoutConfirmation/Floww/Relaychain/StakingPayoutConfirmationViewModelFactory.swift @@ -2,6 +2,7 @@ import Foundation import SSFUtils import SoraFoundation import SSFModels +import SSFCrypto final class StakingPayoutConfirmationRelaychainViewModelFactory { private let chainAsset: ChainAsset diff --git a/fearless/Modules/Staking/StakingPayoutConfirmation/Floww/Relaychain/StakingPayoutConfirmationrelaychainStrategy.swift b/fearless/Modules/Staking/StakingPayoutConfirmation/Floww/Relaychain/StakingPayoutConfirmationrelaychainStrategy.swift index 5fad7854d0..3700bf4218 100644 --- a/fearless/Modules/Staking/StakingPayoutConfirmation/Floww/Relaychain/StakingPayoutConfirmationrelaychainStrategy.swift +++ b/fearless/Modules/Staking/StakingPayoutConfirmation/Floww/Relaychain/StakingPayoutConfirmationrelaychainStrategy.swift @@ -3,6 +3,7 @@ import RobinHood import BigInt import SSFModels import SSFRuntimeCodingService +import SSFCrypto protocol StakingPayoutConfirmationrelaychainStrategyOutput { func didRecieve(account: ChainAccountResponse, rewardAmount: Decimal) diff --git a/fearless/Modules/Staking/StakingRebondConfirmation/Flow/Parachain/StakingRebondConfirmationParachainViewModelFactory.swift b/fearless/Modules/Staking/StakingRebondConfirmation/Flow/Parachain/StakingRebondConfirmationParachainViewModelFactory.swift index 0f5f8c58bd..d14bc1ae8c 100644 --- a/fearless/Modules/Staking/StakingRebondConfirmation/Flow/Parachain/StakingRebondConfirmationParachainViewModelFactory.swift +++ b/fearless/Modules/Staking/StakingRebondConfirmation/Flow/Parachain/StakingRebondConfirmationParachainViewModelFactory.swift @@ -2,6 +2,7 @@ import Foundation import SoraFoundation import SSFUtils import SSFModels +import SSFCrypto final class StakingRebondConfirmationParachainViewModelFactory: StakingRebondConfirmationViewModelFactoryProtocol { private let balanceViewModelFactory: BalanceViewModelFactoryProtocol diff --git a/fearless/Modules/Staking/StakingRebondConfirmation/Flow/Relaychain/StakingRebondConfirmationRelaychainStrategy.swift b/fearless/Modules/Staking/StakingRebondConfirmation/Flow/Relaychain/StakingRebondConfirmationRelaychainStrategy.swift index 1715173ff8..967545f5ae 100644 --- a/fearless/Modules/Staking/StakingRebondConfirmation/Flow/Relaychain/StakingRebondConfirmationRelaychainStrategy.swift +++ b/fearless/Modules/Staking/StakingRebondConfirmation/Flow/Relaychain/StakingRebondConfirmationRelaychainStrategy.swift @@ -4,6 +4,7 @@ import SSFUtils import SoraKeystore import SSFModels import SSFRuntimeCodingService +import SSFCrypto protocol StakingRebondConfirmationRelaychainStrategyOutput: AnyObject { func didReceiveStakingLedger(result: Result) diff --git a/fearless/Modules/Staking/StakingRebondConfirmation/Flow/Relaychain/StakingRebondConfirmationRelaychainViewModelFactory.swift b/fearless/Modules/Staking/StakingRebondConfirmation/Flow/Relaychain/StakingRebondConfirmationRelaychainViewModelFactory.swift index ad3df202a7..6e70582743 100644 --- a/fearless/Modules/Staking/StakingRebondConfirmation/Flow/Relaychain/StakingRebondConfirmationRelaychainViewModelFactory.swift +++ b/fearless/Modules/Staking/StakingRebondConfirmation/Flow/Relaychain/StakingRebondConfirmationRelaychainViewModelFactory.swift @@ -2,6 +2,7 @@ import Foundation import SoraFoundation import SSFUtils import SSFModels +import SSFCrypto final class StakingRebondConfirmationRelaychainViewModelFactory: StakingRebondConfirmationViewModelFactoryProtocol { private let balanceViewModelFactory: BalanceViewModelFactoryProtocol diff --git a/fearless/Modules/Staking/StakingRedeem/Flow/Relaychain/StakingRedeemRelaychainStrategy.swift b/fearless/Modules/Staking/StakingRedeem/Flow/Relaychain/StakingRedeemRelaychainStrategy.swift index 56e80be60c..31686e0379 100644 --- a/fearless/Modules/Staking/StakingRedeem/Flow/Relaychain/StakingRedeemRelaychainStrategy.swift +++ b/fearless/Modules/Staking/StakingRedeem/Flow/Relaychain/StakingRedeemRelaychainStrategy.swift @@ -5,6 +5,7 @@ import SSFUtils import BigInt import SSFModels import SSFRuntimeCodingService +import SSFCrypto protocol StakingRedeemRelaychainStrategyOutput: AnyObject { func didReceiveStakingLedger(result: Result) diff --git a/fearless/Modules/Staking/StakingRedeemConfirmation/Flow/Relaychain/StakingRedeemConfirmationRelaychainStrategy.swift b/fearless/Modules/Staking/StakingRedeemConfirmation/Flow/Relaychain/StakingRedeemConfirmationRelaychainStrategy.swift index 629ee9dc7c..121a27a61a 100644 --- a/fearless/Modules/Staking/StakingRedeemConfirmation/Flow/Relaychain/StakingRedeemConfirmationRelaychainStrategy.swift +++ b/fearless/Modules/Staking/StakingRedeemConfirmation/Flow/Relaychain/StakingRedeemConfirmationRelaychainStrategy.swift @@ -5,6 +5,7 @@ import SSFUtils import BigInt import SSFModels import SSFRuntimeCodingService +import SSFCrypto protocol StakingRedeemConfirmationRelaychainStrategyOutput: AnyObject { func didReceiveStakingLedger(result: Result) diff --git a/fearless/Modules/Staking/StakingRewardDestConfirm/StakingRewardDestConfirmInteractor.swift b/fearless/Modules/Staking/StakingRewardDestConfirm/StakingRewardDestConfirmInteractor.swift index 991d2bc159..0938b14849 100644 --- a/fearless/Modules/Staking/StakingRewardDestConfirm/StakingRewardDestConfirmInteractor.swift +++ b/fearless/Modules/Staking/StakingRewardDestConfirm/StakingRewardDestConfirmInteractor.swift @@ -5,6 +5,7 @@ import SoraKeystore import SSFUtils import SSFModels import SSFRuntimeCodingService +import SSFCrypto final class StakingRewardDestConfirmInteractor: AccountFetching { weak var presenter: StakingRewardDestConfirmInteractorOutputProtocol! diff --git a/fearless/Modules/Staking/StakingRewardDestConfirm/ViewModel/StakingRewardDestConfirmViewModelFactory.swift b/fearless/Modules/Staking/StakingRewardDestConfirm/ViewModel/StakingRewardDestConfirmViewModelFactory.swift index d172e354e0..8485c86922 100644 --- a/fearless/Modules/Staking/StakingRewardDestConfirm/ViewModel/StakingRewardDestConfirmViewModelFactory.swift +++ b/fearless/Modules/Staking/StakingRewardDestConfirm/ViewModel/StakingRewardDestConfirmViewModelFactory.swift @@ -1,5 +1,6 @@ import Foundation import SSFUtils +import SSFModels protocol StakingRewardDestConfirmVMFactoryProtocol { func createViewModel( diff --git a/fearless/Modules/Staking/StakingRewardDestinationSetup/StakingRewardDestSetupInteractor.swift b/fearless/Modules/Staking/StakingRewardDestinationSetup/StakingRewardDestSetupInteractor.swift index 8d4199dce4..44de2fbc9c 100644 --- a/fearless/Modules/Staking/StakingRewardDestinationSetup/StakingRewardDestSetupInteractor.swift +++ b/fearless/Modules/Staking/StakingRewardDestinationSetup/StakingRewardDestSetupInteractor.swift @@ -4,6 +4,7 @@ import IrohaCrypto import SSFUtils import SSFModels import SSFRuntimeCodingService +import SSFCrypto final class StakingRewardDestSetupInteractor: AccountFetching { weak var presenter: StakingRewardDestSetupInteractorOutputProtocol! diff --git a/fearless/Modules/Staking/StakingUnbondConfirm/Flow/Relaychain/StakingUnbondConfirmRelaychainStrategy.swift b/fearless/Modules/Staking/StakingUnbondConfirm/Flow/Relaychain/StakingUnbondConfirmRelaychainStrategy.swift index 2979c9e258..0bb9854f0e 100644 --- a/fearless/Modules/Staking/StakingUnbondConfirm/Flow/Relaychain/StakingUnbondConfirmRelaychainStrategy.swift +++ b/fearless/Modules/Staking/StakingUnbondConfirm/Flow/Relaychain/StakingUnbondConfirmRelaychainStrategy.swift @@ -5,6 +5,7 @@ import RobinHood import BigInt import SSFModels import SSFRuntimeCodingService +import SSFCrypto protocol StakingUnbondConfirmRelaychainStrategyOutput: AnyObject { func didReceiveStakingLedger(result: Result) diff --git a/fearless/Modules/StakingPool/Join/StakingPoolJoinConfig/StakingPoolJoinConfigAssembly.swift b/fearless/Modules/StakingPool/Join/StakingPoolJoinConfig/StakingPoolJoinConfigAssembly.swift index 93aed9ce6d..0a09fbb4bc 100644 --- a/fearless/Modules/StakingPool/Join/StakingPoolJoinConfig/StakingPoolJoinConfigAssembly.swift +++ b/fearless/Modules/StakingPool/Join/StakingPoolJoinConfig/StakingPoolJoinConfigAssembly.swift @@ -61,8 +61,7 @@ final class StakingPoolJoinConfigAssembly { let existentialDepositService = ExistentialDepositService( operationManager: operationManager, - chainRegistry: chainRegistry, - chainId: chainAsset.chain.chainId + chainRegistry: chainRegistry ) let callFactory = SubstrateCallFactoryDefault(runtimeService: runtimeService) diff --git a/fearless/Modules/StakingPool/StakingPoolCreate/StakingPoolCreateAssembly.swift b/fearless/Modules/StakingPool/StakingPoolCreate/StakingPoolCreateAssembly.swift index 90ffcb66c3..9c05eff230 100644 --- a/fearless/Modules/StakingPool/StakingPoolCreate/StakingPoolCreateAssembly.swift +++ b/fearless/Modules/StakingPool/StakingPoolCreate/StakingPoolCreateAssembly.swift @@ -59,8 +59,7 @@ final class StakingPoolCreateAssembly { let existentialDepositService = ExistentialDepositService( operationManager: operationManager, - chainRegistry: chainRegistry, - chainId: chainAsset.chain.chainId + chainRegistry: chainRegistry ) let callFactory = SubstrateCallFactoryDefault(runtimeService: runtimeService) diff --git a/fearless/Modules/StakingPool/StakingPoolCreate/ViewModel/StakingPoolCreateViewModelFactory.swift b/fearless/Modules/StakingPool/StakingPoolCreate/ViewModel/StakingPoolCreateViewModelFactory.swift index 6def52903d..84da5381bf 100644 --- a/fearless/Modules/StakingPool/StakingPoolCreate/ViewModel/StakingPoolCreateViewModelFactory.swift +++ b/fearless/Modules/StakingPool/StakingPoolCreate/ViewModel/StakingPoolCreateViewModelFactory.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels protocol StakingPoolCreateViewModelFactoryProtocol { func buildViewModel( diff --git a/fearless/Modules/StakingPool/StakingPoolMain/StakingPoolMainAssembly.swift b/fearless/Modules/StakingPool/StakingPoolMain/StakingPoolMainAssembly.swift index 86d4596d4f..3b17bd06ac 100644 --- a/fearless/Modules/StakingPool/StakingPoolMain/StakingPoolMainAssembly.swift +++ b/fearless/Modules/StakingPool/StakingPoolMain/StakingPoolMainAssembly.swift @@ -145,8 +145,7 @@ final class StakingPoolMainAssembly { let existentialDepositService = ExistentialDepositService( operationManager: operationManager, - chainRegistry: chainRegistry, - chainId: chainAsset.chain.chainId + chainRegistry: chainRegistry ) let storageOperationFactory = StorageRequestFactory( diff --git a/fearless/Modules/StakingPool/StakingPoolManagement/StakingPoolManagementAssembly.swift b/fearless/Modules/StakingPool/StakingPoolManagement/StakingPoolManagementAssembly.swift index f5fabf4739..4ababb706f 100644 --- a/fearless/Modules/StakingPool/StakingPoolManagement/StakingPoolManagementAssembly.swift +++ b/fearless/Modules/StakingPool/StakingPoolManagement/StakingPoolManagementAssembly.swift @@ -103,8 +103,7 @@ final class StakingPoolManagementAssembly { let existentialDepositService = ExistentialDepositService( operationManager: operationManager, - chainRegistry: chainRegistry, - chainId: chainAsset.chain.chainId + chainRegistry: chainRegistry ) let rewardOperationFactory = RewardOperationFactory.factory(chain: chainAsset.chain) diff --git a/fearless/Modules/SwapTransactionDetail/viewModel/SwapTransactionViewModelFactory.swift b/fearless/Modules/SwapTransactionDetail/viewModel/SwapTransactionViewModelFactory.swift index 2859f95fad..67d2b5fcf9 100644 --- a/fearless/Modules/SwapTransactionDetail/viewModel/SwapTransactionViewModelFactory.swift +++ b/fearless/Modules/SwapTransactionDetail/viewModel/SwapTransactionViewModelFactory.swift @@ -1,6 +1,7 @@ import Foundation import UIKit import SSFModels +import SSFCrypto protocol SwapTransactionViewModelFactoryProtocol { func createViewModel( diff --git a/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferAssembly.swift b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferAssembly.swift new file mode 100644 index 0000000000..c59609658e --- /dev/null +++ b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferAssembly.swift @@ -0,0 +1,50 @@ +import UIKit +import SSFModels +import SoraFoundation + +final class ConfirmTransferAssembly { + @MainActor + static func configureModule( + wallet: MetaAccountModel, + chainAsset: ChainAsset, + useCase: TransferFlowUseCase, + sendFlow: SendFlowInitialData, + scamInfo: ScamInfo? + ) -> ConfirmTransferModuleCreationResult? { + let localizationManager = LocalizationManager.shared + + let deps = TransferDepsContainer(wallet: wallet) + let interactor = TransferInteractor( + deps: deps, + priceLocalSubscriber: ServiceAssembly.shared.priceLocalSubscriber, + chainAssetFetching: ServiceAssembly.shared.chainAssetFetching(qualityOfService: .default), + scamRepository: ServiceAssembly.shared.scamInfoAsyncRepository() + ) + let router = ConfirmTransferRouter() + + let assetInfo = chainAsset.asset.displayInfo(with: chainAsset.chain.icon) + let viewModelFactory = WalletSendConfirmViewModelFactory( + wallet: wallet, + amountFormatterFactory: AssetBalanceFormatterFactory(), + assetInfo: assetInfo + ) + + let presenter = ConfirmTransferPresenter( + interactor: interactor, + router: router, + viewModelFactory: viewModelFactory, + useCase: useCase, + sendFlow: sendFlow, + scamInfo: scamInfo, + logger: ServiceAssembly.shared.logger, + localizationManager: localizationManager + ) + + let view = ConfirmTransferViewController( + output: presenter, + localizationManager: localizationManager + ) + + return (view, presenter) + } +} diff --git a/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferPresenter.swift b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferPresenter.swift new file mode 100644 index 0000000000..ec9d02443f --- /dev/null +++ b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferPresenter.swift @@ -0,0 +1,201 @@ +import Foundation +import Web3 +import SoraFoundation +import SSFModels + +@MainActor +protocol ConfirmTransferViewInput: ControllerBackedProtocol { + func didReceive(viewModel: WalletSendConfirmViewModel) + func didReceiveContinueButton(isReady: Bool) +} + +protocol ConfirmTransferInteractorInput: AnyObject { + func setup(with output: TransferInteractorOutput) +} + +final class ConfirmTransferPresenter { + // MARK: Private properties + + private weak var view: ConfirmTransferViewInput? + private let router: ConfirmTransferRouterInput + private let interactor: TransferInteractorInput + private let viewModelFactory: WalletSendConfirmViewModelFactoryProtocol + private let logger: LoggerProtocol + private let useCase: TransferFlowUseCase + private let scamInfo: ScamInfo? + + private var prices: [PriceData] = [] + + // MARK: - Constructors + + init( + interactor: TransferInteractorInput, + router: ConfirmTransferRouterInput, + viewModelFactory: WalletSendConfirmViewModelFactoryProtocol, + useCase: TransferFlowUseCase, + sendFlow: SendFlowInitialData, + scamInfo: ScamInfo?, + logger: LoggerProtocol, + localizationManager: LocalizationManagerProtocol + ) { + self.interactor = interactor + self.router = router + self.viewModelFactory = viewModelFactory + self.useCase = useCase + self.scamInfo = scamInfo + self.logger = logger + self.localizationManager = localizationManager + setupBindings() + + Task { + do { + if let chainAsset = useCase.selectedChainAsset { + await interactor.subscribeToPrice(for: chainAsset) + } + try await useCase.handle(initialData: sendFlow) + await provideIsReady() + await provideViewModel() + } catch { + logger.customError(error) + } + } + } + + // MARK: - Private methods + + private func provideViewModel() async { + do { + let viewModel = try viewModelFactory.buildViewModel( + useCase: useCase, + prices: prices, + scamInfo: scamInfo, + locale: selectedLocale + ) + + await view?.didReceive(viewModel: viewModel) + } catch { + logger.customError(error) + } + } + + private func provideIsReady() async { + let isReady = useCase.isReadyToContinue() + await view?.didReceiveContinueButton(isReady: isReady) + } + + private func setupBindings() { + useCase.provideFeeViewModel = { [weak self] in + Task { [weak self] in + await self?.provideViewModel() + await self?.provideIsReady() + } + } + } + + private func submit() { + Task { + do { + guard + let transfer = useCase.transfer, + let chainAsset = useCase.selectedChainAsset + else { + throw ConvenienceError(error: "Missing requared params") + } + let hash = try await interactor.submit(transfer: transfer, chainAsset: chainAsset) + + Task { @MainActor in + router.complete(on: view, title: hash, chainAsset: chainAsset) + } + } catch { + guard let view else { return } + + Task { @MainActor in + if let rpcError = error as? RPCResponse.Error, rpcError.code == -32000 { + router.presentAmountTooHigh(from: view, locale: selectedLocale) + return + } + + if !router.present(error: error, from: view, locale: selectedLocale) { + router.presentExtrinsicFailed(from: view, locale: selectedLocale) + } + logger.customError(error) + } + } + } + } +} + +// MARK: - ConfirmTransferViewOutput + +extension ConfirmTransferPresenter: ConfirmTransferViewOutput { + func didTapConfirmButton() { + do { + let validators = try useCase.getValidators(validationCase: .all, locale: selectedLocale) + DataValidationRunner(validators: validators).runValidation { [weak self] in + guard let self else { return } + self.submit() + } + } catch { + logger.customError(error) + } + } + + @MainActor + func didTapBackButton() { + router.close(view: view) + } + + @MainActor + func didTapScamWarningButton() { + guard let chainAsset = useCase.selectedChainAsset else { + return + } + let title = R.string.localizable.scamWarningAlertTitle( + chainAsset.asset.symbol.uppercased(), + preferredLanguages: selectedLocale.rLanguages + ) + let message = R.string.localizable.scamWarningAlertSubtitle( + chainAsset.asset.symbolUppercased, + preferredLanguages: selectedLocale.rLanguages + ) + + let sheetViewModel = SheetAlertPresentableViewModel( + title: title, + message: message, + actions: [], + closeAction: R.string.localizable.commonClose(preferredLanguages: selectedLocale.rLanguages), + icon: R.image.iconWarningBig() + ) + router.present( + viewModel: sheetViewModel, + from: view + ) + } + + func didLoad(view: ConfirmTransferViewInput) { + self.view = view + Task { await interactor.setup(with: self) } + } +} + +// MARK: - ConfirmTransferInteractorOutput + +extension ConfirmTransferPresenter: TransferInteractorOutput { + func didReceivePriceData(result: Result<[PriceData], any Error>) { + switch result { + case let .success(success): + prices = success + Task { await provideViewModel() } + case let .failure(error): + logger.error("Did receive price error: \(error)") + } + } +} + +// MARK: - Localizable + +extension ConfirmTransferPresenter: Localizable { + func applyLocalization() {} +} + +extension ConfirmTransferPresenter: ConfirmTransferModuleInput {} diff --git a/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferProtocols.swift b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferProtocols.swift new file mode 100644 index 0000000000..5411bc1760 --- /dev/null +++ b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferProtocols.swift @@ -0,0 +1,25 @@ +import SSFModels + +typealias ConfirmTransferModuleCreationResult = ( + view: ConfirmTransferViewInput, + input: ConfirmTransferModuleInput +) + +@MainActor +protocol ConfirmTransferRouterInput: + ErrorPresentable, + BaseErrorPresentable, + ModalAlertPresenting, + SheetAlertPresentable { + func close(view: ControllerBackedProtocol?) + func finish(view: ControllerBackedProtocol?) + func complete( + on view: ControllerBackedProtocol?, + title: String?, + chainAsset: ChainAsset + ) +} + +protocol ConfirmTransferModuleInput: AnyObject {} + +protocol ConfirmTransferModuleOutput: AnyObject {} diff --git a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmWireframe.swift b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferRouter.swift similarity index 91% rename from fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmWireframe.swift rename to fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferRouter.swift index 01ab05b577..b04c3eb1e0 100644 --- a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmWireframe.swift +++ b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferRouter.swift @@ -1,9 +1,8 @@ import Foundation -import UIKit import SoraUI import SSFModels -final class WalletSendConfirmWireframe: WalletSendConfirmWireframeProtocol { +final class ConfirmTransferRouter: ConfirmTransferRouterInput { func finish(view: ControllerBackedProtocol?) { view?.controller.navigationController?.dismiss( animated: true, @@ -17,7 +16,7 @@ final class WalletSendConfirmWireframe: WalletSendConfirmWireframeProtocol { func complete( on view: ControllerBackedProtocol?, - title: String, + title: String?, chainAsset: ChainAsset ) { let presenter = view?.controller.navigationController?.presentingViewController diff --git a/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferViewController.swift b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferViewController.swift new file mode 100644 index 0000000000..d934ecc83d --- /dev/null +++ b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferViewController.swift @@ -0,0 +1,85 @@ +import UIKit +import SoraFoundation + +protocol ConfirmTransferViewOutput: AnyObject { + func didLoad(view: ConfirmTransferViewInput) + func didTapConfirmButton() + func didTapBackButton() + func didTapScamWarningButton() +} + +final class ConfirmTransferViewController: UIViewController, ViewHolder, HiddableBarWhenPushed { + typealias RootViewType = WalletSendConfirmViewLayout + + // MARK: Private properties + + private let output: ConfirmTransferViewOutput + + // MARK: - Constructor + + init( + output: ConfirmTransferViewOutput, + localizationManager: LocalizationManagerProtocol? + ) { + self.output = output + super.init(nibName: nil, bundle: nil) + self.localizationManager = localizationManager + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Life cycle + + override func loadView() { + view = WalletSendConfirmViewLayout() + } + + override func viewDidLoad() { + super.viewDidLoad() + output.didLoad(view: self) + setupActions() + } + + // MARK: - Private methods + + private func setupActions() { + rootView.navigationBar.backButton.addTarget(self, action: #selector(backButtonClicked), for: .touchUpInside) + rootView.receiverWarningButton.addTarget(self, action: #selector(handleScamWarningTapped), for: .touchUpInside) + rootView.confirmButton.addTarget(self, action: #selector(continueButtonClicked), for: .touchUpInside) + } + + @objc private func continueButtonClicked() { + output.didTapConfirmButton() + } + + @objc private func backButtonClicked() { + output.didTapBackButton() + } + + @objc private func handleScamWarningTapped() { + output.didTapScamWarningButton() + } +} + +// MARK: - ConfirmTransferViewInput + +extension ConfirmTransferViewController: ConfirmTransferViewInput { + func didReceiveContinueButton(isReady: Bool) { + rootView.confirmButton.set(enabled: isReady) + } + + func didReceive(viewModel: WalletSendConfirmViewModel) { + rootView.bind(confirmViewModel: viewModel) + } +} + +// MARK: - Localizable + +extension ConfirmTransferViewController: Localizable { + func applyLocalization() { + rootView.locale = selectedLocale + } +} diff --git a/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferViewLayout.swift b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferViewLayout.swift new file mode 100644 index 0000000000..306135e3ec --- /dev/null +++ b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferViewLayout.swift @@ -0,0 +1,22 @@ +import UIKit + +final class ConfirmTransferViewLayout: UIView { + var locale: Locale = .current { + didSet { + applyLocalization() + } + } + + override init(frame: CGRect) { + super.init(frame: frame) + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Private methods + + private func applyLocalization() {} +} diff --git a/fearless/Modules/NewWallet/WalletSendConfirm/ViewModels/WalletSendConfirmViewModel.swift b/fearless/Modules/Transfer/ConfirmTransfer/Models/WalletSendConfirmViewModel.swift similarity index 100% rename from fearless/Modules/NewWallet/WalletSendConfirm/ViewModels/WalletSendConfirmViewModel.swift rename to fearless/Modules/Transfer/ConfirmTransfer/Models/WalletSendConfirmViewModel.swift diff --git a/fearless/Modules/Transfer/ConfirmTransfer/Models/WalletSendConfirmViewModelFactory.swift b/fearless/Modules/Transfer/ConfirmTransfer/Models/WalletSendConfirmViewModelFactory.swift new file mode 100644 index 0000000000..61c9969312 --- /dev/null +++ b/fearless/Modules/Transfer/ConfirmTransfer/Models/WalletSendConfirmViewModelFactory.swift @@ -0,0 +1,185 @@ +import Foundation +import SSFModels +import SSFCrypto + +struct WalletSendConfirmViewModelFactoryParameters { + let amount: Decimal + let senderAccountViewModel: AccountViewModel? + let receiverAccountViewModel: AccountViewModel? + let assetBalanceViewModel: AssetBalanceViewModelProtocol? + let tipRequired: Bool + let tipViewModel: BalanceViewModelProtocol? + let feeViewModel: BalanceViewModelProtocol? + let wallet: MetaAccountModel + let locale: Locale + let scamInfo: ScamInfo? + let assetModel: AssetModel +} + +protocol WalletSendConfirmViewModelFactoryProtocol { + func buildViewModel( + useCase: TransferFlowUseCase, + prices: [PriceData], + scamInfo: ScamInfo?, + locale: Locale + ) throws -> WalletSendConfirmViewModel +} + +final class WalletSendConfirmViewModelFactory: WalletSendConfirmViewModelFactoryProtocol { + private let amountFormatterFactory: AssetBalanceFormatterFactoryProtocol + private let assetInfo: AssetBalanceDisplayInfo + private let wallet: MetaAccountModel + + init( + wallet: MetaAccountModel, + amountFormatterFactory: AssetBalanceFormatterFactoryProtocol, + assetInfo: AssetBalanceDisplayInfo + ) { + self.wallet = wallet + self.amountFormatterFactory = amountFormatterFactory + self.assetInfo = assetInfo + } + + func buildViewModel( + useCase: TransferFlowUseCase, + prices: [PriceData], + scamInfo: ScamInfo?, + locale: Locale + ) throws -> WalletSendConfirmViewModel { + let formatter = amountFormatterFactory.createTokenFormatter(for: assetInfo, usageCase: .detailsCrypto) + guard + let amount = useCase.amount(), + let selectedChainAsset = useCase.selectedChainAsset, + let utilityChainAsset = useCase.utilityChainAsset, + let balanceViewModelFactory = buildBalanceViewModelFactory(wallet: wallet, for: selectedChainAsset), + let utilityBalanceViewModelFactory = buildBalanceViewModelFactory(wallet: wallet, for: utilityChainAsset), + let accountId = wallet.fetch(for: selectedChainAsset.chain.accountRequest())?.accountId, + let senderAddress = try? AddressFactory.address(for: accountId, chain: selectedChainAsset.chain), + let receiverAddressString = useCase.recipientAddress + else { + throw ConvenienceError(error: "Missing requared params") + } + + let inputAmount = formatter.value(for: locale).stringFromDecimal(amount) ?? "" + let amountString = R.string.localizable.sendConfirmAmountTitle( + inputAmount, + preferredLanguages: locale.rLanguages + ) + let amountAttributedString = NSMutableAttributedString(string: amountString) + amountAttributedString.addAttribute( + NSAttributedString.Key.foregroundColor, + value: R.color.colorWhite()!.cgColor, + range: (amountString as NSString).range(of: inputAmount) + ) + + let shadowColor = HexColorConverter.hexStringToUIColor( + hex: selectedChainAsset.asset.color + )?.cgColor + let iconViewModel = selectedChainAsset.asset.icon.map { RemoteImageViewModel(url: $0) } + let symbolViewModel = SymbolViewModel( + iconViewModel: iconViewModel, + shadowColor: shadowColor + ) + + let priceString = buildPriceString( + useCase: useCase, + prices: prices, + locale: locale, + balanceViewModelFactory: balanceViewModelFactory + ) + + let feeViewModel = buildBalanceViewModel( + amount: useCase.fee, + chainAsset: utilityChainAsset, + prices: prices, + balanceViewModelFactory: utilityBalanceViewModelFactory, + locale: locale + ) + + let tipViewModel = buildBalanceViewModel( + amount: useCase.tip, + chainAsset: utilityChainAsset, + prices: prices, + balanceViewModelFactory: utilityBalanceViewModelFactory, + locale: locale + ) + + return WalletSendConfirmViewModel( + amountAttributedString: amountAttributedString, + amountString: inputAmount, + senderNameString: wallet.name, + senderAddressString: senderAddress, + receiverAddressString: receiverAddressString, + priceString: priceString ?? "", + feeAmountString: feeViewModel?.amount ?? "", + feePriceString: feeViewModel?.price ?? "", + tipRequired: useCase.tip != nil, + tipAmountString: tipViewModel?.amount ?? "", + tipPriceString: tipViewModel?.price ?? "", + showWarning: scamInfo != nil, + symbolViewModel: symbolViewModel + ) + } + + // MARK: - Private methods + + private func buildPriceString( + useCase: TransferFlowUseCase, + prices: [PriceData], + locale: Locale, + balanceViewModelFactory: BalanceViewModelFactoryProtocol + ) -> String? { + guard + let chainAsset = useCase.selectedChainAsset, + let amount = useCase.amount(), + let balance = useCase.availableBalance + else { + return nil + } + + let priceData = prices.first(where: { $0.priceId == chainAsset.asset.priceId }) + + let viewModel = balanceViewModelFactory.createAssetBalanceViewModel( + amount, + balance: balance, + priceData: priceData + ).value(for: locale) + + return viewModel.price + } + + private func buildBalanceViewModel( + amount: Decimal?, + chainAsset: ChainAsset, + prices: [PriceData], + balanceViewModelFactory: BalanceViewModelFactoryProtocol, + locale: Locale + ) -> BalanceViewModelProtocol? { + guard let amount else { + return nil + } + let priceData = prices.first(where: { $0.priceId == chainAsset.asset.priceId }) + let viewModel = balanceViewModelFactory.balanceFromPrice( + amount, + priceData: priceData, + usageCase: .detailsCrypto + ).value(for: locale) + return viewModel + } + + private func buildBalanceViewModelFactory( + wallet: MetaAccountModel, + for chainAsset: ChainAsset? + ) -> BalanceViewModelFactoryProtocol? { + guard let chainAsset = chainAsset else { + return nil + } + let assetInfo = chainAsset.asset + .displayInfo(with: chainAsset.chain.icon) + let balanceViewModelFactory = BalanceViewModelFactory( + targetAssetInfo: assetInfo, + selectedMetaAccount: wallet + ) + return balanceViewModelFactory + } +} diff --git a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmViewLayout.swift b/fearless/Modules/Transfer/ConfirmTransfer/WalletSendConfirmViewLayout.swift similarity index 100% rename from fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmViewLayout.swift rename to fearless/Modules/Transfer/ConfirmTransfer/WalletSendConfirmViewLayout.swift diff --git a/fearless/Modules/Transfer/Transfer/BokoloTransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/BokoloTransferFlowUseCase.swift new file mode 100644 index 0000000000..1d92e03370 --- /dev/null +++ b/fearless/Modules/Transfer/Transfer/BokoloTransferFlowUseCase.swift @@ -0,0 +1,317 @@ +import Foundation +import SSFModels +import SSFQRService +import BigInt +import SSFTransferService +import SSFUtils +import SSFCrypto + +final class BokoloTransferFlowUseCase: TransferFlowUseCase { + private let wallet: MetaAccountModel + private let dataValidatingFactory: SendDataValidatingFactory + private let logger: LoggerProtocol + + let interactor: TransferInteractorInput + let implType: TransferFlowDirectionImpl = .bokoloCash + var transfer: TransferType? + + var selectedChainAsset: ChainAsset? + var utilityChainAsset: ChainAsset? + var comment: String? + var inputResult: AmountInputResult? { + didSet { + refreshFee() + } + } + + var recipientAddress: String? { + didSet { + refreshFee() + } + } + + var availableInputBalance: Decimal? + var availableBalance: Decimal? + var utilityBalance: Decimal? + + var fee: Decimal? + var tip: Decimal? + var ed: Decimal? + + var sendAllEnabled: Bool? + var isUserInteractiveAmount: Bool = true + var isValidRecipient: Bool? = true + var canEditRecipient: Bool = false + var canSelectAsset: Bool = false + var isSwitchEnableSendAllVisibility: Bool = false + + var provideRecipientViewModel: (() -> Void)? + var provideAssetViewModel: (() -> Void)? + var provideInputViewModel: (() -> Void)? + var provideNetworkViewModel: (() -> Void)? + var provideTipViewModel: (() -> Void)? + var provideFeeViewModel: (() -> Void)? + + private var bokoloCashId: Data? + private var bokoloSwapValues: SwapValues? + + init( + wallet: MetaAccountModel, + dataValidatingFactory: SendDataValidatingFactory, + interactor: TransferInteractorInput, + logger: LoggerProtocol + ) { + self.interactor = interactor + self.dataValidatingFactory = dataValidatingFactory + self.wallet = wallet + self.logger = logger + } + + func handle(initialData: SendFlowInitialData) async throws { + guard case let .bokoloCash(qrInfo) = initialData else { + throw TransferFlowUseCaseError.wrongType + } + + let possibleChains = await interactor + .getPossibleChains( + for: BokoloConstants.bokoloCasheBridgeAddress + ) + +// #if F_DEV +// let chainAsset = possibleChains +// .first(where: { chain in +// switch chain.knownChainEquivalent { +// case .soraTest: return true +// default: return false +// } +// })? +// .chainAssets +// .first(where: { $0.asset.currencyId == BokoloConstants.bokoloCashAssetCurrencyId }) +// +// #else + let chainAsset = possibleChains + .first(where: { chain in + switch chain.knownChainEquivalent { + case .soraMain: return true + default: return false + } + })? + .chainAssets + .first(where: { $0.asset.currencyId == BokoloConstants.bokoloCashAssetCurrencyId }) +// #endif + + guard + let qrChainAsset = chainAsset, + let bokoloCashId = qrInfo.address.data(using: .utf8) + else { + throw TransferFlowUseCaseError.unsupportedAsset + } + + self.bokoloCashId = bokoloCashId + recipientAddress = qrInfo.address + provideNetworkViewModel?() + + selectedChainAsset = qrChainAsset + utilityChainAsset = qrChainAsset.chain.utilityChainAssets().first + provideAssetViewModel?() + provideRecipientViewModel?() + + if var qrAmount = Decimal(string: qrInfo.transactionAmount ?? ""), qrAmount != .zero { + var drounded = Decimal() + NSDecimalRound(&drounded, &qrAmount, 2, .plain) + inputResult = .absolute(qrAmount) + isUserInteractiveAmount = false + } + + await interactor.subscribeToPrice(for: qrChainAsset) + provideInputViewModel?() + + try await fetchRequaredInfo(for: qrChainAsset) + transfer = try buildTransfer() + refreshFee() + } + + func getValidators( + validationCase: TransferValidationCase, + locale: Locale + ) throws -> [any DataValidating] { + switch validationCase { + case .validateED: + return [] + case .all: + guard + let utilityBalance, + let availableBalance + else { + throw TransferFlowUseCaseError.getValidatorsError + } + + var sendAmountDecimal = inputResult?.absoluteValue(from: availableBalance) + var balanceType: BalanceType + var feeAndTip: Decimal + var feeForValidation: Decimal? + if let xorFee = fee, utilityBalance > xorFee { + balanceType = .orml(balance: availableBalance, utilityBalance: utilityBalance) + feeAndTip = xorFee + feeForValidation = fee + } else { + balanceType = .utility(balance: availableBalance) + feeAndTip = fee ?? .zero + sendAmountDecimal = (sendAmountDecimal ?? .zero) - (fee ?? .zero) + feeForValidation = fee + } + + let validators = [ + dataValidatingFactory.has(fee: feeForValidation, locale: locale, onError: { [weak self] in + self?.refreshFee(for: self?.transfer) + }), + dataValidatingFactory.canPayFeeAndAmount( + balanceType: balanceType, + feeAndTip: feeAndTip, + sendAmount: sendAmountDecimal, + locale: locale + ) + ] + + return validators + } + } + + // MARK: - Private methods + + private func refreshFee() { + guard + let transfer, + let selectedChainAsset + else { + return + } + Task { [weak self] in + guard let self else { return } + let stream = await self.interactor.estimateFee( + transfer: transfer, + chainAsset: selectedChainAsset + ) + for try await fee in stream { + let precision = Int16(selectedChainAsset.asset.precision) + self.fee = Decimal.fromSubstrateAmount(fee, precision: precision) + try await self.checkXorFeePaymentPossibles() + } + } + } + + private func checkXorFeePaymentPossibles() async throws { + guard + let xorBalance = utilityBalance, + let xorFee = fee + else { + provideFeeViewModel?() + return + } + + if xorBalance > xorFee { + provideFeeViewModel?() + } else { + guard + let bokoloChainAsset = selectedChainAsset, + let xorChainAsset = utilityChainAsset, + let feeValue = xorFee.toSubstrateAmount(precision: Int16(xorChainAsset.asset.precision)) + else { + return + } + guard let bokoloSwap = try await interactor.convert( + chainAsset: xorChainAsset, + toChainAsset: bokoloChainAsset, + amount: feeValue + ) else { + return + } + let bokoloAmount = BigUInt(bokoloSwap.amount) ?? .zero + let bokoloFee = Decimal.fromSubstrateAmount( + bokoloAmount, + precision: Int16(bokoloChainAsset.asset.precision) + ) + + bokoloSwapValues = bokoloSwap + fee = bokoloFee + utilityChainAsset = bokoloChainAsset + + provideFeeViewModel?() + } + } + + private func buildTransfer() throws -> TransferType? { + guard + let availableInputBalance, + let selectedChainAsset, + let inputAmount = inputResult?.absoluteValue(from: availableInputBalance), + let amount = inputAmount.toSubstrateAmount(precision: Int16(selectedChainAsset.asset.precision)) + else { + return nil + } + + let address = BokoloConstants.bokoloCasheBridgeAddress + let receiver = try AddressFactory.accountId( + from: address, + chain: selectedChainAsset.chain + ) + + let fee = fee?.toSubstrateAmount(precision: Int16(selectedChainAsset.asset.precision)) ?? .zero + let feeReserve = BigUInt(10_000_000_000_000_000) + + let maxAmountIn = ((self.fee ?? .zero) * 1.5).toSubstrateAmount( + precision: Int16(selectedChainAsset.asset.precision) + ) + let filter: PolkaswapLiquidityFilterMode = .disabled + let filterMode = SSFTransferService.PolkaswapCallFilterModeType( + wrappedName: filter.code, + wrappedValue: nil + ) + + let dexId = String(bokoloSwapValues?.dexId ?? 0) + let soraAssetId = SSFUtils.SoraAssetId( + wrappedValue: BokoloConstants.bokoloCashAssetCurrencyId + ) + let xorless = SSFTransferService.XorlessTransfer( + dexId: dexId, + assetId: soraAssetId, + receiver: receiver, + amount: amount, + desiredXorAmount: fee + feeReserve, + maxAmountIn: maxAmountIn ?? .zero, + selectedSourceTypes: [], + filterMode: filterMode, + additionalData: bokoloCashId ?? Data() + ) + let transfer = TransferType.xorless(xorless) + return transfer + } + + private func fetchRequaredInfo(for chainAsset: ChainAsset) async throws { + guard let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId else { + throw TransferFlowUseCaseError.missingAccount + } + + async let balancesTask = try await interactor.fetchAccountInfos(for: chainAsset) + + let chainAssetBalance = await balance( + for: chainAsset, + accountId: accountId, + accountInfos: try await balancesTask + ) + availableBalance = chainAssetBalance + + if let utilityChainAsset { + let utilityChainAssetBalance = await balance( + for: utilityChainAsset, + accountId: accountId, + accountInfos: try await balancesTask + ) + utilityBalance = utilityChainAssetBalance + } + + await calcAvailableInputBalance() + provideInputViewModel?() + provideAssetViewModel?() + } +} diff --git a/fearless/Modules/Transfer/Transfer/EthereumTransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/EthereumTransferFlowUseCase.swift new file mode 100644 index 0000000000..7b01f6602e --- /dev/null +++ b/fearless/Modules/Transfer/Transfer/EthereumTransferFlowUseCase.swift @@ -0,0 +1,179 @@ +import Foundation +import SSFModels +import BigInt +import SSFTransferService + +final class EthereumTransferFlowUseCase: TransferFlowUseCase { + private let wallet: MetaAccountModel + private let dataValidatingFactory: SendDataValidatingFactory + private let logger: LoggerProtocol + + let interactor: TransferInteractorInput + let implType: TransferFlowDirectionImpl = .ethereum + var transfer: TransferType? + + var selectedChainAsset: ChainAsset? + var utilityChainAsset: ChainAsset? + var comment: String? + var inputResult: AmountInputResult? { + didSet { + calcFee() + } + } + + var recipientAddress: String? { + didSet { + calcFee() + } + } + + var availableInputBalance: Decimal? + var availableBalance: Decimal? + var utilityBalance: Decimal? + + var fee: Decimal? + var tip: Decimal? + var ed: Decimal? + + var sendAllEnabled: Bool? + var isUserInteractiveAmount: Bool = true + var isValidRecipient: Bool? = false + var canEditRecipient: Bool = true + var canSelectAsset: Bool = true + var isSwitchEnableSendAllVisibility: Bool = false + + var provideRecipientViewModel: (() -> Void)? + var provideAssetViewModel: (() -> Void)? + var provideInputViewModel: (() -> Void)? + var provideNetworkViewModel: (() -> Void)? + var provideTipViewModel: (() -> Void)? + var provideFeeViewModel: (() -> Void)? + + init( + wallet: MetaAccountModel, + dataValidatingFactory: SendDataValidatingFactory, + interactor: TransferInteractorInput, + logger: LoggerProtocol + ) { + self.interactor = interactor + self.dataValidatingFactory = dataValidatingFactory + self.wallet = wallet + self.logger = logger + } + + func handle(initialData: SendFlowInitialData) async throws { + guard case let .chainAsset(chainAsset) = initialData else { + throw TransferFlowUseCaseError.wrongType + } +// recipientAddress = address + provideRecipientViewModel?() + + selectedChainAsset = chainAsset + utilityChainAsset = chainAsset.chain.utilityChainAssets().first + await interactor.subscribeToPrice(for: chainAsset) + + provideNetworkViewModel?() + + try await fetchRequaredInfo(for: chainAsset) + calcFee() + } + + func getValidators( + validationCase: TransferValidationCase, + locale: Locale + ) throws -> [any DataValidating] { + switch validationCase { + case .validateED: + return [] + case .all: + guard + let selectedChainAsset, + let availableInputBalance + else { + throw TransferFlowUseCaseError.getValidatorsError + } + + let balanceType: BalanceType = selectedChainAsset.isUtility + ? .utility(balance: utilityBalance) + : .orml(balance: availableBalance, utilityBalance: utilityBalance) + + let sendAmount = inputResult?.absoluteValue(from: availableInputBalance) + + let validators = [ + dataValidatingFactory.has( + fee: fee, + locale: locale + ) { [weak self] in + guard let transfer = self?.transfer else { + return + } + self?.refreshFee(for: transfer) + }, + dataValidatingFactory.canPayFeeAndAmount( + balanceType: balanceType, + feeAndTip: fee.or(.zero) + tip.or(.zero), + sendAmount: sendAmount, + locale: locale + ) + ] + return validators + } + } + + // MARK: - Private methods + + private func calcFee() { + guard let transfer = buildEthereumTransfer() else { + return + } + refreshFee(for: transfer) + } + + private func buildEthereumTransfer() -> TransferType? { + guard + let availableInputBalance, + let selectedChainAsset, + let recipientAddress, + let inputAmount = inputResult?.absoluteValue(from: availableInputBalance), + let amount = inputAmount.toSubstrateAmount(precision: Int16(selectedChainAsset.asset.precision)) + else { + transfer = nil + return nil + } + + let ethereumTransfer = EthereumTransfer( + amount: amount, + receiver: recipientAddress + ) + let transfer = TransferType.ethereum(ethereumTransfer) + return transfer + } + + private func fetchRequaredInfo(for chainAsset: ChainAsset) async throws { + guard let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId else { + throw TransferFlowUseCaseError.missingAccount + } + + async let balancesTask = try await interactor.fetchAccountInfos(for: chainAsset) + + let chainAssetBalance = await balance( + for: chainAsset, + accountId: accountId, + accountInfos: try await balancesTask + ) + availableBalance = chainAssetBalance + + if let utilityChainAsset { + let utilityChainAssetBalance = await balance( + for: utilityChainAsset, + accountId: accountId, + accountInfos: try await balancesTask + ) + utilityBalance = utilityChainAssetBalance + } + + await calcAvailableInputBalance() + provideInputViewModel?() + provideAssetViewModel?() + } +} diff --git a/fearless/Modules/Send/ViewModel/RecipientViewModel.swift b/fearless/Modules/Transfer/Transfer/Models/RecipientViewModel.swift similarity index 84% rename from fearless/Modules/Send/ViewModel/RecipientViewModel.swift rename to fearless/Modules/Transfer/Transfer/Models/RecipientViewModel.swift index 47e40ca7b8..f578f9c170 100644 --- a/fearless/Modules/Send/ViewModel/RecipientViewModel.swift +++ b/fearless/Modules/Transfer/Transfer/Models/RecipientViewModel.swift @@ -3,6 +3,6 @@ import SSFUtils struct RecipientViewModel { let address: String let icon: DrawableIcon? - let isValid: Bool + let isValid: Bool? let canEditing: Bool } diff --git a/fearless/Modules/Send/ViewModel/SelectNetworkViewModel.swift b/fearless/Modules/Transfer/Transfer/Models/SelectNetworkViewModel.swift similarity index 100% rename from fearless/Modules/Send/ViewModel/SelectNetworkViewModel.swift rename to fearless/Modules/Transfer/Transfer/Models/SelectNetworkViewModel.swift diff --git a/fearless/Modules/Send/SendFlow.swift b/fearless/Modules/Transfer/Transfer/Models/SendFlow.swift similarity index 69% rename from fearless/Modules/Send/SendFlow.swift rename to fearless/Modules/Transfer/Transfer/Models/SendFlow.swift index 2791933e10..305c4e4b84 100644 --- a/fearless/Modules/Send/SendFlow.swift +++ b/fearless/Modules/Transfer/Transfer/Models/SendFlow.swift @@ -1,11 +1,6 @@ import SSFModels import SSFQRService -enum SendFlowType { - case token - case nft -} - enum SendFlowInitialData { case chainAsset(ChainAsset) case address(String) @@ -26,6 +21,21 @@ enum SendFlowInitialData { } } + var address: String? { + switch self { + case .chainAsset: + return nil + case let .address(address): + return address + case let .soraMainnet(qrInfo: qrInfo): + return qrInfo.address + case let .bokoloCash(qrInfo: qrInfo): + return qrInfo.address + case let .desiredCryptocurrency(qrInfo: qrInfo): + return qrInfo.address + } + } + var selectableAsset: Bool { switch self { case .chainAsset, .address, .desiredCryptocurrency: diff --git a/fearless/Modules/Transfer/Transfer/Models/SendViewModelFactory.swift b/fearless/Modules/Transfer/Transfer/Models/SendViewModelFactory.swift new file mode 100644 index 0000000000..66d2f42d5b --- /dev/null +++ b/fearless/Modules/Transfer/Transfer/Models/SendViewModelFactory.swift @@ -0,0 +1,130 @@ +import SSFUtils +import SSFModels +import Foundation + +protocol SendViewModelFactoryProtocol { + func buildRecipientViewModel( + address: String, + isValid: Bool?, + canEditing: Bool + ) -> RecipientViewModel + func buildNetworkViewModel( + chain: ChainModel + ) -> SelectNetworkViewModel + func createAssetBalanceViewModel( + inputAmount: Decimal?, + availableBalance: Decimal?, + prices: [PriceData], + chainAsset: ChainAsset, + canSelectAsset: Bool, + locale: Locale + ) -> AssetBalanceViewModelProtocol + func createBalanceInputViewModel( + inputAmount: Decimal?, + chainAsset: ChainAsset, + locale: Locale + ) -> IAmountInputViewModel + func balanceFromPrice( + chainAsset: ChainAsset, + balance: Decimal, + prices: [PriceData], + locale: Locale + ) -> BalanceViewModelProtocol +} + +final class SendViewModelFactory: SendViewModelFactoryProtocol { + private let wallet: MetaAccountModel + private let iconGenerator: IconGenerating + + init( + wallet: MetaAccountModel, + iconGenerator: IconGenerating + ) { + self.wallet = wallet + self.iconGenerator = iconGenerator + } + + func buildRecipientViewModel( + address: String, + isValid: Bool?, + canEditing: Bool + ) -> RecipientViewModel { + RecipientViewModel( + address: address, + icon: try? iconGenerator.generateFromAddress(address), + isValid: isValid, + canEditing: canEditing + ) + } + + func buildNetworkViewModel(chain: ChainModel) -> SelectNetworkViewModel { + let iconViewModel = chain.icon.map { RemoteImageViewModel(url: $0) } + return SelectNetworkViewModel( + chainName: chain.name, + iconViewModel: iconViewModel, + canEdit: false + ) + } + + func createAssetBalanceViewModel( + inputAmount: Decimal?, + availableBalance: Decimal?, + prices: [PriceData], + chainAsset: ChainAsset, + canSelectAsset: Bool, + locale: Locale + ) -> AssetBalanceViewModelProtocol { + let balanceViewModelFactory = buildBalanceViewModelFactory(for: chainAsset) + let priceData = prices.first(where: { $0.priceId == chainAsset.asset.priceId }) + let viewModel = balanceViewModelFactory.createAssetBalanceViewModel( + inputAmount, + balance: availableBalance, + priceData: priceData, + selectable: canSelectAsset + ).value(for: locale) + return viewModel + } + + func createBalanceInputViewModel( + inputAmount: Decimal?, + chainAsset: ChainAsset, + locale: Locale + ) -> IAmountInputViewModel { + let balanceViewModelFactory = buildBalanceViewModelFactory(for: chainAsset) + let viewModel = balanceViewModelFactory + .createBalanceInputViewModel(inputAmount) + .value(for: locale) + return viewModel + } + + func balanceFromPrice( + chainAsset: ChainAsset, + balance: Decimal, + prices: [PriceData], + locale: Locale + ) -> BalanceViewModelProtocol { + let balanceViewModelFactory = buildBalanceViewModelFactory(for: chainAsset) + let priceData = prices.first(where: { $0.priceId == chainAsset.asset.priceId }) + let viewModel = balanceViewModelFactory.balanceFromPrice( + balance, + priceData: priceData, + usageCase: .detailsCrypto + ).value(for: locale) + return viewModel + } + + // MARK: - Private methods + + private func buildBalanceViewModelFactory( + for chainAsset: ChainAsset + ) -> BalanceViewModelFactoryProtocol { + let assetInfo = chainAsset.asset + .displayInfo(with: chainAsset.chain.icon) + let balanceViewModelFactory = BalanceViewModelFactory( + targetAssetInfo: assetInfo, + selectedMetaAccount: wallet + ) + + return balanceViewModelFactory + } +} diff --git a/fearless/Modules/Send/ViewModel/TipViewModel.swift b/fearless/Modules/Transfer/Transfer/Models/TipViewModel.swift similarity index 100% rename from fearless/Modules/Send/ViewModel/TipViewModel.swift rename to fearless/Modules/Transfer/Transfer/Models/TipViewModel.swift diff --git a/fearless/Modules/Send/SendViewLayout.swift b/fearless/Modules/Transfer/Transfer/SendViewLayout.swift similarity index 88% rename from fearless/Modules/Send/SendViewLayout.swift rename to fearless/Modules/Transfer/Transfer/SendViewLayout.swift index 8400b9207d..0cabd4af23 100644 --- a/fearless/Modules/Send/SendViewLayout.swift +++ b/fearless/Modules/Transfer/Transfer/SendViewLayout.swift @@ -33,7 +33,7 @@ final class SendViewLayout: UIView { }() let amountView = SelectableAmountInputView(type: .send) - let selectNetworkView = UIFactory.default.createNetworkView(selectable: true) + let selectNetworkView = UIFactory.default.createNetworkView(selectable: false) let scamWarningView: ScamWarningExpandableView = { let view = ScamWarningExpandableView() view.isHidden = true @@ -43,6 +43,7 @@ final class SendViewLayout: UIView { let feeView: NetworkFeeView = { let view = UIFactory.default.createNetworkFeeView() view.borderView.isHidden = true + view.isHidden = true return view }() @@ -111,6 +112,19 @@ final class SendViewLayout: UIView { return switchView }() + let commentTextField: CommonInputView = { + let inputView = CommonInputView() + inputView.defaultSetup() + inputView.backgroundView.fillColor = R.color.colorSemiBlack()! + inputView.backgroundView.highlightedFillColor = R.color.colorSemiBlack()! + inputView.backgroundView.strokeColor = R.color.colorWhite8()! + inputView.backgroundView.highlightedStrokeColor = R.color.colorPink()! + inputView.backgroundView.strokeWidth = 1 + inputView.backgroundView.shadowOpacity = 0 + inputView.animatedInputField.placeholderColor = R.color.colorLightGray()! + return inputView + }() + var locale = Locale.current { didSet { if locale != oldValue { @@ -147,6 +161,7 @@ final class SendViewLayout: UIView { } func bind(feeViewModel: BalanceViewModelProtocol?) { + feeView.isHidden = feeViewModel == nil feeView.bind(viewModel: feeViewModel) } @@ -166,9 +181,10 @@ final class SendViewLayout: UIView { scamWarningView.bind(scamInfo: scamInfo, assetName: amountView.symbol ?? "") } - func bind(viewModel: RecipientViewModel) { - searchView.textField.text = viewModel.address - searchView.updateState(icon: viewModel.icon, clearButtonIsHidden: !viewModel.canEditing) + func bind(viewModel: RecipientViewModel?) { + searchView.textField.text = viewModel?.address + searchView.updateState(icon: viewModel?.icon, clearButtonIsHidden: !(viewModel?.canEditing == true)) + searchView.isValid = viewModel?.isValid } func switchEnableSendAllVisibility(isVisible: Bool) { @@ -213,6 +229,12 @@ private extension SendViewLayout { make.height.equalTo(LayoutConstants.stackSubviewHeight) } + contentView.stackView.addArrangedSubview(commentTextField) + commentTextField.snp.makeConstraints { make in + make.width.equalTo(self).offset(viewOffset) + make.height.equalTo(LayoutConstants.stackSubviewHeight) + } + contentView.stackView.addArrangedSubview(scamWarningView) scamWarningView.snp.makeConstraints { make in make.width.equalTo(self).offset(viewOffset) @@ -307,5 +329,7 @@ private extension SendViewLayout { selectNetworkView.title = R.string.localizable.commonNetwork(preferredLanguages: locale.rLanguages) sendAllLabel.text = R.string.localizable.sendAllTitle(preferredLanguages: locale.rLanguages) + + commentTextField.title = R.string.localizable.commonMessage(preferredLanguages: locale.rLanguages) } } diff --git a/fearless/Modules/Transfer/Transfer/SoraQrTransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/SoraQrTransferFlowUseCase.swift new file mode 100644 index 0000000000..6db2d204e6 --- /dev/null +++ b/fearless/Modules/Transfer/Transfer/SoraQrTransferFlowUseCase.swift @@ -0,0 +1,176 @@ +import Foundation +import SSFModels +import SSFQRService +import BigInt +import SSFTransferService + +final class SoraQrTransferFlowUseCase: TransferFlowUseCase { + private let wallet: MetaAccountModel + private let dataValidatingFactory: SendDataValidatingFactory + private let logger: LoggerProtocol + + let interactor: TransferInteractorInput + let implType: TransferFlowDirectionImpl = .soraMainnetQr + var transfer: TransferType? + + var selectedChainAsset: ChainAsset? + var utilityChainAsset: ChainAsset? + var comment: String? + var inputResult: AmountInputResult? { + didSet { + calcFee() + } + } + + var recipientAddress: String? { + didSet { + calcFee() + } + } + + var availableInputBalance: Decimal? + var availableBalance: Decimal? + var utilityBalance: Decimal? + + var fee: Decimal? + var tip: Decimal? + var ed: Decimal? + + var sendAllEnabled: Bool? + var isUserInteractiveAmount: Bool = true + var canSelectAsset: Bool = false + var isValidRecipient: Bool? = true + var canEditRecipient: Bool = false + var isSwitchEnableSendAllVisibility: Bool = false + + var provideRecipientViewModel: (() -> Void)? + var provideAssetViewModel: (() -> Void)? + var provideInputViewModel: (() -> Void)? + var provideNetworkViewModel: (() -> Void)? + var provideTipViewModel: (() -> Void)? + var provideFeeViewModel: (() -> Void)? + + init( + wallet: MetaAccountModel, + dataValidatingFactory: SendDataValidatingFactory, + interactor: TransferInteractorInput, + logger: LoggerProtocol + ) { + self.interactor = interactor + self.dataValidatingFactory = dataValidatingFactory + self.wallet = wallet + self.logger = logger + } + + func handle(initialData: SendFlowInitialData) async throws { + guard case let .soraMainnet(qrInfo) = initialData else { + throw TransferFlowUseCaseError.wrongType + } + let possibleChains = await interactor.getPossibleChains(for: qrInfo.address) + let chainAsset = possibleChains + .first(where: { $0.isSora })?.chainAssets + .first(where: { $0.asset.currencyId == qrInfo.assetId }) + + guard let qrChainAsset = chainAsset else { + throw TransferFlowUseCaseError.unsupportedAsset + } + + selectedChainAsset = qrChainAsset + utilityChainAsset = qrChainAsset.chain.utilityChainAssets().first + + if let qrAmount = Decimal(string: qrInfo.amount ?? "") { + inputResult = .absolute(qrAmount) + isUserInteractiveAmount = false + provideInputViewModel?() + } + + await interactor.subscribeToPrice(for: qrChainAsset) + + recipientAddress = qrInfo.address + provideRecipientViewModel?() + provideNetworkViewModel?() + provideAssetViewModel?() + + try await fetchRequaredInfo(for: qrChainAsset) + calcFee() + } + + func getValidators( + validationCase: TransferValidationCase, + locale: Locale + ) throws -> [DataValidating] { + switch validationCase { + case .validateED: + return [] + case .all: + guard + let selectedChainAsset, + let availableInputBalance + else { + throw TransferFlowUseCaseError.getValidatorsError + } + + let balanceType: BalanceType = selectedChainAsset.isUtility + ? .utility(balance: utilityBalance) + : .orml(balance: availableBalance, utilityBalance: utilityBalance) + + let sendAmount = inputResult?.absoluteValue(from: availableInputBalance) + + let validators = [ + dataValidatingFactory.has( + fee: fee, + locale: locale + ) { [weak self] in + guard let transfer = self?.transfer else { + return + } + self?.refreshFee(for: transfer) + }, + dataValidatingFactory.canPayFeeAndAmount( + balanceType: balanceType, + feeAndTip: fee.or(.zero) + tip.or(.zero), + sendAmount: sendAmount, + locale: locale + ) + ] + return validators + } + } + + // MARK: - Private methods + + private func calcFee() { + guard let transfer = buildSubstrateTransfer() else { + return + } + refreshFee(for: transfer) + } + + private func fetchRequaredInfo(for chainAsset: ChainAsset) async throws { + guard let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId else { + throw TransferFlowUseCaseError.missingAccount + } + + async let balancesTask = try await interactor.fetchAccountInfos(for: chainAsset) + + let chainAssetBalance = await balance( + for: chainAsset, + accountId: accountId, + accountInfos: try await balancesTask + ) + availableBalance = chainAssetBalance + + if let utilityChainAsset { + let utilityChainAssetBalance = await balance( + for: utilityChainAsset, + accountId: accountId, + accountInfos: try await balancesTask + ) + utilityBalance = utilityChainAssetBalance + } + + await calcAvailableInputBalance() + provideInputViewModel?() + provideAssetViewModel?() + } +} diff --git a/fearless/Modules/Transfer/Transfer/SubstrateTransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/SubstrateTransferFlowUseCase.swift new file mode 100644 index 0000000000..4262dd7587 --- /dev/null +++ b/fearless/Modules/Transfer/Transfer/SubstrateTransferFlowUseCase.swift @@ -0,0 +1,219 @@ +import Foundation +import SSFModels +import SSFQRService +import BigInt +import SSFTransferService + +final class SubstrateTransferFlowUseCase: TransferFlowUseCase { + private let wallet: MetaAccountModel + private let dataValidatingFactory: SendDataValidatingFactory + private let logger: LoggerProtocol + + let interactor: TransferInteractorInput + let implType: TransferFlowDirectionImpl = .substrate + var transfer: TransferType? + + var selectedChainAsset: ChainAsset? + var utilityChainAsset: ChainAsset? + var comment: String? + var inputResult: AmountInputResult? { + didSet { + calcFee() + } + } + + var recipientAddress: String? { + didSet { + calcFee() + } + } + + var availableInputBalance: Decimal? + var availableBalance: Decimal? + var utilityBalance: Decimal? + + var fee: Decimal? + var tip: Decimal? + var ed: Decimal? + + var sendAllEnabled: Bool? = false + var isUserInteractiveAmount: Bool = true + var isValidRecipient: Bool? = false + var canEditRecipient: Bool = true + var canSelectAsset: Bool = true + var isSwitchEnableSendAllVisibility: Bool = false + + var provideRecipientViewModel: (() -> Void)? + var provideAssetViewModel: (() -> Void)? + var provideInputViewModel: (() -> Void)? + var provideNetworkViewModel: (() -> Void)? + var provideTipViewModel: (() -> Void)? + var provideFeeViewModel: (() -> Void)? + + init( + wallet: MetaAccountModel, + dataValidatingFactory: SendDataValidatingFactory, + interactor: TransferInteractorInput, + logger: LoggerProtocol + ) { + self.dataValidatingFactory = dataValidatingFactory + self.interactor = interactor + self.wallet = wallet + self.logger = logger + } + + func handle(initialData: SendFlowInitialData) async throws { + guard case let .chainAsset(chainAsset) = initialData else { + throw TransferFlowUseCaseError.wrongType + } +// recipientAddress = address + provideRecipientViewModel?() + + selectedChainAsset = chainAsset + utilityChainAsset = chainAsset.chain.utilityChainAssets().first + await interactor.subscribeToPrice(for: chainAsset) + + provideNetworkViewModel?() + + try await fetchRequaredInfo(for: chainAsset) + calcFee() + } + + func getValidators( + validationCase: TransferValidationCase, + locale: Locale + ) throws -> [any DataValidating] { + guard + let selectedChainAsset, + let availableInputBalance, + let inputResult, + let utilityBalance + else { + throw TransferFlowUseCaseError.getValidatorsError + } + let sendAmount = inputResult.absoluteValue(from: availableInputBalance) + + let spending: Decimal + if selectedChainAsset.isUtility { + spending = sendAmount + fee.or(.zero) + tip.or(.zero) + } else { + spending = fee.or(.zero) + tip.or(.zero) + } + let exsitentialDepositIsNotViolated = dataValidatingFactory.exsitentialDepositIsNotViolated( + spending: spending, + balance: utilityBalance, + minimumBalance: ed.or(.zero), + chainAsset: selectedChainAsset, + locale: locale, + sendAllEnabled: sendAllEnabled ?? false, + proceedAction: { [weak self] in + self?.sendAllEnabled = true + self?.provideAssetViewModel?() + }, + setMaxAction: { [weak self] in + self?.sendAllEnabled = true + self?.inputResult = .rate(1.0) + self?.provideAssetViewModel?() + self?.provideInputViewModel?() + self?.refreshFee(for: self?.transfer) + }, + cancelAction: { [weak self] in + self?.sendAllEnabled = false + self?.inputResult = .rate(0.0) + self?.provideAssetViewModel?() + self?.provideInputViewModel?() + } + ) + switch validationCase { + case .validateED: + return [exsitentialDepositIsNotViolated] + case .all: + let balanceType: BalanceType = selectedChainAsset.isUtility + ? .utility(balance: utilityBalance) + : .orml(balance: availableBalance, utilityBalance: utilityBalance) + + return [ + exsitentialDepositIsNotViolated, + dataValidatingFactory.has( + fee: fee, + locale: locale, + onError: { [weak self] in + self?.refreshFee(for: self?.transfer) + } + ), + dataValidatingFactory.canPayFeeAndAmount( + balanceType: balanceType, + feeAndTip: (fee ?? 0) + (tip ?? 0), + sendAmount: sendAmount, + locale: locale + ), + ] + } + } + + // MARK: - Private methods + + private func calcFee() { + guard let transfer = buildSubstrateTransfer() else { + return + } + refreshFee(for: transfer) + } + + private func fetchRequaredInfo(for chainAsset: ChainAsset) async throws { + guard let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId else { + throw TransferFlowUseCaseError.missingAccount + } + + async let balancesTask = try await interactor.fetchAccountInfos(for: chainAsset) + async let tipTask = await interactor.fetchTip(for: chainAsset) + async let edTask = await interactor.fetchExistentialDeposit(for: chainAsset) + + let chainAssetBalance = await balance( + for: chainAsset, + accountId: accountId, + accountInfos: try await balancesTask + ) + availableBalance = chainAssetBalance + + if let utilityChainAsset { + let utilityChainAssetBalance = await balance( + for: utilityChainAsset, + accountId: accountId, + accountInfos: try await balancesTask + ) + utilityBalance = utilityChainAssetBalance + + do { + let tip = try await Decimal.fromSubstrateAmount( + tipTask, + precision: Int16(utilityChainAsset.asset.precision) + ) + self.tip = tip + provideTipViewModel?() + } catch { + logger.customError(error) + } + + do { + let ed = try await Decimal.fromSubstrateAmount( + edTask, + precision: Int16(utilityChainAsset.asset.precision) + ) + self.ed = ed + } catch { + logger.customError(error) + } + + isSwitchEnableSendAllVisibility = await [ + try? edTask > .zero, + availableBalance.or(.zero) > .zero, + selectedChainAsset?.isUtility == true + ].compactMap { $0 }.allSatisfy { $0 } + } + + await calcAvailableInputBalance() + provideInputViewModel?() + provideAssetViewModel?() + } +} diff --git a/fearless/Modules/Transfer/Transfer/TonTransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/TonTransferFlowUseCase.swift new file mode 100644 index 0000000000..d45b7631f9 --- /dev/null +++ b/fearless/Modules/Transfer/Transfer/TonTransferFlowUseCase.swift @@ -0,0 +1,237 @@ +import Foundation +import SSFModels +import BigInt +import SSFTransferService +import TonSwift + +final class TonTransferFlowUseCase: TransferFlowUseCase { + private let wallet: MetaAccountModel + private let dataValidatingFactory: SendDataValidatingFactory + private let logger: LoggerProtocol + + let interactor: TransferInteractorInput + let implType: TransferFlowDirectionImpl = .ton + var transfer: TransferType? + + var selectedChainAsset: ChainAsset? + var utilityChainAsset: ChainAsset? + var comment: String? + var inputResult: AmountInputResult? { + didSet { + calcFee() + } + } + + var recipientAddress: String? { + didSet { + calcFee() + } + } + + var availableInputBalance: Decimal? + var availableBalance: Decimal? + var utilityBalance: Decimal? + + var fee: Decimal? + var tip: Decimal? + var ed: Decimal? + + var sendAllEnabled: Bool? + var isUserInteractiveAmount: Bool = true + var isValidRecipient: Bool? = false + var canEditRecipient: Bool = true + var canSelectAsset: Bool = true + var isSwitchEnableSendAllVisibility: Bool = false + + var provideRecipientViewModel: (() -> Void)? + var provideAssetViewModel: (() -> Void)? + var provideInputViewModel: (() -> Void)? + var provideNetworkViewModel: (() -> Void)? + var provideTipViewModel: (() -> Void)? + var provideFeeViewModel: (() -> Void)? + + init( + wallet: MetaAccountModel, + dataValidatingFactory: SendDataValidatingFactory, + interactor: TransferInteractorInput, + logger: LoggerProtocol + ) { + self.interactor = interactor + self.dataValidatingFactory = dataValidatingFactory + self.wallet = wallet + self.logger = logger + } + + func handle(initialData: SendFlowInitialData) async throws { + guard case let .chainAsset(chainAsset) = initialData else { + throw TransferFlowUseCaseError.wrongType + } + + selectedChainAsset = chainAsset + utilityChainAsset = chainAsset.chain.utilityChainAssets().first + await interactor.subscribeToPrice(for: chainAsset) + + provideRecipientViewModel?() + provideNetworkViewModel?() + + try await fetchRequaredInfo(for: chainAsset) + calcFee() + } + + func getValidators( + validationCase: TransferValidationCase, + locale: Locale + ) throws -> [any DataValidating] { + switch validationCase { + case .validateED: + return [] + case .all: + guard + let selectedChainAsset, + let availableInputBalance + else { + throw TransferFlowUseCaseError.getValidatorsError + } + + let balanceType: BalanceType = selectedChainAsset.isUtility + ? .utility(balance: utilityBalance) + : .orml(balance: availableBalance, utilityBalance: utilityBalance) + + let sendAmount = inputResult?.absoluteValue(from: availableInputBalance) + + let validators = [ + dataValidatingFactory.has( + fee: fee, + locale: locale + ) { [weak self] in + guard let transfer = self?.transfer else { + return + } + self?.refreshFee(for: transfer) + }, + dataValidatingFactory.canPayFeeAndAmount( + balanceType: balanceType, + feeAndTip: .zero, + sendAmount: sendAmount, + locale: locale + ) + ] + return validators + } + } + + // MARK: - Private methods + + private func calcFee() { + guard + let transfer = buildTonTransfer(), + let selectedChainAsset, + let utilityChainAsset + else { + return + } + provideFeeViewModel?() + Task { [weak self] in + guard let self else { return } + let stream = await self.interactor.estimateFee( + transfer: transfer, + chainAsset: selectedChainAsset + ) + let precision = Int16(utilityChainAsset.asset.precision) + do { + for try await fee in stream { + self.fee = Decimal.fromSubstrateAmount(fee, precision: precision) + self.provideFeeViewModel?() + } + } catch { + logger.customError(error) + } + } + } + + private func buildTonTransfer() -> TransferType? { + guard + let availableInputBalance, + let selectedChainAsset, + let inputAmount = inputResult?.absoluteValue(from: availableInputBalance), + let amount = inputAmount.toSubstrateAmount(precision: Int16(selectedChainAsset.asset.precision)), + let address = try? wallet.fetch(for: selectedChainAsset.chain.accountRequest())?.accountId.asTonAddress(), + let recipientAddress = getRecipientAddress(), + let contract = wallet.tonWalletContract() + else { + transfer = nil + return nil + } + + let isMax = availableBalance == inputAmount + + let token: Token + switch selectedChainAsset.asset.assetType.tonAssetType { + case .normal: + token = .ton + case .jetton: + guard let jettonWalletAddress = try? TonSwift.Address.parse(selectedChainAsset.asset.id) else { + return nil + } + token = .jetton(jettonWalletAddress: jettonWalletAddress) + case .none: + return nil + } + + let tonTransfer = TonTransfer( + amount: amount, + token: token, + isMax: isMax, + contract: contract, + sender: address, + recipientAddress: recipientAddress, + comment: comment + ) + let transfer = TransferType.ton(tonTransfer) + self.transfer = transfer + return transfer + } + + private func getRecipientAddress() -> RecipientAddress? { + guard let recipientAddress else { + return nil + } + let recipient: RecipientAddress + if let friendly = try? FriendlyAddress(string: recipientAddress) { + recipient = .friendly(friendly) + } else if let raw = try? TonSwift.Address.parse(recipientAddress) { + recipient = .raw(raw) + } else { + return nil + } + return recipient + } + + private func fetchRequaredInfo(for chainAsset: ChainAsset) async throws { + guard let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId else { + throw TransferFlowUseCaseError.missingAccount + } + + async let balancesTask = try await interactor.fetchAccountInfos(for: chainAsset) + + let chainAssetBalance = await balance( + for: chainAsset, + accountId: accountId, + accountInfos: try await balancesTask + ) + availableBalance = chainAssetBalance + provideInputViewModel?() + + if let utilityChainAsset { + let utilityChainAssetBalance = await balance( + for: utilityChainAsset, + accountId: accountId, + accountInfos: try await balancesTask + ) + utilityBalance = utilityChainAssetBalance + } + + availableInputBalance = availableBalance + provideAssetViewModel?() + } +} diff --git a/fearless/Modules/Transfer/Transfer/TransferAssembly.swift b/fearless/Modules/Transfer/Transfer/TransferAssembly.swift new file mode 100644 index 0000000000..b1cdb29b84 --- /dev/null +++ b/fearless/Modules/Transfer/Transfer/TransferAssembly.swift @@ -0,0 +1,87 @@ +import UIKit +import SSFUtils +import SoraFoundation +import SSFModels + +final class TransferAssembly { + @MainActor static func configureModule( + wallet: MetaAccountModel, + initialData: SendFlowInitialData + ) -> TransferModuleCreationResult? { + let localizationManager = LocalizationManager.shared + + let deps = TransferDepsContainer(wallet: wallet) + let interactor = TransferInteractor( + deps: deps, + priceLocalSubscriber: ServiceAssembly.shared.priceLocalSubscriber, + chainAssetFetching: ServiceAssembly.shared.chainAssetFetching(qualityOfService: .default), + scamRepository: ServiceAssembly.shared.scamInfoAsyncRepository() + ) + let router = TransferRouter() + let dataValidatingFactory = SendDataValidatingFactory(presentable: router) + let possibleFlows = Self.createFlows( + wallet: wallet, + interactor: interactor, + dataValidatingFactory: dataValidatingFactory + ) + let viewModelFactory = SendViewModelFactory(wallet: wallet, iconGenerator: UniversalIconGenerator()) + let presenter = TransferPresenter( + wallet: wallet, + initialData: initialData, + viewModelFactory: viewModelFactory, + possibleFlows: possibleFlows, + interactor: interactor, + router: router, + logger: ServiceAssembly.shared.logger, + localizationManager: localizationManager + ) + + let view = TransferViewController( + initialData: initialData, + output: presenter, + localizationManager: localizationManager + ) + dataValidatingFactory.view = view + + return (view, presenter) + } + + private static func createFlows( + wallet: MetaAccountModel, + interactor: TransferInteractorInput, + dataValidatingFactory: SendDataValidatingFactory + ) -> [TransferFlowUseCase] { + [ + SoraQrTransferFlowUseCase( + wallet: wallet, + dataValidatingFactory: dataValidatingFactory, + interactor: interactor, + logger: ServiceAssembly.shared.logger + ), + BokoloTransferFlowUseCase( + wallet: wallet, + dataValidatingFactory: dataValidatingFactory, + interactor: interactor, + logger: ServiceAssembly.shared.logger + ), + SubstrateTransferFlowUseCase( + wallet: wallet, + dataValidatingFactory: dataValidatingFactory, + interactor: interactor, + logger: ServiceAssembly.shared.logger + ), + EthereumTransferFlowUseCase( + wallet: wallet, + dataValidatingFactory: dataValidatingFactory, + interactor: interactor, + logger: ServiceAssembly.shared.logger + ), + TonTransferFlowUseCase( + wallet: wallet, + dataValidatingFactory: dataValidatingFactory, + interactor: interactor, + logger: ServiceAssembly.shared.logger + ) + ] + } +} diff --git a/fearless/Modules/Transfer/Transfer/TransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/TransferFlowUseCase.swift new file mode 100644 index 0000000000..735b2a2a21 --- /dev/null +++ b/fearless/Modules/Transfer/Transfer/TransferFlowUseCase.swift @@ -0,0 +1,204 @@ +import Foundation +import SSFModels +import SSFQRService +import SSFTransferService + +enum TransferFlowUseCaseError: Error { + case wrongType + case unsupportedAsset + case missingAccount + case getValidatorsError +} + +enum TransferFlowDirectionImpl { + case substrate // + case ethereum // + case soraMainnetQr // + case bokoloCash // + case ton // +} + +enum TransferValidationCase { + case validateED + case all +} + +protocol TransferFlowUseCase: AnyObject { + var interactor: TransferInteractorInput { get } + var implType: TransferFlowDirectionImpl { get } + var transfer: TransferType? { get set } + + var selectedChainAsset: ChainAsset? { get set } + var utilityChainAsset: ChainAsset? { get set } + var inputResult: AmountInputResult? { get set } + var recipientAddress: String? { get set } + var comment: String? { get set } + + var availableInputBalance: Decimal? { get set } + var availableBalance: Decimal? { get set } + var utilityBalance: Decimal? { get set } + + var fee: Decimal? { get set } + var tip: Decimal? { get set } + var ed: Decimal? { get set } + + var isUserInteractiveAmount: Bool { get set } + var canSelectAsset: Bool { get } + var isValidRecipient: Bool? { get set } + var canEditRecipient: Bool { get set } + var isSwitchEnableSendAllVisibility: Bool { get } + var sendAllEnabled: Bool? { get set } + + var provideRecipientViewModel: (() -> Void)? { get set } + var provideNetworkViewModel: (() -> Void)? { get set } + var provideAssetViewModel: (() -> Void)? { get set } + var provideInputViewModel: (() -> Void)? { get set } + var provideTipViewModel: (() -> Void)? { get set } + var provideFeeViewModel: (() -> Void)? { get set } + + func handle(initialData: SendFlowInitialData) async throws + func reset() async + func handleRecipient(address: String) async + func isReadyToContinue() -> Bool + func getValidators( + validationCase: TransferValidationCase, + locale: Locale + ) throws -> [DataValidating] +} + +extension TransferFlowUseCase { + func amount() -> Decimal? { + guard let availableInputBalance else { + return nil + } + let amount = inputResult?.absoluteValue(from: availableInputBalance) + return amount + } + + func reset() async { + transfer = nil + selectedChainAsset = nil + utilityChainAsset = nil + inputResult = nil + recipientAddress = nil + availableInputBalance = nil + availableBalance = nil + utilityBalance = nil + fee = nil + tip = nil + ed = nil + isValidRecipient = nil + comment = nil + } + + func handleRecipient(address: String) async { + recipientAddress = address + guard address.isNotEmpty else { + isValidRecipient = nil + recipientAddress = nil + provideRecipientViewModel?() + return + } + + guard let selectedChainAsset else { + return + } + + let isValid = await interactor.validate(address: address, for: selectedChainAsset.chain).isValid + isValidRecipient = isValid + provideRecipientViewModel?() + } + + func isReadyToContinue() -> Bool { + guard + let availableInputBalance, + let inputAmount = inputResult?.absoluteValue(from: availableInputBalance) + else { + return false + } + + let allSatisfy = [ + recipientAddress != nil, + inputAmount > 0 + ].allSatisfy { $0 } + return allSatisfy + } + + func balance( + for chainAsset: ChainAsset, + accountId: AccountId, + accountInfos: [ChainAssetKey: AccountInfo?] + ) async -> Decimal? { + let key = chainAsset.uniqueKey(accountId: accountId) + let chainAssetAccountInfo = accountInfos[key] ?? nil + let chainAssetBalance = chainAssetAccountInfo.map { + Decimal.fromSubstrateAmount( + $0.data.sendAvailable, + precision: Int16(chainAsset.asset.precision) + ) + } ?? .zero + return chainAssetBalance + } + + /// Before use this method make sure what calcAvailableInputBalance() suit for you case + func refreshFee(for transfer: TransferType?) { + guard + let selectedChainAsset, + let transfer, + let utilityChainAsset + else { + return + } + provideFeeViewModel?() + Task { [weak self] in + guard let self else { return } + let stream = await self.interactor.estimateFee( + transfer: transfer, + chainAsset: selectedChainAsset + ) + for try await fee in stream { + let precision = Int16(utilityChainAsset.asset.precision) + self.fee = Decimal.fromSubstrateAmount(fee, precision: precision) + self.provideFeeViewModel?() + await calcAvailableInputBalance() + } + } + } + + func buildSubstrateTransfer() -> TransferType? { + guard + let availableInputBalance, + let selectedChainAsset, + let recipientAddress, + let inputAmount = inputResult?.absoluteValue(from: availableInputBalance), + let amount = inputAmount.toSubstrateAmount(precision: Int16(selectedChainAsset.asset.precision)) + else { + transfer = nil + return nil + } + let tip = tip?.toSubstrateAmount(precision: Int16(selectedChainAsset.asset.precision)) + let subtrateTransfer = SubstrateTransfer( + amount: amount, + receiver: recipientAddress, + tip: tip + ) + let transfer = TransferType.substrate(subtrateTransfer) + return transfer + } + + func calcAvailableInputBalance() async { + guard + let selectedChainAsset, + let utilityChainAsset + else { + return + } + + if selectedChainAsset.chainAssetId == utilityChainAsset.chainAssetId { + availableInputBalance = availableBalance.or(.zero) - fee.or(.zero) - tip.or(.zero) + } else { + availableInputBalance = availableBalance + } + provideInputViewModel?() + } +} diff --git a/fearless/Modules/Transfer/Transfer/TransferInteractor.swift b/fearless/Modules/Transfer/Transfer/TransferInteractor.swift new file mode 100644 index 0000000000..c80254da45 --- /dev/null +++ b/fearless/Modules/Transfer/Transfer/TransferInteractor.swift @@ -0,0 +1,237 @@ +import UIKit +import SSFModels +import SSFTransferService +import SSFStorageQueryKit +import BigInt +import RobinHood + +protocol TransferInteractorOutput: AnyObject { + func didReceivePriceData(result: Result<[PriceData], any Error>) +} + +struct TransferDepsContainer { + let wallet: MetaAccountModel + + init(wallet: MetaAccountModel) { + self.wallet = wallet + } + + lazy var chainRegistry: ChainRegistryProtocol = { + ServiceAssembly.shared.chainRegistry + }() + + lazy var operationManager: OperationManagerProtocol = { + ServiceAssembly.shared.operationManager + }() + + lazy var existentialDepositService: ExistentialDepositServiceProtocol = { + ServiceAssembly.shared.existentialDepositService() + }() + + lazy var transferService: TransferService = { + ServiceAssembly.shared.transferService(for: wallet) + }() + + lazy var polkaswapService: PolkaswapService = { + ServiceAssembly.shared.polkaswapService() + }() + + lazy var storageRequestPerformer: SSFStorageQueryKit.StorageRequestPerformer = { + SSFStorageQueryKit.StorageRequestPerformerDefault( + chainRegistry: ServiceAssembly.shared.chainRegistry + ) + }() + + lazy var accountInfoRemoteService: AccountInfoRemoteService = { + ServiceAssembly.shared.accountInfoRemoteServiceDefault() + }() + + lazy var addressChainDefiner: AddressChainDefiner = { + ServiceAssembly.shared.addressChainDefiner(wallet: wallet) + }() +} + +actor TransferInteractor: RuntimeConstantFetching { + // MARK: - Private properties + + private weak var output: TransferInteractorOutput? + + private var deps: TransferDepsContainer + private let priceLocalSubscriber: PriceLocalStorageSubscriber + private let chainAssetFetching: ChainAssetFetchingProtocol + private let scamRepository: AsyncAnyRepository + + private var priceProvider: AnySingleValueProvider<[PriceData]>? + + init( + deps: TransferDepsContainer, + priceLocalSubscriber: PriceLocalStorageSubscriber, + chainAssetFetching: ChainAssetFetchingProtocol, + scamRepository: AsyncAnyRepository + ) { + self.deps = deps + self.priceLocalSubscriber = priceLocalSubscriber + self.chainAssetFetching = chainAssetFetching + self.scamRepository = scamRepository + } + + // MARK: - Private methods + + private func getChainAssets(for chainAsset: ChainAsset) -> [ChainAsset] { + [chainAsset, chainAsset.chain.utilityChainAssets().first] + .compactMap { $0 } + .uniq(predicate: { $0.chainAssetId }) + } +} + +// MARK: - TransferInteractorInput + +extension TransferInteractor: TransferInteractorInput { + func getScamInfo(for address: String) async throws -> ScamInfo? { + try await scamRepository.fetch(by: address, options: RepositoryFetchOptions()) + } + + func setup(with output: TransferInteractorOutput) async { + self.output = output + } + + func validate(address: String?, for chain: SSFModels.ChainModel) -> AddressValidationResult { + deps.addressChainDefiner.validate(address: address, for: chain) + } + + func getPossibleChains(for address: String) async -> [ChainModel] { + await deps.addressChainDefiner.getPossibleChains(for: address).or([]) + } + + func subscribeToPrice(for chainAsset: ChainAsset) async { + let chainAssets = getChainAssets(for: chainAsset) + priceProvider = priceLocalSubscriber.subscribeToPrices(for: chainAssets, listener: self) + } + + func fetchTokenStatus(for chainAsset: ChainAsset) async throws -> AssetAccountInfo? { + guard + let currencyId = chainAsset.currencyId, + let accountId = deps.wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId + else { + return nil + } + + let accountIdVariant = try AccountIdVariant.build(raw: accountId, chain: chainAsset.chain) + let request = AssetsAccountRequest1(accountId: accountIdVariant, currencyId: currencyId) + let assetAccountInfo: AssetAccountInfo? = try await deps + .storageRequestPerformer + .performSingle(request, chain: chainAsset.chain) + + return assetAccountInfo + } + + func fetchAccountInfos(for chainAsset: ChainAsset) async throws -> [ChainAssetKey: AccountInfo?] { + let chainAssets = getChainAssets(for: chainAsset) + let accountInfos = try await deps + .accountInfoRemoteService + .fetchAccountInfos(for: chainAssets, wallet: deps.wallet) + return accountInfos + } + + func fetchExistentialDeposit(for chainAsset: ChainAsset) async throws -> BigUInt { + try await deps + .existentialDepositService + .fetchExistentialDeposit(chainAsset: chainAsset) + } + + func fetchTip(for chainAsset: ChainAsset) async throws -> BigUInt { + guard let runtimeCodingService = deps + .chainRegistry + .getRuntimeProvider(for: chainAsset.chain.chainId) + else { + throw RuntimeProviderError.providerUnavailable + } + + let tip: BigUInt = try await fetchConstant( + for: .defaultTip, + runtimeCodingService: runtimeCodingService, + operationManager: deps.operationManager + ) + + return tip + } + + func convert( + chainAsset: ChainAsset, + toChainAsset: ChainAsset, + amount: BigUInt + ) async throws -> SwapValues? { + try await deps + .polkaswapService + .fetchQuotes( + amount: amount, + fromChainAsset: chainAsset, + toChainAsset: toChainAsset + ) + } + + func defineAvailableChains( + for asset: AssetModel, + wallet: MetaAccountModel + ) async throws -> [ChainModel]? { + let chainAssets = try await chainAssetFetching.fetchAwait( + shouldUseCache: true, + filters: [.enabled(wallet: wallet),], + sortDescriptors: [] + ) + let chains = chainAssets.filter { $0.asset.symbolUppercased == asset.symbolUppercased }.map { $0.chain } + return chains + } + + func estimateFee( + transfer: TransferType, + chainAsset: ChainAsset + ) async -> AsyncThrowingStream { + await deps.transferService.estimateFee( + transfer, + for: chainAsset + ) + } + + func submit( + transfer: TransferType, + chainAsset: ChainAsset + ) async throws -> String? { + try await deps.transferService.submit( + transfer, + for: chainAsset + ) + } +} + +// MARK: - PriceLocalSubscriptionHandler + +extension TransferInteractor: PriceLocalSubscriptionHandler { + nonisolated func handlePrices(result: Result<[PriceData], any Error>) { + Task { await output?.didReceivePriceData(result: result) } + } +} + +struct AssetsAccountRequest1: SSFStorageQueryKit.StorageRequest { + let accountId: AccountIdVariant + let currencyId: CurrencyId + + var parametersType: SSFStorageQueryKit.StorageRequestParametersType { + switch accountId { + case let .accountId(accountId): + return .nMap(params: [ + [NMapKeyParam(value: currencyId)], + [NMapKeyParam(value: accountId)] + ]) + case let .address(address): + return .nMap(params: [ + [NMapKeyParam(value: currencyId)], + [NMapKeyParam(value: address)] + ]) + } + } + + var storagePath: any StorageCodingPathProtocol { + StorageCodingPath.assetsAccount + } +} diff --git a/fearless/Modules/Transfer/Transfer/TransferPresenter.swift b/fearless/Modules/Transfer/Transfer/TransferPresenter.swift new file mode 100644 index 0000000000..1f89084ee6 --- /dev/null +++ b/fearless/Modules/Transfer/Transfer/TransferPresenter.swift @@ -0,0 +1,845 @@ +import Foundation +import SSFQRService +import SoraFoundation +import SSFModels +import BigInt +import SSFTransferService + +@MainActor +protocol TransferViewInput: ControllerBackedProtocol { + func didReceive(recipientViewModel: RecipientViewModel?) + func didReceive(assetBalanceViewModel: AssetBalanceViewModelProtocol?) + func didReceive(amountInputViewModel: IAmountInputViewModel?) + func didReceive(selectNetworkViewModel: SelectNetworkViewModel) + func didReceive(feeViewModel: BalanceViewModelProtocol?) + func didReceive(tipViewModel: TipViewModel?) + func setHistoryButton(isVisible: Bool) + func switchEnableSendAllVisibility(isVisible: Bool) + func didBlockUserInteractive(isUserInteractiveAmount: Bool) + func setInputAccessoryView(visible: Bool) + func didReceiveContinueButton(isReady: Bool) + func didReceive(scamInfo: ScamInfo?) + func setCommentInput(isVisible: Bool) + func setCommentViewModel(_ viewModel: InputViewModelProtocol?) +} + +protocol TransferInteractorInput: AnyObject { + func setup(with output: TransferInteractorOutput) async + func getPossibleChains(for address: String) async -> [ChainModel] + func validate(address: String?, for chain: ChainModel) async -> AddressValidationResult + func subscribeToPrice(for chainAsset: ChainAsset) async + func fetchTokenStatus(for chainAsset: ChainAsset) async throws -> AssetAccountInfo? + func fetchAccountInfos(for chainAsset: ChainAsset) async throws -> [ChainAssetKey: AccountInfo?] + func fetchExistentialDeposit(for chainAsset: ChainAsset) async throws -> BigUInt + func fetchTip(for chainAsset: ChainAsset) async throws -> BigUInt + func convert( + chainAsset: ChainAsset, + toChainAsset: ChainAsset, + amount: BigUInt + ) async throws -> SwapValues? + func defineAvailableChains( + for asset: AssetModel, + wallet: MetaAccountModel + ) async throws -> [ChainModel]? + func estimateFee( + transfer: TransferType, + chainAsset: ChainAsset + ) async -> AsyncThrowingStream + func submit( + transfer: TransferType, + chainAsset: ChainAsset + ) async throws -> String? + func getScamInfo(for address: String) async throws -> ScamInfo? +} + +final class TransferPresenter { + // MARK: Private properties + + private weak var view: TransferViewInput? + private let router: TransferRouterInput + private let interactor: TransferInteractorInput + private let viewModelFactory: SendViewModelFactoryProtocol + private let logger: LoggerProtocol + + private let wallet: MetaAccountModel + private let possibleFlows: [TransferFlowUseCase] + + // MARK: - Common state + + private var currentFlowUseCase: TransferFlowUseCase? + private var sendFlow: SendFlowInitialData + private var scamInfo: ScamInfo? + private var prices: [PriceData] = [] + + // MARK: - Constructors + + init( + wallet: MetaAccountModel, + initialData: SendFlowInitialData, + viewModelFactory: SendViewModelFactoryProtocol, + possibleFlows: [TransferFlowUseCase], + interactor: TransferInteractorInput, + router: TransferRouterInput, + logger: LoggerProtocol, + localizationManager: LocalizationManagerProtocol + ) { + self.wallet = wallet + sendFlow = initialData + self.viewModelFactory = viewModelFactory + self.possibleFlows = possibleFlows + self.interactor = interactor + self.router = router + self.logger = logger + self.localizationManager = localizationManager + } + + // MARK: - Private provides methids + + private func provideRecipientViewModel() async { + guard + let currentFlowUseCase, + let address = currentFlowUseCase.recipientAddress + else { + await view?.didReceive(recipientViewModel: nil) + return + } + let viewModel = viewModelFactory.buildRecipientViewModel( + address: address, + isValid: currentFlowUseCase.isValidRecipient, + canEditing: currentFlowUseCase.canEditRecipient + ) + await view?.didReceive(recipientViewModel: viewModel) + await provideScamInfo() + } + + private func provideScamInfo() async { + guard let address = currentFlowUseCase?.recipientAddress else { + return + } + do { + let scamInfo = try await interactor.getScamInfo(for: address) + await view?.didReceive(scamInfo: scamInfo) + self.scamInfo = scamInfo + } catch { + logger.customError(error) + } + } + + private func provideAssetVewModel() async { + guard + let currentFlowUseCase, + let selectedChainAsset = currentFlowUseCase.selectedChainAsset + else { + return + } + + let availableInputBalance = currentFlowUseCase.availableInputBalance ?? .zero + let canSelectAsset = currentFlowUseCase.canSelectAsset + let inputAmount = currentFlowUseCase.inputResult?.absoluteValue(from: availableInputBalance) + let availableBalance = currentFlowUseCase.availableBalance + + let viewModel = viewModelFactory.createAssetBalanceViewModel( + inputAmount: inputAmount, + availableBalance: availableBalance, + prices: prices, + chainAsset: selectedChainAsset, + canSelectAsset: canSelectAsset, + locale: selectedLocale + ) + await view?.didReceive(assetBalanceViewModel: viewModel) + + let isVisible = currentFlowUseCase.isSwitchEnableSendAllVisibility + await view?.switchEnableSendAllVisibility(isVisible: isVisible) + } + + private func provideInputViewModel() async { + guard + let currentFlowUseCase, + let chainAsset = currentFlowUseCase.selectedChainAsset + else { + await view?.didReceive(amountInputViewModel: nil) + return + } + + let availableInputBalance = currentFlowUseCase.availableInputBalance ?? .zero + let inputAmount = currentFlowUseCase.inputResult?.absoluteValue(from: availableInputBalance) + + let inputViewModel = viewModelFactory.createBalanceInputViewModel( + inputAmount: inputAmount, + chainAsset: chainAsset, + locale: selectedLocale + ) + + let isVisible = chainAsset.chain.externalApi?.history != nil + await view?.setHistoryButton(isVisible: isVisible) + await view?.didReceive(amountInputViewModel: inputViewModel) + + let isUserInteractiveAmount = currentFlowUseCase.isUserInteractiveAmount + await view?.didBlockUserInteractive(isUserInteractiveAmount: isUserInteractiveAmount) + } + + private func provideNetworkViewModel() async { + guard let currentFlowUseCase else { + return + } + + switch currentFlowUseCase.implType { + case .substrate, .ethereum, .soraMainnetQr, .ton: + guard let chain = currentFlowUseCase.selectedChainAsset?.chain else { + return + } + let viewModel = viewModelFactory.buildNetworkViewModel( + chain: chain + ) + await view?.didReceive(selectNetworkViewModel: viewModel) + case .bokoloCash: + let networkViewModel = SelectNetworkViewModel( + chainName: "Bokolo cash", + iconViewModel: BundleImageViewModel(image: R.image.bokolocash()) + ) + await view?.didReceive(selectNetworkViewModel: networkViewModel) + } + + let isVisibleComment = currentFlowUseCase.implType == .ton + await view?.setCommentInput(isVisible: isVisibleComment) + await provideCommentInputViewModel() + } + + private func provideCommentInputViewModel() async { + guard (currentFlowUseCase?.implType == .ton) == true else { + await view?.setCommentViewModel(nil) + return + } + + let comment = currentFlowUseCase?.comment ?? "" + let viewModel = InputViewModel(inputHandler: InputHandler(value: comment)) + await view?.setCommentViewModel(viewModel) + } + + private func provideFeeViewModel() async { + guard + let currentFlowUseCase, + let chainAsset = currentFlowUseCase.utilityChainAsset, + let fee = currentFlowUseCase.fee + else { + await view?.didReceive(feeViewModel: nil) + return + } + + let viewModel = viewModelFactory.balanceFromPrice( + chainAsset: chainAsset, + balance: fee, + prices: prices, + locale: selectedLocale + ) + + await view?.didReceive(feeViewModel: viewModel) + } + + private func provideTipViewModel() async { + guard + let currentFlowUseCase, + let chainAsset = currentFlowUseCase.utilityChainAsset, + let tip = currentFlowUseCase.tip + else { + await view?.didReceive(tipViewModel: nil) + return + } + + let balanceViewModel = viewModelFactory.balanceFromPrice( + chainAsset: chainAsset, + balance: tip, + prices: prices, + locale: selectedLocale + ) + + let tipViewModel = TipViewModel( + balanceViewModel: balanceViewModel, + tipRequired: chainAsset.chain.isTipRequired + ) + + await view?.didReceive(tipViewModel: tipViewModel) + } + + private func provideIsReady() async { + let isReady = currentFlowUseCase?.isReadyToContinue() == true + await view?.didReceiveContinueButton(isReady: isReady) + } + + private func provideInputAccessoryView() async { + guard let selectedChainAsset = currentFlowUseCase?.selectedChainAsset else { + return + } + let isVisibleInputAccessory = selectedChainAsset.isBokolo == false + await view?.setInputAccessoryView(visible: isVisibleInputAccessory) + } + + // MARK: - Private methods + + private func handleSendFlow(address: String?) async { + await possibleFlows.asyncForEach { await $0.reset() } + + do { + switch sendFlow { + case let .chainAsset(chainAsset): + await setCurrentFlow(for: chainAsset.chain.ecosystem) + currentFlowUseCase?.recipientAddress = address + try await currentFlowUseCase?.handle(initialData: sendFlow) + case let .address(address): + let possibleChains = await interactor.getPossibleChains(for: address) + guard possibleChains.isNotEmpty else { + await showIncorrectAddressAlert() + return + } + await handle(possibleChains: possibleChains) + case .soraMainnet: + setCurrentFlow(for: .soraMainnetQr) + try await currentFlowUseCase?.handle(initialData: sendFlow) + case .bokoloCash: + setCurrentFlow(for: .bokoloCash) + try await currentFlowUseCase?.handle(initialData: sendFlow) + case let .desiredCryptocurrency(qrInfo: qrInfo): + try await handleDesiredCrypto(qrInfo: qrInfo) + } + } catch { + if let error = error as? TransferFlowUseCaseError { + switch error { + case .unsupportedAsset: + await showUnsupportedAssetAlert() + default: + logger.customError(error) + } + } else { + logger.customError(error) + } + } + + await provideInputAccessoryView() + } + + private func setCurrentFlow(for ecosystem: Ecosystem) async { + switch ecosystem { + case .substrate, .ethereumBased: + guard let flow = possibleFlows.first(where: { $0.implType == .substrate }) else { + return + } + currentFlowUseCase = flow + case .ethereum: + guard let flow = possibleFlows.first(where: { $0.implType == .ethereum }) else { + return + } + currentFlowUseCase = flow + case .ton: + guard let flow = possibleFlows.first(where: { $0.implType == .ton }) else { + return + } + currentFlowUseCase = flow + } + setupBindings() + } + + private func setCurrentFlow(for implType: TransferFlowDirectionImpl) { + guard let flow = possibleFlows.first(where: { $0.implType == implType }) else { + return + } + currentFlowUseCase = flow + setupBindings() + } + + private func handle(possibleChains: [ChainModel]) async { + guard possibleChains.isNotEmpty else { + await router.showSelectAsset( + from: view, + wallet: wallet, + selectedAssetId: nil, + chainAssets: nil, + output: self + ) + return + } + if possibleChains.count == 1, let selectedChain = possibleChains.first { + await defineOrSelectAsset(for: selectedChain) + } else { + await router.showSelectNetwork( + from: view, + wallet: wallet, + selectedChainId: nil, + chainModels: possibleChains, + delegate: self + ) + } + } + + private func defineOrSelectAsset(for chain: ChainModel) async { + await setCurrentFlow(for: chain.ecosystem) + let chainAssets = enabled( + chainAssets: chain.chainAssets, + for: wallet + ) + if chainAssets.count == 1, + let selectedChainAsset = chainAssets.first { + let address = sendFlow.address + sendFlow = .chainAsset(selectedChainAsset /* , address: sendFlow.address */ ) + await handleSendFlow(address: address) + } else { + await router.showSelectAsset( + from: view, + wallet: wallet, + selectedAssetId: nil, + chainAssets: chainAssets, + output: self + ) + } + } + + private func enabled( + chainAssets: [ChainAsset], + for wallet: MetaAccountModel + ) -> [ChainAsset] { + let enabledAssetIds: [String] = wallet.assetsVisibility + .filter { !$0.hidden } + .map { $0.assetId } + let enabled = chainAssets.filter { + enabledAssetIds.contains($0.identifier) + } + return enabled + } + + private func setupBindings() { + currentFlowUseCase?.provideRecipientViewModel = { [weak self] in + Task { [weak self] in + await self?.provideRecipientViewModel() + await self?.provideIsReady() + } + } + currentFlowUseCase?.provideAssetViewModel = { [weak self] in + Task { [weak self] in + await self?.provideAssetVewModel() + await self?.provideIsReady() + } + } + currentFlowUseCase?.provideInputViewModel = { [weak self] in + Task { [weak self] in + await self?.provideInputViewModel() + await self?.provideIsReady() + } + } + currentFlowUseCase?.provideNetworkViewModel = { [weak self] in + Task { [weak self] in + await self?.provideNetworkViewModel() + } + } + currentFlowUseCase?.provideTipViewModel = { [weak self] in + Task { [weak self] in + await self?.provideTipViewModel() + } + } + currentFlowUseCase?.provideFeeViewModel = { [weak self] in + Task { [weak self] in + await self?.provideFeeViewModel() + } + } + } + + private func validateInputData() async { + guard + let currentFlowUseCase, + let selectedChainAsset = currentFlowUseCase.selectedChainAsset + else { + return + } + await validateAddress(with: selectedChainAsset) { [weak self] in + guard let self else { return } + do { + let validators = try currentFlowUseCase.getValidators( + validationCase: .all, + locale: self.selectedLocale + ) + Task { @MainActor in + DataValidationRunner(validators: validators).runValidation { [weak self] in + self?.showConfirm() + } + } + } catch { + logger.customError(error) + } + } + } + + private func validateAddress( + with chainAsset: ChainAsset, + successCompletion: @escaping () -> Void + ) async { + guard let recipientAddress = currentFlowUseCase?.recipientAddress else { + return + } + let validationResult = await interactor.validate(address: recipientAddress, for: chainAsset.chain) + switch validationResult { + case .valid: + successCompletion() + case let .invalid(address): + guard let address = address else { + await showInvalidAddressAlert() + return + } + let possibleChains = await interactor.getPossibleChains(for: address) + guard possibleChains.isNotEmpty else { + await showInvalidAddressAlert() + return + } + + await showPossibleChainsAlert(possibleChains) + case .sameAddress: + await showSameAddressAlert(successCompletion: successCompletion) + } + } + + private func showConfirm() { + Task { @MainActor in + guard + let useCase = currentFlowUseCase, + let chainAsset = useCase.selectedChainAsset + else { + return + } + router.presentConfirm( + from: view, + wallet: wallet, + chainAsset: chainAsset, + useCase: useCase, + sendFlow: sendFlow, + scamInfo: scamInfo + ) + } + } + + // MARK: - Alerts + + @MainActor + private func showSameAddressAlert(successCompletion: @escaping () -> Void) { + let action = SheetAlertPresentableAction( + title: R.string.localizable.commonProceed(preferredLanguages: selectedLocale.rLanguages) + ) { + successCompletion() + } + router.present( + message: R.string.localizable + .sameAddressTransferWarningMessage(preferredLanguages: selectedLocale.rLanguages), + title: R.string.localizable.commonWarning(preferredLanguages: selectedLocale.rLanguages), + closeAction: R.string.localizable.commonCancel(preferredLanguages: selectedLocale.rLanguages), + from: view, + actions: [action] + ) + } + + @MainActor + private func showInvalidAddressAlert() { + router.present( + message: R.string.localizable.errorInvalidAddress(preferredLanguages: selectedLocale.rLanguages), + title: R.string.localizable.commonWarning(preferredLanguages: selectedLocale.rLanguages), + closeAction: R.string.localizable.commonClose(preferredLanguages: selectedLocale.rLanguages), + from: view + ) + } + + @MainActor + private func showPossibleChainsAlert(_ possibleChains: [ChainModel]) async { + let action = SheetAlertPresentableAction( + title: R.string.localizable.commonSelectNetwork(preferredLanguages: selectedLocale.rLanguages) + ) { [weak self] in + guard let self else { return } + Task { @MainActor in + self.router.showSelectNetwork( + from: self.view, + wallet: self.wallet, + selectedChainId: nil, + chainModels: possibleChains, + delegate: self + ) + } + } + router.present( + message: R.string.localizable.errorInvalidAddress(preferredLanguages: selectedLocale.rLanguages), + title: R.string.localizable.commonWarning(preferredLanguages: selectedLocale.rLanguages), + closeAction: R.string.localizable.commonClose(preferredLanguages: selectedLocale.rLanguages), + from: view, + actions: [action] + ) + } + + @MainActor + private func showIncorrectAddressAlert() async { + let dissmissAction = SheetAlertPresentableAction( + title: R.string.localizable.commonClose(preferredLanguages: selectedLocale.rLanguages) + ) { [weak self, view] in + self?.router.dismiss(view: view) + } + let alertViewModel = SheetAlertPresentableViewModel( + title: R.string.localizable.commonWarning(preferredLanguages: selectedLocale.rLanguages), + message: R.string.localizable.errorInvalidAddress(preferredLanguages: selectedLocale.rLanguages), + actions: [dissmissAction], + closeAction: nil, + dismissCompletion: { [weak self, view] in + self?.router.dismiss(view: view) + } + ) + await MainActor.run { [view] in + router.present(viewModel: alertViewModel, from: view) + } + } + + @MainActor + private func showUnsupportedAssetAlert() async { + let dissmissAction = SheetAlertPresentableAction( + title: R.string.localizable.commonClose(preferredLanguages: selectedLocale.rLanguages) + ) { [weak self] in + self?.router.dismiss(view: self?.view) + } + let assetManagementAction = SheetAlertPresentableAction( + title: R.string.localizable.walletManageAssets(preferredLanguages: selectedLocale.rLanguages), + style: .pinkBackgroundWhiteText + ) { [weak self] in + guard let self else { return } + Task { @MainActor in + self.router.showManageAsset(from: self.view, wallet: self.wallet) + } + } + let alertViewModel = SheetAlertPresentableViewModel( + title: R.string.localizable.commonActionReceive(preferredLanguages: selectedLocale.rLanguages), + message: R.string.localizable.errorScanQrDisabledAsset(preferredLanguages: selectedLocale.rLanguages), + actions: [assetManagementAction, dissmissAction], + closeAction: nil, + dismissCompletion: { [weak self] in + self?.router.dismiss(view: self?.view) + } + ) + router.present(viewModel: alertViewModel, from: view) + } +} + +// MARK: - TransferViewOutput + +extension TransferPresenter: TransferViewOutput { + func updateComment(_ text: String?) { + currentFlowUseCase?.comment = text + Task { await provideCommentInputViewModel() } + } + + func didTapBackButton() { + router.dismiss(view: view) + } + + func didTapContinueButton() { + Task { await validateInputData() } + } + + @MainActor + func didTapScanButton() { + router.presentScan(from: view, moduleOutput: self) + } + + @MainActor + func didTapHistoryButton() { + guard let chainAsset = currentFlowUseCase?.selectedChainAsset else { return } + router.presentHistory(from: view, wallet: wallet, chainAsset: chainAsset, moduleOutput: self) + } + + func didTapPasteButton() { + Task { + if let address = UIPasteboard.general.string { + await currentFlowUseCase?.handleRecipient(address: address) + } + } + } + + @MainActor + func didTapSelectAsset() { + let selectedAssetId = currentFlowUseCase?.selectedChainAsset?.asset.id + router.showSelectAsset( + from: view, + wallet: wallet, + selectedAssetId: selectedAssetId, + chainAssets: nil, + output: self + ) + } + + func searchTextDidChanged(_ text: String) { + Task { + await currentFlowUseCase?.handleRecipient(address: text) + } + } + + func selectAmountPercentage(_ percentage: Float, validate: Bool = true) { + currentFlowUseCase?.inputResult = .rate(Decimal(Double(percentage))) + + if validate { + do { + let validators = try currentFlowUseCase?.getValidators( + validationCase: .validateED, + locale: selectedLocale + ) ?? [] + DataValidationRunner(validators: validators).runValidation { + Task { [weak self] in + self?.currentFlowUseCase?.inputResult = .rate(Decimal(Double(percentage))) + await self?.provideAssetVewModel() + await self?.provideInputViewModel() + } + } + } catch { + logger.customError(error) + } + } else { + Task { + await provideAssetVewModel() + await provideInputViewModel() + } + } + + Task { await provideIsReady() } + + guard let transfer = currentFlowUseCase?.transfer else { + return + } + currentFlowUseCase?.refreshFee(for: transfer) + } + + func updateAmount(_ newValue: Decimal) { + currentFlowUseCase?.inputResult = .absolute(newValue) + + do { + let validators = try currentFlowUseCase?.getValidators( + validationCase: .validateED, + locale: selectedLocale + ) ?? [] + DataValidationRunner(validators: validators).runValidation { + Task { [weak self] in + await self?.provideAssetVewModel() + } + } + } catch { + logger.customError(error) + } + + Task { + await provideIsReady() + } + + guard let transfer = currentFlowUseCase?.transfer else { + return + } + currentFlowUseCase?.refreshFee(for: transfer) + } + + func didSwitchSendAll(_ enabled: Bool) { + currentFlowUseCase?.sendAllEnabled = enabled + selectAmountPercentage(Float(enabled.intValue), validate: false) + } + + func didLoad(view: TransferViewInput) { + self.view = view + Task { + await interactor.setup(with: self) + await handleSendFlow(address: nil) + } + } + + private func handleDesiredCrypto(qrInfo: DesiredCryptocurrencyQRInfo) async throws { + let possibleChains = await interactor.getPossibleChains(for: qrInfo.address) + let chainAsset = possibleChains + .first(where: { $0.name.lowercased() == qrInfo.assetName.lowercased() })? + .chainAssets + .first(where: { $0.asset.isUtility }) + + guard let chainAsset else { + await showUnsupportedAssetAlert() + return + } + + await setCurrentFlow(for: chainAsset.chain.ecosystem) + currentFlowUseCase?.recipientAddress = qrInfo.address + currentFlowUseCase?.isValidRecipient = true + currentFlowUseCase?.canEditRecipient = false + + if let qrAmount = Decimal(string: qrInfo.amount ?? "") { + currentFlowUseCase?.inputResult = .absolute(qrAmount) + currentFlowUseCase?.isUserInteractiveAmount = false + } + + try await currentFlowUseCase?.handle(initialData: .chainAsset(chainAsset /* , address: qrInfo.address */ )) + } +} + +// MARK: - TransferInteractorOutput + +extension TransferPresenter: TransferInteractorOutput { + func didReceivePriceData(result: Result<[PriceData], any Error>) { + switch result { + case let .success(success): + prices = success + case let .failure(error): + logger.error("Did receive price error: \(error)") + } + } +} + +// MARK: - TransferModuleInput + +extension TransferPresenter: TransferModuleInput {} + +// MARK: - SelectAssetModuleOutput + +extension TransferPresenter: SelectAssetModuleOutput { + nonisolated func assetSelection( + didCompleteWith chainAsset: ChainAsset?, + contextTag _: Int? + ) { + guard let chainAsset else { + return + } + let address = sendFlow.address + sendFlow = .chainAsset(chainAsset /* , address: sendFlow.address */ ) + Task { await handleSendFlow(address: address) } + } +} + +// MARK: - SelectNetworkDelegate + +extension TransferPresenter: SelectNetworkDelegate { + nonisolated func chainSelection( + view _: any SelectNetworkViewInput, + didCompleteWith chain: ChainModel?, + contextTag _: Int? + ) { + Task { + await handle(possibleChains: [chain].compactMap { $0 }) + } + } +} + +// MARK: - ScanQRModuleOutput + +extension TransferPresenter: ScanQRModuleOutput { + func didFinishWith(scanType: QRMatcherType) { + guard let qrInfo = scanType.qrInfo else { + return + } + + sendFlow = SendFlowInitialData(qrInfoType: qrInfo) + Task { await handleSendFlow(address: nil) } + } +} + +// MARK: - ContactsModuleOutput + +extension TransferPresenter: ContactsModuleOutput { + func didSelect(address: String) { + searchTextDidChanged(address) + } +} + +// MARK: - Localizable + +extension TransferPresenter: Localizable { + nonisolated func applyLocalization() {} +} diff --git a/fearless/Modules/Transfer/Transfer/TransferProtocols.swift b/fearless/Modules/Transfer/Transfer/TransferProtocols.swift new file mode 100644 index 0000000000..855fb5aa5b --- /dev/null +++ b/fearless/Modules/Transfer/Transfer/TransferProtocols.swift @@ -0,0 +1,53 @@ +import SSFModels + +typealias TransferModuleCreationResult = ( + view: TransferViewInput, + input: TransferModuleInput +) + +@MainActor +protocol TransferRouterInput: SheetAlertPresentable, ErrorPresentable, BaseErrorPresentable, PresentDismissable { + func presentScan( + from view: ControllerBackedProtocol?, + moduleOutput: ScanQRModuleOutput + ) + + func presentHistory( + from view: ControllerBackedProtocol?, + wallet: MetaAccountModel, + chainAsset: ChainAsset, + moduleOutput: ContactsModuleOutput + ) + + func showSelectNetwork( + from view: ControllerBackedProtocol?, + wallet: MetaAccountModel, + selectedChainId: ChainModel.Id?, + chainModels: [ChainModel]?, + delegate: SelectNetworkDelegate? + ) + + func showSelectAsset( + from view: ControllerBackedProtocol?, + wallet: MetaAccountModel, + selectedAssetId: AssetModel.Id?, + chainAssets: [ChainAsset]?, + output: SelectAssetModuleOutput + ) + func showManageAsset( + from view: ControllerBackedProtocol?, + wallet: MetaAccountModel + ) + func presentConfirm( + from view: ControllerBackedProtocol?, + wallet: MetaAccountModel, + chainAsset: ChainAsset, + useCase: TransferFlowUseCase, + sendFlow: SendFlowInitialData, + scamInfo: ScamInfo? + ) +} + +protocol TransferModuleInput: AnyObject {} + +protocol TransferModuleOutput: AnyObject {} diff --git a/fearless/Modules/Send/SendRouter.swift b/fearless/Modules/Transfer/Transfer/TransferRouter.swift similarity index 89% rename from fearless/Modules/Send/SendRouter.swift rename to fearless/Modules/Transfer/Transfer/TransferRouter.swift index 6c09574ee0..0c198f0831 100644 --- a/fearless/Modules/Send/SendRouter.swift +++ b/fearless/Modules/Transfer/Transfer/TransferRouter.swift @@ -1,32 +1,8 @@ import Foundation -import SSFQRService import SSFModels +import SSFQRService -final class SendRouter: SendRouterInput { - func presentConfirm( - from view: ControllerBackedProtocol?, - wallet: MetaAccountModel, - chainAsset: ChainAsset, - call: SendConfirmTransferCall, - scamInfo: ScamInfo?, - feeViewModel: BalanceViewModelProtocol? - ) { - guard let controller = WalletSendConfirmViewFactory.createView( - wallet: wallet, - chainAsset: chainAsset, - call: call, - scamInfo: scamInfo, - feeViewModel: feeViewModel - )?.controller else { - return - } - - view?.controller.navigationController?.pushViewController( - controller, - animated: true - ) - } - +final class TransferRouter: TransferRouterInput { func presentScan( from view: ControllerBackedProtocol?, moduleOutput: ScanQRModuleOutput @@ -112,4 +88,30 @@ final class SendRouter: SendRouterInput { view?.controller.present(controller, animated: true) } + + func presentConfirm( + from view: ControllerBackedProtocol?, + wallet: MetaAccountModel, + chainAsset: ChainAsset, + useCase: TransferFlowUseCase, + sendFlow: SendFlowInitialData, + scamInfo: ScamInfo? + ) { + let module = ConfirmTransferAssembly.configureModule( + wallet: wallet, + chainAsset: chainAsset, + useCase: useCase, + sendFlow: sendFlow, + scamInfo: scamInfo + ) + + guard let controller = module?.view.controller else { + return + } + + view?.controller.navigationController?.pushViewController( + controller, + animated: true + ) + } } diff --git a/fearless/Modules/Transfer/Transfer/TransferSendFlow.swift b/fearless/Modules/Transfer/Transfer/TransferSendFlow.swift new file mode 100644 index 0000000000..381c229119 --- /dev/null +++ b/fearless/Modules/Transfer/Transfer/TransferSendFlow.swift @@ -0,0 +1,33 @@ +import Foundation +import SSFModels +import SSFQRService + +// enum SendInitialData { +// case chainAsset(ChainAsset) +// case address(String) +// case soraMainnet(qrInfo: SoraQRInfo) +// case bokoloCash(qrInfo: BokoloCashQRInfo) +// case desiredCryptocurrency(qrInfo: DesiredCryptocurrencyQRInfo) +// +// init(qrInfoType: QRInfoType) { +// switch qrInfoType { +// case let .bokoloCash(bokoloCashQRInfo): +// self = .bokoloCash(qrInfo: bokoloCashQRInfo) +// case let .sora(soraQRInfo): +// self = .soraMainnet(qrInfo: soraQRInfo) +// case let .cex(cexQRInfo): +// self = .address(cexQRInfo.address) +// case let .desiredCryptocurrency(qrInfo): +// self = .desiredCryptocurrency(qrInfo: qrInfo) +// } +// } +// +// var canSelectAsset: Bool { +// switch self { +// case .chainAsset, .address, .desiredCryptocurrency: +// return true +// case .soraMainnet, .bokoloCash: +// return false +// } +// } +// } diff --git a/fearless/Modules/Send/SendViewController.swift b/fearless/Modules/Transfer/Transfer/TransferViewController.swift similarity index 68% rename from fearless/Modules/Send/SendViewController.swift rename to fearless/Modules/Transfer/Transfer/TransferViewController.swift index 7146b1126c..4584ba74df 100644 --- a/fearless/Modules/Send/SendViewController.swift +++ b/fearless/Modules/Transfer/Transfer/TransferViewController.swift @@ -1,23 +1,39 @@ import UIKit +import SoraUI import SoraFoundation - import SnapKit -final class SendViewController: UIViewController, ViewHolder { +protocol TransferViewOutput: AnyObject { + func didLoad(view: TransferViewInput) + func didTapBackButton() + func didTapContinueButton() + func didTapScanButton() + func didTapHistoryButton() + func didTapPasteButton() + func didTapSelectAsset() + func searchTextDidChanged(_ text: String) + func selectAmountPercentage(_ percentage: Float, validate: Bool) + func updateAmount(_ newValue: Decimal) + func didSwitchSendAll(_ enabled: Bool) + func updateComment(_ text: String?) +} + +final class TransferViewController: UIViewController, ViewHolder { typealias RootViewType = SendViewLayout // MARK: Private properties - private let output: SendViewOutput + private let output: TransferViewOutput private let initialData: SendFlowInitialData private var amountInputViewModel: IAmountInputViewModel? + private var commentInputViewModel: InputViewModelProtocol? // MARK: - Constructor init( initialData: SendFlowInitialData, - output: SendViewOutput, + output: TransferViewOutput, localizationManager: LocalizationManagerProtocol? ) { self.initialData = initialData @@ -42,6 +58,7 @@ final class SendViewController: UIViewController, ViewHolder { output.didLoad(view: self) setupLocalization() configure() + addEndEditingTapGesture(for: rootView) } override func viewWillAppear(_ animated: Bool) { @@ -63,6 +80,12 @@ final class SendViewController: UIViewController, ViewHolder { private func configure() { rootView.searchView.textField.delegate = self rootView.amountView.textField.delegate = self + rootView.commentTextField.animatedInputField.delegate = self + rootView.commentTextField.animatedInputField.addTarget( + self, + action: #selector(actionInputChange), + for: .editingChanged + ) rootView.actionButton.addTarget( self, @@ -88,9 +111,6 @@ final class SendViewController: UIViewController, ViewHolder { self?.output.didTapPasteButton() } - let tapGesture = UITapGestureRecognizer(target: self, action: #selector(selectNetworkClicked)) - rootView.selectNetworkView.addGestureRecognizer(tapGesture) - rootView.amountView.selectHandler = { [weak self] in self?.output.didTapSelectAsset() } @@ -98,11 +118,6 @@ final class SendViewController: UIViewController, ViewHolder { rootView.sendAllSwitch.addTarget(self, action: #selector(sendAllToggleSwitched), for: .valueChanged) } - private func updateActionButton() { - let isEnabled = (amountInputViewModel?.isValid == true) && rootView.searchView.textField.text?.isNotEmpty == true - rootView.actionButton.set(enabled: isEnabled) - } - @objc private func continueButtonClicked() { output.didTapContinueButton() } @@ -119,18 +134,26 @@ final class SendViewController: UIViewController, ViewHolder { output.didTapHistoryButton() } - @objc private func selectNetworkClicked() { - output.didTapSelectNetwork() - } - @objc private func sendAllToggleSwitched() { output.didSwitchSendAll(rootView.sendAllSwitch.isOn) } + + @objc private func actionInputChange() { + if commentInputViewModel?.inputHandler.value != rootView.commentTextField.text { + rootView.commentTextField.text = commentInputViewModel?.inputHandler.value + } + } } -// MARK: - SendViewInput +extension TransferViewController: TransferViewInput { + func setCommentInput(isVisible: Bool) { + rootView.commentTextField.isHidden = !isVisible + } + + func didReceiveContinueButton(isReady: Bool) { + rootView.actionButton.set(enabled: isReady) + } -extension SendViewController: SendViewInput { func setInputAccessoryView(visible: Bool) { rootView.amountView.textField.resignFirstResponder() if visible { @@ -142,13 +165,16 @@ extension SendViewController: SendViewInput { } func didBlockUserInteractive(isUserInteractiveAmount: Bool) { - rootView.searchView.isUserInteractionEnabled = false - rootView.selectNetworkView.isUserInteractionEnabled = false - rootView.amountView.selectHandler = nil + rootView.searchView.isUserInteractionEnabled = isUserInteractiveAmount + rootView.selectNetworkView.isUserInteractionEnabled = isUserInteractiveAmount rootView.amountView.textField.isUserInteractionEnabled = isUserInteractiveAmount - rootView.optionsStackView.isHidden = true + rootView.optionsStackView.isHidden = !isUserInteractiveAmount if isUserInteractiveAmount { - rootView.amountView.textField.becomeFirstResponder() + rootView.amountView.selectHandler = { [weak self] in + self?.output.didTapSelectAsset() + } + } else { + rootView.amountView.selectHandler = nil } } @@ -167,6 +193,11 @@ extension SendViewController: SendViewInput { } } + func setCommentViewModel(_ viewModel: InputViewModelProtocol?) { + commentInputViewModel = viewModel + rootView.commentTextField.animatedInputField.text = viewModel?.inputHandler.value + } + func didReceive(selectNetworkViewModel: SelectNetworkViewModel) { rootView.bind(selectNetworkviewModel: selectNetworkViewModel) } @@ -187,28 +218,10 @@ extension SendViewController: SendViewInput { rootView.actionButton.set(loading: true) } - func didStopFeeCalculation() { - rootView.actionButton.set(loading: false) - updateActionButton() - } - - func didStopTipCalculation() { - updateActionButton() - } - - func didReceive(viewModel: RecipientViewModel) { + func didReceive(recipientViewModel viewModel: RecipientViewModel?) { rootView.bind(viewModel: viewModel) } - func didStartLoading() { - rootView.actionButton.set(loading: true) - } - - func didStopLoading() { - rootView.actionButton.set(loading: false) - updateActionButton() - } - func setHistoryButton(isVisible: Bool) { rootView.historyButton.isHidden = !isVisible } @@ -222,9 +235,9 @@ extension SendViewController: SendViewInput { } } -extension SendViewController: HiddableBarWhenPushed {} +extension TransferViewController: HiddableBarWhenPushed {} -extension SendViewController: UITextFieldDelegate { +extension TransferViewController: UITextFieldDelegate { func textField( _ textField: UITextField, shouldChangeCharactersIn range: NSRange, @@ -281,7 +294,7 @@ extension SendViewController: UITextFieldDelegate { } } -extension SendViewController: AmountInputAccessoryViewDelegate { +extension TransferViewController: AmountInputAccessoryViewDelegate { func didSelect(on _: AmountInputAccessoryView, percentage: Float) { rootView.amountView.textField.resignFirstResponder() @@ -293,7 +306,7 @@ extension SendViewController: AmountInputAccessoryViewDelegate { } } -extension SendViewController: AmountInputViewModelObserver { +extension TransferViewController: AmountInputViewModelObserver { func amountInputDidChange() { rootView.amountView.inputFieldText = amountInputViewModel?.displayAmount @@ -313,11 +326,11 @@ extension SendViewController: AmountInputViewModelObserver { // MARK: - Localizable -extension SendViewController: Localizable { +extension TransferViewController: Localizable { func applyLocalization() {} } -extension SendViewController: KeyboardViewAdoptable { +extension TransferViewController: KeyboardViewAdoptable { var target: Constraint? { rootView.keyboardAdoptableConstraint } func offsetFromKeyboardWithInset(_: CGFloat) -> CGFloat { @@ -326,3 +339,43 @@ extension SendViewController: KeyboardViewAdoptable { func updateWhileKeyboardFrameChanging(_: CGRect) {} } + +// MARK: - AnimatedTextFieldDelegate + +extension TransferViewController: AnimatedTextFieldDelegate { + func animatedTextFieldShouldReturn(_ textField: SoraUI.AnimatedTextField) -> Bool { + textField.resignFirstResponder() + rootView.commentTextField.backgroundView.set(highlighted: false, animated: true) + return false + } + + func animatedTextField( + _ textField: SoraUI.AnimatedTextField, + shouldChangeCharactersIn range: NSRange, + replacementString string: String + ) -> Bool { + guard let currentViewModel = commentInputViewModel else { + return true + } + + let shouldApply = currentViewModel.inputHandler.didReceiveReplacement(string, for: range) + + if !shouldApply, textField.text != currentViewModel.inputHandler.value { + textField.text = currentViewModel.inputHandler.value + } + + NSObject.cancelPreviousPerformRequests( + withTarget: self, + selector: #selector(updateAmount), + object: nil + ) + perform(#selector(updateComment), with: nil, afterDelay: 0.45) + + return shouldApply + } + + @objc private func updateComment() { + let comment = commentInputViewModel?.inputHandler.normalizedValue + output.updateComment(comment) + } +} diff --git a/fearless/Modules/Transfer/Transfer/TransferViewLayout.swift b/fearless/Modules/Transfer/Transfer/TransferViewLayout.swift new file mode 100644 index 0000000000..fc0a142b16 --- /dev/null +++ b/fearless/Modules/Transfer/Transfer/TransferViewLayout.swift @@ -0,0 +1,22 @@ +import UIKit + +final class TransferViewLayout: UIView { + var locale: Locale = .current { + didSet { + applyLocalization() + } + } + + override init(frame: CGRect) { + super.init(frame: frame) + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Private methods + + private func applyLocalization() {} +} diff --git a/fearless/Modules/Send/Validators/SendDataValidatingFactory.swift b/fearless/Modules/Transfer/Validators/SendDataValidatingFactory.swift similarity index 86% rename from fearless/Modules/Send/Validators/SendDataValidatingFactory.swift rename to fearless/Modules/Transfer/Validators/SendDataValidatingFactory.swift index 65371f6b5a..3ae52a593b 100644 --- a/fearless/Modules/Send/Validators/SendDataValidatingFactory.swift +++ b/fearless/Modules/Transfer/Validators/SendDataValidatingFactory.swift @@ -108,9 +108,6 @@ class SendDataValidatingFactory: NSObject { locale: locale ) }, preservesCondition: { - guard !chainAsset.chain.isEthereum else { - return true - } if sendAllEnabled, canProceedIfViolated { return true } @@ -121,8 +118,7 @@ class SendDataValidatingFactory: NSObject { func destinationExistentialDepositIsNotViolated( willReceived: Decimal, minimumBalance: Decimal, - locale: Locale, - chainAsset: ChainAsset + locale: Locale ) -> DataValidating { WarningConditionViolation(onWarning: { [weak self] _ in guard let view = self?.view else { @@ -132,11 +128,7 @@ class SendDataValidatingFactory: NSObject { self?.basePresentable.presentDestinationExistentialDepositError(from: view, locale: locale) }, preservesCondition: { - guard !chainAsset.chain.isEthereum else { - return true - } - - return willReceived >= minimumBalance + willReceived >= minimumBalance }) } @@ -220,29 +212,4 @@ class SendDataValidatingFactory: NSObject { } } } - - private func minAssetAmount( - originCHainId: ChainModel.Id, - destChainId: ChainModel.Id - ) -> String { - let originKnownChain = Chain(chainId: originCHainId) - let destKnownChain = Chain(chainId: destChainId) - - switch (originKnownChain, destKnownChain) { - case (.kusama, .soraMain): - return "0.05 KSM" - case (.polkadot, .soraMain), (.soraMain, .polkadot): - return "1.1 DOT" - case (.liberland, .soraMain): - return "1.0 LLD" - case (.soraMain, .liberland): - return "1.0 LLD" - case (.soraMain, .acala): - return "1.0 ACA" - case (.acala, .soraMain): - return "56.0 ACA" - default: - return "" - } - } } diff --git a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationViewModelFactory.swift b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationViewModelFactory.swift index 7f6c276030..74b324f9ed 100644 --- a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationViewModelFactory.swift +++ b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationViewModelFactory.swift @@ -31,7 +31,7 @@ final class WalletConnectConfirmationViewModelFactoryImpl: WalletConnectConfirma hex: inputData.chain.utilityAssets().first?.color )?.cgColor let symbolViewModel = SymbolViewModel( - symbolViewModel: RemoteImageViewModel(url: inputData.chain.icon), + iconViewModel: RemoteImageViewModel(url: inputData.chain.icon), shadowColor: originShadowColor ) diff --git a/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModel.swift b/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModel.swift index ea0a29d036..e90fc1d8a2 100644 --- a/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModel.swift +++ b/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModel.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels struct WalletConnectSessionViewModel { let dApp: String? diff --git a/fearless/Modules/WalletDetails/ViewModels/WalletDetailsFlow.swift b/fearless/Modules/WalletDetails/ViewModels/WalletDetailsFlow.swift index 2b24d4039e..8097de6384 100644 --- a/fearless/Modules/WalletDetails/ViewModels/WalletDetailsFlow.swift +++ b/fearless/Modules/WalletDetails/ViewModels/WalletDetailsFlow.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels enum WalletDetailsFlow { case normal(wallet: MetaAccountModel) diff --git a/fearless/Modules/WalletDetails/WalletDetailsInteractor.swift b/fearless/Modules/WalletDetails/WalletDetailsInteractor.swift index 6dc82d17e5..b90d6fb062 100644 --- a/fearless/Modules/WalletDetails/WalletDetailsInteractor.swift +++ b/fearless/Modules/WalletDetails/WalletDetailsInteractor.swift @@ -1,6 +1,7 @@ import RobinHood import SSFModels import Foundation +import SSFAccountManagment final class WalletDetailsInteractor { weak var presenter: WalletDetailsInteractorOutputProtocol! @@ -116,7 +117,7 @@ extension WalletDetailsInteractor: WalletDetailsInteractorInputProtocol { .getAvailableExportOptions( for: self.flow.wallet, accountId: accountId, - isEthereum: response.isEthereumBased + ecosystem: response.ecosystem ) self.presenter?.didReceiveExportOptions(options: options, for: chainAccount) default: diff --git a/fearless/Modules/WalletDetails/WalletDetailsPresenter.swift b/fearless/Modules/WalletDetails/WalletDetailsPresenter.swift index e261ab9c02..e3dd54b349 100644 --- a/fearless/Modules/WalletDetails/WalletDetailsPresenter.swift +++ b/fearless/Modules/WalletDetails/WalletDetailsPresenter.swift @@ -142,6 +142,8 @@ extension WalletDetailsPresenter: WalletDetailsInteractorOutputProtocol { self.wireframe.present(from: view, url: url) case let .reefscan(url): self.wireframe.present(from: view, url: url) + case let .tonviewer(url): + self.wireframe.present(from: view, url: url) case .replace: let model = UniqueChainModel(meta: self.flow.wallet, chain: chainAccount.chain) let options: [ReplaceChainOption] = ReplaceChainOption.allCases @@ -230,6 +232,10 @@ private extension WalletDetailsPresenter { if $0.types.contains(.account), let url = $0.explorerUrl(for: address, type: .account) { return .oklink(url: url) } + case .tonviewer: + if $0.types.contains(.tonAccount), let url = $0.explorerUrl(for: address, type: .tonAccount) { + return .tonviewer(url: url) + } } return nil } diff --git a/fearless/Modules/WalletMainContainer/ViewModel/WalletMainContainerViewModelFactory.swift b/fearless/Modules/WalletMainContainer/ViewModel/WalletMainContainerViewModelFactory.swift index b5c4f9d358..fb35ad1e0a 100644 --- a/fearless/Modules/WalletMainContainer/ViewModel/WalletMainContainerViewModelFactory.swift +++ b/fearless/Modules/WalletMainContainer/ViewModel/WalletMainContainerViewModelFactory.swift @@ -1,5 +1,6 @@ import Foundation import SSFModels +import SSFCrypto protocol WalletMainContainerViewModelFactoryProtocol { func buildViewModel( @@ -38,19 +39,22 @@ final class WalletMainContainerViewModelFactory: WalletMainContainerViewModelFac selectedFilterImage = selectedFilter.filterImage } - var address: String? + var chainAddress: String? if let selectedChain = selectedChain, let chainAccountResponse = selectedMetaAccount.fetch(for: selectedChain.accountRequest()), - let address1 = try? AddressFactory.address(for: chainAccountResponse.accountId, chain: selectedChain) { - address = address1 + let address = try? AddressFactory.address( + for: chainAccountResponse.accountId, + chainFormat: selectedChain.chainFormat(bounceable: false) + ) { + chainAddress = address } return WalletMainContainerViewModel( walletName: selectedMetaAccount.name, selectedFilter: selectedFilterName, selectedFilterImage: selectedFilterImage, - address: address + address: chainAddress ) } } diff --git a/fearless/Modules/WalletMainContainer/WalletMainContainerAssembly.swift b/fearless/Modules/WalletMainContainer/WalletMainContainerAssembly.swift index e6e0ee09f8..95ad28b4c4 100644 --- a/fearless/Modules/WalletMainContainer/WalletMainContainerAssembly.swift +++ b/fearless/Modules/WalletMainContainer/WalletMainContainerAssembly.swift @@ -2,6 +2,7 @@ import UIKit import SoraFoundation import RobinHood import SSFUtils +import SSFModels final class WalletMainContainerAssembly { static func configureModule( diff --git a/fearless/Modules/WalletMainContainer/WalletMainContainerRouter.swift b/fearless/Modules/WalletMainContainer/WalletMainContainerRouter.swift index 9a313313af..7457814f9f 100644 --- a/fearless/Modules/WalletMainContainer/WalletMainContainerRouter.swift +++ b/fearless/Modules/WalletMainContainer/WalletMainContainerRouter.swift @@ -91,12 +91,12 @@ final class WalletMainContainerRouter: WalletMainContainerRouterInput { view?.controller.present(module.view.controller, animated: true) } - func showSendFlow( + @MainActor func showSendFlow( from view: ControllerBackedProtocol?, wallet: MetaAccountModel, initialData: SendFlowInitialData ) { - let sendModule = SendAssembly.configureModule(wallet: wallet, initialData: initialData) + let sendModule = TransferAssembly.configureModule(wallet: wallet, initialData: initialData) guard let controller = sendModule?.view.controller else { return } diff --git a/fearless/Modules/WalletOption/WalletOptionProtocols.swift b/fearless/Modules/WalletOption/WalletOptionProtocols.swift index a80a1d0acb..8a45c32d2a 100644 --- a/fearless/Modules/WalletOption/WalletOptionProtocols.swift +++ b/fearless/Modules/WalletOption/WalletOptionProtocols.swift @@ -1,3 +1,5 @@ +import SSFModels + typealias WalletOptionModuleCreationResult = (view: WalletOptionViewInput, input: WalletOptionModuleInput) protocol WalletOptionViewInput: ControllerBackedProtocol { diff --git a/fearless/Modules/WalletOption/WalletOptionRouter.swift b/fearless/Modules/WalletOption/WalletOptionRouter.swift index f7c2b36aa6..ab720f0101 100644 --- a/fearless/Modules/WalletOption/WalletOptionRouter.swift +++ b/fearless/Modules/WalletOption/WalletOptionRouter.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels final class WalletOptionRouter: WalletOptionRouterInput { func showExportWallet(from view: ControllerBackedProtocol?, wallet: ManagedMetaAccountModel) { diff --git a/fearless/Modules/WalletsManagment/WalletsManagmentPresenter.swift b/fearless/Modules/WalletsManagment/WalletsManagmentPresenter.swift index 468bd135b0..abeb217b71 100644 --- a/fearless/Modules/WalletsManagment/WalletsManagmentPresenter.swift +++ b/fearless/Modules/WalletsManagment/WalletsManagmentPresenter.swift @@ -1,5 +1,6 @@ import Foundation import SoraFoundation +import SSFModels final class WalletsManagmentPresenter { // MARK: Private properties diff --git a/fearless/Modules/WalletsManagment/WalletsManagmentProtocols.swift b/fearless/Modules/WalletsManagment/WalletsManagmentProtocols.swift index 3ae59d1381..de5ac808c3 100644 --- a/fearless/Modules/WalletsManagment/WalletsManagmentProtocols.swift +++ b/fearless/Modules/WalletsManagment/WalletsManagmentProtocols.swift @@ -1,4 +1,6 @@ import Foundation +import SSFModels + typealias WalletsManagmentModuleCreationResult = (view: WalletsManagmentViewInput, input: WalletsManagmentModuleInput) protocol WalletsManagmentViewInput: ControllerBackedProtocol { diff --git a/fearless/Modules/WalletsManagment/WalletsManagmentViewLayout.swift b/fearless/Modules/WalletsManagment/WalletsManagmentViewLayout.swift index 4f1de3ba78..5df32af4bd 100644 --- a/fearless/Modules/WalletsManagment/WalletsManagmentViewLayout.swift +++ b/fearless/Modules/WalletsManagment/WalletsManagmentViewLayout.swift @@ -1,5 +1,6 @@ import UIKit import SoraUI +import SSFModels enum WalletsManagmentType { case wallets diff --git a/fearlessTests/Modules/ConfirmTransfer/ConfirmTransferTests.swift b/fearlessTests/Modules/ConfirmTransfer/ConfirmTransferTests.swift new file mode 100644 index 0000000000..5782ed2436 --- /dev/null +++ b/fearlessTests/Modules/ConfirmTransfer/ConfirmTransferTests.swift @@ -0,0 +1,16 @@ +import XCTest + +class ConfirmTransferTests: XCTestCase { + + override func setUp() { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() { + XCTFail("Did you forget to add tests?") + } +} diff --git a/fearlessTests/Modules/Transfer/TransferTests.swift b/fearlessTests/Modules/Transfer/TransferTests.swift new file mode 100644 index 0000000000..2eff88b2bf --- /dev/null +++ b/fearlessTests/Modules/Transfer/TransferTests.swift @@ -0,0 +1,16 @@ +import XCTest + +class TransferTests: XCTestCase { + + override func setUp() { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() { + XCTFail("Did you forget to add tests?") + } +} From 9a14307f6ef22a242a674971b63f2d7796ce3344 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Fri, 23 Aug 2024 12:16:50 +0500 Subject: [PATCH 002/156] Ton connect has been supported --- fearless.xcodeproj/project.pbxproj | 320 +++++++++++-- fearless/AppDelegate.swift | 14 + .../ApplicationLayer/ServiceAssembly.swift | 91 ++++ .../Models/TonConnectConfiguration.swift | 9 - .../Services/Models/TonConnectError.swift | 6 + .../Services/Models/TonConnectEvent.swift | 4 + .../Services/Models/TonConnectManifest.swift | 20 +- .../Models/TonConnectParameters.swift | 28 +- .../Models/TonConnectRequestPayload.swift | 36 ++ .../Services/TonConnectEventsCenter.swift | 133 ++++++ .../Services/TonConnectService.swift | 392 ++++++++++++++++ .../Services/TonConnectSessionCrypto.swift | 62 +++ .../iconBrowser.imageset/Contents.json | 12 + .../iconBrowser.imageset/iconBrowser.pdf | Bin 0 -> 1639 bytes .../Common/Configs/ApplicationConfigs.swift | 5 + .../DataProvider/Sources/DappDataSource.swift | 84 ++++ .../CDTonConnectedApp+CoreDataDecodable.swift | 26 ++ .../Storage/CDTonDapp+CoreDataDecodable.swift | 30 ++ fearless/Common/Model/ChainAsset.swift | 50 +- .../ChainRegistry/ChainRegistry.swift | 2 +- .../ChainRegistry/ChainSyncService.swift | 2 +- .../ConnectionPool/TonAPIAssembly.swift | 40 -- .../Common/Services/ServiceCoordinator.swift | 41 +- .../contents | 18 + .../URLHandling/TonConnectUrlHandling.swift | 24 + .../TriangularedView/TriangularedView.swift | 79 +++- fearless/Configs/fearless.debug.xcconfig | 2 + fearless/Configs/fearless.dev.xcconfig | 2 + fearless/Configs/fearless.release.xcconfig | 2 + .../WalletConnectCoordinator.swift | 108 ++++- .../WalletConnectProposalCoordinator.swift | 60 ++- .../WalletConnectSessionCoordinator.swift | 11 +- .../Cells/BrowserExploreFeaturedCell.swift | 92 ++++ .../Cells/DappBrowserListCell.swift | 122 +++++ .../DappBrowser/DappBrowserAssembly.swift | 52 +++ .../DappBrowser/DappBrowserInteractor.swift | 86 ++++ .../DappBrowser/DappBrowserPresenter.swift | 218 +++++++++ .../DappBrowser/DappBrowserProtocols.swift | 35 ++ .../DappBrowser/DappBrowserRouter.swift | 67 +++ .../DappBrowserViewController.swift | 283 +++++++++++ .../DappBrowser/DappBrowserViewModel.swift | 21 + .../DappBrowserViewModelFactory.swift | 251 ++++++++++ .../View/DappBrowserFeaturedView.swift | 265 +++++++++++ .../View/DappBrowserSectionHeaderView.swift | 114 +++++ .../View/DappBrowserViewLayout.swift | 147 ++++++ .../DappBrowserListAssembly.swift | 32 ++ .../DappBrowserListInteractor.swift | 15 + .../DappBrowserListPresenter.swift | 91 ++++ .../DappBrowserListProtocols.swift | 18 + .../DappBrowserListRouter.swift | 16 + .../DappBrowserListViewController.swift | 170 +++++++ .../DappBrowserListViewLayout.swift | 85 ++++ .../LiquidityPoolDetails/Resources/dapps.json | 163 +++++++ .../MainTabBar/MainTabBarInteractor.swift | 3 - .../MainTabBar/MainTabBarPresenter.swift | 4 - .../MainTabBar/MainTabBarProtocol.swift | 6 - .../MainTabBar/MainTabBarViewFactory.swift | 30 +- .../MainTabBar/MainTabBarWireframe.swift | 10 - .../NetworkManagmentAssembly.swift | 2 + .../NetworkManagmentPresenter.swift | 3 +- .../Onboarding/OnboardingViewLayout.swift | 2 - fearless/Modules/Root/RootInteractor.swift | 7 +- fearless/Modules/ScanQR/ScanQRAssembly.swift | 4 +- .../Models/DappBridgeMessageType.swift | 7 + .../Models/DappBridgeResponse.swift | 38 ++ .../Models/SendTransactionSignRequest.swift | 21 + .../TonWebBridge/Models/TonConnect.swift | 219 +++++++++ .../TonWebBridge/Models/TonConnectApp.swift | 30 ++ .../Models/TonConnectAppRequest.swift | 33 ++ .../Models/TonConnectDessision.swift | 10 + .../Models/TonConnectModels.swift | 14 + .../TonConnectResponses+Encodable.swift | 127 +++++ .../Models/TonConnectSendDessision.swift | 15 + .../Modules/TonWebBridge/Models/TonDapp.swift | 44 ++ .../TonWebBridge/TonWebBridgeAssembly.swift | 37 ++ .../TonWebBridge/TonWebBridgeHeaderView.swift | 123 +++++ .../TonWebBridge/TonWebBridgeInteractor.swift | 50 ++ .../TonWebBridgeMessageBuilder.swift | 438 ++++++++++++++++++ .../TonWebBridge/TonWebBridgePresenter.swift | 340 ++++++++++++++ .../TonWebBridge/TonWebBridgeProtocols.swift | 10 + .../TonWebBridge/TonWebBridgeRouter.swift | 3 + .../TonWebBridgeViewController.swift | 195 ++++++++ .../TonWebBridge/TonWebBridgeViewLayout.swift | 59 +++ .../ConfirmTransferPresenter.swift | 4 +- .../ConfirmTransferViewController.swift | 6 +- .../WalletConnectActiveSessionsRouter.swift | 10 +- .../WalletConnectConfirmationAssembly.swift | 12 +- .../WalletConnectConfirmationInputData.swift | 29 +- .../WalletConnectConfirmationInteractor.swift | 88 +++- .../WalletConnectConfirmationPresenter.swift | 109 ++++- ...tConnectConfirmationViewModelFactory.swift | 59 ++- .../Model/SessionStatus.swift | 63 +++ .../WalletConnectProposalViewModel.swift | 44 +- ...alletConnectProposalViewModelFactory.swift | 272 ++++++++--- .../WalletConnectProposalAssembly.swift | 5 +- ...etConnectProposalExpandableTableCell.swift | 27 +- .../WalletConnectProposalInteractor.swift | 19 +- .../WalletConnectProposalPresenter.swift | 177 ++++--- .../WalletConnectProposalProtocols.swift | 4 +- .../WalletConnectProposalViewController.swift | 21 +- .../WalletConnectProposalViewLayout.swift | 4 +- .../ConnectRequestVariant.swift | 30 ++ .../WalletConnectSessionAssembly.swift | 17 +- .../WalletConnectSessionInteractor.swift | 9 +- .../WalletConnectSessionPresenter.swift | 160 ++++++- .../WalletConnectSessionProtocols.swift | 4 +- ...WalletConnectSessionViewModelFactory.swift | 90 +++- .../WalletMainContainerAssembly.swift | 15 +- .../WalletMainContainerInteractor.swift | 9 +- .../WalletMainContainerPresenter.swift | 18 +- .../WalletMainContainerProtocols.swift | 1 + fearless/fearless.entitlements | 10 + 112 files changed, 6748 insertions(+), 508 deletions(-) delete mode 100644 fearless/ApplicationLayer/Services/Models/TonConnectConfiguration.swift create mode 100644 fearless/ApplicationLayer/Services/Models/TonConnectError.swift create mode 100644 fearless/ApplicationLayer/Services/Models/TonConnectEvent.swift create mode 100644 fearless/ApplicationLayer/Services/Models/TonConnectRequestPayload.swift create mode 100644 fearless/ApplicationLayer/Services/TonConnectEventsCenter.swift create mode 100644 fearless/ApplicationLayer/Services/TonConnectService.swift create mode 100644 fearless/ApplicationLayer/Services/TonConnectSessionCrypto.swift create mode 100644 fearless/Assets.xcassets/iconBrowser.imageset/Contents.json create mode 100644 fearless/Assets.xcassets/iconBrowser.imageset/iconBrowser.pdf create mode 100644 fearless/Common/DataProvider/Sources/DappDataSource.swift create mode 100644 fearless/Common/Extension/Storage/CDTonConnectedApp+CoreDataDecodable.swift create mode 100644 fearless/Common/Extension/Storage/CDTonDapp+CoreDataDecodable.swift delete mode 100644 fearless/Common/Services/ChainRegistry/ConnectionPool/TonAPIAssembly.swift create mode 100644 fearless/Common/URLHandling/TonConnectUrlHandling.swift create mode 100644 fearless/Modules/DappBrowser/Cells/BrowserExploreFeaturedCell.swift create mode 100644 fearless/Modules/DappBrowser/Cells/DappBrowserListCell.swift create mode 100644 fearless/Modules/DappBrowser/DappBrowserAssembly.swift create mode 100644 fearless/Modules/DappBrowser/DappBrowserInteractor.swift create mode 100644 fearless/Modules/DappBrowser/DappBrowserPresenter.swift create mode 100644 fearless/Modules/DappBrowser/DappBrowserProtocols.swift create mode 100644 fearless/Modules/DappBrowser/DappBrowserRouter.swift create mode 100644 fearless/Modules/DappBrowser/DappBrowserViewController.swift create mode 100644 fearless/Modules/DappBrowser/DappBrowserViewModel.swift create mode 100644 fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift create mode 100644 fearless/Modules/DappBrowser/View/DappBrowserFeaturedView.swift create mode 100644 fearless/Modules/DappBrowser/View/DappBrowserSectionHeaderView.swift create mode 100644 fearless/Modules/DappBrowser/View/DappBrowserViewLayout.swift create mode 100644 fearless/Modules/DappBrowserList/DappBrowserListAssembly.swift create mode 100644 fearless/Modules/DappBrowserList/DappBrowserListInteractor.swift create mode 100644 fearless/Modules/DappBrowserList/DappBrowserListPresenter.swift create mode 100644 fearless/Modules/DappBrowserList/DappBrowserListProtocols.swift create mode 100644 fearless/Modules/DappBrowserList/DappBrowserListRouter.swift create mode 100644 fearless/Modules/DappBrowserList/DappBrowserListViewController.swift create mode 100644 fearless/Modules/DappBrowserList/DappBrowserListViewLayout.swift create mode 100644 fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/dapps.json create mode 100644 fearless/Modules/TonWebBridge/Models/DappBridgeMessageType.swift create mode 100644 fearless/Modules/TonWebBridge/Models/DappBridgeResponse.swift create mode 100644 fearless/Modules/TonWebBridge/Models/SendTransactionSignRequest.swift create mode 100644 fearless/Modules/TonWebBridge/Models/TonConnect.swift create mode 100644 fearless/Modules/TonWebBridge/Models/TonConnectApp.swift create mode 100644 fearless/Modules/TonWebBridge/Models/TonConnectAppRequest.swift create mode 100644 fearless/Modules/TonWebBridge/Models/TonConnectDessision.swift create mode 100644 fearless/Modules/TonWebBridge/Models/TonConnectModels.swift create mode 100644 fearless/Modules/TonWebBridge/Models/TonConnectResponses+Encodable.swift create mode 100644 fearless/Modules/TonWebBridge/Models/TonConnectSendDessision.swift create mode 100644 fearless/Modules/TonWebBridge/Models/TonDapp.swift create mode 100644 fearless/Modules/TonWebBridge/TonWebBridgeAssembly.swift create mode 100644 fearless/Modules/TonWebBridge/TonWebBridgeHeaderView.swift create mode 100644 fearless/Modules/TonWebBridge/TonWebBridgeInteractor.swift create mode 100644 fearless/Modules/TonWebBridge/TonWebBridgeMessageBuilder.swift create mode 100644 fearless/Modules/TonWebBridge/TonWebBridgePresenter.swift create mode 100644 fearless/Modules/TonWebBridge/TonWebBridgeProtocols.swift create mode 100644 fearless/Modules/TonWebBridge/TonWebBridgeRouter.swift create mode 100644 fearless/Modules/TonWebBridge/TonWebBridgeViewController.swift create mode 100644 fearless/Modules/TonWebBridge/TonWebBridgeViewLayout.swift create mode 100644 fearless/Modules/WalletConnectProposal/Model/SessionStatus.swift create mode 100644 fearless/Modules/WalletConnectSession/ConnectRequestVariant.swift create mode 100644 fearless/fearless.entitlements diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index 2d6179f174..742827bec3 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -55,16 +55,26 @@ 070ED7ED2C4543D900DF4098 /* StreamURLSessionTransport in Frameworks */ = {isa = PBXBuildFile; productRef = 070ED7EC2C4543D900DF4098 /* StreamURLSessionTransport */; }; 070ED7EF2C4543D900DF4098 /* TonAPI in Frameworks */ = {isa = PBXBuildFile; productRef = 070ED7EE2C4543D900DF4098 /* TonAPI */; }; 070ED7F12C4543D900DF4098 /* TonStreamingAPI in Frameworks */ = {isa = PBXBuildFile; productRef = 070ED7F02C4543D900DF4098 /* TonStreamingAPI */; }; - 070ED7F62C454A1500DF4098 /* TonAPIAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 070ED7F52C454A1500DF4098 /* TonAPIAssembly.swift */; }; 0713097D28C63893002B17D0 /* ScamSyncService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0713097C28C63893002B17D0 /* ScamSyncService.swift */; }; 0713097F28C6F60D002B17D0 /* ScamSyncServiceFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0713097E28C6F60D002B17D0 /* ScamSyncServiceFactory.swift */; }; 0713098128C6F7BB002B17D0 /* CDScamInfo+CoreDataCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0713098028C6F7BB002B17D0 /* CDScamInfo+CoreDataCodable.swift */; }; + 0715FCD42C65E96000AA674E /* TonWebBridgeHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCD32C65E96000AA674E /* TonWebBridgeHeaderView.swift */; }; + 0715FCD92C6608B700AA674E /* TonWebBridgeMessageBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCD82C6608B700AA674E /* TonWebBridgeMessageBuilder.swift */; }; + 0715FCDD2C660AF700AA674E /* DappBridgeMessageType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCDC2C660AF700AA674E /* DappBridgeMessageType.swift */; }; + 0715FCDF2C661E1D00AA674E /* TonConnect.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCDE2C661E1D00AA674E /* TonConnect.swift */; }; + 0715FCE12C6620B500AA674E /* DappBridgeResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCE02C6620B500AA674E /* DappBridgeResponse.swift */; }; + 0715FCE32C66262100AA674E /* TonConnectResponses+Encodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCE22C66262100AA674E /* TonConnectResponses+Encodable.swift */; }; + 0715FCE52C66378900AA674E /* TonConnectModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCE42C66378900AA674E /* TonConnectModels.swift */; }; 0716C83C28853ACA004C8CB1 /* WalletBalanceSubscriptionAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0716C83B28853ACA004C8CB1 /* WalletBalanceSubscriptionAdapter.swift */; }; 0716C84C288802EB004C8CB1 /* SwipableTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0716C84B288802EB004C8CB1 /* SwipableTableViewCell.swift */; }; 0716C84F28880304004C8CB1 /* UITableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0716C84D28880304004C8CB1 /* UITableViewCell.swift */; }; 0716C85028880304004C8CB1 /* UIResponder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0716C84E28880304004C8CB1 /* UIResponder.swift */; }; 071BC67529274F47007685D1 /* HashCopiedEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071BC67429274F47007685D1 /* HashCopiedEvent.swift */; }; 071BC677292B21CC007685D1 /* UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071BC676292B21CC007685D1 /* UIImage.swift */; }; + 07230EAB2C73515E00B92466 /* DappDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07230EAA2C73515E00B92466 /* DappDataSource.swift */; }; + 07230EAD2C735AA200B92466 /* DappBrowserViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07230EAC2C735AA200B92466 /* DappBrowserViewModelFactory.swift */; }; + 07230EAF2C73608900B92466 /* DappBrowserViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07230EAE2C73608900B92466 /* DappBrowserViewModel.swift */; }; + 07230EB12C7456B900B92466 /* dapps.json in Resources */ = {isa = PBXBuildFile; fileRef = 07230EB02C7456B900B92466 /* dapps.json */; }; 0723EDA02C48E37400880620 /* SoraQrTransferFlowUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0723ED9F2C48E37400880620 /* SoraQrTransferFlowUseCase.swift */; }; 0723EDA22C48F2C900880620 /* TransferSendFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0723EDA12C48F2C900880620 /* TransferSendFlow.swift */; }; 0723EDA42C49369D00880620 /* TransferFlowUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0723EDA32C49369D00880620 /* TransferFlowUseCase.swift */; }; @@ -152,6 +162,10 @@ 07BF3DA12B3D98BD0046ABF4 /* AssetTransactionData+Zeta.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07BF3DA02B3D98BD0046ABF4 /* AssetTransactionData+Zeta.swift */; }; 07BFF8AA2AD666CE005A5C58 /* AutoNamespacesError+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07BFF8A92AD666CE005A5C58 /* AutoNamespacesError+Extension.swift */; }; 07C3397229189B720057C4A5 /* ChainsTypesSyncService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07C3397129189B720057C4A5 /* ChainsTypesSyncService.swift */; }; + 07C438D72C638B2900475B14 /* TonConnectService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07C438D62C638B2900475B14 /* TonConnectService.swift */; }; + 07C438DA2C638BAA00475B14 /* TonConnectParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07C438D92C638BAA00475B14 /* TonConnectParameters.swift */; }; + 07C438DC2C638BB800475B14 /* TonConnectRequestPayload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07C438DB2C638BB800475B14 /* TonConnectRequestPayload.swift */; }; + 07C438DE2C638D3900475B14 /* TonConnectManifest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07C438DD2C638D3900475B14 /* TonConnectManifest.swift */; }; 07D05E4128EC08B800B66C70 /* StakinkPoolRewardCalculator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D05E4028EC08B800B66C70 /* StakinkPoolRewardCalculator.swift */; }; 07D05E4928EEFF2C00B66C70 /* SelectValidatorsStartPoolViewModelState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D05E4728EEFDC900B66C70 /* SelectValidatorsStartPoolViewModelState.swift */; }; 07D05E4A28EEFF2F00B66C70 /* SelectValidatorsStartPoolStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D05E4628EEFDC900B66C70 /* SelectValidatorsStartPoolStrategy.swift */; }; @@ -167,6 +181,11 @@ 07D05E6628EF0BE500B66C70 /* SelectValidatorsConfirmPoolStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D05E6428EF0BCC00B66C70 /* SelectValidatorsConfirmPoolStrategy.swift */; }; 07D05E6728EF0BE500B66C70 /* SelectValidatorsConfirmPoolViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D05E6228EF0BCC00B66C70 /* SelectValidatorsConfirmPoolViewModelFactory.swift */; }; 07D05E6928EF0F2700B66C70 /* PoolNominateCall.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D05E6828EF0F2700B66C70 /* PoolNominateCall.swift */; }; + 07D0BD3B2C6E2282001ECD58 /* TonConnectUrlHandling.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D0BD3A2C6E2282001ECD58 /* TonConnectUrlHandling.swift */; }; + 07D0BD3E2C6F0CA0001ECD58 /* DappBrowserFeaturedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D0BD3D2C6F0CA0001ECD58 /* DappBrowserFeaturedView.swift */; }; + 07D0BD412C6F0E9C001ECD58 /* BrowserExploreFeaturedCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D0BD402C6F0E9C001ECD58 /* BrowserExploreFeaturedCell.swift */; }; + 07D0BD432C6F179E001ECD58 /* DappBrowserListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D0BD422C6F179E001ECD58 /* DappBrowserListCell.swift */; }; + 07D0BD452C6F191C001ECD58 /* DappBrowserSectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D0BD442C6F191C001ECD58 /* DappBrowserSectionHeaderView.swift */; }; 07DE95B528A1119400E9C2CB /* BalanceInfoRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07DE95AC28A1119400E9C2CB /* BalanceInfoRouter.swift */; }; 07DE95B628A1119400E9C2CB /* BalanceInfoAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07DE95AD28A1119400E9C2CB /* BalanceInfoAssembly.swift */; }; 07DE95B728A1119400E9C2CB /* BalanceInfoProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07DE95AE28A1119400E9C2CB /* BalanceInfoProtocols.swift */; }; @@ -209,6 +228,20 @@ 07DFA471289B8D8E0035A8AB /* EducationStoriesAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07DFA466289B8D8E0035A8AB /* EducationStoriesAssembly.swift */; }; 07DFA472289B8D8E0035A8AB /* EducationStoriesViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07DFA467289B8D8E0035A8AB /* EducationStoriesViewState.swift */; }; 07E346D4288E616E00A8FAEC /* WalletBalanceBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07E346D3288E616E00A8FAEC /* WalletBalanceBuilder.swift */; }; + 07ECB7F32C69CF13000E0A14 /* TonConnectDessision.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB7F22C69CF13000E0A14 /* TonConnectDessision.swift */; }; + 07ECB7F52C69EDCE000E0A14 /* SessionStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB7F42C69EDCE000E0A14 /* SessionStatus.swift */; }; + 07ECB7F72C69F4A1000E0A14 /* TonDapp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB7F62C69F4A1000E0A14 /* TonDapp.swift */; }; + 07ECB7F92C69F62F000E0A14 /* CDTonDapp+CoreDataDecodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB7F82C69F62F000E0A14 /* CDTonDapp+CoreDataDecodable.swift */; }; + 07ECB7FB2C6A07AF000E0A14 /* TonConnectAppRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB7FA2C6A07AF000E0A14 /* TonConnectAppRequest.swift */; }; + 07ECB7FD2C6A07C1000E0A14 /* SendTransactionSignRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB7FC2C6A07C1000E0A14 /* SendTransactionSignRequest.swift */; }; + 07ECB7FF2C6A0BB2000E0A14 /* ConnectRequestVariant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB7FE2C6A0BB2000E0A14 /* ConnectRequestVariant.swift */; }; + 07ECB8012C6A0F9B000E0A14 /* TonConnectSendDessision.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB8002C6A0F9B000E0A14 /* TonConnectSendDessision.swift */; }; + 07ECB8032C6B4EA3000E0A14 /* TonConnectSessionCrypto.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB8022C6B4EA3000E0A14 /* TonConnectSessionCrypto.swift */; }; + 07ECB8052C6B71DE000E0A14 /* TonConnectApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB8042C6B71DE000E0A14 /* TonConnectApp.swift */; }; + 07ECB8072C6B7380000E0A14 /* CDTonConnectedApp+CoreDataDecodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB8062C6B7380000E0A14 /* CDTonConnectedApp+CoreDataDecodable.swift */; }; + 07ECB8092C6C6CDE000E0A14 /* TonConnectEventsCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB8082C6C6CDE000E0A14 /* TonConnectEventsCenter.swift */; }; + 07ECB80B2C6C6E76000E0A14 /* TonConnectError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB80A2C6C6E75000E0A14 /* TonConnectError.swift */; }; + 07ECB80D2C6C7411000E0A14 /* TonConnectEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB80C2C6C7410000E0A14 /* TonConnectEvent.swift */; }; 07ED2EB92C341A0100FF7500 /* NodeApiKeyInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ED2EB82C341A0100FF7500 /* NodeApiKeyInjector.swift */; }; 07F2B75728A3A4B800280C38 /* ChainCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07F2B75628A3A4B800280C38 /* ChainCollectionView.swift */; }; 07F2B75C28A6565500280C38 /* assets.json in Resources */ = {isa = PBXBuildFile; fileRef = 07F2B75A28A6533900280C38 /* assets.json */; }; @@ -257,6 +290,7 @@ 134AFD616BE52A1AE290EEF7 /* StakingBalanceFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = C67ACC943DA07FC529AE69B4 /* StakingBalanceFlow.swift */; }; 135CEEC5363BE34130958578 /* ControllerAccountConfirmationInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B8473AA386E1AD6F0F0C964 /* ControllerAccountConfirmationInteractor.swift */; }; 1496E87A7652C7D230A9BB46 /* AssetNetworksRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36A3D64FF58C40E5CC6A6E89 /* AssetNetworksRouter.swift */; }; + 152915F53A2C88A15B2BA725 /* TonWebBridgeAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D47F5B181BB5778DDEF1125 /* TonWebBridgeAssembly.swift */; }; 152AC909C26E809ACCA55B35 /* CreateContactInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D482753E0D75C5F5E0617998 /* CreateContactInteractor.swift */; }; 1550A6E8789263C0D734091A /* StakingUnbondSetupWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC5083A5751A1A3CC95F4F6F /* StakingUnbondSetupWireframe.swift */; }; 159A8702C30A21988AD76805 /* StakingPoolCreateConfirmAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 408D33DEE675B00ED511517A /* StakingPoolCreateConfirmAssembly.swift */; }; @@ -268,6 +302,7 @@ 19A29027666EB5388CBFAD61 /* StakingRewardDetailsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D613E20E96E7BA5B8F4B9799 /* StakingRewardDetailsInteractor.swift */; }; 19C7939FFE0178C1A7E68631 /* TransferPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0524F9F46A9D77159B2B14FE /* TransferPresenter.swift */; }; 1A2A55DCA9403CCE2A98E93E /* WalletTransactionDetailsViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1211B723BB656770C4EA5BC2 /* WalletTransactionDetailsViewFactory.swift */; }; + 1A6E37652003721AB5044812 /* DappBrowserListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 490FDCAC66E3A0C80F501A5F /* DappBrowserListViewController.swift */; }; 1BC06B323C5E5DE1B5A62CB4 /* PolkaswapTransaktionSettingsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD730FFB75B5D76EA939042D /* PolkaswapTransaktionSettingsInteractor.swift */; }; 1BEADE77C6236CB3BF719A47 /* CrowdloanContributionSetupViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C96E41F878ED0A0A6F469D3 /* CrowdloanContributionSetupViewFactory.swift */; }; 1BFC90E1D8646F7429FFD5E6 /* ExportMnemonicProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF3AD755B2B3DCFB3D14DF91 /* ExportMnemonicProtocols.swift */; }; @@ -329,12 +364,14 @@ 3229E306230161AA99B14BDD /* StakingRewardPayoutsViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 336395FFC4B2104A9651A2DE /* StakingRewardPayoutsViewFactory.swift */; }; 3245549CB47E65B28A2C01CD /* WalletOptionInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326260E461C031624CDB62BA /* WalletOptionInteractor.swift */; }; 3250F2C0E12ED42A355853BE /* SelectValidatorsStartProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = EED9939B17C4224C8E153F8A /* SelectValidatorsStartProtocols.swift */; }; + 32BB821E16F9BF88523A6047 /* DappBrowserViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = F684B043895B80CAD70A59CF /* DappBrowserViewLayout.swift */; }; 3336F04749ADC27C81BA9464 /* ContactsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82CBCBA8BF2D753248238555 /* ContactsViewController.swift */; }; 33D23A4A92AF90C385568462 /* ChainSelectionProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDDA0B079962E00FAFBE07AD /* ChainSelectionProtocols.swift */; }; 33D41E7EAA441A589449CD4E /* StakingUnbondConfirmTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C52E93D987DC64991F58508 /* StakingUnbondConfirmTests.swift */; }; 340AC2484415B10F247C135E /* AnalyticsValidatorsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7320E1CD9EA1A33EA29D0700 /* AnalyticsValidatorsPresenter.swift */; }; 357946E87E1F8D0563286D0F /* PolkaswapTransaktionSettingsViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F7C84A88D3405B38B0E8134 /* PolkaswapTransaktionSettingsViewLayout.swift */; }; 36139329003D9269E8D5C11C /* StakingMainTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E11C7AF9A8DEC07246D5626 /* StakingMainTests.swift */; }; + 36909529AF4B97AE71AD4C24 /* TonWebBridgePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BD26C200A700CCA34980B61 /* TonWebBridgePresenter.swift */; }; 3761C36C5BAFFB1518CD93A0 /* FiltersProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8C34B051607218638BA851 /* FiltersProtocols.swift */; }; 37AE170856990F9FBEF052FC /* AllDoneAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 262F98DEF54FA9592BE22B94 /* AllDoneAssembly.swift */; }; 37E1E9782B9752BC50AF2476 /* YourValidatorListViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BE8644A4F6DED808248A0FE /* YourValidatorListViewFactory.swift */; }; @@ -346,6 +383,7 @@ 3B0F51B1D1590FAAE73CD36C /* SwapTransactionDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FDB8843EB793C85B222FDB /* SwapTransactionDetailViewController.swift */; }; 3B9314DE6AFC01CA7EF0DAAA /* SelectValidatorsConfirmFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 364C90F7AD36FD6F6E690D7D /* SelectValidatorsConfirmFlow.swift */; }; 3CA86739CB09801714B194BD /* PurchaseWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C52C6CD7112BF0E1E3A98CE /* PurchaseWireframe.swift */; }; + 3CDF2323ABDADEBC32F2AE4B /* DappBrowserListViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F28F73B0BC6C4EEBCC5B546 /* DappBrowserListViewLayout.swift */; }; 3D1FB0EF87D42F08D9250552 /* PurchasePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56FF8DBE5C32EE4C68ECD623 /* PurchasePresenter.swift */; }; 3DCDF9784283313336CC0505 /* NftSendConfirmPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE826F356F6D72EACFB0AE31 /* NftSendConfirmPresenter.swift */; }; 3DF50E6F78F1B1052625BA7D /* ChainSelectionPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2222D628B9EA092D1C6B1CAE /* ChainSelectionPresenter.swift */; }; @@ -365,6 +403,7 @@ 41B29C1C9239BB2DCB7903A7 /* SelectValidatorsStartViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4C391292F22D16427C77CD9 /* SelectValidatorsStartViewFactory.swift */; }; 42B79A8D0D9540C1D97D991C /* AccountConfirmWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 599FEDBD7E8B665F1A93BA70 /* AccountConfirmWireframe.swift */; }; 436D8B9651C88360A6D72E90 /* ChainSelectionWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = C829A981119FEA0EAE4E96E9 /* ChainSelectionWireframe.swift */; }; + 438F38672873F0B8BA950489 /* DappBrowserAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32F4A2C14730740C6D319C5A /* DappBrowserAssembly.swift */; }; 4448B591D4A193DBC9E2E3BF /* AccountCreateInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A7B39A61DB0D2F0F1B1DBA1 /* AccountCreateInteractor.swift */; }; 445F1F1FB3ECC47D8DD2FBEA /* NetworkIssuesNotificationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40728E7BBC553AFA8FF4142B /* NetworkIssuesNotificationViewController.swift */; }; 4470194B729475D683584A6C /* WalletTransactionHistoryInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 375E9A7A1206E366E862D81D /* WalletTransactionHistoryInteractor.swift */; }; @@ -391,15 +430,18 @@ 503DFF0EFCAD0A8B526FEC3A /* SelectMarketViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 320E2207FB549F7C31A80441 /* SelectMarketViewController.swift */; }; 506F0D372BCC8302E513637C /* CrowdloanContributionConfirmWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA59CE2C7AE548ACA9D66FD7 /* CrowdloanContributionConfirmWireframe.swift */; }; 50758C9BBB27AE5732FF78BA /* StakingRewardPayoutsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFEBC03AB1841681427D38AF /* StakingRewardPayoutsViewController.swift */; }; + 5106A2E8BB43AF62D2BBF286 /* DappBrowserProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFC41ED0064460B3048E7D14 /* DappBrowserProtocols.swift */; }; 5142E2C6609188D529BB558A /* LiquidityPoolRemoveLiquidityConfirmProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 882D47A501D9D6CCE7B99691 /* LiquidityPoolRemoveLiquidityConfirmProtocols.swift */; }; 51876200A6B1EDC54609DF46 /* LiquidityPoolRemoveLiquidityProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D49CA5CB156C1EA38BEBE00 /* LiquidityPoolRemoveLiquidityProtocols.swift */; }; 51FC48FA6FD4D2FB1781424D /* ReferralCrowdloanWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D51D60F19284936A6E9F47D /* ReferralCrowdloanWireframe.swift */; }; 525CCCA7CFD7BE570AD0FCCA /* WalletOptionProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73078ED3B2642FEAF348DB2A /* WalletOptionProtocols.swift */; }; + 52F16C3E24F3982384B1082E /* DappBrowserListRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF0C991DB1C7567632BB54A9 /* DappBrowserListRouter.swift */; }; 539340533D8383965751C6D8 /* NodeSelectionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B0CF2F98779D3C18D0C0A29 /* NodeSelectionTests.swift */; }; 53DA09F488806FFE86C841AA /* SelectMarketInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB837A15BAAED64BC32F3F44 /* SelectMarketInteractor.swift */; }; 54A3B34605E787B47741ED1A /* Pods_fearlessAll_fearlessIntegrationTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C323602A21644DCB1B2EEFF6 /* Pods_fearlessAll_fearlessIntegrationTests.framework */; }; 54C8E20A8D7DD92AC92B8041 /* SelectMarketProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD0EAB8749661CB4428685FB /* SelectMarketProtocols.swift */; }; 5712A48A0C8AEFD9355FD9DA /* WarningAlertInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04361405728BBC71AD2D014F /* WarningAlertInteractor.swift */; }; + 57376A74C6310F1FA52FA28C /* TonWebBridgeRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 381BD34B5A6E2B1625B2C24C /* TonWebBridgeRouter.swift */; }; 57E20F0723C4748D576C4882 /* StakingUnbondSetupViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = A82E373FFFBF708D7CF0973E /* StakingUnbondSetupViewFactory.swift */; }; 5869563D0EA593FBD02C169C /* StakingPayoutConfirmationProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52F8D055D0481469073AA859 /* StakingPayoutConfirmationProtocols.swift */; }; 5888936B3D13D92F1534E08B /* CrowdloanListViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63F4BE52D0625CD8C21D2460 /* CrowdloanListViewLayout.swift */; }; @@ -455,6 +497,8 @@ 709EF639857F35CA2EF69D06 /* TransferViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E8E30C194FD07DC9ECCBE74 /* TransferViewController.swift */; }; 70EAB410A0106F22C2183847 /* StakingUnbondSetupTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61E1CD099F7C30ABE0E8A001 /* StakingUnbondSetupTests.swift */; }; 719B429B58B9A0551381F92F /* FiltersViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECBF10B7D4707E4D7D6387CF /* FiltersViewFactory.swift */; }; + 71DE4946BC2CE1DE0300BC16 /* DappBrowserListAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BD242D3369DD517695F330A /* DappBrowserListAssembly.swift */; }; + 720633807C7746A254866395 /* TonWebBridgeInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 014B8F922BD4E7BFB8D1483D /* TonWebBridgeInteractor.swift */; }; 7258EEAE786D51F57ECE1E4F /* NodeSelectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 605CA30BCCB5F23C64E6D6EC /* NodeSelectionViewController.swift */; }; 7365B203D7F32028225366E5 /* ControllerAccountTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 850E0DBBF0EC8422AEBF2189 /* ControllerAccountTests.swift */; }; 737F71CCDF39E7A400EBB7C0 /* NetworkIssuesNotificationViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 169ADB0FB6C83C9CEED2F780 /* NetworkIssuesNotificationViewLayout.swift */; }; @@ -489,6 +533,7 @@ 7E3FB57A93AFAE39CF3030C8 /* ClaimCrowdloanRewardsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CCB1AFB751075497345C3E7 /* ClaimCrowdloanRewardsViewController.swift */; }; 7FC8C78DD68304B05B501F83 /* NodeSelectionProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63CCCC63389A70294F816143 /* NodeSelectionProtocols.swift */; }; 800FCAF66DC8A24020D16A9C /* AccountExportPasswordInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 194C9BFEE9BA8C9E448D79AA /* AccountExportPasswordInteractor.swift */; }; + 8095003039EDD1072601BAA7 /* DappBrowserPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 339C0DAFDB2C99655C2D64E4 /* DappBrowserPresenter.swift */; }; 80970FC53F7701A7898F3E84 /* WalletScanQRTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47E3A9998DBB9F1FC4A1FB0A /* WalletScanQRTests.swift */; }; 82379C63F216F4B4B7832A71 /* StakingPoolCreatePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADD19595322BF8FEC0F1F746 /* StakingPoolCreatePresenter.swift */; }; 82663A49E28CF2504BEAFB01 /* AssetNetworksViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9DE46BBDFD90D42835CA6B9 /* AssetNetworksViewController.swift */; }; @@ -1346,6 +1391,7 @@ 89C8A9B990B08016A70ED336 /* StakingPoolInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EADA37D0D22D4CC99A7911A /* StakingPoolInfoViewController.swift */; }; 8A109807FBF5FE089DEDBA8E /* FiltersTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C85AF940D0B379062D292D93 /* FiltersTests.swift */; }; 8A1FC8AEE234C7FEBF7B6B2E /* CrowdloanContributionConfirmTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 385FE8691EA37DE9F562B34E /* CrowdloanContributionConfirmTests.swift */; }; + 8A388A315B0E4EF220EF3F5B /* DappBrowserRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FBC05405B64AD114FB89FFE /* DappBrowserRouter.swift */; }; 8A3CC3AAFF6B962CF3BE7BF3 /* CreateContactTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCC952210C0714F32C3AE570 /* CreateContactTests.swift */; }; 8A957CAF82C856E61054B02F /* LiquidityPoolRemoveLiquidityConfirmViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 916326B6F6651BBC5913B26F /* LiquidityPoolRemoveLiquidityConfirmViewController.swift */; }; 8AEF593AFE8F59F7DC0A5753 /* CustomValidatorListInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 365CAE2753E7D5F9B9DB7D1F /* CustomValidatorListInteractor.swift */; }; @@ -1361,6 +1407,7 @@ 90A3F46EF181DC2B821CC80C /* CrowdloanContributionConfirmViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F791FE1B479CE1DF936F79F /* CrowdloanContributionConfirmViewFactory.swift */; }; 90EFE3768F1375470FDBE6F6 /* PurchaseViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AA3BF0C9C1E0E2C67D962F5 /* PurchaseViewFactory.swift */; }; 910CEF0535028E629FD9798C /* SwapTransactionDetailViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB255DD7988E0E0E9CA35DA9 /* SwapTransactionDetailViewLayout.swift */; }; + 91246793157F1B0FF2A1217F /* DappBrowserInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB8CC373A5E9E1C11181A4B9 /* DappBrowserInteractor.swift */; }; 9174AA8CEB0D79C25842EC52 /* RecommendedValidatorListTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABFC2AD62212BE16C7B7C429 /* RecommendedValidatorListTests.swift */; }; 91986C1E07B1827BDD5DC82F /* NetworkInfoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26635BD49FBF19DB1253906E /* NetworkInfoTests.swift */; }; 921E4891E85C0DC6FDD8A0D0 /* CrowdloanContributionConfirmInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1366336078BCA34EFB4C6FF9 /* CrowdloanContributionConfirmInteractor.swift */; }; @@ -1414,6 +1461,7 @@ A8F69AC9D7294E7DCBA50470 /* SelectValidatorsStartPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B6244A9538B39AFCD3A6F3A /* SelectValidatorsStartPresenter.swift */; }; A9597D17F54CFF4F3704D868 /* AssetNetworksPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67B1037AEC97DBEAF9FD50C1 /* AssetNetworksPresenter.swift */; }; AA394DEC06AC872CC79C0FDC /* AssetNetworksAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D05025D7DB75DB7A766586 /* AssetNetworksAssembly.swift */; }; + AA69046E4B7838BE78859A24 /* TonWebBridgeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E51A659E2865BD98B6DEF16 /* TonWebBridgeViewController.swift */; }; AB5E2A2B4CC823E6F6515ADD /* StakingRewardPayoutsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ECD8589BD30A8BE9492AD87 /* StakingRewardPayoutsPresenter.swift */; }; AB678EAA622BFEAEEA8166F2 /* AllDoneViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54776237A20227DFE025E3AC /* AllDoneViewLayout.swift */; }; ABA3D873BBECB7F4BD670872 /* ExportSeedPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFB278373745C20822442686 /* ExportSeedPresenter.swift */; }; @@ -1564,6 +1612,7 @@ B893A2515909AB6915196317 /* NetworkInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B0E2EDF787BF82F16663215 /* NetworkInfoViewController.swift */; }; BA7AEE82627CFC0AFD69B299 /* RecommendedValidatorListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA2580363AC3E4A9CD40256E /* RecommendedValidatorListPresenter.swift */; }; BC2DF589C6623601C39EF8F4 /* LiquidityPoolSupplyPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31F848482B2AD7D6831B0CCE /* LiquidityPoolSupplyPresenter.swift */; }; + BCB9B3DF3D8104BC8456811B /* TonWebBridgeProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AA1493E216DF3B3616A9EE6 /* TonWebBridgeProtocols.swift */; }; BD571417BD18C711B76E1D62 /* ExportSeedWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B4C1B5D56DB69BA0AECF731 /* ExportSeedWireframe.swift */; }; BE3F6213B26F35EB6324DBD8 /* ControllerAccountWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDB9EDB05686DF11958145E1 /* ControllerAccountWireframe.swift */; }; BE98780A37B6F68759D770EB /* WalletTransactionHistoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F8DF39247202A30B63F05DA /* WalletTransactionHistoryTests.swift */; }; @@ -1585,6 +1634,7 @@ C4A4D40A08DAB4A71C21C1A8 /* StakingRedeemInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 560C48D7A83F51F001622D71 /* StakingRedeemInteractor.swift */; }; C4F8BEB6DFA03A374135BD6B /* FiltersInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = E692235C8CF576F69971D118 /* FiltersInteractor.swift */; }; C592F4FB550050E116EEEB83 /* WalletOptionViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96950EE6AE1BA8F9130A4390 /* WalletOptionViewLayout.swift */; }; + C593B432712EAD72251EC00B /* DappBrowserViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C3533520260EDD83C2F26B1 /* DappBrowserViewController.swift */; }; C5AFED6C37C2C29E9903D136 /* Pods_fearlessAll_fearless.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6A28799A82C0EC2F8ABDE831 /* Pods_fearlessAll_fearless.framework */; }; C600C4D52802B87100111316 /* UsernameSetupViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = C600C4D42802B87100111316 /* UsernameSetupViewLayout.swift */; }; C600C4D728053DF500111316 /* UsernameSetupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C600C4D628053DF500111316 /* UsernameSetupViewController.swift */; }; @@ -1715,6 +1765,7 @@ D565DB5ED3B8B4D9BCFB4C21 /* CustomValidatorListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14E3337CDD7C831AEAA4582F /* CustomValidatorListPresenter.swift */; }; D5C25B13DB0180C0A78C2372 /* ConfirmTransferProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 759EAF04B9064529D6862A14 /* ConfirmTransferProtocols.swift */; }; D6511F7C3E55197F82AB552C /* RecommendedValidatorListViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE4AF0849E32E5B9C72E2ABB /* RecommendedValidatorListViewFactory.swift */; }; + D80CDA0DDAB54204CBF873D0 /* DappBrowserListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A656BB6CADD5BEBD41CE492 /* DappBrowserListPresenter.swift */; }; D83B47B07C0D40A327AC44F7 /* CustomValidatorListViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = F52B8815D6AF5E69B145D245 /* CustomValidatorListViewFactory.swift */; }; D8581E5440A19D977E17BFDE /* StakingAmountViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = D39D54DC9992CF9CB6699AA3 /* StakingAmountViewFactory.swift */; }; D886425A55425810AD070AB5 /* ControllerAccountConfirmationWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = C96C3B5ABF4A8124848EFD17 /* ControllerAccountConfirmationWireframe.swift */; }; @@ -1729,6 +1780,7 @@ DBA436B3B1C90965FE8F9B79 /* YourValidatorListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0533F9E531CDFB721D697769 /* YourValidatorListPresenter.swift */; }; DBA6A0A26D77E7A587C51792 /* PolkaswapSwapConfirmationProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA6FC016067C632AF256EB62 /* PolkaswapSwapConfirmationProtocols.swift */; }; DBBD1651F45FECA1B17AAF40 /* CreateContactViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 480AE579B48B3DA9C247CCB5 /* CreateContactViewController.swift */; }; + DBF246FDD6E70D1DC6529539 /* TonWebBridgeViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75D1886C774F9F63C897CAF1 /* TonWebBridgeViewLayout.swift */; }; DCDAE9E8C805B71A8F8CEFBD /* YourValidatorListTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 890203CBFFCBF517C0BAA396 /* YourValidatorListTests.swift */; }; DCE13AA9F3BA0EB54F793017 /* LiquidityPoolSupplyAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62928FB3556EEA3A228131AC /* LiquidityPoolSupplyAssembly.swift */; }; DD1ADD4F777B0C6398C73805 /* NftDetailsRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B08B264C09E63A936384E2A /* NftDetailsRouter.swift */; }; @@ -1742,6 +1794,7 @@ E01C6EA1C6DB699485EEA5F5 /* TransferTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7525F0A27140F3C058CA5B0C /* TransferTests.swift */; }; E14F809C3917EFA4B5388AC8 /* AccountConfirmViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = A14CA4551FCC2EBD078E2242 /* AccountConfirmViewFactory.swift */; }; E1772980B5A4EB33D1801204 /* PolkaswapAdjustmentViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25FF82C2FD912021A1F20876 /* PolkaswapAdjustmentViewLayout.swift */; }; + E256770DDF3AF748A5057FD4 /* DappBrowserListInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EE85E6A9028E814231D8466 /* DappBrowserListInteractor.swift */; }; E2645EB7614F4C7A60B48777 /* PolkaswapAdjustmentProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A9EBD3B7AEA5EF594DFEB49 /* PolkaswapAdjustmentProtocols.swift */; }; E29066A3781333DF890E8F9B /* ContactsAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF65551AE1E858C563054E87 /* ContactsAssembly.swift */; }; E2C68C903A8B7AB2ECD82E7C /* ChainAccountListTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FA0310E7E7EA9A985602CCA /* ChainAccountListTests.swift */; }; @@ -1764,6 +1817,7 @@ EB9D8D22AA13BF12F845856B /* ReferralCrowdloanProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 953E21C32079A8051A0EE964 /* ReferralCrowdloanProtocols.swift */; }; EC978E6C4FBF39BE9ED10C86 /* SelectValidatorsStartWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 889A825F58F5CB54118A9D35 /* SelectValidatorsStartWireframe.swift */; }; ECA54AB8148BBA63084353FD /* LiquidityPoolRemoveLiquidityConfirmTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31F75A22E215273305AF7AA2 /* LiquidityPoolRemoveLiquidityConfirmTests.swift */; }; + ED3514135CA429A516482F69 /* DappBrowserListProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B3AB5BB9A2488FDD8DDFBA6 /* DappBrowserListProtocols.swift */; }; EDC02F2FDCDB55519DB0273D /* AnalyticsRewardDetailsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761FDEBB414B1CFAD6992352 /* AnalyticsRewardDetailsTests.swift */; }; EDC72DAB0BDD63E0521E66B5 /* WarningAlertViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22FD9A4EA33DB4B6AFA5B0C4 /* WarningAlertViewController.swift */; }; EE6FC6EFB089A94EF105F2CC /* StakingRewardPayoutsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 934678CCA0EF35B6AE4AE8A1 /* StakingRewardPayoutsTests.swift */; }; @@ -3165,6 +3219,7 @@ 002A29AE58EB53E915330490 /* ControllerAccountViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountViewFactory.swift; sourceTree = ""; }; 0033D320A9033F5200279087 /* SelectedValidatorListFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectedValidatorListFlow.swift; sourceTree = ""; }; 003FA37F2B240C5D7605340D /* StakingMainInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingMainInteractor.swift; sourceTree = ""; }; + 014B8F922BD4E7BFB8D1483D /* TonWebBridgeInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TonWebBridgeInteractor.swift; sourceTree = ""; }; 01A85735F958D05CFEFCB4DF /* NftSendRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendRouter.swift; sourceTree = ""; }; 025F392269B990931ADBE8F6 /* ControllerAccountConfirmationTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountConfirmationTests.swift; sourceTree = ""; }; 02ACCC85B2CCF3D9392CA9B4 /* CrowdloanListProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanListProtocols.swift; sourceTree = ""; }; @@ -3209,16 +3264,27 @@ 070ED7D32C3E80E300DF4098 /* shared-features-spm */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = "shared-features-spm"; path = "../shared-features-spm"; sourceTree = ""; }; 070ED7D62C3FBB8800DF4098 /* SubstrateDataModel_v8.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = SubstrateDataModel_v8.xcdatamodel; sourceTree = ""; }; 070ED7DA2C45321300DF4098 /* TonRemoteBalanceFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonRemoteBalanceFetching.swift; sourceTree = ""; }; - 070ED7F52C454A1500DF4098 /* TonAPIAssembly.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonAPIAssembly.swift; sourceTree = ""; }; 0713097C28C63893002B17D0 /* ScamSyncService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScamSyncService.swift; sourceTree = ""; }; 0713097E28C6F60D002B17D0 /* ScamSyncServiceFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScamSyncServiceFactory.swift; sourceTree = ""; }; 0713098028C6F7BB002B17D0 /* CDScamInfo+CoreDataCodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CDScamInfo+CoreDataCodable.swift"; sourceTree = ""; }; + 0715FCD32C65E96000AA674E /* TonWebBridgeHeaderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonWebBridgeHeaderView.swift; sourceTree = ""; }; + 0715FCD82C6608B700AA674E /* TonWebBridgeMessageBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonWebBridgeMessageBuilder.swift; sourceTree = ""; }; + 0715FCDC2C660AF700AA674E /* DappBridgeMessageType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DappBridgeMessageType.swift; sourceTree = ""; }; + 0715FCDE2C661E1D00AA674E /* TonConnect.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnect.swift; sourceTree = ""; }; + 0715FCE02C6620B500AA674E /* DappBridgeResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DappBridgeResponse.swift; sourceTree = ""; }; + 0715FCE22C66262100AA674E /* TonConnectResponses+Encodable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "TonConnectResponses+Encodable.swift"; sourceTree = ""; }; + 0715FCE42C66378900AA674E /* TonConnectModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectModels.swift; sourceTree = ""; }; + 07165B1F2C6DDF4E00C11E3B /* fearless.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = fearless.entitlements; sourceTree = ""; }; 0716C83B28853ACA004C8CB1 /* WalletBalanceSubscriptionAdapter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletBalanceSubscriptionAdapter.swift; sourceTree = ""; }; 0716C84B288802EB004C8CB1 /* SwipableTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwipableTableViewCell.swift; sourceTree = ""; }; 0716C84D28880304004C8CB1 /* UITableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UITableViewCell.swift; sourceTree = ""; }; 0716C84E28880304004C8CB1 /* UIResponder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIResponder.swift; sourceTree = ""; }; 071BC67429274F47007685D1 /* HashCopiedEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HashCopiedEvent.swift; sourceTree = ""; }; 071BC676292B21CC007685D1 /* UIImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIImage.swift; sourceTree = ""; }; + 07230EAA2C73515E00B92466 /* DappDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DappDataSource.swift; sourceTree = ""; }; + 07230EAC2C735AA200B92466 /* DappBrowserViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DappBrowserViewModelFactory.swift; sourceTree = ""; }; + 07230EAE2C73608900B92466 /* DappBrowserViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DappBrowserViewModel.swift; sourceTree = ""; }; + 07230EB02C7456B900B92466 /* dapps.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = dapps.json; sourceTree = ""; }; 0723ED9F2C48E37400880620 /* SoraQrTransferFlowUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoraQrTransferFlowUseCase.swift; sourceTree = ""; }; 0723EDA12C48F2C900880620 /* TransferSendFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransferSendFlow.swift; sourceTree = ""; }; 0723EDA32C49369D00880620 /* TransferFlowUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransferFlowUseCase.swift; sourceTree = ""; }; @@ -3312,6 +3378,10 @@ 07BFF8A92AD666CE005A5C58 /* AutoNamespacesError+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AutoNamespacesError+Extension.swift"; sourceTree = ""; }; 07C3397029178D390057C4A5 /* types.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = types.json; sourceTree = ""; }; 07C3397129189B720057C4A5 /* ChainsTypesSyncService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainsTypesSyncService.swift; sourceTree = ""; }; + 07C438D62C638B2900475B14 /* TonConnectService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectService.swift; sourceTree = ""; }; + 07C438D92C638BAA00475B14 /* TonConnectParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectParameters.swift; sourceTree = ""; }; + 07C438DB2C638BB800475B14 /* TonConnectRequestPayload.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectRequestPayload.swift; sourceTree = ""; }; + 07C438DD2C638D3900475B14 /* TonConnectManifest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectManifest.swift; sourceTree = ""; }; 07D05E4028EC08B800B66C70 /* StakinkPoolRewardCalculator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakinkPoolRewardCalculator.swift; sourceTree = ""; }; 07D05E4628EEFDC900B66C70 /* SelectValidatorsStartPoolStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartPoolStrategy.swift; sourceTree = ""; }; 07D05E4728EEFDC900B66C70 /* SelectValidatorsStartPoolViewModelState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartPoolViewModelState.swift; sourceTree = ""; }; @@ -3327,6 +3397,11 @@ 07D05E6328EF0BCC00B66C70 /* SelectValidatorsConfirmPoolViewModelState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsConfirmPoolViewModelState.swift; sourceTree = ""; }; 07D05E6428EF0BCC00B66C70 /* SelectValidatorsConfirmPoolStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsConfirmPoolStrategy.swift; sourceTree = ""; }; 07D05E6828EF0F2700B66C70 /* PoolNominateCall.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PoolNominateCall.swift; sourceTree = ""; }; + 07D0BD3A2C6E2282001ECD58 /* TonConnectUrlHandling.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectUrlHandling.swift; sourceTree = ""; }; + 07D0BD3D2C6F0CA0001ECD58 /* DappBrowserFeaturedView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DappBrowserFeaturedView.swift; sourceTree = ""; }; + 07D0BD402C6F0E9C001ECD58 /* BrowserExploreFeaturedCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrowserExploreFeaturedCell.swift; sourceTree = ""; }; + 07D0BD422C6F179E001ECD58 /* DappBrowserListCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DappBrowserListCell.swift; sourceTree = ""; }; + 07D0BD442C6F191C001ECD58 /* DappBrowserSectionHeaderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DappBrowserSectionHeaderView.swift; sourceTree = ""; }; 07DB9C087A812B3606897A78 /* NetworkInfoPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkInfoPresenter.swift; sourceTree = ""; }; 07DE95AC28A1119400E9C2CB /* BalanceInfoRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BalanceInfoRouter.swift; sourceTree = ""; }; 07DE95AD28A1119400E9C2CB /* BalanceInfoAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BalanceInfoAssembly.swift; sourceTree = ""; }; @@ -3370,6 +3445,20 @@ 07DFA466289B8D8E0035A8AB /* EducationStoriesAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EducationStoriesAssembly.swift; sourceTree = ""; }; 07DFA467289B8D8E0035A8AB /* EducationStoriesViewState.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EducationStoriesViewState.swift; sourceTree = ""; }; 07E346D3288E616E00A8FAEC /* WalletBalanceBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletBalanceBuilder.swift; sourceTree = ""; }; + 07ECB7F22C69CF13000E0A14 /* TonConnectDessision.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectDessision.swift; sourceTree = ""; }; + 07ECB7F42C69EDCE000E0A14 /* SessionStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionStatus.swift; sourceTree = ""; }; + 07ECB7F62C69F4A1000E0A14 /* TonDapp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonDapp.swift; sourceTree = ""; }; + 07ECB7F82C69F62F000E0A14 /* CDTonDapp+CoreDataDecodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CDTonDapp+CoreDataDecodable.swift"; sourceTree = ""; }; + 07ECB7FA2C6A07AF000E0A14 /* TonConnectAppRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectAppRequest.swift; sourceTree = ""; }; + 07ECB7FC2C6A07C1000E0A14 /* SendTransactionSignRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendTransactionSignRequest.swift; sourceTree = ""; }; + 07ECB7FE2C6A0BB2000E0A14 /* ConnectRequestVariant.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectRequestVariant.swift; sourceTree = ""; }; + 07ECB8002C6A0F9B000E0A14 /* TonConnectSendDessision.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectSendDessision.swift; sourceTree = ""; }; + 07ECB8022C6B4EA3000E0A14 /* TonConnectSessionCrypto.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectSessionCrypto.swift; sourceTree = ""; }; + 07ECB8042C6B71DE000E0A14 /* TonConnectApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectApp.swift; sourceTree = ""; }; + 07ECB8062C6B7380000E0A14 /* CDTonConnectedApp+CoreDataDecodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CDTonConnectedApp+CoreDataDecodable.swift"; sourceTree = ""; }; + 07ECB8082C6C6CDE000E0A14 /* TonConnectEventsCenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectEventsCenter.swift; sourceTree = ""; }; + 07ECB80A2C6C6E75000E0A14 /* TonConnectError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectError.swift; sourceTree = ""; }; + 07ECB80C2C6C7410000E0A14 /* TonConnectEvent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectEvent.swift; sourceTree = ""; }; 07ED2EB82C341A0100FF7500 /* NodeApiKeyInjector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NodeApiKeyInjector.swift; sourceTree = ""; }; 07F2B75628A3A4B800280C38 /* ChainCollectionView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChainCollectionView.swift; sourceTree = ""; }; 07F2B75A28A6533900280C38 /* assets.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = assets.json; sourceTree = ""; }; @@ -3397,8 +3486,10 @@ 0BDDF1911884C819F63DCA80 /* NodeSelectionViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NodeSelectionViewFactory.swift; sourceTree = ""; }; 0C1CA1EF5BF1151E0DFB298C /* MainNftContainerRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MainNftContainerRouter.swift; sourceTree = ""; }; 0C34D496D0F57E685237B3A7 /* StakingUnbondConfirmInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondConfirmInteractor.swift; sourceTree = ""; }; + 0D47F5B181BB5778DDEF1125 /* TonWebBridgeAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TonWebBridgeAssembly.swift; sourceTree = ""; }; 0DB89A1483E4601F427056B3 /* NetworkIssuesNotificationAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkIssuesNotificationAssembly.swift; sourceTree = ""; }; 0E07F60661001B2C505D9C8B /* SelectMarketPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectMarketPresenter.swift; sourceTree = ""; }; + 0F28F73B0BC6C4EEBCC5B546 /* DappBrowserListViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserListViewLayout.swift; sourceTree = ""; }; 0F48467D97F9D06F83F70894 /* Pods-fearlessAll-fearless.dev.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessAll-fearless.dev.xcconfig"; path = "Target Support Files/Pods-fearlessAll-fearless/Pods-fearlessAll-fearless.dev.xcconfig"; sourceTree = ""; }; 0F67BB672040911E4A165446 /* PolkaswapSwapConfirmationViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapSwapConfirmationViewLayout.swift; sourceTree = ""; }; 112609AE5629962646248BF0 /* LiquidityPoolSupplyConfirmAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmAssembly.swift; sourceTree = ""; }; @@ -3419,6 +3510,7 @@ 1A7B39A61DB0D2F0F1B1DBA1 /* AccountCreateInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountCreateInteractor.swift; sourceTree = ""; }; 1AF4258723E2FACBBA556D00 /* WalletSendConfirmTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmTests.swift; sourceTree = ""; }; 1B08B264C09E63A936384E2A /* NftDetailsRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftDetailsRouter.swift; sourceTree = ""; }; + 1B3AB5BB9A2488FDD8DDFBA6 /* DappBrowserListProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserListProtocols.swift; sourceTree = ""; }; 1B3E9CA265E5C0F3E83429CE /* LiquidityPoolRemoveLiquidityPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityPresenter.swift; sourceTree = ""; }; 1BE8644A4F6DED808248A0FE /* YourValidatorListViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = YourValidatorListViewFactory.swift; sourceTree = ""; }; 1C52C6CD7112BF0E1E3A98CE /* PurchaseWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PurchaseWireframe.swift; sourceTree = ""; }; @@ -3463,6 +3555,7 @@ 2AD0A19425D3D3EC00312428 /* GitHubOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitHubOperationFactory.swift; sourceTree = ""; }; 2AEC13E6950006302AC51B96 /* WalletTransactionHistoryProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionHistoryProtocols.swift; sourceTree = ""; }; 2B55A4C7E8BD87A7C8634ADD /* WalletsManagmentRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletsManagmentRouter.swift; sourceTree = ""; }; + 2BD242D3369DD517695F330A /* DappBrowserListAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserListAssembly.swift; sourceTree = ""; }; 2BE0492B98AB9C1540846B39 /* StakingPayoutConfirmationViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPayoutConfirmationViewFactory.swift; sourceTree = ""; }; 2C542733CEFB871FCD23195E /* NftSendConfirmInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendConfirmInteractor.swift; sourceTree = ""; }; 2CF682B92176E0FED5D7B4DB /* LiquidityPoolDetailsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsTests.swift; sourceTree = ""; }; @@ -3474,6 +3567,7 @@ 2E57C70E27EA169000AF075A /* ProfileViewLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileViewLayout.swift; sourceTree = ""; }; 2EC386082DDF4DF1ADDCB49D /* WalletOptionRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletOptionRouter.swift; sourceTree = ""; }; 2ECD8589BD30A8BE9492AD87 /* StakingRewardPayoutsPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRewardPayoutsPresenter.swift; sourceTree = ""; }; + 2EE85E6A9028E814231D8466 /* DappBrowserListInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserListInteractor.swift; sourceTree = ""; }; 30F3EC1C2DAE60DD6BB99B42 /* StakingUnbondConfirmViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondConfirmViewFactory.swift; sourceTree = ""; }; 31226053044986BC828AA912 /* AccountExportPasswordPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountExportPasswordPresenter.swift; sourceTree = ""; }; 312DE7ADA5ABC3214AD3D4AD /* StakingAmountInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingAmountInteractor.swift; sourceTree = ""; }; @@ -3484,14 +3578,17 @@ 3211D250E4167C916B8B9D6A /* NetworkIssuesNotificationRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkIssuesNotificationRouter.swift; sourceTree = ""; }; 326260E461C031624CDB62BA /* WalletOptionInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletOptionInteractor.swift; sourceTree = ""; }; 32DEDC1A0ED429DD43EC621E /* NftDetailsPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftDetailsPresenter.swift; sourceTree = ""; }; + 32F4A2C14730740C6D319C5A /* DappBrowserAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserAssembly.swift; sourceTree = ""; }; 32FDB8843EB793C85B222FDB /* SwapTransactionDetailViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SwapTransactionDetailViewController.swift; sourceTree = ""; }; 336395FFC4B2104A9651A2DE /* StakingRewardPayoutsViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRewardPayoutsViewFactory.swift; sourceTree = ""; }; + 339C0DAFDB2C99655C2D64E4 /* DappBrowserPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserPresenter.swift; sourceTree = ""; }; 3574BADE9CF77599048C7010 /* CrowdloanContributionSetupWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionSetupWireframe.swift; sourceTree = ""; }; 35EAD41DB1444DA38D8C65E2 /* NetworkIssuesNotificationPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkIssuesNotificationPresenter.swift; sourceTree = ""; }; 364C90F7AD36FD6F6E690D7D /* SelectValidatorsConfirmFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectValidatorsConfirmFlow.swift; sourceTree = ""; }; 365CAE2753E7D5F9B9DB7D1F /* CustomValidatorListInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CustomValidatorListInteractor.swift; sourceTree = ""; }; 36A3D64FF58C40E5CC6A6E89 /* AssetNetworksRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetNetworksRouter.swift; sourceTree = ""; }; 375E9A7A1206E366E862D81D /* WalletTransactionHistoryInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionHistoryInteractor.swift; sourceTree = ""; }; + 381BD34B5A6E2B1625B2C24C /* TonWebBridgeRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TonWebBridgeRouter.swift; sourceTree = ""; }; 3837CE5CB2D48D8A694A7EE0 /* StakingPoolCreateConfirmPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateConfirmPresenter.swift; sourceTree = ""; }; 385FE8691EA37DE9F562B34E /* CrowdloanContributionConfirmTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionConfirmTests.swift; sourceTree = ""; }; 38B543AA1B941C76CB021051 /* Pods-fearlessTests.dev.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessTests.dev.xcconfig"; path = "Target Support Files/Pods-fearlessTests/Pods-fearlessTests.dev.xcconfig"; sourceTree = ""; }; @@ -3502,6 +3599,7 @@ 3B6244A9538B39AFCD3A6F3A /* SelectValidatorsStartPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartPresenter.swift; sourceTree = ""; }; 3B8473AA386E1AD6F0F0C964 /* ControllerAccountConfirmationInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountConfirmationInteractor.swift; sourceTree = ""; }; 3BA8DC8007FC0A322C6DF00E /* LiquidityPoolsOverviewPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewPresenter.swift; sourceTree = ""; }; + 3C3533520260EDD83C2F26B1 /* DappBrowserViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserViewController.swift; sourceTree = ""; }; 3D2C2FC3E31C03D08BDEC7A1 /* PolkaswapAdjustmentRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapAdjustmentRouter.swift; sourceTree = ""; }; 3D49CA5CB156C1EA38BEBE00 /* LiquidityPoolRemoveLiquidityProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityProtocols.swift; sourceTree = ""; }; 3E992CCDC1D581F7E9D3F1CA /* AccountConfirmInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountConfirmInteractor.swift; sourceTree = ""; }; @@ -3531,11 +3629,13 @@ 47E3A9998DBB9F1FC4A1FB0A /* WalletScanQRTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletScanQRTests.swift; sourceTree = ""; }; 480AE579B48B3DA9C247CCB5 /* CreateContactViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreateContactViewController.swift; sourceTree = ""; }; 48C158C8D1855BCE53636934 /* AccountCreateProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountCreateProtocols.swift; sourceTree = ""; }; + 490FDCAC66E3A0C80F501A5F /* DappBrowserListViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserListViewController.swift; sourceTree = ""; }; 4952E0B8F8DCD92FE4A37892 /* AddCustomNodeViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AddCustomNodeViewLayout.swift; sourceTree = ""; }; 497EFA05A2D8076BFE82964D /* LiquidityPoolSupplyViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyViewController.swift; sourceTree = ""; }; 49C564052FAA3160AA8975CB /* NftSendAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendAssembly.swift; sourceTree = ""; }; 49EBB77A32A59568B0DACFE5 /* StakingPoolCreateProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateProtocols.swift; sourceTree = ""; }; 4B3B14C046584AAAF483715F /* WalletTransactionHistoryWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionHistoryWireframe.swift; sourceTree = ""; }; + 4BD26C200A700CCA34980B61 /* TonWebBridgePresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TonWebBridgePresenter.swift; sourceTree = ""; }; 4C0FA282377DCAB7C59ACFB6 /* RecommendedValidatorListViewController.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; path = RecommendedValidatorListViewController.xib; sourceTree = ""; }; 4C5EF68BE0E29D2305CB7337 /* UsernameSetupTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UsernameSetupTests.swift; sourceTree = ""; }; 4C71DEF78B69F017DF460AB7 /* CrowdloanContributionSetupViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionSetupViewController.swift; sourceTree = ""; }; @@ -3569,6 +3669,7 @@ 59FDAE57EE0A97872E76E6CE /* Pods_fearlessTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_fearlessTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 5A05EB4FAF2FDE7DECEA93E4 /* StakingMainViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingMainViewController.swift; sourceTree = ""; }; 5A4416B96A9DD5FB5EEA086E /* WalletSendConfirmViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmViewLayout.swift; sourceTree = ""; }; + 5AA1493E216DF3B3616A9EE6 /* TonWebBridgeProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TonWebBridgeProtocols.swift; sourceTree = ""; }; 5AA3BF0C9C1E0E2C67D962F5 /* PurchaseViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PurchaseViewFactory.swift; sourceTree = ""; }; 5B0CF2F98779D3C18D0C0A29 /* NodeSelectionTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NodeSelectionTests.swift; sourceTree = ""; }; 5B5D683E7DE3533CA418BD21 /* PolkaswapAdjustmentPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapAdjustmentPresenter.swift; sourceTree = ""; }; @@ -3640,12 +3741,14 @@ 75796C9C1AC23FDE8E1E31DB /* TransferViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TransferViewLayout.swift; sourceTree = ""; }; 759EAF04B9064529D6862A14 /* ConfirmTransferProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConfirmTransferProtocols.swift; sourceTree = ""; }; 75B53E901B1475DE858A2C99 /* ContactsRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ContactsRouter.swift; sourceTree = ""; }; + 75D1886C774F9F63C897CAF1 /* TonWebBridgeViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TonWebBridgeViewLayout.swift; sourceTree = ""; }; 761FDEBB414B1CFAD6992352 /* AnalyticsRewardDetailsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsRewardDetailsTests.swift; sourceTree = ""; }; 779702BC0E9C9882BEA5C273 /* StakingPoolCreateConfirmInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateConfirmInteractor.swift; sourceTree = ""; }; 782CC21A2F9EEF5DBA3AB1AA /* PurchaseProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PurchaseProtocols.swift; sourceTree = ""; }; 784D20E16EEE55C2CF7B319B /* StakingBondMoreFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingBondMoreFlow.swift; sourceTree = ""; }; 7911693957DFAF141EBDAFEC /* StakingRewardPayoutsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRewardPayoutsProtocols.swift; sourceTree = ""; }; 7931155840DACB340284ABBB /* PolkaswapTransaktionSettingsAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapTransaktionSettingsAssembly.swift; sourceTree = ""; }; + 7A656BB6CADD5BEBD41CE492 /* DappBrowserListPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserListPresenter.swift; sourceTree = ""; }; 7BCAF4A12D0F22D3C9035A1A /* WarningAlertPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WarningAlertPresenter.swift; sourceTree = ""; }; 7BDBADCF78FB10BE08DE5259 /* Pods-fearlessTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessTests.release.xcconfig"; path = "Target Support Files/Pods-fearlessTests/Pods-fearlessTests.release.xcconfig"; sourceTree = ""; }; 7C70EBF83B2547452417E588 /* StakingRewardDetailsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRewardDetailsViewController.swift; sourceTree = ""; }; @@ -4570,6 +4673,8 @@ 9C01DCD4DA014E8FB50B9F11 /* CrowdloanContributionSetupTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionSetupTests.swift; sourceTree = ""; }; 9C05A688EA7379572BBCE545 /* SelectMarketRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectMarketRouter.swift; sourceTree = ""; }; 9E29D11C365629B959F44DFA /* ConfirmTransferTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConfirmTransferTests.swift; sourceTree = ""; }; + 9E51A659E2865BD98B6DEF16 /* TonWebBridgeViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TonWebBridgeViewController.swift; sourceTree = ""; }; + 9FBC05405B64AD114FB89FFE /* DappBrowserRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserRouter.swift; sourceTree = ""; }; 9FED48DE9B681995E6E4A581 /* LiquidityPoolDetailsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsProtocols.swift; sourceTree = ""; }; A14CA4551FCC2EBD078E2242 /* AccountConfirmViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountConfirmViewFactory.swift; sourceTree = ""; }; A3104ABC4BECF08B0BA836AA /* AccountConfirmViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountConfirmViewController.swift; sourceTree = ""; }; @@ -4590,6 +4695,7 @@ AA2580363AC3E4A9CD40256E /* RecommendedValidatorListPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecommendedValidatorListPresenter.swift; sourceTree = ""; }; AB2349A5057312BDB6C65804 /* StakingAmountViewController.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; path = StakingAmountViewController.xib; sourceTree = ""; }; AB67BB02A5FD525C8ACA5521 /* WalletTransactionDetailsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionDetailsTests.swift; sourceTree = ""; }; + AB8CC373A5E9E1C11181A4B9 /* DappBrowserInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserInteractor.swift; sourceTree = ""; }; ABFC2AD62212BE16C7B7C429 /* RecommendedValidatorListTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecommendedValidatorListTests.swift; sourceTree = ""; }; AC0C84704B8876688E59FA58 /* AnalyticsRewardDetailsInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsRewardDetailsInteractor.swift; sourceTree = ""; }; AC404A4071AF571FAC4C1994 /* AccountExportPasswordProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountExportPasswordProtocols.swift; sourceTree = ""; }; @@ -4724,6 +4830,7 @@ AEFC6D6E2600D7CD000BD310 /* NetworkInfoViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkInfoViewModelFactory.swift; sourceTree = ""; }; AEFED3DAA18BCEF0BFA15728 /* SelectValidatorsStartInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartInteractor.swift; sourceTree = ""; }; AF01941105BCD02536538362 /* CrowdloanContributionConfirmProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionConfirmProtocols.swift; sourceTree = ""; }; + AF0C991DB1C7567632BB54A9 /* DappBrowserListRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserListRouter.swift; sourceTree = ""; }; AF4DB8C42D41C3A14A379122 /* CreateContactProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreateContactProtocols.swift; sourceTree = ""; }; AFC9C09ABBCEB6E581134E84 /* MainNftContainerViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MainNftContainerViewController.swift; sourceTree = ""; }; AFD95EE4822A564C0D4D1CFE /* WalletOptionPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletOptionPresenter.swift; sourceTree = ""; }; @@ -4950,6 +5057,7 @@ EF65551AE1E858C563054E87 /* ContactsAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ContactsAssembly.swift; sourceTree = ""; }; EFB1161D25AF1FC90AA23B7A /* WalletTransactionHistoryViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionHistoryViewLayout.swift; sourceTree = ""; }; EFB278373745C20822442686 /* ExportSeedPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExportSeedPresenter.swift; sourceTree = ""; }; + EFC41ED0064460B3048E7D14 /* DappBrowserProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserProtocols.swift; sourceTree = ""; }; F02C3AF74DE2F2CDBD165803 /* NetworkIssuesNotificationProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkIssuesNotificationProtocols.swift; sourceTree = ""; }; F02DBCA4A63A5E52E3739374 /* ControllerAccountConfirmationViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountConfirmationViewFactory.swift; sourceTree = ""; }; F12B2D844B474F810C807451 /* AccountManagementTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountManagementTests.swift; sourceTree = ""; }; @@ -5103,6 +5211,7 @@ F52B8815D6AF5E69B145D245 /* CustomValidatorListViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CustomValidatorListViewFactory.swift; sourceTree = ""; }; F55184167D22A33EF7FF77AE /* NftSendProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendProtocols.swift; sourceTree = ""; }; F61D8973ADEB461DE2AD3E13 /* RecommendedValidatorListViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecommendedValidatorListViewController.swift; sourceTree = ""; }; + F684B043895B80CAD70A59CF /* DappBrowserViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserViewLayout.swift; sourceTree = ""; }; F74547DAC8B04C2A1A7FD625 /* StakingRedeemFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRedeemFlow.swift; sourceTree = ""; }; F829E7F8B39EE7D977001510 /* ControllerAccountProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountProtocols.swift; sourceTree = ""; }; F9416E68AE4D5613E9434226 /* StakingPoolCreateConfirmViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateConfirmViewController.swift; sourceTree = ""; }; @@ -6587,6 +6696,24 @@ path = ScamService; sourceTree = ""; }; + 0715FCD52C65FC3600AA674E /* Models */ = { + isa = PBXGroup; + children = ( + 07ECB7FC2C6A07C1000E0A14 /* SendTransactionSignRequest.swift */, + 07ECB7FA2C6A07AF000E0A14 /* TonConnectAppRequest.swift */, + 0715FCDE2C661E1D00AA674E /* TonConnect.swift */, + 0715FCE22C66262100AA674E /* TonConnectResponses+Encodable.swift */, + 0715FCDC2C660AF700AA674E /* DappBridgeMessageType.swift */, + 0715FCE02C6620B500AA674E /* DappBridgeResponse.swift */, + 0715FCE42C66378900AA674E /* TonConnectModels.swift */, + 07ECB7F22C69CF13000E0A14 /* TonConnectDessision.swift */, + 07ECB8002C6A0F9B000E0A14 /* TonConnectSendDessision.swift */, + 07ECB7F62C69F4A1000E0A14 /* TonDapp.swift */, + 07ECB8042C6B71DE000E0A14 /* TonConnectApp.swift */, + ); + path = Models; + sourceTree = ""; + }; 0723ED9E2C48E35600880620 /* Flows */ = { isa = PBXGroup; children = ( @@ -6824,6 +6951,29 @@ path = Chainlink; sourceTree = ""; }; + 07C438D52C638AE400475B14 /* TonConnect */ = { + isa = PBXGroup; + children = ( + 07C438D82C638B4300475B14 /* Models */, + 07C438D62C638B2900475B14 /* TonConnectService.swift */, + 07ECB8082C6C6CDE000E0A14 /* TonConnectEventsCenter.swift */, + 07ECB8022C6B4EA3000E0A14 /* TonConnectSessionCrypto.swift */, + ); + name = TonConnect; + sourceTree = ""; + }; + 07C438D82C638B4300475B14 /* Models */ = { + isa = PBXGroup; + children = ( + 07ECB80C2C6C7410000E0A14 /* TonConnectEvent.swift */, + 07ECB80A2C6C6E75000E0A14 /* TonConnectError.swift */, + 07C438DD2C638D3900475B14 /* TonConnectManifest.swift */, + 07C438DB2C638BB800475B14 /* TonConnectRequestPayload.swift */, + 07C438D92C638BAA00475B14 /* TonConnectParameters.swift */, + ); + path = Models; + sourceTree = ""; + }; 07D05E4228EEFBFE00B66C70 /* Pool */ = { isa = PBXGroup; children = ( @@ -6874,6 +7024,25 @@ path = PoolExisting; sourceTree = ""; }; + 07D0BD3C2C6F0C8D001ECD58 /* View */ = { + isa = PBXGroup; + children = ( + 07D0BD442C6F191C001ECD58 /* DappBrowserSectionHeaderView.swift */, + F684B043895B80CAD70A59CF /* DappBrowserViewLayout.swift */, + 07D0BD3D2C6F0CA0001ECD58 /* DappBrowserFeaturedView.swift */, + ); + path = View; + sourceTree = ""; + }; + 07D0BD3F2C6F0E90001ECD58 /* Cells */ = { + isa = PBXGroup; + children = ( + 07D0BD402C6F0E9C001ECD58 /* BrowserExploreFeaturedCell.swift */, + 07D0BD422C6F179E001ECD58 /* DappBrowserListCell.swift */, + ); + path = Cells; + sourceTree = ""; + }; 07DE95AB28A1119400E9C2CB /* BalanceInfo */ = { isa = PBXGroup; children = ( @@ -7029,6 +7198,7 @@ children = ( FA6262312AC2E35A005D3D95 /* WalletConnectProposalViewModel.swift */, FA6262322AC2E35A005D3D95 /* WalletConnectProposalViewModelFactory.swift */, + 07ECB7F42C69EDCE000E0A14 /* SessionStatus.swift */, ); path = Model; sourceTree = ""; @@ -7064,6 +7234,7 @@ isa = PBXGroup; children = ( FA6262012AC2E359005D3D95 /* WalletConnectSessionViewModelFactory.swift */, + 07ECB7FE2C6A0BB2000E0A14 /* ConnectRequestVariant.swift */, FA6262042AC2E359005D3D95 /* WalletConnectSessionViewModel.swift */, ); name = Model; @@ -7366,6 +7537,20 @@ path = Pods; sourceTree = ""; }; + 289549035B3DBF4E3B283D2E /* DappBrowserList */ = { + isa = PBXGroup; + children = ( + 1B3AB5BB9A2488FDD8DDFBA6 /* DappBrowserListProtocols.swift */, + AF0C991DB1C7567632BB54A9 /* DappBrowserListRouter.swift */, + 7A656BB6CADD5BEBD41CE492 /* DappBrowserListPresenter.swift */, + 2EE85E6A9028E814231D8466 /* DappBrowserListInteractor.swift */, + 490FDCAC66E3A0C80F501A5F /* DappBrowserListViewController.swift */, + 0F28F73B0BC6C4EEBCC5B546 /* DappBrowserListViewLayout.swift */, + 2BD242D3369DD517695F330A /* DappBrowserListAssembly.swift */, + ); + path = DappBrowserList; + sourceTree = ""; + }; 28CCC9C191E2305B65727756 /* NodeSelection */ = { isa = PBXGroup; children = ( @@ -8160,7 +8345,6 @@ 84D1110B26B922D50016D962 /* ConnectionPool.swift */, 84CA68DC26BEA60A003B9453 /* ConnectionFactory.swift */, FA9A8F482A82034B008FA99F /* EthereumConnectionPool.swift */, - 070ED7F52C454A1500DF4098 /* TonAPIAssembly.swift */, 07ED2EB82C341A0100FF7500 /* NodeApiKeyInjector.swift */, ); path = ConnectionPool; @@ -8658,6 +8842,7 @@ 07F2B75A28A6533900280C38 /* assets.json */, 076D9D6129506CE3002762E3 /* polkaswapSettings.json */, 07F2B75B28A6535B00280C38 /* chains.json */, + 07230EB02C7456B900B92466 /* dapps.json */, 07C3397029178D390057C4A5 /* types.json */, 84452F7025D5E2B300F47EC5 /* runtime-westend.json */, 84452F7125D5E2B300F47EC5 /* runtime-polkadot.json */, @@ -8888,6 +9073,7 @@ isa = PBXGroup; children = ( 07BF3D952B3D8B3A0046ABF4 /* PriceDataSource.swift */, + 07230EAA2C73515E00B92466 /* DappDataSource.swift */, FA4B92B72844D2360003BCEF /* CoingeckoPricesSource.swift */, 84EE6826264AD37B0026E6D3 /* Rewards */, 8463A71E25E39E07003B8160 /* StorageProviderSource.swift */, @@ -8929,6 +9115,7 @@ children = ( 8467FCFB24E5C3BD005D486C /* URLHandlingService.swift */, 8467FCFD24E5C50B005D486C /* KeystoreImportService.swift */, + 07D0BD3A2C6E2282001ECD58 /* TonConnectUrlHandling.swift */, ); path = URLHandling; sourceTree = ""; @@ -9028,6 +9215,8 @@ 843910B5253EE62B00E3C217 /* DataProviderChange+Result.swift */, 8434C9E525403686009E4191 /* CDTransactionHistoryItem+CoreDataDecodable.swift */, 84FAB0642542CA4200319F74 /* CDContactItem+CoreDataDecodable.swift */, + 07ECB7F82C69F62F000E0A14 /* CDTonDapp+CoreDataDecodable.swift */, + 07ECB8062C6B7380000E0A14 /* CDTonConnectedApp+CoreDataDecodable.swift */, 2A66CF4E25D109770006E4C1 /* CDPhishingItem+CoreDataDecodable.swift */, 84452A5F25D037AE00F47EC5 /* ChainStorage+Decodable.swift */, 84452FA425D679F200F47EC5 /* CDRuntimeMetadataItem+CoreDataCodable.swift */, @@ -9286,6 +9475,7 @@ 849013AA24A80984008F705E /* fearless */ = { isa = PBXGroup; children = ( + 07165B1F2C6DDF4E00C11E3B /* fearless.entitlements */, FA8644342767AB7E00956D8E /* CoreLayer */, FA38C9A227606FDD005C5577 /* ApplicationLayer */, 8490141D24A93027008F705E /* Fonts */, @@ -9431,6 +9621,9 @@ DA46895F73B0FB1064146E47 /* AssetNetworks */, 0AEF32A92BEEDB9B5A60A433 /* ClaimCrowdloanRewards */, 07B56CFB2C53C45100E924AA /* Transfer */, + 9E9B8E7D0CF6D39DD826885F /* TonWebBridge */, + AD55C5CD2FE0946A08730F0A /* DappBrowser */, + 289549035B3DBF4E3B283D2E /* DappBrowserList */, ); path = Modules; sourceTree = ""; @@ -11086,6 +11279,23 @@ path = CreateContact; sourceTree = ""; }; + 9E9B8E7D0CF6D39DD826885F /* TonWebBridge */ = { + isa = PBXGroup; + children = ( + 0715FCD52C65FC3600AA674E /* Models */, + 0715FCD32C65E96000AA674E /* TonWebBridgeHeaderView.swift */, + 5AA1493E216DF3B3616A9EE6 /* TonWebBridgeProtocols.swift */, + 381BD34B5A6E2B1625B2C24C /* TonWebBridgeRouter.swift */, + 4BD26C200A700CCA34980B61 /* TonWebBridgePresenter.swift */, + 0715FCD82C6608B700AA674E /* TonWebBridgeMessageBuilder.swift */, + 014B8F922BD4E7BFB8D1483D /* TonWebBridgeInteractor.swift */, + 9E51A659E2865BD98B6DEF16 /* TonWebBridgeViewController.swift */, + 75D1886C774F9F63C897CAF1 /* TonWebBridgeViewLayout.swift */, + 0D47F5B181BB5778DDEF1125 /* TonWebBridgeAssembly.swift */, + ); + path = TonWebBridge; + sourceTree = ""; + }; A17E1D8ADC21C651CE346F73 /* CrowdloanContributionConfirm */ = { isa = PBXGroup; children = ( @@ -11153,6 +11363,23 @@ path = StakingUnbondConfirm; sourceTree = ""; }; + AD55C5CD2FE0946A08730F0A /* DappBrowser */ = { + isa = PBXGroup; + children = ( + 07D0BD3F2C6F0E90001ECD58 /* Cells */, + 07D0BD3C2C6F0C8D001ECD58 /* View */, + EFC41ED0064460B3048E7D14 /* DappBrowserProtocols.swift */, + 9FBC05405B64AD114FB89FFE /* DappBrowserRouter.swift */, + 339C0DAFDB2C99655C2D64E4 /* DappBrowserPresenter.swift */, + 07230EAC2C735AA200B92466 /* DappBrowserViewModelFactory.swift */, + AB8CC373A5E9E1C11181A4B9 /* DappBrowserInteractor.swift */, + 3C3533520260EDD83C2F26B1 /* DappBrowserViewController.swift */, + 07230EAE2C73608900B92466 /* DappBrowserViewModel.swift */, + 32F4A2C14730740C6D319C5A /* DappBrowserAssembly.swift */, + ); + path = DappBrowser; + sourceTree = ""; + }; AE1000EF2667981A004753B7 /* ChangeTargets */ = { isa = PBXGroup; children = ( @@ -13568,6 +13795,7 @@ FA38C9A32760700B005C5577 /* Services */ = { isa = PBXGroup; children = ( + 07C438D52C638AE400475B14 /* TonConnect */, FA09AD332C37AB9400BE0B9C /* TransactionObserver */, FA34EE902B98711F0042E73E /* CrowdloanService.swift */, FA34EE912B9871200042E73E /* Onboarding */, @@ -15906,7 +16134,6 @@ buildPhases = ( 94F787D261F4281B7F6AFE26 /* [CP] Check Pods Manifest.lock */, AE2060202636DA5900357578 /* Inject keys */, - F472A8D6261758DE003C58BC /* SwiftFormat */, 849013CD24A92260008F705E /* Swiftlint */, 849013CE24A92280008F705E /* R.swift */, 849013A424A80984008F705E /* Sources */, @@ -16083,6 +16310,7 @@ 8490141424A92F6D008F705E /* OnbordingMain.xib in Resources */, AEF5058B261EF27B0098574D /* PurchaseProviderPickerTableViewCell.xib in Resources */, 849013B524A80986008F705E /* Assets.xcassets in Resources */, + 07230EB12C7456B900B92466 /* dapps.json in Resources */, 84D8F15724D80D5500AF43E9 /* ModalPickerViewController.xib in Resources */, 84452F7525D5E2B300F47EC5 /* runtime-polkadot.json in Resources */, 84754C9E2513B46100854599 /* AccountPickerTableViewCell.xib in Resources */, @@ -16347,24 +16575,6 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-fearlessAll-fearless/Pods-fearlessAll-fearless-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - F472A8D6261758DE003C58BC /* SwiftFormat */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - name = SwiftFormat; - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/SwiftFormat/CommandLineTool/swiftformat\" \"$SRCROOT/fearless\"\n"; - }; FAD429442A8A1A74001D6A16 /* Inject Google Keys */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -16530,6 +16740,7 @@ 070CDD8C2ACBE59700F3F20A /* ReceiveAndRequestAssetInteractor.swift in Sources */, 8494D86B25247F9600614D8F /* Decimal+String.swift in Sources */, FAAC292E2ADCF3BB00063962 /* WalletConnectProposalCoordinator.swift in Sources */, + 07ECB7FF2C6A0BB2000E0A14 /* ConnectRequestVariant.swift in Sources */, FA38C9A62760701F005C5577 /* SearchService.swift in Sources */, 84873B0926029CBD000A83EE /* StakingStateViewModelFactory.swift in Sources */, FAFFAE3729AC84180074AF1F /* ParachainSubqueryHistoryOperationFactory.swift in Sources */, @@ -16567,6 +16778,7 @@ 0716C84F28880304004C8CB1 /* UITableViewCell.swift in Sources */, FA8800542B2C5D91000AE5EB /* ReefSubsquidHistoryOperationFactory.swift in Sources */, FACD42B02A5BE8A4009975AA /* NumbersAndSlashesProcessor.swift in Sources */, + 0715FCE52C66378900AA674E /* TonConnectModels.swift in Sources */, F4F2297C260DC05600ACFDB8 /* StakingRewardTokenUsdViewModel.swift in Sources */, FA256989274CE5DD00875A53 /* ViewController+Wrapper.swift in Sources */, FAC6CD8A2BA7FA4B0013A17E /* AssetTransactionData.swift in Sources */, @@ -16578,6 +16790,7 @@ FAD429022A86567F001D6A16 /* BackupCreatePasswordViewController.swift in Sources */, AEE5FB1826457AC1002B8FDC /* StakingRewardDestSetupViewController.swift in Sources */, 07DFA45A289B8D520035A8AB /* WalletBalanceInfo.swift in Sources */, + 0715FCDF2C661E1D00AA674E /* TonConnect.swift in Sources */, FAA0137328DA12E3000A5230 /* StakingRedeemConfirmationFlow.swift in Sources */, 842D1E8624D1A90400C30A7A /* NSPredicate+Validation.swift in Sources */, F4FDA0F826A57626003D753B /* EraCountdownOperationFactory.swift in Sources */, @@ -16747,6 +16960,7 @@ 84F13F0826F13898006725FF /* StakingAssetSettings.swift in Sources */, 84F30EF1260001A600039D09 /* DataProviderChange+Helper.swift in Sources */, FA6262492AC2E35A005D3D95 /* WalletConnectActiveSessionsInteractor.swift in Sources */, + 07ECB7F72C69F4A1000E0A14 /* TonDapp.swift in Sources */, F47BBD8026317B970087DA11 /* StakingBalanceViewModel.swift in Sources */, FACD42812A5BE7E7009975AA /* Abbreviations.swift in Sources */, FA2FC80028B3807C00CC0A42 /* StakingPoolJoinChoosePoolViewController.swift in Sources */, @@ -16765,6 +16979,7 @@ 8443FDB12554B7640092893D /* TitledMnemonicView.swift in Sources */, AE2C84CA25EF986E00986716 /* ValidatorInfoProtocols.swift in Sources */, AEFC6D672600A808000BD310 /* StoriesPreviewCollectionItem.swift in Sources */, + 0715FCD92C6608B700AA674E /* TonWebBridgeMessageBuilder.swift in Sources */, 07DE95B828A1119400E9C2CB /* BalanceInfoInteractor.swift in Sources */, FA86442027671C7700956D8E /* WalletTransactionHistoryCellViewModel.swift in Sources */, FA17B4C027E97536006E0735 /* DeactivatableView.swift in Sources */, @@ -16805,6 +17020,7 @@ 849014CB24AA8B75008F705E /* RootControllerAnimationCoordinator.swift in Sources */, 84DED3FC266651EB00A153BB /* ReferralCrowdloanViewModel.swift in Sources */, FA2FC82328B380C500CC0A42 /* StakingPoolState.swift in Sources */, + 07ECB7F52C69EDCE000E0A14 /* SessionStatus.swift in Sources */, 8428766924ADF27D00D91AD8 /* AuthorizationPresentable.swift in Sources */, F4871DEE26D63E3E00D27F23 /* AnalyticsRewardDetailsViewModel.swift in Sources */, 84563D0524F466470055591D /* ManagedAccountItem.swift in Sources */, @@ -17120,6 +17336,7 @@ FA2FC84128B3879900CC0A42 /* InsettedLabel.swift in Sources */, FAADC1AD29261F7000DA9903 /* PoolRolesConfirmRouter.swift in Sources */, F4871DF326D63E8700D27F23 /* AnalyticsRewardDetailsViewModelFactory.swift in Sources */, + 07ECB8032C6B4EA3000E0A14 /* TonConnectSessionCrypto.swift in Sources */, FA9A8F1F2A72573C008FA99F /* AlchemyHistory.swift in Sources */, 84873B0426029B75000A83EE /* StakingEstimationViewModel.swift in Sources */, AE6F7FE32685E812002BBC3E /* ValidatorListFilterViewLayout.swift in Sources */, @@ -17175,6 +17392,7 @@ 8463A71A25E3116A003B8160 /* BalanceViewModel.swift in Sources */, 076D9D35293E34AF002762E3 /* LiquiditySourceType.swift in Sources */, FA286B0B2A3043DB008BD527 /* CrossChainConfirmationViewLayout.swift in Sources */, + 07ECB8052C6B71DE000E0A14 /* TonConnectApp.swift in Sources */, C6CA3081286192C50087776D /* DelegationViewModel.swift in Sources */, FAD429052A86567F001D6A16 /* BackupCreatePasswordRouter.swift in Sources */, FACD42A42A5BE811009975AA /* KeystoreMigrator.swift in Sources */, @@ -17401,6 +17619,7 @@ FA99426C28053CFA00D771E5 /* WalletDetailsFlow.swift in Sources */, FAC6CD902BA7FCA70013A17E /* AssetTransactionFee.swift in Sources */, FA9A8F262A72579D008FA99F /* AlchemySortOrder.swift in Sources */, + 07ECB7F32C69CF13000E0A14 /* TonConnectDessision.swift in Sources */, FAFFAEAC29AC90E50074AF1F /* SubqueryPayoutValidatorsForNominatorFactory.swift in Sources */, FA8800632B31A04C000AE5EB /* StakingAccountResolverAssembly.swift in Sources */, FAA013B328DA1355000A5230 /* StakingPoolRewards.swift in Sources */, @@ -17467,6 +17686,7 @@ 2AD0A19025D3D1E100312428 /* GitHubPhishingServiceFactory.swift in Sources */, FA14AE892B0785670066CADF /* SoraSubsquidHistoryResponse.swift in Sources */, FAAA29572B8DED770089AFE6 /* MapKeyType.swift in Sources */, + 0715FCD42C65E96000AA674E /* TonWebBridgeHeaderView.swift in Sources */, FACD42BC2A5BE91E009975AA /* PortionRewardCalculatorEngine.swift in Sources */, AEF505A92620249F0098574D /* UIColor+HEX.swift in Sources */, FACD42A12A5BE811009975AA /* MultiassetV2MigrationPolicy.swift in Sources */, @@ -17559,7 +17779,6 @@ FAD646DA284F58C1007CCB92 /* StakingUnbondSetupRelaychainStrategy.swift in Sources */, FA62625D2AC2E35A005D3D95 /* RawDataInteractor.swift in Sources */, FABA163D2B0C9510001AF2F0 /* NetworkManagmentProtocols.swift in Sources */, - 070ED7F62C454A1500DF4098 /* TonAPIAssembly.swift in Sources */, 84113B6C255B2835009BD21A /* AccountCreateError.swift in Sources */, FA17B4AE27E84911006E0735 /* WarningAlertConfig.swift in Sources */, 849014C024AA87E4008F705E /* ScreenAuthorizationPresenter.swift in Sources */, @@ -17577,6 +17796,7 @@ F4DCAE4726207EF900CCA6BF /* PayoutRewardsServiceProtocol.swift in Sources */, FAA0139128DA1303000A5230 /* StakingPayoutConfirmationPoolStrategy.swift in Sources */, FAC0BBD0291D0EB000E6F106 /* TipViewModel.swift in Sources */, + 07C438DC2C638BB800475B14 /* TonConnectRequestPayload.swift in Sources */, FA256A31274CE7D600875A53 /* MoonbeamGuidInfoRequest.swift in Sources */, FA72543E2AC2E48500EC47A6 /* ABIEncoding.swift in Sources */, F4F65C3826D8B86F002EE838 /* FWXAxisEmptyValueFormatter.swift in Sources */, @@ -17797,6 +18017,7 @@ FA335AAC29C81ADC0003DBDD /* SubstrateCallFactoryProtocol.swift in Sources */, 84FAB0652542CA4200319F74 /* CDContactItem+CoreDataDecodable.swift in Sources */, FA44284229D44E51000142EB /* ChainStakingSettings.swift in Sources */, + 0715FCE32C66262100AA674E /* TonConnectResponses+Encodable.swift in Sources */, FABA161B2B0C941B001AF2F0 /* MultiassetV11MigrationPolicy.swift in Sources */, 8472974D260A9CDF009B86D0 /* SelectValidatorsConfirmationModel.swift in Sources */, 847C966325536455002D288F /* ExportRestoreJsonViewFactory.swift in Sources */, @@ -17856,6 +18077,7 @@ 840BF22726C2C8A600E3A955 /* ChainSyncEvents.swift in Sources */, C6267B9028BDF6A5001E31BF /* ChainAccountBalanceCellViewModel.swift in Sources */, FA2FC81328B3807D00CC0A42 /* StakingPoolStartViewModelFactory.swift in Sources */, + 07ECB80D2C6C7411000E0A14 /* TonConnectEvent.swift in Sources */, C6CA307D285F61B70087776D /* ParachainState.swift in Sources */, F43A596A26D520E0005E973D /* EmptyStateViewCell.swift in Sources */, FAFFAE9829AC84B10074AF1F /* DelegatorHistoryResponse.swift in Sources */, @@ -17863,6 +18085,7 @@ AEA2C1B42681E99D0069492E /* ValidatorSearchProtocols.swift in Sources */, FA2569C1274CE74100875A53 /* AttentionView.swift in Sources */, 7489BDA1D23D8DF73E7EB9BC /* UsernameSetupWireframe.swift in Sources */, + 07230EAB2C73515E00B92466 /* DappDataSource.swift in Sources */, FAA0133428DA12B6000A5230 /* StakingPoolNetworkInfo.swift in Sources */, FA256A37274CE7D600875A53 /* CrowdloanAgreementServiceError.swift in Sources */, 84E1CCFA260DCBF9001E81B5 /* SwitchAccount+UsernameSetupWireframe.swift in Sources */, @@ -17880,6 +18103,7 @@ 84D8F16D24D82C7E00AF43E9 /* ModalPickerConfiguration.swift in Sources */, 07F817FB2AD4173100B87358 /* WalletConnectCoordinatorRouter.swift in Sources */, FAA013B128DA134B000A5230 /* PoolWithdrawUnbondedCall.swift in Sources */, + 07ECB8012C6A0F9B000E0A14 /* TonConnectSendDessision.swift in Sources */, C6CA20392B05EBFB001503C2 /* NftFiltersPresenter.swift in Sources */, FA936BF22872E35F0059B97A /* TitleSwitchViewModel.swift in Sources */, FAD4292E2A865680001D6A16 /* BackupWalletImportedProtocols.swift in Sources */, @@ -17902,6 +18126,7 @@ 6B62E63FB9E379EA19A41464 /* AccountCreateProtocols.swift in Sources */, 84EBAB0B265E28590015E446 /* ChainDateCalculator.swift in Sources */, FAA013A728DA133E000A5230 /* ShadowRoundedBackground.swift in Sources */, + 07230EAD2C735AA200B92466 /* DappBrowserViewModelFactory.swift in Sources */, AE9EF26E260A82D50026910A /* SlideViewModel.swift in Sources */, 84754C9A2513871300854599 /* SNAddressType+Codable.swift in Sources */, FA7336DB2A0E3B880096A291 /* NetworkWorker.swift in Sources */, @@ -17945,6 +18170,7 @@ 84E6D57C262E2CE8000EA3F5 /* OperationCombiningService.swift in Sources */, FA1D01FA2BBE713D005B7071 /* LiquidityPoolListViewModel.swift in Sources */, 0726FFAD2AC4399C00336D76 /* WalletConnectPolkadotParser.swift in Sources */, + 07D0BD452C6F191C001ECD58 /* DappBrowserSectionHeaderView.swift in Sources */, FA2222942BD2726F0031DE04 /* SkeletonLabel.swift in Sources */, FA22228D2BD237910031DE04 /* SubqueryPriceFetcher.swift in Sources */, FAED6F4427DA19C70051B337 /* AccountInfoSubscriptionAdapter.swift in Sources */, @@ -18212,6 +18438,7 @@ FAB707672BB3C1A400A1131C /* AssetAccountInfo.swift in Sources */, FAD429182A86567F001D6A16 /* BackupSelectWalletTableCell.swift in Sources */, FA34EEDD2B98723C0042E73E /* OnboardingPageCell.swift in Sources */, + 07D0BD432C6F179E001ECD58 /* DappBrowserListCell.swift in Sources */, FAE9EBA7288ABBFC009390B6 /* AnalyticsRewardsRelaychainViewModelState.swift in Sources */, 07F2B76328ACDA7800280C38 /* RuntimeHotBootSnapshotFactory.swift in Sources */, FA38C9C12761E68B005C5577 /* AccountViewModel.swift in Sources */, @@ -18335,6 +18562,7 @@ F4C086C726D1159E00716AEC /* SubqueryEraStakersInfoSource.swift in Sources */, C6CA20412B072955001503C2 /* NftFiltersAssembly.swift in Sources */, FA6DB7C32757C9B000233FBA /* ChainAccountViewLayout.swift in Sources */, + 0715FCE12C6620B500AA674E /* DappBridgeResponse.swift in Sources */, AEF5071E262369C00098574D /* PurchaseProviderProtocol.swift in Sources */, FA34EEB22B9872240042E73E /* StakingLedgerRequest.swift in Sources */, FAA0138028DA12F0000A5230 /* StakingRedeemPoolStrategy.swift in Sources */, @@ -18373,6 +18601,7 @@ C661B3B027DF75D4005F1F7D /* AccountCreateViewModel.swift in Sources */, 61E0DC83C1D60D677274D7CE /* AccountExportPasswordViewFactory.swift in Sources */, FA93A30A2834FCA10021330F /* ValidatorSearchRelaychainViewModelState.swift in Sources */, + 07230EAF2C73608900B92466 /* DappBrowserViewModel.swift in Sources */, 1BFC90E1D8646F7429FFD5E6 /* ExportMnemonicProtocols.swift in Sources */, 3133215566E418F40844A60E /* ExportMnemonicWireframe.swift in Sources */, 84F77AAA265EE86B00F54885 /* CrowdloanErrorPresentable.swift in Sources */, @@ -18441,6 +18670,7 @@ C63468E228F2C964005CB1F1 /* ContactTableCell.swift in Sources */, 076D9D57294B38E1002762E3 /* PolkaswapPreviewParams.swift in Sources */, FA99425528053C8800D771E5 /* SelectExportAccountInteractor.swift in Sources */, + 07ECB80B2C6C6E76000E0A14 /* TonConnectError.swift in Sources */, FA7254432AC2E48500EC47A6 /* WalletConnectService.swift in Sources */, 845532D226846B6800C2645D /* ParachainLeaseInfo.swift in Sources */, 84DE8BD6264A651A002AF1EF /* RewardSelectionView+Inspectable.swift in Sources */, @@ -18519,6 +18749,7 @@ FA286B182A3043DB008BD527 /* CrossChainInteractor.swift in Sources */, FA6C175429935DAE00A55254 /* AssetTransactionData+SubqueryHistory.swift in Sources */, C6584E352982524700592A92 /* WalletTransactionHistoryDependencyContainer.swift in Sources */, + 07ECB8072C6B7380000E0A14 /* CDTonConnectedApp+CoreDataDecodable.swift in Sources */, FAE9EBA9288ABC0C009390B6 /* AnalyticsRewardsRelaychainViewModelFactory.swift in Sources */, FA6C17912993601A00A55254 /* AddressChainDefiner.swift in Sources */, FAFFAE7629AC84B10074AF1F /* TransactionContextKeys.swift in Sources */, @@ -18587,6 +18818,7 @@ 846AC7EF2638D9200075F7DA /* YourValidatorTableCell.swift in Sources */, FA9A8F432A78C03D008FA99F /* EthereumTransferService.swift in Sources */, C937154FA9021AECD72A871B /* StakingRewardDetailsViewController.swift in Sources */, + 07ECB7FD2C6A07C1000E0A14 /* SendTransactionSignRequest.swift in Sources */, FA2FC81028B3807D00CC0A42 /* StakingPoolJoinConfirmAssembly.swift in Sources */, FA256A30274CE7D600875A53 /* MoonbeamCheckRemarkRequest.swift in Sources */, AEA0C8B8267C905500F9666F /* SelectedValidatorCell.swift in Sources */, @@ -18815,6 +19047,7 @@ 0F3E58FC800ED8722589F89E /* ReferralCrowdloanPresenter.swift in Sources */, 9F4A48B1BE3A1110A0CF9F36 /* ReferralCrowdloanViewController.swift in Sources */, CE2792E78B14CE02394D8CF4 /* ReferralCrowdloanViewLayout.swift in Sources */, + 07D0BD3B2C6E2282001ECD58 /* TonConnectUrlHandling.swift in Sources */, 2B0FC94B4AE9AFE9532F493F /* ReferralCrowdloanViewFactory.swift in Sources */, FAA0137228DA12E3000A5230 /* StakingRedeemConfirmationParachainViewModelFactory.swift in Sources */, FAD4291B2A86567F001D6A16 /* WalletNameRouter.swift in Sources */, @@ -18887,6 +19120,7 @@ FAAA291D2B8DBFEE0089AFE6 /* StorageRequestWorkerBuilder.swift in Sources */, FA93A2E82833B0F10021330F /* RecommendedValidatorListRelaychainViewModelState.swift in Sources */, FAD429322A865696001D6A16 /* CheckboxButton.swift in Sources */, + 07D0BD3E2C6F0CA0001ECD58 /* DappBrowserFeaturedView.swift in Sources */, 0DAEDA34F5BCECE5BD64DF26 /* WalletTransactionHistoryWireframe.swift in Sources */, FAD4291F2A86567F001D6A16 /* WalletNameAssembly.swift in Sources */, D1E085712E7BC0EBF2F4F020 /* WalletTransactionHistoryPresenter.swift in Sources */, @@ -18965,6 +19199,7 @@ 9C8AAE31F22421A975A17DF4 /* AddCustomNodeWireframe.swift in Sources */, FA34EEB42B9872240042E73E /* StakingCurrentEraRequest.swift in Sources */, 07DFA456289B78E20035A8AB /* CopyableLabelView.swift in Sources */, + 07ECB8092C6C6CDE000E0A14 /* TonConnectEventsCenter.swift in Sources */, 07D05E6728EF0BE500B66C70 /* SelectValidatorsConfirmPoolViewModelFactory.swift in Sources */, AE552BD2B83A94626F109CA9 /* AddCustomNodePresenter.swift in Sources */, FA34EE9A2B98712D0042E73E /* BalanceLocksFetching.swift in Sources */, @@ -19063,6 +19298,7 @@ 89C8A9B990B08016A70ED336 /* StakingPoolInfoViewController.swift in Sources */, 281D17EF8C45A1FC49FD1523 /* StakingPoolInfoViewLayout.swift in Sources */, 39DA5795FB9DBF626B72B5C6 /* StakingPoolInfoAssembly.swift in Sources */, + 0715FCDD2C660AF700AA674E /* DappBridgeMessageType.swift in Sources */, 4A63ECA587C601999AAEB974 /* StakingPoolCreateProtocols.swift in Sources */, 7BC6FB48B9B4EC790923FF1E /* StakingPoolCreateRouter.swift in Sources */, 82379C63F216F4B4B7832A71 /* StakingPoolCreatePresenter.swift in Sources */, @@ -19092,14 +19328,17 @@ FA1D51D92BCFE353001353E7 /* SoraFiatService.swift in Sources */, 705F5EEDD70D6941D138D3F9 /* ContactsInteractor.swift in Sources */, 3336F04749ADC27C81BA9464 /* ContactsViewController.swift in Sources */, + 07ECB7F92C69F62F000E0A14 /* CDTonDapp+CoreDataDecodable.swift in Sources */, 2515863D26C9F862AB800C4C /* ContactsViewLayout.swift in Sources */, E29066A3781333DF890E8F9B /* ContactsAssembly.swift in Sources */, 9E2D97A489E8F84A8A0916A8 /* CreateContactProtocols.swift in Sources */, D3C2414CAC720D2D08F0CC4F /* CreateContactRouter.swift in Sources */, + 07C438D72C638B2900475B14 /* TonConnectService.swift in Sources */, FA7254222AC2E48500EC47A6 /* WalletConnectSigner.swift in Sources */, 4641B3CABB5FE1DCFBEDA379 /* CreateContactPresenter.swift in Sources */, 152AC909C26E809ACCA55B35 /* CreateContactInteractor.swift in Sources */, FA6262392AC2E35A005D3D95 /* WalletConnectConfirmationPresenter.swift in Sources */, + 07C438DE2C638D3900475B14 /* TonConnectManifest.swift in Sources */, FACD427F2A5BE7D8009975AA /* JSONRPCOperation+Result.swift in Sources */, FAD429252A865680001D6A16 /* BackupWalletPresenter.swift in Sources */, DBBD1651F45FECA1B17AAF40 /* CreateContactViewController.swift in Sources */, @@ -19167,6 +19406,7 @@ D3BB5CACD4790A601BF01AF5 /* NftCollectionInteractor.swift in Sources */, E5CE21BA40C554E06B566E98 /* NftCollectionViewController.swift in Sources */, FA7254252AC2E48500EC47A6 /* WalletConnectEthereumSigner.swift in Sources */, + 07D0BD412C6F0E9C001ECD58 /* BrowserExploreFeaturedCell.swift in Sources */, FB214D3851B28AA8FF05AA41 /* NftCollectionViewLayout.swift in Sources */, FE65F897D63CAA8F8AE4B972 /* NftCollectionAssembly.swift in Sources */, FA6262572AC2E35A005D3D95 /* MultiSelectNetworksViewModelFactory.swift in Sources */, @@ -19204,6 +19444,7 @@ F52C9FF9ABB4ED034D177CF8 /* LiquidityPoolsOverviewRouter.swift in Sources */, 1E59CE2953F8835954A4E5A7 /* LiquidityPoolsOverviewPresenter.swift in Sources */, DFF0320CF3AA41142DEAC5F2 /* LiquidityPoolsOverviewInteractor.swift in Sources */, + 07C438DA2C638BAA00475B14 /* TonConnectParameters.swift in Sources */, 4A957B3BAC231B70CBC00EC3 /* LiquidityPoolsOverviewViewController.swift in Sources */, 02EC6059AEE8C92B4EDD09C0 /* LiquidityPoolsOverviewViewLayout.swift in Sources */, 61B5A91FBEF633FCC8D965B6 /* LiquidityPoolsOverviewAssembly.swift in Sources */, @@ -19218,6 +19459,7 @@ 0D7DDA00BBF1D0CFD9A26306 /* LiquidityPoolSupplyProtocols.swift in Sources */, 66AECEC6A6EB8184114B041E /* LiquidityPoolSupplyRouter.swift in Sources */, FA5085AD2C33C6D4002DF97D /* SafeDictionary.swift in Sources */, + 07ECB7FB2C6A07AF000E0A14 /* TonConnectAppRequest.swift in Sources */, BC2DF589C6623601C39EF8F4 /* LiquidityPoolSupplyPresenter.swift in Sources */, 87C1FC2909A8360DDBA625E5 /* LiquidityPoolSupplyInteractor.swift in Sources */, F31469BD18062A4A008FE39E /* LiquidityPoolSupplyViewController.swift in Sources */, @@ -19255,6 +19497,27 @@ 3152634A9E3FBF5E463CF56E /* ConfirmTransferViewController.swift in Sources */, 0A2BBD1BB87EBB75BBD919F7 /* ConfirmTransferViewLayout.swift in Sources */, 26F0F2A52C7EFD38CBC2F1C3 /* ConfirmTransferAssembly.swift in Sources */, + BCB9B3DF3D8104BC8456811B /* TonWebBridgeProtocols.swift in Sources */, + 57376A74C6310F1FA52FA28C /* TonWebBridgeRouter.swift in Sources */, + 36909529AF4B97AE71AD4C24 /* TonWebBridgePresenter.swift in Sources */, + 720633807C7746A254866395 /* TonWebBridgeInteractor.swift in Sources */, + AA69046E4B7838BE78859A24 /* TonWebBridgeViewController.swift in Sources */, + DBF246FDD6E70D1DC6529539 /* TonWebBridgeViewLayout.swift in Sources */, + 152915F53A2C88A15B2BA725 /* TonWebBridgeAssembly.swift in Sources */, + 5106A2E8BB43AF62D2BBF286 /* DappBrowserProtocols.swift in Sources */, + 8A388A315B0E4EF220EF3F5B /* DappBrowserRouter.swift in Sources */, + 8095003039EDD1072601BAA7 /* DappBrowserPresenter.swift in Sources */, + 91246793157F1B0FF2A1217F /* DappBrowserInteractor.swift in Sources */, + C593B432712EAD72251EC00B /* DappBrowserViewController.swift in Sources */, + 32BB821E16F9BF88523A6047 /* DappBrowserViewLayout.swift in Sources */, + 438F38672873F0B8BA950489 /* DappBrowserAssembly.swift in Sources */, + ED3514135CA429A516482F69 /* DappBrowserListProtocols.swift in Sources */, + 52F16C3E24F3982384B1082E /* DappBrowserListRouter.swift in Sources */, + D80CDA0DDAB54204CBF873D0 /* DappBrowserListPresenter.swift in Sources */, + E256770DDF3AF748A5057FD4 /* DappBrowserListInteractor.swift in Sources */, + 1A6E37652003721AB5044812 /* DappBrowserListViewController.swift in Sources */, + 3CDF2323ABDADEBC32F2AE4B /* DappBrowserListViewLayout.swift in Sources */, + 71DE4946BC2CE1DE0300BC16 /* DappBrowserListAssembly.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -19713,6 +19976,8 @@ baseConfigurationReference = 849013FA24A92A05008F705E /* fearless.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon$(ICON_SUFFIX)"; + CODE_SIGN_ENTITLEMENTS = fearless/fearless.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = YLWWUD25VZ; @@ -19727,8 +19992,9 @@ ); MARKETING_VERSION = 3.8.1; OTHER_SWIFT_FLAGS = "$(inherited)"; - PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless; + PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless.dev; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 1; }; @@ -19739,6 +20005,7 @@ baseConfigurationReference = 849013F924A92A05008F705E /* fearless.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon$(ICON_SUFFIX)"; + CODE_SIGN_ENTITLEMENTS = fearless/fearless.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; @@ -19753,7 +20020,7 @@ "$(FRAMEWORK_SEARCH_PATHS)", ); MARKETING_VERSION = 3.8.1; - PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless; + PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless.dev; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; @@ -19877,6 +20144,7 @@ baseConfigurationReference = 849013F824A92A05008F705E /* fearless.dev.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon$(ICON_SUFFIX)"; + CODE_SIGN_ENTITLEMENTS = fearless/fearless.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; @@ -19892,7 +20160,7 @@ ); MARKETING_VERSION = 3.8.1; OTHER_SWIFT_FLAGS = "$(inherited)"; - PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless; + PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless.dev; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; diff --git a/fearless/AppDelegate.swift b/fearless/AppDelegate.swift index 2b4f1bcb27..f6b8a6e086 100644 --- a/fearless/AppDelegate.swift +++ b/fearless/AppDelegate.swift @@ -30,4 +30,18 @@ class AppDelegate: UIResponder, UIApplicationDelegate { ) -> Bool { URLHandlingService.shared.handle(url: url) } + + func application( + _: UIApplication, + continue userActivity: NSUserActivity, + restorationHandler _: @escaping ([any UIUserActivityRestoring]?) -> Void + ) -> Bool { + guard + userActivity.activityType == NSUserActivityTypeBrowsingWeb, + let url = userActivity.webpageURL + else { + return false + } + return URLHandlingService.shared.handle(url: url) + } } diff --git a/fearless/ApplicationLayer/ServiceAssembly.swift b/fearless/ApplicationLayer/ServiceAssembly.swift index dc18546066..8c3b534712 100644 --- a/fearless/ApplicationLayer/ServiceAssembly.swift +++ b/fearless/ApplicationLayer/ServiceAssembly.swift @@ -5,6 +5,7 @@ import SSFStorageQueryKit import RobinHood import SSFUtils import SSFModels +import SSFNetwork final class ServiceAssembly { static let shared = ServiceAssembly() @@ -17,6 +18,7 @@ final class ServiceAssembly { lazy var keystore: KeystoreProtocol = Keychain() lazy var priceLocalSubscriber = PriceLocalStorageSubscriberImpl.shared lazy var eventCenter = EventCenter.shared + lazy var userDefaults = SettingsManager.shared private var _accountInfoRemoteServiceDefault: AccountInfoRemoteService? func accountInfoRemoteServiceDefault() -> AccountInfoRemoteService { @@ -233,4 +235,93 @@ final class ServiceAssembly { _tonJettonInjector = injector return injector } + + private var _tonConnectService: TonConnectService? + func tonConnectService() -> TonConnectService { + if let _tonConnectService { + return _tonConnectService + } + + let networkWorker = SSFNetwork.NetworkWorkerImpl() + let eventCenter = TonConnectEventsCenter( + chainRegistry: chainRegistry, + lastEventStore: SettingsManager.shared, + logger: logger + ) + let service = TonConnectServiceImpl( + chainRegistry: chainRegistry, + tonService: tonSendService(), + networkWorker: networkWorker, + messageBuilder: TonWebBridgeMessagesBuilderImpl(), + appRepository: tonConnectAppAsyncRepository(), + eventCenter: eventCenter, + logger: logger + ) + _tonConnectService = service + return service + } + + private var _tonDappAsyncRepository: AsyncAnyRepository? + func tonDappAsyncRepository() -> AsyncAnyRepository { + if let _tonDappAsyncRepository { + return _tonDappAsyncRepository + } + + let mapper: CodableCoreDataMapper = + CodableCoreDataMapper(entityIdentifierFieldName: #keyPath(CDTonDapp.identifier)) + let repo = substrateRepositoryFacade.createAsyncRepository( + filter: nil, + sortDescriptors: [], + mapper: AnyCoreDataMapper(mapper) + ) + let anyRepo = AsyncAnyRepository(repo) + _tonDappAsyncRepository = anyRepo + return anyRepo + } + + private var _tonConnectAppAsyncRepository: AsyncAnyRepository? + func tonConnectAppAsyncRepository() -> AsyncAnyRepository { + if let _tonConnectAppAsyncRepository { + return _tonConnectAppAsyncRepository + } + + let mapper: CodableCoreDataMapper = CodableCoreDataMapper() + let repo = substrateRepositoryFacade.createAsyncRepository( + filter: nil, + sortDescriptors: [], + mapper: AnyCoreDataMapper(mapper) + ) + let anyRepo = AsyncAnyRepository(repo) + _tonConnectAppAsyncRepository = anyRepo + return anyRepo + } + + private var _tonSendService: TonSendService? + func tonSendService() -> TonSendService { + if let _tonSendService { + return _tonSendService + } + + let service = TonSendServiceDefault( + chainRegistry: chainRegistry + ) + _tonSendService = service + return service + } + + func tonBocFactory( + metaId: String, + accountResponse: ChainAccountResponse + ) throws -> BocFactory { + let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil + let tag: String = KeystoreTagV2.secretKeyTag( + for: .ton, + metaId: metaId, + accountId: accountId + ) + + let secretKey = try keystore.fetchKey(for: tag) + let factory = BocFactoryImpl(secretKey: secretKey) + return factory + } } diff --git a/fearless/ApplicationLayer/Services/Models/TonConnectConfiguration.swift b/fearless/ApplicationLayer/Services/Models/TonConnectConfiguration.swift deleted file mode 100644 index 704afa90e8..0000000000 --- a/fearless/ApplicationLayer/Services/Models/TonConnectConfiguration.swift +++ /dev/null @@ -1,9 +0,0 @@ -// -// TonConnectConfiguration.swift -// fearless -// -// Created by Soramitsu on 07.08.2024. -// Copyright © 2024 Soramitsu. All rights reserved. -// - -import Foundation diff --git a/fearless/ApplicationLayer/Services/Models/TonConnectError.swift b/fearless/ApplicationLayer/Services/Models/TonConnectError.swift new file mode 100644 index 0000000000..f180be3784 --- /dev/null +++ b/fearless/ApplicationLayer/Services/Models/TonConnectError.swift @@ -0,0 +1,6 @@ +import Foundation + +struct TonConnectError: Swift.Error, Decodable { + let statusCode: Int + let message: String +} diff --git a/fearless/ApplicationLayer/Services/Models/TonConnectEvent.swift b/fearless/ApplicationLayer/Services/Models/TonConnectEvent.swift new file mode 100644 index 0000000000..0a672de0ce --- /dev/null +++ b/fearless/ApplicationLayer/Services/Models/TonConnectEvent.swift @@ -0,0 +1,4 @@ +struct TonConnectEvent: Decodable { + let from: String + let message: String +} diff --git a/fearless/ApplicationLayer/Services/Models/TonConnectManifest.swift b/fearless/ApplicationLayer/Services/Models/TonConnectManifest.swift index ae17649327..66d798e42d 100644 --- a/fearless/ApplicationLayer/Services/Models/TonConnectManifest.swift +++ b/fearless/ApplicationLayer/Services/Models/TonConnectManifest.swift @@ -1,13 +1,13 @@ import Foundation -public struct TonConnectManifest: Codable, Equatable { - public let url: URL - public let name: String - public let iconUrl: URL? - public let termsOfUseUrl: URL? - public let privacyPolicyUrl: URL? - - public var host: String { - url.host ?? "" - } +struct TonConnectManifest: Codable, Equatable { + let url: URL + let name: String + let iconUrl: URL? + let termsOfUseUrl: URL? + let privacyPolicyUrl: URL? + + var host: String { + url.host ?? "" + } } diff --git a/fearless/ApplicationLayer/Services/Models/TonConnectParameters.swift b/fearless/ApplicationLayer/Services/Models/TonConnectParameters.swift index 8ca1bc01a4..40f3f7e9f1 100644 --- a/fearless/ApplicationLayer/Services/Models/TonConnectParameters.swift +++ b/fearless/ApplicationLayer/Services/Models/TonConnectParameters.swift @@ -1,17 +1,17 @@ import Foundation -public struct TonConnectParameters { - public enum Version: String { - case v2 = "2" - } - - public let version: Version - public let clientId: String - public let requestPayload: TonConnectRequestPayload - - public init(version: Version, clientId: String, requestPayload: TonConnectRequestPayload) { - self.version = version - self.clientId = clientId - self.requestPayload = requestPayload - } +struct TonConnectParameters { + enum Version: String { + case v2 = "2" + } + + let version: Version + let clientId: String + let requestPayload: TonConnectRequestPayload + + init(version: Version, clientId: String, requestPayload: TonConnectRequestPayload) { + self.version = version + self.clientId = clientId + self.requestPayload = requestPayload + } } diff --git a/fearless/ApplicationLayer/Services/Models/TonConnectRequestPayload.swift b/fearless/ApplicationLayer/Services/Models/TonConnectRequestPayload.swift new file mode 100644 index 0000000000..66bf826053 --- /dev/null +++ b/fearless/ApplicationLayer/Services/Models/TonConnectRequestPayload.swift @@ -0,0 +1,36 @@ +import Foundation + +struct TonConnectRequestPayload: Decodable { + enum Item: Decodable { + case tonAddress + case tonProof(payload: String) + case unknown + + enum CodingKeys: CodingKey { + case name + case payload + } + + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + let name = try container.decode(String.self, forKey: .name) + switch name { + case "ton_addr": + self = .tonAddress + case "ton_proof": + let payload = try container.decode(String.self, forKey: .payload) + self = .tonProof(payload: payload) + default: + self = .unknown + } + } + } + + let manifestUrl: URL + let items: [Item] + + init(manifestUrl: URL, items: [Item]) { + self.manifestUrl = manifestUrl + self.items = items + } +} diff --git a/fearless/ApplicationLayer/Services/TonConnectEventsCenter.swift b/fearless/ApplicationLayer/Services/TonConnectEventsCenter.swift new file mode 100644 index 0000000000..394aed01ff --- /dev/null +++ b/fearless/ApplicationLayer/Services/TonConnectEventsCenter.swift @@ -0,0 +1,133 @@ +import Foundation +import SoraKeystore +import SSFModels +import TonConnectAPI +import EventSource +import TonSwift + +protocol TonConnectEventsCenterDelegate: AnyObject { + func didReceive(event: TonConnectEventsCenter.Event) async +} + +actor TonConnectEventsCenter { + private enum Constant { + static let lastEventKey = "ton.connect.last.event.key" + } + enum Event { + case request( + request: TonConnect.AppRequest, + walletId: MetaAccountId, + app: TonConnectApp + ) + } + + private weak var delegate: TonConnectEventsCenterDelegate? + private let chainRegistry: ChainRegistryProtocol + private let lastEventStore: SettingsManagerProtocol + private let logger: LoggerProtocol + + private var observableApps: [TonConnectApp] = [] + private var task: Task? + private lazy var jsonDecoder = JSONDecoder() + + init( + chainRegistry: ChainRegistryProtocol, + lastEventStore: SettingsManagerProtocol, + logger: LoggerProtocol + ) { + self.chainRegistry = chainRegistry + self.lastEventStore = lastEventStore + self.logger = logger + } + + func set(delegate: TonConnectEventsCenterDelegate) { + self.delegate = delegate + } + + func stop() { + task?.cancel() + task = nil + } + + func start(with apps: [TonConnectApp]) throws { + observableApps = apps + let apiClient = try chainRegistry.getTonApiAssembly().tonConnectAPIClient() + task?.cancel() + + let task = Task { + let ids = apps + .map { $0.keyPair.publicKey.hexString } + .compactMap { $0 } + .joined(separator: ",") + let lastEventId = lastEventStore.value(of: String.self, for: Constant.lastEventKey) + + let errorParser = EventSourceDecodableErrorParser() + let stream = try await EventSource.eventSource({ + let response = try await apiClient.events( + query: .init( + client_id: [ids], + last_event_id: lastEventId + ) + ) + return try response.ok.body.text_event_hyphen_stream + }, errorParser: errorParser) + + for try await events in stream { + await handleEventSourceEvents(events) + } + + guard !Task.isCancelled else { return } + try start(with: apps) + } + self.task = task + } + + // MARK: - Private methods + + private func handleEventSourceEvents(_ events: [EventSource.Event]) async { + guard + let event = events.last(where: { $0.event == "message" }), + let data = event.data?.data(using: .utf8), + let tonConnectEvent = try? jsonDecoder.decode(TonConnectEvent.self, from: data) + else { + return + } + + lastEventStore.set(value: event.id, for: Constant.lastEventKey) + await handleEvent(tonConnectEvent) + } + + private func handleEvent(_ tonConnectEvent: TonConnectEvent) async { + guard let app = observableApps.first(where: { $0.clientId == tonConnectEvent.from }) else { + return + } + + do { + let sessionCrypto = try TonConnectSessionCrypto(privateKey: app.keyPair.privateKey) + guard + let senderPublicKey = Data(tonHex: app.clientId), + let message = Data(base64Encoded: tonConnectEvent.message) + else { + return + } + let decryptedMessage = try sessionCrypto.decrypt( + message: message, + senderPublicKey: senderPublicKey + ) + let request = try jsonDecoder.decode( + TonConnect.AppRequest.self, + from: decryptedMessage + ) + + await delegate?.didReceive( + event: .request( + request: request, + walletId: app.walletId, + app: app + ) + ) + } catch { + logger.customError(error) + } + } +} diff --git a/fearless/ApplicationLayer/Services/TonConnectService.swift b/fearless/ApplicationLayer/Services/TonConnectService.swift new file mode 100644 index 0000000000..df4bbf0d8b --- /dev/null +++ b/fearless/ApplicationLayer/Services/TonConnectService.swift @@ -0,0 +1,392 @@ +import Foundation +import SSFTransferService +import SSFNetwork +import SSFModels +import TonConnectAPI +import RobinHood +import TonSwift + +enum TonConnectServiceError: Swift.Error { + case incorrectUrl + case incorrectClientId +} + +protocol TonConnectService: ApplicationServiceProtocol { + func set(listener: TonConnectServiceDelegate) async + func establishConnection(with uri: String) async throws + func fetchManifest(with url: URL) async throws -> TonConnectManifest + + func confirmConnectionRequest( + wallet: MetaAccountModel, + tonChainModel: ChainModel, + params: TonConnectParameters, + manifest: TonConnectManifest + ) async throws + + func cancelRequest( + appRequest: TonConnect.AppRequest, + app: TonConnectApp + ) async throws + + func approveTonConnect( + wallet: MetaAccountModel, + parameter: SendTransactionParam + ) async throws -> String + + func confirmRequest( + wallet: MetaAccountModel, + appRequest: TonConnect.AppRequest, + app: TonConnectApp, + parameter: SendTransactionParam + ) async throws + + func getConnectedApp(for wallet: MetaAccountModel) async throws -> [TonConnectApp] + func saveConnected(app: TonConnectApp) async + func saveDisconnected(app: TonConnectApp) async +} + +protocol TonConnectServiceDelegate: AnyObject { + func suggestConnect( + manifest: TonConnectManifest, + requestPayload: TonConnectParameters, + invocationId: String?, + delegate: WalletConnectProposalModuleOutput? + ) + func send( + request: TonConnect.AppRequest, + invocationId: String, + wallet: MetaAccountModel, + dapp: TonDapp, + delegate: WalletConnectSessionModuleOutput? + ) + func send( + request: TonConnect.AppRequest, + walletId: MetaAccountId, + app: TonConnectApp + ) +} + +actor TonConnectServiceImpl: TonConnectService { + private let chainRegistry: ChainRegistryProtocol + private let tonService: TonSendService + private let networkWorker: SSFNetwork.NetworkWorker + private let messageBuilder: TonWebBridgeMessagesBuilder + private let appRepository: AsyncAnyRepository + private let eventCenter: TonConnectEventsCenter + private let logger: LoggerProtocol + + private var listeners: [WeakWrapper] = [] + + init( + chainRegistry: ChainRegistryProtocol, + tonService: TonSendService, + networkWorker: SSFNetwork.NetworkWorker, + messageBuilder: TonWebBridgeMessagesBuilder, + appRepository: AsyncAnyRepository, + eventCenter: TonConnectEventsCenter, + logger: LoggerProtocol + ) { + self.chainRegistry = chainRegistry + self.tonService = tonService + self.networkWorker = networkWorker + self.messageBuilder = messageBuilder + self.appRepository = appRepository + self.eventCenter = eventCenter + self.logger = logger + } + + // MARK: - TonConnectService + + func set(listener: TonConnectServiceDelegate) async { + let weakListener = WeakWrapper(target: listener) + listeners.append(weakListener) + } + + func establishConnection(with uri: String) async throws { + let config = try getConfig(uri) + let manifest = try await fetchManifest(with: config.requestPayload.manifestUrl) + + listeners.forEach { + ($0.target as? TonConnectServiceDelegate)?.suggestConnect( + manifest: manifest, + requestPayload: config, + invocationId: nil, + delegate: nil + ) + } + } + + func fetchManifest(with url: URL) async throws -> TonConnectManifest { + let request = SSFNetwork.RequestConfig( + baseURL: url, + method: .get, + endpoint: nil, + headers: nil, + body: nil + ) + let manifest: TonConnectManifest = try await networkWorker.performRequest(with: request) + return manifest + } + + func confirmConnectionRequest( + wallet: MetaAccountModel, + tonChainModel: ChainModel, + params: TonConnectParameters, + manifest: TonConnectManifest + ) async throws { + let connectSeccussResponseEvent: TonConnect.ConnectEventSuccess = try messageBuilder.getConnectEventSuccesResponse( + requestPayloadItems: params.requestPayload.items, + wallet: wallet, + manifest: manifest, + tonChainModel: tonChainModel + ) + + let sessionCrypto = try TonConnectSessionCrypto() + let encrypted = try messageBuilder.encryptSuccessResponse( + successResponse: connectSeccussResponseEvent, + clientId: params.clientId, + sessionCrypto: sessionCrypto + ) + + try await sendMessageConfirmConnectionRequest( + body: encrypted, + sessionCrypto: sessionCrypto, + parameters: params + ) + + await saveToStore( + wallet: wallet, + clientId: params.clientId, + appUrl: manifest.url, + sessionCrypto: sessionCrypto + ) + await updateEventCenter() + } + + func cancelRequest( + appRequest: TonConnect.AppRequest, + app: TonConnectApp + ) async throws { + let apiClient = try chainRegistry.getTonApiAssembly().tonConnectAPIClient() + let sessionCrypto = try TonConnectSessionCrypto(privateKey: app.keyPair.privateKey) + let body = try messageBuilder.buildSendTransactionResponseError( + sessionCrypto: sessionCrypto, + errorCode: .userDeclinedTransaction, + id: appRequest.id, + clientId: app.clientId + ) + _ = try await apiClient.message( + query: .init( + client_id: sessionCrypto.sessionId, + to: app.clientId, + ttl: 300 + ), + body: .plainText(.init(stringLiteral: body)) + ) + } + + func approveTonConnect( + wallet: MetaAccountModel, + parameter: SendTransactionParam + ) async throws -> String { + guard + let sender = wallet.tonAddress, + let walletContract = wallet.tonWalletContract() + else { + throw ConvenienceError(error: "Missing Ton params") + } + async let seqno = try tonService.loadSeqno(address: sender.toRaw()) + async let timeout = tonService.getTimeoutSafely(TTL: 5 * 60) + + let bocFactory = try createBocFactory(for: wallet) + let boc = try await bocFactory.createTonConnectTransferBoc( + sender: sender, + contract: walletContract, + parameter: parameter, + seqno: seqno, + timeout: timeout + ) + + try await tonService.sendTransaction(boc: boc) + return boc + } + + func confirmRequest( + wallet: MetaAccountModel, + appRequest: TonConnect.AppRequest, + app: TonConnectApp, + parameter: SendTransactionParam + ) async throws { + guard + let sender = wallet.tonAddress, + let walletContract = wallet.tonWalletContract() + else { + throw ConvenienceError(error: "Missing Ton params") + } + let sessionCrypto = try TonConnectSessionCrypto(privateKey: app.keyPair.privateKey) + async let seqno = try tonService.loadSeqno(address: sender.toRaw()) + async let timeout = tonService.getTimeoutSafely(TTL: 5 * 60) + + let bocFactory = try createBocFactory(for: wallet) + let boc = try await bocFactory.createTonConnectTransferBoc( + sender: sender, + contract: walletContract, + parameter: parameter, + seqno: seqno, + timeout: timeout + ) + try await tonService.sendTransaction(boc: boc) + + let body = try messageBuilder.buildSendTransactionResponseSuccess( + sessionCrypto: sessionCrypto, + boc: boc, + id: appRequest.id, + clientId: app.clientId + ) + + let apiClient = try chainRegistry.getTonApiAssembly().tonConnectAPIClient() + _ = try await apiClient.message( + query: .init( + client_id: sessionCrypto.sessionId, + to: app.clientId, + ttl: 300 + ), + body: .plainText(.init(stringLiteral: body)) + ) + } + + func getConnectedApp(for wallet: MetaAccountModel) async throws -> [TonConnectApp] { + let apps = try await appRepository.fetchAll() + let walletApps = apps.filter { $0.walletId == wallet.metaId } + return walletApps + } + + func saveConnected(app: TonConnectApp) async { + await appRepository.save(models: [app]) + await updateEventCenter() + } + + func saveDisconnected(app: TonConnectApp) async { + await appRepository.remove(ids: [app.identifier]) + await updateEventCenter() + } + + // MARK: - ApplicationServiceProtocol + + nonisolated func setup() { + Task { + await eventCenter.set(delegate: self) + let apps = try await appRepository.fetchAll() + try await eventCenter.start(with: apps) + } + } + + nonisolated func throttle() { + Task { + await eventCenter.stop() + } + } + + // MARK: - Private methods + + private func updateEventCenter() async { + do { + let apps = try await appRepository.fetchAll() + try await eventCenter.start(with: apps) + } catch { + logger.customError(error) + } + } + + private func saveToStore( + wallet: MetaAccountModel, + clientId: String, + appUrl: URL, + sessionCrypto: TonConnectSessionCrypto + ) async { + let app = TonConnectApp( + walletId: wallet.metaId, + clientId: clientId, + appUrl: appUrl, + publicKey: sessionCrypto.keyPair.publicKey.data, + privateKey: sessionCrypto.keyPair.privateKey.data + ) + await appRepository.save(models: [app]) + } + + private func sendMessageConfirmConnectionRequest( + body: String, + sessionCrypto: TonConnectSessionCrypto, + parameters: TonConnectParameters + ) async throws { + let apiClient = try chainRegistry.getTonApiAssembly().tonConnectAPIClient() + let response = try await apiClient.message( + query: .init( + client_id: sessionCrypto.sessionId, + to: parameters.clientId, + ttl: 300 + ), + body: .plainText(.init(stringLiteral: body)) + ) + + _ = try response.ok.body.json + } + + private func getConfig(_ deeplink: String) throws -> TonConnectParameters { + guard + let url = URL(string: deeplink), + let components = URLComponents(url: url, resolvingAgainstBaseURL: true), + components.scheme == "tc", + let queryItems = components.queryItems, + let versionValue = queryItems.first(where: { $0.name == "v" })?.value, + let version = TonConnectParameters.Version(rawValue: versionValue), + let clientId = queryItems.first(where: { $0.name == "id" })?.value, + let requestPayloadValue = queryItems.first(where: { $0.name == "r" })?.value, + let requestPayloadData = requestPayloadValue.data(using: .utf8), + let requestPayload = try? JSONDecoder().decode(TonConnectRequestPayload.self, from: requestPayloadData) + else { + throw TonConnectServiceError.incorrectUrl + } + + return TonConnectParameters( + version: version, + clientId: clientId, + requestPayload: requestPayload + ) + } + + private func createBocFactory(for wallet: MetaAccountModel) throws -> BocFactory { + let request = ChainAccountRequest( + chainId: "-239", + addressPrefix: 0, + ecosystem: .ton, + accountId: nil + ) + guard let accountResponse = wallet.fetch(for: request) else { + throw ConvenienceError(error: "Account response fetch error") + } + + let bocFactory = try ServiceAssembly.shared.tonBocFactory( + metaId: wallet.metaId, + accountResponse: accountResponse + ) + return bocFactory + } +} + +// MARK: - TonConnectEventsCenterDelegate + +extension TonConnectServiceImpl: TonConnectEventsCenterDelegate { + func didReceive(event: TonConnectEventsCenter.Event) { + switch event { + case let .request(request, walletId, app): + listeners.forEach { + ($0.target as? TonConnectServiceDelegate)?.send( + request: request, + walletId: walletId, + app: app + ) + } + } + } +} diff --git a/fearless/ApplicationLayer/Services/TonConnectSessionCrypto.swift b/fearless/ApplicationLayer/Services/TonConnectSessionCrypto.swift new file mode 100644 index 0000000000..9ded3fd405 --- /dev/null +++ b/fearless/ApplicationLayer/Services/TonConnectSessionCrypto.swift @@ -0,0 +1,62 @@ +import Foundation +import TweetNacl +import TonSwift + +struct TonConnectSessionCrypto { + private enum Constants { + static let nonceLength = 24 + } + + let sessionId: String + let keyPair: KeyPair + + init() throws { + let keyPair = try TweetNacl.NaclBox.keyPair() + self.keyPair = KeyPair( + publicKey: .init(data: keyPair.publicKey), + privateKey: .init(data: keyPair.secretKey) + ) + sessionId = keyPair.publicKey.hexString() + } + + init(privateKey: PrivateKey) throws { + let keyPair = try TweetNacl.NaclBox.keyPair(fromSecretKey: privateKey.data) + self.keyPair = KeyPair( + publicKey: .init(data: keyPair.publicKey), + privateKey: .init(data: keyPair.secretKey) + ) + sessionId = keyPair.publicKey.hexString() + } + + func encrypt(message: Data, receiverPublicKey: Data) throws -> Data { + let nonce = try createNonce() + let encrypted = try TweetNacl.NaclBox.box( + message: message, + nonce: nonce, + publicKey: receiverPublicKey, + secretKey: keyPair.privateKey.data + ) + return nonce + encrypted + } + + func decrypt(message: Data, senderPublicKey: Data) throws -> Data { + guard message.count >= Constants.nonceLength else { + return Data() + } + let nonce = message[0 ..< Constants.nonceLength] + let internalMessage = message[Constants.nonceLength ..< message.count] + let decrypted = try TweetNacl.NaclBox.open( + message: internalMessage, + nonce: nonce, + publicKey: senderPublicKey, + secretKey: keyPair.privateKey.data + ) + return decrypted + } +} + +private extension TonConnectSessionCrypto { + func createNonce() throws -> Data { + try TweetNacl.NaclUtil.secureRandomData(count: Constants.nonceLength) + } +} diff --git a/fearless/Assets.xcassets/iconBrowser.imageset/Contents.json b/fearless/Assets.xcassets/iconBrowser.imageset/Contents.json new file mode 100644 index 0000000000..8938d9143b --- /dev/null +++ b/fearless/Assets.xcassets/iconBrowser.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "iconBrowser.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/fearless/Assets.xcassets/iconBrowser.imageset/iconBrowser.pdf b/fearless/Assets.xcassets/iconBrowser.imageset/iconBrowser.pdf new file mode 100644 index 0000000000000000000000000000000000000000..58c576e7351c155ed0ad871e7dac6a27cc7f5c80 GIT binary patch literal 1639 zcmZuyOK%e~5Wf3Y%%xI$sMq7SrK%E5DMElKDYuHlvT@s>W*4$sRQUCbcN2S~;6pU~ zjpv)ECnvYpH|NM5V+aDe?>`v8#RXhmve>TDCzEr$`WV~C;RzIh%XF(Bwz1x@>N@^j zH*xvy3KnE56v~%mH6gfGhI)kJ*k|3xShD)K1!Wo$Bi=LBC+fe#aNE(*!WsWRlRk@!b z%H){0gp@f7R7e^&Lo-X^n`!@(ZNsPvjvGZ|pa3mbICh%GNOL`98o1HQ8HDEq%3yr3 z)K`htNC^Z9rL^a3j?WQ0@prJ@{TV>N!8?9xUw=ut<9P#b*rZ18dnAmX^Zq#qZZc+62?u2qEO9p)*R$qR#c#jA9 CompoundOperationWrapper<[DappCategory]?> { + if Self.fetchLocalData { + return localOperation() + } else { + return remoteOperation() + } + } + + // MARK: - Private methods + + private func remoteOperation() -> CompoundOperationWrapper<[DappCategory]?> { + let requestFactory = BlockNetworkRequestFactory { + var request = URLRequest(url: ApplicationConfig.shared.dappSourceUrl) + request.httpMethod = HttpMethod.get.rawValue + return request + } + + let resultFactory = AnyNetworkResultFactory<[DappCategory]?> { data, response, error in + do { + if let data = data { + let response = try JSONDecoder().decode( + [DappCategory].self, + from: data + ) + + return .success(response) + } else if let error = error { + return .failure(error) + } else { + return .failure(ConvenienceError(error: "wrong data")) + } + } catch { + return .failure(error) + } + } + + let operation = NetworkOperation( + requestFactory: requestFactory, + resultFactory: resultFactory + ) + + return CompoundOperationWrapper( + targetOperation: operation, + dependencies: operation.dependencies + ) + } + + private func localOperation() -> CompoundOperationWrapper<[DappCategory]?> { + let target = ClosureOperation { + guard let chainsUrl = Bundle.main.url(forResource: "dapps", withExtension: "json") else { + throw ChainSyncServiceError.missingLocalFile + } + + let data = try Data(contentsOf: chainsUrl) + let dapps = try JSONDecoder().decode([DappCategory]?.self, from: data) + return dapps + } + return CompoundOperationWrapper( + targetOperation: target, + dependencies: [] + ) + } +} diff --git a/fearless/Common/Extension/Storage/CDTonConnectedApp+CoreDataDecodable.swift b/fearless/Common/Extension/Storage/CDTonConnectedApp+CoreDataDecodable.swift new file mode 100644 index 0000000000..f69f4a58dd --- /dev/null +++ b/fearless/Common/Extension/Storage/CDTonConnectedApp+CoreDataDecodable.swift @@ -0,0 +1,26 @@ +import Foundation +import RobinHood +import CoreData + +extension CDTonConnectedApp: CoreDataCodable { + public func populate(from decoder: any Decoder, using _: NSManagedObjectContext) throws { + let app = try TonConnectApp(from: decoder) + identifier = app.identifier + + walletId = app.walletId + clientId = app.clientId + appUrl = app.appUrl + publicKey = app.publicKey + privateKey = app.privateKey + } + + public func encode(to encoder: any Encoder) throws { + var container = encoder.container(keyedBy: TonConnectApp.CodingKeys.self) + + try container.encode(walletId, forKey: .walletId) + try container.encode(clientId, forKey: .clientId) + try container.encode(appUrl, forKey: .appUrl) + try container.encode(publicKey, forKey: .publicKey) + try container.encode(privateKey, forKey: .privateKey) + } +} diff --git a/fearless/Common/Extension/Storage/CDTonDapp+CoreDataDecodable.swift b/fearless/Common/Extension/Storage/CDTonDapp+CoreDataDecodable.swift new file mode 100644 index 0000000000..1e1f8e57e3 --- /dev/null +++ b/fearless/Common/Extension/Storage/CDTonDapp+CoreDataDecodable.swift @@ -0,0 +1,30 @@ +import Foundation +import RobinHood +import CoreData + +extension CDTonDapp: CoreDataCodable { + public func populate(from decoder: Decoder, using _: NSManagedObjectContext) throws { + let container = try decoder.container(keyedBy: TonDapp.CodingKeys.self) + + identifier = try container.decode(String.self, forKey: .identifier) + chains = try container.decode([String].self, forKey: .chains) as? NSArray + name = try container.decode(String.self, forKey: .name) + appDescription = try container.decode(String?.self, forKey: .description) + icon = try container.decode(URL?.self, forKey: .icon) + poster = try container.decode(URL?.self, forKey: .poster) + url = try container.decode(URL.self, forKey: .url) + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: TonDapp.CodingKeys.self) + + let chains = chains as? [String] + try container.encode(chains, forKey: .chains) + try container.encode(name, forKey: .name) + try container.encodeIfPresent(appDescription, forKey: .description) + try container.encodeIfPresent(icon, forKey: .icon) + try container.encodeIfPresent(poster, forKey: .poster) + try container.encode(url, forKey: .url) + try container.encode(identifier, forKey: .identifier) + } +} diff --git a/fearless/Common/Model/ChainAsset.swift b/fearless/Common/Model/ChainAsset.swift index 9363e91175..8ec9ceec02 100644 --- a/fearless/Common/Model/ChainAsset.swift +++ b/fearless/Common/Model/ChainAsset.swift @@ -7,30 +7,38 @@ extension ChainAsset { var storagePath: StorageCodingPath { var storagePath: StorageCodingPath - switch chainAssetType.substrateAssetType { - case .normal, .equilibrium, .none: - storagePath = StorageCodingPath.account - case - .ormlChain, - .ormlAsset, - .foreignAsset, - .stableAssetPoolToken, - .liquidCrowdloan, - .vToken, - .vsToken, - .stable, - .assetId, - .token2, - .xcm: - storagePath = StorageCodingPath.tokens - case .assets: - storagePath = StorageCodingPath.assetsAccount - case .soraAsset: - if isUtility { + + switch chainAssetType { + case .substrate(substrateType: let substrateType): + switch substrateType { + case .normal, .equilibrium: storagePath = StorageCodingPath.account - } else { + case + .ormlChain, + .ormlAsset, + .foreignAsset, + .stableAssetPoolToken, + .liquidCrowdloan, + .vToken, + .vsToken, + .stable, + .assetId, + .token2, + .xcm: storagePath = StorageCodingPath.tokens + case .assets: + storagePath = StorageCodingPath.assetsAccount + case .soraAsset: + if isUtility { + storagePath = StorageCodingPath.account + } else { + storagePath = StorageCodingPath.tokens + } } + case .ethereum(ethereumType: let ethereumType): + storagePath = .account + case .ton(tonType: let tonType): + storagePath = .tokens } return storagePath diff --git a/fearless/Common/Services/ChainRegistry/ChainRegistry.swift b/fearless/Common/Services/ChainRegistry/ChainRegistry.swift index de53e82f95..88e9b9a78b 100644 --- a/fearless/Common/Services/ChainRegistry/ChainRegistry.swift +++ b/fearless/Common/Services/ChainRegistry/ChainRegistry.swift @@ -265,7 +265,7 @@ final class ChainRegistry { else { return } - let apiAssembly = TonAPIAssembly(tonAPIURL: node.url) + let apiAssembly = TonAPIAssembly(tonAPIURL: node.url, token: "AHCGOAHBPVILMQIAAAADDH734BNIZUMGZNBT6KZ3WZENQJOHZRLQVXQOD3UTUUHCDC4B5RI") tonApiAssembly = apiAssembly } diff --git a/fearless/Common/Services/ChainRegistry/ChainSyncService.swift b/fearless/Common/Services/ChainRegistry/ChainSyncService.swift index 9f85139848..e78294763e 100644 --- a/fearless/Common/Services/ChainRegistry/ChainSyncService.swift +++ b/fearless/Common/Services/ChainRegistry/ChainSyncService.swift @@ -14,7 +14,7 @@ enum ChainSyncServiceError: Error { } final class ChainSyncService { - static let fetchLocalData = false + static let fetchLocalData = true struct SyncChanges { let newOrUpdatedItems: [ChainModel] diff --git a/fearless/Common/Services/ChainRegistry/ConnectionPool/TonAPIAssembly.swift b/fearless/Common/Services/ChainRegistry/ConnectionPool/TonAPIAssembly.swift deleted file mode 100644 index 5f90b492f6..0000000000 --- a/fearless/Common/Services/ChainRegistry/ConnectionPool/TonAPIAssembly.swift +++ /dev/null @@ -1,40 +0,0 @@ -// import Foundation -// import StreamURLSessionTransport -// import OpenAPIRuntime -// import HTTPTypes -// import TonAPI -// -// final class TonAPIAssembly { -// let tonAPIURL: URL -// -// init(tonAPIURL: URL) { -// self.tonAPIURL = tonAPIURL -// } -// -// private var _tonAPIClient: TonAPI.Client? -// func tonAPIClient() -> TonAPI.Client { -// if let tonAPIClient = _tonAPIClient { -// return tonAPIClient -// } -// let tonAPIClient = TonAPI.Client( -// serverURL: tonAPIURL, -// transport: transport, -// middlewares: [] -// ) -// _tonAPIClient = tonAPIClient -// return tonAPIClient -// } -// -// // MARK: - Private -// -// private lazy var transport: StreamURLSessionTransport = { -// StreamURLSessionTransport(urlSessionConfiguration: urlSessionConfiguration) -// }() -// -// private var urlSessionConfiguration: URLSessionConfiguration { -// let configuration = URLSessionConfiguration.default -// configuration.timeoutIntervalForRequest = 60 -// configuration.timeoutIntervalForResource = 60 -// return configuration -// } -// } diff --git a/fearless/Common/Services/ServiceCoordinator.swift b/fearless/Common/Services/ServiceCoordinator.swift index 885a213525..43caa885a2 100644 --- a/fearless/Common/Services/ServiceCoordinator.swift +++ b/fearless/Common/Services/ServiceCoordinator.swift @@ -20,6 +20,7 @@ final class ServiceCoordinator { private let polkaswapSettingsService: PolkaswapSettingsSyncServiceProtocol private let walletConnect: WalletConnectService private let walletAssetsObserver: WalletAssetsObserver + private let tonConnectService: TonConnectService init( walletSettings: SelectedWalletSettings, @@ -28,7 +29,8 @@ final class ServiceCoordinator { scamSyncService: ScamSyncServiceProtocol, polkaswapSettingsService: PolkaswapSettingsSyncServiceProtocol, walletConnect: WalletConnectService, - walletAssetsObserver: WalletAssetsObserver + walletAssetsObserver: WalletAssetsObserver, + tonConnectService: TonConnectService ) { self.walletSettings = walletSettings self.accountInfoService = accountInfoService @@ -37,6 +39,7 @@ final class ServiceCoordinator { self.polkaswapSettingsService = polkaswapSettingsService self.walletConnect = walletConnect self.walletAssetsObserver = walletAssetsObserver + self.tonConnectService = tonConnectService } } @@ -58,6 +61,7 @@ extension ServiceCoordinator: ServiceCoordinatorProtocol { polkaswapSettingsService.syncUp() walletConnect.setup() walletAssetsObserver.setup() + tonConnectService.setup() } func throttle() { @@ -65,6 +69,7 @@ extension ServiceCoordinator: ServiceCoordinatorProtocol { accountInfoService.throttle() walletConnect.throttle() walletAssetsObserver.throttle() + tonConnectService.throttle() } } @@ -89,12 +94,6 @@ extension ServiceCoordinator { logger: logger ) - let ethereumBalanceRepositoryWrapper = BalanceRepositoryCacheWrapper( - logger: logger, - repository: repository, - operationManager: OperationManagerFacade.sharedManager - ) - let accountInfoService = AccountInfoUpdatingService( selectedAccount: selectedMetaAccount, chainRegistry: chainRegistry, @@ -120,32 +119,8 @@ extension ServiceCoordinator { scamSyncService: scamSyncService, polkaswapSettingsService: polkaswapSettingsService, walletConnect: walletConnect, - walletAssetsObserver: walletAssetsObserver - ) - } - - private static func createPackageChainRegistry() -> SSFChainRegistry.ChainRegistryProtocol { - let chainSyncService = SSFChainRegistry.ChainSyncService( - chainsUrl: ApplicationConfig.shared.chainsSourceUrl, - operationQueue: OperationQueue(), - dataFetchFactory: SSFNetwork.NetworkOperationFactory() - ) - - let chainsTypesSyncService = SSFChainRegistry.ChainsTypesSyncService( - url: ApplicationConfig.shared.chainTypesSourceUrl, - dataOperationFactory: SSFNetwork.NetworkOperationFactory(), - operationQueue: OperationQueue() - ) - - let runtimeSyncService = SSFChainRegistry.RuntimeSyncService(dataOperationFactory: NetworkOperationFactory()) - - let chainRegistry = SSFChainRegistry.ChainRegistry( - runtimeProviderPool: SSFChainRegistry.RuntimeProviderPool(), - connectionPool: SSFChainRegistry.ConnectionPool(), - chainSyncService: chainSyncService, - chainsTypesSyncService: chainsTypesSyncService, - runtimeSyncService: runtimeSyncService + walletAssetsObserver: walletAssetsObserver, + tonConnectService: ServiceAssembly.shared.tonConnectService() ) - return chainRegistry } } diff --git a/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents index f6fe639c47..853f94ce96 100644 --- a/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents +++ b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents @@ -140,6 +140,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/fearless/Common/URLHandling/TonConnectUrlHandling.swift b/fearless/Common/URLHandling/TonConnectUrlHandling.swift new file mode 100644 index 0000000000..80ae3e6143 --- /dev/null +++ b/fearless/Common/URLHandling/TonConnectUrlHandling.swift @@ -0,0 +1,24 @@ +import Foundation +import SSFQRService + +final class TonConnectUrlHandling: URLHandlingServiceProtocol { + private let coordinator = WalletConnectCoordinator.shared + private lazy var matcher = TonConnectMatcherImpl() + private lazy var tonConnectService = ServiceAssembly.shared.tonConnectService() + + func handle(url: URL) -> Bool { + guard let uri = matcher.match(code: url.absoluteString)?.uri else { + return false + } + + Task { + do { + try await tonConnectService.establishConnection(with: uri) + } catch { + Logger.shared.customError(error) + } + } + + return true + } +} diff --git a/fearless/Common/View/TriangularedView/TriangularedView.swift b/fearless/Common/View/TriangularedView/TriangularedView.swift index 61f15800fe..eaafe87c08 100644 --- a/fearless/Common/View/TriangularedView/TriangularedView.swift +++ b/fearless/Common/View/TriangularedView/TriangularedView.swift @@ -5,8 +5,10 @@ public struct TriangularedCorners: OptionSet { public typealias RawValue = UInt8 static let none: TriangularedCorners = [] - static let topLeft = TriangularedCorners(rawValue: 1) - static let bottomRight = TriangularedCorners(rawValue: 2) + static let topLeft = TriangularedCorners(rawValue: 1 << 0) + static let bottomRight = TriangularedCorners(rawValue: 1 << 1) + static let topRight = TriangularedCorners(rawValue: 1 << 2) + static let bottomLeft = TriangularedCorners(rawValue: 1 << 3) public var rawValue: TriangularedCorners.RawValue @@ -35,6 +37,18 @@ open class TriangularedView: ShadowShapeView { } } + open var cornersRaduis: TriangularedCorners = [.topRight, .bottomLeft] { + didSet { + applyPath() + } + } + + open lazy var cornerRadius: CGFloat = sideLength { + didSet { + applyPath() + } + } + var gradientBorderColors: [UIColor] = [] var gradientBorderStartPoint = CGPoint(x: 0.0, y: 0.5) var gradientBorderEndPoint = CGPoint(x: 1.0, y: 0.5) @@ -48,41 +62,72 @@ open class TriangularedView: ShadowShapeView { if cornerCut.contains(.topLeft) { bezierPath.move(to: CGPoint(x: layerBounds.minX + sideLength, y: layerBounds.minY)) + } else if cornersRaduis.contains(.topLeft) { + bezierPath.move(to: CGPoint(x: layerBounds.minX, y: layerBounds.minY + cornerRadius)) + bezierPath.addQuadCurve( + to: CGPoint(x: layerBounds.minX + cornerRadius, y: layerBounds.minY), + controlPoint: CGPoint(x: layerBounds.minX, y: layerBounds.minY) + ) } else { - bezierPath.move(to: CGPoint(x: layerBounds.minX, y: layerBounds.minY + sideLength)) + bezierPath.move(to: CGPoint(x: layerBounds.minX, y: layerBounds.minY)) bezierPath.addQuadCurve( - to: CGPoint(x: layerBounds.minX + sideLength, y: layerBounds.minY), + to: CGPoint(x: layerBounds.minX, y: layerBounds.minY), controlPoint: CGPoint(x: layerBounds.minX, y: layerBounds.minY) ) } - bezierPath.addLine(to: CGPoint(x: layerBounds.maxX - sideLength, y: layerBounds.minY)) - bezierPath.addQuadCurve( - to: CGPoint(x: layerBounds.maxX, y: layerBounds.minY + sideLength), - controlPoint: CGPoint(x: layerBounds.maxX, y: layerBounds.minY) - ) + if cornersRaduis.contains(.topRight) { + bezierPath.addLine(to: CGPoint(x: layerBounds.maxX - cornerRadius, y: layerBounds.minY)) + bezierPath.addQuadCurve( + to: CGPoint(x: layerBounds.maxX, y: layerBounds.minY + cornerRadius), + controlPoint: CGPoint(x: layerBounds.maxX, y: layerBounds.minY) + ) + } else { + bezierPath.addLine(to: CGPoint(x: layerBounds.maxX, y: layerBounds.minY)) + bezierPath.addQuadCurve( + to: CGPoint(x: layerBounds.maxX, y: layerBounds.minY), + controlPoint: CGPoint(x: layerBounds.maxX, y: layerBounds.minY) + ) + } if cornerCut.contains(.bottomRight) { bezierPath.addLine(to: CGPoint(x: layerBounds.maxX, y: layerBounds.maxY - sideLength)) bezierPath.addLine(to: CGPoint(x: layerBounds.maxX - sideLength, y: layerBounds.maxY)) + } else if cornersRaduis.contains(.bottomRight) { + bezierPath.addLine(to: CGPoint(x: layerBounds.maxX, y: layerBounds.maxY - cornerRadius)) + bezierPath.addQuadCurve( + to: CGPoint(x: layerBounds.maxX - cornerRadius, y: layerBounds.maxY), + controlPoint: CGPoint(x: layerBounds.maxX, y: layerBounds.maxY) + ) } else { - bezierPath.addLine(to: CGPoint(x: layerBounds.maxX, y: layerBounds.maxY - sideLength)) + bezierPath.addLine(to: CGPoint(x: layerBounds.maxX, y: layerBounds.maxY)) bezierPath.addQuadCurve( - to: CGPoint(x: layerBounds.maxX - sideLength, y: layerBounds.maxY), + to: CGPoint(x: layerBounds.maxX, y: layerBounds.maxY), controlPoint: CGPoint(x: layerBounds.maxX, y: layerBounds.maxY) ) } - bezierPath.addLine(to: CGPoint(x: layerBounds.minX + sideLength, y: layerBounds.maxY)) - bezierPath.addQuadCurve( - to: CGPoint(x: layerBounds.minX, y: layerBounds.maxY - sideLength), - controlPoint: CGPoint(x: layerBounds.minX, y: layerBounds.maxY) - ) + if cornersRaduis.contains(.bottomLeft) { + bezierPath.addLine(to: CGPoint(x: layerBounds.minX + cornerRadius, y: layerBounds.maxY)) + bezierPath.addQuadCurve( + to: CGPoint(x: layerBounds.minX, y: layerBounds.maxY - sideLength), + controlPoint: CGPoint(x: layerBounds.minX, y: layerBounds.maxY) + ) + } else { + bezierPath.addLine(to: CGPoint(x: layerBounds.minX, y: layerBounds.maxY)) + bezierPath.addQuadCurve( + to: CGPoint(x: layerBounds.minX, y: layerBounds.maxY), + controlPoint: CGPoint(x: layerBounds.minX, y: layerBounds.maxY) + ) + } + if cornerCut.contains(.topLeft) { bezierPath.addLine(to: CGPoint(x: layerBounds.minX, y: layerBounds.minY + sideLength)) bezierPath.addLine(to: CGPoint(x: layerBounds.minX + sideLength, y: layerBounds.minY)) + } else if cornersRaduis.contains(.topLeft) { + bezierPath.addLine(to: CGPoint(x: layerBounds.minX, y: layerBounds.minY + cornerRadius)) } else { - bezierPath.addLine(to: CGPoint(x: layerBounds.minX, y: layerBounds.minY + sideLength)) + bezierPath.addLine(to: CGPoint(x: layerBounds.minX, y: layerBounds.minY)) } return bezierPath diff --git a/fearless/Configs/fearless.debug.xcconfig b/fearless/Configs/fearless.debug.xcconfig index 85e7843ae4..a40c821357 100644 --- a/fearless/Configs/fearless.debug.xcconfig +++ b/fearless/Configs/fearless.debug.xcconfig @@ -7,3 +7,5 @@ ICON_SUFFIX = Dev FEARLESS_GOOGLE_TOKEN = FEARLESS_GOOGLE_URL_SCHEME = + +ASSOCIATED_DOMAIN_APPLINKS = applinks:fearlesswallet.io diff --git a/fearless/Configs/fearless.dev.xcconfig b/fearless/Configs/fearless.dev.xcconfig index 5dc8b3d936..7ba8a48abd 100644 --- a/fearless/Configs/fearless.dev.xcconfig +++ b/fearless/Configs/fearless.dev.xcconfig @@ -7,3 +7,5 @@ ICON_SUFFIX = Dev FEARLESS_GOOGLE_TOKEN = FEARLESS_GOOGLE_URL_SCHEME = + +ASSOCIATED_DOMAIN_APPLINKS = applinks:fearlesswallet.io diff --git a/fearless/Configs/fearless.release.xcconfig b/fearless/Configs/fearless.release.xcconfig index c27dba3917..1c3102fa04 100644 --- a/fearless/Configs/fearless.release.xcconfig +++ b/fearless/Configs/fearless.release.xcconfig @@ -6,3 +6,5 @@ APP_NAME = Fearless FEARLESS_GOOGLE_TOKEN = FEARLESS_GOOGLE_URL_SCHEME = + +ASSOCIATED_DOMAIN_APPLINKS = applinks:fearlesswallet.io diff --git a/fearless/Modules/Coordinators/WalletConnectCoordinator.swift b/fearless/Modules/Coordinators/WalletConnectCoordinator.swift index 08276ac03c..5b6c888893 100644 --- a/fearless/Modules/Coordinators/WalletConnectCoordinator.swift +++ b/fearless/Modules/Coordinators/WalletConnectCoordinator.swift @@ -2,11 +2,17 @@ import Foundation import SoraFoundation import WalletConnectSign import UIKit +import SSFNetwork +import SSFModels final class WalletConnectCoordinator: DefaultCoordinator { + static let shared = WalletConnectCoordinator() + // MARK: - Private properties private let walletConnect: WalletConnectService = WalletConnectServiceImpl.shared + private let tonConnect: TonConnectService = ServiceAssembly.shared.tonConnectService() + private lazy var router: WalletConnectCoordinatorRouter = { WalletConnectCoordinatorRouterImpl() }() @@ -15,9 +21,10 @@ final class WalletConnectCoordinator: DefaultCoordinator { ApplicationHandler() }() - override init() { + override private init() { super.init() walletConnect.set(listener: self) + Task { await tonConnect.set(listener: self) } applicationHandler.delegate = self } @@ -52,7 +59,10 @@ final class WalletConnectCoordinator: DefaultCoordinator { extension WalletConnectCoordinator: WalletConnectServiceDelegate { func sign(request: Request, session: Session?) { - let coordinator = WalletConnectSessionCoordinator(router: router, request: request, session: session) + let coordinator = WalletConnectSessionCoordinator( + router: router, + variant: .walletConnect(request: request, session: session) + ) coordinator.finishFlow = { [weak self, weak coordinator] in self?.removeChildCoordinator(coordinator) self?.router.dismiss { [weak self] in @@ -63,7 +73,10 @@ extension WalletConnectCoordinator: WalletConnectServiceDelegate { } func session(proposal: Session.Proposal) { - let coordinator = WalletConnectProposalCoordinator(router: router, proposal: proposal) + let coordinator = WalletConnectProposalCoordinator( + router: router, + proposal: .walletConnect(proposal) + ) coordinator.finishFlow = { [weak self, weak coordinator] in self?.removeChildCoordinator(coordinator) self?.router.dismiss { [weak self] in @@ -74,6 +87,95 @@ extension WalletConnectCoordinator: WalletConnectServiceDelegate { } } +extension WalletConnectCoordinator: TonConnectServiceDelegate { + func send( + request: TonConnect.AppRequest, + walletId: SSFModels.MetaAccountId, + app: TonConnectApp + ) { + let coordinator = WalletConnectSessionCoordinator( + router: router, + variant: .tonConnect( + request: request, + walletId: walletId, + app: app + ) + ) + coordinator.finishFlow = { [weak self, weak coordinator] in + self?.removeChildCoordinator(coordinator) + self?.router.dismiss { [weak self] in + self?.presentNextIfPossible() + } + } + Task { @MainActor in + startIfPossible(with: coordinator) + } + } + + func send( + request: TonConnect.AppRequest, + invocationId: String, + wallet: MetaAccountModel, + dapp: TonDapp, + delegate: (any WalletConnectSessionModuleOutput)? + ) { + let coordinator = WalletConnectSessionCoordinator( + router: router, + variant: .tonJsBridge( + invocationId: invocationId, + wallet: wallet, + dapp: dapp, + request: request, + delegate: delegate + ) + ) + coordinator.finishFlow = { [weak self, weak coordinator] in + self?.removeChildCoordinator(coordinator) + self?.router.dismiss { [weak self] in + self?.presentNextIfPossible() + } + } + Task { @MainActor in + startIfPossible(with: coordinator) + } + } + + func suggestConnect( + manifest: TonConnectManifest, + requestPayload: TonConnectParameters, + invocationId: String?, + delegate: (any WalletConnectProposalModuleOutput)? + ) { + let proposal: ConnectProposal + if let invocationId, let delegate { + proposal = .tonJsBridge( + manifest: manifest, + requestPayload: requestPayload, + invocationId: invocationId, + delegate: delegate + ) + } else { + proposal = .tonConnect( + manifest: manifest, + requestPayload: requestPayload + ) + } + let coordinator = WalletConnectProposalCoordinator( + router: router, + proposal: proposal + ) + coordinator.finishFlow = { [weak self, weak coordinator] in + self?.removeChildCoordinator(coordinator) + self?.router.dismiss { [weak self] in + self?.presentNextIfPossible() + } + } + Task { @MainActor in + startIfPossible(with: coordinator) + } + } +} + // MARK: - ApplicationHandlerDelegate extension WalletConnectCoordinator: ApplicationHandlerDelegate { diff --git a/fearless/Modules/Coordinators/WalletConnectProposalCoordinator.swift b/fearless/Modules/Coordinators/WalletConnectProposalCoordinator.swift index 305ce67960..1230242933 100644 --- a/fearless/Modules/Coordinators/WalletConnectProposalCoordinator.swift +++ b/fearless/Modules/Coordinators/WalletConnectProposalCoordinator.swift @@ -1,13 +1,45 @@ import Foundation import WalletConnectSign +enum ConnectProposal { + case walletConnect(Session.Proposal) + case tonJsBridge( + manifest: TonConnectManifest, + requestPayload: TonConnectParameters, + invocationId: String, + delegate: (any WalletConnectProposalModuleOutput)? + ) + case tonConnect( + manifest: TonConnectManifest, + requestPayload: TonConnectParameters + ) + + var walletConnectProposal: Session.Proposal? { + switch self { + case let .walletConnect(proposal): return proposal + case .tonJsBridge, .tonConnect: return nil + } + } + + var tonConnectManifest: TonConnectManifest? { + switch self { + case .walletConnect, .tonConnect: return nil + case let .tonJsBridge(manifest, _, _, _): return manifest + } + } +} + +enum ActionConnect { + case walletConnect(Session) +} + final class WalletConnectProposalCoordinator: DefaultCoordinator, CoordinatorFinishOutput { private let router: WalletConnectCoordinatorRouter - private let proposal: Session.Proposal + private let proposal: ConnectProposal init( router: WalletConnectCoordinatorRouter, - proposal: Session.Proposal + proposal: ConnectProposal ) { self.router = router self.proposal = proposal @@ -26,7 +58,29 @@ final class WalletConnectProposalCoordinator: DefaultCoordinator, CoordinatorFin // MARK: - Private methods private func runFlow() { - let module = WalletConnectProposalAssembly.configureModule(status: .proposal(proposal)) + let module: WalletConnectProposalModuleCreationResult? + switch proposal { + case let .walletConnect(proposal): + module = WalletConnectProposalAssembly.configureModule( + status: .proposal(.walletConnect(proposal)) + ) + case let .tonJsBridge(manifest, requestPayload, invocationId, delegate): + module = WalletConnectProposalAssembly.configureModule( + status: .proposal(.tonJsBridge( + manifest: manifest, + requestPayload: requestPayload, + invocationId: invocationId, + delegate: delegate + )) + ) + case let .tonConnect(manifest, requestPayload): + module = WalletConnectProposalAssembly.configureModule( + status: .proposal(.tonConnect( + manifest: manifest, + requestPayload: requestPayload + )) + ) + } guard let controller = module?.view.controller else { return } diff --git a/fearless/Modules/Coordinators/WalletConnectSessionCoordinator.swift b/fearless/Modules/Coordinators/WalletConnectSessionCoordinator.swift index ca9ce28782..05f902fa45 100644 --- a/fearless/Modules/Coordinators/WalletConnectSessionCoordinator.swift +++ b/fearless/Modules/Coordinators/WalletConnectSessionCoordinator.swift @@ -3,17 +3,14 @@ import WalletConnectSign final class WalletConnectSessionCoordinator: DefaultCoordinator, CoordinatorFinishOutput { private let router: WalletConnectCoordinatorRouter - private let request: Request - private let session: Session? + private let variant: ConnectRequestVariant init( router: WalletConnectCoordinatorRouter, - request: Request, - session: Session? + variant: ConnectRequestVariant ) { self.router = router - self.request = request - self.session = session + self.variant = variant } // MARK: - CoordinatorFinishOutput @@ -29,7 +26,7 @@ final class WalletConnectSessionCoordinator: DefaultCoordinator, CoordinatorFini // MARK: - Private methods private func runFlow() { - let module = WalletConnectSessionAssembly.configureModule(request: request, session: session) { [weak self] inputData in + let module = WalletConnectSessionAssembly.configureModule(variant: variant) { [weak self] inputData in self?.presentConfirmation(inputData: inputData) } guard let controller = module?.view.controller else { diff --git a/fearless/Modules/DappBrowser/Cells/BrowserExploreFeaturedCell.swift b/fearless/Modules/DappBrowser/Cells/BrowserExploreFeaturedCell.swift new file mode 100644 index 0000000000..9d698d17e1 --- /dev/null +++ b/fearless/Modules/DappBrowser/Cells/BrowserExploreFeaturedCell.swift @@ -0,0 +1,92 @@ +import UIKit + +final class DappBrowserFeaturedCell: UICollectionViewCell { + let posterImageView: UIImageView = { + let imageView = UIImageView() + imageView.contentMode = .scaleAspectFill + imageView.clipsToBounds = true + return imageView + }() + let iconViewImage = UIImageView() + + let titleLabel: UILabel = { + let label = UILabel() + label.font = .h5Title + return label + }() + + let descriptionLabel: UILabel = { + let label = UILabel() + label.font = .p2Paragraph + label.textColor = R.color.colorWhite50() + label.numberOfLines = 2 + return label + }() + + override init(frame: CGRect) { + super.init(frame: frame) + setup() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func layoutSubviews() { + super.layoutSubviews() + iconViewImage.layer.cornerRadius = 8 + posterImageView.layer.cornerRadius = 15 + } + + override func prepareForReuse() { + super.prepareForReuse() + posterImageView.kf.cancelDownloadTask() + posterImageView.image = nil + } + + func configure(model: DappBrowserFeaturedViewModel) { + model.poster.loadImage( + on: posterImageView, + targetSize: bounds.size, + animated: true + ) + model.poster.loadImage( + on: posterImageView, + placholder: R.image.fearlessBanner(), + targetSize: bounds.size, + animated: true + ) + model.icon.loadImage( + on: iconViewImage, + placholder: R.image.iconFearlessSmall(), + targetSize: CGSize(width: 40, height: 40), + animated: true + ) + titleLabel.text = model.dappName + descriptionLabel.text = model.dappDescription + } + + private func setup() { + contentView.addSubview(posterImageView) + posterImageView.addSubview(iconViewImage) + let vStackView = UIFactory.default.createVerticalStackView(spacing: 8) + posterImageView.addSubview(vStackView) + vStackView.addArrangedSubview(titleLabel) + vStackView.addArrangedSubview(descriptionLabel) + + posterImageView.snp.makeConstraints { make in + make.top.bottom.equalToSuperview() + make.leading.trailing.equalToSuperview().inset(16) + } + iconViewImage.snp.makeConstraints { make in + make.leading.bottom.equalToSuperview().inset(16) + make.size.equalTo(40) + } + vStackView.snp.makeConstraints { make in + make.leading.equalTo(iconViewImage.snp.trailing).offset(8) + make.trailing.equalToSuperview().inset(8) + make.centerY.equalTo(iconViewImage.snp.centerY) + } + } +} diff --git a/fearless/Modules/DappBrowser/Cells/DappBrowserListCell.swift b/fearless/Modules/DappBrowser/Cells/DappBrowserListCell.swift new file mode 100644 index 0000000000..255c1f632a --- /dev/null +++ b/fearless/Modules/DappBrowser/Cells/DappBrowserListCell.swift @@ -0,0 +1,122 @@ +import UIKit +import SoraUI + +struct DappBrowserListCellViewModel { + let icon: ImageViewModelProtocol + let iconUrl: URL + let name: String + let description: String? + let dapp: TonDapp +} + +final class DappBrowserListCell: UITableViewCell { + enum Position { + case top + case middle + case bottom + case list + } + + let containerView: TriangularedView = { + let containerView = TriangularedView() + containerView.fillColor = R.color.colorWhite4()! + containerView.highlightedFillColor = R.color.colorWhite4()! + containerView.shadowOpacity = 0 + return containerView + }() + + let iconViewImage: UIImageView = { + let imageView = UIImageView() + imageView.clipsToBounds = true + return imageView + }() + + let titleLabel: UILabel = { + let label = UILabel() + label.font = .h5Title + return label + }() + + let descriptionLabel: UILabel = { + let label = UILabel() + label.font = .p2Paragraph + label.textColor = R.color.colorWhite50() + label.numberOfLines = 2 + return label + }() + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + setup() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func prepareForReuse() { + super.prepareForReuse() + iconViewImage.kf.cancelDownloadTask() + } + + override func layoutSubviews() { + super.layoutSubviews() + iconViewImage.layer.cornerRadius = 8 + } + + func configure( + model: DappBrowserListCellViewModel, + position: Position + ) { + titleLabel.text = model.name + descriptionLabel.text = model.description + iconViewImage.kf.setImage(with: model.iconUrl) + + switch position { + case .top, .middle: + containerView.cornerCut = .none + containerView.cornersRaduis = .none + case .bottom: + containerView.cornerCut = .bottomRight + containerView.cornersRaduis = .bottomLeft + case .list: + containerView.cornerCut = .none + containerView.cornersRaduis = .none + containerView.fillColor = R.color.colorBlack19()! + containerView.fillColor = R.color.colorBlack19()! + containerView.snp.remakeConstraints { make in + make.top.bottom.equalToSuperview() + make.leading.trailing.equalToSuperview().inset(4) + } + } + } + + func setup() { + selectionStyle = .none + backgroundColor = .clear + contentView.backgroundColor = .clear + contentView.addSubview(containerView) + containerView.addSubview(iconViewImage) + let vStackView = UIFactory.default.createVerticalStackView(spacing: 0) + containerView.addSubview(vStackView) + vStackView.addArrangedSubview(titleLabel) + vStackView.addArrangedSubview(descriptionLabel) + + containerView.snp.makeConstraints { make in + make.top.bottom.equalToSuperview() + make.leading.trailing.equalToSuperview().inset(16) + } + iconViewImage.snp.makeConstraints { make in + make.size.equalTo(40) + make.leading.equalToSuperview().offset(12) + make.centerY.equalToSuperview() + } + vStackView.snp.makeConstraints { make in + make.top.bottom.greaterThanOrEqualToSuperview().priority(.low) + make.leading.equalTo(iconViewImage.snp.trailing).offset(8) + make.trailing.equalToSuperview().inset(8) + make.centerY.equalToSuperview() + } + } +} diff --git a/fearless/Modules/DappBrowser/DappBrowserAssembly.swift b/fearless/Modules/DappBrowser/DappBrowserAssembly.swift new file mode 100644 index 0000000000..0ffcb99735 --- /dev/null +++ b/fearless/Modules/DappBrowser/DappBrowserAssembly.swift @@ -0,0 +1,52 @@ +import UIKit +import SoraFoundation +import RobinHood +import SSFSingleValueCache +import SSFModels + +final class DappBrowserAssembly { + static func configureModule( + wallet: MetaAccountModel + ) -> DappBrowserModuleCreationResult? { + let localizationManager = LocalizationManager.shared + + let interactor = DappBrowserInteractor( + dappProvider: createProvider(), + appRepository: ServiceAssembly.shared.tonConnectAppAsyncRepository(), + chainsRepository: ServiceAssembly.shared.asyncChainModelRepository(sortDescriptors: []), + filterStorage: ServiceAssembly.shared.userDefaults + ) + let router = DappBrowserRouter() + + let presenter = DappBrowserPresenter( + interactor: interactor, + router: router, + localizationManager: localizationManager, + logger: ServiceAssembly.shared.logger, + viewModelFactory: DappBrowserViewModelFactoryImpl(), + wallet: wallet + ) + + let view = DappBrowserViewController( + output: presenter, + localizationManager: localizationManager + ) + + return (view, presenter) + } + + private static func createProvider() -> AnySingleValueProvider<[DappCategory]> { + let repository: CoreDataRepository = SingleValueCacheRepositoryFactoryDefault().createSingleValueCacheRepository() + let source = DappDataSource() + let trigger: DataProviderEventTrigger = [.onFetchPage, .onAll] + let provider = SingleValueProvider( + targetIdentifier: "dapp.remote.target.identifier", + source: AnySingleValueProviderSource(source), + repository: AnyDataProviderRepository(repository), + updateTrigger: trigger, + executionQueue: OperationManagerFacade.sharedDefaultQueue + ) + + return AnySingleValueProvider(provider) + } +} diff --git a/fearless/Modules/DappBrowser/DappBrowserInteractor.swift b/fearless/Modules/DappBrowser/DappBrowserInteractor.swift new file mode 100644 index 0000000000..d2ac0c4eca --- /dev/null +++ b/fearless/Modules/DappBrowser/DappBrowserInteractor.swift @@ -0,0 +1,86 @@ +import UIKit +import SoraKeystore +import RobinHood +import SSFModels + +protocol DappBrowserInteractorOutput: AnyObject { + func didReceive(dapps: Result<[DappCategory], Error>) +} + +final class DappBrowserInteractor { + // MARK: - Private properties + + private enum Constants { + static let filterKey = "jp.co.soramitsu.fearless.dapp.browser.filter" + } + + private weak var output: DappBrowserInteractorOutput? + private let dappProvider: AnySingleValueProvider<[DappCategory]> + private let appRepository: AsyncAnyRepository + private let chainsRepository: AsyncAnyRepository + private let filterStorage: SettingsManagerProtocol + + init( + dappProvider: AnySingleValueProvider<[DappCategory]>, + appRepository: AsyncAnyRepository, + chainsRepository: AsyncAnyRepository, + filterStorage: SettingsManagerProtocol + ) { + self.dappProvider = dappProvider + self.appRepository = appRepository + self.chainsRepository = chainsRepository + self.filterStorage = filterStorage + } + + private func setupDappProvider() { + let updateClosure = { [weak self] (changes: [DataProviderChange<[DappCategory]>]) in + guard let dapps = changes.reduceToLastChange() else { + return + } + self?.output?.didReceive(dapps: .success(dapps)) + } + + let failureClosure: (any Error) -> Void = { [weak self] (error: Error) in + self?.output?.didReceive(dapps: .failure(error)) + } + + dappProvider.addObserver( + self, + deliverOn: nil, + executing: updateClosure, + failing: failureClosure, + options: DataProviderObserverOptions() + ) + } +} + +// MARK: - DappBrowserInteractorInput + +extension DappBrowserInteractor: DappBrowserInteractorInput { + var connectedApps: [TonConnectApp] { + get async throws { + try await appRepository.fetchAll() + } + } + + var chains: [ChainModel] { + get async throws { + try await chainsRepository.fetchAll() + } + } + + var filter: NetworkManagmentFilter { + get { + let id = filterStorage.string(for: Constants.filterKey) + return NetworkManagmentFilter(identifier: id) + } + set { + filterStorage.set(value: newValue.identifier, for: Constants.filterKey) + } + } + + func setup(with output: DappBrowserInteractorOutput) { + self.output = output + setupDappProvider() + } +} diff --git a/fearless/Modules/DappBrowser/DappBrowserPresenter.swift b/fearless/Modules/DappBrowser/DappBrowserPresenter.swift new file mode 100644 index 0000000000..7c6b92e95a --- /dev/null +++ b/fearless/Modules/DappBrowser/DappBrowserPresenter.swift @@ -0,0 +1,218 @@ +import Foundation +import SSFModels +import SoraFoundation + +protocol DappBrowserViewInput: ControllerBackedProtocol { + func didReceive(viewModel: [DappBrowserViewModel]) + func didReceive(walletName: String) + func didReceive(viewModel: DappBrowsetNetworkFilterViewModel?) +} + +protocol DappBrowserInteractorInput: AnyObject { + var connectedApps: [TonConnectApp] { get async throws } + var chains: [ChainModel] { get async throws } + var filter: NetworkManagmentFilter { get set } + func setup(with output: DappBrowserInteractorOutput) +} + +final class DappBrowserPresenter { + // MARK: Private properties + + private weak var view: DappBrowserViewInput? + private let router: DappBrowserRouterInput + private let interactor: DappBrowserInteractorInput + private let logger: LoggerProtocol + private let viewModelFactory: DappBrowserViewModelFactory + private var wallet: MetaAccountModel + + private var dapps: [DappCategory]? + private var page: DappBrowserViewControllerPage = .dapps + + // MARK: - Constructors + + init( + interactor: DappBrowserInteractorInput, + router: DappBrowserRouterInput, + localizationManager: LocalizationManagerProtocol, + logger: LoggerProtocol, + viewModelFactory: DappBrowserViewModelFactory, + wallet: MetaAccountModel + ) { + self.interactor = interactor + self.router = router + self.logger = logger + self.viewModelFactory = viewModelFactory + self.wallet = wallet + + self.localizationManager = localizationManager + } + + // MARK: - Private methods + + private func provideTableViewModel() { + guard let dapps else { + return + } + Task { + let viewModel = viewModelFactory.buildViewModel( + dapps: dapps, + connected: try await interactor.connectedApps, + chains: try await interactor.chains, + networkFilter: interactor.filter, + locale: selectedLocale, + wallet: wallet, + page: page + ) + Task { @MainActor in + view?.didReceive(viewModel: viewModel) + } + } + } + + private func provideWalletViewModel() { + view?.didReceive(walletName: wallet.name) + } + + private func provideNetworkViewModel() { + Task { + let viewModel = viewModelFactory.buildNetworkFilterViewModel( + chains: try await interactor.chains, + filter: interactor.filter, + locale: selectedLocale + ) + Task { @MainActor in + view?.didReceive(viewModel: viewModel) + } + } + } +} + +// MARK: - DappBrowserViewOutput + +extension DappBrowserPresenter: DappBrowserViewOutput { + func didTapSearchButton() { + Task { + var appsForSearch: [TonDapp] = dapps.or([]) + .map { $0.apps } + .reduce([], +) + .uniq(predicate: { $0 }) + switch page { + case .dapps: + break + case .connected: + let connectedApps = try await interactor.connectedApps + appsForSearch = appsForSearch.filter { app in + connectedApps.contains(where: { $0.appUrl == app.url }) + } + } + Task { @MainActor [appsForSearch] in + let title = R.string.localizable.commonSearch(preferredLanguages: selectedLocale.rLanguages) + router.showList( + from: view, + dapps: appsForSearch, + title: title, + wallet: wallet + ) + } + } + } + + func didSelect(page: DappBrowserViewControllerPage) { + self.page = page + provideTableViewModel() + } + + func didSelect(dapp: TonDapp) { + router.showDapp(from: view, dapp: dapp, wallet: wallet) + } + + func didTapOnWalletSelectButton() { + router.showWalletManagment( + from: view, + moduleOutput: self + ) + } + + func didTapOnNetworkSelectButton() { + Task { + let allChains = try await interactor.chains + let hasDappChains = allChains.filter { chainModel in + dapps.or([]).contains { dappCat in + dappCat.apps.contains { dapp in + dapp.chains.contains(chainModel.chainId) + } + } + } + Task { @MainActor in + router.showSelectNetwork( + from: view, + wallet: wallet, + chains: hasDappChains, + delegate: self, + initialFilter: interactor.filter + ) + } + } + } + + func didTapOnSection(with dapps: [TonDapp], title: String) { + let all = R.string.localizable.stakingAnalyticsPeriodAll( + preferredLanguages: selectedLocale.rLanguages + ) + router.showList( + from: view, + dapps: dapps, + title: [all, title].joined(separator: " "), + wallet: wallet + ) + } + + func didLoad(view: DappBrowserViewInput) { + self.view = view + interactor.setup(with: self) + provideWalletViewModel() + provideNetworkViewModel() + } +} + +// MARK: - DappBrowserInteractorOutput + +extension DappBrowserPresenter: DappBrowserInteractorOutput { + func didReceive(dapps: Result<[DappCategory], any Error>) { + switch dapps { + case let .success(dapps): + self.dapps = dapps + provideTableViewModel() + provideNetworkViewModel() + case let .failure(error): + logger.customError(error) + } + } +} + +// MARK: - Localizable + +extension DappBrowserPresenter: Localizable { + func applyLocalization() {} +} + +extension DappBrowserPresenter: DappBrowserModuleInput {} + +// MARK: - WalletsManagmentModuleOutput + +extension DappBrowserPresenter: WalletsManagmentModuleOutput { + func selectedWallet(_ wallet: MetaAccountModel, for contextTag: Int) { + self.wallet = wallet + provideWalletViewModel() + } +} + +// MARK: - NetworkManagmentModuleOutput + +extension DappBrowserPresenter: NetworkManagmentModuleOutput { + func did(select: NetworkManagmentFilter, contextTag: Int?) { + interactor.filter = select + provideTableViewModel() + provideNetworkViewModel() + } +} diff --git a/fearless/Modules/DappBrowser/DappBrowserProtocols.swift b/fearless/Modules/DappBrowser/DappBrowserProtocols.swift new file mode 100644 index 0000000000..8f65c157eb --- /dev/null +++ b/fearless/Modules/DappBrowser/DappBrowserProtocols.swift @@ -0,0 +1,35 @@ +import SSFModels + +typealias DappBrowserModuleCreationResult = ( + view: DappBrowserViewInput, + input: DappBrowserModuleInput +) + +protocol DappBrowserRouterInput: AnyObject { + func showWalletManagment( + from view: ControllerBackedProtocol?, + moduleOutput: WalletsManagmentModuleOutput? + ) + func showSelectNetwork( + from view: ControllerBackedProtocol?, + wallet: MetaAccountModel, + chains: [ChainModel], + delegate: NetworkManagmentModuleOutput?, + initialFilter: NetworkManagmentFilter + ) + func showDapp( + from view: ControllerBackedProtocol?, + dapp: TonDapp, + wallet: MetaAccountModel + ) + func showList( + from view: ControllerBackedProtocol?, + dapps: [TonDapp], + title: String, + wallet: MetaAccountModel + ) +} + +protocol DappBrowserModuleInput: AnyObject {} + +protocol DappBrowserModuleOutput: AnyObject {} diff --git a/fearless/Modules/DappBrowser/DappBrowserRouter.swift b/fearless/Modules/DappBrowser/DappBrowserRouter.swift new file mode 100644 index 0000000000..e24915531c --- /dev/null +++ b/fearless/Modules/DappBrowser/DappBrowserRouter.swift @@ -0,0 +1,67 @@ +import Foundation +import SSFModels + +final class DappBrowserRouter: DappBrowserRouterInput { + func showWalletManagment( + from view: ControllerBackedProtocol?, + moduleOutput: WalletsManagmentModuleOutput? + ) { + guard + let module = WalletsManagmentAssembly.configureModule( + shouldSaveSelected: true, + moduleOutput: moduleOutput + ) + else { + return + } + + view?.controller.present(module.view.controller, animated: true) + } + + func showSelectNetwork( + from view: ControllerBackedProtocol?, + wallet: MetaAccountModel, + chains: [ChainModel], + delegate: NetworkManagmentModuleOutput?, + initialFilter: NetworkManagmentFilter + ) { + guard + let module = NetworkManagmentAssembly.configureModule( + initialFilter: initialFilter, + wallet: wallet, + chains: chains, + contextTag: nil, + moduleOutput: delegate + ) + else { + return + } + + view?.controller.present(module.view.controller, animated: true) + } + + func showDapp( + from view: ControllerBackedProtocol?, + dapp: TonDapp, + wallet: MetaAccountModel + ) { + guard let module = TonWebBridgeAssembly.configureModule(for: dapp, wallet: wallet) else { + return + } + + view?.controller.present(module.view.controller, animated: true) + } + + func showList( + from view: ControllerBackedProtocol?, + dapps: [TonDapp], + title: String, + wallet: MetaAccountModel + ) { + guard let module = DappBrowserListAssembly.configureModule(title: title, dapps: dapps, wallet: wallet) else { + return + } + + view?.controller.present(module.view.controller, animated: true) + } +} diff --git a/fearless/Modules/DappBrowser/DappBrowserViewController.swift b/fearless/Modules/DappBrowser/DappBrowserViewController.swift new file mode 100644 index 0000000000..2660b4a8fd --- /dev/null +++ b/fearless/Modules/DappBrowser/DappBrowserViewController.swift @@ -0,0 +1,283 @@ +import UIKit +import SoraUI +import SoraFoundation + +protocol DappBrowserViewOutput: AnyObject { + func didLoad(view: DappBrowserViewInput) + func didSelect(dapp: TonDapp) + func didTapOnWalletSelectButton() + func didTapOnNetworkSelectButton() + func didTapOnSection(with dapps: [TonDapp], title: String) + func didTapSearchButton() + func didSelect(page: DappBrowserViewControllerPage) +} + +final class DappBrowserViewController: UIViewController, ViewHolder, HiddableBarWhenPushed { + typealias RootViewType = DappBrowserViewLayout + + // MARK: Private properties + + private let output: DappBrowserViewOutput + + private var viewModel: [DappBrowserViewModel] = [] + + // MARK: - Constructor + + init( + output: DappBrowserViewOutput, + localizationManager: LocalizationManagerProtocol? + ) { + self.output = output + super.init(nibName: nil, bundle: nil) + self.localizationManager = localizationManager + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Life cycle + + override func loadView() { + view = DappBrowserViewLayout() + } + + override func viewDidLoad() { + super.viewDidLoad() + output.didLoad(view: self) + setupTableView() + bindActions() + rootView.segmentedControl.delegate = self + } + + // MARK: - Private methods + + private func setupTableView() { + rootView.tableView.delegate = self + rootView.tableView.dataSource = self + rootView.tableView.registerClassForCell(DappBrowserListCell.self) + rootView.tableView.separatorStyle = .none + } + + private func bindActions() { + rootView.featuredView.didSelectApp = { [weak self] index in + guard + case let .featured(models) = self?.viewModel[safe: 0], + let dapp = models[safe: index]?.dapp + else { + return + } + self?.output.didSelect(dapp: dapp) + } + rootView.switchWalletButton.addAction { [weak self] in + self?.output.didTapOnWalletSelectButton() + } + rootView.selectNetworkButton.addAction { [weak self] in + self?.output.didTapOnNetworkSelectButton() + } + rootView.searchButton.addAction { [weak self] in + self?.output.didTapSearchButton() + } + } + + private func didTapOnSeeAll(for section: Int) { + guard + let section = viewModel[safe: section], + case let .section(sectionViewModel) = section + else { + return + } + output.didTapOnSection(with: sectionViewModel.dapps, title: sectionViewModel.header.title) + } +} + +// MARK: - DappBrowserViewInput + +extension DappBrowserViewController: DappBrowserViewInput { + func didReceive(viewModel: [DappBrowserViewModel]) { + self.viewModel = viewModel + rootView.tableView.reloadData() + if let dataSource = viewModel.first(where: { $0.featured != nil })?.featured { + rootView.featuredView.set(dataSource: dataSource) + } + let sections = IndexSet(integersIn: 0.. Int { + viewModel.count + } + + func tableView(_: UITableView, numberOfRowsInSection section: Int) -> Int { + switch viewModel[section] { + case .featured: + return 1 + case let .section(sectionList): + return sectionList.list.count + } + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + switch viewModel[indexPath.section] { + case .featured: + let cell = UITableViewCell() + cell.contentView.addSubview(rootView.featuredView) + cell.selectionStyle = .none + cell.backgroundColor = .clear + rootView.featuredView.snp.makeConstraints { make in + make.top.bottom.equalToSuperview() + make.leading.trailing.equalToSuperview() + } + return cell + case let .section(sectionList): + let cell = tableView.dequeueReusableCellWithType(DappBrowserListCell.self, forIndexPath: indexPath) + + var position: DappBrowserListCell.Position = .middle + if indexPath.row == 0, tableView.numberOfRows(inSection: indexPath.section) > 1 { + position = .top + } else if indexPath.row == tableView.numberOfRows(inSection: indexPath.section) - 1 { + position = .bottom + } + let viewModel = sectionList.list[indexPath.row] + cell.configure(model: viewModel, position: position) + return cell + } + } +} + +// MARK: - UITableViewDelegate + +extension DappBrowserViewController: UITableViewDelegate { + func tableView(_: UITableView, viewForHeaderInSection section: Int) -> UIView? { + switch viewModel[section] { + case .featured: + return nil + case let .section(sectionList): + let view = DappBrowserSectionHeaderView() + view.allTapAction = { [weak self] in + self?.didTapOnSeeAll(for: section) + } + view.locale = selectedLocale + let viewModel = sectionList.header + view.configure(model: viewModel) + return view + } + } + + func tableView(_: UITableView, heightForHeaderInSection section: Int) -> CGFloat { + switch viewModel[section] { + case .featured: + return 0 + case .section: + return 42 + } + } + + func tableView(_: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + switch viewModel[indexPath.section] { + case .featured: + return 170 + case .section: + return 64 + } + } + + func tableView(_: UITableView, didSelectRowAt indexPath: IndexPath) { + guard + let section = viewModel[safe: indexPath.section], + case let .section(sectionListViewModel) = section, + let dapp = sectionListViewModel.dapps[safe: indexPath.row] + else { + return + } + output.didSelect(dapp: dapp) + } +} + +// MARK: - FWSegmentedControlDelegate + +enum DappBrowserViewControllerPage: Int { + case dapps + case connected +} + +extension DappBrowserViewController: FWSegmentedControlDelegate { + func didSelect(_ segmentIndex: Int) { + guard let page = DappBrowserViewControllerPage(rawValue: segmentIndex) else { + return + } + output.didSelect(page: page) + } +} + +// MARK: - EmptyStateViewOwnerProtocol + +extension DappBrowserViewController: EmptyStateViewOwnerProtocol { + var emptyStateDelegate: EmptyStateDelegate { self } + var emptyStateDataSource: EmptyStateDataSource { self } +} + +// MARK: - EmptyStateDataSource + +extension DappBrowserViewController: EmptyStateDataSource { + var viewForEmptyState: UIView? { + let emptyView = EmptyView() + emptyView.image = R.image.iconWarning() + emptyView.title = R.string.localizable + .emptyViewTitle(preferredLanguages: selectedLocale.rLanguages) + emptyView.text = R.string.localizable.selectNetworkSearchEmptySubtitle(preferredLanguages: selectedLocale.rLanguages) + emptyView.iconMode = .bigFilledShadow + return emptyView + } + + var contentViewForEmptyState: UIView { + rootView.tableContainer + } +} + +// MARK: - EmptyStateDelegate + +extension DappBrowserViewController: EmptyStateDelegate { + var shouldDisplayEmptyState: Bool { + viewModel.isEmpty + } +} diff --git a/fearless/Modules/DappBrowser/DappBrowserViewModel.swift b/fearless/Modules/DappBrowser/DappBrowserViewModel.swift new file mode 100644 index 0000000000..e1ae87e974 --- /dev/null +++ b/fearless/Modules/DappBrowser/DappBrowserViewModel.swift @@ -0,0 +1,21 @@ +import Foundation + +enum DappBrowserViewModel { + case featured([DappBrowserFeaturedViewModel]) + case section(ListSection) + + struct ListSection { + let header: DappBrowserSectionHeaderViewViewModel + let list: [DappBrowserListCellViewModel] + let dapps: [TonDapp] + } + + var featured: [DappBrowserFeaturedViewModel]? { + switch self { + case let .featured(featured): + return featured + case .section: + return nil + } + } +} diff --git a/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift b/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift new file mode 100644 index 0000000000..425d9ebc9c --- /dev/null +++ b/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift @@ -0,0 +1,251 @@ +import Foundation +import SoraFoundation +import SSFModels + +struct DappBrowsetNetworkFilterViewModel { + let networkName: String + let image: ImageViewModelProtocol? +} + +protocol DappBrowserViewModelFactory { + func buildViewModel( + dapps: [DappCategory], + connected: [TonConnectApp], + chains: [ChainModel], + networkFilter: NetworkManagmentFilter, + locale: Locale, + wallet: MetaAccountModel, + page: DappBrowserViewControllerPage + ) -> [DappBrowserViewModel] + + func buildNetworkFilterViewModel( + chains: [ChainModel], + filter: NetworkManagmentFilter, + locale: Locale + ) -> DappBrowsetNetworkFilterViewModel? +} + +final class DappBrowserViewModelFactoryImpl: DappBrowserViewModelFactory { + func buildViewModel( + dapps: [DappCategory], + connected: [TonConnectApp], + chains: [ChainModel], + networkFilter: NetworkManagmentFilter, + locale: Locale, + wallet: MetaAccountModel, + page: DappBrowserViewControllerPage + ) -> [DappBrowserViewModel] { + switch page { + case .dapps: + return buildDappsPageViewModel( + dapps: dapps, + chains: chains, + networkFilter: networkFilter, + locale: locale, + wallet: wallet + ) + case .connected: + return buildConnectedPageViewModel( + dapps: dapps, + connected: connected, + locale: locale + ) + } + } + + func buildNetworkFilterViewModel( + chains: [ChainModel], + filter: NetworkManagmentFilter, + locale: Locale + ) -> DappBrowsetNetworkFilterViewModel? { + let selectedFilterName: String + let selectedFilterImage: ImageViewModelProtocol? + switch filter { + case let .chain(id): + let selectedChain = chains.first(where: { $0.chainId == id }) + selectedFilterName = selectedChain?.name ?? "" + selectedFilterImage = selectedChain?.icon.map { RemoteImageViewModel(url: $0) } + case .all: + selectedFilterName = R.string.localizable.chainSelectionAllNetworks( + preferredLanguages: locale.rLanguages + ) + selectedFilterImage = filter.filterImage + case .popular: + selectedFilterName = R.string.localizable.networkManagementPopular(preferredLanguages: locale.rLanguages) + selectedFilterImage = filter.filterImage + case .favourite: + selectedFilterName = R.string.localizable.networkManagmentFavourite(preferredLanguages: locale.rLanguages) + selectedFilterImage = filter.filterImage + } + return DappBrowsetNetworkFilterViewModel( + networkName: selectedFilterName, + image: selectedFilterImage + ) + } + + // MARK: - Private methods + + private func buildDappsPageViewModel( + dapps: [DappCategory], + chains: [ChainModel], + networkFilter: NetworkManagmentFilter, + locale: Locale, + wallet: MetaAccountModel + ) -> [DappBrowserViewModel] { + var viewModel: [DappBrowserViewModel] = [] + + if let top = dapps.first(where: { $0.type == .top }) { + let topViewModel = buildFeaturedViewModel(dapps: top.apps) + viewModel.append(topViewModel) + } + + switch networkFilter { + case .all: + let sections = dapps.compactMap { buildSectionViewModel(category: $0, locale: locale, maxInSection: 3) } + viewModel.append(contentsOf: sections) + case let .chain(chain): + let chainApps = dapps.filter { dapp in + dapp.apps.contains(where: { $0.chains.contains(chain) }) + } + let sections = chainApps.compactMap { buildSectionViewModel(category: $0, locale: locale, maxInSection: 3)} + viewModel.append(contentsOf: sections) + case .popular: + let popularChains = chains + .filter { $0.rank != nil } + .map { $0.chainId } + let sections = buildSection( + dapps: dapps, + chains: popularChains, + locale: locale, + maxInSection: 3 + ) + viewModel.append(contentsOf: sections) + case .favourite: + let favourite = chains + .filter { wallet.favouriteChainIds.contains($0.chainId) == true } + .map { $0.chainId } + let sections = buildSection( + dapps: dapps, + chains: favourite, + locale: locale, + maxInSection: 3 + ) + viewModel.append(contentsOf: sections) + } + + return viewModel + } + + private func buildConnectedPageViewModel( + dapps: [DappCategory], + connected: [TonConnectApp], + locale: Locale + ) -> [DappBrowserViewModel] { + var viewModel: [DappBrowserViewModel] = [] + + let allAppd = dapps + .map { $0.apps } + .reduce([], +) + .uniq(predicate: { $0 }) + let connected = allAppd.filter { app in + connected.contains(where: { $0.appUrl.host == app.url.host }) + } + if connected.isNotEmpty { + let connectedViewModel = buildSectionViewModel( + category: .init( + type: .connected, + apps: connected + ), + locale: locale, + maxInSection: .max + ) + if let connectedViewModel { + viewModel.append(connectedViewModel) + } + } + return viewModel + } + + private func buildSection( + dapps: [DappCategory], + chains: [ChainModel.Id], + locale: Locale, + maxInSection: Int + ) -> [DappBrowserViewModel] { + let apps = dapps.filter { dappCat in + dappCat.apps.contains { dapp in + dapp.chains.contains { chainId in + chains.contains(chainId) + } + } + } + let sections = apps.map { buildSectionViewModel(category: $0, locale: locale, maxInSection: maxInSection)} + return sections.compactMap { $0 } + } + + private func buildFeaturedViewModel( + dapps: [TonDapp] + ) -> DappBrowserViewModel { + let featured = dapps.map { + DappBrowserFeaturedViewModel( + poster: RemoteImageViewModel(url: $0.poster) ?? BundleImageViewModel(image: R.image.fearlessBanner()), + icon: RemoteImageViewModel(url: $0.icon), + dappName: $0.name, + dappDescription: $0.description ?? "", + dapp: $0 + ) + } + let viewModel = DappBrowserViewModel.featured(featured) + return viewModel + } + + private func buildSectionViewModel( + category: DappCategory, + locale: Locale, + maxInSection: Int + ) -> DappBrowserViewModel? { + guard let title = getTitle(for: category.type, locale: locale) else { + return nil + } + let header = DappBrowserSectionHeaderViewViewModel( + title: title, + isAllHidden: category.apps.count <= maxInSection + ) + let list = category.apps.prefix(maxInSection).map { + DappBrowserListCellViewModel( + icon: RemoteImageViewModel(url: $0.icon), + iconUrl: $0.icon, + name: $0.name, + description: $0.description, + dapp: $0 + ) + } + let listSection = DappBrowserViewModel.ListSection( + header: header, + list: list, + dapps: category.apps + ) + let viewModel = DappBrowserViewModel.section(listSection) + return viewModel + } + + private func getTitle( + for category: DappCategoryType, + locale: Locale + ) -> String? { + switch category { + case .connected: + return "Connected" + case .featured: + return "Featured" + case .utilities: + return "Utilities" + case .nft: + return "NFT" + case .defi: + return "DeFi" + case .top: + return nil + } + } +} diff --git a/fearless/Modules/DappBrowser/View/DappBrowserFeaturedView.swift b/fearless/Modules/DappBrowser/View/DappBrowserFeaturedView.swift new file mode 100644 index 0000000000..25d13f252c --- /dev/null +++ b/fearless/Modules/DappBrowser/View/DappBrowserFeaturedView.swift @@ -0,0 +1,265 @@ +import UIKit + +struct DappBrowserFeaturedViewModel { + let poster: ImageViewModelProtocol + let icon: ImageViewModelProtocol + let dappName: String + let dappDescription: String + let dapp: TonDapp +} + +final class DappBrowserFeaturedView: UIView { + private enum Constants { + static let numberOfAdditionalItems = 5 + } + + var didSelectApp: ((Int) -> Void)? + + private var dataSource = [DappBrowserFeaturedViewModel]() + + private lazy var collectionView = CollectionView( + frame: .zero, + collectionViewLayout: createLayout() + ) + + private var indexOfCellBeforeDragging = 0 + private var slideshowTask: Task? + + override init(frame: CGRect) { + super.init(frame: frame) + setup() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func layoutSubviews() { + super.layoutSubviews() + collectionView.frame = bounds + } + + override func didMoveToSuperview() { + guard superview != nil else { + stopSlideShow() + return + } + startSlideShow() + } + + func set(dataSource: [DappBrowserFeaturedViewModel]) { + let dataSource = (0 ..< Constants.numberOfAdditionalItems) + .reduce(into: [DappBrowserFeaturedViewModel]()) { partialResult, _ in + partialResult = partialResult + dataSource + } + self.dataSource = dataSource + + collectionView.alpha = 0 + collectionView.reloadData() + collectionView.layoutIfNeeded() + guard !dataSource.isEmpty else { return } + DispatchQueue.main.async { + self.collectionView.scrollToItem( + at: IndexPath( + item: 0, + section: 0 + ), + at: .centeredHorizontally, + animated: false + ) + UIView.animate(withDuration: 0.2) { + self.collectionView.alpha = 1.0 + } + self.startSlideShowTask() + } + } + + // MARK: - Private methods + + private func setup() { + collectionView.contentInsetAdjustmentBehavior = .never + collectionView.backgroundColor = .clear + collectionView.showsHorizontalScrollIndicator = false + collectionView.decelerationRate = .fast + collectionView.dataSource = self + collectionView.delegate = self + collectionView.registerClassForCell(DappBrowserFeaturedCell.self) + + addSubview(collectionView) + } + + private func createLayout() -> UICollectionViewLayout { + let configuration = UICollectionViewCompositionalLayoutConfiguration() + configuration.scrollDirection = .horizontal + + let layout = UICollectionViewCompositionalLayout(sectionProvider: { _, environment -> NSCollectionLayoutSection? in + let itemSize = NSCollectionLayoutSize( + widthDimension: .fractionalWidth(1.0), + heightDimension: .absolute(environment.container.effectiveContentSize.height) + ) + let item = NSCollectionLayoutItem(layoutSize: itemSize) + + let groupSize = NSCollectionLayoutSize( + widthDimension: .absolute(environment.container.effectiveContentSize.width), + heightDimension: .absolute(environment.container.effectiveContentSize.height) + ) + + let group = NSCollectionLayoutGroup.vertical(layoutSize: groupSize, subitems: [item]) + + let section = NSCollectionLayoutSection(group: group) + return section + + }, configuration: configuration) + return layout + } + + private func startSlideShow() { + startSlideShowTask() + } + + private func stopSlideShow() { + slideshowTask?.cancel() + slideshowTask = nil + } + + private func indexOfMostVisibleCell() -> Int { + let proportionalOffset = collectionView.contentOffset.x / collectionView.bounds.width + guard !proportionalOffset.isNaN else { + return 0 + } + let index = Int(round(proportionalOffset)) + let numberOfItems = collectionView.numberOfItems(inSection: 0) + let safeIndex = max(0, min(numberOfItems - 1, index)) + return safeIndex + } + + private func startSlideShowTask() { + slideshowTask?.cancel() + slideshowTask = Task { + try? await Task.sleep(nanoseconds: 4_000_000_000) + guard !Task.isCancelled else { return } + await MainActor.run { + resetCarouselIfNeeded() + self.collectionView.isScrollEnabled = false + UIView.animate(withDuration: 0.5) { + self.collectionView.scrollToItem( + at: IndexPath(item: self.indexOfMostVisibleCell() + 1, section: 0), + at: .centeredHorizontally, + animated: true + ) + } completion: { _ in + self.collectionView.isScrollEnabled = true + self.startSlideShowTask() + } + } + } + } + + private func resetCarouselIfNeeded() { + let indexOfLeftSignificantCell = Constants.numberOfAdditionalItems / 2 * dataSource.count / Constants.numberOfAdditionalItems + let indexOfRightSignificantCell = indexOfLeftSignificantCell + (dataSource.count - 1) / Constants.numberOfAdditionalItems + + if indexOfMostVisibleCell() == indexOfLeftSignificantCell - 1 { + collectionView.scrollToItem( + at: IndexPath( + item: indexOfRightSignificantCell, + section: 0 + ), + at: .centeredHorizontally, + animated: false + ) + } + + if indexOfMostVisibleCell() == indexOfRightSignificantCell + 1 { + collectionView.scrollToItem( + at: IndexPath( + item: indexOfLeftSignificantCell, + section: 0 + ), + at: .centeredHorizontally, + animated: false + ) + } + } +} + +extension DappBrowserFeaturedView: UICollectionViewDataSource { + func collectionView(_: UICollectionView, numberOfItemsInSection _: Int) -> Int { + dataSource.count + } + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + let cell = collectionView.dequeueReusableCell( + withReuseIdentifier: DappBrowserFeaturedCell.reuseIdentifier, + for: indexPath + ) + + (cell as? DappBrowserFeaturedCell)?.configure(model: dataSource[indexPath.item]) + + return cell + } +} + +extension DappBrowserFeaturedView: UICollectionViewDelegate { + func collectionView( + _: UICollectionView, + didSelectItemAt indexPath: IndexPath + ) { + let dAppsCount = dataSource.count / Constants.numberOfAdditionalItems + let index = indexPath.item - ((indexPath.item / dAppsCount) * dAppsCount) + didSelectApp?(index) + } + + func scrollViewWillBeginDragging(_: UIScrollView) { + indexOfCellBeforeDragging = indexOfMostVisibleCell() + slideshowTask?.cancel() + } + + func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer) { + targetContentOffset.pointee = scrollView.contentOffset + + let indexOfMostVisibleCell = self.indexOfMostVisibleCell() + let numberOfItems = collectionView.numberOfItems(inSection: 0) + let swipeVelocityThreshold: CGFloat = 0.5 + let hasEnoughVelocityToSlideToTheNextCell = indexOfCellBeforeDragging + 1 < numberOfItems && velocity.x > swipeVelocityThreshold + let hasEnoughVelocityToSlideToThePreviousCell = indexOfCellBeforeDragging - 1 >= 0 && velocity.x < -swipeVelocityThreshold + let majorCellIsTheCellBeforeDragging = indexOfMostVisibleCell == indexOfCellBeforeDragging + let didUseSwipeToSkipCell = majorCellIsTheCellBeforeDragging && (hasEnoughVelocityToSlideToTheNextCell || hasEnoughVelocityToSlideToThePreviousCell) + + if didUseSwipeToSkipCell { + let snapToIndex = indexOfCellBeforeDragging + (hasEnoughVelocityToSlideToTheNextCell ? 1 : -1) + let toValue = collectionView.bounds.width * CGFloat(snapToIndex) + + UIView.animate( + withDuration: 0.5, + delay: 0, + usingSpringWithDamping: 1, + initialSpringVelocity: velocity.x, + options: .allowUserInteraction, + animations: { + scrollView.contentOffset = CGPoint(x: toValue, y: 0) + scrollView.layoutIfNeeded() + }, + completion: nil + ) + + } else { + let indexPath = IndexPath(row: indexOfMostVisibleCell, section: 0) + collectionView.scrollToItem(at: indexPath, at: .centeredHorizontally, animated: true) + } + } + + func scrollViewDidEndDecelerating(_: UIScrollView) { + resetCarouselIfNeeded() + startSlideShowTask() + } +} + +private class CollectionView: UICollectionView { + private var _safeAreaInsets: UIEdgeInsets? + override var safeAreaInsets: UIEdgeInsets { + get { _safeAreaInsets ?? super.safeAreaInsets } + set { _safeAreaInsets = newValue } + } +} diff --git a/fearless/Modules/DappBrowser/View/DappBrowserSectionHeaderView.swift b/fearless/Modules/DappBrowser/View/DappBrowserSectionHeaderView.swift new file mode 100644 index 0000000000..237f8df74d --- /dev/null +++ b/fearless/Modules/DappBrowser/View/DappBrowserSectionHeaderView.swift @@ -0,0 +1,114 @@ +import UIKit +import SoraUI + +struct DappBrowserSectionHeaderViewViewModel { + let title: String + let isAllHidden: Bool +} + +final class DappBrowserSectionHeaderView: UITableViewHeaderFooterView { + var locale: Locale = .current { + didSet { + setupLocalization() + } + } + + let containerView: TriangularedView = { + let containerView = TriangularedView() + containerView.fillColor = R.color.colorWhite4()! + containerView.highlightedFillColor = R.color.colorWhite4()! + containerView.shadowOpacity = 0 + return containerView + }() + + let titleLabel: UILabel = { + let label = UILabel() + label.font = .h5Title + label.textColor = .white + return label + }() + + let moreButton: UIButton = { + let button = UIButton(type: .custom) + button.titleLabel?.font = .capsTitle + button.setTitleColor(.white, for: .normal) + button.setImage(R.image.iconChevronRight(), for: .normal) + button.semanticContentAttribute = .forceRightToLeft + button.backgroundColor = R.color.colorWhite8() + return button + }() + + var allTapAction: (() -> Void)? + + override init(reuseIdentifier: String?) { + super.init(reuseIdentifier: reuseIdentifier) + setup() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override var intrinsicContentSize: CGSize { + CGSize(width: UIView.noIntrinsicMetric, height: 42) + } + + override func layoutSubviews() { + super.layoutSubviews() + moreButton.rounded() + } + + func configure(model: DappBrowserSectionHeaderViewViewModel) { + titleLabel.text = model.title + moreButton.isHidden = model.isAllHidden + containerView.cornerCut = .topLeft + containerView.cornersRaduis = .topRight + } + + // MARK: - Private methods + + private func setup() { + moreButton.addAction(UIAction(handler: { [weak self] _ in + self?.allButtonAction() + }), for: .touchUpInside) + + let separator = UIFactory.default.createSeparatorView() + contentView.addSubview(containerView) + containerView.addSubview(titleLabel) + containerView.addSubview(moreButton) + containerView.addSubview(separator) + + containerView.snp.makeConstraints { make in + make.top.bottom.equalToSuperview() + make.leading.trailing.equalToSuperview().inset(16) + } + moreButton.snp.makeConstraints { make in + make.width.greaterThanOrEqualTo(61) + make.height.equalTo(24) + make.trailing.equalToSuperview().inset(16) + make.centerY.equalToSuperview() + } + titleLabel.snp.makeConstraints { make in + make.centerY.equalToSuperview() + make.trailing.greaterThanOrEqualTo(moreButton.snp.leading).inset(16) + make.leading.equalToSuperview().offset(16) + } + separator.snp.makeConstraints { make in + make.top.equalTo(moreButton.snp.bottom).offset(8) + make.leading.trailing.equalToSuperview().inset(16) + make.height.equalTo(1.0 / UIScreen.main.scale) + } + + moreButton.setContentHuggingPriority(.required, for: .horizontal) + titleLabel.setContentHuggingPriority(.defaultLow, for: .horizontal) + } + + private func allButtonAction() { + allTapAction?() + } + + private func setupLocalization() { + moreButton.setTitle("See all", for: .normal) + } +} diff --git a/fearless/Modules/DappBrowser/View/DappBrowserViewLayout.swift b/fearless/Modules/DappBrowser/View/DappBrowserViewLayout.swift new file mode 100644 index 0000000000..eea5278f40 --- /dev/null +++ b/fearless/Modules/DappBrowser/View/DappBrowserViewLayout.swift @@ -0,0 +1,147 @@ +import UIKit + +final class DappBrowserViewLayout: UIView { + var locale: Locale = .current { + didSet { + applyLocalization() + } + } + + private let backgroundImageView: UIImageView = { + let imageView = UIImageView() + imageView.contentMode = .scaleAspectFill + imageView.image = R.image.backgroundImage() + return imageView + }() + + private let navigationContainerView = UIView() + + let switchWalletButton: UIButton = { + let button = UIButton() + button.setImage(R.image.iconFearlessRounded(), for: .normal) + return button + }() + + let walletNameTitle: UILabel = { + let label = UILabel() + label.font = .h4Title + label.textAlignment = .center + return label + }() + + let searchButton: UIButton = { + let button = UIButton() + button.backgroundColor = R.color.colorWhite8() + button.setImage(R.image.iconSearchWhite(), for: .normal) + button.clipsToBounds = true + return button + }() + + let selectNetworkButton = SelectedNetworkButton() + let segmentedControl = FWSegmentedControl() + + lazy var featuredView = DappBrowserFeaturedView() + + let tableContainer = UIView() + let tableView: UITableView = { + let view = UITableView(frame: .zero, style: .grouped) + view.separatorStyle = .none + view.contentInset = .zero + view.backgroundColor = .clear + view.contentInset = UIEdgeInsets( + top: 0, + left: 0, + bottom: UIConstants.actionHeight, + right: 0 + ) + return view + }() + + override init(frame: CGRect) { + super.init(frame: frame) + setup() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func layoutSubviews() { + super.layoutSubviews() + searchButton.rounded() + } + + private func setup() { + let walletInfoVStackView = UIFactory.default.createVerticalStackView(spacing: 6) + walletInfoVStackView.alignment = .center + walletInfoVStackView.distribution = .fill + + addSubview(backgroundImageView) + addSubview(navigationContainerView) + addSubview(tableContainer) + tableContainer.addSubview(tableView) + navigationContainerView.addSubview(switchWalletButton) + navigationContainerView.addSubview(walletInfoVStackView) + navigationContainerView.addSubview(searchButton) + walletInfoVStackView.addArrangedSubview(walletNameTitle) + walletInfoVStackView.addArrangedSubview(selectNetworkButton) + + backgroundImageView.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + navigationContainerView.snp.makeConstraints { make in + make.top.equalTo(safeAreaLayoutGuide) + make.leading.trailing.equalToSuperview() + } + switchWalletButton.snp.makeConstraints { make in + make.centerY.equalToSuperview() + make.leading.equalToSuperview().offset(16) + make.size.equalTo(40) + } + walletInfoVStackView.snp.makeConstraints { make in + make.centerX.equalToSuperview() + make.top.bottom.equalToSuperview().inset(16) + make.leading.greaterThanOrEqualTo(switchWalletButton.snp.trailing) + } + selectNetworkButton.snp.makeConstraints { make in + make.height.equalTo(22) + } + walletNameTitle.snp.makeConstraints { make in + make.leading.trailing.equalToSuperview().inset(UIConstants.minimalOffset) + } + searchButton.snp.makeConstraints { make in + make.size.equalTo(32) + make.centerY.equalToSuperview() + make.trailing.equalToSuperview().inset(16) + } + let segmentContainer = UIView() + addSubview(segmentContainer) + segmentContainer.addSubview(segmentedControl) + segmentedControl.snp.makeConstraints { make in + make.height.equalTo(32) + make.width.equalTo(segmentContainer.snp.width) + make.edges.equalToSuperview() + } + segmentContainer.snp.makeConstraints { make in + make.top.equalTo(navigationContainerView.snp.bottom) + make.leading.trailing.equalToSuperview().inset(16) + } + tableContainer.snp.makeConstraints { make in + make.top.equalTo(segmentContainer.snp.bottom).offset(16) + make.leading.trailing.equalToSuperview() + make.bottom.equalToSuperview() + } + tableView.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + } + + private func applyLocalization() { + let localizedItems = [ + "Discover dApp", + "Connected" + ] + segmentedControl.setSegmentItems(localizedItems) + } +} diff --git a/fearless/Modules/DappBrowserList/DappBrowserListAssembly.swift b/fearless/Modules/DappBrowserList/DappBrowserListAssembly.swift new file mode 100644 index 0000000000..6f6aad0486 --- /dev/null +++ b/fearless/Modules/DappBrowserList/DappBrowserListAssembly.swift @@ -0,0 +1,32 @@ +import UIKit +import SoraFoundation +import SSFModels + +final class DappBrowserListAssembly { + static func configureModule( + title: String, + dapps: [TonDapp], + wallet: MetaAccountModel + ) -> DappBrowserListModuleCreationResult? { + let localizationManager = LocalizationManager.shared + + let interactor = DappBrowserListInteractor() + let router = DappBrowserListRouter() + + let presenter = DappBrowserListPresenter( + wallet: wallet, + dapps: dapps, + interactor: interactor, + router: router, + localizationManager: localizationManager + ) + + let view = DappBrowserListViewController( + title: title, + output: presenter, + localizationManager: localizationManager + ) + + return (view, presenter) + } +} diff --git a/fearless/Modules/DappBrowserList/DappBrowserListInteractor.swift b/fearless/Modules/DappBrowserList/DappBrowserListInteractor.swift new file mode 100644 index 0000000000..fe64455067 --- /dev/null +++ b/fearless/Modules/DappBrowserList/DappBrowserListInteractor.swift @@ -0,0 +1,15 @@ +import UIKit + +protocol DappBrowserListInteractorOutput: AnyObject {} + +final class DappBrowserListInteractor { + // MARK: - Private properties + private weak var output: DappBrowserListInteractorOutput? +} + +// MARK: - DappBrowserListInteractorInput +extension DappBrowserListInteractor: DappBrowserListInteractorInput { + func setup(with output: DappBrowserListInteractorOutput) { + self.output = output + } +} diff --git a/fearless/Modules/DappBrowserList/DappBrowserListPresenter.swift b/fearless/Modules/DappBrowserList/DappBrowserListPresenter.swift new file mode 100644 index 0000000000..f8aaeb24c1 --- /dev/null +++ b/fearless/Modules/DappBrowserList/DappBrowserListPresenter.swift @@ -0,0 +1,91 @@ +import Foundation +import SSFModels +import SoraFoundation + +protocol DappBrowserListViewInput: ControllerBackedProtocol { + func didReceive(viewModels: [DappBrowserListCellViewModel]) +} + +protocol DappBrowserListInteractorInput: AnyObject { + func setup(with output: DappBrowserListInteractorOutput) +} + +final class DappBrowserListPresenter { + // MARK: Private properties + private weak var view: DappBrowserListViewInput? + private let router: DappBrowserListRouterInput + private let interactor: DappBrowserListInteractorInput + + private let wallet: MetaAccountModel + private let dapps: [TonDapp] + + // MARK: - Constructors + init( + wallet: MetaAccountModel, + dapps: [TonDapp], + interactor: DappBrowserListInteractorInput, + router: DappBrowserListRouterInput, + localizationManager: LocalizationManagerProtocol + ) { + self.wallet = wallet + self.dapps = dapps + self.interactor = interactor + self.router = router + self.localizationManager = localizationManager + } + + // MARK: - Private methods + + private func provideViewModel(search: String?) { + var apps = dapps + if let search, search.isNotEmpty { + apps = dapps.filter { $0.name.lowercased().contains(search.lowercased()) } + } + let viewModels = apps + .map { + DappBrowserListCellViewModel( + icon: RemoteImageViewModel(url: $0.url), + iconUrl: $0.icon, + name: $0.name, + description: $0.description, + dapp: $0 + ) + } + view?.didReceive(viewModels: viewModels) + } +} + +// MARK: - DappBrowserListViewOutput +extension DappBrowserListPresenter: DappBrowserListViewOutput { + func didSelect(dapp: TonDapp) { + router.showDapp( + from: view, + dapp: dapp, + wallet: wallet + ) + } + + func searchTextDidChanged(_ text: String?) { + provideViewModel(search: text) + } + + func didTapBackButton() { + router.dismiss(view: view) + } + + func didLoad(view: DappBrowserListViewInput) { + self.view = view + interactor.setup(with: self) + provideViewModel(search: nil) + } +} + +// MARK: - DappBrowserListInteractorOutput +extension DappBrowserListPresenter: DappBrowserListInteractorOutput {} + +// MARK: - Localizable +extension DappBrowserListPresenter: Localizable { + func applyLocalization() {} +} + +extension DappBrowserListPresenter: DappBrowserListModuleInput {} diff --git a/fearless/Modules/DappBrowserList/DappBrowserListProtocols.swift b/fearless/Modules/DappBrowserList/DappBrowserListProtocols.swift new file mode 100644 index 0000000000..c6967f18cd --- /dev/null +++ b/fearless/Modules/DappBrowserList/DappBrowserListProtocols.swift @@ -0,0 +1,18 @@ +import SSFModels + +typealias DappBrowserListModuleCreationResult = ( + view: DappBrowserListViewInput, + input: DappBrowserListModuleInput +) + +protocol DappBrowserListRouterInput: PresentDismissable { + func showDapp( + from view: ControllerBackedProtocol?, + dapp: TonDapp, + wallet: MetaAccountModel + ) +} + +protocol DappBrowserListModuleInput: AnyObject {} + +protocol DappBrowserListModuleOutput: AnyObject {} diff --git a/fearless/Modules/DappBrowserList/DappBrowserListRouter.swift b/fearless/Modules/DappBrowserList/DappBrowserListRouter.swift new file mode 100644 index 0000000000..7ba1973822 --- /dev/null +++ b/fearless/Modules/DappBrowserList/DappBrowserListRouter.swift @@ -0,0 +1,16 @@ +import Foundation +import SSFModels + +final class DappBrowserListRouter: DappBrowserListRouterInput { + func showDapp( + from view: ControllerBackedProtocol?, + dapp: TonDapp, + wallet: MetaAccountModel + ) { + guard let module = TonWebBridgeAssembly.configureModule(for: dapp, wallet: wallet) else { + return + } + + view?.controller.present(module.view.controller, animated: true) + } +} diff --git a/fearless/Modules/DappBrowserList/DappBrowserListViewController.swift b/fearless/Modules/DappBrowserList/DappBrowserListViewController.swift new file mode 100644 index 0000000000..8777d50154 --- /dev/null +++ b/fearless/Modules/DappBrowserList/DappBrowserListViewController.swift @@ -0,0 +1,170 @@ +import UIKit +import SoraUI +import SnapKit +import SoraFoundation + +protocol DappBrowserListViewOutput: AnyObject { + func didLoad(view: DappBrowserListViewInput) + func searchTextDidChanged(_ text: String?) + func didTapBackButton() + func didSelect(dapp: TonDapp) +} + +final class DappBrowserListViewController: UIViewController, ViewHolder, HiddableBarWhenPushed { + typealias RootViewType = DappBrowserListViewLayout + var keyboardHandler: FearlessKeyboardHandler? + + // MARK: Private properties + private let output: DappBrowserListViewOutput + + var viewModels: [DappBrowserListCellViewModel] = [] + + // MARK: - Constructor + init( + title: String, + output: DappBrowserListViewOutput, + localizationManager: LocalizationManagerProtocol? + ) { + self.output = output + super.init(nibName: nil, bundle: nil) + rootView.navigationBar.setTitle(title) + self.localizationManager = localizationManager + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Life cycle + override func loadView() { + view = DappBrowserListViewLayout() + } + + override func viewDidLoad() { + super.viewDidLoad() + output.didLoad(view: self) + bindActions() + configureTableView() + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + if keyboardHandler == nil { + setupKeyboardHandler() + } + } + + override func viewDidDisappear(_ animated: Bool) { + super.viewDidDisappear(animated) + clearKeyboardHandler() + } + + // MARK: - Private methods + + private func bindActions() { + rootView.navigationBar.backButton.addAction { [weak self] in + self?.output.didTapBackButton() + } + rootView.searchTextField.onTextDidChanged = { [weak self] text in + self?.output.searchTextDidChanged(text) + } + } + + private func configureTableView() { + rootView.tableView.separatorStyle = .none + rootView.tableView.registerClassForCell(DappBrowserListCell.self) + rootView.tableView.delegate = self + rootView.tableView.dataSource = self + rootView.tableView.rowHeight = 64 + } +} + +// MARK: - DappBrowserListViewInput +extension DappBrowserListViewController: DappBrowserListViewInput { + func didReceive(viewModels: [DappBrowserListCellViewModel]) { + self.viewModels = viewModels + rootView.tableView.reloadData() + reloadEmptyState(animated: true) + } +} + +// MARK: - Localizable +extension DappBrowserListViewController: Localizable { + func applyLocalization() { + rootView.locale = selectedLocale + } +} + +// MARK: - KeyboardViewAdoptable + +extension DappBrowserListViewController: KeyboardViewAdoptable { + var target: Constraint? { rootView.keyboardAdoptableConstraint } + + func offsetFromKeyboardWithInset(_: CGFloat) -> CGFloat { 0 } + func updateWhileKeyboardFrameChanging(_: CGRect) {} +} + +// MARK: - UITableViewDataSource + +extension DappBrowserListViewController: UITableViewDataSource { + func tableView(_: UITableView, numberOfRowsInSection _: Int) -> Int { + viewModels.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + guard + let viewModel = viewModels[safe: indexPath.row], + let cell = tableView.dequeueReusableCellWithType(DappBrowserListCell.self) + else { + return UITableViewCell() + } + cell.configure(model: viewModel, position: .list) + return cell + } +} + +// MARK: - UITableViewDelegate + +extension DappBrowserListViewController: UITableViewDelegate { + func tableView(_: UITableView, didSelectRowAt indexPath: IndexPath) { + guard let viewModel = viewModels[safe: indexPath.row] else { + return + } + let dapp = viewModel.dapp + output.didSelect(dapp: dapp) + } +} + +// MARK: - EmptyStateViewOwnerProtocol + +extension DappBrowserListViewController: EmptyStateViewOwnerProtocol { + var emptyStateDelegate: EmptyStateDelegate { self } + var emptyStateDataSource: EmptyStateDataSource { self } +} + +// MARK: - EmptyStateDataSource + +extension DappBrowserListViewController: EmptyStateDataSource { + var viewForEmptyState: UIView? { + let emptyView = EmptyView() + emptyView.image = R.image.iconWarning() + emptyView.title = R.string.localizable + .emptyViewTitle(preferredLanguages: selectedLocale.rLanguages) + emptyView.text = R.string.localizable.selectNetworkSearchEmptySubtitle(preferredLanguages: selectedLocale.rLanguages) + emptyView.iconMode = .bigFilledShadow + return emptyView + } + + var contentViewForEmptyState: UIView { + rootView.container + } +} + +// MARK: - EmptyStateDelegate + +extension DappBrowserListViewController: EmptyStateDelegate { + var shouldDisplayEmptyState: Bool { + viewModels.isEmpty + } +} diff --git a/fearless/Modules/DappBrowserList/DappBrowserListViewLayout.swift b/fearless/Modules/DappBrowserList/DappBrowserListViewLayout.swift new file mode 100644 index 0000000000..196461650a --- /dev/null +++ b/fearless/Modules/DappBrowserList/DappBrowserListViewLayout.swift @@ -0,0 +1,85 @@ +import UIKit +import SnapKit + +final class DappBrowserListViewLayout: UIView { + + var locale: Locale = .current { + didSet { + applyLocalization() + } + } + + var keyboardAdoptableConstraint: Constraint? + + let navigationBar: BaseNavigationBar = { + let view = BaseNavigationBar() + view.set(.present) + view.backgroundColor = R.color.colorBlack19() + return view + }() + + let searchTextField: SearchTextField = { + let searchTextField = SearchTextField() + searchTextField.triangularedView?.cornerCut = [.bottomRight, .topLeft] + searchTextField.triangularedView?.strokeWidth = 1 + searchTextField.triangularedView?.strokeColor = R.color.colorWhite8()! + searchTextField.triangularedView?.fillColor = R.color.colorBlack50()! + searchTextField.triangularedView?.highlightedFillColor = R.color.colorBlack50()! + searchTextField.triangularedView?.shadowOpacity = 0 + searchTextField.textField.backgroundColor = R.color.colorBlack50() + searchTextField.textField.tintColor = R.color.colorWhite50() + return searchTextField + }() + + let container = UIView() + let tableView: UITableView = { + let tableView = UITableView() + tableView.backgroundColor = R.color.colorBlack19() + return tableView + }() + + override init(frame: CGRect) { + super.init(frame: frame) + setupLayout() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + //MARK: - Private methods + + private func setupLayout() { + backgroundColor = R.color.colorBlack19() + addSubview(navigationBar) + addSubview(searchTextField) + addSubview(container) + container.addSubview(tableView) + + navigationBar.snp.makeConstraints { make in + make.top.equalToSuperview() + make.leading.trailing.equalToSuperview() + make.height.equalTo(56) + } + + searchTextField.snp.makeConstraints { make in + make.top.equalTo(navigationBar.snp.bottom) + make.leading.trailing.equalToSuperview().inset(UIConstants.bigOffset) + } + + container.snp.makeConstraints { make in + make.top.equalTo(searchTextField.snp.bottom).offset(UIConstants.offset12) + make.leading.trailing.equalToSuperview() + keyboardAdoptableConstraint = make.bottom.equalTo(safeAreaLayoutGuide).constraint + } + + tableView.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + } + + private func applyLocalization() { + searchTextField.textField.placeholder = R.string.localizable.commonSearch(preferredLanguages: locale.rLanguages) + } +} diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/dapps.json b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/dapps.json new file mode 100644 index 0000000000..5f2ccf4547 --- /dev/null +++ b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/dapps.json @@ -0,0 +1,163 @@ +[ + { + "type": "top", + "apps": [ + { + "identifier": "ed88b393-2ac3-4749-b864-dbc141c4188d", + "chains": ["-239"], + "name": "STON.fi", + "url": "https://app.ston.fi/", + "description": "Cross-chain DEX built on TON.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/stonfi.png" + }, + { + "identifier": "d32532fa-7306-4927-9cfa-04e164a17419", + "chains": ["-239"], + "name": "DeDust.io", + "url": "https://dedust.io/swap", + "description": "AMM DEX for the TON blockchain.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/dedust.jpg" + }, + { + "identifier": "3e4b07d5-8272-4381-9f69-37f008b2f386", + "chains": ["-239"], + "name": "TON Diamonds DEX", + "url": "https://ton.diamonds/dex/swap", + "description": "Find top jetton rates and get $GLINT cashback.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/tondiamonds.png" + }, + { + "identifier": "bd485b34-7e10-45da-8e20-a58f5acccdc3", + "chains": ["-239"], + "name": "Storm Trade", + "url": "https://storm.tg/", + "description": "Perps DEX with ×100 leverage.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/stormtrade.png" + }, + { + "identifier": "e6563c0f-abf3-4506-86f1-d61e03c9b2b6", + "chains": ["-239"], + "name": "swap.coffee", + "url": "https://swap.coffee/dex", + "description": "The most effective DEX Aggregator on TON. Smart routing and transaction splitting.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/swapcoffee.png" + } + ] + }, + { + "type": "featured", + "apps": [ + { + "identifier": "f745ab46-84fd-4669-940c-6cb4048a6372", + "chains": ["-239"], + "name": "Spinarium", + "url": "https://spintg.com/ru/games?category=popular", + "description": "Players' Choice 2024 - TON, Profitable and Safe casino!", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/spinarium.png" + } + ] + }, + { + "type": "utilities", + "apps": [ + { + "identifier": "aa592b75-9134-4708-8122-0b7d5519f593", + "chains": ["-239"], + "name": "Aqua Protocol", + "url": "https://app.aquaprotocol.xyz/mint", + "description": "Over-collaterized Stablecoin.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/aquaprotocol.png" + }, + { + "identifier": "c2301105-b592-45da-8039-a99552f05ccb", + "chains": ["-239"], + "name": "TON Fonates", + "url": "https://fonates.com/", + "description": "Send and accept donations on streams in TON.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/tonfonates.png" + }, + { + "identifier": "cd3357b7-7a79-4193-93b2-fe277eb18d8c", + "chains": ["-239"], + "name": "Tonnel Network", + "url": "https://www.tonnel.network/", + "description": "#1 Zero-Knowledge protocol on TON, Privacy for TON, JETTON, NFTs.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/tonnelnetwork.png" + } + ] + }, + { + "type": "nft", + "apps": [ + { + "identifier": "a2737106-e725-445a-8165-e3d128c51fcd", + "chains": ["-239"], + "name": "TON Diamonds", + "url": "https://ton.diamonds/", + "description": "Marketplace for digital artists and high-quality collections. The first NFT on TON.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/tondiamonds.png" + }, + { + "identifier": "327fcf07-18ed-4c84-a9d9-a0b3d8559540", + "chains": ["-239"], + "name": "Getgems.io", + "url": "https://getgems.io/", + "description": "The Home of NFT on The Open Network.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/getgems.jpg" + }, + { + "identifier": "8c4ecf28-417e-40bf-99c8-c243d539d628", + "chains": ["-239"], + "name": "DAOLama", + "url": "https://daolama.co/", + "description": "Use your NFTs as collateral to instantly get TON Coin.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/daolama.png" + } + ] + }, + { + "type": "defi", + "apps": [ + { + "identifier": "ed88b393-2ac3-4749-b864-dbc141c4188d", + "chains": ["-239"], + "name": "STON.fi", + "url": "https://app.ston.fi/", + "description": "Cross-chain DEX built on TON.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/stonfi.png" + }, + { + "identifier": "d32532fa-7306-4927-9cfa-04e164a17419", + "chains": ["-239"], + "name": "DeDust.io", + "url": "https://dedust.io/swap", + "description": "AMM DEX for the TON blockchain.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/dedust.jpg" + }, + { + "identifier": "3e4b07d5-8272-4381-9f69-37f008b2f386", + "chains": ["-239"], + "name": "TON Diamonds DEX", + "url": "https://ton.diamonds/dex/swap", + "description": "Find top jetton rates and get $GLINT cashback.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/tondiamonds.png" + }, + { + "identifier": "bd485b34-7e10-45da-8e20-a58f5acccdc3", + "chains": ["-239"], + "name": "Storm Trade", + "url": "https://storm.tg/", + "description": "Perps DEX with ×100 leverage.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/stormtrade.png" + }, + { + "identifier": "e6563c0f-abf3-4506-86f1-d61e03c9b2b6", + "chains": ["-239"], + "name": "swap.coffee", + "url": "https://swap.coffee/dex", + "description": "The most effective DEX Aggregator on TON. Smart routing and transaction splitting.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/swapcoffee.png" + } + ] + } +] diff --git a/fearless/Modules/MainTabBar/MainTabBarInteractor.swift b/fearless/Modules/MainTabBar/MainTabBarInteractor.swift index 426ad92666..a6dc757714 100644 --- a/fearless/Modules/MainTabBar/MainTabBarInteractor.swift +++ b/fearless/Modules/MainTabBar/MainTabBarInteractor.swift @@ -53,9 +53,6 @@ extension MainTabBarInteractor: MainTabBarInteractorInputProtocol { extension MainTabBarInteractor: EventVisitorProtocol { func processSelectedAccountChanged(event _: SelectedAccountChanged) { serviceCoordinator.updateOnAccountChange() - DispatchQueue.main.async { - self.presenter?.didReloadSelectedAccount() - } } } diff --git a/fearless/Modules/MainTabBar/MainTabBarPresenter.swift b/fearless/Modules/MainTabBar/MainTabBarPresenter.swift index fc4b93031b..179867e9e9 100644 --- a/fearless/Modules/MainTabBar/MainTabBarPresenter.swift +++ b/fearless/Modules/MainTabBar/MainTabBarPresenter.swift @@ -59,10 +59,6 @@ extension MainTabBarPresenter: MainTabBarPresenterProtocol { } extension MainTabBarPresenter: MainTabBarInteractorOutputProtocol { - func didReloadSelectedAccount() { - crowdloanListView = wireframe.showNewCrowdloan(on: view) as? UINavigationController - } - func didRequestImportAccount() { wireframe.presentAccountImport(on: view) } diff --git a/fearless/Modules/MainTabBar/MainTabBarProtocol.swift b/fearless/Modules/MainTabBar/MainTabBarProtocol.swift index a24eaf881c..0ab80d45d0 100644 --- a/fearless/Modules/MainTabBar/MainTabBarProtocol.swift +++ b/fearless/Modules/MainTabBar/MainTabBarProtocol.swift @@ -17,12 +17,10 @@ protocol MainTabBarInteractorInputProtocol: AnyObject { } protocol MainTabBarInteractorOutputProtocol: AnyObject { - func didReloadSelectedAccount() func didRequestImportAccount() } protocol MainTabBarWireframeProtocol: SheetAlertPresentable, AuthorizationAccessible, WarningPresentable, AppUpdatePresentable, PresentDismissable { - func showNewCrowdloan(on view: MainTabBarViewProtocol?) -> UIViewController? func presentAccountImport(on view: MainTabBarViewProtocol?) func replaceStaking(on view: MainTabBarViewProtocol?, type: AssetSelectionStakingType, moduleOutput: StakingMainModuleOutput?) func presentPolkaswap(on view: ControllerBackedProtocol?, wallet: MetaAccountModel) @@ -30,8 +28,4 @@ protocol MainTabBarWireframeProtocol: SheetAlertPresentable, AuthorizationAccess protocol MainTabBarViewFactoryProtocol: AnyObject { static func createView() -> MainTabBarViewProtocol? - - static func reloadCrowdloanView( - on view: MainTabBarViewProtocol - ) -> UIViewController? } diff --git a/fearless/Modules/MainTabBar/MainTabBarViewFactory.swift b/fearless/Modules/MainTabBar/MainTabBarViewFactory.swift index 66039c32c6..f16835c5b0 100644 --- a/fearless/Modules/MainTabBar/MainTabBarViewFactory.swift +++ b/fearless/Modules/MainTabBar/MainTabBarViewFactory.swift @@ -55,7 +55,7 @@ final class MainTabBarViewFactory: MainTabBarViewFactoryProtocol { applicationHandler: ApplicationHandler(), networkStatusPresenter: networkStatusPresenter, reachability: ReachabilityManager.shared, - walletConnectCoordinator: WalletConnectCoordinator(), + walletConnectCoordinator: WalletConnectCoordinator.shared, localizationManager: localizationManager ) @@ -78,7 +78,7 @@ final class MainTabBarViewFactory: MainTabBarViewFactoryProtocol { let walletController = createWalletController(walletConnect: walletConnect) viewControllers.append(walletController) - let crowdloanController = createCrowdloanController() + let crowdloanController = createBrowserController(wallet: wallet) viewControllers.append(crowdloanController) let polkaswapControoller = createPolkaswapController(wallet: wallet) @@ -93,16 +93,6 @@ final class MainTabBarViewFactory: MainTabBarViewFactoryProtocol { return viewControllers.compactMap { $0 } } - static func reloadCrowdloanView(on view: MainTabBarViewProtocol) -> UIViewController? { - guard let crowdloanController = createCrowdloanController() else { - return nil - } - - view.didReplaceView(for: crowdloanController, for: Self.crowdloanIndex) - - return crowdloanController - } - @discardableResult static func reloadStakingView( on view: MainTabBarViewProtocol, @@ -208,22 +198,14 @@ final class MainTabBarViewFactory: MainTabBarViewFactoryProtocol { return navigationController } - static func createCrowdloanController() -> UIViewController? { - let crowdloanState = CrowdloanSharedState() - crowdloanState.settings.setup() - - guard let selectedMetaAccount = SelectedWalletSettings.shared.value, - let crowloanView = CrowdloanListViewFactory.createView( - with: crowdloanState, - selectedMetaAccount: selectedMetaAccount - ) - else { + static func createBrowserController(wallet: MetaAccountModel) -> UIViewController? { + guard let controller = DappBrowserAssembly.configureModule(wallet: wallet)?.view.controller else { return nil } - let navigationController = FearlessNavigationController(rootViewController: crowloanView.controller) + let navigationController = FearlessNavigationController(rootViewController: controller) - let icon = R.image.iconTabCrowloan() + let icon = R.image.iconBrowser() let normalIcon = icon?.tinted(with: R.color.colorGray()!)? .withRenderingMode(.alwaysOriginal) let selectedIcon = icon?.tinted(with: R.color.colorWhite()!)? diff --git a/fearless/Modules/MainTabBar/MainTabBarWireframe.swift b/fearless/Modules/MainTabBar/MainTabBarWireframe.swift index 208f6d56bb..f119b084fd 100644 --- a/fearless/Modules/MainTabBar/MainTabBarWireframe.swift +++ b/fearless/Modules/MainTabBar/MainTabBarWireframe.swift @@ -17,16 +17,6 @@ final class MainTabBarWireframe: MainTabBarWireframeProtocol { presentingController.present(navigationController, animated: true, completion: nil) } - func showNewCrowdloan(on view: MainTabBarViewProtocol?) -> UIViewController? { - if let view = view { - return MainTabBarViewFactory.reloadCrowdloanView( - on: view - ) - } - - return nil - } - func presentAccountImport(on view: MainTabBarViewProtocol?) { guard let tabBarController = view?.controller else { return diff --git a/fearless/Modules/NetworkManagment/NetworkManagmentAssembly.swift b/fearless/Modules/NetworkManagment/NetworkManagmentAssembly.swift index e6cc8b2a8a..72d18b9843 100644 --- a/fearless/Modules/NetworkManagment/NetworkManagmentAssembly.swift +++ b/fearless/Modules/NetworkManagment/NetworkManagmentAssembly.swift @@ -5,6 +5,7 @@ import SSFModels final class NetworkManagmentAssembly { static func configureModule( + initialFilter: NetworkManagmentFilter? = nil, wallet: MetaAccountModel, chains: [ChainModel]?, contextTag: Int?, @@ -27,6 +28,7 @@ final class NetworkManagmentAssembly { let router = NetworkManagmentRouter() let presenter = NetworkManagmentPresenter( + initialFilter: initialFilter, wallet: wallet, interactor: interactor, router: router, diff --git a/fearless/Modules/NetworkManagment/NetworkManagmentPresenter.swift b/fearless/Modules/NetworkManagment/NetworkManagmentPresenter.swift index 778e336cb4..bf21a4184e 100644 --- a/fearless/Modules/NetworkManagment/NetworkManagmentPresenter.swift +++ b/fearless/Modules/NetworkManagment/NetworkManagmentPresenter.swift @@ -34,6 +34,7 @@ final class NetworkManagmentPresenter { // MARK: - Constructors init( + initialFilter: NetworkManagmentFilter?, wallet: MetaAccountModel, interactor: NetworkManagmentInteractorInput, router: NetworkManagmentRouterInput, @@ -51,7 +52,7 @@ final class NetworkManagmentPresenter { self.viewModelFactory = viewModelFactory self.contextTag = contextTag - initialFilter = NetworkManagmentFilter(identifier: wallet.networkManagmentFilter) + self.initialFilter = initialFilter ?? NetworkManagmentFilter(identifier: wallet.networkManagmentFilter) self.localizationManager = localizationManager } diff --git a/fearless/Modules/Onboarding/OnboardingViewLayout.swift b/fearless/Modules/Onboarding/OnboardingViewLayout.swift index 759bd04635..c2f12fa94e 100644 --- a/fearless/Modules/Onboarding/OnboardingViewLayout.swift +++ b/fearless/Modules/Onboarding/OnboardingViewLayout.swift @@ -27,8 +27,6 @@ final class OnboardingViewLayout: UIView { return view }() - let segmentedControl = FWSegmentedControl() - let nextButton: TriangularedButton = { let button = TriangularedButton() button.applyEnabledStyle() diff --git a/fearless/Modules/Root/RootInteractor.swift b/fearless/Modules/Root/RootInteractor.swift index f0dbdde77b..f0c5d92ef4 100644 --- a/fearless/Modules/Root/RootInteractor.swift +++ b/fearless/Modules/Root/RootInteractor.swift @@ -44,8 +44,13 @@ final class RootInteractor { callbackUrl: callbackUrl, eventCenter: eventCenter ) + let tonConnectUrlHandler = TonConnectUrlHandling() - URLHandlingService.shared.setup(children: [purchaseHandler, keystoreImportService]) + URLHandlingService.shared.setup(children: [ + purchaseHandler, + keystoreImportService, + tonConnectUrlHandler + ]) } private func runMigrators() { diff --git a/fearless/Modules/ScanQR/ScanQRAssembly.swift b/fearless/Modules/ScanQR/ScanQRAssembly.swift index 1318178784..b4bbd66c6a 100644 --- a/fearless/Modules/ScanQR/ScanQRAssembly.swift +++ b/fearless/Modules/ScanQR/ScanQRAssembly.swift @@ -43,9 +43,11 @@ final class ScanQRAssembly { static var defaultMatchers: [QRMatcher] { [ QRInfoMatcher(decoder: QRDecoderDefault()), - QRUriMatcherImpl(scheme: "wc") + QRUriMatcherImpl(scheme: "wc"), + TonConnectMatcherImpl() ] } static let wcSchemeMatcher = QRUriMatcherImpl(scheme: "wc") + static let tonConnectMatcher = TonConnectMatcherImpl() } diff --git a/fearless/Modules/TonWebBridge/Models/DappBridgeMessageType.swift b/fearless/Modules/TonWebBridge/Models/DappBridgeMessageType.swift new file mode 100644 index 0000000000..e50b523556 --- /dev/null +++ b/fearless/Modules/TonWebBridge/Models/DappBridgeMessageType.swift @@ -0,0 +1,7 @@ +import Foundation + +enum DappBridgeMessageType: String, Codable { + case invokeRnFunc + case functionResponse + case event +} diff --git a/fearless/Modules/TonWebBridge/Models/DappBridgeResponse.swift b/fearless/Modules/TonWebBridge/Models/DappBridgeResponse.swift new file mode 100644 index 0000000000..5975328900 --- /dev/null +++ b/fearless/Modules/TonWebBridge/Models/DappBridgeResponse.swift @@ -0,0 +1,38 @@ +import Foundation + +struct DappBridgeResponse { + enum Status: String { + case fulfilled + case rejected + } + + enum Data { + case data(String) + case error(Int) + } + + let invocationId: String + let status: Status + let data: Data + + var json: String? { + var dictionary: [String: Any] = [ + "invocationId": invocationId, + "status": status.rawValue, + "type": "functionResponse" + ] + switch data { + case let .data(data): + dictionary["data"] = data + case let .error(error): + dictionary["data"] = error + } + guard + let data = try? JSONSerialization.data(withJSONObject: dictionary), + let dataString = String(data: data, encoding: .utf8) + else { + return nil + } + return dataString + } +} diff --git a/fearless/Modules/TonWebBridge/Models/SendTransactionSignRequest.swift b/fearless/Modules/TonWebBridge/Models/SendTransactionSignRequest.swift new file mode 100644 index 0000000000..51fee6a7ce --- /dev/null +++ b/fearless/Modules/TonWebBridge/Models/SendTransactionSignRequest.swift @@ -0,0 +1,21 @@ +import Foundation +import TonSwift +import SSFModels + +struct SendTransactionSignRequest: Decodable { + let params: [SendTransactionParam] + + enum CodingKeys: String, CodingKey { + case params + } + + init(from decoder: Decoder) throws { + var container = try decoder.unkeyedContainer() + var params = [SendTransactionParam]() + while !container.isAtEnd { + let param = try container.decode(SendTransactionParam.self) + params.append(param) + } + self.params = params + } +} diff --git a/fearless/Modules/TonWebBridge/Models/TonConnect.swift b/fearless/Modules/TonWebBridge/Models/TonConnect.swift new file mode 100644 index 0000000000..6342653fff --- /dev/null +++ b/fearless/Modules/TonWebBridge/Models/TonConnect.swift @@ -0,0 +1,219 @@ +import Foundation +import TonSwift + +struct Info: Encodable { + let isWalletBrowser: Bool + let deviceInfo: TonConnect.DeviceInfo + let protocolVersion: Int +} + +enum TonConnect {} + +extension TonConnect { + enum ConnectEvent: Encodable { + case success(ConnectEventSuccess) + case error(ConnectEventError) + } + + struct DeviceInfo: Encodable { + let platform = "iphone" + let appName = "Tonkeeper" + let appVersion = "3.4.0" + let maxProtocolVersion = 2 + let features = [ + FeatureCompatible.legacy(Feature()), + FeatureCompatible.feature(Feature()) + ] + + enum FeatureCompatible: Encodable { + case feature(Feature) + case legacy(Feature) + + func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + switch self { + case let .feature(feature): + try container.encode(feature) + case let .legacy(feature): + try container.encode(feature.name) + } + } + } + + struct Feature: Encodable { + let name = "SendTransaction" + let maxMessages = 4 + } + + init() {} + } + + struct ConnectEventSuccess: Encodable { + struct Payload: Encodable { + let items: [ConnectItemReply] + let device: DeviceInfo + } + + let event = "connect" + let id = Int(Date().timeIntervalSince1970) + let payload: Payload + } + + struct ConnectEventError: Encodable { + struct Payload: Encodable { + let code: Error + let message: String + } + + enum Error: Int, Encodable, Swift.Error { + case unknownError = 0 + case badRequest = 1 + case appManifestNotFound = 2 + case appManifestContentError = 3 + case unknownApp = 100 + case userDeclinedTheConnection = 300 + } + + let event = "connect_error" + let id = Int(Date().timeIntervalSince1970) + let payload: Payload + } + + enum ConnectItemReply: Encodable { + case tonAddress(TonAddressItemReply) + case tonProof(TonProofItemReply) + } + + struct TonAddressItemReply: Encodable { + let name = "ton_addr" + let address: TonSwift.Address + let network: Int16 + let publicKey: TonSwift.PublicKey + let walletStateInit: TonSwift.StateInit + } + + enum TonProofItemReply: Encodable { + case success(TonProofItemReplySuccess) + case error(TonProofItemReplyError) + } + + struct TonProofItemReplySuccess: Encodable { + struct Proof: Encodable { + let timestamp: UInt64 + let domain: Domain + let signature: Signature + let payload: String + let privateKey: PrivateKey + } + + struct Signature: Encodable { + let address: TonSwift.Address + let domain: Domain + let timestamp: UInt64 + let payload: String + } + + struct Domain: Encodable { + let lengthBytes: UInt32 + let value: String + } + + let name = "ton_proof" + let proof: Proof + } + + struct TonProofItemReplyError: Encodable { + struct Error: Encodable { + let message: String? + let code: ErrorCode + } + + enum ErrorCode: Int, Encodable { + case unknownError = 0 + case methodNotSupported = 400 + } + + let name = "ton_proof" + let error: Error + } +} + +extension TonConnect.TonProofItemReplySuccess { + init( + address: TonSwift.Address, + domain: String, + payload: String, + privateKey: PrivateKey + ) { + let timestamp = UInt64(Date().timeIntervalSince1970) + let domain = Domain(domain: domain) + let signature = Signature( + address: address, + domain: domain, + timestamp: timestamp, + payload: payload + ) + let proof = Proof( + timestamp: timestamp, + domain: domain, + signature: signature, + payload: payload, + privateKey: privateKey + ) + + self.init(proof: proof) + } +} + +extension TonConnect.TonProofItemReplySuccess.Domain { + init(domain: String) { + let domainLength = UInt32(domain.utf8.count) + value = domain + lengthBytes = domainLength + } +} + +extension TonConnect { + enum SendTransactionResponse { + case success(SendTransactionResponseSuccess) + case error(SendTransactionResponseError) + } + + struct SendTransactionResponseSuccess: Encodable { + let result: String + let id: String + + init(result: String, id: String) { + self.result = result + self.id = id + } + } + + struct SendTransactionResponseError: Encodable { + struct Error: Encodable { + let code: ErrorCode + let message: String + + init(code: ErrorCode, message: String) { + self.code = code + self.message = message + } + } + + enum ErrorCode: Int, Encodable, Swift.Error { + case unknownError = 0 + case badRequest = 1 + case unknownApp = 10 + case userDeclinedTransaction = 300 + case methodNotSupported = 400 + } + + let id: String + let error: Error + + init(id: String, error: Error) { + self.id = id + self.error = error + } + } +} diff --git a/fearless/Modules/TonWebBridge/Models/TonConnectApp.swift b/fearless/Modules/TonWebBridge/Models/TonConnectApp.swift new file mode 100644 index 0000000000..3e75149566 --- /dev/null +++ b/fearless/Modules/TonWebBridge/Models/TonConnectApp.swift @@ -0,0 +1,30 @@ +import Foundation +import TonSwift +import RobinHood + +struct TonConnectApp: Codable, Identifiable { + var identifier: String { + [walletId, appUrl.absoluteString].joined(separator: "-") + } + + let walletId: String + let clientId: String + let appUrl: URL + let publicKey: Data + let privateKey: Data + + enum CodingKeys: CodingKey { + case walletId + case clientId + case appUrl + case publicKey + case privateKey + } + + var keyPair: TonSwift.KeyPair { + TonSwift.KeyPair( + publicKey: PublicKey(data: publicKey), + privateKey: PrivateKey(data: privateKey) + ) + } +} diff --git a/fearless/Modules/TonWebBridge/Models/TonConnectAppRequest.swift b/fearless/Modules/TonWebBridge/Models/TonConnectAppRequest.swift new file mode 100644 index 0000000000..b05bf5db00 --- /dev/null +++ b/fearless/Modules/TonWebBridge/Models/TonConnectAppRequest.swift @@ -0,0 +1,33 @@ +import Foundation +import TonSwift +import SSFModels + +extension TonConnect { + struct AppRequest: Codable { + enum Method: String, Codable { + case sendTransaction + } + + let method: Method + let params: [SendTransactionParam] + let id: String + + enum CodingKeys: String, CodingKey { + case method + case params + case id + } + + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + method = try container.decode(Method.self, forKey: .method) + id = try container.decode(String.self, forKey: .id) + let paramsArray = try container.decode([String].self, forKey: .params) + let jsonDecoder = JSONDecoder() + params = paramsArray.compactMap { + guard let data = $0.data(using: .utf8) else { return nil } + return try? jsonDecoder.decode(SendTransactionParam.self, from: data) + } + } + } +} diff --git a/fearless/Modules/TonWebBridge/Models/TonConnectDessision.swift b/fearless/Modules/TonWebBridge/Models/TonConnectDessision.swift new file mode 100644 index 0000000000..b18228d8a0 --- /dev/null +++ b/fearless/Modules/TonWebBridge/Models/TonConnectDessision.swift @@ -0,0 +1,10 @@ +import Foundation + +enum TonConnectDessision { + case approve( + manifest: TonConnectManifest, + params: TonConnectParameters, + invocationId: String + ) + case reject(invocationId: String) +} diff --git a/fearless/Modules/TonWebBridge/Models/TonConnectModels.swift b/fearless/Modules/TonWebBridge/Models/TonConnectModels.swift new file mode 100644 index 0000000000..2e10b971a7 --- /dev/null +++ b/fearless/Modules/TonWebBridge/Models/TonConnectModels.swift @@ -0,0 +1,14 @@ +import Foundation + +struct DappFunctionInvokeMessage { + let type: DappBridgeFunctionType + let invocationId: String + let args: [Any] +} + +enum DappBridgeFunctionType: String, Codable { + case send + case connect + case restoreConnection + case disconnect +} diff --git a/fearless/Modules/TonWebBridge/Models/TonConnectResponses+Encodable.swift b/fearless/Modules/TonWebBridge/Models/TonConnectResponses+Encodable.swift new file mode 100644 index 0000000000..0c074929ba --- /dev/null +++ b/fearless/Modules/TonWebBridge/Models/TonConnectResponses+Encodable.swift @@ -0,0 +1,127 @@ +import Foundation +import TonSwift +import TweetNacl + +extension TonConnect.ConnectEvent { + func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + switch self { + case let .success(success): + try container.encode(success) + case let .error(error): + try container.encode(error) + } + } +} + +extension TonConnect.ConnectItemReply { + func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + switch self { + case let .tonAddress(address): + try container.encode(address) + case let .tonProof(proof): + try container.encode(proof) + } + } +} + +extension TonConnect.TonProofItemReply { + func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + switch self { + case let .success(success): + try container.encode(success) + case let .error(error): + try container.encode(error) + } + } +} + +extension TonConnect.TonAddressItemReply { + enum CodingKeys: String, CodingKey { + case name + case address + case network + case publicKey + case walletStateInit + } + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(name, forKey: .name) + try container.encode(address.toRaw(), forKey: .address) + try container.encode("\(network)", forKey: .network) + try container.encode(publicKey.hexString, forKey: .publicKey) + + let builder = Builder() + try walletStateInit.storeTo(builder: builder) + try container.encode( + builder.endCell().toBoc().base64EncodedString(), + forKey: .walletStateInit + ) + } +} + +extension TonConnect.TonProofItemReplySuccess.Signature { + func data() -> Data { + let string = "ton-proof-item-v2/".data(using: .utf8)! + let addressWorkchain = UInt32(bigEndian: UInt32(address.workchain)) + + let addressWorkchainData = withUnsafeBytes(of: addressWorkchain) { a in + Data(a) + } + let addressHash = address.hash + let domainLength = withUnsafeBytes(of: UInt32(littleEndian: domain.lengthBytes)) { a in + Data(a) + } + let domainValue = domain.value.data(using: .utf8)! + let timestamp = withUnsafeBytes(of: UInt64(littleEndian: timestamp)) { a in + Data(a) + } + let payload = payload.data(using: .utf8)! + + return string + addressWorkchainData + addressHash + domainLength + domainValue + timestamp + payload + } +} + +extension TonConnect.TonProofItemReplySuccess.Proof { + enum CodingKeys: String, CodingKey { + case timestamp + case domain + case signature + case payload + } + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(timestamp, forKey: .timestamp) + try container.encode(domain, forKey: .domain) + + let signatureMessageData = signature.data() + let signatureMessage = signatureMessageData.sha256() + guard let prefixData = Data(tonHex: "ffff"), + let tonConnectData = "ton-connect".data(using: .utf8) else { + return + } + let signatureData = (prefixData + tonConnectData + signatureMessage).sha256() + let signature = try TweetNacl.NaclSign.signDetached( + message: signatureData, + secretKey: privateKey.data + ) + try container.encode(signature, forKey: .signature) + try container.encode(payload, forKey: .payload) + } +} + +extension TonConnect.SendTransactionResponse: Encodable { + func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + switch self { + case let .success(success): + try container.encode(success) + case let .error(error): + try container.encode(error) + } + } +} diff --git a/fearless/Modules/TonWebBridge/Models/TonConnectSendDessision.swift b/fearless/Modules/TonWebBridge/Models/TonConnectSendDessision.swift new file mode 100644 index 0000000000..5492dba02d --- /dev/null +++ b/fearless/Modules/TonWebBridge/Models/TonConnectSendDessision.swift @@ -0,0 +1,15 @@ +import Foundation + +enum TonConnectSendDessision { + case sended( + invocationId: String, + response: TonConnect.SendTransactionResponse + ) + case error( + invocationId: String, + error: TonConnect.SendTransactionResponseError.ErrorCode + ) + case declined( + invocationId: String + ) +} diff --git a/fearless/Modules/TonWebBridge/Models/TonDapp.swift b/fearless/Modules/TonWebBridge/Models/TonDapp.swift new file mode 100644 index 0000000000..3fa393a699 --- /dev/null +++ b/fearless/Modules/TonWebBridge/Models/TonDapp.swift @@ -0,0 +1,44 @@ +import Foundation +import RobinHood + +struct TonDapp: Codable, Equatable, Identifiable { + let identifier: String + let chains: [String] + let name: String + let description: String? + let icon: URL + let poster: URL? + let url: URL + + static func == (lhs: TonDapp, rhs: TonDapp) -> Bool { + lhs.url.host == rhs.url.host + } + + enum CodingKeys: CodingKey { + case identifier + case chains + case name + case description + case icon + case poster + case url + } + + init( + identifier: String, + chains: [String], + name: String, + description: String?, + icon: URL, + poster: URL?, + url: URL + ) { + self.identifier = identifier + self.chains = chains + self.name = name + self.description = description + self.icon = icon + self.poster = poster + self.url = url + } +} diff --git a/fearless/Modules/TonWebBridge/TonWebBridgeAssembly.swift b/fearless/Modules/TonWebBridge/TonWebBridgeAssembly.swift new file mode 100644 index 0000000000..c85fef198e --- /dev/null +++ b/fearless/Modules/TonWebBridge/TonWebBridgeAssembly.swift @@ -0,0 +1,37 @@ +import UIKit +import SoraFoundation +import SSFModels + +final class TonWebBridgeAssembly { + static func configureModule( + for dapp: TonDapp, + wallet: MetaAccountModel + ) -> TonWebBridgeModuleCreationResult? { + let localizationManager = LocalizationManager.shared + + let interactor = TonWebBridgeInteractor( + tonConnectService: ServiceAssembly.shared.tonConnectService(), + chainRepository: ServiceAssembly.shared.asyncChainModelRepository() + ) + let router = TonWebBridgeRouter() + + let presenter = TonWebBridgePresenter( + dapp: dapp, + wallet: wallet, + messageBuilder: TonWebBridgeMessagesBuilderImpl(), + interactor: interactor, + router: router, + logger: ServiceAssembly.shared.logger, + localizationManager: localizationManager + ) + + let view = TonWebBridgeViewController( + title: dapp.name, + initialUrl: dapp.url, + output: presenter, + localizationManager: localizationManager + ) + + return (view, presenter) + } +} diff --git a/fearless/Modules/TonWebBridge/TonWebBridgeHeaderView.swift b/fearless/Modules/TonWebBridge/TonWebBridgeHeaderView.swift new file mode 100644 index 0000000000..816a4ac2f3 --- /dev/null +++ b/fearless/Modules/TonWebBridge/TonWebBridgeHeaderView.swift @@ -0,0 +1,123 @@ +import UIKit + +final class TonWebBridgeHeaderView: UIView { + let titleLabel: UILabel = { + let label = UILabel() + label.font = .h3Title + label.textColor = R.color.colorWhite() + label.textAlignment = .center + return label + }() + + let subtitleLabel: UILabel = { + let label = UILabel() + label.font = .p2Paragraph + label.textColor = R.color.colorGray() + label.textAlignment = .center + return label + }() + + let contentView = UIView() + + let closeButton: UIButton = { + let button = UIButton() + button.setImage(R.image.iconClose(), for: .normal) + button.layer.masksToBounds = true + button.backgroundColor = R.color.colorWhite8() + return button + }() + + let backButton: UIButton = { + let button = UIButton() + button.setImage(R.image.iconBack(), for: .normal) + button.layer.masksToBounds = true + button.backgroundColor = R.color.colorWhite8() + return button + }() + + override init(frame: CGRect) { + super.init(frame: frame) + setup() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func setTitle(_ title: String?) { + titleLabel.text = title + } + + func setSubtitle(_ title: String, isSecured: Bool) { + let subtitleResult = NSMutableAttributedString() + if isSecured, let lockImage = UIImage(systemName: "lock.fill") { + let attachment = NSTextAttachment(image: lockImage) + let attachmentString = NSMutableAttributedString(attachment: attachment) + let paragraphStyle = NSMutableParagraphStyle() + paragraphStyle.alignment = .center + attachmentString.addAttributes( + [ + .foregroundColor: R.color.colorGray()!, + .paragraphStyle: paragraphStyle + ], + range: NSRange( + location: 0, + length: attachmentString.length + ) + ) + subtitleResult.append(attachmentString) + subtitleResult.append(NSAttributedString(string: " ")) + } + + let attributtedTitle = NSAttributedString(string: title) + subtitleResult.append(attributtedTitle) + + subtitleLabel.attributedText = subtitleResult + } + + private func setup() { + addSubview(contentView) + contentView.addSubview(titleLabel) + contentView.addSubview(subtitleLabel) + contentView.addSubview(closeButton) + contentView.addSubview(backButton) + + setupConstraints() + } + + private func setupConstraints() { + backgroundColor = R.color.colorBlack19() + contentView.snp.makeConstraints { make in + make.top.equalTo(safeAreaLayoutGuide.snp.top) + make.left.right.bottom.equalTo(self) + make.height.equalTo(64) + } + + closeButton.snp.makeConstraints { make in + make.right.equalTo(contentView).offset(-8) + make.centerY.equalTo(contentView) + make.size.equalTo(32) + } + + backButton.snp.makeConstraints { make in + make.left.equalTo(contentView).offset(8) + make.centerY.equalTo(contentView) + make.size.equalTo(32) + } + + titleLabel.snp.makeConstraints { make in + make.bottom.equalTo(contentView.snp.centerY) + make.leading.equalTo(backButton.snp.trailing) + make.trailing.equalTo(closeButton.snp.leading) + make.width.lessThanOrEqualToSuperview() + } + + subtitleLabel.snp.makeConstraints { make in + make.top.equalTo(contentView.snp.centerY) + make.leading.equalTo(backButton.snp.trailing) + make.trailing.equalTo(closeButton.snp.leading) + make.width.lessThanOrEqualToSuperview() + } + } +} diff --git a/fearless/Modules/TonWebBridge/TonWebBridgeInteractor.swift b/fearless/Modules/TonWebBridge/TonWebBridgeInteractor.swift new file mode 100644 index 0000000000..4fe0ab2642 --- /dev/null +++ b/fearless/Modules/TonWebBridge/TonWebBridgeInteractor.swift @@ -0,0 +1,50 @@ +import UIKit +import SSFModels +import RobinHood + +protocol TonWebBridgeInteractorOutput: AnyObject {} + +final class TonWebBridgeInteractor { + // MARK: - Private properties + + private weak var output: TonWebBridgeInteractorOutput? + + private let tonConnectService: TonConnectService + private let chainRepository: AsyncAnyRepository + + init( + tonConnectService: TonConnectService, + chainRepository: AsyncAnyRepository + ) { + self.tonConnectService = tonConnectService + self.chainRepository = chainRepository + } +} + +// MARK: - TonWebBridgeInteractorInput + +extension TonWebBridgeInteractor: TonWebBridgeInteractorInput { + func getConnectedApp(for wallet: SSFModels.MetaAccountModel) async throws -> [TonConnectApp] { + try await tonConnectService.getConnectedApp(for: wallet) + } + + func connected(app: TonConnectApp) async { + await tonConnectService.saveConnected(app: app) + } + + func disconnected(app: TonConnectApp) async { + await tonConnectService.saveDisconnected(app: app) + } + + func getTonChain() async throws -> SSFModels.ChainModel? { + try await chainRepository.fetch(by: "-239", options: RepositoryFetchOptions()) + } + + func fetchManifest(with url: URL) async throws -> TonConnectManifest { + try await tonConnectService.fetchManifest(with: url) + } + + func setup(with output: TonWebBridgeInteractorOutput) { + self.output = output + } +} diff --git a/fearless/Modules/TonWebBridge/TonWebBridgeMessageBuilder.swift b/fearless/Modules/TonWebBridge/TonWebBridgeMessageBuilder.swift new file mode 100644 index 0000000000..53a1985ef7 --- /dev/null +++ b/fearless/Modules/TonWebBridge/TonWebBridgeMessageBuilder.swift @@ -0,0 +1,438 @@ +import Foundation +import SoraKeystore +import SSFModels +import WebKit +import TonSwift + +protocol TonWebBridgeMessagesBuilder { + func getConfiguration( + userContentController: WKUserContentController + ) -> WKWebViewConfiguration + + func getConnectEventSuccess( + wallet: MetaAccountModel + ) throws -> String + + func getDappFunctionInvokeMessage( + from body: Any + ) throws -> DappFunctionInvokeMessage + + func getTonConnectRequestPayload( + from message: DappFunctionInvokeMessage + ) throws -> TonConnectRequestPayload + + func getConnectEventSuccesResponse( + requestPayloadItems: [TonConnectRequestPayload.Item], + wallet: MetaAccountModel, + manifest: TonConnectManifest, + tonChainModel: ChainModel + ) throws -> String + + func getTonConnectAppRequest( + from message: DappFunctionInvokeMessage + ) throws -> TonConnect.AppRequest + + func encryptSuccessResponse( + successResponse: TonConnect.ConnectEventSuccess, + clientId: String, + sessionCrypto: TonConnectSessionCrypto + ) throws -> String + + func buildSendTransactionResponseError( + sessionCrypto: TonConnectSessionCrypto, + errorCode: TonConnect.SendTransactionResponseError.ErrorCode, + id: String, + clientId: String + ) throws -> String + + func buildSendTransactionResponseSuccess( + sessionCrypto: TonConnectSessionCrypto, + boc: String, + id: String, + clientId: String + ) throws -> String + + func getConnectEventSuccesResponse( + requestPayloadItems: [TonConnectRequestPayload.Item], + wallet: MetaAccountModel, + manifest: TonConnectManifest, + tonChainModel: ChainModel + ) throws -> TonConnect.ConnectEventSuccess +} + +final class TonWebBridgeMessagesBuilderImpl: TonWebBridgeMessagesBuilder { + + private enum Constants { + static let windowKey = "tonkeeper" + } + + func getConfiguration( + userContentController: WKUserContentController + ) -> WKWebViewConfiguration { + let configuration = WKWebViewConfiguration() + let script = WKUserScript( + source: dAppJsInjection(), + injectionTime: WKUserScriptInjectionTime.atDocumentStart, + forMainFrameOnly: true + ) + userContentController.addUserScript(script) + configuration.userContentController = userContentController + return configuration + } + + func getConnectEventSuccess( + wallet: MetaAccountModel + ) throws -> String { + guard + let address = wallet.tonAddress, + let publicKey = wallet.tonPublicKey, + let contract = wallet.tonWalletContract() + else { + throw ConvenienceError(error: "Missing TON") + } + + let replyItem = TonConnect.ConnectItemReply.tonAddress( + .init( + address: address, + network: -239, + publicKey: TonSwift.PublicKey(data: publicKey), + walletStateInit: contract.stateInit + ) + ) + let event = TonConnect.ConnectEventSuccess( + payload: .init( + items: [replyItem], + device: .init() + ) + ) + + let string = try getString(from: event) + return string + } + + func getDappFunctionInvokeMessage( + from body: Any + ) throws -> DappFunctionInvokeMessage { + guard + let string = body as? String, + let data = string.data(using: .utf8), + let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any], + let type = json["type"] as? String, + let messageType = DappBridgeMessageType(rawValue: type), + messageType == .invokeRnFunc, + let name = json["name"] as? String, + let functionType = DappBridgeFunctionType(rawValue: name), + let invocationId = json["invocationId"] as? String, + let args = json["args"] as? [Any] + else { + throw ConvenienceError(error: "Decoding error") + } + + let message = DappFunctionInvokeMessage( + type: functionType, + invocationId: invocationId, + args: args + ) + + return message + } + + func getTonConnectAppRequest( + from message: DappFunctionInvokeMessage + ) throws -> TonConnect.AppRequest { + guard message.args.isNotEmpty else { + throw TonConnect.SendTransactionResponseError.ErrorCode.badRequest + } + let data = try JSONSerialization.data(withJSONObject: message.args[0]) + let request = try JSONDecoder().decode(TonConnect.AppRequest.self, from: data) + return request + } + + func getTonConnectRequestPayload( + from message: DappFunctionInvokeMessage + ) throws -> TonConnectRequestPayload { + guard + message.args.count >= 2, + let connectPayload = message.args[1] as? [String: Any] + else { + throw ConvenienceError(error: "Invalidate message") + } + let data = try JSONSerialization.data(withJSONObject: connectPayload) + let payload = try JSONDecoder().decode(TonConnectRequestPayload.self, from: data) + return payload + } + + func getConnectEventSuccesResponse( + requestPayloadItems: [TonConnectRequestPayload.Item], + wallet: MetaAccountModel, + manifest: TonConnectManifest, + tonChainModel: ChainModel + ) throws -> String { + guard + let address = wallet.tonAddress, + let publicKey = wallet.tonPublicKey, + let walletStateInit = wallet.tonWalletContract()?.stateInit + else { + throw ConvenienceError(error: "Missing TON") + } + + let replyItems = try requestPayloadItems.compactMap { item in + switch item { + case .tonAddress: + return TonConnect.ConnectItemReply.tonAddress( + .init( + address: address, + network: -239, + publicKey: TonSwift.PublicKey(data: publicKey), + walletStateInit: walletStateInit + ) + ) + case let .tonProof(payload): + guard let accountResponse = wallet.fetch(for: tonChainModel.accountRequest()) else { + throw ConvenienceError(error: "Missing account response") + } + let walletPrivateKey = try getSecretKey( + for: tonChainModel, + metaId: wallet.metaId, + accountResponse: accountResponse + ) + return TonConnect.ConnectItemReply.tonProof(.success(.init( + address: address, + domain: manifest.host, + payload: payload, + privateKey: TonSwift.PrivateKey(data: walletPrivateKey) + ))) + case .unknown: + return nil + } + } + let successEvent = TonConnect.ConnectEventSuccess( + payload: .init( + items: replyItems, + device: .init() + ) + ) + + let string = try getString(from: successEvent) + return string + } + + func getConnectEventSuccesResponse( + requestPayloadItems: [TonConnectRequestPayload.Item], + wallet: MetaAccountModel, + manifest: TonConnectManifest, + tonChainModel: ChainModel + ) throws -> TonConnect.ConnectEventSuccess { + guard + let address = wallet.tonAddress, + let publicKey = wallet.tonPublicKey, + let walletStateInit = wallet.tonWalletContract()?.stateInit + else { + throw ConvenienceError(error: "Missing TON") + } + + let replyItems = try requestPayloadItems.compactMap { item in + switch item { + case .tonAddress: + return TonConnect.ConnectItemReply.tonAddress( + .init( + address: address, + network: -239, + publicKey: TonSwift.PublicKey(data: publicKey), + walletStateInit: walletStateInit + ) + ) + case let .tonProof(payload): + guard let accountResponse = wallet.fetch(for: tonChainModel.accountRequest()) else { + throw ConvenienceError(error: "Missing account response") + } + let walletPrivateKey = try getSecretKey( + for: tonChainModel, + metaId: wallet.metaId, + accountResponse: accountResponse + ) + return TonConnect.ConnectItemReply.tonProof(.success(.init( + address: address, + domain: manifest.host, + payload: payload, + privateKey: TonSwift.PrivateKey(data: walletPrivateKey) + ))) + case .unknown: + return nil + } + } + let successEvent = TonConnect.ConnectEventSuccess( + payload: .init( + items: replyItems, + device: .init() + ) + ) + + return successEvent + } + + func encryptSuccessResponse( + successResponse: TonConnect.ConnectEventSuccess, + clientId: String, + sessionCrypto: TonConnectSessionCrypto + ) throws -> String { + let responseData = try JSONEncoder().encode(successResponse) + guard let receiverPublicKey = Data(tonHex: clientId) else { + throw TonConnectServiceError.incorrectClientId + } + let response = try sessionCrypto.encrypt( + message: responseData, + receiverPublicKey: receiverPublicKey + ) + let base64Response = response.base64EncodedString() + return base64Response + } + + func buildSendTransactionResponseError( + sessionCrypto: TonConnectSessionCrypto, + errorCode: TonConnect.SendTransactionResponseError.ErrorCode, + id: String, + clientId: String + ) throws -> String { + let response = TonConnect.SendTransactionResponse.error(.init( + id: id, + error: .init(code: errorCode, message: "") + ) + ) + let transactionResponseData = try JSONEncoder().encode(response) + guard let receiverPublicKey = Data(tonHex: clientId) else { return "" } + + let encryptedTransactionResponse = try sessionCrypto.encrypt( + message: transactionResponseData, + receiverPublicKey: receiverPublicKey + ) + + return encryptedTransactionResponse.base64EncodedString() + } + + func buildSendTransactionResponseSuccess( + sessionCrypto: TonConnectSessionCrypto, + boc: String, + id: String, + clientId: String + ) throws -> String { + let response = TonConnect.SendTransactionResponse.success( + .init( + result: boc, + id: id + ) + ) + let transactionResponseData = try JSONEncoder().encode(response) + guard let receiverPublicKey = Data(tonHex: clientId) else { return "" } + + let encryptedTransactionResponse = try sessionCrypto.encrypt( + message: transactionResponseData, + receiverPublicKey: receiverPublicKey + ) + + return encryptedTransactionResponse.base64EncodedString() + } + + // MARK: - Private func + + private func getString(from event: Encodable) throws -> String { + let data = try JSONEncoder().encode(event) + guard let string = String(data: data, encoding: .utf8) else { + throw ConvenienceError(error: "Encoding error") + } + return string + } + + private func getSecretKey( + for chain: ChainModel, + metaId: String, + accountResponse: ChainAccountResponse + ) throws -> Data { + let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil + let tag: String = KeystoreTagV2.secretKeyTag(for: chain.ecosystem, metaId: metaId, accountId: accountId) + + let keystore = Keychain() + let secretKey = try keystore.fetchKey(for: tag) + return secretKey + } + + private func dAppJsInjection() -> String { + let deviceInfo = TonConnect.DeviceInfo() + let info = Info( + isWalletBrowser: true, + deviceInfo: deviceInfo, + protocolVersion: 2 + ) + guard + let infoData = try? JSONEncoder().encode(info), + var infoString = String(data: infoData, encoding: .utf8) + else { + return "" + } + infoString = String(describing: infoString).replacingOccurrences(of: "\\", with: "") + return """ + (() => { + if (!window.\(Constants.windowKey)) { + window.rnPromises = {}; + window.rnEventListeners = []; + window.invokeRnFunc = (name, args, resolve, reject) => { + const invocationId = btoa(Math.random()).substring(0, 12); + const timeoutMs = null; + const timeoutId = timeoutMs ? setTimeout(() => reject(new Error('bridge timeout for function with name: '+name+'')), timeoutMs) : null; + window.rnPromises[invocationId] = { resolve, reject, timeoutId } + window.webkit.messageHandlers.dapp.postMessage(JSON.stringify({ + type: '\(DappBridgeMessageType.invokeRnFunc.rawValue)', + invocationId: invocationId, + name, + args, + })); + }; + + window.addEventListener('message', ({ data }) => { + try { + const message = data; + console.log('message bridge', JSON.stringify(message)); + if (message.type === '\(DappBridgeMessageType.functionResponse.rawValue)') { + const promise = window.rnPromises[message.invocationId]; + + if (!promise) { + return; + } + + if (promise.timeoutId) { + clearTimeout(promise.timeoutId); + } + + if (message.status === 'fulfilled') { + promise.resolve(JSON.parse(message.data)); + } else { + promise.reject(new Error(message.data)); + } + + delete window.rnPromises[message.invocationId]; + } + + if (message.type === '\(DappBridgeMessageType.event.rawValue)') { + window.rnEventListeners.forEach((listener) => listener(message.event)); + } + } catch { } + }); + } + + const listen = (cb) => { + window.rnEventListeners.push(cb); + return () => { + const index = window.rnEventListeners.indexOf(cb); + if (index > -1) { + window.rnEventListeners.splice(index, 1); + } + }; + }; + + window.\(Constants.windowKey) = { + tonconnect: Object.assign(\(infoString),{ send: (...args) => {return new Promise((resolve, reject) => window.invokeRnFunc('send', args, resolve, reject))},connect: (...args) => {return new Promise((resolve, reject) => window.invokeRnFunc('connect', args, resolve, reject))},restoreConnection: (...args) => {return new Promise((resolve, reject) => window.invokeRnFunc('restoreConnection', args, resolve, reject))},disconnect: (...args) => {return new Promise((resolve, reject) => window.invokeRnFunc('disconnect', args, resolve, reject))} },{ listen }), + } + })(); + """ + } +} diff --git a/fearless/Modules/TonWebBridge/TonWebBridgePresenter.swift b/fearless/Modules/TonWebBridge/TonWebBridgePresenter.swift new file mode 100644 index 0000000000..f9891bcceb --- /dev/null +++ b/fearless/Modules/TonWebBridge/TonWebBridgePresenter.swift @@ -0,0 +1,340 @@ +import Foundation +import WebKit +import SoraFoundation +import SSFModels +import TonSwift + +protocol TonWebBridgeViewInput: ControllerBackedProtocol { + func evaulateJavaScript(_ javaScript: String) async throws + func didReceive(configuration: WKWebViewConfiguration) +} + +protocol TonWebBridgeInteractorInput: AnyObject { + func setup(with output: TonWebBridgeInteractorOutput) + func fetchManifest(with url: URL) async throws -> TonConnectManifest + func getTonChain() async throws -> ChainModel? + func connected(app: TonConnectApp) async + func disconnected(app: TonConnectApp) async + func getConnectedApp(for wallet: MetaAccountModel) async throws -> [TonConnectApp] +} + +final class TonWebBridgePresenter: NSObject { + // MARK: Private properties + + private weak var view: TonWebBridgeViewInput? + private let router: TonWebBridgeRouterInput + private let interactor: TonWebBridgeInteractorInput + private let logger: LoggerProtocol + private let coordinator = WalletConnectCoordinator.shared + + private var dapp: TonDapp + private let wallet: MetaAccountModel + private lazy var userContentController = WKUserContentController() + private let messageBuilder: TonWebBridgeMessagesBuilder + + // MARK: - Constructors + + init( + dapp: TonDapp, + wallet: MetaAccountModel, + messageBuilder: TonWebBridgeMessagesBuilder, + interactor: TonWebBridgeInteractorInput, + router: TonWebBridgeRouterInput, + logger: LoggerProtocol, + localizationManager: LocalizationManagerProtocol + ) { + self.dapp = dapp + self.wallet = wallet + self.messageBuilder = messageBuilder + self.interactor = interactor + self.router = router + self.logger = logger + super.init() + self.localizationManager = localizationManager + } + + // MARK: - Private methods + + private func provideWebViewConfiguration() { + let configuration = messageBuilder.getConfiguration( + userContentController: userContentController + ) + view?.didReceive(configuration: configuration) + } + + private func setBridgeMessage() { + userContentController.add(self, name: "dapp") + } + + // TODO: - Check is connected + private func reconnectToAppIfAlreadyConnected( + invocationId: String + ) async throws { + let apps = try await interactor.getConnectedApp(for: wallet) + guard apps.first(where: { $0.appUrl == dapp.url }) != nil else { + let error: TonConnect.ConnectEventError.Error = .unknownError + let response = DappBridgeResponse( + invocationId: invocationId, + status: .rejected, + data: .error(error.rawValue) + ) + try await sendResponse(response) + return + } + + let string = try messageBuilder.getConnectEventSuccess(wallet: wallet) + let response = DappBridgeResponse( + invocationId: invocationId, + status: .fulfilled, + data: .data(string) + ) + try await sendResponse(response) + } + + // MARK: Private handle methods + + private func handleMessage( + body: Any + ) async throws { + let invokeMessage = try messageBuilder.getDappFunctionInvokeMessage(from: body) + + switch invokeMessage.type { + case .send: + try await handleSend(message: invokeMessage) + case .connect: + try await handleConnect(message: invokeMessage) + case .restoreConnection: + try await reconnectToAppIfAlreadyConnected( + invocationId: invokeMessage.invocationId + ) + case .disconnect: + try await handleDisconnect() + } + } + + private func handleSend( + message: DappFunctionInvokeMessage + ) async throws { + let appRequest = try messageBuilder.getTonConnectAppRequest(from: message) + coordinator.send( + request: appRequest, + invocationId: message.invocationId, + wallet: wallet, + dapp: dapp, + delegate: self + ) + } + + private func handleConnect( + message: DappFunctionInvokeMessage + ) async throws { + let payload = try messageBuilder.getTonConnectRequestPayload(from: message) + let manifest = try await interactor.fetchManifest(with: payload.manifestUrl) + let parameters = TonConnectParameters( + version: .v2, + clientId: UUID().uuidString, + requestPayload: payload + ) + coordinator.suggestConnect( + manifest: manifest, + requestPayload: parameters, + invocationId: message.invocationId, + delegate: self + ) + } + + private func handleDisconnect() async throws { + let apps = try await interactor.getConnectedApp(for: wallet) + guard let connectedApp = apps.first(where: { $0.appUrl == dapp.url }) else { + return + } + await interactor.disconnected(app: connectedApp) + } + + private func handleSendMessage( + result: TonConnect.SendTransactionResponse, + invocationId: String + ) async throws { + let responseData = try JSONEncoder().encode(result) + guard let string = String(data: responseData, encoding: .utf8) else { + throw ConvenienceError(error: "Response data encoding error") + } + + let response = DappBridgeResponse( + invocationId: invocationId, + status: .fulfilled, + data: .data(string) + ) + try await sendResponse(response) + } + + // MARK: - Private send actions + + private func sendResponse( + _ response: DappBridgeResponse + ) async throws { + guard let responseJson = response.json else { return } + let js = """ + (function() { + window.dispatchEvent(new MessageEvent('message', { + data: \(responseJson) + })); + })(); + """ + try await view?.evaulateJavaScript(js) + } + + private func sendApprove( + manifest: TonConnectManifest, + params: TonConnectParameters, + invocationId: String + ) async throws { + guard let tonChainModel = try await interactor.getTonChain() else { + throw ConvenienceError(error: "Missing Ton Chain Model") + } + let responseString: String = try messageBuilder.getConnectEventSuccesResponse( + requestPayloadItems: params.requestPayload.items, + wallet: wallet, + manifest: manifest, + tonChainModel: tonChainModel + ) + + let response = DappBridgeResponse( + invocationId: invocationId, + status: .fulfilled, + data: .data(responseString) + ) + try await sendResponse(response) + + let sessionCrypto = try TonConnectSessionCrypto() + let connectedApp = TonConnectApp( + walletId: wallet.metaId, + clientId: params.clientId, + appUrl: manifest.url, + publicKey: sessionCrypto.keyPair.publicKey.data, + privateKey: sessionCrypto.keyPair.privateKey.data + ) + await interactor.connected(app: connectedApp) + } + + private func sendReject( + invocationId: String, + error: Int + ) async throws { + let response = DappBridgeResponse( + invocationId: invocationId, + status: .rejected, + data: .error(error) + ) + try await sendResponse(response) + } +} + +// MARK: - TonWebBridgeViewOutput + +extension TonWebBridgePresenter: TonWebBridgeViewOutput { + func didLoadInitialURL() { + Task { + do { + try await reconnectToAppIfAlreadyConnected(invocationId: "") + } catch { + logger.customError(error) + } + } + } + + func didLoad(view: TonWebBridgeViewInput) { + self.view = view + interactor.setup(with: self) + provideWebViewConfiguration() + setBridgeMessage() + } +} + +// MARK: - TonWebBridgeInteractorOutput + +extension TonWebBridgePresenter: TonWebBridgeInteractorOutput {} + +// MARK: - Localizable + +extension TonWebBridgePresenter: Localizable { + func applyLocalization() {} +} + +extension TonWebBridgePresenter: TonWebBridgeModuleInput {} + +// MARK: - WKScriptMessageHandler + +extension TonWebBridgePresenter: WKScriptMessageHandler { + public func userContentController( + _: WKUserContentController, + didReceive message: WKScriptMessage + ) { + Task { + do { + try await handleMessage(body: message.body) + } catch { + logger.customError(error) + } + } + } +} + +// MARK: - WalletConnectProposalModuleOutput + +extension TonWebBridgePresenter: WalletConnectProposalModuleOutput { + func tonConnect(dessision: TonConnectDessision) { + Task { + do { + switch dessision { + case let .approve(manifest, params, invocationId): + try await sendApprove( + manifest: manifest, + params: params, + invocationId: invocationId + ) + case let .reject(invocationId): + let error: TonConnect.ConnectEventError.Error = .unknownApp + try await sendReject( + invocationId: invocationId, + error: error.rawValue + ) + try await handleDisconnect() + } + } catch { + logger.customError(error) + } + } + } +} + +// MARK: - WalletConnectSessionModuleOutput + +extension TonWebBridgePresenter: WalletConnectSessionModuleOutput { + func tonConnectSend(dessision: TonConnectSendDessision) { + Task { + do { + switch dessision { + case let .sended(invocationId, sendTransactionResponse): + try await handleSendMessage( + result: sendTransactionResponse, + invocationId: invocationId + ) + case let .declined(invocationId): + let declineError: TonConnect.SendTransactionResponseError.ErrorCode = .userDeclinedTransaction + try await sendReject( + invocationId: invocationId, + error: declineError.rawValue + ) + case let .error(invocationId, errorCode): + try await sendReject( + invocationId: invocationId, + error: errorCode.rawValue + ) + } + } catch { + logger.customError(error) + } + } + } +} diff --git a/fearless/Modules/TonWebBridge/TonWebBridgeProtocols.swift b/fearless/Modules/TonWebBridge/TonWebBridgeProtocols.swift new file mode 100644 index 0000000000..415c07d2e1 --- /dev/null +++ b/fearless/Modules/TonWebBridge/TonWebBridgeProtocols.swift @@ -0,0 +1,10 @@ +typealias TonWebBridgeModuleCreationResult = ( + view: TonWebBridgeViewInput, + input: TonWebBridgeModuleInput +) + +protocol TonWebBridgeRouterInput: AnyObject {} + +protocol TonWebBridgeModuleInput: AnyObject {} + +protocol TonWebBridgeModuleOutput: AnyObject {} diff --git a/fearless/Modules/TonWebBridge/TonWebBridgeRouter.swift b/fearless/Modules/TonWebBridge/TonWebBridgeRouter.swift new file mode 100644 index 0000000000..16d9ad9c53 --- /dev/null +++ b/fearless/Modules/TonWebBridge/TonWebBridgeRouter.swift @@ -0,0 +1,3 @@ +import Foundation + +final class TonWebBridgeRouter: TonWebBridgeRouterInput {} diff --git a/fearless/Modules/TonWebBridge/TonWebBridgeViewController.swift b/fearless/Modules/TonWebBridge/TonWebBridgeViewController.swift new file mode 100644 index 0000000000..8a1467a1e0 --- /dev/null +++ b/fearless/Modules/TonWebBridge/TonWebBridgeViewController.swift @@ -0,0 +1,195 @@ +import UIKit +import WebKit +import SoraFoundation + +protocol TonWebBridgeViewOutput: AnyObject { + func didLoad(view: TonWebBridgeViewInput) + func didLoadInitialURL() +} + +final class TonWebBridgeViewController: UIViewController, ViewHolder, HiddableBarWhenPushed, LoadableViewProtocol { + typealias RootViewType = TonWebBridgeViewLayout + + var loadableContentView: UIView { + rootView.webView + } + + // MARK: Private properties + + private let output: TonWebBridgeViewOutput + + // MARK: - State + + private var url: URL { + didSet { + guard url.host != oldValue.host else { + return + } + didUpdateUrl() + } + } + + private var didLoadInitialURL = false { + didSet { + guard didLoadInitialURL else { return } + output.didLoadInitialURL() + didStopLoading() + } + } + + private var canGoBack: NSKeyValueObservation? + + // MARK: - Constructor + + init( + title: String, + initialUrl: URL, + output: TonWebBridgeViewOutput, + localizationManager: LocalizationManagerProtocol? + ) { + self.output = output + url = initialUrl + super.init(nibName: nil, bundle: nil) + self.title = title + self.localizationManager = localizationManager + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Life cycle + + override func loadView() { + view = TonWebBridgeViewLayout() + } + + override func viewDidLoad() { + super.viewDidLoad() + output.didLoad(view: self) + setupDelegate() + bindActions() + didUpdateUrl() + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + if !didLoadInitialURL { + didStartLoading() + } + } + + // MARK: - Private methods + + private func setupDelegate() { + rootView.webView.navigationDelegate = self + rootView.webView.uiDelegate = self + } + + private func bindActions() { + rootView.headerView.closeButton.addAction { [weak self] in + self?.rootView.webView.scrollView.layer.masksToBounds = true + self?.rootView.webView.layer.masksToBounds = true + self?.dismiss(animated: true) + } + rootView.headerView.backButton.addAction { [weak self] in + self?.rootView.webView.goBack() + } + + rootView.headerView.backButton.isHidden = true + canGoBack = rootView.webView.observe(\.canGoBack, options: .new) { [weak self] _, value in + guard let canGoBack = value.newValue else { return } + self?.rootView.headerView.backButton.isHidden = !canGoBack + } + } + + private func didUpdateUrl() { + rootView.headerView.setTitle(title) + if let serverTrust = rootView.webView.serverTrust { + SecTrustEvaluateAsyncWithError(serverTrust, .main) { _, isSecured, _ in + self.rootView.headerView.setSubtitle(self.url.host ?? "", isSecured: isSecured) + } + } else { + let components = URLComponents(string: url.absoluteString) + let isSecured = components?.scheme == "https" + rootView.headerView.setSubtitle(url.host ?? "", isSecured: isSecured) + } + } +} + +// MARK: - TonWebBridgeViewInput + +extension TonWebBridgeViewController: TonWebBridgeViewInput { + func didReceive(configuration: WKWebViewConfiguration) { + rootView.setupWebView(with: configuration) + setupDelegate() + + var urlRequest = URLRequest(url: url) + urlRequest.httpShouldHandleCookies = false + urlRequest.cachePolicy = .reloadIgnoringLocalAndRemoteCacheData + rootView.webView.load(urlRequest) + } + + func evaulateJavaScript(_ javaScript: String) async throws { + try await withCheckedThrowingContinuation { (continuation: CheckedContinuation) in + rootView.webView.evaluateJavaScript(javaScript) { _, error in + if let error { + continuation.resume(throwing: error) + } else { + continuation.resume() + } + } + } + } +} + +// MARK: - Localizable + +extension TonWebBridgeViewController: Localizable { + func applyLocalization() { + rootView.locale = selectedLocale + } +} + +// MARK: - WKNavigationDelegate + +extension TonWebBridgeViewController: WKNavigationDelegate { + public func webView( + _ webView: WKWebView, + didFinish _: WKNavigation! + ) { + guard let url = webView.url else { return } + if !didLoadInitialURL { + didLoadInitialURL = true + } + self.url = url + } + + public func webView( + _: WKWebView, + decidePolicyFor navigationAction: WKNavigationAction + ) async -> WKNavigationActionPolicy { + if let url = navigationAction.request.url, let host = url.host, host.contains("t.me") { + UIApplication.shared.open(url, options: [:], completionHandler: nil) + return .cancel + } + return .allow + } +} + +// MARK: - WKUIDelegate + +extension TonWebBridgeViewController: WKUIDelegate { + public func webView( + _ webView: WKWebView, + createWebViewWith _: WKWebViewConfiguration, + for navigationAction: WKNavigationAction, + windowFeatures _: WKWindowFeatures + ) -> WKWebView? { + if navigationAction.targetFrame == nil { + webView.load(navigationAction.request) + } + return nil + } +} diff --git a/fearless/Modules/TonWebBridge/TonWebBridgeViewLayout.swift b/fearless/Modules/TonWebBridge/TonWebBridgeViewLayout.swift new file mode 100644 index 0000000000..ea0e4926a9 --- /dev/null +++ b/fearless/Modules/TonWebBridge/TonWebBridgeViewLayout.swift @@ -0,0 +1,59 @@ +import UIKit +import WebKit + +final class TonWebBridgeViewLayout: UIView { + var locale: Locale = .current { + didSet { + applyLocalization() + } + } + + lazy var headerView = TonWebBridgeHeaderView() + lazy var webView = WKWebView(frame: .zero) + + override init(frame: CGRect) { + super.init(frame: frame) + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func layoutSubviews() { + super.layoutSubviews() + headerView.closeButton.rounded() + headerView.backButton.rounded() + } + + func setupWebView(with configuration: WKWebViewConfiguration) { + webView = WKWebView(frame: .zero, configuration: configuration) + webView.backgroundColor = R.color.colorBlack19() + webView.scrollView.backgroundColor = R.color.colorBlack19() + webView.isOpaque = false + webView.scrollView.layer.masksToBounds = false + webView.layer.masksToBounds = false + webView.scrollView.contentInsetAdjustmentBehavior = .never + setupLayout() + } + + // MARK: - Private methods + + private func setupLayout() { + backgroundColor = R.color.colorBlack19() + addSubview(webView) + addSubview(headerView) + + headerView.snp.makeConstraints { make in + make.top.equalTo(safeAreaLayoutGuide.snp.top) + make.leading.trailing.equalToSuperview() + } + webView.snp.makeConstraints { make in + make.top.equalTo(headerView.snp.bottom) + make.leading.trailing.equalToSuperview() + make.bottom.equalTo(safeAreaLayoutGuide.snp.bottom) + } + } + + private func applyLocalization() {} +} diff --git a/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferPresenter.swift b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferPresenter.swift index ec9d02443f..0bfda8c9d1 100644 --- a/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferPresenter.swift +++ b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferPresenter.swift @@ -7,6 +7,7 @@ import SSFModels protocol ConfirmTransferViewInput: ControllerBackedProtocol { func didReceive(viewModel: WalletSendConfirmViewModel) func didReceiveContinueButton(isReady: Bool) + func didStopLoading() } protocol ConfirmTransferInteractorInput: AnyObject { @@ -103,12 +104,13 @@ final class ConfirmTransferPresenter { } let hash = try await interactor.submit(transfer: transfer, chainAsset: chainAsset) + await view?.didStopLoading() Task { @MainActor in router.complete(on: view, title: hash, chainAsset: chainAsset) } } catch { guard let view else { return } - + await view.didStopLoading() Task { @MainActor in if let rpcError = error as? RPCResponse.Error, rpcError.code == -32000 { router.presentAmountTooHigh(from: view, locale: selectedLocale) diff --git a/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferViewController.swift b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferViewController.swift index d934ecc83d..e334a97942 100644 --- a/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferViewController.swift +++ b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferViewController.swift @@ -8,8 +8,11 @@ protocol ConfirmTransferViewOutput: AnyObject { func didTapScamWarningButton() } -final class ConfirmTransferViewController: UIViewController, ViewHolder, HiddableBarWhenPushed { +final class ConfirmTransferViewController: UIViewController, ViewHolder, HiddableBarWhenPushed, LoadableViewProtocol { typealias RootViewType = WalletSendConfirmViewLayout + var loadableContentView: UIView { + rootView.contentView + } // MARK: Private properties @@ -52,6 +55,7 @@ final class ConfirmTransferViewController: UIViewController, ViewHolder, Hiddabl } @objc private func continueButtonClicked() { + didStartLoading() output.didTapConfirmButton() } diff --git a/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsRouter.swift b/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsRouter.swift index b283b0e263..042c8d5463 100644 --- a/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsRouter.swift +++ b/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsRouter.swift @@ -6,7 +6,7 @@ final class WalletConnectActiveSessionsRouter: WalletConnectActiveSessionsRouter _ session: Session, view: ControllerBackedProtocol? ) { - let module = WalletConnectProposalAssembly.configureModule(status: .active(session)) + let module = WalletConnectProposalAssembly.configureModule(status: .active(.walletConnect(session))) guard let controller = module?.view.controller else { return } @@ -17,7 +17,13 @@ final class WalletConnectActiveSessionsRouter: WalletConnectActiveSessionsRouter output: ScanQRModuleOutput, view: ControllerBackedProtocol? ) { - let module = ScanQRAssembly.configureModule(moduleOutput: output, matchers: [ScanQRAssembly.wcSchemeMatcher]) + let module = ScanQRAssembly.configureModule( + moduleOutput: output, + matchers: [ + ScanQRAssembly.wcSchemeMatcher, + ScanQRAssembly.tonConnectMatcher + ] + ) guard let controller = module?.view.controller else { return } diff --git a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationAssembly.swift b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationAssembly.swift index c8d3185b32..6c474efed1 100644 --- a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationAssembly.swift +++ b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationAssembly.swift @@ -7,10 +7,20 @@ final class WalletConnectConfirmationAssembly { ) -> WalletConnectConfirmationModuleCreationResult? { let localizationManager = LocalizationManager.shared + guard + let accountResponse = inputData.wallet.fetch(for: inputData.chain.accountRequest()), + let bocFactory = try? ServiceAssembly.shared.tonBocFactory( + metaId: inputData.wallet.metaId, + accountResponse: accountResponse + ) + else { + return nil + } let interactor = WalletConnectConfirmationInteractor( walletConnect: WalletConnectServiceImpl.shared, inputData: inputData, - signer: WalletConnectSignerImpl(wallet: inputData.wallet) + signer: WalletConnectSignerImpl(wallet: inputData.wallet), + tonConnectService: ServiceAssembly.shared.tonConnectService() ) let router = WalletConnectConfirmationRouter() diff --git a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationInputData.swift b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationInputData.swift index 7fc9d8053b..ad8a1a1232 100644 --- a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationInputData.swift +++ b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationInputData.swift @@ -3,10 +3,33 @@ import SSFModels import WalletConnectSign struct WalletConnectConfirmationInputData { + enum Variant { + case walletConnect( + resuest: Request, + session: Session, + method: WalletConnectMethod + ) + case tonJsBridge( + invocationId: String, + dapp: TonDapp, + request: TonConnect.AppRequest, + moduleOutput: WalletConnectSessionModuleOutput? + ) + case tonConnect( + request: TonConnect.AppRequest, + app: TonConnectApp + ) + } + let wallet: MetaAccountModel let chain: ChainModel - let resuest: Request - let session: Session - let method: WalletConnectMethod + let variant: Variant let payload: WalletConnectPayload + + var moduleOutput: WalletConnectSessionModuleOutput? { + switch variant { + case .walletConnect, .tonConnect: return nil + case let .tonJsBridge(_, _, _, moduleOutput): return moduleOutput + } + } } diff --git a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationInteractor.swift b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationInteractor.swift index 06fcc52cc5..2dce162e31 100644 --- a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationInteractor.swift +++ b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationInteractor.swift @@ -1,4 +1,6 @@ import UIKit +import WalletConnectSign +import SSFTransferService protocol WalletConnectConfirmationInteractorOutput: AnyObject {} @@ -10,41 +12,101 @@ final class WalletConnectConfirmationInteractor { private let walletConnect: WalletConnectService private let inputData: WalletConnectConfirmationInputData private let signer: WalletConnectSigner + private let tonConnectService: TonConnectService init( walletConnect: WalletConnectService, inputData: WalletConnectConfirmationInputData, - signer: WalletConnectSigner + signer: WalletConnectSigner, + tonConnectService: TonConnectService ) { self.walletConnect = walletConnect self.inputData = inputData self.signer = signer + self.tonConnectService = tonConnectService } -} - -// MARK: - WalletConnectConfirmationInteractorInput -extension WalletConnectConfirmationInteractor: WalletConnectConfirmationInteractorInput { - func reject() async throws { - let signDecision: WalletConnectSignDecision = .rejected(request: inputData.resuest, error: .userRejected) - try await walletConnect.submit(signDecision: signDecision) - } + // MARK: - Private methods - func approve() async throws -> String? { + private func approveWalletConnect( + resuest: Request, + method: WalletConnectMethod + ) async throws -> String? { let signature = try await signer.sign( params: inputData.payload.payload, chain: inputData.chain, - method: inputData.method + method: method + ) + let signDecision: WalletConnectSignDecision = .signed( + request: resuest, + signature: signature ) - let signDecision: WalletConnectSignDecision = .signed(request: inputData.resuest, signature: signature) try await walletConnect.submit(signDecision: signDecision) - guard case .ethereumSendTransaction = inputData.method else { + guard case .ethereumSendTransaction = method else { return nil } return try? signature.get(String.self) } + private func approveTonTonJsBridge( + request: TonConnect.AppRequest + ) async throws -> String { + guard let parameter = request.params.first else { + throw ConvenienceError(error: "Missing Ton params") + } + let boc = try await tonConnectService.approveTonConnect( + wallet: inputData.wallet, + parameter: parameter + ) + return boc + } + + private func confirmTonConnect( + request: TonConnect.AppRequest, + app: TonConnectApp + ) async throws { + guard let parameter = request.params.first else { + throw ConvenienceError(error: "Missing Ton params") + } + + try await tonConnectService.confirmRequest( + wallet: inputData.wallet, + appRequest: request, + app: app, + parameter: parameter + ) + } +} + +// MARK: - WalletConnectConfirmationInteractorInput + +extension WalletConnectConfirmationInteractor: WalletConnectConfirmationInteractorInput { + func approve() async throws -> String? { + switch inputData.variant { + case let .walletConnect(request, _, method): + return try await approveWalletConnect( + resuest: request, + method: method + ) + case let .tonJsBridge(_, _, request, _): + return try await approveTonTonJsBridge(request: request) + case let .tonConnect(request: request, app: app): + try await confirmTonConnect(request: request, app: app) + return nil + } + } + + func cancelTonConnect( + appRequest: TonConnect.AppRequest, + app: TonConnectApp + ) async throws { + try await tonConnectService.cancelRequest( + appRequest: appRequest, + app: app + ) + } + func setup(with output: WalletConnectConfirmationInteractorOutput) { self.output = output } diff --git a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationPresenter.swift b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationPresenter.swift index 674c6c8e3f..4bd0d2621e 100644 --- a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationPresenter.swift +++ b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationPresenter.swift @@ -7,13 +7,17 @@ protocol WalletConnectConfirmationViewInput: ControllerBackedProtocol, LoadableV protocol WalletConnectConfirmationInteractorInput: AnyObject { func setup(with output: WalletConnectConfirmationInteractorOutput) - func reject() async throws func approve() async throws -> String? + func cancelTonConnect( + appRequest: TonConnect.AppRequest, + app: TonConnectApp + ) async throws } final class WalletConnectConfirmationPresenter { // MARK: Private properties + private weak var moduleOutput: WalletConnectSessionModuleOutput? private weak var view: WalletConnectConfirmationViewInput? private let router: WalletConnectConfirmationRouterInput private let interactor: WalletConnectConfirmationInteractorInput @@ -30,6 +34,7 @@ final class WalletConnectConfirmationPresenter { router: WalletConnectConfirmationRouterInput, localizationManager: LocalizationManagerProtocol ) { + moduleOutput = inputData.moduleOutput self.inputData = inputData self.viewModelFactory = viewModelFactory self.interactor = interactor @@ -66,6 +71,84 @@ final class WalletConnectConfirmationPresenter { locale: selectedLocale ) } + + private func approveWalletConnect() async throws { + let hash = try await interactor.approve() + Task { @MainActor in + showAllDone(hash: hash) + view?.didStopLoading() + } + } + + private func approveTonJsBridge( + requestId: String, + invocationId: String + ) async throws { + guard let boc = try await interactor.approve() else { + throw ConvenienceError(error: "Send boc ton connect error") + } + let response: TonConnect.SendTransactionResponse = .success( + TonConnect.SendTransactionResponseSuccess( + result: boc, + id: requestId + ) + ) + moduleOutput?.tonConnectSend( + dessision: .sended( + invocationId: invocationId, + response: response + ) + ) + Task { @MainActor in + router.dismiss(view: view) + view?.controller.onInteractionDismiss() + } + } + + private func approveTonConnect() async throws { + _ = try await interactor.approve() + Task { @MainActor in + router.dismiss(view: view) + view?.controller.onInteractionDismiss() + } + } + + private func handleWalletConnect(error: Error) { + Task { @MainActor in + view?.didStopLoading() + show(error: error) + } + } + + private func handleTonJsBridge( + error: Error, + invocationId: String + ) { + moduleOutput?.tonConnectSend( + dessision: .error( + invocationId: invocationId, + error: .unknownError + ) + ) + Task { @MainActor in + view?.didStopLoading() + show(error: error) + } + } + + private func cancelTonConnect( + appRequest: TonConnect.AppRequest, + app: TonConnectApp + ) async { + do { + try await interactor.cancelTonConnect( + appRequest: appRequest, + app: app + ) + } catch { + show(error: error) + } + } } // MARK: - WalletConnectConfirmationViewOutput @@ -83,15 +166,25 @@ extension WalletConnectConfirmationPresenter: WalletConnectConfirmationViewOutpu view?.didStartLoading() Task { do { - let hash = try await interactor.approve() - await MainActor.run { - showAllDone(hash: hash) - view?.didStopLoading() + switch inputData.variant { + case .walletConnect: + try await approveWalletConnect() + case let .tonJsBridge(invocationId, _, request, _): + try await approveTonJsBridge(requestId: request.id, invocationId: invocationId) + case let .tonConnect(request: request, app: app): + try await approveTonConnect() } } catch { - await MainActor.run { - view?.didStopLoading() - show(error: error) + switch inputData.variant { + case .walletConnect: + handleWalletConnect(error: error) + case let .tonJsBridge(invocationId, _, _, _): + handleTonJsBridge( + error: error, + invocationId: invocationId + ) + case let .tonConnect(request: request, app: app): + await cancelTonConnect(appRequest: request, app: app) } } } diff --git a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationViewModelFactory.swift b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationViewModelFactory.swift index 74b324f9ed..9fe4447f04 100644 --- a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationViewModelFactory.swift +++ b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationViewModelFactory.swift @@ -8,6 +8,7 @@ import Foundation import UIKit +import WalletConnectSign protocol WalletConnectConfirmationViewModelFactory { func buildViewModel() -> WalletConnectConfirmationViewModel @@ -27,6 +28,33 @@ final class WalletConnectConfirmationViewModelFactoryImpl: WalletConnectConfirma } func buildViewModel() -> WalletConnectConfirmationViewModel { + switch inputData.variant { + case let .walletConnect(request, session, method): + return buildWalletConnectViewModel( + resuest: request, + session: session, + method: method + ) + case let .tonJsBridge(_, dapp, request, moduleOutput): + return buildTonConnectViewModel( + appName: dapp.name, + appHost: dapp.url.host ?? "", + request: request + ) + case let .tonConnect(request: request, app: app): + return buildTonConnectViewModel( + appName: app.appUrl.absoluteString, + appHost: app.appUrl.host ?? "", + request: request + ) + } + } + + private func buildWalletConnectViewModel( + resuest _: Request, + session: Session, + method: WalletConnectMethod + ) -> WalletConnectConfirmationViewModel { let originShadowColor = HexColorConverter.hexStringToUIColor( hex: inputData.chain.utilityAssets().first?.color )?.cgColor @@ -35,22 +63,47 @@ final class WalletConnectConfirmationViewModelFactoryImpl: WalletConnectConfirma shadowColor: originShadowColor ) - let dAppUrlString = inputData.session.peer.url + let dAppUrlString = session.peer.url let dAppUrl = URL(string: dAppUrlString) let host = dAppUrl?.host ?? dAppUrlString return WalletConnectConfirmationViewModel( symbolViewModel: symbolViewModel, - method: inputData.method.rawValue, + method: method.rawValue, amount: nil, walletName: inputData.wallet.name, - dApp: inputData.session.peer.name, + dApp: session.peer.name, host: host, chain: inputData.chain.name, rawData: rawDataAttributed() ) } + private func buildTonConnectViewModel( + appName: String, + appHost: String, + request: TonConnect.AppRequest + ) -> WalletConnectConfirmationViewModel { + let originShadowColor = HexColorConverter.hexStringToUIColor( + hex: inputData.chain.utilityAssets().first?.color + )?.cgColor + let symbolViewModel = SymbolViewModel( + iconViewModel: RemoteImageViewModel(url: inputData.chain.icon), + shadowColor: originShadowColor + ) + + return WalletConnectConfirmationViewModel( + symbolViewModel: symbolViewModel, + method: request.method.rawValue, + amount: nil, + walletName: inputData.wallet.name, + dApp: appName, + host: appHost, + chain: inputData.chain.name, + rawData: rawDataAttributed() + ) + } + // MARK: - Private methods private func rawDataAttributed() -> NSAttributedString { diff --git a/fearless/Modules/WalletConnectProposal/Model/SessionStatus.swift b/fearless/Modules/WalletConnectProposal/Model/SessionStatus.swift new file mode 100644 index 0000000000..91b9e62d3c --- /dev/null +++ b/fearless/Modules/WalletConnectProposal/Model/SessionStatus.swift @@ -0,0 +1,63 @@ +import Foundation +import WalletConnectSign + +enum SessionStatus { + case proposal(ConnectProposal) + case active(ActionConnect) + + var proposal: Session.Proposal? { + switch self { + case let .proposal(proposal): + switch proposal { + case let .walletConnect(proposal): + return proposal + case .tonJsBridge, .tonConnect: + return nil + } + case .active: + return nil + } + } + + var tonManifest: TonConnectManifest? { + switch self { + case let .proposal(proposal): + switch proposal { + case .walletConnect: + return nil + case let .tonJsBridge(manifest, _, _, _): + return manifest + case let .tonConnect(manifest, _): + return manifest + } + case .active: + return nil + } + } + + var session: Session? { + switch self { + case .proposal: + return nil + case let .active(session): + switch session { + case let .walletConnect(session): + return session + } + } + } + + var moduleOutput: WalletConnectProposalModuleOutput? { + switch self { + case let .proposal(proposal): + switch proposal { + case .walletConnect, .tonConnect: + return nil + case let .tonJsBridge(_, _, _, delegate): + return delegate + } + case .active: + return nil + } + } +} diff --git a/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModel.swift b/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModel.swift index cef782f931..41f3f19954 100644 --- a/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModel.swift +++ b/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModel.swift @@ -56,6 +56,16 @@ enum WalletConnectProposalCellModel { self = .optionalExpandable(viewModel) } + func deselectWallet() -> Self { + switch self { + case let .wallet(walletViewModel): + var viewModel = walletViewModel + viewModel.isSelected = false + return .wallet(viewModel) + default: return self + } + } + struct DetailsViewModel { let title: String let subtitle: String @@ -64,26 +74,46 @@ enum WalletConnectProposalCellModel { struct ExpandableViewModel { let cellTitle: String - let chain: String - let methods: String - let events: String + + let title: String + + let title2: String? + let subtitle2: String? + + let title3: String? + let subtitle3: String? + let isExpanded: Bool func toggle() -> Self { ExpandableViewModel( cellTitle: cellTitle, - chain: chain, - methods: methods, - events: events, + title: title, + title2: title2, + subtitle2: subtitle2, + title3: title3, + subtitle3: subtitle3, isExpanded: !isExpanded ) } + + func isVisibleSection2() -> Bool { + [title2?.isNotEmpty, subtitle2?.isNotEmpty] + .compactMap { $0 } + .allSatisfy { $0 } + } + + func isVisibleSection3() -> Bool { + [title3?.isNotEmpty, subtitle3?.isNotEmpty] + .compactMap { $0 } + .allSatisfy { $0 } + } } struct WalletViewModel { let metaId: String let walletName: String - let isSelected: Bool + var isSelected: Bool func toggle() -> Self { WalletViewModel( diff --git a/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModelFactory.swift b/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModelFactory.swift index f29849ced2..6c8d44e703 100644 --- a/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModelFactory.swift +++ b/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModelFactory.swift @@ -3,15 +3,7 @@ import WalletConnectSign import SSFModels protocol WalletConnectProposalViewModelFactory { - func buildProposalSessionViewModel( - proposal: Session.Proposal, - chains: [ChainModel], - wallets: [MetaAccountModel], - locale: Locale - ) throws -> WalletConnectProposalViewModel - - func buildActiveSessionViewModel( - session: Session, + func buildViewModel( chains: [ChainModel], wallets: [MetaAccountModel], locale: Locale @@ -25,23 +17,139 @@ protocol WalletConnectProposalViewModelFactory { final class WalletConnectProposalViewModelFactoryImpl: WalletConnectProposalViewModelFactory { private let walletConnectModelFactory: WalletConnectModelFactory - private let status: WalletConnectProposalPresenter.SessionStatus + private let status: SessionStatus init( - status: WalletConnectProposalPresenter.SessionStatus, + status: SessionStatus, walletConnectModelFactory: WalletConnectModelFactory ) { self.status = status self.walletConnectModelFactory = walletConnectModelFactory } - func buildProposalSessionViewModel( - proposal: Session.Proposal, + func buildViewModel( chains: [ChainModel], wallets: [MetaAccountModel], locale: Locale ) throws -> WalletConnectProposalViewModel { - let dApp = createDAppViewModel(from: proposal) + switch status { + case let .proposal(connectProposal): + switch connectProposal { + case .walletConnect: + return try buildWalletConenctProposalSessionViewModel( + chains: chains, + wallets: wallets, + locale: locale + ) + case .tonJsBridge, .tonConnect: + return try buildTonConenctProposalSessionViewModel( + chains: chains, + wallets: wallets, + locale: locale + ) + } + case let .active(actionConnect): + switch actionConnect { + case .walletConnect: + return try buildWalletConnectActiveSessionViewModel( + chains: chains, + wallets: wallets, + locale: locale + ) + } + } + } + + func didTapOn( + _ indexPath: IndexPath, + cells: [WalletConnectProposalCellModel] + ) -> WalletConnectProposalViewModel? { + guard let viewModel = cells[safe: indexPath.row] else { + return nil + } + + var updatedCells = cells + switch viewModel { + case .dAppInfo, .requiredNetworks, .optionalNetworks: + return nil + case let .requiredExpandable(viewModel): + let toggledViewModel = viewModel.toggle() + updatedCells[indexPath.row] = .requiredExpandable(toggledViewModel) + case let .optionalExpandable(viewModel): + let toggledViewModel = viewModel.toggle() + updatedCells[indexPath.row] = .optionalExpandable(toggledViewModel) + case let .wallet(viewModel): + switch status { + case let .proposal(connectProposal): + switch connectProposal { + case .walletConnect: + let toggledViewModel = viewModel.toggle() + updatedCells[indexPath.row] = .wallet(toggledViewModel) + case .tonJsBridge, .tonConnect: + updatedCells = cells.map { $0.deselectWallet() } + let toggledViewModel = viewModel.toggle() + updatedCells[indexPath.row] = .wallet(toggledViewModel) + } + case .active: + break + } + } + + return WalletConnectProposalViewModel( + indexPath: indexPath, + cells: updatedCells, + expiryDate: nil + ) + } + + // MARK: - Private methods + + private func createDAppViewModel() -> WalletConnectProposalCellModel.DetailsViewModel { + switch status { + case let .proposal(proposal): + switch proposal { + case let .walletConnect(proposal): + return WalletConnectProposalCellModel.DetailsViewModel( + title: proposal.proposer.name, + subtitle: URL(string: proposal.proposer.url)?.host ?? proposal.proposer.url, + icon: RemoteImageViewModel(string: proposal.proposer.icons.first) + ) + case let .tonJsBridge(manifest, _, _, _): + return WalletConnectProposalCellModel.DetailsViewModel( + title: manifest.name, + subtitle: manifest.host, + icon: RemoteImageViewModel(url: manifest.iconUrl) + ) + case let .tonConnect(manifest, _): + return WalletConnectProposalCellModel.DetailsViewModel( + title: manifest.name, + subtitle: manifest.host, + icon: RemoteImageViewModel(url: manifest.iconUrl) + ) + } + case let .active(session): + switch session { + case let .walletConnect(session): + return WalletConnectProposalCellModel.DetailsViewModel( + title: session.peer.name, + subtitle: URL(string: session.peer.url)?.host ?? session.peer.url, + icon: RemoteImageViewModel(string: session.peer.url) + ) + } + } + } + + // MARK: - Private wallet connect methods + + func buildWalletConenctProposalSessionViewModel( + chains: [ChainModel], + wallets: [MetaAccountModel], + locale: Locale + ) throws -> WalletConnectProposalViewModel { + guard let proposal = status.proposal else { + throw ConvenienceError(error: "Missing wallet connect proposal") + } + let dApp = createDAppViewModel() let requiredNetworks = try createNetworksViewModel( from: proposal.requiredNamespaces, @@ -60,13 +168,15 @@ final class WalletConnectProposalViewModelFactoryImpl: WalletConnectProposalView let requiredExpandable = try createProposalPermissionsViewModel( from: proposal.requiredNamespaces, chains: chains, - cellTitle: R.string.localizable.reviewRequiredPermissions(preferredLanguages: locale.rLanguages) + cellTitle: R.string.localizable.reviewRequiredPermissions(preferredLanguages: locale.rLanguages), + locale: locale ) let optionalExpandable = try? createProposalPermissionsViewModel( from: proposal.optionalNamespaces, chains: chains, - cellTitle: R.string.localizable.reviewOptionalPermissions(preferredLanguages: locale.rLanguages) + cellTitle: R.string.localizable.reviewOptionalPermissions(preferredLanguages: locale.rLanguages), + locale: locale ) let walletCellViewModels = createWalletsCellModels(from: wallets, forActiveSession: false) @@ -88,22 +198,21 @@ final class WalletConnectProposalViewModelFactoryImpl: WalletConnectProposalView ) } - func buildActiveSessionViewModel( - session: Session, + func buildWalletConnectActiveSessionViewModel( chains: [ChainModel], wallets: [MetaAccountModel], locale: Locale ) throws -> WalletConnectProposalViewModel { - let dApp = WalletConnectProposalCellModel.DetailsViewModel( - title: session.peer.name, - subtitle: URL(string: session.peer.url)?.host ?? session.peer.url, - icon: RemoteImageViewModel(string: session.peer.url) - ) + guard let session = status.session else { + throw ConvenienceError(error: "Missing wallet connect session") + } + let dApp = createDAppViewModel() guard let requiredExpandable = try createSessionPermissionsViewModel( from: session.namespaces, chains: chains, - cellTitle: R.string.localizable.reviewPermissions(preferredLanguages: locale.rLanguages) + cellTitle: R.string.localizable.reviewPermissions(preferredLanguages: locale.rLanguages), + locale: locale ) else { throw AutoNamespacesError.requiredChainsNotSatisfied } @@ -133,51 +242,6 @@ final class WalletConnectProposalViewModelFactoryImpl: WalletConnectProposalView ) } - func didTapOn( - _ indexPath: IndexPath, - cells: [WalletConnectProposalCellModel] - ) -> WalletConnectProposalViewModel? { - guard let viewModel = cells[safe: indexPath.row] else { - return nil - } - - var updatedCells = cells - switch viewModel { - case .dAppInfo, .requiredNetworks, .optionalNetworks: - return nil - case let .requiredExpandable(viewModel): - let toggledViewModel = viewModel.toggle() - updatedCells[indexPath.row] = .requiredExpandable(toggledViewModel) - case let .optionalExpandable(viewModel): - let toggledViewModel = viewModel.toggle() - updatedCells[indexPath.row] = .optionalExpandable(toggledViewModel) - case let .wallet(viewModel): - guard case .proposal = status else { - return nil - } - let toggledViewModel = viewModel.toggle() - updatedCells[indexPath.row] = .wallet(toggledViewModel) - } - - return WalletConnectProposalViewModel( - indexPath: indexPath, - cells: updatedCells, - expiryDate: nil - ) - } - - // MARK: - Private methods - - private func createDAppViewModel( - from proposal: Session.Proposal - ) -> WalletConnectProposalCellModel.DetailsViewModel { - WalletConnectProposalCellModel.DetailsViewModel( - title: proposal.proposer.name, - subtitle: URL(string: proposal.proposer.url)?.host ?? proposal.proposer.url, - icon: RemoteImageViewModel(string: proposal.proposer.icons.first) - ) - } - private func createNetworksViewModel( from namespaces: [String: ProposalNamespace]?, chains: [ChainModel], @@ -212,7 +276,8 @@ final class WalletConnectProposalViewModelFactoryImpl: WalletConnectProposalView private func createProposalPermissionsViewModel( from namespaces: [String: ProposalNamespace]?, chains: [ChainModel], - cellTitle: String + cellTitle: String, + locale: Locale ) throws -> WalletConnectProposalCellModel.ExpandableViewModel? { guard let namespaces = namespaces else { return nil @@ -246,9 +311,11 @@ final class WalletConnectProposalViewModelFactoryImpl: WalletConnectProposalView return WalletConnectProposalCellModel.ExpandableViewModel( cellTitle: cellTitle, - chain: resolvedChains.map { $0.name }.joined(separator: ", "), - methods: methods, - events: events, + title: resolvedChains.map { $0.name }.joined(separator: ", "), + title2: R.string.localizable.commonMethods(preferredLanguages: locale.rLanguages), + subtitle2: methods, + title3: R.string.localizable.commonEvents(preferredLanguages: locale.rLanguages), + subtitle3: events, isExpanded: false ) } @@ -256,7 +323,8 @@ final class WalletConnectProposalViewModelFactoryImpl: WalletConnectProposalView private func createSessionPermissionsViewModel( from namespaces: [String: SessionNamespace], chains: [ChainModel], - cellTitle: String + cellTitle: String, + locale: Locale ) throws -> WalletConnectProposalCellModel.ExpandableViewModel? { let blockchains = namespaces .map { $0.value } @@ -283,9 +351,11 @@ final class WalletConnectProposalViewModelFactoryImpl: WalletConnectProposalView return WalletConnectProposalCellModel.ExpandableViewModel( cellTitle: cellTitle, - chain: resolvedChains.map { $0.name }.joined(separator: ", "), - methods: methods, - events: events, + title: resolvedChains.map { $0.name }.joined(separator: ", "), + title2: R.string.localizable.commonMethods(preferredLanguages: locale.rLanguages), + subtitle2: methods, + title3: R.string.localizable.commonEvents(preferredLanguages: locale.rLanguages), + subtitle3: events, isExpanded: false ) } @@ -324,4 +394,52 @@ final class WalletConnectProposalViewModelFactoryImpl: WalletConnectProposalView } return wallet } + + // MARK: - Private ton connect methods + + func buildTonConenctProposalSessionViewModel( + chains: [ChainModel], + wallets: [MetaAccountModel], + locale: Locale + ) throws -> WalletConnectProposalViewModel { + guard + let manifest = status.tonManifest, + let tonChain = chains.first(where: { $0.ecosystem == .ton }) + else { + throw ConvenienceError(error: "Missing wallet connect proposal") + } + let dApp = createDAppViewModel() + + let requiredNetworks = WalletConnectProposalCellModel.DetailsViewModel( + title: R.string.localizable.requiredNetworks(preferredLanguages: locale.rLanguages), + subtitle: tonChain.name, + icon: RemoteImageViewModel(url: tonChain.icon) + ) + + let walletCellViewModels = createWalletsCellModels(from: wallets, forActiveSession: false) + + let requiredExpandableViewModel = WalletConnectProposalCellModel.ExpandableViewModel( + cellTitle: "Review dApp info", + title: "Be sure to check the service address before connecting the wallet", + title2: "Service address", + subtitle2: manifest.url.absoluteString, + title3: nil, + subtitle3: nil, + isExpanded: false + ) + + let infoCells = [ + WalletConnectProposalCellModel.dAppInfo(dApp), + WalletConnectProposalCellModel(requiredNetworksViewModel: requiredNetworks), + WalletConnectProposalCellModel(requiredExpandableViewModel: requiredExpandableViewModel) + ].compactMap { $0 } + + let cells = [infoCells, walletCellViewModels].reduce([], +) + + return WalletConnectProposalViewModel( + indexPath: nil, + cells: cells, + expiryDate: nil + ) + } } diff --git a/fearless/Modules/WalletConnectProposal/WalletConnectProposalAssembly.swift b/fearless/Modules/WalletConnectProposal/WalletConnectProposalAssembly.swift index f24eac613d..b2d686ac74 100644 --- a/fearless/Modules/WalletConnectProposal/WalletConnectProposalAssembly.swift +++ b/fearless/Modules/WalletConnectProposal/WalletConnectProposalAssembly.swift @@ -5,7 +5,7 @@ import RobinHood final class WalletConnectProposalAssembly { static func configureModule( - status: WalletConnectProposalPresenter.SessionStatus + status: SessionStatus ) -> WalletConnectProposalModuleCreationResult? { let localizationManager = LocalizationManager.shared @@ -20,7 +20,8 @@ final class WalletConnectProposalAssembly { walletConnect: WalletConnectServiceImpl.shared, walletRepository: AnyDataProviderRepository(accountRepository), chainRepository: AnyDataProviderRepository(chainRepository), - operationQueue: OperationManagerFacade.sharedDefaultQueue + operationQueue: OperationManagerFacade.sharedDefaultQueue, + tonConnectService: ServiceAssembly.shared.tonConnectService() ) let router = WalletConnectProposalRouter() diff --git a/fearless/Modules/WalletConnectProposal/WalletConnectProposalExpandableTableCell.swift b/fearless/Modules/WalletConnectProposal/WalletConnectProposalExpandableTableCell.swift index 6037ef2652..838b72810d 100644 --- a/fearless/Modules/WalletConnectProposal/WalletConnectProposalExpandableTableCell.swift +++ b/fearless/Modules/WalletConnectProposal/WalletConnectProposalExpandableTableCell.swift @@ -57,6 +57,7 @@ final class WalletConnectProposalExpandableTableCell: UITableViewCell { let label = UILabel() label.font = .h4Title label.textColor = R.color.colorStrokeGray() + label.numberOfLines = 0 return label }() @@ -88,12 +89,6 @@ final class WalletConnectProposalExpandableTableCell: UITableViewCell { return label }() - var locale: Locale = .current { - didSet { - applyLocalization() - } - } - override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) backgroundColor = R.color.colorBlack19() @@ -109,12 +104,17 @@ final class WalletConnectProposalExpandableTableCell: UITableViewCell { func bind(viewModel: WalletConnectProposalCellModel.ExpandableViewModel) { visibleTitle.text = viewModel.cellTitle - chainNameLabel.text = viewModel.chain - methodsLabel.text = viewModel.methods - eventsLabel.text = viewModel.events + chainNameLabel.text = viewModel.title - eventsTitleLabel.isHidden = viewModel.events.isEmpty - eventsLabel.isHidden = viewModel.events.isEmpty + methodsTitleLabel.text = viewModel.title2 + methodsLabel.text = viewModel.subtitle2 + methodsTitleLabel.isHidden = !viewModel.isVisibleSection2() + methodsLabel.isHidden = !viewModel.isVisibleSection3() + + eventsTitleLabel.text = viewModel.title3 + eventsLabel.text = viewModel.subtitle3 + eventsTitleLabel.isHidden = !viewModel.isVisibleSection3() + eventsLabel.isHidden = !viewModel.isVisibleSection3() expandableBackground.isHidden = !viewModel.isExpanded expandableAccesoryImageView.image = viewModel.isExpanded ? R.image.basicMinus() : R.image.basicPlus() @@ -163,9 +163,4 @@ final class WalletConnectProposalExpandableTableCell: UITableViewCell { expandableContentStack.setCustomSpacing(UIConstants.bigOffset, after: methodsLabel) expandableContentStack.setCustomSpacing(UIConstants.minimalOffset, after: eventsTitleLabel) } - - private func applyLocalization() { - methodsTitleLabel.text = R.string.localizable.commonMethods(preferredLanguages: locale.rLanguages) - eventsTitleLabel.text = R.string.localizable.commonEvents(preferredLanguages: locale.rLanguages) - } } diff --git a/fearless/Modules/WalletConnectProposal/WalletConnectProposalInteractor.swift b/fearless/Modules/WalletConnectProposal/WalletConnectProposalInteractor.swift index 32c56d754b..eb53efd536 100644 --- a/fearless/Modules/WalletConnectProposal/WalletConnectProposalInteractor.swift +++ b/fearless/Modules/WalletConnectProposal/WalletConnectProposalInteractor.swift @@ -17,17 +17,20 @@ final class WalletConnectProposalInteractor { private let walletRepository: AnyDataProviderRepository private let chainRepository: AnyDataProviderRepository private let operationQueue: OperationQueue + private let tonConnectService: TonConnectService init( walletConnect: WalletConnectService, walletRepository: AnyDataProviderRepository, chainRepository: AnyDataProviderRepository, - operationQueue: OperationQueue + operationQueue: OperationQueue, + tonConnectService: TonConnectService ) { self.walletConnect = walletConnect self.walletRepository = walletRepository self.chainRepository = chainRepository self.operationQueue = operationQueue + self.tonConnectService = tonConnectService } // MARK: - Private methods @@ -75,4 +78,18 @@ extension WalletConnectProposalInteractor: WalletConnectProposalInteractorInput func submitDisconnect(topic: String) async throws { try await walletConnect.disconnect(topic: topic) } + + func confirmConnectionRequest( + wallet: MetaAccountModel, + tonChainModel: ChainModel, + params: TonConnectParameters, + manifest: TonConnectManifest + ) async throws { + try await tonConnectService.confirmConnectionRequest( + wallet: wallet, + tonChainModel: tonChainModel, + params: params, + manifest: manifest + ) + } } diff --git a/fearless/Modules/WalletConnectProposal/WalletConnectProposalPresenter.swift b/fearless/Modules/WalletConnectProposal/WalletConnectProposalPresenter.swift index 9266c920eb..e3def803cb 100644 --- a/fearless/Modules/WalletConnectProposal/WalletConnectProposalPresenter.swift +++ b/fearless/Modules/WalletConnectProposal/WalletConnectProposalPresenter.swift @@ -11,12 +11,19 @@ protocol WalletConnectProposalInteractorInput: AnyObject { func setup(with output: WalletConnectProposalInteractorOutput) func submit(proposalDecision: WalletConnectProposalDecision) async throws func submitDisconnect(topic: String) async throws + func confirmConnectionRequest( + wallet: MetaAccountModel, + tonChainModel: ChainModel, + params: TonConnectParameters, + manifest: TonConnectManifest + ) async throws } final class WalletConnectProposalPresenter { // MARK: Private properties private weak var view: WalletConnectProposalViewInput? + private weak var moduleOutput: WalletConnectProposalModuleOutput? private let router: WalletConnectProposalRouterInput private let interactor: WalletConnectProposalInteractorInput @@ -43,6 +50,7 @@ final class WalletConnectProposalPresenter { router: WalletConnectProposalRouterInput, localizationManager: LocalizationManagerProtocol ) { + moduleOutput = status.moduleOutput self.status = status self.walletConnectModelFactory = walletConnectModelFactory self.viewModelFactory = viewModelFactory @@ -57,42 +65,20 @@ final class WalletConnectProposalPresenter { private func provideViewModel() { switch status { - case let .proposal(proposal): - provideProposalSessionViewModel(proposal: proposal) + case .proposal: + buildViewModel() setOptionalChains() - case let .active(session): - provideActiveSessionViewModel(session: session) + case .active: + buildViewModel() } } - private func provideProposalSessionViewModel(proposal: Session.Proposal) { + private func buildViewModel() { guard chains.isNotEmpty, wallets.isNotEmpty else { return } do { - let viewModel = try viewModelFactory.buildProposalSessionViewModel( - proposal: proposal, - chains: chains, - wallets: wallets, - locale: selectedLocale - ) - DispatchQueue.main.async { - self.view?.didReceive(viewModel: viewModel) - } - self.viewModel = viewModel - } catch { - logger.customError(error) - handle(error: error) - } - } - - private func provideActiveSessionViewModel(session: Session) { - guard chains.isNotEmpty, wallets.isNotEmpty else { - return - } - do { - let viewModel = try viewModelFactory.buildActiveSessionViewModel( - session: session, + let viewModel = try viewModelFactory.buildViewModel( chains: chains, wallets: wallets, locale: selectedLocale @@ -132,7 +118,7 @@ final class WalletConnectProposalPresenter { } } - private func submitApprove() { + private func submitWalletConnectApprove() { guard let proposal = status.proposal else { return } let selectedWallets = wallets.filter { wallet in viewModel?.selectedWalletIds?.contains(wallet.metaId) == true @@ -250,6 +236,66 @@ final class WalletConnectProposalPresenter { let optionalChains = walletConnectModelFactory.resolveChains(for: Set(optionalBlockchains), chains: chains) optionalChainsIds = optionalChains.map { $0.chainId } } + + private func setLocalWalletsIfNeeded(wallets: [MetaAccountModel]) { + switch status { + case let .proposal(proposalVariant): + switch proposalVariant { + case .walletConnect, .tonConnect: + self.wallets = wallets + case .tonJsBridge: + self.wallets = [SelectedWalletSettings.shared.value].compactMap { $0 } + } + case .active: + self.wallets = wallets + } + provideViewModel() + } + + private func submitTonJsBridgeApprove( + manifest: TonConnectManifest, + params: TonConnectParameters, + invocationId: String + ) { + let dessision: TonConnectDessision = .approve( + manifest: manifest, + params: params, + invocationId: invocationId + ) + moduleOutput?.tonConnect(dessision: dessision) + Task { @MainActor in + router.dismiss(view: view) + } + } + + private func confirmTonConnectionRequest( + manifest: TonConnectManifest, + params: TonConnectParameters + ) { + Task { + do { + guard + let tonChainModel = self.chains.first(where: { $0.ecosystem == .ton }), + let selectedWallet = wallets.filter({ wallet in + viewModel?.selectedWalletIds?.contains(wallet.metaId) == true + }).first + else { + throw ConvenienceError(error: "Missing ton chain model") + } + try await interactor.confirmConnectionRequest( + wallet: selectedWallet, + tonChainModel: tonChainModel, + params: params, + manifest: manifest + ) + Task { @MainActor in + router.dismiss(view: view) + } + } catch { + logger.customError(error) + } + } + } } // MARK: - WalletConnectProposalViewOutput @@ -269,16 +315,49 @@ extension WalletConnectProposalPresenter: WalletConnectProposalViewOutput { func mainActionButtonDidTapped() { switch status { - case .proposal: - submitApprove() - case let .active(session): - view?.didStartLoading() - submitDisconnect(topic: session.topic, name: session.peer.name) + case let .proposal(connect): + switch connect { + case .walletConnect: + submitWalletConnectApprove() + case let .tonJsBridge(manifest, payload, invocationId, _): + submitTonJsBridgeApprove( + manifest: manifest, + params: payload, + invocationId: invocationId + ) + case let .tonConnect(manifest: manifest, requestPayload: requestPayload): + confirmTonConnectionRequest( + manifest: manifest, + params: requestPayload + ) + } + case let .active(active): + switch active { + case let .walletConnect(session): + view?.didStartLoading() + submitDisconnect(topic: session.topic, name: session.peer.name) + } } } func rejectButtonDidTapped() { - submitReject() + switch status { + case let .proposal(connect): + switch connect { + case .walletConnect: + submitReject() + case let .tonJsBridge(_, _, invocationId, _): + moduleOutput?.tonConnect(dessision: .reject(invocationId: invocationId)) + router.dismiss(view: view) + case .tonConnect: + router.dismiss(view: view) + } + case let .active(active): + switch active { + case .walletConnect: + submitReject() + } + } } func didSelectRowAt(_ indexPath: IndexPath) { @@ -310,8 +389,7 @@ extension WalletConnectProposalPresenter: WalletConnectProposalInteractorOutput func didReceive(walletsResult: Result<[MetaAccountModel], Error>) { switch walletsResult { case let .success(wallets): - self.wallets = wallets - provideViewModel() + setLocalWalletsIfNeeded(wallets: wallets) case let .failure(failure): logger.customError(failure) } @@ -343,28 +421,3 @@ extension WalletConnectProposalPresenter: MultiSelectNetworksModuleOutput { optionalChainsIds = ids } } - -extension WalletConnectProposalPresenter { - enum SessionStatus { - case proposal(Session.Proposal) - case active(Session) - - var proposal: Session.Proposal? { - switch self { - case let .proposal(proposal): - return proposal - case .active: - return nil - } - } - - var session: Session? { - switch self { - case .proposal: - return nil - case let .active(session): - return session - } - } - } -} diff --git a/fearless/Modules/WalletConnectProposal/WalletConnectProposalProtocols.swift b/fearless/Modules/WalletConnectProposal/WalletConnectProposalProtocols.swift index 61707b9701..621a1f33e5 100644 --- a/fearless/Modules/WalletConnectProposal/WalletConnectProposalProtocols.swift +++ b/fearless/Modules/WalletConnectProposal/WalletConnectProposalProtocols.swift @@ -23,4 +23,6 @@ protocol WalletConnectProposalRouterInput: PresentDismissable, ErrorPresentable, protocol WalletConnectProposalModuleInput: AnyObject {} -protocol WalletConnectProposalModuleOutput: AnyObject {} +protocol WalletConnectProposalModuleOutput: AnyObject { + func tonConnect(dessision: TonConnectDessision) +} diff --git a/fearless/Modules/WalletConnectProposal/WalletConnectProposalViewController.swift b/fearless/Modules/WalletConnectProposal/WalletConnectProposalViewController.swift index a203e3a2d4..e6480cfa1a 100644 --- a/fearless/Modules/WalletConnectProposal/WalletConnectProposalViewController.swift +++ b/fearless/Modules/WalletConnectProposal/WalletConnectProposalViewController.swift @@ -16,14 +16,14 @@ final class WalletConnectProposalViewController: UIViewController, ViewHolder { // MARK: Private properties private let output: WalletConnectProposalViewOutput - private let status: WalletConnectProposalPresenter.SessionStatus + private let status: SessionStatus private var viewModel: WalletConnectProposalViewModel? // MARK: - Constructor init( - status: WalletConnectProposalPresenter.SessionStatus, + status: SessionStatus, output: WalletConnectProposalViewOutput, localizationManager: LocalizationManagerProtocol? ) { @@ -99,7 +99,20 @@ extension WalletConnectProposalViewController: WalletConnectProposalViewInput { func didReceive(viewModel: WalletConnectProposalViewModel) { self.viewModel = viewModel if let indexPath = viewModel.indexPath { - rootView.tableView.reloadRows(at: [indexPath], with: .automatic) + let visibleWalletCells: [WalletConnectProposalWalletsTableCell] = rootView.tableView.visibleCells.compactMap { + guard let cell = $0 as? WalletConnectProposalWalletsTableCell else { + return nil + } + return cell + } + let visibleWalletCellIndexPaths = visibleWalletCells.compactMap { + rootView.tableView.indexPath(for: $0) + } + if visibleWalletCellIndexPaths.contains(indexPath) { + rootView.tableView.reloadRows(at: visibleWalletCellIndexPaths, with: .automatic) + } else { + rootView.tableView.reloadRows(at: [indexPath], with: .automatic) + } } else { rootView.tableView.reloadData() } @@ -149,13 +162,11 @@ extension WalletConnectProposalViewController: UITableViewDataSource { guard let cell = cell as? WalletConnectProposalExpandableTableCell else { return UITableViewCell() } - cell.locale = selectedLocale cell.bind(viewModel: viewModel) case let .optionalExpandable(viewModel): guard let cell = cell as? WalletConnectProposalExpandableTableCell else { return UITableViewCell() } - cell.locale = selectedLocale cell.bind(viewModel: viewModel) case .wallet: break diff --git a/fearless/Modules/WalletConnectProposal/WalletConnectProposalViewLayout.swift b/fearless/Modules/WalletConnectProposal/WalletConnectProposalViewLayout.swift index 4b9fda6ccd..b96bf62740 100644 --- a/fearless/Modules/WalletConnectProposal/WalletConnectProposalViewLayout.swift +++ b/fearless/Modules/WalletConnectProposal/WalletConnectProposalViewLayout.swift @@ -1,7 +1,7 @@ import UIKit final class WalletConnectProposalViewLayout: UIView { - private let status: WalletConnectProposalPresenter.SessionStatus + private let status: SessionStatus var locale: Locale = .current { didSet { @@ -44,7 +44,7 @@ final class WalletConnectProposalViewLayout: UIView { return view }() - init(status: WalletConnectProposalPresenter.SessionStatus) { + init(status: SessionStatus) { self.status = status super.init(frame: .zero) backgroundColor = R.color.colorBlack19()! diff --git a/fearless/Modules/WalletConnectSession/ConnectRequestVariant.swift b/fearless/Modules/WalletConnectSession/ConnectRequestVariant.swift new file mode 100644 index 0000000000..e29999955f --- /dev/null +++ b/fearless/Modules/WalletConnectSession/ConnectRequestVariant.swift @@ -0,0 +1,30 @@ +import Foundation +import WalletConnectSign +import SSFModels + +enum ConnectRequestVariant { + case walletConnect( + request: Request, + session: Session? + ) + case tonJsBridge( + invocationId: String, + wallet: MetaAccountModel, + dapp: TonDapp, + request: TonConnect.AppRequest, + delegate: WalletConnectSessionModuleOutput? + ) + case tonConnect( + request: TonConnect.AppRequest, + walletId: SSFModels.MetaAccountId, + app: TonConnectApp + ) + + var moduleOutput: WalletConnectSessionModuleOutput? { + switch self { + case .walletConnect: return nil + case .tonConnect: return nil + case let .tonJsBridge(_, _, _, _, delegate): return delegate + } + } +} diff --git a/fearless/Modules/WalletConnectSession/WalletConnectSessionAssembly.swift b/fearless/Modules/WalletConnectSession/WalletConnectSessionAssembly.swift index 4edb595dac..09141103bd 100644 --- a/fearless/Modules/WalletConnectSession/WalletConnectSessionAssembly.swift +++ b/fearless/Modules/WalletConnectSession/WalletConnectSessionAssembly.swift @@ -6,8 +6,7 @@ import RobinHood enum WalletConnectSessionAssembly { static func configureModule( - request: Request, - session: Session?, + variant: ConnectRequestVariant, onGoToConfirmation: ((WalletConnectConfirmationInputData) -> Void)? ) -> WalletConnectSessionModuleCreationResult? { let localizationManager = LocalizationManager.shared @@ -20,11 +19,6 @@ enum WalletConnectSessionAssembly { sortDescriptors: [NSSortDescriptor.chainsByAddressPrefix] ) - let substrateRepositoryFactory = SubstrateRepositoryFactory( - storageFacade: UserDataStorageFacade.shared - ) - - let accountInfoRepository = substrateRepositoryFactory.createAccountInfoStorageItemRepository() let walletBalanceSubscriptionAdapter = WalletBalanceSubscriptionAdapter.shared let interactor = WalletConnectSessionInteractor( @@ -32,22 +26,21 @@ enum WalletConnectSessionAssembly { walletBalanceSubscriptionAdapter: walletBalanceSubscriptionAdapter, walletRepository: AnyDataProviderRepository(accountRepository), chainRepository: AnyDataProviderRepository(chainRepository), - operationQueue: OperationManagerFacade.sharedDefaultQueue + operationQueue: OperationManagerFacade.sharedDefaultQueue, + tonConnectService: ServiceAssembly.shared.tonConnectService() ) let router = WalletConnectSessionRouter(onGoToConfirmation: onGoToConfirmation) let walletConnectModelFactory = WalletConnectModelFactoryImpl() let walletConnectPayloaFactory = WalletConnectPayloadFactoryImpl() let viewModelFactory = WalletConnectSessionViewModelFactoryImpl( - request: request, - session: session, + variant: variant, walletConnectModelFactory: walletConnectModelFactory, walletConnectPayloaFactory: walletConnectPayloaFactory, assetBalanceFormatterFactory: AssetBalanceFormatterFactory() ) let presenter = WalletConnectSessionPresenter( - request: request, - session: session, + variant: variant, viewModelFactory: viewModelFactory, walletConnectModelFactory: walletConnectModelFactory, logger: logger, diff --git a/fearless/Modules/WalletConnectSession/WalletConnectSessionInteractor.swift b/fearless/Modules/WalletConnectSession/WalletConnectSessionInteractor.swift index b655c10ca9..b6f15f8f99 100644 --- a/fearless/Modules/WalletConnectSession/WalletConnectSessionInteractor.swift +++ b/fearless/Modules/WalletConnectSession/WalletConnectSessionInteractor.swift @@ -18,19 +18,22 @@ final class WalletConnectSessionInteractor { private let walletRepository: AnyDataProviderRepository private let chainRepository: AnyDataProviderRepository private let operationQueue: OperationQueue + private let tonConnectService: TonConnectService init( walletConnect: WalletConnectService, walletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterProtocol, walletRepository: AnyDataProviderRepository, chainRepository: AnyDataProviderRepository, - operationQueue: OperationQueue + operationQueue: OperationQueue, + tonConnectService: TonConnectService ) { self.walletConnect = walletConnect self.walletBalanceSubscriptionAdapter = walletBalanceSubscriptionAdapter self.walletRepository = walletRepository self.chainRepository = chainRepository self.operationQueue = operationQueue + self.tonConnectService = tonConnectService } // MARK: - Private methods @@ -71,6 +74,10 @@ final class WalletConnectSessionInteractor { // MARK: - WalletConnectSessionInteractorInput extension WalletConnectSessionInteractor: WalletConnectSessionInteractorInput { + func cancelTonConnect(appRequest: TonConnect.AppRequest, app: TonConnectApp) async throws { + try await tonConnectService.cancelRequest(appRequest: appRequest, app: app) + } + func submit(signDecision: WalletConnectSignDecision) async throws { try await walletConnect.submit(signDecision: signDecision) } diff --git a/fearless/Modules/WalletConnectSession/WalletConnectSessionPresenter.swift b/fearless/Modules/WalletConnectSession/WalletConnectSessionPresenter.swift index 362f203788..4823dd2b6c 100644 --- a/fearless/Modules/WalletConnectSession/WalletConnectSessionPresenter.swift +++ b/fearless/Modules/WalletConnectSession/WalletConnectSessionPresenter.swift @@ -11,18 +11,22 @@ protocol WalletConnectSessionInteractorInput: AnyObject { func setup(with output: WalletConnectSessionInteractorOutput) func submit(proposalDecision: WalletConnectProposalDecision) async throws func submit(signDecision: WalletConnectSignDecision) async throws + func cancelTonConnect( + appRequest: TonConnect.AppRequest, + app: TonConnectApp + ) async throws } final class WalletConnectSessionPresenter { // MARK: Private properties private weak var view: WalletConnectSessionViewInput? + private weak var moduleOutput: WalletConnectSessionModuleOutput? private let router: WalletConnectSessionRouterInput private let interactor: WalletConnectSessionInteractorInput private let logger: LoggerProtocol - private let request: Request - private let session: Session? + private let variant: ConnectRequestVariant private let viewModelFactory: WalletConnectSessionViewModelFactory private let walletConnectModelFactory: WalletConnectModelFactory @@ -34,8 +38,7 @@ final class WalletConnectSessionPresenter { // MARK: - Constructors init( - request: Request, - session: Session?, + variant: ConnectRequestVariant, viewModelFactory: WalletConnectSessionViewModelFactory, walletConnectModelFactory: WalletConnectModelFactory, logger: LoggerProtocol, @@ -43,8 +46,8 @@ final class WalletConnectSessionPresenter { router: WalletConnectSessionRouterInput, localizationManager: LocalizationManagerProtocol ) { - self.request = request - self.session = session + moduleOutput = variant.moduleOutput + self.variant = variant self.viewModelFactory = viewModelFactory self.walletConnectModelFactory = walletConnectModelFactory self.interactor = interactor @@ -75,7 +78,12 @@ final class WalletConnectSessionPresenter { } catch { await MainActor.run(body: { - handle(error: error, request: request) + switch variant { + case let .walletConnect(request, _): + handle(error: error, request: request) + case .tonJsBridge, .tonConnect: + logger.customError(error) + } }) } } @@ -93,28 +101,114 @@ final class WalletConnectSessionPresenter { private func prepareConfirmationData() { do { - let chain = try walletConnectModelFactory.resolveChain(for: request.chainId, chains: chainModels) - let method = try walletConnectModelFactory.parseMethod(from: request) - guard - let session = session, - let viewModel = viewModel - else { - throw JSONRPCError.invalidRequest + switch variant { + case let .walletConnect(request, session): + try prepereWalletConnectConfirmData( + request: request, + session: session + ) + case let .tonJsBridge(invocationId, wallet, dapp, request, delegate): + try prepareTonJsBridgConfirmData( + invocationId: invocationId, + wallet: wallet, + dapp: dapp, + request: request + ) + case let .tonConnect(request: request, walletId: walletId, app: app): + try prepareTonConnectConfirmData( + request: request, + walletId: walletId, + app: app + ) } + } catch { + switch variant { + case let .walletConnect(request, _): + handle(error: error, request: request) + case .tonJsBridge, .tonConnect: + logger.customError(error) + } + } + } + + private func prepereWalletConnectConfirmData( + request: Request, + session: Session? + ) throws { + let chain = try walletConnectModelFactory.resolveChain(for: request.chainId, chains: chainModels) + let method = try walletConnectModelFactory.parseMethod(from: request) + guard + let session = session, + let viewModel = viewModel + else { + throw JSONRPCError.invalidRequest + } - let inputData = WalletConnectConfirmationInputData( - wallet: viewModel.wallet, - chain: chain, + let inputData = WalletConnectConfirmationInputData( + wallet: viewModel.wallet, + chain: chain, + variant: .walletConnect( resuest: request, session: session, - method: method, - payload: viewModel.payload - ) - view?.didStopLoading() - router.showConfirmation(inputData: inputData) - } catch { - handle(error: error, request: request) + method: method + ), + payload: viewModel.payload + ) + view?.didStopLoading() + router.showConfirmation(inputData: inputData) + } + + private func prepareTonJsBridgConfirmData( + invocationId: String, + wallet: MetaAccountModel, + dapp: TonDapp, + request: TonConnect.AppRequest + ) throws { + guard let chain = chainModels.first(where: { $0.ecosystem == .ton }) else { + throw ConvenienceError(error: "Missing Ton ChainModel") + } + guard let payload = viewModel?.payload else { + return } + let inputData = WalletConnectConfirmationInputData( + wallet: wallet, + chain: chain, + variant: .tonJsBridge( + invocationId: invocationId, + dapp: dapp, + request: request, + moduleOutput: moduleOutput + ), + payload: payload + ) + view?.didStopLoading() + router.showConfirmation(inputData: inputData) + } + + private func prepareTonConnectConfirmData( + request: TonConnect.AppRequest, + walletId: SSFModels.MetaAccountId, + app: TonConnectApp + ) throws { + guard + let wallet = wallets.first(where: { $0.metaId == walletId }), + let chain = chainModels.first(where: { $0.ecosystem == .ton }), + let payload = viewModel?.payload + else { + throw ConvenienceError(error: "Missing wallet or chain") + } + + let inputData = WalletConnectConfirmationInputData( + wallet: wallet, + chain: chain, + variant: .tonConnect( + request: request, + app: app + ), + payload: payload + ) + view?.didStopLoading() + router.showConfirmation(inputData: inputData) } private func handle(error: Error, request: Request?) { @@ -151,7 +245,23 @@ final class WalletConnectSessionPresenter { extension WalletConnectSessionPresenter: WalletConnectSessionViewOutput { func viewDidDisappear() { view?.controller.onInteractionDismiss() - sumbitReject(request: request, error: JSONRPCError.userRejected) + switch variant { + case let .walletConnect(request, _): + sumbitReject(request: request, error: JSONRPCError.userRejected) + case let .tonJsBridge(invocationId, _, _, _, _): + moduleOutput?.tonConnectSend( + dessision: .declined( + invocationId: invocationId + ) + ) + case let .tonConnect(request: request, walletId: walletId, app: app): + Task { + try await interactor.cancelTonConnect( + appRequest: request, + app: app + ) + } + } } func closeButtonDidTapped() { diff --git a/fearless/Modules/WalletConnectSession/WalletConnectSessionProtocols.swift b/fearless/Modules/WalletConnectSession/WalletConnectSessionProtocols.swift index 3b1a6c12b8..eb86a2ad53 100644 --- a/fearless/Modules/WalletConnectSession/WalletConnectSessionProtocols.swift +++ b/fearless/Modules/WalletConnectSession/WalletConnectSessionProtocols.swift @@ -9,4 +9,6 @@ protocol WalletConnectSessionRouterInput: PresentDismissable, SheetAlertPresenta protocol WalletConnectSessionModuleInput: AnyObject {} -protocol WalletConnectSessionModuleOutput: AnyObject {} +protocol WalletConnectSessionModuleOutput: AnyObject { + func tonConnectSend(dessision: TonConnectSendDessision) +} diff --git a/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModelFactory.swift b/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModelFactory.swift index ac4959efde..2da58373ed 100644 --- a/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModelFactory.swift +++ b/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModelFactory.swift @@ -14,21 +14,18 @@ protocol WalletConnectSessionViewModelFactory { } final class WalletConnectSessionViewModelFactoryImpl: WalletConnectSessionViewModelFactory { - private let request: Request - private let session: Session? + private let variant: ConnectRequestVariant private let walletConnectModelFactory: WalletConnectModelFactory private let walletConnectPayloaFactory: WalletConnectPayloadFactory private let assetBalanceFormatterFactory: AssetBalanceFormatterFactoryProtocol init( - request: Request, - session: Session?, + variant: ConnectRequestVariant, walletConnectModelFactory: WalletConnectModelFactory, walletConnectPayloaFactory: WalletConnectPayloadFactory, assetBalanceFormatterFactory: AssetBalanceFormatterFactoryProtocol ) { - self.request = request - self.session = session + self.variant = variant self.walletConnectModelFactory = walletConnectModelFactory self.walletConnectPayloaFactory = walletConnectPayloaFactory self.assetBalanceFormatterFactory = assetBalanceFormatterFactory @@ -39,14 +36,56 @@ final class WalletConnectSessionViewModelFactoryImpl: WalletConnectSessionViewMo chains: [ChainModel], balanceInfo: WalletBalanceInfos?, locale: Locale + ) async throws -> WalletConnectSessionViewModel { + switch variant { + case let .walletConnect(request, session): + return try await buildWalletConnectViewModel( + request: request, + session: session, + wallets: wallets, + chains: chains, + balanceInfo: balanceInfo, + locale: locale + ) + case let .tonJsBridge(_, wallet, dapp, request, _): + return try buildTonViewModel( + wallet: wallet, + app: dapp.url.host, + request: request, + balanceInfo: balanceInfo, + locale: locale + ) + case let .tonConnect(request: request, walletId: walletId, app: app): + guard let wallet = wallets.first(where: { $0.metaId == walletId }) else { + throw ConvenienceError(error: "Wallet not found") + } + return try buildTonViewModel( + wallet: wallet, + app: app.appUrl.host, + request: request, + balanceInfo: balanceInfo, + locale: locale + ) + } + } + + // MARK: - Private methods + + private func buildWalletConnectViewModel( + request: Request, + session: Session?, + wallets: [MetaAccountModel], + chains: [ChainModel], + balanceInfo: WalletBalanceInfos?, + locale: Locale ) async throws -> WalletConnectSessionViewModel { var dApp: String? if let session = session { dApp = URL(string: session.peer.url)?.host } - let payload = try await prepareSignPayload(chains: chains) - let wallet = try findWallet(for: payload.address, wallets: wallets, chains: chains) + let payload = try await prepareSignPayload(chains: chains, request: request) + let wallet = try findWallet(for: payload.address, wallets: wallets, chains: chains, request: request) let walletViewModel = createWalletViewModel( wallet: wallet, balanceInfo: balanceInfo, @@ -62,10 +101,38 @@ final class WalletConnectSessionViewModelFactoryImpl: WalletConnectSessionViewMo ) } - // MARK: - Private methods + private func buildTonViewModel( + wallet: MetaAccountModel, + app: String?, + request: TonConnect.AppRequest, + balanceInfo: WalletBalanceInfos?, + locale: Locale + ) throws -> WalletConnectSessionViewModel { + let walletViewModel = createWalletViewModel( + wallet: wallet, + balanceInfo: balanceInfo, + locale: locale + ) + + let payload = WalletConnectPayload( + address: nil, + payload: AnyCodable(any: ""), + stringRepresentation: request.method.rawValue, + txDetails: try request.toScaleCompatibleJSON() + ) + + return WalletConnectSessionViewModel( + dApp: app, + warning: createWarning(locale: locale), + walletViewModel: walletViewModel, + payload: payload, + wallet: wallet + ) + } private func prepareSignPayload( - chains: [ChainModel] + chains: [ChainModel], + request: Request ) async throws -> WalletConnectPayload { let method = try walletConnectModelFactory.parseMethod(from: request) let chain = try walletConnectModelFactory.resolveChain(for: request.chainId, chains: chains) @@ -81,7 +148,8 @@ final class WalletConnectSessionViewModelFactoryImpl: WalletConnectSessionViewMo private func findWallet( for address: String?, wallets: [MetaAccountModel], - chains: [ChainModel] + chains: [ChainModel], + request: Request ) throws -> MetaAccountModel { let blockchain = request.chainId let chain = try walletConnectModelFactory.resolveChain(for: blockchain, chains: chains) diff --git a/fearless/Modules/WalletMainContainer/WalletMainContainerAssembly.swift b/fearless/Modules/WalletMainContainer/WalletMainContainerAssembly.swift index 95ad28b4c4..347d05e4c6 100644 --- a/fearless/Modules/WalletMainContainer/WalletMainContainerAssembly.swift +++ b/fearless/Modules/WalletMainContainer/WalletMainContainerAssembly.swift @@ -19,22 +19,10 @@ final class WalletMainContainerAssembly { sortDescriptors: [] ) - let missingAccountHelper = MissingAccountFetcher( - chainRepository: AnyDataProviderRepository(chainRepository), - operationQueue: OperationManagerFacade.sharedDefaultQueue - ) - let userRepositoryFactory = SubstrateRepositoryFactory( storageFacade: UserDataStorageFacade.shared ) - let accountInfoRepository = userRepositoryFactory.createAccountInfoStorageItemRepository() - let accountInfoFetcher = AccountInfoFetching( - accountInfoRepository: AnyDataProviderRepository(accountInfoRepository), - chainRegistry: chainRegistry, - operationQueue: OperationManagerFacade.sharedDefaultQueue - ) - let storageOperationFactory = StorageRequestFactory( remoteFactory: StorageKeyFactory(), operationManager: OperationManagerFacade.sharedManager @@ -59,7 +47,8 @@ final class WalletMainContainerAssembly { eventCenter: EventCenter.shared, deprecatedAccountsCheckService: deprecatedAccountsCheckService, applicationHandler: ApplicationHandler(), - walletConnectService: walletConnect + walletConnectService: walletConnect, + tonConnectService: ServiceAssembly.shared.tonConnectService() ) let router = WalletMainContainerRouter() diff --git a/fearless/Modules/WalletMainContainer/WalletMainContainerInteractor.swift b/fearless/Modules/WalletMainContainer/WalletMainContainerInteractor.swift index b60df973bf..e4b035d6f6 100644 --- a/fearless/Modules/WalletMainContainer/WalletMainContainerInteractor.swift +++ b/fearless/Modules/WalletMainContainer/WalletMainContainerInteractor.swift @@ -16,6 +16,7 @@ final class WalletMainContainerInteractor { private let deprecatedAccountsCheckService: DeprecatedControllerStashAccountCheckServiceProtocol private let applicationHandler: ApplicationHandler private let walletConnectService: WalletConnectService + private let tonConnectService: TonConnectService // MARK: - Constructor @@ -27,7 +28,8 @@ final class WalletMainContainerInteractor { eventCenter: EventCenterProtocol, deprecatedAccountsCheckService: DeprecatedControllerStashAccountCheckServiceProtocol, applicationHandler: ApplicationHandler, - walletConnectService: WalletConnectService + walletConnectService: WalletConnectService, + tonConnectService: TonConnectService ) { self.wallet = wallet self.chainRepository = chainRepository @@ -37,6 +39,7 @@ final class WalletMainContainerInteractor { self.deprecatedAccountsCheckService = deprecatedAccountsCheckService self.applicationHandler = applicationHandler self.walletConnectService = walletConnectService + self.tonConnectService = tonConnectService applicationHandler.delegate = self } @@ -113,6 +116,10 @@ extension WalletMainContainerInteractor: WalletMainContainerInteractorInput { func walletConnect(uri: String) async throws { try await walletConnectService.connect(uri: uri) } + + func tonConnect(uri: String) async throws { + try await tonConnectService.establishConnection(with: uri) + } } // MARK: - EventVisitorProtocol diff --git a/fearless/Modules/WalletMainContainer/WalletMainContainerPresenter.swift b/fearless/Modules/WalletMainContainer/WalletMainContainerPresenter.swift index 16829735af..81faaca2da 100644 --- a/fearless/Modules/WalletMainContainer/WalletMainContainerPresenter.swift +++ b/fearless/Modules/WalletMainContainer/WalletMainContainerPresenter.swift @@ -64,9 +64,21 @@ final class WalletMainContainerPresenter { do { try await interactor.walletConnect(uri: uri) } catch { - await MainActor.run(body: { + Task { @MainActor in router.present(error: error, from: view, locale: selectedLocale) - }) + } + } + } + } + + private func tonConnect(with uri: String) { + Task { + do { + try await interactor.tonConnect(uri: uri) + } catch { + Task { @MainActor in + router.present(error: error, from: view, locale: selectedLocale) + } } } } @@ -261,6 +273,8 @@ extension WalletMainContainerPresenter: ScanQRModuleOutput { ) case let .walletConnect(uri): walletConnect(with: uri) + case let .tonConnect(uri): + tonConnect(with: uri) case .preinstalledWallet: break } diff --git a/fearless/Modules/WalletMainContainer/WalletMainContainerProtocols.swift b/fearless/Modules/WalletMainContainer/WalletMainContainerProtocols.swift index f28b101e01..abc2f47faa 100644 --- a/fearless/Modules/WalletMainContainer/WalletMainContainerProtocols.swift +++ b/fearless/Modules/WalletMainContainer/WalletMainContainerProtocols.swift @@ -22,6 +22,7 @@ protocol WalletMainContainerViewOutput: AnyObject { protocol WalletMainContainerInteractorInput: AnyObject { func setup(with output: WalletMainContainerInteractorOutput) func walletConnect(uri: String) async throws + func tonConnect(uri: String) async throws } protocol WalletMainContainerInteractorOutput: AnyObject { diff --git a/fearless/fearless.entitlements b/fearless/fearless.entitlements new file mode 100644 index 0000000000..24790b4a94 --- /dev/null +++ b/fearless/fearless.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.developer.associated-domains + + $(ASSOCIATED_DOMAIN_APPLINKS) + + + From 835a63783f2b63b3b01fb490a92a1b4347843a03 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Mon, 26 Aug 2024 12:07:12 +0500 Subject: [PATCH 003/156] pod cache clean --- fearless.xcodeproj/project.pbxproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index 650af544b5..66aeb2d9a3 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -16768,7 +16768,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$PROJECT_DIR/R.generated.swift", + $PROJECT_DIR/R.generated.swift, ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -16822,7 +16822,7 @@ ); outputPaths = ( "$(DERIVED_FILE_DIR)/CIKeys.generated.swift", - "$PROJECT_DIR/CIKeys.generated.swift", + $PROJECT_DIR/CIKeys.generated.swift, ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -16881,7 +16881,7 @@ ); inputPaths = ( "${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}", - "$PODS_ROOT/FearlessKeys/FearlessKeys/Classes/FearlessKeys.swift", + $PODS_ROOT/FearlessKeys/FearlessKeys/Classes/FearlessKeys.swift, ); name = "Inject Google Keys"; outputFileListPaths = ( From e8f47aa79d8e1273dde209a2197161d47844810d Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Tue, 27 Aug 2024 09:57:28 +0500 Subject: [PATCH 004/156] Local feature toggle has been implemented --- fearless.xcodeproj/project.pbxproj | 66 +++++++++++-- .../ApplicationLayer/ServiceAssembly.swift | 1 + .../LocalListToggle.swift | 33 +++++++ .../LocalToggleService.swift | 90 ++++++++++++++++++ .../Common/Services/ServiceCoordinator.swift | 9 +- .../FeatureToggleListAssembly.swift | 24 +++++ .../FeatureToggleListInteractor.swift | 30 ++++++ .../FeatureToggleListPresenter.swift | 78 ++++++++++++++++ .../FeatureToggleListProtocols.swift | 10 ++ .../FeatureToggleListRouter.swift | 3 + .../FeatureToggleListViewController.swift | 92 +++++++++++++++++++ .../FeatureToggleListViewLayout.swift | 28 ++++++ .../Modules/Profile/ProfilePresenter.swift | 4 + .../Modules/Profile/ProfileProtocol.swift | 2 + .../Profile/ProfileViewController.swift | 8 +- .../Modules/Profile/ProfileWireframe.swift | 9 ++ .../View/ProfileSectionTableViewCell.xib | 8 +- 17 files changed, 482 insertions(+), 13 deletions(-) create mode 100644 fearless/ApplicationLayer/Services/FeatureToggleService/LocalListToggle.swift create mode 100644 fearless/ApplicationLayer/Services/FeatureToggleService/LocalToggleService.swift create mode 100644 fearless/Modules/FeatureToggleList/FeatureToggleListAssembly.swift create mode 100644 fearless/Modules/FeatureToggleList/FeatureToggleListInteractor.swift create mode 100644 fearless/Modules/FeatureToggleList/FeatureToggleListPresenter.swift create mode 100644 fearless/Modules/FeatureToggleList/FeatureToggleListProtocols.swift create mode 100644 fearless/Modules/FeatureToggleList/FeatureToggleListRouter.swift create mode 100644 fearless/Modules/FeatureToggleList/FeatureToggleListViewController.swift create mode 100644 fearless/Modules/FeatureToggleList/FeatureToggleListViewLayout.swift diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index eba2430d71..4b3ba0d4a5 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -211,6 +211,8 @@ 071606CA2C7C6C8800C1DF75 /* PriceDataHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071606C72C7C6C8700C1DF75 /* PriceDataHelper.swift */; }; 071606CB2C7C6C8800C1DF75 /* AssetRepositoryFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071606C82C7C6C8800C1DF75 /* AssetRepositoryFactory.swift */; }; 071606CC2C7C6C8800C1DF75 /* AssetModelMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071606C92C7C6C8800C1DF75 /* AssetModelMapper.swift */; }; + 071606CF2C7CB91D00C1DF75 /* LocalToggleService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071606CE2C7CB91D00C1DF75 /* LocalToggleService.swift */; }; + 071606D12C7CB95500C1DF75 /* LocalListToggle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071606D02C7CB95500C1DF75 /* LocalListToggle.swift */; }; 0716C83C28853ACA004C8CB1 /* WalletBalanceSubscriptionAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0716C83B28853ACA004C8CB1 /* WalletBalanceSubscriptionAdapter.swift */; }; 0716C84C288802EB004C8CB1 /* SwipableTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0716C84B288802EB004C8CB1 /* SwipableTableViewCell.swift */; }; 0716C84F28880304004C8CB1 /* UITableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0716C84D28880304004C8CB1 /* UITableViewCell.swift */; }; @@ -393,6 +395,7 @@ 07FBC9E628BE29C900ED65B4 /* ChainIssuesCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07FBC9E528BE29C900ED65B4 /* ChainIssuesCenter.swift */; }; 07FD95C027F4384900F07064 /* UIFont+dynamicSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07FD95BF27F4384900F07064 /* UIFont+dynamicSize.swift */; }; 084DDCBC4CE8438770EB48DE /* ConfirmTransferRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD1C635488F941373CDBE377 /* ConfirmTransferRouter.swift */; }; + 08C2974B3B5AAA757CE57E33 /* FeatureToggleListInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 769372B10E8D3C2BF7304FC3 /* FeatureToggleListInteractor.swift */; }; 093C10C88C0A209158EA75D1 /* UsernameSetupTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C5EF68BE0E29D2305CB7337 /* UsernameSetupTests.swift */; }; 0A2BBD1BB87EBB75BBD919F7 /* ConfirmTransferViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 537D889708D5E1615C662992 /* ConfirmTransferViewLayout.swift */; }; 0A4820F04EC9DA9DD515EC3A /* MainNftContainerRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C1CA1EF5BF1151E0DFB298C /* MainNftContainerRouter.swift */; }; @@ -584,6 +587,7 @@ 5980BDE494C9E473E5959C71 /* NftCollectionProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD845193EDFC3A1D0BC73719 /* NftCollectionProtocols.swift */; }; 59838EECC194BB0E6E0AEAA2 /* PolkaswapAdjustmentPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D683E7DE3533CA418BD21 /* PolkaswapAdjustmentPresenter.swift */; }; 5A7D43CA17B84C71E8EEF256 /* LiquidityPoolRemoveLiquidityPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B3E9CA265E5C0F3E83429CE /* LiquidityPoolRemoveLiquidityPresenter.swift */; }; + 5A8C0ED62A840E8E0B56E85C /* FeatureToggleListProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE7B9BC51F6B13337450E3DC /* FeatureToggleListProtocols.swift */; }; 5A8DA5F75BC11EC27A0BC63D /* Pods_fearlessAll_fearlessIntegrationTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD693FC7740866321DA11AC1 /* Pods_fearlessAll_fearlessIntegrationTests.framework */; }; 5C796EF8ED29F564B5D1126B /* CrowdloanContributionConfirmViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F75722D2F921FD1C2D4105D /* CrowdloanContributionConfirmViewController.swift */; }; 5D0665A581B9F8DFDBD0CF7B /* WalletChainAccountDashboardWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 885A9E2D3619FEFC5ED0C093 /* WalletChainAccountDashboardWireframe.swift */; }; @@ -1668,6 +1672,7 @@ B7E42D9E7CA509D7BE723357 /* PolkaswapTransaktionSettingsRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03EFBB5CE05706ADFEF00796 /* PolkaswapTransaktionSettingsRouter.swift */; }; B893A2515909AB6915196317 /* NetworkInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B0E2EDF787BF82F16663215 /* NetworkInfoViewController.swift */; }; BA7AEE82627CFC0AFD69B299 /* RecommendedValidatorListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA2580363AC3E4A9CD40256E /* RecommendedValidatorListPresenter.swift */; }; + BB11D0C16D51423BFB0C45F2 /* FeatureToggleListAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF4A966103685CC10F99B63B /* FeatureToggleListAssembly.swift */; }; BC2DF589C6623601C39EF8F4 /* LiquidityPoolSupplyPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31F848482B2AD7D6831B0CCE /* LiquidityPoolSupplyPresenter.swift */; }; BCB9B3DF3D8104BC8456811B /* TonWebBridgeProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AA1493E216DF3B3616A9EE6 /* TonWebBridgeProtocols.swift */; }; BD571417BD18C711B76E1D62 /* ExportSeedWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B4C1B5D56DB69BA0AECF731 /* ExportSeedWireframe.swift */; }; @@ -1792,6 +1797,7 @@ CBC2B73D7749D5C635EECEE8 /* NftSendViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 747F68F0421FB144AE3FBA4E /* NftSendViewLayout.swift */; }; CC20F3D5802535EDA836926A /* ContactsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87F9D215513308538FA3FDC4 /* ContactsTests.swift */; }; CC545DF80038901FA06FDD58 /* SelectValidatorsConfirmViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B8B0940B2CB25AD9C36206E /* SelectValidatorsConfirmViewController.swift */; }; + CCA06979DC3F21E5CCA505F0 /* FeatureToggleListViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D09EBD67803AB57DF0F7636 /* FeatureToggleListViewLayout.swift */; }; CCF5A7CED175D5E43B2C9971 /* StakingUnbondSetupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC17D12DCD0CDAF0BC13D80D /* StakingUnbondSetupViewController.swift */; }; CD027E4D430D8939A3D64EB6 /* AllDoneRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31302AE4D5325D2AEC030832 /* AllDoneRouter.swift */; }; CD76A6513A708051857FD480 /* StakingAmountProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 999C15317E0B4FC67B9C17C5 /* StakingAmountProtocols.swift */; }; @@ -1861,6 +1867,7 @@ E6981A506AC931D30E85169E /* WalletOptionPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFD95EE4822A564C0D4D1CFE /* WalletOptionPresenter.swift */; }; E7CAD629FF0D4E97594F7A05 /* YourValidatorListInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B60728FCFBC8A9BE4C7B50B /* YourValidatorListInteractor.swift */; }; E8B8D3D290DC7057144559CE /* WalletChainAccountDashboardPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E83833EB33E51A12F96F83B /* WalletChainAccountDashboardPresenter.swift */; }; + E9EE315D66D4E664BC250529 /* FeatureToggleListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAA8A8A8C3822633813C71F2 /* FeatureToggleListPresenter.swift */; }; EA8ECCD37FE5D6478018D3FC /* RecommendedValidatorListViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C0FA282377DCAB7C59ACFB6 /* RecommendedValidatorListViewController.xib */; }; EB544E8D26ABEE4ADE2F939F /* AnalyticsRewardDetailsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC0C84704B8876688E59FA58 /* AnalyticsRewardDetailsInteractor.swift */; }; EB5F587A71CCE1F0F86154CF /* ControllerAccountViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 002A29AE58EB53E915330490 /* ControllerAccountViewFactory.swift */; }; @@ -1871,6 +1878,7 @@ ED3514135CA429A516482F69 /* DappBrowserListProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B3AB5BB9A2488FDD8DDFBA6 /* DappBrowserListProtocols.swift */; }; EDC02F2FDCDB55519DB0273D /* AnalyticsRewardDetailsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761FDEBB414B1CFAD6992352 /* AnalyticsRewardDetailsTests.swift */; }; EDC72DAB0BDD63E0521E66B5 /* WarningAlertViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22FD9A4EA33DB4B6AFA5B0C4 /* WarningAlertViewController.swift */; }; + EDE467D5D4E6EC2A69FAD84A /* FeatureToggleListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97A985C8D05C0BAFEEFADFE7 /* FeatureToggleListViewController.swift */; }; EE6FC6EFB089A94EF105F2CC /* StakingRewardPayoutsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 934678CCA0EF35B6AE4AE8A1 /* StakingRewardPayoutsTests.swift */; }; EF02C9661F03C8EF58182997 /* StakingAmountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB76FEC075A6FE1D246BA5DD /* StakingAmountViewController.swift */; }; EF23CA9AF3889FEAB2D6CBD6 /* NftCollectionPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25B80FDDB5C3032A0BBBD826 /* NftCollectionPresenter.swift */; }; @@ -2029,6 +2037,7 @@ F7EB8F835CFA7FC949EF4C22 /* YourValidatorListWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 906C55FC079AF6112AF0745B /* YourValidatorListWireframe.swift */; }; F83EA1F4ECE14C390C0B287F /* StakingUnbondSetupInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D101339CC1292531CC4DB0AC /* StakingUnbondSetupInteractor.swift */; }; F865D752EBD2363E971BE267 /* MainNftContainerAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E69C4F66805399A3DB4ED8 /* MainNftContainerAssembly.swift */; }; + F952CDC56E85FA82DDEBE5D3 /* FeatureToggleListRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4EE06DBE885C0467D8929FE /* FeatureToggleListRouter.swift */; }; FA00488F282CC7710032FF49 /* SelectValidatorsStartFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA00488E282CC7710032FF49 /* SelectValidatorsStartFlow.swift */; }; FA004891282CCA400032FF49 /* SelectValidatorsStartParachainStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA004890282CCA400032FF49 /* SelectValidatorsStartParachainStrategy.swift */; }; FA004893282CCA520032FF49 /* SelectValidatorsStartRelaychainStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA004892282CCA520032FF49 /* SelectValidatorsStartRelaychainStrategy.swift */; }; @@ -3381,6 +3390,8 @@ 071606C72C7C6C8700C1DF75 /* PriceDataHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PriceDataHelper.swift; sourceTree = ""; }; 071606C82C7C6C8800C1DF75 /* AssetRepositoryFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssetRepositoryFactory.swift; sourceTree = ""; }; 071606C92C7C6C8800C1DF75 /* AssetModelMapper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssetModelMapper.swift; sourceTree = ""; }; + 071606CE2C7CB91D00C1DF75 /* LocalToggleService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalToggleService.swift; sourceTree = ""; }; + 071606D02C7CB95500C1DF75 /* LocalListToggle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalListToggle.swift; sourceTree = ""; }; 07165B1F2C6DDF4E00C11E3B /* fearless.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = fearless.entitlements; sourceTree = ""; }; 0716C83B28853ACA004C8CB1 /* WalletBalanceSubscriptionAdapter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletBalanceSubscriptionAdapter.swift; sourceTree = ""; }; 0716C84B288802EB004C8CB1 /* SwipableTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwipableTableViewCell.swift; sourceTree = ""; }; @@ -3655,6 +3666,7 @@ 2BE0492B98AB9C1540846B39 /* StakingPayoutConfirmationViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPayoutConfirmationViewFactory.swift; sourceTree = ""; }; 2C542733CEFB871FCD23195E /* NftSendConfirmInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendConfirmInteractor.swift; sourceTree = ""; }; 2CF682B92176E0FED5D7B4DB /* LiquidityPoolDetailsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsTests.swift; sourceTree = ""; }; + 2D09EBD67803AB57DF0F7636 /* FeatureToggleListViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FeatureToggleListViewLayout.swift; sourceTree = ""; }; 2D9C58C9D53A7EA34E5CB00C /* NftSendConfirmAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendConfirmAssembly.swift; sourceTree = ""; }; 2E4B0600AFFB96A75CF98755 /* StakingRedeemProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRedeemProtocols.swift; sourceTree = ""; }; 2E57C70327E8AB3D00AF075A /* CrowdloanWikiTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrowdloanWikiTableViewCell.swift; sourceTree = ""; }; @@ -3837,6 +3849,7 @@ 75B53E901B1475DE858A2C99 /* ContactsRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ContactsRouter.swift; sourceTree = ""; }; 75D1886C774F9F63C897CAF1 /* TonWebBridgeViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TonWebBridgeViewLayout.swift; sourceTree = ""; }; 761FDEBB414B1CFAD6992352 /* AnalyticsRewardDetailsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsRewardDetailsTests.swift; sourceTree = ""; }; + 769372B10E8D3C2BF7304FC3 /* FeatureToggleListInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FeatureToggleListInteractor.swift; sourceTree = ""; }; 779702BC0E9C9882BEA5C273 /* StakingPoolCreateConfirmInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateConfirmInteractor.swift; sourceTree = ""; }; 782CC21A2F9EEF5DBA3AB1AA /* PurchaseProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PurchaseProtocols.swift; sourceTree = ""; }; 784D20E16EEE55C2CF7B319B /* StakingBondMoreFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingBondMoreFlow.swift; sourceTree = ""; }; @@ -4060,7 +4073,6 @@ 8444D13E267133CF00AF6D8C /* CrowdloanAddMemo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrowdloanAddMemo.swift; sourceTree = ""; }; 8444D1732671372800AF6D8C /* BytesCodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BytesCodable.swift; sourceTree = ""; }; 8444D1BD2671465A00AF6D8C /* CrowdloanBonusServiceError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrowdloanBonusServiceError.swift; sourceTree = ""; }; - 84452A5F25D037AE00F47EC5 /* ChainStorage+Decodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ChainStorage+Decodable.swift"; sourceTree = ""; }; 84452F5725D5C30600F47EC5 /* FilesRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilesRepository.swift; sourceTree = ""; }; 84452F5C25D5CB3B00F47EC5 /* FileManagerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileManagerTests.swift; sourceTree = ""; }; 84452F7025D5E2B300F47EC5 /* runtime-westend.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "runtime-westend.json"; sourceTree = ""; }; @@ -4104,7 +4116,6 @@ 845532CF2684690D00C2645D /* ParachainSlotLease.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParachainSlotLease.swift; sourceTree = ""; }; 845532D126846B6800C2645D /* ParachainLeaseInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParachainLeaseInfo.swift; sourceTree = ""; }; 845532D526847A3400C2645D /* CrowdloanListTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CrowdloanListTests.swift; sourceTree = ""; }; - 84563CFE24EFE07E0055591D /* Storage+Identifiable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Storage+Identifiable.swift"; sourceTree = ""; }; 84563D0224EFE6D70055591D /* NetworkItemMapperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkItemMapperTests.swift; sourceTree = ""; }; 84563D0824F46B7F0055591D /* ManagedAccountItemMapperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManagedAccountItemMapperTests.swift; sourceTree = ""; }; 84585A2E251BFC8400390F7A /* TriangularedButton+Style.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TriangularedButton+Style.swift"; sourceTree = ""; }; @@ -4143,7 +4154,6 @@ 8461CC8426BC1306007460E4 /* MortalEraFactoryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MortalEraFactoryTests.swift; sourceTree = ""; }; 8461CC8626BC1F1F007460E4 /* ExtrinsicOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtrinsicOperationFactory.swift; sourceTree = ""; }; 8461CC8926BD2F07007460E4 /* RuntimeProviderPool.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeProviderPool.swift; sourceTree = ""; }; - 8463A6F825E2F82E003B8160 /* CDSingleValue+CoreDataCodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CDSingleValue+CoreDataCodable.swift"; sourceTree = ""; }; 8463A70225E2FCD0003B8160 /* WeakWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WeakWrapper.swift; sourceTree = ""; }; 8463A71125E30C95003B8160 /* BalanceViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BalanceViewModelFactory.swift; sourceTree = ""; }; 8463A71925E3116A003B8160 /* BalanceViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BalanceViewModel.swift; sourceTree = ""; }; @@ -4739,6 +4749,7 @@ 96D540DFC00C25D8F73CFDC3 /* CustomValidatorListWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CustomValidatorListWireframe.swift; sourceTree = ""; }; 96F09665083031502F9693F8 /* StakingMainWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingMainWireframe.swift; sourceTree = ""; }; 975DECE71DE70DFD866B8E23 /* SelectValidatorsConfirmViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectValidatorsConfirmViewFactory.swift; sourceTree = ""; }; + 97A985C8D05C0BAFEEFADFE7 /* FeatureToggleListViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FeatureToggleListViewController.swift; sourceTree = ""; }; 97E2A7A3731FAC0C965A898A /* StakingPoolInfoViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolInfoViewLayout.swift; sourceTree = ""; }; 99198B2B26321E4004840029 /* PolkaswapSwapConfirmationViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapSwapConfirmationViewController.swift; sourceTree = ""; }; 9981A1A70BCCB1B1644A7CE0 /* Pods-fearlessAll-fearless.dev.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessAll-fearless.dev.xcconfig"; path = "Target Support Files/Pods-fearlessAll-fearless/Pods-fearlessAll-fearless.dev.xcconfig"; sourceTree = ""; }; @@ -4908,6 +4919,7 @@ AEFED3DAA18BCEF0BFA15728 /* SelectValidatorsStartInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartInteractor.swift; sourceTree = ""; }; AF01941105BCD02536538362 /* CrowdloanContributionConfirmProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionConfirmProtocols.swift; sourceTree = ""; }; AF0C991DB1C7567632BB54A9 /* DappBrowserListRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserListRouter.swift; sourceTree = ""; }; + AF4A966103685CC10F99B63B /* FeatureToggleListAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FeatureToggleListAssembly.swift; sourceTree = ""; }; AF4DB8C42D41C3A14A379122 /* CreateContactProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreateContactProtocols.swift; sourceTree = ""; }; AFC9C09ABBCEB6E581134E84 /* MainNftContainerViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MainNftContainerViewController.swift; sourceTree = ""; }; AFD95EE4822A564C0D4D1CFE /* WalletOptionPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletOptionPresenter.swift; sourceTree = ""; }; @@ -4918,6 +4930,7 @@ B3459F610D6E5C782D8695A9 /* LiquidityPoolRemoveLiquidityConfirmViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityConfirmViewLayout.swift; sourceTree = ""; }; B399E7CA0A03A06EFDF1B126 /* PolkaswapTransaktionSettingsPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapTransaktionSettingsPresenter.swift; sourceTree = ""; }; B4774F00EDBB28F374797637 /* ClaimCrowdloanRewardsInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ClaimCrowdloanRewardsInteractor.swift; sourceTree = ""; }; + B4EE06DBE885C0467D8929FE /* FeatureToggleListRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FeatureToggleListRouter.swift; sourceTree = ""; }; B5934BA68F375F5F8237967D /* NetworkInfoViewController.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; path = NetworkInfoViewController.xib; sourceTree = ""; }; B5E69C4F66805399A3DB4ED8 /* MainNftContainerAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MainNftContainerAssembly.swift; sourceTree = ""; }; B8D9DD27C76FE239728ED5F8 /* StakingPoolCreateInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateInteractor.swift; sourceTree = ""; }; @@ -4930,6 +4943,7 @@ BB837A15BAAED64BC32F3F44 /* SelectMarketInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectMarketInteractor.swift; sourceTree = ""; }; BC2C9D26B9F9CC048C67796F /* AnalyticsRewardDetailsViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsRewardDetailsViewLayout.swift; sourceTree = ""; }; BD1C635488F941373CDBE377 /* ConfirmTransferRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConfirmTransferRouter.swift; sourceTree = ""; }; + BE7B9BC51F6B13337450E3DC /* FeatureToggleListProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FeatureToggleListProtocols.swift; sourceTree = ""; }; BE7D061906CF67230BF5393A /* NftSendConfirmTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendConfirmTests.swift; sourceTree = ""; }; C0EE58376751B23A9CEAEE1A /* StakingPoolCreateConfirmRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateConfirmRouter.swift; sourceTree = ""; }; C16219B3D0D2A658185C0850 /* MainNftContainerInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MainNftContainerInteractor.swift; sourceTree = ""; }; @@ -5062,6 +5076,7 @@ C96C3B5ABF4A8124848EFD17 /* ControllerAccountConfirmationWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountConfirmationWireframe.swift; sourceTree = ""; }; CA7427142A4B905B5DB15498 /* NftDetailsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftDetailsViewController.swift; sourceTree = ""; }; CA8ECADDA809DE7932B7A17C /* StakingPoolCreateConfirmProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateConfirmProtocols.swift; sourceTree = ""; }; + CAA8A8A8C3822633813C71F2 /* FeatureToggleListPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FeatureToggleListPresenter.swift; sourceTree = ""; }; CC17D12DCD0CDAF0BC13D80D /* StakingUnbondSetupViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondSetupViewController.swift; sourceTree = ""; }; CC5083A5751A1A3CC95F4F6F /* StakingUnbondSetupWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondSetupWireframe.swift; sourceTree = ""; }; CC516FE0E7682210D0F07FB2 /* StakingPoolInfoAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolInfoAssembly.swift; sourceTree = ""; }; @@ -7138,6 +7153,15 @@ path = Models; sourceTree = ""; }; + 071606CD2C7CB8FE00C1DF75 /* FeatureToggleService */ = { + isa = PBXGroup; + children = ( + 071606CE2C7CB91D00C1DF75 /* LocalToggleService.swift */, + 071606D02C7CB95500C1DF75 /* LocalListToggle.swift */, + ); + path = FeatureToggleService; + sourceTree = ""; + }; 0723ED9E2C48E35600880620 /* Flows */ = { isa = PBXGroup; children = ( @@ -8456,6 +8480,7 @@ BDB80385E6818AE7707DDFF8 /* LiquidityPoolRemoveLiquidityConfirm */, FBD5D2C2BD7B0632C232E4CF /* Transfer */, A53888D7C5E76ACD934B51DC /* ConfirmTransfer */, + 70891280ED837AB71A90AB0B /* FeatureToggleList */, ); path = Modules; sourceTree = ""; @@ -8487,6 +8512,13 @@ path = Flow; sourceTree = ""; }; + 70891280ED837AB71A90AB0B /* FeatureToggleList */ = { + isa = PBXGroup; + children = ( + ); + path = FeatureToggleList; + sourceTree = ""; + }; 7100EDE40D25E1075DD151C3 /* WalletTransactionHistory */ = { isa = PBXGroup; children = ( @@ -9579,7 +9611,6 @@ children = ( FA74359629C0734B0085A47E /* CDAccountInfo+CoreDataCodable.swift */, 8467FD5724EFD5C2005D486C /* CDAccountItem+CoreDataDecodable.swift */, - 84563CFE24EFE07E0055591D /* Storage+Identifiable.swift */, 84EBC54224F656D100459D15 /* SortDescriptor+Storage.swift */, 843910B1253ED4D100E3C217 /* CDChainStorageItem+CoreDataDecodable.swift */, 843910B5253EE62B00E3C217 /* DataProviderChange+Result.swift */, @@ -9588,9 +9619,7 @@ 07ECB7F82C69F62F000E0A14 /* CDTonDapp+CoreDataDecodable.swift */, 07ECB8062C6B7380000E0A14 /* CDTonConnectedApp+CoreDataDecodable.swift */, 2A66CF4E25D109770006E4C1 /* CDPhishingItem+CoreDataDecodable.swift */, - 84452A5F25D037AE00F47EC5 /* ChainStorage+Decodable.swift */, 84452FA425D679F200F47EC5 /* CDRuntimeMetadataItem+CoreDataCodable.swift */, - 8463A6F825E2F82E003B8160 /* CDSingleValue+CoreDataCodable.swift */, 84786E1E25FA6C390089DFF7 /* CDStashItem+CoreDataCodable.swift */, 0713098028C6F7BB002B17D0 /* CDScamInfo+CoreDataCodable.swift */, C63468E528F37912005CB1F1 /* CDContact + CoreDataCodable.swift */, @@ -9991,6 +10020,7 @@ 9E9B8E7D0CF6D39DD826885F /* TonWebBridge */, AD55C5CD2FE0946A08730F0A /* DappBrowser */, 289549035B3DBF4E3B283D2E /* DappBrowserList */, + AE187612EF3DE462ED577B3E /* FeatureToggleList */, ); path = Modules; sourceTree = ""; @@ -11771,6 +11801,20 @@ path = InitiatedBonding; sourceTree = ""; }; + AE187612EF3DE462ED577B3E /* FeatureToggleList */ = { + isa = PBXGroup; + children = ( + BE7B9BC51F6B13337450E3DC /* FeatureToggleListProtocols.swift */, + B4EE06DBE885C0467D8929FE /* FeatureToggleListRouter.swift */, + CAA8A8A8C3822633813C71F2 /* FeatureToggleListPresenter.swift */, + 769372B10E8D3C2BF7304FC3 /* FeatureToggleListInteractor.swift */, + 97A985C8D05C0BAFEEFADFE7 /* FeatureToggleListViewController.swift */, + 2D09EBD67803AB57DF0F7636 /* FeatureToggleListViewLayout.swift */, + AF4A966103685CC10F99B63B /* FeatureToggleListAssembly.swift */, + ); + path = FeatureToggleList; + sourceTree = ""; + }; AE2C845B25EE829E00986716 /* ViewModel */ = { isa = PBXGroup; children = ( @@ -14150,6 +14194,7 @@ FA38C9A32760700B005C5577 /* Services */ = { isa = PBXGroup; children = ( + 071606CD2C7CB8FE00C1DF75 /* FeatureToggleService */, 0701B8CD2C78F71800DCD395 /* AccountStatistics */, 0701B8C52C78F71800DCD395 /* Models */, 0701B8E52C78F71800DCD395 /* okx-dex-aggregator */, @@ -17082,6 +17127,7 @@ 84BE207825E7D62100B4748C /* ActiveEraInfo.swift in Sources */, FA37AE2C2859BA30001DCA96 /* StakingBondMoreConfirmationParachainViewModelState.swift in Sources */, C6A8D6C127FC318A0080F81C /* UniqueChainViewModel.swift in Sources */, + 071606CF2C7CB91D00C1DF75 /* LocalToggleService.swift in Sources */, 845BB8C925E45D1500E5FCDC /* BondCall.swift in Sources */, F40966B926B297D6008CD244 /* AnalyticsRewardsViewModel.swift in Sources */, FAFFAE8E29AC84B10074AF1F /* SubqueryCollatorDataResponse.swift in Sources */, @@ -18143,6 +18189,7 @@ 8428765424ADDE0200D91AD8 /* ProfileViewModelFactory.swift in Sources */, FAA0134E28DA12D7000A5230 /* StakingUnbondConfirmPoolStrategy.swift in Sources */, C661B3B427DFBA41005F1F7D /* AccountInfoSubscriptionProviderWrapper.swift in Sources */, + 071606D12C7CB95500C1DF75 /* LocalListToggle.swift in Sources */, F40966C326B297D6008CD244 /* AnalyticsContainerViewLayout.swift in Sources */, 84E1CD02260DCC62001E81B5 /* SwitchAccount+OnboardingMainWireframe.swift in Sources */, FAFFAE8D29AC84B10074AF1F /* SubqueryDelegationAction.swift in Sources */, @@ -19738,6 +19785,13 @@ 3CDF2323ABDADEBC32F2AE4B /* DappBrowserListViewLayout.swift in Sources */, 71DE4946BC2CE1DE0300BC16 /* DappBrowserListAssembly.swift in Sources */, 0701B98B2C78FAF000DCD395 /* UserLiquidityPoolsListInteractor.swift in Sources */, + 5A8C0ED62A840E8E0B56E85C /* FeatureToggleListProtocols.swift in Sources */, + F952CDC56E85FA82DDEBE5D3 /* FeatureToggleListRouter.swift in Sources */, + E9EE315D66D4E664BC250529 /* FeatureToggleListPresenter.swift in Sources */, + 08C2974B3B5AAA757CE57E33 /* FeatureToggleListInteractor.swift in Sources */, + EDE467D5D4E6EC2A69FAD84A /* FeatureToggleListViewController.swift in Sources */, + CCA06979DC3F21E5CCA505F0 /* FeatureToggleListViewLayout.swift in Sources */, + BB11D0C16D51423BFB0C45F2 /* FeatureToggleListAssembly.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/fearless/ApplicationLayer/ServiceAssembly.swift b/fearless/ApplicationLayer/ServiceAssembly.swift index 8c3b534712..7980bcd340 100644 --- a/fearless/ApplicationLayer/ServiceAssembly.swift +++ b/fearless/ApplicationLayer/ServiceAssembly.swift @@ -19,6 +19,7 @@ final class ServiceAssembly { lazy var priceLocalSubscriber = PriceLocalStorageSubscriberImpl.shared lazy var eventCenter = EventCenter.shared lazy var userDefaults = SettingsManager.shared + lazy var localToggle = LocalToggleService.shared private var _accountInfoRemoteServiceDefault: AccountInfoRemoteService? func accountInfoRemoteServiceDefault() -> AccountInfoRemoteService { diff --git a/fearless/ApplicationLayer/Services/FeatureToggleService/LocalListToggle.swift b/fearless/ApplicationLayer/Services/FeatureToggleService/LocalListToggle.swift new file mode 100644 index 0000000000..5e80087902 --- /dev/null +++ b/fearless/ApplicationLayer/Services/FeatureToggleService/LocalListToggle.swift @@ -0,0 +1,33 @@ +import Foundation +import RobinHood + +struct LocalListToggle: Codable { + let key: String + let title: String + let description: String + var storageValue: Bool + + func toggle() -> Self { + LocalListToggle( + key: key, + title: title, + description: description, + storageValue: !storageValue + ) + } +} + +extension LocalListToggle { + static let chains = LocalListToggle( + key: "0", + title: "Chains list env", + description: "is chains_dev.json", + storageValue: true + ) + static let tonEnv = LocalListToggle( + key: "1", + title: "Ton Enviroment", + description: "is testnet", + storageValue: false + ) +} diff --git a/fearless/ApplicationLayer/Services/FeatureToggleService/LocalToggleService.swift b/fearless/ApplicationLayer/Services/FeatureToggleService/LocalToggleService.swift new file mode 100644 index 0000000000..c1f04a2c92 --- /dev/null +++ b/fearless/ApplicationLayer/Services/FeatureToggleService/LocalToggleService.swift @@ -0,0 +1,90 @@ +import Foundation +import SoraKeystore +import SSFSingleValueCache +import RobinHood + +final class LocalToggleService: ApplicationServiceProtocol { + + static let shared = LocalToggleService() + + private lazy var storage = UserDefaults(suiteName: "Feature.Toggle.List") + private lazy var decoder = JSONDecoder() + private lazy var encoder = JSONEncoder() + + private init() {} + + lazy var list: [LocalListToggle] = { + guard let dict = storage?.dictionaryRepresentation() else { + return [] + } + let toggles: [LocalListToggle] = dict.compactMap({ (key, value) in + guard let data = value as? Data else { + return nil + } + return try? decoder.decode(LocalListToggle.self, from: data) + }) + return toggles + }() + + func setup() { + let dict = storage?.dictionaryRepresentation() + Self.toggles.forEach { toggle in + guard + dict?[toggle.key] == nil, + let data = try? encoder.encode(toggle) + else { + return + } + storage?.set(data, forKey: toggle.key) + } + storage?.synchronize() + } + + func throttle() {} + + private func getToggle(for key: String) -> LocalListToggle? { + guard + let data = storage?.value(forKey: key) as? Data, + let toggle = try? decoder.decode(LocalListToggle.self, from: data) + else { + return nil + } + return toggle + } + + func set(toggle: LocalListToggle) { + guard let data = try? encoder.encode(toggle) else { + return + } + storage?.setValue(data, forKey: toggle.key) + storage?.synchronize() + } + + // MARK: - Registry + + /// Default toggles + /// New Toggle should be register in Feature.Toggle.List user defaults + /// For shown in debug menu list + static let toggles: [LocalListToggle] = [ + LocalListToggle.chains, + LocalListToggle.tonEnv + ] + + var chainsListToggle: LocalListToggle { + get { + getToggle(for: "0") ?? LocalListToggle.chains + } + set { + set(toggle: newValue) + } + } + + var tonEnvListToggle: LocalListToggle { + get { + getToggle(for: "1") ?? LocalListToggle.tonEnv + } + set { + set(toggle: newValue) + } + } +} diff --git a/fearless/Common/Services/ServiceCoordinator.swift b/fearless/Common/Services/ServiceCoordinator.swift index 0b8675cf85..43837f59a2 100644 --- a/fearless/Common/Services/ServiceCoordinator.swift +++ b/fearless/Common/Services/ServiceCoordinator.swift @@ -21,6 +21,7 @@ final class ServiceCoordinator { private let walletConnect: WalletConnectService private let walletAssetsObserver: WalletAssetsObserver private let tonConnectService: TonConnectService + private let toggleService: LocalToggleService init( walletSettings: SelectedWalletSettings, @@ -30,7 +31,8 @@ final class ServiceCoordinator { polkaswapSettingsService: PolkaswapSettingsSyncServiceProtocol, walletConnect: WalletConnectService, walletAssetsObserver: WalletAssetsObserver, - tonConnectService: TonConnectService + tonConnectService: TonConnectService, + toggleService: LocalToggleService ) { self.walletSettings = walletSettings self.accountInfoService = accountInfoService @@ -40,6 +42,7 @@ final class ServiceCoordinator { self.walletConnect = walletConnect self.walletAssetsObserver = walletAssetsObserver self.tonConnectService = tonConnectService + self.toggleService = toggleService } } @@ -63,6 +66,7 @@ extension ServiceCoordinator: ServiceCoordinatorProtocol { walletConnect.setup() walletAssetsObserver.setup() tonConnectService.setup() + toggleService.setup() } func throttle() { @@ -121,7 +125,8 @@ extension ServiceCoordinator { polkaswapSettingsService: polkaswapSettingsService, walletConnect: walletConnect, walletAssetsObserver: walletAssetsObserver, - tonConnectService: ServiceAssembly.shared.tonConnectService() + tonConnectService: ServiceAssembly.shared.tonConnectService(), + toggleService: ServiceAssembly.shared.localToggle ) } } diff --git a/fearless/Modules/FeatureToggleList/FeatureToggleListAssembly.swift b/fearless/Modules/FeatureToggleList/FeatureToggleListAssembly.swift new file mode 100644 index 0000000000..8c725ab25a --- /dev/null +++ b/fearless/Modules/FeatureToggleList/FeatureToggleListAssembly.swift @@ -0,0 +1,24 @@ +import UIKit +import SoraFoundation + +final class FeatureToggleListAssembly { + static func configureModule() -> FeatureToggleListModuleCreationResult? { + let localizationManager = LocalizationManager.shared + + let interactor = FeatureToggleListInteractor() + let router = FeatureToggleListRouter() + + let presenter = FeatureToggleListPresenter( + interactor: interactor, + router: router, + localizationManager: localizationManager + ) + + let view = FeatureToggleListViewController( + output: presenter, + localizationManager: localizationManager + ) + + return (view, presenter) + } +} diff --git a/fearless/Modules/FeatureToggleList/FeatureToggleListInteractor.swift b/fearless/Modules/FeatureToggleList/FeatureToggleListInteractor.swift new file mode 100644 index 0000000000..9ab5d62ab4 --- /dev/null +++ b/fearless/Modules/FeatureToggleList/FeatureToggleListInteractor.swift @@ -0,0 +1,30 @@ +import UIKit +import RobinHood + +protocol FeatureToggleListInteractorOutput: AnyObject {} + +final class FeatureToggleListInteractor { + // MARK: - Private properties + private weak var output: FeatureToggleListInteractorOutput? + + private lazy var storage: LocalToggleService = { + ServiceAssembly.shared.localToggle + }() +} + +// MARK: - FeatureToggleListInteractorInput +extension FeatureToggleListInteractor: FeatureToggleListInteractorInput { + var toggles: [LocalListToggle] { + get { + storage.list + } + } + + func set(toggle: LocalListToggle) { + storage.set(toggle: toggle) + } + + func setup(with output: FeatureToggleListInteractorOutput) { + self.output = output + } +} diff --git a/fearless/Modules/FeatureToggleList/FeatureToggleListPresenter.swift b/fearless/Modules/FeatureToggleList/FeatureToggleListPresenter.swift new file mode 100644 index 0000000000..a49a9c3868 --- /dev/null +++ b/fearless/Modules/FeatureToggleList/FeatureToggleListPresenter.swift @@ -0,0 +1,78 @@ +import Foundation +import SoraFoundation + +protocol FeatureToggleListViewInput: ControllerBackedProtocol { + func didReceive(viewModels: [SelectableViewModel]) +} + +protocol FeatureToggleListInteractorInput: AnyObject { + var toggles: [LocalListToggle] { get } + func setup(with output: FeatureToggleListInteractorOutput) + func set(toggle: LocalListToggle) +} + +final class FeatureToggleListPresenter { + // MARK: Private properties + private weak var view: FeatureToggleListViewInput? + private let router: FeatureToggleListRouterInput + private let interactor: FeatureToggleListInteractorInput + + // MARK: - Constructors + init( + interactor: FeatureToggleListInteractorInput, + router: FeatureToggleListRouterInput, + localizationManager: LocalizationManagerProtocol + ) { + self.interactor = interactor + self.router = router + self.localizationManager = localizationManager + } + + // MARK: - Private methods + + private func provideToggles() { + Task { + let toggles = interactor.toggles + let viewModels = toggles.map { + let underlyingViewModel = TitleWithSubtitleViewModel( + title: $0.title, + subtitle: $0.description + ) + return SelectableViewModel( + underlyingViewModel: underlyingViewModel, + selectable: $0.storageValue + ) + } + Task { @MainActor in + view?.didReceive(viewModels: viewModels) + } + } + } +} + +// MARK: - FeatureToggleListViewOutput +extension FeatureToggleListPresenter: FeatureToggleListViewOutput { + func didSwitch(index: Int) { + guard var toggle = interactor.toggles[safe: index] else { + return + } + let updatedToggle = toggle.toggle() + interactor.set(toggle: updatedToggle) + } + + func didLoad(view: FeatureToggleListViewInput) { + self.view = view + interactor.setup(with: self) + provideToggles() + } +} + +// MARK: - FeatureToggleListInteractorOutput +extension FeatureToggleListPresenter: FeatureToggleListInteractorOutput {} + +// MARK: - Localizable +extension FeatureToggleListPresenter: Localizable { + func applyLocalization() {} +} + +extension FeatureToggleListPresenter: FeatureToggleListModuleInput {} diff --git a/fearless/Modules/FeatureToggleList/FeatureToggleListProtocols.swift b/fearless/Modules/FeatureToggleList/FeatureToggleListProtocols.swift new file mode 100644 index 0000000000..1f356a817e --- /dev/null +++ b/fearless/Modules/FeatureToggleList/FeatureToggleListProtocols.swift @@ -0,0 +1,10 @@ +typealias FeatureToggleListModuleCreationResult = ( + view: FeatureToggleListViewInput, + input: FeatureToggleListModuleInput +) + +protocol FeatureToggleListRouterInput: AnyObject {} + +protocol FeatureToggleListModuleInput: AnyObject {} + +protocol FeatureToggleListModuleOutput: AnyObject {} diff --git a/fearless/Modules/FeatureToggleList/FeatureToggleListRouter.swift b/fearless/Modules/FeatureToggleList/FeatureToggleListRouter.swift new file mode 100644 index 0000000000..7499d79e79 --- /dev/null +++ b/fearless/Modules/FeatureToggleList/FeatureToggleListRouter.swift @@ -0,0 +1,3 @@ +import Foundation + +final class FeatureToggleListRouter: FeatureToggleListRouterInput {} diff --git a/fearless/Modules/FeatureToggleList/FeatureToggleListViewController.swift b/fearless/Modules/FeatureToggleList/FeatureToggleListViewController.swift new file mode 100644 index 0000000000..41b47d75b3 --- /dev/null +++ b/fearless/Modules/FeatureToggleList/FeatureToggleListViewController.swift @@ -0,0 +1,92 @@ +import UIKit +import SoraFoundation + +protocol FeatureToggleListViewOutput: AnyObject { + func didLoad(view: FeatureToggleListViewInput) + func didSwitch(index: Int) +} + +final class FeatureToggleListViewController: UIViewController, ViewHolder { + typealias RootViewType = FeatureToggleListViewLayout + + // MARK: Private properties + private let output: FeatureToggleListViewOutput + + private var viewModels: [SelectableViewModel] = [] + + // MARK: - Constructor + init( + output: FeatureToggleListViewOutput, + localizationManager: LocalizationManagerProtocol? + ) { + self.output = output + super.init(nibName: nil, bundle: nil) + self.localizationManager = localizationManager + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Life cycle + override func loadView() { + view = FeatureToggleListViewLayout() + } + + override func viewDidLoad() { + super.viewDidLoad() + output.didLoad(view: self) + title = "Toggle list" + setupTableView() + } + + // MARK: - Private methods + + private func setupTableView() { + rootView.tableView.registerClassForCell(TitleSubtitleSwitchTableViewCell.self) + rootView.tableView.dataSource = self + rootView.tableView.rowHeight = 44 + } +} + +// MARK: - FeatureToggleListViewInput +extension FeatureToggleListViewController: FeatureToggleListViewInput { + func didReceive(viewModels: [SelectableViewModel]) { + self.viewModels = viewModels + rootView.tableView.reloadData() + } +} + +// MARK: - Localizable +extension FeatureToggleListViewController: Localizable { + func applyLocalization() {} +} + +// MARK: - UITableViewDataSource + +extension FeatureToggleListViewController: UITableViewDataSource { + + func tableView(_: UITableView, numberOfRowsInSection section: Int) -> Int { + viewModels.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + guard let viewModel = viewModels[safe: indexPath.row] else { return UITableViewCell() } + + let cell = tableView.dequeueReusableCellWithType(TitleSubtitleSwitchTableViewCell.self)! + cell.delegate = self + cell.bind(viewModel: viewModel) + + return cell + } +} + +extension FeatureToggleListViewController: SwitchTableViewCellDelegate { + func didToggle(cell: SwitchTableViewCell) { + guard let indexPath = rootView.tableView.indexPath(for: cell) else { + return + } + output.didSwitch(index: indexPath.row) + } +} diff --git a/fearless/Modules/FeatureToggleList/FeatureToggleListViewLayout.swift b/fearless/Modules/FeatureToggleList/FeatureToggleListViewLayout.swift new file mode 100644 index 0000000000..4f5d696813 --- /dev/null +++ b/fearless/Modules/FeatureToggleList/FeatureToggleListViewLayout.swift @@ -0,0 +1,28 @@ +import UIKit + +final class FeatureToggleListViewLayout: UIView { + let tableView: UITableView = { + let view = UITableView() + view.backgroundColor = R.color.colorBlack19() + view.separatorStyle = .none + return view + }() + + override init(frame: CGRect) { + super.init(frame: frame) + backgroundColor = R.color.colorBlack19() + setupLayout() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setupLayout() { + addSubview(tableView) + tableView.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + } +} diff --git a/fearless/Modules/Profile/ProfilePresenter.swift b/fearless/Modules/Profile/ProfilePresenter.swift index b50e4092ef..84e3e20326 100644 --- a/fearless/Modules/Profile/ProfilePresenter.swift +++ b/fearless/Modules/Profile/ProfilePresenter.swift @@ -63,6 +63,10 @@ final class ProfilePresenter { } extension ProfilePresenter: ProfilePresenterProtocol { + func openDebugMenu() { + wireframe.openDebugMenu(from: view) + } + func didLoad(view: ProfileViewProtocol) { self.view = view interactor.setup(with: self) diff --git a/fearless/Modules/Profile/ProfileProtocol.swift b/fearless/Modules/Profile/ProfileProtocol.swift index ab6697f93e..dee7fbb6f9 100644 --- a/fearless/Modules/Profile/ProfileProtocol.swift +++ b/fearless/Modules/Profile/ProfileProtocol.swift @@ -12,6 +12,7 @@ protocol ProfilePresenterProtocol: AnyObject { func logout() func switcherValueChanged(isOn: Bool, index: Int) func didTapAccountScore(address: String?) + func openDebugMenu() } protocol ProfileInteractorInputProtocol: AnyObject { @@ -55,6 +56,7 @@ protocol ProfileWireframeProtocol: ErrorPresentable, func close(view: ControllerBackedProtocol?) func showPolkaswapDisclaimer(from view: ControllerBackedProtocol?) func showWalletConnect(from view: ControllerBackedProtocol?) + func openDebugMenu(from view: ControllerBackedProtocol?) } protocol ProfileViewFactoryProtocol: AnyObject { diff --git a/fearless/Modules/Profile/ProfileViewController.swift b/fearless/Modules/Profile/ProfileViewController.swift index f2a1d4f34d..debd915978 100644 --- a/fearless/Modules/Profile/ProfileViewController.swift +++ b/fearless/Modules/Profile/ProfileViewController.swift @@ -68,6 +68,10 @@ final class ProfileViewController: UIViewController, ViewHolder { @objc func switcherValueChanged(sender: UISwitch) { presenter.switcherValueChanged(isOn: sender.isOn, index: sender.tag) } + + @objc func debugMenu(tapGesture: UITapGestureRecognizer) { + presenter.openDebugMenu() + } // MARK: - tableView @@ -81,7 +85,9 @@ final class ProfileViewController: UIViewController, ViewHolder { ) { let locale = localizationManager?.selectedLocale cell.titleLabel.text = R.string.localizable.profileTitle(preferredLanguages: locale?.rLanguages) - + let tap = UITapGestureRecognizer(target: self, action: #selector(debugMenu)) + tap.numberOfTapsRequired = 5 + cell.titleLabel.addGestureRecognizer(tap) return cell } else { assertionFailure("Profile section cell creation failed") diff --git a/fearless/Modules/Profile/ProfileWireframe.swift b/fearless/Modules/Profile/ProfileWireframe.swift index 1d04112fc9..7b052a4bcd 100644 --- a/fearless/Modules/Profile/ProfileWireframe.swift +++ b/fearless/Modules/Profile/ProfileWireframe.swift @@ -115,6 +115,15 @@ final class ProfileWireframe: ProfileWireframeProtocol, AuthorizationPresentable view?.controller.present(navigation, animated: true) } + + func openDebugMenu(from view: (any ControllerBackedProtocol)?) { + let module = FeatureToggleListAssembly.configureModule() + guard let controller = module?.view.controller else { + return + } + let navigation = FearlessNavigationController(rootViewController: controller) + view?.controller.present(navigation, animated: true) + } // MARK: Private diff --git a/fearless/Modules/Profile/View/ProfileSectionTableViewCell.xib b/fearless/Modules/Profile/View/ProfileSectionTableViewCell.xib index 84d2dce50f..516a6b407f 100644 --- a/fearless/Modules/Profile/View/ProfileSectionTableViewCell.xib +++ b/fearless/Modules/Profile/View/ProfileSectionTableViewCell.xib @@ -1,9 +1,9 @@ - + - + @@ -22,8 +22,8 @@ - @@ -46,7 +47,7 @@ - + @@ -122,6 +123,7 @@ + From f21cbf127fc639a43bee1cea5f8def09714bec7b Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Thu, 29 Aug 2024 12:57:31 +0500 Subject: [PATCH 014/156] [#FLW-4925] There are wrong icons --- fearless.xcodeproj/project.pbxproj | 4 -- .../Wallet/AssetTransactionData+Ton.swift | 35 +++++++++++- .../Main/TonHistoryOperationFactory.swift | 54 ++++++++++--------- ...etTransactionHistoryViewModelFactory.swift | 6 ++- .../Views/WalletTransactionHistoryCell.swift | 6 +-- .../Transfer/Transfer/TransferSendFlow.swift | 33 ------------ 6 files changed, 72 insertions(+), 66 deletions(-) delete mode 100644 fearless/Modules/Transfer/Transfer/TransferSendFlow.swift diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index 0d51f4d707..56364f1689 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -224,7 +224,6 @@ 07230EAF2C73608900B92466 /* DappBrowserViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07230EAE2C73608900B92466 /* DappBrowserViewModel.swift */; }; 07230EB12C7456B900B92466 /* dapps.json in Resources */ = {isa = PBXBuildFile; fileRef = 07230EB02C7456B900B92466 /* dapps.json */; }; 0723EDA02C48E37400880620 /* SoraQrTransferFlowUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0723ED9F2C48E37400880620 /* SoraQrTransferFlowUseCase.swift */; }; - 0723EDA22C48F2C900880620 /* TransferSendFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0723EDA12C48F2C900880620 /* TransferSendFlow.swift */; }; 0723EDA42C49369D00880620 /* TransferFlowUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0723EDA32C49369D00880620 /* TransferFlowUseCase.swift */; }; 0723EDA62C50B87B00880620 /* BokoloTransferFlowUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0723EDA52C50B87B00880620 /* BokoloTransferFlowUseCase.swift */; }; 0723EDA82C50D6FE00880620 /* SubstrateTransferFlowUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0723EDA72C50D6FD00880620 /* SubstrateTransferFlowUseCase.swift */; }; @@ -3406,7 +3405,6 @@ 07230EAE2C73608900B92466 /* DappBrowserViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DappBrowserViewModel.swift; sourceTree = ""; }; 07230EB02C7456B900B92466 /* dapps.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = dapps.json; sourceTree = ""; }; 0723ED9F2C48E37400880620 /* SoraQrTransferFlowUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoraQrTransferFlowUseCase.swift; sourceTree = ""; }; - 0723EDA12C48F2C900880620 /* TransferSendFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransferSendFlow.swift; sourceTree = ""; }; 0723EDA32C49369D00880620 /* TransferFlowUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransferFlowUseCase.swift; sourceTree = ""; }; 0723EDA52C50B87B00880620 /* BokoloTransferFlowUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BokoloTransferFlowUseCase.swift; sourceTree = ""; }; 0723EDA72C50D6FD00880620 /* SubstrateTransferFlowUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubstrateTransferFlowUseCase.swift; sourceTree = ""; }; @@ -7169,7 +7167,6 @@ 0723ED9E2C48E35600880620 /* Flows */ = { isa = PBXGroup; children = ( - 0723EDA12C48F2C900880620 /* TransferSendFlow.swift */, 0723EDA32C49369D00880620 /* TransferFlowUseCase.swift */, 0723ED9F2C48E37400880620 /* SoraQrTransferFlowUseCase.swift */, 0723EDA72C50D6FD00880620 /* SubstrateTransferFlowUseCase.swift */, @@ -19734,7 +19731,6 @@ BC2DF589C6623601C39EF8F4 /* LiquidityPoolSupplyPresenter.swift in Sources */, 87C1FC2909A8360DDBA625E5 /* LiquidityPoolSupplyInteractor.swift in Sources */, F31469BD18062A4A008FE39E /* LiquidityPoolSupplyViewController.swift in Sources */, - 0723EDA22C48F2C900880620 /* TransferSendFlow.swift in Sources */, 5E8504507116E0177D70314B /* LiquidityPoolSupplyViewLayout.swift in Sources */, DCE13AA9F3BA0EB54F793017 /* LiquidityPoolSupplyAssembly.swift in Sources */, 6FAC7E8F0DACB3F2AA0BE825 /* LiquidityPoolSupplyConfirmProtocols.swift in Sources */, diff --git a/fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift b/fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift index b7f9fed334..fb353054a0 100644 --- a/fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift +++ b/fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift @@ -37,6 +37,11 @@ extension AssetTransactionData { let friendlyAddress = tonTransfer.sender.address.toFriendly().toString() let type: TransactionType = friendlyAddress == address ? .outgoing : .incoming + + var iconContext: [String: String] = [:] + if let iconUrl = asset.icon?.absoluteString { + iconContext["icon"] = iconUrl + } return AssetTransactionData( transactionId: event.eventId, status: status, @@ -51,7 +56,7 @@ extension AssetTransactionData { timestamp: Int64(event.timestamp), type: type.rawValue, reason: "", - context: nil + context: iconContext ) case let .contractDeploy(deploy): return AssetTransactionData( @@ -93,6 +98,11 @@ extension AssetTransactionData { let sender = jettonTransfer.sender?.address.toFriendly().toString() let type: TransactionType = sender == address ? .outgoing : .incoming + + var iconContext: [String: String] = [:] + if let iconUrl = jettonTransfer.jettonInfo.imageURL?.absoluteString { + iconContext["icon"] = iconUrl + } return AssetTransactionData( transactionId: event.eventId, status: status, @@ -107,6 +117,29 @@ extension AssetTransactionData { timestamp: Int64(event.timestamp), type: type.rawValue, reason: "", + context: iconContext + ) + case let .jettonSwap(swap): + + let amountDecimal = Decimal.fromSubstrateAmount( + swap.amountIn, + precision: Int16(asset.precision) + ) ?? .zero + let amount = AmountDecimal(value: amountDecimal) + return AssetTransactionData( + transactionId: swap.dex, + status: status, + assetId: swap.jettonInfoIn?.symbol ?? "", + peerId: swap.jettonInfoOut?.symbol ?? "", + peerFirstName: nil, + peerLastName: nil, + peerName: "", + details: String(swap.amountOut), + amount: amount, + fees: [], + timestamp: .zero, + type: TransactionType.swap.rawValue, + reason: "", context: nil ) default: diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/TonHistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/TonHistoryOperationFactory.swift index a02919c673..9371de6699 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/TonHistoryOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/TonHistoryOperationFactory.swift @@ -46,7 +46,7 @@ final class TonHistoryOperationFactory { before_lt: Int64? ) async throws -> TonAccountEvents { guard let tonAPIClient else { - throw ConvenienceError(error: "Client not initialized") + throw ConvenienceError(error: "Client not initialised") } let response = try await tonAPIClient.getAccountEvents( path: .init(account_id: address), @@ -68,9 +68,9 @@ final class TonHistoryOperationFactory { startFrom: before_lt ?? 0, nextFrom: entity.next_from ) - return remoteEvents -// let tonEvents = filterTonEvents(events: remoteEvents) -// return tonEvents + + let tonEvents = filterTonEvents(events: remoteEvents) + return tonEvents } private func fetchJettonsHistory( @@ -79,7 +79,7 @@ final class TonHistoryOperationFactory { before_lt: Int64? ) async throws -> TonAccountEvents { guard let tonAPIClient else { - throw ConvenienceError(error: "Client not initialized") + throw ConvenienceError(error: "Client not initialised") } let response = try await tonAPIClient.getAccountJettonHistoryByID( path: .init( @@ -106,25 +106,31 @@ final class TonHistoryOperationFactory { ) } -// private func filterTonEvents(events: TonAccountEvents) -> TonAccountEvents { -// let filteredEvents = events.events.compactMap { event -> TonAccountEvent? in -// let filteredActions = event.actions.compactMap { action -> AccountEventAction? in -// guard case .tonTransfer = action.type else { return nil } -// return action -// } -// guard !filteredActions.isEmpty else { return nil } -// return TonAccountEvent( -// eventId: event.eventId, -// timestamp: event.timestamp, -// account: event.account, -// isScam: event.isScam, -// isInProgress: event.isInProgress, -// fee: event.fee, -// actions: filteredActions -// ) -// } -// return filteredEvents -// } + private func filterTonEvents(events: TonAccountEvents) -> TonAccountEvents { + let filteredEvents = events.events.compactMap { event -> TonAccountEvent? in + let filteredActions = event.actions.compactMap { action -> AccountEventAction? in + guard case .tonTransfer = action.type else { return nil } + return action + } + guard !filteredActions.isEmpty else { return nil } + return TonAccountEvent( + eventId: event.eventId, + timestamp: event.timestamp, + account: event.account, + isScam: event.isScam, + isInProgress: event.isInProgress, + fee: event.fee, + actions: filteredActions + ) + } + + return TonAccountEvents( + address: events.address, + events: filteredEvents, + startFrom: events.startFrom, + nextFrom: events.nextFrom + ) + } private func createMapOperation( dependingOn remoteOperation: BaseOperation, diff --git a/fearless/Modules/NewWallet/WalletTransactionHistory/ViewModel/WalletTransactionHistoryViewModelFactory.swift b/fearless/Modules/NewWallet/WalletTransactionHistory/ViewModel/WalletTransactionHistoryViewModelFactory.swift index aeb8916a80..4a767f9826 100644 --- a/fearless/Modules/NewWallet/WalletTransactionHistory/ViewModel/WalletTransactionHistoryViewModelFactory.swift +++ b/fearless/Modules/NewWallet/WalletTransactionHistory/ViewModel/WalletTransactionHistoryViewModelFactory.swift @@ -197,6 +197,10 @@ final class WalletTransactionHistoryViewModelFactory: WalletTransactionHistoryVi size: CGSize(width: 50, height: 50), contentScale: UIScreen.main.scale ) + var imageViewModel: RemoteImageViewModel? + if let icon = data.context?["icon"] { + imageViewModel = RemoteImageViewModel(string: icon) + } let viewModel = WalletTransactionHistoryCellViewModel( transaction: data, address: address, @@ -207,7 +211,7 @@ final class WalletTransactionHistoryViewModelFactory: WalletTransactionHistoryVi statusIcon: statusIcon, status: data.status, incoming: incoming, - imageViewModel: nil + imageViewModel: imageViewModel ) return viewModel } diff --git a/fearless/Modules/NewWallet/WalletTransactionHistory/Views/WalletTransactionHistoryCell.swift b/fearless/Modules/NewWallet/WalletTransactionHistory/Views/WalletTransactionHistoryCell.swift index 00dad7f0eb..b23c77de55 100644 --- a/fearless/Modules/NewWallet/WalletTransactionHistory/Views/WalletTransactionHistoryCell.swift +++ b/fearless/Modules/NewWallet/WalletTransactionHistory/Views/WalletTransactionHistoryCell.swift @@ -124,15 +124,15 @@ class WalletTransactionHistoryCell: UITableViewCell { transactionStatusIconImageView.image = viewModel.statusIcon transactionStatusIconImageView.isHidden = viewModel.statusIcon == nil - if let icon = viewModel.icon { - accountIconImageView.image = icon - } else if let imageViewModel = viewModel.imageViewModel { + if let imageViewModel = viewModel.imageViewModel { imageViewModel.loadImage( on: accountIconImageView, targetSize: LayoutConstants.accountImageViewSize, animated: true, cornerRadius: 0 ) + } else if let icon = viewModel.icon { + accountIconImageView.image = icon } switch viewModel.status { diff --git a/fearless/Modules/Transfer/Transfer/TransferSendFlow.swift b/fearless/Modules/Transfer/Transfer/TransferSendFlow.swift deleted file mode 100644 index 381c229119..0000000000 --- a/fearless/Modules/Transfer/Transfer/TransferSendFlow.swift +++ /dev/null @@ -1,33 +0,0 @@ -import Foundation -import SSFModels -import SSFQRService - -// enum SendInitialData { -// case chainAsset(ChainAsset) -// case address(String) -// case soraMainnet(qrInfo: SoraQRInfo) -// case bokoloCash(qrInfo: BokoloCashQRInfo) -// case desiredCryptocurrency(qrInfo: DesiredCryptocurrencyQRInfo) -// -// init(qrInfoType: QRInfoType) { -// switch qrInfoType { -// case let .bokoloCash(bokoloCashQRInfo): -// self = .bokoloCash(qrInfo: bokoloCashQRInfo) -// case let .sora(soraQRInfo): -// self = .soraMainnet(qrInfo: soraQRInfo) -// case let .cex(cexQRInfo): -// self = .address(cexQRInfo.address) -// case let .desiredCryptocurrency(qrInfo): -// self = .desiredCryptocurrency(qrInfo: qrInfo) -// } -// } -// -// var canSelectAsset: Bool { -// switch self { -// case .chainAsset, .address, .desiredCryptocurrency: -// return true -// case .soraMainnet, .bokoloCash: -// return false -// } -// } -// } From d25e20707517e5ef0e2f68418a841854c7b8a602 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Thu, 29 Aug 2024 14:19:49 +0500 Subject: [PATCH 015/156] [#FLW-4927, #FLW-4928] Substrate transfer has been fixed --- fearless/Common/Model/KeystoreTag.swift | 15 +++++++++++++++ .../Operation/MetaAccountOperationFactory.swift | 2 +- .../ConfirmTransferPresenter.swift | 2 +- .../Transfer/Transfer/TransferFlowUseCase.swift | 1 + 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/fearless/Common/Model/KeystoreTag.swift b/fearless/Common/Model/KeystoreTag.swift index 4f76f45b2f..2baf990c51 100644 --- a/fearless/Common/Model/KeystoreTag.swift +++ b/fearless/Common/Model/KeystoreTag.swift @@ -27,6 +27,21 @@ enum KeystoreTagV2: String, CaseIterable { Self.tonSecretKeyTagForMetaId(metaId, accountId: accountId) } } + + static func seedKeyTag( + for ecosystem: Ecosystem, + metaId: String, + accountId: AccountId? = nil + ) -> String { + switch ecosystem { + case .substrate: + Self.substrateSeedTagForMetaId(metaId, accountId: accountId) + case .ethereum, .ethereumBased: + Self.ethereumSeedTagForMetaId(metaId, accountId: accountId) + case .ton: + "" + } + } static func substrateSecretKeyTagForMetaId( _ metaId: String, diff --git a/fearless/Common/Operation/MetaAccountOperationFactory.swift b/fearless/Common/Operation/MetaAccountOperationFactory.swift index 97f54e4759..294580a772 100644 --- a/fearless/Common/Operation/MetaAccountOperationFactory.swift +++ b/fearless/Common/Operation/MetaAccountOperationFactory.swift @@ -132,7 +132,7 @@ private extension MetaAccountOperationFactory { ecosystem: Ecosystem, accountId: AccountId? = nil ) throws { - let tag = KeystoreTagV2.secretKeyTag(for: ecosystem, metaId: metaId, accountId: accountId) + let tag = KeystoreTagV2.seedKeyTag(for: ecosystem, metaId: metaId, accountId: accountId) try keystore.saveKey(seed, with: tag) } diff --git a/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferPresenter.swift b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferPresenter.swift index 5e6c9b5b8f..f675653f54 100644 --- a/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferPresenter.swift +++ b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferPresenter.swift @@ -94,7 +94,7 @@ final class ConfirmTransferPresenter { let transfer = useCase.transfer, let chainAsset = useCase.selectedChainAsset else { - throw ConvenienceError(error: "Missing requared params") + throw ConvenienceError(error: "Missing required params") } let hash = try await interactor.submit(transfer: transfer, chainAsset: chainAsset) diff --git a/fearless/Modules/Transfer/Transfer/TransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/TransferFlowUseCase.swift index 735b2a2a21..ef913b0547 100644 --- a/fearless/Modules/Transfer/Transfer/TransferFlowUseCase.swift +++ b/fearless/Modules/Transfer/Transfer/TransferFlowUseCase.swift @@ -183,6 +183,7 @@ extension TransferFlowUseCase { tip: tip ) let transfer = TransferType.substrate(subtrateTransfer) + self.transfer = transfer return transfer } From d3bf62858219b58e859527b54d55356459c4d7c1 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Thu, 29 Aug 2024 14:37:15 +0500 Subject: [PATCH 016/156] [#FLW-4929] There is an error on Bokolo --- fearless/Common/Model/KeystoreTag.swift | 2 +- .../Transfer/BokoloTransferFlowUseCase.swift | 4 +- .../Transfer/Transfer/TransferPresenter.swift | 39 +++++++++++-------- 3 files changed, 25 insertions(+), 20 deletions(-) diff --git a/fearless/Common/Model/KeystoreTag.swift b/fearless/Common/Model/KeystoreTag.swift index 2baf990c51..a8ebbae994 100644 --- a/fearless/Common/Model/KeystoreTag.swift +++ b/fearless/Common/Model/KeystoreTag.swift @@ -27,7 +27,7 @@ enum KeystoreTagV2: String, CaseIterable { Self.tonSecretKeyTagForMetaId(metaId, accountId: accountId) } } - + static func seedKeyTag( for ecosystem: Ecosystem, metaId: String, diff --git a/fearless/Modules/Transfer/Transfer/BokoloTransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/BokoloTransferFlowUseCase.swift index 1de6e658e2..420abaddcb 100644 --- a/fearless/Modules/Transfer/Transfer/BokoloTransferFlowUseCase.swift +++ b/fearless/Modules/Transfer/Transfer/BokoloTransferFlowUseCase.swift @@ -125,7 +125,7 @@ final class BokoloTransferFlowUseCase: TransferFlowUseCase { provideInputViewModel?() - try await fetchRequaredInfo(for: qrChainAsset) + try await fetchRequiredInfo(for: qrChainAsset) transfer = try buildTransfer() refreshFee() } @@ -286,7 +286,7 @@ final class BokoloTransferFlowUseCase: TransferFlowUseCase { return transfer } - private func fetchRequaredInfo(for chainAsset: ChainAsset) async throws { + private func fetchRequiredInfo(for chainAsset: ChainAsset) async throws { guard let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId else { throw TransferFlowUseCaseError.missingAccount } diff --git a/fearless/Modules/Transfer/Transfer/TransferPresenter.swift b/fearless/Modules/Transfer/Transfer/TransferPresenter.swift index 76b083fe26..06a470d7e1 100644 --- a/fearless/Modules/Transfer/Transfer/TransferPresenter.swift +++ b/fearless/Modules/Transfer/Transfer/TransferPresenter.swift @@ -465,27 +465,32 @@ final class TransferPresenter { with chainAsset: ChainAsset, successCompletion: @escaping () -> Void ) async { - guard let recipientAddress = currentFlowUseCase?.recipientAddress else { - return - } - let validationResult = await interactor.validate(address: recipientAddress, for: chainAsset.chain) - switch validationResult { - case .valid: + switch currentFlowUseCase?.implType { + case .bokoloCash: successCompletion() - case let .invalid(address): - guard let address = address else { - await showInvalidAddressAlert() - return - } - let possibleChains = await interactor.getPossibleChains(for: address) - guard possibleChains.isNotEmpty else { - await showInvalidAddressAlert() + default: + guard let recipientAddress = currentFlowUseCase?.recipientAddress else { return } + let validationResult = await interactor.validate(address: recipientAddress, for: chainAsset.chain) + switch validationResult { + case .valid: + successCompletion() + case let .invalid(address): + guard let address = address else { + await showInvalidAddressAlert() + return + } + let possibleChains = await interactor.getPossibleChains(for: address) + guard possibleChains.isNotEmpty else { + await showInvalidAddressAlert() + return + } - await showPossibleChainsAlert(possibleChains) - case .sameAddress: - await showSameAddressAlert(successCompletion: successCompletion) + await showPossibleChainsAlert(possibleChains) + case .sameAddress: + await showSameAddressAlert(successCompletion: successCompletion) + } } } From a0500c2dc33bb3aae2fb81773ba6193ad711332d Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Thu, 29 Aug 2024 14:41:35 +0500 Subject: [PATCH 017/156] [#FLW-4930, #FLW-4933] There is an error on ETH --- .../Transfer/Transfer/EthereumTransferFlowUseCase.swift | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fearless/Modules/Transfer/Transfer/EthereumTransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/EthereumTransferFlowUseCase.swift index 4c666c8330..fd46d6de9f 100644 --- a/fearless/Modules/Transfer/Transfer/EthereumTransferFlowUseCase.swift +++ b/fearless/Modules/Transfer/Transfer/EthereumTransferFlowUseCase.swift @@ -72,7 +72,7 @@ final class EthereumTransferFlowUseCase: TransferFlowUseCase { provideNetworkViewModel?() - try await fetchRequaredInfo(for: chainAsset) + try await fetchRequiredInfo(for: chainAsset) calcFee() } @@ -144,10 +144,11 @@ final class EthereumTransferFlowUseCase: TransferFlowUseCase { receiver: recipientAddress ) let transfer = TransferType.ethereum(ethereumTransfer) + self.transfer = transfer return transfer } - private func fetchRequaredInfo(for chainAsset: ChainAsset) async throws { + private func fetchRequiredInfo(for chainAsset: ChainAsset) async throws { guard let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId else { throw TransferFlowUseCaseError.missingAccount } From 589d470dd5ff0db203416098ffb7208a33b8bdd4 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Thu, 29 Aug 2024 16:02:22 +0500 Subject: [PATCH 018/156] [#FLW-4935] Create a new wallet or import by mnemonic . By JSON we can export only substrate --- .../Model/ExportOption+ViewModel.swift | 34 +++++---- .../AccountExportPasswordInteractor.swift | 10 ++- .../ExportGenericViewController.swift | 69 +++++++++++-------- .../ExportGenericViewModel.swift | 16 +---- .../ExportGenericViewModelBinder.swift | 4 +- .../ExportMnemonicPresenter.swift | 2 +- .../ExportRestoreJsonPresenter.swift | 2 +- .../ExportSeed/ExportSeedInteractor.swift | 10 ++- .../ExportSeed/ExportSeedPresenter.swift | 2 +- 9 files changed, 87 insertions(+), 62 deletions(-) diff --git a/fearless/Common/Extension/Model/ExportOption+ViewModel.swift b/fearless/Common/Extension/Model/ExportOption+ViewModel.swift index fbc6bcb22d..de02b16e5b 100644 --- a/fearless/Common/Extension/Model/ExportOption+ViewModel.swift +++ b/fearless/Common/Extension/Model/ExportOption+ViewModel.swift @@ -1,29 +1,35 @@ import Foundation +import SSFModels extension ExportOption { - func titleForLocale(_ locale: Locale, ethereumBased: Bool?) -> String { + func titleForLocale(_ locale: Locale, ecosystem: Ecosystem?) -> String { switch self { case .mnemonic: return R.string.localizable .importMnemonic(preferredLanguages: locale.rLanguages) case .keystore: - guard let ethereumBased = ethereumBased else { - return R.string.localizable - .importRecoveryJson(preferredLanguages: locale.rLanguages) + switch ecosystem { + case .substrate: + return R.string.localizable.importSubstrateRecoveryJson(preferredLanguages: locale.rLanguages) + case .ethereumBased, .ethereum: + return R.string.localizable.importEthereumRecoveryJson(preferredLanguages: locale.rLanguages) + case .ton: + return "" + case .none: + return R.string.localizable.importRecoveryJson(preferredLanguages: locale.rLanguages) } - return ethereumBased - ? R.string.localizable.importEthereumRecoveryJson(preferredLanguages: locale.rLanguages) - : R.string.localizable.importSubstrateRecoveryJson(preferredLanguages: locale.rLanguages) case .seed: - guard let ethereumBased = ethereumBased else { - return R.string.localizable - .importRawSeed(preferredLanguages: locale.rLanguages) + switch ecosystem { + case .substrate: + return R.string.localizable.accountImportSubstrateRawSeedPlaceholder(preferredLanguages: locale.rLanguages) + case .ethereumBased, .ethereum: + return R.string.localizable.accountImportEthereumRawSeedPlaceholder(preferredLanguages: locale.rLanguages) + case .ton: + return "" + case .none: + return R.string.localizable.importRawSeed(preferredLanguages: locale.rLanguages) } - - return ethereumBased - ? R.string.localizable.accountImportEthereumRawSeedPlaceholder(preferredLanguages: locale.rLanguages) - : R.string.localizable.accountImportSubstrateRawSeedPlaceholder(preferredLanguages: locale.rLanguages) } } } diff --git a/fearless/Modules/Export/AccountExportPassword/AccountExportPasswordInteractor.swift b/fearless/Modules/Export/AccountExportPassword/AccountExportPasswordInteractor.swift index b083308c43..5ae855efe6 100644 --- a/fearless/Modules/Export/AccountExportPassword/AccountExportPasswordInteractor.swift +++ b/fearless/Modules/Export/AccountExportPassword/AccountExportPasswordInteractor.swift @@ -44,7 +44,15 @@ extension AccountExportPasswordInteractor: AccountExportPasswordInteractorInputP ) { var jsons: [RestoreJson] = [] - for chainAccount in accounts { + let substrateAndEthereumAccounts = accounts.filter { + switch $0.account.ecosystem { + case .substrate, .ethereumBased, .ethereum: + return true + case .ton: + return false + } + } + for chainAccount in substrateAndEthereumAccounts { if let data = try? exportJsonWrapper.export( chainAccount: chainAccount.account, password: password, diff --git a/fearless/Modules/Export/ExportGenericView/ExportGenericViewController.swift b/fearless/Modules/Export/ExportGenericView/ExportGenericViewController.swift index 9738a50ff6..71e69b9407 100644 --- a/fearless/Modules/Export/ExportGenericView/ExportGenericViewController.swift +++ b/fearless/Modules/Export/ExportGenericView/ExportGenericViewController.swift @@ -164,7 +164,7 @@ final class ExportGenericViewController: UIViewController, ImportantViewProtocol view.removeFromSuperview() } - sourceTypeView.subtitle = viewModel.option.titleForLocale(locale, ethereumBased: nil) + sourceTypeView.subtitle = viewModel.option.titleForLocale(locale, ecosystem: nil) var views: [UIView] = [] viewModel.viewModels.forEach { exportViewModel in if let view = setupExportDataView(exportViewModel) { @@ -172,10 +172,13 @@ final class ExportGenericViewController: UIViewController, ImportantViewProtocol } if viewModel.option == .keystore { - if exportViewModel.ethereumBased { - setupExportEthereumButton() - } else { + switch exportViewModel.ecosystem { + case .substrate: setupExportSubstrateButton() + case .ethereumBased, .ethereum: + setupExportEthereumButton() + case .ton: + break } } else if mainOptionTitle != nil { setupMainActionButton() @@ -490,23 +493,23 @@ extension ExportGenericViewController { var subviews: [UIView] = [] - if let cryptoType = exportViewModel.cryptoType { - let cryptoTypeView = setupCryptoTypeView( - cryptoType: cryptoType, - advancedContainerView: containerView, - locale: locale, - isEthereum: exportViewModel.ethereumBased - ) + if let cryptoType = exportViewModel.cryptoType, + let cryptoTypeView = setupCryptoTypeView( + cryptoType: cryptoType, + advancedContainerView: containerView, + locale: locale, + ecosystem: exportViewModel.ecosystem + ) { subviews.append(cryptoTypeView) } - if let derivationPath = exportViewModel.derivationPath { - let derivationPathView = setupDerivationView( - derivationPath, - advancedContainerView: containerView, - locale: locale, - isEthereum: exportViewModel.ethereumBased - ) + if let derivationPath = exportViewModel.derivationPath, + let derivationPathView = setupDerivationView( + derivationPath, + advancedContainerView: containerView, + locale: locale, + ecosystem: exportViewModel.ecosystem + ) { subviews.append(derivationPathView) } @@ -527,15 +530,20 @@ extension ExportGenericViewController { cryptoType: CryptoType, advancedContainerView: UIStackView, locale: Locale, - isEthereum: Bool - ) -> UIView { + ecosystem: Ecosystem + ) -> UIView? { let cryptoView = uiFactory.createDetailsView(with: .largeIconTitleSubtitle, filled: true) cryptoView.translatesAutoresizingMaskIntoConstraints = false advancedContainerView.addArrangedSubview(cryptoView) - cryptoView.title = isEthereum - ? R.string.localizable.ethereumCryptoType(preferredLanguages: locale.rLanguages) - : R.string.localizable.substrateCryptoType(preferredLanguages: locale.rLanguages) + switch ecosystem { + case .substrate: + cryptoView.title = R.string.localizable.substrateCryptoType(preferredLanguages: locale.rLanguages) + case .ethereumBased, .ethereum: + cryptoView.title = R.string.localizable.ethereumCryptoType(preferredLanguages: locale.rLanguages) + case .ton: + return nil + } cryptoView.subtitle = cryptoType.titleForLocale(locale) + " | " + cryptoType.subtitleForLocale(locale) @@ -546,15 +554,20 @@ extension ExportGenericViewController { _ path: String, advancedContainerView: UIStackView, locale: Locale, - isEthereum: Bool - ) -> UIView { + ecosystem: Ecosystem + ) -> UIView? { let derivationPathView = uiFactory.createDetailsView(with: .largeIconTitleSubtitle, filled: true) derivationPathView.translatesAutoresizingMaskIntoConstraints = false advancedContainerView.addArrangedSubview(derivationPathView) - derivationPathView.title = isEthereum - ? R.string.localizable.ethereumSecretDerivationPath(preferredLanguages: locale.rLanguages) - : R.string.localizable.substrateSecretDerivationPath(preferredLanguages: locale.rLanguages) + switch ecosystem { + case .substrate: + derivationPathView.title = R.string.localizable.substrateSecretDerivationPath(preferredLanguages: locale.rLanguages) + case .ethereumBased, .ethereum: + derivationPathView.title = R.string.localizable.ethereumSecretDerivationPath(preferredLanguages: locale.rLanguages) + case .ton: + return nil + } derivationPathView.subtitle = path return derivationPathView diff --git a/fearless/Modules/Export/ExportGenericView/ExportGenericViewModel.swift b/fearless/Modules/Export/ExportGenericView/ExportGenericViewModel.swift index edc5c36f53..a8462f1d6b 100644 --- a/fearless/Modules/Export/ExportGenericView/ExportGenericViewModel.swift +++ b/fearless/Modules/Export/ExportGenericView/ExportGenericViewModel.swift @@ -17,7 +17,7 @@ protocol ExportGenericViewModelProtocol { var chain: ChainModel? { get } var cryptoType: CryptoType? { get } var derivationPath: String? { get } - var ethereumBased: Bool { get } + var ecosystem: Ecosystem { get } func accept(binder: ExportGenericViewModelBinding, locale: Locale) -> UIView } @@ -30,16 +30,11 @@ struct MultiExportViewModel: MultipleExportGenericViewModelProtocol { struct ExportStringViewModel: ExportGenericViewModelProtocol { let option: ExportOption - let chain: ChainModel? - let cryptoType: CryptoType? - let derivationPath: String? - let data: String - - let ethereumBased: Bool + let ecosystem: Ecosystem func accept(binder: ExportGenericViewModelBinding, locale: Locale) -> UIView { if option == .seed { @@ -52,16 +47,11 @@ struct ExportStringViewModel: ExportGenericViewModelProtocol { struct ExportMnemonicViewModel: ExportGenericViewModelProtocol { let option: ExportOption - let chain: ChainModel? - let cryptoType: CryptoType? - let derivationPath: String? - let mnemonic: [String] - - let ethereumBased: Bool + let ecosystem: Ecosystem func accept(binder: ExportGenericViewModelBinding, locale: Locale) -> UIView { binder.bind(mnemonicViewModel: self, locale: locale) diff --git a/fearless/Modules/Export/ExportGenericView/ExportGenericViewModelBinder.swift b/fearless/Modules/Export/ExportGenericView/ExportGenericViewModelBinder.swift index e2cf3194cf..f517d88ca7 100644 --- a/fearless/Modules/Export/ExportGenericView/ExportGenericViewModelBinder.swift +++ b/fearless/Modules/Export/ExportGenericView/ExportGenericViewModelBinder.swift @@ -15,7 +15,7 @@ final class ExportGenericViewModelBinder: ExportGenericViewModelBinding { .constraint(equalToConstant: UIConstants.triangularedViewHeight).isActive = true detailsView.subtitleLabel?.lineBreakMode = .byTruncatingMiddle - detailsView.title = stringViewModel.option.titleForLocale(locale, ethereumBased: stringViewModel.ethereumBased) + detailsView.title = stringViewModel.option.titleForLocale(locale, ecosystem: stringViewModel.ecosystem) detailsView.subtitle = stringViewModel.data return detailsView @@ -24,7 +24,7 @@ final class ExportGenericViewModelBinder: ExportGenericViewModelBinding { func bind(multilineViewModel: ExportStringViewModel, locale: Locale) -> UIView { let detailsView = uiFactory.createMultilinedTriangularedView() - detailsView.titleLabel.text = multilineViewModel.option.titleForLocale(locale, ethereumBased: multilineViewModel.ethereumBased) + detailsView.titleLabel.text = multilineViewModel.option.titleForLocale(locale, ecosystem: multilineViewModel.ecosystem) detailsView.subtitleLabel.text = multilineViewModel.data return detailsView diff --git a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicPresenter.swift b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicPresenter.swift index 8d0a46e9e7..437a746ec3 100644 --- a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicPresenter.swift +++ b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicPresenter.swift @@ -109,7 +109,7 @@ extension ExportMnemonicPresenter: ExportMnemonicInteractorOutputProtocol { cryptoType: exportData.cryptoType, derivationPath: exportData.derivationPath, mnemonic: exportData.mnemonic.allWords(), - ethereumBased: exportData.chain.isEthereumBased + ecosystem: exportData.chain.ecosystem ) } diff --git a/fearless/Modules/Export/ExportRestoreJson/ExportRestoreJsonPresenter.swift b/fearless/Modules/Export/ExportRestoreJson/ExportRestoreJsonPresenter.swift index ecbd0dcd17..57d384ee71 100644 --- a/fearless/Modules/Export/ExportRestoreJson/ExportRestoreJsonPresenter.swift +++ b/fearless/Modules/Export/ExportRestoreJson/ExportRestoreJsonPresenter.swift @@ -84,7 +84,7 @@ extension ExportRestoreJsonPresenter: ExportGenericPresenterProtocol { cryptoType: model.cryptoType, derivationPath: nil, data: model.data, - ethereumBased: model.chain.isEthereumBased + ecosystem: model.chain.ecosystem ) } diff --git a/fearless/Modules/Export/ExportSeed/ExportSeedInteractor.swift b/fearless/Modules/Export/ExportSeed/ExportSeedInteractor.swift index 3b5cf3a75f..4f1a2e1bb5 100644 --- a/fearless/Modules/Export/ExportSeed/ExportSeedInteractor.swift +++ b/fearless/Modules/Export/ExportSeed/ExportSeedInteractor.swift @@ -55,7 +55,15 @@ extension ExportSeedInteractor: ExportSeedInteractorInputProtocol { func fetchExportDataForWallet(_ wallet: MetaAccountModel, accounts: [ChainAccountInfo]) { var seeds: [ExportSeedData] = [] - for chainAccount in accounts { + let substrateAndEthereumAccounts = accounts.filter { + switch $0.account.ecosystem { + case .substrate, .ethereumBased, .ethereum: + return true + case .ton: + return false + } + } + for chainAccount in substrateAndEthereumAccounts { let chain = chainAccount.chain let account = chainAccount.account let accountId = account.isChainAccount ? account.accountId : nil diff --git a/fearless/Modules/Export/ExportSeed/ExportSeedPresenter.swift b/fearless/Modules/Export/ExportSeed/ExportSeedPresenter.swift index a9b7410273..05ae753df3 100644 --- a/fearless/Modules/Export/ExportSeed/ExportSeedPresenter.swift +++ b/fearless/Modules/Export/ExportSeed/ExportSeedPresenter.swift @@ -104,7 +104,7 @@ extension ExportSeedPresenter: ExportSeedInteractorOutputProtocol { cryptoType: seedData.chain.isEthereumBased ? nil : seedData.cryptoType, derivationPath: seedData.derivationPath, data: seedData.seed.toHex(includePrefix: true), - ethereumBased: seedData.chain.isEthereumBased + ecosystem: seedData.chain.ecosystem ) } From 84f71b8f97ec0af45a4e7c8b6cc0c14cf2e03c8d Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Fri, 30 Aug 2024 10:25:33 +0500 Subject: [PATCH 019/156] Short doc for the Ton Connect Service --- .../Services/TonConnectService.swift | 21 +++++++++++++++++-- .../Services/TonConnectServiceImpl.swift | 14 +++++++++---- .../WalletConnectConfirmationInteractor.swift | 4 ++-- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/fearless/ApplicationLayer/Services/TonConnectService.swift b/fearless/ApplicationLayer/Services/TonConnectService.swift index 43459d0cb9..98bfca630f 100644 --- a/fearless/ApplicationLayer/Services/TonConnectService.swift +++ b/fearless/ApplicationLayer/Services/TonConnectService.swift @@ -1,19 +1,27 @@ import Foundation import SSFModels +/// Ton Connect has two different ways to establish a connection +/// 1. Ton JS Bridge https://github.com/ton-connect/docs/blob/main/bridge.md#js-bridge +/// 2. HTTP Bridge https://github.com/ton-connect/docs/blob/main/bridge.md#http-bridge protocol TonConnectService: ApplicationServiceProtocol { + + /// Adding listener for delegate: TonConnectServiceDelegate func set( listener: TonConnectServiceDelegate ) async + /// Load the Manifest and establish a connection via the Ton Connect service func establishConnection( with uri: String ) async throws + /// Loading Manifest func fetchManifest( with url: URL ) async throws -> TonConnectManifest + /// Confirm the connection via the Ton Connect service func confirmConnectionRequest( wallet: MetaAccountModel, tonChainModel: ChainModel, @@ -21,31 +29,40 @@ protocol TonConnectService: ApplicationServiceProtocol { manifest: TonConnectManifest ) async throws + /// Cancels the request from the Ton Connect service func cancelRequest( appRequest: TonConnect.AppRequest, app: TonConnectApp ) async throws - func approveTonConnect( + /// Sending a message to the TON blockchain from the JS bridge event + func approveTonJsBridgeSend( wallet: MetaAccountModel, parameter: SendTransactionParam ) async throws -> String - func confirmRequest( + /// Sending a message to the TON blockchain + /// and to the Ton Connect API + func confirmTonConnectRequest( wallet: MetaAccountModel, appRequest: TonConnect.AppRequest, app: TonConnectApp, parameter: SendTransactionParam ) async throws + /// Getting the connected apps from the local repo func getConnectedApp( for wallet: MetaAccountModel ) async throws -> [TonConnectApp] + /// Saving a new connected app + /// External or Internal func saveConnected( app: TonConnectApp ) async + /// Deleting the connected app + /// External or Internal func saveDisconnected( app: TonConnectApp ) async diff --git a/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift b/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift index b2074d7355..22dcc28c6f 100644 --- a/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift +++ b/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift @@ -103,7 +103,9 @@ actor TonConnectServiceImpl: TonConnectService { wallet: wallet, clientId: params.clientId, appUrl: manifest.url, - sessionCrypto: sessionCrypto + sessionCrypto: sessionCrypto, + name: manifest.name, + iconUrl: manifest.iconUrl ) await updateEventCenter() } @@ -130,7 +132,7 @@ actor TonConnectServiceImpl: TonConnectService { ) } - func approveTonConnect( + func approveTonJsBridgeSend( wallet: MetaAccountModel, parameter: SendTransactionParam ) async throws -> String { @@ -156,7 +158,7 @@ actor TonConnectServiceImpl: TonConnectService { return boc } - func confirmRequest( + func confirmTonConnectRequest( wallet: MetaAccountModel, appRequest: TonConnect.AppRequest, app: TonConnectApp, @@ -250,12 +252,16 @@ actor TonConnectServiceImpl: TonConnectService { wallet: MetaAccountModel, clientId: String, appUrl: URL, - sessionCrypto: TonConnectSessionCrypto + sessionCrypto: TonConnectSessionCrypto, + name: String, + iconUrl: URL? ) async { let app = TonConnectApp( walletId: wallet.metaId, clientId: clientId, appUrl: appUrl, + name: name, + iconUrl: iconUrl, publicKey: sessionCrypto.keyPair.publicKey.data, privateKey: sessionCrypto.keyPair.privateKey.data ) diff --git a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationInteractor.swift b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationInteractor.swift index 2dce162e31..5753c4de05 100644 --- a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationInteractor.swift +++ b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationInteractor.swift @@ -55,7 +55,7 @@ final class WalletConnectConfirmationInteractor { guard let parameter = request.params.first else { throw ConvenienceError(error: "Missing Ton params") } - let boc = try await tonConnectService.approveTonConnect( + let boc = try await tonConnectService.approveTonJsBridgeSend( wallet: inputData.wallet, parameter: parameter ) @@ -70,7 +70,7 @@ final class WalletConnectConfirmationInteractor { throw ConvenienceError(error: "Missing Ton params") } - try await tonConnectService.confirmRequest( + try await tonConnectService.confirmTonConnectRequest( wallet: inputData.wallet, appRequest: request, app: app, From 8691e5c703db009bab3a6c041782c00b1a0fc331 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Fri, 30 Aug 2024 10:26:16 +0500 Subject: [PATCH 020/156] [#FLW-4936] There is not possible to sign the transaction --- .../CDTonConnectedApp+CoreDataDecodable.swift | 4 ++++ .../contents | 2 ++ .../DappBrowserViewModelFactory.swift | 22 ++++++++++--------- .../TonWebBridge/Models/TonConnectApp.swift | 4 ++++ .../TonWebBridgeMessageBuilder.swift | 8 +++---- .../TonWebBridge/TonWebBridgePresenter.swift | 2 ++ .../WalletConnectConfirmationPresenter.swift | 1 + 7 files changed, 29 insertions(+), 14 deletions(-) diff --git a/fearless/Common/Extension/Storage/CDTonConnectedApp+CoreDataDecodable.swift b/fearless/Common/Extension/Storage/CDTonConnectedApp+CoreDataDecodable.swift index f69f4a58dd..1c2f178a13 100644 --- a/fearless/Common/Extension/Storage/CDTonConnectedApp+CoreDataDecodable.swift +++ b/fearless/Common/Extension/Storage/CDTonConnectedApp+CoreDataDecodable.swift @@ -10,6 +10,8 @@ extension CDTonConnectedApp: CoreDataCodable { walletId = app.walletId clientId = app.clientId appUrl = app.appUrl + name = app.name + iconUrl = app.iconUrl publicKey = app.publicKey privateKey = app.privateKey } @@ -20,6 +22,8 @@ extension CDTonConnectedApp: CoreDataCodable { try container.encode(walletId, forKey: .walletId) try container.encode(clientId, forKey: .clientId) try container.encode(appUrl, forKey: .appUrl) + try container.encode(name, forKey: .name) + try container.encode(iconUrl, forKey: .iconUrl) try container.encode(publicKey, forKey: .publicKey) try container.encode(privateKey, forKey: .privateKey) } diff --git a/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents index 0031ea2ec4..7e41a6d906 100644 --- a/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents +++ b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents @@ -151,7 +151,9 @@ + + diff --git a/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift b/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift index c83f96f488..ca70b1bce7 100644 --- a/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift +++ b/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift @@ -46,7 +46,6 @@ final class DappBrowserViewModelFactoryImpl: DappBrowserViewModelFactory { ) case .connected: return buildConnectedPageViewModel( - dapps: dapps, connected: connected, locale: locale ) @@ -137,24 +136,27 @@ final class DappBrowserViewModelFactoryImpl: DappBrowserViewModelFactory { } private func buildConnectedPageViewModel( - dapps: [DappCategory], connected: [TonConnectApp], locale: Locale ) -> [DappBrowserViewModel] { var viewModel: [DappBrowserViewModel] = [] - let allAppd = dapps - .map { $0.apps } - .reduce([], +) - .uniq(predicate: { $0 }) - let connected = allAppd.filter { app in - connected.contains(where: { $0.appUrl.host == app.url.host }) - } if connected.isNotEmpty { + let apps = connected.map { + TonDapp( + identifier: $0.identifier, + chains: ["-239", "-3"], + name: $0.name, + description: nil, + icon: $0.iconUrl ?? URL(string: "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg")!, + poster: nil, + url: $0.appUrl + ) + } let connectedViewModel = buildSectionViewModel( category: .init( type: .connected, - apps: connected + apps: apps ), locale: locale, maxInSection: .max diff --git a/fearless/Modules/TonWebBridge/Models/TonConnectApp.swift b/fearless/Modules/TonWebBridge/Models/TonConnectApp.swift index 3e75149566..a25ac58779 100644 --- a/fearless/Modules/TonWebBridge/Models/TonConnectApp.swift +++ b/fearless/Modules/TonWebBridge/Models/TonConnectApp.swift @@ -10,6 +10,8 @@ struct TonConnectApp: Codable, Identifiable { let walletId: String let clientId: String let appUrl: URL + let name: String + let iconUrl: URL? let publicKey: Data let privateKey: Data @@ -19,6 +21,8 @@ struct TonConnectApp: Codable, Identifiable { case appUrl case publicKey case privateKey + case name + case iconUrl } var keyPair: TonSwift.KeyPair { diff --git a/fearless/Modules/TonWebBridge/TonWebBridgeMessageBuilder.swift b/fearless/Modules/TonWebBridge/TonWebBridgeMessageBuilder.swift index 5ec05296e5..ab953c5543 100644 --- a/fearless/Modules/TonWebBridge/TonWebBridgeMessageBuilder.swift +++ b/fearless/Modules/TonWebBridge/TonWebBridgeMessageBuilder.swift @@ -21,7 +21,7 @@ protocol TonWebBridgeMessagesBuilder { from message: DappFunctionInvokeMessage ) throws -> TonConnectRequestPayload - func getConnectEventSuccesResponse( + func getConnectEventSuccessResponse( requestPayloadItems: [TonConnectRequestPayload.Item], wallet: MetaAccountModel, manifest: TonConnectManifest, @@ -52,7 +52,7 @@ protocol TonWebBridgeMessagesBuilder { clientId: String ) throws -> String - func getConnectEventSuccesResponse( + func getConnectEventSuccessResponse( requestPayloadItems: [TonConnectRequestPayload.Item], wallet: MetaAccountModel, manifest: TonConnectManifest, @@ -163,7 +163,7 @@ final class TonWebBridgeMessagesBuilderImpl: TonWebBridgeMessagesBuilder { return payload } - func getConnectEventSuccesResponse( + func getConnectEventSuccessResponse( requestPayloadItems: [TonConnectRequestPayload.Item], wallet: MetaAccountModel, manifest: TonConnectManifest, @@ -219,7 +219,7 @@ final class TonWebBridgeMessagesBuilderImpl: TonWebBridgeMessagesBuilder { return string } - func getConnectEventSuccesResponse( + func getConnectEventSuccessResponse( requestPayloadItems: [TonConnectRequestPayload.Item], wallet: MetaAccountModel, manifest: TonConnectManifest, diff --git a/fearless/Modules/TonWebBridge/TonWebBridgePresenter.swift b/fearless/Modules/TonWebBridge/TonWebBridgePresenter.swift index 2b6ca59716..14a1f991fb 100644 --- a/fearless/Modules/TonWebBridge/TonWebBridgePresenter.swift +++ b/fearless/Modules/TonWebBridge/TonWebBridgePresenter.swift @@ -216,6 +216,8 @@ final class TonWebBridgePresenter: NSObject { walletId: wallet.metaId, clientId: params.clientId, appUrl: manifest.url, + name: manifest.name, + iconUrl: manifest.iconUrl, publicKey: sessionCrypto.keyPair.publicKey.data, privateKey: sessionCrypto.keyPair.privateKey.data ) diff --git a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationPresenter.swift b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationPresenter.swift index 4bd0d2621e..845cfd5a18 100644 --- a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationPresenter.swift +++ b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationPresenter.swift @@ -184,6 +184,7 @@ extension WalletConnectConfirmationPresenter: WalletConnectConfirmationViewOutpu invocationId: invocationId ) case let .tonConnect(request: request, app: app): + handleWalletConnect(error: error) await cancelTonConnect(appRequest: request, app: app) } } From a4927a3b49c40a3a51385d0bb7daf89c69e238fb Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Fri, 30 Aug 2024 11:18:17 +0500 Subject: [PATCH 021/156] Short doc for the Ton Connect message builder --- fearless.xcodeproj/project.pbxproj | 12 +- .../ApplicationLayer/ServiceAssembly.swift | 2 +- .../Services/TonConnectMessageBuilder.swift | 71 +++++++++++ .../TonConnectMessageBuilderImpl.swift} | 120 +----------------- .../Services/TonConnectServiceImpl.swift | 8 +- .../TonWebBridge/TonWebBridgeAssembly.swift | 2 +- .../TonWebBridge/TonWebBridgePresenter.swift | 7 +- 7 files changed, 93 insertions(+), 129 deletions(-) create mode 100644 fearless/ApplicationLayer/Services/TonConnectMessageBuilder.swift rename fearless/{Modules/TonWebBridge/TonWebBridgeMessageBuilder.swift => ApplicationLayer/Services/TonConnectMessageBuilderImpl.swift} (77%) diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index 56364f1689..b618edb288 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -200,7 +200,7 @@ 0713097F28C6F60D002B17D0 /* ScamSyncServiceFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0713097E28C6F60D002B17D0 /* ScamSyncServiceFactory.swift */; }; 0713098128C6F7BB002B17D0 /* CDScamInfo+CoreDataCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0713098028C6F7BB002B17D0 /* CDScamInfo+CoreDataCodable.swift */; }; 0715FCD42C65E96000AA674E /* TonWebBridgeHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCD32C65E96000AA674E /* TonWebBridgeHeaderView.swift */; }; - 0715FCD92C6608B700AA674E /* TonWebBridgeMessageBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCD82C6608B700AA674E /* TonWebBridgeMessageBuilder.swift */; }; + 0715FCD92C6608B700AA674E /* TonConnectMessageBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCD82C6608B700AA674E /* TonConnectMessageBuilder.swift */; }; 0715FCDD2C660AF700AA674E /* DappBridgeMessageType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCDC2C660AF700AA674E /* DappBridgeMessageType.swift */; }; 0715FCDF2C661E1D00AA674E /* TonConnect.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCDE2C661E1D00AA674E /* TonConnect.swift */; }; 0715FCE12C6620B500AA674E /* DappBridgeResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCE02C6620B500AA674E /* DappBridgeResponse.swift */; }; @@ -282,6 +282,7 @@ 076D9D6229506CFA002762E3 /* polkaswapSettings.json in Resources */ = {isa = PBXBuildFile; fileRef = 076D9D6129506CE3002762E3 /* polkaswapSettings.json */; }; 076D9D6629507B39002762E3 /* PolkaswapSettingsFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 076D9D6529507B39002762E3 /* PolkaswapSettingsFactory.swift */; }; 076D9D6829509F1C002762E3 /* PolkaswapSettingMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 076D9D6729509F1C002762E3 /* PolkaswapSettingMapper.swift */; }; + 0772377A2C819A6600D8061F /* TonConnectMessageBuilderImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 077237792C819A6600D8061F /* TonConnectMessageBuilderImpl.swift */; }; 0778A12A2C5763D6008A1254 /* Task.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0778A1292C5763D6008A1254 /* Task.swift */; }; 0778A12E2C58D0F2008A1254 /* TonJettonInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0778A12D2C58D0F2008A1254 /* TonJettonInjector.swift */; }; 0783EEAE2AE1342F006476F4 /* UIColor+Gradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0783EEAD2AE1342F006476F4 /* UIColor+Gradient.swift */; }; @@ -3380,7 +3381,7 @@ 0713097E28C6F60D002B17D0 /* ScamSyncServiceFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScamSyncServiceFactory.swift; sourceTree = ""; }; 0713098028C6F7BB002B17D0 /* CDScamInfo+CoreDataCodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CDScamInfo+CoreDataCodable.swift"; sourceTree = ""; }; 0715FCD32C65E96000AA674E /* TonWebBridgeHeaderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonWebBridgeHeaderView.swift; sourceTree = ""; }; - 0715FCD82C6608B700AA674E /* TonWebBridgeMessageBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonWebBridgeMessageBuilder.swift; sourceTree = ""; }; + 0715FCD82C6608B700AA674E /* TonConnectMessageBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectMessageBuilder.swift; sourceTree = ""; }; 0715FCDC2C660AF700AA674E /* DappBridgeMessageType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DappBridgeMessageType.swift; sourceTree = ""; }; 0715FCDE2C661E1D00AA674E /* TonConnect.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnect.swift; sourceTree = ""; }; 0715FCE02C6620B500AA674E /* DappBridgeResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DappBridgeResponse.swift; sourceTree = ""; }; @@ -3463,6 +3464,7 @@ 076D9D6129506CE3002762E3 /* polkaswapSettings.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = polkaswapSettings.json; sourceTree = ""; }; 076D9D6529507B39002762E3 /* PolkaswapSettingsFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PolkaswapSettingsFactory.swift; sourceTree = ""; }; 076D9D6729509F1C002762E3 /* PolkaswapSettingMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PolkaswapSettingMapper.swift; sourceTree = ""; }; + 077237792C819A6600D8061F /* TonConnectMessageBuilderImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectMessageBuilderImpl.swift; sourceTree = ""; }; 0778A1292C5763D6008A1254 /* Task.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Task.swift; sourceTree = ""; }; 0778A12D2C58D0F2008A1254 /* TonJettonInjector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonJettonInjector.swift; sourceTree = ""; }; 0783EEAD2AE1342F006476F4 /* UIColor+Gradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+Gradient.swift"; sourceTree = ""; }; @@ -7409,6 +7411,8 @@ 075E5FCE2C7F1A180044C142 /* TonConnectServiceDelegate.swift */, 07ECB8082C6C6CDE000E0A14 /* TonConnectEventsCenter.swift */, 07ECB8022C6B4EA3000E0A14 /* TonConnectSessionCrypto.swift */, + 0715FCD82C6608B700AA674E /* TonConnectMessageBuilder.swift */, + 077237792C819A6600D8061F /* TonConnectMessageBuilderImpl.swift */, ); name = TonConnect; sourceTree = ""; @@ -11695,7 +11699,6 @@ 5AA1493E216DF3B3616A9EE6 /* TonWebBridgeProtocols.swift */, 381BD34B5A6E2B1625B2C24C /* TonWebBridgeRouter.swift */, 4BD26C200A700CCA34980B61 /* TonWebBridgePresenter.swift */, - 0715FCD82C6608B700AA674E /* TonWebBridgeMessageBuilder.swift */, 014B8F922BD4E7BFB8D1483D /* TonWebBridgeInteractor.swift */, 9E51A659E2865BD98B6DEF16 /* TonWebBridgeViewController.swift */, 75D1886C774F9F63C897CAF1 /* TonWebBridgeViewLayout.swift */, @@ -17283,7 +17286,7 @@ 8443FDB12554B7640092893D /* TitledMnemonicView.swift in Sources */, AE2C84CA25EF986E00986716 /* ValidatorInfoProtocols.swift in Sources */, AEFC6D672600A808000BD310 /* StoriesPreviewCollectionItem.swift in Sources */, - 0715FCD92C6608B700AA674E /* TonWebBridgeMessageBuilder.swift in Sources */, + 0715FCD92C6608B700AA674E /* TonConnectMessageBuilder.swift in Sources */, 07DE95B828A1119400E9C2CB /* BalanceInfoInteractor.swift in Sources */, FA86442027671C7700956D8E /* WalletTransactionHistoryCellViewModel.swift in Sources */, FA17B4C027E97536006E0735 /* DeactivatableView.swift in Sources */, @@ -18277,6 +18280,7 @@ FAD429062A86567F001D6A16 /* BackupCreatePasswordPresenter.swift in Sources */, FAD0679A2C2043FC0050291F /* ChainConnectionVisibilityHelper.swift in Sources */, FAD0068427EA255900C97E09 /* AboutTableViewCell.swift in Sources */, + 0772377A2C819A6600D8061F /* TonConnectMessageBuilderImpl.swift in Sources */, FAE39AF32A9E1A4F0011A9D6 /* ChainsSetupCompleted.swift in Sources */, AE20602C2636EA5800357578 /* MoonPayKeys.swift in Sources */, FA99C92F283B4AC5007B1F83 /* SelectValidatorsConfirmRelaychainInitiatedViewModelState.swift in Sources */, diff --git a/fearless/ApplicationLayer/ServiceAssembly.swift b/fearless/ApplicationLayer/ServiceAssembly.swift index 7980bcd340..d0f22c37fd 100644 --- a/fearless/ApplicationLayer/ServiceAssembly.swift +++ b/fearless/ApplicationLayer/ServiceAssembly.swift @@ -253,7 +253,7 @@ final class ServiceAssembly { chainRegistry: chainRegistry, tonService: tonSendService(), networkWorker: networkWorker, - messageBuilder: TonWebBridgeMessagesBuilderImpl(), + messageBuilder: TonConnectMessageBuilderImpl(), appRepository: tonConnectAppAsyncRepository(), eventCenter: eventCenter, logger: logger diff --git a/fearless/ApplicationLayer/Services/TonConnectMessageBuilder.swift b/fearless/ApplicationLayer/Services/TonConnectMessageBuilder.swift new file mode 100644 index 0000000000..c480e25122 --- /dev/null +++ b/fearless/ApplicationLayer/Services/TonConnectMessageBuilder.swift @@ -0,0 +1,71 @@ +import Foundation +import SoraKeystore +import SSFModels +import WebKit +import TonSwift + +protocol TonConnectMessageBuilder { + /// WKWebViewConfiguration with the js injection script + func getConfiguration( + userContentController: WKUserContentController + ) -> WKWebViewConfiguration + + /// Building the message to reconnect the dApp + /// Reconnecting if already connected and the dApp is in local store + func getConnectEventSuccess( + wallet: MetaAccountModel + ) throws -> String + + /// Parsing the DappFunctionInvokeMessage from the body + func getDappFunctionInvokeMessage( + from body: Any + ) throws -> DappFunctionInvokeMessage + + /// Parsing the TonConnectRequestPayload from the message + func getTonConnectRequestPayload( + from message: DappFunctionInvokeMessage + ) throws -> TonConnectRequestPayload + + /// Parsing the AppRequest to present it to the user for approval or rejection + /// Proposal for the user based on the JS Bridge connection type + func getTonConnectAppRequest( + from message: DappFunctionInvokeMessage + ) throws -> TonConnect.AppRequest + + /// Parsing the ConnectEventSuccess + /// ConnectEventSuccess can be send via JS Bridge and HTTP + /// Sends if the connection has been approved by the user + func getConnectEventSuccessResponse( + requestPayloadItems: [TonConnectRequestPayload.Item], + wallet: MetaAccountModel, + manifest: TonConnectManifest, + tonChainModel: ChainModel + ) throws -> TonConnect.ConnectEventSuccess + + /// Encrypt the ConnectEventSuccess using TonConnectSessionCrypto + /// Used for sending the message via HTTP connection + func encryptSuccessResponse( + successResponse: TonConnect.ConnectEventSuccess, + clientId: String, + sessionCrypto: TonConnectSessionCrypto + ) throws -> String + + /// Build the SendTransactionResponseError error message + func buildSendTransactionResponseError( + sessionCrypto: TonConnectSessionCrypto, + errorCode: TonConnect.SendTransactionResponseError.ErrorCode, + id: String, + clientId: String + ) throws -> String + + /// Preparing the message for the Ton Connect API from boc + func buildSendTransactionResponseSuccess( + sessionCrypto: TonConnectSessionCrypto, + boc: String, + id: String, + clientId: String + ) throws -> String + + /// Encode to String any Event + func getString(from event: Encodable) throws -> String +} diff --git a/fearless/Modules/TonWebBridge/TonWebBridgeMessageBuilder.swift b/fearless/ApplicationLayer/Services/TonConnectMessageBuilderImpl.swift similarity index 77% rename from fearless/Modules/TonWebBridge/TonWebBridgeMessageBuilder.swift rename to fearless/ApplicationLayer/Services/TonConnectMessageBuilderImpl.swift index ab953c5543..981505b957 100644 --- a/fearless/Modules/TonWebBridge/TonWebBridgeMessageBuilder.swift +++ b/fearless/ApplicationLayer/Services/TonConnectMessageBuilderImpl.swift @@ -4,63 +4,7 @@ import SSFModels import WebKit import TonSwift -protocol TonWebBridgeMessagesBuilder { - func getConfiguration( - userContentController: WKUserContentController - ) -> WKWebViewConfiguration - - func getConnectEventSuccess( - wallet: MetaAccountModel - ) throws -> String - - func getDappFunctionInvokeMessage( - from body: Any - ) throws -> DappFunctionInvokeMessage - - func getTonConnectRequestPayload( - from message: DappFunctionInvokeMessage - ) throws -> TonConnectRequestPayload - - func getConnectEventSuccessResponse( - requestPayloadItems: [TonConnectRequestPayload.Item], - wallet: MetaAccountModel, - manifest: TonConnectManifest, - tonChainModel: ChainModel - ) throws -> String - - func getTonConnectAppRequest( - from message: DappFunctionInvokeMessage - ) throws -> TonConnect.AppRequest - - func encryptSuccessResponse( - successResponse: TonConnect.ConnectEventSuccess, - clientId: String, - sessionCrypto: TonConnectSessionCrypto - ) throws -> String - - func buildSendTransactionResponseError( - sessionCrypto: TonConnectSessionCrypto, - errorCode: TonConnect.SendTransactionResponseError.ErrorCode, - id: String, - clientId: String - ) throws -> String - - func buildSendTransactionResponseSuccess( - sessionCrypto: TonConnectSessionCrypto, - boc: String, - id: String, - clientId: String - ) throws -> String - - func getConnectEventSuccessResponse( - requestPayloadItems: [TonConnectRequestPayload.Item], - wallet: MetaAccountModel, - manifest: TonConnectManifest, - tonChainModel: ChainModel - ) throws -> TonConnect.ConnectEventSuccess -} - -final class TonWebBridgeMessagesBuilderImpl: TonWebBridgeMessagesBuilder { +final class TonConnectMessageBuilderImpl: TonConnectMessageBuilder { private enum Constants { static let windowKey = "tonkeeper" @@ -163,62 +107,6 @@ final class TonWebBridgeMessagesBuilderImpl: TonWebBridgeMessagesBuilder { return payload } - func getConnectEventSuccessResponse( - requestPayloadItems: [TonConnectRequestPayload.Item], - wallet: MetaAccountModel, - manifest: TonConnectManifest, - tonChainModel: ChainModel - ) throws -> String { - guard - let address = wallet.tonAddress, - let publicKey = wallet.tonPublicKey, - let walletStateInit = wallet.tonWalletContract()?.stateInit - else { - throw ConvenienceError(error: "Missing TON") - } - - let replyItems = try requestPayloadItems.compactMap { item in - switch item { - case .tonAddress: - let network = LocalToggleService.shared.tonEnvListToggle.storageValue ? -3 : -239 - return TonConnect.ConnectItemReply.tonAddress( - .init( - address: address, - network: Int16(network), - publicKey: TonSwift.PublicKey(data: publicKey), - walletStateInit: walletStateInit - ) - ) - case let .tonProof(payload): - guard let accountResponse = wallet.fetch(for: tonChainModel.accountRequest()) else { - throw ConvenienceError(error: "Missing account response") - } - let walletPrivateKey = try getSecretKey( - for: tonChainModel, - metaId: wallet.metaId, - accountResponse: accountResponse - ) - return TonConnect.ConnectItemReply.tonProof(.success(.init( - address: address, - domain: manifest.host, - payload: payload, - privateKey: TonSwift.PrivateKey(data: walletPrivateKey) - ))) - case .unknown: - return nil - } - } - let successEvent = TonConnect.ConnectEventSuccess( - payload: .init( - items: replyItems, - device: .init() - ) - ) - - let string = try getString(from: successEvent) - return string - } - func getConnectEventSuccessResponse( requestPayloadItems: [TonConnectRequestPayload.Item], wallet: MetaAccountModel, @@ -336,9 +224,7 @@ final class TonWebBridgeMessagesBuilderImpl: TonWebBridgeMessagesBuilder { return encryptedTransactionResponse.base64EncodedString() } - // MARK: - Private func - - private func getString(from event: Encodable) throws -> String { + func getString(from event: Encodable) throws -> String { let data = try JSONEncoder().encode(event) guard let string = String(data: data, encoding: .utf8) else { throw ConvenienceError(error: "Encoding error") @@ -346,6 +232,8 @@ final class TonWebBridgeMessagesBuilderImpl: TonWebBridgeMessagesBuilder { return string } + // MARK: - Private methods + private func getSecretKey( for chain: ChainModel, metaId: String, diff --git a/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift b/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift index 22dcc28c6f..7816bf1362 100644 --- a/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift +++ b/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift @@ -15,7 +15,7 @@ actor TonConnectServiceImpl: TonConnectService { private let chainRegistry: ChainRegistryProtocol private let tonService: TonSendService private let networkWorker: SSFNetwork.NetworkWorker - private let messageBuilder: TonWebBridgeMessagesBuilder + private let messageBuilder: TonConnectMessageBuilder private let appRepository: AsyncAnyRepository private let eventCenter: TonConnectEventsCenter private let logger: LoggerProtocol @@ -26,7 +26,7 @@ actor TonConnectServiceImpl: TonConnectService { chainRegistry: ChainRegistryProtocol, tonService: TonSendService, networkWorker: SSFNetwork.NetworkWorker, - messageBuilder: TonWebBridgeMessagesBuilder, + messageBuilder: TonConnectMessageBuilder, appRepository: AsyncAnyRepository, eventCenter: TonConnectEventsCenter, logger: LoggerProtocol @@ -79,7 +79,7 @@ actor TonConnectServiceImpl: TonConnectService { params: TonConnectParameters, manifest: TonConnectManifest ) async throws { - let connectSeccussResponseEvent: TonConnect.ConnectEventSuccess = try messageBuilder.getConnectEventSuccesResponse( + let connectSuccessResponseEvent: TonConnect.ConnectEventSuccess = try messageBuilder.getConnectEventSuccessResponse( requestPayloadItems: params.requestPayload.items, wallet: wallet, manifest: manifest, @@ -88,7 +88,7 @@ actor TonConnectServiceImpl: TonConnectService { let sessionCrypto = try TonConnectSessionCrypto() let encrypted = try messageBuilder.encryptSuccessResponse( - successResponse: connectSeccussResponseEvent, + successResponse: connectSuccessResponseEvent, clientId: params.clientId, sessionCrypto: sessionCrypto ) diff --git a/fearless/Modules/TonWebBridge/TonWebBridgeAssembly.swift b/fearless/Modules/TonWebBridge/TonWebBridgeAssembly.swift index 056b81a774..5bebfb169f 100644 --- a/fearless/Modules/TonWebBridge/TonWebBridgeAssembly.swift +++ b/fearless/Modules/TonWebBridge/TonWebBridgeAssembly.swift @@ -19,7 +19,7 @@ final class TonWebBridgeAssembly { let presenter = TonWebBridgePresenter( dapp: dapp, wallet: wallet, - messageBuilder: TonWebBridgeMessagesBuilderImpl(), + messageBuilder: TonConnectMessageBuilderImpl(), interactor: interactor, router: router, logger: ServiceAssembly.shared.logger, diff --git a/fearless/Modules/TonWebBridge/TonWebBridgePresenter.swift b/fearless/Modules/TonWebBridge/TonWebBridgePresenter.swift index 14a1f991fb..88316b9a79 100644 --- a/fearless/Modules/TonWebBridge/TonWebBridgePresenter.swift +++ b/fearless/Modules/TonWebBridge/TonWebBridgePresenter.swift @@ -31,14 +31,14 @@ final class TonWebBridgePresenter: NSObject { private var dapp: TonDapp private let wallet: MetaAccountModel private lazy var userContentController = WKUserContentController() - private let messageBuilder: TonWebBridgeMessagesBuilder + private let messageBuilder: TonConnectMessageBuilder // MARK: - Constructors init( dapp: TonDapp, wallet: MetaAccountModel, - messageBuilder: TonWebBridgeMessagesBuilder, + messageBuilder: TonConnectMessageBuilder, interactor: TonWebBridgeInteractorInput, router: TonWebBridgeRouterInput, logger: LoggerProtocol, @@ -197,12 +197,13 @@ final class TonWebBridgePresenter: NSObject { guard let tonChainModel = try await interactor.getTonChain() else { throw ConvenienceError(error: "Missing Ton Chain Model") } - let responseString: String = try messageBuilder.getConnectEventSuccesResponse( + let responseEvent = try messageBuilder.getConnectEventSuccessResponse( requestPayloadItems: params.requestPayload.items, wallet: wallet, manifest: manifest, tonChainModel: tonChainModel ) + let responseString = try messageBuilder.getString(from: responseEvent) let response = DappBridgeResponse( invocationId: invocationId, From 8844d285616b0476a9449dd3e784b54547070dfc Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Fri, 30 Aug 2024 13:21:56 +0500 Subject: [PATCH 022/156] [#FLW-4928] There is an error on DOT and Acala --- .../ConfirmTransferPresenter.swift | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferPresenter.swift b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferPresenter.swift index f675653f54..3c17e61c8d 100644 --- a/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferPresenter.swift +++ b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferPresenter.swift @@ -45,16 +45,6 @@ final class ConfirmTransferPresenter { self.logger = logger self.localizationManager = localizationManager setupBindings() - - Task { - do { - try await useCase.handle(initialData: sendFlow) - await provideIsReady() - await provideViewModel() - } catch { - logger.customError(error) - } - } } // MARK: - Private methods @@ -170,7 +160,11 @@ extension ConfirmTransferPresenter: ConfirmTransferViewOutput { func didLoad(view: ConfirmTransferViewInput) { self.view = view - Task { await interactor.setup(with: self) } + Task { + await interactor.setup(with: self) + await provideIsReady() + await provideViewModel() + } } } From c0f4b7d6d9c926c1227878d138fc87dbb30469dd Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Fri, 30 Aug 2024 13:53:52 +0500 Subject: [PATCH 023/156] [#FLW-4929] There is an error on Bokolo --- .../Modules/Transfer/Validators/SendDataValidatingFactory.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fearless/Modules/Transfer/Validators/SendDataValidatingFactory.swift b/fearless/Modules/Transfer/Validators/SendDataValidatingFactory.swift index 3ae52a593b..540eb33218 100644 --- a/fearless/Modules/Transfer/Validators/SendDataValidatingFactory.swift +++ b/fearless/Modules/Transfer/Validators/SendDataValidatingFactory.swift @@ -42,7 +42,7 @@ class SendDataValidatingFactory: NSObject { case let .utility(balance): if let balance = balance, let feeAndTip = feeAndTip { - return amount + feeAndTip <= balance + return amount + feeAndTip <= balance && amount > 0 } else { return false } From a2c45ffe41f0c8fa216aa973bf452a327d0f1cfe Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Fri, 30 Aug 2024 15:19:08 +0500 Subject: [PATCH 024/156] [#FLW-4933] Create a new wallet or import by mnemonic . On the export flow there is not RAW Seed --- .../Export/ExportSeed/ExportSeedInteractor.swift | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/fearless/Modules/Export/ExportSeed/ExportSeedInteractor.swift b/fearless/Modules/Export/ExportSeed/ExportSeedInteractor.swift index 4f1a2e1bb5..a5adf694f1 100644 --- a/fearless/Modules/Export/ExportSeed/ExportSeedInteractor.swift +++ b/fearless/Modules/Export/ExportSeed/ExportSeedInteractor.swift @@ -69,16 +69,10 @@ extension ExportSeedInteractor: ExportSeedInteractorInputProtocol { let accountId = account.isChainAccount ? account.accountId : nil do { - let seedTag = chain.isEthereumBased - ? KeystoreTagV2.ethereumSecretKeyTagForMetaId(wallet.metaId, accountId: accountId) - : KeystoreTagV2.substrateSeedTagForMetaId(wallet.metaId, accountId: accountId) - + let seedTag = KeystoreTagV2.seedKeyTag(for: chain.ecosystem, metaId: wallet.metaId, accountId: accountId) var optionalSeed: Data? = try keystore.fetchKey(for: seedTag) - let keyTag = chain.isEthereumBased - ? KeystoreTagV2.ethereumSecretKeyTagForMetaId(wallet.metaId, accountId: accountId) - : KeystoreTagV2.substrateSecretKeyTagForMetaId(wallet.metaId, accountId: accountId) - + let keyTag = KeystoreTagV2.secretKeyTag(for: chain.ecosystem, metaId: wallet.metaId, accountId: accountId) if optionalSeed == nil, account.cryptoType.supportsSeedFromSecretKey { optionalSeed = try keystore.fetchKey(for: keyTag) } From f569942319769a7c40cd3c87ae465069f7575c0f Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Fri, 30 Aug 2024 16:08:11 +0500 Subject: [PATCH 025/156] [#FLW-4937] On the From and To we can see same address --- .../Wallet/AssetTransactionData+Ton.swift | 45 +++++++------------ 1 file changed, 17 insertions(+), 28 deletions(-) diff --git a/fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift b/fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift index fb353054a0..546e4620a2 100644 --- a/fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift +++ b/fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift @@ -13,6 +13,18 @@ extension AssetTransactionData { ) -> AssetTransactionData? { let status: AssetTransactionStatus = event.isInProgress ? .pending : .commited + var fees: [AssetTransactionFee] = [] + if let feeValue = BigUInt(string: String(abs(event.fee))), + let feeValue = Decimal.fromSubstrateAmount(feeValue, precision: Int16(asset.precision)) { + let fee = AssetTransactionFee( + identifier: asset.id, + assetId: asset.id, + amount: AmountDecimal(value: feeValue), + context: nil + ) + fees.append(fee) + } + switch action.type { case let .tonTransfer(tonTransfer): let amountString = String(tonTransfer.amount) @@ -23,20 +35,9 @@ extension AssetTransactionData { return nil } - var fees: [AssetTransactionFee] = [] - if let feeValue = BigUInt(string: String(abs(event.fee))), - let feeValue = Decimal.fromSubstrateAmount(feeValue, precision: Int16(asset.precision)) { - let fee = AssetTransactionFee( - identifier: asset.id, - assetId: asset.id, - amount: AmountDecimal(value: feeValue), - context: nil - ) - fees.append(fee) - } - let friendlyAddress = tonTransfer.sender.address.toFriendly().toString() let type: TransactionType = friendlyAddress == address ? .outgoing : .incoming + let peerAddress = type == .incoming ? friendlyAddress : address var iconContext: [String: String] = [:] if let iconUrl = asset.icon?.absoluteString { @@ -49,7 +50,7 @@ extension AssetTransactionData { peerId: "", peerFirstName: nil, peerLastName: nil, - peerName: tonTransfer.recipient.address.toFriendly().toString(), + peerName: peerAddress, details: "", amount: AmountDecimal(value: amount), fees: fees, @@ -69,7 +70,7 @@ extension AssetTransactionData { peerName: deploy.address.toFriendly().toString(), details: "", amount: AmountDecimal(value: .zero), - fees: [], + fees: fees, timestamp: Int64(event.timestamp), type: TransactionType.extrinsic.rawValue, reason: "", @@ -84,18 +85,6 @@ extension AssetTransactionData { return nil } - var fees: [AssetTransactionFee] = [] - if let feeValue = BigUInt(string: String(abs(event.fee))), - let feeValue = Decimal.fromSubstrateAmount(feeValue, precision: Int16(asset.precision)) { - let fee = AssetTransactionFee( - identifier: asset.id, - assetId: asset.id, - amount: AmountDecimal(value: feeValue), - context: nil - ) - fees.append(fee) - } - let sender = jettonTransfer.sender?.address.toFriendly().toString() let type: TransactionType = sender == address ? .outgoing : .incoming @@ -127,7 +116,7 @@ extension AssetTransactionData { ) ?? .zero let amount = AmountDecimal(value: amountDecimal) return AssetTransactionData( - transactionId: swap.dex, + transactionId: event.eventId, status: status, assetId: swap.jettonInfoIn?.symbol ?? "", peerId: swap.jettonInfoOut?.symbol ?? "", @@ -136,7 +125,7 @@ extension AssetTransactionData { peerName: "", details: String(swap.amountOut), amount: amount, - fees: [], + fees: fees, timestamp: .zero, type: TransactionType.swap.rawValue, reason: "", From ac11781a9d8a2a0e013c401de8c95f5c413a25d4 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Fri, 30 Aug 2024 16:25:17 +0500 Subject: [PATCH 026/156] Select chains for debug menu --- fearless/Common/Configs/ApplicationConfigs.swift | 4 ---- 1 file changed, 4 deletions(-) diff --git a/fearless/Common/Configs/ApplicationConfigs.swift b/fearless/Common/Configs/ApplicationConfigs.swift index 48111d1be4..8cd7dce79c 100644 --- a/fearless/Common/Configs/ApplicationConfigs.swift +++ b/fearless/Common/Configs/ApplicationConfigs.swift @@ -144,16 +144,12 @@ extension ApplicationConfig: ApplicationConfigProtocol, XcmConfigProtocol { // MARK: - GitHub var chainsSourceUrl: URL { - #if F_DEV let isDev = LocalToggleService.shared.chainsListToggle.storageValue if isDev { return GitHubUrl.url(suffix: "chains/v11/chains_dev.json", branch: .developFree) } else { return GitHubUrl.url(suffix: "chains/v11/chains.json") } - #else - GitHubUrl.url(suffix: "chains/v11/chains.json") - #endif } var chainTypesSourceUrl: URL { From 431201bd7bcdc95a9b2e51edb81d0e0813e44922 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Fri, 30 Aug 2024 17:42:07 +0500 Subject: [PATCH 027/156] equatable fix --- .../xcshareddata/swiftpm/Package.resolved | 2 +- .../LiquidityPoolDetails/Resources/chains.json | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 3a158b0ed5..028a2a60db 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -142,7 +142,7 @@ "location" : "https://github.com/soramitsu/shared-features-spm.git", "state" : { "branch" : "FW-new-ecosystem", - "revision" : "19a6b322ca4205b6be1a35470f081114cb10361e" + "revision" : "c00b30b3b8d2f9f3ef47ea8d4b166047748a9f0a" } }, { diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/chains.json b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/chains.json index e1a55fca08..3e2000fe68 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/chains.json +++ b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/chains.json @@ -7818,7 +7818,7 @@ ], "externalApi": { "history": { - "type": "zeta", + "type": "blockscout", "url": "https://zetachain-athens-3.blockscout.com/api/v2/addresses/" } }, @@ -7962,7 +7962,7 @@ ], "externalApi": { "history": { - "type": "zeta", + "type": "blockscout", "url": "https://pacific-explorer.manta.network/api/v2/addresses/" } }, @@ -8454,7 +8454,7 @@ "ecosystem": "ethereum", "externalApi": { "history": { - "type": "zeta", + "type": "blockscout", "url": "https://rootstock.blockscout.com//api/v2/addresses/" } }, @@ -8540,7 +8540,7 @@ "ecosystem": "ethereum", "externalApi": { "history": { - "type": "zeta", + "type": "blockscout", "url": "https://testscan.latestchain.io/api/v2/addresses/" } }, @@ -8577,7 +8577,7 @@ "ecosystem": "ethereum", "externalApi": { "history": { - "type": "zeta", + "type": "blockscout", "url": "https://scan.latestchain.io/api/v2/addresses/" } }, From 98fa023ffb3e975d174aca39b9e11b05ec770ca1 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Mon, 2 Sep 2024 12:32:55 +0500 Subject: [PATCH 028/156] [#FLW-4937] On the From and To we can see same address --- .../Extension/Wallet/AssetTransactionData+Ton.swift | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift b/fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift index 546e4620a2..34d2cbd8f1 100644 --- a/fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift +++ b/fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift @@ -2,6 +2,7 @@ import Foundation import BigInt import SoraFoundation import SSFModels +import TonSwift extension AssetTransactionData { static func createTransaction( @@ -35,9 +36,13 @@ extension AssetTransactionData { return nil } - let friendlyAddress = tonTransfer.sender.address.toFriendly().toString() - let type: TransactionType = friendlyAddress == address ? .outgoing : .incoming - let peerAddress = type == .incoming ? friendlyAddress : address + let senderFriendlyAddress = tonTransfer.sender.address.toFriendly().toString() + let recipientFriendlyAddress = tonTransfer.recipient.address.toFriendly().toString() + + let type: TransactionType = senderFriendlyAddress == address ? .outgoing : .incoming + let peerAddress = type == .incoming ? senderFriendlyAddress : recipientFriendlyAddress + + let peerName = try? TonSwift.Address.parse(peerAddress).toFriendly(bounceable: false).toString() var iconContext: [String: String] = [:] if let iconUrl = asset.icon?.absoluteString { @@ -50,7 +55,7 @@ extension AssetTransactionData { peerId: "", peerFirstName: nil, peerLastName: nil, - peerName: peerAddress, + peerName: peerName, details: "", amount: AmountDecimal(value: amount), fees: fees, From 4e77735e28cce013dd5a9d313c9c74e238170616 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Tue, 3 Sep 2024 08:40:00 +0500 Subject: [PATCH 029/156] chains list toggle fix --- .../FeatureToggleService/LocalToggleService.swift | 8 +++++--- fearless/Common/Configs/ApplicationConfigs.swift | 12 ++++++++++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/fearless/ApplicationLayer/Services/FeatureToggleService/LocalToggleService.swift b/fearless/ApplicationLayer/Services/FeatureToggleService/LocalToggleService.swift index 90eac1920d..1b6a8828b1 100644 --- a/fearless/ApplicationLayer/Services/FeatureToggleService/LocalToggleService.swift +++ b/fearless/ApplicationLayer/Services/FeatureToggleService/LocalToggleService.swift @@ -72,12 +72,14 @@ final class LocalToggleService: ApplicationServiceProtocol { /// storageValue => isDev. /// Default value true - var chainsListToggle: LocalListToggle { + var chainsListToggle: LocalListToggle? { get { - getToggle(for: "0") ?? LocalListToggle.chains + getToggle(for: "0") } set { - set(toggle: newValue) + if let newValue { + set(toggle: newValue) + } } } diff --git a/fearless/Common/Configs/ApplicationConfigs.swift b/fearless/Common/Configs/ApplicationConfigs.swift index 8cd7dce79c..d1a2762182 100644 --- a/fearless/Common/Configs/ApplicationConfigs.swift +++ b/fearless/Common/Configs/ApplicationConfigs.swift @@ -144,12 +144,20 @@ extension ApplicationConfig: ApplicationConfigProtocol, XcmConfigProtocol { // MARK: - GitHub var chainsSourceUrl: URL { - let isDev = LocalToggleService.shared.chainsListToggle.storageValue - if isDev { + let isDev = LocalToggleService.shared.chainsListToggle?.storageValue +#if F_DEV + if isDev.or(true) { return GitHubUrl.url(suffix: "chains/v11/chains_dev.json", branch: .developFree) } else { return GitHubUrl.url(suffix: "chains/v11/chains.json") } +#else + if isDev.or(false) { + return GitHubUrl.url(suffix: "chains/v11/chains_dev.json", branch: .developFree) + } else { + return GitHubUrl.url(suffix: "chains/v11/chains.json") + } +#endif } var chainTypesSourceUrl: URL { From e5c4d472c40cca4375fe212f35b84264cf96bd63 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Tue, 3 Sep 2024 10:43:17 +0500 Subject: [PATCH 030/156] ton token --- fearless.xcodeproj/project.pbxproj | 2 +- fearless/CIKeys.stencil | 4 ++++ .../Common/Services/ChainRegistry/ChainRegistry.swift | 10 ++++++++-- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index b618edb288..0dc603a49a 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -16849,7 +16849,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "#check if env-vars.sh exists\nif [ -f $PROJECT_DIR/$PROJECT_NAME/env-vars.sh ]\nthen\nsource $PROJECT_DIR/$PROJECT_NAME/env-vars.sh\nfi\n#no `else` case needed if the CI works as expected\n\nWORK_DIR=\"$PROJECT_DIR/$PROJECT_NAME\"\necho \"Sourcery Work Directory = $WORK_DIR\"\n\nOUT_FILE=\"$PROJECT_DIR/CIKeys.generated.swift\"\necho \"Sourcery Output File = $OUT_FILE\"\n\n\"$PODS_ROOT/Sourcery/bin/sourcery\" --templates \"$WORK_DIR\" --sources \"$WORK_DIR\" --output \"$OUT_FILE\" --args moonPaySecretKey=$MOONPAY_PRODUCTION_SECRET,moonPayTestSecretKey=$MOONPAY_TEST_SECRET,subscanAPIKey=$SUBSCAN_API_KEY,soraCardAPIKey=$SORA_CARD_API_KEY,soraCardDomain=$SORA_CARD_DOMAIN,soraCardKycEndpoint=$SORA_CARD_KYC_ENDPOINT_URL,soraCardKycUsername=$SORA_CARD_KYC_USERNAME,soraCardKycPassword=$SORA_CARD_KYC_PASSWORD,paywingsRepositoryUrl=$PAY_WINGS_REPOSITORY_URL,paywingsUsername=$PAY_WINGS_USERNAME,paywingsPassword=$PAY_WINGS_PASSWORD,x1EndpointUrlRelease=$X1_ENDPOINT_URL_RELEASE,x1WidgetIdRelease=$X1_WIDGET_ID_RELEASE,x1EndpointUrlDebug=$X1_ENDPOINT_URL_DEBUG,x1WidgetIdDebug=$X1_WIDGET_ID_DEBUG,ethereumApiKey=$FL_BLAST_API_ETHEREUM_KEY,bscApiKey=$FL_BLAST_API_BSC_KEY,sepoliaApiKey=$FL_BLAST_API_SEPOLIA_KEY,goerliApiKey=$FL_BLAST_API_GOERLI_KEY,polygonApiKey=$FL_BLAST_API_POLYGON_KEY,walletConnectProjectId=$FL_WALLET_CONNECT_PROJECT_ID,webClientIdRelease=$WEB_CLIENT_ID_RELEASE,fearlessGoogleUrlSchemeRelease=$FEARLESS_GOOGLE_URL_SCHEME_RELEASE,webClientIdDebug=$WEB_CLIENT_ID_DEBUG,fearlessGoogleUrlSchemeDebug=$FEARLESS_GOOGLE_URL_SCHEME_DEBUG,etherscanApiKey=$FL_IOS_ETHERSCAN_API_KEY,bscscanApiKey=$FL_IOS_BSCSCAN_API_KEY,polygonscanApiKey=$FL_IOS_POLYGONSCAN_API_KEY,alchemyApiKey=$FL_IOS_ALCHEMY_API_ETHEREUM_KEY,oklinkApiKey=$FL_OKLINK_API_KEY,opMainnetApiKey=$FL_IOS_OPTIMISTIC_ETHERSCAN_API_KEY,,dwellirApiKey=$FL_DWELLIR_API_KEY\n\n#add params to the xcconfig files\nvariableNames=(\"FEARLESS_GOOGLE_TOKEN\" \"FEARLESS_GOOGLE_URL_SCHEME\")\n\n# Iterate over the array\nfor variableName in \"${variableNames[@]}\"; do\n for file in \"$PROJECT_DIR\"/fearless/Configs/*.xcconfig; do\n if ! grep -q \"^$variableName = ${!variableName}$\" \"$file\"; then\n echo \"$variableName = ${!variableName}\" >> \"$file\"\n fi\n done\ndone\n\n/usr/libexec/PlistBuddy -c \"Set :CFBundleURLTypes:0:CFBundleURLSchemes:0 $FEARLESS_GOOGLE_URL_SCHEME\" \"$PROJECT_DIR\"/fearless/Info.plist\n\n/usr/libexec/PlistBuddy -c \"Set :GIDClientID $FEARLESS_GOOGLE_TOKEN\" \"$PROJECT_DIR\"/fearless/Info.plist\n"; + shellScript = "#check if env-vars.sh exists\nif [ -f $PROJECT_DIR/$PROJECT_NAME/env-vars.sh ]\nthen\nsource $PROJECT_DIR/$PROJECT_NAME/env-vars.sh\nfi\n#no `else` case needed if the CI works as expected\n\nWORK_DIR=\"$PROJECT_DIR/$PROJECT_NAME\"\necho \"Sourcery Work Directory = $WORK_DIR\"\n\nOUT_FILE=\"$PROJECT_DIR/CIKeys.generated.swift\"\necho \"Sourcery Output File = $OUT_FILE\"\n\n\"$PODS_ROOT/Sourcery/bin/sourcery\" --templates \"$WORK_DIR\" --sources \"$WORK_DIR\" --output \"$OUT_FILE\" --args moonPaySecretKey=$MOONPAY_PRODUCTION_SECRET,moonPayTestSecretKey=$MOONPAY_TEST_SECRET,subscanAPIKey=$SUBSCAN_API_KEY,soraCardAPIKey=$SORA_CARD_API_KEY,soraCardDomain=$SORA_CARD_DOMAIN,soraCardKycEndpoint=$SORA_CARD_KYC_ENDPOINT_URL,soraCardKycUsername=$SORA_CARD_KYC_USERNAME,soraCardKycPassword=$SORA_CARD_KYC_PASSWORD,paywingsRepositoryUrl=$PAY_WINGS_REPOSITORY_URL,paywingsUsername=$PAY_WINGS_USERNAME,paywingsPassword=$PAY_WINGS_PASSWORD,x1EndpointUrlRelease=$X1_ENDPOINT_URL_RELEASE,x1WidgetIdRelease=$X1_WIDGET_ID_RELEASE,x1EndpointUrlDebug=$X1_ENDPOINT_URL_DEBUG,x1WidgetIdDebug=$X1_WIDGET_ID_DEBUG,ethereumApiKey=$FL_BLAST_API_ETHEREUM_KEY,bscApiKey=$FL_BLAST_API_BSC_KEY,sepoliaApiKey=$FL_BLAST_API_SEPOLIA_KEY,goerliApiKey=$FL_BLAST_API_GOERLI_KEY,polygonApiKey=$FL_BLAST_API_POLYGON_KEY,walletConnectProjectId=$FL_WALLET_CONNECT_PROJECT_ID,webClientIdRelease=$WEB_CLIENT_ID_RELEASE,fearlessGoogleUrlSchemeRelease=$FEARLESS_GOOGLE_URL_SCHEME_RELEASE,webClientIdDebug=$WEB_CLIENT_ID_DEBUG,fearlessGoogleUrlSchemeDebug=$FEARLESS_GOOGLE_URL_SCHEME_DEBUG,etherscanApiKey=$FL_IOS_ETHERSCAN_API_KEY,bscscanApiKey=$FL_IOS_BSCSCAN_API_KEY,polygonscanApiKey=$FL_IOS_POLYGONSCAN_API_KEY,alchemyApiKey=$FL_IOS_ALCHEMY_API_ETHEREUM_KEY,oklinkApiKey=$FL_OKLINK_API_KEY,opMainnetApiKey=$FL_IOS_OPTIMISTIC_ETHERSCAN_API_KEY,dwellirApiKey=$FL_DWELLIR_API_KEY,\n tonApiKey=$FL_IOS_TON_API_KEY\n\n#add params to the xcconfig files\nvariableNames=(\"FEARLESS_GOOGLE_TOKEN\" \"FEARLESS_GOOGLE_URL_SCHEME\")\n\n# Iterate over the array\nfor variableName in \"${variableNames[@]}\"; do\n for file in \"$PROJECT_DIR\"/fearless/Configs/*.xcconfig; do\n if ! grep -q \"^$variableName = ${!variableName}$\" \"$file\"; then\n echo \"$variableName = ${!variableName}\" >> \"$file\"\n fi\n done\ndone\n\n/usr/libexec/PlistBuddy -c \"Set :CFBundleURLTypes:0:CFBundleURLSchemes:0 $FEARLESS_GOOGLE_URL_SCHEME\" \"$PROJECT_DIR\"/fearless/Info.plist\n\n/usr/libexec/PlistBuddy -c \"Set :GIDClientID $FEARLESS_GOOGLE_TOKEN\" \"$PROJECT_DIR\"/fearless/Info.plist\n"; }; B99BB6683A83CEA62988CEA4 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; diff --git a/fearless/CIKeys.stencil b/fearless/CIKeys.stencil index 22cc2ed7b2..d517db0348 100644 --- a/fearless/CIKeys.stencil +++ b/fearless/CIKeys.stencil @@ -65,3 +65,7 @@ enum ThirdPartyServicesApiKeys { enum DwellirNodeApiKey { static var dwellirApiKey: String = "{{ argument.dwellirApiKey }}" } + +enum TonNodeApiKey { + static var tonApiKey: String = "{{ argument.tonApiKey }}" +} diff --git a/fearless/Common/Services/ChainRegistry/ChainRegistry.swift b/fearless/Common/Services/ChainRegistry/ChainRegistry.swift index c5a803902e..8df0e867fe 100644 --- a/fearless/Common/Services/ChainRegistry/ChainRegistry.swift +++ b/fearless/Common/Services/ChainRegistry/ChainRegistry.swift @@ -6,6 +6,7 @@ import Web3 import SSFChainRegistry import SSFRuntimeCodingService import SSFChainConnection +import FearlessKeys protocol ChainRegistryProtocol: AnyObject { var availableChainIds: Set? { get } @@ -271,12 +272,17 @@ final class ChainRegistry { private func handle(ton chain: ChainModel) { chains = chains.filter { $0.chainId != chain.chainId } chains.append(chain) +#if DEBUG + let token = TonNodeApiKey.tonApiKey +#else + let token = TonNodeApiKeyDebug.tonApiKey +#endif let isTesnet = LocalToggleService.shared.tonEnvListToggle.storageValue if chain.options.or([]).contains(.testnet), isTesnet, let node = chain.nodes.first { - let apiAssembly = TonAPIAssembly(tonAPIURL: node.url, token: "AHCGOAHBPVILMQIAAAADDH734BNIZUMGZNBT6KZ3WZENQJOHZRLQVXQOD3UTUUHCDC4B5RI") + let apiAssembly = TonAPIAssembly(tonAPIURL: node.url, token: token) tonApiAssembly = apiAssembly } else if !chain.options.or([]).contains(.testnet), !isTesnet, let node = chain.nodes.first { - let apiAssembly = TonAPIAssembly(tonAPIURL: node.url, token: "AHCGOAHBPVILMQIAAAADDH734BNIZUMGZNBT6KZ3WZENQJOHZRLQVXQOD3UTUUHCDC4B5RI") + let apiAssembly = TonAPIAssembly(tonAPIURL: node.url, token: token) tonApiAssembly = apiAssembly } } From 3476aad8a7c3576adc5b8051a2a0e6c97fb7f462 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Tue, 3 Sep 2024 10:59:22 +0500 Subject: [PATCH 031/156] [#FLW-4934] Message for debug --- fearless/Modules/BackupWallet/BackupWalletPresenter.swift | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/fearless/Modules/BackupWallet/BackupWalletPresenter.swift b/fearless/Modules/BackupWallet/BackupWalletPresenter.swift index 1a85093ce4..fbb21b18df 100644 --- a/fearless/Modules/BackupWallet/BackupWalletPresenter.swift +++ b/fearless/Modules/BackupWallet/BackupWalletPresenter.swift @@ -309,7 +309,13 @@ extension BackupWalletPresenter: BackupWalletInteractorOutput { googleAuthorized = false backupAccounts = nil logger.error(failure.localizedDescription) - showGoogleIssueAlert() + router.present( + message: nil, title: "\(failure)", + closeAction: nil, + from: view, + actions: [] + ) +// showGoogleIssueAlert() } provideViewModel() } From 7e55440652be5581c701683fc12ed42df0d13a8a Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Tue, 3 Sep 2024 11:58:24 +0500 Subject: [PATCH 032/156] ton key fix --- fearless/Common/Services/ChainRegistry/ChainRegistry.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fearless/Common/Services/ChainRegistry/ChainRegistry.swift b/fearless/Common/Services/ChainRegistry/ChainRegistry.swift index 8df0e867fe..b7be601478 100644 --- a/fearless/Common/Services/ChainRegistry/ChainRegistry.swift +++ b/fearless/Common/Services/ChainRegistry/ChainRegistry.swift @@ -273,9 +273,9 @@ final class ChainRegistry { chains = chains.filter { $0.chainId != chain.chainId } chains.append(chain) #if DEBUG - let token = TonNodeApiKey.tonApiKey -#else let token = TonNodeApiKeyDebug.tonApiKey +#else + let token = TonNodeApiKey.tonApiKey #endif let isTesnet = LocalToggleService.shared.tonEnvListToggle.storageValue if chain.options.or([]).contains(.testnet), isTesnet, let node = chain.nodes.first { From 4ad3421cafd582de14da779b3060797390d657a2 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Tue, 3 Sep 2024 17:11:59 +0500 Subject: [PATCH 033/156] [#FLW-4941, #FLW-4942] After importing the wallet there is not ETH balance --- fearless/Common/Model/WalletBalanceInfo.swift | 2 +- .../ChainAssetList/ChainAssetListInteractor.swift | 3 +-- .../WalletsManagment/WalletsManagmentPresenter.swift | 10 +++++----- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/fearless/Common/Model/WalletBalanceInfo.swift b/fearless/Common/Model/WalletBalanceInfo.swift index a68fddeff4..2f5453528b 100644 --- a/fearless/Common/Model/WalletBalanceInfo.swift +++ b/fearless/Common/Model/WalletBalanceInfo.swift @@ -1,7 +1,7 @@ import Foundation import SSFModels -struct WalletBalanceInfo { +struct WalletBalanceInfo: Equatable { let totalFiatValue: Decimal let enabledAssetFiatBalance: Decimal let dayChangePercent: Decimal diff --git a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListInteractor.swift b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListInteractor.swift index 1ded74846c..d4fc9ab237 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListInteractor.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListInteractor.swift @@ -102,8 +102,7 @@ final class ChainAssetListInteractor { accountInfoSubscriptionAdapter.subscribe( chainsAssets: chainAssets, handler: self, - deliveryOn: accountInfosDeliveryQueue, - notifyJustWhenUpdated: false + deliveryOn: accountInfosDeliveryQueue ) } diff --git a/fearless/Modules/WalletsManagment/WalletsManagmentPresenter.swift b/fearless/Modules/WalletsManagment/WalletsManagmentPresenter.swift index 25775f3dcb..77335343b9 100644 --- a/fearless/Modules/WalletsManagment/WalletsManagmentPresenter.swift +++ b/fearless/Modules/WalletsManagment/WalletsManagmentPresenter.swift @@ -215,8 +215,10 @@ extension WalletsManagmentPresenter: WalletsManagmentInteractorOutput { func didReceiveWalletBalances(_ balances: Result<[MetaAccountId: WalletBalanceInfo], Error>) { switch balances { case let .success(balances): - self.balances = balances - provideViewModel() + if self.balances != balances { + self.balances = balances + provideViewModel() + } case let .failure(error): logger.error("WalletsManagmentPresenter error: \(error.localizedDescription)") } @@ -235,9 +237,7 @@ extension WalletsManagmentPresenter: WalletsManagmentInteractorOutput { // MARK: - Localizable extension WalletsManagmentPresenter: Localizable { - func applyLocalization() { - provideViewModel() - } + func applyLocalization() {} } extension WalletsManagmentPresenter: WalletsManagmentModuleInput {} From 35a9e394bdbf6b0740af29e354f07633219eb29b Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Wed, 4 Sep 2024 08:59:26 +0500 Subject: [PATCH 034/156] Revert "[#FLW-4934] Message for debug" This reverts commit 3476aad8a7c3576adc5b8051a2a0e6c97fb7f462. --- fearless/Modules/BackupWallet/BackupWalletPresenter.swift | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/fearless/Modules/BackupWallet/BackupWalletPresenter.swift b/fearless/Modules/BackupWallet/BackupWalletPresenter.swift index fbb21b18df..1a85093ce4 100644 --- a/fearless/Modules/BackupWallet/BackupWalletPresenter.swift +++ b/fearless/Modules/BackupWallet/BackupWalletPresenter.swift @@ -309,13 +309,7 @@ extension BackupWalletPresenter: BackupWalletInteractorOutput { googleAuthorized = false backupAccounts = nil logger.error(failure.localizedDescription) - router.present( - message: nil, title: "\(failure)", - closeAction: nil, - from: view, - actions: [] - ) -// showGoogleIssueAlert() + showGoogleIssueAlert() } provideViewModel() } From 94c0e218799d07b4c6a7dc3e1096f858805d283d Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Wed, 4 Sep 2024 10:10:14 +0500 Subject: [PATCH 035/156] [#FLW-4947] Import wallet by RAW or JSON. We can see mnemonic on the export flow --- fearless/Common/Model/AvailableExportOptionsProvider.swift | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fearless/Common/Model/AvailableExportOptionsProvider.swift b/fearless/Common/Model/AvailableExportOptionsProvider.swift index 3e0347de6b..35c173bad4 100644 --- a/fearless/Common/Model/AvailableExportOptionsProvider.swift +++ b/fearless/Common/Model/AvailableExportOptionsProvider.swift @@ -36,6 +36,9 @@ final class AvailableExportOptionsProvider: AvailableExportOptionsProviderProtoc options.append(.keystore) case .ton: + guard accountId != nil else { + break + } options.append(.mnemonic) } From 04520db4b43d9a1d1b77098058216f02e1f30078 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Tue, 10 Sep 2024 13:47:56 +0500 Subject: [PATCH 036/156] =?UTF-8?q?[#FLW-4951,=20FLW-4950]=20After=20logou?= =?UTF-8?q?t=20the=20connections=20didn=E2=80=99t=20dropped?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xcshareddata/swiftpm/Package.resolved | 4 +- .../TonConnectMessageBuilderImpl.swift | 2 +- .../Services/TonConnectService.swift | 3 ++ .../Services/TonConnectServiceDelegate.swift | 6 +-- .../Services/TonConnectServiceImpl.swift | 13 +++++- .../featuredBanner.imageset/Contents.json | 12 ++++++ .../featuredBanner.pdf | Bin 0 -> 606205 bytes .../Cells/BrowserExploreFeaturedCell.swift | 13 +++--- .../DappBrowser/DappBrowserPresenter.swift | 2 +- .../DappBrowserViewModelFactory.swift | 2 +- .../LiquidityPoolDetails/Resources/dapps.json | 40 ++---------------- .../Modules/Profile/ProfileInteractor.swift | 8 +++- .../Modules/Profile/ProfileViewFactory.swift | 3 +- .../TonWebBridge/Models/TonConnect.swift | 4 +- .../Modules/TonWebBridge/Models/TonDapp.swift | 22 ---------- .../WalletMainContainerPresenter.swift | 4 +- 16 files changed, 56 insertions(+), 82 deletions(-) create mode 100644 fearless/Assets.xcassets/featuredBanner.imageset/Contents.json create mode 100644 fearless/Assets.xcassets/featuredBanner.imageset/featuredBanner.pdf diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 028a2a60db..679f0f4281 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -240,8 +240,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-system.git", "state" : { - "revision" : "6a9e38e7bd22a3b8ba80bddf395623cf68f57807", - "version" : "1.3.1" + "revision" : "d2ba781702a1d8285419c15ee62fd734a9437ff5", + "version" : "1.3.2" } }, { diff --git a/fearless/ApplicationLayer/Services/TonConnectMessageBuilderImpl.swift b/fearless/ApplicationLayer/Services/TonConnectMessageBuilderImpl.swift index 981505b957..ee15114681 100644 --- a/fearless/ApplicationLayer/Services/TonConnectMessageBuilderImpl.swift +++ b/fearless/ApplicationLayer/Services/TonConnectMessageBuilderImpl.swift @@ -7,7 +7,7 @@ import TonSwift final class TonConnectMessageBuilderImpl: TonConnectMessageBuilder { private enum Constants { - static let windowKey = "tonkeeper" + static let windowKey = "fearless" } func getConfiguration( diff --git a/fearless/ApplicationLayer/Services/TonConnectService.swift b/fearless/ApplicationLayer/Services/TonConnectService.swift index 98bfca630f..8b216340de 100644 --- a/fearless/ApplicationLayer/Services/TonConnectService.swift +++ b/fearless/ApplicationLayer/Services/TonConnectService.swift @@ -66,4 +66,7 @@ protocol TonConnectService: ApplicationServiceProtocol { func saveDisconnected( app: TonConnectApp ) async + + /// Disconnect from all apps and update event center + func disconnectAll() async } diff --git a/fearless/ApplicationLayer/Services/TonConnectServiceDelegate.swift b/fearless/ApplicationLayer/Services/TonConnectServiceDelegate.swift index a2671114fb..e44b3c5274 100644 --- a/fearless/ApplicationLayer/Services/TonConnectServiceDelegate.swift +++ b/fearless/ApplicationLayer/Services/TonConnectServiceDelegate.swift @@ -20,7 +20,7 @@ protocol TonConnectServiceDelegate: AnyObject { walletId: MetaAccountId, app: TonConnectApp ) - func didDisconnected(app: TonConnectApp) + func didDisconnectedApp() } extension TonConnectServiceDelegate { @@ -42,7 +42,5 @@ extension TonConnectServiceDelegate { walletId: MetaAccountId, app: TonConnectApp ) {} - func didDisconnected( - app: TonConnectApp - ) {} + func didDisconnectedApp() {} } diff --git a/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift b/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift index 7816bf1362..b8d8299182 100644 --- a/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift +++ b/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift @@ -217,7 +217,18 @@ actor TonConnectServiceImpl: TonConnectService { await appRepository.remove(ids: [app.identifier]) await updateEventCenter() listeners.forEach { - ($0.target as? TonConnectServiceDelegate)?.didDisconnected(app: app) + ($0.target as? TonConnectServiceDelegate)?.didDisconnectedApp() + } + } + + func disconnectAll() async { + guard let apps = try? await appRepository.fetchAll() else { + return + } + await appRepository.remove(ids: apps.map { $0.identifier }) + await updateEventCenter() + listeners.forEach { + ($0.target as? TonConnectServiceDelegate)?.didDisconnectedApp() } } diff --git a/fearless/Assets.xcassets/featuredBanner.imageset/Contents.json b/fearless/Assets.xcassets/featuredBanner.imageset/Contents.json new file mode 100644 index 0000000000..2d3c27c783 --- /dev/null +++ b/fearless/Assets.xcassets/featuredBanner.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "featuredBanner.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/fearless/Assets.xcassets/featuredBanner.imageset/featuredBanner.pdf b/fearless/Assets.xcassets/featuredBanner.imageset/featuredBanner.pdf new file mode 100644 index 0000000000000000000000000000000000000000..bff3d3e407a9c8db4d8e4658a2d9d3ed92360179 GIT binary patch literal 606205 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Π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

7aJCXR&!$~X7CjbBOuvR?YM;d3BDC;-#OqHK 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 z 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

@g>3gF0E~MZE01(P8_jv~R&EX7mj1fFt7In8kQ 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%0D^@0OT}+%;qQyE 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 z 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

u-Bc+X>+@~w8> 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

iLy`!X1Y~3T<&Cks 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%0A&?HGE1C*tB^bA2MMR?aKSs}%$FA^#bi57&pA>R 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

7aJCXR&!$~X7CjbBOuvR?YM;d3BDC;-#OqHK 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 z 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

@g>3gF0E~MZE01(P8_jv~R&EX7mj1fFt7In8kQ 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%0D^@0OT}+%;qQyE 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 z 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

u-Bc+X>+@~w8> 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

yS47mhK#6vy%b?b;W_nJqOd^L| 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�ur)a%yt_0ERlE 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%0A-gy#~8@_*jC&Q4z1y6uKe4rK77SCNmyBO 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 q7spk!_0Nj}k!mBUjNblu{$gsQqD DappBrowserViewModel { let featured = dapps.map { DappBrowserFeaturedViewModel( - poster: RemoteImageViewModel(url: $0.poster) ?? BundleImageViewModel(image: R.image.fearlessBanner()), + poster: RemoteImageViewModel(url: $0.poster) ?? BundleImageViewModel(image: R.image.featuredBanner()), icon: RemoteImageViewModel(url: $0.icon), dappName: $0.name, dappDescription: $0.description ?? "", diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/dapps.json b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/dapps.json index 5c7036def9..f8cd7b269d 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/dapps.json +++ b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/dapps.json @@ -5,42 +5,10 @@ { "identifier": "ed88b393-2ac3-4749-b864-dbc141c4188d", "chains": ["-239"], - "name": "STON.fi", - "url": "https://app.ston.fi/", - "description": "Cross-chain DEX built on TON.", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/stonfi.png" - }, - { - "identifier": "d32532fa-7306-4927-9cfa-04e164a17419", - "chains": ["-239"], - "name": "DeDust.io", - "url": "https://dedust.io/swap", - "description": "AMM DEX for the TON blockchain.", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/dedust.jpg" - }, - { - "identifier": "3e4b07d5-8272-4381-9f69-37f008b2f386", - "chains": ["-239"], - "name": "TON Diamonds DEX", - "url": "https://ton.diamonds/dex/swap", - "description": "Find top jetton rates and get $GLINT cashback.", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/tondiamonds.png" - }, - { - "identifier": "bd485b34-7e10-45da-8e20-a58f5acccdc3", - "chains": ["-239"], - "name": "Storm Trade", - "url": "https://storm.tg/", - "description": "Perps DEX with ×100 leverage.", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/stormtrade.png" - }, - { - "identifier": "e6563c0f-abf3-4506-86f1-d61e03c9b2b6", - "chains": ["-239"], - "name": "swap.coffee", - "url": "https://swap.coffee/dex", - "description": "The most effective DEX Aggregator on TON. Smart routing and transaction splitting.", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/swapcoffee.png" + "name": "FW dapp example", + "url": "https://ton-connect.example.fearless.soramitsu.co.jp", + "description": "FW dapp example", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/FW_icon_288.png" } ] }, diff --git a/fearless/Modules/Profile/ProfileInteractor.swift b/fearless/Modules/Profile/ProfileInteractor.swift index e8f9d778e7..426d387398 100644 --- a/fearless/Modules/Profile/ProfileInteractor.swift +++ b/fearless/Modules/Profile/ProfileInteractor.swift @@ -21,6 +21,7 @@ final class ProfileInteractor { private let walletRepository: AnyDataProviderRepository private let chainsIssuesCenter: ChainsIssuesCenterProtocol private let walletConnectDisconnectService: WalletConnectDisconnectService + private let tonConnectService: TonConnectService private lazy var currentCurrency: Currency? = { selectedMetaAccount.selectedCurrency @@ -37,7 +38,8 @@ final class ProfileInteractor { walletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterProtocol, walletRepository: AnyDataProviderRepository, chainsIssuesCenter: ChainsIssuesCenterProtocol, - walletConnectDisconnectService: WalletConnectDisconnectService + walletConnectDisconnectService: WalletConnectDisconnectService, + tonConnectService: TonConnectService ) { self.selectedWalletSettings = selectedWalletSettings self.eventCenter = eventCenter @@ -48,6 +50,7 @@ final class ProfileInteractor { self.walletRepository = walletRepository self.chainsIssuesCenter = chainsIssuesCenter self.walletConnectDisconnectService = walletConnectDisconnectService + self.tonConnectService = tonConnectService } // MARK: - Private methods @@ -105,6 +108,9 @@ extension ProfileInteractor: ProfileInteractorInputProtocol { let operation = repository.deleteAllOperation() operation.completionBlock = { [weak self] in self?.walletConnectDisconnectService.disconnectAllSessions() + Task { [weak self] in + await self?.tonConnectService.disconnectAll() + } completion() } operationQueue.addOperation(operation) diff --git a/fearless/Modules/Profile/ProfileViewFactory.swift b/fearless/Modules/Profile/ProfileViewFactory.swift index 4529d1b0f1..665d6c5f54 100644 --- a/fearless/Modules/Profile/ProfileViewFactory.swift +++ b/fearless/Modules/Profile/ProfileViewFactory.swift @@ -84,7 +84,8 @@ final class ProfileViewFactory: ProfileViewFactoryProtocol { walletBalanceSubscriptionAdapter: walletBalanceSubscriptionAdapter, walletRepository: accountRepository, chainsIssuesCenter: chainsIssuesCenter, - walletConnectDisconnectService: walletConnectDisconnectService + walletConnectDisconnectService: walletConnectDisconnectService, + tonConnectService: ServiceAssembly.shared.tonConnectService() ) let presenter = ProfilePresenter( diff --git a/fearless/Modules/TonWebBridge/Models/TonConnect.swift b/fearless/Modules/TonWebBridge/Models/TonConnect.swift index 306c6c0ffd..41125094d6 100644 --- a/fearless/Modules/TonWebBridge/Models/TonConnect.swift +++ b/fearless/Modules/TonWebBridge/Models/TonConnect.swift @@ -17,8 +17,8 @@ extension TonConnect { struct DeviceInfo: Encodable { let platform = "iphone" - let appName = "Tonkeeper" - let appVersion = "3.4.0" + let appName = "Fearless" + let appVersion = AppVersion.stringValue let maxProtocolVersion = 2 let features = [ FeatureCompatible.legacy(Feature()), diff --git a/fearless/Modules/TonWebBridge/Models/TonDapp.swift b/fearless/Modules/TonWebBridge/Models/TonDapp.swift index 3fa393a699..b2bf7148a0 100644 --- a/fearless/Modules/TonWebBridge/Models/TonDapp.swift +++ b/fearless/Modules/TonWebBridge/Models/TonDapp.swift @@ -10,10 +10,6 @@ struct TonDapp: Codable, Equatable, Identifiable { let poster: URL? let url: URL - static func == (lhs: TonDapp, rhs: TonDapp) -> Bool { - lhs.url.host == rhs.url.host - } - enum CodingKeys: CodingKey { case identifier case chains @@ -23,22 +19,4 @@ struct TonDapp: Codable, Equatable, Identifiable { case poster case url } - - init( - identifier: String, - chains: [String], - name: String, - description: String?, - icon: URL, - poster: URL?, - url: URL - ) { - self.identifier = identifier - self.chains = chains - self.name = name - self.description = description - self.icon = icon - self.poster = poster - self.url = url - } } diff --git a/fearless/Modules/WalletMainContainer/WalletMainContainerPresenter.swift b/fearless/Modules/WalletMainContainer/WalletMainContainerPresenter.swift index 67ad8cad6b..acf42d2924 100644 --- a/fearless/Modules/WalletMainContainer/WalletMainContainerPresenter.swift +++ b/fearless/Modules/WalletMainContainer/WalletMainContainerPresenter.swift @@ -76,9 +76,7 @@ final class WalletMainContainerPresenter { do { try await interactor.tonConnect(uri: uri) } catch { - Task { @MainActor in - router.present(error: error, from: view, locale: selectedLocale) - } + Logger.shared.customError(error) } } } From ccdb57fe11273e47b110f7f8911788cedfb8fccd Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Tue, 10 Sep 2024 14:40:58 +0500 Subject: [PATCH 037/156] [#FLW-4952] Without TON account we can pass dApp connection flow --- .../WalletConnectProposalPresenter.swift | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/fearless/Modules/WalletConnectProposal/WalletConnectProposalPresenter.swift b/fearless/Modules/WalletConnectProposal/WalletConnectProposalPresenter.swift index e3def803cb..74480c183a 100644 --- a/fearless/Modules/WalletConnectProposal/WalletConnectProposalPresenter.swift +++ b/fearless/Modules/WalletConnectProposal/WalletConnectProposalPresenter.swift @@ -74,7 +74,8 @@ final class WalletConnectProposalPresenter { } private func buildViewModel() { - guard chains.isNotEmpty, wallets.isNotEmpty else { + guard chains.isNotEmpty, wallets.filter({ $0.tonPublicKey != nil }).isNotEmpty else { + showMissingAccountAlert() return } do { @@ -296,6 +297,24 @@ final class WalletConnectProposalPresenter { } } } + + private func showMissingAccountAlert() { + Task { @MainActor in + let title = R.string.localizable.accountNeededTitle(preferredLanguages: selectedLocale.rLanguages) + let message = R.string.localizable.accountNeededMessage(preferredLanguages: selectedLocale.rLanguages) + let closeActionTitle = R.string.localizable.commonClose(preferredLanguages: selectedLocale.rLanguages) + let closeAction = SheetAlertPresentableAction(title: closeActionTitle) { [weak self] in + self?.router.dismiss(view: self?.view) + } + router.present( + message: message, + title: title, + closeAction: nil, + from: view, + actions: [closeAction] + ) + } + } } // MARK: - WalletConnectProposalViewOutput From 418930c4c406c1f25520fc629acae405734852d5 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Tue, 10 Sep 2024 15:44:08 +0500 Subject: [PATCH 038/156] [#FLW-4953] There is not address on TON account if we imported it on settings --- .../xcshareddata/swiftpm/Package.resolved | 2 +- .../Common/Operation/MetaAccountOperationFactory.swift | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 679f0f4281..79e5664611 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -142,7 +142,7 @@ "location" : "https://github.com/soramitsu/shared-features-spm.git", "state" : { "branch" : "FW-new-ecosystem", - "revision" : "c00b30b3b8d2f9f3ef47ea8d4b166047748a9f0a" + "revision" : "064e425cc82a0ae6acc72ef4024b282eed95ef98" } }, { diff --git a/fearless/Common/Operation/MetaAccountOperationFactory.swift b/fearless/Common/Operation/MetaAccountOperationFactory.swift index 294580a772..e048327cda 100644 --- a/fearless/Common/Operation/MetaAccountOperationFactory.swift +++ b/fearless/Common/Operation/MetaAccountOperationFactory.swift @@ -511,9 +511,11 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { try saveSeed(query.seed, metaId: metaId, ecosystem: request.ecosystem) case .ton: let tonQuery = try getTonQuery(mnemonic: request.mnemonic) - accountId = tonQuery.publicKey - privateKey = tonQuery.privateKey - publicKey = tonQuery.publicKey + return request.meta.replacingTon( + tonPublicKey: tonQuery.publicKey, + tonAddress: tonQuery.address, + tonContractVersion: tonQuery.contractVersion + ) } try saveSecretKey( From 183e702e42bc27ff264219f0b841fbfbdd5b788a Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Wed, 11 Sep 2024 12:50:55 +0500 Subject: [PATCH 039/156] [#FLW-4954] We should stay on wallets list screen when we are trying to connect dApp but we do not have TON account --- .../WalletConnectProposalPresenter.swift | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/fearless/Modules/WalletConnectProposal/WalletConnectProposalPresenter.swift b/fearless/Modules/WalletConnectProposal/WalletConnectProposalPresenter.swift index 74480c183a..e4d50d7aa2 100644 --- a/fearless/Modules/WalletConnectProposal/WalletConnectProposalPresenter.swift +++ b/fearless/Modules/WalletConnectProposal/WalletConnectProposalPresenter.swift @@ -74,7 +74,7 @@ final class WalletConnectProposalPresenter { } private func buildViewModel() { - guard chains.isNotEmpty, wallets.filter({ $0.tonPublicKey != nil }).isNotEmpty else { + guard chains.isNotEmpty, wallets.isNotEmpty else { showMissingAccountAlert() return } @@ -242,8 +242,10 @@ final class WalletConnectProposalPresenter { switch status { case let .proposal(proposalVariant): switch proposalVariant { - case .walletConnect, .tonConnect: + case .walletConnect: self.wallets = wallets + case .tonConnect: + self.wallets = wallets.filter { $0.tonAddress != nil } case .tonJsBridge: self.wallets = [SelectedWalletSettings.shared.value].compactMap { $0 } } From f0ba43cd763856d4b76e63c16d0e13e68a5c39d7 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Thu, 12 Sep 2024 11:22:09 +0500 Subject: [PATCH 040/156] [#FLW-4937] On the From and To we can see same address --- .../Services/TonConnectMessageBuilderImpl.swift | 2 +- ...WalletTransactionDetailsViewModelFactory.swift | 15 ++++++++++++--- .../WalletConnectProposalPresenter.swift | 5 ++++- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/fearless/ApplicationLayer/Services/TonConnectMessageBuilderImpl.swift b/fearless/ApplicationLayer/Services/TonConnectMessageBuilderImpl.swift index ee15114681..5dc4d9374d 100644 --- a/fearless/ApplicationLayer/Services/TonConnectMessageBuilderImpl.swift +++ b/fearless/ApplicationLayer/Services/TonConnectMessageBuilderImpl.swift @@ -7,7 +7,7 @@ import TonSwift final class TonConnectMessageBuilderImpl: TonConnectMessageBuilder { private enum Constants { - static let windowKey = "fearless" + static let windowKey = "Fearless" } func getConfiguration( diff --git a/fearless/Modules/NewWallet/WalletTransactionDetails/ViewModel/WalletTransactionDetailsViewModelFactory.swift b/fearless/Modules/NewWallet/WalletTransactionDetails/ViewModel/WalletTransactionDetailsViewModelFactory.swift index c03a0c17f7..f70cb971c5 100644 --- a/fearless/Modules/NewWallet/WalletTransactionDetails/ViewModel/WalletTransactionDetailsViewModelFactory.swift +++ b/fearless/Modules/NewWallet/WalletTransactionDetails/ViewModel/WalletTransactionDetailsViewModelFactory.swift @@ -1,5 +1,5 @@ import Foundation - +import TonSwift import SoraFoundation import SSFModels @@ -66,8 +66,17 @@ class WalletTransactionDetailsViewModelFactory: WalletTransactionDetailsViewMode switch transactionType { case .incoming, .outgoing: - let from = transactionType == .outgoing ? accountAddress : transaction.peerName - let to = transactionType == .incoming ? accountAddress : transaction.peerName + let from: String? + let to: String? + switch chain.ecosystem { + case .substrate, .ethereumBased, .ethereum: + from = transactionType == .outgoing ? accountAddress : transaction.peerName + to = transactionType == .incoming ? accountAddress : transaction.peerName + case .ton: + let tonAddress = try? TonSwift.Address.parse(accountAddress).toFriendly(bounceable: false).toString() + from = transactionType == .outgoing ? tonAddress : transaction.peerName + to = transactionType == .incoming ? tonAddress : transaction.peerName + } let amountString = tokenFormatter.stringFromDecimal(transaction.amount.decimalValue) let fee: Decimal = transaction.fees.map(\.amount.decimalValue).reduce(0, +) let feeString = feeFormatter?.stringFromDecimal(fee) diff --git a/fearless/Modules/WalletConnectProposal/WalletConnectProposalPresenter.swift b/fearless/Modules/WalletConnectProposal/WalletConnectProposalPresenter.swift index e4d50d7aa2..25a36a0fc9 100644 --- a/fearless/Modules/WalletConnectProposal/WalletConnectProposalPresenter.swift +++ b/fearless/Modules/WalletConnectProposal/WalletConnectProposalPresenter.swift @@ -75,7 +75,6 @@ final class WalletConnectProposalPresenter { private func buildViewModel() { guard chains.isNotEmpty, wallets.isNotEmpty else { - showMissingAccountAlert() return } do { @@ -246,6 +245,10 @@ final class WalletConnectProposalPresenter { self.wallets = wallets case .tonConnect: self.wallets = wallets.filter { $0.tonAddress != nil } + if self.wallets.isEmpty { + showMissingAccountAlert() + return + } case .tonJsBridge: self.wallets = [SelectedWalletSettings.shared.value].compactMap { $0 } } From a4ac9ec0c2dcd9966e66ff52c64eea35191bd006 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Mon, 16 Sep 2024 09:47:15 +0500 Subject: [PATCH 041/156] Generamba templated has been added in git --- .gitignore | 3 --- GenerambaTemplates/.gitignore | 1 - .../viper-code-layout/Code/assembly.swift.liquid | 0 .../viper-code-layout/Code/interactor.swift.liquid | 0 .../viper-code-layout/Code/presenter.swift.liquid | 0 .../viper-code-layout/Code/protocol.swift.liquid | 0 .../viper-code-layout/Code/router.swift.liquid | 0 .../viper-code-layout/Code/view.swift.liquid | 0 .../viper-code-layout/Code/viewlayout.swift.liquid | 0 .../viper-code-layout/Tests/tests.swift.liquid | 0 .../viper-code-layout/viper-code-layout.rambaspec | 0 11 files changed, 4 deletions(-) delete mode 100644 GenerambaTemplates/.gitignore rename {GenerambaTemplates => Templates}/viper-code-layout/Code/assembly.swift.liquid (100%) rename {GenerambaTemplates => Templates}/viper-code-layout/Code/interactor.swift.liquid (100%) rename {GenerambaTemplates => Templates}/viper-code-layout/Code/presenter.swift.liquid (100%) rename {GenerambaTemplates => Templates}/viper-code-layout/Code/protocol.swift.liquid (100%) rename {GenerambaTemplates => Templates}/viper-code-layout/Code/router.swift.liquid (100%) rename {GenerambaTemplates => Templates}/viper-code-layout/Code/view.swift.liquid (100%) rename {GenerambaTemplates => Templates}/viper-code-layout/Code/viewlayout.swift.liquid (100%) rename {GenerambaTemplates => Templates}/viper-code-layout/Tests/tests.swift.liquid (100%) rename {GenerambaTemplates => Templates}/viper-code-layout/viper-code-layout.rambaspec (100%) diff --git a/.gitignore b/.gitignore index 0cb7e551df..d7235b70a7 100644 --- a/.gitignore +++ b/.gitignore @@ -54,8 +54,5 @@ fearless/env-vars.sh *.generated.swift Tests/Mocks/CommonMocks.swift Tests/Mocks/ModuleMocks.swift -# -# Generamba -Templates/ # Misc **/.DS_Store diff --git a/GenerambaTemplates/.gitignore b/GenerambaTemplates/.gitignore deleted file mode 100644 index 79b5594df7..0000000000 --- a/GenerambaTemplates/.gitignore +++ /dev/null @@ -1 +0,0 @@ -**/.DS_Store diff --git a/GenerambaTemplates/viper-code-layout/Code/assembly.swift.liquid b/Templates/viper-code-layout/Code/assembly.swift.liquid similarity index 100% rename from GenerambaTemplates/viper-code-layout/Code/assembly.swift.liquid rename to Templates/viper-code-layout/Code/assembly.swift.liquid diff --git a/GenerambaTemplates/viper-code-layout/Code/interactor.swift.liquid b/Templates/viper-code-layout/Code/interactor.swift.liquid similarity index 100% rename from GenerambaTemplates/viper-code-layout/Code/interactor.swift.liquid rename to Templates/viper-code-layout/Code/interactor.swift.liquid diff --git a/GenerambaTemplates/viper-code-layout/Code/presenter.swift.liquid b/Templates/viper-code-layout/Code/presenter.swift.liquid similarity index 100% rename from GenerambaTemplates/viper-code-layout/Code/presenter.swift.liquid rename to Templates/viper-code-layout/Code/presenter.swift.liquid diff --git a/GenerambaTemplates/viper-code-layout/Code/protocol.swift.liquid b/Templates/viper-code-layout/Code/protocol.swift.liquid similarity index 100% rename from GenerambaTemplates/viper-code-layout/Code/protocol.swift.liquid rename to Templates/viper-code-layout/Code/protocol.swift.liquid diff --git a/GenerambaTemplates/viper-code-layout/Code/router.swift.liquid b/Templates/viper-code-layout/Code/router.swift.liquid similarity index 100% rename from GenerambaTemplates/viper-code-layout/Code/router.swift.liquid rename to Templates/viper-code-layout/Code/router.swift.liquid diff --git a/GenerambaTemplates/viper-code-layout/Code/view.swift.liquid b/Templates/viper-code-layout/Code/view.swift.liquid similarity index 100% rename from GenerambaTemplates/viper-code-layout/Code/view.swift.liquid rename to Templates/viper-code-layout/Code/view.swift.liquid diff --git a/GenerambaTemplates/viper-code-layout/Code/viewlayout.swift.liquid b/Templates/viper-code-layout/Code/viewlayout.swift.liquid similarity index 100% rename from GenerambaTemplates/viper-code-layout/Code/viewlayout.swift.liquid rename to Templates/viper-code-layout/Code/viewlayout.swift.liquid diff --git a/GenerambaTemplates/viper-code-layout/Tests/tests.swift.liquid b/Templates/viper-code-layout/Tests/tests.swift.liquid similarity index 100% rename from GenerambaTemplates/viper-code-layout/Tests/tests.swift.liquid rename to Templates/viper-code-layout/Tests/tests.swift.liquid diff --git a/GenerambaTemplates/viper-code-layout/viper-code-layout.rambaspec b/Templates/viper-code-layout/viper-code-layout.rambaspec similarity index 100% rename from GenerambaTemplates/viper-code-layout/viper-code-layout.rambaspec rename to Templates/viper-code-layout/viper-code-layout.rambaspec From 6f9264fec0a6ebcfbb138d6259305f70c71c7a43 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Wed, 2 Oct 2024 13:18:41 +0500 Subject: [PATCH 042/156] Connected accounts screen has been added --- fearless.xcodeproj/project.pbxproj | 94 +++++++++- .../xcshareddata/swiftpm/Package.resolved | 2 +- .../ApplicationLayer/ServiceAssembly.swift | 1 + .../Onboarding/OnboardingService.swift | 15 +- .../BackupWallet/BackupWalletRouter.swift | 2 +- .../ConnectedAccountsAssembly.swift | 44 +++++ .../ConnectedAccountsInteractor.swift | 61 ++++++ .../ConnectedAccountsPresenter.swift | 137 ++++++++++++++ .../ConnectedAccountsProtocols.swift | 37 ++++ .../ConnectedAccountsRouter.swift | 109 +++++++++++ .../ConnectedAccountsTableCell.swift | 110 +++++++++++ .../ConnectedAccountsTableHeaderView.swift | 59 ++++++ .../ConnectedAccountsViewController.swift | 177 ++++++++++++++++++ .../ConnectedAccountsViewLayout.swift | 74 ++++++++ .../ConnectedAccountsViewModelFactory.swift | 176 +++++++++++++++++ .../View/DappBrowserSectionHeaderView.swift | 4 +- .../EcosystemOptionsAssembly.swift | 45 +++++ .../EcosystemOptionsInteractor.swift | 40 ++++ .../EcosystemOptionsPresenter.swift | 94 ++++++++++ .../EcosystemOptionsProtocols.swift | 17 ++ .../EcosystemOptionsRouter.swift | 4 + .../EcosystemOptionsViewController.swift | 62 ++++++ .../EcosystemOptionsViewLayout.swift | 107 +++++++++++ .../Modules/Profile/ProfileWireframe.swift | 6 +- .../Modules/Root/RootPresenterFactory.swift | 5 +- .../Transfer/TransferFlowUseCase.swift | 10 +- .../WalletDetailsPresenter.swift | 8 + .../WalletDetailsViewFactory.swift | 5 +- .../WalletOption/WalletOptionRouter.swift | 6 +- .../WalletsManagmentTableCell.swift | 4 + 30 files changed, 1481 insertions(+), 34 deletions(-) create mode 100644 fearless/Modules/ConnectedAccounts/ConnectedAccountsAssembly.swift create mode 100644 fearless/Modules/ConnectedAccounts/ConnectedAccountsInteractor.swift create mode 100644 fearless/Modules/ConnectedAccounts/ConnectedAccountsPresenter.swift create mode 100644 fearless/Modules/ConnectedAccounts/ConnectedAccountsProtocols.swift create mode 100644 fearless/Modules/ConnectedAccounts/ConnectedAccountsRouter.swift create mode 100644 fearless/Modules/ConnectedAccounts/ConnectedAccountsTableCell.swift create mode 100644 fearless/Modules/ConnectedAccounts/ConnectedAccountsTableHeaderView.swift create mode 100644 fearless/Modules/ConnectedAccounts/ConnectedAccountsViewController.swift create mode 100644 fearless/Modules/ConnectedAccounts/ConnectedAccountsViewLayout.swift create mode 100644 fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift create mode 100644 fearless/Modules/EcosystemOptions/EcosystemOptionsAssembly.swift create mode 100644 fearless/Modules/EcosystemOptions/EcosystemOptionsInteractor.swift create mode 100644 fearless/Modules/EcosystemOptions/EcosystemOptionsPresenter.swift create mode 100644 fearless/Modules/EcosystemOptions/EcosystemOptionsProtocols.swift create mode 100644 fearless/Modules/EcosystemOptions/EcosystemOptionsRouter.swift create mode 100644 fearless/Modules/EcosystemOptions/EcosystemOptionsViewController.swift create mode 100644 fearless/Modules/EcosystemOptions/EcosystemOptionsViewLayout.swift diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index 0dc603a49a..6670cc908b 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -232,6 +232,9 @@ 0726FFAD2AC4399C00336D76 /* WalletConnectPolkadotParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0726FFAB2AC4399C00336D76 /* WalletConnectPolkadotParser.swift */; }; 0726FFB02AC439DE00336D76 /* WalletConnectExtrinsic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0726FFAE2AC439DE00336D76 /* WalletConnectExtrinsic.swift */; }; 0726FFB12AC439DE00336D76 /* WalletConnectPolkadotSignature.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0726FFAF2AC439DE00336D76 /* WalletConnectPolkadotSignature.swift */; }; + 0728BD162C984DA0002369FD /* ConnectedAccountsTableHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0728BD152C984DA0002369FD /* ConnectedAccountsTableHeaderView.swift */; }; + 0728BD182C984E7A002369FD /* ConnectedAccountsTableCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0728BD172C984E7A002369FD /* ConnectedAccountsTableCell.swift */; }; + 0728BD1A2C99474B002369FD /* ConnectedAccountsViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0728BD192C99474B002369FD /* ConnectedAccountsViewModelFactory.swift */; }; 072EB84828E2A267007E70FF /* StakingPoolCreateConfirmViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 072EB84728E2A267007E70FF /* StakingPoolCreateConfirmViewModelFactory.swift */; }; 072EB84A28E2A2A1007E70FF /* StakingPoolCreateConfirmViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 072EB84928E2A2A1007E70FF /* StakingPoolCreateConfirmViewModel.swift */; }; 073417B2298BA28300104F41 /* EqOraclePricePoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 073417AF298BA28300104F41 /* EqOraclePricePoint.swift */; }; @@ -447,6 +450,7 @@ 1BFC90E1D8646F7429FFD5E6 /* ExportMnemonicProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF3AD755B2B3DCFB3D14DF91 /* ExportMnemonicProtocols.swift */; }; 1CBFE5F285223EA5D5300C49 /* WalletMainContainerProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8312AF0B70350EE27DB5B4A /* WalletMainContainerProtocols.swift */; }; 1DE31955634007BAC3B63158 /* ChainAccountTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AEA7ECB8434DF494D2B25B9 /* ChainAccountTests.swift */; }; + 1E4DCD7DF7A101622D4145A4 /* EcosystemOptionsProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51A2CC33FFE5CFA1CCCC64BB /* EcosystemOptionsProtocols.swift */; }; 1E59CE2953F8835954A4E5A7 /* LiquidityPoolsOverviewPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BA8DC8007FC0A322C6DF00E /* LiquidityPoolsOverviewPresenter.swift */; }; 1E766A1656C2117F3F64769A /* NetworkManagementTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FFEB823BE0057CFB78CC033 /* NetworkManagementTests.swift */; }; 1EF031DB5316E1D180089C7B /* PolkaswapAdjustmentInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F9F3C33EF043B3EA5FFBC45 /* PolkaswapAdjustmentInteractor.swift */; }; @@ -455,6 +459,7 @@ 1F88F3DBFA0BD6D0FDF558F3 /* SelectValidatorsConfirmViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 975DECE71DE70DFD866B8E23 /* SelectValidatorsConfirmViewFactory.swift */; }; 20B2942A4241F6713A1C70D9 /* StakingRewardDetailsViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2377F8FB07B47637346249F5 /* StakingRewardDetailsViewFactory.swift */; }; 20F28EF4AD17FC56A5A6697B /* NftSendPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C62522E202A1C5EE60D25122 /* NftSendPresenter.swift */; }; + 21F6235E4B4AB0DDA0849DF5 /* ConnectedAccountsViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9B71CD26CEE6C228B8AE392 /* ConnectedAccountsViewLayout.swift */; }; 225493AF467A54A56F74FFF5 /* LiquidityPoolsOverviewProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = A692D227372B24F922EFA058 /* LiquidityPoolsOverviewProtocols.swift */; }; 23398AEC756086FEEEE91E65 /* WalletsManagmentRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B55A4C7E8BD87A7C8634ADD /* WalletsManagmentRouter.swift */; }; 237AD34CD1C2778834D7B330 /* AnalyticsValidatorsViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6F8BBBA9EABA266B288333F /* AnalyticsValidatorsViewFactory.swift */; }; @@ -495,6 +500,7 @@ 2E57C70F27EA169000AF075A /* ProfileViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E57C70E27EA169000AF075A /* ProfileViewLayout.swift */; }; 2ED5B5FFD880BA1905051E89 /* StakingUnbondSetupFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD8B6213B00597B3F56F650D /* StakingUnbondSetupFlow.swift */; }; 2FCB062A2D873BD72B795DB3 /* AssetSelectionPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7A0A5EE9BE2862B085712A0 /* AssetSelectionPresenter.swift */; }; + 2FF5B2DEC92C9801F00B9485 /* ConnectedAccountsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D21069CCE65307334B89FD09 /* ConnectedAccountsPresenter.swift */; }; 306E249AD210DFAA8C03D435 /* AllDonePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A654294D46A966EE99764F /* AllDonePresenter.swift */; }; 30C7FD6C58F1ED50AFB456FD /* LiquidityPoolRemoveLiquidityAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = C61BE0DFC48282DFDBB820C9 /* LiquidityPoolRemoveLiquidityAssembly.swift */; }; 3133215566E418F40844A60E /* ExportMnemonicWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ACA4A5B186EE6D40BFE9D66 /* ExportMnemonicWireframe.swift */; }; @@ -504,10 +510,12 @@ 3245549CB47E65B28A2C01CD /* WalletOptionInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326260E461C031624CDB62BA /* WalletOptionInteractor.swift */; }; 3250F2C0E12ED42A355853BE /* SelectValidatorsStartProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = EED9939B17C4224C8E153F8A /* SelectValidatorsStartProtocols.swift */; }; 32BB821E16F9BF88523A6047 /* DappBrowserViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = F684B043895B80CAD70A59CF /* DappBrowserViewLayout.swift */; }; + 331DD15DB978230C3D22E865 /* EcosystemOptionsRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF89A85366996FE0E1053FC /* EcosystemOptionsRouter.swift */; }; 3336F04749ADC27C81BA9464 /* ContactsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82CBCBA8BF2D753248238555 /* ContactsViewController.swift */; }; 33D23A4A92AF90C385568462 /* ChainSelectionProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDDA0B079962E00FAFBE07AD /* ChainSelectionProtocols.swift */; }; 33D41E7EAA441A589449CD4E /* StakingUnbondConfirmTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C52E93D987DC64991F58508 /* StakingUnbondConfirmTests.swift */; }; 340AC2484415B10F247C135E /* AnalyticsValidatorsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7320E1CD9EA1A33EA29D0700 /* AnalyticsValidatorsPresenter.swift */; }; + 3495B757A7C05ECFE3842D2D /* EcosystemOptionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5744A4699B3930EB459972BD /* EcosystemOptionsViewController.swift */; }; 357946E87E1F8D0563286D0F /* PolkaswapTransaktionSettingsViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F7C84A88D3405B38B0E8134 /* PolkaswapTransaktionSettingsViewLayout.swift */; }; 36139329003D9269E8D5C11C /* StakingMainTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E11C7AF9A8DEC07246D5626 /* StakingMainTests.swift */; }; 36909529AF4B97AE71AD4C24 /* TonWebBridgePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BD26C200A700CCA34980B61 /* TonWebBridgePresenter.swift */; }; @@ -574,6 +582,7 @@ 51876200A6B1EDC54609DF46 /* LiquidityPoolRemoveLiquidityProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D49CA5CB156C1EA38BEBE00 /* LiquidityPoolRemoveLiquidityProtocols.swift */; }; 51FC48FA6FD4D2FB1781424D /* ReferralCrowdloanWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D51D60F19284936A6E9F47D /* ReferralCrowdloanWireframe.swift */; }; 525CCCA7CFD7BE570AD0FCCA /* WalletOptionProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73078ED3B2642FEAF348DB2A /* WalletOptionProtocols.swift */; }; + 528DD3FD73C2C6152E632A00 /* ConnectedAccountsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2445A50C4FDB87374486CDDA /* ConnectedAccountsInteractor.swift */; }; 52F16C3E24F3982384B1082E /* DappBrowserListRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF0C991DB1C7567632BB54A9 /* DappBrowserListRouter.swift */; }; 539340533D8383965751C6D8 /* NodeSelectionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B0CF2F98779D3C18D0C0A29 /* NodeSelectionTests.swift */; }; 53DA09F488806FFE86C841AA /* SelectMarketInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB837A15BAAED64BC32F3F44 /* SelectMarketInteractor.swift */; }; @@ -608,6 +617,7 @@ 64B7826F78B8AE649B1EF08F /* CrowdloanContributionSetupTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C01DCD4DA014E8FB50B9F11 /* CrowdloanContributionSetupTests.swift */; }; 65909D701527D99837B439D9 /* StakingRewardDetailsWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 638A65DAC86BAF9EB4D2F2F8 /* StakingRewardDetailsWireframe.swift */; }; 65E0BC7A96EDE5E52D32A11B /* AllDoneViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61A5A7C701EF966BF48D6B9E /* AllDoneViewController.swift */; }; + 6666BE6CC1E1A468385C4CCF /* EcosystemOptionsViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2DB48A2C904672E63D78D4D /* EcosystemOptionsViewLayout.swift */; }; 66AECEC6A6EB8184114B041E /* LiquidityPoolSupplyRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6503D178156C6407EC848D41 /* LiquidityPoolSupplyRouter.swift */; }; 69DE177B9D1745FEE848E870 /* WalletTransactionDetailsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B37BB3FF5CDF7EA9D7371B7 /* WalletTransactionDetailsInteractor.swift */; }; 69EF1DC4093AC9AF06D71CF4 /* AnalyticsRewardDetailsViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29100320799A2B46836A257B /* AnalyticsRewardDetailsViewFactory.swift */; }; @@ -652,6 +662,7 @@ 762BB1AC2F45142B6319B59F /* NftSendProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = F55184167D22A33EF7FF77AE /* NftSendProtocols.swift */; }; 76C5FD0685615E602696B23D /* SelectValidatorsConfirmTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28EF0F9F97C89137F642016E /* SelectValidatorsConfirmTests.swift */; }; 76F74188F16A370D79033A12 /* AnalyticsRewardDetailsWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB5E8FAB4C12D7BFEEF576AD /* AnalyticsRewardDetailsWireframe.swift */; }; + 773CBBDAE8BFB7764C20A675 /* ConnectedAccountsProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6ED240B5595B623CE5E0941C /* ConnectedAccountsProtocols.swift */; }; 775C4C720600DAE242C67192 /* WalletSendConfirmViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A4416B96A9DD5FB5EEA086E /* WalletSendConfirmViewLayout.swift */; }; 78314B269F1CF1A499DE5CCB /* StakingBondMoreFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 784D20E16EEE55C2CF7B319B /* StakingBondMoreFlow.swift */; }; 78627BC990DE9C037CE69BB0 /* CreateContactAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84D73E43CA6C635583970107 /* CreateContactAssembly.swift */; }; @@ -1427,6 +1438,7 @@ 84F5105B263AB9F2005D15AE /* NetworkFeeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F5105A263AB9F2005D15AE /* NetworkFeeView.swift */; }; 84F51060263AE530005D15AE /* TitleValueView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F5105F263AE530005D15AE /* TitleValueView.swift */; }; 84F5107C263C0C11005D15AE /* AnyProviderCleaning.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F5107B263C0C11005D15AE /* AnyProviderCleaning.swift */; }; + 84F543329636D42A3BE5C574 /* ConnectedAccountsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C3011E6F226BFC9BE9C5475 /* ConnectedAccountsViewController.swift */; }; 84F6B6482619A87C0038F10D /* ExtrinsicIndexWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F6B6472619A87C0038F10D /* ExtrinsicIndexWrapper.swift */; }; 84F6B6502619E1ED0038F10D /* Int+Operations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F6B64F2619E1ED0038F10D /* Int+Operations.swift */; }; 84F77AAA265EE86B00F54885 /* CrowdloanErrorPresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F77AA9265EE86B00F54885 /* CrowdloanErrorPresentable.swift */; }; @@ -1493,6 +1505,7 @@ 9436FE913C0FBDAF8CE232C5 /* ClaimCrowdloanRewardsRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC1236F31289F7F25A25E69C /* ClaimCrowdloanRewardsRouter.swift */; }; 94B0F0C84AF74B3CD7223C3A /* AccountConfirmPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7306D50F278F6CC90DC88F27 /* AccountConfirmPresenter.swift */; }; 94EB0971EDA635A626CA8B72 /* StakingPoolCreateInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8D9DD27C76FE239728ED5F8 /* StakingPoolCreateInteractor.swift */; }; + 950694F134BAD1AB2B4775E3 /* ConnectedAccountsAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = A40B8FB36589FB4D3DB1A5B6 /* ConnectedAccountsAssembly.swift */; }; 9565BEB636E6D386B0C0FBE5 /* StakingPayoutConfirmationViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BE0492B98AB9C1540846B39 /* StakingPayoutConfirmationViewFactory.swift */; }; 9659B32D4622C8D9679298DF /* ChainSelectionViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = F15D1C78B2844216802DA000 /* ChainSelectionViewFactory.swift */; }; 96EBE5F57C97C7A7A525E864 /* SwapTransactionDetailProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC265B5F209B038633AE0E3F /* SwapTransactionDetailProtocols.swift */; }; @@ -1505,6 +1518,7 @@ 99DCBCC3298620721B213012 /* ClaimCrowdloanRewardsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B152D1AC1CD34A4530CB6D0 /* ClaimCrowdloanRewardsTests.swift */; }; 9A6A55297F41DAE45071BF57 /* ExportSeedInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A865455F8FC60413A6CB8A44 /* ExportSeedInteractor.swift */; }; 9A940CBA3F309D438945A90C /* ControllerAccountConfirmationProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBA49A762B2FBB66FD6A55FC /* ControllerAccountConfirmationProtocols.swift */; }; + 9ACC689D2FE77C2122103E81 /* EcosystemOptionsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EB7489DB0FFE77F7B7AABE8 /* EcosystemOptionsPresenter.swift */; }; 9B4F0484B81BBF8DFA618599 /* AccountCreateViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9636093217ABE05A7FAC9B9 /* AccountCreateViewFactory.swift */; }; 9C8AAE31F22421A975A17DF4 /* AddCustomNodeWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0968457BE5556B46D789C30 /* AddCustomNodeWireframe.swift */; }; 9D5F6A48E7A9166B9341F417 /* NetworkInfoViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5934BA68F375F5F8237967D /* NetworkInfoViewController.xib */; }; @@ -1678,6 +1692,7 @@ BC2DF589C6623601C39EF8F4 /* LiquidityPoolSupplyPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31F848482B2AD7D6831B0CCE /* LiquidityPoolSupplyPresenter.swift */; }; BCB9B3DF3D8104BC8456811B /* TonWebBridgeProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AA1493E216DF3B3616A9EE6 /* TonWebBridgeProtocols.swift */; }; BD571417BD18C711B76E1D62 /* ExportSeedWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B4C1B5D56DB69BA0AECF731 /* ExportSeedWireframe.swift */; }; + BD7E3B9E0E9744C3281274A5 /* ConnectedAccountsRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 153C062150631BF45B59CB3F /* ConnectedAccountsRouter.swift */; }; BE3F6213B26F35EB6324DBD8 /* ControllerAccountWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDB9EDB05686DF11958145E1 /* ControllerAccountWireframe.swift */; }; BE98780A37B6F68759D770EB /* WalletTransactionHistoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F8DF39247202A30B63F05DA /* WalletTransactionHistoryTests.swift */; }; BEA539EE97A287868FD8BE46 /* AssetSelectionViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9622C6C3102EF12BEE78D63D /* AssetSelectionViewFactory.swift */; }; @@ -1867,8 +1882,10 @@ E5F3DF66415E54AE04D0C9A9 /* StakingMainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A05EB4FAF2FDE7DECEA93E4 /* StakingMainViewController.swift */; }; E667BD4B6BA45B9B3464AD85 /* LiquidityPoolRemoveLiquidityConfirmAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECE2059F621D024F85EFBFD0 /* LiquidityPoolRemoveLiquidityConfirmAssembly.swift */; }; E6981A506AC931D30E85169E /* WalletOptionPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFD95EE4822A564C0D4D1CFE /* WalletOptionPresenter.swift */; }; + E6EC748865580AB3FA6756BE /* EcosystemOptionsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A751AAC4AA1E6401E4F43142 /* EcosystemOptionsInteractor.swift */; }; E7CAD629FF0D4E97594F7A05 /* YourValidatorListInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B60728FCFBC8A9BE4C7B50B /* YourValidatorListInteractor.swift */; }; E8B8D3D290DC7057144559CE /* WalletChainAccountDashboardPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E83833EB33E51A12F96F83B /* WalletChainAccountDashboardPresenter.swift */; }; + E94EAFC25B7E5BAA04CB6085 /* EcosystemOptionsAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E06ADA1BE2C3A9277A30E1B /* EcosystemOptionsAssembly.swift */; }; E9EE315D66D4E664BC250529 /* FeatureToggleListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAA8A8A8C3822633813C71F2 /* FeatureToggleListPresenter.swift */; }; EA8ECCD37FE5D6478018D3FC /* RecommendedValidatorListViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C0FA282377DCAB7C59ACFB6 /* RecommendedValidatorListViewController.xib */; }; EB544E8D26ABEE4ADE2F939F /* AnalyticsRewardDetailsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC0C84704B8876688E59FA58 /* AnalyticsRewardDetailsInteractor.swift */; }; @@ -3414,6 +3431,9 @@ 0726FFAB2AC4399C00336D76 /* WalletConnectPolkadotParser.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletConnectPolkadotParser.swift; sourceTree = ""; }; 0726FFAE2AC439DE00336D76 /* WalletConnectExtrinsic.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletConnectExtrinsic.swift; sourceTree = ""; }; 0726FFAF2AC439DE00336D76 /* WalletConnectPolkadotSignature.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletConnectPolkadotSignature.swift; sourceTree = ""; }; + 0728BD152C984DA0002369FD /* ConnectedAccountsTableHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsTableHeaderView.swift; sourceTree = ""; }; + 0728BD172C984E7A002369FD /* ConnectedAccountsTableCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsTableCell.swift; sourceTree = ""; }; + 0728BD192C99474B002369FD /* ConnectedAccountsViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsViewModelFactory.swift; sourceTree = ""; }; 072EB84728E2A267007E70FF /* StakingPoolCreateConfirmViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateConfirmViewModelFactory.swift; sourceTree = ""; }; 072EB84928E2A2A1007E70FF /* StakingPoolCreateConfirmViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateConfirmViewModel.swift; sourceTree = ""; }; 073417AF298BA28300104F41 /* EqOraclePricePoint.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EqOraclePricePoint.swift; sourceTree = ""; }; @@ -3607,6 +3627,7 @@ 1366336078BCA34EFB4C6FF9 /* CrowdloanContributionConfirmInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionConfirmInteractor.swift; sourceTree = ""; }; 14611E105279789A149B3755 /* AssetNetworksProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetNetworksProtocols.swift; sourceTree = ""; }; 14E3337CDD7C831AEAA4582F /* CustomValidatorListPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CustomValidatorListPresenter.swift; sourceTree = ""; }; + 153C062150631BF45B59CB3F /* ConnectedAccountsRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsRouter.swift; sourceTree = ""; }; 15E7F3E6BBE50797A9EB9145 /* WalletTransactionHistoryViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionHistoryViewController.swift; sourceTree = ""; }; 169ADB0FB6C83C9CEED2F780 /* NetworkIssuesNotificationViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkIssuesNotificationViewLayout.swift; sourceTree = ""; }; 172B3E9BE51A339D7A09BDA3 /* UsernameSetupPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UsernameSetupPresenter.swift; sourceTree = ""; }; @@ -3643,6 +3664,7 @@ 23A74BDB54D503FA2BFBEF35 /* StakingUnbondSetupProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondSetupProtocols.swift; sourceTree = ""; }; 23BC71941B91D3E372CDB11C /* CrowdloanContributionSetupViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionSetupViewLayout.swift; sourceTree = ""; }; 23CF7E56EC624BDB60290387 /* CreateContactPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreateContactPresenter.swift; sourceTree = ""; }; + 2445A50C4FDB87374486CDDA /* ConnectedAccountsInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsInteractor.swift; sourceTree = ""; }; 25B80FDDB5C3032A0BBBD826 /* NftCollectionPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftCollectionPresenter.swift; sourceTree = ""; }; 25D9454047EBBD8D8A0174A4 /* LiquidityPoolRemoveLiquidityRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityRouter.swift; sourceTree = ""; }; 25FF82C2FD912021A1F20876 /* PolkaswapAdjustmentViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapAdjustmentViewLayout.swift; sourceTree = ""; }; @@ -3751,6 +3773,7 @@ 4C0FA282377DCAB7C59ACFB6 /* RecommendedValidatorListViewController.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; path = RecommendedValidatorListViewController.xib; sourceTree = ""; }; 4C5EF68BE0E29D2305CB7337 /* UsernameSetupTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UsernameSetupTests.swift; sourceTree = ""; }; 4C71DEF78B69F017DF460AB7 /* CrowdloanContributionSetupViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionSetupViewController.swift; sourceTree = ""; }; + 4CF89A85366996FE0E1053FC /* EcosystemOptionsRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EcosystemOptionsRouter.swift; sourceTree = ""; }; 4D4690DFD868E50CA9FAFBC6 /* ClaimCrowdloanRewardsViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ClaimCrowdloanRewardsViewLayout.swift; sourceTree = ""; }; 4F651991A2F781300002F2E3 /* MainNftContainerPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MainNftContainerPresenter.swift; sourceTree = ""; }; 4F7C84A88D3405B38B0E8134 /* PolkaswapTransaktionSettingsViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapTransaktionSettingsViewLayout.swift; sourceTree = ""; }; @@ -3759,6 +3782,7 @@ 5002B8FA2695F470587677D2 /* AccountConfirmProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountConfirmProtocols.swift; sourceTree = ""; }; 502D42F4A480889BA226CAD3 /* StakingMainPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingMainPresenter.swift; sourceTree = ""; }; 5126D2E4032D179A7D210552 /* WalletsManagmentProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletsManagmentProtocols.swift; sourceTree = ""; }; + 51A2CC33FFE5CFA1CCCC64BB /* EcosystemOptionsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EcosystemOptionsProtocols.swift; sourceTree = ""; }; 523339F3ED67EDEB8C5D2110 /* ClaimCrowdloanRewardsPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ClaimCrowdloanRewardsPresenter.swift; sourceTree = ""; }; 527CD27768E9A75E6CA87FE4 /* AccountConfirmTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountConfirmTests.swift; sourceTree = ""; }; 52A64FCFC95E3841032F910B /* ChainSelectionTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChainSelectionTests.swift; sourceTree = ""; }; @@ -3775,6 +3799,7 @@ 5663C645EB394E16BFC848AB /* NftCollectionTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftCollectionTests.swift; sourceTree = ""; }; 5674162035C7D9F226FA9964 /* StakingUnbondConfirmViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondConfirmViewController.swift; sourceTree = ""; }; 56FF8DBE5C32EE4C68ECD623 /* PurchasePresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PurchasePresenter.swift; sourceTree = ""; }; + 5744A4699B3930EB459972BD /* EcosystemOptionsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EcosystemOptionsViewController.swift; sourceTree = ""; }; 57C624E71FCE0FFF8EAD5BA9 /* RecommendedValidatorListWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecommendedValidatorListWireframe.swift; sourceTree = ""; }; 58CD8A37F219A0BCC0C6063E /* AddCustomNodeViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AddCustomNodeViewController.swift; sourceTree = ""; }; 594BC61689EC942ED0A64A4A /* ReferralCrowdloanViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ReferralCrowdloanViewLayout.swift; sourceTree = ""; }; @@ -3833,11 +3858,13 @@ 6B37BB3FF5CDF7EA9D7371B7 /* WalletTransactionDetailsInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionDetailsInteractor.swift; sourceTree = ""; }; 6B60728FCFBC8A9BE4C7B50B /* YourValidatorListInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = YourValidatorListInteractor.swift; sourceTree = ""; wrapsLines = 1; }; 6B896BA49EE0D4C77401D097 /* AnalyticsValidatorsWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsValidatorsWireframe.swift; sourceTree = ""; }; + 6C3011E6F226BFC9BE9C5475 /* ConnectedAccountsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsViewController.swift; sourceTree = ""; }; 6C52E93D987DC64991F58508 /* StakingUnbondConfirmTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondConfirmTests.swift; sourceTree = ""; }; 6C7AAA265DB437D2CDDC165E /* NftCollectionInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftCollectionInteractor.swift; sourceTree = ""; }; 6C90AA5852CFA841CED20631 /* AllDoneProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AllDoneProtocols.swift; sourceTree = ""; }; 6D3BFF5C921FEB356E2C39A4 /* StakingRewardDetailsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRewardDetailsTests.swift; sourceTree = ""; }; 6DE4840EBB9892A5E35FB443 /* AccountExportPasswordViewController.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; path = AccountExportPasswordViewController.xib; sourceTree = ""; }; + 6ED240B5595B623CE5E0941C /* ConnectedAccountsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsProtocols.swift; sourceTree = ""; }; 6EDB8BAE1FAE3C7502E9245E /* NftDetailsViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftDetailsViewLayout.swift; sourceTree = ""; }; 6FA0310E7E7EA9A985602CCA /* ChainAccountListTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChainAccountListTests.swift; sourceTree = ""; }; 71285CF636B32ACD8EB5519E /* ReferralCrowdloanViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ReferralCrowdloanViewFactory.swift; sourceTree = ""; }; @@ -3869,6 +3896,7 @@ 7E62CD2831DCF0A2D5DBB08F /* SelectValidatorsStartViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartViewController.swift; sourceTree = ""; }; 7E8E30C194FD07DC9ECCBE74 /* TransferViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TransferViewController.swift; sourceTree = ""; }; 7EADA37D0D22D4CC99A7911A /* StakingPoolInfoViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolInfoViewController.swift; sourceTree = ""; }; + 7EB7489DB0FFE77F7B7AABE8 /* EcosystemOptionsPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EcosystemOptionsPresenter.swift; sourceTree = ""; }; 7ED5BEE4CC908012820FE89F /* NetworkInfoProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkInfoProtocols.swift; sourceTree = ""; }; 803E71983CD61FFBFE98DA7A /* NftSendConfirmRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendConfirmRouter.swift; sourceTree = ""; }; 80809FE46E7B8EBDE3680706 /* NodeSelectionWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NodeSelectionWireframe.swift; sourceTree = ""; }; @@ -4765,6 +4793,7 @@ 9BD8F497D1380B608E046658 /* ConfirmTransferAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConfirmTransferAssembly.swift; sourceTree = ""; }; 9C01DCD4DA014E8FB50B9F11 /* CrowdloanContributionSetupTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionSetupTests.swift; sourceTree = ""; }; 9C05A688EA7379572BBCE545 /* SelectMarketRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectMarketRouter.swift; sourceTree = ""; }; + 9E06ADA1BE2C3A9277A30E1B /* EcosystemOptionsAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EcosystemOptionsAssembly.swift; sourceTree = ""; }; 9E29D11C365629B959F44DFA /* ConfirmTransferTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConfirmTransferTests.swift; sourceTree = ""; }; 9E51A659E2865BD98B6DEF16 /* TonWebBridgeViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TonWebBridgeViewController.swift; sourceTree = ""; }; 9FBC05405B64AD114FB89FFE /* DappBrowserRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserRouter.swift; sourceTree = ""; }; @@ -4773,11 +4802,13 @@ A3104ABC4BECF08B0BA836AA /* AccountConfirmViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountConfirmViewController.swift; sourceTree = ""; }; A31780E84948D7FE632ECB02 /* YourValidatorListProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = YourValidatorListProtocols.swift; sourceTree = ""; }; A3BACB7E24BC87F9218DBBC4 /* StakingPayoutConfirmationViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPayoutConfirmationViewController.swift; sourceTree = ""; }; + A40B8FB36589FB4D3DB1A5B6 /* ConnectedAccountsAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsAssembly.swift; sourceTree = ""; }; A427660DDA1D882327F8FF5C /* AssetNetworksTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetNetworksTests.swift; sourceTree = ""; }; A4900562AFFD45F29F4C5DEF /* LiquidityPoolDetailsViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsViewLayout.swift; sourceTree = ""; }; A6543901A1EE819323DCD95D /* WalletChainAccountDashboardInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletChainAccountDashboardInteractor.swift; sourceTree = ""; }; A692D227372B24F922EFA058 /* LiquidityPoolsOverviewProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewProtocols.swift; sourceTree = ""; }; A7219B81CEA13CD60BD8FAFE /* ClaimCrowdloanRewardsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ClaimCrowdloanRewardsProtocols.swift; sourceTree = ""; }; + A751AAC4AA1E6401E4F43142 /* EcosystemOptionsInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EcosystemOptionsInteractor.swift; sourceTree = ""; }; A7AD1285797131E836CD994B /* AssetSelectionWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetSelectionWireframe.swift; sourceTree = ""; }; A82E373FFFBF708D7CF0973E /* StakingUnbondSetupViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondSetupViewFactory.swift; sourceTree = ""; }; A84638893DC99974E098719E /* StakingUnbondConfirmWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondConfirmWireframe.swift; sourceTree = ""; }; @@ -5002,7 +5033,6 @@ C63468E528F37912005CB1F1 /* CDContact + CoreDataCodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CDContact + CoreDataCodable.swift"; sourceTree = ""; }; C6398F35287FD230008EF3BE /* StakingBondMoreConfirmParachainViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingBondMoreConfirmParachainViewModelFactory.swift; sourceTree = ""; }; C6398F37287FE988008EF3BE /* StakingBondMoreViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingBondMoreViewModelFactory.swift; sourceTree = ""; }; - C63C82FC2769ECCC002EA6A8 /* ChainAssetModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainAssetModel.swift; sourceTree = ""; }; C63CB31D284F790F0071AF26 /* DelegationInfoCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DelegationInfoCell.swift; sourceTree = ""; }; C63CB321285077640071AF26 /* DelegationInfoCellModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DelegationInfoCellModel.swift; sourceTree = ""; }; C63CB3242851C5C90071AF26 /* StakingMainFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingMainFlow.swift; sourceTree = ""; }; @@ -5092,6 +5122,7 @@ CF891BE39D442C2D06DDF3BB /* StakingRewardDetailsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRewardDetailsProtocols.swift; sourceTree = ""; }; D06A0B252CCD6CAE8C5EDC16 /* AddCustomNodeProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AddCustomNodeProtocols.swift; sourceTree = ""; }; D101339CC1292531CC4DB0AC /* StakingUnbondSetupInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondSetupInteractor.swift; sourceTree = ""; }; + D21069CCE65307334B89FD09 /* ConnectedAccountsPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsPresenter.swift; sourceTree = ""; }; D39D54DC9992CF9CB6699AA3 /* StakingAmountViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingAmountViewFactory.swift; sourceTree = ""; }; D430E8B808864B281A62AB43 /* LiquidityPoolSupplyConfirmViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmViewController.swift; sourceTree = ""; }; D45B7031E0809CED062C83F8 /* StakingUnbondConfirmPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondConfirmPresenter.swift; sourceTree = ""; }; @@ -5136,6 +5167,7 @@ E70C8A9C6BF8AE46CAE1CB61 /* CrowdloanListViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanListViewFactory.swift; sourceTree = ""; }; E8AAC6AAD532FC7E63765D85 /* PolkaswapAdjustmentViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapAdjustmentViewController.swift; sourceTree = ""; }; E9636093217ABE05A7FAC9B9 /* AccountCreateViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountCreateViewFactory.swift; sourceTree = ""; }; + E9B71CD26CEE6C228B8AE392 /* ConnectedAccountsViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsViewLayout.swift; sourceTree = ""; }; E9DE46BBDFD90D42835CA6B9 /* AssetNetworksViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetNetworksViewController.swift; sourceTree = ""; }; EB8605FD90D8C3553A9897B4 /* AccountImportPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountImportPresenter.swift; sourceTree = ""; }; EC012CF1C792B34BD5FF45A2 /* NftDetailsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftDetailsProtocols.swift; sourceTree = ""; }; @@ -5159,6 +5191,7 @@ F1E3F963A56923FD036280BD /* WalletOptionAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletOptionAssembly.swift; sourceTree = ""; }; F23E38DCBC74C528D7839B76 /* CrowdloanContributionSetupInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionSetupInteractor.swift; sourceTree = ""; }; F28EDDF9277242505FDDECA1 /* CustomValidatorListProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CustomValidatorListProtocols.swift; sourceTree = ""; }; + F2DB48A2C904672E63D78D4D /* EcosystemOptionsViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EcosystemOptionsViewLayout.swift; sourceTree = ""; }; F312CA3A7087424A540614DD /* StakingPoolCreateAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateAssembly.swift; sourceTree = ""; }; F329740EC1B8CC94D02A8ABD /* SwapTransactionDetailRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SwapTransactionDetailRouter.swift; sourceTree = ""; }; F3EB4CF4E3E4B486D16BDE5C /* SwapTransactionDetailInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SwapTransactionDetailInteractor.swift; sourceTree = ""; }; @@ -7209,6 +7242,15 @@ name = Sign; sourceTree = ""; }; + 0728BD142C984D86002369FD /* View */ = { + isa = PBXGroup; + children = ( + 0728BD152C984DA0002369FD /* ConnectedAccountsTableHeaderView.swift */, + 0728BD172C984E7A002369FD /* ConnectedAccountsTableCell.swift */, + ); + name = View; + sourceTree = ""; + }; 072EB84628E2A258007E70FF /* ViewModel */ = { isa = PBXGroup; children = ( @@ -10028,6 +10070,8 @@ AD55C5CD2FE0946A08730F0A /* DappBrowser */, 289549035B3DBF4E3B283D2E /* DappBrowserList */, AE187612EF3DE462ED577B3E /* FeatureToggleList */, + EA050F0D10984D982C31B98F /* ConnectedAccounts */, + 8ABF976F131CB662FADD2B1B /* EcosystemOptions */, ); path = Modules; sourceTree = ""; @@ -11136,7 +11180,6 @@ 84D1111226B932C40016D962 /* ChainNodeModel.swift */, 845B821C26EF80DB00D25C72 /* ChainAccountModel.swift */, 845B821E26EF8E8900D25C72 /* ManagedMetaAccountModel.swift */, - C63C82FC2769ECCC002EA6A8 /* ChainAssetModel.swift */, ); path = ChainRegistry; sourceTree = ""; @@ -11601,6 +11644,20 @@ path = CreateContact; sourceTree = ""; }; + 8ABF976F131CB662FADD2B1B /* EcosystemOptions */ = { + isa = PBXGroup; + children = ( + 51A2CC33FFE5CFA1CCCC64BB /* EcosystemOptionsProtocols.swift */, + 4CF89A85366996FE0E1053FC /* EcosystemOptionsRouter.swift */, + 7EB7489DB0FFE77F7B7AABE8 /* EcosystemOptionsPresenter.swift */, + A751AAC4AA1E6401E4F43142 /* EcosystemOptionsInteractor.swift */, + 5744A4699B3930EB459972BD /* EcosystemOptionsViewController.swift */, + F2DB48A2C904672E63D78D4D /* EcosystemOptionsViewLayout.swift */, + 9E06ADA1BE2C3A9277A30E1B /* EcosystemOptionsAssembly.swift */, + ); + path = EcosystemOptions; + sourceTree = ""; + }; 8D1ECC1A61E3F7E33FC44649 /* NetworkManagement */ = { isa = PBXGroup; children = ( @@ -12792,6 +12849,22 @@ path = WalletsManagment; sourceTree = ""; }; + EA050F0D10984D982C31B98F /* ConnectedAccounts */ = { + isa = PBXGroup; + children = ( + 0728BD142C984D86002369FD /* View */, + 6ED240B5595B623CE5E0941C /* ConnectedAccountsProtocols.swift */, + 153C062150631BF45B59CB3F /* ConnectedAccountsRouter.swift */, + D21069CCE65307334B89FD09 /* ConnectedAccountsPresenter.swift */, + 0728BD192C99474B002369FD /* ConnectedAccountsViewModelFactory.swift */, + 2445A50C4FDB87374486CDDA /* ConnectedAccountsInteractor.swift */, + 6C3011E6F226BFC9BE9C5475 /* ConnectedAccountsViewController.swift */, + E9B71CD26CEE6C228B8AE392 /* ConnectedAccountsViewLayout.swift */, + A40B8FB36589FB4D3DB1A5B6 /* ConnectedAccountsAssembly.swift */, + ); + path = ConnectedAccounts; + sourceTree = ""; + }; EE3CBEFADE55F44DE05DCEF2 /* LiquidityPoolSupply */ = { isa = PBXGroup; children = ( @@ -17227,6 +17300,7 @@ 8430AAE126022CA1005B1066 /* BaseStakingState.swift in Sources */, FA7337092A1339890096A291 /* AssetTransactionData+AlchemyHistory.swift in Sources */, 0701B9AB2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmPresenter.swift in Sources */, + 0728BD182C984E7A002369FD /* ConnectedAccountsTableCell.swift in Sources */, FA256998274CE65100875A53 /* HTTPHeadersBuilderProtocol.swift in Sources */, FA6C175529935DAE00A55254 /* AssetTransactionData+SubsquidHistory.swift in Sources */, C67E781527B31FCB0053346B /* CheckPincodePresenter.swift in Sources */, @@ -17863,6 +17937,7 @@ FA93A3012834C8240021330F /* ValidatorInfoRelaychainStrategy.swift in Sources */, 84378775264D2C6600E6AFD2 /* UsernameSetupModel.swift in Sources */, FAD4290F2A86567F001D6A16 /* BannerCollectionViewCell.swift in Sources */, + 0728BD1A2C99474B002369FD /* ConnectedAccountsViewModelFactory.swift in Sources */, 84DB4E2325E945E000A6DF41 /* SlashingSpans.swift in Sources */, FA93A2E42833B0520021330F /* RecommendedValidatorListFlow.swift in Sources */, 849014DB24AA8F60008F705E /* MainTabBarProtocol.swift in Sources */, @@ -18172,6 +18247,7 @@ C6267B8F28BDF6A5001E31BF /* ChainAssetListViewModel.swift in Sources */, 0701B8E92C78F71800DCD395 /* TonConnectError.swift in Sources */, 84DF21A5253473B0005454AE /* ModalInfoFactory.swift in Sources */, + 0728BD162C984DA0002369FD /* ConnectedAccountsTableHeaderView.swift in Sources */, FA6262692AC2E35A005D3D95 /* WalletConnectProposalExpandableTableCell.swift in Sources */, 847C9620255340F2002D288F /* ExportGenericViewController.swift in Sources */, FA86442C27674A8600956D8E /* WalletTransactionHistoryViewState.swift in Sources */, @@ -19800,6 +19876,20 @@ EDE467D5D4E6EC2A69FAD84A /* FeatureToggleListViewController.swift in Sources */, CCA06979DC3F21E5CCA505F0 /* FeatureToggleListViewLayout.swift in Sources */, BB11D0C16D51423BFB0C45F2 /* FeatureToggleListAssembly.swift in Sources */, + 773CBBDAE8BFB7764C20A675 /* ConnectedAccountsProtocols.swift in Sources */, + BD7E3B9E0E9744C3281274A5 /* ConnectedAccountsRouter.swift in Sources */, + 2FF5B2DEC92C9801F00B9485 /* ConnectedAccountsPresenter.swift in Sources */, + 528DD3FD73C2C6152E632A00 /* ConnectedAccountsInteractor.swift in Sources */, + 84F543329636D42A3BE5C574 /* ConnectedAccountsViewController.swift in Sources */, + 21F6235E4B4AB0DDA0849DF5 /* ConnectedAccountsViewLayout.swift in Sources */, + 950694F134BAD1AB2B4775E3 /* ConnectedAccountsAssembly.swift in Sources */, + 1E4DCD7DF7A101622D4145A4 /* EcosystemOptionsProtocols.swift in Sources */, + 331DD15DB978230C3D22E865 /* EcosystemOptionsRouter.swift in Sources */, + 9ACC689D2FE77C2122103E81 /* EcosystemOptionsPresenter.swift in Sources */, + E6EC748865580AB3FA6756BE /* EcosystemOptionsInteractor.swift in Sources */, + 3495B757A7C05ECFE3842D2D /* EcosystemOptionsViewController.swift in Sources */, + 6666BE6CC1E1A468385C4CCF /* EcosystemOptionsViewLayout.swift in Sources */, + E94EAFC25B7E5BAA04CB6085 /* EcosystemOptionsAssembly.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 05151a6d8e..0afa5b7de6 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -142,7 +142,7 @@ "location" : "https://github.com/soramitsu/shared-features-spm.git", "state" : { "branch" : "FW-new-ecosystem", - "revision" : "d9c8adf9ba06fb22af9a0b2017fd2e35d080a03a" + "revision" : "bfd8294ccba6f2b79556a9b57d8892c9e5b54966" } }, { diff --git a/fearless/ApplicationLayer/ServiceAssembly.swift b/fearless/ApplicationLayer/ServiceAssembly.swift index d0f22c37fd..52466b2417 100644 --- a/fearless/ApplicationLayer/ServiceAssembly.swift +++ b/fearless/ApplicationLayer/ServiceAssembly.swift @@ -20,6 +20,7 @@ final class ServiceAssembly { lazy var eventCenter = EventCenter.shared lazy var userDefaults = SettingsManager.shared lazy var localToggle = LocalToggleService.shared + lazy var walletBalanceSubscriptionAdapter = WalletBalanceSubscriptionAdapter.shared private var _accountInfoRemoteServiceDefault: AccountInfoRemoteService? func accountInfoRemoteServiceDefault() -> AccountInfoRemoteService { diff --git a/fearless/ApplicationLayer/Services/Onboarding/OnboardingService.swift b/fearless/ApplicationLayer/Services/Onboarding/OnboardingService.swift index 8349bfa525..010f3954fa 100644 --- a/fearless/ApplicationLayer/Services/Onboarding/OnboardingService.swift +++ b/fearless/ApplicationLayer/Services/Onboarding/OnboardingService.swift @@ -11,20 +11,7 @@ protocol OnboardingServiceProtocol { func fetchConfigs() async throws -> OnboardingConfigPlatform } -actor OnboardingService { - private let networkOperationFactory: NetworkOperationFactoryProtocol - private let operationQueue: OperationQueue - - init( - networkOperationFactory: NetworkOperationFactoryProtocol, - operationQueue: OperationQueue - ) { - self.networkOperationFactory = networkOperationFactory - self.operationQueue = operationQueue - } -} - -extension OnboardingService: OnboardingServiceProtocol { +actor OnboardingService: OnboardingServiceProtocol { func fetchConfigs() async throws -> OnboardingConfigPlatform { guard let onboardingConfigUrl = ApplicationConfig.shared.onboardingConfig else { throw OnboardingServiceError.urlBroken diff --git a/fearless/Modules/BackupWallet/BackupWalletRouter.swift b/fearless/Modules/BackupWallet/BackupWalletRouter.swift index c00357da1e..a59c179daa 100644 --- a/fearless/Modules/BackupWallet/BackupWalletRouter.swift +++ b/fearless/Modules/BackupWallet/BackupWalletRouter.swift @@ -97,7 +97,7 @@ final class BackupWalletRouter: BackupWalletRouterInput { from view: ControllerBackedProtocol? ) { let module = WalletDetailsViewFactory - .createView(flow: .normal(wallet: wallet)) + .createView(flow: .normal(wallet: wallet), chains: nil) view?.controller.navigationController?.pushViewController(module.controller, animated: true) } } diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsAssembly.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsAssembly.swift new file mode 100644 index 0000000000..2910386fe5 --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsAssembly.swift @@ -0,0 +1,44 @@ +import UIKit +import SoraFoundation +import SSFNetwork +import SoraKeystore + +final class ConnectedAccountsAssembly { + static func configureModule() -> ConnectedAccountsModuleCreationResult? { + guard let wallet = SelectedWalletSettings.shared.value else { + return nil + } + let localizationManager = LocalizationManager.shared + + let interactor = ConnectedAccountsInteractor( + wallet: wallet, + chainRepository: ServiceAssembly.shared.asyncChainModelRepository(), + walletBalanceSubscriptionAdapter: ServiceAssembly.shared.walletBalanceSubscriptionAdapter + ) + let router = ConnectedAccountsRouter() + + let accountScoreFetcher = NomisAccountStatisticsFetcher( + networkWorker: NetworkWorkerImpl(), + signer: NomisRequestSigner() + ) + let viewModelFactory = ConnectedAccountsViewModelFactoryImpl( + accountScoreFetcher: accountScoreFetcher, + settings: SettingsManager.shared + ) + + let presenter = ConnectedAccountsPresenter( + wallet: wallet, + viewModelFactory: viewModelFactory, + interactor: interactor, + router: router, + localizationManager: localizationManager + ) + + let view = ConnectedAccountsViewController( + output: presenter, + localizationManager: localizationManager + ) + + return (view, presenter) + } +} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsInteractor.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsInteractor.swift new file mode 100644 index 0000000000..150bc27c32 --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsInteractor.swift @@ -0,0 +1,61 @@ +import UIKit +import SSFModels +import RobinHood + +protocol ConnectedAccountsInteractorOutput: AnyObject { + func didReceiveWalletBalances(_ balances: Result<[MetaAccountId: WalletBalanceInfo], Error>) +} + +final class ConnectedAccountsInteractor { + // MARK: - Private properties + private weak var output: ConnectedAccountsInteractorOutput? + + private let wallet: MetaAccountModel + private let walletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterProtocol + private let chainRepository: AsyncAnyRepository + + init( + wallet: MetaAccountModel, + chainRepository: AsyncAnyRepository, + walletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterProtocol + ) { + self.wallet = wallet + self.chainRepository = chainRepository + self.walletBalanceSubscriptionAdapter = walletBalanceSubscriptionAdapter + } + + // MARK: - Private methods + + private func fetchBalances() { + walletBalanceSubscriptionAdapter.subscribeWalletBalance( + wallet: wallet, + listener: self + ) + } +} + +// MARK: - ConnectedAccountsInteractorInput +extension ConnectedAccountsInteractor: ConnectedAccountsInteractorInput { + var chains: [ChainModel] { + get async throws { + try await chainRepository.fetchAll() + } + } + + func setup(with output: ConnectedAccountsInteractorOutput) { + self.output = output + fetchBalances() + } +} + +// MARK: - WalletBalanceSubscriptionListener + +extension ConnectedAccountsInteractor: WalletBalanceSubscriptionListener { + var type: WalletBalanceListenerType { + .wallet(wallet: wallet) + } + + func handle(result: WalletBalancesResult) { + output?.didReceiveWalletBalances(result) + } +} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsPresenter.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsPresenter.swift new file mode 100644 index 0000000000..81cff809e2 --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsPresenter.swift @@ -0,0 +1,137 @@ +import Foundation +import SSFModels +import SoraFoundation + +@MainActor +protocol ConnectedAccountsViewInput: ControllerBackedProtocol { + func didReceive(viewModels: [ConnectedAccountsViewModel]) +} + +protocol ConnectedAccountsInteractorInput: AnyObject { + func setup(with output: ConnectedAccountsInteractorOutput) + var chains: [ChainModel] { get async throws } +} + +final class ConnectedAccountsPresenter { + // MARK: Private properties + private weak var view: ConnectedAccountsViewInput? + private let router: ConnectedAccountsRouterInput + private let interactor: ConnectedAccountsInteractorInput + private let viewModelFactory: ConnectedAccountsViewModelFactory + private let wallet: MetaAccountModel + private lazy var logger: LoggerProtocol = Logger.shared + + private var balance: WalletBalanceInfo? + + // MARK: - Constructors + init( + wallet: MetaAccountModel, + viewModelFactory: ConnectedAccountsViewModelFactory, + interactor: ConnectedAccountsInteractorInput, + router: ConnectedAccountsRouterInput, + localizationManager: LocalizationManagerProtocol + ) { + self.wallet = wallet + self.viewModelFactory = viewModelFactory + self.interactor = interactor + self.router = router + self.localizationManager = localizationManager + } + + // MARK: - Private methods + + private func provideViewModel() { + Task { + let viewModel = viewModelFactory.buildViewModel( + wallet: wallet, + balance: balance, + chains: try await interactor.chains, + locale: selectedLocale + ) + await view?.didReceive(viewModels: viewModel) + } + } +} + +// MARK: - ConnectedAccountsViewOutput +extension ConnectedAccountsPresenter: ConnectedAccountsViewOutput { + func didSelect(viewModel: ConnectedAccountsViewModel.Accounts) { + guard viewModel.count != nil else { + // TODO: - Show Add account flow + return + } + router.showOptions( + from: view, + ecosystem: viewModel.ecosystem, + wallet: wallet, + chains: viewModel.chains, + moduleOutput: self + ) + } + + func dismiss() { + router.dismiss(view: view) + } + + func pop() { + router.dismiss(view: view) + } + + func didLoad(view: ConnectedAccountsViewInput) { + self.view = view + interactor.setup(with: self) + provideViewModel() + } +} + +// MARK: - ConnectedAccountsInteractorOutput +extension ConnectedAccountsPresenter: ConnectedAccountsInteractorOutput { + func didReceiveWalletBalances(_ balances: Result<[MetaAccountId: WalletBalanceInfo], any Error>) { + switch balances { + case let .success(balances): + balance = balances[wallet.metaId] + provideViewModel() + case let .failure(error): + logger.error("WalletsManagmentPresenter error: \(error.localizedDescription)") + } + } +} + +// MARK: - Localizable +extension ConnectedAccountsPresenter: Localizable { + func applyLocalization() {} +} + +extension ConnectedAccountsPresenter: ConnectedAccountsModuleInput {} + +// MARK: - EcosystemOptionsModuleOutput +extension ConnectedAccountsPresenter: EcosystemOptionsModuleOutput { + func showMnemonicExport(flow: ExportFlow) { + router.showMnemonicExport( + flow: flow, + from: view + ) + } + + func showKeystoreExport(flow: ExportFlow) { + router.showKeystoreExport( + flow: flow, + from: view + ) + } + + func showSeedExport(flow: ExportFlow) { + router.showSeedExport( + flow: flow, + from: view + ) + } + + func showWalletDetails(chains: [ChainModel]?) { + router.showWalletDetails( + view: view, + wallet: wallet, + chains: chains + ) + } +} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsProtocols.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsProtocols.swift new file mode 100644 index 0000000000..7b14b4da30 --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsProtocols.swift @@ -0,0 +1,37 @@ +import SSFModels + +typealias ConnectedAccountsModuleCreationResult = ( + view: ConnectedAccountsViewInput, + input: ConnectedAccountsModuleInput +) + +protocol ConnectedAccountsRouterInput: AnyDismissable, AuthorizationPresentable { + func showOptions( + from view: ControllerBackedProtocol?, + ecosystem: Ecosystem, + wallet: MetaAccountModel, + chains: [ChainModel], + moduleOutput: EcosystemOptionsModuleOutput? + ) + func showWalletDetails( + view: ControllerBackedProtocol?, + wallet: MetaAccountModel, + chains: [ChainModel]? + ) + func showMnemonicExport( + flow: ExportFlow, + from view: ControllerBackedProtocol? + ) + func showKeystoreExport( + flow: ExportFlow, + from view: ControllerBackedProtocol? + ) + func showSeedExport( + flow: ExportFlow, + from view: ControllerBackedProtocol? + ) +} + +protocol ConnectedAccountsModuleInput: AnyObject {} + +protocol ConnectedAccountsModuleOutput: AnyObject {} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsRouter.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsRouter.swift new file mode 100644 index 0000000000..f62959c3cc --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsRouter.swift @@ -0,0 +1,109 @@ +import Foundation +import SSFModels + +final class ConnectedAccountsRouter: ConnectedAccountsRouterInput { + func showOptions( + from view: ControllerBackedProtocol?, + ecosystem: Ecosystem, + wallet: MetaAccountModel, + chains: [ChainModel], + moduleOutput: EcosystemOptionsModuleOutput? + ) { + guard let module = EcosystemOptionsAssembly.configureModule( + ecosystem: ecosystem, + wallet: wallet, + chains: chains, + moduleOutput: moduleOutput + ) else { + return + } + + view?.controller.present(module.view.controller, animated: true) + } + + func showWalletDetails( + view: ControllerBackedProtocol?, + wallet: MetaAccountModel, + chains: [ChainModel]? + ) { + let module = WalletDetailsViewFactory.createView(flow: .normal(wallet: wallet), chains: chains) + let navigationController = FearlessNavigationController( + rootViewController: module.controller + ) + + view?.controller.navigationController?.pushViewController(module.controller, animated: true) + } + + func showMnemonicExport( + flow: ExportFlow, + from view: ControllerBackedProtocol? + ) { + authorize( + animated: true, + cancellable: true, + from: view + ) { isAuthorized in + guard + isAuthorized, + let mnemonicView = ExportMnemonicViewFactory.createViewForAddress( + flow: flow + ) else { + return + } + + let navigationController = FearlessNavigationController( + rootViewController: mnemonicView.controller + ) + + view?.controller.navigationController?.pushViewController(mnemonicView.controller, animated: true) + } + } + + func showKeystoreExport( + flow: ExportFlow, + from view: ControllerBackedProtocol? + ) { + authorize( + animated: true, + cancellable: true, + from: view + ) { isAuthorized in + guard + isAuthorized, + let passwordView = AccountExportPasswordViewFactory.createView( + flow: flow + ) else { + return + } + + let navigationController = FearlessNavigationController( + rootViewController: passwordView.controller + ) + + view?.controller.navigationController?.pushViewController(passwordView.controller, animated: true) + } + } + + func showSeedExport( + flow: ExportFlow, + from view: ControllerBackedProtocol? + ) { + authorize( + animated: true, + cancellable: true, + from: view + ) { isAuthorized in + guard + isAuthorized, + let seedView = ExportSeedViewFactory.createViewForAddress(flow: flow) else { + return + } + + let navigationController = FearlessNavigationController( + rootViewController: seedView.controller + ) + + view?.controller.navigationController?.pushViewController(seedView.controller, animated: true) + } + } +} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsTableCell.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsTableCell.swift new file mode 100644 index 0000000000..92582f4474 --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsTableCell.swift @@ -0,0 +1,110 @@ +import UIKit +import SoraUI + +final class ConnectedAccountsTableCell: UITableViewCell { + enum Position { + case top + case middle + case bottom + case list + } + + let containerView: TriangularedView = { + let containerView = TriangularedView() + containerView.fillColor = R.color.colorWhite4()! + containerView.highlightedFillColor = R.color.colorWhite4()! + containerView.shadowOpacity = 0 + return containerView + }() + + let titleLabel: UILabel = { + let label = UILabel() + label.font = .p1Paragraph + return label + }() + + let countLabel: UILabel = { + let label = UILabel() + label.font = .p2Paragraph + label.textColor = R.color.colorWhite50() + label.numberOfLines = 2 + return label + }() + + private let optionsButton: UIButton = { + let button = UIButton() + button.clipsToBounds = true + return button + }() + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + setup() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func configure( + model: ConnectedAccountsViewModel.Accounts, + position: Position + ) { + titleLabel.text = model.title + if let count = model.count { + countLabel.text = "\(count)" + optionsButton.setImage(R.image.iconHorMore(), for: .normal) + } else { + countLabel.text = nil + optionsButton.setImage(R.image.iconWarning(), for: .normal) + } + + switch position { + case .top, .middle: + containerView.cornerCut = .none + containerView.cornersRaduis = .none + case .bottom: + containerView.cornerCut = .bottomRight + containerView.cornersRaduis = .bottomLeft + case .list: + containerView.cornerCut = .none + containerView.cornersRaduis = .none + containerView.fillColor = R.color.colorBlack19()! + containerView.fillColor = R.color.colorBlack19()! + containerView.snp.remakeConstraints { make in + make.top.bottom.equalToSuperview() + make.leading.trailing.equalToSuperview().inset(4) + } + } + } + + func setup() { + selectionStyle = .none + backgroundColor = .clear + contentView.backgroundColor = .clear + contentView.addSubview(containerView) + + let hStackView = UIFactory.default.createHorizontalStackView() + containerView.addSubview(hStackView) + hStackView.addArrangedSubview(titleLabel) + hStackView.addArrangedSubview(countLabel) + hStackView.addArrangedSubview(optionsButton) + + containerView.snp.makeConstraints { make in + make.top.bottom.equalToSuperview() + make.leading.trailing.equalToSuperview().inset(16) + } + hStackView.snp.makeConstraints { make in + make.top.bottom.greaterThanOrEqualToSuperview().priority(.low) + make.leading.equalToSuperview().inset(12) + make.trailing.equalToSuperview() + make.centerY.equalToSuperview() + } + optionsButton.snp.makeConstraints { make in + make.size.equalTo(44) + } + titleLabel.setContentHuggingPriority(.defaultLow, for: .horizontal) + countLabel.setContentHuggingPriority(.defaultHigh, for: .horizontal) + } +} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsTableHeaderView.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsTableHeaderView.swift new file mode 100644 index 0000000000..3abcff4fb5 --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsTableHeaderView.swift @@ -0,0 +1,59 @@ +import UIKit +import SoraUI + +final class ConnectedAccountsTableHeaderView: UITableViewHeaderFooterView { + + let containerView: TriangularedView = { + let containerView = TriangularedView() + containerView.fillColor = R.color.colorWhite4()! + containerView.highlightedFillColor = R.color.colorWhite4()! + containerView.shadowOpacity = 0 + containerView.cornerCut = .topLeft + containerView.cornersRaduis = .topRight + return containerView + }() + + let titleLabel: UILabel = { + let label = UILabel() + label.font = .h5Title + label.textColor = .white + return label + }() + + override init(reuseIdentifier: String?) { + super.init(reuseIdentifier: reuseIdentifier) + setup() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override var intrinsicContentSize: CGSize { + CGSize(width: UIView.noIntrinsicMetric, height: 44) + } + + // MARK: - Private methods + + private func setup() { + let separator = UIFactory.default.createSeparatorView() + contentView.addSubview(containerView) + containerView.addSubview(titleLabel) + containerView.addSubview(separator) + + containerView.snp.makeConstraints { make in + make.top.bottom.equalToSuperview() + make.leading.trailing.equalToSuperview().inset(16) + } + titleLabel.snp.makeConstraints { make in + make.centerY.equalToSuperview() + make.leading.trailing.equalToSuperview().inset(12) + } + separator.snp.makeConstraints { make in + make.top.equalTo(titleLabel.snp.bottom).offset(8) + make.leading.trailing.equalToSuperview().inset(12) + make.height.equalTo(1.0 / UIScreen.main.scale) + } + } +} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewController.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewController.swift new file mode 100644 index 0000000000..bbf3f8775b --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewController.swift @@ -0,0 +1,177 @@ +import UIKit +import SSFModels +import SoraFoundation + +protocol ConnectedAccountsViewOutput: AnyObject { + func didLoad(view: ConnectedAccountsViewInput) + func didSelect(viewModel: ConnectedAccountsViewModel.Accounts) + func dismiss() + func pop() +} + +enum ConnectedAccountsViewModel { + case wallet(WalletsManagmentCellViewModel) + case accounts([Accounts]) + + struct Accounts { + let title: String + let count: Int? + let ecosystem: Ecosystem + let chains: [ChainModel] + } +} + +final class ConnectedAccountsViewController: UIViewController, ViewHolder, HiddableBarWhenPushed { + typealias RootViewType = ConnectedAccountsViewLayout + + // MARK: Private properties + private let output: ConnectedAccountsViewOutput + + private var viewModels: [ConnectedAccountsViewModel] = [] + + // MARK: - Constructor + init( + output: ConnectedAccountsViewOutput, + localizationManager: LocalizationManagerProtocol? + ) { + self.output = output + super.init(nibName: nil, bundle: nil) + self.localizationManager = localizationManager + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Life cycle + override func loadView() { + view = ConnectedAccountsViewLayout() + } + + override func viewDidLoad() { + super.viewDidLoad() + output.didLoad(view: self) + setupTableView() + bindActions() + } + + // MARK: - Private methods + + private func setupTableView() { + rootView.tableView.delegate = self + rootView.tableView.dataSource = self + rootView.tableView.registerClassForCell(WalletsManagmentTableCell.self) + rootView.tableView.registerClassForCell(ConnectedAccountsTableCell.self) + rootView.tableView.separatorStyle = .none + } + + private func bindActions() { + rootView.closeButton.addAction { [weak self] in + self?.output.dismiss() + } + rootView.navigationBar.backButton.addAction { [weak self] in + self?.output.pop() + } + } +} + +// MARK: - ConnectedAccountsViewInput +extension ConnectedAccountsViewController: ConnectedAccountsViewInput { + func didReceive(viewModels: [ConnectedAccountsViewModel]) { + self.viewModels = viewModels + rootView.tableView.reloadData() + } +} + +// MARK: - Localizable +extension ConnectedAccountsViewController: Localizable { + func applyLocalization() { + rootView.locale = selectedLocale + } +} + +// MARK: - UITableViewDataSource + +extension ConnectedAccountsViewController: UITableViewDataSource { + func numberOfSections(in _: UITableView) -> Int { + viewModels.count + } + + func tableView(_: UITableView, numberOfRowsInSection section: Int) -> Int { + switch viewModels[section] { + case .wallet: + return 1 + case let .accounts(accounts): + return accounts.count + } + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + switch viewModels[indexPath.section] { + case let .wallet(viewModel): + guard let cell = tableView.dequeueReusableCellWithType(WalletsManagmentTableCell.self) else { + return UITableViewCell() + } + cell.bind(to: viewModel) + cell.hideScore() + return cell + case let .accounts(viewModels): + let cell = tableView.dequeueReusableCellWithType(ConnectedAccountsTableCell.self, forIndexPath: indexPath) + + var position: ConnectedAccountsTableCell.Position = .middle + if indexPath.row == 0, tableView.numberOfRows(inSection: indexPath.section) > 1 { + position = .top + } else if indexPath.row == tableView.numberOfRows(inSection: indexPath.section) - 1 { + position = .bottom + } + let viewModel = viewModels[indexPath.row] + cell.configure(model: viewModel, position: position) + return cell + } + } +} + +// MARK: - UITableViewDelegate + +extension ConnectedAccountsViewController: UITableViewDelegate { + func tableView(_: UITableView, viewForHeaderInSection section: Int) -> UIView? { + switch viewModels[section] { + case .wallet: + return nil + case .accounts: + let view = ConnectedAccountsTableHeaderView() + view.titleLabel.text = "Connected Accounts" + return view + } + } + + func tableView(_: UITableView, heightForHeaderInSection section: Int) -> CGFloat { + switch viewModels[section] { + case .wallet: + return 0 + case .accounts: + return 44 + } + } + + func tableView(_: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + switch viewModels[indexPath.section] { + case .wallet: + return 86 + case .accounts: + return 48 + } + } + + func tableView(_: UITableView, didSelectRowAt indexPath: IndexPath) { + guard + let section = viewModels[safe: indexPath.section], + case let .accounts(accountsModel) = section, + let viewModel = accountsModel[safe: indexPath.row] + else { + return + } + output.didSelect(viewModel: viewModel) + } +} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewLayout.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewLayout.swift new file mode 100644 index 0000000000..1d4fbeeec1 --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewLayout.swift @@ -0,0 +1,74 @@ +import UIKit + +final class ConnectedAccountsViewLayout: UIView { + + var locale: Locale = .current { + didSet { + applyLocalization() + } + } + + let navigationBar: BaseNavigationBar = { + let bar = BaseNavigationBar() + bar.set(.push) + bar.backButton.backgroundColor = R.color.colorWhite8() + bar.backgroundColor = R.color.colorBlack19() + return bar + }() + + let closeButton: UIButton = { + let button = UIButton() + button.setImage(R.image.iconClose(), for: .normal) + button.layer.masksToBounds = true + button.backgroundColor = R.color.colorWhite8() + return button + }() + + let tableView: UITableView = { + let view = UITableView(frame: .zero, style: .grouped) + view.separatorStyle = .none + view.contentInset = .zero + view.backgroundColor = R.color.colorBlack19() + return view + }() + + override init(frame: CGRect) { + super.init(frame: frame) + setupLayout() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func layoutSubviews() { + super.layoutSubviews() + navigationBar.backButton.rounded() + closeButton.rounded() + } + + // MARK: - Private methods + + private func setupLayout() { + backgroundColor = R.color.colorBlack19() + navigationBar.setRightViews([closeButton]) + closeButton.snp.makeConstraints { make in + make.size.equalTo(32) + } + + addSubview(navigationBar) + navigationBar.snp.makeConstraints { make in + make.top.leading.trailing.equalToSuperview() + } + + addSubview(tableView) + tableView.snp.makeConstraints { make in + make.top.equalTo(navigationBar.snp.bottom) + make.leading.trailing.equalToSuperview() + make.bottom.equalTo(safeAreaLayoutGuide) + } + } + + private func applyLocalization() {} +} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift new file mode 100644 index 0000000000..37aad634e4 --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift @@ -0,0 +1,176 @@ +import Foundation +import SoraFoundation +import SSFModels +import SoraKeystore + +protocol ConnectedAccountsViewModelFactory { + func buildViewModel( + wallet: MetaAccountModel, + balance: WalletBalanceInfo?, + chains: [ChainModel], + locale: Locale + ) -> [ConnectedAccountsViewModel] +} + +final class ConnectedAccountsViewModelFactoryImpl: ConnectedAccountsViewModelFactory { + + private lazy var assetBalanceFormatterFactory = AssetBalanceFormatterFactory() + private let accountScoreFetcher: AccountStatisticsFetching + private let settings: SettingsManagerProtocol + + init( + accountScoreFetcher: AccountStatisticsFetching, + settings: SettingsManagerProtocol + ) { + self.accountScoreFetcher = accountScoreFetcher + self.settings = settings + } + + func buildViewModel( + wallet: MetaAccountModel, + balance: WalletBalanceInfo?, + chains: [ChainModel], + locale: Locale + ) -> [ConnectedAccountsViewModel] { + let walletViewModel = createUserViewModel( + from: wallet, + balance: balance, + locale: locale + ) + + let accountsViewModel = createAccountsViewModel( + chains: chains, + wallet: wallet + ) + + let viewModel: [ConnectedAccountsViewModel] = [ + .wallet(walletViewModel), + .accounts(accountsViewModel) + ] + return viewModel + } + + // MARK: - Private methods + + private func createUserViewModel( + from wallet: MetaAccountModel, + balance: WalletBalanceInfo?, + locale: Locale + ) -> WalletsManagmentCellViewModel { + var fiatBalance: String = "" + var dayChange: NSAttributedString? + if let balance = balance { + let formatter = tokenFormatter(for: balance.currency, locale: locale) + fiatBalance = formatter.stringFromDecimal(balance.totalFiatValue) ?? "" + dayChange = getDayChangeAttributedString( + currency: balance.currency, + dayChange: balance.dayChangePercent, + dayChangeValue: balance.dayChangeValue, + locale: locale + ) + } + + return WalletsManagmentCellViewModel( + isSelected: false, + walletName: wallet.name, + fiatBalance: fiatBalance, + dayChange: dayChange, + accountScoreViewModel: nil + ) + } + + private func createAccountsViewModel( + chains: [ChainModel], + wallet: MetaAccountModel + ) -> [ConnectedAccountsViewModel.Accounts] { + var accountsViewModel: [ConnectedAccountsViewModel.Accounts] = [] + + let mapped = chains.reduce([Ecosystem: [ChainModel]]()) { partialResult, chain in + var part = partialResult + switch chain.ecosystem { + case .substrate, .ethereum, .ton: + var possibleValues = partialResult[chain.ecosystem] ?? [] + possibleValues.append(chain) + part[chain.ecosystem] = possibleValues + case .ethereumBased: + var possibleValues = partialResult[.ethereum] ?? [] + possibleValues.append(chain) + part[.ethereum] = possibleValues + } + return part + } + + mapped.forEach { ecosystem, chains in + let title: String + var count: Int? + switch ecosystem { + case .substrate: + title = "Substrate chain accounts" + count = chains.map { wallet.fetch(for: $0.accountRequest())?.accountId }.filter { $0 != nil }.count + case .ethereum, .ethereumBased: + title = "EVM chain accounts" + count = chains.map { wallet.fetch(for: $0.accountRequest())?.accountId }.filter { $0 != nil }.count + case .ton: + title = "TON chain accounts" + count = chains.map { wallet.fetch(for: $0.accountRequest())?.accountId }.filter { $0 != nil }.count + } + if count == 0 { + count = nil + } + let accounts = ConnectedAccountsViewModel.Accounts( + title: title, + count: count, + ecosystem: ecosystem, + chains: chains + ) + accountsViewModel.append(accounts) + } + + return accountsViewModel.sorted(by: { $0.count.or(.zero) > $1.count.or(.zero) }) + } + + private func tokenFormatter(for currency: Currency, locale: Locale) -> TokenFormatter { + let balanceDisplayInfo = AssetBalanceDisplayInfo.forCurrency(currency) + let balanceTokenFormatter = assetBalanceFormatterFactory.createTokenFormatter(for: balanceDisplayInfo, usageCase: .detailsCrypto) + let balanceTokenFormatterValue = balanceTokenFormatter.value(for: locale) + return balanceTokenFormatterValue + } + + private func getDayChangeAttributedString( + currency: Currency, + dayChange: Decimal, + dayChangeValue: Decimal, + locale: Locale + ) -> NSAttributedString? { + let balanceTokenFormatterValue = tokenFormatter(for: currency, locale: locale) + let dayChangePercent = dayChange.percentString(locale: locale) ?? "" + + var dayChangeValue: String = balanceTokenFormatterValue.stringFromDecimal(abs(dayChangeValue)) ?? "" + dayChangeValue = "(\(dayChangeValue))" + let priceWithChangeString = [dayChangePercent, dayChangeValue].joined(separator: " ") + let priceWithChangeAttributed = NSMutableAttributedString(string: priceWithChangeString) + + let color = dayChange > 0 + ? R.color.colorGreen() + : R.color.colorRed() + + if let color = color, let colorLightGray = R.color.colorStrokeGray() { + priceWithChangeAttributed.addAttributes( + [NSAttributedString.Key.foregroundColor: color], + range: NSRange( + location: 0, + length: dayChangePercent.count + ) + ) + priceWithChangeAttributed.addAttributes( + [NSAttributedString.Key.foregroundColor: colorLightGray], + range: NSRange( + location: dayChangePercent.count + 1, + length: dayChangeValue.count + ) + ) + } + + return priceWithChangeAttributed + } +} diff --git a/fearless/Modules/DappBrowser/View/DappBrowserSectionHeaderView.swift b/fearless/Modules/DappBrowser/View/DappBrowserSectionHeaderView.swift index 237f8df74d..e5b6962c87 100644 --- a/fearless/Modules/DappBrowser/View/DappBrowserSectionHeaderView.swift +++ b/fearless/Modules/DappBrowser/View/DappBrowserSectionHeaderView.swift @@ -18,6 +18,8 @@ final class DappBrowserSectionHeaderView: UITableViewHeaderFooterView { containerView.fillColor = R.color.colorWhite4()! containerView.highlightedFillColor = R.color.colorWhite4()! containerView.shadowOpacity = 0 + containerView.cornerCut = .topLeft + containerView.cornersRaduis = .topRight return containerView }() @@ -62,8 +64,6 @@ final class DappBrowserSectionHeaderView: UITableViewHeaderFooterView { func configure(model: DappBrowserSectionHeaderViewViewModel) { titleLabel.text = model.title moreButton.isHidden = model.isAllHidden - containerView.cornerCut = .topLeft - containerView.cornersRaduis = .topRight } // MARK: - Private methods diff --git a/fearless/Modules/EcosystemOptions/EcosystemOptionsAssembly.swift b/fearless/Modules/EcosystemOptions/EcosystemOptionsAssembly.swift new file mode 100644 index 0000000000..353510c7e2 --- /dev/null +++ b/fearless/Modules/EcosystemOptions/EcosystemOptionsAssembly.swift @@ -0,0 +1,45 @@ +import UIKit +import SoraUI +import SSFModels +import SoraFoundation + +final class EcosystemOptionsAssembly { + static func configureModule( + ecosystem: Ecosystem, + wallet: MetaAccountModel, + chains: [ChainModel], + moduleOutput: EcosystemOptionsModuleOutput? + ) -> EcosystemOptionsModuleCreationResult? { + let localizationManager = LocalizationManager.shared + + let interactor = EcosystemOptionsInteractor( + wallet: wallet, + keystore: ServiceAssembly.shared.keystore, + availableExportOptionsProvider: AvailableExportOptionsProvider() + ) + let router = EcosystemOptionsRouter() + + let presenter = EcosystemOptionsPresenter( + ecosystem: ecosystem, + wallet: wallet, + chains: chains, + moduleOutput: moduleOutput, + interactor: interactor, + router: router, + localizationManager: localizationManager + ) + + let view = EcosystemOptionsViewController( + output: presenter, + localizationManager: localizationManager + ) + view.modalPresentationStyle = .custom + + let factory = ModalSheetBlurPresentationFactory( + configuration: ModalSheetPresentationConfiguration.fearlessBlur + ) + view.modalTransitioningFactory = factory + + return (view, presenter) + } +} diff --git a/fearless/Modules/EcosystemOptions/EcosystemOptionsInteractor.swift b/fearless/Modules/EcosystemOptions/EcosystemOptionsInteractor.swift new file mode 100644 index 0000000000..5972f90f77 --- /dev/null +++ b/fearless/Modules/EcosystemOptions/EcosystemOptionsInteractor.swift @@ -0,0 +1,40 @@ +import UIKit +import SoraKeystore +import SSFModels + +protocol EcosystemOptionsInteractorOutput: AnyObject {} + +final class EcosystemOptionsInteractor { + // MARK: - Private properties + private weak var output: EcosystemOptionsInteractorOutput? + + private let wallet: MetaAccountModel + private let keystore: KeystoreProtocol + private let availableExportOptionsProvider: AvailableExportOptionsProviderProtocol + + init( + wallet: MetaAccountModel, + keystore: KeystoreProtocol, + availableExportOptionsProvider: AvailableExportOptionsProviderProtocol + ) { + self.wallet = wallet + self.keystore = keystore + self.availableExportOptionsProvider = availableExportOptionsProvider + } +} + +// MARK: - EcosystemOptionsInteractorInput +extension EcosystemOptionsInteractor: EcosystemOptionsInteractorInput { + func setup(with output: EcosystemOptionsInteractorOutput) { + self.output = output + } + + func getAvailableExportOptions(for ecosystem: Ecosystem) -> [ExportOption] { + let options = availableExportOptionsProvider.getAvailableExportOptions( + for: wallet, + accountId: nil, + ecosystem: ecosystem + ) + return options + } +} diff --git a/fearless/Modules/EcosystemOptions/EcosystemOptionsPresenter.swift b/fearless/Modules/EcosystemOptions/EcosystemOptionsPresenter.swift new file mode 100644 index 0000000000..7af5a158bd --- /dev/null +++ b/fearless/Modules/EcosystemOptions/EcosystemOptionsPresenter.swift @@ -0,0 +1,94 @@ +import Foundation +import SSFModels +import SoraFoundation + +protocol EcosystemOptionsViewInput: ControllerBackedProtocol {} + +protocol EcosystemOptionsInteractorInput: AnyObject { + func setup(with output: EcosystemOptionsInteractorOutput) + func getAvailableExportOptions(for ecosystem: Ecosystem) -> [ExportOption] +} + +final class EcosystemOptionsPresenter { + // MARK: Private properties + private weak var moduleOutput: EcosystemOptionsModuleOutput? + private weak var view: EcosystemOptionsViewInput? + private let router: EcosystemOptionsRouterInput + private let interactor: EcosystemOptionsInteractorInput + + private let wallet: MetaAccountModel + private let chains: [ChainModel] + private let ecosystem: Ecosystem + + // MARK: - Constructors + init( + ecosystem: Ecosystem, + wallet: MetaAccountModel, + chains: [ChainModel], + moduleOutput: EcosystemOptionsModuleOutput?, + interactor: EcosystemOptionsInteractorInput, + router: EcosystemOptionsRouterInput, + localizationManager: LocalizationManagerProtocol + ) { + self.ecosystem = ecosystem + self.wallet = wallet + self.chains = chains + self.moduleOutput = moduleOutput + self.interactor = interactor + self.router = router + self.localizationManager = localizationManager + } + + // MARK: - Private methods + + private func prepareChainAccountInfos() -> [ChainAccountInfo] { + let chainAccountsInfo = chains.compactMap { chain -> ChainAccountInfo? in + guard let accountResponse = wallet.fetch(for: chain.accountRequest()), !accountResponse.isChainAccount else { + return nil + } + return ChainAccountInfo( + chain: chain, + account: accountResponse + ) + }.compactMap { $0 } + return chainAccountsInfo + } +} + +// MARK: - EcosystemOptionsViewOutput +extension EcosystemOptionsPresenter: EcosystemOptionsViewOutput { + func didTapOnBackup() { + let options = interactor.getAvailableExportOptions(for: ecosystem) + let accounts = prepareChainAccountInfos() + let flow: ExportFlow = .multiple(wallet: wallet, accounts: accounts) + + router.dismiss(view: view) + if options.contains(.mnemonic) { + moduleOutput?.showMnemonicExport(flow: flow) + } else if options.contains(.seed) { + moduleOutput?.showSeedExport(flow: flow) + } else { + moduleOutput?.showKeystoreExport(flow: flow) + } + } + + func didTapOnAccounts() { + router.dismiss(view: view) + moduleOutput?.showWalletDetails(chains: chains) + } + + func didLoad(view: EcosystemOptionsViewInput) { + self.view = view + interactor.setup(with: self) + } +} + +// MARK: - EcosystemOptionsInteractorOutput +extension EcosystemOptionsPresenter: EcosystemOptionsInteractorOutput {} + +// MARK: - Localizable +extension EcosystemOptionsPresenter: Localizable { + func applyLocalization() {} +} + +extension EcosystemOptionsPresenter: EcosystemOptionsModuleInput {} diff --git a/fearless/Modules/EcosystemOptions/EcosystemOptionsProtocols.swift b/fearless/Modules/EcosystemOptions/EcosystemOptionsProtocols.swift new file mode 100644 index 0000000000..0fbedbf4eb --- /dev/null +++ b/fearless/Modules/EcosystemOptions/EcosystemOptionsProtocols.swift @@ -0,0 +1,17 @@ +import SSFModels + +typealias EcosystemOptionsModuleCreationResult = ( + view: EcosystemOptionsViewInput, + input: EcosystemOptionsModuleInput +) + +protocol EcosystemOptionsRouterInput: AnyDismissable {} + +protocol EcosystemOptionsModuleInput: AnyObject {} + +protocol EcosystemOptionsModuleOutput: AnyObject { + func showMnemonicExport(flow: ExportFlow) + func showKeystoreExport(flow: ExportFlow) + func showSeedExport(flow: ExportFlow) + func showWalletDetails(chains: [ChainModel]?) +} diff --git a/fearless/Modules/EcosystemOptions/EcosystemOptionsRouter.swift b/fearless/Modules/EcosystemOptions/EcosystemOptionsRouter.swift new file mode 100644 index 0000000000..5f68e2b456 --- /dev/null +++ b/fearless/Modules/EcosystemOptions/EcosystemOptionsRouter.swift @@ -0,0 +1,4 @@ +import Foundation +import SSFModels + +final class EcosystemOptionsRouter: EcosystemOptionsRouterInput {} diff --git a/fearless/Modules/EcosystemOptions/EcosystemOptionsViewController.swift b/fearless/Modules/EcosystemOptions/EcosystemOptionsViewController.swift new file mode 100644 index 0000000000..dd4403cdf2 --- /dev/null +++ b/fearless/Modules/EcosystemOptions/EcosystemOptionsViewController.swift @@ -0,0 +1,62 @@ +import UIKit +import SoraFoundation + +protocol EcosystemOptionsViewOutput: AnyObject { + func didLoad(view: EcosystemOptionsViewInput) + func didTapOnBackup() + func didTapOnAccounts() +} + +final class EcosystemOptionsViewController: UIViewController, ViewHolder { + typealias RootViewType = EcosystemOptionsViewLayout + + // MARK: Private properties + private let output: EcosystemOptionsViewOutput + + // MARK: - Constructor + init( + output: EcosystemOptionsViewOutput, + localizationManager: LocalizationManagerProtocol? + ) { + self.output = output + super.init(nibName: nil, bundle: nil) + self.localizationManager = localizationManager + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Life cycle + override func loadView() { + view = EcosystemOptionsViewLayout() + } + + override func viewDidLoad() { + super.viewDidLoad() + output.didLoad(view: self) + bindActions() + } + + // MARK: - Private methods + + private func bindActions() { + rootView.backupWalletButton.addAction { [weak self] in + self?.output.didTapOnBackup() + } + rootView.accountsDetailsButton.addAction { [weak self] in + self?.output.didTapOnAccounts() + } + } +} + +// MARK: - EcosystemOptionsViewInput +extension EcosystemOptionsViewController: EcosystemOptionsViewInput {} + +// MARK: - Localizable +extension EcosystemOptionsViewController: Localizable { + func applyLocalization() { + rootView.locale = selectedLocale + } +} diff --git a/fearless/Modules/EcosystemOptions/EcosystemOptionsViewLayout.swift b/fearless/Modules/EcosystemOptions/EcosystemOptionsViewLayout.swift new file mode 100644 index 0000000000..d72c6f8d6f --- /dev/null +++ b/fearless/Modules/EcosystemOptions/EcosystemOptionsViewLayout.swift @@ -0,0 +1,107 @@ +import UIKit + +final class EcosystemOptionsViewLayout: UIView { + private enum Constants { + static let headerHeight: CGFloat = 56.0 + static let cornerRadius: CGFloat = 20.0 + } + + let titleLabel: UILabel = { + let titleLabel = UILabel() + titleLabel.font = .h3Title + return titleLabel + }() + + let backupWalletButton: TriangularedButton = { + let button = TriangularedButton() + button.triangularedView?.fillColor = R.color.colorBlack1()! + button.triangularedView?.shadowOpacity = 0 + button.imageWithTitleView?.titleFont = .h4Title + return button + }() + + let accountsDetailsButton: TriangularedButton = { + let button = TriangularedButton() + button.triangularedView?.fillColor = R.color.colorBlack1()! + button.triangularedView?.shadowOpacity = 0 + button.imageWithTitleView?.titleFont = .h4Title + return button + }() + + var locale: Locale = .current { + didSet { + applyLocale() + } + } + + private lazy var buttons: [TriangularedButton] = { + [ + backupWalletButton, + accountsDetailsButton + ] + }() + + override init(frame: CGRect) { + super.init(frame: frame) + setupLayout() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Private methods + + private func applyLocale() { + titleLabel.text = "Account options" + backupWalletButton.imageWithTitleView?.title = "Backup chain accounts" + accountsDetailsButton.imageWithTitleView?.title = "Chain accounts" + } + + private func setupLayout() { + backgroundColor = R.color.colorAlmostBlack()! + layer.cornerRadius = Constants.cornerRadius + clipsToBounds = true + + let navView = UIView() + addSubview(navView) + navView.snp.makeConstraints { make in + make.top.leading.trailing.equalToSuperview() + make.height.equalTo(Constants.headerHeight) + } + + navView.addSubview(titleLabel) + titleLabel.snp.makeConstraints { make in + make.center.equalToSuperview() + } + + let indicator = UIFactory.default.createIndicatorView() + + navView.addSubview(indicator) + indicator.snp.makeConstraints { make in + make.size.equalTo(UIConstants.indicatorSize) + make.top.equalTo(navView.snp.top) + make.centerX.equalTo(navView.snp.centerX) + } + + buttons.forEach { + $0.snp.makeConstraints { make in + make.height.equalTo(UIConstants.actionHeight) + } + } + + let vStackView = UIFactory.default.createVerticalStackView(spacing: UIConstants.accessoryItemsSpacing) + vStackView.backgroundColor = .clear + addSubview(vStackView) + vStackView.snp.makeConstraints { make in + make.top.equalTo(navView.snp.bottom).offset(UIConstants.accessoryItemsSpacing) + make.leading.trailing.equalToSuperview().inset(UIConstants.bigOffset) + make.bottom.equalTo(safeAreaLayoutGuide.snp.bottom).inset(UIConstants.accessoryItemsSpacing) + } + + buttons.forEach { + vStackView.addArrangedSubview($0) + } + } +} diff --git a/fearless/Modules/Profile/ProfileWireframe.swift b/fearless/Modules/Profile/ProfileWireframe.swift index 28588d84eb..4d7297260a 100644 --- a/fearless/Modules/Profile/ProfileWireframe.swift +++ b/fearless/Modules/Profile/ProfileWireframe.swift @@ -9,9 +9,11 @@ final class ProfileWireframe: ProfileWireframeProtocol, AuthorizationPresentable from view: ProfileViewProtocol?, metaAccount: MetaAccountModel ) { - let walletDetails = WalletDetailsViewFactory.createView(flow: .normal(wallet: metaAccount)) + guard let walletDetails = ConnectedAccountsAssembly.configureModule() else { + return + } let navigationController = FearlessNavigationController( - rootViewController: walletDetails.controller + rootViewController: walletDetails.view.controller ) view?.controller.present(navigationController, animated: true) } diff --git a/fearless/Modules/Root/RootPresenterFactory.swift b/fearless/Modules/Root/RootPresenterFactory.swift index bbdf2caf56..a6917643da 100644 --- a/fearless/Modules/Root/RootPresenterFactory.swift +++ b/fearless/Modules/Root/RootPresenterFactory.swift @@ -48,10 +48,7 @@ final class RootPresenterFactory: RootPresenterFactoryProtocol { substrateDbMigrator ] - let service = OnboardingService( - networkOperationFactory: NetworkOperationFactory(jsonDecoder: GithubJSONDecoder()), - operationQueue: OperationQueue() - ) + let service = OnboardingService() let resolver = OnboardingConfigVersionResolver(userDefaultsStorage: SettingsManager.shared) diff --git a/fearless/Modules/Transfer/Transfer/TransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/TransferFlowUseCase.swift index ef913b0547..406c813ead 100644 --- a/fearless/Modules/Transfer/Transfer/TransferFlowUseCase.swift +++ b/fearless/Modules/Transfer/Transfer/TransferFlowUseCase.swift @@ -11,11 +11,11 @@ enum TransferFlowUseCaseError: Error { } enum TransferFlowDirectionImpl { - case substrate // - case ethereum // - case soraMainnetQr // - case bokoloCash // - case ton // + case substrate + case ethereum + case soraMainnetQr + case bokoloCash + case ton } enum TransferValidationCase { diff --git a/fearless/Modules/WalletDetails/WalletDetailsPresenter.swift b/fearless/Modules/WalletDetails/WalletDetailsPresenter.swift index eaea5cc72c..8ea3af139a 100644 --- a/fearless/Modules/WalletDetails/WalletDetailsPresenter.swift +++ b/fearless/Modules/WalletDetails/WalletDetailsPresenter.swift @@ -15,12 +15,16 @@ final class WalletDetailsPresenter { private var searchText: String? init( + chains: [ChainModel]?, interactor: WalletDetailsInteractorInputProtocol, wireframe: WalletDetailsWireframeProtocol, viewModelFactory: WalletDetailsViewModelFactoryProtocol, flow: WalletDetailsFlow, localizationManager: LocalizationManagerProtocol ) { + if let chains { + self.chains = chains + } self.interactor = interactor self.wireframe = wireframe self.viewModelFactory = viewModelFactory @@ -169,6 +173,10 @@ extension WalletDetailsPresenter: WalletDetailsInteractorOutputProtocol { } func didReceive(chains: [ChainModel]) { + guard self.chains.isEmpty else { + provideViewModel(chains: self.chains) + return + } self.chains = chains provideViewModel(chains: chains) } diff --git a/fearless/Modules/WalletDetails/WalletDetailsViewFactory.swift b/fearless/Modules/WalletDetails/WalletDetailsViewFactory.swift index 18ef260319..55ca967773 100644 --- a/fearless/Modules/WalletDetails/WalletDetailsViewFactory.swift +++ b/fearless/Modules/WalletDetails/WalletDetailsViewFactory.swift @@ -1,10 +1,12 @@ import Foundation import RobinHood import SoraFoundation +import SSFModels final class WalletDetailsViewFactory { static func createView( - flow: WalletDetailsFlow + flow: WalletDetailsFlow, + chains: [ChainModel]? ) -> WalletDetailsViewProtocol { let chainsRepository = ChainRepositoryFactory().createRepository( for: NSPredicate.enabledCHain(), @@ -24,6 +26,7 @@ final class WalletDetailsViewFactory { let localizationManager = LocalizationManager.shared let presenter = WalletDetailsPresenter( + chains: chains, interactor: interactor, wireframe: wireframe, viewModelFactory: WalletDetailsViewModelFactory(), diff --git a/fearless/Modules/WalletOption/WalletOptionRouter.swift b/fearless/Modules/WalletOption/WalletOptionRouter.swift index 4699cc7eec..265e4763f2 100644 --- a/fearless/Modules/WalletOption/WalletOptionRouter.swift +++ b/fearless/Modules/WalletOption/WalletOptionRouter.swift @@ -14,9 +14,11 @@ final class WalletOptionRouter: WalletOptionRouterInput { } func showWalletDetails(from view: ControllerBackedProtocol?, for wallet: MetaAccountModel) { - let module = WalletDetailsViewFactory.createView(flow: .normal(wallet: wallet)) + guard let module = ConnectedAccountsAssembly.configureModule() else { + return + } let navigationController = FearlessNavigationController( - rootViewController: module.controller + rootViewController: module.view.controller ) view?.controller.present(navigationController, animated: true) diff --git a/fearless/Modules/WalletsManagment/WalletsManagmentTableCell.swift b/fearless/Modules/WalletsManagment/WalletsManagmentTableCell.swift index 791d896d3f..0edb4a4db4 100644 --- a/fearless/Modules/WalletsManagment/WalletsManagmentTableCell.swift +++ b/fearless/Modules/WalletsManagment/WalletsManagmentTableCell.swift @@ -107,6 +107,10 @@ final class WalletsManagmentTableCell: UITableViewCell { } } + func hideScore() { + accountScoreView.isHidden = true + } + private func configure() { optionsButton.addTarget(self, action: #selector(optionsDidTap), for: .touchUpInside) } From b9162f773bcfe98c685b2bf6db31ba7328f63d3d Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Wed, 2 Oct 2024 18:08:12 +0500 Subject: [PATCH 043/156] Ecosystem for wallet has been implemented --- .../TonConnectMessageBuilderImpl.swift | 12 +- .../Services/TonConnectServiceImpl.swift | 8 +- .../AddressChainDefiner.swift | 2 +- .../MetaAccountOperationFactory.swift | 151 +++++++++++------- .../Common/Protocols/AccountFetching.swift | 8 +- .../BaseAccountConfirmInteractor.swift | 2 +- .../AccountCreatePresenter.swift | 4 +- .../BaseAccountImportInteractor.swift | 6 +- .../BackupCreatePasswordInteractor.swift | 33 +++- .../BackupWallet/BackupWalletInteractor.swift | 28 ++-- .../BackupWallet/BackupWalletPresenter.swift | 4 +- .../BackupWalletViewModelFactory.swift | 21 ++- .../ViewModel/ProfileViewModelFactory.swift | 2 +- .../Transfer/TonTransferFlowUseCase.swift | 2 +- .../WalletConnectProposalPresenter.swift | 2 +- ...WalletConnectSessionViewModelFactory.swift | 2 +- .../WalletMainContainerViewModelFactory.swift | 2 +- .../WalletMainContainerPresenter.swift | 2 +- .../WalletOption/WalletOptionPresenter.swift | 2 +- .../WalletsManagmentViewModelFactory.swift | 2 +- 20 files changed, 180 insertions(+), 115 deletions(-) diff --git a/fearless/ApplicationLayer/Services/TonConnectMessageBuilderImpl.swift b/fearless/ApplicationLayer/Services/TonConnectMessageBuilderImpl.swift index 5dc4d9374d..8c111a0f0f 100644 --- a/fearless/ApplicationLayer/Services/TonConnectMessageBuilderImpl.swift +++ b/fearless/ApplicationLayer/Services/TonConnectMessageBuilderImpl.swift @@ -28,9 +28,9 @@ final class TonConnectMessageBuilderImpl: TonConnectMessageBuilder { wallet: MetaAccountModel ) throws -> String { guard - let address = wallet.tonAddress, - let publicKey = wallet.tonPublicKey, - let contract = wallet.tonWalletContract() + let address = wallet.ecosystem.tonAddress, + let publicKey = wallet.ecosystem.tonPublicKey, + let contract = wallet.ecosystem.tonWalletContract() else { throw ConvenienceError(error: "Missing TON") } @@ -114,9 +114,9 @@ final class TonConnectMessageBuilderImpl: TonConnectMessageBuilder { tonChainModel: ChainModel ) throws -> TonConnect.ConnectEventSuccess { guard - let address = wallet.tonAddress, - let publicKey = wallet.tonPublicKey, - let walletStateInit = wallet.tonWalletContract()?.stateInit + let address = wallet.ecosystem.tonAddress, + let publicKey = wallet.ecosystem.tonPublicKey, + let walletStateInit = wallet.ecosystem.tonWalletContract()?.stateInit else { throw ConvenienceError(error: "Missing TON") } diff --git a/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift b/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift index b8d8299182..083d27025f 100644 --- a/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift +++ b/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift @@ -137,8 +137,8 @@ actor TonConnectServiceImpl: TonConnectService { parameter: SendTransactionParam ) async throws -> String { guard - let sender = wallet.tonAddress, - let walletContract = wallet.tonWalletContract() + let sender = wallet.ecosystem.tonAddress, + let walletContract = wallet.ecosystem.tonWalletContract() else { throw ConvenienceError(error: "Missing Ton params") } @@ -165,8 +165,8 @@ actor TonConnectServiceImpl: TonConnectService { parameter: SendTransactionParam ) async throws { guard - let sender = wallet.tonAddress, - let walletContract = wallet.tonWalletContract() + let sender = wallet.ecosystem.tonAddress, + let walletContract = wallet.ecosystem.tonWalletContract() else { throw ConvenienceError(error: "Missing Ton params") } diff --git a/fearless/Common/AddressChainDefiner/AddressChainDefiner.swift b/fearless/Common/AddressChainDefiner/AddressChainDefiner.swift index 9bb7f0acd0..eae991342e 100644 --- a/fearless/Common/AddressChainDefiner/AddressChainDefiner.swift +++ b/fearless/Common/AddressChainDefiner/AddressChainDefiner.swift @@ -69,7 +69,7 @@ final class AddressChainDefiner { guard let address = address, address.isNotEmpty, let accoundId = (try? AddressFactory.accountId(from: address, chain: chain)) else { return .invalid(address) } - if accoundId == wallet.substrateAccountId || accoundId == wallet.ethereumAddress { + if accoundId == wallet.ecosystem.substrateAccountId || accoundId == wallet.ecosystem.ethereumAddress { return .sameAddress(address) } return .valid(address) diff --git a/fearless/Common/Operation/MetaAccountOperationFactory.swift b/fearless/Common/Operation/MetaAccountOperationFactory.swift index e048327cda..2db5944ccf 100644 --- a/fearless/Common/Operation/MetaAccountOperationFactory.swift +++ b/fearless/Common/Operation/MetaAccountOperationFactory.swift @@ -1,4 +1,5 @@ import Foundation +import SSFAccountManagment import SSFUtils import IrohaCrypto import RobinHood @@ -8,13 +9,32 @@ import SSFCrypto import TonSwift protocol MetaAccountOperationFactoryProtocol { - func newMetaAccountOperation(request: MetaAccountImportMnemonicRequest, isBackuped: Bool) -> BaseOperation - func newMetaAccountOperation(request: MetaAccountImportSeedRequest, isBackuped: Bool) -> BaseOperation - func newMetaAccountOperation(request: MetaAccountImportKeystoreRequest, isBackuped: Bool) -> BaseOperation - - func importChainAccountOperation(request: ChainAccountImportMnemonicRequest) -> BaseOperation - func importChainAccountOperation(request: ChainAccountImportSeedRequest) -> BaseOperation - func importChainAccountOperation(request: ChainAccountImportKeystoreRequest) -> BaseOperation + func newTonMetaAccountOperation( + request: MetaAccountImportTonMnemonicRequest, + isBackedUp: Bool + ) -> BaseOperation + func newMetaAccountOperation( + request: MetaAccountImportMnemonicRequest, + isBackedUp: Bool + ) -> BaseOperation + func newMetaAccountOperation( + request: MetaAccountImportSeedRequest, + isBackedUp: Bool + ) -> BaseOperation + func newMetaAccountOperation( + request: MetaAccountImportKeystoreRequest, + isBackedUp: Bool + ) -> BaseOperation + + func importChainAccountOperation( + request: ChainAccountImportMnemonicRequest + ) -> BaseOperation + func importChainAccountOperation( + request: ChainAccountImportSeedRequest + ) -> BaseOperation + func importChainAccountOperation( + request: ChainAccountImportKeystoreRequest + ) -> BaseOperation } final class MetaAccountOperationFactory { @@ -249,29 +269,14 @@ private extension MetaAccountOperationFactory { func createMetaAccount( name: String, - substratePublicKey: Data, - substrateCryptoType: CryptoType, - ethereumPublicKey: Data?, - tonPublicKey: Data?, - tonAddress: TonSwift.Address?, - tonContractVersion: TonContractVersion?, - isBackuped: Bool, + ecosystem: WalletEcosystem, + isBackedUp: Bool, defaultChainId: ChainModel.Id? = nil ) throws -> MetaAccountModel { - let substrateAccountId = try substratePublicKey.publicKeyToAccountId() - let ethereumAddress = try ethereumPublicKey?.ethereumAddressFromPublicKey() - return MetaAccountModel( metaId: UUID().uuidString, name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType.rawValue, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, - tonAddress: tonAddress, - tonPublicKey: tonPublicKey, - tonContractVersion: tonContractVersion, + ecosystem: ecosystem, chainAccounts: [], assetKeysOrder: nil, canExportEthereumMnemonic: true, @@ -279,7 +284,7 @@ private extension MetaAccountOperationFactory { selectedCurrency: Currency.defaultCurrency(), networkManagmentFilter: defaultChainId, assetsVisibility: [], - hasBackup: isBackuped, + hasBackup: isBackedUp, favouriteChainIds: [] ) } @@ -288,9 +293,34 @@ private extension MetaAccountOperationFactory { // MARK: - MetaAccountOperationFactoryProtocol extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { + func newTonMetaAccountOperation( + request: MetaAccountImportTonMnemonicRequest, + isBackedUp: Bool + ) -> BaseOperation { + ClosureOperation { [self] in + let tonQuery = try getTonQuery(mnemonic: request.mnemonic) + let ecosystem = WalletEcosystem.ton(.init( + tonAddress: tonQuery.address, + tonPublicKey: tonQuery.publicKey, + tonContractVersion: tonQuery.contractVersion + )) + let metaAccount = try createMetaAccount( + name: request.username, + ecosystem: ecosystem, + isBackedUp: isBackedUp + ) + + let metaId = metaAccount.metaId + try saveSecretKey(tonQuery.privateKey, metaId: metaId, ecosystem: .ton) + try saveEntropy(request.mnemonic.entropy(), metaId: metaId) + + return metaAccount + } + } + func newMetaAccountOperation( request: MetaAccountImportMnemonicRequest, - isBackuped: Bool + isBackedUp: Bool ) -> BaseOperation { ClosureOperation { [self] in let substrateQuery = try getQuery( @@ -307,17 +337,20 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { ethereumBased: true ) - let tonQuery = try getTonQuery(mnemonic: request.mnemonic) + let substrateAccountId = try substrateQuery.publicKey.publicKeyToAccountId() + let ethereumAddress = try ethereumQuery.publicKey.ethereumAddressFromPublicKey() + let ecosystem = WalletEcosystem.regular(.init( + substrateAccountId: substrateAccountId, + substrateCryptoType: request.cryptoType.rawValue, + substratePublicKey: substrateQuery.publicKey, + ethereumAddress: ethereumAddress, + ethereumPublicKey: ethereumQuery.publicKey + )) let metaAccount = try createMetaAccount( name: request.username, - substratePublicKey: substrateQuery.publicKey, - substrateCryptoType: request.cryptoType, - ethereumPublicKey: ethereumQuery.publicKey, - tonPublicKey: tonQuery.publicKey, - tonAddress: tonQuery.address, - tonContractVersion: tonQuery.contractVersion, - isBackuped: isBackuped, + ecosystem: ecosystem, + isBackedUp: isBackedUp, defaultChainId: request.defaultChainId ) @@ -331,8 +364,6 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { try saveDerivationPath(request.ethereumDerivationPath, metaId: metaId, ethereumBased: true) try saveSeed(ethereumQuery.privateKey, metaId: metaId, ecosystem: .ethereumBased) - try saveSecretKey(tonQuery.privateKey, metaId: metaId, ecosystem: .ton) - try saveEntropy(request.mnemonic.entropy(), metaId: metaId) return metaAccount @@ -342,7 +373,7 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { // We use seed vs seed.miniSeed for mnemonic. Check if it works for SeedRequest. func newMetaAccountOperation( request: MetaAccountImportSeedRequest, - isBackuped: Bool + isBackedUp: Bool ) -> BaseOperation { ClosureOperation { [self] in let substrateSeed = try Data(hexStringSSF: request.substrateSeed) @@ -365,15 +396,19 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { ) } + let substrateAccountId = try substrateQuery.publicKey.publicKeyToAccountId() + let ethereumAddress = try ethereumQuery?.publicKey.ethereumAddressFromPublicKey() + let ecosystem = WalletEcosystem.regular(.init( + substrateAccountId: substrateAccountId, + substrateCryptoType: request.cryptoType.rawValue, + substratePublicKey: substrateQuery.publicKey, + ethereumAddress: ethereumAddress, + ethereumPublicKey: ethereumQuery?.publicKey + )) let metaAccount = try createMetaAccount( name: request.username, - substratePublicKey: substrateQuery.publicKey, - substrateCryptoType: request.cryptoType, - ethereumPublicKey: ethereumQuery?.publicKey, - tonPublicKey: nil, - tonAddress: nil, - tonContractVersion: nil, - isBackuped: isBackuped + ecosystem: ecosystem, + isBackedUp: isBackedUp ) let metaId = metaAccount.metaId @@ -394,7 +429,7 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { func newMetaAccountOperation( request: MetaAccountImportKeystoreRequest, - isBackuped: Bool + isBackedUp: Bool ) -> BaseOperation { ClosureOperation { [self] in let keystoreExtractor = KeystoreExtractor() @@ -455,17 +490,17 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { try saveSecretKey(ethereumKeystore.secretKeyData, metaId: metaId, ecosystem: .ethereumBased) } - return MetaAccountModel( - metaId: metaId, - name: request.username, + let ecosystem = WalletEcosystem.regular(.init( substrateAccountId: accountId, substrateCryptoType: request.cryptoType.rawValue, substratePublicKey: substratePublicKey.rawData(), ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey?.rawData(), - tonAddress: nil, - tonPublicKey: nil, - tonContractVersion: nil, + ethereumPublicKey: ethereumPublicKey?.rawData() + )) + return MetaAccountModel( + metaId: metaId, + name: request.username, + ecosystem: ecosystem, chainAccounts: [], assetKeysOrder: nil, canExportEthereumMnemonic: true, @@ -473,7 +508,7 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { selectedCurrency: Currency.defaultCurrency(), networkManagmentFilter: nil, assetsVisibility: [], - hasBackup: isBackuped, + hasBackup: isBackedUp, favouriteChainIds: [] ) } @@ -511,11 +546,9 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { try saveSeed(query.seed, metaId: metaId, ecosystem: request.ecosystem) case .ton: let tonQuery = try getTonQuery(mnemonic: request.mnemonic) - return request.meta.replacingTon( - tonPublicKey: tonQuery.publicKey, - tonAddress: tonQuery.address, - tonContractVersion: tonQuery.contractVersion - ) + accountId = tonQuery.publicKey + privateKey = tonQuery.privateKey + publicKey = tonQuery.publicKey } try saveSecretKey( diff --git a/fearless/Common/Protocols/AccountFetching.swift b/fearless/Common/Protocols/AccountFetching.swift index 1d683b7149..a14d4c4379 100644 --- a/fearless/Common/Protocols/AccountFetching.swift +++ b/fearless/Common/Protocols/AccountFetching.swift @@ -77,13 +77,14 @@ extension AccountFetching { for chainAccount in meta.chainAccounts { let chainFormat: ChainFormat = chainAccount.ecosystem.isEthereumBased ? .ethereum : .substrate(chain.addressPrefix) if let chainAddress = try? chainAccount.accountId.toAddress(using: chainFormat), + let substrateCryptoType = meta.ecosystem.substrateCryptoType, chainAddress == address { let account = ChainAccountResponse( chainId: chain.chainId, accountId: chainAccount.accountId, publicKey: chainAccount.publicKey, name: meta.name, - cryptoType: CryptoType(rawValue: meta.substrateCryptoType) ?? .sr25519, + cryptoType: CryptoType(rawValue: substrateCryptoType) ?? .sr25519, addressPrefix: chain.addressPrefix, ecosystem: chainAccount.ecosystem, isChainAccount: true, @@ -157,12 +158,15 @@ extension AccountFetching { } for chainAccount in meta.chainAccounts { + guard let substrateCryptoType = meta.ecosystem.substrateCryptoType else { + continue + } responses.append(ChainAccountResponse( chainId: chain.chainId, accountId: chainAccount.accountId, publicKey: chainAccount.publicKey, name: meta.name, - cryptoType: CryptoType(rawValue: meta.substrateCryptoType) ?? .sr25519, + cryptoType: CryptoType(rawValue: substrateCryptoType) ?? .sr25519, addressPrefix: chain.addressPrefix, ecosystem: chainAccount.ecosystem, isChainAccount: true, diff --git a/fearless/Modules/AccountConfirm/BaseAccountConfirmInteractor.swift b/fearless/Modules/AccountConfirm/BaseAccountConfirmInteractor.swift index b234c23fb4..a7aa7755d7 100644 --- a/fearless/Modules/AccountConfirm/BaseAccountConfirmInteractor.swift +++ b/fearless/Modules/AccountConfirm/BaseAccountConfirmInteractor.swift @@ -67,7 +67,7 @@ extension BaseAccountConfirmInteractor: AccountConfirmInteractorInputProtocol { private extension BaseAccountConfirmInteractor { func createAccount(_ request: MetaAccountImportMnemonicRequest, isBackuped: Bool) { - let operation = accountOperationFactory.newMetaAccountOperation(request: request, isBackuped: isBackuped) + let operation = accountOperationFactory.newMetaAccountOperation(request: request, isBackedUp: isBackuped) createAccountUsingOperation(operation) } diff --git a/fearless/Modules/AccountCreate/AccountCreatePresenter.swift b/fearless/Modules/AccountCreate/AccountCreatePresenter.swift index 224f56079b..bb1c28ffbf 100644 --- a/fearless/Modules/AccountCreate/AccountCreatePresenter.swift +++ b/fearless/Modules/AccountCreate/AccountCreatePresenter.swift @@ -147,7 +147,9 @@ extension AccountCreatePresenter: AccountCreatePresenterProtocol { case .wallet, .backup: view?.set(chainType: .both) case let .chain(model): - if let cryptoType = CryptoType(rawValue: model.meta.substrateCryptoType) { + if + let substrateCryptoType = model.meta.ecosystem.substrateCryptoType, + let cryptoType = CryptoType(rawValue: substrateCryptoType) { selectedCryptoType = cryptoType } view?.set(chainType: model.chain.isEthereumBased ? .ethereum : .substrate) diff --git a/fearless/Modules/AccountImport/BaseAccountImportInteractor.swift b/fearless/Modules/AccountImport/BaseAccountImportInteractor.swift index d7d02156f2..8bbc3e8312 100644 --- a/fearless/Modules/AccountImport/BaseAccountImportInteractor.swift +++ b/fearless/Modules/AccountImport/BaseAccountImportInteractor.swift @@ -86,7 +86,7 @@ extension BaseAccountImportInteractor: AccountImportInteractorInputProtocol { cryptoType: request.cryptoType, defaultChainId: request.defaultChainId ) - operation = accountOperationFactory.newMetaAccountOperation(request: request, isBackuped: true) + operation = accountOperationFactory.newMetaAccountOperation(request: request, isBackedUp: true) case let .seed(data): let request = MetaAccountImportSeedRequest( substrateSeed: data.substrateSeed, @@ -96,7 +96,7 @@ extension BaseAccountImportInteractor: AccountImportInteractorInputProtocol { ethereumDerivationPath: data.ethereumDerivationPath, cryptoType: request.cryptoType ) - operation = accountOperationFactory.newMetaAccountOperation(request: request, isBackuped: true) + operation = accountOperationFactory.newMetaAccountOperation(request: request, isBackedUp: true) case let .keystore(data): let request = MetaAccountImportKeystoreRequest( substrateKeystore: data.substrateKeystore, @@ -106,7 +106,7 @@ extension BaseAccountImportInteractor: AccountImportInteractorInputProtocol { username: request.username, cryptoType: request.cryptoType ) - operation = accountOperationFactory.newMetaAccountOperation(request: request, isBackuped: true) + operation = accountOperationFactory.newMetaAccountOperation(request: request, isBackedUp: true) } importAccountUsingOperation(operation) } diff --git a/fearless/Modules/BackupCreatePassword/BackupCreatePasswordInteractor.swift b/fearless/Modules/BackupCreatePassword/BackupCreatePasswordInteractor.swift index 9a9faccbc9..d1be108b8d 100644 --- a/fearless/Modules/BackupCreatePassword/BackupCreatePasswordInteractor.swift +++ b/fearless/Modules/BackupCreatePassword/BackupCreatePasswordInteractor.swift @@ -129,6 +129,13 @@ final class BackupCreatePasswordInteractor: BaseAccountConfirmInteractor { seeds: [ExportSeedData], password: String ) { + guard + let substrateCryptoType = wallet.ecosystem.substrateCryptoType, + let substratePublicKey = wallet.ecosystem.substratePublicKey, + let substratePublicKey = wallet.ecosystem.substratePublicKey + else { + return + } let substrateRestoreSeed = seeds.first(where: { $0.chain.ecosystem == .substrate }) let ethereumRestoreSeed = seeds.first(where: { $0.chain.isEthereumBased }) @@ -138,12 +145,12 @@ final class BackupCreatePasswordInteractor: BaseAccountConfirmInteractor { substrateSeed: substrateSeed, ethSeed: ethSeed ) - let cryptoType = CryptoType(rawValue: wallet.substrateCryptoType) - let address42 = try? wallet.substratePublicKey.toAddress(using: .substrate(42)) + let cryptoType = CryptoType(rawValue: substrateCryptoType) + let address42 = try? substratePublicKey.toAddress(using: .substrate(42)) let account = OpenBackupAccount( name: wallet.name, - address: address42 ?? wallet.substratePublicKey.toHex(), + address: address42 ?? substratePublicKey.toHex(), cryptoType: cryptoType?.stringValue.uppercased(), substrateDerivationPath: substrateRestoreSeed?.derivationPath, ethDerivationPath: ethereumRestoreSeed?.derivationPath, @@ -158,6 +165,13 @@ final class BackupCreatePasswordInteractor: BaseAccountConfirmInteractor { jsons: [RestoreJson], password: String ) { + guard + let substrateCryptoType = wallet.ecosystem.substrateCryptoType, + let substratePublicKey = wallet.ecosystem.substratePublicKey, + let substratePublicKey = wallet.ecosystem.substratePublicKey + else { + return + } let substrateRestoreJson = jsons.first(where: { $0.chain.ecosystem == .substrate }) let ethereumRestoreJson = jsons.first(where: { $0.chain.isEthereumBased }) @@ -165,12 +179,12 @@ final class BackupCreatePasswordInteractor: BaseAccountConfirmInteractor { substrateJson: substrateRestoreJson?.data, ethJson: ethereumRestoreJson?.data ) - let cryptoType = CryptoType(rawValue: wallet.substrateCryptoType) - let address42 = try? wallet.substratePublicKey.toAddress(using: .substrate(42)) + let cryptoType = CryptoType(rawValue: substrateCryptoType) + let address42 = try? substratePublicKey.toAddress(using: .substrate(42)) let account = OpenBackupAccount( name: wallet.name, - address: address42 ?? wallet.substratePublicKey.toHex(), + address: address42 ?? substratePublicKey.toHex(), cryptoType: cryptoType?.stringValue.uppercased(), backupAccountType: [.json], json: json @@ -183,10 +197,13 @@ final class BackupCreatePasswordInteractor: BaseAccountConfirmInteractor { request: MetaAccountImportMnemonicRequest, password: String ) { - let address42 = try? wallet.substratePublicKey.toAddress(using: .substrate(42)) + guard let substratePublicKey = wallet.ecosystem.substratePublicKey else { + return + } + let address42 = try? substratePublicKey.toAddress(using: .substrate(42)) let account = OpenBackupAccount( name: request.username, - address: address42 ?? wallet.substratePublicKey.toHex(), + address: address42 ?? substratePublicKey.toHex(), passphrase: request.mnemonic.toString(), cryptoType: request.cryptoType.stringValue.uppercased(), substrateDerivationPath: request.substrateDerivationPath, diff --git a/fearless/Modules/BackupWallet/BackupWalletInteractor.swift b/fearless/Modules/BackupWallet/BackupWalletInteractor.swift index d7e1f85c70..ab2b8e5c8c 100644 --- a/fearless/Modules/BackupWallet/BackupWalletInteractor.swift +++ b/fearless/Modules/BackupWallet/BackupWalletInteractor.swift @@ -107,20 +107,24 @@ extension BackupWalletInteractor: BackupWalletInteractorInput { } func removeBackupFromGoogle() { - let address42 = try? wallet.substratePublicKey.toAddress(using: .substrate(42)) - let account = OpenBackupAccount(address: address42 ?? wallet.substratePublicKey.toHex()) - - Task { - do { - try await cloudStorage?.deleteBackup(account: account) - await MainActor.run { - output?.didReceiveRemove(result: .success(())) - } - } catch { - await MainActor.run { - output?.didReceiveRemove(result: .failure(error)) + switch wallet.ecosystem { + case .regular(let regular): + Task { + do { + let address42 = try? regular.substratePublicKey.toAddress(using: .substrate(42)) + let account = OpenBackupAccount(address: address42 ?? regular.substratePublicKey.toHex()) + try await cloudStorage?.deleteBackup(account: account) + await MainActor.run { + output?.didReceiveRemove(result: .success(())) + } + } catch { + await MainActor.run { + output?.didReceiveRemove(result: .failure(error)) + } } } + case .ton: + break } } diff --git a/fearless/Modules/BackupWallet/BackupWalletPresenter.swift b/fearless/Modules/BackupWallet/BackupWalletPresenter.swift index 1a85093ce4..19eabd8036 100644 --- a/fearless/Modules/BackupWallet/BackupWalletPresenter.swift +++ b/fearless/Modules/BackupWallet/BackupWalletPresenter.swift @@ -78,7 +78,7 @@ final class BackupWalletPresenter { case .json: router.showKeystoreExport(flow: flow, from: view) case .backupGoogle, .removeGoogle: - let address42 = try? wallet.substratePublicKey.toAddress(using: .substrate(42)) + let address42 = try? wallet.ecosystem.substratePublicKey?.toAddress(using: .substrate(42)) if backupAccounts.or([]).contains(where: { $0.address == address42 }) { removeBackupFromGoogle() } else { @@ -291,7 +291,7 @@ extension BackupWalletPresenter: BackupWalletInteractorOutput { .commonDone(preferredLanguages: selectedLocale.rLanguages) router.presentSuccessNotification(text, from: view) - let address42 = try? wallet.substratePublicKey.toAddress(using: .substrate(42)) + let address42 = try? wallet.ecosystem.substratePublicKey?.toAddress(using: .substrate(42)) backupAccounts?.removeAll(where: { $0.address == address42 }) provideViewModel() case let .failure(failure): diff --git a/fearless/Modules/BackupWallet/BackupWalletViewModelFactory.swift b/fearless/Modules/BackupWallet/BackupWalletViewModelFactory.swift index 1ed2ac3907..0e1e2caeb1 100644 --- a/fearless/Modules/BackupWallet/BackupWalletViewModelFactory.swift +++ b/fearless/Modules/BackupWallet/BackupWalletViewModelFactory.swift @@ -78,14 +78,19 @@ final class BackupWalletViewModelFactory: BackupWalletViewModelFactoryProtocol { backupAccounts: [OpenBackupAccount]?, locale: Locale ) -> [ProfileOptionViewModelProtocol] { - let publicKey = wallet.substratePublicKey - let address = try? AddressFactory.address(for: publicKey, chainFormat: .substrate(42)) - var backupOptions: [BackupWalletOptions] = exportOptions.map { BackupWalletOptions(exportOptions: $0) } - if backupAccounts?.contains(where: { $0.address == address }) == true { - backupOptions.append(.removeGoogle) - } else if let backupAccounts = backupAccounts, !backupAccounts.contains(where: { $0.address == address }) { - backupOptions.append(.backupGoogle) + switch wallet.ecosystem { + case .regular(let regular): + let publicKey = regular.substratePublicKey + let address = try? AddressFactory.address(for: publicKey, chainFormat: .substrate(42)) + + if backupAccounts?.contains(where: { $0.address == address }) == true { + backupOptions.append(.removeGoogle) + } else if let backupAccounts = backupAccounts, !backupAccounts.contains(where: { $0.address == address }) { + backupOptions.append(.backupGoogle) + } + case .ton: + break } let optionViewModels = backupOptions.compactMap { (option) -> ProfileOptionViewModel? in @@ -156,7 +161,7 @@ final class BackupWalletViewModelFactory: BackupWalletViewModelFactoryProtocol { balance: WalletBalanceInfo?, locale: Locale ) -> WalletsManagmentCellViewModel { - let address = wallet.ethereumAddress?.toHex(includePrefix: true) + let address = wallet.ecosystem.ethereumAddress?.toHex(includePrefix: true) let accountScoreViewModel = AccountScoreViewModel(fetcher: accountScoreFetcher, address: address, chain: nil, settings: settings, eventCenter: EventCenter.shared, logger: Logger.shared) var fiatBalance: String = "" diff --git a/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift b/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift index fc646ff0ea..907d36c401 100644 --- a/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift +++ b/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift @@ -108,7 +108,7 @@ final class ProfileViewModelFactory: ProfileViewModelFactoryProtocol { ) } - let address = wallet.ethereumAddress?.toHex(includePrefix: true) + let address = wallet.ecosystem.ethereumAddress?.toHex(includePrefix: true) let accountScoreViewModel = AccountScoreViewModel(fetcher: accountScoreFetcher, address: address, chain: nil, settings: settings, eventCenter: EventCenter.shared, logger: Logger.shared) return WalletsManagmentCellViewModel( diff --git a/fearless/Modules/Transfer/Transfer/TonTransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/TonTransferFlowUseCase.swift index fea0725bee..8e057c00e1 100644 --- a/fearless/Modules/Transfer/Transfer/TonTransferFlowUseCase.swift +++ b/fearless/Modules/Transfer/Transfer/TonTransferFlowUseCase.swift @@ -156,7 +156,7 @@ final class TonTransferFlowUseCase: TransferFlowUseCase { let amount = inputAmount.toSubstrateAmount(precision: Int16(selectedChainAsset.asset.precision)), let address = try? wallet.fetch(for: selectedChainAsset.chain.accountRequest())?.accountId.asTonAddress(), let recipientAddress = getRecipientAddress(), - let contract = wallet.tonWalletContract() + let contract = wallet.ecosystem.tonWalletContract() else { transfer = nil return nil diff --git a/fearless/Modules/WalletConnectProposal/WalletConnectProposalPresenter.swift b/fearless/Modules/WalletConnectProposal/WalletConnectProposalPresenter.swift index 25a36a0fc9..d04ebb1111 100644 --- a/fearless/Modules/WalletConnectProposal/WalletConnectProposalPresenter.swift +++ b/fearless/Modules/WalletConnectProposal/WalletConnectProposalPresenter.swift @@ -244,7 +244,7 @@ final class WalletConnectProposalPresenter { case .walletConnect: self.wallets = wallets case .tonConnect: - self.wallets = wallets.filter { $0.tonAddress != nil } + self.wallets = wallets.filter { $0.ecosystem.tonAddress != nil } if self.wallets.isEmpty { showMissingAccountAlert() return diff --git a/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModelFactory.swift b/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModelFactory.swift index 7aea352e0f..d655e8ebc3 100644 --- a/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModelFactory.swift +++ b/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModelFactory.swift @@ -177,7 +177,7 @@ final class WalletConnectSessionViewModelFactoryImpl: WalletConnectSessionViewMo balanceInfo: WalletBalanceInfos?, locale: Locale ) -> WalletsManagmentCellViewModel { - let address = wallet.ethereumAddress?.toHex(includePrefix: true) + let address = wallet.ecosystem.ethereumAddress?.toHex(includePrefix: true) let accountScoreViewModel = AccountScoreViewModel( fetcher: accountScoreFetcher, address: address, diff --git a/fearless/Modules/WalletMainContainer/ViewModel/WalletMainContainerViewModelFactory.swift b/fearless/Modules/WalletMainContainer/ViewModel/WalletMainContainerViewModelFactory.swift index 7d32fb28b4..e99a66dd8d 100644 --- a/fearless/Modules/WalletMainContainer/ViewModel/WalletMainContainerViewModelFactory.swift +++ b/fearless/Modules/WalletMainContainer/ViewModel/WalletMainContainerViewModelFactory.swift @@ -59,7 +59,7 @@ final class WalletMainContainerViewModelFactory: WalletMainContainerViewModelFac chainAddress = address } - let ethAddress = selectedMetaAccount.ethereumAddress?.toHex(includePrefix: true) + let ethAddress = selectedMetaAccount.ecosystem.ethereumAddress?.toHex(includePrefix: true) let accountScoreViewModel = AccountScoreViewModel( fetcher: accountScoreFetcher, address: ethAddress, diff --git a/fearless/Modules/WalletMainContainer/WalletMainContainerPresenter.swift b/fearless/Modules/WalletMainContainer/WalletMainContainerPresenter.swift index acf42d2924..120b181a43 100644 --- a/fearless/Modules/WalletMainContainer/WalletMainContainerPresenter.swift +++ b/fearless/Modules/WalletMainContainer/WalletMainContainerPresenter.swift @@ -126,7 +126,7 @@ extension WalletMainContainerPresenter: WalletMainContainerViewOutput { } func didTapAccountScore() { - let address = wallet.ethereumAddress?.toHex(includePrefix: true) + let address = wallet.ecosystem.ethereumAddress?.toHex(includePrefix: true) router.presentAccountScore(address: address, from: view) } } diff --git a/fearless/Modules/WalletOption/WalletOptionPresenter.swift b/fearless/Modules/WalletOption/WalletOptionPresenter.swift index f14dc4da26..27337a3a76 100644 --- a/fearless/Modules/WalletOption/WalletOptionPresenter.swift +++ b/fearless/Modules/WalletOption/WalletOptionPresenter.swift @@ -78,7 +78,7 @@ extension WalletOptionPresenter: WalletOptionViewOutput { } func accountScoreDidTap() { - let address = wallet.info.ethereumAddress?.toHex(includePrefix: true) + let address = wallet.info.ecosystem.ethereumAddress?.toHex(includePrefix: true) router.presentAccountScore(address: address, from: view) } diff --git a/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentViewModelFactory.swift b/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentViewModelFactory.swift index 86f4472e24..f8e4a3bcf6 100644 --- a/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentViewModelFactory.swift +++ b/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentViewModelFactory.swift @@ -41,7 +41,7 @@ final class WalletsManagmentViewModelFactory: WalletsManagmentViewModelFactoryPr isSelected = selectedWalletId == nil ? false : managedMetaAccount.info.metaId == selectedWalletId } - let address = managedMetaAccount.info.ethereumAddress?.toHex(includePrefix: true) + let address = managedMetaAccount.info.ecosystem.ethereumAddress?.toHex(includePrefix: true) let accountScoreViewModel = AccountScoreViewModel( fetcher: accountScoreFetcher, address: address, From 8e4bef4179db96a10019a822940e3a6ba0c21d23 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Mon, 7 Oct 2024 17:42:40 +0500 Subject: [PATCH 044/156] ecosystem for wallet --- fearless.xcodeproj/project.pbxproj | 8 + .../xcshareddata/swiftpm/Package.resolved | 6 +- .../regularBanner.imageset/Contents.json | 12 ++ .../regularBanner.imageset/regularBanner.pdf | Bin 0 -> 5494 bytes .../tonBanner.imageset/Contents.json | 12 ++ .../tonBanner.imageset/tonBanner.pdf | Bin 0 -> 4771 bytes .../tonIcon.imageset/Contents.json | 12 ++ .../tonIcon.imageset/tonIcon.pdf | Bin 0 -> 1329 bytes .../Model/AccountImportSource+ViewModel.swift | 2 +- .../Common/Model/AccountImportSource.swift | 1 + .../AvailableExportOptionsProvider.swift | 17 +- .../MetaAccountOperationFactory.swift | 26 +-- .../AccountManagementPresentable.swift | 2 +- .../View/SelectEcosystemBannerView.swift | 79 +++++++++ .../BaseAccountConfirmInteractor.swift | 22 ++- .../Model/AccountConfirmFlow.swift | 21 ++- .../AccountCreateInteractor.swift | 23 ++- .../AccountCreatePresenter.swift | 56 +++++-- .../AccountCreateProtocols.swift | 3 + .../AccountCreateViewController.swift | 13 +- .../AccountCreateViewFactory.swift | 18 ++- .../AccountCreateViewLayout.swift | 4 +- .../Model/AccountCreateChainType.swift | 6 +- .../AccountImportPresenter.swift | 26 ++- .../AccountImportViewController.swift | 7 +- .../BaseAccountImportInteractor.swift | 10 ++ .../Model/AccountImportRequest.swift | 1 + .../AddAccount+OnboardingMainWireframe.swift | 7 +- .../AddAccount+UsernameSetupWireframe.swift | 5 +- .../BackupCreatePasswordInteractor.swift | 15 +- .../BackupRiskWarningsRouter.swift | 5 +- .../BackupWallet/BackupWalletPresenter.swift | 10 +- .../BackupWalletViewModelFactory.swift | 2 + .../Modules/Banners/BannersPresenter.swift | 7 +- .../ConnectedAccountsViewModelFactory.swift | 5 +- .../ExportGenericViewController.swift | 10 +- .../ExportMnemonic/ExportMnemonicData.swift | 2 +- .../ExportMnemonicInteractor.swift | 32 +++- .../ExportMnemonicPresenter.swift | 6 +- .../ExportMnemonicProtocols.swift | 2 +- .../ExportMnemonicWireframe.swift | 2 +- .../ExportMnemonicConfirmInteractor.swift | 8 +- .../ExportMnemonicConfirmProtocols.swift | 2 +- .../ExportMnemonicConfirmViewFactory.swift | 2 +- .../NetworkIssuesNotificationRouter.swift | 3 +- .../ChainAccount/ChainAccountWireframe.swift | 1 + .../ChainAssetList/ChainAssetListRouter.swift | 3 +- .../OnboardingMainPresenter.swift | 133 ++++++++------- .../OnboardingMainProtocol.swift | 7 +- .../OnboardingMainViewController.swift | 147 ++++++++--------- .../OnboardingMainViewFactory.swift | 5 +- .../OnboardingMainViewLayout.swift | 153 ++++++++++++++++++ .../OnboardingMainWireframe.swift | 9 +- .../Modules/Profile/ProfilePresenter.swift | 7 +- .../Profile/ProfileViewController.swift | 13 +- .../Profile/ViewModel/ProfileViewModel.swift | 3 + .../ViewModel/ProfileViewModelFactory.swift | 4 +- ...witchAccount+OnboardingMainWireframe.swift | 8 +- ...SwitchAccount+UsernameSetupWireframe.swift | 5 +- .../UsernameSetupPresenter.swift | 5 +- .../UsernameSetupProtocols.swift | 17 +- .../UsernameSetupViewFactory.swift | 25 ++- .../UsernameSetupWireframe.swift | 4 +- ...WalletConnectSessionViewModelFactory.swift | 4 +- .../WalletDetailsWireframe.swift | 3 +- .../WalletOption/WalletOptionPresenter.swift | 9 ++ .../WalletOption/WalletOptionProtocols.swift | 1 + .../WalletOptionViewController.swift | 2 + .../WalletsManagmentCellViewModel.swift | 2 + .../WalletsManagmentViewModelFactory.swift | 20 ++- .../WalletsManagmentPresenter.swift | 92 ----------- .../WalletsManagmentProtocols.swift | 1 - .../WalletsManagmentTableCell.swift | 2 +- .../WalletsManagmentViewController.swift | 5 - .../WalletsManagmentViewLayout.swift | 15 -- 75 files changed, 819 insertions(+), 398 deletions(-) create mode 100644 fearless/Assets.xcassets/regularBanner.imageset/Contents.json create mode 100644 fearless/Assets.xcassets/regularBanner.imageset/regularBanner.pdf create mode 100644 fearless/Assets.xcassets/tonBanner.imageset/Contents.json create mode 100644 fearless/Assets.xcassets/tonBanner.imageset/tonBanner.pdf create mode 100644 fearless/Assets.xcassets/tonIcon.imageset/Contents.json create mode 100644 fearless/Assets.xcassets/tonIcon.imageset/tonIcon.pdf create mode 100644 fearless/Common/View/SelectEcosystemBannerView.swift create mode 100644 fearless/Modules/OnbordingMain/OnboardingMainViewLayout.swift diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index 6670cc908b..f16a2a96ac 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -399,6 +399,8 @@ 07FBC9E228BE24E900ED65B4 /* MissingAccountFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07FBC9E128BE24E900ED65B4 /* MissingAccountFetcher.swift */; }; 07FBC9E628BE29C900ED65B4 /* ChainIssuesCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07FBC9E528BE29C900ED65B4 /* ChainIssuesCenter.swift */; }; 07FD95C027F4384900F07064 /* UIFont+dynamicSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07FD95BF27F4384900F07064 /* UIFont+dynamicSize.swift */; }; + 07FEC1342CAE624B003938C6 /* OnboardingMainViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07FEC1332CAE624B003938C6 /* OnboardingMainViewLayout.swift */; }; + 07FEC1362CAE6848003938C6 /* SelectEcosystemBannerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07FEC1352CAE6848003938C6 /* SelectEcosystemBannerView.swift */; }; 084DDCBC4CE8438770EB48DE /* ConfirmTransferRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD1C635488F941373CDBE377 /* ConfirmTransferRouter.swift */; }; 08C2974B3B5AAA757CE57E33 /* FeatureToggleListInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 769372B10E8D3C2BF7304FC3 /* FeatureToggleListInteractor.swift */; }; 093C10C88C0A209158EA75D1 /* UsernameSetupTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C5EF68BE0E29D2305CB7337 /* UsernameSetupTests.swift */; }; @@ -3605,6 +3607,8 @@ 07FBC9E128BE24E900ED65B4 /* MissingAccountFetcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissingAccountFetcher.swift; sourceTree = ""; }; 07FBC9E528BE29C900ED65B4 /* ChainIssuesCenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainIssuesCenter.swift; sourceTree = ""; }; 07FD95BF27F4384900F07064 /* UIFont+dynamicSize.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIFont+dynamicSize.swift"; sourceTree = ""; }; + 07FEC1332CAE624B003938C6 /* OnboardingMainViewLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingMainViewLayout.swift; sourceTree = ""; }; + 07FEC1352CAE6848003938C6 /* SelectEcosystemBannerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectEcosystemBannerView.swift; sourceTree = ""; }; 0892AD886F2BE499C075C701 /* MainNftContainerProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MainNftContainerProtocols.swift; sourceTree = ""; }; 08EB1FC5907B5165836318C4 /* AnalyticsValidatorsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsValidatorsTests.swift; sourceTree = ""; }; 09373C708FE543066B943E45 /* NftDetailsInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftDetailsInteractor.swift; sourceTree = ""; }; @@ -10240,6 +10244,7 @@ children = ( 8490140324A92F6D008F705E /* ViewModel */, 8490140224A92F6D008F705E /* OnboardingMainViewController.swift */, + 07FEC1332CAE624B003938C6 /* OnboardingMainViewLayout.swift */, 8490140624A92F6D008F705E /* OnbordingMain.xib */, 8490140824A92F6D008F705E /* OnboardingMainPresenter.swift */, 8490140924A92F6D008F705E /* OnboardingMainViewFactory.swift */, @@ -10607,6 +10612,7 @@ FA2222932BD2726F0031DE04 /* SkeletonLabel.swift */, FA2222952BD272A30031DE04 /* SkeletonLoadableView.swift */, FA887A482C1C19DB00CA720F /* WarningView.swift */, + 07FEC1352CAE6848003938C6 /* SelectEcosystemBannerView.swift */, ); path = View; sourceTree = ""; @@ -19351,6 +19357,7 @@ 830A27C5447348F1D202D996 /* CrowdloanContributionSetupInteractor.swift in Sources */, AE4C53E5268C6F8300B03CE8 /* ValidatorListFilterSortCell.swift in Sources */, 1062C095BC566A1EA8DE1C06 /* CrowdloanContributionSetupViewController.swift in Sources */, + 07FEC1362CAE6848003938C6 /* SelectEcosystemBannerView.swift in Sources */, FAF5E9DB27E46DAA005A3448 /* RootViewLayout.swift in Sources */, 8CDA490B390BFA261906F8FC /* CrowdloanContributionSetupViewLayout.swift in Sources */, 1BEADE77C6236CB3BF719A47 /* CrowdloanContributionSetupViewFactory.swift in Sources */, @@ -19771,6 +19778,7 @@ 0EFEBFB39CE4B0A61B6CD914 /* NftSendConfirmInteractor.swift in Sources */, FB6B2B551238260D754E036D /* NftSendConfirmViewController.swift in Sources */, 78E3117D66E60D72F2501F09 /* NftSendConfirmViewLayout.swift in Sources */, + 07FEC1342CAE624B003938C6 /* OnboardingMainViewLayout.swift in Sources */, 0701B8EC2C78F71800DCD395 /* TonConnectParameters.swift in Sources */, 991BF0BF6DD4D4243073E8C9 /* NftSendConfirmAssembly.swift in Sources */, 62843B73F8616209F57A66FC /* AssetNetworksProtocols.swift in Sources */, diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 0afa5b7de6..4c719a0138 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -123,8 +123,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/ashleymills/Reachability.swift", "state" : { - "revision" : "7cbd73f46a7dfaeca079e18df7324c6de6d1834a", - "version" : "5.2.3" + "revision" : "21d1dc412cfecbe6e34f1f4c4eb88d3f912654a6", + "version" : "5.2.4" } }, { @@ -142,7 +142,7 @@ "location" : "https://github.com/soramitsu/shared-features-spm.git", "state" : { "branch" : "FW-new-ecosystem", - "revision" : "bfd8294ccba6f2b79556a9b57d8892c9e5b54966" + "revision" : "5294ec2497b843208501b114aa1e9b59953f4aa6" } }, { diff --git a/fearless/Assets.xcassets/regularBanner.imageset/Contents.json b/fearless/Assets.xcassets/regularBanner.imageset/Contents.json new file mode 100644 index 0000000000..3986dd38d5 --- /dev/null +++ b/fearless/Assets.xcassets/regularBanner.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "regularBanner.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/fearless/Assets.xcassets/regularBanner.imageset/regularBanner.pdf b/fearless/Assets.xcassets/regularBanner.imageset/regularBanner.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ea01f0904a6350f41648bd977c5a82e2a9dddce1 GIT binary patch literal 5494 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 GIs6Am9HZy} literal 0 HcmV?d00001 diff --git a/fearless/Assets.xcassets/tonIcon.imageset/Contents.json b/fearless/Assets.xcassets/tonIcon.imageset/Contents.json new file mode 100644 index 0000000000..ecacd4f719 --- /dev/null +++ b/fearless/Assets.xcassets/tonIcon.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "tonIcon.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/fearless/Assets.xcassets/tonIcon.imageset/tonIcon.pdf b/fearless/Assets.xcassets/tonIcon.imageset/tonIcon.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1ed3ea59a775ef2dda83b09e00f4379a213c5052 GIT binary patch literal 1329 zcmY!laBvK;I`dFTEr~!5FAK2q*+Jp}3?dH8Gc~g0Xk%=`2}8p0@9GU6JCiZhWe} zEw(G~H;3B7*2xZ>Uw;1f-gn|j%EU;Px#xHNnPfA$J-`3|zc0t<-`^h-Uq6%m@74IT z@sHO|eqMC?$DXynH|Ksy-<+Es{D9rGf!S-+}<)(Rr8Wctn^&VLq_+$-d{2M{1`xg8c4dXq7bfexS(a51G3uK|qq3K73=Pt3xsy`+QSg?^uf9VLEOXYdyDjV7F|ZY$WHqrtPUm*Kr-Ux>G2u z)aAg}w2d`KEs7);;LND^{u?rRv8b zo4i+jj;ylb^ah^=flN=Ao1Ll7cx^RxL)X12ief#p_a-(R71H+$^82$!;Nuyin8Lbn z&y2KioqIQr?VIE|Bf|UH$p>c9HZNx#O*zrQ=^%9FaMV`Arip=zQaOwC*6%)|5#4=I zbGu%s+T@J6@9(Vo;+(I~u;%B!!%;kU-@Q2b(f4Naf0gbqr%kPKjEW(ZIICU8+;w$OLX%gZk*R)~&;Ci;-df>Z_lfW&lIF7QoF z$xL+0uTY3qFwipq0|dj^2quJJ!AuHDEzU13N=_|S0A)l_4gzH==lr~q)I6Y#pj-$O z3`i^jiYb^vg^=lc@`EJW+*0sJXj33 z5ack3$DI>P5_9s?QMFbSrKWKiD426WybmH3%uG#A3G&C@=fU7DgO3chjE#d;jo~H{iI5dj$b5k`HG%`~(A%UVF nl%HRs0P-+6fc1kjt5Sik2Nz(8MI~VG7#bRwbE&Gj`nv%DSg+)m literal 0 HcmV?d00001 diff --git a/fearless/Common/Extension/Model/AccountImportSource+ViewModel.swift b/fearless/Common/Extension/Model/AccountImportSource+ViewModel.swift index 051907a10f..c9cfd1d228 100644 --- a/fearless/Common/Extension/Model/AccountImportSource+ViewModel.swift +++ b/fearless/Common/Extension/Model/AccountImportSource+ViewModel.swift @@ -3,7 +3,7 @@ import Foundation extension AccountImportSource { func titleForLocale(_ locale: Locale) -> String { switch self { - case .mnemonic: + case .mnemonic, .tonMnemonic: return R.string.localizable .importMnemonic(preferredLanguages: locale.rLanguages) case .seed: diff --git a/fearless/Common/Model/AccountImportSource.swift b/fearless/Common/Model/AccountImportSource.swift index 6787fe0f21..08ab270d6d 100644 --- a/fearless/Common/Model/AccountImportSource.swift +++ b/fearless/Common/Model/AccountImportSource.swift @@ -1,6 +1,7 @@ import Foundation enum AccountImportSource: CaseIterable { + case tonMnemonic case mnemonic case seed case keystore diff --git a/fearless/Common/Model/AvailableExportOptionsProvider.swift b/fearless/Common/Model/AvailableExportOptionsProvider.swift index 35c173bad4..17c32d97ba 100644 --- a/fearless/Common/Model/AvailableExportOptionsProvider.swift +++ b/fearless/Common/Model/AvailableExportOptionsProvider.swift @@ -36,9 +36,6 @@ final class AvailableExportOptionsProvider: AvailableExportOptionsProviderProtoc options.append(.keystore) case .ton: - guard accountId != nil else { - break - } options.append(.mnemonic) } @@ -49,12 +46,16 @@ final class AvailableExportOptionsProvider: AvailableExportOptionsProviderProtoc for wallet: MetaAccountModel, accountId: AccountId? ) -> [ExportOption] { - let options = Ecosystem.allCases.map { - getAvailableExportOptions(for: wallet, accountId: accountId, ecosystem: $0) + switch wallet.ecosystem { + case .regular: + return [Ecosystem.ethereum, .ethereumBased, .substrate].map { + getAvailableExportOptions(for: wallet, accountId: accountId, ecosystem: $0) + } + .reduce([], +) + .uniq(predicate: { $0 }) + case .ton: + return getAvailableExportOptions(for: wallet, accountId: accountId, ecosystem: .ton) } - .reduce([], +) - .uniq(predicate: { $0 }) - return options } } diff --git a/fearless/Common/Operation/MetaAccountOperationFactory.swift b/fearless/Common/Operation/MetaAccountOperationFactory.swift index 2db5944ccf..a61b3a7a5a 100644 --- a/fearless/Common/Operation/MetaAccountOperationFactory.swift +++ b/fearless/Common/Operation/MetaAccountOperationFactory.swift @@ -247,9 +247,9 @@ private extension MetaAccountOperationFactory { } private func getTonQuery( - mnemonic: IRMnemonicProtocol + mnemonic: String ) throws -> TonAccountQuery { - let mnemonicArray = mnemonic.allWords() + let mnemonicArray = mnemonic.components(separatedBy: " ") let seed = Mnemonic.mnemonicToSeed(mnemonicArray: mnemonicArray) let keypair = try Mnemonic.mnemonicToPrivateKey(mnemonicArray: mnemonicArray) @@ -271,7 +271,8 @@ private extension MetaAccountOperationFactory { name: String, ecosystem: WalletEcosystem, isBackedUp: Bool, - defaultChainId: ChainModel.Id? = nil + defaultChainId: ChainModel.Id? = nil, + assetsVisibility: [AssetVisibility] = [] ) throws -> MetaAccountModel { return MetaAccountModel( metaId: UUID().uuidString, @@ -283,7 +284,7 @@ private extension MetaAccountOperationFactory { unusedChainIds: nil, selectedCurrency: Currency.defaultCurrency(), networkManagmentFilter: defaultChainId, - assetsVisibility: [], + assetsVisibility: assetsVisibility, hasBackup: isBackedUp, favouriteChainIds: [] ) @@ -307,12 +308,20 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { let metaAccount = try createMetaAccount( name: request.username, ecosystem: ecosystem, - isBackedUp: isBackedUp + isBackedUp: isBackedUp, + defaultChainId: "-239", + assetsVisibility: [.init( + assetId: ["-239", "2ba4723a-74b4-4a6f-a888-e51937773807-239"].joined(separator: " : "), + hidden: false + )] ) let metaId = metaAccount.metaId try saveSecretKey(tonQuery.privateKey, metaId: metaId, ecosystem: .ton) - try saveEntropy(request.mnemonic.entropy(), metaId: metaId) + guard let data = request.mnemonic.data(using: .utf8) else { + throw AccountCreateError.invalidMnemonicFormat + } + try saveEntropy(data, metaId: metaId) return metaAccount } @@ -545,10 +554,7 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { publicKey = query.publicKey try saveSeed(query.seed, metaId: metaId, ecosystem: request.ecosystem) case .ton: - let tonQuery = try getTonQuery(mnemonic: request.mnemonic) - accountId = tonQuery.publicKey - privateKey = tonQuery.privateKey - publicKey = tonQuery.publicKey + throw AccountOperationFactoryError.unsupportedImport } try saveSecretKey( diff --git a/fearless/Common/Protocols/AccountManagementPresentable.swift b/fearless/Common/Protocols/AccountManagementPresentable.swift index b23c7f77f7..6c5f1f7a98 100644 --- a/fearless/Common/Protocols/AccountManagementPresentable.swift +++ b/fearless/Common/Protocols/AccountManagementPresentable.swift @@ -12,7 +12,7 @@ protocol AccountManagementPresentable { extension AccountManagementPresentable { func showCreateNewWallet(from view: ControllerBackedProtocol?) { - guard let usernameSetup = UsernameSetupViewFactory.createViewForAdding() else { + guard let usernameSetup = OnboardingMainViewFactory.createViewForOnboarding() else { return } diff --git a/fearless/Common/View/SelectEcosystemBannerView.swift b/fearless/Common/View/SelectEcosystemBannerView.swift new file mode 100644 index 0000000000..094bf5ddb5 --- /dev/null +++ b/fearless/Common/View/SelectEcosystemBannerView.swift @@ -0,0 +1,79 @@ +import Foundation +import UIKit + +final class SelectEcosystemBannerView: UIView { + let titleLabel: UILabel = { + let label = UILabel() + label.textColor = R.color.colorWhite() + label.font = .h3Title + label.numberOfLines = 0 + return label + }() + + let imageView: UIImageView = { + let imageView = UIImageView() + imageView.contentMode = .scaleAspectFill + return imageView + }() + + let actionButton: TriangularedButton = { + let button = UIFactory.default.createMainActionButton() + button.triangularedView?.shadowOpacity = 0 + button.triangularedView?.fillColor = .clear + button.triangularedView?.highlightedFillColor = .clear + button.triangularedView?.strokeColor = R.color.colorWhite8()! + button.triangularedView?.highlightedStrokeColor = R.color.colorWhite8()! + button.triangularedView?.strokeWidth = 1 + + button.imageWithTitleView?.titleColor = R.color.colorWhite() + button.imageWithTitleView?.titleFont = .h6Title + return button + }() + + private let ecosystem: AccountCreateEcosystem + + init(ecosystem: AccountCreateEcosystem) { + self.ecosystem = ecosystem + super.init(frame: .zero) + backgroundColor = R.color.colorWhite8() + layer.cornerRadius = 15 + clipsToBounds = true + switch ecosystem { + case .regular: + imageView.image = R.image.regularBanner() + case .ton: + imageView.image = R.image.tonBanner() + } + setupLayout() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setupLayout() { + addSubview(imageView) + imageView.snp.makeConstraints { make in + make.height.equalTo(139) + make.edges.equalToSuperview() + } + + addSubview(titleLabel) + titleLabel.setContentHuggingPriority(.defaultHigh, for: .horizontal) + titleLabel.snp.makeConstraints { make in + make.top.equalToSuperview().offset(24) + make.leading.equalToSuperview().offset(24) + make.trailing.equalToSuperview().inset(24) + } + + addSubview(actionButton) + actionButton.snp.makeConstraints { make in + make.top.greaterThanOrEqualTo(titleLabel.snp.bottom).offset(UIConstants.defaultOffset) + make.leading.equalToSuperview().offset(24) + make.bottom.equalToSuperview().inset(24) + make.height.equalTo(32) + make.width.greaterThanOrEqualTo(62) + } + } +} diff --git a/fearless/Modules/AccountConfirm/BaseAccountConfirmInteractor.swift b/fearless/Modules/AccountConfirm/BaseAccountConfirmInteractor.swift index a7aa7755d7..4344f9086a 100644 --- a/fearless/Modules/AccountConfirm/BaseAccountConfirmInteractor.swift +++ b/fearless/Modules/AccountConfirm/BaseAccountConfirmInteractor.swift @@ -20,7 +20,7 @@ class BaseAccountConfirmInteractor { operationManager: OperationManagerProtocol ) { self.flow = flow - shuffledWords = flow?.mnemonic.allWords().shuffled() ?? [] + shuffledWords = flow?.mnemonicAllWordls.shuffled() ?? [] self.accountOperationFactory = accountOperationFactory self.accountRepository = accountRepository self.operationManager = operationManager @@ -37,7 +37,7 @@ extension BaseAccountConfirmInteractor: AccountConfirmInteractorInputProtocol { } func confirm(words: [String]) { - guard let confirmFlow = flow, words == confirmFlow.mnemonic.allWords() else { + guard let confirmFlow = flow, words == confirmFlow.mnemonicAllWordls else { presenter.didReceive( words: shuffledWords, afterConfirmationFail: true @@ -45,8 +45,8 @@ extension BaseAccountConfirmInteractor: AccountConfirmInteractorInputProtocol { return } switch confirmFlow { - case let .wallet(request): - createAccount(request, isBackuped: true) + case let .wallet(ecosystem): + createAccount(ecosystem: ecosystem, isBackuped: true) case let .chain(request): importUniqueChain(request) } @@ -58,7 +58,7 @@ extension BaseAccountConfirmInteractor: AccountConfirmInteractorInputProtocol { } switch confirmFlow { case let .wallet(request): - createAccount(request, isBackuped: false) + createAccount(ecosystem: request, isBackuped: false) case let .chain(request): importUniqueChain(request) } @@ -66,9 +66,15 @@ extension BaseAccountConfirmInteractor: AccountConfirmInteractorInputProtocol { } private extension BaseAccountConfirmInteractor { - func createAccount(_ request: MetaAccountImportMnemonicRequest, isBackuped: Bool) { - let operation = accountOperationFactory.newMetaAccountOperation(request: request, isBackedUp: isBackuped) - createAccountUsingOperation(operation) + func createAccount(ecosystem: (AccountConfirmFlowWalletEcosystemRequest), isBackuped: Bool) { + switch ecosystem { + case .regular(let metaAccountImportMnemonicRequest): + let operation = accountOperationFactory.newMetaAccountOperation(request: metaAccountImportMnemonicRequest, isBackedUp: isBackuped) + createAccountUsingOperation(operation) + case .ton(let metaAccountImportTonMnemonicRequest): + let operation = accountOperationFactory.newTonMetaAccountOperation(request: metaAccountImportTonMnemonicRequest, isBackedUp: isBackuped) + createAccountUsingOperation(operation) + } } func importUniqueChain(_ request: ChainAccountImportMnemonicRequest) { diff --git a/fearless/Modules/AccountConfirm/Model/AccountConfirmFlow.swift b/fearless/Modules/AccountConfirm/Model/AccountConfirmFlow.swift index 684905c725..453e881518 100644 --- a/fearless/Modules/AccountConfirm/Model/AccountConfirmFlow.swift +++ b/fearless/Modules/AccountConfirm/Model/AccountConfirmFlow.swift @@ -1,15 +1,26 @@ import IrohaCrypto +import SSFAccountManagment + +enum AccountConfirmFlowWalletEcosystemRequest { + case regular(MetaAccountImportMnemonicRequest) + case ton(MetaAccountImportTonMnemonicRequest) +} enum AccountConfirmFlow { - case wallet(MetaAccountImportMnemonicRequest) + case wallet(AccountConfirmFlowWalletEcosystemRequest) case chain(ChainAccountImportMnemonicRequest) - var mnemonic: IRMnemonicProtocol { + var mnemonicAllWordls: [String] { switch self { - case let .wallet(request): - return request.mnemonic + case let .wallet(ecosystem): + switch ecosystem { + case .regular(let metaAccountImportMnemonicRequest): + return metaAccountImportMnemonicRequest.mnemonic.allWords() + case .ton(let metaAccountImportTonMnemonicRequest): + return metaAccountImportTonMnemonicRequest.mnemonic.components(separatedBy: " ") + } case let .chain(request): - return request.mnemonic + return request.mnemonic.allWords() } } } diff --git a/fearless/Modules/AccountCreate/AccountCreateInteractor.swift b/fearless/Modules/AccountCreate/AccountCreateInteractor.swift index 2ef50bd182..8407de0501 100644 --- a/fearless/Modules/AccountCreate/AccountCreateInteractor.swift +++ b/fearless/Modules/AccountCreate/AccountCreateInteractor.swift @@ -1,27 +1,38 @@ import UIKit import IrohaCrypto import RobinHood +import TonSwift +import SSFModels final class AccountCreateInteractor { weak var presenter: AccountCreateInteractorOutputProtocol! + let ecosystem: AccountCreateEcosystem let mnemonicCreator: IRMnemonicCreatorProtocol init( + ecosystem: AccountCreateEcosystem, mnemonicCreator: IRMnemonicCreatorProtocol ) { + self.ecosystem = ecosystem self.mnemonicCreator = mnemonicCreator } } extension AccountCreateInteractor: AccountCreateInteractorInputProtocol { func setup() { - do { - let mnemonic = try mnemonicCreator.randomMnemonic(.entropy128) - - presenter.didReceive(mnemonic: mnemonic.allWords()) - } catch { - presenter.didReceiveMnemonicGeneration(error: error) + switch ecosystem { + case .regular: + do { + let mnemonic = try mnemonicCreator.randomMnemonic(.entropy128) + let allWords = mnemonic.allWords() + presenter.didReceive(mnemonic: allWords) + } catch { + presenter.didReceiveMnemonicGeneration(error: error) + } + case .ton: + let allWords = TonSwift.Mnemonic.mnemonicNew(wordsCount: 24) + presenter.didReceive(mnemonic: allWords) } } diff --git a/fearless/Modules/AccountCreate/AccountCreatePresenter.swift b/fearless/Modules/AccountCreate/AccountCreatePresenter.swift index bb1c28ffbf..6f6c0b8536 100644 --- a/fearless/Modules/AccountCreate/AccountCreatePresenter.swift +++ b/fearless/Modules/AccountCreate/AccountCreatePresenter.swift @@ -1,4 +1,5 @@ import UIKit +import SSFAccountManagment import IrohaCrypto import SoraFoundation import SSFUtils @@ -13,6 +14,7 @@ final class AccountCreatePresenter { let usernameSetup: UsernameSetupModel var flow: AccountCreateFlow + let ecosystem: AccountCreateEcosystem private var mnemonic: [String]? private var selectedCryptoType: CryptoType = .sr25519 @@ -20,11 +22,13 @@ final class AccountCreatePresenter { private var ethereumDerivationPathViewModel: InputViewModelProtocol? init( + ecosystem: AccountCreateEcosystem, usernameSetup: UsernameSetupModel, wireframe: AccountCreateWireframeProtocol, interactor: AccountCreateInteractorInputProtocol, flow: AccountCreateFlow ) { + self.ecosystem = ecosystem self.usernameSetup = usernameSetup self.wireframe = wireframe self.interactor = interactor @@ -230,10 +234,6 @@ extension AccountCreatePresenter: AccountCreatePresenterProtocol { else { return } - guard let mnemonic = interactor.createMnemonicFromString(mnemonic.joined(separator: " ")) else { - didReceiveMnemonicGeneration(error: AccountCreateError.invalidMnemonicFormat) - return - } guard substrateViewModel.inputHandler.completed else { view?.didValidateSubstrateDerivationPath(.invalid) @@ -251,19 +251,39 @@ extension AccountCreatePresenter: AccountCreatePresenterProtocol { let substrateDerivationPath = (substrateDerivationPathViewModel?.inputHandler.value).nonEmpty(or: "") switch unwrappedFlow { case .wallet: - let request = MetaAccountImportMnemonicRequest( - mnemonic: mnemonic, - username: usernameSetup.username, - substrateDerivationPath: substrateDerivationPath, - ethereumDerivationPath: ethereumDerivationPath, - cryptoType: selectedCryptoType, - defaultChainId: nil - ) - wireframe.confirm( - from: view, - flow: .wallet(request) - ) + switch ecosystem { + case .regular: + guard let mnemonic = interactor.createMnemonicFromString(mnemonic.joined(separator: " ")) else { + didReceiveMnemonicGeneration(error: AccountCreateError.invalidMnemonicFormat) + return + } + let request = MetaAccountImportMnemonicRequest( + mnemonic: mnemonic, + username: usernameSetup.username, + substrateDerivationPath: substrateDerivationPath, + ethereumDerivationPath: ethereumDerivationPath, + cryptoType: selectedCryptoType, + defaultChainId: nil + ) + wireframe.confirm( + from: view, + flow: .wallet(.regular(request)) + ) + case .ton: + let request = MetaAccountImportTonMnemonicRequest( + mnemonic: mnemonic.joined(separator: " "), + username: usernameSetup.username + ) + wireframe.confirm( + from: view, + flow: .wallet(.ton(request)) + ) + } case let .chain(model): + guard let mnemonic = interactor.createMnemonicFromString(mnemonic.joined(separator: " ")) else { + didReceiveMnemonicGeneration(error: AccountCreateError.invalidMnemonicFormat) + return + } let request = ChainAccountImportMnemonicRequest( mnemonic: mnemonic, username: usernameSetup.username, @@ -275,6 +295,10 @@ extension AccountCreatePresenter: AccountCreatePresenterProtocol { ) wireframe.confirm(from: view, flow: .chain(request)) case .backup: + guard let mnemonic = interactor.createMnemonicFromString(mnemonic.joined(separator: " ")) else { + didReceiveMnemonicGeneration(error: AccountCreateError.invalidMnemonicFormat) + return + } let request = MetaAccountImportMnemonicRequest( mnemonic: mnemonic, username: usernameSetup.username, diff --git a/fearless/Modules/AccountCreate/AccountCreateProtocols.swift b/fearless/Modules/AccountCreate/AccountCreateProtocols.swift index e812453bfb..fead243805 100644 --- a/fearless/Modules/AccountCreate/AccountCreateProtocols.swift +++ b/fearless/Modules/AccountCreate/AccountCreateProtocols.swift @@ -58,13 +58,16 @@ protocol AccountCreateWireframeProtocol: SheetAlertPresentable, ErrorPresentable protocol AccountCreateViewFactoryProtocol: AnyObject { static func createViewForOnboarding( + ecosystem: AccountCreateEcosystem, model: UsernameSetupModel, flow: AccountCreateFlow ) -> AccountCreateViewProtocol? static func createViewForAdding( + ecosystem: AccountCreateEcosystem, model: UsernameSetupModel ) -> AccountCreateViewProtocol? static func createViewForSwitch( + ecosystem: AccountCreateEcosystem, model: UsernameSetupModel ) -> AccountCreateViewProtocol? } diff --git a/fearless/Modules/AccountCreate/AccountCreateViewController.swift b/fearless/Modules/AccountCreate/AccountCreateViewController.swift index e7f422042d..7e49d9b366 100644 --- a/fearless/Modules/AccountCreate/AccountCreateViewController.swift +++ b/fearless/Modules/AccountCreate/AccountCreateViewController.swift @@ -10,12 +10,14 @@ final class AccountCreateViewController: UIViewController, ViewHolder { private var substrateDerivationPathModel: InputViewModelProtocol? private var ethereumDerivationPathModel: InputViewModelProtocol? private var isFirstLayoutCompleted: Bool = false + private let ecosystem: AccountCreateEcosystem private lazy var locale: Locale = { localizationManager?.selectedLocale ?? Locale.current }() - init(presenter: AccountCreatePresenterProtocol) { + init(ecosystem: AccountCreateEcosystem, presenter: AccountCreatePresenterProtocol) { + self.ecosystem = ecosystem self.presenter = presenter super.init(nibName: nil, bundle: nil) } @@ -37,6 +39,15 @@ final class AccountCreateViewController: UIViewController, ViewHolder { setupActions() presenter.setup() + switch ecosystem { + case .regular: + break + case .ton: + // TODO: - Ton google backup + rootView.backupButton.isHidden = true + rootView.expandableControl.isHidden = true + rootView.expandableControlContainerView.isHidden = true + } } override func viewWillAppear(_ animated: Bool) { diff --git a/fearless/Modules/AccountCreate/AccountCreateViewFactory.swift b/fearless/Modules/AccountCreate/AccountCreateViewFactory.swift index 2d75f37716..3b8e616beb 100644 --- a/fearless/Modules/AccountCreate/AccountCreateViewFactory.swift +++ b/fearless/Modules/AccountCreate/AccountCreateViewFactory.swift @@ -2,15 +2,23 @@ import Foundation import IrohaCrypto import SoraFoundation import SoraKeystore +import SSFModels + +enum AccountCreateEcosystem { + case regular + case ton +} final class AccountCreateViewFactory: AccountCreateViewFactoryProtocol { static func createViewForOnboarding( + ecosystem: AccountCreateEcosystem, model: UsernameSetupModel, flow: AccountCreateFlow ) -> AccountCreateViewProtocol? { let wireframe = AccountCreateWireframe() return createViewForUsername( + ecosystem: ecosystem, model: model, flow: flow, wireframe: wireframe @@ -18,11 +26,13 @@ final class AccountCreateViewFactory: AccountCreateViewFactoryProtocol { } static func createViewForAdding( + ecosystem: AccountCreateEcosystem, model: UsernameSetupModel ) -> AccountCreateViewProtocol? { let wireframe = AddAccount.AccountCreateWireframe() return createViewForUsername( + ecosystem: ecosystem, model: model, flow: .wallet, wireframe: wireframe @@ -30,10 +40,12 @@ final class AccountCreateViewFactory: AccountCreateViewFactoryProtocol { } static func createViewForSwitch( + ecosystem: AccountCreateEcosystem, model: UsernameSetupModel ) -> AccountCreateViewProtocol? { let wireframe = SwitchAccount.AccountCreateWireframe() return createViewForUsername( + ecosystem: ecosystem, model: model, flow: .wallet, wireframe: wireframe @@ -41,18 +53,20 @@ final class AccountCreateViewFactory: AccountCreateViewFactoryProtocol { } static func createViewForUsername( + ecosystem: AccountCreateEcosystem, model: UsernameSetupModel, flow: AccountCreateFlow, wireframe: AccountCreateWireframeProtocol ) -> AccountCreateViewProtocol? { - let interactor = AccountCreateInteractor(mnemonicCreator: IRMnemonicCreator()) + let interactor = AccountCreateInteractor(ecosystem: ecosystem, mnemonicCreator: IRMnemonicCreator()) let presenter = AccountCreatePresenter( + ecosystem: ecosystem, usernameSetup: model, wireframe: wireframe, interactor: interactor, flow: flow ) - let view = AccountCreateViewController(presenter: presenter) + let view = AccountCreateViewController(ecosystem: ecosystem, presenter: presenter) presenter.view = view interactor.presenter = presenter diff --git a/fearless/Modules/AccountCreate/AccountCreateViewLayout.swift b/fearless/Modules/AccountCreate/AccountCreateViewLayout.swift index 7561c87e33..e7a215c421 100644 --- a/fearless/Modules/AccountCreate/AccountCreateViewLayout.swift +++ b/fearless/Modules/AccountCreate/AccountCreateViewLayout.swift @@ -138,7 +138,7 @@ final class AccountCreateViewLayout: UIView { return label }() - private let expandableControlContainerView: BorderedContainerView = { + let expandableControlContainerView: BorderedContainerView = { let view = UIFactory().createBorderedContainerView() view.backgroundColor = R.color.colorBlack19() view.borderType = .bottom @@ -147,7 +147,7 @@ final class AccountCreateViewLayout: UIView { return view }() - private let expandableControl: ExpandableActionControl = { + let expandableControl: ExpandableActionControl = { let view = UIFactory().createExpandableActionControl() view.backgroundColor = R.color.colorBlack19() view.translatesAutoresizingMaskIntoConstraints = false diff --git a/fearless/Modules/AccountCreate/Model/AccountCreateChainType.swift b/fearless/Modules/AccountCreate/Model/AccountCreateChainType.swift index 8336692a40..b30ee5ed8f 100644 --- a/fearless/Modules/AccountCreate/Model/AccountCreateChainType.swift +++ b/fearless/Modules/AccountCreate/Model/AccountCreateChainType.swift @@ -5,6 +5,7 @@ enum AccountCreateChainType { case substrate case ethereum case both + case ton } extension AccountCreateChainType { @@ -12,14 +13,14 @@ extension AccountCreateChainType { switch self { case .substrate, .both: return true - case .ethereum: + case .ethereum, .ton: return false } } var includeEthereum: Bool { switch self { - case .ethereum, .both: + case .ethereum, .both, .ton: return true case .substrate: return false @@ -28,6 +29,7 @@ extension AccountCreateChainType { } enum AccountCreationStep { + case ton case substrate case ethereum(data: SubstrateStepData) diff --git a/fearless/Modules/AccountImport/AccountImportPresenter.swift b/fearless/Modules/AccountImport/AccountImportPresenter.swift index 95815613dc..74783462b1 100644 --- a/fearless/Modules/AccountImport/AccountImportPresenter.swift +++ b/fearless/Modules/AccountImport/AccountImportPresenter.swift @@ -25,7 +25,7 @@ enum AccountImportFlow { return model.chain.isEthereumBased case let .wallet(step): switch step { - case .substrate: + case .substrate, .ton: return false case .ethereum: return true @@ -159,6 +159,8 @@ private extension AccountImportPresenter { case let .ethereum(data): selectedCryptoType = data.cryptoType view?.setSource(type: selectedSourceType, chainType: .ethereum, selectable: false) + case .ton: + view?.setSource(type: .tonMnemonic, chainType: .ton, selectable: false) } } @@ -170,7 +172,7 @@ private extension AccountImportPresenter { username = model.meta.name case let .wallet(step): switch step { - case .substrate: + case .substrate, .ton: username = preferredData?.username ?? "" case let .ethereum(data): username = data.username @@ -191,7 +193,7 @@ private extension AccountImportPresenter { let locale = localizationManager?.selectedLocale ?? Locale.current switch selectedSourceType { - case .mnemonic: + case .mnemonic, .tonMnemonic: let placeholder = R.string.localizable .importMnemonic(preferredLanguages: locale.rLanguages) let normalizer = MnemonicTextNormalizer() @@ -260,7 +262,7 @@ private extension AccountImportPresenter { } switch selectedSourceType { - case .mnemonic, .seed: + case .mnemonic, .seed, .tonMnemonic: passwordViewModel = nil case .keystore: let viewModel = InputViewModel(inputHandler: InputHandler(required: true)) @@ -278,7 +280,7 @@ private extension AccountImportPresenter { return } switch selectedSourceType { - case .mnemonic: + case .mnemonic, .tonMnemonic: applyCryptoTypeViewModel(cryptoType) switch flow { @@ -539,6 +541,15 @@ private extension AccountImportPresenter { defaultChainId: nil ) interactor.importMetaAccount(request: request) + case (.tonMnemonic, .ton): + let mnemonicString = data.source + let request = MetaAccountImportRequest( + source: .ton(mnemonic: mnemonicString), + username: data.username, + cryptoType: .ed25519, + defaultChainId: nil + ) + interactor.importMetaAccount(request: request) case (.seed, .substrate): askIfNeedAddEthereum { [weak self] in self?.showSecondStep(data: data) @@ -607,6 +618,7 @@ private extension AccountImportPresenter { defaultChainId: nil ) interactor.importMetaAccount(request: request) + default: break } } @@ -647,6 +659,8 @@ private extension AccountImportPresenter { password: data.password ) source = UniqueChainImportRequestSource.keystore(data: sourceData) + case .tonMnemonic: + return } let request = UniqueChainImportRequest( source: source, @@ -664,7 +678,7 @@ private extension AccountImportPresenter { } switch selectedSourceType { - case .mnemonic: + case .mnemonic, .tonMnemonic: return validateMnemonic(value: value) case .seed: return validateSeed(value: value) diff --git a/fearless/Modules/AccountImport/AccountImportViewController.swift b/fearless/Modules/AccountImport/AccountImportViewController.swift index f3cb56645d..bd99d1f521 100644 --- a/fearless/Modules/AccountImport/AccountImportViewController.swift +++ b/fearless/Modules/AccountImport/AccountImportViewController.swift @@ -233,13 +233,18 @@ extension AccountImportViewController: AccountImportViewProtocol { rootView.textViewContainer.isHidden = false + rootView.passwordContainerView.isHidden = true + rootView.uploadViewContainer.isHidden = true + case .tonMnemonic: + rootView.setAdvancedVisibility(false) + rootView.textViewContainer.isHidden = false rootView.passwordContainerView.isHidden = true rootView.uploadViewContainer.isHidden = true case .seed: switch chainType { case .substrate, .both: rootView.setAdvancedVisibility(true) - case .ethereum: + case .ethereum, .ton: rootView.setAdvancedVisibility(false) } rootView.textViewContainer.isHidden = false diff --git a/fearless/Modules/AccountImport/BaseAccountImportInteractor.swift b/fearless/Modules/AccountImport/BaseAccountImportInteractor.swift index 8bbc3e8312..842348ed11 100644 --- a/fearless/Modules/AccountImport/BaseAccountImportInteractor.swift +++ b/fearless/Modules/AccountImport/BaseAccountImportInteractor.swift @@ -1,4 +1,5 @@ import UIKit +import SSFAccountManagment import IrohaCrypto import SSFUtils import RobinHood @@ -107,6 +108,15 @@ extension BaseAccountImportInteractor: AccountImportInteractorInputProtocol { cryptoType: request.cryptoType ) operation = accountOperationFactory.newMetaAccountOperation(request: request, isBackedUp: true) + case let .ton(mnemonic): + let request = MetaAccountImportTonMnemonicRequest( + mnemonic: mnemonic, + username: request.username + ) + operation = accountOperationFactory.newTonMetaAccountOperation( + request: request, + isBackedUp: true + ) } importAccountUsingOperation(operation) } diff --git a/fearless/Modules/AccountImport/Model/AccountImportRequest.swift b/fearless/Modules/AccountImport/Model/AccountImportRequest.swift index 6d2d7e5c54..69041bed4a 100644 --- a/fearless/Modules/AccountImport/Model/AccountImportRequest.swift +++ b/fearless/Modules/AccountImport/Model/AccountImportRequest.swift @@ -53,6 +53,7 @@ enum MetaAccountImportRequestSource { case mnemonic(data: MnemonicImportRequestData) case seed(data: SeedImportRequestData) case keystore(data: KeystoreImportRequestData) + case ton(mnemonic: String) } struct MetaAccountImportRequest { diff --git a/fearless/Modules/AddAccount/Wireframes/AddAccount+OnboardingMainWireframe.swift b/fearless/Modules/AddAccount/Wireframes/AddAccount+OnboardingMainWireframe.swift index af1f038ee2..8dc36f7777 100644 --- a/fearless/Modules/AddAccount/Wireframes/AddAccount+OnboardingMainWireframe.swift +++ b/fearless/Modules/AddAccount/Wireframes/AddAccount+OnboardingMainWireframe.swift @@ -34,8 +34,8 @@ extension AddAccount { view?.controller.navigationController?.pushViewController(controller, animated: true) } - func showSignup(from view: OnboardingMainViewProtocol?) { - guard let usernameSetup = UsernameSetupViewFactory.createViewForAdding() else { + func showSignup(from view: OnboardingMainViewProtocol?, ecosystem: AccountCreateEcosystem) { + guard let usernameSetup = UsernameSetupViewFactory.createViewForAdding(ecosystem: ecosystem) else { return } @@ -46,6 +46,7 @@ extension AddAccount { func showAccountRestore( defaultSource: AccountImportSource, + flow: AccountImportFlow, from view: OnboardingMainViewProtocol? ) { guard let restorationController = AccountImportViewFactory @@ -64,7 +65,7 @@ extension AddAccount { let navigationController = view?.controller.navigationController, navigationController.topViewController == view?.controller, navigationController.presentedViewController == nil { - showAccountRestore(defaultSource: .mnemonic, from: view) + showAccountRestore(defaultSource: .mnemonic, flow: .wallet(step: .substrate), from: view) } } diff --git a/fearless/Modules/AddAccount/Wireframes/AddAccount+UsernameSetupWireframe.swift b/fearless/Modules/AddAccount/Wireframes/AddAccount+UsernameSetupWireframe.swift index a4d726af46..23a5bffc89 100644 --- a/fearless/Modules/AddAccount/Wireframes/AddAccount+UsernameSetupWireframe.swift +++ b/fearless/Modules/AddAccount/Wireframes/AddAccount+UsernameSetupWireframe.swift @@ -5,9 +5,10 @@ extension AddAccount { func proceed( from view: UsernameSetupViewProtocol?, flow _: AccountCreateFlow = .wallet, - model: UsernameSetupModel + model: UsernameSetupModel, + ecosystem: AccountCreateEcosystem ) { - guard let accountCreation = AccountCreateViewFactory.createViewForAdding(model: model) else { + guard let accountCreation = AccountCreateViewFactory.createViewForAdding(ecosystem: ecosystem, model: model) else { return } diff --git a/fearless/Modules/BackupCreatePassword/BackupCreatePasswordInteractor.swift b/fearless/Modules/BackupCreatePassword/BackupCreatePasswordInteractor.swift index d1be108b8d..9a7a88dc4f 100644 --- a/fearless/Modules/BackupCreatePassword/BackupCreatePasswordInteractor.swift +++ b/fearless/Modules/BackupCreatePassword/BackupCreatePasswordInteractor.swift @@ -48,7 +48,8 @@ final class BackupCreatePasswordInteractor: BaseAccountConfirmInteractor { var flow: AccountConfirmFlow? if let mnemonicRequest = createPasswordFlow.mnemonicRequest { - flow = .wallet(mnemonicRequest) + // TODO: - Ton google backup + flow = .wallet(.regular(mnemonicRequest)) } super.init( @@ -94,8 +95,14 @@ final class BackupCreatePasswordInteractor: BaseAccountConfirmInteractor { settings.setup() eventCenter.notify(with: SelectedAccountChanged(account: wallet)) switch flow { - case let .wallet(request): - saveBackupAccount(wallet: wallet, requestType: .mnemonic(request)) + case let .wallet(importEcosystem): + switch importEcosystem { + case let .regular(request): + saveBackupAccount(wallet: wallet, requestType: .mnemonic(request)) + case .ton(_): + // TODO: - Ton google backup + break + } default: break } @@ -131,7 +138,6 @@ final class BackupCreatePasswordInteractor: BaseAccountConfirmInteractor { ) { guard let substrateCryptoType = wallet.ecosystem.substrateCryptoType, - let substratePublicKey = wallet.ecosystem.substratePublicKey, let substratePublicKey = wallet.ecosystem.substratePublicKey else { return @@ -167,7 +173,6 @@ final class BackupCreatePasswordInteractor: BaseAccountConfirmInteractor { ) { guard let substrateCryptoType = wallet.ecosystem.substrateCryptoType, - let substratePublicKey = wallet.ecosystem.substratePublicKey, let substratePublicKey = wallet.ecosystem.substratePublicKey else { return diff --git a/fearless/Modules/BackupRiskWarnings/BackupRiskWarningsRouter.swift b/fearless/Modules/BackupRiskWarnings/BackupRiskWarningsRouter.swift index dbdf3f49f0..ec218633c4 100644 --- a/fearless/Modules/BackupRiskWarnings/BackupRiskWarningsRouter.swift +++ b/fearless/Modules/BackupRiskWarnings/BackupRiskWarningsRouter.swift @@ -4,9 +4,8 @@ final class BackupRiskWarningsRouter: BackupRiskWarningsRouterInput { func showCreateAccount( usernameModel: UsernameSetupModel, from view: ControllerBackedProtocol? - ) { - guard let controller = AccountCreateViewFactory - .createViewForOnboarding(model: usernameModel, flow: .backup)?.controller else { + ) { // TODO: - Select ecosystem + guard let controller = AccountCreateViewFactory.createViewForOnboarding(ecosystem: .regular, model: usernameModel, flow: .backup)?.controller else { return } diff --git a/fearless/Modules/BackupWallet/BackupWalletPresenter.swift b/fearless/Modules/BackupWallet/BackupWalletPresenter.swift index 19eabd8036..661d6fbef1 100644 --- a/fearless/Modules/BackupWallet/BackupWalletPresenter.swift +++ b/fearless/Modules/BackupWallet/BackupWalletPresenter.swift @@ -252,8 +252,14 @@ extension BackupWalletPresenter: BackupWalletViewOutput { guard !googleAuthorized else { return } - view?.didStartLoading() - interactor.viewDidAppear() + // TODO: Ton google backup + switch wallet.ecosystem { + case .regular: + view?.didStartLoading() + interactor.viewDidAppear() + case .ton: + break + } } func backButtonDidTapped() { diff --git a/fearless/Modules/BackupWallet/BackupWalletViewModelFactory.swift b/fearless/Modules/BackupWallet/BackupWalletViewModelFactory.swift index 0e1e2caeb1..72c466e261 100644 --- a/fearless/Modules/BackupWallet/BackupWalletViewModelFactory.swift +++ b/fearless/Modules/BackupWallet/BackupWalletViewModelFactory.swift @@ -64,6 +64,7 @@ final class BackupWalletViewModelFactory: BackupWalletViewModelFactoryProtocol { ) let logoutViewModel = createLogoutViewModel(locale: locale) return ProfileViewModel( + wallet: wallet, profileUserViewModel: profileUserViewModel, profileOptionViewModel: profileOptionViewModel, logoutViewModel: logoutViewModel @@ -180,6 +181,7 @@ final class BackupWalletViewModelFactory: BackupWalletViewModelFactoryProtocol { return WalletsManagmentCellViewModel( isSelected: false, walletName: wallet.name, + icon: wallet.icon(), fiatBalance: fiatBalance, dayChange: dayChange, accountScoreViewModel: accountScoreViewModel diff --git a/fearless/Modules/Banners/BannersPresenter.swift b/fearless/Modules/Banners/BannersPresenter.swift index 828ca7f5bc..d178812880 100644 --- a/fearless/Modules/Banners/BannersPresenter.swift +++ b/fearless/Modules/Banners/BannersPresenter.swift @@ -119,12 +119,11 @@ extension BannersPresenter: BannersViewOutput { } func didCloseBanner(_ banner: Banners) { - guard let wallet = wallet else { - return - } - switch banner { case .backup: + guard let wallet = wallet else { + return + } showNotBackedUpAlert(wallet: wallet) case .buyXor: break diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift index 37aad634e4..1527cf0775 100644 --- a/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift @@ -73,6 +73,7 @@ final class ConnectedAccountsViewModelFactoryImpl: ConnectedAccountsViewModelFac return WalletsManagmentCellViewModel( isSelected: false, walletName: wallet.name, + icon: wallet.icon(), fiatBalance: fiatBalance, dayChange: dayChange, accountScoreViewModel: nil @@ -88,7 +89,7 @@ final class ConnectedAccountsViewModelFactoryImpl: ConnectedAccountsViewModelFac let mapped = chains.reduce([Ecosystem: [ChainModel]]()) { partialResult, chain in var part = partialResult switch chain.ecosystem { - case .substrate, .ethereum, .ton: + case .substrate, .ethereum: var possibleValues = partialResult[chain.ecosystem] ?? [] possibleValues.append(chain) part[chain.ecosystem] = possibleValues @@ -96,6 +97,8 @@ final class ConnectedAccountsViewModelFactoryImpl: ConnectedAccountsViewModelFac var possibleValues = partialResult[.ethereum] ?? [] possibleValues.append(chain) part[.ethereum] = possibleValues + case .ton: + break } return part } diff --git a/fearless/Modules/Export/ExportGenericView/ExportGenericViewController.swift b/fearless/Modules/Export/ExportGenericView/ExportGenericViewController.swift index 71e69b9407..68ced83020 100644 --- a/fearless/Modules/Export/ExportGenericView/ExportGenericViewController.swift +++ b/fearless/Modules/Export/ExportGenericView/ExportGenericViewController.swift @@ -45,7 +45,15 @@ final class ExportGenericViewController: UIViewController, ImportantViewProtocol return true } switch (option, flow) { - case (.mnemonic, _): + case let (.mnemonic, flow): + if case let .multiple(wallet, _) = flow { + switch flow.wallet.ecosystem { + case .regular: + return true + case .ton: + return false + } + } return true case let (.seed, flow): if case let .single(chain, _, _) = flow, chain.isEthereumBased { diff --git a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicData.swift b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicData.swift index 230869caf2..0134ff7eaa 100644 --- a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicData.swift +++ b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicData.swift @@ -4,7 +4,7 @@ import SSFUtils import SSFModels struct ExportMnemonicData { - let mnemonic: IRMnemonicProtocol + let mnemonic: [String] let derivationPath: String? let cryptoType: CryptoType? let chain: ChainModel diff --git a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicInteractor.swift b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicInteractor.swift index 85d3c86b53..3f431fd0c9 100644 --- a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicInteractor.swift +++ b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicInteractor.swift @@ -4,6 +4,7 @@ import RobinHood import IrohaCrypto import SSFUtils import SSFModels +import TonSwift enum ExportMnemonicInteractorError: Error { case missingAccount @@ -37,7 +38,18 @@ extension ExportMnemonicInteractor: ExportMnemonicInteractorInputProtocol { let entropyTag = KeystoreTagV2.entropyTagForMetaId(wallet.metaId, accountId: accountId) let entropy = try keystore.fetchKey(for: entropyTag) - let mnemonic = try IRMnemonicCreator().mnemonic(fromEntropy: entropy) + let allWords: [String] + switch wallet.ecosystem { + case .regular: + let mnemonic = try IRMnemonicCreator().mnemonic(fromEntropy: entropy) + allWords = mnemonic.allWords() + case .ton: + guard let mnemonic = String(data: entropy, encoding: .utf8) else { + return + } + allWords = mnemonic.components(separatedBy: " ") + } + let derivationPathTag = chainAccount.chain.isEthereumBased ? KeystoreTagV2.ethereumDerivationTagForMetaId(wallet.metaId, accountId: accountId) : KeystoreTagV2.substrateDerivationTagForMetaId(wallet.metaId, accountId: accountId) @@ -45,7 +57,7 @@ extension ExportMnemonicInteractor: ExportMnemonicInteractorInputProtocol { let isEthereum = chainAccount.account.ecosystem.isEthereum || chainAccount.account.ecosystem.isEthereumBased let data = ExportMnemonicData( - mnemonic: mnemonic, + mnemonic: allWords, derivationPath: derivationPath, cryptoType: isEthereum ? nil : chainAccount.account.cryptoType, chain: chainAccount.chain @@ -72,6 +84,7 @@ extension ExportMnemonicInteractor: ExportMnemonicInteractorInputProtocol { return } self?.fetchExportData( + ecosystem: wallet.ecosystem, metaId: wallet.metaId, accountId: response.isChainAccount ? accountId : nil, cryptoType: response.cryptoType, @@ -84,6 +97,7 @@ extension ExportMnemonicInteractor: ExportMnemonicInteractorInputProtocol { } private func fetchExportData( + ecosystem: WalletEcosystem, metaId: String, accountId: AccountId?, cryptoType: CryptoType, @@ -95,14 +109,24 @@ extension ExportMnemonicInteractor: ExportMnemonicInteractorInputProtocol { throw ExportMnemonicInteractorError.missingEntropy } - let mnemonic = try IRMnemonicCreator().mnemonic(fromEntropy: entropy) + let allWords: [String] + switch ecosystem { + case .regular: + let mnemonic = try IRMnemonicCreator().mnemonic(fromEntropy: entropy) + allWords = mnemonic.allWords() + case .ton: + guard let mnemonic = String(data: entropy, encoding: .utf8) else { + throw ExportMnemonicInteractorError.missingEntropy + } + allWords = mnemonic.components(separatedBy: " ") + } let derivationPathTag = chain.isEthereumBased ? KeystoreTagV2.ethereumDerivationTagForMetaId(metaId, accountId: accountId) : KeystoreTagV2.substrateDerivationTagForMetaId(metaId, accountId: accountId) let derivationPath: String? = try self?.keystore.fetchDeriviationForAddress(derivationPathTag) return ExportMnemonicData( - mnemonic: mnemonic, + mnemonic: allWords, derivationPath: derivationPath, cryptoType: cryptoType, chain: chain diff --git a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicPresenter.swift b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicPresenter.swift index 437a746ec3..65aad2ed8a 100644 --- a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicPresenter.swift +++ b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicPresenter.swift @@ -32,7 +32,7 @@ final class ExportMnemonicPresenter { text = R.string.localizable .exportMnemonicWithDpTemplate( exportData.chain.name, - exportData.mnemonic.toString(), + exportData.mnemonic.joined(separator: " "), derivationPath, preferredLanguages: locale.rLanguages ) @@ -40,7 +40,7 @@ final class ExportMnemonicPresenter { text = R.string.localizable .exportMnemonicWithoutDpTemplate( exportData.chain.name, - exportData.mnemonic.toString(), + exportData.mnemonic.joined(separator: " "), preferredLanguages: locale.rLanguages ) } @@ -108,7 +108,7 @@ extension ExportMnemonicPresenter: ExportMnemonicInteractorOutputProtocol { chain: exportData.chain, cryptoType: exportData.cryptoType, derivationPath: exportData.derivationPath, - mnemonic: exportData.mnemonic.allWords(), + mnemonic: exportData.mnemonic, ecosystem: exportData.chain.ecosystem ) } diff --git a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicProtocols.swift b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicProtocols.swift index 0ff0b13abf..44305967c1 100644 --- a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicProtocols.swift +++ b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicProtocols.swift @@ -14,7 +14,7 @@ protocol ExportMnemonicInteractorOutputProtocol: AnyObject { protocol ExportMnemonicWireframeProtocol: ExportGenericWireframeProtocol { func close(view: ExportGenericViewProtocol?) func openConfirmationForMnemonic( - _ mnemonic: IRMnemonicProtocol, + _ mnemonic: [String], wallet: MetaAccountModel, from view: ExportGenericViewProtocol? ) diff --git a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicWireframe.swift b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicWireframe.swift index d11b7f1460..57ef88b905 100644 --- a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicWireframe.swift +++ b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicWireframe.swift @@ -4,7 +4,7 @@ import SSFModels final class ExportMnemonicWireframe: ExportMnemonicWireframeProtocol { func openConfirmationForMnemonic( - _ mnemonic: IRMnemonicProtocol, + _ mnemonic: [String], wallet: MetaAccountModel, from view: ExportGenericViewProtocol? ) { diff --git a/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmInteractor.swift b/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmInteractor.swift index 3e3c584247..a6eef718dd 100644 --- a/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmInteractor.swift +++ b/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmInteractor.swift @@ -5,14 +5,14 @@ import SSFModels final class ExportMnemonicConfirmInteractor { weak var presenter: AccountConfirmInteractorOutputProtocol! - private let mnemonic: IRMnemonicProtocol + private let mnemonic: [String] private let shuffledWords: [String] private let settings: SelectedWalletSettings private let wallet: MetaAccountModel private let eventCenter: EventCenterProtocol init( - mnemonic: IRMnemonicProtocol, + mnemonic: [String], settings: SelectedWalletSettings, wallet: MetaAccountModel, eventCenter: EventCenterProtocol @@ -21,7 +21,7 @@ final class ExportMnemonicConfirmInteractor { self.settings = settings self.wallet = wallet self.eventCenter = eventCenter - shuffledWords = mnemonic.allWords().shuffled() + shuffledWords = mnemonic.shuffled() } } @@ -35,7 +35,7 @@ extension ExportMnemonicConfirmInteractor: AccountConfirmInteractorInputProtocol } func confirm(words: [String]) { - guard words == mnemonic.allWords() else { + guard words == mnemonic else { presenter.didReceive( words: shuffledWords, afterConfirmationFail: true diff --git a/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmProtocols.swift b/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmProtocols.swift index ff1d893313..897a1e2ebb 100644 --- a/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmProtocols.swift +++ b/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmProtocols.swift @@ -4,7 +4,7 @@ import SSFModels protocol ExportMnemonicConfirmViewFactoryProtocol { static func createViewForMnemonic( - _ mnemonic: IRMnemonicProtocol, + _ mnemonic: [String], wallet: MetaAccountModel ) -> AccountConfirmViewProtocol? } diff --git a/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmViewFactory.swift b/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmViewFactory.swift index 14128769d7..b740e41b20 100644 --- a/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmViewFactory.swift +++ b/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmViewFactory.swift @@ -5,7 +5,7 @@ import SSFModels final class ExportMnemonicConfirmViewFactory: ExportMnemonicConfirmViewFactoryProtocol { static func createViewForMnemonic( - _ mnemonic: IRMnemonicProtocol, + _ mnemonic: [String], wallet: MetaAccountModel ) -> AccountConfirmViewProtocol? { let view = AccountConfirmViewController(nib: R.nib.accountConfirmViewController) diff --git a/fearless/Modules/NetworkIssuesNotification/NetworkIssuesNotificationRouter.swift b/fearless/Modules/NetworkIssuesNotification/NetworkIssuesNotificationRouter.swift index e530a4cba1..1f16b3c739 100644 --- a/fearless/Modules/NetworkIssuesNotification/NetworkIssuesNotificationRouter.swift +++ b/fearless/Modules/NetworkIssuesNotification/NetworkIssuesNotificationRouter.swift @@ -64,7 +64,8 @@ final class NetworkIssuesNotificationRouter: NetworkIssuesNotificationRouterInpu private func showCreate(uniqueChainModel: UniqueChainModel, from view: ControllerBackedProtocol?) { guard let controller = UsernameSetupViewFactory.createViewForOnboarding( - flow: .chain(model: uniqueChainModel) + flow: .chain(model: uniqueChainModel), + ecosystem: .regular // TODO: - Select ecosystem )?.controller else { return } diff --git a/fearless/Modules/NewWallet/ChainAccount/ChainAccountWireframe.swift b/fearless/Modules/NewWallet/ChainAccount/ChainAccountWireframe.swift index 9845fb8175..ea33b9c341 100644 --- a/fearless/Modules/NewWallet/ChainAccount/ChainAccountWireframe.swift +++ b/fearless/Modules/NewWallet/ChainAccount/ChainAccountWireframe.swift @@ -172,6 +172,7 @@ final class ChainAccountWireframe: ChainAccountWireframeProtocol { func showCreate(uniqueChainModel: UniqueChainModel, from view: ControllerBackedProtocol?) { guard let createController = AccountCreateViewFactory.createViewForOnboarding( + ecosystem: .regular, // TODO: - Select ecosystem model: UsernameSetupModel(username: uniqueChainModel.meta.name), flow: .chain(model: uniqueChainModel) )?.controller else { diff --git a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListRouter.swift b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListRouter.swift index b46ce44611..8679d89195 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListRouter.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListRouter.swift @@ -89,7 +89,8 @@ final class ChainAssetListRouter: ChainAssetListRouterInput { func showCreate(uniqueChainModel: UniqueChainModel, from view: ControllerBackedProtocol?) { guard let controller = UsernameSetupViewFactory.createViewForOnboarding( - flow: .chain(model: uniqueChainModel) + flow: .chain(model: uniqueChainModel), + ecosystem: .regular // TODO: - Select ecosystem )?.controller else { return } diff --git a/fearless/Modules/OnbordingMain/OnboardingMainPresenter.swift b/fearless/Modules/OnbordingMain/OnboardingMainPresenter.swift index 2d279ad1d1..b9e4010ec2 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainPresenter.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainPresenter.swift @@ -9,6 +9,7 @@ final class OnboardingMainPresenter { private let legalData: LegalData private let locale: Locale + private var ecosystem: AccountCreateEcosystem? init( legalData: LegalData, @@ -52,6 +53,10 @@ final class OnboardingMainPresenter { } extension OnboardingMainPresenter: OnboardingMainPresenterProtocol { + func didSelect(ecosystem: AccountCreateEcosystem) { + self.ecosystem = ecosystem + } + func setup() { interactor.setup() @@ -79,72 +84,80 @@ extension OnboardingMainPresenter: OnboardingMainPresenterProtocol { } func activateSignup() { - wireframe.showSignup(from: view) + guard let ecosystem else { return } + wireframe.showSignup(from: view, ecosystem: ecosystem) } func activateAccountRestore() { - let preferredLanguages = locale.rLanguages - - let mnemonicTitle = R.string.localizable - .googleBackupChoiceMnemonic(preferredLanguages: preferredLanguages) - let mnemonicAction = SheetAlertPresentableAction( - title: mnemonicTitle, - button: UIFactory.default.createDisabledButton() - ) { [weak self] in - guard let self = self else { return } - self.wireframe.showAccountRestore(defaultSource: .mnemonic, from: self.view) - } + guard let ecosystem else { return } + switch ecosystem { + case .regular: + let preferredLanguages = locale.rLanguages + + let mnemonicTitle = R.string.localizable + .googleBackupChoiceMnemonic(preferredLanguages: preferredLanguages) + let mnemonicAction = SheetAlertPresentableAction( + title: mnemonicTitle, + button: UIFactory.default.createDisabledButton() + ) { [weak self] in + guard let self = self else { return } + self.wireframe.showAccountRestore(defaultSource: .mnemonic, flow: .wallet(step: .substrate), from: self.view) + } + + let rawTitle = R.string.localizable + .googleBackupChoiceRaw(preferredLanguages: preferredLanguages) + let rawAction = SheetAlertPresentableAction( + title: rawTitle, + button: UIFactory.default.createDisabledButton() + ) { [weak self] in + guard let self = self else { return } + self.wireframe.showAccountRestore(defaultSource: .seed, flow: .wallet(step: .substrate), from: self.view) + } + + let jsonTitle = R.string.localizable + .googleBackupChoiceJson(preferredLanguages: preferredLanguages) + let jsonAction = SheetAlertPresentableAction( + title: jsonTitle, + button: UIFactory.default.createDisabledButton() + ) { [weak self] in + guard let self = self else { return } + self.wireframe.showAccountRestore(defaultSource: .keystore, flow: .wallet(step: .substrate), from: self.view) + } + + let googleButton = TriangularedButton() + googleButton.imageWithTitleView?.iconImage = R.image.googleBackup() + googleButton.applyDisabledStyle() + let googleTitle = R.string.localizable + .googleBackupChoiceGoogle(preferredLanguages: preferredLanguages) + let googleAction = SheetAlertPresentableAction( + title: googleTitle, + button: googleButton + ) { [weak self] in + guard let self = self else { return } + self.activateGoogleBackup() + } + + let cancelTitle = R.string.localizable.commonCancel(preferredLanguages: preferredLanguages) + let cancelAction = SheetAlertPresentableAction( + title: cancelTitle, + style: .pinkBackgroundWhiteText + ) - let rawTitle = R.string.localizable - .googleBackupChoiceRaw(preferredLanguages: preferredLanguages) - let rawAction = SheetAlertPresentableAction( - title: rawTitle, - button: UIFactory.default.createDisabledButton() - ) { [weak self] in - guard let self = self else { return } - self.wireframe.showAccountRestore(defaultSource: .seed, from: self.view) - } + let title = R.string.localizable + .googleBackupChoiceTitle(preferredLanguages: preferredLanguages) + let viewModel = SheetAlertPresentableViewModel( + title: title, + message: nil, + actions: [mnemonicAction, rawAction, jsonAction, googleAction, cancelAction], + closeAction: nil, + icon: nil + ) - let jsonTitle = R.string.localizable - .googleBackupChoiceJson(preferredLanguages: preferredLanguages) - let jsonAction = SheetAlertPresentableAction( - title: jsonTitle, - button: UIFactory.default.createDisabledButton() - ) { [weak self] in - guard let self = self else { return } - self.wireframe.showAccountRestore(defaultSource: .keystore, from: self.view) + wireframe.present(viewModel: viewModel, from: view) + case .ton: + // TODO: - Ton google backup + wireframe.showAccountRestore(defaultSource: .tonMnemonic, flow: .wallet(step: .ton), from: self.view) } - - let googleButton = TriangularedButton() - googleButton.imageWithTitleView?.iconImage = R.image.googleBackup() - googleButton.applyDisabledStyle() - let googleTitle = R.string.localizable - .googleBackupChoiceGoogle(preferredLanguages: preferredLanguages) - let googleAction = SheetAlertPresentableAction( - title: googleTitle, - button: googleButton - ) { [weak self] in - guard let self = self else { return } - self.activateGoogleBackup() - } - - let cancelTitle = R.string.localizable.commonCancel(preferredLanguages: preferredLanguages) - let cancelAction = SheetAlertPresentableAction( - title: cancelTitle, - style: .pinkBackgroundWhiteText - ) - - let title = R.string.localizable - .googleBackupChoiceTitle(preferredLanguages: preferredLanguages) - let viewModel = SheetAlertPresentableViewModel( - title: title, - message: nil, - actions: [mnemonicAction, rawAction, jsonAction, googleAction, cancelAction], - closeAction: nil, - icon: nil - ) - - wireframe.present(viewModel: viewModel, from: view) } func didTapGetPreinstalled() { diff --git a/fearless/Modules/OnbordingMain/OnboardingMainProtocol.swift b/fearless/Modules/OnbordingMain/OnboardingMainProtocol.swift index 3584c13e6f..d8a73cba6b 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainProtocol.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainProtocol.swift @@ -12,12 +12,17 @@ protocol OnboardingMainPresenterProtocol: AnyObject { func activateTerms() func activatePrivacy() func didTapGetPreinstalled() + func didSelect(ecosystem: AccountCreateEcosystem) } protocol OnboardingMainWireframeProtocol: WebPresentable, ErrorPresentable, SheetAlertPresentable, WarningPresentable, PresentDismissable, AppUpdatePresentable { - func showSignup(from view: OnboardingMainViewProtocol?) + func showSignup( + from view: OnboardingMainViewProtocol?, + ecosystem: AccountCreateEcosystem + ) func showAccountRestore( defaultSource: AccountImportSource, + flow: AccountImportFlow, from view: OnboardingMainViewProtocol? ) func showKeystoreImport(from view: OnboardingMainViewProtocol?) diff --git a/fearless/Modules/OnbordingMain/OnboardingMainViewController.swift b/fearless/Modules/OnbordingMain/OnboardingMainViewController.swift index 92fdf98db3..237b948c6f 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainViewController.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainViewController.swift @@ -2,93 +2,87 @@ import UIKit import SoraUI import SoraFoundation -final class OnboardingMainViewController: UIViewController, AdaptiveDesignable { +final class OnboardingMainViewController: UIViewController, ViewHolder, HiddableBarWhenPushed { + typealias RootViewType = OnboardingMainViewLayout + var presenter: OnboardingMainPresenterProtocol! - - @IBOutlet private var termsLabel: UILabel! - @IBOutlet private var signUpButton: TriangularedButton! - @IBOutlet private var restoreButton: TriangularedButton! - @IBOutlet private var logoView: UIImageView! - @IBOutlet var preInstalledButton: TriangularedButton! - - @IBOutlet private var restoreBottomConstraint: NSLayoutConstraint! - @IBOutlet private var restoreWidthConstraint: NSLayoutConstraint! - @IBOutlet private var signupWidthConstraint: NSLayoutConstraint! - - @IBOutlet private var termsBottomConstraint: NSLayoutConstraint! - - var localizationManager: LocalizationManagerProtocol? - - var termDecorator: AttributedStringDecoratorProtocol? - - // MARK: Appearance + + override func loadView() { + view = OnboardingMainViewLayout() + } override func viewDidLoad() { super.viewDidLoad() - - setupLocalization() - configureLogoView() - configureTermsLabel() - adjustLayout() - presenter.setup() - - preInstalledButton.isHidden = true + rootView.preInstalledButton.isHidden = true + bindActions() + setupGestureRecognizer() } - private func configureTermsLabel() { - if let attributedText = termsLabel.attributedText { - termsLabel.attributedText = termDecorator?.decorate(attributedString: attributedText) + private func bindActions() { + rootView.selectRegularBannerView.actionButton.addAction { [weak self] in + guard let self else { return } + self.presenter.didSelect(ecosystem: .regular) + self.ecosystemHasBeenSelected() } - } - - private func configureLogoView() { - logoView.tintColor = R.color.colorWhite()! - } - - private func setupLocalization() { - signUpButton.imageWithTitleView?.title = R.string.localizable - .usernameSetupTitle20(preferredLanguages: localizationManager?.selectedLocale.rLanguages) - restoreButton.imageWithTitleView?.title = R.string.localizable - .onboardingRestoreWallet(preferredLanguages: localizationManager?.selectedLocale.rLanguages) - preInstalledButton.imageWithTitleView?.title = R.string.localizable.onboardingPreinstalledWalletButtonText(preferredLanguages: localizationManager?.selectedLocale.rLanguages) - preInstalledButton.imageWithTitleView?.iconImage = R.image.iconPreinstalledWallet() - let text = NSAttributedString(string: R.string.localizable - .onboardingTermsAndConditions1(preferredLanguages: localizationManager?.selectedLocale.rLanguages)) - termsLabel.attributedText = text - } - - private func adjustLayout() { - if isAdaptiveHeightDecreased { - restoreBottomConstraint.constant *= designScaleRatio.height - termsBottomConstraint.constant *= designScaleRatio.height + rootView.selectTonBannerView.actionButton.addAction { [weak self] in + guard let self else { return } + self.presenter.didSelect(ecosystem: .ton) + self.ecosystemHasBeenSelected() } - - if isAdaptiveWidthDecreased { - restoreWidthConstraint.constant *= designScaleRatio.width - signupWidthConstraint.constant *= designScaleRatio.width + + rootView.signUpButton.addAction { [weak self] in + self?.presenter.activateSignup() + } + rootView.restoreButton.addAction { [weak self] in + self?.presenter.activateAccountRestore() + } + rootView.preInstalledButton.addAction { [weak self] in + self?.presenter.didTapGetPreinstalled() + } + rootView.backButton.addAction { [weak self] in + UIView.animate( + withDuration: 0.25, + delay: 0, + options: .curveLinear + ) { [weak self] in + self?.rootView.bannerContainer.isHidden = false + self?.rootView.buttonContainer.alpha = 0 + self?.rootView.bannerContainer.alpha = 1 + } completion: { [weak self] _ in + self?.rootView.buttonContainer.isHidden = true + self?.rootView.backButton.isHidden = true + } } } - - // MARK: Action - - @IBAction private func actionSignup(sender _: AnyObject) { - presenter.activateSignup() + + private func setupGestureRecognizer() { + let gesture = UITapGestureRecognizer() + rootView.termsLabel.addGestureRecognizer(gesture) + + gesture.addTarget(self, action: #selector(actionTerms(gestureRecognizer: ))) } - - @IBAction private func actionRestoreAccess(sender _: AnyObject) { - presenter.activateAccountRestore() - } - - @IBAction func actionPreinstalled() { - presenter.didTapGetPreinstalled() + + private func ecosystemHasBeenSelected() { + UIView.animate( + withDuration: 0.25, + delay: 0, + options: .curveLinear + ) { [weak self] in + self?.rootView.buttonContainer.isHidden = false + self?.rootView.buttonContainer.alpha = 1 + self?.rootView.bannerContainer.alpha = 0 + } completion: { [weak self] _ in + self?.rootView.bannerContainer.isHidden = true + self?.rootView.backButton.isHidden = false + } } - - @IBAction private func actionTerms(gestureRecognizer: UITapGestureRecognizer) { + + @objc private func actionTerms(gestureRecognizer: UITapGestureRecognizer) { if gestureRecognizer.state == .ended { - let location = gestureRecognizer.location(in: termsLabel.superview) + let location = gestureRecognizer.location(in: rootView.termsLabel.superview) - if location.x < termsLabel.center.x { + if location.x < rootView.termsLabel.center.x { presenter.activateTerms() } else { presenter.activatePrivacy() @@ -99,6 +93,13 @@ final class OnboardingMainViewController: UIViewController, AdaptiveDesignable { extension OnboardingMainViewController: OnboardingMainViewProtocol { func didReceive(preinstalledWalletEnabled: Bool) { - preInstalledButton.isHidden = !preinstalledWalletEnabled + rootView.preInstalledButton.isHidden = !preinstalledWalletEnabled + } +} + +// MARK: - Localizable +extension OnboardingMainViewController: Localizable { + func applyLocalization() { + rootView.locale = selectedLocale } } diff --git a/fearless/Modules/OnbordingMain/OnboardingMainViewFactory.swift b/fearless/Modules/OnbordingMain/OnboardingMainViewFactory.swift index f806265898..086c3b7980 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainViewFactory.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainViewFactory.swift @@ -41,9 +41,7 @@ final class OnboardingMainViewFactory: OnboardingMainViewFactoryProtocol { let localizationManager = LocalizationManager.shared - let view = OnboardingMainViewController(nib: R.nib.onbordingMain) - view.termDecorator = CompoundAttributedStringDecorator.legal(for: locale) - view.localizationManager = localizationManager + let view = OnboardingMainViewController() let appVersionObserver = AppVersionObserver( operationManager: OperationManagerFacade.sharedManager, @@ -80,6 +78,7 @@ final class OnboardingMainViewFactory: OnboardingMainViewFactoryProtocol { presenter.view = view interactor.presenter = presenter + view.localizationManager = localizationManager return view } diff --git a/fearless/Modules/OnbordingMain/OnboardingMainViewLayout.swift b/fearless/Modules/OnbordingMain/OnboardingMainViewLayout.swift new file mode 100644 index 0000000000..ba21419ecc --- /dev/null +++ b/fearless/Modules/OnbordingMain/OnboardingMainViewLayout.swift @@ -0,0 +1,153 @@ +import Foundation +import UIKit + +final class OnboardingMainViewLayout: UIView { + + private let backgroundImageView: UIImageView = { + let imageView = UIImageView() + imageView.contentMode = .scaleAspectFill + imageView.image = R.image.backgroundImage() + return imageView + }() + + let backButton: UIButton = { + let button = UIButton() + button.setImage(R.image.iconBack(), for: .normal) + button.backgroundColor = .clear + button.isHidden = true + return button + }() + + let logoView: UIImageView = { + let imageView = UIImageView() + imageView.contentMode = .scaleAspectFill + imageView.image = R.image.logo() + imageView.tintColor = R.color.colorWhite() + return imageView + }() + + let termsLabel: UILabel = { + let label = UILabel() + label.numberOfLines = 0 + label.textAlignment = .center + label.isUserInteractionEnabled = true + return label + }() + + let buttonContainer = UIFactory.default.createVerticalStackView(spacing: 8) + + let signUpButton: TriangularedButton = { + let button = TriangularedButton() + button.applyEnabledStyle() + return button + }() + + let restoreButton: TriangularedButton = { + let button = TriangularedButton() + button.applyAccessoryStyle() + return button + }() + + let preInstalledButton: TriangularedButton = { + let button = TriangularedButton() + return button + }() + + let bannerContainer = UIFactory.default.createVerticalStackView(spacing: 12) + let selectRegularBannerView = SelectEcosystemBannerView(ecosystem: .regular) + let selectTonBannerView = SelectEcosystemBannerView(ecosystem: .ton) + + lazy var termDecorator = CompoundAttributedStringDecorator.legal(for: locale) + + var locale: Locale = .current { + didSet { + applyLocale() + } + } + + override init(frame: CGRect) { + super.init(frame: frame) + setupLayout() + buttonContainer.isHidden = true + buttonContainer.alpha = 0 + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Private methods + + private func configureTermsLabel() { + if let attributedText = termsLabel.attributedText { + termsLabel.attributedText = termDecorator.decorate(attributedString: attributedText) + } + } + + private func applyLocale() { + signUpButton.imageWithTitleView?.title = R.string.localizable + .usernameSetupTitle20(preferredLanguages: locale.rLanguages) + restoreButton.imageWithTitleView?.title = R.string.localizable + .onboardingRestoreWallet(preferredLanguages: locale.rLanguages) + preInstalledButton.imageWithTitleView?.title = R.string.localizable.onboardingPreinstalledWalletButtonText(preferredLanguages: locale.rLanguages) + preInstalledButton.imageWithTitleView?.iconImage = R.image.iconPreinstalledWallet() + let text = NSAttributedString(string: R.string.localizable + .onboardingTermsAndConditions1(preferredLanguages: locale.rLanguages)) + termsLabel.attributedText = text + + selectRegularBannerView.titleLabel.text = "Create or import Substrate or EVM accounts" + selectRegularBannerView.actionButton.imageWithTitleView?.title = "Join EVM or Substrate" + selectTonBannerView.titleLabel.text = "Connect to the fastest growing ecosystem ever" + selectTonBannerView.actionButton.imageWithTitleView?.title = "Join TON" + + configureTermsLabel() + } + + private func setupLayout() { + addSubview(backgroundImageView) + addSubview(backButton) + addSubview(logoView) + addSubview(termsLabel) + addSubview(buttonContainer) + addSubview(bannerContainer) + buttonContainer.addArrangedSubview(signUpButton) + buttonContainer.addArrangedSubview(restoreButton) + buttonContainer.addArrangedSubview(preInstalledButton) + bannerContainer.addArrangedSubview(selectRegularBannerView) + bannerContainer.addArrangedSubview(selectTonBannerView) + + backgroundImageView.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + backButton.snp.makeConstraints { make in + make.top.equalTo(safeAreaLayoutGuide).offset(10) + make.leading.equalToSuperview().offset(16) + make.size.equalTo(44) + } + logoView.snp.makeConstraints { make in + make.top.equalToSuperview().offset(149).priority(.low) + make.centerX.equalToSuperview() + } + buttonContainer.snp.makeConstraints { make in + make.leading.trailing.equalToSuperview().inset(16) + make.top.greaterThanOrEqualTo(logoView.snp.bottom) + } + bannerContainer.snp.makeConstraints { make in + make.leading.trailing.equalToSuperview().inset(16) + make.top.greaterThanOrEqualTo(logoView.snp.bottom) + } + termsLabel.snp.makeConstraints { make in + make.top.equalTo(bannerContainer.snp.bottom).offset(24) + make.top.equalTo(buttonContainer.snp.bottom).offset(24) + make.bottom.equalTo(safeAreaLayoutGuide.snp.bottom) + make.leading.trailing.equalToSuperview().inset(16) + } + + [signUpButton, restoreButton, preInstalledButton].forEach { view in + view.snp.makeConstraints { make in + make.height.equalTo(UIConstants.actionHeight) + } + } + } +} diff --git a/fearless/Modules/OnbordingMain/OnboardingMainWireframe.swift b/fearless/Modules/OnbordingMain/OnboardingMainWireframe.swift index af657359a0..e574d840d1 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainWireframe.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainWireframe.swift @@ -2,8 +2,8 @@ import Foundation import SSFCloudStorage final class OnboardingMainWireframe: OnboardingMainWireframeProtocol { - func showSignup(from view: OnboardingMainViewProtocol?) { - guard let usernameSetup = UsernameSetupViewFactory.createViewForOnboarding() else { + func showSignup(from view: OnboardingMainViewProtocol?, ecosystem: AccountCreateEcosystem) { + guard let usernameSetup = UsernameSetupViewFactory.createViewForOnboarding(ecosystem: ecosystem) else { return } @@ -14,10 +14,11 @@ final class OnboardingMainWireframe: OnboardingMainWireframeProtocol { func showAccountRestore( defaultSource: AccountImportSource, + flow: AccountImportFlow, from view: OnboardingMainViewProtocol? ) { guard let restorationController = AccountImportViewFactory - .createViewForOnboarding(defaultSource: defaultSource)?.controller + .createViewForOnboarding(defaultSource: defaultSource, flow: flow)?.controller else { return } @@ -32,7 +33,7 @@ final class OnboardingMainWireframe: OnboardingMainWireframeProtocol { let navigationController = view?.controller.navigationController, navigationController.viewControllers.count == 1, navigationController.presentedViewController == nil { - showAccountRestore(defaultSource: .keystore, from: view) + showAccountRestore(defaultSource: .keystore, flow: .wallet(step: .substrate), from: view) } } diff --git a/fearless/Modules/Profile/ProfilePresenter.swift b/fearless/Modules/Profile/ProfilePresenter.swift index 84e3e20326..1115cea211 100644 --- a/fearless/Modules/Profile/ProfilePresenter.swift +++ b/fearless/Modules/Profile/ProfilePresenter.swift @@ -76,7 +76,12 @@ extension ProfilePresenter: ProfilePresenterProtocol { guard let wallet = selectedWallet else { return } - wireframe.showAccountDetails(from: view, metaAccount: wallet) + switch wallet.ecosystem { + case .regular: + wireframe.showAccountDetails(from: view, metaAccount: wallet) + case .ton: + break + } } func activateOption(_ option: ProfileOption) { diff --git a/fearless/Modules/Profile/ProfileViewController.swift b/fearless/Modules/Profile/ProfileViewController.swift index 201ec84e2a..ff963fb3c8 100644 --- a/fearless/Modules/Profile/ProfileViewController.swift +++ b/fearless/Modules/Profile/ProfileViewController.swift @@ -1,6 +1,7 @@ import UIKit import SoraFoundation import SSFUtils +import SSFModels final class ProfileViewController: UIViewController, ViewHolder { typealias RootViewType = ProfileViewLayout @@ -97,11 +98,17 @@ final class ProfileViewController: UIViewController, ViewHolder { private func prepareProfileDetailsCell( _ tableView: UITableView, - with viewModel: WalletsManagmentCellViewModel + with viewModel: WalletsManagmentCellViewModel, + walletEcosystem: WalletEcosystem ) -> UITableViewCell { if let cell = tableView.dequeueReusableCellWithType(WalletsManagmentTableCell.self) { cell.bind(to: viewModel) - cell.delegate = self + switch walletEcosystem { + case .regular: + cell.delegate = self + case .ton: + break + } return cell } else { assertionFailure("Profile details cell creation failed") @@ -185,7 +192,7 @@ extension ProfileViewController: UITableViewDataSource { case 0: return prepareProfileSectionCell(tableView, indexPath: indexPath) case 1: - return prepareProfileDetailsCell(tableView, with: viewModel.profileUserViewModel) + return prepareProfileDetailsCell(tableView, with: viewModel.profileUserViewModel, walletEcosystem: viewModel.wallet.ecosystem) default: let optionViewModel = viewModel.profileOptionViewModel[indexPath.row - 2] return prepareProfileCell(tableView, indexPath: indexPath, with: optionViewModel) diff --git a/fearless/Modules/Profile/ViewModel/ProfileViewModel.swift b/fearless/Modules/Profile/ViewModel/ProfileViewModel.swift index 8b9935a8c3..1c10c68b2f 100644 --- a/fearless/Modules/Profile/ViewModel/ProfileViewModel.swift +++ b/fearless/Modules/Profile/ViewModel/ProfileViewModel.swift @@ -1,12 +1,15 @@ import Foundation +import SSFModels protocol ProfileViewModelProtocol { + var wallet: MetaAccountModel { get } var profileUserViewModel: WalletsManagmentCellViewModel { get } var profileOptionViewModel: [ProfileOptionViewModelProtocol] { get } var logoutViewModel: ProfileOptionViewModelProtocol { get } } struct ProfileViewModel: ProfileViewModelProtocol { + let wallet: MetaAccountModel let profileUserViewModel: WalletsManagmentCellViewModel let profileOptionViewModel: [ProfileOptionViewModelProtocol] let logoutViewModel: ProfileOptionViewModelProtocol diff --git a/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift b/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift index 907d36c401..b94e1e998f 100644 --- a/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift +++ b/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift @@ -74,6 +74,7 @@ final class ProfileViewModelFactory: ProfileViewModelFactoryProtocol { ) let logoutViewModel = createLogoutViewModel(locale: locale) let viewModel = ProfileViewModel( + wallet: wallet, profileUserViewModel: profileUserViewModel, profileOptionViewModel: profileOptionViewModel, logoutViewModel: logoutViewModel @@ -113,7 +114,8 @@ final class ProfileViewModelFactory: ProfileViewModelFactoryProtocol { return WalletsManagmentCellViewModel( isSelected: false, - walletName: wallet.name, + walletName: wallet.name, + icon: wallet.icon(), fiatBalance: fiatBalance, dayChange: dayChange, accountScoreViewModel: accountScoreViewModel diff --git a/fearless/Modules/SwitchAccount/SwitchAccount+OnboardingMainWireframe.swift b/fearless/Modules/SwitchAccount/SwitchAccount+OnboardingMainWireframe.swift index 6334d58d87..346feb0dbc 100644 --- a/fearless/Modules/SwitchAccount/SwitchAccount+OnboardingMainWireframe.swift +++ b/fearless/Modules/SwitchAccount/SwitchAccount+OnboardingMainWireframe.swift @@ -13,8 +13,8 @@ extension SwitchAccount { view?.controller.navigationController?.pushViewController(controller, animated: true) } - func showSignup(from view: OnboardingMainViewProtocol?) { - guard let usernameSetup = UsernameSetupViewFactory.createViewForSwitch() else { + func showSignup(from view: OnboardingMainViewProtocol?, ecosystem: AccountCreateEcosystem) { + guard let usernameSetup = UsernameSetupViewFactory.createViewForSwitch(ecosystem: ecosystem) else { return } @@ -23,7 +23,7 @@ extension SwitchAccount { } } - func showAccountRestore(defaultSource _: AccountImportSource, from view: OnboardingMainViewProtocol?) { + func showAccountRestore(defaultSource _: AccountImportSource, flow: AccountImportFlow, from view: OnboardingMainViewProtocol?) { guard let restorationController = AccountImportViewFactory.createViewForSwitch()?.controller else { return } @@ -38,7 +38,7 @@ extension SwitchAccount { let navigationController = view?.controller.navigationController, navigationController.topViewController == view?.controller, navigationController.presentedViewController == nil { - showAccountRestore(defaultSource: .mnemonic, from: view) + showAccountRestore(defaultSource: .mnemonic, flow: .wallet(step: .substrate), from: view) } } diff --git a/fearless/Modules/SwitchAccount/SwitchAccount+UsernameSetupWireframe.swift b/fearless/Modules/SwitchAccount/SwitchAccount+UsernameSetupWireframe.swift index de17c3d959..5d6ae3e89f 100644 --- a/fearless/Modules/SwitchAccount/SwitchAccount+UsernameSetupWireframe.swift +++ b/fearless/Modules/SwitchAccount/SwitchAccount+UsernameSetupWireframe.swift @@ -5,9 +5,10 @@ extension SwitchAccount { func proceed( from view: UsernameSetupViewProtocol?, flow _: AccountCreateFlow = .wallet, - model: UsernameSetupModel + model: UsernameSetupModel, + ecosystem: AccountCreateEcosystem ) { - guard let accountCreation = AccountCreateViewFactory.createViewForSwitch(model: model) else { + guard let accountCreation = AccountCreateViewFactory.createViewForSwitch(ecosystem: ecosystem, model: model) else { return } diff --git a/fearless/Modules/UsernameSetup/UsernameSetupPresenter.swift b/fearless/Modules/UsernameSetup/UsernameSetupPresenter.swift index b366a105e6..65de38ad92 100644 --- a/fearless/Modules/UsernameSetup/UsernameSetupPresenter.swift +++ b/fearless/Modules/UsernameSetup/UsernameSetupPresenter.swift @@ -5,16 +5,19 @@ final class UsernameSetupPresenter { private weak var view: UsernameSetupViewProtocol? private var wireframe: UsernameSetupWireframeProtocol private let flow: AccountCreateFlow + private let ecosystem: AccountCreateEcosystem private var viewModel: InputViewModelProtocol init( wireframe: UsernameSetupWireframeProtocol, flow: AccountCreateFlow, + ecosystem: AccountCreateEcosystem, localizationManager: LocalizationManagerProtocol ) { self.wireframe = wireframe self.flow = flow + self.ecosystem = ecosystem let inputHandling = InputHandler( value: flow.predefinedUsername, @@ -60,7 +63,7 @@ extension UsernameSetupPresenter: UsernameSetupPresenterProtocol { let action = SheetAlertPresentableAction(title: actionTitle) { [weak self] in guard let self = self else { return } let model = UsernameSetupModel(username: username) - self.wireframe.proceed(from: self.view, flow: self.flow, model: model) + self.wireframe.proceed(from: self.view, flow: self.flow, model: model, ecosystem: ecosystem) } let title = R.string.localizable.commonNoScreenshotTitle(preferredLanguages: rLanguages) diff --git a/fearless/Modules/UsernameSetup/UsernameSetupProtocols.swift b/fearless/Modules/UsernameSetup/UsernameSetupProtocols.swift index 38bc03202b..4bd9a891a4 100644 --- a/fearless/Modules/UsernameSetup/UsernameSetupProtocols.swift +++ b/fearless/Modules/UsernameSetup/UsernameSetupProtocols.swift @@ -11,17 +11,22 @@ protocol UsernameSetupPresenterProtocol: AnyObject { } protocol UsernameSetupWireframeProtocol: SheetAlertPresentable { - func proceed(from view: UsernameSetupViewProtocol?, flow: AccountCreateFlow, model: UsernameSetupModel) + func proceed( + from view: UsernameSetupViewProtocol?, + flow: AccountCreateFlow, + model: UsernameSetupModel, + ecosystem: AccountCreateEcosystem + ) } protocol UsernameSetupViewFactoryProtocol: AnyObject { - static func createViewForOnboarding(flow: AccountCreateFlow) -> UsernameSetupViewProtocol? - static func createViewForAdding() -> UsernameSetupViewProtocol? - static func createViewForSwitch() -> UsernameSetupViewProtocol? + static func createViewForOnboarding(flow: AccountCreateFlow, ecosystem: AccountCreateEcosystem) -> UsernameSetupViewProtocol? + static func createViewForAdding(ecosystem: AccountCreateEcosystem) -> UsernameSetupViewProtocol? + static func createViewForSwitch(ecosystem: AccountCreateEcosystem) -> UsernameSetupViewProtocol? } extension UsernameSetupViewFactoryProtocol { - static func createViewForOnboarding() -> UsernameSetupViewProtocol? { - Self.createViewForOnboarding(flow: .wallet) + static func createViewForOnboarding(ecosystem: AccountCreateEcosystem) -> UsernameSetupViewProtocol? { + Self.createViewForOnboarding(flow: .wallet, ecosystem: ecosystem) } } diff --git a/fearless/Modules/UsernameSetup/UsernameSetupViewFactory.swift b/fearless/Modules/UsernameSetup/UsernameSetupViewFactory.swift index 3c78c9bb09..9da4624821 100644 --- a/fearless/Modules/UsernameSetup/UsernameSetupViewFactory.swift +++ b/fearless/Modules/UsernameSetup/UsernameSetupViewFactory.swift @@ -3,29 +3,38 @@ import SoraFoundation import SoraKeystore final class UsernameSetupViewFactory: UsernameSetupViewFactoryProtocol { - static func createViewForOnboarding(flow: AccountCreateFlow = .wallet) -> UsernameSetupViewProtocol? { + static func createViewForOnboarding( + flow: AccountCreateFlow = .wallet, + ecosystem: AccountCreateEcosystem + ) -> UsernameSetupViewProtocol? { let wireframe = UsernameSetupWireframe() - return createView(for: wireframe, flow: flow) + return createView(for: wireframe, flow: flow, ecosystem: ecosystem) } - static func createViewForAdding() -> UsernameSetupViewProtocol? { + static func createViewForAdding( + ecosystem: AccountCreateEcosystem + ) -> UsernameSetupViewProtocol? { let wireframe = AddAccount.UsernameSetupWireframe() - return createView(for: wireframe) + return createView(for: wireframe, ecosystem: ecosystem) } - static func createViewForSwitch() -> UsernameSetupViewProtocol? { + static func createViewForSwitch( + ecosystem: AccountCreateEcosystem + ) -> UsernameSetupViewProtocol? { let wireframe = SwitchAccount.UsernameSetupWireframe() - return createView(for: wireframe) + return createView(for: wireframe, ecosystem: ecosystem) } private static func createView( for wireframe: UsernameSetupWireframeProtocol, - flow: AccountCreateFlow = .wallet + flow: AccountCreateFlow = .wallet, + ecosystem: AccountCreateEcosystem ) -> UsernameSetupViewProtocol? { let presenter = UsernameSetupPresenter( wireframe: wireframe, - flow: flow, + flow: flow, + ecosystem: ecosystem, localizationManager: LocalizationManager.shared ) let view = UsernameSetupViewController(presenter: presenter, localizationManager: LocalizationManager.shared) diff --git a/fearless/Modules/UsernameSetup/UsernameSetupWireframe.swift b/fearless/Modules/UsernameSetup/UsernameSetupWireframe.swift index f5f5e980f2..abfbcda539 100644 --- a/fearless/Modules/UsernameSetup/UsernameSetupWireframe.swift +++ b/fearless/Modules/UsernameSetup/UsernameSetupWireframe.swift @@ -4,9 +4,11 @@ final class UsernameSetupWireframe: UsernameSetupWireframeProtocol { func proceed( from view: UsernameSetupViewProtocol?, flow: AccountCreateFlow, - model: UsernameSetupModel + model: UsernameSetupModel, + ecosystem: AccountCreateEcosystem ) { guard let accountCreation = AccountCreateViewFactory.createViewForOnboarding( + ecosystem: ecosystem, model: model, flow: flow ) else { diff --git a/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModelFactory.swift b/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModelFactory.swift index d655e8ebc3..50f3b3df66 100644 --- a/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModelFactory.swift +++ b/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModelFactory.swift @@ -190,7 +190,8 @@ final class WalletConnectSessionViewModelFactoryImpl: WalletConnectSessionViewMo guard let balance = balanceInfo?[wallet.metaId] else { return WalletsManagmentCellViewModel( isSelected: false, - walletName: wallet.name, + walletName: wallet.name, + icon: wallet.icon(), fiatBalance: nil, dayChange: nil, accountScoreViewModel: accountScoreViewModel @@ -214,6 +215,7 @@ final class WalletConnectSessionViewModelFactoryImpl: WalletConnectSessionViewMo let viewModel = WalletsManagmentCellViewModel( isSelected: false, walletName: wallet.name, + icon: wallet.icon(), fiatBalance: totalFiatValue, dayChange: dayChange, accountScoreViewModel: accountScoreViewModel diff --git a/fearless/Modules/WalletDetails/WalletDetailsWireframe.swift b/fearless/Modules/WalletDetails/WalletDetailsWireframe.swift index f4a1294932..ce1297b700 100644 --- a/fearless/Modules/WalletDetails/WalletDetailsWireframe.swift +++ b/fearless/Modules/WalletDetails/WalletDetailsWireframe.swift @@ -79,7 +79,8 @@ final class WalletDetailsWireframe: WalletDetailsWireframeProtocol { func showCreate(uniqueChainModel: UniqueChainModel, from view: ControllerBackedProtocol?) { guard let controller = UsernameSetupViewFactory.createViewForOnboarding( - flow: .chain(model: uniqueChainModel) + flow: .chain(model: uniqueChainModel), + ecosystem: .regular // TODO: - Select ecosystem )?.controller else { return } diff --git a/fearless/Modules/WalletOption/WalletOptionPresenter.swift b/fearless/Modules/WalletOption/WalletOptionPresenter.swift index 27337a3a76..376c846d4e 100644 --- a/fearless/Modules/WalletOption/WalletOptionPresenter.swift +++ b/fearless/Modules/WalletOption/WalletOptionPresenter.swift @@ -9,6 +9,15 @@ final class WalletOptionPresenter { private let interactor: WalletOptionInteractorInput private let wallet: ManagedMetaAccountModel + + lazy var hasWalletDetailsButton: Bool = { + switch wallet.info.ecosystem { + case .regular: + return true + case .ton: + return false + } + }() // MARK: - Constructors diff --git a/fearless/Modules/WalletOption/WalletOptionProtocols.swift b/fearless/Modules/WalletOption/WalletOptionProtocols.swift index d51d9930b6..37abe0e3f0 100644 --- a/fearless/Modules/WalletOption/WalletOptionProtocols.swift +++ b/fearless/Modules/WalletOption/WalletOptionProtocols.swift @@ -7,6 +7,7 @@ protocol WalletOptionViewInput: ControllerBackedProtocol { } protocol WalletOptionViewOutput: AnyObject { + var hasWalletDetailsButton: Bool { get } func didLoad(view: WalletOptionViewInput) func walletDetailsDidTap() func exportWalletDidTap() diff --git a/fearless/Modules/WalletOption/WalletOptionViewController.swift b/fearless/Modules/WalletOption/WalletOptionViewController.swift index 27c051ce5d..542c9285d8 100644 --- a/fearless/Modules/WalletOption/WalletOptionViewController.swift +++ b/fearless/Modules/WalletOption/WalletOptionViewController.swift @@ -34,6 +34,8 @@ final class WalletOptionViewController: UIViewController, ViewHolder { super.viewDidLoad() setupActions() output.didLoad(view: self) + rootView.walletDetailsButton.isHidden = !output.hasWalletDetailsButton + rootView.accountScoreButton.isHidden = !output.hasWalletDetailsButton } // MARK: - Private methods diff --git a/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentCellViewModel.swift b/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentCellViewModel.swift index 7f4ebc64ac..41b9e918f1 100644 --- a/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentCellViewModel.swift +++ b/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentCellViewModel.swift @@ -1,8 +1,10 @@ import Foundation +import UIKit struct WalletsManagmentCellViewModel { let isSelected: Bool let walletName: String + let icon: UIImage let fiatBalance: String? let dayChange: NSAttributedString? let accountScoreViewModel: AccountScoreViewModel? diff --git a/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentViewModelFactory.swift b/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentViewModelFactory.swift index f8e4a3bcf6..4401fd072f 100644 --- a/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentViewModelFactory.swift +++ b/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentViewModelFactory.swift @@ -54,7 +54,8 @@ final class WalletsManagmentViewModelFactory: WalletsManagmentViewModelFactoryPr guard let walletBalance = balances[key] else { return WalletsManagmentCellViewModel( isSelected: isSelected, - walletName: managedMetaAccount.info.name, + walletName: managedMetaAccount.info.name, + icon: managedMetaAccount.info.icon(), fiatBalance: nil, dayChange: nil, accountScoreViewModel: accountScoreViewModel @@ -73,7 +74,8 @@ final class WalletsManagmentViewModelFactory: WalletsManagmentViewModelFactoryPr let fiatBalance = balanceTokenFormatterValue.stringFromDecimal(.zero) return WalletsManagmentCellViewModel( isSelected: isSelected, - walletName: managedMetaAccount.info.name, + walletName: managedMetaAccount.info.name, + icon: managedMetaAccount.info.icon(), fiatBalance: fiatBalance, dayChange: nil, accountScoreViewModel: accountScoreViewModel @@ -89,7 +91,8 @@ final class WalletsManagmentViewModelFactory: WalletsManagmentViewModelFactoryPr let viewModel = WalletsManagmentCellViewModel( isSelected: isSelected, - walletName: managedMetaAccount.info.name, + walletName: managedMetaAccount.info.name, + icon: managedMetaAccount.info.icon(), fiatBalance: totalFiatValue, dayChange: dayChange, accountScoreViewModel: accountScoreViewModel @@ -146,3 +149,14 @@ final class WalletsManagmentViewModelFactory: WalletsManagmentViewModelFactoryPr return priceWithChangeAttributed } } + +extension MetaAccountModel { + func icon() -> UIImage { + switch ecosystem { + case .regular: + return R.image.iconBirdGreen()! + case .ton: + return R.image.tonIcon()! + } + } +} diff --git a/fearless/Modules/WalletsManagment/WalletsManagmentPresenter.swift b/fearless/Modules/WalletsManagment/WalletsManagmentPresenter.swift index 77335343b9..c4bc4e7c16 100644 --- a/fearless/Modules/WalletsManagment/WalletsManagmentPresenter.swift +++ b/fearless/Modules/WalletsManagment/WalletsManagmentPresenter.swift @@ -56,94 +56,6 @@ final class WalletsManagmentPresenter { self?.view?.didReceiveViewModels(viewModels) } } - - private func showImport() { - let preferredLanguages = selectedLocale.rLanguages - - let mnemonicTitle = R.string.localizable - .googleBackupChoiceMnemonic(preferredLanguages: preferredLanguages) - let mnemonicAction = SheetAlertPresentableAction( - title: mnemonicTitle, - button: UIFactory.default.createDisabledButton() - ) { [weak self] in - self?.router.dissmis(view: self?.view) { [weak self] in - self?.moduleOutput?.showImportWallet(defaultSource: .mnemonic) - } - } - - let rawTitle = R.string.localizable - .googleBackupChoiceRaw(preferredLanguages: preferredLanguages) - let rawAction = SheetAlertPresentableAction( - title: rawTitle, - button: UIFactory.default.createDisabledButton() - ) { [weak self] in - self?.router.dissmis(view: self?.view) { [weak self] in - self?.moduleOutput?.showImportWallet(defaultSource: .seed) - } - } - - let jsonTitle = R.string.localizable - .googleBackupChoiceJson(preferredLanguages: preferredLanguages) - let jsonAction = SheetAlertPresentableAction( - title: jsonTitle, - button: UIFactory.default.createDisabledButton() - ) { [weak self] in - self?.router.dissmis(view: self?.view) { [weak self] in - self?.moduleOutput?.showImportWallet(defaultSource: .keystore) - } - } - - let googleButton = TriangularedButton() - googleButton.imageWithTitleView?.iconImage = R.image.googleBackup() - googleButton.applyDisabledStyle() - let googleTitle = R.string.localizable - .googleBackupChoiceGoogle(preferredLanguages: preferredLanguages) - let googleAction = SheetAlertPresentableAction( - title: googleTitle, - button: googleButton - ) { [weak self] in - self?.router.dissmis(view: self?.view) { [weak self] in - self?.moduleOutput?.showImportGoogle() - } - } - - let preinstalledButton = TriangularedButton() - preinstalledButton.imageWithTitleView?.iconImage = R.image.iconPreinstalledWallet() - preinstalledButton.applyDisabledStyle() - let preinstalledTitle = R.string.localizable - .onboardingPreinstalledWalletButtonText(preferredLanguages: preferredLanguages) - let preinstalledAction = SheetAlertPresentableAction( - title: preinstalledTitle, - button: preinstalledButton - ) { [weak self] in - self?.router.dissmis(view: self?.view) { [weak self] in - self?.moduleOutput?.showGetPreinstalledWallet() - } - } - - let cancelTitle = R.string.localizable.commonCancel(preferredLanguages: preferredLanguages) - let cancelAction = SheetAlertPresentableAction( - title: cancelTitle, - style: .pinkBackgroundWhiteText - ) - - var actions = [mnemonicAction, rawAction, jsonAction, googleAction] - if featureToggleConfig.pendulumCaseEnabled == true { - actions.append(preinstalledAction) - } - actions.append(cancelAction) - let title = R.string.localizable - .googleBackupChoiceTitle(preferredLanguages: preferredLanguages) - let viewModel = SheetAlertPresentableViewModel( - title: title, - message: nil, - actions: actions, - closeAction: nil, - icon: nil - ) - - router.present(viewModel: viewModel, from: view) - } } // MARK: - WalletsManagmentViewOutput @@ -175,10 +87,6 @@ extension WalletsManagmentPresenter: WalletsManagmentViewOutput { } } - func didTapImportWallet() { - showImport() - } - func didLoad(view: WalletsManagmentViewInput) { self.view = view interactor.setup(with: self) diff --git a/fearless/Modules/WalletsManagment/WalletsManagmentProtocols.swift b/fearless/Modules/WalletsManagment/WalletsManagmentProtocols.swift index b9fd105171..f9bacb00ce 100644 --- a/fearless/Modules/WalletsManagment/WalletsManagmentProtocols.swift +++ b/fearless/Modules/WalletsManagment/WalletsManagmentProtocols.swift @@ -10,7 +10,6 @@ protocol WalletsManagmentViewInput: ControllerBackedProtocol { protocol WalletsManagmentViewOutput: AnyObject { func didLoad(view: WalletsManagmentViewInput) func didTapNewWallet() - func didTapImportWallet() func didTapOptions(for indexPath: IndexPath) func didTapClose() func didTap(on indexPath: IndexPath) diff --git a/fearless/Modules/WalletsManagment/WalletsManagmentTableCell.swift b/fearless/Modules/WalletsManagment/WalletsManagmentTableCell.swift index 0edb4a4db4..d376289174 100644 --- a/fearless/Modules/WalletsManagment/WalletsManagmentTableCell.swift +++ b/fearless/Modules/WalletsManagment/WalletsManagmentTableCell.swift @@ -87,7 +87,7 @@ final class WalletsManagmentTableCell: UITableViewCell { } func bind(to viewModel: WalletsManagmentCellViewModel) { - iconImageView.image = R.image.iconBirdGreen() + iconImageView.image = viewModel.icon walletNameLabel.text = viewModel.walletName dayChangeLabel.attributedText = viewModel.dayChange backgroundTriangularedView.setGradientBorder(highlighted: viewModel.isSelected, animated: false) diff --git a/fearless/Modules/WalletsManagment/WalletsManagmentViewController.swift b/fearless/Modules/WalletsManagment/WalletsManagmentViewController.swift index 8aa905499f..48b078dab4 100644 --- a/fearless/Modules/WalletsManagment/WalletsManagmentViewController.swift +++ b/fearless/Modules/WalletsManagment/WalletsManagmentViewController.swift @@ -58,7 +58,6 @@ final class WalletsManagmentViewController: UIViewController, ViewHolder { private func configure() { rootView.addNewWalletButton.addTarget(self, action: #selector(addNewWalletTapped), for: .touchUpInside) - rootView.importWalletButton.addTarget(self, action: #selector(importWalletTapped), for: .touchUpInside) rootView.backButton.addTarget(self, action: #selector(closeDidTapped), for: .touchUpInside) } @@ -68,10 +67,6 @@ final class WalletsManagmentViewController: UIViewController, ViewHolder { output.didTapNewWallet() } - @objc private func importWalletTapped() { - output.didTapImportWallet() - } - @objc private func closeDidTapped() { output.didTapClose() } diff --git a/fearless/Modules/WalletsManagment/WalletsManagmentViewLayout.swift b/fearless/Modules/WalletsManagment/WalletsManagmentViewLayout.swift index 5df32af4bd..f7bf00955c 100644 --- a/fearless/Modules/WalletsManagment/WalletsManagmentViewLayout.swift +++ b/fearless/Modules/WalletsManagment/WalletsManagmentViewLayout.swift @@ -43,13 +43,6 @@ final class WalletsManagmentViewLayout: UIView { return button }() - let importWalletButton: TriangularedButton = { - let button = TriangularedButton() - button.triangularedView?.fillColor = R.color.colorBlack1()! - button.imageWithTitleView?.titleFont = .h4Title - return button - }() - var locale: Locale = .current { didSet { applyLocale() @@ -76,9 +69,6 @@ final class WalletsManagmentViewLayout: UIView { case .selectYourWallet: titleLabel.text = R.string.localizable.walletManagmentSelectWalletTitle(preferredLanguages: locale.rLanguages) } - importWalletButton.imageWithTitleView?.title = R.string.localizable.importWallet( - preferredLanguages: locale.rLanguages - ) addNewWalletButton.imageWithTitleView?.title = R.string.localizable.walletsManagmentAddNewWallet( preferredLanguages: locale.rLanguages ) @@ -119,12 +109,7 @@ final class WalletsManagmentViewLayout: UIView { make.height.equalTo(UIConstants.actionHeight) } - importWalletButton.snp.makeConstraints { make in - make.height.equalTo(UIConstants.actionHeight) - } - buttonsVStackView.addArrangedSubview(addNewWalletButton) - buttonsVStackView.addArrangedSubview(importWalletButton) addSubview(tableView) tableView.snp.makeConstraints { make in From ce79609a7c531d51df5cd8e42c0b327e5909f737 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Tue, 8 Oct 2024 09:24:25 +0500 Subject: [PATCH 045/156] lint --- .../View/SelectEcosystemBannerView.swift | 4 +-- .../BaseAccountImportInteractor.swift | 2 +- .../BackupCreatePasswordInteractor.swift | 2 +- .../NetworkIssuesNotificationRouter.swift | 2 +- .../OnboardingMainPresenter.swift | 2 +- .../OnboardingMainViewController.swift | 14 +++++----- .../OnboardingMainViewLayout.swift | 26 +++++++++---------- .../ViewModel/ProfileViewModelFactory.swift | 4 +-- .../UsernameSetupViewFactory.swift | 2 +- .../UsernameSetupWireframe.swift | 2 +- ...WalletConnectSessionViewModelFactory.swift | 2 +- .../WalletOption/WalletOptionPresenter.swift | 2 +- .../WalletsManagmentViewModelFactory.swift | 6 ++--- 13 files changed, 35 insertions(+), 35 deletions(-) diff --git a/fearless/Common/View/SelectEcosystemBannerView.swift b/fearless/Common/View/SelectEcosystemBannerView.swift index 094bf5ddb5..24170ffe05 100644 --- a/fearless/Common/View/SelectEcosystemBannerView.swift +++ b/fearless/Common/View/SelectEcosystemBannerView.swift @@ -29,9 +29,9 @@ final class SelectEcosystemBannerView: UIView { button.imageWithTitleView?.titleFont = .h6Title return button }() - + private let ecosystem: AccountCreateEcosystem - + init(ecosystem: AccountCreateEcosystem) { self.ecosystem = ecosystem super.init(frame: .zero) diff --git a/fearless/Modules/AccountImport/BaseAccountImportInteractor.swift b/fearless/Modules/AccountImport/BaseAccountImportInteractor.swift index 842348ed11..e00b8b93f3 100644 --- a/fearless/Modules/AccountImport/BaseAccountImportInteractor.swift +++ b/fearless/Modules/AccountImport/BaseAccountImportInteractor.swift @@ -114,7 +114,7 @@ extension BaseAccountImportInteractor: AccountImportInteractorInputProtocol { username: request.username ) operation = accountOperationFactory.newTonMetaAccountOperation( - request: request, + request: request, isBackedUp: true ) } diff --git a/fearless/Modules/BackupCreatePassword/BackupCreatePasswordInteractor.swift b/fearless/Modules/BackupCreatePassword/BackupCreatePasswordInteractor.swift index 9a7a88dc4f..40ae80a98b 100644 --- a/fearless/Modules/BackupCreatePassword/BackupCreatePasswordInteractor.swift +++ b/fearless/Modules/BackupCreatePassword/BackupCreatePasswordInteractor.swift @@ -99,7 +99,7 @@ final class BackupCreatePasswordInteractor: BaseAccountConfirmInteractor { switch importEcosystem { case let .regular(request): saveBackupAccount(wallet: wallet, requestType: .mnemonic(request)) - case .ton(_): + case .ton: // TODO: - Ton google backup break } diff --git a/fearless/Modules/NetworkIssuesNotification/NetworkIssuesNotificationRouter.swift b/fearless/Modules/NetworkIssuesNotification/NetworkIssuesNotificationRouter.swift index 1f16b3c739..8510036863 100644 --- a/fearless/Modules/NetworkIssuesNotification/NetworkIssuesNotificationRouter.swift +++ b/fearless/Modules/NetworkIssuesNotification/NetworkIssuesNotificationRouter.swift @@ -64,7 +64,7 @@ final class NetworkIssuesNotificationRouter: NetworkIssuesNotificationRouterInpu private func showCreate(uniqueChainModel: UniqueChainModel, from view: ControllerBackedProtocol?) { guard let controller = UsernameSetupViewFactory.createViewForOnboarding( - flow: .chain(model: uniqueChainModel), + flow: .chain(model: uniqueChainModel), ecosystem: .regular // TODO: - Select ecosystem )?.controller else { return diff --git a/fearless/Modules/OnbordingMain/OnboardingMainPresenter.swift b/fearless/Modules/OnbordingMain/OnboardingMainPresenter.swift index b9e4010ec2..e2ac99c5f0 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainPresenter.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainPresenter.swift @@ -56,7 +56,7 @@ extension OnboardingMainPresenter: OnboardingMainPresenterProtocol { func didSelect(ecosystem: AccountCreateEcosystem) { self.ecosystem = ecosystem } - + func setup() { interactor.setup() diff --git a/fearless/Modules/OnbordingMain/OnboardingMainViewController.swift b/fearless/Modules/OnbordingMain/OnboardingMainViewController.swift index 237b948c6f..f4a97a1f9b 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainViewController.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainViewController.swift @@ -4,9 +4,9 @@ import SoraFoundation final class OnboardingMainViewController: UIViewController, ViewHolder, HiddableBarWhenPushed { typealias RootViewType = OnboardingMainViewLayout - + var presenter: OnboardingMainPresenterProtocol! - + override func loadView() { view = OnboardingMainViewLayout() } @@ -30,7 +30,7 @@ final class OnboardingMainViewController: UIViewController, ViewHolder, Hiddable self.presenter.didSelect(ecosystem: .ton) self.ecosystemHasBeenSelected() } - + rootView.signUpButton.addAction { [weak self] in self?.presenter.activateSignup() } @@ -55,14 +55,14 @@ final class OnboardingMainViewController: UIViewController, ViewHolder, Hiddable } } } - + private func setupGestureRecognizer() { let gesture = UITapGestureRecognizer() rootView.termsLabel.addGestureRecognizer(gesture) - + gesture.addTarget(self, action: #selector(actionTerms(gestureRecognizer: ))) } - + private func ecosystemHasBeenSelected() { UIView.animate( withDuration: 0.25, @@ -77,7 +77,7 @@ final class OnboardingMainViewController: UIViewController, ViewHolder, Hiddable self?.rootView.backButton.isHidden = false } } - + @objc private func actionTerms(gestureRecognizer: UITapGestureRecognizer) { if gestureRecognizer.state == .ended { let location = gestureRecognizer.location(in: rootView.termsLabel.superview) diff --git a/fearless/Modules/OnbordingMain/OnboardingMainViewLayout.swift b/fearless/Modules/OnbordingMain/OnboardingMainViewLayout.swift index ba21419ecc..9f2de0a1d9 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainViewLayout.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainViewLayout.swift @@ -9,7 +9,7 @@ final class OnboardingMainViewLayout: UIView { imageView.image = R.image.backgroundImage() return imageView }() - + let backButton: UIButton = { let button = UIButton() button.setImage(R.image.iconBack(), for: .normal) @@ -17,7 +17,7 @@ final class OnboardingMainViewLayout: UIView { button.isHidden = true return button }() - + let logoView: UIImageView = { let imageView = UIImageView() imageView.contentMode = .scaleAspectFill @@ -25,7 +25,7 @@ final class OnboardingMainViewLayout: UIView { imageView.tintColor = R.color.colorWhite() return imageView }() - + let termsLabel: UILabel = { let label = UILabel() label.numberOfLines = 0 @@ -33,32 +33,32 @@ final class OnboardingMainViewLayout: UIView { label.isUserInteractionEnabled = true return label }() - + let buttonContainer = UIFactory.default.createVerticalStackView(spacing: 8) - + let signUpButton: TriangularedButton = { let button = TriangularedButton() button.applyEnabledStyle() return button }() - + let restoreButton: TriangularedButton = { let button = TriangularedButton() button.applyAccessoryStyle() return button }() - + let preInstalledButton: TriangularedButton = { let button = TriangularedButton() return button }() - + let bannerContainer = UIFactory.default.createVerticalStackView(spacing: 12) let selectRegularBannerView = SelectEcosystemBannerView(ecosystem: .regular) let selectTonBannerView = SelectEcosystemBannerView(ecosystem: .ton) lazy var termDecorator = CompoundAttributedStringDecorator.legal(for: locale) - + var locale: Locale = .current { didSet { applyLocale() @@ -78,7 +78,7 @@ final class OnboardingMainViewLayout: UIView { } // MARK: - Private methods - + private func configureTermsLabel() { if let attributedText = termsLabel.attributedText { termsLabel.attributedText = termDecorator.decorate(attributedString: attributedText) @@ -95,7 +95,7 @@ final class OnboardingMainViewLayout: UIView { let text = NSAttributedString(string: R.string.localizable .onboardingTermsAndConditions1(preferredLanguages: locale.rLanguages)) termsLabel.attributedText = text - + selectRegularBannerView.titleLabel.text = "Create or import Substrate or EVM accounts" selectRegularBannerView.actionButton.imageWithTitleView?.title = "Join EVM or Substrate" selectTonBannerView.titleLabel.text = "Connect to the fastest growing ecosystem ever" @@ -116,7 +116,7 @@ final class OnboardingMainViewLayout: UIView { buttonContainer.addArrangedSubview(preInstalledButton) bannerContainer.addArrangedSubview(selectRegularBannerView) bannerContainer.addArrangedSubview(selectTonBannerView) - + backgroundImageView.snp.makeConstraints { make in make.edges.equalToSuperview() } @@ -143,7 +143,7 @@ final class OnboardingMainViewLayout: UIView { make.bottom.equalTo(safeAreaLayoutGuide.snp.bottom) make.leading.trailing.equalToSuperview().inset(16) } - + [signUpButton, restoreButton, preInstalledButton].forEach { view in view.snp.makeConstraints { make in make.height.equalTo(UIConstants.actionHeight) diff --git a/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift b/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift index b94e1e998f..e6364699a4 100644 --- a/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift +++ b/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift @@ -74,7 +74,7 @@ final class ProfileViewModelFactory: ProfileViewModelFactoryProtocol { ) let logoutViewModel = createLogoutViewModel(locale: locale) let viewModel = ProfileViewModel( - wallet: wallet, + wallet: wallet, profileUserViewModel: profileUserViewModel, profileOptionViewModel: profileOptionViewModel, logoutViewModel: logoutViewModel @@ -114,7 +114,7 @@ final class ProfileViewModelFactory: ProfileViewModelFactoryProtocol { return WalletsManagmentCellViewModel( isSelected: false, - walletName: wallet.name, + walletName: wallet.name, icon: wallet.icon(), fiatBalance: fiatBalance, dayChange: dayChange, diff --git a/fearless/Modules/UsernameSetup/UsernameSetupViewFactory.swift b/fearless/Modules/UsernameSetup/UsernameSetupViewFactory.swift index 9da4624821..5fa8a282e3 100644 --- a/fearless/Modules/UsernameSetup/UsernameSetupViewFactory.swift +++ b/fearless/Modules/UsernameSetup/UsernameSetupViewFactory.swift @@ -33,7 +33,7 @@ final class UsernameSetupViewFactory: UsernameSetupViewFactoryProtocol { ) -> UsernameSetupViewProtocol? { let presenter = UsernameSetupPresenter( wireframe: wireframe, - flow: flow, + flow: flow, ecosystem: ecosystem, localizationManager: LocalizationManager.shared ) diff --git a/fearless/Modules/UsernameSetup/UsernameSetupWireframe.swift b/fearless/Modules/UsernameSetup/UsernameSetupWireframe.swift index abfbcda539..0b65e0bd4e 100644 --- a/fearless/Modules/UsernameSetup/UsernameSetupWireframe.swift +++ b/fearless/Modules/UsernameSetup/UsernameSetupWireframe.swift @@ -8,7 +8,7 @@ final class UsernameSetupWireframe: UsernameSetupWireframeProtocol { ecosystem: AccountCreateEcosystem ) { guard let accountCreation = AccountCreateViewFactory.createViewForOnboarding( - ecosystem: ecosystem, + ecosystem: ecosystem, model: model, flow: flow ) else { diff --git a/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModelFactory.swift b/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModelFactory.swift index 50f3b3df66..05ba4e62f5 100644 --- a/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModelFactory.swift +++ b/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModelFactory.swift @@ -190,7 +190,7 @@ final class WalletConnectSessionViewModelFactoryImpl: WalletConnectSessionViewMo guard let balance = balanceInfo?[wallet.metaId] else { return WalletsManagmentCellViewModel( isSelected: false, - walletName: wallet.name, + walletName: wallet.name, icon: wallet.icon(), fiatBalance: nil, dayChange: nil, diff --git a/fearless/Modules/WalletOption/WalletOptionPresenter.swift b/fearless/Modules/WalletOption/WalletOptionPresenter.swift index 376c846d4e..6ac92a29dd 100644 --- a/fearless/Modules/WalletOption/WalletOptionPresenter.swift +++ b/fearless/Modules/WalletOption/WalletOptionPresenter.swift @@ -9,7 +9,7 @@ final class WalletOptionPresenter { private let interactor: WalletOptionInteractorInput private let wallet: ManagedMetaAccountModel - + lazy var hasWalletDetailsButton: Bool = { switch wallet.info.ecosystem { case .regular: diff --git a/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentViewModelFactory.swift b/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentViewModelFactory.swift index 4401fd072f..cf38919d45 100644 --- a/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentViewModelFactory.swift +++ b/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentViewModelFactory.swift @@ -54,7 +54,7 @@ final class WalletsManagmentViewModelFactory: WalletsManagmentViewModelFactoryPr guard let walletBalance = balances[key] else { return WalletsManagmentCellViewModel( isSelected: isSelected, - walletName: managedMetaAccount.info.name, + walletName: managedMetaAccount.info.name, icon: managedMetaAccount.info.icon(), fiatBalance: nil, dayChange: nil, @@ -74,7 +74,7 @@ final class WalletsManagmentViewModelFactory: WalletsManagmentViewModelFactoryPr let fiatBalance = balanceTokenFormatterValue.stringFromDecimal(.zero) return WalletsManagmentCellViewModel( isSelected: isSelected, - walletName: managedMetaAccount.info.name, + walletName: managedMetaAccount.info.name, icon: managedMetaAccount.info.icon(), fiatBalance: fiatBalance, dayChange: nil, @@ -91,7 +91,7 @@ final class WalletsManagmentViewModelFactory: WalletsManagmentViewModelFactoryPr let viewModel = WalletsManagmentCellViewModel( isSelected: isSelected, - walletName: managedMetaAccount.info.name, + walletName: managedMetaAccount.info.name, icon: managedMetaAccount.info.icon(), fiatBalance: totalFiatValue, dayChange: dayChange, From 927ad4756ee9533fc18aac9423fcc6b56abc2a0c Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Tue, 8 Oct 2024 18:02:00 +0500 Subject: [PATCH 046/156] Banners --- .../xcshareddata/swiftpm/Package.resolved | 2 +- .../Common/Extension/SettingsExtension.swift | 11 +++++ fearless/Common/Model/ChainAsset.swift | 4 +- .../AccountManagementPresentable.swift | 12 ++++-- .../Banners/BannerCollectionViewCell.swift | 3 +- .../Modules/Banners/BannersAssembly.swift | 5 ++- .../Modules/Banners/BannersInteractor.swift | 31 ++++++++++--- .../Modules/Banners/BannersPresenter.swift | 36 +++++++++++----- .../Modules/Banners/BannersProtocols.swift | 2 +- .../Banners/BannersViewModelFactory.swift | 43 ++++++++++++++++--- .../OnboardingMainProtocol.swift | 2 +- .../OnboardingMainViewController.swift | 15 +++++++ .../OnboardingMainViewFactory.swift | 13 +++--- 13 files changed, 142 insertions(+), 37 deletions(-) diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 4c719a0138..5740d0666e 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -142,7 +142,7 @@ "location" : "https://github.com/soramitsu/shared-features-spm.git", "state" : { "branch" : "FW-new-ecosystem", - "revision" : "5294ec2497b843208501b114aa1e9b59953f4aa6" + "revision" : "401b3a035b32811e7a5cc4d69eb0b7f1eb30d7fc" } }, { diff --git a/fearless/Common/Extension/SettingsExtension.swift b/fearless/Common/Extension/SettingsExtension.swift index 9d9b578144..eed89107c2 100644 --- a/fearless/Common/Extension/SettingsExtension.swift +++ b/fearless/Common/Extension/SettingsExtension.swift @@ -15,6 +15,7 @@ enum SettingsKey: String { case selectedCurrency case shouldPlayAssetManagementAnimateKey case accountScoreEnabled + case shouldShowAddWalletBanner } extension SettingsManagerProtocol { @@ -92,4 +93,14 @@ extension SettingsManagerProtocol { } } } + + var shouldShowAddWalletBanner: Bool { + get { + bool(for: SettingsKey.shouldShowAddWalletBanner.rawValue) ?? true + } + + set { + set(value: newValue, for: SettingsKey.shouldShowAddWalletBanner.rawValue) + } + } } diff --git a/fearless/Common/Model/ChainAsset.swift b/fearless/Common/Model/ChainAsset.swift index 08ac3badcf..ad39916c6c 100644 --- a/fearless/Common/Model/ChainAsset.swift +++ b/fearless/Common/Model/ChainAsset.swift @@ -35,9 +35,9 @@ extension ChainAsset { storagePath = StorageCodingPath.tokens } } - case .ethereum(ethereumType: let ethereumType): + case .ethereum: storagePath = .account - case .ton(tonType: let tonType): + case .ton: storagePath = .tokens } diff --git a/fearless/Common/Protocols/AccountManagementPresentable.swift b/fearless/Common/Protocols/AccountManagementPresentable.swift index 6c5f1f7a98..70ba1c2837 100644 --- a/fearless/Common/Protocols/AccountManagementPresentable.swift +++ b/fearless/Common/Protocols/AccountManagementPresentable.swift @@ -1,7 +1,10 @@ import Foundation protocol AccountManagementPresentable { - func showCreateNewWallet(from view: ControllerBackedProtocol?) + func showCreateNewWallet( + ecosystem: AccountCreateEcosystem?, + from view: ControllerBackedProtocol? + ) func showImportWallet( defaultSource: AccountImportSource, from view: ControllerBackedProtocol? @@ -11,8 +14,11 @@ protocol AccountManagementPresentable { } extension AccountManagementPresentable { - func showCreateNewWallet(from view: ControllerBackedProtocol?) { - guard let usernameSetup = OnboardingMainViewFactory.createViewForOnboarding() else { + func showCreateNewWallet( + ecosystem: AccountCreateEcosystem? = nil, + from view: ControllerBackedProtocol? + ) { + guard let usernameSetup = OnboardingMainViewFactory.createViewForAdding(ecosystem: ecosystem) else { return } diff --git a/fearless/Modules/Banners/BannerCollectionViewCell.swift b/fearless/Modules/Banners/BannerCollectionViewCell.swift index 57fc8d210c..69fd8bd0db 100644 --- a/fearless/Modules/Banners/BannerCollectionViewCell.swift +++ b/fearless/Modules/Banners/BannerCollectionViewCell.swift @@ -24,6 +24,7 @@ final class BannerCollectionViewCell: UICollectionViewCell { let label = UILabel() label.textColor = R.color.colorWhite() label.font = .h3Title + label.numberOfLines = 0 return label }() @@ -141,7 +142,7 @@ final class BannerCollectionViewCell: UICollectionViewCell { titleLabel.snp.makeConstraints { make in make.top.equalToSuperview().offset(16) make.leading.equalToSuperview().offset(UIConstants.bigOffset) - make.trailing.equalTo(closeButton.snp.leading).inset(16) + make.trailing.equalTo(closeButton.snp.leading).offset(16) } addSubview(subtitleLabel) diff --git a/fearless/Modules/Banners/BannersAssembly.swift b/fearless/Modules/Banners/BannersAssembly.swift index 5635f9f3a1..28b6113c78 100644 --- a/fearless/Modules/Banners/BannersAssembly.swift +++ b/fearless/Modules/Banners/BannersAssembly.swift @@ -13,14 +13,15 @@ final class BannersAssembly { let walletProvider = UserDataStorageFacade.shared .createStreamableProvider( - filter: NSPredicate.selectedMetaAccount(), + filter: nil, sortDescriptors: [], mapper: AnyCoreDataMapper(ManagedMetaAccountMapper()) ) let interactor = BannersInteractor( walletProvider: walletProvider, - eventCenter: EventCenter.shared + eventCenter: EventCenter.shared, + userDefaults: ServiceAssembly.shared.userDefaults ) let router = BannersRouter() diff --git a/fearless/Modules/Banners/BannersInteractor.swift b/fearless/Modules/Banners/BannersInteractor.swift index 902fc324c2..73f48eb68b 100644 --- a/fearless/Modules/Banners/BannersInteractor.swift +++ b/fearless/Modules/Banners/BannersInteractor.swift @@ -1,4 +1,5 @@ import UIKit +import SoraKeystore import RobinHood import SSFModels @@ -14,13 +15,16 @@ final class BannersInteractor { private let walletProvider: StreamableProvider private let eventCenter: EventCenterProtocol + private let userDefaults: SettingsManagerProtocol init( walletProvider: StreamableProvider, - eventCenter: EventCenterProtocol + eventCenter: EventCenterProtocol, + userDefaults: SettingsManagerProtocol ) { self.walletProvider = walletProvider self.eventCenter = eventCenter + self.userDefaults = userDefaults } // MARK: - Private methods @@ -29,6 +33,15 @@ final class BannersInteractor { // MARK: - BannersInteractorInput extension BannersInteractor: BannersInteractorInput { + var shouldShowAddWalletBanner: Bool { + get { + userDefaults.shouldShowAddWalletBanner + } + set { + userDefaults.shouldShowAddWalletBanner = newValue + } + } + func setup(with output: BannersInteractorOutput) { self.output = output } @@ -52,12 +65,20 @@ extension BannersInteractor: BannersInteractorInput { func subscribeToWallet() { let updateClosure: ([DataProviderChange]) -> Void = { [weak self] changes in - guard let selectedWallet = changes.firstToLastChange(filter: { wallet in - wallet.isSelected - }) else { + guard let wallet = changes.reduceToLastChange() else { return } - self?.output?.didReceive(wallet: selectedWallet.info) + self?.output?.didReceive(wallet: wallet.info) + changes.forEach { change in + switch change { + case .insert(newItem: let newItem): + self?.output?.didReceive(wallet: newItem.info) + case .update(newItem: let newItem): + self?.output?.didReceive(wallet: newItem.info) + case .delete(deletedIdentifier: let deletedIdentifier): + break + } + } } let failureClosure: (Error) -> Void = { [weak self] error in diff --git a/fearless/Modules/Banners/BannersPresenter.swift b/fearless/Modules/Banners/BannersPresenter.swift index d178812880..37312ab305 100644 --- a/fearless/Modules/Banners/BannersPresenter.swift +++ b/fearless/Modules/Banners/BannersPresenter.swift @@ -12,6 +12,7 @@ protocol BannersViewInput: ControllerBackedProtocol { } protocol BannersInteractorInput: AnyObject { + var shouldShowAddWalletBanner: Bool { get set } func setup(with output: BannersInteractorOutput) func markWalletAsBackedUp(_ wallet: MetaAccountModel) func subscribeToWallet() @@ -31,7 +32,7 @@ final class BannersPresenter { BannersViewModelFactory() }() - private var wallet: MetaAccountModel? + private var wallets: [MetaAccountModel] = [] // MARK: - Constructors @@ -49,7 +50,9 @@ final class BannersPresenter { self.interactor = interactor self.router = router self.type = type - self.wallet = wallet + if let wallet { + self.wallets.append(wallet) + } self.localizationManager = localizationManager } @@ -57,10 +60,11 @@ final class BannersPresenter { // MARK: - Private methods private func provideViewModel() { - guard let wallet = wallet else { - return - } - let viewModel = viewModelFactory.createViewModel(wallet: wallet, locale: selectedLocale) + let viewModel = viewModelFactory.createViewModel( + wallets: wallets, + locale: selectedLocale, + shouldShowAddWalletBanner: interactor.shouldShowAddWalletBanner + ) DispatchQueue.main.async { self.view?.didReceive(viewModel: viewModel) } @@ -102,7 +106,7 @@ final class BannersPresenter { extension BannersPresenter: BannersViewOutput { func didTapOnBanner(_ banner: Banners) { - guard let wallet = wallet else { + guard let wallet = SelectedWalletSettings.shared.value else { return } @@ -115,13 +119,17 @@ extension BannersPresenter: BannersViewOutput { router.presentLiquidityPools(on: view, wallet: wallet, chainId: Chain.soraMain.genesisHash) case .liquidityPoolsTest: router.presentLiquidityPools(on: view, wallet: wallet, chainId: Chain.soraTest.genesisHash) + case .addRegularWallet: + router.showCreateNewWallet(ecosystem: .regular, from: view) + case .addTonWallet: + router.showCreateNewWallet(ecosystem: .ton, from: view) } } func didCloseBanner(_ banner: Banners) { switch banner { case .backup: - guard let wallet = wallet else { + guard let wallet = SelectedWalletSettings.shared.value else { return } showNotBackedUpAlert(wallet: wallet) @@ -129,6 +137,12 @@ extension BannersPresenter: BannersViewOutput { break case .liquidityPools, .liquidityPoolsTest: moduleOutput?.didTapCloseBanners() + case .addRegularWallet: + interactor.shouldShowAddWalletBanner = false + provideViewModel() + case .addTonWallet: + interactor.shouldShowAddWalletBanner = false + provideViewModel() } } @@ -150,7 +164,8 @@ extension BannersPresenter: BannersInteractorOutput { } func didReceive(wallet: MetaAccountModel) { - self.wallet = wallet + self.wallets = self.wallets.filter { $0.metaId != wallet.metaId } + self.wallets.append(wallet) provideViewModel() } } @@ -163,7 +178,8 @@ extension BannersPresenter: Localizable { extension BannersPresenter: BannersModuleInput { func reload(with wallet: MetaAccountModel) { - self.wallet = wallet + self.wallets = self.wallets.filter { $0.metaId != wallet.metaId } + self.wallets.append(wallet) provideViewModel() } diff --git a/fearless/Modules/Banners/BannersProtocols.swift b/fearless/Modules/Banners/BannersProtocols.swift index e28bddd444..c729d58217 100644 --- a/fearless/Modules/Banners/BannersProtocols.swift +++ b/fearless/Modules/Banners/BannersProtocols.swift @@ -5,7 +5,7 @@ typealias BannersModuleCreationResult = ( input: BannersModuleInput ) -protocol BannersRouterInput: AnyObject, SheetAlertPresentable { +protocol BannersRouterInput: AnyObject, SheetAlertPresentable, AccountManagementPresentable { func showWalletBackupScreen( for wallet: MetaAccountModel, from view: ControllerBackedProtocol? diff --git a/fearless/Modules/Banners/BannersViewModelFactory.swift b/fearless/Modules/Banners/BannersViewModelFactory.swift index a879911be5..72f23a8b00 100644 --- a/fearless/Modules/Banners/BannersViewModelFactory.swift +++ b/fearless/Modules/Banners/BannersViewModelFactory.swift @@ -10,12 +10,15 @@ enum Banners: Int { case buyXor case liquidityPools case liquidityPoolsTest + case addRegularWallet + case addTonWallet } protocol BannersViewModelFactoryProtocol { func createViewModel( - wallet: MetaAccountModel, - locale: Locale + wallets: [MetaAccountModel], + locale: Locale, + shouldShowAddWalletBanner: Bool ) -> BannersViewModel func createViewModel(banners: [Banners], locale: Locale) -> BannersViewModel @@ -86,6 +89,26 @@ final class BannersViewModelFactory: BannersViewModelFactoryProtocol { fullsizeImage: true, bannerType: .liquidityPoolsTest ) + case .addRegularWallet: + return BannerCellViewModel( + title: "EVM/Substrate accounts", + subtitle: "Join the ecosystems with more than 90+ chains and fascinating features", + buttonTitle: "Сreate or import", + image: R.image.regularBanner()!, + dismissable: true, + fullsizeImage: true, + bannerType: $0 + ) + case .addTonWallet: + return BannerCellViewModel( + title: "Join the fastest growing ecosystem ever", + subtitle: "", + buttonTitle: "Join now", + image: R.image.tonBanner()!, + dismissable: true, + fullsizeImage: true, + bannerType: $0 + ) } } @@ -93,14 +116,24 @@ final class BannersViewModelFactory: BannersViewModelFactoryProtocol { } func createViewModel( - wallet: MetaAccountModel, - locale: Locale + wallets: [MetaAccountModel], + locale: Locale, + shouldShowAddWalletBanner: Bool ) -> BannersViewModel { var banners: [Banners] = [] - if !wallet.hasBackup { + if let wallet = SelectedWalletSettings.shared.value, !wallet.hasBackup { banners.insert(.backup, at: 0) } + if shouldShowAddWalletBanner { + let divided = wallets.divide(predicate: { $0.ecosystem.isRegular }) + if divided.slice.isEmpty { + banners.append(.addRegularWallet) + } else if divided.remainder.isEmpty { + banners.append(.addTonWallet) + } + } + return createViewModel(banners: banners, locale: locale) } } diff --git a/fearless/Modules/OnbordingMain/OnboardingMainProtocol.swift b/fearless/Modules/OnbordingMain/OnboardingMainProtocol.swift index d8a73cba6b..5415c5e0e7 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainProtocol.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainProtocol.swift @@ -47,6 +47,6 @@ protocol OnboardingMainInteractorOutputProtocol: AnyObject { protocol OnboardingMainViewFactoryProtocol { static func createViewForOnboarding() -> OnboardingMainViewProtocol? - static func createViewForAdding() -> OnboardingMainViewProtocol? + static func createViewForAdding(ecosystem: AccountCreateEcosystem?) -> OnboardingMainViewProtocol? static func createViewForAccountSwitch() -> OnboardingMainViewProtocol? } diff --git a/fearless/Modules/OnbordingMain/OnboardingMainViewController.swift b/fearless/Modules/OnbordingMain/OnboardingMainViewController.swift index f4a97a1f9b..4b5da06c3e 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainViewController.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainViewController.swift @@ -7,6 +7,16 @@ final class OnboardingMainViewController: UIViewController, ViewHolder, Hiddable var presenter: OnboardingMainPresenterProtocol! + private let ecosystem: AccountCreateEcosystem? + init(ecosystem: AccountCreateEcosystem?) { + self.ecosystem = ecosystem + super.init(nibName: nil, bundle: nil) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + override func loadView() { view = OnboardingMainViewLayout() } @@ -17,6 +27,11 @@ final class OnboardingMainViewController: UIViewController, ViewHolder, Hiddable rootView.preInstalledButton.isHidden = true bindActions() setupGestureRecognizer() + + if let ecosystem { + ecosystemHasBeenSelected() + presenter.didSelect(ecosystem: ecosystem) + } } private func bindActions() { diff --git a/fearless/Modules/OnbordingMain/OnboardingMainViewFactory.swift b/fearless/Modules/OnbordingMain/OnboardingMainViewFactory.swift index 086c3b7980..a4dcf17e92 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainViewFactory.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainViewFactory.swift @@ -7,21 +7,22 @@ import SSFNetwork final class OnboardingMainViewFactory: OnboardingMainViewFactoryProtocol { static func createViewForOnboarding() -> OnboardingMainViewProtocol? { let wireframe = OnboardingMainWireframe() - return createView(for: wireframe) + return createView(for: wireframe, ecosystem: nil) } - static func createViewForAdding() -> OnboardingMainViewProtocol? { + static func createViewForAdding(ecosystem: AccountCreateEcosystem?) -> OnboardingMainViewProtocol? { let wireframe = AddAccount.OnboardingMainWireframe() - return createView(for: wireframe) + return createView(for: wireframe, ecosystem: ecosystem) } static func createViewForAccountSwitch() -> OnboardingMainViewProtocol? { let wireframe = SwitchAccount.OnboardingMainWireframe() - return createView(for: wireframe) + return createView(for: wireframe, ecosystem: nil) } private static func createView( - for wireframe: OnboardingMainWireframeProtocol + for wireframe: OnboardingMainWireframeProtocol, + ecosystem: AccountCreateEcosystem? ) -> OnboardingMainViewProtocol? { guard let kestoreImportService: KeystoreImportServiceProtocol = URLHandlingService.shared.findService() @@ -41,7 +42,7 @@ final class OnboardingMainViewFactory: OnboardingMainViewFactoryProtocol { let localizationManager = LocalizationManager.shared - let view = OnboardingMainViewController() + let view = OnboardingMainViewController(ecosystem: ecosystem) let appVersionObserver = AppVersionObserver( operationManager: OperationManagerFacade.sharedManager, From e083faa7ad29dea77b6b559e23443c36ed985530 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Wed, 9 Oct 2024 13:04:28 +0500 Subject: [PATCH 047/156] Crowdloan view for settings --- .../Contents.json | 12 ++++++++ .../crowdloansProfileIcon.png | Bin 0 -> 538 bytes .../Modules/Profile/ProfilePresenter.swift | 2 ++ .../Modules/Profile/ProfileProtocol.swift | 1 + .../Modules/Profile/ProfileWireframe.swift | 17 +++++++++++ .../ViewModel/ProfileViewModelFactory.swift | 27 ++++++++++++++++-- 6 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 fearless/Assets.xcassets/crowdloansProfileIcon.imageset/Contents.json create mode 100644 fearless/Assets.xcassets/crowdloansProfileIcon.imageset/crowdloansProfileIcon.png diff --git a/fearless/Assets.xcassets/crowdloansProfileIcon.imageset/Contents.json b/fearless/Assets.xcassets/crowdloansProfileIcon.imageset/Contents.json new file mode 100644 index 0000000000..9804412c47 --- /dev/null +++ b/fearless/Assets.xcassets/crowdloansProfileIcon.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "crowdloansProfileIcon.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/fearless/Assets.xcassets/crowdloansProfileIcon.imageset/crowdloansProfileIcon.png b/fearless/Assets.xcassets/crowdloansProfileIcon.imageset/crowdloansProfileIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..ad4eaed534cd9a5568708f3a5b1aea07d937c1c2 GIT binary patch literal 538 zcmV+#0_FXQP)H@#_5^O-tUfGzV!6}{zh)8)> zGc0pq4Get=`6+eC4PuD{3#FKh2)cq5bd!d8BbcC5%4Ljw=$t_g8N?0szf}CTbnBtJ zd>Y=!M-Q__-b{WFs=n#o&SDR*+&zSa0d(1b!jFn}0}4GxB^fqHSIkJ>20 zfIM0n9`+6MVr$z>wZ>%NfPKMETu^S$D35@kMP-pO$+b$u&SQeU!(P6l%MRu?p!UaQ z4&5-<2*=2C+CtnxCo(%6ntg cZiFiR0iwu<9jMVZa{vGU07*qoM6N<$f(fJJ7XSbN literal 0 HcmV?d00001 diff --git a/fearless/Modules/Profile/ProfilePresenter.swift b/fearless/Modules/Profile/ProfilePresenter.swift index 1115cea211..95a64ed4b1 100644 --- a/fearless/Modules/Profile/ProfilePresenter.swift +++ b/fearless/Modules/Profile/ProfilePresenter.swift @@ -103,6 +103,8 @@ extension ProfilePresenter: ProfilePresenterProtocol { break case .walletConnect: wireframe.showWalletConnect(from: view) + case .crowdloans: + wireframe.showCrowdloan(from: view) } } diff --git a/fearless/Modules/Profile/ProfileProtocol.swift b/fearless/Modules/Profile/ProfileProtocol.swift index dee7fbb6f9..ad1e803902 100644 --- a/fearless/Modules/Profile/ProfileProtocol.swift +++ b/fearless/Modules/Profile/ProfileProtocol.swift @@ -57,6 +57,7 @@ protocol ProfileWireframeProtocol: ErrorPresentable, func showPolkaswapDisclaimer(from view: ControllerBackedProtocol?) func showWalletConnect(from view: ControllerBackedProtocol?) func openDebugMenu(from view: ControllerBackedProtocol?) + func showCrowdloan(from view: ControllerBackedProtocol?) } protocol ProfileViewFactoryProtocol: AnyObject { diff --git a/fearless/Modules/Profile/ProfileWireframe.swift b/fearless/Modules/Profile/ProfileWireframe.swift index 4d7297260a..bbe0ea0213 100644 --- a/fearless/Modules/Profile/ProfileWireframe.swift +++ b/fearless/Modules/Profile/ProfileWireframe.swift @@ -127,6 +127,23 @@ final class ProfileWireframe: ProfileWireframeProtocol, AuthorizationPresentable view?.controller.present(navigation, animated: true) } + func showCrowdloan(from view: ControllerBackedProtocol?) { + let crowdloanState = CrowdloanSharedState() + crowdloanState.settings.setup() + + guard let selectedMetaAccount = SelectedWalletSettings.shared.value, + let crowloanView = CrowdloanListViewFactory.createView( + with: crowdloanState, + selectedMetaAccount: selectedMetaAccount + ) + else { + return + } + + let navigationController = FearlessNavigationController(rootViewController: crowloanView.controller) + view?.controller.present(navigationController, animated: true) + } + // MARK: Private private func showPinSetup(from view: ProfileViewProtocol?) { diff --git a/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift b/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift index e6364699a4..7b98e8e8eb 100644 --- a/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift +++ b/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift @@ -19,6 +19,7 @@ protocol ProfileViewModelFactoryProtocol: AnyObject { enum ProfileOption: UInt, CaseIterable { case walletConnect case accountList + case crowdloans case currency case language case polkaswapDisclaimer @@ -70,7 +71,8 @@ final class ProfileViewModelFactory: ProfileViewModelFactoryProtocol { language: language, currency: currency, locale: locale, - missingAccountIssue: missingAccountIssue + missingAccountIssue: missingAccountIssue, + ecosystem: wallet.ecosystem ) let logoutViewModel = createLogoutViewModel(locale: locale) let viewModel = ProfileViewModel( @@ -126,7 +128,8 @@ final class ProfileViewModelFactory: ProfileViewModelFactoryProtocol { language: Language, currency: Currency, locale: Locale, - missingAccountIssue: [ChainIssue] + missingAccountIssue: [ChainIssue], + ecosystem: WalletEcosystem ) -> [ProfileOptionViewModelProtocol] { let optionViewModels = ProfileOption.allCases.compactMap { (option) -> ProfileOptionViewModel? in switch option { @@ -151,6 +154,13 @@ final class ProfileViewModelFactory: ProfileViewModelFactoryProtocol { return createCurrencyViewModel(from: currency, locale: locale) case .accountScore: return createAccountScoreViewModel(locale: locale) + case .crowdloans: + switch ecosystem { + case .regular: + return createCrowdloans(for: locale) + default: + return nil + } } } @@ -234,6 +244,19 @@ final class ProfileViewModelFactory: ProfileViewModelFactoryProtocol { ) } + private func createCrowdloans(for locale: Locale) -> ProfileOptionViewModel { + let title = R.string.localizable + .tabbarCrowdloanTitle(preferredLanguages: locale.rLanguages) + return ProfileOptionViewModel( + title: title, + icon: R.image.crowdloansProfileIcon()!, + accessoryTitle: nil, + accessoryImage: nil, + accessoryType: .arrow, + option: .crowdloans + ) + } + private func createLanguageViewModel(from language: Language?, locale: Locale) -> ProfileOptionViewModel { let title = R.string.localizable .languageTitle(preferredLanguages: locale.rLanguages) From c088a57ab9b56bef5b7d8d43361f3f37c6f75976 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Thu, 10 Oct 2024 10:03:22 +0500 Subject: [PATCH 048/156] [#FLW-4968, #FLW-4962] We should have only Mnemonic for importing the TON wallet --- fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved | 2 +- .../Wireframes/AddAccount+OnboardingMainWireframe.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 5740d0666e..2fe97671a2 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -283,7 +283,7 @@ { "identity" : "ton-swift", "kind" : "remoteSourceControl", - "location" : "https://github.com/DRadmir/ton-swift", + "location" : "https://github.com/DRadmir/ton-swift.git", "state" : { "branch" : "main", "revision" : "73c9894e2be8d6d16b87853342eb2755d2e4be8a" diff --git a/fearless/Modules/AddAccount/Wireframes/AddAccount+OnboardingMainWireframe.swift b/fearless/Modules/AddAccount/Wireframes/AddAccount+OnboardingMainWireframe.swift index 8dc36f7777..05cce3e993 100644 --- a/fearless/Modules/AddAccount/Wireframes/AddAccount+OnboardingMainWireframe.swift +++ b/fearless/Modules/AddAccount/Wireframes/AddAccount+OnboardingMainWireframe.swift @@ -50,7 +50,7 @@ extension AddAccount { from view: OnboardingMainViewProtocol? ) { guard let restorationController = AccountImportViewFactory - .createViewForAdding(defaultSource: defaultSource)?.controller + .createViewForAdding(defaultSource: defaultSource, flow)?.controller else { return } From 3a89ce04dc4e53b4d0a8f0bd9626ae429bb8ec30 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Thu, 10 Oct 2024 10:29:55 +0500 Subject: [PATCH 049/156] [#FLW-4965] There is no fee and loader --- fearless/Modules/Transfer/Transfer/SendViewLayout.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fearless/Modules/Transfer/Transfer/SendViewLayout.swift b/fearless/Modules/Transfer/Transfer/SendViewLayout.swift index dcced56093..165760279a 100644 --- a/fearless/Modules/Transfer/Transfer/SendViewLayout.swift +++ b/fearless/Modules/Transfer/Transfer/SendViewLayout.swift @@ -163,7 +163,7 @@ final class SendViewLayout: UIView { } func bind(feeViewModel: BalanceViewModelProtocol?) { - feeView.isHidden = feeViewModel == nil + feeView.isHidden = false feeView.bind(viewModel: feeViewModel) } From b901d397d9afd7787e80dfe3bf143e1dd7636e25 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Thu, 10 Oct 2024 11:09:39 +0500 Subject: [PATCH 050/156] [#FLW-4967] Select TON wallet. There are skeletons of NFT on the NFT screen --- .../NFT/MainNftContainer/MainNftContainerViewController.swift | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fearless/Modules/NFT/MainNftContainer/MainNftContainerViewController.swift b/fearless/Modules/NFT/MainNftContainer/MainNftContainerViewController.swift index 2b74dcf37d..878f2647f1 100644 --- a/fearless/Modules/NFT/MainNftContainer/MainNftContainerViewController.swift +++ b/fearless/Modules/NFT/MainNftContainer/MainNftContainerViewController.swift @@ -83,7 +83,9 @@ final class MainNftContainerViewController: UIViewController, ViewHolder { // MARK: - Private methods @objc private func actionRefresh() { - viewModels = nil + if viewModels?.isNotEmpty == true { + viewModels = nil + } rootView.tableView.reloadData() rootView.collectionView.reloadData() output.didPullToRefresh() From 78cde1e5243401906215a518e8b914cfe4960b1a Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Thu, 10 Oct 2024 15:05:21 +0500 Subject: [PATCH 051/156] =?UTF-8?q?[#FLW-4964]=20We=20can=E2=80=99t=20read?= =?UTF-8?q?=20TON=20QR=20Code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 2fe97671a2..4c248cacd7 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -142,7 +142,7 @@ "location" : "https://github.com/soramitsu/shared-features-spm.git", "state" : { "branch" : "FW-new-ecosystem", - "revision" : "401b3a035b32811e7a5cc4d69eb0b7f1eb30d7fc" + "revision" : "5aff5ab7ef02a4d66f610405dd5eac343ab44874" } }, { From f139204adea7b56db4fc03c19c2c15bec11a4338 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Fri, 11 Oct 2024 11:07:28 +0500 Subject: [PATCH 052/156] [#FLW-4963] Flashing warning on the main screen --- .../RemoteSubscription/AccountInfoUpdatingService.swift | 6 +++--- fearless/Modules/Banners/BannerCollectionViewCell.swift | 2 +- .../ChainAssetList/ChainAssetListViewController.swift | 4 ++-- .../ChainAssetList/Views/ChainAssetListViewLayout.swift | 6 ++++-- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/fearless/Common/Services/RemoteSubscription/AccountInfoUpdatingService.swift b/fearless/Common/Services/RemoteSubscription/AccountInfoUpdatingService.swift index 068f42154c..21a04f6959 100644 --- a/fearless/Common/Services/RemoteSubscription/AccountInfoUpdatingService.swift +++ b/fearless/Common/Services/RemoteSubscription/AccountInfoUpdatingService.swift @@ -83,12 +83,12 @@ final class AccountInfoUpdatingService { private func addSubscriptionIfNeeded(for chainAsset: ChainAsset, closure: RemoteSubscriptionClosure? = nil) { Task { - guard let accountId = selectedMetaAccount.fetch(for: chainAsset.chain.accountRequest())?.accountId else { - logger?.error("Couldn't create account for chain \(chainAsset.chain.chainId)") + guard chainAsset.chain.ecosystem.isSubstrate || chainAsset.chain.ecosystem.isEthereumBased, selectedMetaAccount.ecosystem.isRegular else { return } - guard chainAsset.chain.ecosystem.isSubstrate else { + guard let accountId = selectedMetaAccount.fetch(for: chainAsset.chain.accountRequest())?.accountId else { + logger?.error("Couldn't create account for chain \(chainAsset.chain.chainId)") return } diff --git a/fearless/Modules/Banners/BannerCollectionViewCell.swift b/fearless/Modules/Banners/BannerCollectionViewCell.swift index 69fd8bd0db..2e45f0a8b5 100644 --- a/fearless/Modules/Banners/BannerCollectionViewCell.swift +++ b/fearless/Modules/Banners/BannerCollectionViewCell.swift @@ -153,7 +153,7 @@ final class BannerCollectionViewCell: UICollectionViewCell { } addSubview(actionButton) - actionButton.snp.makeConstraints { make in + actionButton.snp.remakeConstraints { make in make.top.greaterThanOrEqualTo(subtitleLabel.snp.bottom).offset(UIConstants.defaultOffset) make.leading.equalToSuperview().offset(UIConstants.bigOffset) make.bottom.equalToSuperview().inset(UIConstants.defaultOffset) diff --git a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListViewController.swift b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListViewController.swift index 7c3113cee8..a96d02f859 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListViewController.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListViewController.swift @@ -147,10 +147,10 @@ private extension ChainAssetListViewController { extension ChainAssetListViewController: ChainAssetListViewInput { func reloadBanners() { - guard viewModel != nil else { + guard let viewModel else { return } - rootView.tableView.setAndLayoutTableHeaderView(header: rootView.headerViewContainer) + didReceive(viewModel: viewModel) } func didReceive(viewModel: ChainAssetListViewModel) { diff --git a/fearless/Modules/NewWallet/ChainAssetList/Views/ChainAssetListViewLayout.swift b/fearless/Modules/NewWallet/ChainAssetList/Views/ChainAssetListViewLayout.swift index a1d70b28c1..c9181e545a 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/Views/ChainAssetListViewLayout.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/Views/ChainAssetListViewLayout.swift @@ -111,10 +111,10 @@ final class ChainAssetListViewLayout: UIView { container.scrollBottomOffset = 116 container.addArrangedSubview(headerViewContainer) container.addArrangedSubview(emptyView) - container.addArrangedSubview(footerButton) + let footerContainer = UIView() + container.addArrangedSubview(footerContainer) headerViewContainer.snp.remakeConstraints { make in - make.leading.trailing.equalToSuperview() make.width.equalToSuperview() } @@ -124,7 +124,9 @@ final class ChainAssetListViewLayout: UIView { make.height.greaterThanOrEqualToSuperview() } + footerContainer.addSubview(footerButton) footerButton.snp.remakeConstraints { make in + make.top.bottom.equalToSuperview() make.leading.trailing.equalToSuperview().inset(16) make.height.equalTo(UIConstants.actionHeight) } From e6c5528245e7d79c47f8a78b0c4cdceabf791557 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Fri, 11 Oct 2024 11:13:18 +0500 Subject: [PATCH 053/156] [#FLW-4971] Substrate wallet. Accounts. There are not active buttons --- .../Modules/ConnectedAccounts/ConnectedAccountsTableCell.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsTableCell.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsTableCell.swift index 92582f4474..6dd7586332 100644 --- a/fearless/Modules/ConnectedAccounts/ConnectedAccountsTableCell.swift +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsTableCell.swift @@ -34,6 +34,7 @@ final class ConnectedAccountsTableCell: UITableViewCell { private let optionsButton: UIButton = { let button = UIButton() button.clipsToBounds = true + button.isUserInteractionEnabled = false return button }() From 120c6aad48bbcaebfcb22f3c3e28642ed966612d Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Wed, 23 Oct 2024 14:46:34 +0700 Subject: [PATCH 054/156] FLW-4974, FLW-4975, FLW-4977, FLW-4878 --- Podfile.lock | 2 +- fearless.xcodeproj/project.pbxproj | 32 ++++++- .../xcshareddata/swiftpm/Package.resolved | 51 ++++++----- .../Foundation/NSPredicate+Filter.swift | 4 + .../Common/Extension/UIKit/UITableView.swift | 11 ++- fearless/Common/Model/KeystoreTag.swift | 12 +-- .../GradientBorderedTriangularedView.swift | 31 +++++++ .../AccountImportViewLayout.swift | 1 + .../BackupWalletViewModelFactory.swift | 3 +- .../Modules/Banners/BannersPresenter.swift | 9 +- .../Modules/Banners/BannersProtocols.swift | 3 +- .../ConnectedAccountsViewModelFactory.swift | 3 +- .../MainTabBar/MainTabBarPresenter.swift | 19 +++- .../MainTabBar/MainTabBarProtocol.swift | 1 - .../MainTabBar/MainTabBarViewController.swift | 89 ++++++++----------- .../MainTabBar/MainTabBarViewFactory.swift | 36 +++++--- fearless/Modules/MainTabBar/TabBar.swift | 56 +++++++----- .../ChainAssetListAssembly.swift | 2 + .../ChainAssetListPresenter.swift | 16 +++- .../ChainAssetListProtocols.swift | 3 +- .../ChainAssetListViewController.swift | 21 +++-- .../Views/ChainAssetListViewLayout.swift | 44 ++++----- .../PolkaswapAdjustmentPresenter.swift | 2 +- .../ViewModel/ProfileViewModelFactory.swift | 15 +++- .../StakingMain/StakingMainProtocols.swift | 2 +- .../StakingMain/StakingMainViewFactory.swift | 2 +- .../StakingMain/StakingMainWireframe.swift | 3 +- ...WalletConnectSessionViewModelFactory.swift | 6 +- .../WalletsManagmentCellViewModel.swift | 1 + .../WalletsManagmentViewModelFactory.swift | 9 +- .../WalletsManagmentAssembly.swift | 5 +- .../WalletsManagmentTableCell.swift | 13 +-- 32 files changed, 330 insertions(+), 177 deletions(-) create mode 100644 fearless/Common/View/GradientBorderedTriangularedView.swift diff --git a/Podfile.lock b/Podfile.lock index 8e1e65320b..f325ec2052 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -99,7 +99,7 @@ DEPENDENCIES: - SwiftyBeaver SPEC REPOS: - https://github.com/CocoaPods/Specs.git: + https://github.com/cocoapods/Specs.git: - Charts - CocoaLumberjack - Cuckoo diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index f16a2a96ac..f20b6abb67 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 54; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ @@ -2464,6 +2464,8 @@ FA68301C2930DD35002AD926 /* RecommendedValidatorListPoolViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA68301B2930DD35002AD926 /* RecommendedValidatorListPoolViewModelFactory.swift */; }; FA69A94727CE3476000352A6 /* SubstrateV2Mapping.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = FA69A94627CE3476000352A6 /* SubstrateV2Mapping.xcmappingmodel */; }; FA6A6DBD27B60A84007D1A20 /* ChainNodeModelMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA6A6DBC27B60A84007D1A20 /* ChainNodeModelMapper.swift */; }; + FA6AA3EB2CC0D0860010DBBF /* EmptyStateViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA6AA3EA2CC0D0860010DBBF /* EmptyStateViewController.swift */; }; + FA6AA3ED2CC0F6F80010DBBF /* EmptyStateViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA6AA3EC2CC0F6F80010DBBF /* EmptyStateViewLayout.swift */; }; FA6C175329935DAE00A55254 /* AssetTransactionData+GiantsquidHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA6C175029935DAD00A55254 /* AssetTransactionData+GiantsquidHistory.swift */; }; FA6C175429935DAE00A55254 /* AssetTransactionData+SubqueryHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA6C175129935DAD00A55254 /* AssetTransactionData+SubqueryHistory.swift */; }; FA6C175529935DAE00A55254 /* AssetTransactionData+SubsquidHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA6C175229935DAE00A55254 /* AssetTransactionData+SubsquidHistory.swift */; }; @@ -2526,6 +2528,7 @@ FA72546F2AC2F12D00EC47A6 /* Web3Wallet in Frameworks */ = {isa = PBXBuildFile; productRef = FA72546E2AC2F12D00EC47A6 /* Web3Wallet */; }; FA7336FD2A132F740096A291 /* AlchemyHistoryOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA7336FC2A132F740096A291 /* AlchemyHistoryOperationFactory.swift */; }; FA7337092A1339890096A291 /* AssetTransactionData+AlchemyHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA7337082A1339890096A291 /* AssetTransactionData+AlchemyHistory.swift */; }; + FA740A8D2CC8C03400981508 /* GradientBorderedTriangularedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA740A8C2CC8C03400981508 /* GradientBorderedTriangularedView.swift */; }; FA74359529C0733E0085A47E /* Array+Difference.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA74359429C0733E0085A47E /* Array+Difference.swift */; }; FA74359729C0734B0085A47E /* CDAccountInfo+CoreDataCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA74359629C0734B0085A47E /* CDAccountInfo+CoreDataCodable.swift */; }; FA74359929C0735B0085A47E /* ChainSettingsRepositoryFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA74359829C0735B0085A47E /* ChainSettingsRepositoryFactory.swift */; }; @@ -5780,6 +5783,9 @@ FA68301B2930DD35002AD926 /* RecommendedValidatorListPoolViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecommendedValidatorListPoolViewModelFactory.swift; sourceTree = ""; }; FA69A94627CE3476000352A6 /* SubstrateV2Mapping.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = SubstrateV2Mapping.xcmappingmodel; sourceTree = ""; }; FA6A6DBC27B60A84007D1A20 /* ChainNodeModelMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainNodeModelMapper.swift; sourceTree = ""; }; + FA6AA3E82CC0C7A80010DBBF /* shared-features-spm */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = "shared-features-spm"; path = "../shared-features-spm"; sourceTree = ""; }; + FA6AA3EA2CC0D0860010DBBF /* EmptyStateViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyStateViewController.swift; sourceTree = ""; }; + FA6AA3EC2CC0F6F80010DBBF /* EmptyStateViewLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyStateViewLayout.swift; sourceTree = ""; }; FA6C175029935DAD00A55254 /* AssetTransactionData+GiantsquidHistory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+GiantsquidHistory.swift"; sourceTree = ""; }; FA6C175129935DAD00A55254 /* AssetTransactionData+SubqueryHistory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+SubqueryHistory.swift"; sourceTree = ""; }; FA6C175229935DAE00A55254 /* AssetTransactionData+SubsquidHistory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+SubsquidHistory.swift"; sourceTree = ""; }; @@ -5843,6 +5849,7 @@ FA7336C02A0E3B7F0096A291 /* ResponseDecodersFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ResponseDecodersFactory.swift; sourceTree = ""; }; FA7336FC2A132F740096A291 /* AlchemyHistoryOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlchemyHistoryOperationFactory.swift; sourceTree = ""; }; FA7337082A1339890096A291 /* AssetTransactionData+AlchemyHistory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+AlchemyHistory.swift"; sourceTree = ""; }; + FA740A8C2CC8C03400981508 /* GradientBorderedTriangularedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GradientBorderedTriangularedView.swift; sourceTree = ""; }; FA74359429C0733E0085A47E /* Array+Difference.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Array+Difference.swift"; sourceTree = ""; }; FA74359629C0734B0085A47E /* CDAccountInfo+CoreDataCodable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CDAccountInfo+CoreDataCodable.swift"; sourceTree = ""; }; FA74359829C0735B0085A47E /* ChainSettingsRepositoryFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChainSettingsRepositoryFactory.swift; sourceTree = ""; }; @@ -9902,6 +9909,7 @@ 8490139F24A80984008F705E = { isa = PBXGroup; children = ( + FA6AA3E72CC0C7A80010DBBF /* Packages */, 849013AA24A80984008F705E /* fearless */, 849013C124A80986008F705E /* fearlessTests */, 8438E1D024BFAAD2001BDB13 /* fearlessIntegrationTests */, @@ -10326,6 +10334,7 @@ 8490144124A93CDC008F705E /* ViewController */ = { isa = PBXGroup; children = ( + FA6AA3E92CC0D0770010DBBF /* EmptyStateViewController */, 07089AFA28B7839C001566CA /* SheetAlert */, 07DFA473289BD5D90035A8AB /* SelectableList */, FA864443276851BA00956D8E /* Container */, @@ -10613,6 +10622,7 @@ FA2222952BD272A30031DE04 /* SkeletonLoadableView.swift */, FA887A482C1C19DB00CA720F /* WarningView.swift */, 07FEC1352CAE6848003938C6 /* SelectEcosystemBannerView.swift */, + FA740A8C2CC8C03400981508 /* GradientBorderedTriangularedView.swift */, ); path = View; sourceTree = ""; @@ -14547,6 +14557,23 @@ path = WalletConnectProposal; sourceTree = ""; }; + FA6AA3E72CC0C7A80010DBBF /* Packages */ = { + isa = PBXGroup; + children = ( + FA6AA3E82CC0C7A80010DBBF /* shared-features-spm */, + ); + name = Packages; + sourceTree = ""; + }; + FA6AA3E92CC0D0770010DBBF /* EmptyStateViewController */ = { + isa = PBXGroup; + children = ( + FA6AA3EA2CC0D0860010DBBF /* EmptyStateViewController.swift */, + FA6AA3EC2CC0F6F80010DBBF /* EmptyStateViewLayout.swift */, + ); + path = EmptyStateViewController; + sourceTree = ""; + }; FA6C175629935DC700A55254 /* BlockExplorer */ = { isa = PBXGroup; children = ( @@ -18100,6 +18127,7 @@ 8430AACC2602249B005B1066 /* InitialStakingState.swift in Sources */, FAAA294A2B8DCF350089AFE6 /* AsyncStorageRequestFactory+Extension.swift in Sources */, 84786DA825F9F58E0089DFF7 /* EraValidatorService+Fetch.swift in Sources */, + FA740A8D2CC8C03400981508 /* GradientBorderedTriangularedView.swift in Sources */, FAD428FF2A86567F001D6A16 /* BackupRiskWarningsAssembly.swift in Sources */, 8428769324AE046300D91AD8 /* AboutWireframe.swift in Sources */, FA6261F22AC2A535005D3D95 /* MIME+PathExtensions.swift in Sources */, @@ -19830,6 +19858,7 @@ 991DA2DE1E8A45B0A8B187CD /* LiquidityPoolSupplyConfirmAssembly.swift in Sources */, 51876200A6B1EDC54609DF46 /* LiquidityPoolRemoveLiquidityProtocols.swift in Sources */, B112AC02371DE4C1DAD48BB1 /* LiquidityPoolRemoveLiquidityRouter.swift in Sources */, + FA6AA3ED2CC0F6F80010DBBF /* EmptyStateViewLayout.swift in Sources */, 5A7D43CA17B84C71E8EEF256 /* LiquidityPoolRemoveLiquidityPresenter.swift in Sources */, FC540426B1BC363842A3677B /* LiquidityPoolRemoveLiquidityInteractor.swift in Sources */, 466B1E0EEC6438F8835AAF2E /* LiquidityPoolRemoveLiquidityViewController.swift in Sources */, @@ -19852,6 +19881,7 @@ 084DDCBC4CE8438770EB48DE /* ConfirmTransferRouter.swift in Sources */, 604162EC2B721993E397E6B0 /* ConfirmTransferPresenter.swift in Sources */, 3152634A9E3FBF5E463CF56E /* ConfirmTransferViewController.swift in Sources */, + FA6AA3EB2CC0D0860010DBBF /* EmptyStateViewController.swift in Sources */, 0A2BBD1BB87EBB75BBD919F7 /* ConfirmTransferViewLayout.swift in Sources */, 26F0F2A52C7EFD38CBC2F1C3 /* ConfirmTransferAssembly.swift in Sources */, BCB9B3DF3D8104BC8456811B /* TonWebBridgeProtocols.swift in Sources */, diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 4c248cacd7..163f65ac7a 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,5 +1,4 @@ { - "originHash" : "db3e9f7067135f4497b6059ac444951778a2f8ca758335577305759626739473", "pins" : [ { "identity" : "appauth-ios", @@ -33,8 +32,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/krzyzanowskim/CryptoSwift.git", "state" : { - "revision" : "c9c3df6ab812de32bae61fc0cd1bf6d45170ebf0", - "version" : "1.8.2" + "revision" : "678d442c6f7828def400a70ae15968aef67ef52d", + "version" : "1.8.3" } }, { @@ -123,8 +122,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/ashleymills/Reachability.swift", "state" : { - "revision" : "21d1dc412cfecbe6e34f1f4c4eb88d3f912654a6", - "version" : "5.2.4" + "revision" : "7cbd73f46a7dfaeca079e18df7324c6de6d1834a", + "version" : "5.2.3" } }, { @@ -136,15 +135,6 @@ "version" : "0.1.7" } }, - { - "identity" : "shared-features-spm", - "kind" : "remoteSourceControl", - "location" : "https://github.com/soramitsu/shared-features-spm.git", - "state" : { - "branch" : "FW-new-ecosystem", - "revision" : "5aff5ab7ef02a4d66f610405dd5eac343ab44874" - } - }, { "identity" : "swift-atomics", "kind" : "remoteSourceControl", @@ -159,8 +149,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-collections.git", "state" : { - "revision" : "ee97538f5b81ae89698fd95938896dec5217b148", - "version" : "1.1.1" + "revision" : "3d2dc41a01f9e49d84f0a3925fb858bed64f702d", + "version" : "1.1.2" } }, { @@ -168,8 +158,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-http-types", "state" : { - "revision" : "1ddbea1ee34354a6a2532c60f98501c35ae8edfa", - "version" : "1.2.0" + "revision" : "ae67c8178eb46944fd85e4dc6dd970e1f3ed6ccd", + "version" : "1.3.0" } }, { @@ -177,8 +167,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-nio.git", "state" : { - "revision" : "fc79798d5a150d61361a27ce0c51169b889e23de", - "version" : "2.68.0" + "revision" : "4c4453b489cf76e6b3b0f300aba663eb78182fad", + "version" : "2.70.0" } }, { @@ -195,8 +185,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-nio-http2.git", "state" : { - "revision" : "a0224f3d20438635dd59c9fcc593520d80d131d0", - "version" : "1.33.0" + "revision" : "b5f7062b60e4add1e8c343ba4eb8da2e324b3a94", + "version" : "1.34.0" } }, { @@ -204,8 +194,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-nio-ssl.git", "state" : { - "revision" : "2b09805797f21c380f7dc9bedaab3157c5508efb", - "version" : "2.27.0" + "revision" : "a9fa5efd86e7ce2e5c1b6de113262e58035ca251", + "version" : "2.27.1" } }, { @@ -244,6 +234,15 @@ "version" : "1.3.2" } }, + { + "identity" : "swiftformat", + "kind" : "remoteSourceControl", + "location" : "https://github.com/nicklockwood/SwiftFormat", + "state" : { + "revision" : "86ed20990585f478c0daf309af645c2a528b59d8", + "version" : "0.54.6" + } + }, { "identity" : "swiftimagereadwrite", "kind" : "remoteSourceControl", @@ -283,7 +282,7 @@ { "identity" : "ton-swift", "kind" : "remoteSourceControl", - "location" : "https://github.com/DRadmir/ton-swift.git", + "location" : "https://github.com/DRadmir/ton-swift", "state" : { "branch" : "main", "revision" : "73c9894e2be8d6d16b87853342eb2755d2e4be8a" @@ -335,5 +334,5 @@ } } ], - "version" : 3 + "version" : 2 } diff --git a/fearless/Common/Extension/Foundation/NSPredicate+Filter.swift b/fearless/Common/Extension/Foundation/NSPredicate+Filter.swift index 1a94b0e4e1..76dc9b1f94 100644 --- a/fearless/Common/Extension/Foundation/NSPredicate+Filter.swift +++ b/fearless/Common/Extension/Foundation/NSPredicate+Filter.swift @@ -96,4 +96,8 @@ extension NSPredicate { static func enabledCHain() -> NSPredicate { NSPredicate(format: "%K == false", #keyPath(CDChain.disabled)) } + + static func regularEcosystem() -> NSPredicate { + NSPredicate(format: "%K == nil", #keyPath(CDMetaAccount.tonAddress)) + } } diff --git a/fearless/Common/Extension/UIKit/UITableView.swift b/fearless/Common/Extension/UIKit/UITableView.swift index faa676c486..e2416811bd 100644 --- a/fearless/Common/Extension/UIKit/UITableView.swift +++ b/fearless/Common/Extension/UIKit/UITableView.swift @@ -4,13 +4,16 @@ import UIKit extension UITableView { func setAndLayoutTableHeaderView(header: UIView) { tableHeaderView = header - tableHeaderView?.translatesAutoresizingMaskIntoConstraints = false - tableHeaderView?.snp.remakeConstraints { make in - make.width.equalTo(self.frame.width) - } + header.translatesAutoresizingMaskIntoConstraints = false + header.setNeedsLayout() header.layoutIfNeeded() header.frame.size = header.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize) tableHeaderView = header + + header.snp.remakeConstraints { make in + make.width.equalTo(self.frame.width-32) + make.leading.equalToSuperview().inset(16) + } } } diff --git a/fearless/Common/Model/KeystoreTag.swift b/fearless/Common/Model/KeystoreTag.swift index a8ebbae994..14ab2e4360 100644 --- a/fearless/Common/Model/KeystoreTag.swift +++ b/fearless/Common/Model/KeystoreTag.swift @@ -20,11 +20,11 @@ enum KeystoreTagV2: String, CaseIterable { ) -> String { switch ecosystem { case .substrate: - Self.substrateSecretKeyTagForMetaId(metaId, accountId: accountId) + return Self.substrateSecretKeyTagForMetaId(metaId, accountId: accountId) case .ethereum, .ethereumBased: - Self.ethereumSecretKeyTagForMetaId(metaId, accountId: accountId) + return Self.ethereumSecretKeyTagForMetaId(metaId, accountId: accountId) case .ton: - Self.tonSecretKeyTagForMetaId(metaId, accountId: accountId) + return Self.tonSecretKeyTagForMetaId(metaId, accountId: accountId) } } @@ -35,11 +35,11 @@ enum KeystoreTagV2: String, CaseIterable { ) -> String { switch ecosystem { case .substrate: - Self.substrateSeedTagForMetaId(metaId, accountId: accountId) + return Self.substrateSeedTagForMetaId(metaId, accountId: accountId) case .ethereum, .ethereumBased: - Self.ethereumSeedTagForMetaId(metaId, accountId: accountId) + return Self.ethereumSeedTagForMetaId(metaId, accountId: accountId) case .ton: - "" + return "" } } diff --git a/fearless/Common/View/GradientBorderedTriangularedView.swift b/fearless/Common/View/GradientBorderedTriangularedView.swift new file mode 100644 index 0000000000..9335bb130d --- /dev/null +++ b/fearless/Common/View/GradientBorderedTriangularedView.swift @@ -0,0 +1,31 @@ +import UIKit + +class GradientBorderedTriangularedView: TriangularedView { + lazy var gradientBorder: CAGradientLayer = { + let mask = CAShapeLayer() + mask.path = shapePath.cgPath + mask.fillColor = UIColor.clear.cgColor + mask.strokeColor = UIColor.white.cgColor + mask.lineWidth = 1 + + let borderLayer = CAGradientLayer() + borderLayer.frame = bounds + borderLayer.startPoint = gradientBorderStartPoint + borderLayer.endPoint = gradientBorderEndPoint + borderLayer.mask = mask + borderLayer.colors = UIColor.walletBorderGradientColors.map { $0.cgColor } + + return borderLayer + }() + + override func didMoveToWindow() { + super.didMoveToWindow() + layer.addSublayer(gradientBorder) + } + + override func layoutSubviews() { + super.layoutSubviews() + (gradientBorder.mask as? CAShapeLayer)?.path = shapePath.cgPath + gradientBorder.frame = bounds + } +} diff --git a/fearless/Modules/AccountImport/AccountImportViewLayout.swift b/fearless/Modules/AccountImport/AccountImportViewLayout.swift index f92bcb3a8e..b1919ab5ec 100644 --- a/fearless/Modules/AccountImport/AccountImportViewLayout.swift +++ b/fearless/Modules/AccountImport/AccountImportViewLayout.swift @@ -137,6 +137,7 @@ final class AccountImportViewLayout: UIView { view.autocapitalizationType = .none view.autocorrectionType = .no view.isScrollEnabled = false + view.backgroundColor = .clear return view }() diff --git a/fearless/Modules/BackupWallet/BackupWalletViewModelFactory.swift b/fearless/Modules/BackupWallet/BackupWalletViewModelFactory.swift index 72c466e261..00df9bbc59 100644 --- a/fearless/Modules/BackupWallet/BackupWalletViewModelFactory.swift +++ b/fearless/Modules/BackupWallet/BackupWalletViewModelFactory.swift @@ -184,7 +184,8 @@ final class BackupWalletViewModelFactory: BackupWalletViewModelFactoryProtocol { icon: wallet.icon(), fiatBalance: fiatBalance, dayChange: dayChange, - accountScoreViewModel: accountScoreViewModel + accountScoreViewModel: accountScoreViewModel, + optionsAvailable: wallet.ecosystem.isRegular ) } diff --git a/fearless/Modules/Banners/BannersPresenter.swift b/fearless/Modules/Banners/BannersPresenter.swift index 37312ab305..2535d4bdb9 100644 --- a/fearless/Modules/Banners/BannersPresenter.swift +++ b/fearless/Modules/Banners/BannersPresenter.swift @@ -68,7 +68,8 @@ final class BannersPresenter { DispatchQueue.main.async { self.view?.didReceive(viewModel: viewModel) } - moduleOutput?.reloadBannersView() + + moduleOutput?.reloadBannersView(bannersCount: viewModel.banners.count) } private func showNotBackedUpAlert(wallet: MetaAccountModel) { @@ -143,6 +144,7 @@ extension BannersPresenter: BannersViewOutput { case .addTonWallet: interactor.shouldShowAddWalletBanner = false provideViewModel() + } } @@ -185,6 +187,11 @@ extension BannersPresenter: BannersModuleInput { func update(banners: [Banners]) { let viewModel = viewModelFactory.createViewModel(banners: banners, locale: selectedLocale) + view?.didReceive(viewModel: viewModel) } + + func reload() { + provideViewModel() + } } diff --git a/fearless/Modules/Banners/BannersProtocols.swift b/fearless/Modules/Banners/BannersProtocols.swift index c729d58217..398a928f3a 100644 --- a/fearless/Modules/Banners/BannersProtocols.swift +++ b/fearless/Modules/Banners/BannersProtocols.swift @@ -21,9 +21,10 @@ protocol BannersRouterInput: AnyObject, SheetAlertPresentable, AccountManagement protocol BannersModuleInput: AnyObject { func reload(with wallet: MetaAccountModel) func update(banners: [Banners]) + func reload() } protocol BannersModuleOutput: AnyObject { - func reloadBannersView() + func reloadBannersView(bannersCount: Int) func didTapCloseBanners() } diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift index 1527cf0775..8fe5e742bf 100644 --- a/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift @@ -76,7 +76,8 @@ final class ConnectedAccountsViewModelFactoryImpl: ConnectedAccountsViewModelFac icon: wallet.icon(), fiatBalance: fiatBalance, dayChange: dayChange, - accountScoreViewModel: nil + accountScoreViewModel: nil, + optionsAvailable: wallet.ecosystem.isRegular ) } diff --git a/fearless/Modules/MainTabBar/MainTabBarPresenter.swift b/fearless/Modules/MainTabBar/MainTabBarPresenter.swift index 179867e9e9..1492e3ec42 100644 --- a/fearless/Modules/MainTabBar/MainTabBarPresenter.swift +++ b/fearless/Modules/MainTabBar/MainTabBarPresenter.swift @@ -10,6 +10,7 @@ final class MainTabBarPresenter { private let wireframe: MainTabBarWireframeProtocol private let appVersionObserver: AppVersionObserver private let applicationHandler: ApplicationHandler + private let eventCenter: EventCenterProtocol private let reachability: ReachabilityManager? private let networkStatusPresenter: NetworkAvailabilityLayerInteractorOutputProtocol @@ -25,7 +26,8 @@ final class MainTabBarPresenter { networkStatusPresenter: NetworkAvailabilityLayerInteractorOutputProtocol, reachability: ReachabilityManager?, walletConnectCoordinator: WalletConnectCoordinator, - localizationManager: LocalizationManagerProtocol + localizationManager: LocalizationManagerProtocol, + eventCenter: EventCenterProtocol ) { self.wireframe = wireframe self.interactor = interactor @@ -34,8 +36,9 @@ final class MainTabBarPresenter { self.networkStatusPresenter = networkStatusPresenter self.reachability = reachability self.walletConnectCoordinator = walletConnectCoordinator - self.localizationManager = localizationManager + self.eventCenter = eventCenter + self.localizationManager = localizationManager applicationHandler.delegate = self } } @@ -55,6 +58,8 @@ extension MainTabBarPresenter: MainTabBarPresenterProtocol { appVersionObserver.checkVersion(from: view, callback: nil) try? reachability?.add(listener: self) + + eventCenter.add(observer: self, dispatchIn: .main) } } @@ -87,3 +92,13 @@ extension MainTabBarPresenter: StakingMainModuleOutput { wireframe.replaceStaking(on: view, type: type, moduleOutput: self) } } + +extension MainTabBarPresenter: EventVisitorProtocol { + func processSelectedAccountChanged(event: SelectedAccountChanged) { + guard event.account.ecosystem.isRegular else { + return + } + + wireframe.replaceStaking(on: view, type: .normal(chainAsset: nil), moduleOutput: self) + } +} diff --git a/fearless/Modules/MainTabBar/MainTabBarProtocol.swift b/fearless/Modules/MainTabBar/MainTabBarProtocol.swift index 0ab80d45d0..2de586fc08 100644 --- a/fearless/Modules/MainTabBar/MainTabBarProtocol.swift +++ b/fearless/Modules/MainTabBar/MainTabBarProtocol.swift @@ -4,7 +4,6 @@ import SSFModels protocol MainTabBarViewProtocol: ControllerBackedProtocol { func didReplaceView(for newView: UIViewController, for index: Int) - func presentFailedMemoView() } protocol MainTabBarPresenterProtocol: AnyObject { diff --git a/fearless/Modules/MainTabBar/MainTabBarViewController.swift b/fearless/Modules/MainTabBar/MainTabBarViewController.swift index df55da1da1..347d0d45d9 100644 --- a/fearless/Modules/MainTabBar/MainTabBarViewController.swift +++ b/fearless/Modules/MainTabBar/MainTabBarViewController.swift @@ -1,25 +1,26 @@ import UIKit import SoraFoundation +import SSFModels final class MainTabBarViewController: UITabBarController { - private lazy var failedMemoView: AttentionView = { - let view = AttentionView() - view.backgroundColor = .black.withAlphaComponent(0.9) - view.titleLabel.font = .h6Title - return view - }() - private var presenter: MainTabBarPresenterProtocol - + private var eventCenter: EventCenterProtocol private var viewAppeared: Bool = false + private var fullViewControllersList: [UIViewController] + private var wallet: MetaAccountModel init( viewControllers: [UIViewController], presenter: MainTabBarPresenterProtocol, - localizationManager: LocalizationManagerProtocol + localizationManager: LocalizationManagerProtocol, + eventCenter: EventCenterProtocol, + wallet: MetaAccountModel ) { self.presenter = presenter - + self.eventCenter = eventCenter + self.fullViewControllersList = viewControllers + self.wallet = wallet + super.init(nibName: nil, bundle: nil) self.viewControllers = viewControllers @@ -34,6 +35,8 @@ final class MainTabBarViewController: UITabBarController { override func viewDidLoad() { super.viewDidLoad() delegate = self + + eventCenter.add(observer: self, dispatchIn: .main) } override func viewDidAppear(_ animated: Bool) { @@ -51,11 +54,9 @@ final class MainTabBarViewController: UITabBarController { setValue(tabBar, forKey: "tabBar") applyLocalization() - } + + update(with: wallet) - @objc private func didTapFailedMemoView(_: UIGestureRecognizer) { - _ = openTab(vcClass: CrowdloanListViewController.self) - failedMemoView.removeFromSuperview() } private func openTab(vcClass _: T.Type) -> Bool { @@ -82,6 +83,20 @@ final class MainTabBarViewController: UITabBarController { private func wrappedSelectedViewController() -> UIViewController? { selectedViewController?.navigationRootViewController() } + + private func update(with wallet: MetaAccountModel) { + if let tabBar = self.tabBar as? TabBar { + tabBar.setup(for: wallet.ecosystem) + } + switch wallet.ecosystem { + case .regular: + setViewControllers(fullViewControllersList, animated: true) + case .ton: + let indexes: IndexSet = [0, 1, 4] + let tonViewControllers = indexes.map { fullViewControllersList[$0] } + setViewControllers(tonViewControllers, animated: true) + } + } } extension MainTabBarViewController: UITabBarControllerDelegate { @@ -89,11 +104,6 @@ extension MainTabBarViewController: UITabBarControllerDelegate { _: UITabBarController, shouldSelect viewController: UIViewController ) -> Bool { - if let wrappedSelectedViewController = viewController.navigationRootViewController(), - wrappedSelectedViewController.isKind(of: CrowdloanListViewController.self) { - failedMemoView.removeFromSuperview() - } - if viewController == viewControllers?[selectedIndex], let scrollableController = viewController as? ScrollsToTop { scrollableController.scrollToTop() @@ -113,43 +123,14 @@ extension MainTabBarViewController: MainTabBarViewProtocol { setViewControllers(newViewControllers, animated: false) } - - func presentFailedMemoView() { - guard let wrappedSelectedViewController = wrappedSelectedViewController(), - !wrappedSelectedViewController.isKind(of: CrowdloanListViewController.self) else { - return - } - - view.addSubview(failedMemoView) - failedMemoView.snp.makeConstraints { make in - make.bottom.equalTo(self.tabBar.snp.top) - make.centerX.equalToSuperview() - make.width.equalToSuperview() - make.height.equalTo(UIConstants.cellHeight) - } - - failedMemoView.iconView.snp.remakeConstraints { make in - make.leading.equalToSuperview().offset(UIConstants.defaultOffset) - make.size.equalTo(UIConstants.normalAddressIconSize.height) - make.centerY.equalToSuperview() - } - - failedMemoView.titleLabel.snp.remakeConstraints { make in - make.centerY.equalToSuperview() - make.leading.equalTo(failedMemoView.iconView.snp.trailing).offset(UIConstants.defaultOffset) - } - - applyLocalization() - - let tapGesture = UITapGestureRecognizer(target: self, action: #selector(didTapFailedMemoView(_:))) - tapGesture.isEnabled = true - failedMemoView.addGestureRecognizer(tapGesture) - } } extension MainTabBarViewController: Localizable { - func applyLocalization() { - failedMemoView.titleLabel.text = R.string.localizable - .tabbarCrowdloanAttention(preferredLanguages: selectedLocale.rLanguages) + func applyLocalization() {} +} + +extension MainTabBarViewController: EventVisitorProtocol { + func processSelectedAccountChanged(event: SelectedAccountChanged) { + update(with: event.account) } } diff --git a/fearless/Modules/MainTabBar/MainTabBarViewFactory.swift b/fearless/Modules/MainTabBar/MainTabBarViewFactory.swift index f16835c5b0..998563c7f9 100644 --- a/fearless/Modules/MainTabBar/MainTabBarViewFactory.swift +++ b/fearless/Modules/MainTabBar/MainTabBarViewFactory.swift @@ -56,14 +56,21 @@ final class MainTabBarViewFactory: MainTabBarViewFactoryProtocol { networkStatusPresenter: networkStatusPresenter, reachability: ReachabilityManager.shared, walletConnectCoordinator: WalletConnectCoordinator.shared, - localizationManager: localizationManager + localizationManager: localizationManager, + eventCenter: EventCenter.shared ) - let viewControllers = createViewControllers(stakingModuleOutput: presenter, walletConnect: walletConnect, wallet: wallet) + let viewControllers = createViewControllers( + stakingModuleOutput: presenter, + walletConnect: walletConnect, + wallet: wallet + ) let view = MainTabBarViewController( viewControllers: viewControllers, presenter: presenter, - localizationManager: localizationManager + localizationManager: localizationManager, + eventCenter: EventCenter.shared, + wallet: wallet ) return view @@ -102,7 +109,9 @@ final class MainTabBarViewFactory: MainTabBarViewFactoryProtocol { switch stakingType { case .normal: let stakingViewController = createStakingController(moduleOutput: moduleOutput) - view.didReplaceView(for: stakingViewController, for: Self.stakingIndex) + if let stakingViewController = stakingViewController { + view.didReplaceView(for: stakingViewController, for: Self.stakingIndex) + } return stakingViewController case .pool: @@ -140,21 +149,28 @@ final class MainTabBarViewFactory: MainTabBarViewFactoryProtocol { static func createStakingController( moduleOutput: StakingMainModuleOutput? - ) -> UIViewController { - let viewController = StakingMainViewFactory.createView(moduleOutput: moduleOutput)?.controller ?? UIViewController() + ) -> UIViewController? { + let viewController = StakingMainViewFactory.createView(moduleOutput: moduleOutput)?.controller let icon = R.image.iconTabStaking() let normalIcon = icon?.tinted(with: R.color.colorGray()!)? .withRenderingMode(.alwaysOriginal) let selectedIcon = icon?.tinted(with: R.color.colorWhite()!)? .withRenderingMode(.alwaysOriginal) - viewController.tabBarItem = createTabBarItem( + + var navigationController: FearlessNavigationController + + if let viewController = viewController { + navigationController = FearlessNavigationController(rootViewController: viewController) + } else { + navigationController = FearlessNavigationController() + } + + navigationController.tabBarItem = createTabBarItem( normalImage: normalIcon, selectedImage: selectedIcon ) - - let navigationController = FearlessNavigationController(rootViewController: viewController) - + return navigationController } diff --git a/fearless/Modules/MainTabBar/TabBar.swift b/fearless/Modules/MainTabBar/TabBar.swift index c0dac49c5c..4a9e82052e 100644 --- a/fearless/Modules/MainTabBar/TabBar.swift +++ b/fearless/Modules/MainTabBar/TabBar.swift @@ -1,5 +1,6 @@ import Foundation import UIKit +import SSFModels final class TabBar: UITabBar { public var middleButton: UIButton = { @@ -13,11 +14,11 @@ final class TabBar: UITabBar { return middleButton }() - private lazy var bluredView: UIView = { + lazy var bluredView: UIView = { let blurEffect = UIBlurEffect(style: .dark) let bluredView = UIVisualEffectView(effect: blurEffect) bluredView.autoresizingMask = [.flexibleWidth, .flexibleHeight] - bluredView.layer.mask = createMaskLayer() + bluredView.layer.mask = createMaskLayer(withMiddleButtonPlace: true) bluredView.clipsToBounds = true return bluredView }() @@ -35,9 +36,20 @@ final class TabBar: UITabBar { override func layoutSubviews() { super.layoutSubviews() bluredView.frame = bounds - bluredView.layer.mask = createMaskLayer() +// bluredView.layer.mask = createMaskLayer(withMiddleButtonPlace: <#Bool#>) middleButton.rounded() } + + func setup(for ecosystem: WalletEcosystem) { + switch ecosystem { + case .regular: + bluredView.layer.mask = createMaskLayer(withMiddleButtonPlace: true) + middleButton.isHidden = false + case .ton: + bluredView.layer.mask = createMaskLayer(withMiddleButtonPlace: false) + middleButton.isHidden = true + } + } private func setupLayout() { backgroundColor = .clear @@ -51,7 +63,7 @@ final class TabBar: UITabBar { } } - private func createMaskLayer() -> CAShapeLayer { + private func createMaskLayer(withMiddleButtonPlace: Bool) -> CAShapeLayer { let padding: CGFloat = 6.0 let centerButtonHeight: CGFloat = 56.0 let r = CGFloat(28) @@ -63,23 +75,25 @@ final class TabBar: UITabBar { let path = UIBezierPath() path.move(to: .zero) - path.addLine(to: CGPoint(x: halfW - f + padding, y: 0)) - path.addQuadCurve( - to: CGPoint(x: halfW - f, y: r / 2.0), - controlPoint: CGPoint(x: halfW - f, y: 0) - ) - path.addArc( - withCenter: CGPoint(x: halfW, y: r / 2.0), - radius: f, - startAngle: .pi, - endAngle: 0, - clockwise: false - ) - path.addQuadCurve( - to: CGPoint(x: halfW + f - padding, y: 0), - controlPoint: CGPoint(x: halfW + f, y: 0) - ) - + if withMiddleButtonPlace { + path.addLine(to: CGPoint(x: halfW - f + padding, y: 0)) + path.addQuadCurve( + to: CGPoint(x: halfW - f, y: r / 2.0), + controlPoint: CGPoint(x: halfW - f, y: 0) + ) + path.addArc( + withCenter: CGPoint(x: halfW, y: r / 2.0), + radius: f, + startAngle: .pi, + endAngle: 0, + clockwise: false + ) + path.addQuadCurve( + to: CGPoint(x: halfW + f - padding, y: 0), + controlPoint: CGPoint(x: halfW + f, y: 0) + ) + } + path.addLine(to: CGPoint(x: w, y: 0)) path.addLine(to: CGPoint(x: w, y: h)) path.addLine(to: CGPoint(x: 0.0, y: h)) diff --git a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListAssembly.swift b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListAssembly.swift index 48702952dd..9c55ef0e73 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListAssembly.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListAssembly.swift @@ -93,6 +93,8 @@ final class ChainAssetListAssembly { keyboardAdoptable: keyboardAdoptable, localizationManager: localizationManager ) + + presenter.bannersInput = bannersModule?.input return (view, presenter) } diff --git a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListPresenter.swift b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListPresenter.swift index d335f88d67..089189a0b5 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListPresenter.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListPresenter.swift @@ -10,7 +10,7 @@ final class ChainAssetListPresenter { private weak var view: ChainAssetListViewInput? private let router: ChainAssetListRouterInput private let interactor: ChainAssetListInteractorInput - + var bannersInput: BannersModuleInput? private let viewModelFactory: ChainAssetListViewModelFactoryProtocol private var wallet: MetaAccountModel private var chainAssets: [ChainAsset]? @@ -35,6 +35,7 @@ final class ChainAssetListPresenter { self.router = router self.wallet = wallet self.viewModelFactory = viewModelFactory + self.localizationManager = localizationManager } @@ -64,6 +65,11 @@ final class ChainAssetListPresenter { DispatchQueue.main.async { self.view?.didReceive(viewModel: viewModel) + + DispatchQueue.global().async { + self.bannersInput?.reload() + } + } } } @@ -116,6 +122,10 @@ extension ChainAssetListPresenter: ChainAssetListViewOutput { self.view = view interactor.setup(with: self) } + + func didAppear(view: ChainAssetListViewInput) { + + } func didSelectViewModel(_ viewModel: ChainAccountBalanceCellViewModel) { if viewModel.chainAsset.chain.isSupported { @@ -342,9 +352,9 @@ extension ChainAssetListPresenter: ChainAssetListModuleInput { extension ChainAssetListPresenter: BannersModuleOutput { func didTapCloseBanners() {} - func reloadBannersView() { + func reloadBannersView(bannersCount: Int) { DispatchQueue.main.async { - self.view?.reloadBanners() + self.view?.reloadBanners(shouldShowBanners: bannersCount > 0) } } } diff --git a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListProtocols.swift b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListProtocols.swift index c510cc00ee..61f2a54f41 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListProtocols.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListProtocols.swift @@ -5,10 +5,11 @@ typealias ChainAssetListModuleCreationResult = (view: ChainAssetListViewInput, i protocol ChainAssetListViewInput: ControllerBackedProtocol { func didReceive(viewModel: ChainAssetListViewModel) - func reloadBanners() + func reloadBanners(shouldShowBanners: Bool) } protocol ChainAssetListViewOutput: AnyObject { + func didAppear(view: ChainAssetListViewInput) func didLoad(view: ChainAssetListViewInput) func didSelectViewModel(_ viewModel: ChainAccountBalanceCellViewModel) func didTapAction(actionType: SwipableCellButtonType, viewModel: ChainAccountBalanceCellViewModel) diff --git a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListViewController.swift b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListViewController.swift index a96d02f859..437d63180f 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListViewController.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListViewController.swift @@ -63,6 +63,8 @@ final class ChainAssetListViewController: if keyboardHandler == nil, keyboardAdoptable { setupKeyboardHandler() } + + output.didAppear(view: self) } override func viewDidDisappear(_ animated: Bool) { @@ -146,10 +148,16 @@ private extension ChainAssetListViewController { // MARK: - ChainAssetListViewInput extension ChainAssetListViewController: ChainAssetListViewInput { - func reloadBanners() { + func reloadBanners(shouldShowBanners: Bool) { + guard shouldShowBanners else { + rootView.removeHeaderView() + return + } + guard let viewModel else { return } + didReceive(viewModel: viewModel) } @@ -162,19 +170,23 @@ extension ChainAssetListViewController: ChainAssetListViewInput { switch viewModel.displayState { case let .defaultList(_, withAnimate): - rootView.setHeaderView() rootView.setFooterView() + rootView.tableView.reloadData() + guard rootView.isAnimating == false else { + rootView.setHeaderView() + reloadEmptyState(animated: false) return } - rootView.tableView.reloadData() if withAnimate { rootView.runManageAssetAnimate(finish: { [weak self] in self?.output.didFinishManageAssetAnimate() - self?.rootView.tableView.reloadData() + self?.rootView.setHeaderView() }) + } else { + rootView.setHeaderView() } case .chainHasNetworkIssue, .chainHasAccountIssue, .allIsHidden: rootView.removeHeaderView() @@ -186,7 +198,6 @@ extension ChainAssetListViewController: ChainAssetListViewInput { isEmpty ? rootView.removeHeaderView() : rootView.setHeaderView() rootView.tableView.reloadData() } - reloadEmptyState(animated: false) } } diff --git a/fearless/Modules/NewWallet/ChainAssetList/Views/ChainAssetListViewLayout.swift b/fearless/Modules/NewWallet/ChainAssetList/Views/ChainAssetListViewLayout.swift index c9181e545a..9336871f04 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/Views/ChainAssetListViewLayout.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/Views/ChainAssetListViewLayout.swift @@ -65,15 +65,12 @@ final class ChainAssetListViewLayout: UIView { func addBanners(view: UIView) { bannersView = view - bannersView?.isHidden = true - headerViewContainer.addArrangedSubview(view) - view.snp.makeConstraints { make in - make.width.equalToSuperview().inset(UIConstants.bigOffset) - } } func setHeaderView() { - tableView.setAndLayoutTableHeaderView(header: headerViewContainer) + if let bannersView = bannersView { + tableView.setAndLayoutTableHeaderView(header: bannersView) + } } func removeHeaderView() { @@ -135,17 +132,23 @@ final class ChainAssetListViewLayout: UIView { } func runManageAssetAnimate(finish: @escaping (() -> Void)) { - isAnimating = true + var visibleRect: CGRect = .zero + visibleRect.origin = self.tableView.contentOffset + visibleRect.size = self.tableView.bounds.size + let rect = self.tableView.convert( + self.footerButton.bounds, + from: self.tableView.tableFooterView + ) + + guard !visibleRect.intersects(rect) else { + finish() + return + } + + self.tableView.scrollRectToVisible(rect, animated: true) DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { - let rect = self.tableView.convert( - self.footerButton.bounds, - from: self.tableView.tableFooterView - ) - self.tableView.scrollRectToVisible( - rect, - animated: true - ) + self.isAnimating = true UIView.animate( withDuration: 0.6, @@ -154,13 +157,14 @@ final class ChainAssetListViewLayout: UIView { self.footerButton.transform = CGAffineTransform(scaleX: 1.2, y: 1.2) }, completion: { _ in - UIView.animate(withDuration: 0.6) { + UIView.animate(withDuration: 0.6, + animations: { self.footerButton.transform = CGAffineTransform.identity - finish() self.isAnimating = false - } - } - ) + }, completion: { _ in + finish() + }) + }) } } diff --git a/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentPresenter.swift b/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentPresenter.swift index ccec5c0670..9a12a333ee 100644 --- a/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentPresenter.swift +++ b/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentPresenter.swift @@ -958,7 +958,7 @@ extension PolkaswapAdjustmentPresenter: PolkaswapTransaktionSettingsModuleOutput // MARK: - BannersModuleOutput extension PolkaswapAdjustmentPresenter: BannersModuleOutput { - func reloadBannersView() {} + func reloadBannersView(bannersCount: Int) {} func didTapCloseBanners() { DispatchQueue.main.async { [weak self] in diff --git a/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift b/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift index 7b98e8e8eb..12d3dabe43 100644 --- a/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift +++ b/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift @@ -120,7 +120,8 @@ final class ProfileViewModelFactory: ProfileViewModelFactoryProtocol { icon: wallet.icon(), fiatBalance: fiatBalance, dayChange: dayChange, - accountScoreViewModel: accountScoreViewModel + accountScoreViewModel: accountScoreViewModel, + optionsAvailable: wallet.ecosystem.isRegular ) } @@ -134,6 +135,10 @@ final class ProfileViewModelFactory: ProfileViewModelFactoryProtocol { let optionViewModels = ProfileOption.allCases.compactMap { (option) -> ProfileOptionViewModel? in switch option { case .walletConnect: + guard ecosystem.isRegular else { + return nil + } + return createWalletConnectViewModel(locale: locale) case .accountList: return createAccountListViewModel( @@ -145,6 +150,10 @@ final class ProfileViewModelFactory: ProfileViewModelFactoryProtocol { case .language: return createLanguageViewModel(from: language, locale: locale) case .polkaswapDisclaimer: + guard ecosystem.isRegular else { + return nil + } + return createPolkaswapDisclaimer(locale: locale) case .about: return createAboutViewModel(for: locale) @@ -153,6 +162,10 @@ final class ProfileViewModelFactory: ProfileViewModelFactoryProtocol { case .currency: return createCurrencyViewModel(from: currency, locale: locale) case .accountScore: + guard ecosystem.isRegular else { + return nil + } + return createAccountScoreViewModel(locale: locale) case .crowdloans: switch ecosystem { diff --git a/fearless/Modules/Staking/StakingMain/StakingMainProtocols.swift b/fearless/Modules/Staking/StakingMain/StakingMainProtocols.swift index 055237c208..0b2259d23e 100644 --- a/fearless/Modules/Staking/StakingMain/StakingMainProtocols.swift +++ b/fearless/Modules/Staking/StakingMain/StakingMainProtocols.swift @@ -212,7 +212,7 @@ protocol StakingMainWireframeProtocol: SheetAlertPresentable, ErrorPresentable, } protocol StakingMainViewFactoryProtocol: AnyObject { - static func createView(moduleOutput: StakingMainModuleOutput?) -> StakingMainViewProtocol? + static func createView(moduleOutput: StakingMainModuleOutput?) -> ControllerBackedProtocol? } protocol StakingMainModuleOutput: AnyObject { diff --git a/fearless/Modules/Staking/StakingMain/StakingMainViewFactory.swift b/fearless/Modules/Staking/StakingMain/StakingMainViewFactory.swift index 9f5a76693d..9a4cd84f12 100644 --- a/fearless/Modules/Staking/StakingMain/StakingMainViewFactory.swift +++ b/fearless/Modules/Staking/StakingMain/StakingMainViewFactory.swift @@ -7,7 +7,7 @@ import RobinHood // swiftlint:disable function_body_length final class StakingMainViewFactory: StakingMainViewFactoryProtocol { - static func createView(moduleOutput: StakingMainModuleOutput?) -> StakingMainViewProtocol? { + static func createView(moduleOutput: StakingMainModuleOutput?) -> ControllerBackedProtocol? { guard let selectedAccount = SelectedWalletSettings.shared.value else { return nil } diff --git a/fearless/Modules/Staking/StakingMain/StakingMainWireframe.swift b/fearless/Modules/Staking/StakingMain/StakingMainWireframe.swift index 709a4bab29..e849eb380b 100644 --- a/fearless/Modules/Staking/StakingMain/StakingMainWireframe.swift +++ b/fearless/Modules/Staking/StakingMain/StakingMainWireframe.swift @@ -190,7 +190,8 @@ final class StakingMainWireframe: StakingMainWireframeProtocol { guard let module = WalletsManagmentAssembly.configureModule( shouldSaveSelected: true, - moduleOutput: moduleOutput + moduleOutput: moduleOutput, + filter: NSPredicate.regularEcosystem() ) else { return diff --git a/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModelFactory.swift b/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModelFactory.swift index 05ba4e62f5..8a14f8b7a0 100644 --- a/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModelFactory.swift +++ b/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModelFactory.swift @@ -194,7 +194,8 @@ final class WalletConnectSessionViewModelFactoryImpl: WalletConnectSessionViewMo icon: wallet.icon(), fiatBalance: nil, dayChange: nil, - accountScoreViewModel: accountScoreViewModel + accountScoreViewModel: accountScoreViewModel, + optionsAvailable: wallet.ecosystem.isRegular ) } let balanceTokenFormatterValue = tokenFormatter( @@ -218,7 +219,8 @@ final class WalletConnectSessionViewModelFactoryImpl: WalletConnectSessionViewMo icon: wallet.icon(), fiatBalance: totalFiatValue, dayChange: dayChange, - accountScoreViewModel: accountScoreViewModel + accountScoreViewModel: accountScoreViewModel, + optionsAvailable: wallet.ecosystem.isRegular ) return viewModel diff --git a/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentCellViewModel.swift b/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentCellViewModel.swift index 41b9e918f1..fbdcecd169 100644 --- a/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentCellViewModel.swift +++ b/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentCellViewModel.swift @@ -8,4 +8,5 @@ struct WalletsManagmentCellViewModel { let fiatBalance: String? let dayChange: NSAttributedString? let accountScoreViewModel: AccountScoreViewModel? + let optionsAvailable: Bool } diff --git a/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentViewModelFactory.swift b/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentViewModelFactory.swift index cf38919d45..7a8aea95bf 100644 --- a/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentViewModelFactory.swift +++ b/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentViewModelFactory.swift @@ -58,7 +58,8 @@ final class WalletsManagmentViewModelFactory: WalletsManagmentViewModelFactoryPr icon: managedMetaAccount.info.icon(), fiatBalance: nil, dayChange: nil, - accountScoreViewModel: accountScoreViewModel + accountScoreViewModel: accountScoreViewModel, + optionsAvailable: managedMetaAccount.info.ecosystem.isRegular ) } @@ -78,7 +79,8 @@ final class WalletsManagmentViewModelFactory: WalletsManagmentViewModelFactoryPr icon: managedMetaAccount.info.icon(), fiatBalance: fiatBalance, dayChange: nil, - accountScoreViewModel: accountScoreViewModel + accountScoreViewModel: accountScoreViewModel, + optionsAvailable: managedMetaAccount.info.ecosystem.isRegular ) } @@ -95,7 +97,8 @@ final class WalletsManagmentViewModelFactory: WalletsManagmentViewModelFactoryPr icon: managedMetaAccount.info.icon(), fiatBalance: totalFiatValue, dayChange: dayChange, - accountScoreViewModel: accountScoreViewModel + accountScoreViewModel: accountScoreViewModel, + optionsAvailable: managedMetaAccount.info.ecosystem.isRegular ) return viewModel } diff --git a/fearless/Modules/WalletsManagment/WalletsManagmentAssembly.swift b/fearless/Modules/WalletsManagment/WalletsManagmentAssembly.swift index 7c0446fd8f..b8aedd79cc 100644 --- a/fearless/Modules/WalletsManagment/WalletsManagmentAssembly.swift +++ b/fearless/Modules/WalletsManagment/WalletsManagmentAssembly.swift @@ -9,7 +9,8 @@ final class WalletsManagmentAssembly { viewType: WalletsManagmentType = .wallets, shouldSaveSelected: Bool, contextTag: Int = 0, - moduleOutput: WalletsManagmentModuleOutput? + moduleOutput: WalletsManagmentModuleOutput?, + filter: NSPredicate? = nil ) -> WalletsManagmentModuleCreationResult? { let sharedDefaultQueue = OperationManagerFacade.sharedDefaultQueue let localizationManager = LocalizationManager.shared @@ -18,7 +19,7 @@ final class WalletsManagmentAssembly { let accountRepositoryFactory = AccountRepositoryFactory(storageFacade: UserDataStorageFacade.shared) let managedMetaAccountRepository = accountRepositoryFactory.createManagedMetaAccountRepository( - for: nil, + for: filter, sortDescriptors: [] ) diff --git a/fearless/Modules/WalletsManagment/WalletsManagmentTableCell.swift b/fearless/Modules/WalletsManagment/WalletsManagmentTableCell.swift index d376289174..d96a719777 100644 --- a/fearless/Modules/WalletsManagment/WalletsManagmentTableCell.swift +++ b/fearless/Modules/WalletsManagment/WalletsManagmentTableCell.swift @@ -16,8 +16,8 @@ final class WalletsManagmentTableCell: UITableViewCell { static let optionsButtonSize = CGSize(width: 44, height: 44) } - private let backgroundTriangularedView: TriangularedView = { - let view = TriangularedView() + private let backgroundTriangularedView: GradientBorderedTriangularedView = { + let view = GradientBorderedTriangularedView() view.fillColor = R.color.colorSemiBlack()! view.highlightedFillColor = R.color.colorSemiBlack()! view.strokeColor = .clear @@ -83,17 +83,18 @@ final class WalletsManagmentTableCell: UITableViewCell { override func prepareForReuse() { super.prepareForReuse() - backgroundTriangularedView.setGradientBorder(highlighted: false, animated: false) } func bind(to viewModel: WalletsManagmentCellViewModel) { iconImageView.image = viewModel.icon walletNameLabel.text = viewModel.walletName dayChangeLabel.attributedText = viewModel.dayChange - backgroundTriangularedView.setGradientBorder(highlighted: viewModel.isSelected, animated: false) - + + optionsButton.isHidden = !viewModel.optionsAvailable fiatBalanceLabel.text = viewModel.fiatBalance - + + backgroundTriangularedView.gradientBorder.isHidden = !viewModel.isSelected + if viewModel.fiatBalance == nil { startLoadingIfNeeded() } else { From 578e0b0012f547bb979b16fd53883ca1f7a6d4b3 Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Wed, 23 Oct 2024 15:43:03 +0700 Subject: [PATCH 055/156] build fix --- fearless.xcodeproj/project.pbxproj | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index f20b6abb67..b11804cc98 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -2464,8 +2464,6 @@ FA68301C2930DD35002AD926 /* RecommendedValidatorListPoolViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA68301B2930DD35002AD926 /* RecommendedValidatorListPoolViewModelFactory.swift */; }; FA69A94727CE3476000352A6 /* SubstrateV2Mapping.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = FA69A94627CE3476000352A6 /* SubstrateV2Mapping.xcmappingmodel */; }; FA6A6DBD27B60A84007D1A20 /* ChainNodeModelMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA6A6DBC27B60A84007D1A20 /* ChainNodeModelMapper.swift */; }; - FA6AA3EB2CC0D0860010DBBF /* EmptyStateViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA6AA3EA2CC0D0860010DBBF /* EmptyStateViewController.swift */; }; - FA6AA3ED2CC0F6F80010DBBF /* EmptyStateViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA6AA3EC2CC0F6F80010DBBF /* EmptyStateViewLayout.swift */; }; FA6C175329935DAE00A55254 /* AssetTransactionData+GiantsquidHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA6C175029935DAD00A55254 /* AssetTransactionData+GiantsquidHistory.swift */; }; FA6C175429935DAE00A55254 /* AssetTransactionData+SubqueryHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA6C175129935DAD00A55254 /* AssetTransactionData+SubqueryHistory.swift */; }; FA6C175529935DAE00A55254 /* AssetTransactionData+SubsquidHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA6C175229935DAE00A55254 /* AssetTransactionData+SubsquidHistory.swift */; }; @@ -5784,8 +5782,6 @@ FA69A94627CE3476000352A6 /* SubstrateV2Mapping.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = SubstrateV2Mapping.xcmappingmodel; sourceTree = ""; }; FA6A6DBC27B60A84007D1A20 /* ChainNodeModelMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainNodeModelMapper.swift; sourceTree = ""; }; FA6AA3E82CC0C7A80010DBBF /* shared-features-spm */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = "shared-features-spm"; path = "../shared-features-spm"; sourceTree = ""; }; - FA6AA3EA2CC0D0860010DBBF /* EmptyStateViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyStateViewController.swift; sourceTree = ""; }; - FA6AA3EC2CC0F6F80010DBBF /* EmptyStateViewLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyStateViewLayout.swift; sourceTree = ""; }; FA6C175029935DAD00A55254 /* AssetTransactionData+GiantsquidHistory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+GiantsquidHistory.swift"; sourceTree = ""; }; FA6C175129935DAD00A55254 /* AssetTransactionData+SubqueryHistory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+SubqueryHistory.swift"; sourceTree = ""; }; FA6C175229935DAE00A55254 /* AssetTransactionData+SubsquidHistory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+SubsquidHistory.swift"; sourceTree = ""; }; @@ -10334,7 +10330,6 @@ 8490144124A93CDC008F705E /* ViewController */ = { isa = PBXGroup; children = ( - FA6AA3E92CC0D0770010DBBF /* EmptyStateViewController */, 07089AFA28B7839C001566CA /* SheetAlert */, 07DFA473289BD5D90035A8AB /* SelectableList */, FA864443276851BA00956D8E /* Container */, @@ -14565,15 +14560,6 @@ name = Packages; sourceTree = ""; }; - FA6AA3E92CC0D0770010DBBF /* EmptyStateViewController */ = { - isa = PBXGroup; - children = ( - FA6AA3EA2CC0D0860010DBBF /* EmptyStateViewController.swift */, - FA6AA3EC2CC0F6F80010DBBF /* EmptyStateViewLayout.swift */, - ); - path = EmptyStateViewController; - sourceTree = ""; - }; FA6C175629935DC700A55254 /* BlockExplorer */ = { isa = PBXGroup; children = ( @@ -19858,7 +19844,6 @@ 991DA2DE1E8A45B0A8B187CD /* LiquidityPoolSupplyConfirmAssembly.swift in Sources */, 51876200A6B1EDC54609DF46 /* LiquidityPoolRemoveLiquidityProtocols.swift in Sources */, B112AC02371DE4C1DAD48BB1 /* LiquidityPoolRemoveLiquidityRouter.swift in Sources */, - FA6AA3ED2CC0F6F80010DBBF /* EmptyStateViewLayout.swift in Sources */, 5A7D43CA17B84C71E8EEF256 /* LiquidityPoolRemoveLiquidityPresenter.swift in Sources */, FC540426B1BC363842A3677B /* LiquidityPoolRemoveLiquidityInteractor.swift in Sources */, 466B1E0EEC6438F8835AAF2E /* LiquidityPoolRemoveLiquidityViewController.swift in Sources */, @@ -19881,7 +19866,6 @@ 084DDCBC4CE8438770EB48DE /* ConfirmTransferRouter.swift in Sources */, 604162EC2B721993E397E6B0 /* ConfirmTransferPresenter.swift in Sources */, 3152634A9E3FBF5E463CF56E /* ConfirmTransferViewController.swift in Sources */, - FA6AA3EB2CC0D0860010DBBF /* EmptyStateViewController.swift in Sources */, 0A2BBD1BB87EBB75BBD919F7 /* ConfirmTransferViewLayout.swift in Sources */, 26F0F2A52C7EFD38CBC2F1C3 /* ConfirmTransferAssembly.swift in Sources */, BCB9B3DF3D8104BC8456811B /* TonWebBridgeProtocols.swift in Sources */, From e5fbacd956d7b5f217388567f6f04ddec4d4d69c Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Mon, 28 Oct 2024 16:03:00 +0700 Subject: [PATCH 056/156] localization --- fearless.xcodeproj/project.pbxproj | 6 +- .../ExternalApiExplorerType.swift | 2 +- .../ChainRegistry/ChainRegistry.swift | 8 +- .../ChainRegistry/ChainSyncService.swift | 2 +- .../contents | 4 +- .../Banners/BannersViewModelFactory.swift | 10 +- .../ConnectedAccountsPresenter.swift | 14 + .../ConnectedAccountsProtocols.swift | 7 +- .../ConnectedAccountsRouter.swift | 16 + .../ConnectedAccountsViewController.swift | 15 +- .../ConnectedAccountsViewModelFactory.swift | 9 +- .../DappBrowserViewController.swift | 4 +- .../DappBrowserViewModelFactory.swift | 10 +- .../View/DappBrowserSectionHeaderView.swift | 2 +- .../View/DappBrowserViewLayout.swift | 4 +- .../DappBrowserListViewController.swift | 2 +- .../EcosystemOptionsViewLayout.swift | 6 +- .../ChainAssetListViewController.swift | 11 +- .../OnboardingMainViewLayout.swift | 8 +- .../Modules/Profile/ProfileInteractor.swift | 7 +- ...alletConnectProposalViewModelFactory.swift | 6 +- .../WalletOption/WalletOptionAssembly.swift | 3 +- .../WalletOption/WalletOptionInteractor.swift | 9 +- .../WalletOption/WalletOptionPresenter.swift | 13 +- .../WalletOption/WalletOptionProtocols.swift | 2 +- .../WalletOption/WalletOptionRouter.swift | 4 +- .../WalletsManagmentPresenter.swift | 2 +- .../WalletsManagmentProtocols.swift | 2 +- .../WalletsManagmentRouter.swift | 3 +- fearless/en.lproj/Localizable.strings | 70 ++- fearless/id.lproj/Localizable.strings | 62 +- fearless/ja.lproj/Localizable.strings | 160 +++-- fearless/pt.lproj/Localizable.strings | 48 +- fearless/ru.lproj/Localizable.strings | 554 ++++++++++-------- fearless/tr.lproj/Localizable.strings | 124 ++-- fearless/vi.lproj/Localizable.strings | 90 ++- fearless/zh-Hans.lproj/Localizable.strings | 90 ++- 37 files changed, 900 insertions(+), 489 deletions(-) diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index b11804cc98..923d9221c5 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -20386,7 +20386,7 @@ ); MARKETING_VERSION = 3.8.1; OTHER_SWIFT_FLAGS = "$(inherited)"; - PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless.dev; + PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; @@ -20414,7 +20414,7 @@ "$(FRAMEWORK_SEARCH_PATHS)", ); MARKETING_VERSION = 3.8.1; - PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless.dev; + PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; @@ -20554,7 +20554,7 @@ ); MARKETING_VERSION = 3.8.1; OTHER_SWIFT_FLAGS = "$(inherited)"; - PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless.dev; + PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; diff --git a/fearless/Common/Model/ChainRegistry/ExternalApiExplorerType.swift b/fearless/Common/Model/ChainRegistry/ExternalApiExplorerType.swift index 3dfa2976ac..58291af1a7 100644 --- a/fearless/Common/Model/ChainRegistry/ExternalApiExplorerType.swift +++ b/fearless/Common/Model/ChainRegistry/ExternalApiExplorerType.swift @@ -17,7 +17,7 @@ extension ChainModel.ExternalApiExplorerType { case .oklink: return R.string.localizable.transactionDetailsViewOklink(preferredLanguages: locale.rLanguages) case .tonviewer: - return "View in Tonviewer" + return R.string.localizable.tonTonviewerActionTitle(preferredLanguages: locale.rLanguages) case .unknown: return "" } diff --git a/fearless/Common/Services/ChainRegistry/ChainRegistry.swift b/fearless/Common/Services/ChainRegistry/ChainRegistry.swift index 90262dcb29..b3262b665b 100644 --- a/fearless/Common/Services/ChainRegistry/ChainRegistry.swift +++ b/fearless/Common/Services/ChainRegistry/ChainRegistry.swift @@ -276,11 +276,11 @@ final class ChainRegistry { private func handle(ton chain: ChainModel) { chains = chains.filter { $0.chainId != chain.chainId } chains.append(chain) -#if DEBUG +//#if DEBUG let token = TonNodeApiKeyDebug.tonApiKey -#else - let token = TonNodeApiKey.tonApiKey -#endif +//#else +// let token = TonNodeApiKey.tonApiKey +//#endif let isTesnet = LocalToggleService.shared.tonEnvListToggle.storageValue if chain.options.or([]).contains(.testnet), isTesnet, let node = chain.nodes.first { let apiAssembly = TonAPIAssembly(tonAPIURL: node.url, token: token) diff --git a/fearless/Common/Services/ChainRegistry/ChainSyncService.swift b/fearless/Common/Services/ChainRegistry/ChainSyncService.swift index baad253c38..2c46e73717 100644 --- a/fearless/Common/Services/ChainRegistry/ChainSyncService.swift +++ b/fearless/Common/Services/ChainRegistry/ChainSyncService.swift @@ -108,7 +108,7 @@ final class ChainSyncService { remoteChains: [ChainModel], localChains: [ChainModel] )> = ClosureOperation { - let localChains = try localFetchOperation.extractNoCancellableResultData() + let localChains = (try? localFetchOperation.extractNoCancellableResultData()) ?? [] return ( remoteChains: remoteChains, diff --git a/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents index 7e41a6d906..442ddfbd24 100644 --- a/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents +++ b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents @@ -1,5 +1,5 @@ - + @@ -25,7 +25,7 @@ - + diff --git a/fearless/Modules/Banners/BannersViewModelFactory.swift b/fearless/Modules/Banners/BannersViewModelFactory.swift index 72f23a8b00..c98850a10a 100644 --- a/fearless/Modules/Banners/BannersViewModelFactory.swift +++ b/fearless/Modules/Banners/BannersViewModelFactory.swift @@ -91,9 +91,9 @@ final class BannersViewModelFactory: BannersViewModelFactoryProtocol { ) case .addRegularWallet: return BannerCellViewModel( - title: "EVM/Substrate accounts", - subtitle: "Join the ecosystems with more than 90+ chains and fascinating features", - buttonTitle: "Сreate or import", + title: R.string.localizable.bannerAddwalletRegularTitle(preferredLanguages: locale.rLanguages), + subtitle: R.string.localizable.bannerAddwalletRegularSubtitle(preferredLanguages: locale.rLanguages), + buttonTitle: R.string.localizable.bannerAddwalletRegularButtonTitle(preferredLanguages: locale.rLanguages), image: R.image.regularBanner()!, dismissable: true, fullsizeImage: true, @@ -101,9 +101,9 @@ final class BannersViewModelFactory: BannersViewModelFactoryProtocol { ) case .addTonWallet: return BannerCellViewModel( - title: "Join the fastest growing ecosystem ever", + title: R.string.localizable.bannerAddwalletTonTitle(preferredLanguages: locale.rLanguages), subtitle: "", - buttonTitle: "Join now", + buttonTitle: R.string.localizable.bannerAddwalletTonButtonTitle(preferredLanguages: locale.rLanguages), image: R.image.tonBanner()!, dismissable: true, fullsizeImage: true, diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsPresenter.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsPresenter.swift index 81cff809e2..ba8d4001ba 100644 --- a/fearless/Modules/ConnectedAccounts/ConnectedAccountsPresenter.swift +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsPresenter.swift @@ -55,6 +55,20 @@ final class ConnectedAccountsPresenter { // MARK: - ConnectedAccountsViewOutput extension ConnectedAccountsPresenter: ConnectedAccountsViewOutput { + func activateAccountDetails() { + switch wallet.ecosystem { + case .regular: + router.showAccountDetails(from: view, metaAccount: wallet) + case .ton: + break + } + } + + func didTapAccountScore(address: String?) { + router.presentAccountScore(address: address, from: view) + + } + func didSelect(viewModel: ConnectedAccountsViewModel.Accounts) { guard viewModel.count != nil else { // TODO: - Show Add account flow diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsProtocols.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsProtocols.swift index 7b14b4da30..e06ee8ec33 100644 --- a/fearless/Modules/ConnectedAccounts/ConnectedAccountsProtocols.swift +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsProtocols.swift @@ -5,7 +5,12 @@ typealias ConnectedAccountsModuleCreationResult = ( input: ConnectedAccountsModuleInput ) -protocol ConnectedAccountsRouterInput: AnyDismissable, AuthorizationPresentable { +protocol ConnectedAccountsRouterInput: AnyDismissable, AuthorizationPresentable, AccountScorePresentable { + func showAccountDetails( + from view: ControllerBackedProtocol?, + metaAccount: MetaAccountModel + ) + func showOptions( from view: ControllerBackedProtocol?, ecosystem: Ecosystem, diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsRouter.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsRouter.swift index f62959c3cc..50ca99b7a9 100644 --- a/fearless/Modules/ConnectedAccounts/ConnectedAccountsRouter.swift +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsRouter.swift @@ -2,6 +2,22 @@ import Foundation import SSFModels final class ConnectedAccountsRouter: ConnectedAccountsRouterInput { + func showAccountDetails( + from view: ControllerBackedProtocol?, + metaAccount: MetaAccountModel + ) { + guard + let walletOptionsController = WalletOptionAssembly.configureModule( + with: metaAccount, + delegate: nil + )?.view.controller + else { + return + } + + view?.controller.present(walletOptionsController, animated: true) + } + func showOptions( from view: ControllerBackedProtocol?, ecosystem: Ecosystem, diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewController.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewController.swift index bbf3f8775b..a70fd2852f 100644 --- a/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewController.swift +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewController.swift @@ -7,6 +7,8 @@ protocol ConnectedAccountsViewOutput: AnyObject { func didSelect(viewModel: ConnectedAccountsViewModel.Accounts) func dismiss() func pop() + func activateAccountDetails() + func didTapAccountScore(address: String?) } enum ConnectedAccountsViewModel { @@ -115,6 +117,7 @@ extension ConnectedAccountsViewController: UITableViewDataSource { } cell.bind(to: viewModel) cell.hideScore() + cell.delegate = self return cell case let .accounts(viewModels): let cell = tableView.dequeueReusableCellWithType(ConnectedAccountsTableCell.self, forIndexPath: indexPath) @@ -141,7 +144,7 @@ extension ConnectedAccountsViewController: UITableViewDelegate { return nil case .accounts: let view = ConnectedAccountsTableHeaderView() - view.titleLabel.text = "Connected Accounts" + view.titleLabel.text = R.string.localizable.connectedAccountsCommon(preferredLanguages: selectedLocale.rLanguages) return view } } @@ -175,3 +178,13 @@ extension ConnectedAccountsViewController: UITableViewDelegate { output.didSelect(viewModel: viewModel) } } + +extension ConnectedAccountsViewController: WalletsManagmentTableCellDelegate { + func didTapOptionsCell(with _: IndexPath?) { + output.activateAccountDetails() + } + + func didTapAccountScore(address: String?) { + output.didTapAccountScore(address: address) + } +} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift index 8fe5e742bf..c4983e01f2 100644 --- a/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift @@ -83,7 +83,8 @@ final class ConnectedAccountsViewModelFactoryImpl: ConnectedAccountsViewModelFac private func createAccountsViewModel( chains: [ChainModel], - wallet: MetaAccountModel + wallet: MetaAccountModel, + locale: Locale ) -> [ConnectedAccountsViewModel.Accounts] { var accountsViewModel: [ConnectedAccountsViewModel.Accounts] = [] @@ -109,13 +110,13 @@ final class ConnectedAccountsViewModelFactoryImpl: ConnectedAccountsViewModelFac var count: Int? switch ecosystem { case .substrate: - title = "Substrate chain accounts" + title = R.string.localizable.connectedAccountsSubstrateTitle(preferredLanguages: locale.rLanguages) count = chains.map { wallet.fetch(for: $0.accountRequest())?.accountId }.filter { $0 != nil }.count case .ethereum, .ethereumBased: - title = "EVM chain accounts" + title = R.string.localizable.connectedAccountsEthereumTitle(preferredLanguages: locale.rLanguages) count = chains.map { wallet.fetch(for: $0.accountRequest())?.accountId }.filter { $0 != nil }.count case .ton: - title = "TON chain accounts" + title = R.string.localizable.connectedAccountsTonTitle(preferredLanguages: locale.rLanguages) count = chains.map { wallet.fetch(for: $0.accountRequest())?.accountId }.filter { $0 != nil }.count } if count == 0 { diff --git a/fearless/Modules/DappBrowser/DappBrowserViewController.swift b/fearless/Modules/DappBrowser/DappBrowserViewController.swift index 14f6c531c6..ea15090602 100644 --- a/fearless/Modules/DappBrowser/DappBrowserViewController.swift +++ b/fearless/Modules/DappBrowser/DappBrowserViewController.swift @@ -266,9 +266,9 @@ extension DappBrowserViewController: EmptyStateDataSource { let page = DappBrowserViewControllerPage(rawValue: rootView.segmentedControl.selectedSegmentIndex) switch page { case .dapps: - emptyView.text = "No dApps were found" + emptyView.text = R.string.localizable.dappNotFoundTitle(preferredLanguages: selectedLocale.rLanguages) case .connected: - emptyView.text = "No connected dApps" + emptyView.text = R.string.localizable.dappNoConnectedDappsTitle(preferredLanguages: selectedLocale.rLanguages) case nil: break } diff --git a/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift b/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift index 21d5cad3f7..23b9733050 100644 --- a/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift +++ b/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift @@ -237,15 +237,15 @@ final class DappBrowserViewModelFactoryImpl: DappBrowserViewModelFactory { ) -> String? { switch category { case .connected: - return "Connected" + return R.string.localizable.dappConnectedTitle(preferredLanguages: locale.rLanguages) case .featured: - return "Featured" + return R.string.localizable.dappCategoryFeaturedTitle(preferredLanguages: locale.rLanguages) case .utilities: - return "Utilities" + return R.string.localizable.dappCategoryUtilitiesTitle(preferredLanguages: locale.rLanguages) case .nft: - return "NFT" + return R.string.localizable.dappCategoryNftTitle(preferredLanguages: locale.rLanguages) case .defi: - return "DeFi" + return R.string.localizable.dappCategoryDefiTitle(preferredLanguages: locale.rLanguages) case .top: return nil } diff --git a/fearless/Modules/DappBrowser/View/DappBrowserSectionHeaderView.swift b/fearless/Modules/DappBrowser/View/DappBrowserSectionHeaderView.swift index e5b6962c87..8f10eb2e4b 100644 --- a/fearless/Modules/DappBrowser/View/DappBrowserSectionHeaderView.swift +++ b/fearless/Modules/DappBrowser/View/DappBrowserSectionHeaderView.swift @@ -109,6 +109,6 @@ final class DappBrowserSectionHeaderView: UITableViewHeaderFooterView { } private func setupLocalization() { - moreButton.setTitle("See all", for: .normal) + moreButton.setTitle(R.string.localizable.commonSeeAll(preferredLanguages: locale.rLanguages), for: .normal) } } diff --git a/fearless/Modules/DappBrowser/View/DappBrowserViewLayout.swift b/fearless/Modules/DappBrowser/View/DappBrowserViewLayout.swift index f8a873edbd..8e3925c636 100644 --- a/fearless/Modules/DappBrowser/View/DappBrowserViewLayout.swift +++ b/fearless/Modules/DappBrowser/View/DappBrowserViewLayout.swift @@ -139,8 +139,8 @@ final class DappBrowserViewLayout: UIView { private func applyLocalization() { let localizedItems = [ - "Discover dApp", - "Connected" + R.string.localizable.dappDiscoverTitle(preferredLanguages: locale.rLanguages), + R.string.localizable.dappConnectedTitle(preferredLanguages: locale.rLanguages) ] segmentedControl.setSegmentItems(localizedItems) } diff --git a/fearless/Modules/DappBrowserList/DappBrowserListViewController.swift b/fearless/Modules/DappBrowserList/DappBrowserListViewController.swift index 662d4ff47f..4b9afac82f 100644 --- a/fearless/Modules/DappBrowserList/DappBrowserListViewController.swift +++ b/fearless/Modules/DappBrowserList/DappBrowserListViewController.swift @@ -151,7 +151,7 @@ extension DappBrowserListViewController: EmptyStateDataSource { emptyView.image = R.image.iconWarning() emptyView.title = R.string.localizable .emptyViewTitle(preferredLanguages: selectedLocale.rLanguages) - emptyView.text = "No dApps were found" + emptyView.text = R.string.localizable.dappNotFoundTitle(preferredLanguages: selectedLocale.rLanguages) emptyView.iconMode = .bigFilledShadow return emptyView } diff --git a/fearless/Modules/EcosystemOptions/EcosystemOptionsViewLayout.swift b/fearless/Modules/EcosystemOptions/EcosystemOptionsViewLayout.swift index d72c6f8d6f..aa10ce2da9 100644 --- a/fearless/Modules/EcosystemOptions/EcosystemOptionsViewLayout.swift +++ b/fearless/Modules/EcosystemOptions/EcosystemOptionsViewLayout.swift @@ -54,9 +54,9 @@ final class EcosystemOptionsViewLayout: UIView { // MARK: - Private methods private func applyLocale() { - titleLabel.text = "Account options" - backupWalletButton.imageWithTitleView?.title = "Backup chain accounts" - accountsDetailsButton.imageWithTitleView?.title = "Chain accounts" + titleLabel.text = R.string.localizable.ecosystemOptionsTitle(preferredLanguages: locale.rLanguages) + backupWalletButton.imageWithTitleView?.title = R.string.localizable.ecosystemOptionsBackupTitle(preferredLanguages: locale.rLanguages) + accountsDetailsButton.imageWithTitleView?.title = R.string.localizable.ecosystemOptionsDetailsTitle(preferredLanguages: locale.rLanguages) } private func setupLayout() { diff --git a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListViewController.swift b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListViewController.swift index 437d63180f..d41dc40ac6 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListViewController.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListViewController.swift @@ -188,7 +188,7 @@ extension ChainAssetListViewController: ChainAssetListViewInput { } else { rootView.setHeaderView() } - case .chainHasNetworkIssue, .chainHasAccountIssue, .allIsHidden: + case .chainHasNetworkIssue, .chainHasAccountIssue: rootView.removeHeaderView() rootView.removeFooterView() rootView.tableView.reloadData() @@ -197,6 +197,10 @@ extension ChainAssetListViewController: ChainAssetListViewInput { isEmpty ? rootView.removeFooterView() : rootView.setFooterView() isEmpty ? rootView.removeHeaderView() : rootView.setHeaderView() rootView.tableView.reloadData() + case .allIsHidden: + rootView.setFooterView() + rootView.setHeaderView() + rootView.tableView.reloadData() } } } @@ -289,7 +293,8 @@ extension ChainAssetListViewController: EmptyStateDataSource { extension ChainAssetListViewController: EmptyStateDelegate { var shouldDisplayEmptyState: Bool { - guard let viewModel = viewModel else { return false } - return viewModel.displayState.rows.isEmpty + return false +// guard let viewModel = viewModel else { return false } +// return viewModel.displayState.rows.isEmpty } } diff --git a/fearless/Modules/OnbordingMain/OnboardingMainViewLayout.swift b/fearless/Modules/OnbordingMain/OnboardingMainViewLayout.swift index 9f2de0a1d9..5539e1814a 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainViewLayout.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainViewLayout.swift @@ -96,10 +96,10 @@ final class OnboardingMainViewLayout: UIView { .onboardingTermsAndConditions1(preferredLanguages: locale.rLanguages)) termsLabel.attributedText = text - selectRegularBannerView.titleLabel.text = "Create or import Substrate or EVM accounts" - selectRegularBannerView.actionButton.imageWithTitleView?.title = "Join EVM or Substrate" - selectTonBannerView.titleLabel.text = "Connect to the fastest growing ecosystem ever" - selectTonBannerView.actionButton.imageWithTitleView?.title = "Join TON" + selectRegularBannerView.titleLabel.text = R.string.localizable.onboardingBannerRegularEcosystemTitle(preferredLanguages: locale.rLanguages) + selectRegularBannerView.actionButton.imageWithTitleView?.title = R.string.localizable.onboardingBannerRegularEcosystemButtonTitle(preferredLanguages: locale.rLanguages) + selectTonBannerView.titleLabel.text = R.string.localizable.onboardingBannerTonEcosystemTitle(preferredLanguages: locale.rLanguages) + selectTonBannerView.actionButton.imageWithTitleView?.title = R.string.localizable.onboardingBannerTonEcosystemButtonTitle(preferredLanguages: locale.rLanguages) configureTermsLabel() } diff --git a/fearless/Modules/Profile/ProfileInteractor.swift b/fearless/Modules/Profile/ProfileInteractor.swift index 426d387398..9c65275f26 100644 --- a/fearless/Modules/Profile/ProfileInteractor.swift +++ b/fearless/Modules/Profile/ProfileInteractor.swift @@ -152,9 +152,10 @@ extension ProfileInteractor: ChainsIssuesCenterListener { func handleChainsIssues(_ issues: [ChainIssue]) { let missingAccountIssues = issues.filter { issue in switch issue { - case .missingAccount: - return true - default: return false + case let .missingAccount(chains): + return chains.filter { !$0.ecosystem.isTon }.count > 0 + default: + return false } } presenter?.didReceiveMissingAccount(issues: missingAccountIssues) diff --git a/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModelFactory.swift b/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModelFactory.swift index 6c8d44e703..0a0a7e1235 100644 --- a/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModelFactory.swift +++ b/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModelFactory.swift @@ -419,9 +419,9 @@ final class WalletConnectProposalViewModelFactoryImpl: WalletConnectProposalView let walletCellViewModels = createWalletsCellModels(from: wallets, forActiveSession: false) let requiredExpandableViewModel = WalletConnectProposalCellModel.ExpandableViewModel( - cellTitle: "Review dApp info", - title: "Be sure to check the service address before connecting the wallet", - title2: "Service address", + cellTitle: R.string.localizable.tonConnectAlertTitle(preferredLanguages: locale.rLanguages), + title: R.string.localizable.tonConnectAlertSubtitle(preferredLanguages: locale.rLanguages), + title2: R.string.localizable.tonConnectAlertDescription(preferredLanguages: locale.rLanguages), subtitle2: manifest.url.absoluteString, title3: nil, subtitle3: nil, diff --git a/fearless/Modules/WalletOption/WalletOptionAssembly.swift b/fearless/Modules/WalletOption/WalletOptionAssembly.swift index 355e65865d..67706c73e1 100644 --- a/fearless/Modules/WalletOption/WalletOptionAssembly.swift +++ b/fearless/Modules/WalletOption/WalletOptionAssembly.swift @@ -2,10 +2,11 @@ import UIKit import SoraFoundation import SoraUI import RobinHood +import SSFModels final class WalletOptionAssembly { static func configureModule( - with wallet: ManagedMetaAccountModel, + with wallet: MetaAccountModel, delegate: WalletOptionModuleOutput? ) -> WalletOptionModuleCreationResult? { let localizationManager = LocalizationManager.shared diff --git a/fearless/Modules/WalletOption/WalletOptionInteractor.swift b/fearless/Modules/WalletOption/WalletOptionInteractor.swift index 080345d952..631d8945bb 100644 --- a/fearless/Modules/WalletOption/WalletOptionInteractor.swift +++ b/fearless/Modules/WalletOption/WalletOptionInteractor.swift @@ -1,5 +1,6 @@ import UIKit import RobinHood +import SSFModels final class WalletOptionInteractor { // MARK: - Private properties @@ -7,13 +8,13 @@ final class WalletOptionInteractor { private weak var output: WalletOptionInteractorOutput? private weak var moduleOutput: WalletOptionModuleOutput? - private let wallet: ManagedMetaAccountModel + private let wallet: MetaAccountModel private let metaAccountRepository: AnyDataProviderRepository private let operationQueue: OperationQueue private let walletConnectDisconnectService: WalletConnectDisconnectService init( - wallet: ManagedMetaAccountModel, + wallet: MetaAccountModel, metaAccountRepository: AnyDataProviderRepository, operationQueue: OperationQueue, moduleOutput: WalletOptionModuleOutput?, @@ -34,7 +35,7 @@ final class WalletOptionInteractor { return } - if selectedWallet.identifier == wallet.identifier { + if selectedWallet.identifier == wallet.metaId { output?.setDeleteButtonIsVisible(false) } } @@ -54,7 +55,7 @@ extension WalletOptionInteractor: WalletOptionInteractorInput { operation.completionBlock = { [weak self, wallet] in Task { [weak self] in - try await self?.walletConnectDisconnectService.disconnect(wallet: wallet.info) + try await self?.walletConnectDisconnectService.disconnect(wallet: wallet) } self?.moduleOutput?.walletWasRemoved() self?.output?.walletRemoved() diff --git a/fearless/Modules/WalletOption/WalletOptionPresenter.swift b/fearless/Modules/WalletOption/WalletOptionPresenter.swift index 6ac92a29dd..b371365371 100644 --- a/fearless/Modules/WalletOption/WalletOptionPresenter.swift +++ b/fearless/Modules/WalletOption/WalletOptionPresenter.swift @@ -1,5 +1,6 @@ import Foundation import SoraFoundation +import SSFModels final class WalletOptionPresenter { // MARK: Private properties @@ -8,10 +9,10 @@ final class WalletOptionPresenter { private let router: WalletOptionRouterInput private let interactor: WalletOptionInteractorInput - private let wallet: ManagedMetaAccountModel + private let wallet: MetaAccountModel lazy var hasWalletDetailsButton: Bool = { - switch wallet.info.ecosystem { + switch wallet.ecosystem { case .regular: return true case .ton: @@ -22,7 +23,7 @@ final class WalletOptionPresenter { // MARK: - Constructors init( - wallet: ManagedMetaAccountModel, + wallet: MetaAccountModel, interactor: WalletOptionInteractorInput, router: WalletOptionRouterInput, localizationManager: LocalizationManagerProtocol @@ -71,11 +72,11 @@ final class WalletOptionPresenter { extension WalletOptionPresenter: WalletOptionViewOutput { func changeWalletNameDidTap() { - router.showChangeWalletName(from: view, for: wallet.info) + router.showChangeWalletName(from: view, for: wallet) } func walletDetailsDidTap() { - router.showWalletDetails(from: view, for: wallet.info) + router.showWalletDetails(from: view, for: wallet) } func exportWalletDidTap() { @@ -87,7 +88,7 @@ extension WalletOptionPresenter: WalletOptionViewOutput { } func accountScoreDidTap() { - let address = wallet.info.ecosystem.ethereumAddress?.toHex(includePrefix: true) + let address = wallet.ecosystem.ethereumAddress?.toHex(includePrefix: true) router.presentAccountScore(address: address, from: view) } diff --git a/fearless/Modules/WalletOption/WalletOptionProtocols.swift b/fearless/Modules/WalletOption/WalletOptionProtocols.swift index 37abe0e3f0..eae58a764b 100644 --- a/fearless/Modules/WalletOption/WalletOptionProtocols.swift +++ b/fearless/Modules/WalletOption/WalletOptionProtocols.swift @@ -33,7 +33,7 @@ protocol WalletOptionRouterInput: SheetAlertPresentable, AnyDismissable, Account ) func showExportWallet( from view: ControllerBackedProtocol?, - wallet: ManagedMetaAccountModel + wallet: MetaAccountModel ) func showChangeWalletName( from view: ControllerBackedProtocol?, diff --git a/fearless/Modules/WalletOption/WalletOptionRouter.swift b/fearless/Modules/WalletOption/WalletOptionRouter.swift index 265e4763f2..cd55d42493 100644 --- a/fearless/Modules/WalletOption/WalletOptionRouter.swift +++ b/fearless/Modules/WalletOption/WalletOptionRouter.swift @@ -2,8 +2,8 @@ import Foundation import SSFModels final class WalletOptionRouter: WalletOptionRouterInput { - func showExportWallet(from view: ControllerBackedProtocol?, wallet: ManagedMetaAccountModel) { - guard let module = BackupWalletAssembly.configureModule(wallet: wallet.info) else { + func showExportWallet(from view: ControllerBackedProtocol?, wallet: MetaAccountModel) { + guard let module = BackupWalletAssembly.configureModule(wallet: wallet) else { return } let navigationController = FearlessNavigationController( diff --git a/fearless/Modules/WalletsManagment/WalletsManagmentPresenter.swift b/fearless/Modules/WalletsManagment/WalletsManagmentPresenter.swift index c4bc4e7c16..f1bf173435 100644 --- a/fearless/Modules/WalletsManagment/WalletsManagmentPresenter.swift +++ b/fearless/Modules/WalletsManagment/WalletsManagmentPresenter.swift @@ -78,7 +78,7 @@ extension WalletsManagmentPresenter: WalletsManagmentViewOutput { guard let wallet = wallets[safe: indexPath.row] else { return } - router.showOptions(from: view, metaAccount: wallet, delegate: self) + router.showOptions(from: view, metaAccount: wallet.info, delegate: self) } func didTapNewWallet() { diff --git a/fearless/Modules/WalletsManagment/WalletsManagmentProtocols.swift b/fearless/Modules/WalletsManagment/WalletsManagmentProtocols.swift index f9bacb00ce..aecb578c12 100644 --- a/fearless/Modules/WalletsManagment/WalletsManagmentProtocols.swift +++ b/fearless/Modules/WalletsManagment/WalletsManagmentProtocols.swift @@ -33,7 +33,7 @@ protocol WalletsManagmentInteractorOutput: AnyObject { protocol WalletsManagmentRouterInput: SheetAlertPresentable, ErrorPresentable, AccountScorePresentable { func showOptions( from view: WalletsManagmentViewInput?, - metaAccount: ManagedMetaAccountModel, + metaAccount: MetaAccountModel, delegate: WalletOptionModuleOutput? ) func dissmis( diff --git a/fearless/Modules/WalletsManagment/WalletsManagmentRouter.swift b/fearless/Modules/WalletsManagment/WalletsManagmentRouter.swift index a279ed9c73..b2de8db3e1 100644 --- a/fearless/Modules/WalletsManagment/WalletsManagmentRouter.swift +++ b/fearless/Modules/WalletsManagment/WalletsManagmentRouter.swift @@ -1,9 +1,10 @@ import Foundation +import SSFModels final class WalletsManagmentRouter: WalletsManagmentRouterInput { func showOptions( from view: WalletsManagmentViewInput?, - metaAccount: ManagedMetaAccountModel, + metaAccount: MetaAccountModel, delegate: WalletOptionModuleOutput? ) { guard diff --git a/fearless/en.lproj/Localizable.strings b/fearless/en.lproj/Localizable.strings index d8aadf0489..2c9dff8693 100644 --- a/fearless/en.lproj/Localizable.strings +++ b/fearless/en.lproj/Localizable.strings @@ -1,7 +1,7 @@ "NSCameraUsageDescription" = "The camera is used to capture QR codes"; "NSFaceIDUsageDescription" = "Fearless uses Face ID to restrict unauthorized users from accessing the app. Face ID is used to authorize within the application"; "NSPhotoLibraryAddUsageDescription" = "Save transfer request as a QR code"; -"NSPhotoLibraryUsageDescription" = "Load photos from library"; +"NSPhotoLibraryUsageDescription" = "Access to the library is needed to select existing images of QR codes"; "about.announcement" = "Receive Announcements"; "about.ask.for.support" = "Ask for Support"; "about.contact.email" = "Contact Email"; @@ -66,6 +66,7 @@ "account.option" = "Account option"; "account.stats.avg.transaction.time.title" = "Avg. transaction time"; "account.stats.description.text" = "Your Multichain Score is based on your onchain journey through 3 ecosystems: Ethereum, Polygon and Binance Smart Chain"; +"account.stats.error.message" = "Unable to retrieve account score information. Please try again later."; "account.stats.hold.tokens.usd.title" = "Hold tokens USD"; "account.stats.max.transaction.time.title" = "Max transaction time"; "account.stats.min.transactions.time.title" = "Min transaction time"; @@ -73,8 +74,10 @@ "account.stats.rejected.transactions.title" = "Rejected transactions"; "account.stats.title" = "Your score"; "account.stats.total.transactions.title" = "Total transactions"; +"account.stats.unavailable.text" = "You don't have an EVM compatible account. If you want to see the score - add it via \"Import wallet\" option."; "account.stats.updated.title" = "Updated"; "account.stats.wallet.age.title" = "Wallet age"; +"account.stats.wallet.option.title" = "Show wallet score"; "account.template" = "%s account"; "account.unique.secret" = "Accounts with unique secrets"; "accounts.add.account" = "Add an account"; @@ -136,7 +139,7 @@ "backup.mnemonic.description" = "Remember to record your words in the same order as they appear below. Use a non-digital way to backup."; "backup.mnemonic.title" = "Write down your mnemonic"; "backup.not.backed.up.confirm" = "I will risk it"; -"backup.not.backed.up.message" = "If your device gets lost or stolen, you will loose your wallet and all your funds forever"; +"backup.not.backed.up.message" = "If your device gets lost or stolen, you will lose your wallet and all your funds forever"; "backup.not.backed.up.title" = "Not backed up!"; "backup.password.description" = "Enter backup password for the selected wallet to import"; "backup.password.password.field.title" = "Enter password"; @@ -172,6 +175,11 @@ "balance.locks.liquidity.pools.row.title" = "Liquidity Pools"; "balance.locks.nomination.pools.row.title" = "Nomination Pools"; "balance.locks.screen.title" = "Locked details"; +"banner.addwallet.regular.button.title" = "Сreate or import"; +"banner.addwallet.regular.subtitle" = "Join the ecosystems with more than 90+ chains and fascinating features"; +"banner.addwallet.regular.title" = "EVM/Substrate accounts"; +"banner.addwallet.ton.button.title" = "Join now"; +"banner.addwallet.ton.title" = "Join the fastest growing ecosystem ever"; "banners.view.factory.backup.action.title" = "Backup now"; "banners.view.factory.backup.subtitle" = "Protect yourself from losing access to your funds"; "banners.view.factory.backup.title" = "Wallet backup"; @@ -270,6 +278,7 @@ Euro cash"; "common.name" = "Name"; "common.network" = "Network"; "common.network.fee" = "Network fee"; +"common.network.hash" = "%@ Hash"; "common.network.management" = "Network management"; "common.next" = "Next"; "common.no" = "No"; @@ -286,6 +295,7 @@ Euro cash"; "common.privacy.policy" = "Privacy Policy"; "common.proceed" = "Proceed"; "common.referral.code.title" = "Referral code"; +"common.refund" = "Refund"; "common.reject" = "Reject"; "common.rejected" = "Rejected"; "common.request" = "Request"; @@ -297,6 +307,8 @@ Euro cash"; "common.search.results.number" = "Search results: %d"; "common.search.start.title" = "Search results will appear here"; "common.secret.derivation.path" = "Secret derivation path"; +"common.see.all" = "See all"; +"common.see.all" = "See all"; "common.select" = "Select"; "common.select" = "Select"; "common.select.all" = "Select all"; @@ -334,6 +346,10 @@ Euro cash"; "confirm.mnemonic.mismatch.error.title" = "Invalid mnemonic"; "confirmation.skip.action" = "Skip process"; "connect.details" = "Connect details"; +"connected.accounts.common" = "Connected Accounts"; +"connected.accounts.ethereum.title" = "EVM chain accounts"; +"connected.accounts.substrate.title" = "Substrate chain accounts"; +"connected.accounts.ton.title" = "TON chain accounts"; "connection.add.already.exists.error" = "The node has been added previously. Please try another node."; "connection.add.invalid.error" = "Can't establish connection with the node. Please try another one."; "connection.add.unsupported.error" = "Unfortunately, the network is unsupported. Please try one of the following: %@."; @@ -362,6 +378,14 @@ Euro cash"; "create.new.account" = "Create a new account"; "create.new.connection" = "Create new connection"; "create.new.pincode" = "Create a new pin code"; +"cross.chain.tx.status.destination.fail.description" = "Transaction failed on the %@. Your funds in the current transaction will be returned to your wallet."; +"cross.chain.tx.status.destination.fail.title" = "Transaction refund"; +"cross.chain.tx.status.done.description" = "Transaction has been successfully completed."; +"cross.chain.tx.status.done.title" = "All done"; +"cross.chain.tx.status.pending.description" = "Transaction is in progress. Please wait while %@ asset cross the bridge from the %@ to the %@ network."; +"cross.chain.tx.status.pending.title" = "Transaction pending"; +"cross.chain.tx.status.source.fail.description" = "Transaction failed on the %@ network. Please, try again."; +"cross.chain.tx.status.source.fail.title" = "Transaction failed"; "crowdloan.active.section.format" = "Active (%@)"; "crowdloan.app.bonus.format" = "Fearless Wallet bonus (%@)"; "crowdloan.astar.referral.code.invalid" = "Invalid referral address, only Polkadot addresses are accepted, please try again "; @@ -402,10 +426,22 @@ Euro cash"; "custom.collators.text" = "You should trust your collators to act competently and honestly; basing your decision purely on their current profitability could lead to reduced profits or even loss of funds."; "custom.collators.title" = "Stake with known collators"; "custom.validators.empty.message" = "No validators found.\nPlease try to change filters"; +"dapp.category.connected.title" = "Connected"; +"dapp.category.defi.title" = "DeFi"; +"dapp.category.featured.title" = "Featured"; +"dapp.category.nft.title" = "NFT"; +"dapp.category.utilities.title" = "Utilities"; +"dapp.connected.title" = "Connected"; +"dapp.discover.title" = "Discover dApp"; +"dapp.no.connected.dapps.title" = "No connected dApps"; +"dapp.not.found.title" = "No dApps were found"; "default.account.shared.secret" = "Accounts with a shared secret"; "delete.custom.node.title" = "Delete custom node?"; "ecdsa.selection.subtitle" = "(BTC/ETH compatible)"; "ecdsa.selection.title" = "ECDSA"; +"ecosystem.options.backup.title" = "Backup chain accounts"; +"ecosystem.options.details.title" = "Chain accounts"; +"ecosystem.options.title" = "Account options"; "ed25519.selection.subtitle" = "ed25519 (alternative)"; "ed25519.selection.title" = "Edwards"; "empty.state.message" = "Nothing found for your request"; @@ -488,6 +524,7 @@ Seed: %@"; "lp.banner.text" = "Invest your funds in Liquidity\npools and receive rewards"; "lp.confirm.liquidity.screen.title" = "Confirm Liquidity"; "lp.confirm.liquidity.warning.text" = "Output is estimated. If the price changes more than 0.5% your transaction will revert."; +"lp.liquidity.add.complete.text" = "Your supply to Liquidity pools has been successfully completed"; "lp.network.fee.alert.text" = "Network fee is used to ensure SORA system’s growth and stable performance."; "lp.network.fee.alert.title" = "Network fee"; "lp.pool.details.title" = "Pool details"; @@ -495,12 +532,12 @@ Seed: %@"; "lp.pool.remove.warning.title" = "NOTE"; "lp.remove.button.title" = "Remove Liquidity"; "lp.remove.liquidity.screen.title" = "Remove Liquidity"; -"lp.reward.token.text" = "Earn %@"; +"lp.reward.token.text" = "Earn %s"; "lp.reward.token.title" = "Rewards Payout In"; "lp.slippage.title" = "Slippage"; "lp.supply.button.title" = "Supply Liquidity"; "lp.supply.liquidity.screen.title" = "Supply Liquidity"; -"lp.token.pooled.text" = "Your %@ Pooled"; +"lp.token.pooled.text" = "Your %s Pooled"; "lp.user.pools.title" = "User pools"; "manage.assets.account.missing.text" = "Add an account..."; "manage.assets.search.hint" = "Search by asset"; @@ -538,7 +575,7 @@ This is your transaction hash:"; "network.issues.hide.action.title" = "Don’t show me again"; "network.issues.resolve.option.title" = "Resolve Option"; "network.management.popular" = "Popular"; -"network.managment.favourite" = "Favourite"; +"network.managment.favourite" = "Favorite"; "network.status.connected" = "Connected"; "network.status.connecting" = "Connecting…"; "network.url.address" = "URL address"; @@ -565,6 +602,10 @@ This is your transaction hash:"; "no.email.bound.error.message" = "Please make sure that the mail application is installed in the device."; "node" = "Node"; "node.selection.delete.node.title" = "Delete custom node?"; +"onboarding.banner.regular.ecosystem.button.title" = "Join EVM or Substrate"; +"onboarding.banner.regular.ecosystem.title" = "Create or import Substrate or EVM accounts"; +"onboarding.banner.ton.ecosystem.button.title" = "Join TON"; +"onboarding.banner.ton.ecosystem.title" = "Connect to the fastest growing ecosystem ever"; "onboarding.create.account" = "Create an account"; "onboarding.create.wallet" = "Create a wallet"; "onboarding.preinstalled.wallet.button.text" = "Get a pre-installed wallet"; @@ -705,6 +746,7 @@ Terms and Conditions and Privacy Policy"; "pools.limit.has.reached.error.message" = "The limit of pools in this network has been reached"; "pools.limit.has.reached.error.title" = "You cannot create more pools"; "profile.about.title" = "About"; +"profile.account.score.title" = "Nomis multichain score"; "profile.accounts.title" = "Accounts"; "profile.language.title" = "Language"; "profile.logout.description" = "This action will result in deleting all accounts from this device. Make sure you have backed up your passphrase before proceeding."; @@ -732,8 +774,12 @@ Terms and Conditions and Privacy Policy"; "scam.additional.stub" = "Additional:"; "scam.description.donation.stub" = "This address has been flagged as suspicious. We strongly recommend that you don't send %s to this account."; "scam.description.exchange.stub" = "This address is marked as an exchange, be careful as the deposit and withdrawal addresses may different."; +"scam.description.lowscore.text" = "The address you are about to transfer to has low onchain activity, which may indicate a potential scammer or sybil attacker"; "scam.description.sanctions.stub" = "This address has been flagged due to an entity related to a country under sanctions. We strongly recommend that you don't send %s to this account."; "scam.description.scam.stub" = "This address has been flagged due to evidence of a scam. We strongly recommend that you don't send {asset} to this account."; +"scam.info.nomis.name" = "Nomis multi-chain score"; +"scam.info.nomis.reason.text" = "Low network activity"; +"scam.info.nomis.subtype.text" = "Proceed with caution"; "scam.name.stub" = "Name:"; "scam.reason.stub" = "Reason:"; "scam.warning.alert.subtitle" = "We strongly recommend that you don't send %s to this account."; @@ -1071,6 +1117,10 @@ Remember to make a backup of your key and keep it in a safe and private place (e "terms.and.conditions.sora.community.alert.main" = "SORA community does not collect any of your personal data, "; "terms.and.conditions.sora.community.alert.secondary" = "but to get the SORA Card and IBAN account you need to go through KYC process with a card issuer."; "terms.and.conditions.title" = "Terms & Conditions"; +"ton.connect.alert.description" = "Service address"; +"ton.connect.alert.subtitle" = "Be sure to check the service address before connecting the wallet"; +"ton.connect.alert.title" = "Review dApp info"; +"ton.tonviewer.action.title" = "View in Tonviewer"; "tranaction.history.others.tab.title" = "Others"; "transaction.detail.date" = "Date"; "transaction.detail.status" = "Status"; @@ -1096,7 +1146,7 @@ Remember to make a backup of your key and keep it in a safe and private place (e "username.setup.hint.2.0" = "Example: Savings, Investments, Crowdloans, Staking. This nickname will only be displayed to you and stored locally on your mobile device."; "username.setup.title" = "Create an account"; "username.setup.title.2.0" = "Create a new wallet"; -"validator.info.comission.title" = "Comission"; +"validator.info.comission.title" = "commission"; "validator.info.min.stake.alert.text" = "Minimum stake among active nominators is %s. To get rewards you have to stake more."; "validator.info.min.stake.among.active.nominators.text" = "Minimum stake among active nominators"; "validators.list.empty.message" = "No validators found"; @@ -1203,10 +1253,4 @@ belongs to the right network"; "your.validators.change.validators.title" = "Change validators"; "your.validators.stop.nominating.title" = "Stop nominating"; "your.validators.validator.total.stake" = "Total staked: %@"; -"сurrencies.stub.text" = "Currencies"; -"account.stats.wallet.option.title" = "Show wallet score"; -"scam.description.lowscore.text" = "The address you are about to transfer to has low onchain activity, which may indicate a potential scammer or sybil attacker"; -"account.stats.error.message" = "Unable to retrieve account score information. Please try again later."; -"profile.account.score.title" = "Nomis multichain score"; -"scam.info.nomis.name" = "Nomis multi-chain score"; -"scam.info.nomis.subtype.text" = "Proceed with caution"; +"сurrencies.stub.text" = "Currencies"; \ No newline at end of file diff --git a/fearless/id.lproj/Localizable.strings b/fearless/id.lproj/Localizable.strings index faf06dc9b5..0d94308619 100644 --- a/fearless/id.lproj/Localizable.strings +++ b/fearless/id.lproj/Localizable.strings @@ -66,6 +66,7 @@ "account.option" = "Opsi akun"; "account.stats.avg.transaction.time.title" = "Avg. transaction time"; "account.stats.description.text" = "Your Multichain Score is based on your onchain journey through 3 ecosystems: Ethereum, Polygon and Binance Smart Chain"; +"account.stats.error.message" = "Unable to retrieve account score information. Please try again later."; "account.stats.hold.tokens.usd.title" = "Hold tokens USD"; "account.stats.max.transaction.time.title" = "Max transaction time"; "account.stats.min.transactions.time.title" = "Min transaction time"; @@ -73,8 +74,10 @@ "account.stats.rejected.transactions.title" = "Rejected transactions"; "account.stats.title" = "Your score"; "account.stats.total.transactions.title" = "Total transactions"; +"account.stats.unavailable.text" = "You don't have an EVM compatible account. If you want to see the score - add it via \"Import wallet\" option."; "account.stats.updated.title" = "Updated"; "account.stats.wallet.age.title" = "Wallet age"; +"account.stats.wallet.option.title" = "Show wallet score"; "account.template" = "%s Akun"; "account.unique.secret" = "Akun dengan rahasia unik"; "accounts.add.account" = "Tambah akun"; @@ -172,6 +175,11 @@ "balance.locks.liquidity.pools.row.title" = "Kumpulan Likuiditas"; "balance.locks.nomination.pools.row.title" = "Kumpulan Nominasi"; "balance.locks.screen.title" = "Detail terkunci"; +"banner.addwallet.regular.button.title" = "Сreate or import"; +"banner.addwallet.regular.subtitle" = "Join the ecosystems with more than 90+ chains and fascinating features"; +"banner.addwallet.regular.title" = "EVM/Substrate accounts"; +"banner.addwallet.ton.button.title" = "Join now"; +"banner.addwallet.ton.title" = "Join the fastest growing ecosystem ever"; "banners.view.factory.backup.action.title" = "Cadangkan sekarang"; "banners.view.factory.backup.subtitle" = "Lindungi diri Anda dari kehilangan akses ke dana Anda"; "banners.view.factory.backup.title" = "Dompet cadangan"; @@ -269,6 +277,7 @@ "common.name" = "Nama"; "common.network" = "Jaringan"; "common.network.fee" = "Biaya jaringan"; +"common.network.hash" = "%@ Hash"; "common.network.management" = "Manajemen jaringan"; "common.next" = "Berikutnya"; "common.no" = "Tidak"; @@ -285,6 +294,7 @@ "common.privacy.policy" = "Kebijakan pribadi"; "common.proceed" = "Memproses"; "common.referral.code.title" = "Kode referensi"; +"common.refund" = "Refund"; "common.reject" = "Tolak"; "common.rejected" = "Ditolak"; "common.request" = "Permintaan"; @@ -296,6 +306,8 @@ "common.search.results.number" = "Hasil pencarian: %d"; "common.search.start.title" = "Hasil pencarian akan muncul di sini"; "common.secret.derivation.path" = "Secret derivation path"; +"common.see.all" = "See all"; +"common.see.all" = "See all"; "common.select" = "Pilih"; "common.select" = "Pilih"; "common.select.all" = "Pilih semuanya"; @@ -333,6 +345,10 @@ "confirm.mnemonic.mismatch.error.title" = "Mnemonik tidak valid"; "confirmation.skip.action" = "Lewati proses"; "connect.details" = "Detail terhubung"; +"connected.accounts.common" = "Connected Accounts"; +"connected.accounts.ethereum.title" = "EVM chain accounts"; +"connected.accounts.substrate.title" = "Substrate chain accounts"; +"connected.accounts.ton.title" = "TON chain accounts"; "connection.add.already.exists.error" = "Node sudah ditambahkan sebelumnya. Silakan, coba node lain."; "connection.add.invalid.error" = "Tidak dapat membuat koneksi dengan node. Silakan, coba yang lain."; "connection.add.unsupported.error" = "Sayangnya, jaringan tersebut tidak didukung. Silakan, coba salah satu hal berikut ini: %@."; @@ -361,6 +377,14 @@ "create.new.account" = "Buat akun baru"; "create.new.connection" = "Buat koneksi baru"; "create.new.pincode" = "Buat kode pin baru"; +"cross.chain.tx.status.destination.fail.description" = "Transaction failed on the %@. Your funds in the current transaction will be returned to your wallet."; +"cross.chain.tx.status.destination.fail.title" = "Transaction refund"; +"cross.chain.tx.status.done.description" = "Transaction has been successfully completed."; +"cross.chain.tx.status.done.title" = "All done"; +"cross.chain.tx.status.pending.description" = "Transaction is in progress. Please wait while %@ asset cross the bridge from the %@ to the %@ network."; +"cross.chain.tx.status.pending.title" = "Transaction pending"; +"cross.chain.tx.status.source.fail.description" = "Transaction failed on the %@ network. Please, try again."; +"cross.chain.tx.status.source.fail.title" = "Transaction failed"; "crowdloan.active.section.format" = "Aktif ( %@ )"; "crowdloan.app.bonus.format" = "Bonus Dompet Fearless (%@)"; "crowdloan.astar.referral.code.invalid" = "Alamat referral tidak valid, hanya alamat Polkadot yang diterima, silakan coba lagi"; @@ -401,10 +425,22 @@ "custom.collators.text" = "Anda harus memercayai kolaborator Anda untuk bertindak secara kompeten dan jujur; mendasarkan keputusan Anda semata-mata pada profitabilitas mereka saat ini dapat menyebabkan berkurangnya keuntungan atau bahkan hilangnya dana."; "custom.collators.title" = "Taruhan dengan collator yang dikenal"; "custom.validators.empty.message" = "Validator tidak ditemukan.\nSilakan coba ubah filter"; +"dapp.category.connected.title" = "Connected"; +"dapp.category.defi.title" = "DeFi"; +"dapp.category.featured.title" = "Featured"; +"dapp.category.nft.title" = "NFT"; +"dapp.category.utilities.title" = "Utilities"; +"dapp.connected.title" = "Connected"; +"dapp.discover.title" = "Discover dApp"; +"dapp.no.connected.dapps.title" = "No connected dApps"; +"dapp.not.found.title" = "No dApps were found"; "default.account.shared.secret" = "Akun dengan rahasia bersama"; "delete.custom.node.title" = "Hapus node khusus?"; "ecdsa.selection.subtitle" = "(Kompatibel dengan BTC / ETH)"; "ecdsa.selection.title" = "ECDSA"; +"ecosystem.options.backup.title" = "Backup chain accounts"; +"ecosystem.options.details.title" = "Chain accounts"; +"ecosystem.options.title" = "Account options"; "ed25519.selection.subtitle" = "ed25519 (alternatif)"; "ed25519.selection.title" = "Edwards"; "empty.state.message" = "Tidak ada yang ditemukan untuk permintaan Anda"; @@ -487,6 +523,7 @@ Seed: %@"; "lp.banner.text" = "Invest your funds in Liquidity\npools and receive rewards"; "lp.confirm.liquidity.screen.title" = "Confirm Liquidity"; "lp.confirm.liquidity.warning.text" = "Output is estimated. If the price changes more than 0.5% your transaction will revert."; +"lp.liquidity.add.complete.text" = "Your supply to Liquidity pools has been successfully completed"; "lp.network.fee.alert.text" = "Network fee is used to ensure SORA system’s growth and stable performance."; "lp.network.fee.alert.title" = "Network fee"; "lp.pool.details.title" = "Pool details"; @@ -494,12 +531,12 @@ Seed: %@"; "lp.pool.remove.warning.title" = "NOTE"; "lp.remove.button.title" = "Remove Liquidity"; "lp.remove.liquidity.screen.title" = "Remove Liquidity"; -"lp.reward.token.text" = "Earn %@"; +"lp.reward.token.text" = "Earn %s"; "lp.reward.token.title" = "Rewards Payout In"; "lp.slippage.title" = "Slippage"; "lp.supply.button.title" = "Supply Liquidity"; "lp.supply.liquidity.screen.title" = "Supply Liquidity"; -"lp.token.pooled.text" = "Your %@ Pooled"; +"lp.token.pooled.text" = "Your %s Pooled"; "lp.user.pools.title" = "User pools"; "manage.assets.account.missing.text" = "Tambahkan akun..."; "manage.assets.search.hint" = "Cari berdasarkan aset"; @@ -558,6 +595,10 @@ Seed: %@"; "no.email.bound.error.message" = "Harap pastikan bahwa aplikasi mail telah terinstal pada perangkat."; "node" = "Node"; "node.selection.delete.node.title" = "Hapus node khusus?"; +"onboarding.banner.regular.ecosystem.button.title" = "Join EVM or Substrate"; +"onboarding.banner.regular.ecosystem.title" = "Create or import Substrate or EVM accounts"; +"onboarding.banner.ton.ecosystem.button.title" = "Join TON"; +"onboarding.banner.ton.ecosystem.title" = "Connect to the fastest growing ecosystem ever"; "onboarding.create.account" = "Buat Akun"; "onboarding.create.wallet" = "Buat dompet"; "onboarding.preinstalled.wallet.button.text" = "Dapatkan dompet pra-instal"; @@ -698,6 +739,7 @@ Syarat dan Ketentuan serta Kebijakan Privasi"; "pools.limit.has.reached.error.message" = "Batas kumpulan di jaringan ini telah tercapai"; "pools.limit.has.reached.error.title" = "Anda tidak dapat membuat kumpulan lagi"; "profile.about.title" = "Tentang"; +"profile.account.score.title" = "Nomis multichain score"; "profile.accounts.title" = "Akun"; "profile.language.title" = "Bahasa"; "profile.logout.description" = "Tindakan ini akan mengakibatkan penghapusan semua akun dari perangkat ini. Pastikan Anda telah membuat cadangan frasa sandi Anda sebelum melanjutkan."; @@ -725,8 +767,12 @@ Syarat dan Ketentuan serta Kebijakan Privasi"; "scam.additional.stub" = "Tambahan:"; "scam.description.donation.stub" = "Alamat ini telah ditandai sebagai mencurigakan. Kami sangat menyarankan agar Anda tidak mengirimkan %s ke akun ini."; "scam.description.exchange.stub" = "Alamat ini ditandai sebagai bursa, hati-hati karena alamat penyetoran dan penarikan mungkin berbeda."; +"scam.description.lowscore.text" = "The address you are about to transfer to has low onchain activity, which may indicate a potential scammer or sybil attacker"; "scam.description.sanctions.stub" = "Alamat ini ditandai karena ada entitas yang terkait dengan negara yang terkena sanksi. Kami sangat menyarankan agar Anda tidak mengirimkan %s ke akun ini."; "scam.description.scam.stub" = "Alamat ini telah ditandai karena ada bukti penipuan. Kami sangat menyarankan agar Anda tidak mengirim %s ke akun ini."; +"scam.info.nomis.name" = "Nomis multi-chain score"; +"scam.info.nomis.reason.text" = "Low network activity"; +"scam.info.nomis.subtype.text" = "Proceed with caution"; "scam.name.stub" = "Nama:"; "scam.reason.stub" = "Alasan:"; "scam.warning.alert.subtitle" = "Kami sangat menyarankan agar Anda tidak mengirim %s ke akun ini."; @@ -1059,6 +1105,10 @@ Syarat dan Ketentuan serta Kebijakan Privasi"; "terms.and.conditions.sora.community.alert.main" = "Komunitas SORA tidak mengumpulkan data pribadi Anda,"; "terms.and.conditions.sora.community.alert.secondary" = "namun untuk mendapatkan Kartu SORA dan akun IBAN Anda harus melalui proses KYC dengan penerbit kartu."; "terms.and.conditions.title" = "Syarat dan ketentuan"; +"ton.connect.alert.description" = "Service address"; +"ton.connect.alert.subtitle" = "Be sure to check the service address before connecting the wallet"; +"ton.connect.alert.title" = "Review dApp info"; +"ton.tonviewer.action.title" = "View in Tonviewer"; "tranaction.history.others.tab.title" = "Lainnya"; "transaction.detail.date" = "Tanggal"; "transaction.detail.status" = "Status"; @@ -1187,10 +1237,4 @@ akan muncul di sini"; "your.validators.change.validators.title" = "Ubah validator"; "your.validators.stop.nominating.title" = "berhenti mencalonkan diri"; "your.validators.validator.total.stake" = "Total ditaruhkan: %@"; -"сurrencies.stub.text" = "Mata uang"; -"account.stats.wallet.option.title" = "Show wallet score"; -"scam.description.lowscore.text" = "The address you are about to transfer to has low onchain activity, which may indicate a potential scammer or sybil attacker"; -"account.stats.error.message" = "Unable to retrieve account score information. Please try again later."; -"profile.account.score.title" = "Nomis multichain score"; -"scam.info.nomis.name" = "Nomis multi-chain score"; -"scam.info.nomis.subtype.text" = "Proceed with caution"; +"сurrencies.stub.text" = "Mata uang"; \ No newline at end of file diff --git a/fearless/ja.lproj/Localizable.strings b/fearless/ja.lproj/Localizable.strings index 964bb6e5bd..a6c92670fc 100644 --- a/fearless/ja.lproj/Localizable.strings +++ b/fearless/ja.lproj/Localizable.strings @@ -64,17 +64,20 @@ "account.needed.message" = "このネットワークのアカウントがありません。アカウントを作成またはインポートできます"; "account.needed.title" = "アカウントが必要"; "account.option" = "アカウントオプション"; -"account.stats.avg.transaction.time.title" = "Avg. transaction time"; -"account.stats.description.text" = "Your Multichain Score is based on your onchain journey through 3 ecosystems: Ethereum, Polygon and Binance Smart Chain"; -"account.stats.hold.tokens.usd.title" = "Hold tokens USD"; -"account.stats.max.transaction.time.title" = "Max transaction time"; -"account.stats.min.transactions.time.title" = "Min transaction time"; -"account.stats.native.balance.usd.title" = "Native balance USD"; -"account.stats.rejected.transactions.title" = "Rejected transactions"; -"account.stats.title" = "Your score"; -"account.stats.total.transactions.title" = "Total transactions"; -"account.stats.updated.title" = "Updated"; -"account.stats.wallet.age.title" = "Wallet age"; +"account.stats.avg.transaction.time.title" = "平均取引時間"; +"account.stats.description.text" = "あなたのマルチチェーンスコアは、Ethereum、Polygon、Binance Smart Chainの3つのエコシステムを通じたオンチェーン活動に基づいています。"; +"account.stats.error.message" = "アカウントスコア情報を取得できません。後でもう一度お試しください。"; +"account.stats.hold.tokens.usd.title" = "保有トークン(USD)"; +"account.stats.max.transaction.time.title" = "最大取引時間"; +"account.stats.min.transactions.time.title" = "最小取引時間"; +"account.stats.native.balance.usd.title" = "ネイティブバランス(USD)"; +"account.stats.rejected.transactions.title" = "拒否された取引"; +"account.stats.title" = "あなたのスコア"; +"account.stats.total.transactions.title" = "合計取引数"; +"account.stats.unavailable.text" = "EVM互換のアカウントがありません。スコアを確認するには、「ウォレットをインポート」オプションでアカウントを追加してください。"; +"account.stats.updated.title" = "更新済み"; +"account.stats.wallet.age.title" = "ウォレットの年齢"; +"account.stats.wallet.option.title" = "ウォレットスコアを表示"; "account.template" = "%sアカウント"; "account.unique.secret" = "一意のシークレットを持つアカウント"; "accounts.add.account" = "アカウントを追加"; @@ -167,11 +170,16 @@ "backup.wallet.replace.several.alert" = "あなたは現在、メインのキー・ペアを置き換えて追加した複数のチェーンアカウントを持っており、それぞれに特定のキー・ペアを所有しています。しかし、現在のウォレットのバックアップ(エクスポート)機能は、複数のキー・ペアの保存をサポートしていないのでご注意ください。現状、保存できるのはメインのキー・ペアのみとなります。 \n \n チェーンアカウントの安全性を確保するため、現在のフローを進める前に、まず別個にバックアップすることをお勧めします。置き換えたチェーンアカウントのバックアップに成功したら、何の心配もなくフローを進むことができます。"; "backup.wallet.seed" = "シードを表示"; "backup.wallet.title" = "ウォレットのバックアップ"; -"balance.locks.blocked.row.title" = "Blocked"; -"balance.locks.governance.row.title" = "Governance"; -"balance.locks.liquidity.pools.row.title" = "Liquidity Pools"; -"balance.locks.nomination.pools.row.title" = "Nomination Pools"; -"balance.locks.screen.title" = "Locked details"; +"balance.locks.blocked.row.title" = "ブロック済み"; +"balance.locks.governance.row.title" = "ガバナンス"; +"balance.locks.liquidity.pools.row.title" = "流動性プール"; +"balance.locks.nomination.pools.row.title" = "ノミネーションプール"; +"balance.locks.screen.title" = "ロックされた詳細"; +"banner.addwallet.regular.button.title" = "Сreate or import"; +"banner.addwallet.regular.subtitle" = "Join the ecosystems with more than 90+ chains and fascinating features"; +"banner.addwallet.regular.title" = "EVM/Substrate accounts"; +"banner.addwallet.ton.button.title" = "Join now"; +"banner.addwallet.ton.title" = "Join the fastest growing ecosystem ever"; "banners.view.factory.backup.action.title" = "今すぐバックアップ"; "banners.view.factory.backup.subtitle" = "デバイスを失くすと、永久に資金も失います"; "banners.view.factory.backup.title" = "ウォレットのバックアップ"; @@ -191,11 +199,11 @@ "common.action.receive" = "受け取る"; "common.action.send" = "送る"; "common.action.teleport" = "テレポート"; -"common.activation.required" = "Activation Required"; +"common.activation.required" = "有効化が必要です"; "common.add" = "追加"; "common.address" = "アドレス"; "common.advanced" = "高度な"; -"common.and.others.placeholder" = "%s & others"; +"common.and.others.placeholder" = "%sおよびその他"; "common.applied" = "適用されました"; "common.apply" = "適用する"; "common.approve" = "承認"; @@ -215,14 +223,14 @@ "common.choose.action" = "アクションを選択"; "common.choose.network" = "ネットワークを選択"; "common.close" = "閉じる"; -"common.commission" = "Commission"; +"common.commission" = "手数料"; "common.confirm" = "確認"; "common.confirm.password" = "パスワードの確認"; "common.confirm.title" = "確認"; "common.confirmation.title" = "本当によいですか?"; "common.confirmed" = "確認済み"; "common.connections" = "接続"; -"common.contacts" = "Contacts"; +"common.contacts" = "連絡先"; "common.continue" = "続行"; "common.copied" = "クリップボードにコピーしました"; "common.copy" = "コピー"; @@ -243,7 +251,7 @@ "common.error.password.mismatch" = "パスワードが一致しません"; "common.events" = "イベント"; "common.existential.error.message" = "このトランザクションにより、アカウント存続預金を下回るため(%@)、「刈り取られる」ことになります(スペースを節約するためにブロックチェーンの状態からアカウントは消去されます)。"; -"common.existential.warning.max.amount" = "Set max amount"; +"common.existential.warning.max.amount" = "最大額を設定"; "common.existential.warning.message" = "このトランザクションにより、アカウント存続預金を下回るため (%@)、「刈り取られる」ことになります(スペースを節約するためにブロックチェーンの状態からアカウントは消去されます)。継続を選択した場合、ネットワークによって設定された存続預金額を下回る資金を失うことになります。詳細な情報については、ネットワークの公式ドキュメント(例:Polkadot Wiki)を参照してください。フィアレス・ウォレットは完全な非管理的なアプリであり、ネットワークでのあなたの行動については一切判らないし制御もできません。あなたが、その意味を理解して完全に同意した場合のみ、続行してください"; "common.existential.warning.title" = "操作によりアカウントが削除されます"; "common.expiry" = "有効期限"; @@ -261,14 +269,15 @@ "common.keep.editing.action" = "操作に戻る"; "common.learn.more" = "もっと詳しく知る"; "common.max" = "最大"; -"common.message" = "Message"; +"common.message" = "メッセージ"; "common.methods" = "メソッド"; "common.module" = "モジュール"; -"common.more" = "More"; +"common.more" = "さらに"; "common.my.networks" = "私のネットワーク"; "common.name" = "名前"; "common.network" = "ネットワーク"; "common.network.fee" = "ネットワーク手数料"; +"common.network.hash" = "%@ Hash"; "common.network.management" = "ネットワーク管理"; "common.next" = "次へ"; "common.no" = "いいえ"; @@ -285,6 +294,7 @@ "common.privacy.policy" = "個人情報保護方針"; "common.proceed" = "続行"; "common.referral.code.title" = "紹介コード"; +"common.refund" = "Refund"; "common.reject" = "拒否"; "common.rejected" = "拒否されました"; "common.request" = "リクエスト"; @@ -296,6 +306,8 @@ "common.search.results.number" = "検索結果: %d"; "common.search.start.title" = "検索結果はここに表示されます"; "common.secret.derivation.path" = "秘密の派生パス(Derivation Path)"; +"common.see.all" = "すべて見る"; +"common.see.all" = "See all"; "common.select" = "選択"; "common.select" = "選択"; "common.select.all" = "全て選択"; @@ -308,7 +320,7 @@ "common.sign" = "署名"; "common.skip" = "スキップ"; "common.staking" = "ステーキング"; -"common.start" = "Start"; +"common.start" = "開始"; "common.terms.and.conditions" = "利用規約"; "common.till.date" = "%sまで"; "common.time.left" = "残り時間"; @@ -333,6 +345,10 @@ "confirm.mnemonic.mismatch.error.title" = "無効なニーモニック"; "confirmation.skip.action" = "プロセスをスキップ"; "connect.details" = "接続の詳細"; +"connected.accounts.common" = "Connected Accounts"; +"connected.accounts.ethereum.title" = "EVM chain accounts"; +"connected.accounts.substrate.title" = "Substrate chain accounts"; +"connected.accounts.ton.title" = "TON chain accounts"; "connection.add.already.exists.error" = "ノードは既に追加されています。別のノードを試してください"; "connection.add.invalid.error" = "ノードとの接続を確立できません。別のものを試してください"; "connection.add.unsupported.error" = "残念ながら、ネットワークはサポートされていません。次のいずれかを試してください: %@"; @@ -349,7 +365,7 @@ "contacts.contact.address" = "連絡先住所"; "contacts.contact.name" = "連絡先"; "contacts.create.contact" = "連絡先を作成"; -"contacts.empty.message" = "No contacts found"; +"contacts.empty.message" = "連絡先が見つかりません"; "contacts.recent" = "最近"; "contacts.scan" = "QRコードをスキャン"; "contacts.undefined" = "未定義"; @@ -361,6 +377,14 @@ "create.new.account" = "新しいアカウントの作成"; "create.new.connection" = "新しい接続の作成"; "create.new.pincode" = "新しいPINコードを作成"; +"cross.chain.tx.status.destination.fail.description" = "Transaction failed on the %@. Your funds in the current transaction will be returned to your wallet."; +"cross.chain.tx.status.destination.fail.title" = "Transaction refund"; +"cross.chain.tx.status.done.description" = "Transaction has been successfully completed."; +"cross.chain.tx.status.done.title" = "All done"; +"cross.chain.tx.status.pending.description" = "Transaction is in progress. Please wait while %@ asset cross the bridge from the %@ to the %@ network."; +"cross.chain.tx.status.pending.title" = "Transaction pending"; +"cross.chain.tx.status.source.fail.description" = "Transaction failed on the %@ network. Please, try again."; +"cross.chain.tx.status.source.fail.title" = "Transaction failed"; "crowdloan.active.section.format" = "アクティブ( %@ )"; "crowdloan.app.bonus.format" = "フィアレス・ウォレットのボーナス ( %@ )"; "crowdloan.astar.referral.code.invalid" = "紹介アドレスが無効です。ポルカドット・アドレスのみ受け付けます。もう一度お試しください"; @@ -401,10 +425,22 @@ "custom.collators.text" = "コレーターが有能かつ誠実に行動することを信頼すべきです。現在の収益性だけで判断すると、利益の減少や資金喪失につながる可能性があります"; "custom.collators.title" = "既知のコレーターとステーク"; "custom.validators.empty.message" = "バリデーターが見つかりません。\nフィルターを変更してみてください"; +"dapp.category.connected.title" = "Connected"; +"dapp.category.defi.title" = "DeFi"; +"dapp.category.featured.title" = "Featured"; +"dapp.category.nft.title" = "NFT"; +"dapp.category.utilities.title" = "Utilities"; +"dapp.connected.title" = "Connected"; +"dapp.discover.title" = "Discover dApp"; +"dapp.no.connected.dapps.title" = "No connected dApps"; +"dapp.not.found.title" = "No dApps were found"; "default.account.shared.secret" = "共有シークレットを持つデフォルトのアカウント"; "delete.custom.node.title" = "カスタムノードを削除しますか?"; "ecdsa.selection.subtitle" = "(BTC / ETH互換)"; "ecdsa.selection.title" = "ECDSA"; +"ecosystem.options.backup.title" = "Backup chain accounts"; +"ecosystem.options.details.title" = "Chain accounts"; +"ecosystem.options.title" = "Account options"; "ed25519.selection.subtitle" = "ed25519(代替)"; "ed25519.selection.title" = "Edwards"; "empty.state.message" = "リクエストに該当するものが見つかりませんでした"; @@ -413,7 +449,7 @@ "error.invalid.address" = "選択したチェーンのアドレスが無効です"; "error.message.enter.the.name" = "名前を入力してください…"; "error.message.enter.the.url.address" = "URLアドレスを入力してください…"; -"error.scan.qr.disabled.asset" = "The asset you want to transfer is either unsupported or turned off. Go to Asset Management, activate the asset, and then scan the QR code again."; +"error.scan.qr.disabled.asset" = "送信しようとしている資産はサポートされていないか、無効になっています。資産管理に移動して資産を有効にし、もう一度QRコードをスキャンしてください。"; "error.unsupported.asset" = "現在アプリでサポートされていないアセットを送信しようとしています。別のアセットを選択するか、別のQRコードをリクエストしてください"; "ethereum.crypto.type" = "イーサリアム(Ethereum)キー・ペアの暗号方式"; "ethereum.secret.derivation.path" = "イーサリアム(Ethereum)の秘密の派生パス(Derivation Path)"; @@ -483,10 +519,11 @@ "lp.apy.alert.title" = "戦略的ボーナス年利"; "lp.apy.title" = "戦略的ボーナス年利"; "lp.available.pools.title" = "利用可能なプール"; -"lp.banner.action.details.title" = "Show details"; -"lp.banner.text" = "Invest your funds in Liquidity\npools and receive rewards"; +"lp.banner.action.details.title" = "詳細を表示"; +"lp.banner.text" = "資金をLiquidity\npoolsに投資して報酬を得る"; "lp.confirm.liquidity.screen.title" = "流動性を確認"; "lp.confirm.liquidity.warning.text" = "出力は推定です。価格が0.5%以上変動した場合、取引は元に戻されます。"; +"lp.liquidity.add.complete.text" = "流動性プールへの供給が正常に完了しました"; "lp.network.fee.alert.text" = "ネットワーク手数料はSORAシステムの成長と安定したパフォーマンスを確保するために使用されます。"; "lp.network.fee.alert.title" = "ネットワーク手数料"; "lp.pool.details.title" = "プールの詳細"; @@ -494,12 +531,12 @@ "lp.pool.remove.warning.title" = "注"; "lp.remove.button.title" = "流動性を削除"; "lp.remove.liquidity.screen.title" = "流動性を削除"; -"lp.reward.token.text" = "%@ を獲得"; +"lp.reward.token.text" = "%s を獲得"; "lp.reward.token.title" = "報酬の支払い先"; "lp.slippage.title" = "スリッページ"; "lp.supply.button.title" = "流動性を供給"; "lp.supply.liquidity.screen.title" = "流動性を供給"; -"lp.token.pooled.text" = " %@ プール済み"; +"lp.token.pooled.text" = " %s プール済み"; "lp.user.pools.title" = "ユーザープール"; "manage.assets.account.missing.text" = "アカウントを追加..."; "manage.assets.search.hint" = "トークンまたはネットワークで検索"; @@ -527,7 +564,7 @@ "network.info.address" = "ノードアドレス"; "network.info.name" = "ノード名"; "network.info.title" = "ノード情報"; -"network.issue.main" = "Connection Error: Unable to connect to the network. Please try again."; +"network.issue.main" = "接続エラー: ネットワークに接続できません。再度お試しください。"; "network.issue.network.unavailible" = "ネットワークは利用できません"; "network.issue.node.unavailable" = "ノードは利用できません"; "network.issue.notofication" = "お知らせ"; @@ -541,29 +578,33 @@ "network.status.connected" = "接続済み"; "network.status.connecting" = "接続しています..."; "network.url.address" = "URLアドレス"; -"nft.choose.recipient.title" = "Choose recipient"; +"nft.choose.recipient.title" = "受信者を選択"; "nft.collection.available.nfts" = "%sコレクションで利用可能なNFT"; "nft.collection.my.nfts" = "私のNFT"; "nft.collection.title" = "コレクション"; "nft.creator.title" = "作成者"; -"nft.list.empty.message" = "There aren't any NFTs yet. Buy or mint NFTs to see them here."; -"nft.load.error" = "Failed to load NFTs"; +"nft.list.empty.message" = "まだNFTがありません。ここでNFTを購入またはミントしてください。"; +"nft.load.error" = "NFTの読み込みに失敗しました"; "nft.owner.title" = "所有"; "nft.share.address" = "受信するパブリック・アドレス: %s"; -"nft.spam.warning" = "Beware of a scam/spam NFT collection – verify authenticity before engaging. Stay safe!"; +"nft.spam.warning" = "詐欺/スパムNFTコレクションに注意してください - 関与する前に信頼性を確認してください。安全を確保しましょう!"; "nft.stub.text" = "NFTがもうすぐ登場します"; "nft.stub.title" = "失礼しました"; "nft.tokenid.title" = "トークンID"; "nfts.collection.count" = "数量: %d/%d"; "nfts.filters.airdrop" = "AirDrop"; -"nfts.filters.spam" = "SPAM"; -"nfts.filters.title" = "Hide NFTs"; +"nfts.filters.spam" = "スパム"; +"nfts.filters.title" = "NFTを非表示にする"; "nfts.stub" = "NFT"; "no.access.to.google" = "Googleにアクセスできません"; "no.account.found" = "アカウントが見つかりません"; "no.email.bound.error.message" = "メールのアプリがデバイスにインストールされていることを確認してください"; "node" = "ノード"; "node.selection.delete.node.title" = "カスタムノードを削除しますか?"; +"onboarding.banner.regular.ecosystem.button.title" = "Join EVM or Substrate"; +"onboarding.banner.regular.ecosystem.title" = "Create or import Substrate or EVM accounts"; +"onboarding.banner.ton.ecosystem.button.title" = "Join TON"; +"onboarding.banner.ton.ecosystem.title" = "Connect to the fastest growing ecosystem ever"; "onboarding.create.account" = "アカウントを作成する"; "onboarding.create.wallet" = "ウォレットを作成"; "onboarding.preinstalled.wallet.button.text" = "プリインストールされたウォレットを取得"; @@ -703,6 +744,7 @@ "pools.limit.has.reached.error.message" = "このネットワーク内のプールの制限に達しました"; "pools.limit.has.reached.error.title" = "これ以上プールを作成できません"; "profile.about.title" = "情報"; +"profile.account.score.title" = "Nomisマルチチェーンスコア"; "profile.accounts.title" = "アカウント"; "profile.language.title" = "言語"; "profile.logout.description" = "このアクションを行うと、このデバイスから全アカウントが削除されます。続行する前に、パスフレーズのバックアップを取ったことを必ず確認してください"; @@ -730,8 +772,12 @@ "scam.additional.stub" = "追加:"; "scam.description.donation.stub" = "このアドレスは、疑わしいアドレスだと喚起されています。このアカウントに %s を送信しないことを強くお勧めします"; "scam.description.exchange.stub" = "このアドレスは取引所としてマークされていますが、入金アドレスと出金アドレスが異なる場合があるので注意してください"; +"scam.description.lowscore.text" = "送金しようとしているアドレスはオンチェーン活動が少なく、詐欺師やSybil攻撃者の可能性があります。"; "scam.description.sanctions.stub" = "このアドレスは、制裁下にある国に関連するエンティティだと喚起されています。このアカウントに %s を送信しないことを強くお勧めします"; "scam.description.scam.stub" = "このアドレスは、詐欺の証拠があると喚起されています。このアカウントに %s を送信しないことを強くお勧めします"; +"scam.info.nomis.name" = "Nomisマルチチェーンスコア"; +"scam.info.nomis.reason.text" = "ネットワークの活動が低い"; +"scam.info.nomis.subtype.text" = "注意して進めてください"; "scam.name.stub" = "名前:"; "scam.reason.stub" = "理由:"; "scam.warning.alert.subtitle" = "このアカウントに %s を送信しないことを強くお勧めします"; @@ -750,15 +796,15 @@ "select.save.type" = "保存形式を選択"; "select.suggested.validators.warning" = "アルゴリズム・バリデーターの提案は、金融に関する相談や助言に該当するものではありません。ステーキングはハイリスクな活動であり、アルゴリズムによるバリデーターの提案は、必ずしもこのリスクを軽減するものではありません。アルゴリズムによって提案されたバリデーターは、候補から外れる可能性があります。アルゴリズムによって提案されたバリデーターは、提案および/または選択された後、いつでもパラメーター(例:手数料率など)を変更することができます。これらの理由や他の理由で報酬を失う可能性があります。関連するリスクを注意して慎重に検討した上で、ご自身の判断でトークンをステークし、バリデーターの提案を使用するようにしてください"; "select.validators.disclaimer" = "免責事項:アルゴリズム・バリデーターの提案は、金融に関する相談や助言に該当するものではありません。ステーキングはハイリスクな活動であり、アルゴリズムによるバリデーターの提案は、必ずしもこのリスクを軽減するものではありません。アルゴリズムによって提案されたバリデーターは、切り取られる可能性があります。アルゴリズムによって提案されたバリデーターは、提案および/または選択された後、いつでもパラメーター(例:手数料率など)を変更することができます。これらの理由や他の理由でトークンや報酬を失う可能性があります。関連するリスクを注意して慎重に検討した上で、ご自身の判断でトークンをステークし、バリデーターの提案を使用するようにしてください"; -"send.all.title" = "Send all tokens and reap the account"; +"send.all.title" = "すべてのトークンを送信してアカウントを解約する"; "send.confirm.amount.title" = "送信中\n%@"; "send.fund.title" = "資金を送る"; "settings.add.wallet" = "ウォレットを追加"; "settings.hide.zero.balances" = "残高ゼロを隠す"; "share.referral.code" = "紹介コードを共有"; "sign.this.message" = "メッセージに署名しますか?"; -"sora.bridge.amount.less.fee" = "The amount you're trying to transfer is insufficient to cover the transaction fees on the %s network. Although the transaction won't process, you'll still be charged the fees on the Sora network."; -"sora.bridge.low.amaunt.polkadot.alert" = "Currently, there's a min. amount 1.1 DOT for bridging to ensure the stability and security. We appreciate your understanding."; +"sora.bridge.amount.less.fee" = "転送しようとしている金額は、%s ネットワーク上の取引手数料をカバーするには不十分です。トランザクションは処理されませんが、それでも Sora ネットワークの手数料が請求されます。"; +"sora.bridge.low.amaunt.polkadot.alert" = "現在、安定性と安全性を確保するために、ブリッジングには最低限の1.1 DOTが必要です。ご理解のほどよろしくお願いします。"; "sora.bridge.low.amount.alert" = "現在、SORAネットワークの安定性と安全性を確保するため、ブリッジングには最低0.05 KSMが設定されています。ご理解のほどよろしくお願いいたします。"; "sora.card.status.failure.text" = "本人確認(KYC)処理が終了したか、そうでなければ失敗しました"; "sora.card.status.failure.title" = "検証失敗"; @@ -1066,7 +1112,11 @@ "terms.and.conditions.sora.community.alert.main" = "SORAコミュニティはあなたの個人データを収集しません"; "terms.and.conditions.sora.community.alert.secondary" = "ただし、SORAカードと IBANアカウントを取得するには、カード発行会社との本人確認(KYC)の処理を通過する必要があります"; "terms.and.conditions.title" = "規約と条件"; -"tranaction.history.others.tab.title" = "Others"; +"ton.connect.alert.description" = "Service address"; +"ton.connect.alert.subtitle" = "Be sure to check the service address before connecting the wallet"; +"ton.connect.alert.title" = "Review dApp info"; +"ton.tonviewer.action.title" = "View in Tonviewer"; +"tranaction.history.others.tab.title" = "その他"; "transaction.detail.date" = "日付"; "transaction.detail.status" = "状態"; "transaction.details.copy.hash" = "ハッシュをコピーする"; @@ -1074,9 +1124,9 @@ "transaction.details.from" = "から"; "transaction.details.hash.title" = "外形的ハッシュ"; "transaction.details.view.etherscan" = "イーサスキャン(Etherscan)で見る"; -"transaction.details.view.oklink" = "View in OKX explorer"; +"transaction.details.view.oklink" = "OKXエクスプローラーで表示"; "transaction.details.view.polkascan" = "ポルカスキャン(Polkascan)で見る"; -"transaction.details.view.reefscan" = "View in Reefscan"; +"transaction.details.view.reefscan" = "Reefscanで表示"; "transaction.details.view.subscan" = "サブスキャン(Subscan)で見る"; "transaction.list.header" = "全てのトランザクション"; "transaction.status.completed" = "完了"; @@ -1092,13 +1142,13 @@ "username.setup.title" = "アカウントを作成する"; "username.setup.title.2.0" = "新しいウォレットを作成"; "validator.info.comission.title" = "コミッション"; -"validator.info.min.stake.alert.text" = "Minimum stake among active nominators is %s. To get rewards you have to stake more."; -"validator.info.min.stake.among.active.nominators.text" = "Minimum stake among active nominators"; +"validator.info.min.stake.alert.text" = "アクティブな指名者の中での最低ステークは%sです。報酬を得るには、もっとステークする必要があります。"; +"validator.info.min.stake.among.active.nominators.text" = "アクティブな指名者の中での最低ステーク"; "validators.list.empty.message" = "バリデーターが見つかりません"; -"verify.phone.number.title" = "Verify your phone number"; -"vesting.claim.disclaimer.text" = "Due to the unique vesting schedules of each parachain, our app is unable to display the quantity of locked tokens eligible for claiming. Please be advised that initiating a claim may be impractical if the prospective amount is marginal and comparable to the transaction fee involved. For comprehensive insights into your locked balances, consult the Subscan blockexplorer. We urge you to assess the information carefully and proceed at your own discretion."; -"vesting.claim.disclaimer.title" = "Important Notice Regarding Token Claims:"; -"vesting.locked.title" = "Vesting Locked"; +"verify.phone.number.title" = "電話番号を確認してください"; +"vesting.claim.disclaimer.text" = "各パラチェーンのユニークなベスティングスケジュールにより、アプリはクレーム対象のロックされたトークンの数量を表示できません。見込まれる金額が僅少で、取引手数料と同等の場合、クレームの開始は実用的でない可能性があります。ロックされた残高の詳細については、Subscanブロックエクスプローラーをご参照ください。情報を慎重に評価し、ご自身の裁量で進めてください。"; +"vesting.claim.disclaimer.title" = "トークンクレームに関する重要なお知らせ:"; +"vesting.locked.title" = "ベスティングロック"; "view.in" = "%sで見る"; "view.wallet" = "ウォレットを見る"; "wallet.account.locks.democracy" = "民主主義"; @@ -1160,7 +1210,7 @@ "wallet.send.balance.total.after.transfer" = "送信後の合計"; "wallet.send.confirm.title" = "送信を確認"; "wallet.send.dead.recipient.message" = "宛先アカウントの最終金額が既存の預金より少ないため、送信は失敗します。量を増やしてみてください"; -"wallet.send.dead.recipient.message.v2" = "Your transfer will fail since the final amount (%1$s) on the destination account will be less than the minimal balance (%2$s). Please increase the amount by %3$s"; +"wallet.send.dead.recipient.message.v2" = "送金先の最終額(%1$s)が最低残高(%2$s)を下回るため、送金が失敗します。金額を%3$s増やしてください。"; "wallet.send.dead.recipient.title" = "金額が少なすぎる"; "wallet.send.eth.dead.recipient.message" = "受信者のアカウントのイーサリアム(Ethereum)残高が不十分な場合、ERC20トークン転送が完了しません。受信者が転送を続行するのに十分なイーサリアムを持っていることを確認してください"; "wallet.send.existential.warning" = "送信すると、残高が最少預金よりも少なくなるため、ブロックストアからアカウントが削除されます"; @@ -1185,7 +1235,7 @@ "xcm.cross.chain.invalid.address.title" = "ネットワーク・アドレスではありません"; "xcm.destination.network.fee.title" = "宛先ネットワーク手数料"; "xcm.destination.network.title" = "宛先ネットワーク"; -"xcm.low.amaunt.assetSymbol.alert" = "Currently, there's a min. amount %@ for bridging to ensure the stability and security. We appreciate your understanding."; +"xcm.low.amaunt.assetSymbol.alert" = "現在、安定性と安全性を確保するために、ブリッジングには最低限の額%@が必要です。ご理解のほどよろしくお願いします。"; "xcm.mywallets.button.title" = "私のウォレット"; "xcm.origin.network.fee.title" = "元ネットワーク手数料"; "xcm.origin.network.title" = "元ネットワーク"; @@ -1193,10 +1243,4 @@ "your.validators.change.validators.title" = "バリデーターの変更"; "your.validators.stop.nominating.title" = "ノミネートを中止"; "your.validators.validator.total.stake" = "総ステーク:%@"; -"сurrencies.stub.text" = "通貨"; -"account.stats.wallet.option.title" = "Show wallet score"; -"scam.description.lowscore.text" = "The address you are about to transfer to has low onchain activity, which may indicate a potential scammer or sybil attacker"; -"account.stats.error.message" = "Unable to retrieve account score information. Please try again later."; -"profile.account.score.title" = "Nomis multichain score"; -"scam.info.nomis.name" = "Nomis multi-chain score"; -"scam.info.nomis.subtype.text" = "Proceed with caution"; +"сurrencies.stub.text" = "通貨"; \ No newline at end of file diff --git a/fearless/pt.lproj/Localizable.strings b/fearless/pt.lproj/Localizable.strings index 41d5bd73f9..700d65ec48 100644 --- a/fearless/pt.lproj/Localizable.strings +++ b/fearless/pt.lproj/Localizable.strings @@ -74,6 +74,7 @@ "account.stats.rejected.transactions.title" = "Rejected transactions"; "account.stats.title" = "Your score"; "account.stats.total.transactions.title" = "Total transactions"; +"account.stats.unavailable.text" = "You don't have an EVM compatible account. If you want to see the score - add it via \"Import wallet\" option."; "account.stats.updated.title" = "Updated"; "account.stats.wallet.age.title" = "Wallet age"; "account.stats.wallet.option.title" = "Show wallet score"; @@ -174,6 +175,11 @@ "balance.locks.liquidity.pools.row.title" = "Liquidity Pools"; "balance.locks.nomination.pools.row.title" = "Nomination Pools"; "balance.locks.screen.title" = "Locked details"; +"banner.addwallet.regular.button.title" = "Сreate or import"; +"banner.addwallet.regular.subtitle" = "Join the ecosystems with more than 90+ chains and fascinating features"; +"banner.addwallet.regular.title" = "EVM/Substrate accounts"; +"banner.addwallet.ton.button.title" = "Join now"; +"banner.addwallet.ton.title" = "Join the fastest growing ecosystem ever"; "banners.view.factory.backup.action.title" = "Faça backup agora"; "banners.view.factory.backup.subtitle" = "Se você perder seu dispositivo, seus fundos serão perdidos para sempre"; "banners.view.factory.backup.title" = "Faça backup da sua carteira"; @@ -271,6 +277,7 @@ "common.name" = "Nome"; "common.network" = "Rede"; "common.network.fee" = "Taxa de rede"; +"common.network.hash" = "%@ Hash"; "common.network.management" = "Gerência de rede"; "common.next" = "Próximo"; "common.no" = "Não"; @@ -287,6 +294,7 @@ "common.privacy.policy" = "Política de Privacidade"; "common.proceed" = "Proceder"; "common.referral.code.title" = "Código de referência"; +"common.refund" = "Refund"; "common.reject" = "Rejeitar"; "common.rejected" = "Rejeitado"; "common.request" = "Solicitar"; @@ -298,6 +306,8 @@ "common.search.results.number" = "Resultados da pesquisa: %d"; "common.search.start.title" = "Os resultados da pesquisa aparecerão aqui"; "common.secret.derivation.path" = "Caminho de derivação secreto"; +"common.see.all" = "See all"; +"common.see.all" = "See all"; "common.select" = "Selecione"; "common.select" = "Selecione"; "common.select.all" = "Selecionar tudo"; @@ -335,6 +345,10 @@ "confirm.mnemonic.mismatch.error.title" = "Mnemónica inválida"; "confirmation.skip.action" = "Saltar processo"; "connect.details" = "Detalhes da conexão"; +"connected.accounts.common" = "Connected Accounts"; +"connected.accounts.ethereum.title" = "EVM chain accounts"; +"connected.accounts.substrate.title" = "Substrate chain accounts"; +"connected.accounts.ton.title" = "TON chain accounts"; "connection.add.already.exists.error" = "O node já foi adicionado anteriormente. Por favor, tente outro node."; "connection.add.invalid.error" = "Não se consegue estabelecer ligação com o node. Por favor, tente outro."; "connection.add.unsupported.error" = "Infelizmente, a rede não é suportada. Por favor, tente uma dos seguintes: %@ ."; @@ -363,6 +377,14 @@ "create.new.account" = "Criar uma nova conta"; "create.new.connection" = "Criar nova conexão"; "create.new.pincode" = "Criar novo código PIN"; +"cross.chain.tx.status.destination.fail.description" = "Transaction failed on the %@. Your funds in the current transaction will be returned to your wallet."; +"cross.chain.tx.status.destination.fail.title" = "Transaction refund"; +"cross.chain.tx.status.done.description" = "Transaction has been successfully completed."; +"cross.chain.tx.status.done.title" = "All done"; +"cross.chain.tx.status.pending.description" = "Transaction is in progress. Please wait while %@ asset cross the bridge from the %@ to the %@ network."; +"cross.chain.tx.status.pending.title" = "Transaction pending"; +"cross.chain.tx.status.source.fail.description" = "Transaction failed on the %@ network. Please, try again."; +"cross.chain.tx.status.source.fail.title" = "Transaction failed"; "crowdloan.active.section.format" = "Ativo (%@)"; "crowdloan.app.bonus.format" = "Bónus da Fearless Wallet (%@)"; "crowdloan.astar.referral.code.invalid" = "Endereço de referência inválido, apenas endereços da Polkadot são aceites, por favor tente novamente"; @@ -403,10 +425,22 @@ "custom.collators.text" = "Você deve confiar que seus coletores agirão com competência e honestidade; basear sua decisão puramente na lucratividade atual pode levar à redução dos lucros ou até mesmo à perda de fundos."; "custom.collators.title" = "Stake com coletores conhecidos"; "custom.validators.empty.message" = "Nenhum validador encontrado. Por favor, tente alterar os filtros"; +"dapp.category.connected.title" = "Connected"; +"dapp.category.defi.title" = "DeFi"; +"dapp.category.featured.title" = "Featured"; +"dapp.category.nft.title" = "NFT"; +"dapp.category.utilities.title" = "Utilities"; +"dapp.connected.title" = "Connected"; +"dapp.discover.title" = "Discover dApp"; +"dapp.no.connected.dapps.title" = "No connected dApps"; +"dapp.not.found.title" = "No dApps were found"; "default.account.shared.secret" = "Contas padrão com um segredo partilhado"; "delete.custom.node.title" = "Eliminar o node personalizado?"; "ecdsa.selection.subtitle" = "(compatível com BTC/ETH)"; "ecdsa.selection.title" = "ECDSA"; +"ecosystem.options.backup.title" = "Backup chain accounts"; +"ecosystem.options.details.title" = "Chain accounts"; +"ecosystem.options.title" = "Account options"; "ed25519.selection.subtitle" = "ed25519 (alternativa)"; "ed25519.selection.title" = "Edwards"; "empty.state.message" = "Nada encontrado para sua solicitação"; @@ -489,6 +523,7 @@ Seed: %@"; "lp.banner.text" = "Invest your funds in Liquidity\npools and receive rewards"; "lp.confirm.liquidity.screen.title" = "Confirm Liquidity"; "lp.confirm.liquidity.warning.text" = "Output is estimated. If the price changes more than 0.5% your transaction will revert."; +"lp.liquidity.add.complete.text" = "Your supply to Liquidity pools has been successfully completed"; "lp.network.fee.alert.text" = "Network fee is used to ensure SORA system’s growth and stable performance."; "lp.network.fee.alert.title" = "Network fee"; "lp.pool.details.title" = "Pool details"; @@ -496,12 +531,12 @@ Seed: %@"; "lp.pool.remove.warning.title" = "NOTE"; "lp.remove.button.title" = "Remove Liquidity"; "lp.remove.liquidity.screen.title" = "Remove Liquidity"; -"lp.reward.token.text" = "Earn %@"; +"lp.reward.token.text" = "Earn %s"; "lp.reward.token.title" = "Rewards Payout In"; "lp.slippage.title" = "Slippage"; "lp.supply.button.title" = "Supply Liquidity"; "lp.supply.liquidity.screen.title" = "Supply Liquidity"; -"lp.token.pooled.text" = "Your %@ Pooled"; +"lp.token.pooled.text" = "Your %s Pooled"; "lp.user.pools.title" = "User pools"; "manage.assets.account.missing.text" = "Acrescentar uma conta..."; "manage.assets.search.hint" = "Pesquisa por token ou rede"; @@ -566,6 +601,10 @@ Este é o hash da sua transação:"; "no.email.bound.error.message" = "Por favor, certifique-se de que uma aplicação de e-mail está instalada no dispositivo."; "node" = "Node"; "node.selection.delete.node.title" = "Eliminar o node personalizado?"; +"onboarding.banner.regular.ecosystem.button.title" = "Join EVM or Substrate"; +"onboarding.banner.regular.ecosystem.title" = "Create or import Substrate or EVM accounts"; +"onboarding.banner.ton.ecosystem.button.title" = "Join TON"; +"onboarding.banner.ton.ecosystem.title" = "Connect to the fastest growing ecosystem ever"; "onboarding.create.account" = "Criar conta"; "onboarding.create.wallet" = "Criar carteira"; "onboarding.preinstalled.wallet.button.text" = "Obtenha uma carteira pré-instalada"; @@ -744,6 +783,7 @@ Estes documentos são cruciais para uma experiência segura e positiva do utiliz "scam.description.sanctions.stub" = "Este endereço foi sinalizado devido a uma entidade relacionada a um país sob sanções. Recomendamos fortemente que você não envie %s para esta conta."; "scam.description.scam.stub" = "Este endereço foi sinalizado devido a evidências de fraude. Recomendamos fortemente que você não envie %s para esta conta."; "scam.info.nomis.name" = "Nomis multi-chain score"; +"scam.info.nomis.reason.text" = "Low network activity"; "scam.info.nomis.subtype.text" = "Proceed with caution"; "scam.name.stub" = "Nome:"; "scam.reason.stub" = "Motivo:"; @@ -1082,6 +1122,10 @@ Lembre-se de fazer uma cópia de segurança da sua chave e guardá-la num local "terms.and.conditions.sora.community.alert.main" = "A comunidade SORA não coleta nenhum dos seus dados pessoais,"; "terms.and.conditions.sora.community.alert.secondary" = "mas para obter o cartão SORA e a conta IBAN você precisa passar pelo processo KYC com um emissor do cartão."; "terms.and.conditions.title" = "Termos e Condições"; +"ton.connect.alert.description" = "Service address"; +"ton.connect.alert.subtitle" = "Be sure to check the service address before connecting the wallet"; +"ton.connect.alert.title" = "Review dApp info"; +"ton.tonviewer.action.title" = "View in Tonviewer"; "tranaction.history.others.tab.title" = "Others"; "transaction.detail.date" = "Data"; "transaction.detail.status" = "Status"; diff --git a/fearless/ru.lproj/Localizable.strings b/fearless/ru.lproj/Localizable.strings index f1fe5dbf96..ea33ef073a 100644 --- a/fearless/ru.lproj/Localizable.strings +++ b/fearless/ru.lproj/Localizable.strings @@ -63,33 +63,34 @@ "account.info.title" = "Аккаунт"; "account.needed.message" = "У вас нет учетной записи в этой сети, вы можете создать или импортировать учетную запись."; "account.needed.title" = "Необходим аккаунт"; -"account.option" = "Account option"; -"account.stats.avg.transaction.time.title" = "Avg. transaction time"; -"account.stats.description.text" = "Your Multichain Score is based on your onchain journey through 3 ecosystems: Ethereum, Polygon and Binance Smart Chain"; -"account.stats.error.message" = "Unable to retrieve account score information. Please try again later."; -"account.stats.hold.tokens.usd.title" = "Hold tokens USD"; -"account.stats.max.transaction.time.title" = "Max transaction time"; -"account.stats.min.transactions.time.title" = "Min transaction time"; -"account.stats.native.balance.usd.title" = "Native balance USD"; -"account.stats.rejected.transactions.title" = "Rejected transactions"; -"account.stats.title" = "Your score"; -"account.stats.total.transactions.title" = "Total transactions"; -"account.stats.updated.title" = "Updated"; -"account.stats.wallet.age.title" = "Wallet age"; -"account.stats.wallet.option.title" = "Show wallet score"; +"account.option" = "Опция учетной записи"; +"account.stats.avg.transaction.time.title" = "Среднее время транзакции"; +"account.stats.description.text" = "Ваш мультицепной счет основан на вашем пути в блокчейне через три экосистемы: Ethereum, Polygon и Binance Smart Chain."; +"account.stats.error.message" = "Не удалось получить информацию о счете аккаунта. Пожалуйста, попробуйте позже."; +"account.stats.hold.tokens.usd.title" = "Удерживать токены USD"; +"account.stats.max.transaction.time.title" = "Максимальное время транзакции"; +"account.stats.min.transactions.time.title" = "Минимальное время транзакции"; +"account.stats.native.balance.usd.title" = "Основной баланс в USD"; +"account.stats.rejected.transactions.title" = "Отклоненные транзакции"; +"account.stats.title" = "Ваш счет"; +"account.stats.total.transactions.title" = "Всего транзакций"; +"account.stats.unavailable.text" = "У вас нет совместимого с EVM аккаунта. Если вы хотите увидеть счет, добавьте его через опцию \"Импортировать кошелек\""; +"account.stats.updated.title" = "Обновлено"; +"account.stats.wallet.age.title" = "Возраст кошелька"; +"account.stats.wallet.option.title" = "Показать счет кошелька"; "account.template" = "%s аккаунт"; "account.unique.secret" = "Аккаунты с измененным ключом"; "accounts.add.account" = "Добавить аккаунт"; "accounts.for.export" = "Аккаунты для экспорта"; "accounts.with.changed.key" = "Аккаунты с измененным ключом"; "accounts.with.one.key" = "Аккаунты с одним ключом"; -"accounts.with.shared.secret" = "Account with shared secret"; +"accounts.with.shared.secret" = "Аккаунт с общим секретом"; "add.node.button.title" = "Добавить ноду"; "alert.add.ethereum.message" = "Добавить аккаунты Moonbeam и Moonriver?"; "alert.add.ethereum.title" = "ETH аккаунты"; "alert.pool.created.text" = "Пул создан. Теперь Вам нужно выбрать валидаторов для пула"; "all.done.alert.all.done.stub" = "Всё готово"; -"all.done.alert.description.stub" = "You can return to the app"; +"all.done.alert.description.stub" = "Вы можете вернуться в приложение"; "all.done.alert.hash.stub" = "Хэш"; "all.done.alert.result.stub" = "Результат"; "all.done.alert.success.stub" = "Успешно"; @@ -126,20 +127,20 @@ "assetdetails.balance.transferable" = "Доступно"; "astar.bonus" = "Ваш бонус"; "astar.friend.bonus" = "Бонус для вашего друга"; -"backup.chain.account" = "Backup chain account"; -"backup.create.password.confirm.field.title" = "Confirm password"; -"backup.create.password.continue.button" = "Set backup password"; -"backup.create.password.description" = "Setting a password will encrypt your Google backup. You’ll need to enter this when restoring your wallet"; -"backup.create.password.matched" = "Password matched"; -"backup.create.password.not.matched" = "Password doesn’t matched"; -"backup.create.password.password.field.title" = "Set password"; +"backup.chain.account" = "Создать резервную копию учетной записи цепочки"; +"backup.create.password.confirm.field.title" = "Подтвердить пароль"; +"backup.create.password.continue.button" = "Установить резервный пароль"; +"backup.create.password.description" = "Установка пароля приведет к шифрованию вашей резервной копии Google. Вам нужно будет ввести его при восстановлении вашего кошелька"; +"backup.create.password.matched" = "Пароль совпал"; +"backup.create.password.not.matched" = "Пароль не совпадает"; +"backup.create.password.password.field.title" = "Установить пароль"; "backup.create.password.screen.title" = "Создать резервный пароль"; -"backup.create.password.warning" = "I understand that if I forget my password there is no way to retrieve it"; +"backup.create.password.warning" = "Я понимаю, что если я забуду свой пароль, то восстановить его будет невозможно"; "backup.mnemonic.description" = "Не забудьте записать слова в том порядке, в котором они указаны ниже. Используйте нецифровой способ резервного копирования."; "backup.mnemonic.title" = "Запишите мнемоническую фразу"; -"backup.not.backed.up.confirm" = "I will risk it"; -"backup.not.backed.up.message" = "If your device gets lost or stolen, you will loose your wallet and all your funds forever"; -"backup.not.backed.up.title" = "Not backed up!"; +"backup.not.backed.up.confirm" = "Я рискну"; +"backup.not.backed.up.message" = "Если ваше устройство будет потеряно или украдено, вы навсегда потеряете свой кошелек и все свои средства."; +"backup.not.backed.up.title" = "Нет резервной копии"; "backup.password.description" = "Введите резервный пароль для выбранного кошелька для импорта"; "backup.password.password.field.title" = "Введите пароль"; "backup.password.title" = "Ввести резервный пароль"; @@ -149,38 +150,42 @@ "backup.risks.warnings.continue.button" = "Показать мнемоническую фразу"; "backup.risks.warnings.description" = "Ваша мнемоническая фраза - это ключ к вашему кошельку. Создайте резервную копию, чтобы вы могли восстановить свой кошелек, если потеряете или повредите свое устройство."; "backup.risks.warnings.title" = "Создайте резервную копию"; -"backup.select.wallet.create.button" = "Create new account"; +"backup.select.wallet.create.button" = "Создать новый счёт"; "backup.select.wallet.title" = "Выбрать кошелёк для импорта"; "backup.wallet.backup.google" = "Сохранить кошелек в Google"; "backup.wallet.delete.google" = "Удалить кошелек из Google"; -"backup.wallet.delete.message" = "If you delete your Google backup, you’ll only be able to recover your wallet with a manual backup of your passphrase"; +"backup.wallet.delete.message" = "Если вы удалите свою резервную копию Google, вы сможете восстановить свой кошелек только с резервной копией вашей парольной фразы вручную."; "backup.wallet.footer.view.text" = "Если вы потеряете доступ к этому устройству, ваши средства будут потеряны, если вы не создадите резервную копию!"; -"backup.wallet.imported.description" = "You have successfully imported wallet"; +"backup.wallet.imported.description" = "Вы успешно импортировали кошелек"; "backup.wallet.imported.import.more" = "Добавить ещё"; "backup.wallet.imported.title" = "Кошелек импортирован"; "backup.wallet.json" = "Экспортировать JSON"; "backup.wallet.name.create.bottom.decription" = "Виден только вам и хранится локально"; "backup.wallet.name.create.description" = "Придумайте название для своего нового кошелька, чтобы вы могли легко его идентифицировать. Это необязательно и будет видно только вам"; "backup.wallet.name.create.title" = "Назовите свой кошелек"; -"backup.wallet.name.editing.description" = "Example: Savings, Investments, Crowdloans, Staking. This account name will be displayed only for you and stored locally on your mobile device"; -"backup.wallet.name.editing.title" = "Change wallet name"; -"backup.wallet.name.field.name.title" = "Wallet name"; -"backup.wallet.replace.accounts.alert" = "You currently have a %s chain account and address %s that has been added by replacing the main key pair, and it possesses a specific one. However, please note that our current wallet backup (export) flow does not support the storage of multiple key pairs. As a result, you can only save your main key pair. \n \n To ensure the safety of your replaced chain account, we recommend that you first back it up separately before proceeding with the current flow. Once you have successfully backed up your replaced chain account, you can proceed to the current flow without any concerns."; -"backup.wallet.replace.several.alert" = "You currently have several chain accounts that has been added by replacing the main key pair, and it possesses a specific one. However, please note that our current wallet backup (export) flow does not support the storage of multiple key pairs. As a result, you can only save your main key pair. \n \n To ensure the safety of your replaced chain account, we recommend that you first back it up separately before proceeding with the current flow. Once you have successfully backed up your replaced chain account, you can proceed to the current flow without any concerns."; -"backup.wallet.seed" = "Show Raw Seed"; -"backup.wallet.title" = "Backup wallet"; -"balance.locks.blocked.row.title" = "Blocked"; -"balance.locks.governance.row.title" = "Governance"; -"balance.locks.liquidity.pools.row.title" = "Liquidity Pools"; -"balance.locks.nomination.pools.row.title" = "Nomination Pools"; -"balance.locks.screen.title" = "Locked details"; -"banners.view.factory.backup.action.title" = "Backup now"; -"banners.view.factory.backup.subtitle" = "Protect yourself from losing access to your funds"; -"banners.view.factory.backup.title" = "Wallet backup"; -"banners.view.factory.xor.action.title" = "Buy XOR"; -"banners.view.factory.xor.subtitle" = "Buy or sell XOR token with\ -Euro cash"; -"banners.view.factory.xor.title" = "Buy XOR token"; +"backup.wallet.name.editing.description" = "Пример: сбережения, инвестиции, краудзаймы, стейкинг. Это имя учетной записи будет отображаться только для вас и храниться локально на вашем мобильном устройстве"; +"backup.wallet.name.editing.title" = "Изменить название кошелька"; +"backup.wallet.name.field.name.title" = "Название кошелька"; +"backup.wallet.replace.accounts.alert" = "В настоящее время у вас есть %s Учетная запись и адрес сети %s Он был добавлен путем замены основной ключевой пары, и обладает специфическим ключом. Однако обратите внимание, что наш текущий процесс резервного копирования (экспорта) кошелька не поддерживает хранение нескольких пар ключей. В результате вы можете сохранить только свою основную ключевую пару. \n \n Чтобы обеспечить безопасность замененной учетной записи цепочки, мы рекомендуем сначала создать отдельную резервную копию учетной записи, прежде чем продолжить текущий процесс. После успешного резервного копирования замененной учетной записи цепочки вы можете без каких-либо проблем перейти к текущему процессу."; +"backup.wallet.replace.several.alert" = "В настоящее время у вас есть несколько учетных записей в цепочке, которые были добавлены путем замены основной пары ключей, и они обладают определенной парой. Однако обратите внимание, что наш текущий процесс резервного копирования (экспорта) кошелька не поддерживает хранение нескольких пар ключей. В результате вы можете сохранить только свою основную ключевую пару. \n \n Чтобы обеспечить безопасность замененной учетной записи цепочки, мы рекомендуем сначала создать отдельную резервную копию учетной записи, прежде чем приступать к текущему процессу. После успешного резервного копирования замененной учетной записи цепочки вы можете без каких-либо проблем перейти к текущему процессу."; +"backup.wallet.seed" = "Показать Raw Seed"; +"backup.wallet.title" = "Резервное копирование кошелька"; +"balance.locks.blocked.row.title" = "Заблокировано"; +"balance.locks.governance.row.title" = "Управление"; +"balance.locks.liquidity.pools.row.title" = "Пулы ликвидности"; +"balance.locks.nomination.pools.row.title" = "Пулы номинаций"; +"balance.locks.screen.title" = "Заблокированные детали"; +"banner.addwallet.regular.button.title" = "Сreate or import"; +"banner.addwallet.regular.subtitle" = "Join the ecosystems with more than 90+ chains and fascinating features"; +"banner.addwallet.regular.title" = "EVM/Substrate accounts"; +"banner.addwallet.ton.button.title" = "Join now"; +"banner.addwallet.ton.title" = "Join the fastest growing ecosystem ever"; +"banners.view.factory.backup.action.title" = "Резервное копирование сейчас"; +"banners.view.factory.backup.subtitle" = "Защитите себя от потери доступа к своим средствам"; +"banners.view.factory.backup.title" = "Резервное копирование кошелька"; +"banners.view.factory.xor.action.title" = "Купить XOR"; +"banners.view.factory.xor.subtitle" = "Купить или продать токен XOR за евро"; +"banners.view.factory.xor.title" = "Купить токен XOR"; "btn.backup.with.google" = "Сохранить в Google"; "buy.completed" = "Покупка совершена! Ожидайте до 60 минут. Вы можете отслеживать статус по электронной почте."; "chain.selection.all.networks" = "Все сети"; @@ -194,17 +199,17 @@ Euro cash"; "common.action.receive" = "Получить"; "common.action.send" = "Перевести"; "common.action.teleport" = "Телепорт"; -"common.activation.required" = "Activation Required"; +"common.activation.required" = "Требуется активация"; "common.add" = "Добавить"; "common.address" = "Адрес"; "common.advanced" = "Продвинутый"; -"common.and.others.placeholder" = "%s & others"; +"common.and.others.placeholder" = "%s и другие"; "common.applied" = "Применено"; "common.apply" = "Применить"; -"common.approve" = "Approve"; -"common.attention" = "Attention"; +"common.approve" = "Утвердить"; +"common.attention" = "Внимание"; "common.available.format" = "Доступно: %@"; -"common.available.networks" = "Available networks"; +"common.available.networks" = "Доступные сети"; "common.balance" = "Баланс"; "common.balance.format" = "Баланс: %@"; "common.bonus" = "Бонус"; @@ -224,8 +229,8 @@ Euro cash"; "common.confirm.title" = "Подтверждение"; "common.confirmation.title" = "Уверены ли вы?"; "common.confirmed" = "Подтверждено"; -"common.connections" = "Connections"; -"common.contacts" = "Contacts"; +"common.connections" = "Соединения"; +"common.contacts" = "Контакты"; "common.continue" = "Продолжить"; "common.copied" = "Скопировано в буфер обмена"; "common.copy" = "Скопировать"; @@ -244,12 +249,12 @@ Euro cash"; "common.error.network" = "Возникла ошибка при обмене данными с удаленным сервером"; "common.error.no.data.retrieved" = "Данные не получены."; "common.error.password.mismatch" = "Неверный пароль"; -"common.events" = "Events"; +"common.events" = "События"; "common.existential.error.message" = "Эта операция приведет к тому, что счет опустится ниже экзистенциального депозита %@, что приведет к его деактивации (счет будет стерт из состояния блокчейна для экономии места)."; -"common.existential.warning.max.amount" = "Set max amount"; +"common.existential.warning.max.amount" = "Установите максимальную сумму"; "common.existential.warning.message" = "Эта операция приведет к тому, что счет опустится ниже экзистенциального депозита %@, что приведет к его деактивации (счет будет стерт из состояния блокчейна для экономии места). Если вы решите продолжить, вы потеряете все средства, которые находятся ниже суммы экзистенциального депозита, установленного сетью. За подробной информацией обращайтесь к официальной документации сети (например, Polkadot Wiki). Fearless Wallet является полностью не опекунским приложением и не контролирует и не знает о любых ваших действиях в самой сети. ПРОДОЛЖАЙТЕ ТОЛЬКО В ТОМ СЛУЧАЕ, ЕСЛИ ВЫ ПОЛНОСТЬЮ СОГЛАСНЫ И ПОНИМАЕТЕ ПОСЛЕДСТВИЯ."; "common.existential.warning.title" = "Операция сделает аккаунт неактивным"; -"common.expiry" = "Expiry"; +"common.expiry" = "Истечение"; "common.export" = "Экспорт аккаунта"; "common.filter.sort.header" = "Сортировать по:"; "common.important" = "Важно"; @@ -264,61 +269,65 @@ Euro cash"; "common.keep.editing.action" = "Вернуться к операции"; "common.learn.more" = "Узнать больше"; "common.max" = "Все"; -"common.message" = "Message"; -"common.methods" = "Methods"; +"common.message" = "Сообщение"; +"common.methods" = "Методы"; "common.module" = "Модуль"; -"common.more" = "More"; -"common.my.networks" = "My networks"; +"common.more" = "Подробнее"; +"common.my.networks" = "Мои сети"; "common.name" = "Имя"; "common.network" = "Сеть"; "common.network.fee" = "Комиссия сети"; -"common.network.management" = "Network management"; +"common.network.hash" = "%@ Hash"; +"common.network.management" = "Управление сетью"; "common.next" = "Далее"; "common.no" = "Нет"; "common.no.screenshot.message" = "Не делайте скриншоты, которые могут быть собраны сторонними вредоносными программами"; "common.no.screenshot.title" = "Не делайте скриншоты"; -"common.not.available.short" = "N/A"; +"common.not.available.short" = "Н/Д"; "common.not.enough.balance.message" = "К сожалению, у вас недостаточно средств для совершения данной операции"; "common.not.enough.fee.message" = "К сожалению, у вас недостаточно средств для оплаты сетевого сбора."; "common.ok" = "OK"; "common.paste" = "Вставить"; "common.payout" = "Выплаты"; "common.preview" = "Предварительный просмотр"; -"common.price" = "Price"; +"common.price" = "Цена"; "common.privacy.policy" = "Политикой конфиденциальности"; "common.proceed" = "Продолжить"; "common.referral.code.title" = "Реферальный код"; -"common.reject" = "Reject"; -"common.rejected" = "Rejected"; -"common.request" = "Request"; +"common.refund" = "Refund"; +"common.reject" = "Отклонить"; +"common.rejected" = "Отклонено"; +"common.request" = "Запрос"; "common.reset" = "Сброс"; -"common.resolve" = "Resolve"; +"common.resolve" = "Исправить"; "common.retry" = "Повторить"; "common.save" = "Сохранить"; "common.search" = "Поиск"; "common.search.results.number" = "Результаты поиска: %li"; "common.search.start.title" = "Здесь появятся результаты поиска"; "common.secret.derivation.path" = "Последовательность для вывода секрета"; +"common.see.all" = "Посмотреть все"; +"common.see.all" = "See all"; "common.select" = "Выбрать"; "common.select" = "Выбрать"; -"common.select.all" = "Select all"; +"common.select.all" = "Выбрать все"; "common.select.asset" = "Выбор актива"; "common.select.network" = "Выбрать Сеть"; -"common.selected.count" = "Selected: %@"; +"common.selected.count" = "Выбрано: %@"; "common.set.password" = "Новый пароль"; "common.share" = "Поделиться"; "common.show" = "Показать"; -"common.sign" = "Sign"; +"common.sign" = "Подписать"; "common.skip" = "Пропустить"; "common.staking" = "Стейкинг"; -"common.start" = "Start"; +"common.start" = "Начать"; "common.terms.and.conditions" = "Условиями использования"; "common.till.date" = "до %s"; "common.time.left" = "Оставшееся время"; "common.time.left.format" = "%@ осталось"; "common.total" = "Всего"; "common.transaction.failed" = "Транзакция не прошла. Пожалуйста, попытайтесь снова"; -"common.transaction.raw.data" = "Transaction raw data"; +"common.transaction.raw.data" = "Исходные данные транзакции"; "common.transaction.submitted" = "Транзакция отправлена"; "common.undefined.error.message" = "Пожалуйста, попробуйте снова с другими входными данными. Если ошибка повторяется, то свяжитесь со службой поддержки."; "common.undefined.error.title" = "Неопределенная ошибка"; @@ -328,14 +337,18 @@ Euro cash"; "common.use" = "Использовать"; "common.wallet" = "Кошелёк"; "common.warning" = "Предупреждение"; -"common.warning.capitalized" = "WARNING:"; +"common.warning.capitalized" = "ПРЕДУПРЕЖДЕНИЕ:"; "common.watch" = "Смотреть"; "common.yes" = "Да"; "confirm.mnemonic.mismatch.error.message" = "Пожалуйста, проверьте порядок слов еще раз."; "confirm.mnemonic.mismatch.error.message.2.0" = "Неверная мнемоническая фраза, пожалуйста, проверьте еще раз порядок слов"; "confirm.mnemonic.mismatch.error.title" = "Неверная мнемоника"; "confirmation.skip.action" = "Пропустить"; -"connect.details" = "Connect details"; +"connect.details" = "Детали соединения"; +"connected.accounts.common" = "Connected Accounts"; +"connected.accounts.ethereum.title" = "EVM chain accounts"; +"connected.accounts.substrate.title" = "Substrate chain accounts"; +"connected.accounts.ton.title" = "TON chain accounts"; "connection.add.already.exists.error" = "Узел уже был добавлен ранее. Пожалуйста, попробуйте другой узел."; "connection.add.invalid.error" = "Не удается установить соединение с узлом. Пожалуйста, попробуйте другой узел."; "connection.add.unsupported.error" = "К сожалению, сеть не поддерживается. Пожалуйста, попробуйте одну из следующих: %@."; @@ -352,18 +365,26 @@ Euro cash"; "contacts.contact.address" = "Адрес контакта"; "contacts.contact.name" = "Имя контакта"; "contacts.create.contact" = "Создать контакт"; -"contacts.empty.message" = "No contacts found"; +"contacts.empty.message" = "Контакты не найдены"; "contacts.recent" = "Недавние"; "contacts.scan" = "Сканировать QR-код"; "contacts.undefined" = "Неизвестный"; "contribution.type.direct.dot" = "Direct DOT"; "contribution.type.lcdot" = "lcDOT"; -"controller.account.issue.action" = "Manage controller account"; -"controller.account.issue.message" = "Please note that the Controller account feature has been deprecated and as a result, you are required to set your Stash account as the Controller"; +"controller.account.issue.action" = "Управление учетной записью контроллера"; +"controller.account.issue.message" = "Обратите внимание, что функция учетной записи контроллера устарела, и в связи с этим вам необходимо установить свою учетную запись Stash в качестве контролера"; "copy.referral.code" = "Копировать реферальный код"; "create.new.account" = "Создать новый аккаунт"; -"create.new.connection" = "Create new connection"; +"create.new.connection" = "Создание нового подключения"; "create.new.pincode" = "Создайте новый PIN код"; +"cross.chain.tx.status.destination.fail.description" = "Transaction failed on the %@. Your funds in the current transaction will be returned to your wallet."; +"cross.chain.tx.status.destination.fail.title" = "Transaction refund"; +"cross.chain.tx.status.done.description" = "Transaction has been successfully completed."; +"cross.chain.tx.status.done.title" = "All done"; +"cross.chain.tx.status.pending.description" = "Transaction is in progress. Please wait while %@ asset cross the bridge from the %@ to the %@ network."; +"cross.chain.tx.status.pending.title" = "Transaction pending"; +"cross.chain.tx.status.source.fail.description" = "Transaction failed on the %@ network. Please, try again."; +"cross.chain.tx.status.source.fail.title" = "Transaction failed"; "crowdloan.active.section.format" = "Активные (%@)"; "crowdloan.app.bonus.format" = "Бонус Fearless Wallet (%@)"; "crowdloan.astar.referral.code.invalid" = "Недействительный реферальный адрес, допускается ввод только адреса сети Polkadot, попробуйте еще раз"; @@ -404,24 +425,36 @@ Euro cash"; "custom.collators.text" = "Вы должны доверять своим коллаторам действовать компетентно и честно; Основывая свое решение исключительно на их текущей прибыльности, вы можете привести к снижению прибыли или даже потере средств."; "custom.collators.title" = "Стейк с известными коллаторами"; "custom.validators.empty.message" = "Валидаторы не найдены.\nПожалуйста, попробуйте изменить фильтры"; +"dapp.category.connected.title" = "Connected"; +"dapp.category.defi.title" = "DeFi"; +"dapp.category.featured.title" = "Featured"; +"dapp.category.nft.title" = "NFT"; +"dapp.category.utilities.title" = "Utilities"; +"dapp.connected.title" = "Connected"; +"dapp.discover.title" = "Discover dApp"; +"dapp.no.connected.dapps.title" = "No connected dApps"; +"dapp.not.found.title" = "No dApps were found"; "default.account.shared.secret" = "Аккаунты с одним ключом"; "delete.custom.node.title" = "Удалить выбранную ноду?"; "ecdsa.selection.subtitle" = "(BTC/ETH совместимый)"; "ecdsa.selection.title" = "ECDSA"; +"ecosystem.options.backup.title" = "Backup chain accounts"; +"ecosystem.options.details.title" = "Chain accounts"; +"ecosystem.options.title" = "Account options"; "ed25519.selection.subtitle" = "ed25519 (альтернативный)"; "ed25519.selection.title" = "Edwards"; -"empty.state.message" = "Nothing found for your request"; +"empty.state.message" = "Ничего не найдено по вашему запросу"; "empty.view.description" = "Не найдено ни одной сети или ассета :("; "empty.view.title" = "Извините!"; "error.invalid.address" = "Неверный адрес для выбранной сети"; "error.message.enter.the.name" = "Введите имя…"; "error.message.enter.the.url.address" = "Введите URL-адрес…"; -"error.scan.qr.disabled.asset" = "The asset you want to transfer is either unsupported or turned off. Go to Asset Management, activate the asset, and then scan the QR code again."; -"error.unsupported.asset" = "You're trying to make a transfer of the asset which isn't currently supported on the App. Please choose another asset or request another QR code."; +"error.scan.qr.disabled.asset" = "Актив, который вы хотите передать, либо не поддерживается, либо отключен. Перейдите в Управление Активами, активируйте актив, а затем снова отсканируйте QR-код."; +"error.unsupported.asset" = "Вы пытаетесь перевести актив, который в настоящее время не поддерживается приложением. Пожалуйста, выберите другой актив или запросите другой QR-код."; "ethereum.crypto.type" = "Тип криптографической пары ключей Ethereum"; "ethereum.secret.derivation.path" = "Путь деривации секрета Ethereum"; "example" = "Пример: %s"; -"existential.deposit.received.error" = "Existential Deposit not received"; +"existential.deposit.received.error" = "Экзистенциальный депозит не получен"; "export.ethereum.title" = "Экспорт Ethereum"; "export.mnemonic.hint" = "Используйте нецифровой способ резервного копирования, например, записав последовательность мнемонических слов и путь их образования (если он установлен) на бумаге."; "export.mnemonic.with.dp.template" = "Сеть: %@\ @@ -439,12 +472,12 @@ Euro cash"; "export.wallet.chains.count" = "+%d ДРУГИХ"; "fee.not.yet.loaded.message" = "Подождите, пока будет рассчитана комиссия"; "fee.not.yet.loaded.title" = "Расчет комиссии в процессе"; -"google.backup.button.title" = "Connect with Google"; +"google.backup.button.title" = "Подключиться через Google"; "google.backup.choice.google" = "Импорт из Google"; "google.backup.choice.json" = "JSON"; -"google.backup.choice.mnemonic" = "Mnemonic phrase"; +"google.backup.choice.mnemonic" = "Мнемоническая фраза"; "google.backup.choice.raw" = "Raw Seed"; -"google.backup.choice.title" = "Select source for import"; +"google.backup.choice.title" = "Выберите источник для импорта"; "help.support.title" = "Fearless поддержка"; "hidden.assets" = "Скрытые активы"; "history.empty.description" = "У вас нет транзакций здесь"; @@ -459,11 +492,11 @@ Euro cash"; "import.empty.derivation.cancel" = "Оставить как есть"; "import.empty.derivation.confirm" = "Пустой"; "import.empty.derivation.message" = "Вы можете задать нулевой путь (//00//00//0/0/0) или оставить путь деривации пустым. Пустой путь не позволит вам экспортировать аккаунт. Пожалуйста, выберите, какой путь вы хотите задать"; -"import.eth.json.invalid.import.type.message" = "Your JSON file isn't valid. You're trying to import Substrate based chain accounts instead of ETH ones. Please use a proper JSON file to import ETH chain accounts."; +"import.eth.json.invalid.import.type.message" = "Ваш файл JSON недействителен. Вы пытаетесь импортировать учетные записи цепочки на основе Substrate вместо ETH. Пожалуйста, используйте правильный файл JSON для импорта учетных записей цепочки ETH."; "import.ethereum.recovery.json" = "JSON для восстановления ETH аккаунтов"; "import.json.invalid.format.message" = "Пожалуйста, удостоверьтесь, что данные соответствуют json формату."; "import.json.invalid.format.title" = "JSON для восстановления недействителен"; -"import.json.invalid.import.type.message" = "Your JSON file isn't valid. You're trying to import ETH based chain accounts instead of Substrate ones. Please use a proper JSON file to import Substrate chain accounts at first."; +"import.json.invalid.import.type.message" = "Ваш файл JSON недействителен. Вы пытаетесь импортировать учетные записи на основе ETH вместо учетных записей Substrate. Пожалуйста, сначала используйте правильный файл JSON для импорта учетных записей цепочки Substrate."; "import.mnemonic" = "Мнемоническая фраза"; "import.mnemonic.invalid.title" = "Ваша мнемоника недействительна"; "import.raw.seed" = "Сид"; @@ -473,7 +506,7 @@ Euro cash"; "import.source.picker.title" = "Тип источника"; "import.substrate.recovery.json" = "JSON для восстановления Substrate аккаунтов"; "import.wallet" = "Импорт кошелька"; -"import.wallets.not.found" = "No import wallets were found :("; +"import.wallets.not.found" = "Импортированных кошельков не обнаружено :("; "index.common" = "Индекс"; "json.export.file.title" = "Экспорт в файл"; "json.export.text.title" = "Экспортировать как текст"; @@ -486,10 +519,11 @@ Euro cash"; "lp.apy.alert.title" = "Стратегический бонус APY"; "lp.apy.title" = "Стратегический бонус APY"; "lp.available.pools.title" = "Доступные пулы"; -"lp.banner.action.details.title" = "Show details"; -"lp.banner.text" = "Invest your funds in Liquidity\npools and receive rewards"; +"lp.banner.action.details.title" = "Показать подробности"; +"lp.banner.text" = "Инвестируйте свои средства в пулы\nликвидности и получайте награды."; "lp.confirm.liquidity.screen.title" = "Подтвердите ликвидность"; "lp.confirm.liquidity.warning.text" = "Оценка результата. Если цена изменится более чем на 0.5%, ваша транзакция будет отменена"; +"lp.liquidity.add.complete.text" = "Ваш вклад в пул ликвидности успешно завершен"; "lp.network.fee.alert.text" = "Комиссия сети используется для обеспечения роста и стабильной работы системы SORA."; "lp.network.fee.alert.title" = "Комиссия сети"; "lp.pool.details.title" = "Детали пула ликвидности"; @@ -497,12 +531,12 @@ Euro cash"; "lp.pool.remove.warning.title" = "ПРИМЕЧАНИЕ"; "lp.remove.button.title" = "Убрать ликвидность"; "lp.remove.liquidity.screen.title" = "Убрать ликвидность"; -"lp.reward.token.text" = "Заработать %@"; +"lp.reward.token.text" = "Заработать %s"; "lp.reward.token.title" = "Выплата вознаграждений в"; "lp.slippage.title" = "Проскальзывание"; "lp.supply.button.title" = "Добавить ликвидность"; "lp.supply.liquidity.screen.title" = "Добавить ликвидность"; -"lp.token.pooled.text" = "Ваши %@ добавлены в пул"; +"lp.token.pooled.text" = "Ваши %s добавлены в пул"; "lp.user.pools.title" = "Пулы пользователя"; "manage.assets.account.missing.text" = "Добавить аккаунт..."; "manage.assets.search.hint" = "Поиск по токену"; @@ -527,54 +561,58 @@ Euro cash"; "network.info.address" = "Адрес ноды"; "network.info.name" = "Имя ноды"; "network.info.title" = "Информация ноды"; -"network.issue.main" = "Connection Error: Unable to connect to the network. Please try again."; +"network.issue.main" = "Ошибка подключения: Не удается подключиться к сети. Пожалуйста, повторите попытку."; "network.issue.network.unavailible" = "Сеть не доступа"; "network.issue.node.unavailable" = "Нода не доступна"; "network.issue.notofication" = "Уведомления"; "network.issue.stub" = "Проблемы с сетью"; "network.issue.unavailable" = "Сеть недоступна, вы можете подождать или задать вопрос сообществу"; -"network.issues.empty.state.title" = "No network issues"; +"network.issues.empty.state.title" = "Нет проблем с сетью"; "network.issues.hide.action.title" = "Не показывать снова"; -"network.issues.resolve.option.title" = "Resolve Option"; -"network.management.popular" = "Popular"; -"network.managment.favourite" = "Favourite"; +"network.issues.resolve.option.title" = "Вариант решения"; +"network.management.popular" = "Популярные"; +"network.managment.favourite" = "Избранное"; "network.status.connected" = "Подключено"; "network.status.connecting" = "Подключение…"; "network.url.address" = "URL-адрес"; -"nft.choose.recipient.title" = "Choose recipient"; -"nft.collection.available.nfts" = "Available NFTs in the %s collection"; -"nft.collection.my.nfts" = "My NFTs"; -"nft.collection.title" = "Collection"; -"nft.creator.title" = "Creator"; -"nft.list.empty.message" = "There aren't any NFTs yet. Buy or mint NFTs to see them here."; -"nft.load.error" = "Failed to load NFTs"; -"nft.owner.title" = "Owned"; -"nft.share.address" = "My public address to receive: %s"; -"nft.spam.warning" = "Beware of a scam/spam NFT collection – verify authenticity before engaging. Stay safe!"; +"nft.choose.recipient.title" = "Выберите получателя"; +"nft.collection.available.nfts" = "Доступные NFT в коллекции %s"; +"nft.collection.my.nfts" = "Мои NFT"; +"nft.collection.title" = "Коллекция"; +"nft.creator.title" = "Создатель"; +"nft.list.empty.message" = "NFT пока нет. Покупайте или чеканите NFT, чтобы увидеть их здесь."; +"nft.load.error" = "Не удалось загрузить NFT"; +"nft.owner.title" = "Принадлежит"; +"nft.share.address" = "Мой публичный адрес для получения: %s"; +"nft.spam.warning" = "Остерегайтесь мошенничества/спама в сфере сбора NFT - проверяйте подлинность, прежде чем вступать в контакт. Будьте осторожны!"; "nft.stub.text" = "NFTs скоро будут здесь"; "nft.stub.title" = "Извините!"; -"nft.tokenid.title" = "Token ID"; -"nfts.collection.count" = "Quantity: %d/%d"; +"nft.tokenid.title" = "Идентификатор токена"; +"nfts.collection.count" = "Количество: %d/%d"; "nfts.filters.airdrop" = "AirDrop"; -"nfts.filters.spam" = "SPAM"; -"nfts.filters.title" = "Hide NFTs"; +"nfts.filters.spam" = "Спам"; +"nfts.filters.title" = "Скрыть NFT"; "nfts.stub" = "NFTs"; -"no.access.to.google" = "No access to Google"; +"no.access.to.google" = "Нет доступа к Google"; "no.account.found" = "Аккаунт не найден"; "no.email.bound.error.message" = "Пожалуйста, убедитесь, что на устройстве установлено почтовое приложение."; "node" = "Нода"; "node.selection.delete.node.title" = "Удалить выбранную ноду?"; +"onboarding.banner.regular.ecosystem.button.title" = "Join EVM or Substrate"; +"onboarding.banner.regular.ecosystem.title" = "Create or import Substrate or EVM accounts"; +"onboarding.banner.ton.ecosystem.button.title" = "Join TON"; +"onboarding.banner.ton.ecosystem.title" = "Connect to the fastest growing ecosystem ever"; "onboarding.create.account" = "Создать аккаунт"; "onboarding.create.wallet" = "Создать кошелёк"; -"onboarding.preinstalled.wallet.button.text" = "Get a pre-installed wallet"; +"onboarding.preinstalled.wallet.button.text" = "Получите предустановленный кошелек"; "onboarding.restore.account" = "Восстановить"; "onboarding.restore.wallet" = "У меня уже есть кошелек"; -"onboarding.start.title" = "The DeFi Wallet For The Future"; +"onboarding.start.title" = "DeFi-кошелек будущего"; "onboarding.terms.and.conditions.1" = "Я подтверждаю, что прочитал и согласен с \ Условиями использования и Политикой конфиденциальности"; "operation.error.message" = "Пожалуйста, попробуйте позже"; "operation.error.title" = "Ошибка операции"; -"optional.networks" = "Optional networks"; +"optional.networks" = "Дополнительные сети"; "options.common" = "Опции"; "parachain.crowdloans" = "Краудлоуны парачейнов"; "parachain.staking.collator" = "Коллатор"; @@ -596,15 +634,16 @@ Euro cash"; "parachain.staking.reward.info.max" = "Максимальный APR"; "parachain.staking.self.bonded" = "Самозарезервированный"; "parachain.staking.stake.less" = "Уменьшить стейк"; -"parachain.staking.story.collator.page.1" = "Collators maintain parachains by collecting parachain transactions from users and producing state transition proofs for Relay Chain validators. In other words, collators aggregate parachain transactions into parachain block candidates and produce state transition proofs for validators based on those blocks."; -"parachain.staking.story.collator.page.2" = "A collator runs a blockchain node 24/7 and is required to have enough stake locked (both owned and provided by delegators) to be elected by the network. Collators should maintain their nodes\' performance and reliability to be rewarded. Being a collator is almost a full-time job.\nEveryone can be a collator and run a blockchain node, but doing so requires a certain level of technical skills and responsibility."; -"parachain.staking.story.collator.title" = "Who’s a collator?"; -"parachain.staking.story.delegator.page.1" = "Delegators are token holders who stake tokens, vouching for specific collator candidates. Any user that holds a minimum amount of tokens as free balance can become a delegator."; -"parachain.staking.story.delegator.page.2" = "Delegators should check their stake states regularly. It is possible that staking balance falls below the minimum required amount to receive rewards or even be a delegator. In the worst-case scenario, your staking slot may be replaced by another delegator with a higher stake and your stake could be pushed out and immediately returned to your balance."; -"parachain.staking.story.delegator.title" = "Who’s a delegator?"; -"parachain.staking.story.rewards.page.1" = "Reward pool - a portion of the annual inflation that is set aside for collators and delegators.\nRewards for collators and their delegators are calculated at the start of every round for their work prior to the reward payout delay.\nThe calculated rewards are then paid out on a block-by-block basis. For every block, one collator will be chosen to receive their entire reward payout from the prior round, along with their delegators, until all of the rewards have been paid for that round."; -"parachain.staking.story.rewards.page.2" = "Delegators get rewards after a reward payout delay. Payout delays are a certain amount of rounds which must pass before staking rewards are distributed automatically to the free balance.\nReward distribution to some delegators may be stopped because of two possible reasons; A collator hasn\'t been chosen by the network for creating blocks, or decided to leave the candidate pool. Another reason is having a stake amount lower than the minimum collator bond."; -"parachain.staking.story.rewards.title" = "Rewards?"; +"parachain.staking.story.collator.page.1" = "Коллаторы поддерживают парачейн, собирая транзакции парачейна от пользователей и создавая доказательства перехода состояния для валидаторов Relay Chain. Другими словами, коллаторы объединяют транзакции парачейна в кандидаты на блок парачейна и создают доказательства перехода состояния для валидаторов на основе этих блоков."; +"parachain.staking.story.collator.page.2" = "Коллатор управляет узлом блокчейна 24/7 и должен иметь достаточно заблокированных ставок (как принадлежащих, так и предоставленных делегаторами), чтобы быть избранным сетью. Коллаторы должны поддерживать производительность и надежность своих узлов, чтобы получить вознаграждение. Быть коллатором — это почти полноценная работа.\ +Каждый может быть коллатором и управлять узлом блокчейна, но для этого требуется определенный уровень технических навыков и ответственности."; +"parachain.staking.story.collator.title" = "Кто такой коллатор?"; +"parachain.staking.story.delegator.page.1" = "Делегаторы — это держатели токенов, которые стейкают токены, ручаясь за определенных кандидатов-коллаторов. Любой пользователь, который держит минимальное количество токенов в качестве свободного баланса, может стать делегатом."; +"parachain.staking.story.delegator.page.2" = "Делегаторы должны регулярно проверять состояние своих ставок. Возможно, что баланс ставок опустится ниже минимально необходимой суммы для получения вознаграждений или даже для делегирования. В худшем случае ваш слот ставок может быть заменен другим делегатором с более высокой ставкой, и ваша ставка может быть вытеснена и немедленно возвращена на ваш баланс."; +"parachain.staking.story.delegator.title" = "Кто такой делегатор?"; +"parachain.staking.story.rewards.page.1" = "Пул вознаграждений — часть годовой инфляции, которая откладывается для коллаторов и делегаторов. Вознаграждения для коллаторов и их делегаторов рассчитываются в начале каждого раунда за их работу до задержки выплаты вознаграждения. Затем рассчитанные вознаграждения выплачиваются поблочно. Для каждого блока будет выбран один коллатор, который получит всю выплату вознаграждения за предыдущий раунд вместе со своими делегаторами, пока все вознаграждения за этот раунд не будут выплачены."; +"parachain.staking.story.rewards.page.2" = "Делегаторы получают вознаграждения после задержки выплаты вознаграждения. Задержки выплат — это определенное количество раундов, которые должны пройти, прежде чем вознаграждения за стейкинг будут автоматически распределены на свободный баланс. Распределение вознаграждений некоторым делегатам может быть остановлено по двум возможным причинам: коллатор не был выбран сетью для создания блоков или решил покинуть пул кандидатов. Другая причина — сумма ставки ниже минимальной гарантии коллатора."; +"parachain.staking.story.rewards.title" = "Награды?"; "parachain.staking.unlock" = "Разблокировать"; "pincode.confirm.pin.code" = "Подтвердите пин-код"; "pincode.confirm.your.pin.code" = "Подтвердите свой PIN-код"; @@ -613,53 +652,53 @@ Euro cash"; "pincode.set.your.pin.code" = "Установите свой PIN-код"; "pincode.setup.top.title" = "Установить пин-код"; "polkadot.js.plus.action.title" = "Polkadot.js Plus"; -"polkaswap.add.more.amount.message" = "Sorry, you don't have enough funds to pay the network fee. We can't charge. The fee neither from your current balance nor from the swap results. Please add more tokens or adjust the transaction amount to proceed"; -"polkaswap.confirmation.price.impact.stub" = "Price impact "; -"polkaswap.confirmation.route.stub" = "Route"; +"polkaswap.add.more.amount.message" = "К сожалению, у вас недостаточно средств для оплаты комиссии. Мы не можем взимать комиссию ни с вашего текущего баланса, ни с результатов свопа. Пожалуйста, добавьте больше токенов или измените сумму транзакции, чтобы продолжить."; +"polkaswap.confirmation.price.impact.stub" = "Влияние на цену"; +"polkaswap.confirmation.route.stub" = "Маршрут"; "polkaswap.confirmation.swap.stub" = "Обменять"; "polkaswap.confirmation.swapped.stub" = "Swapped"; "polkaswap.dex.alert.message" = "К сожалению, такой пары нет. Но вы можете выбрать другую"; -"polkaswap.dex.alert.title" = "Token Pair Isn’t Created"; -"polkaswap.disclaimer.important" = "IMPORTANT: I confirm that I have read all of the documents mentioned and pressing Сontinue I accept them."; -"polkaswap.disclaimer.number.1" = "Your sole responsibility for compliance with all laws that may apply to your particular use of Polkaswap in your legal jurisdiction;"; -"polkaswap.disclaimer.number.2" = "Your understanding that the current version of Polkaswap is an alpha version: it has not been fully tested, and some functions may not perform as designed;"; -"polkaswap.disclaimer.number.3" = "Your understanding and voluntary acceptance of the risks involved in using Polkaswap, including, but not limited to, the risk of losing tokens."; -"polkaswap.disclaimer.paragraph.1" = "Polkaswap is maintained by the SORA community. Before continuing to use Polkaswap, please review the %%Polkaswap FAQ%% and documentation, which includes a detailed explanation on how Polkaswap works, as well as the %%Polkaswap Memorandum and Terms of Services%%, and %%Privacy Policy%%."; -"polkaswap.disclaimer.paragraph.2" = "These documents are crucial to a secure and positive user experience. By using Polkaswap, you acknowledge that you have read and understand these documents."; -"polkaswap.disclaimer.paragraph.3" = "You also acknowledge the following:"; -"polkaswap.disclaimer.paragraph.4" = "Once more, please do not continue without reading the %%Polkaswap FAQ%%, %%Polkaswap Memorandum and Terms of Services%%, and %%Privacy Policy%%!"; -"polkaswap.disclaimer.read.before" = "Please read before continuing to use Polkaswap"; -"polkaswap.disclaimer.settings" = "Polkaswap disclamer"; -"polkaswap.disclaimer.stub" = "DISCLAIMER"; -"polkaswap.disclaimer.stub.read" = "Read"; -"polkaswap.disclaimer.title" = "Disclaimer"; -"polkaswap.liqudity.fee.info" = "A portion of each trade (0.3%) goes to liquidity providers as a protocol incentive."; +"polkaswap.dex.alert.title" = "Пара токенов не создана"; +"polkaswap.disclaimer.important" = "ВАЖНО: Я подтверждаю, что прочитал все указанные документы и, нажимая «Продолжить», я принимаю их."; +"polkaswap.disclaimer.number.1" = "Вашу личную ответственность за соблюдение законов, которые могут применяться к использованию Polkaswap в вашей юрисдикции;"; +"polkaswap.disclaimer.number.2" = "Понимание что текущая версия Polkaswap является альфа версией: она не была полностью протестирована, и некоторые функции могут работать не так, как задумано;"; +"polkaswap.disclaimer.number.3" = "Понимание и добровольное принятие рисков, связанных с использованием Polkaswap, включая, но не ограничиваясь, риском потери токенов."; +"polkaswap.disclaimer.paragraph.1" = "Polkaswap поддерживается сообществом SORA. Прежде чем продолжить использование Polkaswap, пожалуйста, ознакомьтесь с %%Polkaswap FAQ%% и документацией, которая содержит подробное объяснение того, как работает Polkaswap, а также с %%Polkaswap Memorandum и Terms of Services%%, и %%Privacy Policy%%."; +"polkaswap.disclaimer.paragraph.2" = "Эти документы имеют решающее значение для обеспечения безопасности и положительного опыта пользователей. Используя Polkaswap, вы подтверждаете, что прочитали и поняли эти документы."; +"polkaswap.disclaimer.paragraph.3" = "Вы также признаете следующее:"; +"polkaswap.disclaimer.paragraph.4" = "Не продолжайте, пока не ознакомитесь с %%Polkaswap FAQ%%, %%Polkaswap Меморандумом и Условиями и положениями%%, и %%Политикой конфиденциальности%%!"; +"polkaswap.disclaimer.read.before" = "Пожалуйста, прочитайте перед использованием Polkaswap"; +"polkaswap.disclaimer.settings" = "Отказ от ответственности Polkaswap"; +"polkaswap.disclaimer.stub" = "ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ"; +"polkaswap.disclaimer.stub.read" = "Читать"; +"polkaswap.disclaimer.title" = "Отказ от ответственности"; +"polkaswap.liqudity.fee.info" = "Часть каждой сделки (0,3%) является награждением для поставщиков ликвидности."; "polkaswap.liquidity.provider.fee" = "Комиссия поставщика ликвидности"; -"polkaswap.liquidity.provider.fee" = "Liquidity Provider Fee "; -"polkaswap.market.alert.choose.action" = "Choose asset"; -"polkaswap.market.alert.message" = "You haven't completed the swap adjustments. One or both assets haven't been chosen, so the market selection isn't available."; -"polkaswap.market.alert.title" = "Market selection isn't available"; -"polkaswap.market.algorithm.title" = "Market algorithm"; -"polkaswap.market.smart.description" = "SMART liquidity routing ensures the best price for any transaction by combining only the best price options from all available markets. When available, Token Bonding Curve (TBC) will be used for liquidity as long as the asset price is more affordable than from other sources, upon which the XYK pool is utilized."; +"polkaswap.liquidity.provider.fee" = "Комиссия поставщика ликвидности "; +"polkaswap.market.alert.choose.action" = "Выбрать актив"; +"polkaswap.market.alert.message" = "Вы не завершили настройку свапа. Один или оба актива не выбраны, поэтому выбор рынка недоступен."; +"polkaswap.market.alert.title" = "Выбор рынка недоступен"; +"polkaswap.market.algorithm.title" = "Рыночный алгоритм"; +"polkaswap.market.smart.description" = "Маршрутизация ликвидности SMART обеспечивает лучшую цену для любой транзакции, комбинируя только лучшие варианты цены со всех доступных рынков. При наличии TBC будет использоваться для обеспечения ликвидности до тех пор, пока цена актива будет более доступной, чем из других источников, на которых используется пул XYK."; "polkaswap.market.stub" = "Рынок:"; -"polkaswap.market.stub" = "Market"; -"polkaswap.market.tbc.description" = "TBC — buying only from the Token Bonding Curve (Primary Market). There is a possibility that the price can become unfavorable compared to the XYK pool (Secondary Market), but the value received from the vested rewards might turn out to be much more favorable over time."; -"polkaswap.market.xyk.description" = "XYK — buying only from the XYK pool (Secondary Market). Traditional XYK pool swap where anyone can buy or sell assets by shifting the market maker’s position on the x*y=k curve."; -"polkaswap.max.received" = "Maximums sold "; -"polkaswap.maximum.sold.info" = "Your transaction will revert if there is a large, unfavorable price movement before it is confirmed."; +"polkaswap.market.stub" = "Рынок"; +"polkaswap.market.tbc.description" = "TBC(Token Bonding Curve) — покупка только по кривой связывания токенов (первичный рынок). Есть вероятность того, что цена может стать невыгодной по сравнению с пулом XYK (вторичный рынок), но ценность, полученная от закрепленных вознаграждений, со временем может оказаться гораздо более выгодной."; +"polkaswap.market.xyk.description" = "XYK — покупка только из пула XYK (вторичный рынок). Традиционный обмен/свап пула XYK, когда любой может покупать или продавать активы, меняя позицию маркет-мейкера на кривой x*y=k."; +"polkaswap.max.received" = "Максимальная продажа"; +"polkaswap.maximum.sold.info" = "Ваша транзакция будет отменена, если до ее подтверждения произойдет значительное неблагоприятное изменение цены."; "polkaswap.min.received" = "Будет получено минимум"; -"polkaswap.min.received" = "Min received "; -"polkaswap.minimum.received.info" = "Your transaction will revert if there is a large, unfavorable price movement before it is confirmed."; -"polkaswap.network.fee" = "Network fee "; -"polkaswap.network.fee.info" = "Network fee is used to ensure SORA system's growth and stable performance."; -"polkaswap.price.impact.info" = "The difference between the market price and estimated price due to trade size."; -"polkaswap.quotes.not.available" = "Quotes not available"; -"polkaswap.settings.reset" = "Reset to default"; -"polkaswap.settings.slippadge.fail" = " - Your transaction may fail"; -"polkaswap.settings.slippadge.frontrun" = " - Your transaction may be frontrun"; -"polkaswap.settings.slippage.stub" = "Your transactions will revert if the price changes unfavorably by more than this percentage"; -"polkaswap.settings.slippage.title" = "Slippage Tolerance"; -"polkaswap.settings.title" = "Transaction Settings"; +"polkaswap.min.received" = "Мин. получено"; +"polkaswap.minimum.received.info" = "Ваша транзакция будет отменена, если до ее подтверждения произойдет значительное неблагоприятное изменение цены."; +"polkaswap.network.fee" = "Комиссия сети"; +"polkaswap.network.fee.info" = "Сетевая комиссия используется для обеспечения роста и стабильной работы системы SORA."; +"polkaswap.price.impact.info" = "Разница между рыночной ценой и расчетной ценой, обусловленная размером сделки."; +"polkaswap.quotes.not.available" = "Котировки недоступны"; +"polkaswap.settings.reset" = "Сбросить"; +"polkaswap.settings.slippadge.fail" = " - Ваша транзакция может завершиться неудачей"; +"polkaswap.settings.slippadge.frontrun" = " - Ваша транзакция может быть проведена заранее"; +"polkaswap.settings.slippage.stub" = "Ваши транзакции будут отменены, если цена изменится неблагоприятно более чем на этот процент."; +"polkaswap.settings.slippage.title" = "Допустимое проскальзывание"; +"polkaswap.settings.title" = "Настройки транзакции"; "pool.claimable.title" = "Заработано"; "pool.common" = "пул"; "pool.join.no.validators.message" = "Пул еще не выбрал ни одного валидатора. Если вы присоединитесь к нему, вы не получите никаких вознаграждений, пока не будут выбраны валидаторы."; @@ -682,11 +721,11 @@ Euro cash"; "pool.staking.main.min.create.title" = "Минимум чтобы создать пул"; "pool.staking.main.min.join.title" = "Минимум, чтобы присоединиться"; "pool.staking.main.possible.pools.title" = "Возможные пулы"; -"pool.staking.management.claim.button.title" = "Claim"; +"pool.staking.management.claim.button.title" = "Получить"; "pool.staking.management.claim.title" = "Получить награды"; -"pool.staking.management.option.nominees" = "Nominees"; +"pool.staking.management.option.nominees" = "Номинанты"; "pool.staking.management.redeem.title" = "Забрать токены"; -"pool.staking.nominator" = "Nominator"; +"pool.staking.nominator" = "Номинатор"; "pool.staking.pool.id" = "Id пула"; "pool.staking.pool.name" = "Имя пула"; "pool.staking.redeem.amount.title" = "Забрать:\n%@"; @@ -696,7 +735,7 @@ Euro cash"; "pool.staking.stake.more.amount.title" = "Застейкать ещё:\n%@"; "pool.staking.start.about.title" = "Что такое стейкинг и как он работает, смотрите инструкцию"; "pool.staking.start.confirm.amount.title" = "Присоединение к пулу\n%@"; -"pool.staking.title" = "Pool staking"; +"pool.staking.title" = "Пул стейкинга"; "pool.staking.total.stake.amount.title" = "Всего застейкано: \n%@"; "pool.staking.unstake.amount.title" = "Вывод из стейка:\n%@"; "pool.update.roles.title" = "Редактировать пул"; @@ -704,74 +743,75 @@ Euro cash"; "pools.limit.has.reached.error.message" = "Достигнут лимит пулов в этой сети"; "pools.limit.has.reached.error.title" = "Вы не можете создать больше пулов"; "profile.about.title" = "О приложении"; -"profile.account.score.title" = "Nomis multichain score"; +"profile.account.score.title" = "Мультичейн счет Nomis"; "profile.accounts.title" = "Аккаунты"; "profile.language.title" = "Язык"; "profile.logout.description" = "Это действие приведет к удалению всех учетных записей с этого устройства. Прежде чем продолжить, убедитесь, что вы сделали резервную копию своей парольной фразы."; "profile.logout.title" = "Выйти"; "profile.network.title" = "Сеть"; "profile.pincode.change.title" = "Изменить PIN-код"; -"profile.soracard.title" = "SORA Card"; +"profile.soracard.title" = "Карта SORA"; "profile.title" = "Настройки"; "profile.wallets.title" = "Кошельки"; "receive.note.text" = "Примечание: Это Polkadot&Kusama кошелек. Пожалуйста, отправляйте только токены Polkadot&Kusama экосистемы"; "recover.json.hint" = "Вставьте json строку или загрузите файл…"; -"remove.backup.extension.error.message" = "The backup's been created by the Fearless Wallet browser extension. The mobile application can't remove it because of lack of credentials"; +"remove.backup.extension.error.message" = "Резервная копия была создана расширением для браузера Fearless Wallet. Мобильное приложение не может удалить ее из-за отсутствия учетных данных"; "replace.account" = "Заменить аккаунт"; "replace.account.template" = "Заменить %s аккаунт"; -"required.accounts.not.satisfied" = "Cannot proceed: Your wallet does not have the necessary accounts. Please make sure you have the required accounts set up before continuing"; -"required.chains.not.satisfied" = "Unable to connect to wallet: The requested blockchain network is not supported or available"; -"required.events.not.satisfied" = "Missing event notifications: the App does not support the necessary event notifications"; -"required.methods.not.satisfied" = "Certain methods requested by Wallet Connect are not currently supported by the App. Although the connection can be established, certain functionalities of the dApp may not be available."; -"required.networks" = "Required networks"; -"review.optional.permissions" = "Review optional permissions"; -"review.permissions" = "Review permissions"; -"review.required.permissions" = "Review required permissions"; +"required.accounts.not.satisfied" = "Невозможно продолжить: На вашем кошельке нет необходимых учетных записей. Пожалуйста, убедитесь, что у вас настроены необходимые учетные записи, прежде чем продолжить"; +"required.chains.not.satisfied" = "Невозможно подключиться к кошельку: запрошенная сеть блокчейна не поддерживается или недоступна"; +"required.events.not.satisfied" = "Отсутствуют уведомления о событиях: приложение не поддерживает необходимые уведомления о событиях."; +"required.methods.not.satisfied" = "Некоторые методы, запрашиваемые Wallet Connect, в настоящее время не поддерживаются приложением. Хотя соединение может быть установлено, некоторые функции dApp могут быть недоступны."; +"required.networks" = "Необходимые сети"; +"review.optional.permissions" = "Просмотр необязательных разрешений"; +"review.permissions" = "Просмотр разрешений"; +"review.required.permissions" = "Просмотр необходимых разрешений"; "roles.common" = "Роли"; "same.address.transfer.warning.message" = "Вы пытаетесь сделать трансфер на свой адрес. За операцию будет списана комиссия и это не несет никакого смысла."; "scam.additional.stub" = "Дополнительно:"; "scam.description.donation.stub" = "Этот адрес подозрителен. Мы настоятельно рекомендуем вам не отправлять %s на этот аккаунт."; -"scam.description.exchange.stub" = "This address is marked as an exchange, be careful as the deposit and withdrawal addresses may different."; -"scam.description.lowscore.text" = "The address you are about to transfer to has low onchain activity, which may indicate a potential scammer or sybil attacker"; -"scam.description.sanctions.stub" = "This address has been flagged due to an entity related to a country under sanctions. We strongly recommend that you don't send %s to this account."; +"scam.description.exchange.stub" = "Данный адрес идентифицирован как принадлежащий бирже, будьте внимательны, так как адреса ввода и вывода средств могут отличаться."; +"scam.description.lowscore.text" = "Адрес, на который вы собираетесь перевести средства, имеет низкую активность в блокчейне, что может указывать на потенциального мошенника или на атаку Сивиллы."; +"scam.description.sanctions.stub" = "Этот адрес был отмечен как связанный со страной, находящейся под санкциями. Мы настоятельно рекомендуем вам не отправлять %s на этот счет."; "scam.description.scam.stub" = "Этот адрес был помечен в связи с доказательствами мошенничества. Мы настоятельно рекомендуем вам не отправлять %s на этот аккаунт."; -"scam.info.nomis.name" = "Nomis multi-chain score"; -"scam.info.nomis.subtype.text" = "Proceed with caution"; +"scam.info.nomis.name" = "Мультичейн счет Nomis"; +"scam.info.nomis.reason.text" = "Низкая активность сети"; +"scam.info.nomis.subtype.text" = "Действуйте с осторожностью"; "scam.name.stub" = "Имя:"; "scam.reason.stub" = "Причина:"; "scam.warning.alert.subtitle" = "Мы настоятельно рекомендуем не отправлять %s на это аккаунт."; -"scam.warning.alert.title" = "This address has been flagged due to an entity related to a country under sanctions. We strongly recommend that you don't send %@ to this account."; +"scam.warning.alert.title" = "Этот адрес был отмечен как связанный со страной, находящейся под санкциями. Мы настоятельно рекомендуем вам не отправлять %@ на этот счет."; "scan.qr.subtitle" = "Поднесите QR код получателя"; "scan.qr.title" = "QR Код"; "scan.qr.upload.button.title" = "Из галереи"; -"search.by.connection" = "Search by connection"; +"search.by.connection" = "Поиск по подключению"; "search.textfield.placeholder" = " Публичный адрес"; "search.view.title" = "Получатель"; "select.asset.search.empty.subtitle" = "Ассеты не найдены :("; "select.asset.search.placeholder" = "Поиск по токену"; -"select.collators.warning" = "DISCLAIMER: Algorithmic сollator suggestions do not constitute financial consultation or advice. Staking is a high-risk activity, and algorithmic сollator suggestions do not necessarily mitigate this risk. A сollator suggested by the algorithm could still leave the pool of candidates. A сollator suggested by the algorithm could also change their parameters (e.g.,commission rates, etc.) at any time after having been suggested and/or selected. You could lose rewards for these or other reasons. Only stake tokens and use сollator suggestions at your own discretion, after conducting due diligence and carefully considering the risks involved."; +"select.collators.warning" = "ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Предложения алгоритмических коллаторов не являются финансовыми консультациями или советами. Стекинг — это высокорискованная деятельность, и предложения по алгоритмических коллаторов не обязательно снижают этот риск. Коллектор, предложенный алгоритмом, все равно может покинуть пул кандидатов. Коллектор, предложенный алгоритмом, также может изменить свои параметры (например, ставки комиссии и т. д.) в любое время после того, как был предложен и/или выбран. Вы можете потерять вознаграждение по этим или другим причинам. Делайте ставки на токены и используйте предложения по коллатору только по своему усмотрению, проведя должную осмотрительность и тщательно взвесив все сопутствующие риски."; "select.network.search.empty.subtitle" = "Сети не найдены :("; "select.network.search.placeholder" = "Поиск по сети"; "select.save.type" = "Выберите тип сохранения"; "select.suggested.validators.warning" = "DISCLAIMER: Предложения алгоритмических валидаторов не являются финансовыми консультациями или советами. Стейкинг - это деятельность с высоким риском, и предложения алгоритмических валидаторов не обязательно снижают этот риск. Валидатор, предложенный алгоритмом, все равно может быть слэширован. Валидатор, предложенный алгоритмом, также может изменить свои параметры (например, размер комиссии и т.д.) в любое время после того, как он был предложен и/или выбран. Вы можете потерять токены или вознаграждения по этим или другим причинам. Ставьте токены и используйте предложения валидаторов только по своему усмотрению, после проведения должной проверки и тщательного рассмотрения сопутствующих рисков."; "select.validators.disclaimer" = "DISCLAIMER: Предложения алгоритмических валидаторов не являются финансовыми консультациями или советами. Стейкинг - это деятельность с высоким риском, и предложения алгоритмических валидаторов не обязательно снижают этот риск. Валидатор, предложенный алгоритмом, все равно может быть слэширован. Валидатор, предложенный алгоритмом, также может изменить свои параметры (например, размер комиссии и т.д.) в любое время после того, как он был предложен и/или выбран. Вы можете потерять токены или вознаграждения по этим или другим причинам. Ставьте токены и используйте предложения валидаторов только по своему усмотрению, после проведения должной проверки и тщательного рассмотрения сопутствующих рисков."; -"send.all.title" = "Send all tokens and reap the account"; +"send.all.title" = "Выведите все токены и удалите аккаунт"; "send.confirm.amount.title" = "Отправка\n%@"; "send.fund.title" = "Отправить средства"; "settings.add.wallet" = "Добавить кошелёк"; "settings.hide.zero.balances" = "Скрыть нулевые балансы"; "share.referral.code" = "Поделиться реферальным кодом"; -"sign.this.message" = "Sign this message?"; -"sora.bridge.amount.less.fee" = "The amount you're trying to transfer is insufficient to cover the transaction fees on the %s network. Although the transaction won't process, you'll still be charged the fees on the Sora network."; -"sora.bridge.low.amaunt.polkadot.alert" = "Currently, there's a min. amount 1.1 DOT for bridging to ensure the stability and security. We appreciate your understanding."; -"sora.bridge.low.amount.alert" = "Currently, there's a min. amount 0.05 KSM for bridging to ensure the stability and security of the SORA Network. We appreciate your understanding."; -"sora.card.status.failure.text" = "The KYC was terminated or it failed otherwise."; -"sora.card.status.failure.title" = "Verification failed"; -"sora.card.status.pending.title" = "Verification in progress"; -"sora.card.status.rejected.text" = "Your application has failed. To read more about the reason of the failure, please read the following additional description."; -"sora.card.status.rejected.title" = "Verification rejected"; -"sora.card.status.success.text" = "Your KYC verification is successful and we are already preparing to send you the SORA card!"; -"sora.card.status.success.title" = "Verification successful!"; +"sign.this.message" = "Подписать это сообщение?"; +"sora.bridge.amount.less.fee" = "Сумма, которую вы пытаетесь перевести, недостаточна для покрытия комиссии за транзакцию в сети %s. Хотя транзакция не будет выполнена, с вас все равно снимут комиссию в сети Sora."; +"sora.bridge.low.amaunt.polkadot.alert" = "В настоящее время существует минимальная сумма 1.1 DOT для мостов, чтобы обеспечить стабильность и безопасность. Мы ценим ваше понимание."; +"sora.bridge.low.amount.alert" = "В настоящее время существует минимальная сумма 0.05 KSM для моста, чтобы обеспечить стабильность и безопасность сети SORA. Мы ценим ваше понимание."; +"sora.card.status.failure.text" = "Процедура KYC была прекращена или не удалась по какой-либо причине."; +"sora.card.status.failure.title" = "Проверка не удалась"; +"sora.card.status.pending.title" = "Выполняется верификация"; +"sora.card.status.rejected.text" = "Ваша заявка не прошла. Чтобы узнать больше о причине неудачи, прочтите следующее дополнительное описание."; +"sora.card.status.rejected.title" = "Проверка отклонена"; +"sora.card.status.success.text" = "Ваша проверка KYC прошла успешно и мы уже готовимся отправить вам SORA Card!"; +"sora.card.status.success.title" = "Верификация прошла успешно!"; "sr25519.selection.subtitle" = "sr25519 (рекомендованный)"; "sr25519.selection.title" = "Schnorrkel"; "stacking.stash.account" = "Стэш аккаунт"; @@ -811,9 +851,9 @@ Euro cash"; "staking.bonded.inactive" = "Вы не номинируете и не валидируете"; "staking.change.your.validators" = "Смените своих валидаторов."; "staking.collator.info.title" = "Информация о коллаторе"; -"staking.collator.my.oversubscribed.message" = "Oversubscribed. You will not receive rewards from the collator in this era."; +"staking.collator.my.oversubscribed.message" = "Превышен лимит. В этой эре вы не получите награду от этого коллатора."; "staking.collator.other.oversubscribed.message" = "Переполнен. Вознаграждение выплачивается только делегаторам с самыми высокими стейками."; -"staking.collators" = "Collators"; +"staking.collators" = "Коллаторы"; "staking.common.era" = "Эра"; "staking.common.event.id" = "Событие"; "staking.common.rewards.apy" = "Вознаграждение (APY)"; @@ -821,7 +861,7 @@ Euro cash"; "staking.controller.account.title" = "Контроллер аккаунт"; "staking.controller.account.zero.balance" = "Мы обнаружили, что на этом аккаунте нет свободных токенов. Вы уверены, что хотите сменить контроллер?"; "staking.controller.can.hint" = "Контроллер аккаунт может вывести из стейка, забрать, вернуть в стейк, сменить назначение вознаграждений и валидаторов."; -"staking.controller.deprecated.description" = "Please note that in the %s network the Controller account feature has been deprecated, and as a result, you are required to set your Stash account as the Controller."; +"staking.controller.deprecated.description" = "Обратите внимание, что в разделе %s network, функция учетной записи Контроллера была устаревшей, в связи с чем вам необходимо установить свою учетную запись Stash в качестве Контроллера."; "staking.custom.blocked.warning" = "Этот валидатор не принимает номинации в данный момент. Пожалуйста, попробуйте снова в следующую эру."; "staking.custom.clear.button.title" = "Очистить фильтры"; "staking.custom.collators.title" = "Выберите коллатора"; @@ -870,7 +910,7 @@ Euro cash"; "staking.nominator.status.alert.waiting.message" = "Ваш стейкинг начнётся со следующий эры."; "staking.nominator.status.idle" = "Неработающий"; "staking.nominator.status.inactive" = "Неактивен"; -"staking.nominator.status.leaving" = "Leaving"; +"staking.nominator.status.leaving" = "Выходящий"; "staking.nominator.status.waiting" = "Ожидание следующей Эры"; "staking.payout.expired" = "Срок выплаты истёк"; "staking.payout.sent" = "Транзакция на выплату отправлена"; @@ -878,14 +918,14 @@ Euro cash"; "staking.pending.rewards.explanation.message" = "Валидаторы выплачивают вознаграждения каждые 2–5 дней. Однако, вы можете инициировать выплату самостоятельно, особенно, если срок вознаграждения истекает. В этом случае придётся заплатить комиссию."; "staking.pool.create.creating.pool" = "Создать пул\n%@"; "staking.pool.create.depositor" = "Вкладчик"; -"staking.pool.create.management.account" = "Pool management account"; +"staking.pool.create.management.account" = "Учетная запись для управления пулом"; "staking.pool.create.missing.name.description" = "Имя пула пропущено"; "staking.pool.create.missing.name.title" = "Невозможно создать пул"; "staking.pool.create.missing.pool.name" = "Нельзя создать пул"; -"staking.pool.create.nominator" = "Nominator"; +"staking.pool.create.nominator" = "Номинатор"; "staking.pool.create.poolId" = "Id пула"; -"staking.pool.create.root" = "Root"; -"staking.pool.create.stateToggler" = "State toggler"; +"staking.pool.create.root" = "Базовый"; +"staking.pool.create.stateToggler" = "Переключатель состояния"; "staking.pool.create.title" = "Создать пул"; "staking.pool.create.title" = "Создать пул"; "staking.pool.info.title" = "Информация о пуле"; @@ -948,7 +988,7 @@ Euro cash"; "staking.rewards.learn.more" = "Подробнее о вознаграждениях"; "staking.rewards.title" = "Вознаграждения"; "staking.round.title" = "раунд #%@"; -"staking.select.suggested" = "Select suggested"; +"staking.select.suggested" = "Выберите предложенное"; "staking.select.validators.confirm.title" = "Выбор валидаторов"; "staking.select.validators.confirm.title" = "Выбор валидаторов"; "staking.select.validators.custom.button.title" = "Выбрать самому"; @@ -972,9 +1012,9 @@ Euro cash"; "staking.stake" = "Стейкинг"; "staking.stake.less.hint" = "Примечание: вы все еще можете отменить этот запрос на инициацию. По истечении периода задержки выхода (28 раундов в Moonbeam - это 7 дней), вы можете вернуться на панель управления стейкингом и выполнить запрос, после чего вы увидите свободные средства на своем свободном балансе."; "staking.stake.with.selected.title" = "Застейкать с выбранным"; -"staking.start.change.collators.custom.title" = "Stake with your collators"; -"staking.start.change.collators.suggested.subtitle" = "The Fearless algorithm has made a list of suggested collators based on the following criteria:"; -"staking.start.change.collators.suggested.title" = "Stake with collators suggested by the algorithm"; +"staking.start.change.collators.custom.title" = "Стейкинг с вашими коллаторами"; +"staking.start.change.collators.suggested.subtitle" = "Алгоритм Fearless составил список предлагаемых коллаторов, основываясь на следующих критериях:"; +"staking.start.change.collators.suggested.title" = "Стейкинг с коллаторами, предложенными алгоритмом"; "staking.start.title" = "Начать стейкинг"; "staking.stash.can.hint" = "С помощью стэш аккаунта можно застейкать больше и установить контроллер аккаунт"; "staking.stash.missing.message" = "Стэш аккаунт %@ недоступен для обновления настроек стейкинга"; @@ -993,7 +1033,7 @@ Euro cash"; "staking.story.validator.page.1" = "Валидатор обеспечивает работу ноды блокчейна 24/7 и обязан иметь необходимое количество стейка (общий стейк самого валидатора и его номинаторов), чтобы быть избранным сетью. Валидаторы должны поддерживать производительность и надежность своих нод, за что они получают вознаграждения. Валидатор — это полноценная работа, существуют профильные компании, которые специализируются на валидировании в блокчейн сетях."; "staking.story.validator.page.2" = "Любой может стать валидатором и запустить ноду блокчейна, однако это требует определённых технических знаний и ответственности. Сети Polkadot и Kusama запустили программу Thousand Validators Programme (Программа Тысячи Валидаторов), чтобы помочь начинающим. Более того, сеть всегда будет стремиться вознаграждать тех валидаторов, чей суммарный стейк меньше (но достаточен чтобы быть избранным в сети), для поддержки децентрализации."; "staking.story.validator.title" = "Кто такой валидатор?"; -"staking.suggested.collators.title" = "Suggested collators"; +"staking.suggested.collators.title" = "Предлагаемые коллаторы"; "staking.switch.account.to.stash" = "Для установки контроллер аккаунта смените аккаунт на стэш."; "staking.total.rewards_v1.9.0" = "Заработано"; "staking.unbond.payee.reset.message" = "Назначение вознаграждений будет изменено на ваш аккаунт, чтобы избежать остатка в стейке, поскольку стейкинг будет остановлен."; @@ -1037,8 +1077,8 @@ Euro cash"; "staking.your.validator.title" = "Ваш валидатор"; "staking.your.validators.changing.title" = "Ваши валидаторы поменяются в следующую эру"; "staking.your.validators.title" = "Ваши валидаторы"; -"stash.account.issue.action" = "Import stash account"; -"stash.account.issue.message" = "Stash account %s isn't available. Please, import the Stash account by following the necessary steps"; +"stash.account.issue.action" = "Импортируйте стэш аккаунт"; +"stash.account.issue.message" = "Стэш аккаунт %s не доступен. Пожалуйста импортируйте стэш аккаунт при помощи следующих шагов"; "state.common" = "Состояние"; "stories.bottom.close.button" = "Отличные новости!"; "stories.version2.slide1.subtitle" = "Теперь Fearless Wallet поддерживает больше сетей и токенов: Polkadot (DOT), Kusama (KSM), Moonriver (MOVR), Karura (KAR), Shiden (SDN), SORA (XOR), Bifrost (BNC), KILT (KILT) и другие..."; @@ -1068,14 +1108,18 @@ Euro cash"; "tabbar.crowdloan.title" = "Краудлоуны"; "tabbar.crowdloan.title_v1.9.0" = "Краудлоуны"; "tabbar.settings.title" = "Настройки"; -"terms.and.conditions.accept.and.continue" = "Accept & Continue"; -"terms.and.conditions.description" = "We want you to know exactly how SORA Card services work, who and why needs your details. Reviewing these policies will help you continue using the app with peace of mind."; -"terms.and.conditions.general.terms" = "General Terms of Use"; +"terms.and.conditions.accept.and.continue" = "Принять и продолжить"; +"terms.and.conditions.description" = "Мы хотим, чтобы вы точно знали, как работают услуги SORA Card, кому и зачем нужны ваши данные. Ознакомление с этими правилами поможет вам спокойно продолжать пользоваться приложением."; +"terms.and.conditions.general.terms" = "Общие условия использования"; "terms.and.conditions.privacy.policy" = "Политикой конфиденциальности"; -"terms.and.conditions.sora.community.alert.main" = "SORA community does not collect any of your personal data, "; -"terms.and.conditions.sora.community.alert.secondary" = "but to get the SORA Card and IBAN account you need to go through KYC process with a card issuer."; -"terms.and.conditions.title" = "Terms & Conditions"; -"tranaction.history.others.tab.title" = "Others"; +"terms.and.conditions.sora.community.alert.main" = "Сообщество SORA не собирает никакие ваши персональные данные, "; +"terms.and.conditions.sora.community.alert.secondary" = "Но чтобы получить карту SORA и счет IBAN, вам необходимо пройти процедуру KYC у эмитента карты."; +"terms.and.conditions.title" = "Условия и положения"; +"ton.connect.alert.description" = "Service address"; +"ton.connect.alert.subtitle" = "Be sure to check the service address before connecting the wallet"; +"ton.connect.alert.title" = "Review dApp info"; +"ton.tonviewer.action.title" = "View in Tonviewer"; +"tranaction.history.others.tab.title" = "Другие"; "transaction.detail.date" = "Дата"; "transaction.detail.status" = "Статус"; "transaction.details.copy.hash" = "Копировать хеш"; @@ -1083,9 +1127,9 @@ Euro cash"; "transaction.details.from" = "От"; "transaction.details.hash.title" = "Хеш транзакции"; "transaction.details.view.etherscan" = "Посмотреть в Etherscan"; -"transaction.details.view.oklink" = "View in OKX explorer"; +"transaction.details.view.oklink" = "Просмотреть в обозревателе OKX"; "transaction.details.view.polkascan" = "Посмотреть в Polkascan"; -"transaction.details.view.reefscan" = "View in Reefscan"; +"transaction.details.view.reefscan" = "Посмотреть в Reefscan"; "transaction.details.view.subscan" = "Просмотреть в Subscan"; "transaction.list.header" = "Все транзакции"; "transaction.status.completed" = "Успешно"; @@ -1093,26 +1137,26 @@ Euro cash"; "transaction.status.pending" = "В ожидании"; "transaction.successful" = "Транзакция успешна!"; "transfer.title" = "Перевод"; -"try.again" = "Try again"; +"try.again" = "Повторить"; "update.needed.text" = "Требуется обновление"; "username.setup.choose.title" = "Псевдоним кошелька"; "username.setup.hint" = "Данное имя будет отображаться только для вас и храниться только на вашем мобильном устройстве."; "username.setup.hint.2.0" = "Пример: Сбережения, инвестиции, краудлоуны, стейкинг. Данное имя будет отображаться только для вас и храниться только на вашем мобильном устройстве."; "username.setup.title" = "Создать аккаунт"; "username.setup.title.2.0" = "Создать новый кошелек"; -"validator.info.comission.title" = "Comission"; -"validator.info.min.stake.alert.text" = "Minimum stake among active nominators is %s. To get rewards you have to stake more."; -"validator.info.min.stake.among.active.nominators.text" = "Minimum stake among active nominators"; +"validator.info.comission.title" = "Комиссия"; +"validator.info.min.stake.alert.text" = "Минимальная ставка среди активных номинаторов составляет %s . Чтобы получить награды, вам нужно поставить больше."; +"validator.info.min.stake.among.active.nominators.text" = "Минимальная ставка среди активных номинаторов"; "validators.list.empty.message" = "Валидаторы не найдены"; -"verify.phone.number.title" = "Verify your phone number"; -"vesting.claim.disclaimer.text" = "Due to the unique vesting schedules of each parachain, our app is unable to display the quantity of locked tokens eligible for claiming. Please be advised that initiating a claim may be impractical if the prospective amount is marginal and comparable to the transaction fee involved. For comprehensive insights into your locked balances, consult the Subscan blockexplorer. We urge you to assess the information carefully and proceed at your own discretion."; -"vesting.claim.disclaimer.title" = "Important Notice Regarding Token Claims:"; -"vesting.locked.title" = "Vesting Locked"; +"verify.phone.number.title" = "Подтвердите свой номер телефона"; +"vesting.claim.disclaimer.text" = "Из-за уникальных графиков вестинга каждого парачейна, наше приложение не может отображать количество заблокированных токенов, доступных для получения. Обратите внимание, что получение токенов может быть нецелесообразным, если предполагаемая сумма незначительна и сопоставима с комиссией за транзакцию. Для полного обзора ваших заблокированных балансов обратитесь к обозревателю Subscan. Пожалуйста, тщательно изучите информацию и действуйте на своё усмотрение."; +"vesting.claim.disclaimer.title" = "Важное уведомление относительно получения токенов:"; +"vesting.locked.title" = "Заблокировано в вестинге"; "view.in" = "Посмотреть в %s"; "view.wallet" = "Посмотреть кошелек"; "wallet.account.locks.democracy" = "Демократия"; "wallet.account.locks.vesting" = "Вестинг"; -"wallet.all.assets.hidden" = "You have hidden all assets"; +"wallet.all.assets.hidden" = "Все активы скрыты"; "wallet.asset.buy" = "Купить"; "wallet.asset.buy.with" = "Купить %s с"; "wallet.asset.receive" = "Получить"; @@ -1127,11 +1171,11 @@ Euro cash"; "wallet.balance.redeemable" = "Можно забрать"; "wallet.balance.reserved" = "Зарезервировано"; "wallet.balance.unbonding_v1.9.0" = "В процессе вывода"; -"wallet.connect.connection.complete" = "Connection from %@ has been successfully completed"; -"wallet.connect.connection.dissconnected" = "Disconnection from %@ has been successfully completed"; -"wallet.connect.invalid.url.message" = "Our App only supports Wallet Connect SDK v2 and does not support the deprecated SDK v1. Please use the appropriate version for a successful connection."; -"wallet.connect.invalid.url.title" = "Warning: Wallet Connect SDK v1 Not Supported"; -"wallet.connect.sign.warning.message" = "Signing this message can have dangerous side effect. Only sign message from sites you fully trust with your entire account."; +"wallet.connect.connection.complete" = "Подключение от %@ успешно завершено"; +"wallet.connect.connection.dissconnected" = "Отключение от %@ успешно завершено"; +"wallet.connect.invalid.url.message" = "Наше приложение поддерживает только Wallet Connect SDK v2 и не поддерживает устаревший SDK v1. Пожалуйста, используйте соответствующую версию для успешного подключения."; +"wallet.connect.invalid.url.title" = "Предупреждение: Wallet Connect SDK v1 не поддерживается"; +"wallet.connect.sign.warning.message" = "Подписание этого сообщения может иметь опасный побочный эффект. Подписывайте сообщения только с сайтов, которым вы полностью доверяете всю свою учетную запись."; "wallet.contacts.empty.title" = "Здесь появятся ваши аккаунты и контакты, которым вы отправляли переводы"; "wallet.contacts.empty.title_v1.10" = "Здесь появятся ваши\ аккаунты и контакты, которым\ @@ -1149,7 +1193,7 @@ Euro cash"; "wallet.filters.transfers" = "Переводы"; "wallet.history.title_v1.9.0" = "История"; "wallet.manage.assets" = "Управление активами"; -"wallet.managment.select.wallet.title" = "Select your wallet"; +"wallet.managment.select.wallet.title" = "Выберите кошелек"; "wallet.options.delete" = "Удалить кошелек"; "wallet.options.details" = "Детали кошелька"; "wallet.options.export" = "Экспортировать кошелек"; @@ -1174,9 +1218,9 @@ Euro cash"; "wallet.send.balance.total.after.transfer" = "Общий после перевода"; "wallet.send.confirm.title" = "Подтвердить"; "wallet.send.dead.recipient.message" = "Ваш перевод не состоится, так как окончательная сумма на целевом счете будет меньше, чем минимальный баланс. Пожалуйста, попробуйте увеличить сумму."; -"wallet.send.dead.recipient.message.v2" = "Your transfer will fail since the final amount (%1$s) on the destination account will be less than the minimal balance (%2$s). Please increase the amount by %3$s"; +"wallet.send.dead.recipient.message.v2" = "Ваш перевод не будет выполнен, так как окончательная сумма ( %1$s ) на целевом счете будет меньше минимального баланса ( %2$s ). Пожалуйста, увеличьте сумму на %3$s"; "wallet.send.dead.recipient.title" = "Сумма слишком мала"; -"wallet.send.eth.dead.recipient.message" = "Insufficient Ethereum balance in the recipient's account prevents the completion of ERC20 token transfer. Please ensure the receiver has enough Ethereum to proceed with the transfer."; +"wallet.send.eth.dead.recipient.message" = "Недостаточный баланс Ethereum на счету получателя препятствует завершению перевода токенов ERC20. Пожалуйста, убедитесь, что у получателя достаточно Ethereum для продолжения перевода."; "wallet.send.existential.warning" = "Ваш перевод удалит аккаунт, так как общий баланс станет ниже минимального."; "wallet.send.fee.title" = "Комиссия"; "wallet.send.navigation.title" = "Перевести %s"; @@ -1193,18 +1237,18 @@ Euro cash"; "wallet.transaction.history.unsupported.message" = "История транзакций для этой сети еще не поддерживается"; "wallets.managment.add.new.wallet" = "Добавить новый кошелек"; "what.accounts.for.export" = "Какие аккаунты в кошельке вы хотите экспортировать?"; -"xcm.cross.chain.button.title" = "Cross Chain"; -"xcm.cross.chain.invalid.address.message" = "According to the address provided you're trying to make a transfer on the wrong network."; -"xcm.cross.chain.invalid.address.message" = "According to the address provided you're trying to make a transfer on the wrong network."; -"xcm.cross.chain.invalid.address.title" = "Is not network address"; -"xcm.destination.network.fee.title" = "Destination Network Fee"; -"xcm.destination.network.title" = "Destination network"; -"xcm.low.amaunt.assetSymbol.alert" = "Currently, there's a min. amount %@ for bridging to ensure the stability and security. We appreciate your understanding."; -"xcm.mywallets.button.title" = "My wallets"; -"xcm.origin.network.fee.title" = "Origin Network Fee"; -"xcm.origin.network.title" = "Origin network"; +"xcm.cross.chain.button.title" = "Cross-chain"; +"xcm.cross.chain.invalid.address.message" = "Судя по указанному адресу, вы пытаетесь осуществить перевод не в той сети."; +"xcm.cross.chain.invalid.address.message" = "Судя по указанному адресу, вы пытаетесь осуществить перевод не в той сети."; +"xcm.cross.chain.invalid.address.title" = "Не является адресом сети"; +"xcm.destination.network.fee.title" = "Комиссия сети назначения"; +"xcm.destination.network.title" = "Сеть назначения"; +"xcm.low.amaunt.assetSymbol.alert" = "В настоящее время существует мин. сумма %@ для моста, чтобы обеспечить стабильность и безопасность. Мы ценим ваше понимание."; +"xcm.mywallets.button.title" = "Мои счета"; +"xcm.origin.network.fee.title" = "Комиссия исходной сети"; +"xcm.origin.network.title" = "Исходная сеть"; "xcm.title" = "Cross-chain"; "your.validators.change.validators.title" = "Изменить валидаторов"; -"your.validators.stop.nominating.title" = "Stop nominating"; +"your.validators.stop.nominating.title" = "Прекратить номинирование"; "your.validators.validator.total.stake" = "Всего в стейкинге: %@"; "сurrencies.stub.text" = "Токены"; \ No newline at end of file diff --git a/fearless/tr.lproj/Localizable.strings b/fearless/tr.lproj/Localizable.strings index 9b74a74474..82078be787 100644 --- a/fearless/tr.lproj/Localizable.strings +++ b/fearless/tr.lproj/Localizable.strings @@ -64,19 +64,20 @@ "account.needed.message" = "Bu ağ için hesabınız yok, hesap oluşturabilir veya içe aktarabilirsiniz"; "account.needed.title" = "Hesap gerekli"; "account.option" = "Hesap seçeneği"; -"account.stats.avg.transaction.time.title" = "Avg. transaction time"; -"account.stats.description.text" = "Your Multichain Score is based on your onchain journey through 3 ecosystems: Ethereum, Polygon and Binance Smart Chain"; -"account.stats.error.message" = "Unable to retrieve account score information. Please try again later."; -"account.stats.hold.tokens.usd.title" = "Hold tokens USD"; -"account.stats.max.transaction.time.title" = "Max transaction time"; -"account.stats.min.transactions.time.title" = "Min transaction time"; -"account.stats.native.balance.usd.title" = "Native balance USD"; -"account.stats.rejected.transactions.title" = "Rejected transactions"; -"account.stats.title" = "Your score"; -"account.stats.total.transactions.title" = "Total transactions"; -"account.stats.updated.title" = "Updated"; -"account.stats.wallet.age.title" = "Wallet age"; -"account.stats.wallet.option.title" = "Show wallet score"; +"account.stats.avg.transaction.time.title" = "Ortalama işlem süresi"; +"account.stats.description.text" = "Çoklu Zincir Puanınız 3 ekosistemdeki zincir içi yolculuğunuza dayanmaktadır: Ethereum, Polygon ve Binance Smart Chain"; +"account.stats.error.message" = "Hesap puanı bilgisi alınamıyor. Lütfen daha sonra tekrar deneyin."; +"account.stats.hold.tokens.usd.title" = "USD jetonlarını tutun"; +"account.stats.max.transaction.time.title" = "Maksimum işlem süresi"; +"account.stats.min.transactions.time.title" = "Minimum işlem süresi"; +"account.stats.native.balance.usd.title" = "Yerel bakiye USD"; +"account.stats.rejected.transactions.title" = "Reddedilen işlemler"; +"account.stats.title" = "Puanınız"; +"account.stats.total.transactions.title" = "Toplam işlemler"; +"account.stats.unavailable.text" = "EVM uyumlu bir hesabınız yok. Puanı görmek istiyorsanız \"Cüzdanı içe aktar\" seçeneğini kullanarak ekleyin."; +"account.stats.updated.title" = "Güncellendi"; +"account.stats.wallet.age.title" = "Cüzdan yaşı"; +"account.stats.wallet.option.title" = "Cüzdan puanını göster"; "account.template" = "%s hesabı"; "account.unique.secret" = "Eşsiz gizli bilgili hesaplar"; "accounts.add.account" = "Hesap ekle"; @@ -174,11 +175,16 @@ Yolu olmadığını biliyorum"; "backup.wallet.replace.several.alert" = "Şu anda ana anahtar çiftinin değiştirilmesiyle eklenen birkaç zincir hesabınız var ve bu hesapta belirli bir anahtar çifti bulunuyor. Ancak mevcut cüzdan yedekleme (dışa aktarma) akışımızın birden fazla anahtar çiftinin depolanmasını desteklemediğini lütfen unutmayın. Sonuç olarak yalnızca ana anahtar çiftinizi kaydedebilirsiniz. \n \n Değiştirdiğiniz zincir hesabınızın güvenliğini sağlamak için mevcut akışa geçmeden önce öncelikle hesabınızı ayrı olarak yedeklemenizi öneririz. Değiştirdiğiniz zincir hesabınızı başarıyla yedekledikten sonra herhangi bir endişe yaşamadan mevcut akışa geçebilirsiniz."; "backup.wallet.seed" = "Ham Tohumu Göster"; "backup.wallet.title" = "Yedekleme cüzdanı"; -"balance.locks.blocked.row.title" = "Blocked"; +"balance.locks.blocked.row.title" = "Engellendi"; "balance.locks.governance.row.title" = "Yönetim"; "balance.locks.liquidity.pools.row.title" = "Likidite Havuzları"; "balance.locks.nomination.pools.row.title" = "Adaylık havuzları"; "balance.locks.screen.title" = "Kilitli ayrıntılar"; +"banner.addwallet.regular.button.title" = "Сreate or import"; +"banner.addwallet.regular.subtitle" = "Join the ecosystems with more than 90+ chains and fascinating features"; +"banner.addwallet.regular.title" = "EVM/Substrate accounts"; +"banner.addwallet.ton.button.title" = "Join now"; +"banner.addwallet.ton.title" = "Join the fastest growing ecosystem ever"; "banners.view.factory.backup.action.title" = "Şimdi yedekle"; "banners.view.factory.backup.subtitle" = "Fonlarınıza erişiminizi kaybetmekten kendinizi koruyun"; "banners.view.factory.backup.title" = "Cüzdan yedekleme"; @@ -198,11 +204,11 @@ Yolu olmadığını biliyorum"; "common.action.receive" = "Almak"; "common.action.send" = "Gönder"; "common.action.teleport" = "Işınlanma"; -"common.activation.required" = "Activation Required"; +"common.activation.required" = "Etkinleştirme Gerekli"; "common.add" = "Ekle"; "common.address" = "Adres"; "common.advanced" = "Gelişmiş"; -"common.and.others.placeholder" = "%s & others"; +"common.and.others.placeholder" = "%s ve diğerleri"; "common.applied" = "Uygulandı"; "common.apply" = "Uygulamak"; "common.approve" = "Onaylamak"; @@ -229,7 +235,7 @@ Yolu olmadığını biliyorum"; "common.confirmation.title" = "Emin misiniz?"; "common.confirmed" = "Onaylandı"; "common.connections" = "Bağlantılar"; -"common.contacts" = "Contacts"; +"common.contacts" = "Kişiler"; "common.continue" = "Devam etmek"; "common.copied" = "Panoya kopyalandı"; "common.copy" = "Kopyala"; @@ -271,11 +277,12 @@ Yolu olmadığını biliyorum"; "common.message" = "İleti"; "common.methods" = "Yöntemler"; "common.module" = "Modül"; -"common.more" = "More"; +"common.more" = "Daha Fazla"; "common.my.networks" = "Ağlarım"; "common.name" = "İsim"; "common.network" = "Ağ"; "common.network.fee" = "Ağ ücreti"; +"common.network.hash" = "%@ Hash"; "common.network.management" = "Ağ yönetimi"; "common.next" = "Sonraki"; "common.no" = "Hayır"; @@ -292,6 +299,7 @@ Yolu olmadığını biliyorum"; "common.privacy.policy" = "Gizlilik Politikası"; "common.proceed" = "İlerle"; "common.referral.code.title" = "Referans Kodu."; +"common.refund" = "Refund"; "common.reject" = "Reddetmek"; "common.rejected" = "Reddedilmiş"; "common.request" = "Rica etmek"; @@ -303,6 +311,8 @@ Yolu olmadığını biliyorum"; "common.search.results.number" = "Arama sonuçları: %d"; "common.search.start.title" = "Arama sonuçları burada görünecek."; "common.secret.derivation.path" = "Özel anahtar türetme yolu"; +"common.see.all" = "Tümünü gör"; +"common.see.all" = "See all"; "common.select" = "Seçmek"; "common.select" = "Seçme"; "common.select.all" = "Hepsini seç"; @@ -315,7 +325,7 @@ Yolu olmadığını biliyorum"; "common.sign" = "İmza"; "common.skip" = "Atla"; "common.staking" = "Stake etmek"; -"common.start" = "Start"; +"common.start" = "Başlat"; "common.terms.and.conditions" = "Şartlar ve koşullar"; "common.till.date" = "%s tarihine kadar"; "common.time.left" = "Kalan zaman"; @@ -340,6 +350,10 @@ Yolu olmadığını biliyorum"; "confirm.mnemonic.mismatch.error.title" = "Geçersiz anımsatıcı"; "confirmation.skip.action" = "İşlemi atla"; "connect.details" = "Ayrıntıları bağlayın"; +"connected.accounts.common" = "Connected Accounts"; +"connected.accounts.ethereum.title" = "EVM chain accounts"; +"connected.accounts.substrate.title" = "Substrate chain accounts"; +"connected.accounts.ton.title" = "TON chain accounts"; "connection.add.already.exists.error" = "Node önceden zaten eklenmiş. Lütfen başka bir Nod deneyin."; "connection.add.invalid.error" = "Node ile bağlantı kurulamıyor. Lütfen başka bir tane deneyin"; "connection.add.unsupported.error" = "Maalesef bu ağ desteklenmiyor. Lütfen şunlardan birini deneyin: %@"; @@ -356,7 +370,7 @@ Yolu olmadığını biliyorum"; "contacts.contact.address" = "İletişim Adresi"; "contacts.contact.name" = "Kişi adı"; "contacts.create.contact" = "Temas kurmak"; -"contacts.empty.message" = "No contacts found"; +"contacts.empty.message" = "Kişi bulunamadı"; "contacts.recent" = "Son"; "contacts.scan" = "QR kodunu tarayın"; "contacts.undefined" = "Tanımsız"; @@ -368,6 +382,14 @@ Yolu olmadığını biliyorum"; "create.new.account" = "Yeni bir hesap oluştur"; "create.new.connection" = "Yeni bağlantı oluştur"; "create.new.pincode" = "Yeni bir pin kodu oluştur"; +"cross.chain.tx.status.destination.fail.description" = "Transaction failed on the %@. Your funds in the current transaction will be returned to your wallet."; +"cross.chain.tx.status.destination.fail.title" = "Transaction refund"; +"cross.chain.tx.status.done.description" = "Transaction has been successfully completed."; +"cross.chain.tx.status.done.title" = "All done"; +"cross.chain.tx.status.pending.description" = "Transaction is in progress. Please wait while %@ asset cross the bridge from the %@ to the %@ network."; +"cross.chain.tx.status.pending.title" = "Transaction pending"; +"cross.chain.tx.status.source.fail.description" = "Transaction failed on the %@ network. Please, try again."; +"cross.chain.tx.status.source.fail.title" = "Transaction failed"; "crowdloan.active.section.format" = "Etkin ( %@ )"; "crowdloan.app.bonus.format" = "Fearless Cüzdan bonusu ( %@ )"; "crowdloan.astar.referral.code.invalid" = "Geçersiz yönlendirme adresi, yalnızca Polkadot adresleri kabul ediliyor, lütfen tekrar deneyin"; @@ -408,10 +430,22 @@ Yolu olmadığını biliyorum"; "custom.collators.text" = "İşbirliği yaptığınız kişilerin yetkin ve dürüst davranacaklarına güvenmelisiniz; Kararınızı yalnızca mevcut kârlılıklarına göre vermek, kârın azalmasına ve hatta fon kaybına yol açabilir."; "custom.collators.title" = "Bilinen derleyicilerden hisse alın"; "custom.validators.empty.message" = "Doğrulayıcı bulunamadı. \n Lütfen filtreleri değiştirmeyi deneyin"; +"dapp.category.connected.title" = "Connected"; +"dapp.category.defi.title" = "DeFi"; +"dapp.category.featured.title" = "Featured"; +"dapp.category.nft.title" = "NFT"; +"dapp.category.utilities.title" = "Utilities"; +"dapp.connected.title" = "Connected"; +"dapp.discover.title" = "Discover dApp"; +"dapp.no.connected.dapps.title" = "No connected dApps"; +"dapp.not.found.title" = "No dApps were found"; "default.account.shared.secret" = "Mevcut paylaşılmış gizli bilgili hesaplar."; "delete.custom.node.title" = "Özel düğüm silinsin mi?"; "ecdsa.selection.subtitle" = "(BTC / ETH uyumlu)"; "ecdsa.selection.title" = "ECDSA"; +"ecosystem.options.backup.title" = "Backup chain accounts"; +"ecosystem.options.details.title" = "Chain accounts"; +"ecosystem.options.title" = "Account options"; "ed25519.selection.subtitle" = "ed25519 (alternatif)"; "ed25519.selection.title" = "Edwards"; "empty.state.message" = "İsteğinize uygun hiçbir şey bulunamadı"; @@ -420,7 +454,7 @@ Yolu olmadığını biliyorum"; "error.invalid.address" = "Seçilen zincir için geçersiz adres"; "error.message.enter.the.name" = "İsmi girin…"; "error.message.enter.the.url.address" = "URL bağlantısını girin..."; -"error.scan.qr.disabled.asset" = "The asset you want to transfer is either unsupported or turned off. Go to Asset Management, activate the asset, and then scan the QR code again."; +"error.scan.qr.disabled.asset" = "Aktarmak istediğiniz varlık ya desteklenmiyor ya da kapalı. Varlık Yönetimi'ne gidin, varlığı etkinleştirin ve ardından QR kodunu tekrar tarayın."; "error.unsupported.asset" = "Şu anda Uygulamada desteklenmeyen bir varlığın aktarımını yapmaya çalışıyorsunuz. Lütfen başka bir varlık seçin veya başka bir QR kodu isteyin."; "ethereum.crypto.type" = "Ethereum anahtar çifti türü"; "ethereum.secret.derivation.path" = "Ethereum gizli türetme yolu"; @@ -490,10 +524,11 @@ Kaynak: %@"; "lp.apy.alert.title" = "Stratejik Bonus APY"; "lp.apy.title" = "Stratejik Bonus APY"; "lp.available.pools.title" = "Mevcut havuzlar"; -"lp.banner.action.details.title" = "Show details"; -"lp.banner.text" = "Invest your funds in Liquidity\npools and receive rewards"; +"lp.banner.action.details.title" = "Ayrıntıları göster"; +"lp.banner.text" = "Paranızı Likidite\havuzlarına yatırın ve ödüller kazanın"; "lp.confirm.liquidity.screen.title" = "Likiditeyi Doğrula"; "lp.confirm.liquidity.warning.text" = "Çıktı tahminidir. Fiyatın %0,5'ten fazla değişmesi durumunda işleminiz geri alınacaktır."; +"lp.liquidity.add.complete.text" = "Likidite havuzlarına arzınız başarıyla tamamlandı"; "lp.network.fee.alert.text" = "Ağ ücreti, SORA sisteminin büyümesini ve istikrarlı performansını sağlamak için kullanılır."; "lp.network.fee.alert.title" = "Şebeke ücreti"; "lp.pool.details.title" = "Havuz detayları"; @@ -501,12 +536,12 @@ Kaynak: %@"; "lp.pool.remove.warning.title" = "NOT"; "lp.remove.button.title" = "Likiditeyi Kaldır"; "lp.remove.liquidity.screen.title" = "Likiditeyi Kaldır"; -"lp.reward.token.text" = "%@ Kazanın"; +"lp.reward.token.text" = "%s Kazanın"; "lp.reward.token.title" = "Ödül Ödemesi"; "lp.slippage.title" = "Kayma"; "lp.supply.button.title" = "Arz Likiditesinin"; "lp.supply.liquidity.screen.title" = "Arz Likiditesinin"; -"lp.token.pooled.text" = "%@ Havuzunuz"; +"lp.token.pooled.text" = "%s Havuzunuz"; "lp.user.pools.title" = "Kullanıcı havuzları"; "manage.assets.account.missing.text" = "Bir hesap ekle"; "manage.assets.search.hint" = "Tokene veya ağa göre ara"; @@ -528,7 +563,7 @@ Kaynak: %@"; "network.info.address" = "Node adresi"; "network.info.name" = "Node adı"; "network.info.title" = "Node Bilgisi"; -"network.issue.main" = "Connection Error: Unable to connect to the network. Please try again."; +"network.issue.main" = "Bağlantı Hatası: Ağa bağlanılamıyor. Lütfen tekrar deneyin."; "network.issue.network.unavailible" = "Ağ kullanılamıyor"; "network.issue.node.unavailable" = "Düğüm kullanılamıyor"; "network.issue.notofication" = "Bildiri"; @@ -549,10 +584,10 @@ Kaynak: %@"; "nft.creator.title" = "Yaratıcı"; "nft.list.empty.message" = "Henüz NFT yok\ burada görmek için NFT'leri satın alın veya bastırın"; -"nft.load.error" = "Failed to load NFTs"; +"nft.load.error" = "NFT'ler yüklenemedi"; "nft.owner.title" = "Sahip olunan."; "nft.share.address" = "Alacağım genel adresim:%s"; -"nft.spam.warning" = "Beware of a scam/spam NFT collection – verify authenticity before engaging. Stay safe!"; +"nft.spam.warning" = "Dolandırıcılık/spam NFT koleksiyonuna karşı dikkatli olun; etkileşime geçmeden önce orijinalliğini doğrulayın. Güvende kalın!"; "nft.stub.text" = "NFT'ler yakında geliyor"; "nft.stub.title" = "Sumimasen!"; "nft.tokenid.title" = "Jeton kimliği"; @@ -566,6 +601,10 @@ burada görmek için NFT'leri satın alın veya bastırın"; "no.email.bound.error.message" = "Lütfen e-posta uygulamasının cihazınıza kurulu olduğundan emin olun"; "node" = "Düğüm"; "node.selection.delete.node.title" = "Özel düğüm silinsin mi?"; +"onboarding.banner.regular.ecosystem.button.title" = "Join EVM or Substrate"; +"onboarding.banner.regular.ecosystem.title" = "Create or import Substrate or EVM accounts"; +"onboarding.banner.ton.ecosystem.button.title" = "Join TON"; +"onboarding.banner.ton.ecosystem.title" = "Connect to the fastest growing ecosystem ever"; "onboarding.create.account" = "Hesap oluştur"; "onboarding.create.wallet" = "Cüzdan oluştur"; "onboarding.preinstalled.wallet.button.text" = "Önceden yüklenmiş bir cüzdan edinin."; @@ -705,7 +744,7 @@ burada görmek için NFT'leri satın alın veya bastırın"; "pools.limit.has.reached.error.message" = "Bu ağdaki havuz sınırına ulaşıldı"; "pools.limit.has.reached.error.title" = "Daha fazla havuz oluşturamazsınız"; "profile.about.title" = "Hakkında"; -"profile.account.score.title" = "Nomis multichain score"; +"profile.account.score.title" = "Nomis çoklu zincir skoru"; "profile.accounts.title" = "Hesaplar"; "profile.language.title" = "Dil"; "profile.logout.description" = "Bu işlem ,cihazdaki tüm hesapların silinmesine neden olacak. Devam etmeden önce anahtar kelimelerinizi yedeklediğinizden emin olun."; @@ -733,11 +772,12 @@ burada görmek için NFT'leri satın alın veya bastırın"; "scam.additional.stub" = "Ek olarak:"; "scam.description.donation.stub" = "Bu adres şüpheli olarak işaretlendi. göndermemenizi şiddetle tavsiye ederiz.%sbu hesaba."; "scam.description.exchange.stub" = "Bu adres bir borsa olarak işaretlenmiştir, para yatırma ve çekme adresleri farklı olabileceğinden dikkatli olun."; -"scam.description.lowscore.text" = "The address you are about to transfer to has low onchain activity, which may indicate a potential scammer or sybil attacker"; +"scam.description.lowscore.text" = "Aktarmak üzere olduğunuz adresin zincir içi etkinliği düşük, bu da potansiyel bir dolandırıcı veya sybil saldırganının işareti olabilir"; "scam.description.sanctions.stub" = "Bu adres, yaptırım altındaki bir ülkeyle bağlantılı bir kuruluş nedeniyle işaretlendi. göndermemenizi şiddetle tavsiye ederiz.%sbu hesaba."; "scam.description.scam.stub" = "Bu adres dolandırıcılık kanıtı nedeniyle işaretlendi. göndermemenizi şiddetle tavsiye ederiz.%sbu hesaba."; -"scam.info.nomis.name" = "Nomis multi-chain score"; -"scam.info.nomis.subtype.text" = "Proceed with caution"; +"scam.info.nomis.name" = "Nomis çoklu zincir skoru"; +"scam.info.nomis.reason.text" = "Düşük ağ etkinliği"; +"scam.info.nomis.subtype.text" = "Dikkatli ilerleyin"; "scam.name.stub" = "İsim:"; "scam.reason.stub" = "Sebep:"; "scam.warning.alert.subtitle" = "göndermemenizi şiddetle tavsiye ederiz.%sbu hesaba."; @@ -756,7 +796,7 @@ burada görmek için NFT'leri satın alın veya bastırın"; "select.save.type" = "Kayıt türü seçin"; "select.suggested.validators.warning" = "Algoritmik doğrulayıcı önerileri finansal danışmanlık veya tavsiye teşkil etmez. Staking yüksek riskli bir faaliyettir ve algoritmik doğrulayıcı önerileri bu riski mutlaka azaltmaz. Algoritmanın önerdiği bir doğrulayıcı yine de aday havuzundan çıkabilir. Algoritma tarafından önerilen bir doğrulayıcı, önerildikten ve/veya seçildikten sonra herhangi bir zamanda parametrelerini (örn. komisyon oranları vb.) değiştirebilir. Bu veya başka nedenlerden dolayı ödüllerinizi kaybedebilirsiniz. Durum tespiti yaptıktan ve ilgili riskleri dikkatlice değerlendirdikten sonra, yalnızca kendi takdirinize bağlı olarak tokenları stake edin ve doğrulayıcı önerilerini kullanın."; "select.validators.disclaimer" = "SORUMLULUK REDDİ: Algoritmanın validatör tavsiyeleri finansal danışmanlık veya tavsiye teşkil etmez. Stake yapmak yüksek riskli bir faaliyettir ve algoritmanın validatör tavsiyeleri bu riski azaltmaz. Algoritma tarafından önerilen bir validatör yine de durabilir. Algoritma tarafından önerilen bir validatör, önerildikten ve/veya seçildikten sonra herhangi bir zamanda parametrelerini (örneğin komisyon oranlarını vb.) değiştirebilir. Bu veya başka nedenlerle tokenlerinizi veya ödüllerinizi kaybedebilirsiniz. Durum tespiti yapıldıktan sonra ve ilgili riskleri dikkatlice değerlendirdikten sonra, yalnızca kendi takdirinize bağlı olarak tokenlerinizi stake edin ve validatör tavsiyelerini kullanın."; -"send.all.title" = "Send all tokens and reap the account"; +"send.all.title" = "Tüm tokenleri gönderin ve hesabı alın"; "send.confirm.amount.title" = "gönderiliyor\n%@"; "send.fund.title" = "Fon gönder"; "settings.add.wallet" = "Cüzdan ekle"; @@ -890,7 +930,7 @@ hiç ödül alınmadı"; "staking.pool.info.title" = "Havuz Bilgisi"; "staking.pool.management.select.validators.subtitle" = "Devam etmek için \n doğrulayıcıları seçmelisiniz"; "staking.pool.management.select.validators.subtitle" = "Devam etmek için \n doğrulayıcıları seçmelisiniz"; -"staking.pool.management.select.validators.title" = "Select pool validators"; +"staking.pool.management.select.validators.title" = "Havuz doğrulayıcılarını seçin"; "staking.pool.management.select.validators.title" = "Havuz doğrulayıcılarını seçin"; "staking.pool.rewards.delay.text" = "İstediğiniz zaman bahis yapın. Sonrasında faiz kazanmaya başlayacaksınız%s"; "staking.pool.select.validators.manual" = "Manuel olarak seç"; @@ -1073,6 +1113,10 @@ Anahtarınızın yedeğini almayı ve onu güvenli ve gizli bir yerde (ö.o., bi "terms.and.conditions.sora.community.alert.main" = "SORA topluluğu hiçbir kişisel verinizi toplamaz,"; "terms.and.conditions.sora.community.alert.secondary" = "ancak SORA Kartını ve IBAN hesabını almak için kartı veren kuruluşla KYC sürecinden geçmeniz gerekir."; "terms.and.conditions.title" = "Şartlar ve koşullar"; +"ton.connect.alert.description" = "Service address"; +"ton.connect.alert.subtitle" = "Be sure to check the service address before connecting the wallet"; +"ton.connect.alert.title" = "Review dApp info"; +"ton.tonviewer.action.title" = "View in Tonviewer"; "tranaction.history.others.tab.title" = "Diğerleri"; "transaction.detail.date" = "Tarih"; "transaction.detail.status" = "Durum"; @@ -1081,7 +1125,7 @@ Anahtarınızın yedeğini almayı ve onu güvenli ve gizli bir yerde (ö.o., bi "transaction.details.from" = "Gönderen"; "transaction.details.hash.title" = "Harici Hash"; "transaction.details.view.etherscan" = "Etherscan'da görüntüle"; -"transaction.details.view.oklink" = "View in OKX explorer"; +"transaction.details.view.oklink" = "OKX Explorer'da görüntüle"; "transaction.details.view.polkascan" = "Polkascan'de görüntüle"; "transaction.details.view.reefscan" = "Reefscan'da görüntüle"; "transaction.details.view.subscan" = "Subscan'da Görüntüle"; @@ -1099,10 +1143,10 @@ Anahtarınızın yedeğini almayı ve onu güvenli ve gizli bir yerde (ö.o., bi "username.setup.title" = "Hesap oluştur"; "username.setup.title.2.0" = "Yeni bir cüzdan oluştur"; "validator.info.comission.title" = "Komisyon"; -"validator.info.min.stake.alert.text" = "Minimum stake among active nominators is %s. To get rewards you have to stake more."; -"validator.info.min.stake.among.active.nominators.text" = "Minimum stake among active nominators"; +"validator.info.min.stake.alert.text" = "Aktif aday göstericiler arasında minimum bahis %s. Ödül almak için daha fazla bahis yapmanız gerekir."; +"validator.info.min.stake.among.active.nominators.text" = "Aktif aday gösterenler arasında minimum hisse"; "validators.list.empty.message" = "Doğrulayıcı bulunamadı"; -"verify.phone.number.title" = "Verify your phone number"; +"verify.phone.number.title" = "Telefon numaranızı doğrulayın"; "vesting.claim.disclaimer.text" = "Her parachain'in benzersiz hak kazanma programları nedeniyle, uygulamamız talep edilmeye uygun kilitli tokenlerin miktarını görüntüleyemiyor. Olası tutarın marjinal olması ve söz konusu işlem ücretiyle karşılaştırılabilir olması durumunda, hak talebinde bulunmanın pratik olmayabileceğini lütfen unutmayın. Kilitli bakiyelerinize ilişkin kapsamlı bilgiler için Subscan blok araştırmacısına başvurun. Bilgileri dikkatlice değerlendirmenizi ve kendi takdirinize göre ilerlemenizi öneririz."; "vesting.claim.disclaimer.title" = "Token Taleplerine İlişkin Önemli Uyarı:"; "vesting.locked.title" = "Vesting Kilitli"; @@ -1170,7 +1214,7 @@ ait olduğundan emin olun."; "wallet.send.balance.total.after.transfer" = "Transfer sonrası toplamı"; "wallet.send.confirm.title" = "Transferi onaylayın"; "wallet.send.dead.recipient.message" = "Hedef hesaptaki son tutar, yaratılış bakiyesinden daha az olacağından dolayı transferiniz başarısız olacak. Lütfen miktarı arttırın."; -"wallet.send.dead.recipient.message.v2" = "Your transfer will fail since the final amount (%1$s) on the destination account will be less than the minimal balance (%2$s). Please increase the amount by %3$s"; +"wallet.send.dead.recipient.message.v2" = "Hedef hesaptaki son tutar (%1$s) minimum bakiyeden (%2$s) az olacağından transferiniz başarısız olacak. Lütfen tutarı %3$s artırın"; "wallet.send.dead.recipient.title" = "Miktar çok düşük"; "wallet.send.eth.dead.recipient.message" = "Alıcının hesabındaki yetersiz Ethereum bakiyesi, ERC20 token transferinin tamamlanmasını engeller. Lütfen alıcının aktarıma devam etmek için yeterli Ethereum'a sahip olduğundan emin olun."; "wallet.send.existential.warning" = "Transferiniz, toplam bakiyeyi yaratılış bakiyesinden daha düşük yapacağı için hesabı blockstore'dan kaldıracaktır"; @@ -1197,7 +1241,7 @@ ait olduğundan emin olun."; "xcm.cross.chain.invalid.address.title" = "Ağ adresi değil"; "xcm.destination.network.fee.title" = "Hedef Ağ ücreti"; "xcm.destination.network.title" = "Hedef ağ"; -"xcm.low.amaunt.assetSymbol.alert" = "Currently, there's a min. amount %@ for bridging to ensure the stability and security. We appreciate your understanding."; +"xcm.low.amaunt.assetSymbol.alert" = "Şu anda, istikrar ve güvenliği sağlamak için köprüleme için minimum bir miktar %@ bulunmaktadır. Anlayışınız için teşekkür ederiz."; "xcm.mywallets.button.title" = "Cüzdanlarım"; "xcm.origin.network.fee.title" = "Menşe ağ ücreti"; "xcm.origin.network.title" = "Köken ağı"; diff --git a/fearless/vi.lproj/Localizable.strings b/fearless/vi.lproj/Localizable.strings index 6477046c60..dd1d8d3007 100644 --- a/fearless/vi.lproj/Localizable.strings +++ b/fearless/vi.lproj/Localizable.strings @@ -1,7 +1,7 @@ "NSCameraUsageDescription" = "Máy ảnh được sử dụng để chụp mã QR"; "NSFaceIDUsageDescription" = "Fearless sử dụng Face ID để hạn chế người dùng trái phép truy cập vào ứng dụng. Face ID được sử dụng để xác thực truy cập ứng dụng"; "NSPhotoLibraryAddUsageDescription" = "Lưu yêu cầu chuyển dưới dạng mã QR"; -"NSPhotoLibraryUsageDescription" = "Tải ảnh từ thư viện"; +"NSPhotoLibraryUsageDescription" = "Cần quyền truy cập vào thư viện để chọn hình ảnh mã QR hiện có"; "about.announcement" = "Nhận thông báo"; "about.ask.for.support" = "Yêu cầu hỗ trợ"; "about.contact.email" = "Email liên hệ"; @@ -64,19 +64,20 @@ "account.needed.message" = "Bạn không có tài khoản cho mạng (network) này, bạn có thể tạo hoặc nhập tài khoản."; "account.needed.title" = "Tài khoản cần thiết"; "account.option" = "Tùy chọn tài khoản"; -"account.stats.avg.transaction.time.title" = "Avg. transaction time"; -"account.stats.description.text" = "Your Multichain Score is based on your onchain journey through 3 ecosystems: Ethereum, Polygon and Binance Smart Chain"; -"account.stats.error.message" = "Unable to retrieve account score information. Please try again later."; -"account.stats.hold.tokens.usd.title" = "Hold tokens USD"; -"account.stats.max.transaction.time.title" = "Max transaction time"; -"account.stats.min.transactions.time.title" = "Min transaction time"; -"account.stats.native.balance.usd.title" = "Native balance USD"; -"account.stats.rejected.transactions.title" = "Rejected transactions"; -"account.stats.title" = "Your score"; -"account.stats.total.transactions.title" = "Total transactions"; -"account.stats.updated.title" = "Updated"; -"account.stats.wallet.age.title" = "Wallet age"; -"account.stats.wallet.option.title" = "Show wallet score"; +"account.stats.avg.transaction.time.title" = "Trung bình thời gian giao dịch"; +"account.stats.description.text" = "Điểm Multichain của bạn dựa trên hành trình onchain của bạn thông qua 3 hệ sinh thái: Ethereum, Polygon và Binance Smart Chain"; +"account.stats.error.message" = "Không thể truy xuất thông tin điểm tài khoản. Vui lòng thử lại sau."; +"account.stats.hold.tokens.usd.title" = "Token USD nắm giữ"; +"account.stats.max.transaction.time.title" = "Thời gian giao dịch tối đa"; +"account.stats.min.transactions.time.title" = "Thời gian giao dịch tối thiểu"; +"account.stats.native.balance.usd.title" = "Số dư gốc USD"; +"account.stats.rejected.transactions.title" = "Giao dịch bị từ chối"; +"account.stats.title" = "Số điểm của bạn"; +"account.stats.total.transactions.title" = "Tổng số giao dịch"; +"account.stats.unavailable.text" = "Bạn không có tài khoản tương thích EVM. Nếu bạn muốn xem điểm - hãy thêm điểm thông qua tùy chọn \"Nhập ví\"."; +"account.stats.updated.title" = "Đã cập nhật"; +"account.stats.wallet.age.title" = "Tuổi ví"; +"account.stats.wallet.option.title" = "Hiển thị điểm ví"; "account.template" = "tài khoản %s"; "account.unique.secret" = "Tài khoản có khóa bí mật duy nhất"; "accounts.add.account" = "Thêm tài khoản"; @@ -138,7 +139,7 @@ "backup.mnemonic.description" = "Hãy nhớ ghi lại các từ của bạn theo thứ tự như chúng xuất hiện bên dưới. Sử dụng một cách phi kỹ thuật số để sao lưu."; "backup.mnemonic.title" = "Viết ra cụm từ ghi nhớ của bạn"; "backup.not.backed.up.confirm" = "Tôi sẽ mạo hiểm"; -"backup.not.backed.up.message" = "Nếu thiết bị của bạn bị mất hoặc bị đánh cắp, bạn sẽ mất ví và tất cả số tiền của mình mãi mãi"; +"backup.not.backed.up.message" = "Nếu thiết bị của bạn bị mất hoặc bị đánh cắp, bạn sẽ mất ví và toàn bộ tiền của mình mãi mãi"; "backup.not.backed.up.title" = "Chưa sao lưu!"; "backup.password.description" = "Nhập mật khẩu dự phòng cho ví đã chọn để nhập"; "backup.password.password.field.title" = "Nhập mật khẩu"; @@ -174,6 +175,11 @@ "balance.locks.liquidity.pools.row.title" = "Pool thanh khoản"; "balance.locks.nomination.pools.row.title" = "Nhóm Nomination"; "balance.locks.screen.title" = "Chi tiết đã khóa"; +"banner.addwallet.regular.button.title" = "Сreate or import"; +"banner.addwallet.regular.subtitle" = "Join the ecosystems with more than 90+ chains and fascinating features"; +"banner.addwallet.regular.title" = "EVM/Substrate accounts"; +"banner.addwallet.ton.button.title" = "Join now"; +"banner.addwallet.ton.title" = "Join the fastest growing ecosystem ever"; "banners.view.factory.backup.action.title" = "Sao lưu ngay"; "banners.view.factory.backup.subtitle" = "Nếu bạn làm mất thiết bị của mình, bạn\ sẽ mất tiền của bạn mãi mãi"; @@ -273,6 +279,7 @@ tiền Euro"; "common.name" = "Tên"; "common.network" = "Mạng"; "common.network.fee" = "Phí mạng"; +"common.network.hash" = "%@ Hash"; "common.network.management" = "Quản lý mạng"; "common.next" = "Kế tiếp"; "common.no" = "Không"; @@ -289,6 +296,7 @@ tiền Euro"; "common.privacy.policy" = "Chính sách bảo mật"; "common.proceed" = "Tiến hành"; "common.referral.code.title" = "Mã giới thiệu"; +"common.refund" = "Refund"; "common.reject" = "Từ chối"; "common.rejected" = "Bị từ chối"; "common.request" = "Yêu cầu"; @@ -300,6 +308,8 @@ tiền Euro"; "common.search.results.number" = "Kết quả tìm kiếm: %d"; "common.search.start.title" = "Kết quả tìm kiếm sẽ xuất hiện tại đây"; "common.secret.derivation.path" = "Đường dẫn khôi phục ví bí mật (derivation path)"; +"common.see.all" = "Xem tất cả"; +"common.see.all" = "See all"; "common.select" = "Chọn"; "common.select" = "Chọn"; "common.select.all" = "Chọn tất cả"; @@ -337,6 +347,10 @@ tiền Euro"; "confirm.mnemonic.mismatch.error.title" = "Cụm từ ghi nhớ (Mnemonic) không hợp lệ"; "confirmation.skip.action" = "Bỏ qua quá trình"; "connect.details" = "Chi tiết kết nối"; +"connected.accounts.common" = "Connected Accounts"; +"connected.accounts.ethereum.title" = "EVM chain accounts"; +"connected.accounts.substrate.title" = "Substrate chain accounts"; +"connected.accounts.ton.title" = "TON chain accounts"; "connection.add.already.exists.error" = "Node này đã được thêm rồi. Vui lòng thử một node khác."; "connection.add.invalid.error" = "Không thể thiết lập kết nối với node. Vui lòng thử một cái khác."; "connection.add.unsupported.error" = "Rất tiếc, mạng (network) không được hỗ trợ. Vui lòng thử một trong các cách sau: %@."; @@ -365,6 +379,14 @@ tiền Euro"; "create.new.account" = "Tạo tài khoản mới"; "create.new.connection" = "Tạo kết nối mới"; "create.new.pincode" = "Tạo mã pin mới"; +"cross.chain.tx.status.destination.fail.description" = "Transaction failed on the %@. Your funds in the current transaction will be returned to your wallet."; +"cross.chain.tx.status.destination.fail.title" = "Transaction refund"; +"cross.chain.tx.status.done.description" = "Transaction has been successfully completed."; +"cross.chain.tx.status.done.title" = "All done"; +"cross.chain.tx.status.pending.description" = "Transaction is in progress. Please wait while %@ asset cross the bridge from the %@ to the %@ network."; +"cross.chain.tx.status.pending.title" = "Transaction pending"; +"cross.chain.tx.status.source.fail.description" = "Transaction failed on the %@ network. Please, try again."; +"cross.chain.tx.status.source.fail.title" = "Transaction failed"; "crowdloan.active.section.format" = "Hoạt động (%@)"; "crowdloan.app.bonus.format" = "Phần thưởng Fearless Wallet (%@)"; "crowdloan.astar.referral.code.invalid" = "Địa chỉ giới thiệu không hợp lệ, chỉ chấp nhận địa chỉ Polkadot, vui lòng thử lại"; @@ -405,10 +427,22 @@ tiền Euro"; "custom.collators.text" = "Bạn nên tin tưởng những collator của bạn sẽ hành động một cách thành thạo và trung thực; Việc dựa trên quyết định của bạn hoàn toàn dựa trên lợi nhuận hiện tại của họ có thể dẫn đến giảm lợi nhuận hoặc thậm chí mất tiền."; "custom.collators.title" = "Cổ phần với những collators đã biết"; "custom.validators.empty.message" = "Không tìm thấy validator nào.\nVui lòng thử thay đổi bộ lọc"; +"dapp.category.connected.title" = "Connected"; +"dapp.category.defi.title" = "DeFi"; +"dapp.category.featured.title" = "Featured"; +"dapp.category.nft.title" = "NFT"; +"dapp.category.utilities.title" = "Utilities"; +"dapp.connected.title" = "Connected"; +"dapp.discover.title" = "Discover dApp"; +"dapp.no.connected.dapps.title" = "No connected dApps"; +"dapp.not.found.title" = "No dApps were found"; "default.account.shared.secret" = "Tài khoản với khóa bí mật chia sẻ"; "delete.custom.node.title" = "Xóa node tùy chỉnh?"; "ecdsa.selection.subtitle" = "(Tương thích BTC/ETH)"; "ecdsa.selection.title" = "ECDSA"; +"ecosystem.options.backup.title" = "Backup chain accounts"; +"ecosystem.options.details.title" = "Chain accounts"; +"ecosystem.options.title" = "Account options"; "ed25519.selection.subtitle" = "ed25519 (thay thế)"; "ed25519.selection.title" = "Edwards"; "empty.state.message" = "Không tìm thấy gì cho yêu cầu của bạn"; @@ -491,6 +525,7 @@ Seed: %@"; "lp.banner.text" = "Đầu tư tiền của bạn vào Pool\nthanh khoản và nhận phần thưởng"; "lp.confirm.liquidity.screen.title" = "Xác nhận thanh khoản"; "lp.confirm.liquidity.warning.text" = "Kết quả được ước tính. Nếu giá thay đổi hơn 0,5% thì giao dịch của bạn sẽ hoàn trả."; +"lp.liquidity.add.complete.text" = "Bạn đã cung cấp thanh khoản thành công"; "lp.network.fee.alert.text" = "Phí mạng được sử dụng để đảm bảo sự tăng trưởng và hiệu suất ổn định của hệ thống SORA."; "lp.network.fee.alert.title" = "Phí mạng"; "lp.pool.details.title" = "Chi tiết Pool"; @@ -498,12 +533,12 @@ Seed: %@"; "lp.pool.remove.warning.title" = "GHI CHÚ"; "lp.remove.button.title" = "Rút Thanh Khoản"; "lp.remove.liquidity.screen.title" = "Rút Thanh Khoản"; -"lp.reward.token.text" = "Kiếm được % @"; +"lp.reward.token.text" = "Kiếm được %s"; "lp.reward.token.title" = "Thanh toán phần thưởng"; "lp.slippage.title" = "Trượt giá"; "lp.supply.button.title" = "Nguồnn cung thanh khoản"; "lp.supply.liquidity.screen.title" = "Nguồnn cung thanh khoản"; -"lp.token.pooled.text" = "%@ của bạn đã đóng góp"; +"lp.token.pooled.text" = "%s của bạn đã đóng góp"; "lp.user.pools.title" = "Pool người dùng"; "manage.assets.account.missing.text" = "Thêm một tài khoản..."; "manage.assets.search.hint" = "Tìm kiếm theo tài sản"; @@ -550,7 +585,7 @@ Xin lưu ý rằng việc ký giao dịch này sẽ phải chịu phí giao dị "nft.collection.title" = "Bộ sưu tập"; "nft.creator.title" = "Người sáng tạo"; "nft.list.empty.message" = "Chưa có bất kỳ NFT nào. Mua hoặc đúc NFT để xem chúng tại đây."; -"nft.load.error" = "Failed to load NFTs"; +"nft.load.error" = "Không thể tải NFT"; "nft.owner.title" = "Sở hữu"; "nft.share.address" = "Địa chỉ công khai của tôi để nhận: %s"; "nft.spam.warning" = "Cảnh giác với hoạt động thu thập NFT lừa đảo/spam – hãy xác minh tính xác thực trước khi tham gia. Giữ an toàn!"; @@ -567,6 +602,10 @@ Xin lưu ý rằng việc ký giao dịch này sẽ phải chịu phí giao dị "no.email.bound.error.message" = "Vui lòng kiểm tra ứng dụng mail đã được cài đặt trên thiết bị."; "node" = "Node"; "node.selection.delete.node.title" = "Xóa node tùy chỉnh?"; +"onboarding.banner.regular.ecosystem.button.title" = "Join EVM or Substrate"; +"onboarding.banner.regular.ecosystem.title" = "Create or import Substrate or EVM accounts"; +"onboarding.banner.ton.ecosystem.button.title" = "Join TON"; +"onboarding.banner.ton.ecosystem.title" = "Connect to the fastest growing ecosystem ever"; "onboarding.create.account" = "Tạo tài khoản"; "onboarding.create.wallet" = "Tạo ví"; "onboarding.preinstalled.wallet.button.text" = "Nhận ví được cài đặt sẵn"; @@ -707,7 +746,7 @@ Xin lưu ý rằng việc ký giao dịch này sẽ phải chịu phí giao dị "pools.limit.has.reached.error.message" = "Đã đạt đến giới hạn pool trong mạng này"; "pools.limit.has.reached.error.title" = "Bạn không thể tạo thêm pool"; "profile.about.title" = "Giới thiệu"; -"profile.account.score.title" = "Nomis multichain score"; +"profile.account.score.title" = "Điểm nomis đa chuỗi"; "profile.accounts.title" = "Tài khoản"; "profile.language.title" = "Ngôn ngữ"; "profile.logout.description" = "Hành động này sẽ dẫn đến việc xóa tất cả các tài khoản khỏi thiết bị này. Hãy đảm bảo rằng bạn đã sao lưu cụm mật khẩu của mình trước khi tiếp tục."; @@ -735,11 +774,12 @@ Xin lưu ý rằng việc ký giao dịch này sẽ phải chịu phí giao dị "scam.additional.stub" = "Bổ sung:"; "scam.description.donation.stub" = "Địa chỉ này đã được gắn cờ là đáng ngờ. Chúng tôi thực sự khuyên bạn không nên gửi %s tới tài khoản này."; "scam.description.exchange.stub" = "Địa chỉ này được đánh dấu là một sàn giao dịch, hãy cẩn thận, địa chỉ gửi tiền và địa chỉ rút tiền có thể khác nhau."; -"scam.description.lowscore.text" = "The address you are about to transfer to has low onchain activity, which may indicate a potential scammer or sybil attacker"; +"scam.description.lowscore.text" = "Địa chỉ bạn sắp chuyển đến có hoạt động onchain thấp, điều này có thể chỉ ra kẻ lừa đảo hoặc kẻ tấn công sybil tiềm ẩn"; "scam.description.sanctions.stub" = "Địa chỉ này đã bị gắn cờ do có liên quan đến một quốc gia đang bị trừng phạt. Chúng tôi thực sự khuyên bạn không nên gửi %s vào tài khoản này."; "scam.description.scam.stub" = "Địa chỉ này đã bị gắn cờ do có bằng chứng lừa đảo. Chúng tôi thực sự khuyên bạn không nên gửi {asset} tới tài khoản này."; -"scam.info.nomis.name" = "Nomis multi-chain score"; -"scam.info.nomis.subtype.text" = "Proceed with caution"; +"scam.info.nomis.name" = "Điểm nomis đa chuỗi"; +"scam.info.nomis.reason.text" = "Mạng ít hoạt động"; +"scam.info.nomis.subtype.text" = "Tiến hành thận trọng"; "scam.name.stub" = "Tên:"; "scam.reason.stub" = "Lý do:"; "scam.warning.alert.subtitle" = "Chúng tôi thực sự khuyên bạn không nên gửi %s vào tài khoản này."; @@ -1077,6 +1117,10 @@ vào tài khoản của bạn để phân biệt với lượng stake còn lại "terms.and.conditions.sora.community.alert.main" = "Cộng đồng SORA không thu thập bất kỳ dữ liệu cá nhân nào của bạn,"; "terms.and.conditions.sora.community.alert.secondary" = "nhưng để có được Thẻ SORA và tài khoản IBAN, bạn cần thực hiện quy trình KYC với nhà phát hành thẻ."; "terms.and.conditions.title" = "Điều khoản & Điều kiện"; +"ton.connect.alert.description" = "Service address"; +"ton.connect.alert.subtitle" = "Be sure to check the service address before connecting the wallet"; +"ton.connect.alert.title" = "Review dApp info"; +"ton.tonviewer.action.title" = "View in Tonviewer"; "tranaction.history.others.tab.title" = "Khác"; "transaction.detail.date" = "Ngày"; "transaction.detail.status" = "Trạng thái"; @@ -1102,7 +1146,7 @@ vào tài khoản của bạn để phân biệt với lượng stake còn lại "username.setup.hint.2.0" = "Ví dụ: Tiết kiệm, Đầu tư, Crowdloans, Staking. Biệt danh (nickname) này sẽ chỉ được hiển thị cho bạn và được lưu trữ cục bộ trên thiết bị di động của bạn."; "username.setup.title" = "Tạo tài khoản"; "username.setup.title.2.0" = "Tạo một ví mới"; -"validator.info.comission.title" = "Sứ mệnh"; +"validator.info.comission.title" = "nhiệm vụ"; "validator.info.min.stake.alert.text" = "Lượng token tối thiểu để stake ở nominator này là %s . Để nhận được phần thưởng, bạn phải stake nhiều hơn."; "validator.info.min.stake.among.active.nominators.text" = "Lượng token tối thiểu để stake với những nominator đang hoạt động"; "validators.list.empty.message" = "Không tìm thấy validator nào"; diff --git a/fearless/zh-Hans.lproj/Localizable.strings b/fearless/zh-Hans.lproj/Localizable.strings index 4459f99d22..1f9126e057 100644 --- a/fearless/zh-Hans.lproj/Localizable.strings +++ b/fearless/zh-Hans.lproj/Localizable.strings @@ -64,19 +64,20 @@ "account.needed.message" = "您还没有此网络的账户,您可以创建或导入一个账户。"; "account.needed.title" = "所需账户"; "account.option" = "账户选项"; -"account.stats.avg.transaction.time.title" = "Avg. transaction time"; -"account.stats.description.text" = "Your Multichain Score is based on your onchain journey through 3 ecosystems: Ethereum, Polygon and Binance Smart Chain"; -"account.stats.error.message" = "Unable to retrieve account score information. Please try again later."; -"account.stats.hold.tokens.usd.title" = "Hold tokens USD"; -"account.stats.max.transaction.time.title" = "Max transaction time"; -"account.stats.min.transactions.time.title" = "Min transaction time"; -"account.stats.native.balance.usd.title" = "Native balance USD"; -"account.stats.rejected.transactions.title" = "Rejected transactions"; -"account.stats.title" = "Your score"; -"account.stats.total.transactions.title" = "Total transactions"; -"account.stats.updated.title" = "Updated"; -"account.stats.wallet.age.title" = "Wallet age"; -"account.stats.wallet.option.title" = "Show wallet score"; +"account.stats.avg.transaction.time.title" = "平均交易时间"; +"account.stats.description.text" = "您的多链评分基于您在三个生态系统中的链上旅程:以太坊、Polygon 和币安智能链。"; +"account.stats.error.message" = "无法获取账户评分信息。请稍后再试。"; +"account.stats.hold.tokens.usd.title" = "持有代币 USD"; +"account.stats.max.transaction.time.title" = "最长交易时间"; +"account.stats.min.transactions.time.title" = "最短交易时间"; +"account.stats.native.balance.usd.title" = "本地余额 USD"; +"account.stats.rejected.transactions.title" = "被拒绝的交易"; +"account.stats.title" = "你的分数"; +"account.stats.total.transactions.title" = "总交易量"; +"account.stats.unavailable.text" = "您没有与EVM兼容的账户。如果您想查看分数,请通过“导入钱包”选项添加。"; +"account.stats.updated.title" = "已更新"; +"account.stats.wallet.age.title" = "钱包年龄"; +"account.stats.wallet.option.title" = "显示钱包评分"; "account.template" = "%s账户"; "account.unique.secret" = "拥有独特密钥的账户"; "accounts.add.account" = "添加一个账户"; @@ -176,6 +177,11 @@ "balance.locks.liquidity.pools.row.title" = "流动性池"; "balance.locks.nomination.pools.row.title" = "提名池"; "balance.locks.screen.title" = "锁定的详细信息"; +"banner.addwallet.regular.button.title" = "Сreate or import"; +"banner.addwallet.regular.subtitle" = "Join the ecosystems with more than 90+ chains and fascinating features"; +"banner.addwallet.regular.title" = "EVM/Substrate accounts"; +"banner.addwallet.ton.button.title" = "Join now"; +"banner.addwallet.ton.title" = "Join the fastest growing ecosystem ever"; "banners.view.factory.backup.action.title" = "立即备份"; "banners.view.factory.backup.subtitle" = "保护自己避免失去对资金的访问权限。"; "banners.view.factory.backup.title" = "钱包备份"; @@ -268,11 +274,12 @@ "common.message" = "消息"; "common.methods" = "方法"; "common.module" = "模块"; -"common.more" = "More"; +"common.more" = "更多"; "common.my.networks" = "我的网络"; "common.name" = "名字"; "common.network" = "网络"; "common.network.fee" = "网络费用"; +"common.network.hash" = "%@ Hash"; "common.network.management" = "网络管理"; "common.next" = "下一个"; "common.no" = "否"; @@ -289,6 +296,7 @@ "common.privacy.policy" = "隐私政策"; "common.proceed" = "继续"; "common.referral.code.title" = "推荐码"; +"common.refund" = "Refund"; "common.reject" = "拒绝"; "common.rejected" = "拒绝"; "common.request" = "请求"; @@ -300,6 +308,8 @@ "common.search.results.number" = "搜索结果:%d"; "common.search.start.title" = "搜索结果将会在这里显示"; "common.secret.derivation.path" = "秘密派生路径"; +"common.see.all" = "查看全部"; +"common.see.all" = "See all"; "common.select" = "选择"; "common.select" = "选择"; "common.select.all" = "全选"; @@ -337,6 +347,10 @@ "confirm.mnemonic.mismatch.error.title" = "无效的助记词"; "confirmation.skip.action" = "跳过流程"; "connect.details" = "连接详情"; +"connected.accounts.common" = "Connected Accounts"; +"connected.accounts.ethereum.title" = "EVM chain accounts"; +"connected.accounts.substrate.title" = "Substrate chain accounts"; +"connected.accounts.ton.title" = "TON chain accounts"; "connection.add.already.exists.error" = "该节点已经被添加过了,请尝试其他节点。"; "connection.add.invalid.error" = "无法与节点建立连接。请尝试另一个节点。"; "connection.add.unsupported.error" = "很抱歉,网络不支持。请尝试以下方法之一:%@。"; @@ -365,6 +379,14 @@ "create.new.account" = "创建一个新账户"; "create.new.connection" = "创建新连接"; "create.new.pincode" = "创建一个新的PIN码"; +"cross.chain.tx.status.destination.fail.description" = "Transaction failed on the %@. Your funds in the current transaction will be returned to your wallet."; +"cross.chain.tx.status.destination.fail.title" = "Transaction refund"; +"cross.chain.tx.status.done.description" = "Transaction has been successfully completed."; +"cross.chain.tx.status.done.title" = "All done"; +"cross.chain.tx.status.pending.description" = "Transaction is in progress. Please wait while %@ asset cross the bridge from the %@ to the %@ network."; +"cross.chain.tx.status.pending.title" = "Transaction pending"; +"cross.chain.tx.status.source.fail.description" = "Transaction failed on the %@ network. Please, try again."; +"cross.chain.tx.status.source.fail.title" = "Transaction failed"; "crowdloan.active.section.format" = "活跃的( %@ )"; "crowdloan.app.bonus.format" = "Fearless 钱包奖励 ( %@ )"; "crowdloan.astar.referral.code.invalid" = "无效的推荐地址,只接受 Polkadot 地址,请重新尝试。"; @@ -405,10 +427,22 @@ "custom.collators.text" = "你应该相信你的收集人能够胜任并诚实地行事;仅凭他们目前的盈利能力来做决策可能会导致利润减少甚至资金损失。"; "custom.collators.title" = "与已知的收集人进行质押"; "custom.validators.empty.message" = "没有找到验证人。\n请尝试更改筛选条件。"; +"dapp.category.connected.title" = "Connected"; +"dapp.category.defi.title" = "DeFi"; +"dapp.category.featured.title" = "Featured"; +"dapp.category.nft.title" = "NFT"; +"dapp.category.utilities.title" = "Utilities"; +"dapp.connected.title" = "Connected"; +"dapp.discover.title" = "Discover dApp"; +"dapp.no.connected.dapps.title" = "No connected dApps"; +"dapp.not.found.title" = "No dApps were found"; "default.account.shared.secret" = "具有共享密钥的账户"; "delete.custom.node.title" = "删除自定义节点?"; "ecdsa.selection.subtitle" = "(兼容BTC/ETH)"; "ecdsa.selection.title" = "ECDSA"; +"ecosystem.options.backup.title" = "Backup chain accounts"; +"ecosystem.options.details.title" = "Chain accounts"; +"ecosystem.options.title" = "Account options"; "ed25519.selection.subtitle" = "ed25519(替代)"; "ed25519.selection.title" = "爱德华兹"; "empty.state.message" = "未找到符合您要求的内容"; @@ -487,10 +521,11 @@ "lp.apy.alert.title" = "战略奖励APY"; "lp.apy.title" = "战略奖励APY"; "lp.available.pools.title" = "可用的流动池"; -"lp.banner.action.details.title" = "Show details"; -"lp.banner.text" = "Invest your funds in Liquidity\npools and receive rewards"; +"lp.banner.action.details.title" = "显示详细信息"; +"lp.banner.text" = "将您的资金投资于流动性池,并获得奖励。"; "lp.confirm.liquidity.screen.title" = "确认流动性"; "lp.confirm.liquidity.warning.text" = "输出是估计的。如果价格变动超过0.5%,您的交易将会回滚。"; +"lp.liquidity.add.complete.text" = "您对流动性池的供给已成功完成。"; "lp.network.fee.alert.text" = "网络费用用于确保 SORA 系统的增长和稳定性能。"; "lp.network.fee.alert.title" = "网络费用"; "lp.pool.details.title" = "流动池详情"; @@ -498,12 +533,12 @@ "lp.pool.remove.warning.title" = "注意"; "lp.remove.button.title" = "移除流动性"; "lp.remove.liquidity.screen.title" = "移除流动性"; -"lp.reward.token.text" = "赚取%@"; +"lp.reward.token.text" = "赚取%s"; "lp.reward.token.title" = "奖励支付以"; "lp.slippage.title" = "滑点"; "lp.supply.button.title" = "供应流动性"; "lp.supply.liquidity.screen.title" = "供应流动性"; -"lp.token.pooled.text" = "你提供流动性的%@"; +"lp.token.pooled.text" = "你提供流动性的%s"; "lp.user.pools.title" = "用户流动池"; "manage.assets.account.missing.text" = "添加一个账户..."; "manage.assets.search.hint" = "按资产搜索"; @@ -550,7 +585,7 @@ "nft.collection.title" = "收藏品"; "nft.creator.title" = "创作者"; "nft.list.empty.message" = "目前还没有任何NFT。购买或铸造NFT以在此处查看。"; -"nft.load.error" = "Failed to load NFTs"; +"nft.load.error" = "无法加载NFTs"; "nft.owner.title" = "拥有"; "nft.share.address" = "我要接收的公共地址:%s"; "nft.spam.warning" = "小心某些 NFT 收藏品可能是骗局或垃圾邮件,在参与之前请先验证其真实性。保持安全!"; @@ -567,6 +602,10 @@ "no.email.bound.error.message" = "请确保设备上已安装邮件应用程序。"; "node" = "节点"; "node.selection.delete.node.title" = "删除自定义节点?"; +"onboarding.banner.regular.ecosystem.button.title" = "Join EVM or Substrate"; +"onboarding.banner.regular.ecosystem.title" = "Create or import Substrate or EVM accounts"; +"onboarding.banner.ton.ecosystem.button.title" = "Join TON"; +"onboarding.banner.ton.ecosystem.title" = "Connect to the fastest growing ecosystem ever"; "onboarding.create.account" = "创建一个账户"; "onboarding.create.wallet" = "创建一个钱包"; "onboarding.preinstalled.wallet.button.text" = "获取预装钱包"; @@ -707,7 +746,7 @@ "pools.limit.has.reached.error.message" = "这个网络的池子数量已经达到了上限"; "pools.limit.has.reached.error.title" = "你不能创建更多的池子"; "profile.about.title" = "关于"; -"profile.account.score.title" = "Nomis multichain score"; +"profile.account.score.title" = "Nomis 多链评分"; "profile.accounts.title" = "账户"; "profile.language.title" = "语言"; "profile.logout.description" = "此操作将导致删除该设备上的所有账户。在继续之前,请确保已备份您的密码短语。"; @@ -735,11 +774,12 @@ "scam.additional.stub" = "附加:"; "scam.description.donation.stub" = "此地址已被标记为可疑。我们强烈建议您不要向该账户发送%s。"; "scam.description.exchange.stub" = "这个地址被标记为交易所,请注意存款和提款地址可能不同。"; -"scam.description.lowscore.text" = "The address you are about to transfer to has low onchain activity, which may indicate a potential scammer or sybil attacker"; +"scam.description.lowscore.text" = "您即将转账的地址在链上活动较少,这可能表明该地址存在潜在的诈骗者或女巫攻击者。"; "scam.description.sanctions.stub" = "由于与受制裁国家相关的实体,此地址已被标记。我们强烈建议您不要向此账户发送%s。"; "scam.description.scam.stub" = "此地址已被标记存在诈骗嫌疑。我们强烈建议您不要将{asset}发送到此账户。"; -"scam.info.nomis.name" = "Nomis multi-chain score"; -"scam.info.nomis.subtype.text" = "Proceed with caution"; +"scam.info.nomis.name" = "Nomis 多链评分"; +"scam.info.nomis.reason.text" = "网络活动低"; +"scam.info.nomis.subtype.text" = "请谨慎行事"; "scam.name.stub" = "姓名:"; "scam.reason.stub" = "原因:"; "scam.warning.alert.subtitle" = "我们强烈建议您不要向此账户发送%s。"; @@ -1075,6 +1115,10 @@ "terms.and.conditions.sora.community.alert.main" = "SORA社区不会收集您的任何个人数据,"; "terms.and.conditions.sora.community.alert.secondary" = "但是要获得SORA卡和IBAN账户,您需要通过一家发卡机构进行KYC验证。"; "terms.and.conditions.title" = "条款与条件"; +"ton.connect.alert.description" = "Service address"; +"ton.connect.alert.subtitle" = "Be sure to check the service address before connecting the wallet"; +"ton.connect.alert.title" = "Review dApp info"; +"ton.tonviewer.action.title" = "View in Tonviewer"; "tranaction.history.others.tab.title" = "其他"; "transaction.detail.date" = "日期"; "transaction.detail.status" = "状态"; From 0454beeabbb47c489e1dbf2dd5a5809130b550ad Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Wed, 30 Oct 2024 12:33:41 +0700 Subject: [PATCH 057/156] bundle identifier fix --- fearless.xcodeproj/project.pbxproj | 6 +++--- .../ConnectedAccountsViewModelFactory.swift | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index 923d9221c5..62f41b182c 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -20386,7 +20386,7 @@ ); MARKETING_VERSION = 3.8.1; OTHER_SWIFT_FLAGS = "$(inherited)"; - PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless; + PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearlesswallet; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; @@ -20414,7 +20414,7 @@ "$(FRAMEWORK_SEARCH_PATHS)", ); MARKETING_VERSION = 3.8.1; - PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless; + PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearlesswallet; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; @@ -20554,7 +20554,7 @@ ); MARKETING_VERSION = 3.8.1; OTHER_SWIFT_FLAGS = "$(inherited)"; - PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless; + PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearlesswallet; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift index c4983e01f2..d8c282f395 100644 --- a/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift @@ -40,7 +40,8 @@ final class ConnectedAccountsViewModelFactoryImpl: ConnectedAccountsViewModelFac let accountsViewModel = createAccountsViewModel( chains: chains, - wallet: wallet + wallet: wallet, + locale: locale ) let viewModel: [ConnectedAccountsViewModel] = [ From 355638d90d7d0be647c060e2856ddbcb0262dcf5 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Wed, 30 Oct 2024 11:56:52 +0500 Subject: [PATCH 058/156] some fixes --- Podfile.lock | 2 +- fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved | 2 +- fearless/ApplicationLayer/TonJettonInjector.swift | 2 +- fearless/Common/Protocols/AccountFetching.swift | 2 +- .../ConnectedAccounts/ConnectedAccountsViewModelFactory.swift | 3 ++- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Podfile.lock b/Podfile.lock index f325ec2052..8e1e65320b 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -99,7 +99,7 @@ DEPENDENCIES: - SwiftyBeaver SPEC REPOS: - https://github.com/cocoapods/Specs.git: + https://github.com/CocoaPods/Specs.git: - Charts - CocoaLumberjack - Cuckoo diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 163f65ac7a..35db971e35 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -282,7 +282,7 @@ { "identity" : "ton-swift", "kind" : "remoteSourceControl", - "location" : "https://github.com/DRadmir/ton-swift", + "location" : "https://github.com/DRadmir/ton-swift.git", "state" : { "branch" : "main", "revision" : "73c9894e2be8d6d16b87853342eb2755d2e4be8a" diff --git a/fearless/ApplicationLayer/TonJettonInjector.swift b/fearless/ApplicationLayer/TonJettonInjector.swift index 42aaa20a83..675cd980af 100644 --- a/fearless/ApplicationLayer/TonJettonInjector.swift +++ b/fearless/ApplicationLayer/TonJettonInjector.swift @@ -50,7 +50,7 @@ actor TonJettonInjectorImpl: TonJettonInjector { symbol: balanceInfo.item.jettonInfo.symbol ?? balanceInfo.item.jettonInfo.name, precision: UInt16(balanceInfo.item.jettonInfo.fractionDigits), icon: balanceInfo.item.jettonInfo.imageURL, - currencyId: balanceInfo.item.jettonInfo.address.toRaw(), // wallet + currencyId: balanceInfo.item.jettonInfo.address.toRaw(), existentialDeposit: nil, color: nil, isUtility: false, diff --git a/fearless/Common/Protocols/AccountFetching.swift b/fearless/Common/Protocols/AccountFetching.swift index a14d4c4379..ecac0078f9 100644 --- a/fearless/Common/Protocols/AccountFetching.swift +++ b/fearless/Common/Protocols/AccountFetching.swift @@ -209,7 +209,7 @@ extension AccountFetching { } for chainAccount in meta.chainAccounts { - let chainFormat: ChainFormat /* = chainAccount.ethereumBased ? .ethereum : .substrate(chain.addressPrefix) */ + let chainFormat: ChainFormat switch chainAccount.ecosystem { case .substrate: chainFormat = .substrate(chain.addressPrefix) diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift index c4983e01f2..d8c282f395 100644 --- a/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift @@ -40,7 +40,8 @@ final class ConnectedAccountsViewModelFactoryImpl: ConnectedAccountsViewModelFac let accountsViewModel = createAccountsViewModel( chains: chains, - wallet: wallet + wallet: wallet, + locale: locale ) let viewModel: [ConnectedAccountsViewModel] = [ From 63c9cda138e1e25c0b2e8f00bfbdf493402288cc Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Thu, 31 Oct 2024 17:40:20 +0500 Subject: [PATCH 059/156] code review fixes --- fearless.xcodeproj/project.pbxproj | 10 +++---- .../Balance/TonRemoteBalanceFetching.swift | 5 +--- .../TonConnectMessageBuilderImpl.swift | 4 +-- .../Services/TonConnectServiceImpl.swift | 20 +++++++------- .../ApplicationLayer/TonJettonInjector.swift | 4 +-- .../Common/Configs/ApplicationConfigs.swift | 2 +- .../DataProvider/Sources/DappDataSource.swift | 2 +- .../Sources/PriceDataSource.swift | 1 - fearless/Common/Model/TonConstansts.swift | 9 +++++++ .../MetaAccountOperationFactory.swift | 4 +-- .../ConnectedAccountsPresenter.swift | 6 ++--- .../ConnectedAccountsRouter.swift | 17 +----------- .../ConnectedAccountsTableCell.swift | 4 +-- .../ConnectedAccountsViewController.swift | 2 +- .../ConnectedAccountsViewModelFactory.swift | 7 ++--- .../DappBrowserViewModelFactory.swift | 4 +-- .../View/DappBrowserSectionHeaderView.swift | 4 +-- .../Models/TonConnectSendDessision.swift | 2 +- .../TonWebBridge/TonWebBridgePresenter.swift | 2 +- .../ConfirmTransferViewLayout.swift | 22 ---------------- .../Transfer/BokoloTransferFlowUseCase.swift | 26 +++++++++---------- .../WalletConnectConfirmationPresenter.swift | 2 +- .../WalletDetailsWireframe.swift | 2 +- 23 files changed, 63 insertions(+), 98 deletions(-) create mode 100644 fearless/Common/Model/TonConstansts.swift delete mode 100644 fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferViewLayout.swift diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index 62f41b182c..575668e6d4 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 52; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -338,6 +338,7 @@ 07D0BD412C6F0E9C001ECD58 /* BrowserExploreFeaturedCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D0BD402C6F0E9C001ECD58 /* BrowserExploreFeaturedCell.swift */; }; 07D0BD432C6F179E001ECD58 /* DappBrowserListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D0BD422C6F179E001ECD58 /* DappBrowserListCell.swift */; }; 07D0BD452C6F191C001ECD58 /* DappBrowserSectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D0BD442C6F191C001ECD58 /* DappBrowserSectionHeaderView.swift */; }; + 07DCB8622CD363EF00A01C64 /* TonConstansts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07DCB8612CD363EF00A01C64 /* TonConstansts.swift */; }; 07DE95B528A1119400E9C2CB /* BalanceInfoRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07DE95AC28A1119400E9C2CB /* BalanceInfoRouter.swift */; }; 07DE95B628A1119400E9C2CB /* BalanceInfoAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07DE95AD28A1119400E9C2CB /* BalanceInfoAssembly.swift */; }; 07DE95B728A1119400E9C2CB /* BalanceInfoProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07DE95AE28A1119400E9C2CB /* BalanceInfoProtocols.swift */; }; @@ -404,7 +405,6 @@ 084DDCBC4CE8438770EB48DE /* ConfirmTransferRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD1C635488F941373CDBE377 /* ConfirmTransferRouter.swift */; }; 08C2974B3B5AAA757CE57E33 /* FeatureToggleListInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 769372B10E8D3C2BF7304FC3 /* FeatureToggleListInteractor.swift */; }; 093C10C88C0A209158EA75D1 /* UsernameSetupTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C5EF68BE0E29D2305CB7337 /* UsernameSetupTests.swift */; }; - 0A2BBD1BB87EBB75BBD919F7 /* ConfirmTransferViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 537D889708D5E1615C662992 /* ConfirmTransferViewLayout.swift */; }; 0A4820F04EC9DA9DD515EC3A /* MainNftContainerRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C1CA1EF5BF1151E0DFB298C /* MainNftContainerRouter.swift */; }; 0AAFEFA17F249F4BEF051F6B /* ControllerAccountConfirmationPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54FB887490A8B33890B4E0E4 /* ControllerAccountConfirmationPresenter.swift */; }; 0B2B9C6E2BA2E924D6A54F4B /* CrowdloanListInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4E78D69E8EBC3EB4D01F8EF /* CrowdloanListInteractor.swift */; }; @@ -3546,6 +3546,7 @@ 07D0BD422C6F179E001ECD58 /* DappBrowserListCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DappBrowserListCell.swift; sourceTree = ""; }; 07D0BD442C6F191C001ECD58 /* DappBrowserSectionHeaderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DappBrowserSectionHeaderView.swift; sourceTree = ""; }; 07DB9C087A812B3606897A78 /* NetworkInfoPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkInfoPresenter.swift; sourceTree = ""; }; + 07DCB8612CD363EF00A01C64 /* TonConstansts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConstansts.swift; sourceTree = ""; }; 07DE95AC28A1119400E9C2CB /* BalanceInfoRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BalanceInfoRouter.swift; sourceTree = ""; }; 07DE95AD28A1119400E9C2CB /* BalanceInfoAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BalanceInfoAssembly.swift; sourceTree = ""; }; 07DE95AE28A1119400E9C2CB /* BalanceInfoProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BalanceInfoProtocols.swift; sourceTree = ""; }; @@ -3792,7 +3793,6 @@ 527CD27768E9A75E6CA87FE4 /* AccountConfirmTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountConfirmTests.swift; sourceTree = ""; }; 52A64FCFC95E3841032F910B /* ChainSelectionTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChainSelectionTests.swift; sourceTree = ""; }; 52F8D055D0481469073AA859 /* StakingPayoutConfirmationProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPayoutConfirmationProtocols.swift; sourceTree = ""; }; - 537D889708D5E1615C662992 /* ConfirmTransferViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConfirmTransferViewLayout.swift; sourceTree = ""; }; 5408FF305E4A49A683BC43E0 /* WalletChainAccountDashboardViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletChainAccountDashboardViewLayout.swift; sourceTree = ""; }; 54648003EC8531169B687994 /* Pods-fearlessTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessTests.debug.xcconfig"; path = "Target Support Files/Pods-fearlessTests/Pods-fearlessTests.debug.xcconfig"; sourceTree = ""; }; 54776237A20227DFE025E3AC /* AllDoneViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AllDoneViewLayout.swift; sourceTree = ""; }; @@ -8249,7 +8249,6 @@ BD1C635488F941373CDBE377 /* ConfirmTransferRouter.swift */, 5DD32F4D6D8DABF991E09C7C /* ConfirmTransferPresenter.swift */, 20FAD50119EE0DBA135AC9A7 /* ConfirmTransferViewController.swift */, - 537D889708D5E1615C662992 /* ConfirmTransferViewLayout.swift */, 9BD8F497D1380B608E046658 /* ConfirmTransferAssembly.swift */, ); path = ConfirmTransfer; @@ -10186,6 +10185,7 @@ 84786E1925FA6A470089DFF7 /* StashItem.swift */, 84B71DE4260B90270003A100 /* SubstrateAlias.swift */, 845BB8DA25E462B100E5FCDC /* SubstrateConstansts.swift */, + 07DCB8612CD363EF00A01C64 /* TonConstansts.swift */, 075C646F28098AFB00A55094 /* EthereumConstants.swift */, 842876AF24AE059700D91AD8 /* SupportData.swift */, 849014A524AA801B008F705E /* TextSharingSource.swift */, @@ -19142,6 +19142,7 @@ FAD428962A834BA8001D6A16 /* UIApplication+TopViewController.swift in Sources */, 075E5FD12C7F1A630044C142 /* TonConnectService.swift in Sources */, D6511F7C3E55197F82AB552C /* RecommendedValidatorListViewFactory.swift in Sources */, + 07DCB8622CD363EF00A01C64 /* TonConstansts.swift in Sources */, C7D77690E10875CF1856EBA1 /* StakingRewardPayoutsProtocols.swift in Sources */, FA936BCE286C41DF0059B97A /* StakingRebondConfirmationRelaychainStrategy.swift in Sources */, FA4B928F284493C60003BCEF /* DelegateCall.swift in Sources */, @@ -19866,7 +19867,6 @@ 084DDCBC4CE8438770EB48DE /* ConfirmTransferRouter.swift in Sources */, 604162EC2B721993E397E6B0 /* ConfirmTransferPresenter.swift in Sources */, 3152634A9E3FBF5E463CF56E /* ConfirmTransferViewController.swift in Sources */, - 0A2BBD1BB87EBB75BBD919F7 /* ConfirmTransferViewLayout.swift in Sources */, 26F0F2A52C7EFD38CBC2F1C3 /* ConfirmTransferAssembly.swift in Sources */, BCB9B3DF3D8104BC8456811B /* TonWebBridgeProtocols.swift in Sources */, 57376A74C6310F1FA52FA28C /* TonWebBridgeRouter.swift in Sources */, diff --git a/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift b/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift index 48724f84bc..db56ec70c4 100644 --- a/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift +++ b/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift @@ -234,10 +234,7 @@ actor TonRemoteBalanceFetchingImpl: AccountInfoRemoteService { rates: Components.Schemas.TokenRates?, currency: Currency ) -> [PriceData] { - guard - let price = rates?.prices?.additionalProperties.first?.value, - let fiatDayChange = rates?.diff_24h?.additionalProperties.first?.value - else { + guard let price = rates?.prices?.additionalProperties.first?.value else { return [] } let priceData = PriceData( diff --git a/fearless/ApplicationLayer/Services/TonConnectMessageBuilderImpl.swift b/fearless/ApplicationLayer/Services/TonConnectMessageBuilderImpl.swift index 8c111a0f0f..bf657b6ff5 100644 --- a/fearless/ApplicationLayer/Services/TonConnectMessageBuilderImpl.swift +++ b/fearless/ApplicationLayer/Services/TonConnectMessageBuilderImpl.swift @@ -35,7 +35,7 @@ final class TonConnectMessageBuilderImpl: TonConnectMessageBuilder { throw ConvenienceError(error: "Missing TON") } - let network = LocalToggleService.shared.tonEnvListToggle.storageValue ? -3 : -239 + let network = LocalToggleService.shared.tonEnvListToggle.storageValue ? TonConstants.testnetChainId : TonConstants.tonChainId let replyItem = TonConnect.ConnectItemReply.tonAddress( .init( address: address, @@ -124,7 +124,7 @@ final class TonConnectMessageBuilderImpl: TonConnectMessageBuilder { let replyItems = try requestPayloadItems.compactMap { item in switch item { case .tonAddress: - let network = LocalToggleService.shared.tonEnvListToggle.storageValue ? -3 : -239 + let network = LocalToggleService.shared.tonEnvListToggle.storageValue ? TonConstants.testnetChainId : TonConstants.tonChainId return TonConnect.ConnectItemReply.tonAddress( .init( address: address, diff --git a/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift b/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift index 083d27025f..c7f0df9704 100644 --- a/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift +++ b/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift @@ -13,7 +13,7 @@ enum TonConnectServiceError: Swift.Error { actor TonConnectServiceImpl: TonConnectService { private let chainRegistry: ChainRegistryProtocol - private let tonService: TonSendService + private let tonSendService: TonSendService private let networkWorker: SSFNetwork.NetworkWorker private let messageBuilder: TonConnectMessageBuilder private let appRepository: AsyncAnyRepository @@ -32,7 +32,7 @@ actor TonConnectServiceImpl: TonConnectService { logger: LoggerProtocol ) { self.chainRegistry = chainRegistry - self.tonService = tonService + self.tonSendService = tonService self.networkWorker = networkWorker self.messageBuilder = messageBuilder self.appRepository = appRepository @@ -142,8 +142,8 @@ actor TonConnectServiceImpl: TonConnectService { else { throw ConvenienceError(error: "Missing Ton params") } - async let seqno = try tonService.loadSeqno(address: sender.toRaw()) - async let timeout = tonService.getTimeoutSafely(TTL: 5 * 60) + async let seqno = try tonSendService.loadSeqno(address: sender.toRaw()) + async let timeout = tonSendService.getTimeoutSafely(TTL: 5 * 60) let bocFactory = try createBocFactory(for: wallet) let boc = try await bocFactory.createTonConnectTransferBoc( @@ -154,7 +154,7 @@ actor TonConnectServiceImpl: TonConnectService { timeout: timeout ) - try await tonService.sendTransaction(boc: boc) + try await tonSendService.sendTransaction(boc: boc) return boc } @@ -171,8 +171,8 @@ actor TonConnectServiceImpl: TonConnectService { throw ConvenienceError(error: "Missing Ton params") } let sessionCrypto = try TonConnectSessionCrypto(privateKey: app.keyPair.privateKey) - async let seqno = try tonService.loadSeqno(address: sender.toRaw()) - async let timeout = tonService.getTimeoutSafely(TTL: 5 * 60) + async let seqno = try tonSendService.loadSeqno(address: sender.toRaw()) + async let timeout = tonSendService.getTimeoutSafely(TTL: 5 * 60) let bocFactory = try createBocFactory(for: wallet) let boc = try await bocFactory.createTonConnectTransferBoc( @@ -182,7 +182,7 @@ actor TonConnectServiceImpl: TonConnectService { seqno: seqno, timeout: timeout ) - try await tonService.sendTransaction(boc: boc) + try await tonSendService.sendTransaction(boc: boc) let body = try messageBuilder.buildSendTransactionResponseSuccess( sessionCrypto: sessionCrypto, @@ -321,9 +321,9 @@ actor TonConnectServiceImpl: TonConnectService { } private func createBocFactory(for wallet: MetaAccountModel) throws -> BocFactory { - let network = LocalToggleService.shared.tonEnvListToggle.storageValue ? "-3" : "-239" + let network = LocalToggleService.shared.tonEnvListToggle.storageValue ? TonConstants.testnetChainId : TonConstants.tonChainId let request = ChainAccountRequest( - chainId: network, + chainId: "\(network)", addressPrefix: 0, ecosystem: .ton, accountId: nil diff --git a/fearless/ApplicationLayer/TonJettonInjector.swift b/fearless/ApplicationLayer/TonJettonInjector.swift index 675cd980af..c19b0f1e86 100644 --- a/fearless/ApplicationLayer/TonJettonInjector.swift +++ b/fearless/ApplicationLayer/TonJettonInjector.swift @@ -23,8 +23,8 @@ actor TonJettonInjectorImpl: TonJettonInjector { func inject(jettonItems: [TonJettonBalance]) async { do { - let network = LocalToggleService.shared.tonEnvListToggle.storageValue ? "-3" : "-239" - guard let tonChain = try await chainModelRepository.fetch(by: network, options: RepositoryFetchOptions()) else { + let network = LocalToggleService.shared.tonEnvListToggle.storageValue ? TonConstants.testnetChainId : TonConstants.tonChainId + guard let tonChain = try await chainModelRepository.fetch(by: "\(network)", options: RepositoryFetchOptions()) else { throw ConvenienceError(error: "Ton chain is not fetched") } var assetModels = map(jettonItems: jettonItems) diff --git a/fearless/Common/Configs/ApplicationConfigs.swift b/fearless/Common/Configs/ApplicationConfigs.swift index d1a2762182..5484a769e3 100644 --- a/fearless/Common/Configs/ApplicationConfigs.swift +++ b/fearless/Common/Configs/ApplicationConfigs.swift @@ -165,7 +165,7 @@ extension ApplicationConfig: ApplicationConfigProtocol, XcmConfigProtocol { } var dappSourceUrl: URL { - URL(string: "")! + GitHubUrl.url(suffix: "appConfigs/dapps.json", branch: .developFree) } // MARK: - xcm diff --git a/fearless/Common/DataProvider/Sources/DappDataSource.swift b/fearless/Common/DataProvider/Sources/DappDataSource.swift index c4aafb84d8..3a9f82b5ad 100644 --- a/fearless/Common/DataProvider/Sources/DappDataSource.swift +++ b/fearless/Common/DataProvider/Sources/DappDataSource.swift @@ -16,7 +16,7 @@ enum DappCategoryType: String, Codable, Equatable { } final class DappDataSource: SingleValueProviderSourceProtocol { - static let fetchLocalData = true + static let fetchLocalData = false typealias Model = [DappCategory] func fetchOperation() -> CompoundOperationWrapper<[DappCategory]?> { diff --git a/fearless/Common/DataProvider/Sources/PriceDataSource.swift b/fearless/Common/DataProvider/Sources/PriceDataSource.swift index 2024fc0f50..b0611e341d 100644 --- a/fearless/Common/DataProvider/Sources/PriceDataSource.swift +++ b/fearless/Common/DataProvider/Sources/PriceDataSource.swift @@ -184,7 +184,6 @@ final class PriceDataSource: SingleValueProviderSourceProtocol { } private func createChainlinkOperations() -> [BaseOperation] { - return [] guard currencies?.count == 1, currencies?.first?.id == Currency.defaultCurrency().id else { return [] } diff --git a/fearless/Common/Model/TonConstansts.swift b/fearless/Common/Model/TonConstansts.swift new file mode 100644 index 0000000000..ee3f76a32e --- /dev/null +++ b/fearless/Common/Model/TonConstansts.swift @@ -0,0 +1,9 @@ +import Foundation +import SSFUtils + +struct TonConstants { + static let tonChainId = -239 + static let testnetChainId = -3 + static let tonAssetId = "2ba4723a-74b4-4a6f-a888-e51937773807-239" + static let tonIcon = URL(string: "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg")! +} diff --git a/fearless/Common/Operation/MetaAccountOperationFactory.swift b/fearless/Common/Operation/MetaAccountOperationFactory.swift index a61b3a7a5a..f126a8a083 100644 --- a/fearless/Common/Operation/MetaAccountOperationFactory.swift +++ b/fearless/Common/Operation/MetaAccountOperationFactory.swift @@ -309,9 +309,9 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { name: request.username, ecosystem: ecosystem, isBackedUp: isBackedUp, - defaultChainId: "-239", + defaultChainId: "\(TonConstants.tonChainId)", assetsVisibility: [.init( - assetId: ["-239", "2ba4723a-74b4-4a6f-a888-e51937773807-239"].joined(separator: " : "), + assetId: ["\(TonConstants.tonChainId)", TonConstants.tonAssetId].joined(separator: " : "), hidden: false )] ) diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsPresenter.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsPresenter.swift index ba8d4001ba..c2ba86c202 100644 --- a/fearless/Modules/ConnectedAccounts/ConnectedAccountsPresenter.swift +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsPresenter.swift @@ -63,14 +63,14 @@ extension ConnectedAccountsPresenter: ConnectedAccountsViewOutput { break } } - + func didTapAccountScore(address: String?) { router.presentAccountScore(address: address, from: view) } - + func didSelect(viewModel: ConnectedAccountsViewModel.Accounts) { - guard viewModel.count != nil else { + guard viewModel.count > 0 else { // TODO: - Show Add account flow return } diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsRouter.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsRouter.swift index 50ca99b7a9..538c593470 100644 --- a/fearless/Modules/ConnectedAccounts/ConnectedAccountsRouter.swift +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsRouter.swift @@ -17,7 +17,7 @@ final class ConnectedAccountsRouter: ConnectedAccountsRouterInput { view?.controller.present(walletOptionsController, animated: true) } - + func showOptions( from view: ControllerBackedProtocol?, ecosystem: Ecosystem, @@ -43,9 +43,6 @@ final class ConnectedAccountsRouter: ConnectedAccountsRouterInput { chains: [ChainModel]? ) { let module = WalletDetailsViewFactory.createView(flow: .normal(wallet: wallet), chains: chains) - let navigationController = FearlessNavigationController( - rootViewController: module.controller - ) view?.controller.navigationController?.pushViewController(module.controller, animated: true) } @@ -67,10 +64,6 @@ final class ConnectedAccountsRouter: ConnectedAccountsRouterInput { return } - let navigationController = FearlessNavigationController( - rootViewController: mnemonicView.controller - ) - view?.controller.navigationController?.pushViewController(mnemonicView.controller, animated: true) } } @@ -92,10 +85,6 @@ final class ConnectedAccountsRouter: ConnectedAccountsRouterInput { return } - let navigationController = FearlessNavigationController( - rootViewController: passwordView.controller - ) - view?.controller.navigationController?.pushViewController(passwordView.controller, animated: true) } } @@ -115,10 +104,6 @@ final class ConnectedAccountsRouter: ConnectedAccountsRouterInput { return } - let navigationController = FearlessNavigationController( - rootViewController: seedView.controller - ) - view?.controller.navigationController?.pushViewController(seedView.controller, animated: true) } } diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsTableCell.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsTableCell.swift index 6dd7586332..3ed86e2f44 100644 --- a/fearless/Modules/ConnectedAccounts/ConnectedAccountsTableCell.swift +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsTableCell.swift @@ -53,8 +53,8 @@ final class ConnectedAccountsTableCell: UITableViewCell { position: Position ) { titleLabel.text = model.title - if let count = model.count { - countLabel.text = "\(count)" + if model.count > 0 { + countLabel.text = "\(model.count)" optionsButton.setImage(R.image.iconHorMore(), for: .normal) } else { countLabel.text = nil diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewController.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewController.swift index a70fd2852f..164217ca62 100644 --- a/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewController.swift +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewController.swift @@ -17,7 +17,7 @@ enum ConnectedAccountsViewModel { struct Accounts { let title: String - let count: Int? + let count: Int let ecosystem: Ecosystem let chains: [ChainModel] } diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift index d8c282f395..81f16d8942 100644 --- a/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift @@ -108,7 +108,7 @@ final class ConnectedAccountsViewModelFactoryImpl: ConnectedAccountsViewModelFac mapped.forEach { ecosystem, chains in let title: String - var count: Int? + var count: Int switch ecosystem { case .substrate: title = R.string.localizable.connectedAccountsSubstrateTitle(preferredLanguages: locale.rLanguages) @@ -120,9 +120,6 @@ final class ConnectedAccountsViewModelFactoryImpl: ConnectedAccountsViewModelFac title = R.string.localizable.connectedAccountsTonTitle(preferredLanguages: locale.rLanguages) count = chains.map { wallet.fetch(for: $0.accountRequest())?.accountId }.filter { $0 != nil }.count } - if count == 0 { - count = nil - } let accounts = ConnectedAccountsViewModel.Accounts( title: title, count: count, @@ -132,7 +129,7 @@ final class ConnectedAccountsViewModelFactoryImpl: ConnectedAccountsViewModelFac accountsViewModel.append(accounts) } - return accountsViewModel.sorted(by: { $0.count.or(.zero) > $1.count.or(.zero) }) + return accountsViewModel.sorted(by: { $0.count > $1.count }) } private func tokenFormatter(for currency: Currency, locale: Locale) -> TokenFormatter { diff --git a/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift b/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift index 23b9733050..f983f1eb9e 100644 --- a/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift +++ b/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift @@ -145,10 +145,10 @@ final class DappBrowserViewModelFactoryImpl: DappBrowserViewModelFactory { let apps = connected.map { TonDapp( identifier: $0.identifier, - chains: ["-239", "-3"], + chains: ["\(TonConstants.tonChainId)", "\(TonConstants.testnetChainId)"], name: $0.name, description: nil, - icon: $0.iconUrl ?? URL(string: "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg")!, + icon: $0.iconUrl ?? TonConstants.tonIcon, poster: nil, url: $0.appUrl ) diff --git a/fearless/Modules/DappBrowser/View/DappBrowserSectionHeaderView.swift b/fearless/Modules/DappBrowser/View/DappBrowserSectionHeaderView.swift index 8f10eb2e4b..7b88229139 100644 --- a/fearless/Modules/DappBrowser/View/DappBrowserSectionHeaderView.swift +++ b/fearless/Modules/DappBrowser/View/DappBrowserSectionHeaderView.swift @@ -69,9 +69,9 @@ final class DappBrowserSectionHeaderView: UITableViewHeaderFooterView { // MARK: - Private methods private func setup() { - moreButton.addAction(UIAction(handler: { [weak self] _ in + moreButton.addAction { [weak self] in self?.allButtonAction() - }), for: .touchUpInside) + } let separator = UIFactory.default.createSeparatorView() contentView.addSubview(containerView) diff --git a/fearless/Modules/TonWebBridge/Models/TonConnectSendDessision.swift b/fearless/Modules/TonWebBridge/Models/TonConnectSendDessision.swift index 5492dba02d..486fc8602a 100644 --- a/fearless/Modules/TonWebBridge/Models/TonConnectSendDessision.swift +++ b/fearless/Modules/TonWebBridge/Models/TonConnectSendDessision.swift @@ -1,7 +1,7 @@ import Foundation enum TonConnectSendDessision { - case sended( + case sent( invocationId: String, response: TonConnect.SendTransactionResponse ) diff --git a/fearless/Modules/TonWebBridge/TonWebBridgePresenter.swift b/fearless/Modules/TonWebBridge/TonWebBridgePresenter.swift index 88316b9a79..f6160cd554 100644 --- a/fearless/Modules/TonWebBridge/TonWebBridgePresenter.swift +++ b/fearless/Modules/TonWebBridge/TonWebBridgePresenter.swift @@ -323,7 +323,7 @@ extension TonWebBridgePresenter: WalletConnectSessionModuleOutput { Task { do { switch dessision { - case let .sended(invocationId, sendTransactionResponse): + case let .sent(invocationId, sendTransactionResponse): try await handleSendMessage( result: sendTransactionResponse, invocationId: invocationId diff --git a/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferViewLayout.swift b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferViewLayout.swift deleted file mode 100644 index 306135e3ec..0000000000 --- a/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferViewLayout.swift +++ /dev/null @@ -1,22 +0,0 @@ -import UIKit - -final class ConfirmTransferViewLayout: UIView { - var locale: Locale = .current { - didSet { - applyLocalization() - } - } - - override init(frame: CGRect) { - super.init(frame: frame) - } - - @available(*, unavailable) - required init?(coder _: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - Private methods - - private func applyLocalization() {} -} diff --git a/fearless/Modules/Transfer/Transfer/BokoloTransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/BokoloTransferFlowUseCase.swift index 420abaddcb..04d1401f6a 100644 --- a/fearless/Modules/Transfer/Transfer/BokoloTransferFlowUseCase.swift +++ b/fearless/Modules/Transfer/Transfer/BokoloTransferFlowUseCase.swift @@ -77,18 +77,18 @@ final class BokoloTransferFlowUseCase: TransferFlowUseCase { for: BokoloConstants.bokoloCasheBridgeAddress ) -// #if F_DEV -// let chainAsset = possibleChains -// .first(where: { chain in -// switch chain.knownChainEquivalent { -// case .soraTest: return true -// default: return false -// } -// })? -// .chainAssets -// .first(where: { $0.asset.currencyId == BokoloConstants.bokoloCashAssetCurrencyId }) -// -// #else + #if F_DEV + let chainAsset = possibleChains + .first(where: { chain in + switch chain.knownChainEquivalent { + case .soraTest: return true + default: return false + } + })? + .chainAssets + .first(where: { $0.asset.currencyId == BokoloConstants.bokoloCashAssetCurrencyId }) + + #else let chainAsset = possibleChains .first(where: { chain in switch chain.knownChainEquivalent { @@ -98,7 +98,7 @@ final class BokoloTransferFlowUseCase: TransferFlowUseCase { })? .chainAssets .first(where: { $0.asset.currencyId == BokoloConstants.bokoloCashAssetCurrencyId }) -// #endif + #endif guard let qrChainAsset = chainAsset, diff --git a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationPresenter.swift b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationPresenter.swift index 845cfd5a18..81fb0b414b 100644 --- a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationPresenter.swift +++ b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationPresenter.swift @@ -94,7 +94,7 @@ final class WalletConnectConfirmationPresenter { ) ) moduleOutput?.tonConnectSend( - dessision: .sended( + dessision: .sent( invocationId: invocationId, response: response ) diff --git a/fearless/Modules/WalletDetails/WalletDetailsWireframe.swift b/fearless/Modules/WalletDetails/WalletDetailsWireframe.swift index ce1297b700..8aa430d7f4 100644 --- a/fearless/Modules/WalletDetails/WalletDetailsWireframe.swift +++ b/fearless/Modules/WalletDetails/WalletDetailsWireframe.swift @@ -80,7 +80,7 @@ final class WalletDetailsWireframe: WalletDetailsWireframeProtocol { func showCreate(uniqueChainModel: UniqueChainModel, from view: ControllerBackedProtocol?) { guard let controller = UsernameSetupViewFactory.createViewForOnboarding( flow: .chain(model: uniqueChainModel), - ecosystem: .regular // TODO: - Select ecosystem + ecosystem: .regular )?.controller else { return } From da28d441650e1e9e9ed489c4f7a637dc340b2f7d Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Mon, 4 Nov 2024 17:58:40 +0500 Subject: [PATCH 060/156] [#FLW-4991] Wrong behaviour after updating the app --- fearless.xcodeproj/project.pbxproj | 12 + .../Common/Configs/ApplicationConfigs.swift | 4 +- .../ChainRegistry/ChainSyncService.swift | 2 +- .../CDChainAccountMigrationPolicyV12.swift | 18 + .../CDMetaAccountMigrationPolicy.swift | 46 +++ .../xcmapping.xml | 316 ++++++++++++++++++ .../contents | 4 +- fearless/Modules/Root/RootInteractor.swift | 7 +- 8 files changed, 400 insertions(+), 9 deletions(-) create mode 100644 fearless/Common/Storage/Migration/UserStorage/CDChainAccountMigrationPolicyV12.swift create mode 100644 fearless/Common/Storage/Migration/UserStorage/CDMetaAccountMigrationPolicy.swift create mode 100644 fearless/Common/Storage/MigrationMappings/MultiAssetV12.xcmappingmodel/xcmapping.xml diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index 575668e6d4..20888de65e 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -318,6 +318,8 @@ 07C438DA2C638BAA00475B14 /* TonConnectParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07C438D92C638BAA00475B14 /* TonConnectParameters.swift */; }; 07C438DC2C638BB800475B14 /* TonConnectRequestPayload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07C438DB2C638BB800475B14 /* TonConnectRequestPayload.swift */; }; 07C438DE2C638D3900475B14 /* TonConnectManifest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07C438DD2C638D3900475B14 /* TonConnectManifest.swift */; }; + 07CA72C32CD8A63F00EF5279 /* CDChainAccountMigrationPolicyV12.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07CA72C22CD8A63F00EF5279 /* CDChainAccountMigrationPolicyV12.swift */; }; + 07CA72C52CD8AD0100EF5279 /* CDMetaAccountMigrationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07CA72C42CD8AD0100EF5279 /* CDMetaAccountMigrationPolicy.swift */; }; 07D05E4128EC08B800B66C70 /* StakinkPoolRewardCalculator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D05E4028EC08B800B66C70 /* StakinkPoolRewardCalculator.swift */; }; 07D05E4928EEFF2C00B66C70 /* SelectValidatorsStartPoolViewModelState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D05E4728EEFDC900B66C70 /* SelectValidatorsStartPoolViewModelState.swift */; }; 07D05E4A28EEFF2F00B66C70 /* SelectValidatorsStartPoolStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D05E4628EEFDC900B66C70 /* SelectValidatorsStartPoolStrategy.swift */; }; @@ -370,6 +372,7 @@ 07DFA456289B78E20035A8AB /* CopyableLabelView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07DFA455289B78E10035A8AB /* CopyableLabelView.swift */; }; 07DFA45A289B8D520035A8AB /* WalletBalanceInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07DFA459289B8D520035A8AB /* WalletBalanceInfo.swift */; }; 07E346D4288E616E00A8FAEC /* WalletBalanceBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07E346D3288E616E00A8FAEC /* WalletBalanceBuilder.swift */; }; + 07EC555B2CD8A3600074132E /* MultiAssetV12.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = 07EC555A2CD8A3600074132E /* MultiAssetV12.xcmappingmodel */; }; 07ECB7F32C69CF13000E0A14 /* TonConnectDessision.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB7F22C69CF13000E0A14 /* TonConnectDessision.swift */; }; 07ECB7F52C69EDCE000E0A14 /* SessionStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB7F42C69EDCE000E0A14 /* SessionStatus.swift */; }; 07ECB7F72C69F4A1000E0A14 /* TonDapp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB7F62C69F4A1000E0A14 /* TonDapp.swift */; }; @@ -3525,6 +3528,8 @@ 07C438D92C638BAA00475B14 /* TonConnectParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectParameters.swift; sourceTree = ""; }; 07C438DB2C638BB800475B14 /* TonConnectRequestPayload.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectRequestPayload.swift; sourceTree = ""; }; 07C438DD2C638D3900475B14 /* TonConnectManifest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectManifest.swift; sourceTree = ""; }; + 07CA72C22CD8A63F00EF5279 /* CDChainAccountMigrationPolicyV12.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CDChainAccountMigrationPolicyV12.swift; sourceTree = ""; }; + 07CA72C42CD8AD0100EF5279 /* CDMetaAccountMigrationPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CDMetaAccountMigrationPolicy.swift; sourceTree = ""; }; 07D05E4028EC08B800B66C70 /* StakinkPoolRewardCalculator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakinkPoolRewardCalculator.swift; sourceTree = ""; }; 07D05E4628EEFDC900B66C70 /* SelectValidatorsStartPoolStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartPoolStrategy.swift; sourceTree = ""; }; 07D05E4728EEFDC900B66C70 /* SelectValidatorsStartPoolViewModelState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartPoolViewModelState.swift; sourceTree = ""; }; @@ -3578,6 +3583,7 @@ 07DFA455289B78E10035A8AB /* CopyableLabelView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CopyableLabelView.swift; path = fearless/Common/View/CopyableLabelView.swift; sourceTree = SOURCE_ROOT; }; 07DFA459289B8D520035A8AB /* WalletBalanceInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletBalanceInfo.swift; sourceTree = ""; }; 07E346D3288E616E00A8FAEC /* WalletBalanceBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletBalanceBuilder.swift; sourceTree = ""; }; + 07EC555A2CD8A3600074132E /* MultiAssetV12.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = MultiAssetV12.xcmappingmodel; sourceTree = ""; }; 07ECB7F22C69CF13000E0A14 /* TonConnectDessision.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectDessision.swift; sourceTree = ""; }; 07ECB7F42C69EDCE000E0A14 /* SessionStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionStatus.swift; sourceTree = ""; }; 07ECB7F62C69F4A1000E0A14 /* TonDapp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonDapp.swift; sourceTree = ""; }; @@ -11113,6 +11119,7 @@ FA9278A727C382C600FF7B5B /* MultiassetV2.xcmappingmodel */, FA69A94627CE3476000352A6 /* SubstrateV2Mapping.xcmappingmodel */, FA28A9B129D2E451005AA42E /* MultiassetV9.xcmappingmodel */, + 07EC555A2CD8A3600074132E /* MultiAssetV12.xcmappingmodel */, ); path = MigrationMappings; sourceTree = ""; @@ -15835,6 +15842,8 @@ FACD42912A5BE811009975AA /* SingleToMultiassetMigrationPolicy.swift */, FACD42922A5BE811009975AA /* MultiassetV2MigrationPolicy.swift */, FACD42932A5BE811009975AA /* UserStorageVersion.swift */, + 07CA72C42CD8AD0100EF5279 /* CDMetaAccountMigrationPolicy.swift */, + 07CA72C22CD8A63F00EF5279 /* CDChainAccountMigrationPolicyV12.swift */, ); path = UserStorage; sourceTree = ""; @@ -17267,6 +17276,7 @@ FA72542C2AC2E48500EC47A6 /* AppMetadata.swift in Sources */, C63468DF28F2C178005CB1F1 /* Contact.swift in Sources */, FA286B162A3043DB008BD527 /* CrossChainRouter.swift in Sources */, + 07EC555B2CD8A3600074132E /* MultiAssetV12.xcmappingmodel in Sources */, 848C3D0926248A3B005481C3 /* TransferCall.swift in Sources */, C63468E428F3530A005CB1F1 /* AddressBookViewModelFactory.swift in Sources */, 8401AEC42642A71D000B03E3 /* StakingRebondConfirmationWireframe.swift in Sources */, @@ -17876,6 +17886,7 @@ 07D05E6528EF0BE500B66C70 /* SelectValidatorsConfirmPoolViewModelState.swift in Sources */, 845FC93426B09EDB0021EC48 /* RoundedButton+Style.swift in Sources */, FABA163B2B0C9510001AF2F0 /* NetworkManagmentPresenter.swift in Sources */, + 07CA72C32CD8A63F00EF5279 /* CDChainAccountMigrationPolicyV12.swift in Sources */, FA4B929F2844D0C80003BCEF /* SnapKit.swift in Sources */, AE9EF25F260A82A50026910A /* StoriesPresenter.swift in Sources */, FA34EEF12B9875CC0042E73E /* AccountIdVariant.swift in Sources */, @@ -18711,6 +18722,7 @@ FA14AE8B2B0788D20066CADF /* AssetTransactionData+SoraSubsquidHistory.swift in Sources */, FAE5858F2B0764ED00240FE1 /* SoraSubsquidHistoryOperationFactory.swift in Sources */, 84F47D4B2666EF1C00F7647A /* KaruraStatementData.swift in Sources */, + 07CA72C52CD8AD0100EF5279 /* CDMetaAccountMigrationPolicy.swift in Sources */, 8443FE24255586230092893D /* ExportMnemonicConfirmProtocols.swift in Sources */, FA93A2E128323CF10021330F /* CustomValidatorListRelaychainStrategy.swift in Sources */, C6DC2D602B18411000BAA4DB /* UIImageView+gif.swift in Sources */, diff --git a/fearless/Common/Configs/ApplicationConfigs.swift b/fearless/Common/Configs/ApplicationConfigs.swift index 5484a769e3..4ccff2c1ac 100644 --- a/fearless/Common/Configs/ApplicationConfigs.swift +++ b/fearless/Common/Configs/ApplicationConfigs.swift @@ -147,9 +147,9 @@ extension ApplicationConfig: ApplicationConfigProtocol, XcmConfigProtocol { let isDev = LocalToggleService.shared.chainsListToggle?.storageValue #if F_DEV if isDev.or(true) { - return GitHubUrl.url(suffix: "chains/v11/chains_dev.json", branch: .developFree) + return GitHubUrl.url(suffix: "chains/v12/chains_dev.json", branch: .developFree) } else { - return GitHubUrl.url(suffix: "chains/v11/chains.json") + return GitHubUrl.url(suffix: "chains/v12/chains.json") } #else if isDev.or(false) { diff --git a/fearless/Common/Services/ChainRegistry/ChainSyncService.swift b/fearless/Common/Services/ChainRegistry/ChainSyncService.swift index 2c46e73717..70fd2ead12 100644 --- a/fearless/Common/Services/ChainRegistry/ChainSyncService.swift +++ b/fearless/Common/Services/ChainRegistry/ChainSyncService.swift @@ -14,7 +14,7 @@ enum ChainSyncServiceError: Error { } final class ChainSyncService { - static let fetchLocalData = true + static let fetchLocalData = false struct SyncChanges { let newOrUpdatedItems: [ChainModel] diff --git a/fearless/Common/Storage/Migration/UserStorage/CDChainAccountMigrationPolicyV12.swift b/fearless/Common/Storage/Migration/UserStorage/CDChainAccountMigrationPolicyV12.swift new file mode 100644 index 0000000000..82eef8017a --- /dev/null +++ b/fearless/Common/Storage/Migration/UserStorage/CDChainAccountMigrationPolicyV12.swift @@ -0,0 +1,18 @@ +import CoreData + +class CDChainAccountMigrationPolicyV12: NSEntityMigrationPolicy { + override func createDestinationInstances( + forSource sInstance: NSManagedObject, + in mapping: NSEntityMapping, + manager: NSMigrationManager + ) throws { + try super.createDestinationInstances(forSource: sInstance, in: mapping, manager: manager) + + if let destination = manager.destinationInstances( + forEntityMappingName: mapping.name, + sourceInstances: [sInstance] + ).first { + destination.setValue(nil, forKey: "ecosystem") + } + } +} diff --git a/fearless/Common/Storage/Migration/UserStorage/CDMetaAccountMigrationPolicy.swift b/fearless/Common/Storage/Migration/UserStorage/CDMetaAccountMigrationPolicy.swift new file mode 100644 index 0000000000..74e0e44d15 --- /dev/null +++ b/fearless/Common/Storage/Migration/UserStorage/CDMetaAccountMigrationPolicy.swift @@ -0,0 +1,46 @@ +// +// CDMetaAccountMigrationPolicy.swift +// fearless +// +// Created by Soramitsu on 04.11.2024. +// Copyright © 2024 Soramitsu. All rights reserved. +// + +import CoreData + +class CDMetaAccountMigrationPolicy: NSEntityMigrationPolicy { + override func createDestinationInstances( + forSource sInstance: NSManagedObject, + in mapping: NSEntityMapping, + manager: NSMigrationManager + ) throws { + try super.createDestinationInstances(forSource: sInstance, in: mapping, manager: manager) + + if let destination = manager.destinationInstances( + forEntityMappingName: mapping.name, + sourceInstances: [sInstance] + ).first { + destination.setValue(nil, forKey: "tonAddress") + destination.setValue(nil, forKey: "tonContractVersion") + destination.setValue(nil, forKey: "tonPublicKey") + + if destination.value(forKey: "substrateAccountId") == nil { + destination.setValue(nil, forKey: "substrateAccountId") + } + if destination.value(forKey: "substrateCryptoType") == nil { + destination.setValue(0, forKey: "substrateCryptoType") + } + if destination.value(forKey: "substratePublicKey") == nil { + destination.setValue(nil, forKey: "substratePublicKey") + } +// let substrateAccountId = destination.value(forKey: "substrateAccountId") +// destination.setValue(substrateAccountId, forKey: "substrateAccountId") +// +// let substrateCryptoType = destination.value(forKey: "substrateCryptoType") +// destination.setValue(substrateAccountId, forKey: "substrateCryptoType") +// +// let substratePublicKey = destination.value(forKey: "substratePublicKey") +// destination.setValue(substrateAccountId, forKey: "substratePublicKey") + } + } +} diff --git a/fearless/Common/Storage/MigrationMappings/MultiAssetV12.xcmappingmodel/xcmapping.xml b/fearless/Common/Storage/MigrationMappings/MultiAssetV12.xcmappingmodel/xcmapping.xml new file mode 100644 index 0000000000..a68d7fc758 --- /dev/null +++ b/fearless/Common/Storage/MigrationMappings/MultiAssetV12.xcmappingmodel/xcmapping.xml @@ -0,0 +1,316 @@ + + + + + + 134481920 + 492BE521-0877-4A2F-8735-F7E04AE37625 + 153 + + + + NSPersistenceFrameworkVersion + 1344 + NSStoreModelVersionChecksumKey + bMpud663vz0bXQE24C6Rh4MvJ5jVnzsD2sI3njZkKbc= + NSStoreModelVersionHashes + + XDDevAttributeMapping + + 0plcXXRN7XHKl5CcF+fwriFmUpON3ZtcI/AfK748aWc= + + XDDevEntityMapping + + qeN1Ym3TkWN1G6dU9RfX6Kd2ccEvcDVWHpd3LpLgboI= + + XDDevMappingModel + + EqtMzvRnVZWkXwBHu4VeVGy8UyoOe+bi67KC79kphlQ= + + XDDevPropertyMapping + + XN33V44TTGY4JETlMoOB5yyTKxB+u4slvDIinv0rtGA= + + XDDevRelationshipMapping + + akYY9LhehVA/mCb4ATLWuI9XGLcjpm14wWL1oEBtIcs= + + + NSStoreModelVersionHashesDigest + +Hmc2uYZK6og+Pvx5GUJ7oW75UG4V/ksQanTjfTKUnxyGWJRMtB5tIRgVwGsrd7lz/QR57++wbvWsr6nxwyS0A== + NSStoreModelVersionHashesVersion + 3 + NSStoreModelVersionIdentifiers + + + + + + + + + name + + + + 1 + assetsVisibility + + + + ecosystem + + + + name + + + + 1 + selectedCurrency + + + + networkManagmentFilter + + + + fearless.CDChainAccountMigrationPolicyV12 + CDChainAccount + Undefined + 4 + CDChainAccount + 1 + + + + + + issueMuted + + + + substrateAccountId + + + + favouriteChainIds + + + + 1 + chainAccounts + + + + assetKeysOrder + + + + icon + + + + assetFilterOptions + + + + name + + + + publicKey + + + + substrateCryptoType + + + + isSelected + + + + accountId + + + + symbol + + + + CDAssetVisibility + Undefined + 5 + CDAssetVisibility + 1 + + + + + + 1 + metaAccount + + + + data + + + + hidden + + + + chainId + + + + canExportEthereumMnemonic + + + + 1 + wallet + + + + + CDAccountInfo + Undefined + 1 + CDAccountInfo + 1 + + + + + + tonAddress + + + + order + + + + unusedChainIds + + + + tonContractVersion + + + + url + + + + substratePublicKey + + + + metaId + + + + hasBackup + + + + CDChainSettings + Undefined + 6 + CDChainSettings + 1 + + + + + + ethereumAddress + + + + CDCustomChainNode + Undefined + 2 + CDCustomChainNode + 1 + + + + + + id + + + + assetId + + + + cryptoType + + + + identifier + + + + tonPublicKey + + + + fearless.CDMetaAccountMigrationPolicy + CDMetaAccount + Undefined + 3 + CDMetaAccount + 1 + + + + + + zeroBalanceAssetsHidden + + + + ethereumPublicKey + + + + chainId + + + + isSelected + + + + autobalanced + + + + /Users/soramitsu/Job/shared-features-spm/Sources/SSFAccountManagmentStorage/Resources/UserDataModel.xcdatamodeld/MultiassetUserDataModel_v11.xcdatamodel + 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vZGVkXxAaWERCdWNrZXRGb3JQYWNrYWdlc3N0b3JhZ2VfEBxYREJ1Y2tldEZvckludGVyZmFjZXNzdG9yYWdlXxAPX3hkX293bmluZ01vZGVsXxAdWERCdWNrZXRGb3JQYWNrYWdlc3dhc0VuY29kZWRWX293bmVyXxAbWERCdWNrZXRGb3JEYXRhVHlwZXNzdG9yYWdlW192aXNpYmlsaXR5XxAZWERCdWNrZXRGb3JDbGFzc2Vzc3RvcmFnZVVfbmFtZV8QH1hEQnVja2V0Rm9ySW50ZXJmYWNlc3dhc0VuY29kZWRfEB5YREJ1Y2tldEZvckRhdGFUeXBlc3dhc0VuY29kZWRfEBBfdW5pcXVlRWxlbWVudElEgASBBLeBBLWAAYAEgACBBLaBBLgQAIAFgAOABIAEgABQU1lFU9MAOAA5AA4AOgBCAEpXTlMua2V5c1pOUy5vYmplY3RzpwA7ADwAPQA+AD8AQABBgAaAB4AIgAmACoALgAynAEMARABFAEYARwBIAEmADYECq4EDzoEEE4CAgQRYgQG/gCtfEBFDREFzc2V0VmlzaWJpbGl0eV5DRENoYWluQWNjb3VudF8QEUNEQ3VzdG9tQ2hhaW5Ob2RlXUNEQWNjb3VudEluZm9dQ0RNZXRhQWNjb3VudF8QD0NEQ2hhaW5TZXR0aW5nc1pDREN1cnJlbmN53xAQAFMAVABVAFYAHwBXAFgAIQBZAFoADgAjAFsAXAAmAF0AXgBfACcAJwATAGMAZAAvACcAXgBnADsAXgBqAGsAbF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc2R1cGxpY2F0ZXNfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zc3RvcmFnZVtfaXNBYnN0cmFjdIAPgDOABIAEgAKAEIECSYAEgA+BAkuABoAPgQPNgA4IEmhP0BxXb3JkZXJlZNMAOAA5AA4AcAByAEqhAHGAEaEAc4ASgCteWERfUFN0ZXJlb3R5cGXZAB8AIwB3AA4AJgB4ACEAXQB5AEMAcQBeAH0AFQAnAC8AbACBXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgA2AEYAPgDKAAIAECIAT0wA4ADkADgCDAI0ASqkAhACFAIYAhwCIAIkAigCLAIyAFIAVgBaAF4AYgBmAGoAbgBypAI4AjwCQAJEAkgCTAJQAlQCWgB2AIYAigCSAJYAngCmALIAwgCtfEBNYRFBNQ29tcG91bmRJbmRleGVzXxAQWERfUFNLX2VsZW1lbnRJRF8QGVhEUE1VbmlxdWVuZXNzQ29uc3RyYWludHNfEBpYRF9QU0tfdmVyc2lvbkhhc2hNb2RpZmllcl8QGVhEX1BTS19mZXRjaFJlcXVlc3RzQXJyYXlfEBFYRF9QU0tfaXNBYnN0cmFjdF8QD1hEX1BTS191c2VySW5mb18QE1hEX1BTS19jbGFzc01hcHBpbmdfEBZYRF9QU0tfZW50aXR5Q2xhc3NOYW1l3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUArQAVAHMAbABsAGwALwBsALQAhABsAGwAFQBsVV90eXBlWF9kZWZhdWx0XF9hc3NvY2lhdGlvbltfaXNSZWFkT25seVlfaXNTdGF0aWNZX2lzVW5pcXVlWl9pc0Rlcml2ZWRaX2lzT3JkZXJlZFxfaXNDb21wb3NpdGVXX2lzTGVhZoAAgB6AAIASCAgICIAggBQICIAACNIAOQAOALsAvKCAH9IAvgC/AMAAwVokY2xhc3NuYW1lWCRjbGFzc2VzXk5TTXV0YWJsZUFycmF5owDAAMIAw1dOU0FycmF5WE5TT2JqZWN00gC+AL8AxQDGXxAQWERVTUxQcm9wZXJ0eUltcKQAxwDIAMkAw18QEFhEVU1MUHJvcGVydHlJbXBfEBRYRFVNTE5hbWVkRWxlbWVudEltcF8QD1hEVU1MRWxlbWVudEltcN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQBzAGwAbABsAC8AbAC0AIUAbABsABUAbIAAgACAAIASCAgICIAggBUICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVANsAFQBzAGwAbABsAC8AbAC0AIYAbABsABUAbIAAgCOAAIASCAgICIAggBYICIAACNIAOQAOAOkAvKCAH98QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQBzAGwAbABsAC8AbAC0AIcAbABsABUAbIAAgACAAIASCAgICIAggBcICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAPwAFQBzAGwAbABsAC8AbAC0AIgAbABsABUAbIAAgCaAAIASCAgICIAggBgICIAACNIAOQAOAQoAvKCAH98QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQBzAGwAbABsAC8AbAC0AIkAbABsABUAbIAAgCiAAIASCAgICIAggBkICIAACAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQEeABUAcwBsAGwAbAAvAGwAtACKAGwAbAAVAGyAAIAqgACAEggICAiAIIAaCAiAAAjTADgAOQAOASwBLQBKoKCAK9IAvgC/ATABMV8QE05TTXV0YWJsZURpY3Rpb25hcnmjATABMgDDXE5TRGljdGlvbmFyed8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVATUAFQBzAGwAbABsAC8AbAC0AIsAbABsABUAbIAAgC2AAIASCAgICIAggBsICIAACNYAIwAOACYAXQAfACEBQwFEABUAbAAVAC+ALoAvgAAIgABfEBRYREdlbmVyaWNSZWNvcmRDbGFzc9IAvgC/AUoBS11YRFVNTENsYXNzSW1wpgFMAU0BTgFPAVAAw11YRFVNTENsYXNzSW1wXxASWERVTUxDbGFzc2lmaWVySW1wXxARWERVTUxOYW1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AbAAvAGwAtAGsAGwAbAAVAGyAAIAogACAqwgICAiAIIBFCAiAAAjZAB8AIwXDAA4AJgXEACEAXQXFBN8BkABeAH0AFQAnAC8AbAXNXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgKiAO4APgDKAAIAECIC30wA4ADkADgXPBdcASqcCSgJLAkwCTQJOAk8CUIBSgFOAVIBVgFaAV4BYpwXYBdkF2gXbBdwF3QXegLiAuYC6gLuAvIC9gL6AK98QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQUkAGwAbABsAC8AbAC0AkoAbABsABUAbIAAgACAAIC2CAgICIAggFIICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQUkAGwAbABsAC8AbAC0AksAbABsABUAbIAAgCiAAIC2CAgICIAggFMICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQUkAGwAbABsAC8AbAC0AkwAbABsABUAbIAAgACAAIC2CAgICIAggFQICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVApAAFQUkAGwAbABsAC8AbAC0Ak0AbABsABUAbIAAgF2AAIC2CAgICIAggFUICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQUkAGwAbABsAC8AbAC0Ak4AbABsABUAbIAAgACAAIC2CAgICIAggFYICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQUkAGwAbABsAC8AbAC0Ak8AbABsABUAbIAAgACAAIC2CAgICIAggFcICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQUkAGwAbABsAC8AbAC0AlAAbABsABUAbIAAgACAAIC2CAgICIAggFgICIAACN8QEgCiAKMApAZKAB8ApgCnBksAIQClBkwAqAAOACMAqQCqACY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TADgAOQAOB/gH+QBKoKCAK98QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQenAGwAbABsAC8AbAC0AagAbABsABUAbIAAgCiAAIDbCAgICIAggEEICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAgEAFQenAGwAbABsAC8AbAC0AakAbABsABUAbIAAgEyAAIDbCAgICIAggEIICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQenAGwAbABsAC8AbAC0AaoAbABsABUAbIAAgCiAAIDbCAgICIAggEMICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQenAGwAbABsAC8AbAC0AasAbABsABUAbIAAgACAAIDbCAgICIAggEQICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQenAGwAbABsAC8AbAC0AawAbABsABUAbIAAgCiAAIDbCAgICIAggEUICIAACNkAHwAjCEcADgAmCEgAIQBdCEkE4QGQAF4AfQAVACcALwBsCFFfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WA2IA7gA+AMoAAgAQIgOfTADgAOQAOCFMIWwBKpwJKAksCTAJNAk4CTwJQgFKAU4BUgFWAVoBXgFinCFwIXQheCF8IYAhhCGKA6IDpgOqA64DtgO6A8IAr3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUAFQAVB6gAbABsAGwALwBsALQCSgBsAGwAFQBsgACAAIAAgOYICAgIgCCAUggIgAAI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUBDgAVB6gAbABsAGwALwBsALQCSwBsAGwAFQBsgACAKIAAgOYICAgIgCCAUwgIgAAI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUAFQAVB6gAbABsAGwALwBsALQCTABsAGwAFQBsgACAAIAAgOYICAgIgCCAVAgIgAAI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUIkwAVB6gAbABsAGwALwBsALQCTQBsAGwAFQBsgACA7IAAgOYICAgIgCCAVQgIgAAIEQcI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUAFQAVB6gAbABsAGwALwBsALQCTgBsAGwAFQBsgACAAIAAgOYICAgIgCCAVggIgAAI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUIsgAVB6gAbABsAGwALwBsALQCTwBsAGwAFQBsgACA74AAgOYICAgIgCCAVwgIgAAIXxAZTlNTZWN1cmVVbmFyY2hpdmVGcm9tRGF0Yd8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQeoAGwAbABsAC8AbAC0AlAAbABsABUAbIAAgACAAIDmCAgICIAggFgICIAACN8QEgCiAKMApAjQAB8ApgCnCNEAIQClCNIAqAAOACMAqQCqACYAqwAVABUAFQAnAEcAbABsCNoALwBsAF4AbALiBM0AbABsCOIAbF8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgIAICIDzCIAPCIEBCYCXCAiA8ggSmEQ1MdMAOAA5AA4I5gjpAEqiAY8C7IA6gGWiCOoI64D0gP+AK9kAHwAjCO4ADgAmCO8AIQBdCPAE4gGPAF4AfQAVACcALwBsCPhfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WA8YA6gA+AMoAAgAQIgPXTADgAOQAOCPoJAwBKqAGlAaYBpwGoAakBqgGrAayAPoA/gECAQYBCgEOARIBFqAkECQUJBgkHCQgJCQkKCQuA9oD3gPiA+oD7gPyA/YD+gCvfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQEOABUI6gBsAGwAbAAvAGwAtAGlAGwAbAAVAGyAAIAogACA9AgICAiAIIA+CAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQAVABUI6gBsAGwAbAAvAGwAtAGmAGwAbAAVAGyAAIAAgACA9AgICAiAIIA/CAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQktABUI6gBsAGwAbAAvAGwAtAGnAGwAbAAVAGyAAID5gACA9AgICAiAIIBACAiAAAjTADgAOQAOCTsJPABKoKCAK98QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQjqAGwAbABsAC8AbAC0AagAbABsABUAbIAAgCiAAID0CAgICIAggEEICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAgEAFQjqAGwAbABsAC8AbAC0AakAbABsABUAbIAAgEyAAID0CAgICIAggEIICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQjqAGwAbABsAC8AbAC0AaoAbABsABUAbIAAgCiAAID0CAgICIAggEMICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQjqAGwAbABsAC8AbAC0AasAbABsABUAbIAAgACAAID0CAgICIAggEQICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQjqAGwAbABsAC8AbAC0AawAbABsABUAbIAAgCiAAID0CAgICIAggEUICIAACNkAHwAjCYoADgAmCYsAIQBdCYwE4gLsAF4AfQAVACcALwBsCZRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WA8YBlgA+AMoAAgAQIgQEA0wA4ADkADgmWCZ4ASqcDnAOdA54DnwOgA6EDooBzgHSAdYB2gHeAeIB5pwmfCaAJoQmiCaMJpAmlgQEBgQECgQEEgQEFgQE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AEXUAABF3AAARgAAAEYsAABGUAAARowAAEaoAABGyAAARuwAAEcQAABHXAAAR4AAAEfMAABIKAAASHAAAElsAABJdAAASXwAAEmEAABJjAAASZAAAEmUAABJmAAASZwAAEmkAABJrAAASbAAAEm0AABJvAAAScAAAEq8AABKxAAASswAAErUAABK3AAASuAAAErkAABK6AAASuwAAEr0AABK/AAASwAAAEsEAABLDAAASxAAAEs0AABLOAAAS0AAAEw8AABMRAAATEwAAExUAABMXAAATGAAAExkAABMaAAATGwAAEx0AABMfAAATIAAAEyEAABMjAAATJAAAE2MAABNlAAATZwAAE2kAABNrAAATbAAAE20AABNuAAATbwAAE3EAABNzAAATdAAAE3UAABN3AAATeAAAE4EAABOCAAAThAAAE8MAABPFAAATxwAAE8kAABPLAAATzAAAE80AABPOAAATzwAAE9EAABPTAAAT1AAAE9UAABPXAAAT2AAAE9kAABQYAAAUGgAAFBwAABQeAAAUIAAAFCEAABQiAAAUIwAAFCQAABQmAAAUKAAAFCkAABQqAAAULAAAFC0AABQ6AAAUOwAAFDwAABQ+AAAURwAAFF0AABRkAAAUcQAAFLAAABSyAAAUtAAAFLYAABS4AAAUuQAAFLoAABS7AAAUvAAAFL4AABTAAAAUwQAAFMIAABTEAAAUxQAAFN4AABTgAAAU4gAAFOQAABTlAAAU5wAAFP4AABUHAAAVFQAAFSIAABUwAAAVRQAAFVkAABVwAAAVggAAFcEAABXDAAAVxQAAFccAABXJAAAVygAAFcsAABXMAAAVzQAAFc8AABXRAAAV0gAAFdMAABXVAAAV1gAAFeoAABXzAAAWCAAAFhcAABYsAAAWOgAAFk8AABZjAAAWegAAFowAABaZAAAWoAAAFqIAABakAAAWpgAAFq0AABavAAAWsQAAFrQAABa2AAAWvgAAFsUAABbMAAAXFwAAFzoAABdaAAAXegAAF3wAABd+AAAXgAAAF4IAABeEAAAXhQAAF4YAABeIAAAXiQAAF4sAABeMAAAXjgAAF5AAABeRAAAXkgAAF5QAABeVAAAXmgAAF6cAABesAAAXrgAAF7AAABe1AAAXtwAAF7kAABe7AAAX0AAAF+UAABgKAAAYLgAAGFUAABh5AAAYewAAGH0AABh/AAAYgQAAGIMAABiFAAAYhgAAGIgAABiVAAAYpgAAGKgAABiqAAAYrAAAGK4AABiwAAAYsgAAGLQAABi2AAAYxwAAGMkAABjLAAAYzQAAGM8AABjRAAAY0wAAGNUAABjXAAAY2QAAGPcAABkVAAAZKAAAGTwAABlRAAAZbgAAGYIAABmYAAAZ1wAAGdkAABnbAAAZ3QAAGd8AABngAAAZ4QAAGeIAABnjAAAZ5QAAGecAABnoAAAZ6QAAGesAABnsAAAaKwAAGi0AABovAAAaMQAAGjMAABo0AAAaNQAAGjYAABo3AAAaOQAAGjsAABo8AAAaPQAAGj8AABpAAAAafwAAGoEAABqDAAAahQAAGocAABqIAAAaiQAAGooAABqLAAAajQAAGo8AABqQAAAakQAAGpMAABqUAAAaoQAAGqIAABqjAAAapQAAGuQAABrmAAAa6AAAGuoAABrsAAAa7QAAGu4AABrvAAAa8AAAGvIAABr0AAAa9QAAGvYAABr4AAAa+QAAGzgAABs6AAAbPAAAGz4AABtAAAAbQQAAG0IAABtDAAAbRAAAG0YAABtIAAAbSQAAG0oAABtMAAAbTQAAG04AABuNAAAbjwAAG5EAABuTAAAblQAAG5YAABuXAAAbmAAAG5kAABubAAAbnQAAG54AABufAAAboQAAG6IAABvhAAAb4wAAG+UAABvnAAAb6QAAG+oAABvrAAAb7AAAG+0AABvvAAAb8QAAG/IAABvzAAAb9QAAG/YAABw1AAAcNwAAHDkAABw7AAAcPQAAHD4AABw/AAAcQAAAHEEAABxDAAAcRQAAHEYAABxHAAAcSQAAHEoAABxvAAAckwAAHLoAABzeAAAc4AAAHOIAABzkAAAc5gAAHOgAABzqAAAc6wAAHO0AABz6AAAdCQAAHQsAAB0NAAAdDwAAHREAAB0TAAAdFQAAHRcAAB0mAAAdKAAAHSoAAB0sAAAdLgAAHTAAAB0yAAAdNAAAHTYAAB1WAAAdgQAAHZsAAB20AAAdzgAAHe4AAB4RAAAeUAAAHlIAAB5UAAAeVgAAHlgAAB5ZAAAeWgAAHlsAAB5cAAAeXgAAHmAAAB5hAAAeYgAAHmQAAB5lAAAepAAAHqYAAB6oAAAeqgAAHqwAAB6tAAAergAAHq8AAB6wAAAesgAAHrQAAB61AAAetgAAHrgAAB65AAAe+AAAHvoAAB78AAAe/gAAHwAAAB8BAAAfAgAAHwMAAB8EAAAfBgAAHwgAAB8JAAAfCgAAHwwAAB8NAAAfTAAAH04AAB9QAAAfUgAAH1QAAB9VAAAfVgAAH1cAAB9YAAAfWgAAH1wAAB9dAAAfXgAAH2AAAB9hAAAfZAAAH6MAAB+lAAAfpwAAH6kAAB+rAAAfrAAAH60AAB+uAAAfrwAAH7EAAB+zAAAftAAAH7UAAB+3AAAfuAAAH/cAAB/5AAAf+wAAH/0AAB//AAAgAAAAIAEAACACAAAgAwAAIAUAACAHAAAgCAAAIAkAACALAAAgDAAAIEsAACBNAAAgTwAAIFEAACBTAAAgVAAAIFUAACBWAAAgVwAAIFkAACBbAAAgXAAAIF0AACBfAAAgYAAAIGkAACB3AAAghAAAIJIAACCfAAAgsgAAIMkAACDbAAAhJgAAIUkAACFpAAAhiQAAIYsAACGNAAAhjwAAIZEAACGTAAAhlAAAIZUAACGXAAAhmAAAIZoAACGbAAAhngAAIaAAACGhAAAhogAAIaQAACGlAAAhqgAAIbcAACG8AAAhvgAAIcAAACHFAAAhxwAAIckAACHLAAAh3gAAIgMAACInAAAiTgAAInIAACJ0AAAidgAAIngAACJ6AAAifAAAIn4AACJ/AAAigQAAIo4AACKfAAAioQAAIqMAACKlAAAipwAAIqkAACKrAAAirQAAIq8AACLAAAAiwgAAIsQAACLGAAAiyAAAIsoAACLMAAAizgAAItAAACLSAAAjEQAAIxMAACMVAAAjFwAAIxkAACMaAAAjGwAAIxwAACMdAAAjHwAAIyEAACMiAAAjIwAAIyUAACMmAAAjZQAAI2cAACNpAAAjawAAI20AACNuAAAjbwAAI3AAACNxAAAjcwAAI3UAACN2AAAjdwAAI3kAACN6AAAjuQAAI7sAACO9AAAjvwAAI8EAACPCAAAjwwAAI8QAACPFAAAjxwAAI8kAACPKAAAjywAAI80AACPOAAAj2wAAI9wAACPdAAAj3wAAJB4AACQgAAAkIgAAJCQAACQmAAAkJwAAJCgAACQpAAAkKgAAJCwAACQuAAAkLwAAJDAAACQyAAAkMwAAJHIAACR0AAAkdgAAJHgAACR6AAAkewAAJHwAACR9AAAkfgAAJIAAACSCAAAkgwAAJIQAACSGAAAkhwAAJMYAACTIAAAkygAAJMwAACTOAAAkzwAAJNAAACTRAAAk0gAAJNQAACTWAAAk1wAAJNgAACTaAAAk2wAAJRoAACUcAAAlHgAAJSAAACUiAAAlIwAAJSQAACUlAAAlJgAAJSgAACUqAAAlKwAAJSwAACUuAAAlLwAAJW4AACVwAAAlcgAAJXQAACV2AAAldwAAJXgAACV5AAAlegAAJXwAACV+AAAlfwAAJYAAACWCAAAlgwAAJagAACXMAAAl8wAAJhcAACYZAAAmGwAAJh0AACYfAAAmIQAAJiMAACYkAAAmJgAAJjMAACZCAAAmRAAAJkYAACZIAAAmSgAAJkwAACZOAAAmUAAAJl8AACZhAAAmYwAAJmUAACZnAAAmagAAJm0AACZwAAAmcgAAJoQAACaYAAAmqgAAJr8AACbRAAAm4AAAJv0AACc8AAAnPgAAJ0AAACdCAAAnRAAAJ0UAACdGAAAnRwAAJ0gAACdKAAAnTAAAJ00AACdOAAAnUAAAJ1EAACeQAAAnkgAAJ5QAACeWAAAnmAAAJ5kAACeaAAAnmwAAJ5wAACeeAAAnoAAAJ6EAACeiAAAnpAAAJ6UAACenAAAn5gAAJ+gAACfqAAAn7AAAJ+4AACfvAAAn8AAAJ/EAACfyAAAn9AAAJ/YAACf3AAAn+AAAJ/oAACf7AAAoOgAAKDwAACg+AAAoQAAAKEIAAChDAAAoRAAAKEUAAChGAAAoSAAAKEoAAChLAAAoTAAAKE4AAChPAAAokgAAKLYAACjaAAAo/QAAKSQAAClEAAApawAAKZIAACmyAAAp1gAAKfoAACn8AAAp/gAAKgAAACoCAAAqBAAAKgYAACoJAAAqCwAAKg0AACoQAAAqEgAAKhQAACoXAAAqGQAAKhoAACofAAAqLAAAKi8AACoxAAAqNAAAKjYAACo4AAAqXQAAKoEAACqoAAAqzAAAKs4AACrQAAAq0gAAKtQAACrWAAAq2AAAKtkAACrbAAAq6AAAKvsAACr9AAAq/wAAKwEAACsDAAArBQAAKwcAACsJAAArCwAAKw0AACsgAAArIgAAKyQAACsmAAArKAAAKyoAACssAAArLgAAKzAAACsyAAArNAAAK3MAACt1AAArdwAAK3kAACt7AAArfAAAK30AACt+AAArfwAAK4EAACuDAAArhAAAK4UAACuHAAAriAAAK5EAACuSAAArlAAAK9MAACvVAAAr1wAAK9kAACvbAAAr3AAAK90AACveAAAr3wAAK+EAACvjAAAr5AAAK+UAACvnAAAr6AAALCcAACwpAAAsKwAALC0AACwvAAAsMAAALDEAACwyAAAsMwAALDUAACw3AAAsOAAALDkAACw7AAAsPAAALEUAACxGAAAsSAAALIcAACyJAAAsiwAALI0AACyPAAAskAAALJEAACySAAAskwAALJUAACyXAAAsmAAALJkAACybAAAsnAAALNsAACzdAAAs3wAALOEAACzjAAAs5AAALOUAACzmAAAs5wAALOkAACzrAAAs7AAALO0AACzvAAAs8AAALPkAACz6AAAs/AAALTsAAC09AAAtPwAALUEAAC1DAAAtRAAALUUAAC1GAAAtRwAALUkAAC1LAAAtTAAALU0AAC1PAAAtUAAALY8AAC2RAAAtkwAALZUAAC2XAAAtmAAALZkAAC2aAAAtmwAALZ0AAC2fAAAtoAAALaEAAC2jAAAtpAAALbEAAC2yAAAtswAALbUAAC30AAAt9gAALfgAAC36AAAt/AAALf0AAC3+AAAt/wAALgAAAC4CAAAuBAAALgUAAC4GAAAuCAAALgkAAC5IAAAuSgAALkwAAC5OAAAuUAAALlEAAC5SAAAuUwAALlQAAC5WAAAuWAAALlkAAC5aAAAuXAAALl0AAC5rAAAueAAALqMAAC6lAAAupwAALqkAAC6rAAAurQAALq8AAC6xAAAuswAALrUAAC63AAAuuQAALrsAAC69AAAuvwAALsEAAC7DAAAuxQAALscAAC7JAAAuywAALvYAAC74AAAu+gAALvwAAC7+AAAvAQAALwQAAC8HAAAvCgAALw0AAC8QAAAvEwAALxYAAC8ZAAAvHAAALx8AAC8iAAAvJQAALygAAC8rAAAvLgAALzAAAC9CAAAvXAAAL3EAAC+EAAAvjwAAL5QAAC+jAAAvrQAAL8EAAC/VAAAv7gAAMAEAADAWAAAwKwAAMDoAADBIAAAwTgAAMGoAADCAAAAwhwAAMNIAADD1AAAxFQAAMTUAADE3AAAxOQAAMTsAADE9AAAxPwAAMUAAADFBAAAxQwAAMUQAADFGAAAxRwAAMUkAADFLAAAxTAAAMU0AADFPAAAxUAAAMVUAADFiAAAxZwAAMWkAADFrAAAxcAAAMXIAADF0AAAxdgAAMZsAADG/AAAx5gAAMgoAADIMAAAyDgAAMhAAADISAAAyFAAAMhYAADIXAAAyGQAAMiYAADI3AAAyOQAAMjsAADI9AAAyPwAAMkEAADJDAAAyRQAAMkcAADJYAAAyWgAAMlwAADJeAAAyYAAAMmIAADJkAAAyZgAAMmgAADJqAAAyqQAAMqsAADKtAAAyrwAAMrEAADKyAAAyswAAMrQAADK1AAAytwAAMrkAADK6AAAyuwAAMr0AADK+AAAy/QAAMv8AADMBAAAzAwAAMwUAADMGAAAzBwAAMwgAADMJAAAzCwAAMw0AADMOAAAzDwAAMxEAADMSAAAzUQAAM1MAADNVAAAzVwAAM1kAADNaAAAzWwAAM1wAADNdAAAzXwAAM2EAADNiAAAzYwAAM2UAADNmAAAzcwAAM3QAADN1AAAzdwAAM7YAADO4AAAzugAAM7wAADO+AAAzvwAAM8AAADPBAAAzwgAAM8QAADPGAAAzxwAAM8gAADPKAAAzywAANAoAADQMAAA0DgAANBAAADQSAAA0EwAANBQAADQVAAA0FgAANBgAADQaAAA0GwAANBwAADQeAAA0HwAANF4AADRgAAA0YgAANGQAADRmAAA0ZwAANGgAADRpAAA0agAANGwAADRuAAA0bwAANHAAADRyAAA0cwAANLIAADS0AAA0tgAANLgAADS6AAA0uwAANLwAADS9AAA0vgAANMAAADTCAAA0wwAANMQAADTGAAA0xwAANQYAADUIAAA1CgAANQwAADUOAAA1DwAANRAAADURAAA1EgAANRQAADUWAAA1FwAANRgAADUaAAA1GwAANUAAADVkAAA1iwAANa8AADWxAAA1swAANbUAADW3AAA1uQAANbsAADW8AAA1vgAANcsAADXaAAA13AAANd4AADXgAAA14gAANeQAADXmAAA16AAANfcAADX5AAA1+wAANf0AADX/AAA2AQAANgMAADYFAAA2BwAANkYAADZIAAA2SgAANkwAADZOAAA2TwAANlAAADZRAAA2UgAANlQAADZWAAA2VwAANlgAADZaAAA2WwAANpoAADacAAA2ngAANqAAADaiAAA2owAANqQAADalAAA2pgAANqgAADaqAAA2qwAANqwAADauAAA2rwAANu4AADbwAAA28gAANvQAADb2AAA29wAANvgAADb5AAA2+gAANvwAADb+AAA2/wAANwAAADcCAAA3AwAAN0IAADdEAAA3RgAAN0gAADdKAAA3SwAAN0wAADdNAAA3TgAAN1AAADdSAAA3UwAAN1QAADdWAAA3VwAAN5YAADeYAAA3mgAAN5wAADeeAAA3nwAAN6AAADehAAA3ogAAN6QAADemAAA3pwAAN6gAADeqAAA3qwAAN+oAADfsAAA37gAAN/AAADfyAAA38wAAN/QAADf1AAA39gAAN/gAADf6AAA3+wAAN/wAADf+AAA3/wAAOD4AADhAAAA4QgAAOEQAADhGAAA4RwAAOEgAADhJAAA4SgAAOEwAADhOAAA4TwAAOFAAADhSAAA4UwAAOJ4AADjBAAA44QAAOQEAADkDAAA5BQAAOQcAADkJAAA5CwAAOQwAADkNAAA5DwAAORAAADkSAAA5EwAAORUAADkXAAA5GAAAORkAADkbAAA5HAAAOSEAADkuAAA5MwAAOTUAADk3AAA5PAAAOT4AADlAAAA5QgAAOWcAADmLAAA5sgAAOdYAADnYAAA52gAAOdwAADneAAA54AAAOeIAADnjAAA55QAAOfIAADoDAAA6BQAAOgcAADoJAAA6CwAAOg0AADoPAAA6EQAAOhMAADokAAA6JgAAOigAADoqAAA6LAAAOi4AADowAAA6MgAAOjQAADo2AAA6dQAAOncAADp5AAA6ewAAOn0AADp+AAA6fwAAOoAAADqBAAA6gwAAOoUAADqGAAA6hwAAOokAADqKAAA6yQAAOssAADrNAAA6zwAAOtEAADrSAAA60wAAOtQAADrVAAA61wAAOtkAADraAAA62wAAOt0AADreAAA7HQAAOx8AADshAAA7IwAAOyUAADsmAAA7JwAAOygAADspAAA7KwAAOy0AADsuAAA7LwAAOzEAADsyAAA7PwAAO0AAADtBAAA7QwAAO4IAADuEAAA7hgAAO4gAADuKAAA7iwAAO4wAADuNAAA7jgAAO5AAADuSAAA7kwAAO5QAADuWAAA7lwAAO9YAADvYAAA72gAAO9wAADveAAA73wAAO+AAADvhAAA74gAAO+QAADvmAAA75wAAO+gAADvqAAA76wAAPCoAADwsAAA8LgAAPDAAADwyAAA8MwAAPDQAADw1AAA8NgAAPDgAADw6AAA8OwAAPDwAADw+AAA8PwAAPH4AADyAAAA8ggAAPIQAADyGAAA8hwAAPIgAADyJAAA8igAAPIwAADyOAAA8jwAAPJAAADySAAA8kwAAPNIAADzUAAA81gAAPNgAADzaAAA82wAAPNwAADzdAAA83gAAPOAAADziAAA84wAAPOQAADzmAAA85wAAPQwAAD0wAAA9VwAAPXsAAD19AAA9fwAAPYEAAD2DAAA9hQAAPYcAAD2IAAA9igAAPZcAAD2mAAA9qAAAPaoAAD2sAAA9rgAAPbAAAD2yAAA9tAAAPcMAAD3FAAA9xwAAPckAAD3LAAA9zQAAPc8AAD3RAAA90wAAPhIAAD4UAAA+FgAAPhgAAD4aAAA+GwAAPhwAAD4dAAA+HgAAPiAAAD4iAAA+IwAAPiQAAD4mAAA+JwAAPioAAD5pAAA+awAAPm0AAD5vAAA+cQAAPnIAAD5zAAA+dAAAPnUAAD53AAA+eQAAPnoAAD57AAA+fQAAPn4AAD69AAA+vwAAPsEAAD7DAAA+xQAAPsYAAD7HAAA+yAAAPskAAD7LAAA+zQAAPs4AAD7PAAA+0QAAPtIAAD8RAAA/EwAAPxUAAD8XAAA/GQAAPxoAAD8bAAA/HAAAPx0AAD8fAAA/IQAAPyIAAD8jAAA/JQAAPyYAAD8pAAA/aAAAP2oAAD9sAAA/bgAAP3AAAD9xAAA/cgAAP3MAAD90AAA/dgAAP3gAAD95AAA/egAAP3wAAD99AAA/vAAAP74AAD/AAAA/wgAAP8QAAD/FAAA/xgAAP8cAAD/IAAA/ygAAP8wAAD/NAAA/zgAAP9AAAD/RAABAEAAAQBIAAEAUAABAFgAAQBgAAEAZAABAGgAAQBsAAEAcAABAHgAAQCAAAEAhAABAIgAAQCQAAEAlAABAcAAAQJMAAECzAABA0wAAQNUAAEDXAABA2QAAQNsAAEDdAABA3gAAQN8AAEDhAABA4gAAQOQAAEDlAABA5wAAQOkAAEDqAABA6wAAQO0AAEDuAABA8wAAQQAAAEEFAABBBwAAQQkAAEEOAABBEAAAQRIAAEEUAABBOQAAQV0AAEGEAABBqAAAQaoAAEGsAABBrgAAQbAAAEGyAABBtAAAQbUAAEG3AABBxAAAQdUAAEHXAABB2QAAQdsAAEHdAABB3wAAQeEAAEHjAABB5QAAQfYAAEH4AABB+gAAQfwAAEH+AABCAAAAQgIAAEIEAABCBgAAQggAAEJHAABCSQAAQksAAEJNAABCTwAAQlAAAEJRAABCUgAAQlMAAEJVAABCVwAAQlgAAEJZAABCWwAAQlwAAEKbAABCnQAAQp8AAEKhAABCowAAQqQAAEKlAABCpgAAQqcAAEKpAABCqwAAQqwAAEKtAABCrwAAQrAAAELvAABC8QAAQvMAAEL1AABC9wAAQvgAAEL5AABC+gAAQvsAAEL9AABC/wAAQwAAAEMBAABDAwAAQwQAAEMRAABDEgAAQxMAAEMVAABDVAAAQ1YAAENYAABDWgAAQ1wAAENdAABDXgAAQ18AAENgAABDYgAAQ2QAAENlAABDZgAAQ2gAAENpAABDqAAAQ6oAAEOsAABDrgAAQ7AAAEOxAABDsgAAQ7MAAEO0AABDtgAAQ7gAAEO5AABDugAAQ7wAAEO9AABD/AAAQ/4AAEQAAABEAgAARAQAAEQFAABEBgAARAcAAEQIAABECgAARAwAAEQNAABEDgAARBAAAEQRAABEUAAARFIAAERUAABEVgAARFgAAERZAABEWgAARFsAAERcAABEXgAARGAAAERhAABEYgAARGQAAERlAABEpAAARKYAAESoAABEqgAARKwAAEStAABErgAARK8AAESwAABEsgAARLQAAES1AABEtgAARLgAAES5AABE3gAARQIAAEUpAABFTQAARU8AAEVRAABFUwAARVUAAEVXAABFWQAARVoAAEVcAABFaQAARXgAAEV6AABFfAAARX4AAEWAAABFggAARYQAAEWGAABFlQAARZcAAEWZAABFmwAARZ0AAEWfAABFoQAARaMAAEWlAABF5AAAReYAAEXoAABF6gAARewAAEXtAABF7gAARe8AAEXwAABF8gAARfQAAEX1AABF9gAARfgAAEX5AABGOAAARjoAAEY8AABGPgAARkAAAEZBAABGQgAARkMAAEZEAABGRgAARkgAAEZJAABGSgAARkwAAEZNAABGjAAARo4AAEaQAABGkgAARpQAAEaVAABGlgAARpcAAEaYAABGmgAARpwAAEadAABGngAARqAAAEahAABG4AAARuIAAEbkAABG5gAARugAAEbpAABG6gAARusAAEbsAABG7gAARvAAAEbxAABG8gAARvQAAEb1AABG+AAARzcAAEc5AABHOwAARz0AAEc/AABHQAAAR0EAAEdCAABHQwAAR0UAAEdHAABHSAAAR0kAAEdLAABHTAAAR4sAAEeNAABHjwAAR5EAAEeTAABHlAAAR5UAAEeWAABHlwAAR5kAAEebAABHnAAAR50AAEefAABHoAAAR7wAAEf7AABH/QAAR/8AAEgBAABIAwAASAQAAEgFAABIBgAASAcAAEgJAABICwAASAwAAEgNAABIDwAASBAAAEhbAABIfgAASJ4AAEi+AABIwAAASMIAAEjEAABIxgAASMgAAEjJAABIygAASMwAAEjNAABIzwAASNAAAEjTAABI1QAASNYAAEjXAABI2QAASNoAAEjfAABI7AAASPEAAEjzAABI9QAASPoAAEj8AABI/gAASQAAAEklAABJSQAASXAAAEmUAABJlgAASZgAAEmaAABJnAAASZ4AAEmgAABJoQAASaMAAEmwAABJwQAAScMAAEnFAABJxwAASckAAEnLAABJzQAASc8AAEnRAABJ4gAASeQAAEnmAABJ6AAASeoAAEnsAABJ7gAASfAAAEnyAABJ9AAASjMAAEo1AABKNwAASjkAAEo7AABKPAAASj0AAEo+AABKPwAASkEAAEpDAABKRAAASkUAAEpHAABKSAAASocAAEqJAABKiwAASo0AAEqPAABKkAAASpEAAEqSAABKkwAASpUAAEqXAABKmAAASpkAAEqbAABKnAAAStsAAErdAABK3wAASuEAAErjAABK5AAASuUAAErmAABK5wAASukAAErrAABK7AAASu0AAErvAABK8AAASv0AAEr+AABK/wAASwEAAEtAAABLQgAAS0QAAEtGAABLSAAAS0kAAEtKAABLSwAAS0wAAEtOAABLUAAAS1EAAEtSAABLVAAAS1UAAEuUAABLlgAAS5gAAEuaAABLnAAAS50AAEueAABLnwAAS6AAAEuiAABLpAAAS6UAAEumAABLqAAAS6kAAEvoAABL6gAAS+wAAEvuAABL8AAAS/EAAEvyAABL8wAAS/QAAEv2AABL+AAAS/kAAEv6AABL/AAAS/0AAEw8AABMPgAATEAAAExCAABMRAAATEUAAExGAABMRwAATEgAAExKAABMTAAATE0AAExOAABMUAAATFEAAEyQAABMkgAATJQAAEyWAABMmAAATJkAAEyaAABMmwAATJwAAEyeAABMoAAATKEAAEyiAABMpAAATKUAAEzKAABM7gAATRUAAE05AABNOwAATT0AAE0/AABNQQAATUMAAE1FAABNRgAATUkAAE1WAABNZQAATWcAAE1pAABNawAATW0AAE1vAABNcQAATXMAAE2CAABNhQAATYgAAE2LAABNjgAATZEAAE2UAABNlwAATZkAAE3YAABN2gAATdwAAE3eAABN4AAATeEAAE3iAABN4wAATeQAAE3mAABN6AAATekAAE3qAABN7AAATe0AAE4sAABOLgAATjEAAE4zAABONQAATjYAAE43AABOOAAATjkAAE47AABOPQAATj4AAE4/AABOQQAATkIAAE5EAABOgwAAToUAAE6HAABOiQAATosAAE6MAABOjQAATo4AAE6PAABOkQAATpMAAE6UAABOlQAATpcAAE6YAABO1wAATtkAAE7bAABO3QAATt8AAE7gAABO4QAATuIAAE7jAABO5QAATucAAE7oAABO6QAATusAAE7sAABPKwAATy0AAE8vAABPMQAATzMAAE80AABPNQAATzYAAE83AABPOQAATzsAAE88AABPPQAATz8AAE9AAABPfwAAT4EAAE+DAABPhQAAT4cAAE+IAABPiQAAT4oAAE+LAABPjQAAT48AAE+QAABPkQAAT5MAAE+UAABP0wAAT9UAAE/XAABP2QAAT9sAAE/cAABP3QAAT94AAE/fAABP4QAAT+MAAE/kAABP5QAAT+cAAE/oAABP8QAAUAQAAFARAABQJAAAUDEAAFBEAABQWwAAUG0AAFC4AABQ2wAAUPsAAFEbAABRHQAAUR8AAFEhAABRIwAAUSUAAFEmAABRJwAAUSoAAFErAABRLQAAUS4AAFEwAABRMgAAUTMAAFE0AABRNwAAUTgAAFE9AABRSgAAUU8AAFFRAABRUwAAUVgAAFFbAABRXgAAUWAAAFGFAABRqQAAUdAAAFH0AABR9wAAUfkAAFH7AABR/QAAUf8AAFIBAABSAgAAUgUAAFISAABSIwAAUiUAAFInAABSKQAAUisAAFItAABSLwAAUjEAAFIzAABSRAAAUkcAAFJKAABSTQAAUlAAAFJTAABSVgAAUlkAAFJcAABSXgAAUp0AAFKfAABSoQAAUqMAAFKmAABSpwAAUqgAAFKpAABSqgAAUqwAAFKuAABSrwAAUrAAAFKyAABSswAAUvIAAFL0AABS9gAAUvgAAFL7AABS/AAAUv0AAFL+AABS/wAAUwEAAFMDAABTBAAAUwUAAFMHAABTCAAAU0cAAFNJAABTTAAAU04AAFNRAABTUgAAU1MAAFNUAABTVQAAU1cAAFNZAABTWgAAU1sAAFNdAABTXgAAU2sAAFNsAABTbQAAU28AAFOuAABTsAAAU7IAAFO0AABTtwAAU7gAAFO5AABTugAAU7sAAFO9AABTvwAAU8AAAFPBAABTwwAAU8QAAFQDAABUBQAAVAcAAFQJAABUDAAAVA0AAFQOAABUDwAAVBAAAFQSAABUFAAAVBUAAFQWAABUGAAAVBkAAFRYAABUWgAAVFwAAFReAABUYQAAVGIAAFRjAABUZAAAVGUAAFRnAABUaQAAVGoAAFRrAABUbQAAVG4AAFStAABUrwAAVLEAAFSzAABUtgAAVLcAAFS4AABUuQAAVLoAAFS8AABUvgAAVL8AAFTAAABUwgAAVMMAAFUCAABVBAAAVQYAAFUIAABVCwAAVQwAAFUNAABVDgAAVQ8AAFURAABVEwAAVRQAAFUVAABVFwAAVRgAAFU9AABVYQAAVYgAAFWsAABVrwAAVbEAAFWzAABVtQAAVbcAAFW5AABVugAAVb0AAFXKAABV2QAAVdsAAFXdAABV3wAAVeEAAFXjAABV5QAAVecAAFX2AABV+QAAVfwAAFX/AABWAgAAVgUAAFYIAABWCwAAVg0AAFZMAABWTgAAVlAAAFZSAABWVQAAVlYAAFZXAABWWAAAVlkAAFZbAABWXQAAVl4AAFZfAABWYQAAVmIAAFahAABWowAAVqUAAFanAABWqgAAVqsAAFasAABWrQAAVq4AAFawAABWsgAAVrMAAFa0AABWtgAAVrcAAFb2AABW+AAAVvoAAFb8AABW/wAAVwAAAFcBAABXAgAAVwMAAFcFAABXBwAAVwgAAFcJAABXCwAAVwwAAFdLAABXTQAAV08AAFdRAABXVAAAV1UAAFdWAABXVwAAV1gAAFdaAABXXAAAV10AAFdeAABXYAAAV2EAAFegAABXogAAV6QAAFemAABXqQAAV6oAAFerAABXrAAAV60AAFevAABXsQAAV7IAAFezAABXtQAAV7YAAFf1AABX9wAAV/kAAFf7AABX/gAAV/8AAFgAAABYAQAAWAIAAFgEAABYBgAAWAcAAFgIAABYCgAAWAsAAFhKAABYTAAAWE4AAFhQAABYUwAAWFQAAFhVAABYVgAAWFcAAFhZAABYWwAAWFwAAFhdAABYXwAAWGAAAFirAABYzgAAWO4AAFkOAABZEAAAWRIAAFkUAABZFgAAWRgAAFkZAABZGgAAWR0AAFkeAABZIAAAWSEAAFkjAABZJQAAWSYAAFknAABZKgAAWSsAAFkwAABZPQAAWUIAAFlEAABZRgAAWUsAAFlOAABZUQAAWVMAAFl4AABZnAAAWcMAAFnnAABZ6gAAWewAAFnuAABZ8AAAWfIAAFn0AABZ9QAAWfgAAFoFAABaFgAAWhgAAFoaAABaHAAAWh4AAFogAABaIgAAWiQAAFomAABaNwAAWjoAAFo9AABaQAAAWkMAAFpGAABaSQAAWkwAAFpPAABaUQAAWpAAAFqSAABalAAAWpYAAFqZAABamgAAWpsAAFqcAABanQAAWp8AAFqhAABaogAAWqMAAFqlAABapgAAWuUAAFrnAABa6QAAWusAAFruAABa7wAAWvAAAFrxAABa8gAAWvQAAFr2AABa9wAAWvgAAFr6AABa+wAAWzoAAFs8AABbPwAAW0EAAFtEAABbRQAAW0YAAFtHAABbSAAAW0oAAFtMAABbTQAAW04AAFtQAABbUQAAW14AAFtfAABbYAAAW2IAAFuhAABbowAAW6UAAFunAABbqgAAW6sAAFusAABbrQAAW64AAFuwAABbsgAAW7MAAFu0AABbtgAAW7cAAFv2AABb+AAAW/oAAFv8AABb/wAAXAAAAFwBAABcAgAAXAMAAFwFAABcBwAAXAgAAFwJAABcCwAAXAwAAFxLAABcTQAAXE8AAFxRAABcVAAAXFUAAFxWAABcVwAAXFgAAFxaAABcXAAAXF0AAFxeAABcYAAAXGEAAFygAABcogAAXKQAAFymAABcqQAAXKoAAFyrAABcrAAAXK0AAFyvAABcsQAAXLIAAFyzAABctQAAXLYAAFz1AABc9wAAXPkAAFz7AABc/gAAXP8AAF0AAABdAQAAXQIAAF0EAABdBgAAXQcAAF0IAABdCgAAXQsAAF0wAABdVAAAXXsAAF2fAABdogAAXaQAAF2mAABdqAAAXaoAAF2sAABdrQAAXbAAAF29AABdzAAAXc4AAF3QAABd0gAAXdQAAF3WAABd2AAAXdoAAF3pAABd7AAAXe8AAF3yAABd9QAAXfgAAF37AABd/gAAXgAAAF4/AABeQQAAXkMAAF5FAABeSAAAXkkAAF5KAABeSwAAXkwAAF5OAABeUAAAXlEAAF5SAABeVAAAXlUAAF6UAABelgAAXpgAAF6aAABenQAAXp4AAF6fAABeoAAAXqEAAF6jAABepQAAXqYAAF6nAABeqQAAXqoAAF7pAABe6wAAXu0AAF7vAABe8gAAXvMAAF70AABe9QAAXvYAAF74AABe+gAAXvsAAF78AABe/gAAXv8AAF8+AABfQAAAX0IAAF9EAABfRwAAX0gAAF9JAABfSgAAX0sAAF9NAABfTwAAX1AAAF9RAABfUwAAX1QAAF+TAABflQAAX5cAAF+ZAABfnAAAX50AAF+eAABfnwAAX6AAAF+iAABfpAAAX6UAAF+mAABfqAAAX6kAAF/oAABf6gAAX+wAAF/uAABf8QAAX/IAAF/zAABf9AAAX/UAAF/3AABf+QAAX/oAAF/7AABf/QAAX/4AAGA9AABgPwAAYEEAAGBDAABgRgAAYEcAAGBIAABgSQAAYEoAAGBMAABgTgAAYE8AAGBQAABgUgAAYFMAAGCeAABgwQAAYOEAAGEBAABhAwAAYQUAAGEHAABhCQAAYQsAAGEMAABhDQAAYRAAAGERAABhEwAAYRQAAGEWAABhGAAAYRkAAGEaAABhHQAAYR4AAGEjAABhMAAAYTUAAGE3AABhOQAAYT4AAGFBAABhRAAAYUYAAGFrAABhjwAAYbYAAGHaAABh3QAAYd8AAGHhAABh4wAAYeUAAGHnAABh6AAAYesAAGH4AABiCQAAYgsAAGINAABiDwAAYhEAAGITAABiFQAAYhcAAGIZAABiKgAAYi0AAGIwAABiMwAAYjYAAGI5AABiPAAAYj8AAGJCAABiRAAAYoMAAGKFAABihwAAYokAAGKMAABijQAAYo4AAGKPAABikAAAYpIAAGKUAABilQAAYpYAAGKYAABimQAAYtgAAGLaAABi3AAAYt4AAGLhAABi4gAAYuMAAGLkAABi5QAAYucAAGLpAABi6gAAYusAAGLtAABi7gAAYy0AAGMvAABjMgAAYzQAAGM3AABjOAAAYzkAAGM6AABjOwAAYz0AAGM/AABjQAAAY0EAAGNDAABjRAAAY1EAAGNSAABjUwAAY1UAAGOUAABjlgAAY5gAAGOaAABjnQAAY54AAGOfAABjoAAAY6EAAGOjAABjpQAAY6YAAGOnAABjqQAAY6oAAGPpAABj6wAAY+0AAGPvAABj8gAAY/MAAGP0AABj9QAAY/YAAGP4AABj+gAAY/sAAGP8AABj/gAAY/8AAGQ+AABkQAAAZEIAAGREAABkRwAAZEgAAGRJAABkSgAAZEsAAGRNAABkTwAAZFAAAGRRAABkUwAAZFQAAGSTAABklQAAZJcAAGSZAABknAAAZJ0AAGSeAABknwAAZKAAAGSiAABkpAAAZKUAAGSmAABkqAAAZKkAAGToAABk6gAAZOwAAGTuAABk8QAAZPIAAGTzAABk9AAAZPUAAGT3AABk+QAAZPoAAGT7AABk/QAAZP4AAGUjAABlRwAAZW4AAGWSAABllQAAZZcAAGWZAABlmwAAZZ0AAGWfAABloAAAZaMAAGWwAABlvwAAZcEAAGXDAABlxQAAZccAAGXJAABlywAAZc0AAGXcAABl3wAAZeIAAGXlAABl6AAAZesAAGXuAABl8QAAZfMAAGYyAABmNAAAZjYAAGY4AABmOwAAZjwAAGY9AABmPgAAZj8AAGZBAABmQwAAZkQAAGZFAABmRwAAZkgAAGaHAABmiQAAZosAAGaNAABmkAAAZpEAAGaSAABmkwAAZpQAAGaWAABmmAAAZpkAAGaaAABmnAAAZp0AAGbcAABm3gAAZuAAAGbiAABm5QAAZuYAAGbnAABm6AAAZukAAGbrAABm7QAAZu4AAGbvAABm8QAAZvIAAGcxAABnMwAAZzUAAGc3AABnOgAAZzsAAGc8AABnPQAAZz4AAGdAAABnQgAAZ0MAAGdEAABnRgAAZ0cAAGeGAABniAAAZ4oAAGeMAABnjwAAZ5AAAGeRAABnkgAAZ5MAAGeVAABnlwAAZ5gAAGeZAABnmwAAZ5wAAGfbAABn3QAAZ+AAAGfiAABn5QAAZ+YAAGfnAABn6AAAZ+kAAGfrAABn7QAAZ+4AAGfvAABn8QAAZ/IAAGgOAABoTQAAaE8AAGhRAABoUwAAaFYAAGhXAABoWAAAaFkAAGhaAABoXAAAaF4AAGhfAABoYAAAaGIAAGhjAABorgAAaNEAAGjxAABpEQAAaRMAAGkVAABpFwAAaRkAAGkbAABpHAAAaR0AAGkgAABpIQAAaSMAAGkkAABpJgAAaSgAAGkpAABpKgAAaS0AAGkuAABpNwAAaUQAAGlJAABpSwAAaU0AAGlSAABpVQAAaVgAAGlaAABpfwAAaaMAAGnKAABp7gAAafEAAGnzAABp9QAAafcAAGn5AABp+wAAafwAAGn/AABqDAAAah0AAGofAABqIQAAaiMAAGolAABqJwAAaikAAGorAABqLQAAaj4AAGpBAABqRAAAakcAAGpKAABqTQAAalAAAGpTAABqVgAAalgAAGqXAABqmQAAapsAAGqdAABqoAAAaqEAAGqiAABqowAAaqQAAGqmAABqqAAAaqkAAGqqAABqrAAAaq0AAGrsAABq7gAAavAAAGryAABq9QAAavYAAGr3AABq+AAAavkAAGr7AABq/QAAav4AAGr/AABrAQAAawIAAGtBAABrQwAAa0YAAGtIAABrSwAAa0wAAGtNAABrTgAAa08AAGtRAABrUwAAa1QAAGtVAABrVwAAa1gAAGtlAABrZgAAa2cAAGtpAABrqAAAa6oAAGusAABrrgAAa7EAAGuyAABrswAAa7QAAGu1AABrtwAAa7kAAGu6AABruwAAa70AAGu+AABr/QAAa/8AAGwBAABsAwAAbAYAAGwHAABsCAAAbAkAAGwKAABsDAAAbA4AAGwPAABsEAAAbBIAAGwTAABsUgAAbFQAAGxWAABsWAAAbFsAAGxcAABsXQAAbF4AAGxfAABsYQAAbGMAAGxkAABsZQAAbGcAAGxoAABspwAAbKkAAGyrAABsrQAAbLAAAGyxAABssgAAbLMAAGy0AABstgAAbLgAAGy5AABsugAAbLwAAGy9AABs/AAAbP4AAG0AAABtAgAAbQUAAG0GAABtBwAAbQgAAG0JAABtCwAAbQ0AAG0OAABtDwAAbREAAG0SAABtNwAAbVsAAG2CAABtpgAAbakAAG2rAABtrQAAba8AAG2xAABtswAAbbQAAG23AABtxAAAbdMAAG3VAABt1wAAbdkAAG3bAABt3QAAbd8AAG3hAABt8AAAbfMAAG32AABt+QAAbfwAAG3/AABuAgAAbgUAAG4HAABuRgAAbkgAAG5KAABuTAAAbk8AAG5QAABuUQAAblIAAG5TAABuVQAAblcAAG5YAABuWQAAblsAAG5cAABumwAAbp0AAG6fAABuoQAAbqQAAG6lAABupgAAbqcAAG6oAABuqgAAbqwAAG6tAABurgAAbrAAAG6xAABu8AAAbvIAAG70AABu9gAAbvkAAG76AABu+wAAbvwAAG79AABu/wAAbwEAAG8CAABvAwAAbwUAAG8GAABvRQAAb0cAAG9JAABvSwAAb04AAG9PAABvUAAAb1EAAG9SAABvVAAAb1YAAG9XAABvWAAAb1oAAG9bAABvmgAAb5wAAG+eAABvoAAAb6MAAG+kAABvpQAAb6YAAG+nAABvqQAAb6sAAG+sAABvrQAAb68AAG+wAABv7wAAb/EAAG/zAABv9QAAb/gAAG/5AABv+gAAb/sAAG/8AABv/gAAcAAAAHABAABwAgAAcAQAAHAFAABwRAAAcEYAAHBIAABwSgAAcE0AAHBOAABwTwAAcFAAAHBRAABwUwAAcFUAAHBWAABwVwAAcFkAAHBaAABwpQAAcMgAAHDoAABxCAAAcQoAAHEMAABxDgAAcRAAAHESAABxEwAAcRQAAHEXAABxGAAAcRoAAHEbAABxHQAAcR8AAHEgAABxIQAAcSQAAHElAABxKgAAcTcAAHE8AABxPgAAcUAAAHFFAABxSAAAcUsAAHFNAABxcgAAcZYAAHG9AABx4QAAceQAAHHmAABx6AAAceoAAHHsAABx7gAAce8AAHHyAABx/wAAchAAAHISAAByFAAAchYAAHIYAAByGgAAchwAAHIeAAByIAAAcjEAAHI0AAByNwAAcjoAAHI9AAByQAAAckMAAHJGAABySQAAcksAAHKKAAByjAAAco4AAHKQAABykwAAcpQAAHKVAABylgAAcpcAAHKZAABymwAAcpwAAHKdAABynwAAcqAAAHLfAABy4QAAcuMAAHLlAABy6AAAcukAAHLqAABy6wAAcuwAAHLuAABy8AAAcvEAAHLyAABy9AAAcvUAAHM0AABzNgAAczkAAHM7AABzPgAAcz8AAHNAAABzQQAAc0IAAHNEAABzRgAAc0cAAHNIAABzSgAAc0sAAHNYAABzWQAAc1oAAHNcAABzmwAAc50AAHOfAABzoQAAc6QAAHOlAABzpgAAc6cAAHOoAABzqgAAc6wAAHOtAABzrgAAc7AAAHOxAABz8AAAc/IAAHP0AABz9gAAc/kAAHP6AABz+wAAc/wAAHP9AABz/wAAdAEAAHQCAAB0AwAAdAUAAHQGAAB0RQA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AlwMAAJcGAACXBwAAlwgAAJcJAACXCgAAlwwAAJcOAACXDwAAlxAAAJcSAACXEwAAl1IAAJdUAACXVgAAl1gAAJdbAACXXAAAl10AAJdeAACXXwAAl2EAAJdjAACXZAAAl2UAAJdnAACXaAAAl6cAAJepAACXrAAAl64AAJexAACXsgAAl7MAAJe0AACXtQAAl7cAAJe5AACXugAAl7sAAJe9AACXvgAAl8sAAJfMAACXzQAAl88AAJgOAACYEAAAmBIAAJgUAACYFwAAmBgAAJgZAACYGgAAmBsAAJgdAACYHwAAmCAAAJghAACYIwAAmCQAAJhjAACYZQAAmGcAAJhpAACYbAAAmG0AAJhuAACYbwAAmHAAAJhyAACYdAAAmHUAAJh2AACYeAAAmHkAAJi4AACYugAAmLwAAJi+AACYwQAAmMIAAJjDAACYxAAAmMUAAJjHAACYyQAAmMoAAJjLAACYzQAAmM4AAJkNAACZDwAAmREAAJkTAACZFgAAmRcAAJkYAACZGQAAmRoAAJkcAACZHgAAmR8AAJkgAACZIgAAmSMAAJliAACZZAAAmWYAAJloAACZawAAmWwAAJltAACZbgAAmW8AAJlxAACZcwAAmXQAAJl1AACZdwAAmXgAAJmdAACZwQAAmegAAJoMAACaDwAAmhEAAJoTAACaFQAAmhcAAJoZAACaGgAAmh0AAJoqAACaOQAAmjsAAJo9AACaPwAAmkEAAJpDAACaRQAAmkcAAJpWAACaWQAAmlwAAJpfAACaYgAAmmUAAJpoAACaawAAmm0AAJqsAACargAAmrAAAJqyAACatQAAmrYAAJq3AACauAAAmrkAAJq7AACavQAAmr4AAJq/AACawQAAmsIAAJsBAACbAwAAmwUAAJsHAACbCgAAmwsAAJsMAACbDQAAmw4AAJsQAACbEgAAmxMAAJsUAACbFgAAmxcAAJtWAACbWAAAm1oAAJtcAACbXwAAm2AAAJthAACbYgAAm2MAAJtlAACbZwAAm2gAAJtpAACbawAAm2wAAJurAACbrQAAm68AAJuxAACbtAAAm7UAAJu2AACbtwAAm7gAAJu6AACbvAAAm70AAJu+AACbwAAAm8EAAJwAAACcAgAAnAQAAJwGAACcCQAAnAoAAJwLAACcDAAAnA0AAJwPAACcEQAAnBIAAJwTAACcFQAAnBYAAJxVAACcVwAAnFkAAJxbAACcXgAAnF8AAJxgAACcYQAAnGIAAJxkAACcZgAAnGcAAJxoAACcagAAnGsAAJyqAACcrAAAnK4AAJywAACcswAAnLQAAJy1AACctgAAnLcAAJy5AACcuwAAnLwAAJy9AACcvwAAnMAAAJ0LAACdLgAAnU4AAJ1uAACdcAAAnXIAAJ10AACddgAAnXkAAJ16AACdewAAnX4AAJ1/AACdgQAAnYIAAJ2EAACdhwAAnYgAAJ2JAACdjAAAnY0AAJ2SAACdnwAAnaQAAJ2mAACdqAAAna0AAJ2wAACdswAAnbUAAJ3aAACd/gAAniUAAJ5JAACeTAAAnk4AAJ5QAACeUgAAnlQAAJ5WAACeVwAAnloAAJ5nAACeeAAAnnoAAJ58AACefgAAnoAAAJ6CAACehAAAnoYAAJ6IAACemQAAnpwAAJ6fAACeogAAnqUAAJ6oAACeqwAAnq4AAJ6xAACeswAAnvIAAJ70AACe9gAAnvgAAJ77AACe/AAAnv0AAJ7+AACe/wAAnwEAAJ8DAACfBAAAnwUAAJ8HAACfCAAAn0cAAJ9JAACfSwAAn00AAJ9QAACfUQAAn1IAAJ9TAACfVAAAn1YAAJ9YAACfWQAAn1oAAJ9cAACfXQAAn5wAAJ+eAACfoQAAn6MAAJ+mAACfpwAAn6gAAJ+pAACfqgAAn6wAAJ+uAACfrwAAn7AAAJ+yAACfswAAn8AAAJ/BAACfwgAAn8QAAKADAACgBQAAoAcAAKAJAACgDAAAoA0AAKAOAACgDwAAoBAAAKASAACgFAAAoBUAAKAWAACgGAAAoBkAAKBYAACgWgAAoFwAAKBeAACgYQAAoGIAAKBjAACgZAAAoGUAAKBnAACgaQAAoGoAAKBrAACgbQAAoG4AAKCtAACgrwAAoLEAAKCzAACgtgAAoLcAAKC4AACguQAAoLoAAKC8AACgvgAAoL8AAKDAAACgwgAAoMMAAKECAAChBAAAoQYAAKEIAAChCwAAoQwAAKENAAChDgAAoQ8AAKERAAChEwAAoRQAAKEVAAChFwAAoRgAAKFXAAChWQAAoVsAAKFdAAChYAAAoWEAAKFiAAChYwAAoWQAAKFmAAChaAAAoWkAAKFqAAChbAAAoW0AAKGSAAChtgAAod0AAKIBAACiBAAAogYAAKIIAACiCgAAogwAAKIOAACiDwAAohIAAKIfAACiLgAAojAAAKIyAACiNAAAojYAAKI4AACiOgAAojwAAKJLAACiTgAAolEAAKJUAACiVwAAoloAAKJdAACiYAAAomIAAKKhAACiowAAoqUAAKKnAACiqgAAoqsAAKKsAACirQAAoq4AAKKwAACisgAAorMAAKK0AACitgAAorcAAKL2AACi+AAAovoAAKL8AACi/wAAowAAAKMBAACjAgAAowMAAKMFAACjBwAAowgAAKMJAACjCwAAowwAAKNLAACjTQAAo08AAKNRAACjVAAAo1UAAKNWAACjVwAAo1gAAKNaAACjXAAAo10AAKNeAACjYAAAo2EAAKOgAACjogAAo6QAAKOmAACjqQAAo6oAAKOrAACjrAAAo60AAKOvAACjsQAAo7IAAKOzAACjtQAAo7YAAKP1AACj9wAAo/kAAKP7AACj/gAAo/8AAKQAAACkAQAApAIAAKQEAACkBgAApAcAAKQIAACkCgAApAsAAKRKAACkTAAApE4AAKRQAACkUwAApFQAAKRVAACkVgAApFcAAKRZAACkWwAApFwAAKRdAACkXwAApGAAAKSfAACkoQAApKMAAKSlAACkqAAApKkAAKSqAACkqwAApKwAAKSuAACksAAApLEAAKSyAACktAAApLUAAKUAAAClIwAApUMAAKVjAAClZQAApWcAAKVpAAClawAApW4AAKVvAAClcAAApXMAAKV0AACldgAApXcAAKV5AAClfAAApX0AAKV+AAClgQAApYIAAKWHAACllAAApZkAAKWbAAClnQAApaIAAKWlAAClqAAApaoAAKXPAACl8wAAphoAAKY+AACmQQAApkMAAKZFAACmRwAApkkAAKZLAACmTAAApk8AAKZcAACmbQAApm8AAKZxAACmcwAApnUAAKZ3AACmeQAApnsAAKZ9AACmjgAAppEAAKaUAACmlwAAppoAAKadAACmoAAApqMAAKamAACmqAAApucAAKbpAACm6wAApu0AAKbwAACm8QAApvIAAKbzAACm9AAApvYAAKb4AACm+QAApvoAAKb8AACm/QAApzwAAKc+AACnQAAAp0IAAKdFAACnRgAAp0cAAKdIAACnSQAAp0sAAKdNAACnTgAAp08AAKdRAACnUgAAp5EAAKeTAACnlgAAp5gAAKebAACnnAAAp50AAKeeAACnnwAAp6EAAKejAACnpAAAp6UAAKenAACnqAAAp7UAAKe2AACntwAAp7kAAKf4AACn+gAAp/wAAKf+AACoAQAAqAIAAKgDAACoBAAAqAUAAKgHAACoCQAAqAoAAKgLAACoDQAAqA4AAKhNAACoTwAAqFEAAKhTAACoVgAAqFcAAKhYAACoWQAAqFoAAKhcAACoXgAAqF8AAKhgAACoYgAAqGMAAKiiAACopAAAqKYAAKioAACoqwAAqKwAAKitAACorgAAqK8AAKixAACoswAAqLQAAKi1AACotwAAqLgAAKj3AACo+QAAqPsAAKj9AACpAAAAqQEAAKkCAACpAwAAqQQAAKkGAACpCAAAqQkAAKkKAACpDAAAqQ0AAKlMAACpTgAAqVAAAKlSAACpVQAAqVYAAKlXAACpWAAAqVkAAKlbAACpXQAAqV4AAKlfAACpYQAAqWIAAKmHAACpqwAAqdIAAKn2AACp+QAAqfsAAKn9AACp/wAAqgEAAKoDAACqBAAAqgcAAKoUAACqIwAAqiUAAKonAACqKQAAqisAAKotAACqLwAAqjEAAKpAAACqQwAAqkYAAKpJAACqTAAAqk8AAKpSAACqVQAAqlcAAKqWAACqmAAAqpoAAKqcAACqnwAAqqAAAKqhAACqogAAqqMAAKqlAACqpwAAqqgAAKqpAACqqwAAqqwAAKrrAACq7QAAqu8AAKrxAACq9AAAqvUAAKr2AACq9wAAqvgAAKr6AACq/AAAqv0AAKr+AACrAAAAqwEAAKtAAACrQgAAq0QAAKtGAACrSQAAq0oAAKtLAACrTAAAq00AAKtPAACrUQAAq1IAAKtTAACrVQAAq1YAAKuVAACrlwAAq5kAAKubAACrngAAq58AAKugAACroQAAq6IAAKukAACrpgAAq6cAAKuoAACrqgAAq6sAAKvqAACr7AAAq+4AAKvwAACr8wAAq/QAAKv1AACr9gAAq/cAAKv5AACr+wAAq/wAAKv9AACr/wAArAAAAKw/AACsQQAArEMAAKxFAACsSAAArEkAAKxKAACsSwAArEwAAKxOAACsUAAArFEAAKxSAACsVAAArFUAAKyUAACslgAArJgAAKyaAACsnQAArJ4AAKyfAACsoAAArKEAAKyjAACspQAArKYAAKynAACsqQAArKoAAKz1AACtGAAArTgAAK1YAACtWgAArVwAAK1eAACtYAAArWMAAK1kAACtZQAArWgAAK1pAACtawAArWwAAK1uAACtcQAArXIAAK1zAACtdgAArXcAAK2AAACtjQAArZIAAK2UAACtlgAArZsAAK2eAACtoQAAraMAAK3IAACt7AAArhMAAK43AACuOgAArjwAAK4+AACuQAAArkIAAK5EAACuRQAArkgAAK5VAACuZgAArmgAAK5qAACubAAArm4AAK5wAACucgAArnQAAK52AACuhwAArooAAK6NAACukAAArpMAAK6WAACumQAArpwAAK6fAACuoQAAruAAAK7iAACu5AAAruYAAK7pAACu6gAArusAAK7sAACu7QAAru8AAK7xAACu8gAArvMAAK71AACu9gAArzUAAK83AACvOQAArzsAAK8+AACvPwAAr0AAAK9BAACvQgAAr0QAAK9GAACvRwAAr0gAAK9KAACvSwAAr4oAAK+MAACvjwAAr5EAAK+UAACvlQAAr5YAAK+XAACvmAAAr5oAAK+cAACvnQAAr54AAK+gAACvoQAAr64AAK+vAACvsAAAr7IAAK/xAACv8wAAr/UAAK/3AACv+gAAr/sAAK/8AACv/QAAr/4AALAAAACwAgAAsAMAALAEAACwBgAAsAcAALBGAACwSAAAsEoAALBMAACwTwAAsFAAALBRAACwUgAAsFMAALBVAACwVwAAsFgAALBZAACwWwAAsFwAALCbAACwnQAAsJ8AALChAACwpAAAsKUAALCmAACwpwAAsKgAALCqAACwrAAAsK0AALCuAACwsAAAsLEAALDwAACw8gAAsPQAALD2AACw+QAAsPoAALD7AACw/AAAsP0AALD/AACxAQAAsQIAALEDAACxBQAAsQYAALFFAACxRwAAsUkAALFLAACxTgAAsU8AALFQAACxUQAAsVIAALFUAACxVgAAsVcAALFYAACxWgAAsVsAALGAAACxpAAAscsAALHvAACx8gAAsfQAALH2AACx+AAAsfoAALH8AACx/QAAsgAAALINAACyHAAAsh4AALIgAACyIgAAsiQAALImAACyKAAAsioAALI5AACyPAAAsj8AALJCAACyRQAAskgAALJLAACyTgAAslAAALKPAACykQAAspMAALKVAACymAAAspkAALKaAACymwAAspwAALKeAACyoAAAsqEAALKiAACypAAAsqUAALLkAACy5gAAsugAALLqAACy7QAAsu4AALLvAACy8AAAsvEAALLzAACy9QAAsvYAALL3AACy+QAAsvoAALM5AACzOwAAsz0AALM/AACzQgAAs0MAALNEAACzRQAAs0YAALNIAACzSgAAs0sAALNMAACzTgAAs08AALOOAACzkAAAs5IAALOUAACzlwAAs5gAALOZAACzmgAAs5sAALOdAACznwAAs6AAALOhAACzowAAs6QAALPjAACz5QAAs+cAALPpAACz7AAAs+0AALPuAACz7wAAs/AAALPyAACz9AAAs/UAALP2AACz+AAAs/kAALQ4AAC0OgAAtDwAALQ+AAC0QQAAtEIAALRDAAC0RAAAtEUAALRHAAC0SQAAtEoAALRLAAC0TQAAtE4AALSNAAC0jwAAtJEAALSTAAC0lgAAtJcAALSYAAC0mQAAtJoAALScAAC0ngAAtJ8AALSgAAC0ogAAtKMAALTuAAC1EQAAtTEAALVRAAC1UwAAtVUAALVXAAC1WQAAtVwAALVdAAC1XgAAtWEAALViAAC1ZAAAtWUAALVnAAC1aQAAtWoAALVrAAC1bgAAtW8AALV4AAC1hQAAtYoAALWMAAC1jgAAtZMAALWWAAC1mQAAtZsAALXAAAC15AAAtgsAALYvAAC2MgAAtjQAALY2AAC2OAAAtjoAALY8AAC2PQAAtkAAALZNAAC2XgAAtmAAALZiAAC2ZAAAtmYAALZoAAC2agAAtmwAALZuAAC2fwAAtoIAALaFAAC2iAAAtosAALaOAAC2kQAAtpQAALaXAAC2mQAAttgAALbaAAC23AAAtt4AALbhAAC24gAAtuMAALbkAAC25QAAtucAALbpAAC26gAAtusAALbtAAC27gAAty0AALcvAAC3MQAAtzMAALc2AAC3NwAAtzgAALc5AAC3OgAAtzwAALc+AAC3PwAAt0AAALdCAAC3QwAAt4IAALeEAAC3hwAAt4kAALeMAAC3jQAAt44AALePAAC3kAAAt5IAALeUAAC3lQAAt5YAALeYAAC3mQAAt6YAALenAAC3qAAAt6oAALfpAAC36wAAt+0AALfvAAC38gAAt/MAALf0AAC39QAAt/YAALf4AAC3+gAAt/sAALf8AAC3/gAAt/8AALg+AAC4QAAAuEIAALhEAAC4RwA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AySQAAMljAADJZQAAyWcAAMlpAADJbAAAyW0AAMluAADJbwAAyXAAAMlyAADJdAAAyXUAAMl2AADJeAAAyXkAAMm4AADJugAAyb0AAMm/AADJwgAAycMAAMnEAADJxQAAycYAAMnIAADJygAAycsAAMnMAADJzgAAyc8AAMncAADJ3QAAyd4AAMngAADKHwAAyiEAAMojAADKJQAAyigAAMopAADKKgAAyisAAMosAADKLgAAyjAAAMoxAADKMgAAyjQAAMo1AADKdAAAynYAAMp4AADKegAAyn0AAMp+AADKfwAAyoAAAMqBAADKgwAAyoUAAMqGAADKhwAAyokAAMqKAADKyQAAyssAAMrNAADKzwAAytIAAMrTAADK1AAAytUAAMrWAADK2AAAytoAAMrbAADK3AAAyt4AAMrfAADLHgAAyyAAAMsiAADLJAAAyycAAMsoAADLKQAAyyoAAMsrAADLLQAAyy8AAMswAADLMQAAyzMAAMs0AADLcwAAy3UAAMt3AADLeQAAy3wAAMt9AADLfgAAy38AAMuAAADLggAAy4QAAMuFAADLhgAAy4gAAMuJAADLrgAAy9IAAMv5AADMHQAAzCAAAMwiAADMJAAAzCYAAMwoAADMKgAAzCsAAMwuAADMOwAAzEoAAMxMAADMTgAAzFAAAMxSAADMVAAAzFYAAMxYAADMZwAAzGoAAMxtAADMcAAAzHMAAMx2AADMeQAAzHwAAMx+AADMvQAAzL8AAMzBAADMwwAAzMYAAMzHAADMyAAAzMkAAMzKAADMzAAAzM4AAMzPAADM0AAAzNIAAMzTAADNEgAAzRQAAM0WAADNGAAAzRsAAM0cAADNHQAAzR4AAM0fAADNIQAAzSMAAM0kAADNJQAAzScAAM0oAADNZwAAzWkAAM1rAADNbQAAzXAAAM1xAADNcgAAzXMAAM10AADNdgAAzXgAAM15AADNegAAzXwAAM19AADNvAAAzb4AAM3AAADNwgAAzcUAAM3GAADNxwAAzcgAAM3JAADNywAAzc0AAM3OAADNzwAAzdEAAM3SAADOEQAAzhMAAM4VAADOFwAAzhoAAM4bAADOHAAAzh0AAM4eAADOIAAAziIAAM4jAADOJAAAziYAAM4nAADOZgAAzmgAAM5qAADObAAAzm8AAM5wAADOcQAAznIAAM5zAADOdQAAzncAAM54AADOeQAAznsAAM58AADOuwAAzr0AAM6/AADOwQAAzsQAAM7FAADOxgAAzscAAM7IAADOygAAzswAAM7NAADOzgAAztAAAM7RAADPHAAAzz8AAM9fAADPfwAAz4EAAM+DAADPhQAAz4cAAM+JAADPigAAz4sAAM+OAADPjwAAz5EAAM+SAADPlAAAz5YAAM+XAADPmAAAz5sAAM+cAADPoQAAz64AAM+zAADPtQAAz7cAAM+8AADPvwAAz8IAAM/EAADP6QAA0A0AANA0AADQWAAA0FsAANBdAADQXwAA0GEAANBjAADQZQAA0GYAANBpAADQdgAA0IcAANCJAADQiwAA0I0AANCPAADQkQAA0JMAANCVAADQlwAA0KgAANCrAADQrgAA0LEAANC0AADQtwAA0LoAANC9AADQwAAA0MIAANEBAADRAwAA0QUAANEHAADRCgAA0QsAANEMAADRDQAA0Q4AANEQAADREgAA0RMAANEUAADRFgAA0RcAANFWAADRWAAA0VoAANFcAADRXwAA0WAAANFhAADRYgAA0WMAANFlAADRZwAA0WgAANFpAADRawAA0WwAANGrAADRrQAA0bAAANGyAADRtQAA0bYAANG3AADRuAAA0bkAANG7AADRvQAA0b4AANG/AADRwQAA0cIAANHPAADR0AAA0dEAANHTAADSEgAA0hQAANIWAADSGAAA0hsAANIcAADSHQAA0h4AANIfAADSIQAA0iMAANIkAADSJQAA0icAANIoAADSZwAA0mkAANJrAADSbQAA0nAAANJxAADScgAA0nMAANJ0AADSdgAA0ngAANJ5AADSegAA0nwAANJ9AADSvAAA0r4AANLAAADSwgAA0sUAANLGAADSxwAA0sgAANLJAADSywAA0s0AANLOAADSzwAA0tEAANLSAADTEQAA0xMAANMVAADTFwAA0xoAANMbAADTHAAA0x0AANMeAADTIAAA0yIAANMjAADTJAAA0yYAANMnAADTZgAA02gAANNqAADTbAAA028AANNwAADTcQAA03IAANNzAADTdQAA03cAANN4AADTeQAA03sAANN8AADToQAA08UAANPsAADUEAAA1BMAANQVAADUFwAA1BkAANQbAADUHQAA1B4AANQhAADULgAA1D0AANQ/AADUQQAA1EMAANRFAADURwAA1EkAANRLAADUWgAA1F0AANRgAADUYwAA1GYAANRpAADUbAAA1G8AANRxAADUsAAA1LIAANS0AADUtgAA1LkAANS6AADUuwAA1LwAANS9AADUvwAA1MEAANTCAADUwwAA1MUAANTGAADVBQAA1QcAANUJAADVCwAA1Q4AANUPAADVEAAA1REAANUSAADVFAAA1RYAANUXAADVGAAA1RoAANUbAADVWgAA1VwAANVeAADVYAAA1WMAANVkAADVZQAA1WYAANVnAADVaQAA1WsAANVsAADVbQAA1W8AANVwAADVrwAA1bEAANWzAADVtQAA1bgAANW5AADVugAA1bsAANW8AADVvgAA1cAAANXBAADVwgAA1cQAANXFAADWBAAA1gYAANYIAADWCgAA1g0AANYOAADWDwAA1hAAANYRAADWEwAA1hUAANYWAADWFwAA1hkAANYaAADWWQAA1lsAANZeAADWYAAA1mMAANZkAADWZQAA1mYAANZnAADWaQAA1msAANZsAADWbQAA1m8AANZwAADWjAAA1ssAANbNAADWzwAA1tEAANbUAADW1QAA1tYAANbXAADW2AAA1toAANbcAADW3QAA1t4AANbgAADW4QAA1ywAANdPAADXbwAA148AANeRAADXkwAA15UAANeXAADXmQAA15oAANebAADXngAA158AANehAADXogAA16UAANenAADXqAAA16kAANesAADXrQAA17IAANe/AADXxAAA18YAANfIAADXzQAA19AAANfTAADX1QAA1/oAANgeAADYRQAA2GkAANhsAADYbgAA2HAAANhyAADYdAAA2HYAANh3AADYegAA2IcAANiYAADYmgAA2JwAANieAADYoAAA2KIAANikAADYpgAA2KgAANi5AADYvAAA2L8AANjCAADYxQAA2MgAANjLAADYzgAA2NEAANjTAADZEgAA2RQAANkWAADZGAAA2RsAANkcAADZHQAA2R4AANkfAADZIQAA2SMAANkkAADZJQAA2ScAANkoAADZZwAA2WkAANlrAADZbQAA2XAAANlxAADZcgAA2XMAANl0AADZdgAA2XgAANl5AADZegAA2XwAANl9AADZvAAA2b4AANnBAADZwwAA2cYAANnHAADZyAAA2ckAANnKAADZzAAA2c4AANnPAADZ0AAA2dIAANnTAADZ4AAA2eEAANniAADZ5AAA2iMAANolAADaJwAA2ikAANosAADaLQAA2i4AANovAADaMAAA2jIAANo0AADaNQAA2jYAANo4AADaOQAA2ngAANp6AADafAAA2n4AANqBAADaggAA2oMAANqEAADahQAA2ocAANqJAADaigAA2osAANqNAADajgAA2s0AANrPAADa0QAA2tMAANrWAADa1wAA2tgAANrZAADa2gAA2twAANreAADa3wAA2uAAANriAADa4wAA2yIAANskAADbJgAA2ygAANsrAADbLAAA2y0AANsuAADbLwAA2zEAANszAADbNAAA2zUAANs3AADbOAAA23cAANt5AADbewAA230AANuAAADbgQAA24IAANuDAADbhAAA24YAANuIAADbiQAA24oAANuMAADbjQAA27IAANvWAADb/QAA3CEAANwkAADcJgAA3CgAANwqAADcLAAA3C4AANwvAADcMgAA3D8AANxOAADcUAAA3FIAANxUAADcVgAA3FgAANxaAADcXAAA3GsAANxuAADccQAA3HQAANx3AADcegAA3H0AANyAAADcggAA3MEAANzDAADcxQAA3McAANzKAADcywAA3MwAANzNAADczgAA3NAAANzSAADc0wAA3NQAANzWAADc1wAA3RYAAN0YAADdGwAA3R0AAN0gAADdIQAA3SIAAN0jAADdJAAA3SYAAN0oAADdKQAA3SoAAN0sAADdLQAA3WwAAN1uAADdcAAA3XIAAN11AADddgAA3XcAAN14AADdeQAA3XsAAN19AADdfgAA3X8AAN2BAADdggAA3cEAAN3DAADdxgAA3cgAAN3LAADdzAAA3c0AAN3OAADdzwAA3dEAAN3TAADd1AAA3dUAAN3XAADd2AAA3hsAAN4/AADeYwAA3oYAAN6tAADezQAA3vQAAN8bAADfOwAA318AAN+DAADfhQAA34gAAN+KAADfjAAA344AAN+RAADflAAA35YAAN+YAADfmwAA350AAN+fAADfogAA36UAAN+mAADfrwAA37wAAN+/AADfwQAA38QAAN/HAADfyQAA3+4AAOASAADgOQAA4F0AAOBgAADgYgAA4GQAAOBmAADgaAAA4GoAAOBrAADgbgAA4HsAAOCOAADgkAAA4JIAAOCUAADglgAA4JgAAOCaAADgnAAA4J4AAOCgAADgswAA4LYAAOC5AADgvAAA4L8AAODCAADgxQAA4MgAAODLAADgzgAA4NAAAOEPAADhEQAA4RQAAOEWAADhGQAA4RoAAOEbAADhHAAA4R0AAOEfAADhIQAA4SIAAOEjAADhJQAA4SYAAOEvAADhMAAA4TIAAOFxAADhcwAA4XUAAOF3AADhegAA4XsAAOF8AADhfQAA4X4AAOGAAADhggAA4YMAAOGEAADhhgAA4YcAAOHGAADhyAAA4csAAOHNAADh0AAA4dEAAOHSAADh0wAA4dQAAOHWAADh2AAA4dkAAOHaAADh3AAA4d0AAOHmAADh5wAA4ekAAOIoAADiKgAA4iwAAOIuAADiMQAA4jIAAOIzAADiNAAA4jUAAOI3AADiOQAA4joAAOI7AADiPQAA4j4AAOJ9AADifwAA4oIAAOKEAADihwAA4ogAAOKJAADiigAA4osAAOKNAADijwAA4pAAAOKRAADikwAA4pQAAOKdAADingAA4qAAAOLfAADi4QAA4uMAAOLlAADi6AAA4ukAAOLqAADi6wAA4uwAAOLuAADi8AAA4vEAAOLyAADi9AAA4vUAAOM0AADjNgAA4zkAAOM7AADjPgAA4z8AAONAAADjQQAA40IAAONEAADjRgAA40cAAONIAADjSgAA40sAAONYAADjWQAA41oAAONcAADjmwAA450AAOOfAADjoQAA46QAAOOlAADjpgAA46cAAOOoAADjqgAA46wAAOOtAADjrgAA47AAAOOxAADj8AAA4/IAAOP1AADj9wAA4/oAAOP7AADj/AAA4/0AAOP+AADkAAAA5AIAAOQDAADkBAAA5AYAAOQHAADkFgAA5CMAAOQwAADkMwAA5DYAAOQ5AADkPAAA5D8AAORCAADkTwAA5FIAAORVAADkWAAA5FsAAOReAADkYQAA5GMAAORuAADkdgAA5IAAAOSOAADkmAAA5KQAAOTvAADlEgAA5TIAAOVSAADlVAAA5VYAAOVYAADlWgAA5V0AAOVeAADlXwAA5WIAAOVjAADlZQAA5WYAAOVoAADlawAA5WwAAOVtAADlcAAA5XEAAOV2AADlgwAA5YgAAOWKAADljAAA5ZEAAOWUAADllwAA5ZkAAOW+AADl4gAA5gkAAOYtAADmMAAA5jIAAOY0AADmNgAA5jgAAOY6AADmOwAA5j4AAOZLAADmXAAA5l4AAOZgAADmYgAA5mQAAOZmAADmaAAA5moAAOZsAADmfQAA5oAAAOaDAADmhgAA5okAAOaMAADmjwAA5pIAAOaVAADmlwAA5tYAAObYAADm2gAA5twAAObfAADm4AAA5uEAAObiAADm4wAA5uUAAObnAADm6AAA5ukAAObrAADm7AAA5ysAAOctAADnLwAA5zEAAOc0AADnNQAA5zYAAOc3AADnOAAA5zoAAOc8AADnPQAA5z4AAOdAAADnQQAA54AAAOeCAADnhQAA54cAAOeKAADniwAA54wAAOeNAADnjgAA55AAAOeSAADnkwAA55QAAOeWAADnlwAA56QAAOelAADnpgAA56gAAOfnAADn6QAA5+sAAOftAADn8AAA5/EAAOfyAADn8wAA5/QAAOf2AADn+AAA5/kAAOf6AADn/AAA5/0AAOg8AADoPgAA6EAAAOhCAADoRQAA6EYAAOhHAADoSAAA6EkAAOhLAADoTQAA6E4AAOhPAADoUQAA6FIAAOiRAADokwAA6JUAAOiXAADomgAA6JsAAOicAADonQAA6J4AAOigAADoogAA6KMAAOikAADopgAA6KcAAOjmAADo6AAA6OoAAOjsAADo7wAA6PAAAOjxAADo8gAA6PMAAOj1AADo9wAA6PgAAOj5AADo+wAA6PwAAOk7AADpPQAA6T8AAOlBAADpRAAA6UUAAOlGAADpRwAA6UgAAOlKAADpTAAA6U0AAOlOAADpUAAA6VEAAOl2AADpmgAA6cEAAOnlAADp6AAA6eoAAOnsAADp7gAA6fAAAOnyAADp8wAA6fYAAOoDAADqEgAA6hQAAOoWAADqGAAA6hoAAOocAADqHgAA6iAAAOovAADqMgAA6jUAAOo4AADqOwAA6j4AAOpBAADqRAAA6kYAAOqFAADqhwAA6ooAAOqMAADqjwAA6pAAAOqRAADqkgAA6pMAAOqVAADqlwAA6pgAAOqZAADqmwAA6pwAAOqeAADq3QAA6t8AAOrhAADq4wAA6uYAAOrnAADq6AAA6ukAAOrqAADq7AAA6u4AAOrvAADq8AAA6vIAAOrzAADrMgAA6zQAAOs2AADrOAAA6zsAAOs8AADrPQAA6z4AAOs/AADrQQAA60MAAOtEAADrRQAA60cAAOtIAADrhwAA64kAAOuMAADrjgAA65EAAOuSAADrkwAA65QAAOuVAADrlwAA65kAAOuaAADrmwAA650AAOueAADroAAA698AAOvhAADr4wAA6+UAAOvoAADr6QAA6+oAAOvrAADr7AAA6+4AAOvwAADr8QAA6/IAAOv0AADr9QAA7DQAAOw2AADsOAAA7DoAAOw9AADsPgAA7D8AAOxAAADsQQAA7EMAAOxFAADsRgAA7EcAAOxJAADsSgAA7IkAAOyLAADsjQAA7I8AAOySAADskwAA7JQAAOyVAADslgAA7JgAAOyaAADsmwAA7JwAAOyeAADsnwAA7OoAAO0NAADtLQAA7U0AAO1PAADtUQAA7VMAAO1VAADtWAAA7VkAAO1aAADtXQAA7V4AAO1gAADtYQAA7WMAAO1mAADtZwAA7WgAAO1rAADtbAAA7XEAAO1+AADtgwAA7YUAAO2HAADtjAAA7Y8AAO2SAADtlAAA7bkAAO3dAADuBAAA7igAAO4rAADuLQAA7i8AAO4xAADuMwAA7jUAAO42AADuOQAA7kYAAO5XAADuWQAA7lsAAO5dAADuXwAA7mEAAO5jAADuZQAA7mcAAO54AADuewAA7n4AAO6BAADuhAAA7ocAAO6KAADujQAA7pAAAO6SAADu0QAA7tMAAO7VAADu1wAA7toAAO7bAADu3AAA7t0AAO7eAADu4AAA7uIAAO7jAADu5AAA7uYAAO7nAADvJgAA7ygAAO8qAADvLAAA7y8AAO8wAADvMQAA7zIAAO8zAADvNQAA7zcAAO84AADvOQAA7zsAAO88AADvewAA730AAO+AAADvggAA74UAAO+GAADvhwAA74gAAO+JAADviwAA740AAO+OAADvjwAA75EAAO+SAADvnwAA76AAAO+hAADvowAA7+IAAO/kAADv5gAA7+gAAO/rAADv7AAA7+0AAO/uAADv7wAA7/EAAO/zAADv9AAA7/UAAO/3AADv+AAA8DcAAPA5AADwOwAA8D0AAPBAAADwQQAA8EIAAPBDAADwRAAA8EYAAPBIAADwSQAA8EoAAPBMAADwTQAA8IwAAPCOAADwkAAA8JIAAPCVAADwlgAA8JcAAPCYAADwmQAA8JsAAPCdAADwngAA8J8AAPChAADwogAA8OEAAPDjAADw5QAA8OcAAPDqAADw6wAA8OwAAPDtAADw7gAA8PAAAPDyAADw8wAA8PQAAPD2AADw9wA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BDTcAAQ05AAENOgABDT0AAQ1AAAENQQABDUIAAQ1FAAENRgABDUsAAQ1YAAENXQABDV8AAQ1hAAENZgABDWkAAQ1sAAENbgABDZMAAQ23AAEN3gABDgIAAQ4FAAEOBwABDgkAAQ4LAAEODQABDg8AAQ4QAAEOEwABDiAAAQ4xAAEOMwABDjUAAQ43AAEOOQABDjsAAQ49AAEOPwABDkEAAQ5SAAEOVQABDlgAAQ5bAAEOXgABDmEAAQ5kAAEOZwABDmoAAQ5sAAEOqwABDq0AAQ6vAAEOsQABDrQAAQ61AAEOtgABDrcAAQ64AAEOugABDrwAAQ69AAEOvgABDsAAAQ7BAAEPAAABDwIAAQ8EAAEPBgABDwkAAQ8KAAEPCwABDwwAAQ8NAAEPDwABDxEAAQ8SAAEPEwABDxUAAQ8WAAEPVQABD1cAAQ9aAAEPXAABD18AAQ9gAAEPYQABD2IAAQ9jAAEPZQABD2cAAQ9oAAEPaQABD2sAAQ9sAAEPeQABD3oAAQ97AAEPfQABD7wAAQ++AAEPwAABD8IAAQ/FAAEPxgABD8cAAQ/IAAEPyQABD8sAAQ/NAAEPzgABD88AAQ/RAAEP0gABEBEAARATAAEQFQABEBcAARAaAAEQGwABEBwAARAdAAEQHgABECAAARAiAAEQIwABECQAARAmAAEQJwABEGYAARBoAAEQagABEGwAARBvAAEQcAABEHEAARByAAEQcwABEHUAARB3AAEQeAABEHkAARB7AAEQfAABELsAARC9AAEQvwABEMEAARDEAAEQxQABEMYAARDHAAEQyAABEMoAARDMAAEQzQABEM4AARDQAAEQ0QABERAAARESAAERFAABERYAAREZAAERGgABERsAAREcAAERHQABER8AAREhAAERIgABESMAARElAAERJgABEUsAARFvAAERlgABEboAARG9AAERvwABEcEAARHDAAERxQABEccAARHIAAERywABEdgAARHnAAER6QABEesAARHtAAER7wABEfEAARHzAAER9QABEgQAARIHAAESCgABEg0AARIQAAESEwABEhYAARIZAAESGwABEloAARJcAAESXgABEmAAARJjAAESZAABEmUAARJmAAESZwABEmkAARJrAAESbAABEm0AARJvAAEScAABEq8AARKxAAESswABErUAARK4AAESuQABEroAARK7AAESvAABEr4AARLAAAESwQABEsIAARLEAAESxQABEwQAARMGAAETCAABEwoAARMNAAETDgABEw8AARMQAAETEQABExMAARMVAAETFgABExcAARMZAAETGgABE1kAARNbAAETXQABE18AARNiAAETYwABE2QAARNlAAETZgABE2gAARNqAAETawABE2wAARNuAAETbwABE64AAROwAAETsgABE7QAARO3AAETuAABE7kAARO6AAETuwABE70AARO/AAETwAABE8EAARPDAAETxAABFAMAARQFAAEUBwABFAkAARQMAAEUDQABFA4AARQPAAEUEAABFBIAARQUAAEUFQABFBYAARQYAAEUGQABFFgAARRaAAEUXQABFF8AARRiAAEUYwABFGQAARRlAAEUZgABFGgAARRqAAEUawABFGwAARRuAAEUbwABFHgAARR5AAEUewABFLoAARS8AAEUvgABFMAAARTDAAEUxAABFMUAARTGAAEUxwABFMkAARTLAAEUzAABFM0AARTPAAEU0AABFQ8AARURAAEVEwABFRUAARUYAAEVGQABFRoAARUbAAEVHAABFR4AARUgAAEVIQABFSIAARUkAAEVJQABFWQAARVmAAEVaQABFWsAARVuAAEVbwABFXAAARVxAAEVcgABFXQAARV2AAEVdwABFXgAARV6AAEVewABFcYAARXpAAEWCQABFikAARYrAAEWLQABFi8AARYxAAEWMwABFjQAARY1AAEWOAABFjkAARY7AAEWPAABFj4AARZAAAEWQQABFkIAARZFAAEWRgABFksAARZYAAEWXQABFl8AARZhAAEWZgABFmkAARZsAAEWbgABFpMAARa3AAEW3gABFwIAARcFAAEXBwABFwkAARcLAAEXDQABFw8AARcQAAEXEwABFyAAARcxAAEXMwABFzUAARc3AAEXOQABFzsAARc9AAEXPwABF0EAARdSAAEXVQABF1gAARdbAAEXXgABF2EAARdkAAEXZwABF2oAARdsAAEXqwABF60AARevAAEXsQABF7QAARe1AAEXtgABF7cAARe4AAEXugABF7wAARe9AAEXvgABF8AAARfBAAEYAAABGAIAARgEAAEYBgABGAkAARgKAAEYCwABGAwAARgNAAEYDwABGBEAARgSAAEYEwABGBUAARgWAAEYVQABGFcAARhaAAEYXAABGF8AARhgAAEYYQABGGIAARhjAAEYZQABGGcAARhoAAEYaQABGGsAARhsAAEYeQABGHoAARh7AAEYfQABGLwAARi+AAEYwAABGMIAARjFAAEYxgABGMcAARjIAAEYyQABGMsAARjNAAEYzgABGM8AARjRAAEY0gABGREAARkTAAEZFQABGRcAARkaAAEZGwABGRwAARkdAAEZHgABGSAAARkiAAEZIwABGSQAARkmAAEZJwABGWYAARloAAEZagABGWwAARlvAAEZcAABGXEAARlyAAEZcwABGXUAARl3AAEZeAABGXkAARl7AAEZfAABGbsAARm9AAEZvwABGcEAARnEAAEZxQABGcYAARnHAAEZyAABGcoAARnMAAEZzQABGc4AARnQAAEZ0QABGhAAARoSAAEaFAABGhYAARoZAAEaGgABGhsAARocAAEaHQABGh8AARohAAEaIgABGiMAARolAAEaJgABGksAARpvAAEalgABGroAARq9AAEavwABGsEAARrDAAEaxQABGscAARrIAAEaywABGtgAARrnAAEa6QABGusAARrtAAEa7wABGvEAARrzAAEa9QABGwQAARsHAAEbCgABGw0AARsQAAEbEwABGxYAARsZAAEbGwABG1oAARtcAAEbXwABG2EAARtkAAEbZQABG2YAARtnAAEbaAABG2oAARtsAAEbbQABG24AARtwAAEbcQABG7AAARuyAAEbtAABG7YAARu5AAEbugABG7sAARu8AAEbvQABG78AARvBAAEbwgABG8MAARvFAAEbxgABHAUAARwHAAEcCQABHAsAARwOAAEcDwABHBAAARwRAAEcEgABHBQAARwWAAEcFwABHBgAARwaAAEcGwABHFoAARxcAAEcXwABHGEAARxkAAEcZQABHGYAARxnAAEcaAABHGoAARxsAAEcbQABHG4AARxwAAEccQABHHMAARyyAAEctAABHLYAARy4AAEcuwABHLwAARy9AAEcvgABHL8AARzBAAEcwwABHMQAARzFAAEcxwABHMgAAR0HAAEdCQABHQsAAR0NAAEdEAABHREAAR0SAAEdEwABHRQAAR0WAAEdGAABHRkAAR0aAAEdHAABHR0AAR1cAAEdXgABHWAAAR1iAAEdZQABHWYAAR1nAAEdaAABHWkAAR1rAAEdbQABHW4AAR1vAAEdcQABHXIAAR29AAEd4AABHgAAAR4gAAEeIgABHiQAAR4mAAEeKAABHioAAR4rAAEeLAABHi8AAR4wAAEeMgABHjMAAR41AAEeNwABHjgAAR45AAEePAABHj0AAR5CAAEeTwABHlQAAR5WAAEeWAABHl0AAR5gAAEeYwABHmUAAR6KAAEergABHtUAAR75AAEe/AABHv4AAR8AAAEfAgABHwQAAR8GAAEfBwABHwoAAR8XAAEfKAABHyoAAR8sAAEfLgABHzAAAR8yAAEfNAABHzYAAR84AAEfSQABH0wAAR9PAAEfUgABH1UAAR9YAAEfWwABH14AAR9hAAEfYwABH6IAAR+kAAEfpgABH6gAAR+rAAEfrAABH60AAR+uAAEfrwABH7EAAR+zAAEftAABH7UAAR+3AAEfuAABH/cAAR/5AAEf+wABH/0AASAAAAEgAQABIAIAASADAAEgBAABIAYAASAIAAEgCQABIAoAASAMAAEgDQABIEwAASBOAAEgUQABIFMAASBWAAEgVwABIFgAASBZAAEgWgABIFwAASBeAAEgXwABIGAAASBiAAEgYwABIHAAASBxAAEgcgABIHQAASCzAAEgtQABILcAASC5AAEgvAABIL0AASC+AAEgvwABIMAAASDCAAEgxAABIMUAASDGAAEgyAABIMkAASEIAAEhCgABIQwAASEOAAEhEQABIRIAASETAAEhFAABIRUAASEXAAEhGQABIRoAASEbAAEhHQABIR4AASFdAAEhXwABIWEAASFjAAEhZgABIWcAASFoAAEhaQABIWoAASFsAAEhbgABIW8AASFwAAEhcgABIXMAASGyAAEhtAABIbYAASG4AAEhuwABIbwAASG9AAEhvgABIb8AASHBAAEhwwABIcQAASHFAAEhxwABIcgAASIHAAEiCQABIgsAASINAAEiEAABIhEAASISAAEiEwABIhQAASIWAAEiGAABIhkAASIaAAEiHAABIh0AASJCAAEiZgABIo0AASKxAAEitAABIrYAASK4AAEiugABIrwAASK+AAEivwABIsIAASLPAAEi3gABIuAAASLiAAEi5AABIuYAASLoAAEi6gABIuwAASL7AAEi/gABIwEAASMEAAEjBwABIwoAASMNAAEjEAABIxIAASNRAAEjUwABI1UAASNXAAEjWgABI1sAASNcAAEjXQABI14AASNgAAEjYgABI2MAASNkAAEjZgABI2cAASOmAAEjqAABI6oAASOsAAEjrwABI7AAASOxAAEjsgABI7MAASO1AAEjtwABI7gAASO5AAEjuwABI7wAASP7AAEj/QABI/8AASQBAAEkBAABJAUAASQGAAEkBwABJAgAASQKAAEkDAABJA0AASQOAAEkEAABJBEAASRQAAEkUgABJFQAASRWAAEkWQABJFoAASRbAAEkXAABJF0AASRfAAEkYQABJGIAASRjAAEkZQABJGYAASSlAAEkpwABJKkAASSrAAEkrgABJK8AASSwAAEksQABJLIAASS0AAEktgABJLcAASS4AAEkugABJLsAAST6AAEk/AABJP4AASUAAAElAwABJQQAASUFAAElBgABJQcAASUJAAElCwABJQwAASUNAAElDwABJRAAASVPAAElUQABJVMAASVVAAElWAABJVkAASVaAAElWwABJVwAASVeAAElYAABJWEAASViAAElZAABJWUAASWwAAEl0wABJfMAASYTAAEmFQABJhcAASYZAAEmGwABJh0AASYeAAEmHwABJiIAASYjAAEmJQABJiYAASYoAAEmKgABJisAASYsAAEmLwABJjAAASY1AAEmQgABJkcAASZJAAEmSwABJlAAASZTAAEmVgABJlgAASZ9AAEmoQABJsgAASbsAAEm7wABJvEAASbzAAEm9QABJvcAASb5AAEm+gABJv0AAScKAAEnGwABJx0AAScfAAEnIQABJyMAASclAAEnJwABJykAAScrAAEnPAABJz8AASdCAAEnRQABJ0gAASdLAAEnTgABJ1EAASdUAAEnVgABJ5UAASeXAAEnmQABJ5sAASeeAAEnnwABJ6AAASehAAEnogABJ6QAASemAAEnpwABJ6gAASeqAAEnqwABJ+oAASfsAAEn7gABJ/AAASfzAAEn9AABJ/UAASf2AAEn9wABJ/kAASf7AAEn/AABJ/0AASf/AAEoAAABKD8AAShBAAEoRAABKEYAAShJAAEoSgABKEsAAShMAAEoTQABKE8AAShRAAEoUgABKFMAAShVAAEoVgABKGMAAShkAAEoZQABKGcAASimAAEoqAABKKoAASisAAEorwABKLAAASixAAEosgABKLMAASi1AAEotwABKLgAASi5AAEouwABKLwAASj7AAEo/QABKP8AASkBAAEpBAABKQUAASkGAAEpBwABKQgAASkKAAEpDAABKQ0AASkOAAEpEAABKREAASlQAAEpUgABKVQAASlWAAEpWQABKVoAASlbAAEpXAABKV0AASlfAAEpYQABKWIAASljAAEpZQABKWYAASmlAAEppwABKakAASmrAAEprgABKa8AASmwAAEpsQABKbIAASm0AAEptgABKbcAASm4AAEpugABKbsAASn6AAEp/AABKf4AASoAAAEqAwABKgQAASoFAAEqBgABKgcAASoJAAEqCwABKgwAASoNAAEqDwABKhAAASo1AAEqWQABKoAAASqkAAEqpwABKqkAASqrAAEqrQABKq8AASqxAAEqsgABKrUAASrCAAEq0QABKtMAASrVAAEq1wABKtkAASrbAAEq3QABKt8AASruAAEq8QABKvQAASr3AAEq+gABKv0AASsAAAErAwABKwUAAStEAAErRgABK0kAAStLAAErTgABK08AAStQAAErUQABK1IAAStUAAErVgABK1cAAStYAAErWgABK1sAASuaAAErnAABK54AASugAAErowABK6QAASulAAErpgABK6cAASupAAErqwABK6wAASutAAErrwABK7AAASvvAAEr8QABK/MAASv1AAEr+AABK/kAASv6AAEr+wABK/wAASv+AAEsAAABLAEAASwCAAEsBAABLAUAASxEAAEsRgABLEkAASxLAAEsTgABLE8AASxQAAEsUQABLFIAASxUAAEsVgABLFcAASxYAAEsWgABLFsAASyaAAEsnAABLJ4AASygAAEsowABLKQAASylAAEspgABLKcAASypAAEsqwABLKwAASytAAEsrwABLLAAASzvAAEs8QABLPMAASz1AAEs+AABLPkAASz6AAEs+wABLPwAASz+AAEtAAABLQEAAS0CAAEtBAABLQUAAS1EAAEtRgABLUgAAS1KAAEtTQABLU4AAS1PAAEtUAABLVEAAS1TAAEtVQABLVYAAS1XAAEtWQABLVoAAS2lAAEtyAABLegAAS4IAAEuCgABLgwAAS4OAAEuEAABLhIAAS4TAAEuFAABLhcAAS4YAAEuGgABLhsAAS4dAAEuHwABLiAAAS4hAAEuJAABLiUAAS4qAAEuNwABLjwAAS4+AAEuQAABLkUAAS5IAAEuSwABLk0AAS5yAAEulgABLr0AAS7hAAEu5AABLuYAAS7oAAEu6gABLuwAAS7uAAEu7wABLvIAAS7/AAEvEAABLxIAAS8UAAEvFgABLxgAAS8aAAEvHAABLx4AAS8gAAEvMQABLzQAAS83AAEvOgABLz0AAS9AAAEvQwABL0YAAS9JAAEvSwABL4oAAS+MAAEvjgABL5AAAS+TAAEvlAABL5UAAS+WAAEvlwABL5kAAS+bAAEvnAABL50AAS+fAAEvoAABL98AAS/hAAEv4wABL+UAAS/oAAEv6QABL+oAAS/rAAEv7AABL+4AAS/wAAEv8QABL/IAAS/0AAEv9QABMDQAATA2AAEwOQABMDsAATA+AAEwPwABMEAAATBBAAEwQgABMEQAATBGAAEwRwABMEgAATBKAAEwSwABMFgAATBZAAEwWgABMFwAATCbAAEwnQABMJ8AATChAAEwpAABMKUAATCmAAEwpwABMKgAATCqAAEwrAABMK0AATCuAAEwsAABMLEAATDwAAEw8gABMPQAATD2AAEw+QABMPoAATD7AAEw/AABMP0AATD/AAExAQABMQIAATEDAAExBQABMQYAATFFAAExRwABMUkAATFLAAExTgABMU8AATFQAAExUQABMVIAATFUAAExVgABMVcAATFYAAExWgABMVsAATGaAAExnAABMZ4AATGgAAExowABMaQAATGlAAExpgABMacAATGpAAExqwABMawAATGtAAExrwABMbAAATHvAAEx8QABMfMAATH1AAEx+AABMfkAATH6AAEx+wABMfwAATH+AAEyAAABMgEAATICAAEyBAABMgUAATIqAAEyTgABMnUAATKZAAEynAABMp4AATKgAAEyogABMqQAATKmAAEypwABMqoAATK3AAEyxgABMsgAATLKAAEyzAABMs4AATLQAAEy0gABMtQAATLjAAEy5gABMukAATLsAAEy7wABMvIAATL1AAEy+AABMvoAATM5AAEzOwABMz0AATM/AAEzQgABM0MAATNEAAEzRQABM0YAATNIAAEzSgABM0sAATNMAAEzTgABM08AATOOAAEzkAABM5IAATOUAAEzlwABM5gAATOZAAEzmgABM5sAATOdAAEznwABM6AAATOhAAEzowABM6QAATPjAAEz5QABM+cAATPpAAEz7AABM+0AATPuAAEz7wABM/AAATPyAAEz9AABM/UAATP2AAEz+AABM/kAATQ4AAE0OgABNDwAATQ+AAE0QQABNEIAATRDAAE0RAABNEUAATRHAAE0SQABNEoAATRLAAE0TQABNE4AATSNAAE0jwABNJEAATSTAAE0lgABNJcAATSYAAE0mQABNJoAATScAAE0ngABNJ8AATSgAAE0ogABNKMAATTiAAE05AABNOYAATToAAE06wABNOwAATTtAAE07gABNO8AATTxAAE08wABNPQAATT1AAE09wABNPgAATU3AAE1OQABNTsAATU9AAE1QAABNUEAATVCAAE1QwABNUQAATVGAAE1SAABNUkAATVKAAE1TAABNU0AATVWAAE1VwABNVkAATWYAAE1mgABNZwAATWeAAE1oAABNaEAATWiAAE1owABNaQAATWmAAE1qAABNakAATWqAAE1rAABNa0AATXsAAE17gABNfAAATXyAAE19AABNfUAATX2AAE19wABNfgAATX6AAE1/AABNf0AATX+AAE2AAABNgEAATZAAAE2QgABNkQAATZGAAE2SAABNkkAATZKAAE2SwABNkwAATZOAAE2UAABNlEAATZSAAE2VAABNlUAATagAAE2wwABNuMAATcDAAE3BQABNwcAATcJAAE3CwABNw0AATcOAAE3DwABNxIAATcTAAE3FQABNxYAATcYAAE3GgABNxsAATccAAE3HwABNyAAATcpAAE3NgABNzsAATc9AAE3PwABN0QAATdHAAE3SgABN0wAATdxAAE3lQABN7wAATfgAAE34wABN+UAATfnAAE36QABN+sAATftAAE37gABN/EAATf+AAE4DwABOBEAATgTAAE4FQABOBcAATgZAAE4GwABOB0AATgfAAE4MAABODMAATg2AAE4OQABODwAATg/AAE4QgABOEUAAThIAAE4SgABOIkAATiLAAE4jQABOI8AATiSAAE4kwABOJQAATiVAAE4lgABOJgAATiaAAE4mwABOJwAATieAAE4nwABON4AATjgAAE44gABOOQAATjnAAE46AABOOkAATjqAAE46wABOO0AATjvAAE48AABOPEAATjzAAE49AABOTMAATk1AAE5OAABOToAATk9AAE5PgABOT8AATlAAAE5QQABOUMAATlFAAE5RgABOUcAATlJAAE5SgABOVcAATlYAAE5WQABOVsAATmaAAE5nAABOZ4AATmgAAE5owABOaQAATmlAAE5pgABOacAATmpAAE5qwABOawAATmtAAE5rwABObAAATnvAAE58QABOfMAATn1AAE5+AABOfkAATn6AAE5+wABOfwAATn+AAE6AAABOgEAAToCAAE6BAABOgUAATpEAAE6RgABOkgAATpKAAE6TQABOk4AATpPAAE6UAABOlEAATpTAAE6VQABOlYAATpXAAE6WQABOloAATqZAAE6mwABOp0AATqfAAE6ogABOqMAATqkAAE6pQABOqYAATqoAAE6qgABOqsAATqsAAE6rgABOq8AATruAAE68AABOvIAATr0AAE69wABOvgAATr5AAE6+gABOvsAATr9AAE6/wABOwAAATsBAAE7AwABOwQAATspAAE7TQABO3QAATuYAAE7mwABO50AATufAAE7oQABO6MAATulAAE7pgABO6kAATu2AAE7xQABO8cAATvJAAE7ywABO80AATvPAAE70QABO9MAATviAAE75QABO+gAATvrAAE77gABO/EAATv0AAE79wABO/kAATw4AAE8OgABPDwAATw+AAE8QQABPEIAATxDAAE8RAABPEUAATxHAAE8SQABPEoAATxLAAE8TQABPE4AATyNAAE8jwABPJEAATyTAAE8lgABPJcAATyYAAE8mQABPJoAATycAAE8ngABPJ8AATygAAE8ogABPKMAATziAAE85AABPOYAATzoAAE86wABPOwAATztAAE87gABPO8AATzxAAE88wABPPQAATz1AAE89wABPPgAAT03AAE9OQABPTsAAT09AAE9QAABPUEAAT1CAAE9QwABPUQAAT1GAAE9SAABPUkAAT1KAAE9TAABPU0AAT2MAAE9jgABPZAAAT2SAAE9lQABPZYAAT2XAAE9mAABPZkAAT2bAAE9nQABPZ4AAT2fAAE9oQABPaIAAT3hAAE94wABPeUAAT3nAAE96gABPesAAT3sAAE97QABPe4AAT3wAAE98gABPfMAAT30AAE99gABPfcAAT42AAE+OAABPjoAAT48AAE+PwABPkAAAT5BAAE+QgABPkMAAT5FAAE+RwABPkgAAT5JAAE+SwABPkwAAT5VAAE+VgABPlgAAT6bAAE+vwABPuMAAT8GAAE/LQABP00AAT90AAE/mwABP7sAAT/fAAFAAwA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BV0IAAVdEAAFXRgABV0cAAVdKAAFXVwABV2oAAVdsAAFXbgABV3AAAVdyAAFXdAABV3YAAVd4AAFXegABV3wAAVePAAFXkgABV5UAAVeYAAFXmwABV54AAVehAAFXpAABV6cAAVeqAAFXrAABV+sAAVftAAFX8AABV/IAAVf1AAFX9gABV/cAAVf4AAFX+QABV/sAAVf9AAFX/gABV/8AAVgBAAFYAgABWAsAAVgMAAFYDgABWE0AAVhPAAFYUQABWFMAAVhWAAFYVwABWFgAAVhZAAFYWgABWFwAAVheAAFYXwABWGAAAVhiAAFYYwABWKIAAVikAAFYpwABWKkAAVisAAFYrQABWK4AAVivAAFYsAABWLIAAVi0AAFYtQABWLYAAVi4AAFYuQABWMIAAVjDAAFYxQABWQQAAVkGAAFZCAABWQoAAVkNAAFZDgABWQ8AAVkQAAFZEQABWRMAAVkVAAFZFgABWRcAAVkZAAFZGgABWVkAAVlbAAFZXgABWWAAAVljAAFZZAABWWUAAVlmAAFZZwABWWkAAVlrAAFZbAABWW0AAVlvAAFZcAABWXkAAVl6AAFZfAABWbsAAVm9AAFZvwABWcEAAVnEAAFZxQABWcYAAVnHAAFZyAABWcoAAVnMAAFZzQABWc4AAVnQAAFZ0QABWhAAAVoSAAFaFQABWhcAAVoaAAFaGwABWhwAAVodAAFaHgABWiAAAVoiAAFaIwABWiQAAVomAAFaJwABWjQAAVo1AAFaNgABWjgAAVp3AAFaeQABWnsAAVp9AAFagAABWoEAAVqCAAFagwABWoQAAVqGAAFaiAABWokAAVqKAAFajAABWo0AAVrMAAFazgABWtEAAVrTAAFa1gABWtcAAVrYAAFa2QABWtoAAVrcAAFa3gABWt8AAVrgAAFa4gABWuMAAVrxAAFa/gABWwMAAVsGAAFbCQABWw4AAVsRAAFbFAABWxYAAVsbAAFbJgABW3EAAVuUAAFbtAABW9QAAVvWAAFb2AABW9oAAVvcAAFb3wABW+AAAVvhAAFb5AABW+UAAVvnAAFb6AABW+oAAVvtAAFb7gABW+8AAVvyAAFb8wABW/gAAVwFAAFcCgABXAwAAVwOAAFcEwABXBYAAVwZAAFcGwABXEAAAVxkAAFciwABXK8AAVyyAAFctAABXLYAAVy4AAFcugABXLwAAVy9AAFcwAABXM0AAVzeAAFc4AABXOIAAVzkAAFc5gABXOgAAVzqAAFc7AABXO4AAVz/AAFdAgABXQUAAV0IAAFdCwABXQ4AAV0RAAFdFAABXRcAAV0ZAAFdWAABXVoAAV1cAAFdXgABXWEAAV1iAAFdYwABXWQAAV1lAAFdZwABXWkAAV1qAAFdawABXW0AAV1uAAFdrQABXa8AAV2xAAFdswABXbYAAV23AAFduAABXbkAAV26AAFdvAABXb4AAV2/AAFdwAABXcIAAV3DAAFeAgABXgQAAV4HAAFeCQABXgwAAV4NAAFeDgABXg8AAV4QAAFeEgABXhQAAV4VAAFeFgABXhgAAV4ZAAFeJgABXicAAV4oAAFeKgABXmkAAV5rAAFebQABXm8AAV5yAAFecwABXnQAAV51AAFedgABXngAAV56AAFeewABXnwAAV5+AAFefwABXr4AAV7AAAFewgABXsQAAV7HAAFeyAABXskAAV7KAAFeywABXs0AAV7PAAFe0AABXtEAAV7TAAFe1AABXxMAAV8VAAFfFwABXxkAAV8cAAFfHQABXx4AAV8fAAFfIAABXyIAAV8kAAFfJQABXyYAAV8oAAFfKQABX2gAAV9qAAFfbAABX24AAV9xAAFfcgABX3MAAV90AAFfdQABX3cAAV95AAFfegABX3sAAV99AAFffgABX70AAV+/AAFfwQABX8MAAV/GAAFfxwABX8gAAV/JAAFfygABX8wAAV/OAAFfzwABX9AAAV/SAAFf0wABX/gAAWAcAAFgQwABYGcAAWBqAAFgbAABYG4AAWBwAAFgcgABYHQAAWB1AAFgeAABYIUAAWCUAAFglgABYJgAAWCaAAFgnAABYJ4AAWCgAAFgogABYLEAAWC0AAFgtwABYLoAAWC9AAFgwAABYMMAAWDGAAFgyAABYQcAAWEJAAFhCwABYQ0AAWEQAAFhEQABYRIAAWETAAFhFAABYRYAAWEYAAFhGQABYRoAAWEcAAFhHQABYVwAAWFeAAFhYAABYWIAAWFlAAFhZgABYWcAAWFoAAFhaQABYWsAAWFtAAFhbgABYW8AAWFxAAFhcgABYbEAAWGzAAFhtQABYbcAAWG6AAFhuwABYbwAAWG9AAFhvgABYcAAAWHCAAFhwwABYcQAAWHGAAFhxwABYgYAAWIIAAFiCwABYg0AAWIQAAFiEQABYhIAAWITAAFiFAABYhYAAWIYAAFiGQABYhoAAWIcAAFiHQABYlwAAWJeAAFiYAABYmIAAWJlAAFiZgABYmcAAWJoAAFiaQABYmsAAWJtAAFibgABYm8AAWJxAAFicgABYrEAAWKzAAFitQABYrcAAWK6AAFiuwABYrwAAWK9AAFivgABYsAAAWLCAAFiwwABYsQAAWLGAAFixwABYwYAAWMIAAFjCgABYwwAAWMPAAFjEAABYxEAAWMSAAFjEwABYxUAAWMXAAFjGAABYxkAAWMbAAFjHAABY2cAAWOKAAFjqgABY8oAAWPMAAFjzgABY9AAAWPSAAFj1QABY9YAAWPXAAFj2gABY9sAAWPdAAFj3gABY+AAAWPjAAFj5AABY+UAAWPoAAFj6QABY/IAAWP/AAFkBAABZAYAAWQIAAFkDQABZBAAAWQTAAFkFQABZDoAAWReAAFkhQABZKkAAWSsAAFkrgABZLAAAWSyAAFktAABZLYAAWS3AAFkugABZMcAAWTYAAFk2gABZNwAAWTeAAFk4AABZOIAAWTkAAFk5gABZOgAAWT5AAFk/AABZP8AAWUCAAFlBQABZQgAAWULAAFlDgABZREAAWUTAAFlUgABZVQAAWVWAAFlWAABZVsAAWVcAAFlXQABZV4AAWVfAAFlYQABZWMAAWVkAAFlZQABZWcAAWVoAAFlpwABZakAAWWrAAFlrQABZbAAAWWxAAFlsgABZbMAAWW0AAFltgABZbgAAWW5AAFlugABZbwAAWW9AAFl/AABZf4AAWYBAAFmAwABZgYAAWYHAAFmCAABZgkAAWYKAAFmDAABZg4AAWYPAAFmEAABZhIAAWYTAAFmIAABZiEAAWYiAAFmJAABZmMAAWZlAAFmZwABZmkAAWZsAAFmbQABZm4AAWZvAAFmcAABZnIAAWZ0AAFmdQABZnYAAWZ4AAFmeQABZrgAAWa6AAFmvAABZr4AAWbBAAFmwgABZsMAAWbEAAFmxQABZscAAWbJAAFmygABZssAAWbNAAFmzgABZw0AAWcPAAFnEQABZxMAAWcWAAFnFwABZxgAAWcZAAFnGgABZxwAAWceAAFnHwABZyAAAWciAAFnIwABZ2IAAWdkAAFnZgABZ2gAAWdrAAFnbAABZ20AAWduAAFnbwABZ3EAAWdzAAFndAABZ3UAAWd3AAFneAABZ7cAAWe5AAFnuwABZ70AAWfAAAFnwQABZ8IAAWfDAAFnxAABZ8YAAWfIAAFnyQABZ8oAAWfMAAFnzQABZ/IAAWgWAAFoPQABaGEAAWhkAAFoZgABaGgAAWhqAAFobAABaG4AAWhvAAFocgABaH8AAWiOAAFokAABaJIAAWiUAAFolgABaJgAAWiaAAFonAABaKsAAWiuAAFosQABaLQAAWi3AAFougABaL0AAWjAAAFowgABaQEAAWkDAAFpBQABaQcAAWkKAAFpCwABaQwAAWkNAAFpDgABaRAAAWkSAAFpEwABaRQAAWkWAAFpFwABaVYAAWlYAAFpWgABaVwAAWlfAAFpYAABaWEAAWliAAFpYwABaWUAAWlnAAFpaAABaWkAAWlrAAFpbAABaasAAWmtAAFprwABabEAAWm0AAFptQABabYAAWm3AAFpuAABaboAAWm8AAFpvQABab4AAWnAAAFpwQABagAAAWoCAAFqBAABagYAAWoJAAFqCgABagsAAWoMAAFqDQABag8AAWoRAAFqEgABahMAAWoVAAFqFgABalUAAWpXAAFqWQABalsAAWpeAAFqXwABamAAAWphAAFqYgABamQAAWpmAAFqZwABamgAAWpqAAFqawABaqoAAWqsAAFqrgABarAAAWqzAAFqtAABarUAAWq2AAFqtwABarkAAWq7AAFqvAABar0AAWq/AAFqwAABav8AAWsBAAFrAwABawUAAWsIAAFrCQABawoAAWsLAAFrDAABaw4AAWsQAAFrEQABaxIAAWsUAAFrFQABax4AAWsfAAFrIQABa2QAAWuIAAFrrAABa88AAWv2AAFsFgABbD0AAWxkAAFshAABbKgAAWzMAAFszgABbNEAAWzTAAFs1QABbNcAAWzaAAFs3QABbN8AAWzhAAFs5AABbOYAAWzoAAFs6wABbO4AAWzvAAFs9AABbQEAAW0EAAFtBgABbQkAAW0MAAFtDgABbTMAAW1XAAFtfgABbaIAAW2lAAFtpwABbakAAW2rAAFtrQABba8AAW2wAAFtswABbcAAAW3TAAFt1QABbdcAAW3ZAAFt2wABbd0AAW3fAAFt4QABbeMAAW3lAAFt+AABbfsAAW3+AAFuAQABbgQAAW4HAAFuCgABbg0AAW4QAAFuEwABbhUAAW5UAAFuVgABblkAAW5bAAFuXgABbl8AAW5gAAFuYQABbmIAAW5kAAFuZgABbmcAAW5oAAFuagABbmsAAW50AAFudQABbncAAW62AAFuuAABbroAAW68AAFuvwABbsAAAW7BAAFuwgABbsMAAW7FAAFuxwABbsgAAW7JAAFuywABbswAAW8LAAFvDQABbxAAAW8SAAFvFQABbxYAAW8XAAFvGAABbxkAAW8bAAFvHQABbx4AAW8fAAFvIQABbyIAAW8rAAFvLAABby4AAW9tAAFvbwABb3EAAW9zAAFvdgABb3cAAW94AAFveQABb3oAAW98AAFvfgABb38AAW+AAAFvggABb4MAAW/CAAFvxAABb8cAAW/JAAFvzAABb80AAW/OAAFvzwABb9AAAW/SAAFv1AABb9UAAW/WAAFv2AABb9kAAW/iAAFv4wABb+UAAXAkAAFwJgABcCgAAXAqAAFwLQABcC4AAXAvAAFwMAABcDEAAXAzAAFwNQABcDYAAXA3AAFwOQABcDoAAXB5AAFwewABcH4AAXCAAAFwgwABcIQAAXCFAAFwhgABcIcAAXCJAAFwiwABcIwAAXCNAAFwjwABcJAAAXCdAAFwngABcJ8AAXChAAFw4AABcOIAAXDkAAFw5gABcOkAAXDqAAFw6wABcOwAAXDtAAFw7wABcPEAAXDyAAFw8wABcPUAAXD2AAFxNQABcTcAAXE6AAFxPAABcT8AAXFAAAFxQQABcUIAAXFDAAFxRQABcUcAAXFIAAFxSQABcUsAAXFMAAFxXgABcWsAAXFyAAFxdQABcXgAAXF7AAFxggABcYUAAXGIAAFxiwABcY0AAXGaAAFxpQABcfAAAXITAAFyMwABclMAAXJVAAFyVwABclkAAXJbAAFyXgABcl8AAXJgAAFyYwABcmQAAXJmAAFyZwABcmkAAXJsAAFybQABcm4AAXJxAAFycgABcncAAXKEAAFyiQABcosAAXKNAAFykgABcpUAAXKYAAFymgABcr8AAXLjAAFzCgABcy4AAXMxAAFzMwABczUAAXM3AAFzOQABczsAAXM8AAFzPwABc0wAAXNdAAFzXwABc2EAAXNjAAFzZQABc2cAAXNpAAFzawABc20AAXN+AAFzgQABc4QAAXOHAAFzigABc40AAXOQAAFzkwABc5YAAXOYAAFz1wABc9kAAXPbAAFz3QABc+AAAXPhAAFz4gABc+MAAXPkAAFz5gABc+gAAXPpAAFz6gABc+wAAXPtAAF0LAABdC4AAXQwAAF0MgABdDUAAXQ2AAF0NwABdDgAAXQ5AAF0OwABdD0AAXQ+AAF0PwABdEEAAXRCAAF0gQABdIMAAXSGAAF0iAABdIsAAXSMAAF0jQABdI4AAXSPAAF0kQABdJMAAXSUAAF0lQABdJcAAXSYAAF0pQABdKYAAXSnAAF0qQABdOgAAXTqAAF07AABdO4AAXTxAAF08gABdPMAAXT0AAF09QABdPcAAXT5AAF0+gABdPsAAXT9AAF0/gABdT0AAXU/AAF1QQABdUMAAXVGAAF1RwABdUgAAXVJAAF1SgABdUwAAXVOAAF1TwABdVAAAXVSAAF1UwABdZIAAXWUAAF1lgABdZgAAXWbAAF1nAABdZ0AAXWeAAF1nwABdaEAAXWjAAF1pAABdaUAAXWnAAF1qAABdecAAXXpAAF16wABde0AAXXwAAF18QABdfIAAXXzAAF19AABdfYAAXX4AAF1+QABdfoAAXX8AAF1/QABdjwAAXY+AAF2QAABdkIAAXZFAAF2RgABdkcAAXZIAAF2SQABdksAAXZNAAF2TgABdk8AAXZRAAF2UgABdncAAXabAAF2wgABduYAAXbpAAF26wABdu0AAXbvAAF28QABdvMAAXb0AAF29wABdwQAAXcTAAF3FQABdxcAAXcZAAF3GwABdx0AAXcfAAF3IQABdzAAAXczAAF3NgABdzkAAXc8AAF3PwABd0IAAXdFAAF3RwABd4YAAXeIAAF3iwABd40AAXeQAAF3kQABd5IAAXeTAAF3lAABd5YAAXeYAAF3mQABd5oAAXecAAF3nQABd6EAAXfgAAF34gABd+QAAXfmAAF36QABd+oAAXfrAAF37AABd+0AAXfvAAF38QABd/IAAXfzAAF39QABd/YAAXg1AAF4NwABeDkAAXg7AAF4PgABeD8AAXhAAAF4QQABeEIAAXhEAAF4RgABeEcAAXhIAAF4SgABeEsAAXiKAAF4jAABeI4AAXiQAAF4kwABeJQAAXiVAAF4lgABeJcAAXiZAAF4mwABeJwAAXidAAF4nwABeKAAAXjfAAF44QABeOMAAXjlAAF46AABeOkAAXjqAAF46wABeOwAAXjuAAF48AABePEAAXjyAAF49AABePUAAXk0AAF5NgABeTgAAXk6AAF5PQABeT4AAXk/AAF5QAABeUEAAXlDAAF5RQABeUYAAXlHAAF5SQABeUoAAXmJAAF5iwABeY0AAXmPAAF5kgABeZMAAXmUAAF5lQABeZYAAXmYAAF5mgABeZsAAXmcAAF5ngABeZ8AAXnqAAF6DQABei0AAXpNAAF6TwABelEAAXpTAAF6VQABelgAAXpZAAF6WgABel0AAXpeAAF6YAABemEAAXpjAAF6ZgABemcAAXpoAAF6awABemwAAXpxAAF6fgABeoMAAXqFAAF6hwABeowAAXqPAAF6kgABepQAAXq5AAF63QABewQAAXsoAAF7KwABey0AAXsvAAF7MQABezMAAXs1AAF7NgABezkAAXtGAAF7VwABe1kAAXtbAAF7XQABe18AAXthAAF7YwABe2UAAXtnAAF7eAABe3sAAXt+AAF7gQABe4QAAXuHAAF7igABe40AAXuQAAF7kgABe9EAAXvTAAF71QABe9cAAXvaAAF72wABe9wAAXvdAAF73gABe+AAAXviAAF74wABe+QAAXvmAAF75wABfCYAAXwoAAF8KgABfCwAAXwvAAF8MAABfDEAAXwyAAF8MwABfDUAAXw3AAF8OAABfDkAAXw7AAF8PAABfHsAAXx9AAF8gAABfIIAAXyFAAF8hgABfIcAAXyIAAF8iQABfIsAAXyNAAF8jgABfI8AAXyRAAF8kgABfJ8AAXygAAF8oQABfKMAAXziAAF85AABfOYAAXzoAAF86wABfOwAAXztAAF87gABfO8AAXzxAAF88wABfPQAAXz1AAF89wABfPgAAX03AAF9OQABfTsAAX09AAF9QAABfUEAAX1CAAF9QwABfUQAAX1GAAF9SAABfUkAAX1KAAF9TAABfU0AAX2MAAF9jgABfZAAAX2SAAF9lQABfZYAAX2XAAF9mAABfZkAAX2bAAF9nQABfZ4AAX2fAAF9oQABfaIAAX3hAAF94wABfeUAAX3nAAF96gABfesAAX3sAAF97QABfe4AAX3wAAF98gABffMAAX30AAF99gABffcAAX42AAF+OAABfjoAAX48AAF+PwABfkAAAX5BAAF+QgABfkMAAX5FAAF+RwABfkgAAX5JAAF+SwABfkwAAX5xAAF+lQABfrwAAX7gAAF+4wABfuUAAX7nAAF+6QA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 + + /Users/soramitsu/Job/shared-features-spm/Sources/SSFAccountManagmentStorage/Resources/UserDataModel.xcdatamodeld/MultiassetUserDataModel_v12.xcdatamodel + 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uZmlndXJhdGlvbnNCeU5hbWVfEBdfbW9kZWxWZXJzaW9uSWRlbnRpZmllcoACgQUEgACBBQGBBQKBBQPeABoAGwAcAB0AHgAfACAADgAhACIAIwAkACUAJgAnACgAKQAJACcAFQAtAC4ALwAwADEAJwAnABVfEBxYREJ1Y2tldEZvckNsYXNzZXN3YXNFbmNvZGVkXxAaWERCdWNrZXRGb3JQYWNrYWdlc3N0b3JhZ2VfEBxYREJ1Y2tldEZvckludGVyZmFjZXNzdG9yYWdlXxAPX3hkX293bmluZ01vZGVsXxAdWERCdWNrZXRGb3JQYWNrYWdlc3dhc0VuY29kZWRWX293bmVyXxAbWERCdWNrZXRGb3JEYXRhVHlwZXNzdG9yYWdlW192aXNpYmlsaXR5XxAZWERCdWNrZXRGb3JDbGFzc2Vzc3RvcmFnZVVfbmFtZV8QH1hEQnVja2V0Rm9ySW50ZXJmYWNlc3dhc0VuY29kZWRfEB5YREJ1Y2tldEZvckRhdGFUeXBlc3dhc0VuY29kZWRfEBBfdW5pcXVlRWxlbWVudElEgASBBP+BBP2AAYAEgACBBP6BBQAQAIAFgAOABIAEgABQU1lFU9MAOAA5AA4AOgBCAEpXTlMua2V5c1pOUy5vYmplY3RzpwA7ADwAPQA+AD8AQABBgAaAB4AIgAmACoALgAynAEMARABFAEYARwBIAEmADYEDUoEEFoEEW4CAgQSggQHwgCtfEBFDREFzc2V0VmlzaWJpbGl0eV5DRENoYWluQWNjb3VudF8QEUNEQ3VzdG9tQ2hhaW5Ob2RlXUNEQWNjb3VudEluZm9dQ0RNZXRhQWNjb3VudF8QD0NEQ2hhaW5TZXR0aW5nc1pDREN1cnJlbmN53xAQAFMAVABVAFYAHwBXAFgAIQBZAFoADgAjAFsAXAAmAF0AXgBfACcAJwATAGMAZAAvACcAXgBnADsAXgBqAGsAbF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc2R1cGxpY2F0ZXNfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zc3RvcmFnZVtfaXNBYnN0cmFjdIAPgDOABIAEgAKAEIECeoAEgA+BAnyABoAPgQQVgA4IEwAAAAEg8JdAV29yZGVyZWTTADgAOQAOAHAAcgBKoQBxgBGhAHOAEoArXlhEX1BTdGVyZW90eXBl2QAfACMAdwAOACYAeAAhAF0AeQBDAHEAXgB9ABUAJwAvAGwAgV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYANgBGAD4AygACABAiAE9MAOAA5AA4AgwCNAEqpAIQAhQCGAIcAiACJAIoAiwCMgBSAFYAWgBeAGIAZgBqAG4AcqQCOAI8AkACRAJIAkwCUAJUAloAdgCGAIoAkgCWAJ4ApgCyAMIArXxATWERQTUNvbXBvdW5kSW5kZXhlc18QEFhEX1BTS19lbGVtZW50SURfEBlYRFBNVW5pcXVlbmVzc0NvbnN0cmFpbnRzXxAaWERfUFNLX3ZlcnNpb25IYXNoTW9kaWZpZXJfEBlYRF9QU0tfZmV0Y2hSZXF1ZXN0c0FycmF5XxARWERfUFNLX2lzQWJzdHJhY3RfEA9YRF9QU0tfdXNlckluZm9fEBNYRF9QU0tfY2xhc3NNYXBwaW5nXxAWWERfUFNLX2VudGl0eUNsYXNzTmFtZd8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAK0AFQBzAGwAbABsAC8AbAC0AIQAbABsABUAbFVfdHlwZVhfZGVmYXVsdFxfYXNzb2NpYXRpb25bX2lzUmVhZE9ubHlZX2lzU3RhdGljWV9pc1VuaXF1ZVpfaXNEZXJpdmVkWl9pc09yZGVyZWRcX2lzQ29tcG9zaXRlV19pc0xlYWaAAIAegACAEggICAiAIIAUCAiAAAjSADkADgC7ALyggB/SAL4AvwDAAMFaJGNsYXNzbmFtZVgkY2xhc3Nlc15OU011dGFibGVBcnJheaMAwADCAMNXTlNBcnJheVhOU09iamVjdNIAvgC/AMUAxl8QEFhEVU1MUHJvcGVydHlJbXCkAMcAyADJAMNfEBBYRFVNTFByb3BlcnR5SW1wXxAUWERVTUxOYW1lZEVsZW1lbnRJbXBfEA9YRFVNTEVsZW1lbnRJbXDfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQAVABUAcwBsAGwAbAAvAGwAtACFAGwAbAAVAGyAAIAAgACAEggICAiAIIAVCAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQDbABUAcwBsAGwAbAAvAGwAtACGAGwAbAAVAGyAAIAjgACAEggICAiAIIAWCAiAAAjSADkADgDpALyggB/fEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQAVABUAcwBsAGwAbAAvAGwAtACHAGwAbAAVAGyAAIAAgACAEggICAiAIIAXCAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQD8ABUAcwBsAGwAbAAvAGwAtACIAGwAbAAVAGyAAIAmgACAEggICAiAIIAYCAiAAAjSADkADgEKALyggB/fEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQEOABUAcwBsAGwAbAAvAGwAtACJAGwAbAAVAGyAAIAogACAEggICAiAIIAZCAiAAAgI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUBHgAVAHMAbABsAGwALwBsALQAigBsAGwAFQBsgACAKoAAgBIICAgIgCCAGggIgAAI0wA4ADkADgEsAS0ASqCggCvSAL4AvwEwATFfEBNOU011dGFibGVEaWN0aW9uYXJ5owEwATIAw1xOU0RpY3Rpb25hcnnfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQE1ABUAcwBsAGwAbAAvAGwAtACLAGwAbAAVAGyAAIAtgACAEggICAiAIIAbCAiAAAjWACMADgAmAF0AHwAhAUMBRAAVAGwAFQAvgC6AL4AACIAAXxAUWERHZW5lcmljUmVjb3JkQ2xhc3PSAL4AvwFKAUtdWERVTUxDbGFzc0ltcKYBTAFNAU4BTwFQAMNdWERVTUxDbGFzc0ltcF8QElhEVU1MQ2xhc3NpZmllckltcF8QEVhEVU1MTmFtZXNwYWNlSW1wXxAUWERVTUxOYW1lZEVsZW1lbnRJbXBfEA9YRFVNTEVsZW1lbnRJbXDfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQFTABUAcwBsAGwAbAAvAGwAtACMAGwAbAAVAGyAAIAxgACAEggICAiAIIAcCAiAAAhfEBFDREFzc2V0VmlzaWJpbGl0edIAvgC/AWIBY18QElhEVU1MU3RlcmVvdHlwZUltcKcBZAFlAWYBZwFoAWkAw18QElhEVU1MU3RlcmVvdHlwZUltcF1YRFVNTENsYXNzSW1wXxASWERVTUxDbGFzc2lmaWVySW1wXxARWERVTUxOYW1lc3BhY2VJbXBfEBRYRFVNTE5hbWVkRWxlbWVudEltcF8QD1hEVU1MRWxlbWVudEltcNMAOAA5AA4BawFvAEqjAWwBbQFugDSANYA2owFwAXEBcoA3gGKBA/6AK1dhc3NldElkVndhbGxldFZoaWRkZW7fEBIAogCjAKQBeAAfAKYApwF5ACEApQF6AKgADgAjAKkAqgAmAKsAFQAVABUAJwBDAGwAbAGCAC8AbABeAGwBhgFsAGwAbAGKAGxfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIANCAiAOQiADwiAYYA0CAiAOAgSsjqcXdMAOAA5AA4BjgGRAEqiAY8BkIA6gDuiAZIBk4A8gFCAK18QElhEX1BQcm9wU3RlcmVvdHlwZV8QElhEX1BBdHRfU3RlcmVvdHlwZdkAHwAjAZgADgAmAZkAIQBdAZoBcAGPAF4AfQAVACcALwBsAaJfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmV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Ab4BwgCvfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQEOABUC7gBsAGwAbAAvAGwAtAGlAGwAbAAVAGyAAIAogACAZggICAiAIIA+CAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQAVABUC7gBsAGwAbAAvAGwAtAGmAGwAbAAVAGyAAIAAgACAZggICAiAIIA/CAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQMyABUC7gBsAGwAbAAvAGwAtAGnAGwAbAAVAGyAAIBrgACAZggICAiAIIBACAiAAAjTADgAOQAOA0ADQQBKoKCAK98QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQLuAGwAbABsAC8AbAC0AagAbABsABUAbIAAgCiAAIBmCAgICIAggEEICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQLuAGwAbABsAC8AbAC0AakAbABsABUAbIAAgCiAAIBmCAgICIAggEIICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQLuAGwAbABsAC8AbAC0AaoAbABsABUAbIAAgCiAAIBmCAgICIAggEMICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQLuAGwAbABsAC8AbAC0AasAbABsABUAbIAAgACAAIBmCAgICIAggEQICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQLuAGwAbABsAC8AbAC0AawAbABsABUAbIAAgCiAAIBmCAgICIAggEUICIAACNkAHwAjA48ADgAmA5AAIQBdA5EBcQLsAF4AfQAVACcALwBsA5lfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WAYoBlgA+AMoAAgAQIgHLTADgAOQAOA5sDowBKpwOcA50DngOfA6ADoQOigHOAdIB1gHaAd4B4gHm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IgQSk0wA4ADkADjoNOhcASqkAhACFAIYAhwCIAIkAigCLAIyAFIAVgBaAF4AYgBmAGoAbgBypOhg6GToaOhs6HDodOh46HzoggQSlgQSngQSogQSqgQSrgQStgQSugQSwgQSxgCvfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFTokABU5/gBsAGwAbAAvAGwAtACEAGwAbAAVAGyAAIEEpoAAgQSjCAgICIAggBQICIAACNIAOQAOOjIAvKCAH98QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFTn+AGwAbABsAC8AbAC0AIUAbABsABUAbIAAgACAAIEEowgICAiAIIAVCAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFTpFABU5/gBsAGwAbAAvAGwAtACGAGwAbAAVAGyAAIEEqYAAgQSjCAgICIAggBYICIAACNIAOQAOOlMAvKCAH98QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFTn+AGwAbABsAC8AbAC0AIcAbABsABUAbIAAgACAAIEEowgICAiAIIAXCAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFTpmABU5/gBsAGwAbAAvAGwAtACIAGwAbAAVAGyAAIEErIAAgQSjCAgICIAggBgICIAACNIAOQAOOnQAvKCAH98QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFTn+AGwAbABsAC8AbAC0AIkAbABsABUAbIAAgCiAAIEEowgICAiAIIAZCAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFTqHABU5/gBsAGwAbAAvAGwAtACKAGwAbAAVAGyAAIEEr4AAgQSjCAgICIAggBoICIAACNMAOAA5AA46lTqWAEqgoIAr3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUBNQAVOf4AbABsAGwALwBsALQAiwBsAGwAFQBsgACALYAAgQSjCAgICIAggBsICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVOqkAFTn+AGwAbABsAC8AbAC0AIwAbABsABU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AADIVAAAyFwAAMhkAADIbAAAyHAAAMh0AADIfAAAyIAAAMiIAADIjAAAyJQAAMicAADIoAAAyKQAAMisAADIsAAAyMQAAMj4AADJDAAAyRQAAMkcAADJMAAAyTgAAMlAAADJSAAAydwAAMpsAADLCAAAy5gAAMugAADLqAAAy7AAAMu4AADLwAAAy8gAAMvMAADL1AAAzAgAAMxMAADMVAAAzFwAAMxkAADMbAAAzHQAAMx8AADMhAAAzIwAAMzQAADM2AAAzOAAAMzoAADM8AAAzPgAAM0AAADNCAAAzRAAAM0YAADOFAAAzhwAAM4kAADOLAAAzjQAAM44AADOPAAAzkAAAM5EAADOTAAAzlQAAM5YAADOXAAAzmQAAM5oAADPZAAAz2wAAM90AADPfAAAz4QAAM+IAADPjAAAz5AAAM+UAADPnAAAz6QAAM+oAADPrAAAz7QAAM+4AADQtAAA0LwAANDEAADQzAAA0NQAANDYAADQ3AAA0OAAANDkAADQ7AAA0PQAAND4AADQ/AAA0QQAANEIAADRPAAA0UAAANFEAADRTAAA0kgAANJQAADSWAAA0mAAANJoAADSbAAA0nAAANJ0AADSeAAA0oAAANKIAADSjAAA0pAAANKYAADSnAAA05gAANOgAADTqAAA07AAANO4AADTvAAA08AAANPEAADTyAAA09AAANPYAADT3AAA0+AAANPoAADT7AAA1OgAANTwAADU+AAA1QAAANUIAADVDAAA1RAAANUUAADVGAAA1SAAANUoAADVLAAA1TAAANU4AADVPAAA1jgAANZAAADWSAAA1lAAANZYAADWXAAA1mAAANZkAADWaAAA1nAAANZ4AADWfAAA1oAAANaIAADWjAAA14gAANeQAADXmAAA16AAANeoAADXrAAA17AAANe0AADXuAAA18AAANfIAADXzAAA19AAANfYAADX3AAA2HAAANkAAADZnAAA2iwAANo0AADaPAAA2kQAANpMAADaVAAA2lwAANpgAADaaAAA2pwAANrYAADa4AAA2ugAANrwAADa+AAA2wAAANsIAADbEAAA20wAANtUAADbXAAA22QAANtsAADbdAAA23wAANuEAADbjAAA3IgAANyQAADcmAAA3KAAANyoAADcrAAA3LAAANy0AADcuAAA3MAAANzIAADczAAA3NAAANzY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AAEKOAABCkAAAQpIAAEKUAABClQAAQpcAAEKkAABCtQAAQrcAAEK5AABCuwAAQr0AAEK/AABCwQAAQsMAAELFAABC1gAAQtgAAELaAABC3AAAQt4AAELgAABC4gAAQuQAAELmAABC6AAAQycAAEMpAABDKwAAQy0AAEMvAABDMAAAQzEAAEMyAABDMwAAQzUAAEM3AABDOAAAQzkAAEM7AABDPAAAQ3sAAEN9AABDfwAAQ4EAAEODAABDhAAAQ4UAAEOGAABDhwAAQ4kAAEOLAABDjAAAQ40AAEOPAABDkAAAQ88AAEPRAABD0wAAQ9UAAEPXAABD2AAAQ9kAAEPaAABD2wAAQ90AAEPfAABD4AAAQ+EAAEPjAABD5AAAQ/EAAEPyAABD8wAAQ/UAAEQ0AABENgAARDgAAEQ6AABEPAAARD0AAEQ+AABEPwAAREAAAERCAABERAAAREUAAERGAABESAAAREkAAESIAABEigAARIwAAESOAABEkAAARJEAAESSAABEkwAARJQAAESWAABEmAAARJkAAESaAABEnAAARJ0AAETcAABE3gAAROAAAETiAABE5AAAROUAAETmAABE5wAAROgAAETqAABE7AAARO0AAETuAABE8AAARPEAAEUwAABFMgAARTQAAEU2AABFOAAARTkAAEU6AABFOwAARTwAAEU+AABFQAAARUEAAEVCAABFRAAARUUAAEWEAABFhgAARYgAAEWKAABFjAAARY0AAEWOAABFjwAARZAAAEWSAABFlAAARZUAAEWWAABFmAAARZkAAEW+AABF4gAARgkAAEYtAABGLwAARjEAAEYzAABGNQAARjcAAEY5AABGOgAARjwAAEZJAABGWAAARloAAEZcAABGXgAARmAAAEZiAABGZAAARmYAAEZ1AABGdwAARnkAAEZ7AABGfQAARn8AAEaBAABGgwAARoUAAEbEAABGxgAARsgAAEbKAABGzAAARs0AAEbOAABGzwAARtAAAEbSAABG1AAARtUAAEbWAABG2AAARtkAAEcYAABHGgAARxwAAEceAABHIAAARyEAAEciAABHIwAARyQAAEcmAABHKAAARykAAEcqAABHLAAARy0AAEdsAABHbgAAR3AAAEdyAABHdAAAR3UAAEd2AABHdwAAR3gAAEd6AABHfAAAR30AAEd+AABHgAAAR4EAAEfAAABHwgAAR8QAAEfGAABHyAAAR8kAAEfKAABHywAAR8wAAEfOAABH0AAAR9EAAEfSAABH1AAAR9UAAEfYAABIFwAASBkAAEgbAABIHQAASB8AAEggAABIIQAASCIAAEgjAABIJQAASCcAAEgoAABIKQAASCsAAEgsAABIawAASG0AAEhvAABIcQAASHMAAEh0AABIdQAASHYAAEh3AABIeQAASHsAAEh8AABIfQAASH8AAEiAAABInAAASNsAAEjdAABI3wAASOEAAEjjAABI5AAASOUAAEjmAABI5wAASOkAAEjrAABI7AAASO0AAEjvAABI8AAASTsAAEleAABJfgAASZ4AAEmgAABJogAASaQAAEmmAABJqAAASakAAEmqAABJrAAASa0AAEmvAABJsAAASbMAAEm1AABJtgAASbcAAEm5AABJugAASb8AAEnMAABJ0QAASdMAAEnVAABJ2gAASdwAAEnfAABJ4QAASgYAAEoqAABKUQAASnUAAEp3AABKeQAASnsAAEp9AABKfwAASoEAAEqCAABKhAAASpEAAEqiAABKpAAASqYAAEqoAABKqgAASqwAAEquAABKsAAASrIAAErDAABKxQAASscAAErJAABKywAASs0AAErPAABK0gAAStUAAErXAABLFgAASxgAAEsaAABLHAAASx4AAEsfAABLIAAASyEAAEsiAABLJAAASyYAAEsnAABLKAAASyoAAEsrAABLagAAS2wAAEtuAABLcAAAS3IAAEtzAABLdAAAS3UAAEt2AABLeAAAS3oAAEt7AABLfAAAS34AAEt/AABLvgAAS8AAAEvCAABLxAAAS8YAAEvHAABLyAAAS8kAAEvKAABLzAAAS84AAEvPAABL0AAAS9IAAEvTAABL4AAAS+EAAEviAABL5AAATCMAAEwlAABMJwAATCkAAEwrAABMLAAATC0AAEwuAABMLwAATDEAAEwzAABMNAAATDUAAEw3AABMOAAATHcAAEx5AABMewAATH0AAEx/AABMgAAATIEAAEyCAABMgwAATIUAAEyHAABMiAAATIkAAEyLAABMjAAATMsAAEzNAABMzwAATNEAAEzTAABM1AAATNUAAEzWAABM1wAATNkAAEzbAABM3AAATN0AAEzfAABM4AAATR8AAE0hAABNIwAATSUAAE0nAABNKAAATSkAAE0qAABNKwAATS0AAE0vAABNMAAATTEAAE0zAABNNAAATXMAAE11AABNdwAATXkAAE17AABNfAAATX0AAE1+AABNfwAATYEAAE2DAABNhAAATYUAAE2HAABNiAAATa0AAE3RAABN+AAAThwAAE4eAABOIAAATiIAAE4kAABOJgAATigAAE4pAABOLAAATjkAAE5IAABOSgAATkwAAE5OAABOUAAATlIAAE5UAABOVgAATmUAAE5oAABOawAATm4AAE5xAABOdAAATncAAE56AABOfAAATrsAAE69AABOvwAATsEAAE7EAABOxQAATsYAAE7HAABOyAAATsoAAE7MAABOzQAATs4AAE7QAABO0QAATxAAAE8SAABPFQAATxcAAE8aAABPGwAATxwAAE8dAABPHgAATyAAAE8iAABPIwAATyQAAE8mAABPJwAATykAAE9oAABPagAAT2wAAE9uAABPcQAAT3IAAE9zAABPdAAAT3UAAE93AABPeQAAT3oAAE97AABPfQAAT34AAE+9AABPvwAAT8EAAE/DAABPxgAAT8cAAE/IAABPyQAAT8oAAE/MAABPzgAAT88AAE/QAABP0gAAT9MAAFASAABQFAAAUBYAAFAYAABQGwAAUBwAAFAdAABQHgAAUB8AAFAhAABQIwAAUCQAAFAlAABQJwAAUCgAAFBnAABQaQAAUGsAAFBtAABQcAAAUHEAAFByAABQcwAAUHQAAFB2AABQeAAAUHkAAFB6AABQfAAAUH0AAFC8AABQvgAAUMAAAFDCAABQxQAAUMYAAFDHAABQyAAAUMkAAFDLAABQzQAAUM4AAFDPAABQ0QAAUNIAAFDbAABQ7gAAUPsAAFEOAABRGwAAUS4AAFFFAABRVwAAUaIAAFHFAABR5QAAUgUAAFIHAABSCQAAUgsAAFINAABSDwAAUhAAAFIRAABSFAAAUhUAAFIXAABSGAAAUhoAAFIcAABSHQAAUh4AAFIhAABSIgAAUicAAFI0AABSOQAAUjsAAFI9AABSQgAAUkUAAFJIAABSSgAAUm8AAFKTAABSugAAUt4AAFLhAABS4wAAUuUAAFLnAABS6QAAUusAAFLsAABS7wAAUvwAAFMNAABTDwAAUxEAAFMTAABTFQAAUxcAAFMZAABTGwAAUx0AAFMuAABTMQAAUzQAAFM3AABTOgAAUz0AAFNAAABTQwAAU0YAAFNIAABThwAAU4kAAFOLAABTjQAAU5AAAFORAABTkgAAU5MAAFOUAABTlgAAU5gAAFOZAABTmgAAU5wAAFOdAABT3AAAU94AAFPgAABT4gAAU+UAAFPmAABT5wAAU+gAAFPpAABT6wAAU+0AAFPuAABT7wAAU/EAAFPyAABUMQAAVDMAAFQ2AABUOAAAVDsAAFQ8AABUPQAAVD4AAFQ/AABUQQAAVEMAAFREAABURQAAVEcAAFRIAABUVQAAVFYAAFRXAABUWQAAVJgAAFSaAABUnAAAVJ4AAFShAABUogAAVKMAAFSkAABUpQAAVKcAAFSpAABUqgAAVKsAAFStAABUrgAAVO0AAFTvAABU8QAAVPMAAFT2AABU9wAAVPgAAFT5AABU+gAAVPwAAFT+AABU/wAAVQAAAFUCAABVAwAAVUIAAFVEAABVRgAAVUgAAFVLAABVTAAAVU0AAFVOAABVTwAAVVEAAFVTAABVVAAAVVUAAFVXAABVWAAAVZcAAFWZAABVmwAAVZ0AAFWgAABVoQAAVaIAAFWjAABVpAAAVaYAAFWoAABVqQAAVaoAAFWsAABVrQAAVewAAFXuAABV8AAAVfIAAFX1AABV9gAAVfcAAFX4AABV+QAAVfsAAFX9AABV/gAAVf8AAFYBAABWAgAAVicAAFZLAABWcgAAVpYAAFaZAABWmwAAVp0AAFafAABWoQAAVqMAAFakAABWpwAAVrQAAFbDAABWxQAAVscAAFbJAABWywAAVs0AAFbPAABW0QAAVuAAAFbjAABW5gAAVukAAFbsAABW7wAAVvIAAFb1AABW9wAAVzYAAFc4AABXOgAAVzwAAFc/AABXQAAAV0EAAFdCAABXQwAAV0UAAFdHAABXSAAAV0kAAFdLAABXTAAAV4sAAFeNAABXjwAAV5EAAFeUAABXlQAAV5YAAFeXAABXmAAAV5oAAFecAABXnQAAV54AAFegAABXoQAAV+AAAFfiAABX5AAAV+YAAFfpAABX6gAAV+sAAFfsAABX7QAAV+8AAFfxAABX8gAAV/MAAFf1AABX9gAAWDUAAFg3AABYOQAAWDsAAFg+AABYPwAAWEAAAFhBAABYQgAAWEQAAFhGAABYRwAAWEgAAFhKAABYSwAAWIoAAFiMAABYjgAAWJAAAFiTAABYlAAAWJUAAFiWAABYlwAAWJkAAFibAABYnAAAWJ0AAFifAABYoAAAWN8AAFjhAABY4wAAWOUAAFjoAABY6QAAWOoAAFjrAABY7AAAWO4AAFjwAABY8QAAWPIAAFj0AABY9QAAWTQAAFk2AABZOAAAWToAAFk9AABZPgAAWT8AAFlAAABZQQAAWUMAAFlFAABZRgAAWUcAAFlJAABZSgAAWZUAAFm4AABZ2AAAWfgAAFn6AABZ/AAAWf4AAFoAAABaAgAAWgMAAFoEAABaBwAAWggAAFoKAABaCwAAWg0AAFoPAABaEAAAWhEAAFoUAABaFQAAWhoAAFonAABaLAAAWi4AAFowAABaNQAAWjgAAFo7AABaPQAAWmIAAFqGAABarQAAWtEAAFrUAABa1gAAWtgAAFraAABa3AAAWt4AAFrfAABa4gAAWu8AAFsAAABbAgAAWwQAAFsGAABbCAAAWwoAAFsMAABbDgAAWxAAAFshAABbJAAAWycAAFsqAABbLQAAWzAAAFszAABbNgAAWzkAAFs7AABbegAAW3wAAFt+AABbgAAAW4MAAFuEAABbhQAAW4YAAFuHAABbiQAAW4sAAFuMAABbjQAAW48AAFuQAABbzwAAW9EAAFvTAABb1QAAW9gAAFvZAABb2gAAW9sAAFvcAABb3gAAW+AAAFvhAABb4gAAW+QAAFvlAABcJAAAXCYAAFwpAABcKwAAXC4AAFwvAABcMAAAXDEAAFwyAABcNAAAXDYAAFw3AABcOAAAXDoAAFw7AABcSAAAXEkAAFxKAABcTAAAXIsAAFyNAABcjwAAXJEAAFyUAABclQAAXJYAAFyXAABcmAAAXJoAAFycAABcnQAAXJ4AAFygAABcoQAAXOAAAFziAABc5AAAXOYAAFzpAABc6gAAXOsAAFzsAABc7QAAXO8AAFzxAABc8gAAXPMAAFz1AABc9gAAXTUAAF03AABdOQAAXTsAAF0+AABdPwAAXUAAAF1BAABdQgAAXUQAAF1GAABdRwAAXUgAAF1KAABdSwAAXYoAAF2MAABdjgAAXZAAAF2TAABdlAAAXZUAAF2WAABdlwAAXZkAAF2bAABdnAAAXZ0AAF2fAABdoAAAXd8AAF3hAABd4wAAXeUAAF3oAABd6QAAXeoAAF3rAABd7AAAXe4AAF3wAABd8QAAXfIAAF30AABd9QAAXhoAAF4+AABeZQAAXokAAF6MAABejgAAXpAAAF6SAABelAAAXpYAAF6XAABemgAAXqcAAF62AABeuAAAXroAAF68AABevgAAXsAAAF7CAABexAAAXtMAAF7WAABe2QAAXtwAAF7fAABe4gAAXuUAAF7oAABe6gAAXykAAF8rAABfLQAAXy8AAF8yAABfMwAAXzQAAF81AABfNgAAXzgAAF86AABfOwAAXzwAAF8+AABfPwAAX34AAF+AAABfggAAX4QAAF+HAABfiAAAX4kAAF+KAABfiwAAX40AAF+PAABfkAAAX5EAAF+TAABflAAAX9MAAF/VAABf1wAAX9kAAF/cAABf3QAAX94AAF/fAABf4AAAX+IAAF/kAABf5QAAX+YAAF/oAABf6QAAYCgAAGAqAABgLQAAYC8AAGAyAABgMwAAYDQAAGA1AABgNgAAYDgAAGA6AABgOwAAYDwAAGA+AABgPwAAYEIAAGCBAABggwAAYIUAAGCHAABgigAAYIsAAGCMAABgjQAAYI4AAGCQAABgkgAAYJMAAGCUAABglgAAYJcAAGDWAABg2AAAYNoAAGDcAABg3wAAYOAAAGDhAABg4gAAYOMAAGDlAABg5wAAYOgAAGDpAABg6wAAYOwAAGErAABhLQAAYS8AAGExAABhNAAAYTUAAGE2AABhNwAAYTgAAGE6AABhPAAAYT0AAGE+AABhQAAAYUEAAGGMAABhrwAAYc8AAGHvAABh8QAAYfMAAGH1AABh9wAAYfkAAGH6AABh+wAAYf4AAGH/AABiAQAAYgIAAGIEAABiBgAAYgcAAGIIAABiCwAAYgwAAGIRAABiHgAAYiMAAGIlAABiJwAAYiwAAGIvAABiMgAAYjQAAGJZAABifQAAYqQAAGLIAABiywAAYs0AAGLPAABi0QAAYtMAAGLVAABi1gAAYtkAAGLmAABi9wAAYvkAAGL7AABi/QAAYv8AAGMBAABjAwAAYwUAAGMHAABjGAAAYxsAAGMeAABjIQAAYyQAAGMnAABjKgAAYy0AAGMwAABjMgAAY3EAAGNzAABjdQAAY3cAAGN6AABjewAAY3wAAGN9AABjfgAAY4AAAGOCAABjgwAAY4QAAGOGAABjhwAAY8YAAGPIAABjygAAY8wAAGPPAABj0AAAY9EAAGPSAABj0wAAY9UAAGPXAABj2AAAY9kAAGPbAABj3AAAZBsAAGQdAABkIAAAZCIAAGQlAABkJgAAZCcAAGQoAABkKQAAZCsAAGQtAABkLgAAZC8AAGQxAABkMgAAZD8AAGRAAABkQQAAZEMAAGSCAABkhAAAZIYAAGSIAABkiwAAZIwAAGSNAABkjgAAZI8AAGSRAABkkwAAZJQAAGSVAABklwAAZJgAAGTXAABk2QAAZNsAAGTdAABk4AAAZOEAAGTiAABk4wAAZOQAAGTmAABk6AAAZOkAAGTqAABk7AAAZO0AAGUsAABlLgAAZTAAAGUyAABlNQAAZTYAAGU3AABlOAAAZTkAAGU7AABlPQAAZT4AAGU/AABlQQAAZUIAAGWBAABlgwAAZYUAAGWHAABligAAZYsAAGWMAABljQAAZY4AAGWQAABlkgAAZZMAAGWUAABllgAAZZcAAGXWAABl2AAAZdoAAGXcAABl3wAAZeAAAGXhAABl4gAAZeMAAGXlAABl5wAAZegAAGXpAABl6wAAZewAAGYRAABmNQAAZlwAAGaAAABmgwAAZoUAAGaHAABmiQAAZosAAGaNAABmjgAAZpEAAGaeAABmrQAAZq8AAGaxAABmswAAZrUAAGa3AABmuQAAZrsAAGbKAABmzQAAZtAAAGbTAABm1gAAZtkAAGbcAABm3wAAZuEAAGcgAABnIgAAZyQAAGcmAABnKQAAZyoAAGcrAABnLAAAZy0AAGcvAABnMQAAZzIAAGczAABnNQAAZzYAAGd1AABndwAAZ3kAAGd7AABnfgAAZ38AAGeAAABngQAAZ4IAAGeEAABnhgAAZ4cAAGeIAABnigAAZ4sAAGfKAABnzAAAZ84AAGfQAABn0wAAZ9QAAGfVAABn1gAAZ9cAAGfZAABn2wAAZ9wAAGfdAABn3wAAZ+AAAGgfAABoIQAAaCMAAGglAABoKAAAaCkAAGgqAABoKwAAaCwAAGguAABoMAAAaDEAAGgyAABoNAAAaDUAAGh0AABodgAAaHgAAGh6AABofQAAaH4AAGh/AABogAAAaIEAAGiDAABohQAAaIYAAGiHAABoiQAAaIoAAGjJAABoywAAaM0AAGjPAABo0gAAaNMAAGjUAABo1QAAaNYAAGjYAABo2gAAaNsAAGjcAABo3gAAaN8AAGkeAABpIAAAaSIAAGkkAABpJwAAaSgAAGkpAABpKgAAaSsAAGktAABpLwAAaTAAAGkxAABpMwAAaTQAAGl/AABpogAAacIAAGniAABp5AAAaeYAAGnoAABp6gAAaewAAGntAABp7gAAafEAAGnyAABp9AAAafUAAGn3AABp+QAAafoAAGn7AABp/gAAaf8AAGoEAABqEQAAahYAAGoYAABqGgAAah8AAGoiAABqJQAAaicAAGpMAABqcAAAapcAAGq7AABqvgAAasAAAGrCAABqxAAAasYAAGrIAABqyQAAaswAAGrZAABq6gAAauwAAGruAABq8AAAavIAAGr0AABq9gAAavgAAGr6AABrCwAAaw4AAGsRAABrFAAAaxcAAGsaAABrHQAAayAAAGsjAABrJQAAa2QAAGtmAABraAAAa2oAAGttAABrbgAAa28AAGtwAABrcQAAa3MAAGt1AABrdgAAa3cAAGt5AABregAAa7kAAGu7AABrvQAAa78AAGvCAABrwwAAa8QAAGvFAABrxgAAa8gAAGvKAABrywAAa8wAAGvOAABrzwAAbA4AAGwQAABsEwAAbBUAAGwYAABsGQAAbBoAAGwbAABsHAAAbB4AAGwgAABsIQAAbCIAAGwkAABsJQAAbDIAAGwzAABsNAAAbDYAAGx1AABsdwAAbHkAAGx7AABsfgAAbH8AAGyAAABsgQAAbIIAAGyEAABshgAAbIcAAGyIAABsigAAbIsAAGzKAABszAAAbM4AAGzQAABs0wAAbNQAAGzVAABs1gAAbNcAAGzZAABs2wAAbNwAAGzdAABs3wAAbOAAAG0fAABtIQAAbSMAAG0lAABtKAAAbSkAAG0qAABtKwAAbSwAAG0uAABtMAAAbTEAAG0yAABtNAAAbTUAAG10AABtdgAAbXgAAG16AABtfQAAbX4AAG1/AABtgAAAbYEAAG2DAABthQAAbYYAAG2HAABtiQAAbYoAAG3JAABtywAAbc0AAG3PAABt0gAAbdMAAG3UAABt1QAAbdYAAG3YAABt2gAAbdsAAG3cAABt3gAAbd8AAG4EAABuKAAAbk8AAG5zAABudgAAbngAAG56AABufAAAbn4AAG6AAABugQAAboQAAG6RAABuoAAAbqIAAG6kAABupgAAbqgAAG6qAABurAAAbq4AAG69AABuwAAAbsMAAG7GAABuyQAAbswAAG7PAABu0gAAbtQAAG8TAABvFQAAbxcAAG8ZAABvHAAAbx0AAG8eAABvHwAAbyAAAG8iAABvJAAAbyUAAG8mAABvKAAAbykAAG9oAABvagAAb2wAAG9uAABvcQAAb3IAAG9zAABvdAAAb3UAAG93AABveQAAb3oAAG97AABvfQAAb34AAG+9AABvvwAAb8EAAG/DAABvxgAAb8cAAG/IAABvyQAAb8oAAG/MAABvzgAAb88AAG/QAABv0gAAb9MAAHASAABwFAAAcBYAAHAYAABwGwAAcBwAAHAdAABwHgAAcB8AAHAhAABwIwAAcCQAAHAlAABwJwAAcCgAAHBnAABwaQAAcGsAAHBtAABwcAAAcHEAAHByAABwcwAAcHQAAHB2AABweAAAcHkAAHB6AABwfAAAcH0AAHC8AABwvgAAcMEAAHDDAABwxgAAcMcAAHDIAABwyQAAcMoAAHDMAABwzgAAcM8AAHDQAABw0gAAcNMAAHDvAABxLgAAcTAAAHEyAABxNAAAcTcAAHE4AABxOQAAcToAAHE7AABxPQAAcT8AAHFAAABxQQAAcUMAAHFEAABxjwAAcbIAAHHSAABx8gAAcfQAAHH2AABx+AAAcfoAAHH8AABx/QAAcf4AAHIBAAByAgAAcgQAAHIFAAByBwAAcgkAAHIKAAByCwAAcg4AAHIPAAByFAAAciEAAHImAAByKAAAcioAAHIvAAByMgAAcjUAAHI3AAByXAAAcoAAAHKnAAByywAAcs4AAHLQAABy0gAActQAAHLWAABy2AAActkAAHLcAABy6QAAcvoAAHL8AABy/gAAcwAAAHMCAABzBAAAcwYAAHMIAABzCgAAcxsAAHMeAABzIQAAcyQAAHMnAABzKgAAcy0AAHMwAABzMwAAczUAAHN0AABzdgAAc3gAAHN6AABzfQAAc34AAHN/AABzgAAAc4EAAHODAABzhQAAc4YAAHOHAABziQAAc4oAAHPJAABzywAAc80AAHPPAABz0gAAc9MAAHPUAABz1QAAc9YAAHPYAABz2gAAc9sAAHPcAABz3gAAc98AAHQeAAB0IAAAdCMAAHQlAAB0KAAAdCkAAHQqAAB0KwAAdCwAAHQuAAB0MAAAdDEAAHQyAAB0NAAAdDUAAHRCAAB0QwAAdEQAAHRGAAB0hQAAdIcAAHSJAAB0iwAAdI4AAHSPAAB0kAAAdJEAAHSSAAB0lAAAdJYAAHSXAAB0mAAAdJoAAHSbAAB02gAAdNwAAHTeAAB04AAAdOMAAHTkAAB05QAAdOYAAHTnAAB06QAAdOsAAHTsAAB07QAAdO8AAHTwAAB1LwAAdTEAAHUzAAB1NQAAdTgAAHU5AAB1OgAAdTsAAHU8AAB1PgAAdUAAAHVBAAB1QgAAdUQAAHVFAAB1hAAAdYYAAHWIAAB1igAAdY0AAHWOAAB1jwAAdZAAAHWRAAB1kwAAdZUAAHWWAAB1lwAAdZkAAHWaAAB12QAAddsAAHXdAAB13wAAdeIAAHXjAAB15AAAdeUAAHXmAAB16AAAdeoAAHXrAAB17AAAde4AAHXvAAB2FAAAdjgAAHZfAAB2gwAAdoYAAHaIAAB2igAAdowAAHaOAAB2kAAAdpEAAHaUAAB2oQAAdrAAAHayAAB2tAAAdrYAAHa4AAB2ugAAdrwAAHa+AAB2zQAAdtAAAHbTAAB21gAAdtkAAHbcAAB23wAAduIAAHbkAAB3IwAAdyUAAHcnAAB3KQAAdywAAHctAAB3LgAAdy8AAHcwAAB3MgAAdzQAAHc1AAB3NgAAdzgAAHc5AAB3eAAAd3oAAHd8AAB3fgAAd4EAAHeCAAB3gwAAd4QAAHeFAAB3hwAAd4kAAHeKAAB3iwAAd40AAHeOAAB3zQAAd88AAHfRAAB30wAAd9YAAHfXAAB32AAAd9kAAHfaAAB33AAAd94AAHffAAB34AAAd+IAAHfjAAB4IgAAeCQAAHgmAAB4KAAAeCsAAHgsAAB4LQAAeC4AAHgvAAB4MQAAeDMAAHg0AAB4NQAAeDcAAHg4AAB4dwAAeHkAAHh7AAB4fQAAeIAAAHiBAAB4ggAAeIMAAHiEAAB4hgAAeIgAAHiJAAB4igAAeIwAAHiNAAB4zAAAeM4AAHjQAAB40gAAeNUAAHjWAAB41wAAeNgAAHjZAAB42wAAeN0AAHjeAAB43wAAeOEAAHjiAAB5IQAAeSMAAHklAAB5JwAAeSoAAHkrAAB5LAAAeS0AAHkuAAB5MAAAeTIAAHkzAAB5NAAAeTYAAHk3AAB5ggAAeaUAAHnFAAB55QAAeecAAHnpAAB56wAAee0AAHnvAAB58AAAefEAAHn0AAB59QAAefcAAHn4AAB5+gAAefwAAHn9AAB5/gAAegEAAHoCAAB6CwAAehgAAHodAAB6HwAAeiEAAHomAAB6KQAAeiwAAHouAAB6UwAAencAAHqeAAB6wgAAesUAAHrHAAB6yQAAessAAHrNAAB6zwAAetAAAHrTAAB64AAAevEAAHrzAAB69QAAevcAAHr5AAB6+wAAev0AAHr/AAB7AQAAexIAAHsVAAB7GAAAexsAAHseAAB7IQAAeyQAAHsnAAB7KgAAeywAAHtrAAB7bQAAe28AAHtxAAB7dAAAe3UAAHt2AAB7dwAAe3gAAHt6AAB7fAAAe30AAHt+AAB7gAAAe4EAAHvAAAB7wgAAe8QAAHvGAAB7yQAAe8oAAHvLAAB7zAAAe80AAHvPAAB70QAAe9IAAHvTAAB71QAAe9YAAHwVAAB8FwAAfBoAAHwcAAB8HwAAfCAAAHwhAAB8IgAAfCMAAHwlAAB8JwAAfCgAAHwpAAB8KwAAfCwAAHw5AAB8OgAAfDsAAHw9AAB8fAAAfH4AAHyAAAB8ggAAfIUAAHyGAAB8hwAAfIgAAHyJAAB8iwAAfI0AAHyOAAB8jwAAfJEAAHySAAB80QAAfNMAAHzVAAB81wAAfNoAAHzbAAB83AAAfN0AAHzeAAB84AAAfOIAAHzjAAB85AAAfOYAAHznAAB9JgAAfSgAAH0qAAB9LAAAfS8AAH0wAAB9MQAAfTIAAH0zAAB9NQAAfTcAAH04AAB9OQAAfTsAAH08AAB9ewAAfX0AAH1/AAB9gQAAfYQAAH2FAAB9hgAAfYcAAH2IAAB9igAAfYwAAH2NAAB9jgAAfZAAAH2RAAB90AAAfdIAAH3UAAB91gAAfdkAAH3aAAB92wAAfdwAAH3dAAB93wAAfeEAAH3iAAB94wAAfeUAAH3mAAB+CwAAfi8AAH5WAAB+egAAfn0AAH5/AAB+gQAAfoMAAH6FAAB+hwAAfogAAH6LAAB+mAAAfqcAAH6pAAB+qwAAfq0AAH6vAAB+sQAAfrMAAH61AAB+xAAAfscAAH7KAAB+zQAAftAAAH7TAAB+1gAAftkAAH7bAAB/GgAAfxwAAH8eAAB/IAAAfyMAAH8kAAB/JQAAfyYAAH8nAAB/KQAAfysAAH8sAAB/LQAAfy8AAH8wAAB/bwAAf3EAAH9zAAB/dQAAf3gAAH95AAB/egAAf3sAAH98AAB/fgAAf4AAAH+BAAB/ggAAf4QAAH+FAAB/xAAAf8YAAH/IAAB/ygAAf80AAH/OAAB/zwAAf9AAAH/RAAB/0wAAf9UAAH/WAAB/1wAAf9kAAH/aAACAGQAAgBsAAIAeAACAIAAAgCMAAIAkAACAJQAAgCYAAIAnAACAKQAAgCsAAIAsAACALQAAgC8AAIAwAACAbwAAgHEAAIBzAACAdQAAgHgAAIB5AACAegAAgHsAAIB8AACAfgAAgIAAAICBAACAggAAgIQAAICFAACAxAAAgMYAAIDIAACAygAAgM0AAIDOAACAzwAAgNAAAIDRAACA0wAAgNUAAIDWAACA1wAAgNkAAIDaAACBGQAAgRsAAIEdAACBHwAAgSIAAIEjAACBJAAAgSUAAIEmAACBKAAAgSoAAIErAACBLAAAgS4AAIEvAACBegAAgZ0AAIG9AACB3QAAgd8AAIHhAACB4wAAgeUAAIHnAACB6AAAgekAAIHsAACB7QAAge8AAIHwAACB8gAAgfQAAIH1AACB9gAAgfkAAIH6AACB/wAAggwAAIIRAACCEwAAghUAAIIaAACCHQAAgiAAAIIiAACCRwAAgmsAAIKSAACCtgAAgrkAAIK7AACCvQAAgr8AAILBAACCwwAAgsQAAILHAACC1AAAguUAAILnAACC6QAAgusAAILtAACC7wAAgvEAAILzAACC9QAAgwYAAIMJAACDDAAAgw8AAIMSAACDFQAAgxgAAIMbAACDHgAAgyAAAINfAACDYQAAg2MAAINlAACDaAAAg2kAAINqAACDawAAg2wAAINuAACDcAAAg3EAAINyAACDdAAAg3UAAIO0AACDtgAAg7gAAIO6AACDvQAAg74AAIO/AACDwAAAg8EAAIPDAACDxQAAg8YAAIPHAACDyQAAg8oAAIQJAACECwAAhA4AAIQQAACEEwAAhBQAAIQVAACEFgAAhBcAAIQZAACEGwAAhBwAAIQdAACEHwAAhCAAAIQtAACELgAAhC8AAIQxAACEcAAAhHIAAIR0AACEdgAAhHkAAIR6AACEewAAhHwAAIR9AACEfwAAhIEAAISCAACEgwAAhIUAAISGAACExQAAhMcAAITJAACEywAAhM4AAITPAACE0AAAhNEAAITSAACE1AAAhNYAAITXAACE2AAAhNoAAITbAACFGgAAhRwAAIUeAACFIAAAhSMAAIUkAACFJQAAhSYAAIUnAACFKQAAhSsAAIUsAACFLQAAhS8AAIUwAACFbwAAhXEAAIVzAACFdQAAhXgAAIV5AACFegAAhXsAAIV8AACFfgAAhYAAAIWBAACFggAAhYQAAIWFAACFxAAAhcYAAIXIAACFygAAhc0AAIXOAACFzwAAhdAAAIXRAACF0wAAhdUAAIXWAACF1wAAhdkAAIXaAACF/wAAhiMAAIZKAACGbgAAhnEAAIZzAACGdQAAhncAAIZ5AACGewAAhnwAAIZ/AACGjAAAhpsAAIadAACGnwAAhqEAAIajAACGpQAAhqcAAIapAACGuAAAhrsAAIa+AACGwQAAhsQAAIbHAACGygAAhs0AAIbPAACHDgAAhxAAAIcSAACHFAAAhxcAAIcYAACHGQAAhxoAAIcbAACHHQAAhx8AAIcgAACHIQAAhyMAAIckAACHYwAAh2UAAIdnAACHaQAAh2wAAIdtAACHbgAAh28AAIdwAACHcgAAh3QAAId1AACHdgAAh3gAAId5AACHuAAAh7oAAIe8AACHvgAAh8EAAIfCAACHwwAAh8QAAIfFAACHxwAAh8kAAIfKAACHywAAh80AAIfOAACIDQAAiA8AAIgRAACIEwAAiBYAAIgXAACIGAAAiBkAAIgaAACIHAAAiB4AAIgfAACIIAAAiCIAAIgjAACIYgAAiGQAAIhmAACIaAAAiGsAAIhsAACIbQAAiG4AAIhvAACIcQAAiHMAAIh0AACIdQAAiHcAAIh4AACItwAAiLkAAIi8AACIvgAAiMEAAIjCAACIwwAAiMQAAIjFAACIxwAAiMkAAIjKAACIywAAiM0AAIjOAACI6gAAiSkAAIkrAACJLQAAiS8AAIkyAACJMwAAiTQAAIk1AACJNgAAiTgAAIk6AACJOwAAiTwAAIk+AACJPwAAiYoAAImtAACJzQAAie0AAInvAACJ8QAAifMAAIn1AACJ9wAAifgAAIn5AACJ/AAAif0AAIn/AACKAAAAigIAAIoEAACKBQAAigYAAIoJAACKCgAAig8AAIocAACKIQAAiiMAAIolAACKKgAAii0AAIowAACKMgAAilcAAIp7AACKogAAisYAAIrJAACKywAAis0AAIrPAACK0QAAitMAAIrUAACK1wAAiuQAAIr1AACK9wAAivkAAIr7AACK/QAAiv8AAIsBAACLAwAAiwUAAIsWAACLGQAAixwAAIsfAACLIgAAiyUAAIsoAACLKwAAiy4AAIswAACLbwAAi3EAAItzAACLdQAAi3gAAIt5AACLegAAi3sAAIt8AACLfgAAi4AAAIuBAACLggAAi4QAAIuFAACLxAAAi8YAAIvIAACLygAAi80AAIvOAACLzwAAi9AAAIvRAACL0wAAi9UAAIvWAACL1wAAi9kAAIvaAACMGQAAjBsAAIweAACMIAAAjCMAAIwkAACMJQAAjCYAAIwnAACMKQAAjCsAAIwsAACMLQAAjC8AAIwwAACMPQAAjD4AAIw/AACMQQAAjIAAAIyCAACMhAAAjIYAAIyJAACMigAAjIsAAIyMAACMjQAAjI8AAIyRAACMkgAAjJMAAIyVAACMlgAAjNUAAIzXAACM2QAAjNsAAIzeAACM3wAAjOAAAIzhAACM4gAAjOQAAIzmAACM5wAAjOgAAIzqAACM6wAAjSoAAI0sAACNLgAAjTAAAI0zAACNNAAAjTUAAI02AACNNwAAjTkAAI07AACNPAAAjT0AAI0/AACNQAAAjX8AAI2BAACNgwAAjYUAAI2IAACNiQAAjYoAAI2LAACNjAAAjY4AAI2QAACNkQAAjZIAAI2UAACNlQAAjdQAAI3WAACN2AAAjdoAAI3dAACN3gAAjd8AAI3gAACN4QAAjeMAAI3lAACN5gAAjecAAI3pAACN6gAAjg8AAI4zAACOWgAAjn4AAI6BAACOgwAAjoUAAI6HAACOiQAAjosAAI6MAACOjwAAjpwAAI6rAACOrQAAjq8AAI6xAACOswAAjrUAAI63AACOuQAAjsgAAI7LAACOzgAAjtEAAI7UAACO1wAAjtoAAI7dAACO3wAAjx4AAI8gAACPIgAAjyQAAI8nAACPKAAAjykAAI8qAACPKwAAjy0AAI8vAACPMAAAjzEAAI8zAACPNAAAj3MAAI91AACPdwAAj3kAAI98AACPfQAAj34AAI9/AACPgAAAj4IAAI+EAACPhQAAj4YAAI+IAACPiQAAj8gAAI/KAACPzAAAj84AAI/RAACP0gAAj9MAAI/UAACP1QAAj9cAAI/ZAACP2gAAj9sAAI/dAACP3gAAkB0AAJAfAACQIgAAkCQAAJAnAACQKAAAkCkAAJAqAACQKwAAkC0AAJAvAACQMAAAkDEAAJAzAACQNAAAkHMAAJB1AACQdwAAkHkAAJB8AACQfQAAkH4AAJB/AACQgAAAkIIAAJCEAACQhQAAkIYAAJCIAACQiQAAkMgAAJDKAACQzAAAkM4AAJDRAACQ0gAAkNMAAJDUAACQ1QAAkNcAAJDZAACQ2gAAkNsAAJDdAACQ3gAAkR0AAJEfAACRIQAAkSMAAJEmAACRJwAAkSgAAJEpAACRKgAAkSwAAJEuAACRLwAAkTAAAJEyAACRMwAAkX4AAJGhAACRwQAAkeEAAJHjAACR5QAAkecAAJHpAACR6wAAkewAAJHtAACR8AAAkfEAAJHzAACR9AAAkfYAAJH4AACR+QAAkfoAAJH9AACR/gAAkgcAAJIUAACSGQAAkhsAAJIdAACSIgAAkiUAAJIoAACSKgAAkk8AAJJzAACSmgAAkr4AAJLBAACSwwAAksUAAJLHAACSyQAAkssAAJLMAACSzwAAktwAAJLtAACS7wAAkvEAAJLzAACS9QAAkvcAAJL5AACS+wAAkv0AAJMOAACTEQAAkxQAAJMXAACTGgAAkx0AAJMgAACTIwAAkyYAAJMoAACTZwAAk2kAAJNrAACTbQAAk3AAAJNxAACTcgAAk3MAAJN0AACTdgAAk3gAAJN5AACTegAAk3wAAJN9AACTvAAAk74AAJPAAACTwgAAk8UAAJPGAACTxwAAk8gAAJPJAACTywAAk80AAJPOAACTzwAAk9EAAJPSAACUEQAAlBMAAJQWAACUGAAAlBsAAJQcAACUHQAAlB4AAJQfAACUIQAAlCMAAJQkAACUJQAAlCcAAJQoAACUNQAAlDYAAJQ3AACUOQAAlHgAAJR6AACUfAAAlH4AAJSBAACUggAAlIMAAJSEAACUhQAAlIcAAJSJAACUigAAlIsAAJSNAACUjgAAlM0AAJTPAACU0QAAlNMAAJTWAACU1wAAlNgAAJTZAACU2gAAlNwAAJTeAACU3wAAlOAAAJTiAACU4wAAlSIAAJUkAACVJgAAlSgAAJUrAACVLAAAlS0AAJUuAACVLwAAlTEAAJUzAACVNAAAlTUAAJU3AACVOAAAlXcAAJV5AACVewAAlX0AAJWAAACVgQAAlYIAAJWDAACVhAAAlYYAAJWIAACViQAAlYoAAJWMAACVjQAAlcwAAJXOAACV0AAAldIAAJXVAACV1gAAldcAAJXYAACV2QAAldsAAJXdAACV3gAAld8AAJXhAACV4gAAlgcAAJYrAACWUgAAlnYAAJZ5AACWewAAln0AAJZ/AACWgQAAloMAAJaEAACWhwAAlpQAAJajAACWpQAAlqcAAJapAACWqwAAlq0AAJavAACWsQAAlsAAAJbDAACWxgAAlskAAJbMAACWzwAAltIAAJbVAACW1wAAlxYAAJcYAACXGgAAlxwAAJcfAACXIAAAlyEAAJciAACXIwAAlyUAAJcnAACXKAAAlykAAJcrAACXLAAAl2sAAJdtAACXbwAAl3EAAJd0AACXdQAAl3YAAJd3AACXeAAAl3oAAJd8AACXfQAAl34AAJeAAACXgQAAl8AAAJfCAACXxAAAl8YAAJfJAACXygAAl8sAAJfMAACXzQAAl88AAJfRAACX0gAAl9MAAJfVAACX1gAAmBUAAJgXAACYGQAAmBsAAJgeAACYHwAAmCAAAJghAACYIgAAmCQAAJgmAACYJwAAmCgAAJgqAACYKwAAmGoAAJhsAACYbgAAmHAAAJhzAACYdAAAmHUAAJh2AACYdwAAmHkAAJh7AACYfAAAmH0AAJh/AACYgAAAmL8AAJjBAACYwwAAmMUAAJjIAACYyQAAmMoAAJjLAACYzAAAmM4AAJjQAACY0QAAmNIAAJjUAACY1QAAmRQAAJkWAACZGAAAmRoAAJkdAACZHgAAmR8AAJkgAACZIQAAmSMAAJklAACZJgAAmScAAJkpAACZKgAAmXUAAJmYAACZuAAAmdgAAJnaAACZ3AAAmd4AAJngAACZ4gAAmeMAAJnkAACZ5wAAmegAAJnqAACZ6wAAme4AAJnwAACZ8QAAmfIAAJn1AACZ9gAAmfsAAJoIAACaDQAAmg8AAJoRAACaFgAAmhkAAJocAACaHgAAmkMAAJpnAACajgAAmrIAAJq1AACatwAAmrkAAJq7AACavQAAmr8AAJrAAACawwAAmtAAAJrhAACa4wAAmuUAAJrnAACa6QAAmusAAJrtAACa7wAAmvEAAJsCAACbBQAAmwgAAJsLAACbDgAAmxEAAJsUAACbFwAAmxoAAJscAACbWwAAm10AAJtfAACbYQAAm2QAAJtlAACbZgAAm2cAAJtoAACbagAAm2wAAJttAACbbgAAm3AAAJtxAACbsAAAm7IAAJu0AACbtgAAm7kAAJu6AACbuwAAm7wAAJu9AACbvwAAm8EAAJvCAACbwwAAm8UAAJvGAACcBQAAnAcAAJwKAACcDAAAnA8AAJwQAACcEQAAnBIAAJwTAACcFQAAnBcAAJwYAACcGQAAnBsAAJwcAACcKQAAnCoAAJwrAACcLQAAnGwAAJxuAACccAAAnHIAAJx1AACcdgAAnHcAAJx4AACceQAAnHsAAJx9AACcfgAAnH8AAJyBAACcggAAnMEAAJzDAACcxQAAnMcAAJzKAACcywAAnMwAAJzNAACczgAAnNAAAJzSAACc0wAAnNQAAJzWAACc1wAAnRYAAJ0YAACdGgAAnRwAAJ0fAACdIAAAnSEAAJ0iAACdIwAAnSUAAJ0nAACdKAAAnSkAAJ0rAACdLAAAnWsAAJ1tAACdbwAAnXEAAJ10AACddQAAnXYAAJ13AACdeAAAnXoAAJ18AACdfQAAnX4AAJ2AAACdgQAAncAAAJ3CAACdxAAAncYAAJ3JAACdygAAncsAAJ3MAACdzQAAnc8AAJ3RAACd0gAAndMAAJ3VAACd1gAAnfsAAJ4fAACeRgAAnmoAAJ5tAACebwAAnnEAAJ5zAACedQAAnncAAJ54AACeewAAnogAAJ6VAACelwAAnpkAAJ6bAACenQAAnp8AAJ6hAACergAAnrEAAJ60AACetwAAnroAAJ69AACewAAAnsIAAJ8BAACfAwAAnwYAAJ8IAACfCwAAnwwAAJ8NAACfDgAAnw8AAJ8RAACfEwAAnxQAAJ8VAACfFwAAnxgAAJ9bAACffwAAn6MAAJ/GAACf7QAAoA0AAKA0AACgWwAAoHsAAKCfAACgwwAAoMUAAKDIAACgygAAoMwAAKDOAACg0QAAoNQAAKDWAACg2AAAoNsAAKDdAACg3wAAoOIAAKDlAACg5gAAoOsAAKD4AACg+wAAoP0AAKEAAAChAwAAoQUAAKEqAAChTgAAoXUAAKGZAAChnAAAoZ4AAKGgAAChogAAoaQAAKGmAAChpwAAoaoAAKG3AAChygAAocwAAKHOAACh0AAAodIAAKHUAACh1gAAodgAAKHaAACh3AAAoe8AAKHyAACh9QAAofgAAKH7AACh/gAAogEAAKIEAACiBwAAogoAAKIMAACiSwAAok0AAKJQAACiUgAAolUAAKJWAACiVwAAolgAAKJZAACiWwAAol0AAKJeAACiXwAAomEAAKJiAACiawAAomwAAKJuAACirQAAoq8AAKKxAACiswAAorYAAKK3AACiuAAAorkAAKK6AACivAAAor4AAKK/AACiwAAAosIAAKLDAACjAgAAowQAAKMHAACjCQAAowwAAKMNAACjDgAAow8AAKMQAACjEgAAoxQAAKMVAACjFgAAoxgAAKMZAACjIgAAoyMAAKMlAACjZAAAo2YAAKNoAACjagAAo20AAKNuAACjbwAAo3AAAKNxAACjcwAAo3UAAKN2AACjdwAAo3kAAKN6AACjuQAAo7sAAKO+AACjwAAAo8MAAKPEAACjxQAAo8YAAKPHAACjyQAAo8sAAKPMAACjzQAAo88AAKPQAACj2QAAo9oAAKPcAACkGwAApB0AAKQfAACkIQAApCQAAKQlAACkJgAApCcAAKQoAACkKgAApCwAAKQtAACkLgAApDAAAKQxAACkcAAApHIAAKR1AACkdwAApHoAAKR7AACkfAAApH0AAKR+AACkgAAApIIAAKSDAACkhAAApIYAAKSHAACklAAApJUAAKSWAACkmAAApNcAAKTZAACk2wAApN0AAKTgAACk4QAApOIAAKTjAACk5AAApOYAAKToAACk6QAApOoAAKTsAACk7QAApSwAAKUuAAClMQAApTMAAKU2AAClNwAApTgAAKU5AAClOgAApTwAAKU+AAClPwAApUAAAKVCAAClQwAApU4AAKVbAAClZgAApWgAAKVrAAClbgAApXEAAKVzAAClfgAApYEAAKWEAAClhwAApYoAAKWNAACljwAApZIAAKWXAAClngAApekAAKYMAACmLAAApkwAAKZOAACmUAAAplIAAKZUAACmVwAAplgAAKZZAACmXAAApl0AAKZfAACmYAAApmIAAKZkAACmZQAApmYAAKZpAACmagAApnMAAKaAAACmhQAApocAAKaJAACmjgAAppEAAKaUAACmlgAAprsAAKbfAACnBgAApyoAAKctAACnLwAApzEAAKczAACnNQAApzcAAKc4AACnOwAAp0gAAKdZAACnWwAAp10AAKdfAACnYQAAp2MAAKdlAACnZwAAp2kAAKd6AACnfQAAp4AAAKeDAACnhgAAp4kAAKeMAACnjwAAp5IAAKeUAACn0wAAp9UAAKfXAACn2QAAp9wAAKfdAACn3gAAp98AAKfgAACn4gAAp+QAAKflAACn5gAAp+gAAKfpAACoKAAAqCoAAKgsAACoLgAAqDEAAKgyAACoMwAAqDQAAKg1AACoNwAAqDkAAKg6AACoOwAAqD0AAKg+AACofQAAqH8AAKiCAACohAAAqIcAAKiIAACoiQAAqIoAAKiLAACojQAAqI8AAKiQAACokQAAqJMAAKiUAACooQAAqKIAAKijAACopQAAqOQAAKjmAACo6AAAqOoAAKjtAACo7gAAqO8AAKjwAACo8QAAqPMAAKj1AACo9gAAqPcAAKj5AACo+gAAqTkAAKk7AACpPQAAqT8AAKlCAACpQwAAqUQAAKlFAACpRgAAqUgAAKlKAACpSwAAqUwAAKlOAACpTwAAqY4AAKmQAACpkgAAqZQAAKmXAACpmAAAqZkAAKmaAACpmwAAqZ0AAKmfAACpoAAAqaEAAKmjAACppAAAqeMAAKnlAACp5wAAqekAAKnsAACp7QAAqe4AAKnvAACp8AAAqfIAAKn0AACp9QAAqfYAAKn4AACp+QAAqjgAAKo6AACqPAAAqj4AAKpBAACqQgAAqkMAAKpEAACqRQAAqkcAAKpJAACqSgAAqksAAKpNAACqTgAAqnMAAKqXAACqvgAAquIAAKrlAACq5wAAqukAAKrrAACq7QAAqu8AAKrwAACq8wAAqwAAAKsPAACrEQAAqxMAAKsVAACrFwAAqxkAAKsbAACrHQAAqywAAKsvAACrMgAAqzUAAKs4AACrOwAAqz4AAKtBAACrQwAAq4IAAKuEAACrhgAAq4gAAKuLAACrjAAAq40AAKuOAACrjwAAq5EAAKuTAACrlAAAq5UAAKuXAACrmAAAq9cAAKvZAACr2wAAq90AAKvgAACr4QAAq+IAAKvjAACr5AAAq+YAAKvoAACr6QAAq+oAAKvsAACr7QAArCwAAKwuAACsMAAArDIAAKw1AACsNgAArDcAAKw4AACsOQAArDsAAKw9AACsPgAArD8AAKxBAACsQgAArIEAAKyDAACshQAArIcAAKyKAACsiwAArIwAAKyNAACsjgAArJAAAKySAACskwAArJQAAKyWAACslwAArNYAAKzYAACs2gAArNwAAKzfAACs4AAArOEAAKziAACs4wAArOUAAKznAACs6AAArOkAAKzrAACs7AAArSsAAK0tAACtLwAArTEAAK00AACtNQAArTYAAK03AACtOAAArToAAK08AACtPQAArT4AAK1AAACtQQAArYAAAK2CAACthAAArYYAAK2JAACtigAArYsAAK2MAACtjQAArY8AAK2RAACtkgAArZMAAK2VAACtlgAAreEAAK4EAACuJAAArkQAAK5GAACuSAAArkoAAK5MAACuTwAArlAAAK5RAACuVAAArlUAAK5XAACuWAAArloAAK5dAACuXgAArl8AAK5iAACuYwAArmgAAK51AACuegAArnwAAK5+AACugwAAroYAAK6JAACuiwAArrAAAK7UAACu+wAArx8AAK8iAACvJAAAryYAAK8oAACvKgAArywAAK8tAACvMAAArz0AAK9OAACvUAAAr1IAAK9UAACvVgAAr1gAAK9aAACvXAAAr14AAK9vAACvcgAAr3UAAK94AACvewAAr34AAK+BAACvhAAAr4cAAK+JAACvyAAAr8oAAK/MAACvzgAAr9EAAK/SAACv0wAAr9QAAK/VAACv1wAAr9kAAK/aAACv2wAAr90AAK/eAACwHQAAsB8AALAhAACwIwAAsCYAALAnAACwKAAAsCkAALAqAACwLAAAsC4AALAvAACwMAAAsDIAALAzAACwcgAAsHQAALB3AACweQAAsHwAALB9AACwfgAAsH8AALCAAACwggAAsIQAALCFAACwhgAAsIgAALCJAACwlgAAsJcAALCYAACwmgAAsNkAALDbAACw3QAAsN8AALDiAACw4wAAsOQAALDlAACw5gAAsOgAALDqAACw6wAAsOwAALDuAACw7wAAsS4AALEwAACxMgAAsTQAALE3AACxOAAAsTkAALE6AACxOwAAsT0AALE/AACxQAAAsUEAALFDAACxRAAAsYMAALGFAACxhwAAsYkAALGMAACxjQAAsY4AALGPAACxkAAAsZIAALGUAACxlQAAsZYAALGYAACxmQAAsdgAALHaAACx3AAAsd4AALHhAACx4gAAseMAALHkAACx5QAAsecAALHpAACx6gAAsesAALHtAACx7gAAsi0AALIvAACyMQAAsjMAALI2AACyNwAAsjgAALI5AACyOgAAsjwAALI+AACyPwAAskAAALJCAACyQwAAsmgAALKMAACyswAAstcAALLaAACy3AAAst4AALLgAACy4gAAsuQAALLlAACy6AAAsvUAALMEAACzBgAAswgAALMKAACzDAAAsw4AALMQAACzEgAAsyEAALMkAACzJwAAsyoAALMtAACzMAAAszMAALM2AACzOAAAs3cAALN5AACzewAAs30AALOAAACzgQAAs4IAALODAACzhAAAs4YAALOIAACziQAAs4oAALOMAACzjQAAs8wAALPOAACz0AAAs9IAALPVAACz1gAAs9cAALPYAACz2QAAs9sAALPdAACz3gAAs98AALPhAACz4gAAtCEAALQjAAC0JQAAtCcAALQqAAC0KwAAtCwAALQtAAC0LgAAtDAAALQyAAC0MwAAtDQAALQ2AAC0NwAAtHYAALR4AAC0egAAtHwAALR/AAC0gAAAtIEAALSCAAC0gwAAtIUAALSHAAC0iAAAtIkAALSLAAC0jAAAtMsAALTNAAC0zwAAtNEAALTUAAC01QAAtNYAALTXAAC02AAAtNoAALTcAAC03QAAtN4AALTgAAC04QAAtSAAALUiAAC1JAAAtSYAALUpAAC1KgAAtSsAALUsAAC1LQAAtS8AALUxAAC1MgAAtTMAALU1AAC1NgAAtXUAALV3AAC1eQAAtXsAALV+AAC1fwAAtYAAALWBAAC1ggAAtYQAALWGAAC1hwAAtYgAALWKAAC1iwAAtdYAALX5AAC2GQAAtjkAALY7AAC2PQAAtj8AALZBAAC2RAAAtkUAALZGAAC2SQAAtkoAALZMAAC2TQAAtk8AALZSAAC2UwAAtlQAALZXAAC2WAAAtl0AALZqAAC2bwAAtnEAALZzAAC2eAAAtnsAALZ+AAC2gAAAtqUAALbJAAC28AAAtxQAALcXAAC3GQAAtxsAALcdAAC3HwAAtyEAALciAAC3JQAAtzIAALdDAAC3RQAAt0cAALdJAAC3SwAAt00AALdPAAC3UQAAt1MAALdkAAC3ZwAAt2oAALdtAAC3cAAAt3MAALd2AAC3eQAAt3wAALd+AAC3vQAAt78AALfBAAC3wwAAt8YAALfHAAC3yAAAt8kAALfKAAC3zAAAt84AALfPAAC30AAAt9IAALfTAAC4EgAAuBQAALgWAAC4GAAAuBsAALgcAAC4HQAAuB4AALgfAAC4IQAAuCMAALgkAAC4JQAAuCcAALgoAAC4ZwAAuGkAALhsAAC4bgAAuHEAALhyAAC4cwAAuHQAALh1AAC4dwAAuHkAALh6AAC4ewAAuH0AALh+AAC4iwAAuIwAALiNAAC4jwAAuM4AALjQAAC40gAAuNQAALjXAAC42AAAuNkAALjaAAC42wAAuN0AALjfAAC44AAAuOEAALjjAAC45AAAuSMAALklAAC5JwAAuSkAALksAAC5LQAAuS4AALkvAAC5MAAAuTIAALk0AAC5NQAAuTYAALk4AAC5OQAAuXgAALl6AAC5fAAAuX4AALmBAAC5ggAAuYMAALmEAAC5hQAAuYcAALmJAAC5igAAuYsAALmNAAC5jgAAuc0AALnPAAC50QAAudMAALnWAAC51wAAudgAALnZAAC52gAAudwAALneAAC53wAAueAAALniAAC54wAAuiIAALokAAC6JgAAuigAALorAAC6LAAAui0AALouAAC6LwAAujEAALozAAC6NAAAujUAALo3AAC6OAAAul0AALqBAAC6qAAAuswAALrPAAC60QAAutMAALrVAAC61wAAutkAALraAAC63QAAuuoAALr5AAC6+wAAuv0AALr/AAC7AQAAuwMAALsFAAC7BwAAuxYAALsZAAC7HAAAux8AALsiAAC7JQAAuygAALsrAAC7LQAAu2wAALtuAAC7cAAAu3IAALt1AAC7dgAAu3cAALt4AAC7eQAAu3sAALt9AAC7fgAAu38AALuBAAC7ggAAu8EAALvDAAC7xQAAu8cAALvKAAC7ywAAu8wAALvNAAC7zgAAu9AAALvSAAC70wAAu9QAALvWAAC71wAAvBYAALwYAAC8GgAAvBwAALwfAAC8IAAAvCEAALwiAAC8IwAAvCUAALwnAAC8KAAAvCkAALwrAAC8LAAAvGsAALxtAAC8bwAAvHEAALx0AAC8dQAAvHYAALx3AAC8eAAAvHoAALx8AAC8fQAAvH4AALyAAAC8gQAAvMAAALzCAAC8xAAAvMYAALzJAAC8ygAAvMsAALzMAAC8zQAAvM8AALzRAAC80gAAvNMAALzVAAC81gAAvRUAAL0XAAC9GQAAvRsAAL0eAAC9HwAAvSAAAL0hAAC9IgAAvSQAAL0mAAC9JwAAvSgAAL0qAAC9KwAAvWoAAL1sAAC9bgAAvXAAAL1zAAC9dAAAvXUAAL12AAC9dwAAvXkAAL17AAC9fAAAvX0AAL1/AAC9gAAAvcsAAL3uAAC+DgAAvi4AAL4wAAC+MgAAvjQAAL42AAC+OQAAvjoAAL47AAC+PgAAvj8AAL5BAAC+QgAAvkQAAL5HAAC+SAAAvkkAAL5MAAC+TQAAvlIAAL5fAAC+ZAAAvmYAAL5oAAC+bQAAvnAAAL5zAAC+dQAAvpoAAL6+AAC+5QAAvwkAAL8MAAC/DgAAvxAAAL8SAAC/FAAAvxYAAL8XAAC/GgAAvycAAL84AAC/OgAAvzwAAL8+AAC/QAAAv0IAAL9EAAC/RgAAv0gAAL9ZAAC/XAAAv18AAL9iAAC/ZQAAv2gAAL9rAAC/bgAAv3EAAL9zAAC/sgAAv7QAAL+2AAC/uAAAv7sAAL+8AAC/vQAAv74AAL+/AAC/wQAAv8MAAL/EAAC/xQAAv8cAAL/IAADABwAAwAkAAMALAADADQAAwBAAAMARAADAEgAAwBMAAMAUAADAFgAAwBgAAMAZAADAGgAAwBwAAMAdAADAXAAAwF4AAMBhAADAYwAAwGYAAMBnAADAaAAAwGkAAMBqAADAbAAAwG4AAMBvAADAcAAAwHIAAMBzAADAgAAAwIEAAMCCAADAhAAAwMMAAMDFAADAxwAAwMkAAMDMAADAzQAAwM4AAMDPAADA0AAAwNIAAMDUAADA1QAAwNYAAMDYAADA2QAAwRgAAMEaAADBHAAAwR4AAMEhAADBIgAAwSMAAMEkAADBJQAAwScAAMEpAADBKgAAwSsAAMEtAADBLgAAwW0AAMFvAADBcQAAwXMAAMF2AADBdwAAwXgAAMF5AADBegAAwXwAAMF+AADBfwAAwYAAAMGCAADBgwAAwcIAAMHEAADBxgAAwcgAAMHLAADBzAAAwc0AAMHOAADBzwAAwdEAAMHTAADB1AAAwdUAAMHXAADB2AAAwhcAAMIZAADCGwAAwh0AAMIgAADCIQAAwiIAAMIjAADCJAAAwiYAAMIoAADCKQAAwioAAMIsAADCLQAAwlIAAMJ2AADCnQAAwsEAAMLEAADCxgAAwsgAAMLKAADCzAAAws4AAMLPAADC0gAAwt8AAMLuAADC8AAAwvIAAML0AADC9gAAwvgAAML6AADC/AAAwwsAAMMOAADDEQAAwxQAAMMXAADDGgAAwx0AAMMgAADDIgAAw2EAAMNjAADDZQAAw2cAAMNqAADDawAAw2wAAMNtAADDbgAAw3AAAMNyAADDcwAAw3QAAMN2AADDdwAAw7YAAMO4AADDugAAw7wAAMO/AADDwAAAw8EAAMPCAADDwwAAw8U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AAM8DAADPBAAAzwUAAM8HAADPCQAAzwoAAM8LAADPDQAAzw4AAM9NAADPTwAAz1EAAM9TAADPVgAAz1cAAM9YAADPWQAAz1oAAM9cAADPXgAAz18AAM9gAADPYgAAz2MAAM+iAADPpAAAz6YAAM+oAADPqwAAz6wAAM+tAADPrgAAz68AAM+xAADPswAAz7QAAM+1AADPtwAAz7gAANADAADQJgAA0EYAANBmAADQaAAA0GoAANBsAADQbgAA0HAAANBxAADQcgAA0HUAANB2AADQeAAA0HkAANB7AADQfQAA0H4AANB/AADQggAA0IMAANCMAADQmQAA0J4AANCgAADQogAA0KcAANCqAADQrQAA0K8AANDUAADQ+AAA0R8AANFDAADRRgAA0UgAANFKAADRTAAA0U4AANFQAADRUQAA0VQAANFhAADRcgAA0XQAANF2AADReAAA0XoAANF8AADRfgAA0YAAANGCAADRkwAA0ZYAANGZAADRnAAA0Z8AANGiAADRpQAA0agAANGrAADRrQAA0ewAANHuAADR8AAA0fIAANH1AADR9gAA0fcAANH4AADR+QAA0fsAANH9AADR/gAA0f8AANIBAADSAgAA0kEAANJDAADSRQAA0kcAANJKAADSSwAA0kwAANJNAADSTgAA0lAAANJSAADSUwAA0lQAANJWAADSVwAA0pYAANKYAADSmwAA0p0AANKgAADSoQAA0qIAANKjAADSpAAA0qYAANKoAADSqQAA0qoAANKsAADSrQAA0roAANK7AADSvAAA0r4AANL9AADS/wAA0wEAANMDAADTBgAA0wcAANMIAADTCQAA0woAANMMAADTDgAA0w8AANMQAADTEgAA0xMAANNSAADTVAAA01YAANNYAADTWwAA01wAANNdAADTXgAA018AANNhAADTYwAA02QAANNlAADTZwAA02gAANOnAADTqQAA06sAANOtAADTsAAA07EAANOyAADTswAA07QAANO2AADTuAAA07kAANO6AADTvAAA070AANP8AADT/gAA1AAAANQCAADUBQAA1AYAANQHAADUCAAA1AkAANQLAADUDQAA1A4AANQPAADUEQAA1BIAANRRAADUUwAA1FUAANRXAADUWgAA1FsAANRcAADUXQAA1F4AANRgAADUYgAA1GMAANRkAADUZgAA1GcAANSMAADUsAAA1NcAANT7AADU/gAA1QAAANUCAADVBAAA1QYAANUIAADVCQAA1QwAANUZAADVKAAA1SoAANUsAADVLgAA1TAAANUyAADVNAAA1TYAANVFAADVSAAA1UsAANVOAADVUQAA1VQAANVXAADVWgAA1VwAANWbAADVnQAA1Z8AANWhAADVpAAA1aUAANWmAADVpwAA1agAANWqAADVrAAA1a0AANWuAADVsAAA1bEAANXwAADV8gAA1fQAANX2AADV+QAA1foAANX7AADV/AAA1f0AANX/AADWAQAA1gIAANYDAADWBQAA1gYAANZFAADWRwAA1kkAANZLAADWTgAA1k8AANZQAADWUQAA1lIAANZUAADWVgAA1lcAANZYAADWWgAA1lsAANaaAADWnAAA1p8AANahAADWpAAA1qUAANamAADWpwAA1qgAANaqAADWrAAA1q0AANauAADWsAAA1rEAANbwAADW8gAA1vQAANb2AADW+QAA1voAANb7AADW/AAA1v0AANb/AADXAQAA1wIAANcDAADXBQAA1wYAANdFAADXRwAA10kAANdLAADXTgAA108AANdQAADXUQAA11IAANdUAADXVgAA11cAANdYAADXWgAA11sAANeaAADXnAAA154AANegAADXowAA16QAANelAADXpgAA16cAANepAADXqwAA16wAANetAADXrwAA17AAANf7AADYHgAA2D4AANheAADYYAAA2GIAANhkAADYZgAA2GgAANhpAADYagAA2G0AANhuAADYcAAA2HEAANhzAADYdQAA2HYAANh3AADYegAA2HsAANiAAADYjQAA2JIAANiUAADYlgAA2JsAANieAADYoQAA2KMAANjIAADY7AAA2RMAANk3AADZOgAA2TwAANk+AADZQAAA2UIAANlEAADZRQAA2UgAANlVAADZZgAA2WgAANlqAADZbAAA2W4AANlwAADZcgAA2XQAANl2AADZhwAA2YoAANmNAADZkAAA2ZMAANmWAADZmQAA2ZwAANmfAADZoQAA2eAAANniAADZ5AAA2eYAANnpAADZ6gAA2esAANnsAADZ7QAA2e8AANnxAADZ8gAA2fMAANn1AADZ9gAA2jUAANo3AADaOQAA2jsAANo+AADaPwAA2kAAANpBAADaQgAA2kQAANpGAADaRwAA2kgAANpKAADaSwAA2ooAANqMAADajwAA2pEAANqUAADalQAA2pYAANqXAADamAAA2poAANqcAADanQAA2p4AANqgAADaoQAA2q4AANqvAADasAAA2rIAANrxAADa8wAA2vUAANr3AADa+gAA2vsAANr8AADa/QAA2v4AANsAAADbAgAA2wMAANsEAADbBgAA2wcAANtGAADbSAAA20oAANtMAADbTwAA21AAANtRAADbUgAA21MAANtVAADbVwAA21gAANtZAADbWwAA21wAANubAADbnQAA258AANuhAADbpAAA26UAANumAADbpwAA26gAANuqAADbrAAA260AANuuAADbsAAA27EAANvwAADb8gAA2/QAANv2AADb+QAA2/oAANv7AADb/AAA2/0AANv/AADcAQAA3AIAANwDAADcBQAA3AYAANxFAADcRwAA3EkAANxLAADcTgAA3E8AANxQAADcUQAA3FIAANxUAADcVgAA3FcAANxYAADcWgAA3FsAANyAAADcpAAA3MsAANzvAADc8gAA3PQAANz2AADc+AAA3PoAANz8AADc/QAA3QAAAN0NAADdHAAA3R4AAN0gAADdIgAA3SQAAN0mAADdKAAA3SoAAN05AADdPAAA3T8AAN1CAADdRQAA3UgAAN1LAADdTgAA3VAAAN2PAADdkQAA3ZMAAN2VAADdmAAA3ZkAAN2aAADdmwAA3ZwAAN2eAADdoAAA3aEAAN2iAADdpAAA3aUAAN3kAADd5gAA3egAAN3qAADd7QAA3e4AAN3vAADd8AAA3fEAAN3zAADd9QAA3fYAAN33AADd+QAA3foAAN45AADeOwAA3j0AAN4/AADeQgAA3kMAAN5EAADeRQAA3kYAAN5IAADeSgAA3ksAAN5MAADeTgAA3k8AAN6OAADekAAA3pIAAN6UAADelwAA3pgAAN6ZAADemgAA3psAAN6dAADenwAA3qAAAN6hAADeowAA3qQAAN7jAADe5QAA3ucAAN7pAADe7AAA3u0AAN7uAADe7wAA3vAAAN7yAADe9AAA3vUAAN72AADe+AAA3vkAAN84AADfOgAA3zwAAN8+AADfQQAA30IAAN9DAADfRAAA30UAAN9HAADfSQAA30oAAN9LAADfTQAA304AAN+NAADfjwAA35EAAN+TAADflgAA35cAAN+YAADfmQAA35oAAN+cAADfngAA358AAN+gAADfogAA36MAAN/uAADgEQAA4DEAAOBRAADgUwAA4FUAAOBXAADgWQAA4FsAAOBcAADgXQAA4GAAAOBhAADgYwAA4GQAAOBmAADgaAAA4GkAAOBqAADgbQAA4G4AAOBzAADggAAA4IUAAOCHAADgiQAA4I4AAOCRAADglAAA4JYAAOC7AADg3wAA4QYAAOEqAADhLQAA4S8AAOExAADhMwAA4TUAAOE3AADhOAAA4TsAAOFIAADhWQAA4VsAAOFdAADhXwAA4WEAAOFjAADhZQAA4WcAAOFpAADhegAA4X0AAOGAAADhgwAA4YYAAOGJAADhjAAA4Y8AAOGSAADhlAAA4dMAAOHVAADh1wAA4dkAAOHcAADh3QAA4d4AAOHfAADh4AAA4eIAAOHkAADh5QAA4eYAAOHoAADh6QAA4igAAOIqAADiLAAA4i4AAOIxAADiMgAA4jMAAOI0AADiNQAA4jcAAOI5AADiOgAA4jsAAOI9AADiPgAA4n0AAOJ/AADiggAA4oQAAOKHAADiiAAA4okAAOKKAADiiwAA4o0AAOKPAADikAAA4pEAAOKTAADilAAA4qEAAOKiAADiowAA4qUAAOLkAADi5gAA4ugAAOLqAADi7QAA4u4AAOLvAADi8AAA4vEAAOLzAADi9QAA4vYAAOL3AADi+QAA4voAAOM5AADjOwAA4z0AAOM/AADjQgAA40MAAONEAADjRQAA40YAAONIAADjSgAA40sAAONMAADjTgAA408AAOOOAADjkAAA45IAAOOUAADjlwAA45gAAOOZAADjmgAA45sAAOOdAADjnwAA46AAAOOhAADjowAA46QAAOPjAADj5QAA4+cAAOPpAADj7AAA4+0AAOPuAADj7wAA4/AAAOPyAADj9AAA4/UAAOP2AADj+AAA4/kAAOQ4AADkOgAA5DwAAOQ+AADkQQAA5EIAAORDAADkRAAA5EUAAORHAADkSQAA5EoAAORLAADkTQAA5E4AAORzAADklwAA5L4AAOTiAADk5QAA5OcAAOTpAADk6wAA5O0AAOTvAADk8AAA5PMAAOUAAADlDwAA5REAAOUTAADlFQAA5RcAAOUZAADlGwAA5R0AAOUsAADlLwAA5TIAAOU1AADlOAAA5TsAAOU+AADlQQAA5UMAAOWCAADlhAAA5YYAAOWIAADliwAA5YwAAOWNAADljgAA5Y8AAOWRAADlkwAA5ZQAAOWVAADllwAA5ZgAAOXXAADl2QAA5dsAAOXdAADl4AAA5eEAAOXiAADl4wAA5eQAAOXmAADl6AAA5ekAAOXqAADl7AAA5e0AAOYsAADmLgAA5jAAAOYyAADmNQAA5jYAAOY3AADmOAAA5jkAAOY7AADmPQAA5j4AAOY/AADmQQAA5kIAAOaBAADmgwAA5oUAAOaHAADmigAA5osAAOaMAADmjQAA5o4AAOaQAADmkgAA5pMAAOaUAADmlgAA5pcAAObWAADm2AAA5toAAObcAADm3wAA5uAAAObhAADm4gAA5uMAAOblAADm5wAA5ugAAObpAADm6wAA5uwAAOcrAADnLQAA5zAAAOcyAADnNQAA5zYAAOc3AADnOAAA5zkAAOc7AADnPQAA5z4AAOc/AADnQQAA50IAAOdeAADnnQAA558AAOehAADnowAA56YAAOenAADnqAAA56kAAOeqAADnrAAA564AAOevAADnsAAA57IAAOezAADn/gAA6CEAAOhBAADoYQAA6GMAAOhlAADoZwAA6GkAAOhrAADobAAA6G0AAOhwAADocQAA6HMAAOh0AADodgAA6HgAAOh5AADoegAA6H0AAOh+AADohwAA6JQAAOiZAADomwAA6J0AAOiiAADopQAA6KgAAOiqAADozwAA6PMAAOkaAADpPgAA6UEAAOlDAADpRQAA6UcAAOlJAADpSwAA6UwAAOlPAADpXAAA6W0AAOlvAADpcQAA6XMAAOl1AADpdwAA6XkAAOl7AADpfQAA6Y4AAOmRAADplAAA6ZcAAOmaAADpnQAA6aAAAOmjAADppgAA6agAAOnnAADp6QAA6esAAOntAADp8AAA6fEAAOnyAADp8wAA6fQAAOn2AADp+AAA6fkAAOn6AADp/AAA6f0AAOo8AADqPgAA6kAAAOpCAADqRQAA6kYAAOpHAADqSAAA6kkAAOpLAADqTQAA6k4AAOpPAADqUQAA6lIAAOqRAADqkwAA6pYAAOqYAADqmwAA6pwAAOqdAADqngAA6p8AAOqhAADqowAA6qQAAOqlAADqpwAA6qgAAOq1AADqtgAA6rcAAOq5AADq+AAA6voAAOr8AADq/gAA6wEAAOsCAADrAwAA6wQAAOsFAADrBwAA6wkAAOsKAADrCwAA6w0AAOsOAADrTQAA608AAOtRAADrUwAA61YAAOtXAADrWAAA61kAAOtaAADrXAAA614AAOtfAADrYAAA62IAAOtjAADrogAA66QAAOumAADrqAAA66sAAOusAADrrQAA664AAOuvAADrsQAA67MAAOu0AADrtQAA67cAAOu4AADr9wAA6/kAAOv7AADr/QAA7AAAAOwBAADsAgAA7AMAAOwEAADsBgAA7AgAAOwJAADsCgAA7AwAAOwNAADsTAAA7E4AAOxQAADsUgAA7FUAAOxWAADsVwAA7FgAAOxZAADsWwAA7F0AAOxeAADsXwAA7GEAAOxiAADshwAA7KsAAOzSAADs9gAA7PkAAOz7AADs/QAA7P8AAO0BAADtAwAA7QQAAO0HAADtFAAA7SMAAO0lAADtJwAA7SkAAO0rAADtLQAA7S8AAO0xAADtQAAA7UMAAO1GAADtSQAA7UwAAO1PAADtUgAA7VUAAO1XAADtlgAA7ZgAAO2aAADtnAAA7Z8AAO2gAADtoQAA7aIAAO2jAADtpQAA7acAAO2oAADtqQAA7asAAO2sAADt6wAA7e0AAO3vAADt8QAA7fQAAO31AADt9gAA7fcAAO34AADt+gAA7fwAAO39AADt/gAA7gAAAO4BAADuQAAA7kIAAO5EAADuRgAA7kkAAO5KAADuSwAA7kwAAO5NAADuTwAA7lEAAO5SAADuUwAA7lUAAO5WAADulQAA7pcAAO6ZAADumwAA7p4AAO6fAADuoAAA7qEAAO6iAADupAAA7qYAAO6nAADuqAAA7qoAAO6rAADu6gAA7uwAAO7uAADu8AAA7vMAAO70AADu9QAA7vYAAO73AADu+QAA7vsAAO78AADu/QAA7v8AAO8AAADvPwAA70EAAO9DAADvRQAA70gAAO9JAADvSgAA70sAAO9MAADvTgAA71AAAO9RAADvUgAA71QAAO9VAADvlAAA75YAAO+YAADvmgAA750AAO+eAADvnwAA76AAAO+hAADvowAA76UAAO+mAADvpwAA76kAAO+qAADv9QAA8BgAAPA4AADwWAAA8FoAAPBcAADwXgAA8GAAAPBiAADwYwAA8GQAAPBnAADwaAAA8GoAAPBrAADwbQAA8G8AAPBwAADwcQAA8HQAAPB1AADwegAA8IcAAPCMAADwjgAA8JA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AAQF8AAEBfwABAYIAAQGFAAEBhwABAcYAAQHIAAEBygABAcwAAQHPAAEB0AABAdEAAQHSAAEB0wABAdUAAQHXAAEB2AABAdkAAQHbAAEB3AABAhsAAQIdAAECHwABAiEAAQIkAAECJQABAiYAAQInAAECKAABAioAAQIsAAECLQABAi4AAQIwAAECMQABAnAAAQJyAAECdQABAncAAQJ6AAECewABAnwAAQJ9AAECfgABAoAAAQKCAAECgwABAoQAAQKGAAEChwABApQAAQKVAAEClgABApgAAQLXAAEC2QABAtsAAQLdAAEC4AABAuEAAQLiAAEC4wABAuQAAQLmAAEC6AABAukAAQLqAAEC7AABAu0AAQMsAAEDLgABAzAAAQMyAAEDNQABAzYAAQM3AAEDOAABAzkAAQM7AAEDPQABAz4AAQM/AAEDQQABA0IAAQOBAAEDgwABA4UAAQOHAAEDigABA4sAAQOMAAEDjQABA44AAQOQAAEDkgABA5MAAQOUAAEDlgABA5cAAQPWAAED2AABA9oAAQPcAAED3wABA+AAAQPhAAED4gABA+MAAQPlAAED5wABA+gAAQPpAAED6wABA+wAAQQrAAEELQABBC8AAQQxAAEENAABBDUAAQQ2AAEENwABBDgAAQQ6AAEEPAABBD0AAQQ+AAEEQAABBEEAAQRmAAEEigABBLEAAQTVAAEE2AABBNoAAQTcAAEE3gABBOAAAQTiAAEE4wABBOYAAQTzAAEFAgABBQQAAQUGAAEFCAABBQoAAQUMAAEFDgABBRAAAQUfAAEFIgABBSUAAQUoAAEFKwABBS4AAQUxAAEFNAABBTYAAQV1AAEFdwABBXkAAQV7AAEFfgABBX8AAQWAAAEFgQABBYIAAQWEAAEFhgABBYcAAQWIAAEFigABBYsAAQXKAAEFzAABBc4AAQXQAAEF0wABBdQAAQXVAAEF1gABBdcAAQXZAAEF2wABBdwAAQXdAAEF3wABBeAAAQYfAAEGIQABBiMAAQYlAAEGKAABBikAAQYqAAEGKwABBiwAAQYuAAEGMAABBjEAAQYyAAEGNAABBjUAAQZ0AAEGdgABBngAAQZ6AAEGfQABBn4AAQZ/AAEGgAABBoEAAQaDAAEGhQABBoYAAQaHAAEGiQABBooAAQbJAAEGywABBs0AAQbPAAEG0gABBtMAAQbUAAEG1QABBtYAAQbYAAEG2gABBtsAAQbcAAEG3gABBt8AAQceAAEHIAABByIAAQckAAEHJwABBygAAQcpAAEHKgABBysAAQctAAEHLwABBzAAAQcxAAEHMwABBzQAAQdzAAEHdQABB3cAAQd5AAEHfAABB30AAQd+AAEHfwABB4AAAQeCAAEHhAABB4UAAQeGAAEHiAABB4kAAQfUAAEH9wABCBcAAQg3AAEIOQABCDsAAQg9AAEIPwABCEEAAQhCAAEIQwABCEYAAQhHAAEISQABCEoAAQhMAAEITgABCE8AAQhQAAEIUwABCFQAAQhZAAEIZgABCGsAAQhtAAEIbwABCHQAAQh3AAEIegABCHwAAQihAAEIxQABCOwAAQkQAAEJEwABCRUAAQkXAAEJGQABCRsAAQkdAAEJHgABCSEAAQkuAAEJPwABCUEAAQlDAAEJRQABCUcAAQlJAAEJSwABCU0AAQlPAAEJYAABCWMAAQlmAAEJaQABCWwAAQlvAAEJcgABCXUAAQl4AAEJegABCbkAAQm7AAEJvQABCb8AAQnCAAEJwwABCcQAAQnFAAEJxgABCcgAAQnKAAEJywABCcwAAQnOAAEJzwABCg4AAQoQAAEKEgABChQAAQoXAAEKGAABChkAAQoaAAEKGwABCh0AAQofAAEKIAABCiEAAQojAAEKJAABCmMAAQplAAEKaAABCmoAAQptAAEKbgABCm8AAQpwAAEKcQABCnMAAQp1AAEKdgABCncAAQp5AAEKegABCocAAQqIAAEKiQABCosAAQrKAAEKzAABCs4AAQrQAAEK0wABCtQAAQrVAAEK1gABCtcAAQrZAAEK2wABCtwAAQrdAAEK3wABCuAAAQsfAAELIQABCyMAAQslAAELKAABCykAAQsqAAELKwABCywAAQsuAAELMAABCzEAAQsyAAELNAABCzUAAQt0AAELdgABC3gAAQt6AAELfQABC34AAQt/AAELgAABC4EAAQuDAAELhQABC4YAAQuHAAELiQABC4oAAQvJAAELywABC80AAQvPAAEL0gABC9MAAQvUAAEL1QABC9YAAQvYAAEL2gABC9sAAQvcAAEL3gABC98AAQweAAEMIAABDCIAAQwkAAEMJwABDCgAAQwpAAEMKgABDCsAAQwtAAEMLwABDDAAAQwxAAEMMwABDDQAAQxZAAEMfQABDKQAAQzIAAEMywABDM0AAQzPAAEM0QABDNMAAQzVAAEM1gABDNkAAQzmAAEM9QABDPcAAQz5AAEM+wABDP0AAQz/AAENAQABDQMAAQ0SAAENFQABDRgAAQ0bAAENHgABDSEAAQ0kAAENJwABDSkAAQ1oAAENagABDW0AAQ1vAAENcgABDXMAAQ10AAENdQABDXYAAQ14AAENegABDXsAAQ18AAENfgABDX8AAQ2+AAENwAABDcIAAQ3EAAENxwABDcgAAQ3JAAENygABDcsAAQ3NAAENzwABDdAAAQ3RAAEN0wABDdQAAQ4TAAEOFQABDhcAAQ4ZAAEOHAABDh0AAQ4eAAEOHwABDiAAAQ4iAAEOJAABDiUAAQ4mAAEOKAABDikAAQ5oAAEOagABDm0AAQ5vAAEOcgABDnMAAQ50AAEOdQABDnYAAQ54AAEOegABDnsAAQ58AAEOfgABDn8AAQ6BAAEOwAABDsIAAQ7EAAEOxgABDskAAQ7KAAEOywABDswAAQ7NAAEOzwABDtEAAQ7SAAEO0wABDtUAAQ7WAAEPFQABDxcAAQ8ZAAEPGwABDx4AAQ8fAAEPIAABDyEAAQ8iAAEPJAABDyYAAQ8nAAEPKAABDyoAAQ8rAAEPagABD2wAAQ9uAAEPcAABD3MAAQ90AAEPdQABD3YAAQ93AAEPeQABD3sAAQ98AAEPfQABD38AAQ+AAAEPywABD+4AARAOAAEQLgABEDAAARAyAAEQNAABEDYAARA4AAEQOQABEDoAARA9AAEQPgABEEAAARBBAAEQRAABEEYAARBHAAEQSAABEEsAARBMAAEQUQABEF4AARBjAAEQZQABEGcAARBsAAEQbwABEHIAARB0AAEQmQABEL0AARDkAAERCAABEQsAARENAAERDwABEREAARETAAERFQABERYAAREZAAERJgABETcAARE5AAEROwABET0AARE/AAERQQABEUMAARFFAAERRwABEVgAARFbAAERXgABEWEAARFkAAERZwABEWoAARFtAAERcAABEXIAARGxAAERswABEbUAARG3AAERugABEbsAARG8AAERvQABEb4AARHAAAERwgABEcMAARHEAAERxgABEccAARIGAAESCAABEgoAARIMAAESDwABEhAAARIRAAESEgABEhMAARIVAAESFwABEhgAARIZAAESGwABEhwAARJbAAESXQABEmAAARJiAAESZQABEmYAARJnAAESaAABEmkAARJrAAESbQABEm4AARJvAAEScQABEnIAARJ/AAESgAABEoEAARKDAAESwgABEsQAARLGAAESyAABEssAARLMAAESzQABEs4AARLPAAES0QABEtMAARLUAAES1QABEtcAARLYAAETFwABExkAARMbAAETHQABEyAAARMhAAETIgABEyMAARMkAAETJgABEygAARMpAAETKgABEywAARMtAAETbAABE24AARNwAAETcgABE3UAARN2AAETdwABE3gAARN5AAETewABE30AARN+AAETfwABE4EAAROCAAETwQABE8MAARPFAAETxwABE8oAARPLAAETzAABE80AARPOAAET0AABE9IAARPTAAET1AABE9YAARPXAAEUFgABFBgAARQaAAEUHAABFB8AARQgAAEUIQABFCIAARQjAAEUJQABFCcAARQoAAEUKQABFCsAARQsAAEUUQABFHUAARScAAEUwAABFMMAARTFAAEUxwABFMkAARTLAAEUzQABFM4AARTRAAEU3gABFO0AARTvAAEU8QABFPMAART1AAEU9wABFPkAART7AAEVCgABFQ0AARUQAAEVEwABFRYAARUZAAEVHAABFR8AARUhAAEVYAABFWIAARVkAAEVZgABFWkAARVqAAEVawABFWwAARVtAAEVbwABFXEAARVyAAEVcwABFXUAARV2AAEVtQABFbcAARW6AAEVvAABFb8AARXAAAEVwQABFcIAARXDAAEVxQABFccAARXIAAEVyQABFcsAARXMAAEWCwABFg0AARYPAAEWEQABFhQAARYVAAEWFgABFhcAARYYAAEWGgABFhwAARYdAAEWHgABFiAAARYhAAEWYAABFmIAARZlAAEWZwABFmoAARZrAAEWbAABFm0AARZuAAEWcAABFnIAARZzAAEWdAABFnYAARZ3AAEWugABFt4AARcCAAEXJQABF0wAARdsAAEXkwABF7oAARfaAAEX/gABGCIAARgkAAEYJwABGCkAARgrAAEYLQABGDAAARgzAAEYNQABGDcAARg6AAEYPAABGD4AARhBAAEYRAABGEUAARhKAAEYVwABGFoAARhcAAEYXwABGGIAARhkAAEYiQABGK0AARjUAAEY+AABGPsAARj9AAEY/wABGQEAARkDAAEZBQABGQYAARkJAAEZFgABGSkAARkrAAEZLQABGS8AARkxAAEZMwABGTUAARk3AAEZOQABGTsAARlOAAEZUQABGVQAARlXAAEZWgABGV0AARlgAAEZYwABGWYAARlpAAEZawABGaoAARmsAAEZrwABGbEAARm0AAEZtQABGbYAARm3AAEZuAABGboAARm8AAEZvQABGb4AARnAAAEZwQABGcoAARnLAAEZzQABGgwAARoOAAEaEAABGhIAARoVAAEaFgABGhcAARoYAAEaGQABGhsAARodAAEaHgABGh8AARohAAEaIgABGmEAARpjAAEaZgABGmgAARprAAEabAABGm0AARpuAAEabwABGnEAARpzAAEadAABGnUAARp3AAEaeAABGoEAARqCAAEahAABGsMAARrFAAEaxwABGskAARrMAAEazQABGs4AARrPAAEa0AABGtIAARrUAAEa1QABGtYAARrYAAEa2QABGxgAARsaAAEbHQABGx8AARsiAAEbIwABGyQAARslAAEbJgABGygAARsqAAEbKwABGywAARsuAAEbLwABGzgAARs5AAEbOwABG3oAARt8AAEbfgABG4AAARuDAAEbhAABG4UAARuGAAEbhwABG4kAARuLAAEbjAABG40AARuPAAEbkAABG88AARvRAAEb1AABG9YAARvZAAEb2gABG9sAARvcAAEb3QABG98AARvhAAEb4gABG+MAARvlAAEb5gABG/MAARv0AAEb9QABG/cAARw2AAEcOAABHDoAARw8AAEcPwABHEAAARxBAAEcQgABHEMAARxFAAEcRwABHEgAARxJAAEcSwABHEwAARyLAAEcjQABHJAAARySAAEclQABHJYAARyXAAEcmAABHJkAARybAAEcnQABHJ4AARyfAAEcoQABHKIAARyxAAEcvgABHMsAARzOAAEc0QABHNQAARzXAAEc2gABHN0AARzqAAEc7QABHPAAARzzAAEc9gABHPkAARz8AAEc/gABHQkAAR0RAAEdGwABHSUAAR0xAAEdOwABHYYAAR2pAAEdyQABHekAAR3rAAEd7QABHe8AAR3xAAEd9AABHfUAAR32AAEd+QABHfoAAR38AAEd/QABHf8AAR4CAAEeAwABHgQAAR4HAAEeCAABHg0AAR4aAAEeHwABHiEAAR4jAAEeKAABHisAAR4uAAEeMAABHlUAAR55AAEeoAABHsQAAR7HAAEeyQABHssAAR7NAAEezwABHtEAAR7SAAEe1QABHuIAAR7zAAEe9QABHvcAAR75AAEe+wABHv0AAR7/AAEfAQABHwMAAR8UAAEfFwABHxoAAR8dAAEfIAABHyMAAR8mAAEfKQABHywAAR8uAAEfbQABH28AAR9xAAEfcwABH3YAAR93AAEfeAABH3kAAR96AAEffAABH34AAR9/AAEfgAABH4IAAR+DAAEfwgABH8QAAR/GAAEfyAABH8sAAR/MAAEfzQABH84AAR/PAAEf0QABH9MAAR/UAAEf1QABH9cAAR/YAAEgFwABIBkAASAcAAEgHgABICEAASAiAAEgIwABICQAASAlAAEgJwABICkAASAqAAEgKwABIC0AASAuAAEgOwABIDwAASA9AAEgPwABIH4AASCAAAEgggABIIQAASCHAAEgiAABIIkAASCKAAEgiwABII0AASCPAAEgkAABIJEAASCTAAEglAABINMAASDVAAEg1wABINkAASDcAAEg3QABIN4AASDfAAEg4AABIOIAASDkAAEg5QABIOYAASDoAAEg6QABISgAASEqAAEhLAABIS4AASExAAEhMgABITMAASE0AAEhNQABITcAASE5AAEhOgABITsAASE9AAEhPgABIX0AASF/AAEhgQABIYMAASGGAAEhhwABIYgAASGJAAEhigABIYwAASGOAAEhjwABIZAAASGSAAEhkwABIdIAASHUAAEh1gABIdgAASHbAAEh3AABId0AASHeAAEh3wABIeEAASHjAAEh5AABIeUAASHnAAEh6AABIg0AASIxAAEiWAABInwAASJ/AAEigQABIoMAASKFAAEihwABIokAASKKAAEijQABIpoAASKpAAEiqwABIq0AASKvAAEisQABIrMAASK1AAEitwABIsYAASLJAAEizAABIs8AASLSAAEi1QABItgAASLbAAEi3QABIxwAASMeAAEjIQABIyMAASMmAAEjJwABIygAASMpAAEjKgABIywAASMuAAEjLwABIzAAASMyAAEjMwABI3IAASN0AAEjdgABI3gAASN7AAEjfAABI30AASN+AAEjfwABI4EAASODAAEjhAABI4UAASOHAAEjiAABI8cAASPJAAEjywABI80AASPQAAEj0QABI9IAASPTAAEj1AABI9YAASPYAAEj2QABI9oAASPcAAEj3QABJBwAASQeAAEkIQABJCMAASQmAAEkJwABJCgAASQpAAEkKgABJCwAASQuAAEkLwABJDAAASQyAAEkMwABJHIAASR0AAEkdgABJHgAASR7AAEkfAABJH0AASR+AAEkfwABJIEAASSDAAEkhAABJIUAASSHAAEkiAABJMcAASTJAAEkywABJM0AASTQAAEk0QABJNIAASTTAAEk1AABJNYAASTYAAEk2QABJNoAASTcAAEk3QABJRwAASUeAAElIAABJSIAASUlAAElJgABJScAASUoAAElKQABJSsAASUtAAElLgABJS8AASUxAAElMgABJX0AASWgAAElwAABJeAAASXiAAEl5AABJeYAASXoAAEl6wABJewAASXtAAEl8AABJfEAASXzAAEl9AABJfYAASX5AAEl+gABJfsAASX+AAEl/wABJgQAASYRAAEmFgABJhgAASYaAAEmHwABJiIAASYlAAEmJwABJkwAASZwAAEmlwABJrsAASa+AAEmwAABJsIAASbEAAEmxgABJsgAASbJAAEmzAABJtkAASbqAAEm7AABJu4AASbwAAEm8gABJvQAASb2AAEm+AABJvoAAScLAAEnDgABJxEAAScUAAEnFwABJxoAAScdAAEnIAABJyMAASclAAEnZAABJ2YAASdoAAEnagABJ20AASduAAEnbwABJ3AAASdxAAEncwABJ3UAASd2AAEndwABJ3kAASd6AAEnuQABJ7sAASe9AAEnvwABJ8IAASfDAAEnxAABJ8UAASfGAAEnyAABJ8oAASfLAAEnzAABJ84AASfPAAEoDgABKBAAASgTAAEoFQABKBgAASgZAAEoGgABKBsAASgcAAEoHgABKCAAASghAAEoIgABKCQAASglAAEoMgABKDMAASg0AAEoNgABKHUAASh3AAEoeQABKHsAASh+AAEofwABKIAAASiBAAEoggABKIQAASiGAAEohwABKIgAASiKAAEoiwABKMoAASjMAAEozgABKNAAASjTAAEo1AABKNUAASjWAAEo1wABKNkAASjbAAEo3AABKN0AASjfAAEo4AABKR8AASkhAAEpIwABKSUAASkoAAEpKQABKSoAASkrAAEpLAABKS4AASkwAAEpMQABKTIAASk0AAEpNQABKXQAASl2AAEpeAABKXoAASl9AAEpfgABKX8AASmAAAEpgQABKYMAASmFAAEphgABKYcAASmJAAEpigABKckAASnLAAEpzQABKc8AASnSAAEp0wABKdQAASnVAAEp1gABKdgAASnaAAEp2wABKdwAASneAAEp3wABKgQAASooAAEqTwABKnMAASp2AAEqeAABKnoAASp8AAEqfgABKoAAASqBAAEqhAABKpEAASqgAAEqogABKqQAASqmAAEqqAABKqoAASqsAAEqrgABKr0AASrAAAEqwwABKsYAASrJAAEqzAABKs8AASrSAAEq1AABKxMAASsVAAErFwABKxkAASscAAErHQABKx4AASsfAAErIAABKyIAASskAAErJQABKyYAASsoAAErKQABK2gAAStqAAErbAABK24AAStxAAErcgABK3MAASt0AAErdQABK3cAASt5AAEregABK3sAASt9AAErfgABK70AASu/AAErwQABK8MAASvGAAErxwABK8gAASvJAAErygABK8wAASvOAAErzwABK9AAASvSAAEr0wABLBIAASwUAAEsFgABLBgAASwbAAEsHAABLB0AASweAAEsHwABLCEAASwjAAEsJAABLCUAASwnAAEsKAABLGcAASxpAAEsawABLG0AASxwAAEscQABLHIAASxzAAEsdAABLHYAASx4AAEseQABLHoAASx8AAEsfQABLLwAASy+AAEswAABLMIAASzFAAEsxgABLMcAASzIAAEsyQABLMsAASzNAAEszgABLM8AASzRAAEs0gABLREAAS0TAAEtFQABLRcAAS0aAAEtGwABLRwAAS0dAAEtHgABLSAAAS0iAAEtIwABLSQAAS0mAAEtJwABLXIAAS2VAAEttQABLdUAAS3XAAEt2QABLdsAAS3dAAEt4AABLeEAAS3iAAEt5QABLeYAAS3oAAEt6QABLesAAS3uAAEt7wABLfAAAS3zAAEt9AABLfkAAS4GAAEuCwABLg0AAS4PAAEuFAABLhcAAS4aAAEuHAABLkEAAS5lAAEujAABLrAAAS6zAAEutQABLrcAAS65AAEuuwABLr0AAS6+AAEuwQABLs4AAS7fAAEu4QABLuMAAS7lAAEu5wABLukAAS7rAAEu7QABLu8AAS8AAAEvAwABLwYAAS8JAAEvDAABLw8AAS8SAAEvFQABLxgAAS8aAAEvWQABL1sAAS9dAAEvXwABL2IAAS9jAAEvZAABL2UAAS9mAAEvaAABL2oAAS9rAAEvbAABL24AAS9vAAEvrgABL7AAAS+yAAEvtAABL7cAAS+4AAEvuQABL7oAAS+7AAEvvQABL78AAS/AAAEvwQABL8MAAS/EAAEwAwABMAUAATAIAAEwCgABMA0AATAOAAEwDwABMBAAATARAAEwEwABMBUAATAWAAEwFwABMBkAATAaAAEwJwABMCgAATApAAEwKwABMGoAATBsAAEwbgABMHAAATBzAAEwdAABMHUAATB2AAEwdwABMHkAATB7AAEwfAABMH0AATB/AAEwgAABML8AATDBAAEwwwABMMUAATDIAAEwyQABMMoAATDLAAEwzAABMM4AATDQAAEw0QABMNIAATDUAAEw1QABMRQAATEWAAExGAABMRoAATEdAAExHgABMR8AATEgAAExIQABMSMAATElAAExJgABMScAATEpAAExKgABMWkAATFrAAExbQABMW8AATFyAAExcwABMXQAATF1AAExdgABMXgAATF6AAExewABMXwAATF+AAExfwABMb4AATHAAAExwgABMcQAATHHAAExyAABMckAATHKAAExywABMc0AATHPAAEx0AABMdEAATHTAAEx1AABMfkAATIdAAEyRAABMmgAATJrAAEybQABMm8AATJxAAEycwABMnUAATJ2AAEyeQABMoYAATKVAAEylwABMpkAATKbAAEynQABMp8AATKhAAEyowABMrIAATK1AAEyuAABMrsAATK+AAEywQABMsQAATLHAAEyyQABMwgAATMKAAEzDAABMw4AATMRAAEzEgABMxMAATMUAAEzFQABMxcAATMZAAEzGgABMxsAATMdAAEzHgABM10AATNfAAEzYQABM2MAATNmAAEzZwABM2gAATNpAAEzagABM2wAATNuAAEzbwABM3AAATNyAAEzcwABM7IAATO0AAEztgABM7gAATO7AAEzvAABM70AATO+AAEzvwABM8EAATPDAAEzxAABM8UAATPHAAEzyAABNAcAATQJAAE0CwABNA0AATQQAAE0EQABNBIAATQTAAE0FAABNBYAATQYAAE0GQABNBoAATQcAAE0HQABNFwAATReAAE0YAABNGIAATRlAAE0ZgABNGcAATRoAAE0aQABNGsAATRtAAE0bgABNG8AATRxAAE0cgABNLEAATSzAAE0tQABNLcAATS6AAE0uwABNLwAATS9AAE0vgABNMAAATTCAAE0wwABNMQAATTGAAE0xwABNQYAATUIAAE1CgABNQwAATUPAAE1EAABNREAATUSAAE1EwABNRUAATUXAAE1GAABNRkAATUbAAE1HAABNWcAATWKAAE1qgABNcoAATXMAAE1zgABNdAAATXSAAE11QABNdYAATXXAAE12gABNdsAATXdAAE13gABNeAAATXjAAE15AABNeUAATXoAAE16QABNfIAATX/AAE2BAABNgYAATYIAAE2DQABNhAAATYTAAE2FQABNjoAATZeAAE2hQABNqkAATasAAE2rgABNrAAATayAAE2tAABNrYAATa3AAE2ugABNscAATbYAAE22gABNtwAATbeAAE24AABNuIAATbkAAE25gABNugAATb5AAE2/AABNv8AATcCAAE3BQABNwgAATcLAAE3DgABNxEAATcTAAE3UgABN1QAATdWAAE3WAABN1sAATdcAAE3XQABN14AATdfAAE3YQABN2MAATdkAAE3ZQABN2cAATdoAAE3pwABN6kAATerAAE3rQABN7AAATexAAE3sgABN7MAATe0AAE3tgABN7gAATe5AAE3ugABN7wAATe9AAE3/AABN/4AATgBAAE4AwABOAYAATgHAAE4CAABOAkAATgKAAE4DAABOA4AATgPAAE4EAABOBIAATgTAAE4IAABOCEAATgiAAE4JAABOGMAAThlAAE4ZwABOGkAAThsAAE4bQABOG4AAThvAAE4cAABOHIAATh0AAE4dQABOHYAATh4AAE4eQABOLgAATi6AAE4vAABOL4AATjBAAE4wgABOMMAATjEAAE4xQABOMcAATjJAAE4ygABOMsAATjNAAE4zgABOQ0AATkPAAE5EQABORMAATkWAAE5FwABORgAATkZAAE5GgABORwAATkeAAE5HwABOSAAATkiAAE5IwABOWIAATlkAAE5ZgABOWgAATlrAAE5bAABOW0AATluAAE5bwABOXEAATlzAAE5dAABOXUAATl3AAE5eAABObcAATm5AAE5uwABOb0AATnAAAE5wQABOcIAATnDAAE5xAABOcYAATnIAAE5yQABOcoAATnMAAE5zQABOfIAAToWAAE6PQABOmEAATpkAAE6ZgABOmgAATpqAAE6bAABOm4AATpvAAE6cgABOn8AATqOAAE6kAABOpIAATqUAAE6lgABOpgAATqaAAE6nAABOqsAATquAAE6sQABOrQAATq3AAE6ugABOr0AATrAAAE6wgABOwEAATsDAAE7BQABOwcAATsKAAE7CwABOwwAATsNAAE7DgABOxAAATsSAAE7EwABOxQAATsWAAE7FwABO1YAATtYAAE7WgABO1wAATtfAAE7YAABO2EAATtiAAE7YwABO2UAATtnAAE7aAABO2kAATtrAAE7bAABO6sAATutAAE7rwABO7EAATu0AAE7tQABO7YAATu3AAE7uAABO7oAATu8AAE7vQABO74AATvAAAE7wQABPAAAATwCAAE8BQABPAcAATwKAAE8CwABPAwAATwNAAE8DgABPBAAATwSAAE8EwABPBQAATwWAAE8FwABPFYAATxYAAE8WgABPFwAATxfAAE8YAABPGEAATxiAAE8YwABPGUAATxnAAE8aAABPGkAATxrAAE8bAABPKsAATytAAE8rwABPLEAATy0AAE8tQABPLYAATy3AAE8uAABPLoAATy8AAE8vQABPL4AATzAAAE8wQABPQAAAT0CAAE9BAABPQYAAT0JAAE9CgABPQsAAT0MAAE9DQABPQ8AAT0RAAE9EgABPRMAAT0VAAE9FgABPWEAAT2EAAE9pAABPcQAAT3GAAE9yAABPcoAAT3MAAE9zwABPdAAAT3RAAE91AABPdUAAT3XAAE92AABPdsAAT3eAAE93wABPeAAAT3jAAE95AABPekAAT32AAE9+wABPf0AAT3/AAE+BAABPgcAAT4KAAE+DAABPjEAAT5VAAE+fAABPqAAAT6jAAE+pQABPqcAAT6pAAE+qwABPq0AAT6uAAE+sQABPr4AAT7PAAE+0QABPtMAAT7VAAE+1wABPtkAAT7bAAE+3QABPt8AAT7wAAE+8wABPvYAAT75AAE+/AABPv8AAT8CAAE/BQABPwgAAT8KAAE/SQABP0sAAT9NAAE/TwABP1IAAT9TAAE/VAABP1UAAT9WAAE/WAABP1oAAT9bAAE/XAABP14AAT9fAAE/ngABP6AAAT+iAAE/pAABP6cAAT+oAAE/qQABP6oAAT+rAAE/rQABP68AAT+wAAE/sQABP7M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AAVAHAAFQCQABUC4AAVBSAAFQeQABUJ0AAVCgAAFQogABUKQAAVCmAAFQqAABUKoAAVCrAAFQrgABULsAAVDMAAFQzgABUNAAAVDSAAFQ1AABUNYAAVDYAAFQ2gABUNwAAVDtAAFQ8AABUPMAAVD2AAFQ+QABUPwAAVD/AAFRAgABUQUAAVEHAAFRRgABUUgAAVFKAAFRTAABUU8AAVFQAAFRUQABUVIAAVFTAAFRVQABUVcAAVFYAAFRWQABUVsAAVFcAAFRmwABUZ0AAVGfAAFRoQABUaQAAVGlAAFRpgABUacAAVGoAAFRqgABUawAAVGtAAFRrgABUbAAAVGxAAFR8AABUfIAAVH1AAFR9wABUfoAAVH7AAFR/AABUf0AAVH+AAFSAAABUgIAAVIDAAFSBAABUgYAAVIHAAFSFAABUhUAAVIWAAFSGAABUlcAAVJZAAFSWwABUl0AAVJgAAFSYQABUmIAAVJjAAFSZAABUmYAAVJoAAFSaQABUmoAAVJsAAFSbQABUqwAAVKuAAFSsAABUrIAAVK1AAFStgABUrcAAVK4AAFSuQABUrsAAVK9AAFSvgABUr8AAVLBAAFSwgABUwEAAVMDAAFTBQABUwcAAVMKAAFTCwABUwwAAVMNAAFTDgABUxAAAVMSAAFTEwABUxQAAVMWAAFTFwABU1YAAVNYAAFTWgABU1wAAVNfAAFTYAABU2EAAVNiAAFTYwABU2UAAVNnAAFTaAABU2kAAVNrAAFTbAABU6sAAVOtAAFTrwABU7EAAVO0AAFTtQABU7YAAVO3AAFTuAABU7oAAVO8AAFTvQABU74AAVPAAAFTwQABU+YAAVQKAAFUMQABVFUAAVRYAAFUWgABVFwAAVReAAFUYAABVGIAAVRjAAFUZgABVHMAAVSCAAFUhAABVIYAAVSIAAFUigABVIwAAVSOAAFUkAABVJ8AAVSiAAFUpQABVKgAAVSrAAFUrgABVLEAAVS0AAFUtgABVPUAAVT3AAFU+QABVPsAAVT+AAFU/wABVQAAAVUBAAFVAgABVQQAAVUGAAFVBwABVQgAAVUKAAFVCwABVUoAAVVMAAFVTgABVVAAAVVTAAFVVAABVVUAAVVWAAFVVwABVVkAAVVbAAFVXAABVV0AAVVfAAFVYAABVZ8AAVWhAAFVowABVaUAAVWoAAFVqQABVaoAAVWrAAFVrAABVa4AAVWwAAFVsQABVbIAAVW0AAFVtQABVfQAAVX2AAFV+AABVfoAAVX9AAFV/gABVf8AAVYAAAFWAQABVgMAAVYFAAFWBgABVgcAAVYJAAFWCgABVkkAAVZLAAFWTQABVk8AAVZSAAFWUwABVlQAAVZVAAFWVgABVlgAAVZaAAFWWwABVlwAAVZeAAFWXwABVp4AAVagAAFWogABVqQAAVanAAFWqAABVqkAAVaqAAFWqwABVq0AAVavAAFWsAABVrEAAVazAAFWtAABVvMAAVb1AAFW9wABVvkAAVb8AAFW/QABVv4AAVb/AAFXAAABVwIAAVcEAAFXBQABVwYAAVcIAAFXCQABVxIAAVcTAAFXFQABV1gAAVd8AAFXoAABV8MAAVfqAAFYCgABWDEAAVhYAAFYeAABWJwAAVjAAAFYwgABWMUAAVjHAAFYyQABWMsAAVjOAAFY0QABWNMAAVjVAAFY2AABWNoAAVjcAAFY3wABWOIAAVjjAAFY6AABWPUAAVj4AAFY+gABWP0AAVkAAAFZAgABWScAAVlLAAFZcgABWZYAAVmZAAFZmwABWZ0AAVmfAAFZoQABWaMAAVmkAAFZpwABWbQAAVnHAAFZyQABWcsAAVnNAAFZzwABWdEAAVnTAAFZ1QABWdcAAVnZAAFZ7AABWe8AAVnyAAFZ9QABWfgAAVn7AAFZ/gABWgEAAVoEAAFaBwABWgkAAVpIAAFaSgABWk0AAVpPAAFaUgABWlMAAVpUAAFaVQABWlYAAVpYAAFaWgABWlsAAVpcAAFaXgABWl8AAVpoAAFaaQABWmsAAVqqAAFarAABWq4AAVqwAAFaswABWrQAAVq1AAFatgABWrcAAVq5AAFauwABWrwAAVq9AAFavwABWsAAAVr/AAFbAQABWwQAAVsGAAFbCQABWwoAAVsLAAFbDAABWw0AAVsPAAFbEQABWxIAAVsTAAFbFQABWxYAAVsfAAFbIAABWyIAAVthAAFbYwABW2UAAVtnAAFbagABW2sAAVtsAAFbbQABW24AAVtwAAFbcgABW3MAAVt0AAFbdgABW3cAAVu2AAFbuAABW7sAAVu9AAFbwAABW8EAAVvCAAFbwwABW8QAAVvGAAFbyAABW8kAAVvKAAFbzAABW80AAVvWAAFb1wABW9kAAVwYAAFcGgABXBwAAVweAAFcIQABXCIAAVwjAAFcJAABXCUAAVwnAAFcKQABXCoAAVwrAAFcLQABXC4AAVxtAAFcbwABXHIAAVx0AAFcdwABXHgAAVx5AAFcegABXHsAAVx9AAFcfwABXIAAAVyBAAFcgwABXIQAAVyRAAFckgABXJMAAVyVAAFc1AABXNYAAVzYAAFc2gABXN0AAVzeAAFc3wABXOAAAVzhAAFc4wABXOUAAVzmAAFc5wABXOkAAVzqAAFdKQABXSsAAV0uAAFdMAABXTMAAV00AAFdNQABXTYAAV03AAFdOQABXTsAAV08AAFdPQABXT8AAV1AAAFdVAABXWEAAV1mAAFdaAABXWsAAV1wAAFdcwABXXYAAV14AAFdfAABXccAAV3qAAFeCgABXioAAV4sAAFeLgABXjAAAV4yAAFeNQABXjYAAV43AAFeOgABXjsAAV49AAFePgABXkAAAV5CAAFeQwABXkQAAV5HAAFeSAABXk0AAV5aAAFeXwABXmEAAV5jAAFeaAABXmsAAV5uAAFecAABXpUAAV65AAFe4AABXwQAAV8HAAFfCQABXwsAAV8NAAFfDwABXxEAAV8SAAFfFQABXyIAAV8zAAFfNQABXzcAAV85AAFfOwABXz0AAV8/AAFfQQABX0MAAV9UAAFfVwABX1oAAV9dAAFfYAABX2MAAV9mAAFfaQABX2wAAV9uAAFfrQABX68AAV+xAAFfswABX7YAAV+3AAFfuAABX7kAAV+6AAFfvAABX74AAV+/AAFfwAABX8IAAV/DAAFgAgABYAQAAWAGAAFgCAABYAsAAWAMAAFgDQABYA4AAWAPAAFgEQABYBMAAWAUAAFgFQABYBcAAWAYAAFgVwABYFkAAWBcAAFgXgABYGEAAWBiAAFgYwABYGQAAWBlAAFgZwABYGkAAWBqAAFgawABYG0AAWBuAAFgewABYHwAAWB9AAFgfwABYL4AAWDAAAFgwgABYMQAAWDHAAFgyAABYMkAAWDKAAFgywABYM0AAWDPAAFg0AABYNEAAWDTAAFg1AABYRMAAWEVAAFhFwABYRkAAWEcAAFhHQABYR4AAWEfAAFhIAABYSIAAWEkAAFhJQABYSYAAWEoAAFhKQABYWgAAWFqAAFhbAABYW4AAWFxAAFhcgABYXMAAWF0AAFhdQABYXcAAWF5AAFhegABYXsAAWF9AAFhfgABYb0AAWG/AAFhwQABYcMAAWHGAAFhxwABYcgAAWHJAAFhygABYcwAAWHOAAFhzwABYdAAAWHSAAFh0wABYhIAAWIUAAFiFgABYhgAAWIbAAFiHAABYh0AAWIeAAFiHwABYiEAAWIjAAFiJAABYiUAAWInAAFiKAABYk0AAWJxAAFimAABYrwAAWK/AAFiwQABYsMAAWLFAAFixwABYskAAWLKAAFizQABYtoAAWLpAAFi6wABYu0AAWLvAAFi8QABYvMAAWL1AAFi9wABYwYAAWMJAAFjDAABYw8AAWMSAAFjFQABYxgAAWMbAAFjHQABY1wAAWNeAAFjYAABY2IAAWNlAAFjZgABY2cAAWNoAAFjaQABY2sAAWNtAAFjbgABY28AAWNxAAFjcgABY7EAAWOzAAFjtQABY7cAAWO6AAFjuwABY7wAAWO9AAFjvgABY8AAAWPCAAFjwwABY8QAAWPGAAFjxwABZAYAAWQIAAFkCgABZAwAAWQPAAFkEAABZBEAAWQSAAFkEwABZBUAAWQXAAFkGAABZBkAAWQbAAFkHAABZFsAAWRdAAFkXwABZGEAAWRkAAFkZQABZGYAAWRnAAFkaAABZGoAAWRsAAFkbQABZG4AAWRwAAFkcQABZLAAAWSyAAFktAABZLYAAWS5AAFkugABZLsAAWS8AAFkvQABZL8AAWTBAAFkwgABZMMAAWTFAAFkxgABZQUAAWUHAAFlCQABZQsAAWUOAAFlDwABZRAAAWURAAFlEgABZRQAAWUWAAFlFwABZRgAAWUaAAFlGwABZVoAAWVcAAFlXgABZWAAAWVjAAFlZAABZWUAAWVmAAFlZwABZWkAAWVrAAFlbAABZW0AAWVvAAFlcAABZbsAAWXeAAFl/gABZh4AAWYgAAFmIgABZiQAAWYmAAFmKQABZioAAWYrAAFmLgABZi8AAWYxAAFmMgABZjQAAWY3AAFmOAABZjkAAWY8AAFmPQABZkYAAWZTAAFmWAABZloAAWZcAAFmYQABZmQAAWZnAAFmaQABZo4AAWayAAFm2QABZv0AAWcAAAFnAgABZwQAAWcGAAFnCAABZwoAAWcLAAFnDgABZxsAAWcsAAFnLgABZzAAAWcyAAFnNAABZzYAAWc4AAFnOgABZzwAAWdNAAFnUAABZ1MAAWdWAAFnWQABZ1wAAWdfAAFnYgABZ2UAAWdnAAFnpgABZ6gAAWeqAAFnrAABZ68AAWewAAFnsQABZ7IAAWezAAFntQABZ7cAAWe4AAFnuQABZ7sAAWe8AAFn+wABZ/0AAWf/AAFoAQABaAQAAWgFAAFoBgABaAcAAWgIAAFoCgABaAwAAWgNAAFoDgABaBAAAWgRAAFoUAABaFIAAWhVAAFoVwABaFoAAWhbAAFoXAABaF0AAWheAAFoYAABaGIAAWhjAAFoZAABaGYAAWhnAAFodAABaHUAAWh2AAFoeAABaLcAAWi5AAFouwABaL0AAWjAAAFowQABaMIAAWjDAAFoxAABaMYAAWjIAAFoyQABaMoAAWjMAAFozQABaQwAAWkOAAFpEAABaRIAAWkVAAFpFgABaRcAAWkYAAFpGQABaRsAAWkdAAFpHgABaR8AAWkhAAFpIgABaWEAAWljAAFpZQABaWcAAWlqAAFpawABaWwAAWltAAFpbgABaXAAAWlyAAFpcwABaXQAAWl2AAFpdwABabYAAWm4AAFpugABabwAAWm/AAFpwAABacEAAWnCAAFpwwABacUAAWnHAAFpyAABackAAWnLAAFpzAABagsAAWoNAAFqDwABahEAAWoUAAFqFQABahYAAWoXAAFqGAABahoAAWocAAFqHQABah4AAWogAAFqIQABakYAAWpqAAFqkQABarUAAWq4AAFqugABarwAAWq+AAFqwAABasIAAWrDAAFqxgABatMAAWriAAFq5AABauYAAWroAAFq6gABauwAAWruAAFq8AABav8AAWsCAAFrBQABawgAAWsLAAFrDgABaxEAAWsUAAFrFgABa1UAAWtXAAFrWQABa1sAAWteAAFrXwABa2AAAWthAAFrYgABa2QAAWtmAAFrZwABa2gAAWtqAAFrawABa6oAAWusAAFrrgABa7AAAWuzAAFrtAABa7UAAWu2AAFrtwABa7kAAWu7AAFrvAABa70AAWu/AAFrwAABa/8AAWwBAAFsAwABbAUAAWwIAAFsCQABbAoAAWwLAAFsDAABbA4AAWwQAAFsEQABbBIAAWwUAAFsFQABbFQAAWxWAAFsWQABbFsAAWxeAAFsXwABbGAAAWxhAAFsYgABbGQAAWxmAAFsZwABbGgAAWxqAAFsawABbG4AAWytAAFsrwABbLEAAWyzAAFstgABbLcAAWy4AAFsuQABbLoAAWy8AAFsvgABbL8AAWzAAAFswgABbMMAAW0CAAFtBAABbQYAAW0IAAFtCwABbQwAAW0NAAFtDgABbQ8AAW0RAAFtEwABbRQAAW0VAAFtFwABbRgAAW1XAAFtWQABbVsAAW1dAAFtYAABbWEAAW1iAAFtYwABbWQAAW1mAAFtaAABbWkAAW1qAAFtbAABbW0AAW12AAFtdwABbXkAAW28AAFt4AABbgQAAW4nAAFuTgABbm4AAW6VAAFuvAABbtwAAW8AAAFvJAABbyYAAW8pAAFvKwABby0AAW8vAAFvMgABbzUAAW83AAFvOQABbzwAAW8+AAFvQAABb0MAAW9GAAFvRwABb0wAAW9ZAAFvXAABb14AAW9hAAFvZAABb2YAAW+LAAFvrwABb9YAAW/6AAFv/QABb/8AAXABAAFwAwABcAUAAXAHAAFwCAABcAsAAXAYAAFwKwABcC0AAXAvAAFwMQABcDMAAXA1AAFwNwABcDkAAXA7AAFwPQABcFAAAXBTAAFwVgABcFkAAXBcAAFwXwABcGIAAXBlAAFwaAABcGsAAXBtAAFwrAABcK4AAXCxAAFwswABcLYAAXC3AAFwuAABcLkAAXC6AAFwvAABcL4AAXC/AAFwwAABcMIAAXDDAAFwzAABcM0AAXDPAAFxDgABcRAAAXESAAFxFAABcRcAAXEYAAFxGQABcRoAAXEbAAFxHQABcR8AAXEgAAFxIQABcSMAAXEkAAFxYwABcWUAAXFoAAFxagABcW0AAXFuAAFxbwABcXAAAXFxAAFxcwABcXUAAXF2AAFxdwABcXkAAXF6AAFxgwABcYQAAXGGAAFxxQABcccAAXHJAAFxywABcc4AAXHPAAFx0AABcdEAAXHSAAFx1AABcdYAAXHXAAFx2AABcdoAAXHbAAFyGgABchwAAXIfAAFyIQABciQAAXIlAAFyJgABcicAAXIoAAFyKgABciwAAXItAAFyLgABcjAAAXIxAAFyOgABcjsAAXI9AAFyfAABcn4AAXKAAAFyggABcoUAAXKGAAFyhwABcogAAXKJAAFyiwABco0AAXKOAAFyjwABcpEAAXKSAAFy0QABctMAAXLWAAFy2AABctsAAXLcAAFy3QABct4AAXLfAAFy4QABcuMAAXLkAAFy5QABcucAAXLoAAFy9QABcvYAAXL3AAFy+QABczgAAXM6AAFzPAABcz4AAXNBAAFzQgABc0MAAXNEAAFzRQABc0cAAXNJAAFzSgABc0sAAXNNAAFzTgABc40AAXOPAAFzkgABc5QAAXOXAAFzmAABc5kAAXOaAAFzmwABc50AAXOfAAFzoAABc6EAAXOjAAFzpAABc7IAAXO/AAFzxAABc8cAAXPKAAFzzwABc9IAAXPVAAFz1wABc9wAAXPnAAF0MgABdFUAAXR1AAF0lQABdJcAAXSZAAF0mwABdJ0AAXSgAAF0oQABdKIAAXSlAAF0pgABdKgAAXSpAAF0qwABdK4AAXSvAAF0sAABdLMAAXS0AAF0vQABdMoAAXTPAAF00QABdNMAAXTYAAF02wABdN4AAXTgAAF1BQABdSkAAXVQAAF1dAABdXcAAXV5AAF1ewABdX0AAXV/AAF1gQABdYIAAXWFAAF1kgABdaMAAXWlAAF1pwABdakAAXWrAAF1rQABda8AAXWxAAF1swABdcQAAXXHAAF1ygABdc0AAXXQAAF10wABddYAAXXZAAF13AABdd4AAXYdAAF2HwABdiEAAXYjAAF2JgABdicAAXYoAAF2KQABdioAAXYsAAF2LgABdi8AAXYwAAF2MgABdjMAAXZyAAF2dAABdnYAAXZ4AAF2ewABdnwAAXZ9AAF2fgABdn8AAXaBAAF2gwABdoQAAXaFAAF2hwABdogAAXbHAAF2yQABdswAAXbOAAF20QABdtIAAXbTAAF21AABdtUAAXbXAAF22QABdtoAAXbbAAF23QABdt4AAXbrAAF27AABdu0AAXbvAAF3LgABdzAAAXcyAAF3NAABdzcAAXc4AAF3OQABdzoAAXc7AAF3PQABdz8AAXdAAAF3QQABd0MAAXdEAAF3gwABd4UAAXeHAAF3iQABd4wAAXeNAAF3jgABd48AAXeQAAF3kgABd5QAAXeVAAF3lgABd5gAAXeZAAF32AABd9oAAXfcAAF33gABd+EAAXfiAAF34wABd+QAAXflAAF35wABd+kAAXfqAAF36wABd+0AAXfuAAF4LQABeC8AAXgxAAF4MwABeDYAAXg3AAF4OAABeDkAAXg6AAF4PAABeD4AAXg/AAF4QAABeEIAAXhDAAF4ggABeIQAAXiGAAF4iAABeIsAAXiMAAF4jQABeI4AAXiPAAF4kQABeJMAAXiUAAF4lQABeJcAAXiYAAF4vQABeOEAAXkIAAF5LAABeS8AAXkxAAF5MwABeTUAAXk3AAF5OQABeToAAXk9AAF5SgABeVkAAXlbAAF5XQABeV8AAXlhAAF5YwABeWUAAXlnAAF5dgABeXkAAXl8AAF5fwABeYIAAXmFAAF5iAABeYsAAXmNAAF5zAABec4AAXnQAAF50gABedUAAXnWAAF51wABedgAAXnZAAF52wABed0AAXneAAF53wABeeEAAXniAAF6IQABeiMAAXolAAF6JwABeioAAXorAAF6LAABei0AAXouAAF6MAABejIAAXozAAF6NAABejYAAXo3AAF6dgABengAAXp6AAF6fAABen8AAXqAAAF6gQABeoIAAXqDAAF6hQABeocAAXqIAAF6iQABeosAAXqMAAF6ywABes0AAXrQAAF60gABetUAAXrWAAF61wABetgAAXrZAAF62wABet0AAXreAAF63wABeuEAAXriAAF7IQABeyMAAXslAAF7JwABeyoAAXsrAAF7LAABey0AAXsuAAF7MAABezIAAXszAAF7NAABezYAAXs3AAF7dgABe3gAAXt6AAF7fAABe38AAXuAAAF7gQABe4IAAXuDAAF7hQABe4cAAXuIAAF7iQABe4sAAXuMAAF7ywABe80AAXvPAAF70QABe9QAAXvVAAF71gABe9cAAXvYAAF72gABe9wAAXvdAAF73gABe+AAAXvhAAF8LAABfE8AAXxvAAF8jwABfJEAAXyTAAF8lQABfJcAAXyaAAF8mwABfJwAAXyfAAF8oAABfKIAAXyjAAF8pQABfKgAAXypAAF8qgABfK0AAXyuAAF8swABfMAAAXzFAAF8xwABfMkAAXzOAAF80QABfNQAAXzWAAF8+wABfR8AAX1GAAF9agABfW0AAX1vAAF9cQABfXMAAX11AAF9dwABfXgAAX17AAF9iAABfZkAAX2bAAF9nQABfZ8AAX2hAAF9owABfaUAAX2nAAF9qQABfboAAX29AAF9wAABfcMAAX3GAAF9yQABfcwAAX3PAAF90gABfdQAAX4TAAF+FQABfhcAAX4ZAAF+HAABfh0AAX4eAAF+HwABfiAAAX4iAAF+JAABfiUAAX4mAAF+KAABfikAAX5oAAF+agABfmwAAX5uAAF+cQABfnIAAX5zAAF+dAABfnUAAX53AAF+eQABfnoAAX57AAF+fQABfn4AAX69AAF+vwABfsIAAX7EAAF+xwABfsgAAX7JAAF+ygABfssAAX7NAAF+zwABftAAAX7RAAF+0wABftQAAX7hAAF+4gABfuMAAX7lAAF/JAABfyYAAX8oAAF/KgABfy0AAX8uAAF/LwABfzAAAX8xAAF/MwABfzUAAX82AAF/NwABfzkAAX86AAF/eQABf3sAAX99AAF/fwABf4IAAX+DAAF/hAABf4UAAX+GAAF/iAABf4oAAX+LAAF/jAABf44AAX+PAAF/zgABf9AAAX/SAAF/1AABf9cAAX/YAAF/2QABf9oAAX/bAAF/3QABf98AAX/gAAF/4QABf+MAAX/kAAGAIwABgCUAAYAnAAGAKQABgCwAAYAtAAGALgABgC8AAYAwAAGAMgABgDQAAYA1AAGANgABgDgAAYA5AAGAeAABgHoAAYB8AAGAfgABgIEAAYCCAAGAgwABgIQAAYCFAAGAhwABgIkAAYCKAAGAiwABgI0AAYCOAAGAswABgNcAAYD+AAGBIgABgSUAAYEnAAGBKQABgSsAAYEtAAGBLwABgTAAAYEzAAGBQAABgU8AAYFRAAGBUwABgVUAAYFXAAGBWQABgVsAAYFdAAGBbAABgW8AAYFyAAGBdQABgXgAAYF7AAGBfgABgYEAAYGDAAGBwgABgcQAAYHGAAGByAABgcsAAYHMAAGBzQABgc4AAYHPAAGB0QABgdMAAYHUAAGB1QABgdcAAYHYAAGCFwABghkAAYIbAAGCHQABgiAAAYIhAAGCIgABgiMAAYIkAAGCJgABgigAAYIpAAGCKgABgiwAAYItAAGCbAABgm4AAYJwAAGCcgABgnUAAYJ2AAGCdwABgngAAYJ5AAGCewABgn0AAYJ+AAGCfwABgoEAAYKCAAGCwQABgsMAAYLFAAGCxwABgsoAAYLLAAGCzAABgs0AAYLOAAGC0AABgtIAAYLTAAGC1AABgtYAAYLXAAGDFgABgxgAAYMaAAGDHAABgx8AAYMgAAGDIQABgyIAAYMjAAGDJQABgycAAYMoAAGDKQABgysAAYMsAAGDawABg20AAYNvAAGDcQABg3QAAYN1AAGDdgABg3cAAYN4AAGDegABg3wAAYN9AAGDfgABg4AAAYOBAAGDwAABg8IAAYPEAAGDxgABg8kAAYPKAAGDywABg8wAAYPNAAGDzwABg9EAAYPSAAGD0wABg9UAAYPWAAGD3wABg+AAAYPiAAGEJQABhEkAAYRtAAGEkAABhLcAAYTXAAGE/gABhSUAAYVFAAGFaQABhY0AAYWPAAGFkgABhZQAAYWWAAGFmAABhZsAAYWeAAGFoAABhaIAAYWlAAGFpwABhakAAYWsAAGFrwABhbAAAYW5AAGFxgABhckAAYXLAAGFzgABhdEAAYXTAAGF+AABhhwAAYZDAAGGZwABhmoAAYZsAAGGbgABhnAAAYZyAAGGdAABhnUAAYZ4AAGGhQABhpgAAYaaAAGGnAABhp4AAYagAAGGogABhqQAAYamAAGGqAABhqoAAYa9AAGGwAABhsMAAYbGAAGGyQABhswAAYbPAAGG0gABhtUAAYbYAAGG2gABhxkAAYcbAAGHHgABhyAAAYcjAAGHJAABhyUAAYcmAAGHJwABhykAAYcrAAGHLAABhy0AAYcvAAGHMAABhzkAAYc6AAGHPAABh3sAAYd9AAGHfwABh4EAAYeEAAGHhQABh4YAAYeHAAGHiAABh4oAAYeMAAGHjQABh44AAYeQAAGHkQABh9AAAYfSAAGH1QABh9cAAYfaAAGH2wABh9wAAYfdAAGH3gABh+AAAYfiAAGH4wABh+QAAYfmAAGH5wABh/AAAYfxAAGH8wABiDIAAYg0AAGINgABiDgAAYg7AAGIPAABiD0AAYg+AAGIPwABiEEAAYhDAAGIRAABiEUAAYhHAAGISAABiIcAAYiJAAGIjAABiI4AAYiRAAGIkgABiJMAAYiUAAGIlQABiJcAAYiZAAGImgABiJsAAYidAAGIngABiKcAAYioAAGIqgABiOkAAYjrAAGI7QABiO8AAYjyAAGI8wABiPQAAYj1AAGI9gABiPgAAYj6AAGI+wABiPwAAYj+AAGI/wABiT4AAYlAAAGJQwABiUUAAYlIAAGJSQABiUoAAYlLAAGJTAABiU4AAYlQAAGJUQABiVIAAYlUAAGJVQABiWIAAYljAAGJZAABiWYAAYmlAAGJpwABiakAAYmrAAGJrgABia8AAYmwAAGJsQABibIAAYm0AAGJtgABibcAAYm4AAGJugABibsAAYn6AAGJ/AABif8AAYoBAAGKBAABigUAAYoGAAGKBwABiggAAYoKAAGKDAABig0AAYoOAAGKEAABihEAAYojAAGKMAABijcAAYo6AAGKPQABikAAAYpHAAGKSgABik0AAYpQAAGKUgABil8AAYpqAAGKtQABitgAAYr4AAGLGAABixoAAYscAAGLHgABiyAAAYsjAAGLJAABiyUAAYsoAAGLKQABiysAAYssAAGLLgABizEAAYsyAAGLMwABizYAAYs3AAGLPAABi0kAAYtOAAGLUAABi1IAAYtXAAGLWgABi10AAYtfAAGLhAABi6gAAYvPAAGL8wABi/YAAYv4AAGL+gABi/wAAYv+AAGMAAABjAEAAYwEAAGMEQABjCIAAYwkAAGMJgABjCgAAYwqAAGMLAABjC4AAYwwAAGMMgABjEMAAYxGAAGMSQABjEwAAYxPAAGMUgABjFUAAYxYAAGMWwABjF0AAYycAAGMngABjKAAAYyiAAGMpQABjKYAAYynAAGMqAABjKkAAYyrAAGMrQABjK4AAYyvAAGMsQABjLIAAYzxAAGM8wABjPUAAYz3AAGM+gABjPsAAYz8AAGM/QABjP4AAY0AAAGNAgABjQMAAY0EAAGNBgABjQcAAY1GAAGNSAABjUsAAY1NAAGNUAABjVEAAY1SAAGNUwABjVQAAY1WAAGNWAABjVkAAY1aAAGNXAABjV0AAY1qAAGNawABjWwAAY1uAAGNrQABja8AAY2xAAGNswABjbYAAY23AAGNuAABjbkAAY26AAGNvAABjb4AAY2/AAGNwAABjcIAAY3DAAGOAgABjgQAAY4GAAGOCAABjgsAAY4MAAGODQABjg4AAY4PAAGOEQABjhMAAY4UAAGOFQABjhcAAY4YAAGOVwABjlkAAY5bAAGOXQABjmAAAY5hAAGOYgABjmMAAY5kAAGOZgABjmgAAY5pAAGOagABjmwAAY5tAAGOrAABjq4AAY6wAAGOsgABjrUAAY62AAGOtwABjrgAAY65AAGOuwABjr0AAY6+AAGOvwABjsEAAY7CAAGPAQABjwMAAY8FAAGPBwABjwoAAY8LAAGPDAABjw0AAY8OAAGPEAABjxIAAY8TAAGPFAABjxYAAY8XAAGPPAABj2AAAY+HAAGPqwABj64AAY+wAAGPsgABj7QAAY+2AAGPuAABj7kAAY+8AAGPyQABj9gAAY/aAAGP3AABj94AAY/gAAGP4gABj+QAAY/mAAGP9QABj/gAAY/7AAGP/gABkAEAAZAEAAGQBwABkAoAAZAMAAGQSwABkE0AAZBQAAGQUgABkFUAAZBWAAGQVwABkFgAAZBZAAGQWwABkF0AAZBeAAGQXwABkGEAAZBiAAGQZgABkKUAAZCnAAGQqQABkKsAAZCuAAGQrwABkLAAAZCxAAGQsgABkLQAAZC2AAGQtwABkLgAAZC6AAGQuwABkPoAAZD8AAGQ/gABkQAAAZEDAAGRBAABkQUAAZEGAAGRBwABkQkAAZELAAGRDAABkQ0AAZEPAAGREAABkU8AAZFRAAGRUwABkVUAAZFYAAGRWQABkVoAAZFbAAGRXAABkV4AAZFgAAGRYQABkWIAAZFkAAGRZQABkaQAAZGmAAGRqAABkaoAAZGtAAGRrgABka8AAZGwAAGRsQABkbMAAZG1AAGRtgABkbcAAZG5AAGRugABkfkAAZH7AAGR/QABkf8AAZICAAGSAwABkgQAAZIFAAGSBgABkggAAZIKAAGSCwABkgwAAZIOAAGSDwABkk4AAZJQAAGSUgABklQAAZJXAAGSWAABklkAAZJaAAGSWwABkl0AAZJfAAGSYAABkmEAAZJjAAGSZAABkq8AAZLSAAGS8gABkxIAAZMUAAGTFgABkxgAAZMaAAGTHQABkx4AAZMfAAGTIgABkyMAAZMlAAGTJgABkygAAZMrAAGTLAABky0AAZMwAAGTMQABkzYAAZNDAAGTSAABk0oAAZNMAAGTUQABk1QAAZNXAAGTWQABk34AAZOiAAGTyQABk+0AAZPwAAGT8gABk/QAAZP2AAGT+AABk/oAAZP7AAGT/gABlAsAAZQcAAGUHgABlCAAAZQiAAGUJAABlCYAAZQoAAGUKgABlCwAAZQ9AAGUQAABlEMAAZRGAAGUSQABlEwAAZRPAAGUUgABlFUAAZRXAAGUlgABlJgAAZSaAAGUnAABlJ8AAZSgAAGUoQABlKIAAZSjAAGUpQABlKcAAZSoAAGUqQABlKsAAZSsAAGU6wABlO0AAZTvAAGU8QABlPQAAZT1AAGU9gABlPcAAZT4AAGU+gABlPwAAZT9AAGU/gABlQAAAZUBAAGVQAABlUIAAZVFAAGVRwABlUoAAZVLAAGVTAABlU0AAZVOAAGVUAABlVIAAZVTAAGVVAABlVYAAZVXAAGVZAABlWUAAZVmAAGVaAABlacAAZWpAAGVqwABla0AAZWwAAGVsQABlbIAAZWzAAGVtAABlbYAAZW4AAGVuQABlboAAZW8AAGVvQABlfwAAZX+AAGWAAABlgIAAZYFAAGWBgABlgcAAZYIAAGWCQABlgsAAZYNAAGWDgABlg8AAZYRAAGWEgABllEAAZZTAAGWVQABllcAAZZaAAGWWwABllwAAZZdAAGWXgABlmAAAZZiAAGWYwABlmQAAZZmAAGWZwABlqYAAZaoAAGWqgABlqwAAZavAAGWsAABlrEAAZayAAGWswABlrUAAZa3AAGWuAABlrkAAZa7AAGWvAABlvsAAZb9AAGW/wABlwEAAZcEAAGXBQABlwYAAZcHAAGXCAABlwoAAZcMAAGXDQABlw4AAZcQAAGXEQABlzYAAZdaAAGXgQABl6UAAZeoAAGXqgABl6wAAZeuAAGXsAABl7IAAZezAAGXtgABl8MAAZfSAAGX1AABl9YAAZfYAAGX2gABl9wAAZfeAAGX4AABl+8AAZfyAAGX9QABl/gAAZf7AAGX/gABmAEAAZgEAAGYBgABmEUAAZhHAAGYSQABmEsAAZhOAAGYTwABmFAAAZhRAAGYUgABmFQAAZhWAAGYVwABmFgAAZhaAAGYWwABmJoAAZicAAGYngABmKAAAZijAAGYpAABmKUAAZimAAGYpwABmKkAAZirAAGYrAABmK0AAZivAAGYsAABmO8AAZjxAAGY8wABmPUAAZj4AAGY+QABmPoAAZj7AAGY/AABmP4AAZkAAAGZAQABmQIAAZkEAAGZBQABmUQAAZlGAAGZSAABmUoAAZlNAAGZTgABmU8AAZlQAAGZUQABmVMAAZlVAAGZVgABmVcAAZlZAAGZWgABmZkAAZmbAAGZnQABmZ8AAZmiAAGZowABmaQAAZmlAAGZpgABmagAAZmqAAGZqwABmawAAZmuAAGZrwABme4AAZnwAAGZ8gABmfQAAZn3AAGZ+AABmfkAAZn6AAGZ+wABmf0AAZn/AAGaAAABmgEAAZoDAAGaBAABmkMAAZpFAAGaRwABmkkAAZpMAAGaTQABmk4AAZpPAAGaUAABmlIAAZpUAAGaVQABmlYAAZpYAAGaWQABmqQAAZrHAAGa5wABmwcAAZsJAAGbCwABmw0AAZsPAAGbEgABmxMAAZsUAAGbFwABmxgAAZsaAAGbGwABmx0AAZsgAAGbIQABmyIAAZslAAGbJgABmysAAZs4AAGbPQABmz8AAZtBAAGbRgABm0kAAZtMAAGbTgABm3MAAZuXAAGbvgABm+IAAZvlAAGb5wABm+kAAZvrAAGb7QABm+8AAZvwAAGb8wABnAAAAZwRAAGcEwABnBUAAZwXAAGcGQABnBsAAZwdAAGcHwABnCEAAZwyAAGcNQABnDgAAZw7AAGcPgABnEEAAZxEAAGcRwABnEoAAZxMAAGciwABnI0AAZyPAAGckQABnJQAAZyVAAGclgABnJcAAZyYAAGcmgABnJwAAZydAAGcngABnKAAAZyhAAGc4AABnOIAAZzkAAGc5gABnOkAAZzqAAGc6wABnOwAAZztAAGc7wABnPEAAZzyAAGc8wABnPUAAZz2AAGdNQABnTcAAZ06AAGdPAABnT8AAZ1AAAGdQQABnUIAAZ1DAAGdRQABnUcAAZ1IAAGdSQABnUsAAZ1MAAGdWQABnVoAAZ1bAAGdXQABnZwAAZ2eAAGdoAABnaIAAZ2lAAGdpgABnacAAZ2oAAGdqQABnasAAZ2tAAGdrgABna8AAZ2xAAGdsgABnfEAAZ3zAAGd9QABnfcAAZ36AAGd+wABnfwAAZ39AAGd/gABngAAAZ4CAAGeAwABngQAAZ4GAAGeBwABnkYAAZ5IAAGeSgABnkwAAZ5PAAGeUAABnlEAAZ5SAAGeUwABnlUAAZ5XAAGeWAABnlkAAZ5bAAGeXAABnpsAAZ6dAAGenwABnqEAAZ6kAAGepQABnqYAAZ6nAAGeqAABnqoAAZ6sAAGerQABnq4AAZ6wAAGesQABnvAAAZ7yAAGe9AABnvYAAZ75AAGe+gABnvsAAZ78AAGe/QABnv8AAZ8BAAGfAgABnwMAAZ8FAAGfBgABnysAAZ9PAAGfdgABn5oAAZ+dAAGfnwABn6EAAZ+jAAGfpQABn6cAAZ+oAAGfqwABn7gAAZ/HAAGfyQABn8sAAZ/NAAGfzwABn9EAAZ/TAAGf1QABn+QAAZ/nAAGf6gABn+0AAZ/wAAGf8wABn/YAAZ/5AAGf+wABoDoAAaA8AAGgPgABoEAAAaBDAAGgRAABoEUAAaBGAAGgRwABoEkAAaBLAAGgTAABoE0AAaBPAAGgUAABoI8AAaCRAAGgkwABoJUAAaCYAAGgmQABoJoAAaCbAAGgnAABoJ4AAaCgAAGgoQABoKIAAaCkAAGgpQABoOQAAaDmAAGg6AABoOoAAaDtAAGg7gABoO8AAaDwAAGg8QABoPMAAaD1AAGg9gABoPcAAaD5AAGg+gABoTkAAaE7AAGhPQABoT8AAaFCAAGhQwABoUQAAaFFAAGhRgABoUgAAaFKAAGhSwABoUwAAaFOAAGhTwABoY4AAaGQAAGhkgABoZQAAaGXAAGhmAABoZkAAaGaAAGhmwABoZ0AAaGfAAGhoAABoaEAAaGjAAGhpAABoeMAAaHlAAGh5wABoekAAaHsAAGh7QABoe4AAaHvAAGh8AABofIAAaH0AAGh9QABofYAAaH4AAGh+QABojgAAaI6AAGiPAABoj4AAaJBAAGiQgABokMAAaJEAAGiRQABokcAAaJJAAGiSgABoksAAaJNAAGiTgABolcAAaJYAAGiWgABomcAAaJoAAGiaQABomsAAaJ4AAGieQABonoAAaJ8AAGiiQABoooAAaKLAAGijQABopYAAaKlAAGisgABosEAAaLTAAGi5wABov4AAaMQAAGjGQABoxoAAaMcAAGjKQABoyoAAaMrAAGjLQABoy4AAaM3AAGjQQABo0gAAAAAAAAEAgAAAAAAAD6qAAAAAAAAAAAAAAAAAAGjUA== + + + + + CDCurrency + Undefined + 7 + CDCurrency + 1 + + + + + \ No newline at end of file diff --git a/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents index 442ddfbd24..d8cb5b55a2 100644 --- a/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents +++ b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents @@ -1,5 +1,5 @@ - + @@ -160,7 +160,7 @@ - + diff --git a/fearless/Modules/Root/RootInteractor.swift b/fearless/Modules/Root/RootInteractor.swift index 82cdb70be1..342683db27 100644 --- a/fearless/Modules/Root/RootInteractor.swift +++ b/fearless/Modules/Root/RootInteractor.swift @@ -67,12 +67,11 @@ final class RootInteractor { extension RootInteractor: RootInteractorInputProtocol { func setup(runMigrations: Bool) { setupURLHandlingService() + if runMigrations { + self.runMigrators() + } settings.setup(runningCompletionIn: .global()) { result in - if runMigrations { - self.runMigrators() - } - switch result { case let .success(wallet): if let wallet = wallet { From ac18b324a69cab25c9237bbf238ecf7341e09f6b Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Tue, 5 Nov 2024 11:57:24 +0500 Subject: [PATCH 061/156] [#FLW-4992] Create TON wallet. On settings we can see Warning alert --- fearless.xcodeproj/project.pbxproj | 6 +++--- .../Wallet/AssetTransactionData+Ton.swift | 8 +++++++- .../History/Main/TonHistoryOperationFactory.swift | 11 +++++++---- .../ViewModel/ProfileViewModelFactory.swift | 15 +++++++++++---- 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index 20888de65e..90fc4293c2 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -20396,7 +20396,7 @@ "$(CONFIGURATION_BUILD_DIR)", "$(FRAMEWORK_SEARCH_PATHS)", ); - MARKETING_VERSION = 3.8.1; + MARKETING_VERSION = 4.0.1; OTHER_SWIFT_FLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearlesswallet; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -20425,7 +20425,7 @@ "$(CONFIGURATION_BUILD_DIR)", "$(FRAMEWORK_SEARCH_PATHS)", ); - MARKETING_VERSION = 3.8.1; + MARKETING_VERSION = 4.0.1; PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearlesswallet; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -20564,7 +20564,7 @@ "$(CONFIGURATION_BUILD_DIR)", "$(FRAMEWORK_SEARCH_PATHS)", ); - MARKETING_VERSION = 3.8.1; + MARKETING_VERSION = 4.0.1; OTHER_SWIFT_FLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearlesswallet; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift b/fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift index 34d2cbd8f1..2b71eb7d79 100644 --- a/fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift +++ b/fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift @@ -10,7 +10,8 @@ extension AssetTransactionData { action: AccountEventAction, address: String, chain _: ChainModel, - asset: AssetModel + asset: AssetModel, + filters: [WalletTransactionHistoryFilter] ) -> AssetTransactionData? { let status: AssetTransactionStatus = event.isInProgress ? .pending : .commited @@ -30,6 +31,7 @@ extension AssetTransactionData { case let .tonTransfer(tonTransfer): let amountString = String(tonTransfer.amount) guard + filters.contains(where: { $0.type == .transfer && $0.selected }), let amountValue = BigUInt(string: amountString), let amount = Decimal.fromSubstrateAmount(amountValue, precision: Int16(asset.precision)) else { @@ -65,6 +67,9 @@ extension AssetTransactionData { context: iconContext ) case let .contractDeploy(deploy): + guard filters.contains(where: { $0.type == .other && $0.selected }) else { + return nil + } return AssetTransactionData( transactionId: event.eventId, status: .commited, @@ -84,6 +89,7 @@ extension AssetTransactionData { case let .jettonTransfer(jettonTransfer): let amountString = String(jettonTransfer.amount) guard + filters.contains(where: { $0.type == .transfer && $0.selected }), let amountValue = BigUInt(string: amountString), let amount = Decimal.fromSubstrateAmount(amountValue, precision: Int16(asset.precision)) else { diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/TonHistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/TonHistoryOperationFactory.swift index 9371de6699..1af443c5c5 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/TonHistoryOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/TonHistoryOperationFactory.swift @@ -136,7 +136,8 @@ final class TonHistoryOperationFactory { dependingOn remoteOperation: BaseOperation, address: String, asset: AssetModel, - chain: ChainModel + chain: ChainModel, + filters: [WalletTransactionHistoryFilter] ) -> BaseOperation { ClosureOperation { let events = try remoteOperation.extractNoCancellableResultData().events @@ -149,7 +150,8 @@ final class TonHistoryOperationFactory { action: $0, address: address, chain: chain, - asset: asset + asset: asset, + filters: filters ) } } @@ -167,7 +169,7 @@ extension TonHistoryOperationFactory: HistoryOperationFactoryProtocol { asset: AssetModel, chain: ChainModel, address: String, - filters _: [WalletTransactionHistoryFilter], + filters: [WalletTransactionHistoryFilter], pagination: Pagination ) -> CompoundOperationWrapper { var before_lt: Int64? @@ -184,7 +186,8 @@ extension TonHistoryOperationFactory: HistoryOperationFactoryProtocol { dependingOn: remoteOperation, address: address, asset: asset, - chain: chain + chain: chain, + filters: filters ) mapOperation.addDependency(remoteOperation) diff --git a/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift b/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift index 12d3dabe43..209cdb9f52 100644 --- a/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift +++ b/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift @@ -138,12 +138,19 @@ final class ProfileViewModelFactory: ProfileViewModelFactoryProtocol { guard ecosystem.isRegular else { return nil } - + return createWalletConnectViewModel(locale: locale) case .accountList: + let missingEthAccount: Bool + switch ecosystem { + case .regular: + missingEthAccount = missingAccountIssue.isNotEmpty + case .ton: + missingEthAccount = false + } return createAccountListViewModel( for: locale, - missingEthAccount: missingAccountIssue.isNotEmpty + missingEthAccount: missingEthAccount ) case .changePincode: return createChangePincode(for: locale) @@ -153,7 +160,7 @@ final class ProfileViewModelFactory: ProfileViewModelFactoryProtocol { guard ecosystem.isRegular else { return nil } - + return createPolkaswapDisclaimer(locale: locale) case .about: return createAboutViewModel(for: locale) @@ -165,7 +172,7 @@ final class ProfileViewModelFactory: ProfileViewModelFactoryProtocol { guard ecosystem.isRegular else { return nil } - + return createAccountScoreViewModel(locale: locale) case .crowdloans: switch ecosystem { From e730c2a005ee3fc11ad647b5f96de4281a7f89e3 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Fri, 8 Nov 2024 10:39:46 +0500 Subject: [PATCH 062/156] [#FLW-4993, FLW-4994] The fiat balance is blinking --- fearless.xcodeproj/project.pbxproj | 10 - .../xcshareddata/swiftpm/Package.resolved | 23 +- .../Balance/TonRemoteBalanceFetching.swift | 32 +- .../ApplicationLayer/TonJettonInjector.swift | 22 + .../DataProvider/Sources/DappDataSource.swift | 1 + fearless/Common/Services/PricesService.swift | 3 + .../DappBrowserViewModelFactory.swift | 2 + .../Resources/chains.json | 16926 ++++++++-------- 8 files changed, 8426 insertions(+), 8593 deletions(-) diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index 90fc4293c2..9cbe7b24ac 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -5787,7 +5787,6 @@ FA68301B2930DD35002AD926 /* RecommendedValidatorListPoolViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecommendedValidatorListPoolViewModelFactory.swift; sourceTree = ""; }; FA69A94627CE3476000352A6 /* SubstrateV2Mapping.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = SubstrateV2Mapping.xcmappingmodel; sourceTree = ""; }; FA6A6DBC27B60A84007D1A20 /* ChainNodeModelMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainNodeModelMapper.swift; sourceTree = ""; }; - FA6AA3E82CC0C7A80010DBBF /* shared-features-spm */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = "shared-features-spm"; path = "../shared-features-spm"; sourceTree = ""; }; FA6C175029935DAD00A55254 /* AssetTransactionData+GiantsquidHistory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+GiantsquidHistory.swift"; sourceTree = ""; }; FA6C175129935DAD00A55254 /* AssetTransactionData+SubqueryHistory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+SubqueryHistory.swift"; sourceTree = ""; }; FA6C175229935DAE00A55254 /* AssetTransactionData+SubsquidHistory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+SubsquidHistory.swift"; sourceTree = ""; }; @@ -9910,7 +9909,6 @@ 8490139F24A80984008F705E = { isa = PBXGroup; children = ( - FA6AA3E72CC0C7A80010DBBF /* Packages */, 849013AA24A80984008F705E /* fearless */, 849013C124A80986008F705E /* fearlessTests */, 8438E1D024BFAAD2001BDB13 /* fearlessIntegrationTests */, @@ -14559,14 +14557,6 @@ path = WalletConnectProposal; sourceTree = ""; }; - FA6AA3E72CC0C7A80010DBBF /* Packages */ = { - isa = PBXGroup; - children = ( - FA6AA3E82CC0C7A80010DBBF /* shared-features-spm */, - ); - name = Packages; - sourceTree = ""; - }; FA6C175629935DC700A55254 /* BlockExplorer */ = { isa = PBXGroup; children = ( diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 35db971e35..46530cb07a 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,4 +1,5 @@ { + "originHash" : "db3e9f7067135f4497b6059ac444951778a2f8ca758335577305759626739473", "pins" : [ { "identity" : "appauth-ios", @@ -135,6 +136,15 @@ "version" : "0.1.7" } }, + { + "identity" : "shared-features-spm", + "kind" : "remoteSourceControl", + "location" : "https://github.com/soramitsu/shared-features-spm.git", + "state" : { + "branch" : "FW-new-ecosystem", + "revision" : "c3de9e1a7f9b8043da8b8638282aa6a40776208f" + } + }, { "identity" : "swift-atomics", "kind" : "remoteSourceControl", @@ -234,15 +244,6 @@ "version" : "1.3.2" } }, - { - "identity" : "swiftformat", - "kind" : "remoteSourceControl", - "location" : "https://github.com/nicklockwood/SwiftFormat", - "state" : { - "revision" : "86ed20990585f478c0daf309af645c2a528b59d8", - "version" : "0.54.6" - } - }, { "identity" : "swiftimagereadwrite", "kind" : "remoteSourceControl", @@ -282,7 +283,7 @@ { "identity" : "ton-swift", "kind" : "remoteSourceControl", - "location" : "https://github.com/DRadmir/ton-swift.git", + "location" : "https://github.com/DRadmir/ton-swift", "state" : { "branch" : "main", "revision" : "73c9894e2be8d6d16b87853342eb2755d2e4be8a" @@ -334,5 +335,5 @@ } } ], - "version" : 2 + "version" : 3 } diff --git a/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift b/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift index db56ec70c4..83ae148b71 100644 --- a/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift +++ b/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift @@ -84,7 +84,7 @@ actor TonRemoteBalanceFetchingImpl: AccountInfoRemoteService { let accountInfo: AccountInfo switch chainAsset.chainAssetType.tonAssetType { case .normal: - accountInfo = try await getAccountInfo(address: address) + accountInfo = try await getAccountInfo(address: address, currency: wallet.selectedCurrency) case .jetton: let jettons = try await getAccountJettonsBalances( address: address, @@ -155,6 +155,20 @@ actor TonRemoteBalanceFetchingImpl: AccountInfoRemoteService { // MARK: - Private methods + private func getTonRates( + currency: Currency + ) async throws -> [String: Components.Schemas.TokenRates] { + let assembly = try chainRegistry.getTonApiAssembly() + let tonAPIClient = assembly.tonAPIClient() + + let response = try await tonAPIClient.getRates( + query: .init(tokens: "TON", currencies: currency.id.uppercased()) + ) + + let entity = try response.ok.body.json + return entity.rates.additionalProperties + } + private func createJettonsAccountInfos( jettonBalances: [TonJettonBalance], jettons: [ChainAsset] @@ -171,7 +185,7 @@ actor TonRemoteBalanceFetchingImpl: AccountInfoRemoteService { address: String, currency: Currency ) async throws -> (normal: AccountInfo, jettons: [TonJettonBalance]) { - async let normalBalanceTask = getAccountInfo(address: address) + async let normalBalanceTask = getAccountInfo(address: address, currency: currency) async let jettonBalancesTask = getAccountJettonsBalances(address: address, currency: currency) let normalBalance = try await normalBalanceTask let jettonBalances = try await jettonBalancesTask @@ -179,18 +193,26 @@ actor TonRemoteBalanceFetchingImpl: AccountInfoRemoteService { } private func getAccountInfo( - address: String + address: String, + currency: Currency ) async throws -> AccountInfo { let assembly = try chainRegistry.getTonApiAssembly() let tonAPIClient = assembly.tonAPIClient() - let response = try await tonAPIClient.getAccount(.init(path: .init(account_id: address))) - let account = try TonAccount(account: try response.ok.body.json) + async let response = try tonAPIClient.getAccount(.init(path: .init(account_id: address))) + async let rates = try getTonRates(currency: currency) + + let account = try await TonAccount(account: try response.ok.body.json) let stringBalance = String(account.balance) guard let balance = BigUInt(string: stringBalance) else { throw TonRemoteBalanceFetchingError.balanceError } + if let tonRates = try? await rates["TON"] { + let tonPriceData = mapJettonRates(rates: tonRates, currency: currency) + await jettonInjector.inject(tonPriceData: tonPriceData) + } + let accountInfo = AccountInfo(balance: balance) return accountInfo } diff --git a/fearless/ApplicationLayer/TonJettonInjector.swift b/fearless/ApplicationLayer/TonJettonInjector.swift index c19b0f1e86..3deb853f76 100644 --- a/fearless/ApplicationLayer/TonJettonInjector.swift +++ b/fearless/ApplicationLayer/TonJettonInjector.swift @@ -4,6 +4,7 @@ import SSFModels protocol TonJettonInjector { func inject(jettonItems: [TonJettonBalance]) async + func inject(tonPriceData: [PriceData]) async } actor TonJettonInjectorImpl: TonJettonInjector { @@ -42,6 +43,27 @@ actor TonJettonInjectorImpl: TonJettonInjector { } } + func inject(tonPriceData: [PriceData]) async { + do { + let network = LocalToggleService.shared.tonEnvListToggle.storageValue ? TonConstants.testnetChainId : TonConstants.tonChainId + guard let tonChain = try await chainModelRepository.fetch(by: "\(network)", options: RepositoryFetchOptions()) else { + throw ConvenienceError(error: "Ton chain is not fetched") + } + guard let tonAsset = tonChain.utilityChainAssets().first else { + return + } + let updatedTonAsset = tonAsset.asset.replacingPrice(tonPriceData) + var jettons = Array(tonChain.assets.filter { !$0.isUtility }) + jettons.append(updatedTonAsset) + let updatedChain = tonChain.replacingAssets(jettons) + await chainModelRepository.save(models: [updatedChain]) + let priceUpdatedEvent = PricesUpdated() + eventCenter.notify(with: priceUpdatedEvent) + } catch { + logger.customError(error) + } + } + private func map(jettonItems: [TonJettonBalance]) -> Set { let mapped = jettonItems.map { balanceInfo in AssetModel( diff --git a/fearless/Common/DataProvider/Sources/DappDataSource.swift b/fearless/Common/DataProvider/Sources/DappDataSource.swift index 3a9f82b5ad..562843db81 100644 --- a/fearless/Common/DataProvider/Sources/DappDataSource.swift +++ b/fearless/Common/DataProvider/Sources/DappDataSource.swift @@ -13,6 +13,7 @@ enum DappCategoryType: String, Codable, Equatable { case utilities case nft case defi + case explorers } final class DappDataSource: SingleValueProviderSourceProtocol { diff --git a/fearless/Common/Services/PricesService.swift b/fearless/Common/Services/PricesService.swift index 340c2e6dec..6986ec4c17 100644 --- a/fearless/Common/Services/PricesService.swift +++ b/fearless/Common/Services/PricesService.swift @@ -133,6 +133,9 @@ private extension PricesService { var updatedChains: [ChainModel] = [] let uniqChains: [ChainModel] = chainAssets.compactMap { $0.chain }.uniq { $0.chainId } uniqChains.forEach { chain in + guard !chain.ecosystem.isTon else { + return + } var updatedAssets: [AssetModel] = [] chain.chainAssets.forEach { chainAsset in let assetPrices = prices.filter { $0.priceId == chainAsset.asset.priceId } diff --git a/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift b/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift index f983f1eb9e..64ec8b2455 100644 --- a/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift +++ b/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift @@ -248,6 +248,8 @@ final class DappBrowserViewModelFactoryImpl: DappBrowserViewModelFactory { return R.string.localizable.dappCategoryDefiTitle(preferredLanguages: locale.rLanguages) case .top: return nil + case .explorers: + return "Explorers" } } } diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/chains.json b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/chains.json index 3e2000fe68..ab6cd50df8 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/chains.json +++ b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/chains.json @@ -1,8654 +1,8448 @@ [ - { - "disabled": false, - "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "rank": 8, - "name": "Polkadot", - "ecosystem": "substrate", - "externalApi": { - "staking": { - "type": "subsquid", - "url": "https://squid.subsquid.io/fearless-polkadot/v/v3/graphql" - }, - "history": { - "type": "subsquid", - "url": "https://squid.subsquid.io/fearless-polkadot/v/v3/graphql" - }, - "crowdloans": { - "type": "github", - "url": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/crowdloan/polkadot.json" + { + "disabled": false, + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "rank": 8, + "name": "Polkadot", + "ecosystem": "substrate", + "identityChain": "67fa177a097bfa18f77ea95ab56e9bcdfeb0e5b8a40e46298bb93e16b6fc5008", + "externalApi": { + "staking": { + "type": "subsquid", + "url": "https://squid.subsquid.io/fearless-polkadot/v/v3/graphql" + }, + "history": { + "type": "subsquid", + "url": "https://squid.subsquid.io/fearless-polkadot/v/v3/graphql" + }, + "crowdloans": { + "type": "github", + "url": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/crowdloan/polkadot.json" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://polkadot.subscan.io/{type}/{value}" }, - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://polkadot.subscan.io/{type}/{value}" - }, - { - "type": "polkascan", - "types": [ - "extrinsic", - "account", - "event" - ], - "url": "https://polkascan.io/polkadot/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "887a17c7-1370-4de0-97dd-5422e294fa75", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "staking": "relaychain", - "purchaseProviders": [ - "moonpay", - "ramp" + { + "type": "polkascan", + "types": [ + "extrinsic", + "account", + "event" ], - "type": "normal", - "priceProvider": { + "url": "https://polkascan.io/polkadot/{type}/{value}" + } + ] + }, + "assets": [ + { + "isUtility": true, + "id": "887a17c7-1370-4de0-97dd-5422e294fa75", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "staking": "relaychain", + "purchaseProviders": [ + "moonpay", + "ramp" + ], + "type": "normal", + "priceProvider": { "type": "chainlink", "id": "0xa6bc5baf2000424e90434ba7104ee399dee80dec", "precision": 8 - } } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ], - "availableDestinations": [ - { - "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, - { - "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, - { - "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, - { - "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, - { - "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT", - "minAmount": "11000000000" - } - ], - "bridgeParachainId": "e92d165ad41e41e215d09713788173aecfdbe34d3bed29409d33a2ef03980738" - } - ] + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + } + ], + "availableDestinations": [ + { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + } + ] + }, + { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + } + ] + }, + { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + } + ] + }, + { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + } + ] + }, + { + "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", + "assets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT", + "minAmount": "11000000000" + } + ], + "bridgeParachainId": "e92d165ad41e41e215d09713788173aecfdbe34d3bed29409d33a2ef03980738" + } + ] + }, + "nodes": [ + { + "url": "wss://api-polkadot.dwellir.com", + "name": "Dwellir node" }, - "nodes": [ - { - "url": "wss://api-polkadot.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://rpc.polkadot.io", - "name": "Parity node" - }, + { + "url": "wss://rpc.polkadot.io", + "name": "Parity node" + }, + { + "url": "wss://rpc-polkadot.luckyfriday.io", + "name": "LuckyFriday node" + }, + { + "url": "wss://polkadot.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polkadot.svg", + "addressPrefix": 0, + "options": [ + "crowdloans", + "poolStaking" + ] + }, + { + "disabled": false, + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "rank": 9, + "name": "Kusama", + "ecosystem": "substrate", + "identityChain": "c1af4cb4eb3918e5db15086c0cc5ec17fb334f728b7c65dd44bfe1e174ff8b3f", + "externalApi": { + "staking": { + "type": "subsquid", + "url": "https://fearless-wallet.squids.live/fearless-kusama-2/v/v4/graphql" + }, + "history": { + "type": "subsquid", + "url": "https://fearless-wallet.squids.live/fearless-kusama-2/v/v4/graphql" + }, + "explorers": [ { - "url": "wss://rpc-polkadot.luckyfriday.io", - "name": "LuckyFriday node" + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://kusama.subscan.io/{type}/{value}" }, { - "url": "wss://polkadot.public.curie.radiumblock.co/ws", - "name": "RadiumBlock node" + "type": "polkascan", + "types": [ + "extrinsic", + "account", + "event" + ], + "url": "https://polkascan.io/kusama/{type}/{value}" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polkadot.svg", - "addressPrefix": 0, - "options": [ - "crowdloans", - "poolStaking" ] }, - { - "disabled": false, - "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "rank": 9, - "name": "Kusama", - "ecosystem": "substrate", - "identityChain": "c1af4cb4eb3918e5db15086c0cc5ec17fb334f728b7c65dd44bfe1e174ff8b3f", - "externalApi": { - "staking": { - "type": "subsquid", - "url": "https://fearless-wallet.squids.live/fearless-kusama-2/v/v4/graphql" - }, - "history": { - "type": "subsquid", - "url": "https://fearless-wallet.squids.live/fearless-kusama-2/v/v4/graphql" - }, - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://kusama.subscan.io/{type}/{value}" - }, - { - "type": "polkascan", - "types": [ - "extrinsic", - "account", - "event" - ], - "url": "https://polkascan.io/kusama/{type}/{value}" - } - ] - }, - "assets": [ - { - "id": "1e0c2ec6-935f-49bd-a854-5e12ee6c9f1b", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "staking": "relaychain", - "purchaseProviders": [ - "ramp" + "assets": [ + { + "id": "1e0c2ec6-935f-49bd-a854-5e12ee6c9f1b", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "staking": "relaychain", + "purchaseProviders": [ + "ramp" + ], + "isUtility": true, + "type": "normal" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + } + ], + "availableDestinations": [ + { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "assets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + } + ] + }, + { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + } + ] + }, + { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + } + ] + }, + { + "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", + "assets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM", + "minAmount": "50000000000" + } ], - "isUtility": true, - "type": "normal" + "bridgeParachainId": "6d8d9f145c2177fa83512492cdd80a71e29f22473f4a8943a6292149ac319fb9" } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ], - "availableDestinations": [ - { - "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM", - "minAmount": "50000000000" - } - ], - "bridgeParachainId": "6d8d9f145c2177fa83512492cdd80a71e29f22473f4a8943a6292149ac319fb9" - } - ] + ] + }, + "nodes": [ + { + "url": "wss://api-kusama.dwellir.com", + "name": "Dwellir node" }, - "nodes": [ - { - "url": "wss://api-kusama.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://kusama-rpc.polkadot.io", - "name": "Parity node" - }, - { - "url": "wss://rpc-kusama.luckyfriday.io", - "name": "LuckyFriday node" - }, + { + "url": "wss://kusama-rpc.polkadot.io", + "name": "Parity node" + }, + { + "url": "wss://rpc-kusama.luckyfriday.io", + "name": "LuckyFriday node" + }, + { + "url": "wss://kusama.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kusama.svg", + "addressPrefix": 2, + "options": [ + "poolStaking" + ] + }, + { + "disabled": false, + "chainId": "e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e", + "rank": 108, + "name": "Westend", + "ecosystem": "substrate", + "externalApi": { + "crowdloans": { + "type": "github", + "url": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/crowdloan/westend.json" + }, + "explorers": [ { - "url": "wss://kusama.public.curie.radiumblock.co/ws", - "name": "RadiumBlock node" + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://westend.subscan.io/{type}/{value}" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kusama.svg", - "addressPrefix": 2, - "options": [ - "poolStaking" ] }, - { - "disabled": false, - "chainId": "e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e", - "rank": 108, - "name": "Westend", - "ecosystem": "substrate", - "externalApi": { - "crowdloans": { - "type": "github", - "url": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/crowdloan/westend.json" - }, - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://westend.subscan.io/{type}/{value}" - } - ] + "assets": [ + { + "staking": "relaychain", + "isUtility": true, + "id": "a3868e1b-922e-42d4-b73e-b41712f0843c", + "name": "westend", + "symbol": "wnd", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/WND.svg", + "color": "FFFFFF", + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://westend-rpc.polkadot.io", + "name": "Parity node" }, - "assets": [ - { - "staking": "relaychain", - "isUtility": true, - "id": "a3868e1b-922e-42d4-b73e-b41712f0843c", - "name": "westend", - "symbol": "wnd", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/WND.svg", - "color": "FFFFFF", - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://westend-rpc.polkadot.io", - "name": "Parity node" - }, + { + "url": "wss://westend-rpc.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Westend.svg", + "addressPrefix": 42, + "options": [ + "testnet", + "crowdloans", + "poolStaking" + ] + }, + { + "disabled": false, + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "1000", + "name": "Kusama AssetHub", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-statemine-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ { - "url": "wss://westend-rpc.dwellir.com", - "name": "Dwellir node" + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://assethub-kusama.subscan.io/{type}/{value}" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Westend.svg", - "addressPrefix": 42, - "options": [ - "testnet", - "crowdloans", - "poolStaking" ] }, - { - "disabled": false, + "assets": [ + { + "id": "1e0c2ec6-935f-49bd-a854-5e12ee6c9f1b", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "purchaseProviders": [ + "ramp" + ], + "isUtility": true, + "type": "normal" + }, + { + "id": "27768227-8a9a-4443-a57d-6013c24f85e9", + "type": "assets", + "name": "tether usd", + "symbol": "usdt", + "precision": 4, + "currencyId": "11", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + }, + { + "id": "3dd9d403-49d2-46c2-a84a-334b31a6a6b7", + "type": "assets", + "name": "rmrk", + "symbol": "rmrk", + "precision": 10, + "currencyId": "8", + "priceId": "rmrk", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", + "color": "392B73", + "inferred": true, + "confidence": 0 + } + ], + "xcm": { "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "1000", - "name": "Kusama AssetHub", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid-statemine-api.squid.tachi.soramitsu.co.jp/graphql" - }, - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://assethub-kusama.subscan.io/{type}/{value}" - } - ] - }, - "assets": [ - { - "id": "1e0c2ec6-935f-49bd-a854-5e12ee6c9f1b", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "purchaseProviders": [ - "ramp" - ], - "isUtility": true, - "type": "normal" + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" }, { - "id": "27768227-8a9a-4443-a57d-6013c24f85e9", - "type": "assets", - "name": "tether usd", - "symbol": "usdt", - "precision": 4, - "currencyId": "11", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" }, { - "id": "3dd9d403-49d2-46c2-a84a-334b31a6a6b7", - "type": "assets", - "name": "rmrk", - "symbol": "rmrk", - "precision": 10, - "currencyId": "8", - "priceId": "rmrk", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", - "color": "392B73", - "inferred": true, - "confidence": 0 + "id": "043a5aba-075a-4b14-91ae-f5bffe640477", + "symbol": "USDt" } ], - "xcm": { - "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - }, - { - "id": "043a5aba-075a-4b14-91ae-f5bffe640477", - "symbol": "USDt" - } - ], - "availableDestinations": [ - { - "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", - "assets": [ - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - } - ] - }, - { - "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", - "assets": [ - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - }, - { - "id": "043a5aba-075a-4b14-91ae-f5bffe640477", - "symbol": "USDt" - } - ] - }, - { - "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", - "assets": [ - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - }, - { - "id": "043a5aba-075a-4b14-91ae-f5bffe640477", - "symbol": "USDt" - } - ] - } - ] - }, - "nodes": [ - { - "url": "wss://api-assethub-kusama.dwellir.com", - "name": "Dwellir node" - }, + "availableDestinations": [ { - "url": "wss://kusama-asset-hub-rpc.polkadot.io", - "name": "Parity node" + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + } + ] }, { - "url": "wss://statemine.public.curie.radiumblock.co/ws", - "name": "RadiumBlock node" + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assets": [ + { + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" + } + ] }, { - "url": "wss://rpc-asset-hub-kusama.luckyfriday.io", - "name": "LuckyFriday node" + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assets": [ + { + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" + }, + { + "id": "043a5aba-075a-4b14-91ae-f5bffe640477", + "symbol": "USDt" + } + ] }, { - "url": "wss://ksm-rpc.stakeworld.io/assethub", - "name": "Stakeworld node" + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assets": [ + { + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" + }, + { + "id": "043a5aba-075a-4b14-91ae-f5bffe640477", + "symbol": "USDt" + } + ] } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Assethub.svg", - "addressPrefix": 2, - "options": [ - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "1000", - "name": "Polkadot AssetHub", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-statemint/graphql" - }, - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://assethub-polkadot.subscan.io/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "887a17c7-1370-4de0-97dd-5422e294fa75", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "purchaseProviders": [ - "moonpay", - "ramp" - ], - "type": "normal" - }, - { - "id": "ea33432f-9bd9-4d42-93bc-cd45a0e8a44c", - "type": "assets", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "1984", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - }, - { - "id": "951ca8aa-c390-4512-a35c-d3851440b580", - "type": "assets", - "name": "usd coin", - "symbol": "usdc", - "precision": 6, - "currencyId": "1337", - "priceId": "usd-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4" - }, - { - "id": "8f79aa5a-9f31-442c-ac96-01ff80b105e0", - "type": "assets", - "name": "dot is $ded", - "symbol": "ded", - "precision": 10, - "currencyId": "30", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DED.svg", - "color": "FE0186" - }, + "nodes": [ + { + "url": "wss://api-assethub-kusama.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://kusama-asset-hub-rpc.polkadot.io", + "name": "Parity node" + }, + { + "url": "wss://statemine.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + }, + { + "url": "wss://rpc-asset-hub-kusama.luckyfriday.io", + "name": "LuckyFriday node" + }, + { + "url": "wss://ksm-rpc.stakeworld.io/assethub", + "name": "Stakeworld node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Assethub.svg", + "addressPrefix": 2, + "options": [ + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "1000", + "name": "Polkadot AssetHub", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid.subsquid.io/gs-main-statemint/graphql" + }, + "explorers": [ { - "id": "44587704-7da8-45c3-9541-be7b81de76ee", - "type": "assets", - "name": "pink", - "symbol": "pink", - "precision": 10, - "currencyId": "23", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PINK.svg", - "color": "FF0066" + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://assethub-polkadot.subscan.io/{type}/{value}" } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - }, - { - "id": "1c9cea4c-f369-4bfa-a8c4-3d3264d3d7c2", - "symbol": "USDt" - } + ] + }, + "assets": [ + { + "isUtility": true, + "id": "887a17c7-1370-4de0-97dd-5422e294fa75", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "purchaseProviders": [ + "moonpay", + "ramp" ], - "availableDestinations": [ - { - "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, - { - "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", - "assets": [ - { - "id": "1c9cea4c-f369-4bfa-a8c4-3d3264d3d7c2", - "symbol": "USDt" - } - ] - }, - { - "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", - "assets": [ - { - "id": "1c9cea4c-f369-4bfa-a8c4-3d3264d3d7c2", - "symbol": "USDt" - } - ] - } - ] + "type": "normal" + }, + { + "id": "ea33432f-9bd9-4d42-93bc-cd45a0e8a44c", + "type": "assets", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "1984", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + }, + { + "id": "951ca8aa-c390-4512-a35c-d3851440b580", + "type": "assets", + "name": "usd coin", + "symbol": "usdc", + "precision": 6, + "currencyId": "1337", + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4" }, - "nodes": [ + { + "id": "8f79aa5a-9f31-442c-ac96-01ff80b105e0", + "type": "assets", + "name": "dot is $ded", + "symbol": "ded", + "precision": 10, + "currencyId": "30", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DED.svg", + "color": "FE0186" + }, + { + "id": "44587704-7da8-45c3-9541-be7b81de76ee", + "type": "assets", + "name": "pink", + "symbol": "pink", + "precision": 10, + "currencyId": "23", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PINK.svg", + "color": "FF0066" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ { - "url": "wss://api-assethub-polkadot.dwellir.com", - "name": "Dwellir node" + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" }, { - "url": "wss://polkadot-asset-hub-rpc.polkadot.io", - "name": "Parity node" - }, + "id": "1c9cea4c-f369-4bfa-a8c4-3d3264d3d7c2", + "symbol": "USDt" + } + ], + "availableDestinations": [ { - "url": "wss://statemint.public.curie.radiumblock.co/ws", - "name": "RadiumBlock node" + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + } + ] }, { - "url": "wss://rpc-asset-hub-polkadot.luckyfriday.io", - "name": "LuckyFriday node" + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assets": [ + { + "id": "1c9cea4c-f369-4bfa-a8c4-3d3264d3d7c2", + "symbol": "USDt" + } + ] }, { - "url": "wss://dot-rpc.stakeworld.io/assethub", - "name": "Stakeworld node" + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assets": [ + { + "id": "1c9cea4c-f369-4bfa-a8c4-3d3264d3d7c2", + "symbol": "USDt" + } + ] } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Assethub.svg", - "addressPrefix": 0, - "options": [ - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "name": "Acala", - "ecosystem": "substrate", - "paraId": "2000", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid-acala-api.squid.tachi.soramitsu.co.jp/graphql" - }, - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://acala.subscan.io/{type}/{value}" - } - ] - }, - "assets": [ - { - "id": "c801d6c1-3edf-41a9-9aea-da705eab249b", - "name": "acala", - "symbol": "aca", - "precision": 12, - "priceId": "acala", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal", - "existentialDeposit": "100000000000" - }, - { - "id": "cfe26eae-f566-4b8d-a44c-bd4380c27bc5", - "name": "acala dollar", - "symbol": "ausd", - "currencyId": "kusd", - "precision": 12, - "priceId": "acala-dollar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", - "color": "E40C5B", - "type": "ormlAsset", - "isNative": true, - "existentialDeposit": "100000000000" - }, + "nodes": [ + { + "url": "wss://api-assethub-polkadot.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://polkadot-asset-hub-rpc.polkadot.io", + "name": "Parity node" + }, + { + "url": "wss://statemint.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + }, + { + "url": "wss://rpc-asset-hub-polkadot.luckyfriday.io", + "name": "LuckyFriday node" + }, + { + "url": "wss://dot-rpc.stakeworld.io/assethub", + "name": "Stakeworld node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Assethub.svg", + "addressPrefix": 0, + "options": [ + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "name": "Acala", + "ecosystem": "substrate", + "paraId": "2000", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-acala-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ { - "id": "70a69d25-a4ba-4c6b-a15d-09f3c2814ddf", - "name": "tapio dot", - "symbol": "tdot", - "precision": 10, - "currencyId": "0", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TDOT.svg", - "color": "FF0066", - "type": "stableAssetPoolToken", - "isNative": true, - "existentialDeposit": "100000000" - }, + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://acala.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "c801d6c1-3edf-41a9-9aea-da705eab249b", + "name": "acala", + "symbol": "aca", + "precision": 12, + "priceId": "acala", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal", + "existentialDeposit": "100000000000" + }, + { + "id": "cfe26eae-f566-4b8d-a44c-bd4380c27bc5", + "name": "acala dollar", + "symbol": "ausd", + "currencyId": "kusd", + "precision": 12, + "priceId": "acala-dollar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", + "color": "E40C5B", + "type": "ormlAsset", + "isNative": true, + "existentialDeposit": "100000000000" + }, + { + "id": "70a69d25-a4ba-4c6b-a15d-09f3c2814ddf", + "name": "tapio dot", + "symbol": "tdot", + "precision": 10, + "currencyId": "0", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TDOT.svg", + "color": "FF0066", + "type": "stableAssetPoolToken", + "isNative": true, + "existentialDeposit": "100000000" + }, + { + "id": "fe07f6c5-2b90-4e1a-81e3-8ed85f5a80b9", + "name": "parallel finance", + "symbol": "para", + "precision": 12, + "currencyId": "1", + "priceId": "parallel-finance", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PARA.svg", + "color": "4C19E7", + "type": "foreignAsset", + "existentialDeposit": "100000000000" + }, + { + "id": "b6c22f93-be25-426b-b921-18bf19c49667", + "name": "moonbeam", + "symbol": "glmr", + "precision": 18, + "currencyId": "0", + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF", + "type": "foreignAsset", + "existentialDeposit": "100000000000000000" + }, + { + "id": "471bfcd1-9680-4ba9-a25d-3e9f777ee2c9", + "name": "liquid dot", + "symbol": "ldot", + "precision": 10, + "priceId": "liquid-staking-dot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LDOT.svg", + "color": "FF0066", + "type": "ormlAsset", + "isNative": true, + "existentialDeposit": "500000000" + }, + { + "id": "ffb814ea-c92c-4a1e-8e24-437c93ecd8ff", + "name": "taiga", + "symbol": "tai", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TAI.svg", + "color": "FFFFFF", + "priceId": "taiga", + "type": "ormlAsset", + "isNative": true + }, + { + "id": "ed98bee1-34ce-4aa2-896e-508380dea1c2", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "type": "ormlAsset", + "existentialDeposit": "100000000" + }, + { + "id": "a7b48fb1-5741-487a-98fd-c45f958dd4fd", + "name": "liquid crowdloan dot", + "symbol": "lcdot", + "precision": 10, + "currencyId": "13", + "priceId": "liquid-crowdloan-dot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LCDOT.svg", + "color": "FF0066", + "type": "liquidCrowdloan", + "isNative": true, + "existentialDeposit": "0" + }, + { + "id": "402c606d-691f-4889-a48d-a459a0e37c56", + "name": "inter btc", + "symbol": "ibtc", + "precision": 8, + "currencyId": "3", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", + "color": "F2AE7F", + "type": "foreignAsset" + }, + { + "id": "7fffd65a-d971-4bdc-a6bd-216674b83a97", + "name": "wrapped ether", + "symbol": "weth", + "precision": 18, + "currencyId": "6", + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "627EEA", + "type": "foreignAsset" + }, + { + "id": "184a1b21-d512-4de9-ab54-6c014e24f90c", + "name": "astar", + "symbol": "astr", + "precision": 18, + "currencyId": "2", + "priceId": "astar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", + "color": "0AE2FF", + "type": "foreignAsset" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ { - "id": "fe07f6c5-2b90-4e1a-81e3-8ed85f5a80b9", - "name": "parallel finance", - "symbol": "para", - "precision": 12, - "currencyId": "1", - "priceId": "parallel-finance", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PARA.svg", - "color": "4C19E7", - "type": "foreignAsset", - "existentialDeposit": "100000000000" + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" }, { - "id": "b6c22f93-be25-426b-b921-18bf19c49667", - "name": "moonbeam", - "symbol": "glmr", - "precision": 18, - "currencyId": "0", - "priceId": "moonbeam", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF", - "type": "foreignAsset", - "existentialDeposit": "100000000000000000" + "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", + "symbol": "aUSD" }, { - "id": "471bfcd1-9680-4ba9-a25d-3e9f777ee2c9", - "name": "liquid dot", - "symbol": "ldot", - "precision": 10, - "priceId": "liquid-staking-dot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LDOT.svg", - "color": "FF0066", - "type": "ormlAsset", - "isNative": true, - "existentialDeposit": "500000000" + "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", + "symbol": "ACA" }, { - "id": "ffb814ea-c92c-4a1e-8e24-437c93ecd8ff", - "name": "taiga", - "symbol": "tai", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TAI.svg", - "color": "FFFFFF", - "priceId": "taiga", - "type": "ormlAsset", - "isNative": true + "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", + "symbol": "GLMR" }, { - "id": "ed98bee1-34ce-4aa2-896e-508380dea1c2", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "type": "ormlAsset", - "existentialDeposit": "100000000" - }, + "id": "163a89b9-d140-44ca-b119-218a54e4235b", + "symbol": "lcDOT" + } + ], + "availableDestinations": [ { - "id": "a7b48fb1-5741-487a-98fd-c45f958dd4fd", - "name": "liquid crowdloan dot", - "symbol": "lcdot", - "precision": 10, - "currencyId": "13", - "priceId": "liquid-crowdloan-dot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LCDOT.svg", - "color": "FF0066", - "type": "liquidCrowdloan", - "isNative": true, - "existentialDeposit": "0" + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + } + ] }, { - "id": "402c606d-691f-4889-a48d-a459a0e37c56", - "name": "inter btc", - "symbol": "ibtc", - "precision": 8, - "currencyId": "3", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", - "color": "F2AE7F", - "type": "foreignAsset" + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assets": [ + { + "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", + "symbol": "aUSD" + }, + { + "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", + "symbol": "ACA" + }, + { + "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", + "symbol": "GLMR" + } + ] }, { - "id": "7fffd65a-d971-4bdc-a6bd-216674b83a97", - "name": "wrapped ether", - "symbol": "weth", - "precision": 18, - "currencyId": "6", - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "627EEA", - "type": "foreignAsset" + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assets": [ + { + "id": "163a89b9-d140-44ca-b119-218a54e4235b", + "symbol": "lcDOT" + }, + { + "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", + "symbol": "ACA" + } + ] }, { - "id": "184a1b21-d512-4de9-ab54-6c014e24f90c", - "name": "astar", - "symbol": "astr", - "precision": 18, - "currencyId": "2", - "priceId": "astar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", - "color": "0AE2FF", - "type": "foreignAsset" + "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", + "assets": [ + { + "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", + "symbol": "ACA", + "minAmount": "56000000000000" + } + ], + "bridgeParachainId": "e92d165ad41e41e215d09713788173aecfdbe34d3bed29409d33a2ef03980738" } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - }, - { - "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", - "symbol": "aUSD" - }, - { - "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", - "symbol": "ACA" - }, - { - "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", - "symbol": "GLMR" - }, - { - "id": "163a89b9-d140-44ca-b119-218a54e4235b", - "symbol": "lcDOT" - } - ], - "availableDestinations": [ - { - "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, - { - "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", - "assets": [ - { - "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", - "symbol": "aUSD" - }, - { - "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", - "symbol": "ACA" - }, - { - "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", - "symbol": "GLMR" - } - ] - }, - { - "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", - "assets": [ - { - "id": "163a89b9-d140-44ca-b119-218a54e4235b", - "symbol": "lcDOT" - }, - { - "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", - "symbol": "ACA" - } - ] - }, - { - "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", - "assets": [ - { - "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", - "symbol": "ACA", - "minAmount": "56000000000000" - } - ], - "bridgeParachainId": "e92d165ad41e41e215d09713788173aecfdbe34d3bed29409d33a2ef03980738" - } - ] + ] + }, + "nodes": [ + { + "url": "wss://api-acala.dwellir.com", + "name": "Dwellir node" }, - "nodes": [ - { - "url": "wss://api-acala.dwellir.com", - "name": "Dwellir node" - }, + { + "url": "wss://rpc-acala.luckyfriday.io", + "name": "LuckyFriday node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/acala.svg", + "addressPrefix": 10, + "options": [ + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "name": "Karura", + "ecosystem": "substrate", + "paraId": "2000", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-karura-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ { - "url": "wss://rpc-acala.luckyfriday.io", - "name": "LuckyFriday node" + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://karura.subscan.io/{type}/{value}" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/acala.svg", - "addressPrefix": 10, - "options": [ - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "name": "Karura", - "ecosystem": "substrate", - "paraId": "2000", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid-karura-api.squid.tachi.soramitsu.co.jp/graphql" - }, - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://karura.subscan.io/{type}/{value}" - } - ] - }, - "assets": [ - { - "id": "e71b30a0-2a44-40ff-8b53-a166fadef6c5", - "name": "karura", - "symbol": "kar", - "precision": 12, - "priceId": "karura", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }, + "assets": [ + { + "id": "e71b30a0-2a44-40ff-8b53-a166fadef6c5", + "name": "karura", + "symbol": "kar", + "precision": 12, + "priceId": "karura", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + }, + { + "id": "91a69026-0ab7-4db0-af53-8d571fd33ac4", + "name": "acala dollar", + "symbol": "ausd", + "currencyId": "kusd", + "precision": 12, + "priceId": "acala-dollar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", + "color": "E40C5B", + "type": "ormlAsset", + "isNative": true, + "existentialDeposit": "10000000000" + }, + { + "id": "223b0282-b5c9-48ed-87e3-5e9ef6714ac8", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "type": "ormlAsset", + "existentialDeposit": "100000000" + }, + { + "id": "e605149c-0f41-4ec9-960f-21c07e2d9361", + "name": "rmrk", + "symbol": "rmrk", + "currencyId": "0", + "precision": 10, + "priceId": "rmrk", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", + "color": "392B73", + "type": "foreignAsset", + "existentialDeposit": "100000000" + }, + { + "id": "10757cfa-b590-43c1-8524-efc28d798bcb", + "name": "bifrost native coin", + "symbol": "bnc", + "precision": 12, + "priceId": "bifrost-native-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", + "color": "FFFFFF", + "type": "ormlAsset", + "existentialDeposit": "8000000000" + }, + { + "id": "77562113-9e01-49b6-a39d-87a47bde24fe", + "name": "liquid ksm", + "symbol": "lksm", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LKSM.svg", + "color": "FFFFFF", + "type": "ormlAsset", + "isNative": true, + "existentialDeposit": "500000000" + }, + { + "id": "c6fd5a1e-3052-4bdf-b0f3-ad1b7b9fbff0", + "name": "crust shadow", + "symbol": "csm", + "currencyId": "5", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CSM_Crust_Shadow.svg", + "color": "F3AD56", + "priceId": "crust-storage-market", + "type": "foreignAsset", + "existentialDeposit": "1000000000000" + }, + { + "id": "5e9c76a4-9f89-487d-80aa-db0588b60aa4", + "name": "taiga", + "symbol": "tai", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TAI.svg", + "color": "FFFFFF", + "priceId": "taiga", + "type": "ormlAsset", + "isNative": true, + "existentialDeposit": "1000000000000" + }, + { + "id": "4b9f4cba-3b26-4f99-8666-3ee305683706", + "name": "polarisdao", + "symbol": "aris", + "currencyId": "1", + "precision": 8, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ARIS.svg", + "color": "423F47", + "priceId": "polarisdao", + "type": "foreignAsset", + "existentialDeposit": "1000000000000" + }, + { + "id": "3d32d7cb-4de5-427e-9668-a9763648a555", + "name": "quartz", + "symbol": "qtz", + "currencyId": "2", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/QTZ.svg", + "color": "EC5B6D", + "priceId": "quartz", + "type": "foreignAsset", + "existentialDeposit": "1000000000000000000" + }, + { + "id": "17142348-16f6-49f2-9006-098f5562bda0", + "name": "kintsugi ibtc", + "symbol": "kbtc", + "precision": 8, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", + "color": "FFFFFF", + "priceId": "kintsugi-btc", + "type": "ormlAsset", + "existentialDeposit": "66" + }, + { + "id": "6aa4622c-42b9-4976-9f7c-35447bb24128", + "name": "kintsugi", + "symbol": "kint", + "precision": 12, + "priceId": "kintsugi", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", + "color": "FFFFFF", + "type": "ormlAsset", + "existentialDeposit": "133330000" + }, + { + "id": "e27e5b58-3229-4656-b9ff-de309f49f17f", + "name": "phala", + "symbol": "pha", + "precision": 12, + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F", + "type": "ormlAsset", + "existentialDeposit": "40000000000" + }, + { + "id": "8e975c47-df51-48a8-a29e-a89ee0f4bf9e", + "name": "taiga ksm", + "symbol": "taiksm", + "currencyId": "0", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TAIKSM.svg", + "color": "FFFFFF", + "type": "stableAssetPoolToken", + "isNative": true, + "existentialDeposit": "100000000" + }, + { + "id": "536deaa6-49b0-4b54-adc7-9619e15c79b2", + "name": "voucher slot ksm", + "symbol": "vsksm", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VSKSM.svg", + "color": "FFFFFF", + "type": "ormlAsset", + "existentialDeposit": "100000000" + }, + { + "id": "f2257792-ffb9-4dff-95ae-5f98c1cb594b", + "name": "moonriver", + "symbol": "movr", + "currencyId": "3", + "precision": 18, + "priceId": "moonriver", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", + "color": "FFFFFF", + "type": "foreignAsset", + "existentialDeposit": "1000000000000000" + }, + { + "id": "54b7f751-ef62-45b2-ad65-837852de5af4", + "name": "heiko finance", + "symbol": "hko", + "currencyId": "4", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HKO.svg", + "color": "CC3474", + "type": "foreignAsset", + "existentialDeposit": "100000000000" + }, + { + "id": "bb3dc769-394f-40fb-b54f-4a0d0de7e49e", + "name": "kico", + "symbol": "kico", + "currencyId": "6", + "precision": 14, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KICO.svg", + "color": "FFFFFF", + "type": "foreignAsset", + "existentialDeposit": "100000000000000" + }, + { + "id": "5fd5f3ce-4a2c-4647-923e-6c29cc95a4f7", + "name": "tether usd", + "symbol": "usdt", + "currencyId": "7", + "precision": 6, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "type": "foreignAsset", + "existentialDeposit": "10000" + }, + { + "id": "8cf27ed8-11bf-4b16-be22-5aa6bbc10736", + "name": "integritee", + "symbol": "teer", + "currencyId": "8", + "precision": 12, + "priceId": "integritee", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TEER.svg", + "color": "FFFFFF", + "type": "foreignAsset", + "existentialDeposit": "100000000000" + }, + { + "id": "805e945b-54a6-47ec-a62b-7bcbae46fb70", + "name": "metaverse.network pioneer", + "symbol": "neer", + "currencyId": "9", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NEER.svg", + "color": "B8FBFE", + "type": "foreignAsset", + "existentialDeposit": "100000000000000000" + }, + { + "id": "addd6fed-51af-4088-8d6d-05c73b48b8df", + "name": "calamari network", + "symbol": "kma", + "currencyId": "10", + "precision": 12, + "priceId": "calamari-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KMA.svg", + "color": "FFFFFF", + "type": "foreignAsset", + "existentialDeposit": "100000000000" + }, + { + "id": "f8d6e0db-e50b-46ea-b870-c2e97abb99d7", + "name": "basilisk", + "symbol": "bsx", + "currencyId": "11", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BSX.svg", + "color": "87FCB6", + "type": "foreignAsset", + "existentialDeposit": "1000000000000" + }, + { + "id": "4879d0ed-810b-4792-8e83-387180cc3a9c", + "name": "altair", + "symbol": "air", + "currencyId": "12", + "precision": 18, + "priceId": "altair", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AIR.svg", + "color": "FFFFFF", + "type": "foreignAsset", + "existentialDeposit": "100000000000000000" + }, + { + "id": "e0fe6aac-a52e-4e78-be60-defee1006569", + "name": "crab network", + "symbol": "crab", + "currencyId": "13", + "precision": 18, + "priceId": "darwinia-crab-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRAB.svg", + "color": "581BD1", + "type": "foreignAsset", + "existentialDeposit": "1000000000000000000" + }, + { + "id": "1d534f94-bc5a-41a5-a295-c84f9ee0d95c", + "name": "genshiro", + "symbol": "gens", + "currencyId": "14", + "precision": 9, + "priceId": "genshiro", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GENS.svg", + "color": "FFFFFF", + "type": "foreignAsset", + "existentialDeposit": "1000000000000" + }, + { + "id": "b8f7bcbc-fe2d-457d-903f-c8c126127231", + "name": "equilibrium dollar protocol", + "symbol": "eqd", + "currencyId": "15", + "precision": 9, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQD.svg", + "color": "4D8BED", + "type": "foreignAsset", + "existentialDeposit": "10000000000" + }, + { + "id": "2433813f-403f-40e1-9e00-688b037113d5", + "name": "turing token", + "symbol": "tur", + "currencyId": "16", + "precision": 10, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUR.svg", + "color": "5DCBD0", + "type": "foreignAsset", + "existentialDeposit": "40000000000" + }, + { + "id": "1a6e5327-80da-439a-8294-8b3dbeb8172c", + "name": "pichu token", + "symbol": "pchu", + "currencyId": "17", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PCHU.svg", + "color": "AE4071", + "type": "foreignAsset", + "existentialDeposit": "100000000000000000" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + }, + { + "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", + "symbol": "BNC" + }, + { + "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", + "symbol": "AUSD" + }, + { + "id": "0fef7483-1f4c-4339-a12c-1b537e8e62ba", + "symbol": "KAR" + }, + { + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" + }, + { + "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", + "symbol": "USDt" + }, + { + "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", + "symbol": "MOVR" + } + ], + "availableDestinations": [ + { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + } + ] + }, + { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "assets": [ + { + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" + }, + { + "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", + "symbol": "USDt" + } + ] + }, + { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + }, + { + "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", + "symbol": "BNC" + }, + { + "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", + "symbol": "AUSD" + }, + { + "id": "0fef7483-1f4c-4339-a12c-1b537e8e62ba", + "symbol": "KAR" + } + ] + }, + { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + }, + { + "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", + "symbol": "MOVR" + }, + { + "id": "0fef7483-1f4c-4339-a12c-1b537e8e62ba", + "symbol": "KAR" + }, + { + "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", + "symbol": "AUSD" + } + ] + } + ] + }, + "nodes": [ + { + "url": "wss://api-karura.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://karura.polkawallet.io", + "name": "Polkawallet node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Karura.svg", + "addressPrefix": 8, + "options": [ + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "rank": 11, + "name": "Moonriver", + "ecosystem": "ethereumBased", + "paraId": "2023", + "externalApi": { + "staking": { + "type": "subsquid", + "url": "https://squid.subsquid.io/fearless-moonriver-1/v/v2/graphql" + }, + "history": { + "type": "giantsquid", + "url": "https://squid-moonriver-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ { - "id": "91a69026-0ab7-4db0-af53-8d571fd33ac4", - "name": "acala dollar", - "symbol": "ausd", - "currencyId": "kusd", - "precision": 12, - "priceId": "acala-dollar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", - "color": "E40C5B", - "type": "ormlAsset", - "isNative": true, - "existentialDeposit": "10000000000" - }, + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://moonriver.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "35346815-009a-4cf9-a5ad-85a0167e594d", + "name": "moonriver", + "symbol": "movr", + "precision": 18, + "priceId": "moonriver", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", + "color": "FFFFFF", + "staking": "parachain", + "isUtility": true, + "type": "normal" + }, + { + "id": "980af72c-d1b8-46c7-9793-fa87912652ec", + "name": "kusama", + "symbol": "xcksm", + "currencyId": "42259045809535163221576417993425387648", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "type": "assets" + }, + { + "id": "d1ebeaa2-e7ac-4645-8dce-e873ebdbb995", + "type": "assets", + "name": "acala dollar", + "symbol": "xcausd", + "currencyId": "214920334981412447805621250067209749032", + "precision": 12, + "priceId": "acala-dollar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", + "color": "E40C5B" + }, + { + "id": "8e45603e-91c4-4624-8457-9e9b24a98610", + "type": "assets", + "name": "xcrmrk", + "symbol": "xcrmrk", + "currencyId": "182365888117048807484804376330534607370", + "precision": 10, + "priceId": "rmrk", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", + "color": "392B73" + }, + { + "id": "4f9750bb-f3f5-45b3-a180-a0c734f52562", + "type": "assets", + "name": "kintsugi wrapped btc", + "symbol": "xckbtc", + "currencyId": "328179947973504579459046439826496046832", + "precision": 8, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", + "color": "FFFFFF", + "priceId": "kintsugi-btc" + }, + { + "id": "ff8fce18-260f-46c9-85bd-36157d1f756e", + "type": "assets", + "name": "phala token", + "symbol": "xcpha", + "currencyId": "189307976387032586987344677431204943363", + "precision": 12, + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F" + }, + { + "id": "88cfc7c3-6b8e-49a5-8620-e014840d4bf9", + "type": "assets", + "name": "robonomics native token", + "symbol": "xcxrt", + "currencyId": "108036400430056508975016746969135344601", + "precision": 9, + "priceId": "robonomics-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XRT.svg", + "color": "FFFFFF" + }, + { + "id": "db8fdbe6-26b0-4910-a267-d7a58c22c7ec", + "type": "assets", + "name": "kintsugi native token", + "symbol": "xckint", + "currencyId": "175400718394635817552109270754364440562", + "precision": 12, + "priceId": "kintsugi", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", + "color": "FFFFFF" + }, + { + "id": "1854feda-ca0c-4e82-9076-af2c7978f042", + "type": "assets", + "name": "karura", + "symbol": "xckar", + "currencyId": "10810581592933651521121702237638664357", + "precision": 12, + "priceId": "karura", + "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/KAR.svg", + "color": "FFFFFF" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ { - "id": "223b0282-b5c9-48ed-87e3-5e9ef6714ac8", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "type": "ormlAsset", - "existentialDeposit": "100000000" + "id": "5b1a0b8f-74c9-4073-b288-0d2ca16dfb77", + "symbol": "MOVR" }, { - "id": "e605149c-0f41-4ec9-960f-21c07e2d9361", - "name": "rmrk", - "symbol": "rmrk", - "currencyId": "0", - "precision": 10, - "priceId": "rmrk", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", - "color": "392B73", - "type": "foreignAsset", - "existentialDeposit": "100000000" + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" }, { - "id": "10757cfa-b590-43c1-8524-efc28d798bcb", - "name": "bifrost native coin", - "symbol": "bnc", - "precision": 12, - "priceId": "bifrost-native-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", - "color": "FFFFFF", - "type": "ormlAsset", - "existentialDeposit": "8000000000" + "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", + "symbol": "AUSD" }, { - "id": "77562113-9e01-49b6-a39d-87a47bde24fe", - "name": "liquid ksm", - "symbol": "lksm", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LKSM.svg", - "color": "FFFFFF", - "type": "ormlAsset", - "isNative": true, - "existentialDeposit": "500000000" - }, + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" + } + ], + "availableDestinations": [ { - "id": "c6fd5a1e-3052-4bdf-b0f3-ad1b7b9fbff0", - "name": "crust shadow", - "symbol": "csm", - "currencyId": "5", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CSM_Crust_Shadow.svg", - "color": "F3AD56", - "priceId": "crust-storage-market", - "type": "foreignAsset", - "existentialDeposit": "1000000000000" + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + } + ] }, { - "id": "5e9c76a4-9f89-487d-80aa-db0588b60aa4", - "name": "taiga", - "symbol": "tai", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TAI.svg", - "color": "FFFFFF", - "priceId": "taiga", - "type": "ormlAsset", - "isNative": true, - "existentialDeposit": "1000000000000" + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assets": [ + { + "id": "5b1a0b8f-74c9-4073-b288-0d2ca16dfb77", + "symbol": "MOVR" + }, + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + } + ] }, { - "id": "4b9f4cba-3b26-4f99-8666-3ee305683706", - "name": "polarisdao", - "symbol": "aris", - "currencyId": "1", - "precision": 8, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ARIS.svg", - "color": "423F47", - "priceId": "polarisdao", - "type": "foreignAsset", - "existentialDeposit": "1000000000000" + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assets": [ + { + "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", + "symbol": "AUSD" + } + ] }, { - "id": "3d32d7cb-4de5-427e-9668-a9763648a555", - "name": "quartz", - "symbol": "qtz", - "currencyId": "2", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/QTZ.svg", - "color": "EC5B6D", - "priceId": "quartz", - "type": "foreignAsset", - "existentialDeposit": "1000000000000000000" - }, + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "assets": [ + { + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" + } + ] + } + ] + }, + "nodes": [ + { + "url": "wss://api-moonriver.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://wss.moonriver.moonbeam.network", + "name": "PureStake node" + }, + { + "url": "wss://moonriver.unitedbloc.com", + "name": "UnitedBloc node" + }, + { + "url": "wss://wss.api.moonriver.moonbeam.network", + "name": "Moonbeam Foundation node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Moonriver.svg", + "addressPrefix": 1285, + "options": [ + "ethereumBased" + ] + }, + { + "disabled": false, + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2007", + "name": "Shiden", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-shiden-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ { - "id": "17142348-16f6-49f2-9006-098f5562bda0", - "name": "kintsugi ibtc", - "symbol": "kbtc", - "precision": 8, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", - "color": "FFFFFF", - "priceId": "kintsugi-btc", - "type": "ormlAsset", - "existentialDeposit": "66" - }, + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://shiden.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "6dbb524b-a2d7-4c32-b0f9-6825b3e7d2c4", + "name": "shiden network", + "symbol": "sdn", + "precision": 18, + "priceId": "shiden", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/SDN.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + }, + { + "id": "52509327-116a-4365-bf7d-03cecf7868bc", + "type": "assets", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "340282366920938463463374607431768211455", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + }, + { + "id": "aa494fdc-3411-438c-b69b-a53e36f062a1", + "type": "assets", + "name": "phala token", + "symbol": "pha", + "precision": 12, + "currencyId": "18446744073709551623", + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F" + } + ], + "nodes": [ + { + "url": "wss://api-shiden.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.shiden.astar.network", + "name": "StakeTechnologies node" + }, + { + "url": "wss://shiden.public.blastapi.io", + "name": "Blast node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Shiden.svg", + "addressPrefix": 5 + }, + { + "disabled": false, + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2001", + "name": "Bifrost", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid.subsquid.io/gs-main-Bifrost/graphql" + }, + "explorers": [ { - "id": "6aa4622c-42b9-4976-9f7c-35447bb24128", - "name": "kintsugi", - "symbol": "kint", - "precision": 12, - "priceId": "kintsugi", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", - "color": "FFFFFF", - "type": "ormlAsset", - "existentialDeposit": "133330000" - }, + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://bifrost-kusama.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "isUtility": true, + "id": "559e80d6-fb38-4dd5-bbd6-c0a7c2f600e1", + "name": "bifrost native coin", + "symbol": "bnc", + "precision": 12, + "priceId": "bifrost-native-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", + "color": "FFFFFF", + "type": "normal" + }, + { + "id": "922c191c-4cb8-407e-8b81-2cfc52170c3b", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "existentialDeposit": "100000000", + "type": "ormlAsset" + }, + { + "id": "75206b90-456e-48ae-a118-0bf9ab861115", + "name": "rmrk", + "symbol": "rmrk", + "precision": 10, + "priceId": "rmrk", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", + "color": "392B73", + "existentialDeposit": "10000", + "type": "ormlAsset" + }, + { + "id": "5c31c8ae-c045-43f2-849a-88a17ee7b302", + "name": "karura", + "symbol": "kar", + "precision": 12, + "priceId": "karura", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", + "color": "FFFFFF", + "existentialDeposit": "100000000", + "type": "ormlAsset" + }, + { + "id": "07f2a7fc-9b0a-4583-9267-57b68ecd4350", + "name": "voucher ksm", + "symbol": "vksm", + "currencyId": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VKSM.svg", + "color": "FFFFFF", + "existentialDeposit": "100000000", + "isNative": true, + "type": "vToken" + }, + { + "id": "dd0efecb-51a1-481d-a949-80cb7663c105", + "name": "voucher slot ksm", + "symbol": "vsksm", + "currencyId": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VSKSM.svg", + "color": "FFFFFF", + "existentialDeposit": "100000000", + "type": "vsToken", + "isNative": true + }, + { + "id": "94d5e2d9-c2d7-40e6-8893-5832a784b2ea", + "name": "acala dollar", + "symbol": "ausd", + "currencyId": "kusd", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", + "color": "E40C5B", + "priceId": "acala-dollar", + "existentialDeposit": "100000000", + "type": "stable" + }, + { + "id": "2bd78b68-8bd7-4859-928a-1a7b8b57a734", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "priceId": "tether", + "existentialDeposit": "1000", + "type": "foreignAsset", + "currencyId": "0" + }, + { + "id": "e6f78e19-80c7-4e8c-8499-91e03df504a8", + "name": "moonriver", + "symbol": "movr", + "precision": 18, + "priceId": "moonriver", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", + "color": "FFFFFF", + "type": "ormlAsset", + "existentialDeposit": "1000000000000" + }, + { + "id": "fe2c5a55-aff7-4d00-af5c-e90082a5a11e", + "name": "zenlink network", + "symbol": "zlk", + "precision": 18, + "priceId": "zenlink-network-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZLK.svg", + "color": "FFFFFF", + "existentialDeposit": "1000000000000", + "type": "ormlAsset", + "isNative": true + }, + { + "id": "33746c72-6806-47d0-a1c4-7b433df862f1", + "name": "phala", + "symbol": "pha", + "precision": 12, + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F", + "type": "ormlAsset", + "existentialDeposit": "40000000000" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ { - "id": "e27e5b58-3229-4656-b9ff-de309f49f17f", - "name": "phala", - "symbol": "pha", - "precision": 12, - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F", - "type": "ormlAsset", - "existentialDeposit": "40000000000" + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" }, { - "id": "8e975c47-df51-48a8-a29e-a89ee0f4bf9e", - "name": "taiga ksm", - "symbol": "taiksm", - "currencyId": "0", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TAIKSM.svg", - "color": "FFFFFF", - "type": "stableAssetPoolToken", - "isNative": true, - "existentialDeposit": "100000000" + "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", + "symbol": "BNC" }, { - "id": "536deaa6-49b0-4b54-adc7-9619e15c79b2", - "name": "voucher slot ksm", - "symbol": "vsksm", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VSKSM.svg", - "color": "FFFFFF", - "type": "ormlAsset", - "existentialDeposit": "100000000" + "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", + "symbol": "MOVR" }, { - "id": "f2257792-ffb9-4dff-95ae-5f98c1cb594b", - "name": "moonriver", - "symbol": "movr", - "currencyId": "3", - "precision": 18, - "priceId": "moonriver", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", - "color": "FFFFFF", - "type": "foreignAsset", - "existentialDeposit": "1000000000000000" + "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", + "symbol": "AUSD" }, { - "id": "54b7f751-ef62-45b2-ad65-837852de5af4", - "name": "heiko finance", - "symbol": "hko", - "currencyId": "4", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HKO.svg", - "color": "CC3474", - "type": "foreignAsset", - "existentialDeposit": "100000000000" - }, + "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", + "symbol": "USDt" + } + ], + "availableDestinations": [ { - "id": "bb3dc769-394f-40fb-b54f-4a0d0de7e49e", - "name": "kico", - "symbol": "kico", - "currencyId": "6", - "precision": 14, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KICO.svg", - "color": "FFFFFF", - "type": "foreignAsset", - "existentialDeposit": "100000000000000" + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + } + ] }, { - "id": "5fd5f3ce-4a2c-4647-923e-6c29cc95a4f7", - "name": "tether usd", - "symbol": "usdt", - "currencyId": "7", - "precision": 6, - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "type": "foreignAsset", - "existentialDeposit": "10000" + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "assets": [ + { + "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", + "symbol": "USDt" + } + ] }, { - "id": "8cf27ed8-11bf-4b16-be22-5aa6bbc10736", - "name": "integritee", - "symbol": "teer", - "currencyId": "8", - "precision": 12, - "priceId": "integritee", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TEER.svg", - "color": "FFFFFF", - "type": "foreignAsset", - "existentialDeposit": "100000000000" + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + }, + { + "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", + "symbol": "BNC" + }, + { + "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", + "symbol": "AUSD" + } + ] }, { - "id": "805e945b-54a6-47ec-a62b-7bcbae46fb70", - "name": "metaverse.network pioneer", - "symbol": "neer", - "currencyId": "9", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NEER.svg", - "color": "B8FBFE", - "type": "foreignAsset", - "existentialDeposit": "100000000000000000" - }, + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + }, + { + "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", + "symbol": "BNC" + }, + { + "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", + "symbol": "MOVR" + } + ] + } + ] + }, + "nodes": [ + { + "url": "wss://api-bifrost-kusama.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://bifrost-rpc.liebi.com/ws", + "name": "Liebi node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bifrost.svg", + "addressPrefix": 6, + "types": { + "url": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/type_registry/bifrost.json", + "overridesCommon": true + } + }, + { + "disabled": false, + "chainId": "d43540ba6d3eb4897c28a77d48cb5b729fea37603cbbfc7a86a73b72adb3be8d", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2004", + "name": "Khala", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-khala-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ { - "id": "addd6fed-51af-4088-8d6d-05c73b48b8df", - "name": "calamari network", - "symbol": "kma", - "currencyId": "10", - "precision": 12, - "priceId": "calamari-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KMA.svg", - "color": "FFFFFF", - "type": "foreignAsset", - "existentialDeposit": "100000000000" - }, + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://khala.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "3feb7de3-e881-4c04-a4de-1b9091dbc324", + "name": "phala", + "symbol": "pha", + "precision": 12, + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F", + "isUtility": true, + "type": "normal" + }, + { + "id": "34d7fc9d-d616-4c3e-9398-060b18220a55", + "type": "assets", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "0", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + } + ], + "nodes": [ + { + "url": "wss://api-khala.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://khala-api.phala.network/ws", + "name": "Phala node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Khala.svg", + "addressPrefix": 30 + }, + { + "disabled": false, + "chainId": "411f057b9107718c9624d6aa4a3f23c1653898297f3d4d529d9bb6511a39dd21", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2086", + "name": "KILT Spiritnet", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-kilt-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ { - "id": "f8d6e0db-e50b-46ea-b870-c2e97abb99d7", - "name": "basilisk", - "symbol": "bsx", - "currencyId": "11", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BSX.svg", - "color": "87FCB6", - "type": "foreignAsset", - "existentialDeposit": "1000000000000" - }, + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://spiritnet.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "f0d5cadc-4999-45f3-8160-15243f2909d3", + "name": "kilt protocol", + "symbol": "kilt", + "precision": 15, + "priceId": "kilt-protocol", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KILT.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://spiritnet.kilt.io/", + "name": "KILT Protocol node" + }, + { + "url": "wss://kilt-rpc.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/kilt.svg", + "addressPrefix": 38 + }, + { + "disabled": false, + "chainId": "4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2084", + "name": "Calamari", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-calamari-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ { - "id": "4879d0ed-810b-4792-8e83-387180cc3a9c", - "name": "altair", - "symbol": "air", - "currencyId": "12", - "precision": 18, - "priceId": "altair", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AIR.svg", - "color": "FFFFFF", - "type": "foreignAsset", - "existentialDeposit": "100000000000000000" + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://calamari.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "39d4080e-e2ab-43f3-bcc2-2fa281d9290c", + "name": "calamari network", + "symbol": "kma", + "precision": 12, + "priceId": "calamari-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KMA.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + }, + { + "id": "bd018ed9-069b-4d51-b5db-56b70bb5434c", + "type": "assets", + "name": "moonriver", + "symbol": "movr", + "precision": 18, + "currencyId": "11", + "priceId": "moonriver", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", + "color": "FFFFFF" + }, + { + "id": "003bb609-cae4-4cf0-afad-4230ca17873b", + "type": "assets", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "12", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + }, + { + "id": "6094eb13-6084-4909-9232-31b6088ad4cc", + "type": "assets", + "name": "karura", + "symbol": "kar", + "precision": 12, + "currencyId": "8", + "priceId": "karura", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", + "color": "FFFFFF" + } + ], + "nodes": [ + { + "url": "wss://calamari.systems", + "name": "Manta Network node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Calamari.svg", + "addressPrefix": 78 + }, + { + "disabled": false, + "chainId": "cd4d732201ebe5d6b014edda071c4203e16867305332301dc8d092044b28e554", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2095", + "name": "Quartz", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-quartz" + } + }, + "assets": [ + { + "id": "d0f2e718-99ee-4bc2-8dc2-1ce07f21c5ac", + "name": "quartz", + "symbol": "qtz", + "precision": 18, + "priceId": "quartz", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/QTZ.svg", + "color": "EC5B6D", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-quartz.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://eu-ws-quartz.unique.network", + "name": "Unique Europe node" + }, + { + "url": "wss://ws-quartz.unique.network", + "name": "Geo Load Balancer node" + }, + { + "url": "wss://asia-ws-quartz.unique.network", + "name": "Unique Asia node" + }, + { + "url": "wss://us-ws-quartz.unique.network", + "name": "Unique America node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/quartz.svg", + "addressPrefix": 255 + }, + { + "disabled": false, + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2085", + "name": "Parallel Heiko", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-parallel_heiko" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://parallel-heiko.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "02b54158-4f4f-4077-b6a7-7c9edd75a1ca", + "name": "heiko finance", + "symbol": "hko", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HKO.svg", + "color": "CC3474", + "isUtility": true, + "type": "normal" + }, + { + "id": "382a7dd4-5444-4797-8cec-d921000144ed", + "type": "assets", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "100", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + }, + { + "id": "7bd1b0ca-a4a7-4b67-8f8b-cb19e2d3fab8", + "type": "assets", + "name": "moonriver", + "symbol": "movr", + "precision": 18, + "currencyId": "113", + "priceId": "moonriver", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", + "color": "FFFFFF" + }, + { + "id": "b48b21fb-eb3f-4296-9978-8dc42e42f384", + "type": "assets", + "name": "karura", + "symbol": "kar", + "precision": 12, + "currencyId": "107", + "priceId": "karura", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", + "color": "FFFFFF" + }, + { + "id": "535ab9cf-fa62-4e19-ab39-02e5584ef7af", + "type": "assets", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "102", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + }, + { + "id": "7a97a272-c767-4b45-b055-4c521168558c", + "type": "assets", + "name": "kintsugi native token", + "symbol": "kint", + "precision": 12, + "currencyId": "119", + "priceId": "kintsugi", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", + "color": "FFFFFF" + }, + { + "id": "5959efca-47b7-4ec4-a009-5870e2231d52", + "type": "assets", + "name": "kintsugi ibtc", + "symbol": "kbtc", + "precision": 8, + "currencyId": "121", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", + "color": "FFFFFF", + "priceId": "kintsugi-btc" + }, + { + "id": "d0262105-2c85-4167-bde0-50c7cdfe4942", + "type": "assets", + "name": "phala token", + "symbol": "pha", + "precision": 12, + "currencyId": "115", + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F" + } + ], + "nodes": [ + { + "url": "wss://heiko-rpc.parallel.fi", + "name": "Parallel node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/parallelfinance.svg", + "addressPrefix": 110 + }, + { + "disabled": false, + "chainId": "6811a339673c9daa897944dcdac99c6e2939cc88245ed21951a0a3c9a2be75bc", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2087", + "name": "Picasso", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-picasso-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://picasso.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "d24959cd-72fb-4155-9880-86d42b1d1cbb", + "name": "picasso", + "symbol": "pica", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PICA.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-picasso.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://picasso-rpc.composable.finance", + "name": "Composable Finance node" + }, + { + "url": "wss://rpc.composablenodes.tech", + "name": "Composable node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/picasso.svg", + "addressPrefix": 49 + }, + { + "disabled": false, + "chainId": "aa3876c1dc8a1afcc2e9a685a49ff7704cfd36ad8c90bf2702b9d1b00cc40011", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2088", + "name": "Altair", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-altair-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://altair.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "56c7f785-23d6-4199-accf-846be58011e6", + "name": "altair", + "symbol": "air", + "precision": 18, + "priceId": "altair", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AIR.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://fullnode.altair.centrifuge.io", + "name": "Centrifuge node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Altair.svg", + "addressPrefix": 136 + }, + { + "disabled": false, + "chainId": "f22b7850cdd5a7657bbfd90ac86441275bbc57ace3d2698a740c7b0ec4de5ec3", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2096", + "name": "Pioneer Network", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-bit_country_pioneer" + } + }, + "assets": [ + { + "id": "d3b93409-97b1-42e0-8dbc-99d3fb93fc10", + "name": "metaverse.network pioneer", + "symbol": "neer", + "precision": 18, + "priceId": "metaverse-network-pioneer", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NEER.svg", + "color": "B8FBFE", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://pioneer-rpc-3.bit.country/wss", + "name": "MetaverseNetwork node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/bitcountry.svg", + "addressPrefix": 268 + }, + { + "disabled": false, + "chainId": "5c7bd13edf349b33eb175ffae85210299e324d852916336027391536e686f267", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2002", + "name": "Clover", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-clover" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://clv.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "4b7ab596-bff4-4fd8-9c60-24ef1cbe9584", + "name": "clover finance", + "symbol": "clv", + "precision": 18, + "priceId": "clover-finance", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CLV.svg", + "color": "73D4FD", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc-para.clover.finance", + "name": "Clover node" + }, + { + "url": "wss://clover-rpc.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/clover.svg", + "addressPrefix": 128 + }, + { + "disabled": false, + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2006", + "name": "Astar", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-astar-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://astar.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "5ab1e8d-81ed-4130-9d29-55b549cc6bab", + "name": "astar", + "symbol": "astr", + "precision": 18, + "priceId": "astar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", + "color": "0AE2FF", + "isUtility": true, + "type": "normal" + }, + { + "id": "d898014a-5c0f-49a1-b563-51017e9dce38", + "type": "assets", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "currencyId": "340282366920938463463374607431768211455", + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066" + }, + { + "id": "af1fc6a0-505c-43d7-b214-d64e4414e2e1", + "type": "assets", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "4294969280", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + }, + { + "id": "3e0a1785-2faa-43bf-8af6-d02c96d6b30e", + "type": "assets", + "name": "equilibrium", + "symbol": "eq", + "precision": 9, + "currencyId": "18446744073709551628", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQ.svg", + "color": "5176E6" + }, + { + "id": "39fb54c8-52c1-4cf7-8412-24ac38b63eb4", + "type": "assets", + "name": "phala token", + "symbol": "pha", + "precision": 12, + "currencyId": "18446744073709551622", + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F" + }, + { + "id": "ee6b0152-326f-4e15-a62f-ac02d357d840", + "type": "assets", + "name": "moonbeam", + "symbol": "glmr", + "precision": 18, + "currencyId": "18446744073709551619", + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "5ab1e8d-81ed-4130-9d29-55b549cc6bab", + "symbol": "ASTR" + } + ], + "availableDestinations": [ + { + "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", + "assets": [ + { + "id": "5ab1e8d-81ed-4130-9d29-55b549cc6bab", + "symbol": "ASTR", + "minAmount": "73000000000000000000" + } + ], + "bridgeParachainId": "e92d165ad41e41e215d09713788173aecfdbe34d3bed29409d33a2ef03980738" + } + ] + }, + "nodes": [ + { + "url": "wss://api-astar.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.astar.network", + "name": "Astar node" + }, + { + "url": "wss://astar.public.blastapi.io", + "name": "Blast node" + }, + { + "url": "wss://astar.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/astar.svg", + "addressPrefix": 5, + "options": [ + "tipRequired" + ] + }, + { + "disabled": false, + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2012", + "name": "Parallel", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-parallel-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://parallel.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "f78aa731-a33c-4d8d-a3bb-74835064366b", + "name": "parallel finance", + "symbol": "para", + "precision": 12, + "priceId": "parallel-finance", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PARA.svg", + "color": "4C19E7", + "isUtility": true, + "type": "normal" + }, + { + "id": "769ffb89-fd2f-4add-94a1-d2f9f716c143", + "type": "assets", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "currencyId": "101", + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066" + }, + { + "id": "1d850850-a2fb-4728-8dfc-13679c470017", + "type": "assets", + "name": "moonbeam", + "symbol": "glmr", + "precision": 18, + "currencyId": "114", + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF" + }, + { + "id": "5e745a28-9827-4d7f-9df9-e2cfbe4d11a5", + "type": "assets", + "name": "interlay", + "symbol": "intr", + "precision": 10, + "currencyId": "120", + "priceId": "interlay", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", + "color": "FFFFFF" + }, + { + "id": "ba44778d-f7a2-4adb-91f9-efd9a46468a7", + "type": "assets", + "name": "liquid crowdloan dot", + "symbol": "lcdot", + "precision": 10, + "currencyId": "106", + "priceId": "liquid-crowdloan-dot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LCDOT.svg", + "color": "FF0066" + }, + { + "id": "01adcd11-256d-4ac2-966e-9bb87ed5f769", + "type": "assets", + "name": "acala", + "symbol": "aca", + "precision": 12, + "currencyId": "108", + "priceId": "acala", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", + "color": "FFFFFF" + }, + { + "id": "bf70329b-421a-4b68-87eb-ef85e0d0044e", + "type": "assets", + "name": "liquid dot", + "symbol": "ldot", + "precision": 10, + "currencyId": "110", + "priceId": "liquid-staking-dot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LDOT.svg", + "color": "FF0066" + }, + { + "id": "b4dc02ce-3e71-4d92-8e1a-9599a75d20e4", + "type": "assets", + "name": "inter ibtc", + "symbol": "ibtc", + "precision": 8, + "currencyId": "122", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", + "color": "F2AE7F" + }, + { + "id": "c5453123-c85e-4226-b2a8-fbf0deb88e9f", + "type": "assets", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "102", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + }, + { + "id": "e52c5825-3076-4277-84e2-8b45f778d981", + "type": "assets", + "name": "cdot-6/13", + "symbol": "cdot-6/13", + "precision": 10, + "currencyId": "200060013", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/%D1%81DOT.svg", + "color": "FF0066" + }, + { + "id": "1236185c-fa70-481e-befa-deda855054df", + "type": "assets", + "name": "cdot-7/14", + "symbol": "cdot-7/14", + "precision": 10, + "currencyId": "200070014", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/%D1%81DOT.svg", + "color": "FF0066" + }, + { + "id": "afe2d55d-2fa7-4e7b-ab2c-c4c4aea15a87", + "type": "assets", + "name": "cdot-8/15", + "symbol": "cdot-8/15", + "precision": 10, + "currencyId": "200080015", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/%D1%81DOT.svg", + "color": "FF0066" + }, + { + "id": "d6d35753-a3dc-4987-8995-2afbe0a65606", + "type": "assets", + "name": "phala token", + "symbol": "pha", + "precision": 12, + "currencyId": "115", + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" }, { - "id": "e0fe6aac-a52e-4e78-be60-defee1006569", - "name": "crab network", - "symbol": "crab", - "currencyId": "13", - "precision": 18, - "priceId": "darwinia-crab-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRAB.svg", - "color": "581BD1", - "type": "foreignAsset", - "existentialDeposit": "1000000000000000000" + "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", + "symbol": "GLMR" }, { - "id": "1d534f94-bc5a-41a5-a295-c84f9ee0d95c", - "name": "genshiro", - "symbol": "gens", - "currencyId": "14", - "precision": 9, - "priceId": "genshiro", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GENS.svg", - "color": "FFFFFF", - "type": "foreignAsset", - "existentialDeposit": "1000000000000" + "id": "bc05b313-67f2-454d-bdfa-78a4feb82259", + "symbol": "lcDOT" }, { - "id": "b8f7bcbc-fe2d-457d-903f-c8c126127231", - "name": "equilibrium dollar protocol", - "symbol": "eqd", - "currencyId": "15", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQD.svg", - "color": "4D8BED", - "type": "foreignAsset", - "existentialDeposit": "10000000000" + "id": "0c7df36b-4ebd-4e66-a78b-77fa08b54c54", + "symbol": "ACA" }, { - "id": "2433813f-403f-40e1-9e00-688b037113d5", - "name": "turing token", - "symbol": "tur", - "currencyId": "16", - "precision": 10, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUR.svg", - "color": "5DCBD0", - "type": "foreignAsset", - "existentialDeposit": "40000000000" + "id": "a3ecbda6-80b6-492f-a656-5ab0bdcc9d1f", + "symbol": "LDOT" }, { - "id": "1a6e5327-80da-439a-8294-8b3dbeb8172c", - "name": "pichu token", - "symbol": "pchu", - "currencyId": "17", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PCHU.svg", - "color": "AE4071", - "type": "foreignAsset", - "existentialDeposit": "100000000000000000" + "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", + "symbol": "USDt" } ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", - "symbol": "BNC" - }, - { - "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", - "symbol": "AUSD" - }, - { - "id": "0fef7483-1f4c-4339-a12c-1b537e8e62ba", - "symbol": "KAR" - }, - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - }, - { - "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", - "symbol": "USDt" - }, - { - "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", - "symbol": "MOVR" - } - ], - "availableDestinations": [ - { - "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", - "assets": [ - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - }, - { - "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", - "symbol": "USDt" - } - ] - }, - { - "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", - "symbol": "BNC" - }, - { - "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", - "symbol": "AUSD" - }, - { - "id": "0fef7483-1f4c-4339-a12c-1b537e8e62ba", - "symbol": "KAR" - } - ] - }, - { - "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", - "symbol": "MOVR" - }, - { - "id": "0fef7483-1f4c-4339-a12c-1b537e8e62ba", - "symbol": "KAR" - }, - { - "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", - "symbol": "AUSD" - } - ] - } - ] - }, - "nodes": [ + "availableDestinations": [ + { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + } + ] + }, + { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assets": [ + { + "id": "bc05b313-67f2-454d-bdfa-78a4feb82259", + "symbol": "lcDOT" + }, + { + "id": "0c7df36b-4ebd-4e66-a78b-77fa08b54c54", + "symbol": "ACA" + }, + { + "id": "a3ecbda6-80b6-492f-a656-5ab0bdcc9d1f", + "symbol": "LDOT" + } + ] + }, { - "url": "wss://api-karura.dwellir.com", - "name": "Dwellir node" + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assets": [ + { + "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", + "symbol": "GLMR" + } + ] }, { - "url": "wss://karura.polkawallet.io", - "name": "Polkawallet node" + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assets": [ + { + "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", + "symbol": "USDt" + } + ] } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Karura.svg", - "addressPrefix": 8, - "options": [ - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "rank": 11, - "name": "Moonriver", - "ecosystem": "ethereumBased", - "paraId": "2023", - "externalApi": { - "staking": { - "type": "subsquid", - "url": "https://squid.subsquid.io/fearless-moonriver-1/v/v2/graphql" - }, - "history": { - "type": "giantsquid", - "url": "https://squid-moonriver-api.squid.tachi.soramitsu.co.jp/graphql" - }, - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://moonriver.subscan.io/{type}/{value}" - } - ] - }, - "assets": [ - { - "id": "35346815-009a-4cf9-a5ad-85a0167e594d", - "name": "moonriver", - "symbol": "movr", - "precision": 18, - "priceId": "moonriver", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", - "color": "FFFFFF", - "staking": "parachain", - "isUtility": true, - "type": "normal" - }, - { - "id": "980af72c-d1b8-46c7-9793-fa87912652ec", - "name": "kusama", - "symbol": "xcksm", - "currencyId": "42259045809535163221576417993425387648", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "type": "assets" - }, - { - "id": "d1ebeaa2-e7ac-4645-8dce-e873ebdbb995", - "type": "assets", - "name": "acala dollar", - "symbol": "xcausd", - "currencyId": "214920334981412447805621250067209749032", - "precision": 12, - "priceId": "acala-dollar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", - "color": "E40C5B" - }, - { - "id": "8e45603e-91c4-4624-8457-9e9b24a98610", - "type": "assets", - "name": "xcrmrk", - "symbol": "xcrmrk", - "currencyId": "182365888117048807484804376330534607370", - "precision": 10, - "priceId": "rmrk", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", - "color": "392B73" - }, - { - "id": "4f9750bb-f3f5-45b3-a180-a0c734f52562", - "type": "assets", - "name": "kintsugi wrapped btc", - "symbol": "xckbtc", - "currencyId": "328179947973504579459046439826496046832", - "precision": 8, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", - "color": "FFFFFF", - "priceId": "kintsugi-btc" - }, - { - "id": "ff8fce18-260f-46c9-85bd-36157d1f756e", - "type": "assets", - "name": "phala token", - "symbol": "xcpha", - "currencyId": "189307976387032586987344677431204943363", - "precision": 12, - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F" - }, - { - "id": "88cfc7c3-6b8e-49a5-8620-e014840d4bf9", - "type": "assets", - "name": "robonomics native token", - "symbol": "xcxrt", - "currencyId": "108036400430056508975016746969135344601", - "precision": 9, - "priceId": "robonomics-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XRT.svg", - "color": "FFFFFF" - }, - { - "id": "db8fdbe6-26b0-4910-a267-d7a58c22c7ec", - "type": "assets", - "name": "kintsugi native token", - "symbol": "xckint", - "currencyId": "175400718394635817552109270754364440562", - "precision": 12, - "priceId": "kintsugi", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", - "color": "FFFFFF" - }, - { - "id": "1854feda-ca0c-4e82-9076-af2c7978f042", - "type": "assets", - "name": "karura", - "symbol": "xckar", - "currencyId": "10810581592933651521121702237638664357", - "precision": 12, - "priceId": "karura", - "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/KAR.svg", - "color": "FFFFFF" - } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "5b1a0b8f-74c9-4073-b288-0d2ca16dfb77", - "symbol": "MOVR" - }, - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", - "symbol": "AUSD" - }, - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - } - ], - "availableDestinations": [ - { - "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", - "assets": [ - { - "id": "5b1a0b8f-74c9-4073-b288-0d2ca16dfb77", - "symbol": "MOVR" - }, - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", - "assets": [ - { - "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", - "symbol": "AUSD" - } - ] - }, - { - "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", - "assets": [ - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - } - ] - } - ] + "nodes": [ + { + "url": "wss://api-parallel.dwellir.com", + "name": "Dwellir node" }, - "nodes": [ - { - "url": "wss://api-moonriver.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://wss.moonriver.moonbeam.network", - "name": "PureStake node" - }, - { - "url": "wss://moonriver.unitedbloc.com", - "name": "UnitedBloc node" - }, + { + "url": "wss://rpc.parallel.fi", + "name": "Parallel node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/parallelfinance.svg", + "addressPrefix": 172 + }, + { + "disabled": false, + "chainId": "a85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2090", + "name": "Basilisk", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-basilisk-api.squid.tachi.soramitsu.co.jp/graphql" + } + }, + "assets": [ + { + "id": "7dae28e2-9f5e-49ff-9140-aa750a9579ea", + "name": "basilisk", + "symbol": "bsx", + "precision": 12, + "priceId": "basilisk", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BSX.svg", + "color": "87FCB6", + "isUtility": true, + "type": "normal" + }, + { + "id": "f7cafffc-c8d9-4441-8d52-84c17082e514", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "1", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "type": "assetId", + "existentialDeposit": "100000000" + }, + { + "id": "125a05b1-1e0b-411d-8628-ffd3b84ed4c8", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "14", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "type": "assetId", + "existentialDeposit": "10000" + } + ], + "nodes": [ + { + "url": "wss://api-basilisk.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.basilisk.cloud", + "name": "Basilisk node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Basilisk.svg", + "addressPrefix": 10041 + }, + { + "disabled": false, + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "rank": 12, + "paraId": "2004", + "name": "Moonbeam", + "ecosystem": "ethereumBased", + "externalApi": { + "staking": { + "type": "subsquid", + "url": "https://squid.subsquid.io/fearless-x-moonbeam/v/v2/graphql" + }, + "history": { + "type": "giantsquid", + "url": "https://squid-moonbeam-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ { - "url": "wss://wss.api.moonriver.moonbeam.network", - "name": "Moonbeam Foundation node" + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://moonbeam.subscan.io/{type}/{value}" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Moonriver.svg", - "addressPrefix": 1285, - "options": [ - "ethereumBased" ] }, - { - "disabled": false, - "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2007", - "name": "Shiden", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid-shiden-api.squid.tachi.soramitsu.co.jp/graphql" - }, - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://shiden.subscan.io/{type}/{value}" - } - ] - }, - "assets": [ - { - "id": "6dbb524b-a2d7-4c32-b0f9-6825b3e7d2c4", - "name": "shiden network", - "symbol": "sdn", - "precision": 18, - "priceId": "shiden", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/SDN.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }, + "assets": [ + { + "id": "e40c8161-9fc9-4749-a3b8-ed1c0ad16475", + "name": "moonbeam", + "symbol": "glmr", + "precision": 18, + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF", + "staking": "parachain", + "isUtility": true, + "type": "normal" + }, + { + "id": "7e4e064e-2b23-4eb5-96db-e6491c4031e5", + "type": "assets", + "name": "polkadot", + "symbol": "xcdot", + "precision": 10, + "currencyId": "42259045809535163221576417993425387648", + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066" + }, + { + "id": "311e3073-1bfb-40de-b601-20278e457577", + "type": "assets", + "name": "acala dollar", + "symbol": "xcausd", + "precision": 12, + "currencyId": "110021739665376159354538090254163045594", + "priceId": "acala-dollar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", + "color": "E40C5B" + }, + { + "id": "9539da0e-3610-406a-b1b9-c811b6508a17", + "type": "assets", + "name": "acala", + "symbol": "xcaca", + "precision": 12, + "currencyId": "224821240862170613278369189818311486111", + "priceId": "acala", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", + "color": "FFFFFF" + }, + { + "id": "1509c799-b30f-4fde-934e-791f1c88f3d1", + "type": "assets", + "name": "interlay", + "symbol": "xcintr", + "precision": 10, + "currencyId": "101170542313601871197860408087030232491", + "priceId": "interlay", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", + "color": "FFFFFF" + }, + { + "id": "9e738e1a-81be-4ac2-8de0-b56e565699ce", + "type": "assets", + "name": "astar", + "symbol": "xcastr", + "precision": 18, + "currencyId": "224077081838586484055667086558292981199", + "priceId": "astar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", + "color": "0AE2FF" + }, + { + "id": "5d4c759c-0f38-4c63-bdde-9359bdb0fa24", + "type": "assets", + "name": "tether usd", + "symbol": "xcusdt", + "precision": 6, + "currencyId": "311091173110107856861649819128533077277", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + }, + { + "id": "d69e3203-d914-4c70-8f38-ed66ea5d94ea", + "type": "assets", + "name": "equilibrium token", + "symbol": "xceq", + "precision": 9, + "currencyId": "190590555344745888270686124937537713878", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQ.svg", + "color": "5176E6" + }, + { + "id": "6cdc81d9-28a4-4b3c-8358-78a93f207ce7", + "type": "assets", + "name": "equilibrium dollar protocol", + "symbol": "xceqd", + "precision": 9, + "currencyId": "187224307232923873519830480073807488153", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQD.svg", + "color": "4D8BED" + }, + { + "id": "f68a9550-7d4c-4358-81bc-61c5ea233f20", + "type": "assets", + "name": "phala token", + "symbol": "xcpha", + "precision": 12, + "currencyId": "132685552157663328694213725410064821485", + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F" + }, + { + "id": "6fed1ff5-3aa5-4d94-b07a-22dfc0770fc0", + "type": "assets", + "name": "pink", + "symbol": "xcpink", + "precision": 10, + "currencyId": "64174511183114006009298114091987195453", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PINK.svg", + "color": "FF0066" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ { - "id": "52509327-116a-4365-bf7d-03cecf7868bc", - "type": "assets", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "340282366920938463463374607431768211455", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF" + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" }, { - "id": "aa494fdc-3411-438c-b69b-a53e36f062a1", - "type": "assets", - "name": "phala token", - "symbol": "pha", - "precision": 12, - "currencyId": "18446744073709551623", - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F" - } - ], - "nodes": [ + "id": "31b03360-5c73-4733-a72d-65daf4600315", + "symbol": "GLMR" + }, { - "url": "wss://api-shiden.dwellir.com", - "name": "Dwellir node" + "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", + "symbol": "aUSD" }, { - "url": "wss://rpc.shiden.astar.network", - "name": "StakeTechnologies node" + "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", + "symbol": "ACA" }, { - "url": "wss://shiden.public.blastapi.io", - "name": "Blast node" + "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", + "symbol": "USDt" } ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Shiden.svg", - "addressPrefix": 5 - }, - { - "disabled": false, - "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2001", - "name": "Bifrost", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-Bifrost/graphql" - }, - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://bifrost-kusama.subscan.io/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "559e80d6-fb38-4dd5-bbd6-c0a7c2f600e1", - "name": "bifrost native coin", - "symbol": "bnc", - "precision": 12, - "priceId": "bifrost-native-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", - "color": "FFFFFF", - "type": "normal" - }, - { - "id": "922c191c-4cb8-407e-8b81-2cfc52170c3b", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "existentialDeposit": "100000000", - "type": "ormlAsset" - }, - { - "id": "75206b90-456e-48ae-a118-0bf9ab861115", - "name": "rmrk", - "symbol": "rmrk", - "precision": 10, - "priceId": "rmrk", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", - "color": "392B73", - "existentialDeposit": "10000", - "type": "ormlAsset" - }, - { - "id": "5c31c8ae-c045-43f2-849a-88a17ee7b302", - "name": "karura", - "symbol": "kar", - "precision": 12, - "priceId": "karura", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", - "color": "FFFFFF", - "existentialDeposit": "100000000", - "type": "ormlAsset" - }, - { - "id": "07f2a7fc-9b0a-4583-9267-57b68ecd4350", - "name": "voucher ksm", - "symbol": "vksm", - "currencyId": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VKSM.svg", - "color": "FFFFFF", - "existentialDeposit": "100000000", - "isNative": true, - "type": "vToken" - }, - { - "id": "dd0efecb-51a1-481d-a949-80cb7663c105", - "name": "voucher slot ksm", - "symbol": "vsksm", - "currencyId": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VSKSM.svg", - "color": "FFFFFF", - "existentialDeposit": "100000000", - "type": "vsToken", - "isNative": true - }, - { - "id": "94d5e2d9-c2d7-40e6-8893-5832a784b2ea", - "name": "acala dollar", - "symbol": "ausd", - "currencyId": "kusd", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", - "color": "E40C5B", - "priceId": "acala-dollar", - "existentialDeposit": "100000000", - "type": "stable" - }, + "availableDestinations": [ { - "id": "2bd78b68-8bd7-4859-928a-1a7b8b57a734", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "priceId": "tether", - "existentialDeposit": "1000", - "type": "foreignAsset", - "currencyId": "0" + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + } + ] }, { - "id": "e6f78e19-80c7-4e8c-8499-91e03df504a8", - "name": "moonriver", - "symbol": "movr", - "precision": 18, - "priceId": "moonriver", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", - "color": "FFFFFF", - "type": "ormlAsset", - "existentialDeposit": "1000000000000" + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assets": [ + { + "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", + "symbol": "aUSD" + }, + { + "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", + "symbol": "ACA" + }, + { + "id": "31b03360-5c73-4733-a72d-65daf4600315", + "symbol": "GLMR" + } + ] }, { - "id": "fe2c5a55-aff7-4d00-af5c-e90082a5a11e", - "name": "zenlink network", - "symbol": "zlk", - "precision": 18, - "priceId": "zenlink-network-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZLK.svg", - "color": "FFFFFF", - "existentialDeposit": "1000000000000", - "type": "ormlAsset", - "isNative": true + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assets": [ + { + "id": "31b03360-5c73-4733-a72d-65daf4600315", + "symbol": "GLMR" + } + ] }, { - "id": "33746c72-6806-47d0-a1c4-7b433df862f1", - "name": "phala", - "symbol": "pha", - "precision": 12, - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F", - "type": "ormlAsset", - "existentialDeposit": "40000000000" + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assets": [ + { + "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", + "symbol": "USDt" + } + ] } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", - "symbol": "BNC" - }, - { - "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", - "symbol": "MOVR" - }, - { - "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", - "symbol": "AUSD" - }, - { - "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", - "symbol": "USDt" - } - ], - "availableDestinations": [ - { - "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", - "assets": [ - { - "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", - "symbol": "USDt" - } - ] - }, - { - "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", - "symbol": "BNC" - }, - { - "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", - "symbol": "AUSD" - } - ] - }, - { - "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", - "symbol": "BNC" - }, - { - "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", - "symbol": "MOVR" - } - ] - } - ] + ] + }, + "nodes": [ + { + "url": "wss://api-moonbeam.dwellir.com", + "name": "Dwellir node" }, - "nodes": [ - { - "url": "wss://api-bifrost-kusama.dwellir.com", - "name": "Dwellir node" - }, + { + "url": "wss://wss.api.moonbeam.network", + "name": "Moonbeam Foundation node" + }, + { + "url": "wss://moonbeam.unitedbloc.com", + "name": "UnitedBloc node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Moonbeam.svg", + "addressPrefix": 1284, + "options": [ + "ethereumBased" + ] + }, + { + "disabled": true, + "chainId": "91bc6e169807aaa54802737e1c504b2577d4fafedd5a02c10293b1cd60e39527", + "rank": 111, + "name": "Moonbase Alpha", + "ecosystem": "ethereumBased", + "externalApi": { + "staking": { + "type": "subsquid", + "url": "https://squid.subsquid.io/moonbase-x-fearless/v/v1/graphql" + }, + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-moonbase_alpha" + }, + "explorers": [ { - "url": "wss://bifrost-rpc.liebi.com/ws", - "name": "Liebi node" + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://moonbase.subscan.io/{type}/{value}" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bifrost.svg", - "addressPrefix": 6, - "types": { - "url": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/type_registry/bifrost.json", - "overridesCommon": true + ] + }, + "assets": [ + { + "id": "caf10b57-bb4d-437b-81be-d2e1a6acdcc5", + "name": "moonbase alpha", + "symbol": "dev", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF", + "staking": "parachain", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://wss.api.moonbase.moonbeam.network", + "name": "Moonbeam Network node" + }, + { + "url": "wss://moonbase.unitedbloc.com", + "name": "UnitedBloc node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Moonbeam.svg", + "addressPrefix": 1287, + "options": [ + "testnet", + "ethereumBased" + ] + }, + { + "disabled": false, + "chainId": "9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2092", + "name": "Kintsugi", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-kintsugi" } }, - { - "disabled": false, - "chainId": "d43540ba6d3eb4897c28a77d48cb5b729fea37603cbbfc7a86a73b72adb3be8d", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2004", - "name": "Khala", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid-khala-api.squid.tachi.soramitsu.co.jp/graphql" - }, - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://khala.subscan.io/{type}/{value}" - } - ] - }, - "assets": [ - { - "id": "3feb7de3-e881-4c04-a4de-1b9091dbc324", - "name": "phala", - "symbol": "pha", - "precision": 12, - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F", - "isUtility": true, - "type": "normal" - }, - { - "id": "34d7fc9d-d616-4c3e-9398-060b18220a55", - "type": "assets", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "0", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF" - } - ], - "nodes": [ - { - "url": "wss://api-khala.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://khala-api.phala.network/ws", - "name": "Phala node" + "assets": [ + { + "id": "f5d1db12-0a68-4897-903d-51a887daa1db", + "name": "kintsugi", + "symbol": "kint", + "precision": 12, + "priceId": "kintsugi", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", + "color": "FFFFFF", + "type": "ormlChain", + "isUtility": true + }, + { + "id": "a6761186-60ba-4ea8-bec1-2db08a420301", + "type": "ormlChain", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + }, + { + "id": "80662ad9-8920-43ae-859a-33d97e87f74e", + "type": "ormlChain", + "name": "kintsugi ibtc", + "symbol": "kbtc", + "precision": 8, + "priceId": "kintsugi-btc", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", + "color": "FFFFFF" + } + ], + "nodes": [ + { + "url": "wss://api-kintsugi.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://api-kusama.interlay.io/parachain", + "name": "Kintsugi Labs node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/kintsugi.svg", + "addressPrefix": 2092, + "iosMinAppVersion": "2.0.7" + }, + { + "disabled": true, + "chainId": "9de765698374eb576968c8a764168893fb277e65ad3ddafcfe2c49593fc6d663", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2024", + "name": "Genshiro", + "ecosystem": "substrate", + "assets": [ + { + "id": "e207bcef-ab90-4df4-852f-566c309d778e", + "name": "genshiro", + "symbol": "gens", + "currencyId": "1734700659", + "precision": 9, + "priceId": "genshiro", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GENS.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "equilibrium" + } + ], + "nodes": [ + { + "url": "wss://node.ksm.genshiro.io", + "name": "Genshiro node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Genshiro.svg", + "addressPrefix": 67 + }, + { + "disabled": false, + "chainId": "631ccc82a078481584041656af292834e1ae6daab61d2875b4dd0c14bb9b17bc", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2048", + "name": "Robonomics", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://robonomics.subscan.io/{type}/{value}" } ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Khala.svg", - "addressPrefix": 30 + "history": { + "type": "giantsquid", + "url": "https://squid-robonomics-api.squid.tachi.soramitsu.co.jp/graphql" + } }, - { - "disabled": false, - "chainId": "411f057b9107718c9624d6aa4a3f23c1653898297f3d4d529d9bb6511a39dd21", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2086", - "name": "KILT Spiritnet", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid-kilt-api.squid.tachi.soramitsu.co.jp/graphql" - }, - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://spiritnet.subscan.io/{type}/{value}" - } - ] + "assets": [ + { + "id": "ca39e03e-dde3-41ac-b1f4-a3d20202b79e", + "name": "robonomics network", + "symbol": "xrt", + "precision": 9, + "priceId": "robonomics-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XRT.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" }, - "assets": [ - { - "id": "f0d5cadc-4999-45f3-8160-15243f2909d3", - "name": "kilt protocol", - "symbol": "kilt", - "precision": 15, - "priceId": "kilt-protocol", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KILT.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://spiritnet.kilt.io/", - "name": "KILT Protocol node" - }, - { - "url": "wss://kilt-rpc.dwellir.com", - "name": "Dwellir node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/kilt.svg", - "addressPrefix": 38 + { + "id": "b52b937a-f22b-4bab-a601-476aeeec4f2f", + "type": "assets", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "4294967295", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + } + ], + "nodes": [ + { + "url": "wss://kusama.rpc.robonomics.network", + "name": "Airalab node" + }, + { + "url": "wss://robonomics.leemo.me", + "name": "Leemo node" + }, + { + "url": "wss://robonomics.0xsamsara.com", + "name": "Samsara node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/robonomics.svg", + "addressPrefix": 32 + }, + { + "disabled": false, + "chainId": "4a12be580bb959937a1c7a61d5cf24428ed67fa571974b4007645d1886e7c89f", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2101", + "name": "Subsocial", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-subsocial-api.squid.tachi.soramitsu.co.jp/graphql" + } }, - { - "disabled": false, - "chainId": "4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2084", - "name": "Calamari", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid-calamari-api.squid.tachi.soramitsu.co.jp/graphql" - }, - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://calamari.subscan.io/{type}/{value}" - } - ] - }, - "assets": [ - { - "id": "39d4080e-e2ab-43f3-bcc2-2fa281d9290c", - "name": "calamari network", - "symbol": "kma", - "precision": 12, - "priceId": "calamari-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KMA.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }, - { - "id": "bd018ed9-069b-4d51-b5db-56b70bb5434c", - "type": "assets", - "name": "moonriver", - "symbol": "movr", - "precision": 18, - "currencyId": "11", - "priceId": "moonriver", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", - "color": "FFFFFF" - }, - { - "id": "003bb609-cae4-4cf0-afad-4230ca17873b", - "type": "assets", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "12", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF" - }, - { - "id": "6094eb13-6084-4909-9232-31b6088ad4cc", - "type": "assets", - "name": "karura", - "symbol": "kar", - "precision": 12, - "currencyId": "8", - "priceId": "karura", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", - "color": "FFFFFF" - } - ], - "nodes": [ - { - "url": "wss://calamari.systems", - "name": "Manta Network node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Calamari.svg", - "addressPrefix": 78 + "assets": [ + { + "id": "07f9e907-d099-4893-a67b-96cb2fe63049", + "name": "subsocial", + "symbol": "sub", + "precision": 10, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/SUB.svg", + "color": "AC2489", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://para.subsocial.network", + "name": "Dappforce node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/subsocial_new.svg", + "addressPrefix": 28 + }, + { + "disabled": false, + "chainId": "1bf2a2ecb4a868de66ea8610f2ce7c8c43706561b6476031315f6640fe38e060", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2092", + "name": "Zeitgeist", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-zeitgeist-api.squid.tachi.soramitsu.co.jp/graphql" + } }, - { - "disabled": false, - "chainId": "cd4d732201ebe5d6b014edda071c4203e16867305332301dc8d092044b28e554", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2095", - "name": "Quartz", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-quartz" - } + "assets": [ + { + "id": "2246fe14-4ec4-460c-8d92-e15bd337f8af", + "name": "zeitgeist", + "symbol": "ztg", + "precision": 10, + "priceId": "zeitgeist", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZTG.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-zeitgeist.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/zeitgeist.svg", + "addressPrefix": 73 + }, + { + "disabled": false, + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2034", + "name": "HydraDX", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-hydradx-api.squid.tachi.soramitsu.co.jp/graphql" }, - "assets": [ + "explorers": [ { - "id": "d0f2e718-99ee-4bc2-8dc2-1ce07f21c5ac", - "name": "quartz", - "symbol": "qtz", - "precision": 18, - "priceId": "quartz", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/QTZ.svg", - "color": "EC5B6D", - "isUtility": true, - "type": "normal" + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://hydradx.subscan.io/{type}/{value}" } - ], - "nodes": [ - { - "url": "wss://api-quartz.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://eu-ws-quartz.unique.network", - "name": "Unique Europe node" - }, - { - "url": "wss://ws-quartz.unique.network", - "name": "Geo Load Balancer node" - }, - { - "url": "wss://asia-ws-quartz.unique.network", - "name": "Unique Asia node" - }, + ] + }, + "assets": [ + { + "id": "fce79b6c-e071-4271-837e-6ec87a719390", + "name": "hydradx", + "symbol": "hdx", + "precision": 12, + "priceId": "hydradx", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HDX.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + }, + { + "id": "4697396b-37c4-426f-a36a-fda1935f365a", + "type": "assetId", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "currencyId": "5", + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "existentialDeposit": "17540000" + }, + { + "id": "0de05a52-3686-486c-a80e-f7feb6e228d7", + "type": "assetId", + "name": "inter ibtc", + "symbol": "ibtc", + "precision": 8, + "currencyId": "11", + "priceId": "interbtc", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", + "color": "F2AE7F", + "existentialDeposit": "36" + }, + { + "id": "880664d6-71f6-473e-95ba-4cc697429578", + "type": "assetId", + "name": "moonbeam", + "symbol": "glmr", + "precision": 18, + "currencyId": "16", + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF", + "existentialDeposit": "34854864344868000" + }, + { + "id": "53bd7f6e-b8eb-468f-a2ec-2bf347e702a7", + "type": "assetId", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "10", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "existentialDeposit": "10000" + } + ], + "nodes": [ + { + "url": "wss://api-hydradx.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.hydradx.cloud", + "name": "Galactic Council node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/hydradx.svg", + "addressPrefix": 63 + }, + { + "disabled": false, + "chainId": "b3db41421702df9a7fcac62b53ffeac85f7853cc4e689e0b93aeb3db18c09d82", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2031", + "name": "Centrifuge", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-centrifuge-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ { - "url": "wss://us-ws-quartz.unique.network", - "name": "Unique America node" + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://centrifuge.subscan.io/{type}/{value}" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/quartz.svg", - "addressPrefix": 255 + ] }, - { - "disabled": false, - "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2085", - "name": "Parallel Heiko", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-parallel_heiko" - }, - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://parallel-heiko.subscan.io/{type}/{value}" - } - ] - }, - "assets": [ - { - "id": "02b54158-4f4f-4077-b6a7-7c9edd75a1ca", - "name": "heiko finance", - "symbol": "hko", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HKO.svg", - "color": "CC3474", - "isUtility": true, - "type": "normal" - }, - { - "id": "382a7dd4-5444-4797-8cec-d921000144ed", - "type": "assets", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "100", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF" - }, - { - "id": "7bd1b0ca-a4a7-4b67-8f8b-cb19e2d3fab8", - "type": "assets", - "name": "moonriver", - "symbol": "movr", - "precision": 18, - "currencyId": "113", - "priceId": "moonriver", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", - "color": "FFFFFF" - }, - { - "id": "b48b21fb-eb3f-4296-9978-8dc42e42f384", - "type": "assets", - "name": "karura", - "symbol": "kar", - "precision": 12, - "currencyId": "107", - "priceId": "karura", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", - "color": "FFFFFF" - }, - { - "id": "535ab9cf-fa62-4e19-ab39-02e5584ef7af", - "type": "assets", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "102", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - }, - { - "id": "7a97a272-c767-4b45-b055-4c521168558c", - "type": "assets", - "name": "kintsugi native token", - "symbol": "kint", - "precision": 12, - "currencyId": "119", - "priceId": "kintsugi", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", - "color": "FFFFFF" - }, - { - "id": "5959efca-47b7-4ec4-a009-5870e2231d52", - "type": "assets", - "name": "kintsugi ibtc", - "symbol": "kbtc", - "precision": 8, - "currencyId": "121", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", - "color": "FFFFFF", - "priceId": "kintsugi-btc" - }, - { - "id": "d0262105-2c85-4167-bde0-50c7cdfe4942", - "type": "assets", - "name": "phala token", - "symbol": "pha", - "precision": 12, - "currencyId": "115", - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F" - } - ], - "nodes": [ - { - "url": "wss://heiko-rpc.parallel.fi", - "name": "Parallel node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/parallelfinance.svg", - "addressPrefix": 110 - }, - { - "disabled": false, - "chainId": "6811a339673c9daa897944dcdac99c6e2939cc88245ed21951a0a3c9a2be75bc", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2087", - "name": "Picasso", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid-picasso-api.squid.tachi.soramitsu.co.jp/graphql" - }, - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://picasso.subscan.io/{type}/{value}" - } - ] + "assets": [ + { + "id": "7b1963a6-11f1-461c-a9f1-83d82a54b7ee", + "name": "centrifuge", + "symbol": "cfg", + "precision": 18, + "priceId": "centrifuge", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CFG.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-centrifuge.dwellir.com", + "name": "Dwellir node" }, - "assets": [ - { - "id": "d24959cd-72fb-4155-9880-86d42b1d1cbb", - "name": "picasso", - "symbol": "pica", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PICA.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://api-picasso.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://picasso-rpc.composable.finance", - "name": "Composable Finance node" - }, - { - "url": "wss://rpc.composablenodes.tech", - "name": "Composable node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/picasso.svg", - "addressPrefix": 49 - }, - { - "disabled": false, - "chainId": "aa3876c1dc8a1afcc2e9a685a49ff7704cfd36ad8c90bf2702b9d1b00cc40011", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2088", - "name": "Altair", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid-altair-api.squid.tachi.soramitsu.co.jp/graphql" - }, - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://altair.subscan.io/{type}/{value}" - } - ] + { + "url": "wss://fullnode.parachain.centrifuge.io", + "name": "Centrufge node" }, - "assets": [ - { - "id": "56c7f785-23d6-4199-accf-846be58011e6", - "name": "altair", - "symbol": "air", - "precision": 18, - "priceId": "altair", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AIR.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://fullnode.altair.centrifuge.io", - "name": "Centrifuge node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Altair.svg", - "addressPrefix": 136 - }, - { - "disabled": false, - "chainId": "f22b7850cdd5a7657bbfd90ac86441275bbc57ace3d2698a740c7b0ec4de5ec3", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2096", - "name": "Pioneer Network", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-bit_country_pioneer" - } + { + "url": "wss://rpc-centrifuge.luckyfriday.io", + "name": "LuckyFriday node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/centrifuge.svg", + "addressPrefix": 36 + }, + { + "disabled": false, + "chainId": "97da7ede98d7bad4e36b4d734b6055425a3be036da2a332ea5a7037656427a21", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2026", + "name": "Nodle Parachain", + "ecosystem": "substrate", + "assets": [ + { + "id": "e0e1107-e323-43aa-bb93-d7618d2c8cf5", + "name": "nodle network", + "symbol": "nodl", + "precision": 11, + "priceId": "nodle-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NODL.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-nodle.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/nodle.svg", + "addressPrefix": 37 + }, + { + "disabled": false, + "chainId": "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2032", + "name": "Interlay", + "ecosystem": "substrate", + "assets": [ + { + "id": "7a77b6b0-f015-4ccc-a5bb-3456e17775dd", + "name": "interlay", + "symbol": "intr", + "precision": 10, + "priceId": "interlay", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", + "color": "FFFFFF", + "type": "ormlChain", + "isUtility": true }, - "assets": [ - { - "id": "d3b93409-97b1-42e0-8dbc-99d3fb93fc10", - "name": "metaverse.network pioneer", - "symbol": "neer", - "precision": 18, - "priceId": "metaverse-network-pioneer", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NEER.svg", - "color": "B8FBFE", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://pioneer-rpc-3.bit.country/wss", - "name": "MetaverseNetwork node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/bitcountry.svg", - "addressPrefix": 268 - }, - { - "disabled": false, - "chainId": "5c7bd13edf349b33eb175ffae85210299e324d852916336027391536e686f267", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2002", - "name": "Clover", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-clover" - }, - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://clv.subscan.io/{type}/{value}" - } - ] + { + "id": "2a45aeb9-f585-4f1b-9558-ee3aa186a809", + "type": "ormlChain", + "currencyId": "DOT", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066" }, - "assets": [ - { - "id": "4b7ab596-bff4-4fd8-9c60-24ef1cbe9584", - "name": "clover finance", - "symbol": "clv", - "precision": 18, - "priceId": "clover-finance", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CLV.svg", - "color": "73D4FD", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://rpc-para.clover.finance", - "name": "Clover node" - }, - { - "url": "wss://clover-rpc.dwellir.com", - "name": "Dwellir node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/clover.svg", - "addressPrefix": 128 - }, - { - "disabled": false, - "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2006", - "name": "Astar", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid-astar-api.squid.tachi.soramitsu.co.jp/graphql" - }, - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://astar.subscan.io/{type}/{value}" - } - ] + { + "id": "fdb17d7c-ca72-4ed7-9fc8-728aa366c843", + "type": "ormlChain", + "name": "inter ibtc", + "symbol": "ibtc", + "precision": 8, + "priceId": "interbtc", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", + "color": "F2AE7F" + } + ], + "nodes": [ + { + "url": "wss://api-interlay.dwellir.com", + "name": "Dwellir node" }, - "assets": [ - { - "id": "5ab1e8d-81ed-4130-9d29-55b549cc6bab", - "name": "astar", - "symbol": "astr", - "precision": 18, - "priceId": "astar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", - "color": "0AE2FF", - "isUtility": true, - "type": "normal" - }, - { - "id": "d898014a-5c0f-49a1-b563-51017e9dce38", - "type": "assets", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "currencyId": "340282366920938463463374607431768211455", - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066" - }, - { - "id": "af1fc6a0-505c-43d7-b214-d64e4414e2e1", - "type": "assets", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "4294969280", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - }, - { - "id": "3e0a1785-2faa-43bf-8af6-d02c96d6b30e", - "type": "assets", - "name": "equilibrium", - "symbol": "eq", - "precision": 9, - "currencyId": "18446744073709551628", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQ.svg", - "color": "5176E6" - }, - { - "id": "39fb54c8-52c1-4cf7-8412-24ac38b63eb4", - "type": "assets", - "name": "phala token", - "symbol": "pha", - "precision": 12, - "currencyId": "18446744073709551622", - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F" - }, - { - "id": "ee6b0152-326f-4e15-a62f-ac02d357d840", - "type": "assets", - "name": "moonbeam", - "symbol": "glmr", - "precision": 18, - "currencyId": "18446744073709551619", - "priceId": "moonbeam", - "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF" - } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "5ab1e8d-81ed-4130-9d29-55b549cc6bab", - "symbol": "ASTR" - } - ], - "availableDestinations": [ - { - "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", - "assets": [ - { - "id": "5ab1e8d-81ed-4130-9d29-55b549cc6bab", - "symbol": "ASTR", - "minAmount": "73000000000000000000" - } - ], - "bridgeParachainId": "e92d165ad41e41e215d09713788173aecfdbe34d3bed29409d33a2ef03980738" - } - ] + { + "url": "wss://api.interlay.io/parachain", + "name": "Kintsugi Labs node" }, - "nodes": [ - { - "url": "wss://api-astar.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://rpc.astar.network", - "name": "Astar node" - }, - { - "url": "wss://astar.public.blastapi.io", - "name": "Blast node" - }, - { - "url": "wss://astar.public.curie.radiumblock.co/ws", - "name": "RadiumBlock node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/astar.svg", - "addressPrefix": 5, - "options": [ - "tipRequired" - ] + { + "url": "wss://rpc-interlay.luckyfriday.io", + "name": "LuckyFriday node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/interlay.svg", + "addressPrefix": 2032 + }, + { + "disabled": false, + "chainId": "da5831fbc8570e3c6336d0d72b8c08f8738beefec812df21ef2afc2982ede09c", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2106", + "name": "Litmus", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-litmus-api.squid.tachi.soramitsu.co.jp/graphql" + } }, - { - "disabled": false, - "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2012", - "name": "Parallel", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid-parallel-api.squid.tachi.soramitsu.co.jp/graphql" - }, - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://parallel.subscan.io/{type}/{value}" - } - ] - }, - "assets": [ - { - "id": "f78aa731-a33c-4d8d-a3bb-74835064366b", - "name": "parallel finance", - "symbol": "para", - "precision": 12, - "priceId": "parallel-finance", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PARA.svg", - "color": "4C19E7", - "isUtility": true, - "type": "normal" - }, - { - "id": "769ffb89-fd2f-4add-94a1-d2f9f716c143", - "type": "assets", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "currencyId": "101", - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066" - }, - { - "id": "1d850850-a2fb-4728-8dfc-13679c470017", - "type": "assets", - "name": "moonbeam", - "symbol": "glmr", - "precision": 18, - "currencyId": "114", - "priceId": "moonbeam", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF" - }, - { - "id": "5e745a28-9827-4d7f-9df9-e2cfbe4d11a5", - "type": "assets", - "name": "interlay", - "symbol": "intr", - "precision": 10, - "currencyId": "120", - "priceId": "interlay", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", - "color": "FFFFFF" - }, - { - "id": "ba44778d-f7a2-4adb-91f9-efd9a46468a7", - "type": "assets", - "name": "liquid crowdloan dot", - "symbol": "lcdot", - "precision": 10, - "currencyId": "106", - "priceId": "liquid-crowdloan-dot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LCDOT.svg", - "color": "FF0066" - }, - { - "id": "01adcd11-256d-4ac2-966e-9bb87ed5f769", - "type": "assets", - "name": "acala", - "symbol": "aca", - "precision": 12, - "currencyId": "108", - "priceId": "acala", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", - "color": "FFFFFF" - }, - { - "id": "bf70329b-421a-4b68-87eb-ef85e0d0044e", - "type": "assets", - "name": "liquid dot", - "symbol": "ldot", - "precision": 10, - "currencyId": "110", - "priceId": "liquid-staking-dot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LDOT.svg", - "color": "FF0066" - }, - { - "id": "b4dc02ce-3e71-4d92-8e1a-9599a75d20e4", - "type": "assets", - "name": "inter ibtc", - "symbol": "ibtc", - "precision": 8, - "currencyId": "122", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", - "color": "F2AE7F" - }, - { - "id": "c5453123-c85e-4226-b2a8-fbf0deb88e9f", - "type": "assets", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "102", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - }, - { - "id": "e52c5825-3076-4277-84e2-8b45f778d981", - "type": "assets", - "name": "cdot-6/13", - "symbol": "cdot-6/13", - "precision": 10, - "currencyId": "200060013", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/%D1%81DOT.svg", - "color": "FF0066" - }, - { - "id": "1236185c-fa70-481e-befa-deda855054df", - "type": "assets", - "name": "cdot-7/14", - "symbol": "cdot-7/14", - "precision": 10, - "currencyId": "200070014", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/%D1%81DOT.svg", - "color": "FF0066" - }, - { - "id": "afe2d55d-2fa7-4e7b-ab2c-c4c4aea15a87", - "type": "assets", - "name": "cdot-8/15", - "symbol": "cdot-8/15", - "precision": 10, - "currencyId": "200080015", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/%D1%81DOT.svg", - "color": "FF0066" - }, - { - "id": "d6d35753-a3dc-4987-8995-2afbe0a65606", - "type": "assets", - "name": "phala token", - "symbol": "pha", - "precision": 12, - "currencyId": "115", - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F" - } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - }, - { - "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", - "symbol": "GLMR" - }, - { - "id": "bc05b313-67f2-454d-bdfa-78a4feb82259", - "symbol": "lcDOT" - }, - { - "id": "0c7df36b-4ebd-4e66-a78b-77fa08b54c54", - "symbol": "ACA" - }, - { - "id": "a3ecbda6-80b6-492f-a656-5ab0bdcc9d1f", - "symbol": "LDOT" - }, - { - "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", - "symbol": "USDt" - } - ], - "availableDestinations": [ - { - "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, - { - "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", - "assets": [ - { - "id": "bc05b313-67f2-454d-bdfa-78a4feb82259", - "symbol": "lcDOT" - }, - { - "id": "0c7df36b-4ebd-4e66-a78b-77fa08b54c54", - "symbol": "ACA" - }, - { - "id": "a3ecbda6-80b6-492f-a656-5ab0bdcc9d1f", - "symbol": "LDOT" - } - ] - }, - { - "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", - "assets": [ - { - "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", - "symbol": "GLMR" - } - ] - }, - { - "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", - "assets": [ - { - "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", - "symbol": "USDt" - } - ] - } - ] - }, - "nodes": [ - { - "url": "wss://api-parallel.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://rpc.parallel.fi", - "name": "Parallel node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/parallelfinance.svg", - "addressPrefix": 172 + "assets": [ + { + "id": "15076759-6a5b-4cd6-b84c-e64842f094e5", + "name": "litentry", + "symbol": "lit", + "precision": 18, + "priceId": "litentry", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LIT_KSM.svg", + "color": "6530F0", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc.litmus-parachain.litentry.io", + "name": "Litentry node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/litmus.svg", + "addressPrefix": 131 + }, + { + "disabled": false, + "chainId": "3920bcb4960a1eef5580cd5367ff3f430eef052774f78468852f7b9cb39f8a3c", + "name": "Polkadex Main Network", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-polkadex-api.squid.tachi.soramitsu.co.jp/graphql" + } }, - { - "disabled": false, - "chainId": "a85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2090", - "name": "Basilisk", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid-basilisk-api.squid.tachi.soramitsu.co.jp/graphql" - } + "assets": [ + { + "id": "5502c9cb-14f7-4de8-a35d-71263dc3f78f", + "name": "polkadex", + "symbol": "pdex", + "precision": 12, + "priceId": "polkadex", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PDEX.svg", + "color": "D32D79", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://mainnet.polkadex.trade", + "name": "Polkadex Team node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/polkadex.svg", + "addressPrefix": 88 + }, + { + "disabled": true, + "chainId": "577d331ca43646f547cdaa07ad0aa387a383a93416764480665103081f3eaf14", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2115", + "name": "Dorafactory Network", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/Dora-Factory-x-Fearless-Wallet" + } + }, + "assets": [ + { + "id": "c0d1efac-597d-4c56-b5ad-b683b8214ada", + "name": "dora factory", + "symbol": "dora", + "precision": 12, + "priceId": "dora-factory", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DORA.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kusama.dorafactory.org", + "name": "DORA node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/DoraFactory.svg", + "addressPrefix": 128 + }, + { + "disabled": false, + "chainId": "e7e0962324a3b86c83404dbea483f25fb5dab4c224791c81b756cfc948006174", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2043", + "name": "NeuroWeb Parachain", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-origintrail-api.squid.tachi.soramitsu.co.jp/graphql" + } + }, + "assets": [ + { + "id": "af5bf9f0-0009-4cf8-98ed-b988268c94f1", + "name": "neuro", + "symbol": "neuro", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Neuroweb.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-neuroweb.dwellir.com", + "name": "Dwellir node" }, - "assets": [ - { - "id": "7dae28e2-9f5e-49ff-9140-aa750a9579ea", - "name": "basilisk", - "symbol": "bsx", - "precision": 12, - "priceId": "basilisk", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BSX.svg", - "color": "87FCB6", - "isUtility": true, - "type": "normal" - }, - { - "id": "f7cafffc-c8d9-4441-8d52-84c17082e514", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "1", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "type": "assetId", - "existentialDeposit": "100000000" - }, - { - "id": "125a05b1-1e0b-411d-8628-ffd3b84ed4c8", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "14", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "type": "assetId", - "existentialDeposit": "10000" - } - ], - "nodes": [ - { - "url": "wss://api-basilisk.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://rpc.basilisk.cloud", - "name": "Basilisk node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Basilisk.svg", - "addressPrefix": 10041 + { + "url": "wss://parachain-rpc.origin-trail.network", + "name": "TraceLabs node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Neuroweb.svg", + "addressPrefix": 101 + }, + { + "disabled": false, + "chainId": "84322d9cddbf35088f1e54e9a85c967a41a56a4f43445768125e61af166c7d31", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2037", + "name": "UNIQUE", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/Unique-x-Fearless-Wallet" + } }, - { - "disabled": false, - "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "rank": 12, - "paraId": "2004", - "name": "Moonbeam", - "ecosystem": "ethereumBased", - "externalApi": { - "staking": { - "type": "subsquid", - "url": "https://squid.subsquid.io/fearless-x-moonbeam/v/v2/graphql" - }, - "history": { - "type": "giantsquid", - "url": "https://squid-moonbeam-api.squid.tachi.soramitsu.co.jp/graphql" - }, - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://moonbeam.subscan.io/{type}/{value}" - } - ] - }, - "assets": [ - { - "id": "e40c8161-9fc9-4749-a3b8-ed1c0ad16475", - "name": "moonbeam", - "symbol": "glmr", - "precision": 18, - "priceId": "moonbeam", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF", - "staking": "parachain", - "isUtility": true, - "type": "normal" - }, - { - "id": "7e4e064e-2b23-4eb5-96db-e6491c4031e5", - "type": "assets", - "name": "polkadot", - "symbol": "xcdot", - "precision": 10, - "currencyId": "42259045809535163221576417993425387648", - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066" - }, - { - "id": "311e3073-1bfb-40de-b601-20278e457577", - "type": "assets", - "name": "acala dollar", - "symbol": "xcausd", - "precision": 12, - "currencyId": "110021739665376159354538090254163045594", - "priceId": "acala-dollar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", - "color": "E40C5B" - }, - { - "id": "9539da0e-3610-406a-b1b9-c811b6508a17", - "type": "assets", - "name": "acala", - "symbol": "xcaca", - "precision": 12, - "currencyId": "224821240862170613278369189818311486111", - "priceId": "acala", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", - "color": "FFFFFF" - }, - { - "id": "1509c799-b30f-4fde-934e-791f1c88f3d1", - "type": "assets", - "name": "interlay", - "symbol": "xcintr", - "precision": 10, - "currencyId": "101170542313601871197860408087030232491", - "priceId": "interlay", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", - "color": "FFFFFF" - }, - { - "id": "9e738e1a-81be-4ac2-8de0-b56e565699ce", - "type": "assets", - "name": "astar", - "symbol": "xcastr", - "precision": 18, - "currencyId": "224077081838586484055667086558292981199", - "priceId": "astar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", - "color": "0AE2FF" - }, - { - "id": "5d4c759c-0f38-4c63-bdde-9359bdb0fa24", - "type": "assets", - "name": "tether usd", - "symbol": "xcusdt", - "precision": 6, - "currencyId": "311091173110107856861649819128533077277", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - }, - { - "id": "d69e3203-d914-4c70-8f38-ed66ea5d94ea", - "type": "assets", - "name": "equilibrium token", - "symbol": "xceq", - "precision": 9, - "currencyId": "190590555344745888270686124937537713878", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQ.svg", - "color": "5176E6" - }, - { - "id": "6cdc81d9-28a4-4b3c-8358-78a93f207ce7", - "type": "assets", - "name": "equilibrium dollar protocol", - "symbol": "xceqd", - "precision": 9, - "currencyId": "187224307232923873519830480073807488153", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQD.svg", - "color": "4D8BED" - }, - { - "id": "f68a9550-7d4c-4358-81bc-61c5ea233f20", - "type": "assets", - "name": "phala token", - "symbol": "xcpha", - "precision": 12, - "currencyId": "132685552157663328694213725410064821485", - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F" - }, - { - "id": "6fed1ff5-3aa5-4d94-b07a-22dfc0770fc0", - "type": "assets", - "name": "pink", - "symbol": "xcpink", - "precision": 10, - "currencyId": "64174511183114006009298114091987195453", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PINK.svg", - "color": "FF0066" - } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - }, - { - "id": "31b03360-5c73-4733-a72d-65daf4600315", - "symbol": "GLMR" - }, - { - "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", - "symbol": "aUSD" - }, - { - "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", - "symbol": "ACA" - }, - { - "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", - "symbol": "USDt" - } - ], - "availableDestinations": [ - { - "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, - { - "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", - "assets": [ - { - "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", - "symbol": "aUSD" - }, - { - "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", - "symbol": "ACA" - }, - { - "id": "31b03360-5c73-4733-a72d-65daf4600315", - "symbol": "GLMR" - } - ] - }, - { - "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", - "assets": [ - { - "id": "31b03360-5c73-4733-a72d-65daf4600315", - "symbol": "GLMR" - } - ] - }, - { - "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", - "assets": [ - { - "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", - "symbol": "USDt" - } - ] - } - ] + "assets": [ + { + "id": "57d05537-06a2-453b-ac87-d081aee65ec9", + "name": "unique network", + "symbol": "unq", + "precision": 18, + "priceId": "unique-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UNQ.svg", + "color": "65BAF9", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-unique.dwellir.com", + "name": "Dwellir node" }, - "nodes": [ - { - "url": "wss://api-moonbeam.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://wss.api.moonbeam.network", - "name": "Moonbeam Foundation node" - }, - { - "url": "wss://moonbeam.unitedbloc.com", - "name": "UnitedBloc node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Moonbeam.svg", - "addressPrefix": 1284, - "options": [ - "ethereumBased" - ] - }, - { - "disabled": false, - "chainId": "91bc6e169807aaa54802737e1c504b2577d4fafedd5a02c10293b1cd60e39527", - "rank": 111, - "name": "Moonbase Alpha", - "ecosystem": "ethereumBased", - "externalApi": { - "staking": { - "type": "subsquid", - "url": "https://squid.subsquid.io/moonbase-x-fearless/v/v1/graphql" - }, - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-moonbase_alpha" - }, - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://moonbase.subscan.io/{type}/{value}" - } - ] - }, - "assets": [ - { - "id": "caf10b57-bb4d-437b-81be-d2e1a6acdcc5", - "name": "moonbase alpha", - "symbol": "dev", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF", - "staking": "parachain", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://wss.api.moonbase.moonbeam.network", - "name": "Moonbeam Network node" - }, - { - "url": "wss://moonbase.unitedbloc.com", - "name": "UnitedBloc node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Moonbeam.svg", - "addressPrefix": 1287, - "options": [ - "testnet", - "ethereumBased" - ] - }, - { - "disabled": false, - "chainId": "9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2092", - "name": "Kintsugi", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-kintsugi" - } - }, - "assets": [ - { - "id": "f5d1db12-0a68-4897-903d-51a887daa1db", - "name": "kintsugi", - "symbol": "kint", - "precision": 12, - "priceId": "kintsugi", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", - "color": "FFFFFF", - "type": "ormlChain", - "isUtility": true - }, - { - "id": "a6761186-60ba-4ea8-bec1-2db08a420301", - "type": "ormlChain", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF" - }, - { - "id": "80662ad9-8920-43ae-859a-33d97e87f74e", - "type": "ormlChain", - "name": "kintsugi ibtc", - "symbol": "kbtc", - "precision": 8, - "priceId": "kintsugi-btc", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", - "color": "FFFFFF" - } - ], - "nodes": [ - { - "url": "wss://api-kintsugi.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://api-kusama.interlay.io/parachain", - "name": "Kintsugi Labs node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/kintsugi.svg", - "addressPrefix": 2092, - "iosMinAppVersion": "2.0.7" - }, - { - "disabled": false, - "chainId": "9de765698374eb576968c8a764168893fb277e65ad3ddafcfe2c49593fc6d663", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2024", - "name": "Genshiro", - "ecosystem": "substrate", - "assets": [ - { - "id": "e207bcef-ab90-4df4-852f-566c309d778e", - "name": "genshiro", - "symbol": "gens", - "currencyId": "1734700659", - "precision": 9, - "priceId": "genshiro", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GENS.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "equilibrium" - } - ], - "nodes": [ - { - "url": "wss://node.ksm.genshiro.io", - "name": "Genshiro node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Genshiro.svg", - "addressPrefix": 67 - }, - { - "disabled": false, - "chainId": "631ccc82a078481584041656af292834e1ae6daab61d2875b4dd0c14bb9b17bc", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2048", - "name": "Robonomics", - "ecosystem": "substrate", - "externalApi": { - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://robonomics.subscan.io/{type}/{value}" - } - ], - "history": { - "type": "giantsquid", - "url": "https://squid-robonomics-api.squid.tachi.soramitsu.co.jp/graphql" - } - }, - "assets": [ - { - "id": "ca39e03e-dde3-41ac-b1f4-a3d20202b79e", - "name": "robonomics network", - "symbol": "xrt", - "precision": 9, - "priceId": "robonomics-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XRT.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }, - { - "id": "b52b937a-f22b-4bab-a601-476aeeec4f2f", - "type": "assets", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "4294967295", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF" - } - ], - "nodes": [ - { - "url": "wss://kusama.rpc.robonomics.network", - "name": "Airalab node" - }, - { - "url": "wss://robonomics.leemo.me", - "name": "Leemo node" - }, - { - "url": "wss://robonomics.0xsamsara.com", - "name": "Samsara node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/robonomics.svg", - "addressPrefix": 32 - }, - { - "disabled": false, - "chainId": "4a12be580bb959937a1c7a61d5cf24428ed67fa571974b4007645d1886e7c89f", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2101", - "name": "Subsocial", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid-subsocial-api.squid.tachi.soramitsu.co.jp/graphql" - } - }, - "assets": [ - { - "id": "07f9e907-d099-4893-a67b-96cb2fe63049", - "name": "subsocial", - "symbol": "sub", - "precision": 10, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/SUB.svg", - "color": "AC2489", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://para.subsocial.network", - "name": "Dappforce node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/subsocial_new.svg", - "addressPrefix": 28 - }, - { - "disabled": false, - "chainId": "1bf2a2ecb4a868de66ea8610f2ce7c8c43706561b6476031315f6640fe38e060", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2092", - "name": "Zeitgeist", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid-zeitgeist-api.squid.tachi.soramitsu.co.jp/graphql" - } - }, - "assets": [ - { - "id": "2246fe14-4ec4-460c-8d92-e15bd337f8af", - "name": "zeitgeist", - "symbol": "ztg", - "precision": 10, - "priceId": "zeitgeist", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZTG.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://api-zeitgeist.dwellir.com", - "name": "Dwellir node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/zeitgeist.svg", - "addressPrefix": 73 - }, - { - "disabled": false, - "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2034", - "name": "HydraDX", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid-hydradx-api.squid.tachi.soramitsu.co.jp/graphql" - }, - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://hydradx.subscan.io/{type}/{value}" - } - ] - }, - "assets": [ - { - "id": "fce79b6c-e071-4271-837e-6ec87a719390", - "name": "hydradx", - "symbol": "hdx", - "precision": 12, - "priceId": "hydradx", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HDX.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }, - { - "id": "4697396b-37c4-426f-a36a-fda1935f365a", - "type": "assetId", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "currencyId": "5", - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "existentialDeposit": "17540000" - }, - { - "id": "0de05a52-3686-486c-a80e-f7feb6e228d7", - "type": "assetId", - "name": "inter ibtc", - "symbol": "ibtc", - "precision": 8, - "currencyId": "11", - "priceId": "interbtc", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", - "color": "F2AE7F", - "existentialDeposit": "36" - }, - { - "id": "880664d6-71f6-473e-95ba-4cc697429578", - "type": "assetId", - "name": "moonbeam", - "symbol": "glmr", - "precision": 18, - "currencyId": "16", - "priceId": "moonbeam", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF", - "existentialDeposit": "34854864344868000" - }, - { - "id": "53bd7f6e-b8eb-468f-a2ec-2bf347e702a7", - "type": "assetId", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "10", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "existentialDeposit": "10000" - } - ], - "nodes": [ - { - "url": "wss://api-hydradx.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://rpc.hydradx.cloud", - "name": "Galactic Council node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/hydradx.svg", - "addressPrefix": 63 - }, - { - "disabled": false, - "chainId": "b3db41421702df9a7fcac62b53ffeac85f7853cc4e689e0b93aeb3db18c09d82", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2031", - "name": "Centrifuge", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid-centrifuge-api.squid.tachi.soramitsu.co.jp/graphql" - }, - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://centrifuge.subscan.io/{type}/{value}" - } - ] - }, - "assets": [ - { - "id": "7b1963a6-11f1-461c-a9f1-83d82a54b7ee", - "name": "centrifuge", - "symbol": "cfg", - "precision": 18, - "priceId": "centrifuge", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CFG.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://api-centrifuge.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://fullnode.parachain.centrifuge.io", - "name": "Centrufge node" - }, - { - "url": "wss://rpc-centrifuge.luckyfriday.io", - "name": "LuckyFriday node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/centrifuge.svg", - "addressPrefix": 36 - }, - { - "disabled": false, - "chainId": "97da7ede98d7bad4e36b4d734b6055425a3be036da2a332ea5a7037656427a21", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2026", - "name": "Nodle Parachain", - "ecosystem": "substrate", - "assets": [ - { - "id": "e0e1107-e323-43aa-bb93-d7618d2c8cf5", - "name": "nodle network", - "symbol": "nodl", - "precision": 11, - "priceId": "nodle-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NODL.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://api-nodle.dwellir.com", - "name": "Dwellir node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/nodle.svg", - "addressPrefix": 37 - }, - { - "disabled": false, - "chainId": "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2032", - "name": "Interlay", - "ecosystem": "substrate", - "assets": [ - { - "id": "7a77b6b0-f015-4ccc-a5bb-3456e17775dd", - "name": "interlay", - "symbol": "intr", - "precision": 10, - "priceId": "interlay", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", - "color": "FFFFFF", - "type": "ormlChain", - "isUtility": true - }, - { - "id": "2a45aeb9-f585-4f1b-9558-ee3aa186a809", - "type": "ormlChain", - "currencyId": "DOT", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066" - }, - { - "id": "fdb17d7c-ca72-4ed7-9fc8-728aa366c843", - "type": "ormlChain", - "name": "inter ibtc", - "symbol": "ibtc", - "precision": 8, - "priceId": "interbtc", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", - "color": "F2AE7F" - } - ], - "nodes": [ - { - "url": "wss://api-interlay.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://api.interlay.io/parachain", - "name": "Kintsugi Labs node" - }, - { - "url": "wss://rpc-interlay.luckyfriday.io", - "name": "LuckyFriday node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/interlay.svg", - "addressPrefix": 2032 - }, - { - "disabled": false, - "chainId": "da5831fbc8570e3c6336d0d72b8c08f8738beefec812df21ef2afc2982ede09c", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2106", - "name": "Litmus", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid-litmus-api.squid.tachi.soramitsu.co.jp/graphql" - } - }, - "assets": [ - { - "id": "15076759-6a5b-4cd6-b84c-e64842f094e5", - "name": "litentry", - "symbol": "lit", - "precision": 12, - "priceId": "litentry", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LIT_KSM.svg", - "color": "6530F0", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://rpc.litmus-parachain.litentry.io", - "name": "Litentry node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/litmus.svg", - "addressPrefix": 131 - }, - { - "disabled": false, - "chainId": "3920bcb4960a1eef5580cd5367ff3f430eef052774f78468852f7b9cb39f8a3c", - "name": "Polkadex Main Network", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid-polkadex-api.squid.tachi.soramitsu.co.jp/graphql" - } - }, - "assets": [ - { - "id": "5502c9cb-14f7-4de8-a35d-71263dc3f78f", - "name": "polkadex", - "symbol": "pdex", - "precision": 12, - "priceId": "polkadex", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PDEX.svg", - "color": "D32D79", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://mainnet.polkadex.trade", - "name": "Polkadex Team node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/polkadex.svg", - "addressPrefix": 88 - }, - { - "disabled": true, - "chainId": "577d331ca43646f547cdaa07ad0aa387a383a93416764480665103081f3eaf14", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2115", - "name": "Dorafactory Network", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/Dora-Factory-x-Fearless-Wallet" - } - }, - "assets": [ - { - "id": "c0d1efac-597d-4c56-b5ad-b683b8214ada", - "name": "dora factory", - "symbol": "dora", - "precision": 12, - "priceId": "dora-factory", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DORA.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://kusama.dorafactory.org", - "name": "DORA node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/DoraFactory.svg", - "addressPrefix": 128 - }, - { - "disabled": false, - "chainId": "e7e0962324a3b86c83404dbea483f25fb5dab4c224791c81b756cfc948006174", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2043", - "name": "OriginTrail Parachain", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid-origintrail-api.squid.tachi.soramitsu.co.jp/graphql" - } - }, - "assets": [ - { - "id": "af5bf9f0-0009-4cf8-98ed-b988268c94f1", - "name": "origitrail parachain", - "symbol": "otp", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OTP.svg", - "color": "6344DF", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://parachain-rpc.origin-trail.network", - "name": "TraceLabs node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/OriginTrail.svg", - "addressPrefix": 101 - }, - { - "disabled": false, - "chainId": "84322d9cddbf35088f1e54e9a85c967a41a56a4f43445768125e61af166c7d31", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2037", - "name": "UNIQUE", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/Unique-x-Fearless-Wallet" - } - }, - "assets": [ - { - "id": "57d05537-06a2-453b-ac87-d081aee65ec9", - "name": "unique network", - "symbol": "unq", - "precision": 18, - "priceId": "unique-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UNQ.svg", - "color": "65BAF9", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://api-unique.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://ws.unique.network", - "name": "Geo Load Balancer node" - }, - { - "url": "wss://eu-ws.unique.network", - "name": "Unique Europe node" - }, - { - "url": "wss://asia-ws.unique.network", - "name": "Unique Asia node" - }, - { - "url": "wss://us-ws.unique.network", - "name": "Unique America node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/unique.svg", - "addressPrefix": 7391 - }, - { - "disabled": false, - "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2030", - "name": "Bifrost Polkadot", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid-bifrostpolkadot-api.squid.tachi.soramitsu.co.jp/graphql" - }, - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://bifrost.subscan.io/{type}/{value}" - } - ] - }, - "assets": [ - { - "id": "dc9e23e8-f4bf-4864-9f2c-c2fbd4b03886", - "name": "bifrost native coin", - "symbol": "bnc", - "precision": 12, - "priceId": "bifrost-native-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }, - { - "id": "fd62d09e-cfae-44f8-81a0-bf99732643fc", - "type": "token2", - "currencyId": "0", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066" - }, - { - "id": "9ff3dbb1-5986-44b9-b247-db82ae3584a1", - "type": "token2", - "currencyId": "1", - "name": "moonbeam", - "symbol": "glmr", - "precision": 18, - "priceId": "moonbeam", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF" - }, - { - "id": "8dc39b21-04c9-4d1d-b9ec-8ea111052e77", - "type": "token2", - "currencyId": "2", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - } - ], - "nodes": [ - { - "url": "wss://api-bifrost-polkadot.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://hk.p.bifrost-rpc.liebi.com/ws", - "name": "Liebi node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bifrost.svg", - "addressPrefix": 6 - }, - { - "disabled": false, - "chainId": "2fc8bb6ed7c0051bdcf4866c322ed32b6276572713607e3297ccf411b8f14aa9", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2013", - "name": "Litentry", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid-litentry-api.squid.tachi.soramitsu.co.jp/graphql" - } - }, - "assets": [ - { - "id": "10de552c-20cb-4a86-9bf8-cf5827ca2f71", - "name": "litentry", - "symbol": "lit", - "precision": 12, - "priceId": "litentry", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LIT_DOT.svg", - "color": "02C86A", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://api-litentry.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://rpc.litentry-parachain.litentry.io", - "name": "Litentry node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Litentry.svg", - "addressPrefix": 31 - }, - { - "disabled": false, - "chainId": "1bb969d85965e4bb5a651abbedf21a54b6b31a21f66b5401cc3f1e286268d736", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2035", - "name": "Phala", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid-phala-api.squid.tachi.soramitsu.co.jp/graphql" - } - }, - "assets": [ - { - "id": "50add3d2-baa6-4bf3-9995-e6532ad51726", - "name": "phala", - "symbol": "pha", - "precision": 12, - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://api-phala.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://api.phala.network/ws", - "name": "Phala node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/phala.svg", - "addressPrefix": 30 - }, - { - "disabled": false, - "chainId": "daab8df776eb52ec604a5df5d388bb62a050a0aaec4556a64265b9d42755552d", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2019", - "name": "Composable Finance", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid-composable-api.squid.tachi.soramitsu.co.jp/graphql" - }, - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://composable.subscan.io/{type}/{value}" - } - ] - }, - "assets": [ - { - "id": "7f429a3f-4666-40a2-a506-58bfe01504c4", - "name": "composable finance", - "symbol": "layr", - "precision": 12, - "priceId": "composable-finance-layr", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LAYR.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://api-composable.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://rpc.composable.finance", - "name": "Composable node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/composable.svg", - "addressPrefix": 49 - }, - { - "disabled": false, - "chainId": "35a06bfec2edf0ff4be89a6428ccd9ff5bd0167d618c5a0d4341f9600a458d14", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2119", - "name": "Bajun Kusama", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid-bajun-api.squid.tachi.soramitsu.co.jp/graphql" - } - }, - "assets": [ - { - "id": "cbf84703-ba1d-4a39-ab5e-424756c91422", - "name": "bajun network", - "symbol": "baju", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BAJU.svg", - "color": "69A6DA", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://rpc-parachain.bajun.network", - "name": "AjunaNetwork node" - }, - { - "url": "wss://bajun.public.curie.radiumblock.co/ws", - "name": "RadiumBlock node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bajun.svg", - "addressPrefix": 1337 - }, - { - "disabled": false, - "chainId": "feb426ca713f0f46c96465b8f039890370cf6bfd687c9076ea2843f58a6ae8a7", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2113", - "name": "Kabocha", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid-kabocha-api.squid.tachi.soramitsu.co.jp/graphql" - } - }, - "assets": [ - { - "id": "898eb0a1-ede6-437a-97b7-e92407db985f", - "name": "kabocha", - "symbol": "kab", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAB.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://kabocha.jelliedowl.com", - "name": "JelliedOwl node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kabocha.svg", - "addressPrefix": 27 - }, - { - "disabled": true, - "chainId": "52149c30c1eb11460dce6c08b73df8d53bb93b4a15d0a2e7fd5dafe86a73c0da", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2107", - "name": "KICO", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/KICO-x-Fearless-Wallet" - } - }, - "assets": [ - { - "id": "3a11badb-fe19-4cf4-9651-4b635a49bb7e", - "name": "kico", - "symbol": "kico", - "precision": 14, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KICO.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://rpc.kico.dico.io", - "name": "DICO Foundation node" - }, - { - "url": "wss://rpc.api.kico.dico.io", - "name": "DICO Foundation 2 node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/KICO.svg", - "addressPrefix": 42 - }, - { - "disabled": true, - "chainId": "d611f22d291c5b7b69f1e105cca03352984c344c4421977efaa4cbdd1834e2aa", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2110", - "name": "Mangata Kusama Mainnet", - "ecosystem": "substrate", - "assets": [ - { - "id": "27ccf12f-3ae0-4c5e-b337-ee43b7c23928", - "name": "mangata x", - "symbol": "mgx", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MGX.svg", - "color": "10C5C5", - "isUtility": true, - "type": "normal" - }, - { - "id": "f63730eb-9fe2-41e9-9ec3-3cc4e6f02d0a", - "type": "ormlChain", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "4", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF" - }, - { - "id": "459f852b-665c-4743-8b2c-5bc5fc6abdda", - "type": "ormlChain", - "name": "bifrost native coin", - "symbol": "bnc", - "precision": 12, - "currencyId": "14", - "priceId": "bifrost-native-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", - "color": "FFFFFF" - }, - { - "id": "8ef9ca57-f2e4-4edb-9365-2805c7143537", - "type": "ormlChain", - "name": "voucher ksm", - "symbol": "vksm", - "precision": 12, - "currencyId": "15", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VKSM.svg", - "color": "FFFFFF" - }, - { - "id": "31aef057-d42a-419c-b0c4-cd61dc7e96c5", - "type": "ormlChain", - "name": "zenlink network", - "symbol": "zlk", - "precision": 18, - "currencyId": "26", - "priceId": "zenlink-network-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZLK.svg", - "color": "FFFFFF" - }, - { - "id": "3b46e22a-f819-4b2b-9dca-23dec1b66f82", - "type": "ormlChain", - "name": "rmrk", - "symbol": "rmrk", - "precision": 10, - "currencyId": "31", - "priceId": "rmrk", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", - "color": "392B73" - }, - { - "id": "2c28b884-dcbe-4653-91d2-934beefe4f2c", - "type": "ormlChain", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "30", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - }, - { - "id": "a4268819-dd67-45ba-a8f4-32277e3817b1", - "type": "ormlChain", - "name": "turing token", - "symbol": "tur", - "precision": 10, - "currencyId": "7", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUR.svg", - "color": "5DCBD0" - } - ], - "nodes": [ - { - "url": "wss://prod-kusama-collator-01.mangatafinance.cloud", - "name": "Mangata node" - }, - { - "url": "wss://kusama-archive.mangata.online", - "name": "Mangata Archive node" - }, - { - "url": "wss://kusama-rpc.mangata.online", - "name": "Mangata RPC node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/MagnataX.svg", - "addressPrefix": 42 - }, - { - "disabled": true, - "chainId": "eacdd2d5b42de9769ccbb6e8d9013ab0d90ab105bf601d4aac53e874c145ec21", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2116", - "name": "DataHighway Tanganika", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/DataHighway-Tanganika-x-Fearless-Wallet" - } - }, - "assets": [ - { - "id": "15df9971-2e6a-4619-a5ca-9ad571655287", - "name": "datahighway", - "symbol": "dhx", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DHX.svg", - "color": "6C179F", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://tanganika.datahighway.com", - "name": "DataHighway node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/DataHighway.svg", - "addressPrefix": 33 - }, - { - "disabled": true, - "chainId": "89d3ec46d2fb43ef5a9713833373d5ea666b092fa8fd68fbc34596036571b907", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "name": "Equilibrium", - "ecosystem": "substrate", - "externalApi": { - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://equilibrium.subscan.io/{type}/{value}" - } - ] - }, - "assets": [ - { - "id": "47d1f5c5-c43d-4082-b577-ba0af91cb1a6", - "name": "equilibrium", - "symbol": "eq", - "currencyId": "25969", - "precision": 9, - "existentialDeposit": "1000000000", - "priceId": "equilibrium-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQ.svg", - "color": "5176E6", - "isUtility": true, - "type": "equilibrium" - }, - { - "id": "50bb6d02-1aad-4a94-b41c-2a15b4aee0e8", - "name": "equilibrium dollar protocol", - "symbol": "eqd", - "currencyId": "6648164", - "precision": 9, - "existentialDeposit": "1000000000", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQD.svg", - "color": "4D8BED", - "type": "equilibrium" - }, - { - "id": "6b21d130-7475-4f61-b893-799061fc05bf", - "name": "acala", - "symbol": "aca", - "currencyId": "6382433", - "precision": 9, - "priceId": "acala", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", - "color": "FFFFFF", - "type": "equilibrium" - }, - { - "id": "9c67711c-7f0c-45fa-b7fc-66b655ba17e1", - "name": "bnb", - "symbol": "bnb", - "currencyId": "6450786", - "precision": 9, - "priceId": "binancecoin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", - "color": "F3BA2F", - "type": "equilibrium" - }, - { - "id": "b62f4a0a-883f-496f-a797-fd2b24abe01b", - "name": "polkadot", - "symbol": "dot", - "currencyId": "6582132", - "precision": 9, - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "type": "equilibrium" - }, - { - "id": "665c8d3d-a035-45fb-9c9c-7cfaf7da96c6", - "name": "astar", - "symbol": "astr", - "currencyId": "1634956402", - "precision": 9, - "priceId": "astar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", - "color": "0AE2FF", - "type": "equilibrium" - }, - { - "id": "c98efbda-a452-4329-8199-fef32dc9307e", - "name": "acala dollar", - "symbol": "ausd", - "currencyId": "1635087204", - "precision": 9, - "priceId": "acala-dollar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", - "color": "E40C5B", - "type": "equilibrium" - }, - { - "id": "793fc038-c134-4d58-af6d-cb7c1be5a4ea", - "name": "binance usd", - "symbol": "busd", - "currencyId": "1651864420", - "precision": 9, - "priceId": "binance-usd", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", - "color": "F3BA2F", - "type": "equilibrium" - }, - { - "id": "e8c17b03-a94c-4fd3-a599-189a1b5e8e32", - "name": "moonbeam", - "symbol": "glmr", - "currencyId": "1735159154", - "precision": 9, - "priceId": "moonbeam", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF", - "type": "equilibrium" - }, - { - "id": "a9d1b0b2-ad4e-4d86-88c5-72a8947099f0", - "name": "inter ibtc", - "symbol": "ibtc", - "currencyId": "1768060003", - "precision": 9, - "priceId": "interbtc", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", - "color": "F2AE7F", - "type": "equilibrium" - }, - { - "id": "502acf71-3c1f-4f1c-91d9-179fd2987a34", - "name": "interlay", - "symbol": "intr", - "currencyId": "1768846450", - "precision": 9, - "priceId": "interlay", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", - "color": "FFFFFF", - "type": "equilibrium" - }, - { - "id": "f67bfaf7-e081-4355-abda-4f1faaeb3579", - "name": "parallel finance", - "symbol": "para", - "currencyId": "1885434465", - "precision": 9, - "priceId": "parallel-finance", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PARA.svg", - "color": "4C19E7", - "type": "equilibrium" - }, - { - "id": "c1ad2bb4-701a-4711-bacb-59259ff3d57d", - "name": "tether usd", - "symbol": "usdt", - "currencyId": "1970496628", - "precision": 9, - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "type": "equilibrium" - }, - { - "id": "26a16776-71c9-450d-bfaf-df3a8cd6d277", - "name": "fluid xdot", - "symbol": "xdot", - "currencyId": "2019848052", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "type": "equilibrium" - }, - { - "id": "1eb9d66e-a92d-49c5-95fc-fd7a844fc66d", - "name": "equilibrium dot", - "symbol": "eqdot", - "currencyId": "435694104436", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/eqDOT.svg", - "color": "FFFFFF", - "type": "equilibrium" - } - ], - "nodes": [ - { - "url": "wss://api-equilibrium.dwellir.com", - "name": "Dwellir node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/equilibrium.svg", - "addressPrefix": 68, - "options": [ - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "724c168d8e86b78b831c641e2cc822b8d1bf99fa0b4b28fe59985cd6fd580215", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2039", - "name": "Integritee Shell", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-integritee" - } - }, - "assets": [ - { - "id": "07c55d3a-b24e-410e-b9ca-7da0707fbd61", - "name": "integritee", - "symbol": "teer", - "precision": 12, - "priceId": "integritee", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TEER.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://api-integritee.dwellir.com", - "name": "Dwellir node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/integritee.svg", - "addressPrefix": 13 - }, - { - "disabled": false, - "chainId": "0f62b701fb12d02237a33b84818c11f621653d2b1614c777973babf4652b535d", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2114", - "name": "Turing Network", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-turing" - } - }, - "assets": [ - { - "id": "148ce615-aea3-42fa-be45-5eb5606813b8", - "name": "turing token", - "symbol": "tur", - "precision": 10, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUR.svg", - "color": "5DCBD0", - "isUtility": true, - "type": "normal" - }, - { - "id": "e8774037-c4a5-42b5-87a4-cf946a60a406", - "type": "assetId", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "1", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "existentialDeposit": "100000000" - } - ], - "nodes": [ - { - "url": "wss://api-turing.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://rpc.turing.oak.tech", - "name": "OAK node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/OAK.svg", - "addressPrefix": 51 - }, - { - "disabled": false, - "chainId": "7dd99936c1e9e6d1ce7d90eb6f33bea8393b4bf87677d675aa63c9cb3e8c5b5b", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "1001", - "name": "Encointer on Kusama", - "ecosystem": "substrate", - "assets": [ - { - "id": "1e0c2ec6-935f-49bd-a854-5e12ee6c9f1b", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "purchaseProviders": [ - "ramp" - ], - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://kusama.api.encointer.org", - "name": "Encointer Association node" - }, - { - "url": "wss://sys.ibp.network/encointer-kusama", - "name": "IBP-GeoDNS1 node" - }, - { - "url": "wss://sys.dotters.network/encointer-kusama", - "name": "IBP-GeoDNS2 node" - }, - { - "url": "wss://ksm-rpc.stakeworld.io/encointer", - "name": "Stakeworld node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/encointer.svg", - "addressPrefix": 2 - }, - { - "disabled": true, - "chainId": "0e06260459b4f9034aba0a75108c08ed73ea51d2763562749b1d3600986c4ea5", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2102", - "name": "Pichiu Network", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/Pichiu-x-Fearless-Wallet" - } - }, - "assets": [ - { - "id": "5b196f7c-475a-493e-abbf-9f808d6fb863", - "name": "pichu token", - "symbol": "pchu", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PCHU.svg", - "color": "AE4071", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://kusama.kylin-node.co.uk", - "name": "Kylin Network node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/pichiu.svg", - "addressPrefix": 42 - }, - { - "disabled": false, - "chainId": "d42e9606a995dfe433dc7955dc2a70f495f350f373daa200098ae84437816ad2", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2125", - "name": "InvArch Tinker Network", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/InvArch-Tinker-x-Fearless-Wallet" - } - }, - "assets": [ - { - "id": "8b58d683-fdc9-477e-a1b2-2c95b663e4a5", - "name": "tinkernet parachain", - "symbol": "tnkr", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TNKR.svg", - "color": "AC2489", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://api-invarch.dwellir.com", - "name": "Dwellir node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Tinkernet.svg", - "addressPrefix": 117 - }, - { - "disabled": true, - "chainId": "19a3733beb9cb8a970a308d835599e9005e02dc007a35440e461a451466776f8", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2123", - "name": "GM Parachain", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-gmordie/graphql" - } - }, - "assets": [ - { - "id": "19763697-37d8-4643-b840-3fd8565f5d83", - "name": "gm parachain", - "symbol": "fren", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/FREN.svg", - "color": "F7D64D", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://leemo.gmordie.com", - "name": "leemo node" - }, - { - "url": "wss://ws.gm.bldnodes.org", - "name": "bLd Nodes node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/GM%20Parachain.svg", - "addressPrefix": 7013 - }, - { - "disabled": true, - "chainId": "ca93a37c913a25fa8fdb33c7f738afc39379cb71d37874a16d4c091a5aef9f89", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2121", - "name": "Imbue Kusama", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/Imbue-x-Fearless-Wallet" - } - }, - "assets": [ - { - "id": "c01b37ab-eefa-427d-ba50-dd7a1cbe1798", - "name": "imbue network", - "symbol": "imbu", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/IMBU.svg", - "color": "C3FD51", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://imbue-kusama.imbue.network", - "name": "Imbue Network node node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Imbue.svg", - "addressPrefix": 42 - }, - { - "disabled": false, - "chainId": "cceae7f3b9947cdb67369c026ef78efa5f34a08fe5808d373c04421ecf4f1aaf", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2124", - "name": "Amplitude", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid-amplitude-api.squid.tachi.soramitsu.co.jp/graphql" - } - }, - "assets": [ - { - "id": "b2e6c029-ae73-46f9-9660-51d7034ddc53", - "name": "amplitude", - "symbol": "ampe", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AMPE.svg", - "color": "7CE2A0", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://api-amplitude.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://rpc-amplitude.pendulumchain.tech", - "name": "PendulumChain node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Amplitude.svg", - "addressPrefix": 57 - }, - { - "disabled": true, - "chainId": "f0b8924b12e8108550d28870bc03f7b45a947e1b2b9abf81bfb0b89ecb60570e", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2046", - "name": "Darwinia2", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid-darwinia-api.squid.tachi.soramitsu.co.jp/graphql" - }, - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://darwinia-parachain.subscan.io/{type}/{value}" - } - ] - }, - "assets": [ - { - "id": "b861f610-cf2c-43ad-a660-f6b809a05062", - "name": "darwinia", - "symbol": "ring", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RING.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://rpc.darwinia.network", - "name": "Darwinia Network node" - }, - { - "url": "wss://darwinia-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://parachain-rpc.darwinia.network", - "name": "Darwinia Network 1 node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/darwinia.svg", - "addressPrefix": 18 - }, - { - "disabled": true, - "chainId": "f2584690455deda322214e97edfffaf4c1233b6e4625e39478496b3e2f5a44c5", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2052", - "name": "Kylin Network", - "ecosystem": "substrate", - "assets": [ - { - "id": "7512aeb7-7bdc-42dc-abe3-80ed764c80bd", - "name": "kylin network", - "symbol": "kyl", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KYL.svg", - "color": "AE4071", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://polkadot.kylin-node.co.uk", - "name": "Kylin Network node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kylin%20Network.svg", - "addressPrefix": 42 - }, - { - "disabled": false, - "chainId": "d4c0c08ca49dc7c680c3dac71a7c0703e5b222f4b6c03fe4c5219bb8f22c18dc", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "name": "Crust Shadow Parachain", - "ecosystem": "substrate", - "paraId": "2012", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-crust_shadow_parachain" - }, - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://shadow.subscan.io/{type}/{value}" - } - ] - }, - "assets": [ - { - "id": "d1e3be8c-880e-46fe-97e3-761c0a58aed1", - "name": "crust shadow", - "symbol": "csm", - "precision": 12, - "priceId": "crust-storage-market", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CSM_Crust_Shadow.svg", - "color": "F3AD56", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://rpc-shadow.crust.network", - "name": "Crust node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/crustshadow.svg", - "addressPrefix": 66 - }, - { - "disabled": true, - "chainId": "6e938c4a786f8df6f38d0c06f00a8573f1f7aabeebf48aee5157a93cc5fe3271", - "name": "Kusama (test)", - "ecosystem": "substrate", - "assets": [ - { - "id": "03561957-3383-4f9f-8033-1b2c36d88db6", - "name": "kusama", - "symbol": "unit", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "staking": "relaychain", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://ws.relaychain-node-1.k1.tst.fearless.soramitsu.co.jp", - "name": "SORA Kusama Test node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kusama.svg", - "addressPrefix": 2, - "options": [ - "poolStaking" - ] - }, - { - "disabled": true, - "chainId": "fd4d46e9a51e16babf791b94d6dbf771ed1d7de8a11b310aa98c847890fa9ff3", - "name": "Polkadot (test)", - "ecosystem": "substrate", - "assets": [ - { - "id": "405e7e40-a2f1-45a3-a32f-7f271b2819d2", - "name": "polkadot", - "symbol": "unit", - "precision": 10, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "staking": "relaychain", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://ws.relaychain-node-2.p1.tst.fearless.soramitsu.co.jp/", - "name": "SORA Polkadot Test node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polkadot.svg", - "addressPrefix": 2, - "options": [ - "poolStaking" - ] - }, - { - "disabled": true, - "chainId": "b34f6cd03a41f0fab38ba9fd5b11cce5f303633c46f39f0c6fdc7c3c602bafa9", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "name": "Snow Kusama", - "ecosystem": "substrate", - "assets": [ - { - "id": "e739d665-7af5-4e65-ab5f-93f54a5b70b3", - "name": "snow", - "symbol": "icz", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ICZ.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://snow-rpc.icenetwork.io", - "name": "Snow node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SNOW.svg", - "addressPrefix": 2207 - }, - { - "disabled": false, - "chainId": "3266816be9fa51b32cfea58d3e33ca77246bc9618595a4300e44c8856a8d8a17", - "rank": 100, - "name": "SORA test", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "sora", - "url": "https://api.subquery.network/sq/sora-xor/sora-staging" - }, - "pricing": { - "type": "sora", - "url": "https://api.subquery.network/sq/sora-xor/sora-staging" - }, - "staking": { - "type": "sora", - "url": "https://squid.subsquid.io/sora-stage/v/v5/graphql" - } - }, - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b1", - "symbol": "ROC" - } - ], - "availableDestinations": [ - { - "chainId": "6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e", - "assets": [ - { - "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b1", - "symbol": "ROC" - } - ] - } - ] - }, - "assets": [ - { - "id": "b5a44630-920e-43ee-809f-61890d0888b0", - "name": "sora", - "symbol": "xor", - "currencyId": "0x0200000000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", - "color": "EE2233", - "isUtility": true, - "type": "soraAsset", - "staking": "relaychain", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200000000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "0ecacd48-ffd4-4a2e-87e3-c5f72f9a9877", - "name": "sora validator", - "symbol": "val", - "currencyId": "0x0200040000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora-validator-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VAL.svg", - "color": "F3B966", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200040000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "87ba5538-34db-4d53-9104-25f42b0bb55b", - "name": "polkaswap", - "symbol": "pswap", - "currencyId": "0x0200050000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "polkaswap", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PSWAP.svg", - "color": "FF0066", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200050000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "038a7045-af00-466d-b72b-95485c4674b7", - "name": "sora synthetics", - "symbol": "xst", - "currencyId": "0x0200090000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora-synthetics", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XST.svg", - "color": "EE2233", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200090000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "c96e012c-0786-4980-9750-bae61de0aa19", - "name": "sora synthetic usd", - "symbol": "xstusd", - "currencyId": "0x0200080000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora-synthetic-usd", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XSTUSD.svg", - "color": "EE2233", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200080000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "7bcc178d-1ebe-46b8-88fb-79649828f21d", - "name": "demeter", - "symbol": "deo", - "currencyId": "0x00f2f4fda40a4bf1fc3769d156fa695532eec31e265d75068524462c0b80f674", - "precision": 18, - "priceId": "demeter", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DEO.svg", - "color": "54B198", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x00f2f4fda40a4bf1fc3769d156fa695532eec31e265d75068524462c0b80f674" - } - }, - { - "id": "79ba9571-6ea4-4790-8fda-d20ddbad4f33", - "name": "ceres", - "symbol": "ceres", - "currencyId": "0x008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440", - "precision": 18, - "priceId": "ceres", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CERES.svg", - "color": "243579", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440" - } - }, - { - "id": "38eae54b-723d-457c-8d45-4beab249612f", - "name": "noir token", - "symbol": "noir", - "currencyId": "0x0044aee0776cfb826434af8ef0f8e2c7e9e6644cfda0ae0f02c471b1eebc2483", - "precision": 18, - "priceId": "noir-phygital", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NOIR.svg", - "color": "A0A7FF", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x0044aee0776cfb826434af8ef0f8e2c7e9e6644cfda0ae0f02c471b1eebc2483" - } - }, - { - "id": "2565e418-d5bc-4318-99b5-53e893681518", - "name": "umitoken", - "symbol": "umi", - "currencyId": "0x003252667a82d2dd70fa046eea663eaec1f2e37c20879f113b880b04c5ebd805", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UMI.svg", - "color": "3C7EB2", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x003252667a82d2dd70fa046eea663eaec1f2e37c20879f113b880b04c5ebd805" - } - }, - { - "id": "9b040bf8-a852-4e10-aa14-d3793db27a95", - "name": "tether usd", - "symbol": "usdt", - "currencyId": "0x0083a6b3fbc6edae06f115c8953ddd7cbfba0b74579d6ea190f96853073b76f4", - "precision": 18, - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "type": "soraAsset" - }, - { - "id": "1b20dfcd-a40d-4850-a407-5a45f3bf4889", - "name": "binance usd", - "symbol": "busd", - "currencyId": "0x00567d096a736f33bf78cad7b01e33463923b9c933ee13ab7e3fb7b23f5f953a", - "precision": 18, - "priceId": "binance-usd", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", - "color": "F3BA2F", - "type": "soraAsset" - }, - { - "id": "5c017385-e702-47d2-8f3a-ac8146c2b9dd", - "name": "usd coin", - "symbol": "usdc", - "currencyId": "0x00ef6658f79d8b560f77b7b20a5d7822f5bc22539c7b4056128258e5829da517", - "precision": 18, - "priceId": "usd-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4", - "type": "soraAsset" - }, - { - "id": "db07f99c-0c76-483a-891f-86fbd028fdc5", - "name": "bokolo cash", - "symbol": "BCSI", - "currencyId": "0x00eacaea6599a04358fda986388ef0bb0c17a553ec819d5de2900c0af0862502", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BCSD.svg", - "color": "FFFFFF", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00eacaea6599a04358fda986388ef0bb0c17a553ec819d5de2900c0af0862502" - } - }, - { - "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b1", - "name": "rococo", - "symbol": "roc", - "precision": 18, - "currencyId": "0x00dc9b4341fde46c9ac80b623d0d43afd9ac205baabdc087cadaa06f92b309c7", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "type": "soraAsset" - }, - { - "id": "ada3b18e-1912-4f96-ad3b-4d0e1b1d1d0a", - "symbol": "tbcd", - "name": "sora tbc dollar", - "currencyId": "0x02000a0000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/TBCD.svg", - "color": "6D8954", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x02000a0000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "eface91d-b2a8-49d2-88e8-640586bda477", - "name": "polkadot", - "symbol": "dot", - "currencyId": "0x0003b1dbee890acfb1b3bc12d1bb3b4295f52755423f84d1751b2545cebf000b", - "precision": 18, - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "type": "soraAsset" - }, - { - "id": "191c31de-62b1-41e4-aad3-15a5be1b4cd4", - "name": "dai", - "symbol": "dai", - "currencyId": "0x0200060000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "F9AF1A", - "type": "soraAsset" - }, - { - "id": "3ab2c884-6c6e-4f92-b87a-a013c80210af", - "name": "ethereum", - "symbol": "eth", - "currencyId": "0x0200070000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "627EEA", - "type": "soraAsset" - } - ], - "nodes": [ - { - "url": "wss://ws.framenode-8.s5.stg1.sora2.soramitsu.co.jp", - "name": "Sora Stage #8" - }, - { - "url": "wss://ws.framenode-1.r0.dev.sora2.soramitsu.co.jp", - "name": "Sora Card Test Node #1" - }, - { - "url": "wss://ws.framenode-2.r0.dev.sora2.soramitsu.co.jp", - "name": "Sora Card Test Node #2" - }, - { - "url": "wss://ws.framenode-3.r0.dev.sora2.soramitsu.co.jp", - "name": "Sora Card Test Node #3" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", - "addressPrefix": 69, - "options": [ - "testnet", - "polkaswap", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", - "rank": 0, - "name": "SORA Mainnet", - "ecosystem": "substrate", - "externalApi": { - "staking": { - "type": "sora", - "url": "https://sora.squids.live/sora/graphql" - }, - "pricing": { - "type": "sora", - "url": "https://api.subquery.network/sq/sora-xor/sora-prod" - }, - "history": { - "type": "sora", - "url": "https://sora.squids.live/sora/graphql" - }, - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://sora.subscan.io/{type}/{value}" - } - ] - }, - "assets": [ - { - "id": "b774c386-5cce-454a-a845-1ec0381538ec", - "name": "sora", - "symbol": "xor", - "currencyId": "0x0200000000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", - "color": "EE2233", - "isUtility": true, - "type": "soraAsset", - "staking": "relaychain", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200000000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "24d0809e-0a4c-42ea-bdd8-dc7a518f389c", - "name": "sora validator", - "symbol": "val", - "currencyId": "0x0200040000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora-validator-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VAL.svg", - "color": "F3B966", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200040000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "37a999a2-5e90-4448-8b0e-98d06ac8f9d4", - "name": "polkaswap", - "symbol": "pswap", - "currencyId": "0x0200050000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "polkaswap", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PSWAP.svg", - "color": "FF0066", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200050000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "75a0bc9b-a1fb-446e-8781-621036bfd979", - "name": "sora synthetics", - "symbol": "xst", - "currencyId": "0x0200090000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora-synthetics", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XST.svg", - "color": "EE2233", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200090000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "217925d8-c529-4480-98e5-b8bf651129ef", - "name": "sora synthetic usd", - "symbol": "xstusd", - "currencyId": "0x0200080000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora-synthetic-usd", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XSTUSD.svg", - "color": "EE2233", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200080000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "5e3de486-789e-4e47-8f49-870852cfebb6", - "name": "demeter", - "symbol": "deo", - "currencyId": "0x00f2f4fda40a4bf1fc3769d156fa695532eec31e265d75068524462c0b80f674", - "precision": 18, - "priceId": "demeter", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DEO.svg", - "color": "54B198", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x00f2f4fda40a4bf1fc3769d156fa695532eec31e265d75068524462c0b80f674" - } - }, - { - "id": "8fe0cbf4-7ece-45f6-968b-5c1b77accff0", - "name": "ceres", - "symbol": "ceres", - "currencyId": "0x008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440", - "precision": 18, - "priceId": "ceres", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CERES.svg", - "color": "243579", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440" - } - }, - { - "id": "079f2a74-1440-440c-b826-6d85a7dd3a91", - "name": "noir token", - "symbol": "noir", - "currencyId": "0x0044aee0776cfb826434af8ef0f8e2c7e9e6644cfda0ae0f02c471b1eebc2483", - "precision": 18, - "priceId": "noir-phygital", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NOIR.svg", - "color": "A0A7FF", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x0044aee0776cfb826434af8ef0f8e2c7e9e6644cfda0ae0f02c471b1eebc2483" - } - }, - { - "id": "2de2b668-33cd-4e85-a501-4921481e618f", - "name": "umitoken", - "symbol": "umi", - "currencyId": "0x003252667a82d2dd70fa046eea663eaec1f2e37c20879f113b880b04c5ebd805", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UMI.svg", - "color": "3C7EB2", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x003252667a82d2dd70fa046eea663eaec1f2e37c20879f113b880b04c5ebd805" - } - }, - { - "id": "4c7b8da9-b297-4093-b8bc-28d477e7b5ad", - "name": "tether usd", - "symbol": "usdt", - "currencyId": "0x0083a6b3fbc6edae06f115c8953ddd7cbfba0b74579d6ea190f96853073b76f4", - "precision": 18, - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0083a6b3fbc6edae06f115c8953ddd7cbfba0b74579d6ea190f96853073b76f4" - } - }, - { - "id": "23c41bbb-2e1a-4d64-bbab-5080975ecc1c", - "name": "binance usd", - "symbol": "busd", - "currencyId": "0x00567d096a736f33bf78cad7b01e33463923b9c933ee13ab7e3fb7b23f5f953a", - "precision": 18, - "priceId": "binance-usd", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", - "color": "F3BA2F", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00567d096a736f33bf78cad7b01e33463923b9c933ee13ab7e3fb7b23f5f953a" - } - }, - { - "id": "c8ce20ed-8690-4b46-9b3d-872e325ae636", - "name": "usd coin", - "symbol": "usdc", - "currencyId": "0x00ef6658f79d8b560f77b7b20a5d7822f5bc22539c7b4056128258e5829da517", - "precision": 18, - "priceId": "usd-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00ef6658f79d8b560f77b7b20a5d7822f5bc22539c7b4056128258e5829da517" - } - }, - { - "id": "1e6f8ba3-5aeb-41d8-b80e-a44ce0f33716", - "name": "dai", - "symbol": "dai", - "currencyId": "0x0200060000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "F9AF1A", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200060000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "82f45df3-b6d8-43e7-a440-c0e73ab59785", - "name": "ethereum", - "symbol": "eth", - "currencyId": "0x0200070000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "627EEA", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200070000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "94e573f3-a9f3-4f7e-9244-8492288ca558", - "name": "soshiba", - "symbol": "soshiba", - "currencyId": "0x005aa73d7a4a3fdbe830c7d0ee26c09ba7f1db119da86d5b4dcb6609dac5ceb5", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/SHIB.svg", - "color": "FFA409", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x005aa73d7a4a3fdbe830c7d0ee26c09ba7f1db119da86d5b4dcb6609dac5ceb5" - } - }, - { - "id": "68a46965-94e8-4a03-af65-6237f83d482f", - "symbol": "tbcd", - "name": "sora tbc dollar", - "currencyId": "0x02000a0000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/TBCD.svg", - "color":"6D8954", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x02000a0000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "61f864b5-9fe0-4ba5-b5b6-c338ceaeee91", - "name": "hermes dao", - "symbol": "hmx", - "currencyId": "0x002d4e9e03f192cc33b128319a049f353db98fbf4d98f717fd0b7f66a0462142", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/HMX.svg", - "color":"FFFFFF", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x002d4e9e03f192cc33b128319a049f353db98fbf4d98f717fd0b7f66a0462142" - } - }, - { - "id": "a13169a1-32fa-4b44-aecb-c404c5f3cdbc", - "name": "bokolo cash", - "symbol": "BCSI", - "currencyId": "0x00eacaea6599a04358fda986388ef0bb0c17a553ec819d5de2900c0af0862502", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BCSD.svg", - "color": "FFFFFF", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00eacaea6599a04358fda986388ef0bb0c17a553ec819d5de2900c0af0862502" - } - }, - { - "id": "5416b261-a759-4ba6-bc83-ea79a83c5101", - "name": "kusama", - "symbol": "ksm", - "currencyId": "0x00117b0fa73c4672e03a7d9d774e3b3f91beb893e93d9a8d0430295f44225db8", - "precision": 18, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00117b0fa73c4672e03a7d9d774e3b3f91beb893e93d9a8d0430295f44225db8" - } - }, - { - "id": "cd092a5a-4eb6-4318-9f11-4bf8454d67a2", - "name": "polkadot", - "symbol": "dot", - "currencyId": "0x0003b1dbee890acfb1b3bc12d1bb3b4295f52755423f84d1751b2545cebf000b", - "precision": 18, - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0003b1dbee890acfb1b3bc12d1bb3b4295f52755423f84d1751b2545cebf000b" - } - }, - { - "id": "fb88fa55-b8c8-4ff1-afa8-f72a86a238a4", - "name": "acala", - "symbol": "aca", - "currencyId": "0x001ddbe1a880031da72f7ea421260bec635fa7d1aa72593d5412795408b6b2ba", - "precision": 18, - "priceId": "acala", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", - "color": "FFFFFF", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x001ddbe1a880031da72f7ea421260bec635fa7d1aa72593d5412795408b6b2ba" - } - }, - { - "id": "acc32ee0-8fdc-4743-91e1-f70cc4f3069b", - "name": "astar", - "symbol": "astr", - "currencyId": "0x009dd037fcb32f4fe17c513abd4641a2ece844d106e30788124f0c0acc6e748e", - "precision": 18, - "priceId": "astar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", - "color": "0AE2FF", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x009dd037fcb32f4fe17c513abd4641a2ece844d106e30788124f0c0acc6e748e" - } - }, - { - "id": "0ef3afdc-cdd3-47cc-bd52-817c54ae65b5", - "name": "liberland merit", - "symbol": "llm", - "currencyId": "0x00073edd278e1bd6a7f9d0b27d4f3e93b73c8f0832b58a4df13c69611a99f156", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLM.svg", - "color": "EFB900", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00073edd278e1bd6a7f9d0b27d4f3e93b73c8f0832b58a4df13c69611a99f156" - } - }, - { - "id": "1c3b4fcb-5a5f-4319-9dce-d178006eb9bf", - "name": "liberland dollar", - "symbol": "lld", - "currencyId": "0x00513be65493a7fc3e2128d4230061a530acf40478a4affa20bbba27a310673e", - "precision": 18, - "priceId": "liberland-lld", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLD.svg", - "color": "00437F", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00513be65493a7fc3e2128d4230061a530acf40478a4affa20bbba27a310673e" - } - }, - { - "id": "a543b9a2-f85a-4974-92fc-435d6bc418e5", - "name": "toncoin", - "symbol": "toncoin", - "currencyId": "0x00e8c8923623335128807857dfa38f9212e9803394a2c976e97245d7063bbe10", - "precision": 18, - "priceId": "the-open-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg", - "color": "0098EA", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00e8c8923623335128807857dfa38f9212e9803394a2c976e97245d7063bbe10" - } - }, - { - "id": "59a87850-0194-4040-b92e-b869ee3dd3fa", - "name": "kensetsu token", - "symbol": "ken", - "currencyId": "0x02000b0000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KEN.svg", - "color": "00004E", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x02000b0000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "ffc85c62-c970-4cb4-900c-f7d4831c3695", - "name": "kensetsu usd", - "symbol": "kusd", - "currencyId": "0x02000c0000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KUSD.svg", - "color": "BF0A30", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x02000c0000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "46e8a947-ade7-4c87-83b5-d724a35da919", - "name": "apollo", - "symbol": "apollo", - "currencyId": "0x00efe45135018136733be626b380a87ae663ccf6784a25fe9d9d2be64acecb9d", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/APOLLO.svg", - "color": "EB0EAD", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00efe45135018136733be626b380a87ae663ccf6784a25fe9d9d2be64acecb9d" - } - } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "5416b261-a759-4ba6-bc83-ea79a83c5101", - "symbol": "KSM" - }, - { - "id": "cd092a5a-4eb6-4318-9f11-4bf8454d67a2", - "symbol": "DOT" - }, - { - "id": "fb88fa55-b8c8-4ff1-afa8-f72a86a238a4", - "symbol": "ACA" - }, - { - "id": "a6b83d39-a488-4b34-8352-280705a792ea", - "symbol": "LLD" - }, - { - "id": "b774c386-5cce-454a-a845-1ec0381538ec", - "symbol": "XOR" - }, - { - "id": "0ef3afdc-cdd3-47cc-bd52-817c54ae65b5", - "symbol": "LLM" - }, - { - "id": "acc32ee0-8fdc-4743-91e1-f70cc4f3069b", - "symbol": "ASTR" - } - ], - "availableDestinations": [ - { - "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "assets": [ - { - "id": "5416b261-a759-4ba6-bc83-ea79a83c5101", - "symbol": "KSM" - } - ] - }, - { - "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "assets": [ - { - "id": "cd092a5a-4eb6-4318-9f11-4bf8454d67a2", - "symbol": "DOT", - "minAmount": "1100000000000000000" - } - ] - }, - { - "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", - "assets": [ - { - "id": "fb88fa55-b8c8-4ff1-afa8-f72a86a238a4", - "symbol": "ACA", - "minAmount": "1000000000000000000" - } - ] - }, - { - "chainId": "6bd89e052d67a45bb60a9a23e8581053d5e0d619f15cb9865946937e690c42d6", - "assets": [ - { - "id": "a6b83d39-a488-4b34-8352-280705a792ea", - "symbol": "LLD", - "minAmount": "1000000000000000000" - }, - { - "id": "b774c386-5cce-454a-a845-1ec0381538ec", - "symbol": "XOR" - }, - { - "id": "0ef3afdc-cdd3-47cc-bd52-817c54ae65b5", - "symbol": "LLM" - } - ] - }, - { - "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", - "assets": [ - { - "id": "acc32ee0-8fdc-4743-91e1-f70cc4f3069b", - "symbol": "ASTR" - } - ] - } - ] - }, - "nodes": [ - { - "url": "wss://ws.mof.sora.org", - "name": "SORA Parliament Ministry of Finance Node" - }, - { - "url": "wss://mof2.sora.org", - "name": "SORA Parliament Ministry of Finance Node" - }, - { - "url": "wss://mof3.sora.org", - "name": "SORA Parliament Ministry of Finance Node" - }, - { - "url": "wss://sora.api.onfinality.io/public-ws", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", - "addressPrefix": 69, - "options": [ - "polkaswap", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "70255b4d28de0fc4e1a193d7e175ad1ccef431598211c55538f1018651a0344e", - "name": "Aleph Zero", - "ecosystem": "substrate", - "assets": [ - { - "id": "4ea52d6e-a433-4f11-a811-4634068c79a2", - "name": "aleph zero", - "symbol": "azero", - "precision": 12, - "priceId": "aleph-zero", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AZERO.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://api-aleph-zero-mainnet.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://ws.azero.dev", - "name": "Aleph Zero Foundation node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/white/Aleph%20Zero.svg", - "addressPrefix": 42 - }, - { - "disabled": false, - "chainId": "00dcb981df86429de8bbacf9803401f09485366c44efbf53af9ecfab03adc7e5", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "1002", - "name": "Kusama BridgeHub", - "ecosystem": "substrate", - "assets": [ - { - "id": "f0f8e709-20f3-44e6-a6c3-89e9e82f78ed", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://api-kusama-bridge-hub.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://kusama-bridge-hub-rpc.polkadot.io", - "name": "Parity node" - }, - { - "url": "wss://sys.ibp.network/bridgehub-kusama", - "name": "IBP-GeoDNS1 node" - }, - { - "url": "wss://sys.dotters.network/bridgehub-kusama", - "name": "IBP-GeoDNS2 node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bridgehub.svg", - "addressPrefix": 2 - }, - { - "disabled": false, - "chainId": "6f0f071506de39058fe9a95bbca983ac0e9c5da3443909574e95d52eb078d348", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2222", - "name": "Ipci", - "ecosystem": "substrate", - "assets": [ - { - "id": "b20185e9-2f5c-4c3d-bd5a-c751cd76d439", - "name": "dao ipci", - "symbol": "mito", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MITO.svg", - "color": "0BF0A6", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://kusama.rpc.ipci.io", - "name": "Airalab node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/DAOIPCI.svg", - "addressPrefix": 32 - }, - { - "disabled": false, - "chainId": "cdedc8eadbfa209d3f207bba541e57c3c58a667b05a2e1d1e86353c9000758da", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2015", - "name": "Integritee Network (Kusama)", - "ecosystem": "substrate", - "externalApi": { - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://integritee.subscan.io/{type}/{value}" - } - ] - }, - "assets": [ - { - "id": "c8b67e07-8b3b-4b92-b23d-23b5bb1f8f42", - "name": "integritee", - "symbol": "teer", - "precision": 12, - "priceId": "integritee", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TEER.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://kusama.api.integritee.network", - "name": "Integritee node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/integritee.svg", - "addressPrefix": 13 - }, - { - "disabled": false, - "chainId": "2991d4125ac465d64c4c0b915fedd7168b5961b7676480636e3747f1ad64cfb9", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2236", - "name": "Subzero", - "ecosystem": "substrate", - "assets": [ - { - "id": "3a1cc15e-903b-4102-9384-364c00e67283", - "name": "zero", - "symbol": "zero", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZERO.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://rpc-1.kusama.node.zero.io", - "name": "ZeroNetwork node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Subzero.svg", - "addressPrefix": 25 - }, - { - "disabled": false, - "chainId": "e358eb1d11b31255a286c12e44fe6780b7edb171d657905a97e39f71d9c6c3ee", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2051", - "name": "Ajuna Polkadot", - "ecosystem": "substrate", - "assets": [ - { - "id": "b0afcb19-5d4c-442c-ac0f-53c64b1ea0ae", - "name": "ajuna network", - "symbol": "ajun", - "precision": 12, - "priceId": "ajuna-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BAJU.svg", - "color": "69A6DA", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://rpc-parachain.ajuna.network", - "name": "AjunaNetwork node" - }, - { - "url": "wss://ajuna.public.curie.radiumblock.co/ws", - "name": "RadiumBlock node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bajun.svg", - "addressPrefix": 1328 - }, - { - "disabled": false, - "chainId": "c14597baeccb232d662770d2d50ae832ca8c3192693d2b0814e6433f2888ddd6", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2048", - "name": "Bitgreen", - "ecosystem": "substrate", - "assets": [ - { - "id": "26c62511-6300-41ef-b760-c94dd6b0f8a5", - "name": "bitgreen", - "symbol": "bbb", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BBB.svg", - "color": "C0FF00", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://mainnet.bitgreen.org", - "name": "Bitgreen node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bitgreen.svg", - "addressPrefix": 42 - }, - { - "disabled": false, - "chainId": "4319cc49ee79495b57a1fec4d2bd43f59052dcc690276de566c2691d6df4f7b8", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2008", - "name": "Crust", - "ecosystem": "substrate", - "assets": [ - { - "id": "07ad91ea-1cb6-47dd-bc57-0e884727c5bf", - "name": "crust network", - "symbol": "cru", - "precision": 12, - "priceId": "crust-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRU.svg", - "color": "FA8C16", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://crust-parachain.crustapps.net", - "name": "Crust node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Crust.svg", - "addressPrefix": 88 - }, - { - "disabled": false, - "chainId": "4a587bf17a404e3572747add7aab7bbe56e805a5479c6c436f07f36fcc8d3ae1", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2091", - "name": "Frequency", - "ecosystem": "substrate", - "assets": [ - { - "id": "598af8e7-c0ad-4785-80cf-669705c93dd9", - "name": "frequency", - "symbol": "frqcy", - "precision": 8, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/FRQCY.svg", - "color": "4473EC", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://api-frequency.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://0.rpc.frequency.xyz", - "name": "Frequency 0 node" - }, - { - "url": "wss://1.rpc.frequency.xyz", - "name": "Frequency 1 node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Frequency.svg", - "addressPrefix": 90 - }, - { - "disabled": true, - "chainId": "7838c3c774e887c0a53bcba9e64f702361a1a852d5550b86b58cd73827fa1e1e", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2007", - "name": "Kapex", - "ecosystem": "substrate", - "assets": [ - { - "id": "a99dd750-0c15-49df-a86f-6caa577614bc", - "name": "kapex parachain", - "symbol": "kpx", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KPX.svg", - "color": "306EB6", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://kapex-rpc.dwellir.com", - "name": "Dwellir node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kapex%20(Totem).svg", - "addressPrefix": 2007 - }, - { - "disabled": false, - "chainId": "5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "rank": 10, - "paraId": "2094", - "name": "Pendulum", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid-pendulum-api.squid.tachi.soramitsu.co.jp/graphql" - } + { + "url": "wss://ws.unique.network", + "name": "Geo Load Balancer node" }, - "assets": [ - { - "id": "ebf2822f-2dd4-4f59-aeb3-ae7defa53932", - "name": "pendulum", - "symbol": "pen", - "precision": 12, - "priceId": "pendulum-chain", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PEN.svg", - "color": "8D809E", - "isUtility": true, - "type": "normal" - }, - { - "id": "bc55b3f0-2b34-4561-aeb6-bd4ca9c88b7e", - "type": "xcm", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "1", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "existentialDeposit": "10000" - } - ], - "nodes": [ - { - "url": "wss://api-pendulum.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://rpc-pendulum.prd.pendulumchain.tech", - "name": "PendulumChain node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Pendulum.svg", - "addressPrefix": 56, - "options": [ - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "6859c81ca95ef624c9dfe4dc6e3381c33e5d6509e35e147092bfbc780f777c4e", - "name": "Ternoa Mainnet", - "ecosystem": "substrate", - "assets": [ - { - "id": "2e447cea-6fe1-4b08-8a97-94cc2ee622a6", - "name": "ternoa", - "symbol": "caps", - "precision": 18, - "priceId": "coin-capsule", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CAPS.svg", - "color": "FF002B", - "isUtility": true, - "type": "normal", - "staking": "relaychain" - } - ], - "nodes": [ - { - "url": "wss://mainnet.ternoa.network", - "name": "CapsuleCorp node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Ternoa.svg", - "addressPrefix": 42 - }, - { - "disabled": true, - "chainId": "6d8d9f145c2177fa83512492cdd80a71e29f22473f4a8943a6292149ac319fb9", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2011", - "name": "SORA Kusama parachain", - "ecosystem": "substrate", - "assets": [ - { - "id": "2df458e8-c4a9-4026-986f-8962a36fe604", - "name": "sora", - "symbol": "xor", - "precision": 12, - "priceId": "sora", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", - "color": "EE2233", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://ws.parachain-collator-1.c1.sora2.soramitsu.co.jp", - "name": "Soramitsu node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", - "addressPrefix": 420 - }, - { - "disabled": true, - "chainId": "e92d165ad41e41e215d09713788173aecfdbe34d3bed29409d33a2ef03980738", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2025", - "name": "SORA Polkadot parachain", - "ecosystem": "substrate", - "assets": [ - { - "id": "a7c696d7-42ce-4ed6-a036-4f0f76386c49", - "name": "sora", - "symbol": "xor", - "precision": 18, - "priceId": "sora", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", - "color": "EE2233", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://ws.parachain-collator-1.pc1.sora2.soramitsu.co.jp", - "name": "Soramitsu node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", - "addressPrefix": 81 - }, - { - "disabled": false, - "chainId": "1", - "rank": 1, - "name": "Ethereum", - "ecosystem": "ethereum", - "externalApi": { - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://etherscan.io/{type}/{value}" - } - ], - "history": { - "type": "etherscan", - "url": "https://api.etherscan.io/api" - } - }, - "assets": [ - { - "isUtility": true, - "id": "c2a6c062-d511-4bde-9ce6-ea775d2a302c", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "FF0066", - "ethereumType": "normal", - "purchaseProviders": [ - "moonpay", - "ramp" - ], - "priceProvider": { - "type": "chainlink", - "id": "0x639fe6ab55c921f74e7fac1ee960c0b6293ba612", - "precision": 8 - } - }, - { - "isUtility": false, - "id": "0x6B175474E89094C44Da98b954EedeAC495271d0F", - "name": "dai stablecoin", - "symbol": "dai", - "precision": 18, - "priceId": "dai", - "purchaseProviders": [ - "ramp" - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "FF0066", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xdac17f958d2ee523a2206206994597c13d831ec7", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "priceId": "tether", - "purchaseProviders": [ - "moonpay", - "ramp" - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", - "name": "usd coin", - "symbol": "usdc", - "precision": 6, - "priceId": "usd-coin", - "purchaseProviders": [ - "moonpay", - "ramp" - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9", - "name": "aave", - "symbol": "aave", - "precision": 18, - "priceId": "aave", - "purchaseProviders": [ - "moonpay" - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AAVE.svg", - "color": "B6509E", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xD533a949740bb3306d119CC777fa900bA034cd52", - "name": "curve dao", - "symbol": "crv", - "precision": 18, - "priceId": "curve-dao-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRV.svg", - "color": "B6509E", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984", - "name": "uniswap", - "symbol": "uni", - "precision": 18, - "priceId": "uniswap", - "purchaseProviders": [ - "moonpay" - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UNI.svg", - "color": "FF007A", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x514910771AF9Ca656af840dff83E8264EcF986CA", - "name": "chainlink", - "symbol": "link", - "precision": 18, - "priceId": "chainlink", - "purchaseProviders": [ - "moonpay", - "ramp" - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LINK.svg", - "color": "FFFFFF", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x111111111117dC0aa78b770fA6A738034120C302", - "name": "1inch", - "symbol": "1inch", - "precision": 18, - "priceId": "1inch", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/1INCH.svg", - "color": "FFFFFF", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xB8c77482e45F1F44dE1745F52C74426C631bDD52", - "name": "bnb", - "symbol": "bnb", - "precision": 18, - "priceId": "binancecoin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", - "color": "F3BA2F", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0", - "name": "polygon", - "symbol": "matic", - "precision": 18, - "priceId": "matic-network", - "purchaseProviders": [ - "moonpay" - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", - "color": "8247E5", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x40FD72257597aA14C7231A7B1aaa29Fce868F677", - "name": "sora", - "symbol": "xor", - "precision": 18, - "priceId": "sora", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", - "color": "EE2233", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xe88f8313e61A97cEc1871EE37fBbe2a8bf3ed1E4", - "name": "sora validator", - "symbol": "val", - "precision": 18, - "priceId": "sora-validator-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VAL.svg", - "color": "F3B966", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x519C1001D550C0a1DaE7d1fC220f7d14c2A521BB", - "name": "polkaswap", - "symbol": "pswap", - "precision": 18, - "priceId": "polkaswap", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PSWAP.svg", - "color": "FF0066", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x2e7B0d4F9B2EaF782eD3D160e3a0a4b1a7930aDA", - "name": "ceres", - "symbol": "ceres", - "precision": 18, - "priceId": "ceres", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CERES.svg", - "color": "243579", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x32a7C02e79c4ea1008dD6564b35F131428673c41", - "name": "crust network", - "symbol": "cru", - "precision": 18, - "priceId": "crust-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRU.svg", - "color": "FA8C16", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x3845badAde8e6dFF049820680d1F14bD3903a5d0", - "name": "the sandbox", - "symbol": "sand", - "precision": 18, - "priceId": "sand", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/SAND.svg", - "color": "4AA4EB", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x236501327e701692a281934230AF0b6BE8Df3353", - "name": "fluence", - "symbol": "flt", - "precision": 18, - "priceId": "fluence-2", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/FLT.svg", - "color": "FFFFFF", - "ethereumType": "erc20" - } - ], - "nodes": [ - { - "url": "https://eth-mainnet.blastapi.io/", - "name": "Blast https" - }, - { - "url": "https://ethereum.publicnode.com", - "name": "Public https" - }, - { - "url": "https://nodes.mewapi.io/rpc/eth", - "name": "MEW https" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Ethereum.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "nft", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "5", - "rank": 101, - "name": "Ethereum Goerli", - "ecosystem": "ethereum", - "externalApi": { - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://goerli.etherscan.io/{type}/{value}" - } - ], - "history": { - "type": "etherscan", - "url": "https://api-goerli.etherscan.io/api" - } + { + "url": "wss://eu-ws.unique.network", + "name": "Unique Europe node" }, - "assets": [ - { - "isUtility": true, - "id": "a31e35a9-5026-4816-9b8b-08029627b256", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "FF0066", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0x11fE4B6AE13d2a6055C8D9cF65c55bac32B5d844", - "name": "dai stablecoin", - "symbol": "dai", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "FF0066", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x07865c6e87b9f70255377e024ace6630c1eaa37f", - "name": "usdc stablecoin", - "symbol": "usdc", - "precision": 6, - "priceId": "usd-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4", - "ethereumType": "erc20" - } - ], - "nodes": [ + { + "url": "wss://asia-ws.unique.network", + "name": "Unique Asia node" + }, + { + "url": "wss://us-ws.unique.network", + "name": "Unique America node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/unique.svg", + "addressPrefix": 7391 + }, + { + "disabled": false, + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2030", + "name": "Bifrost Polkadot", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-bifrostpolkadot-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ { - "url": "https://eth-goerli.blastapi.io/", - "name": "Blast https" + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://bifrost.subscan.io/{type}/{value}" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/ETH.svg", - "addressPrefix": 0, - "options": [ - "testnet", - "ethereum", - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "56", - "rank": 2, - "name": "BNB Smart Chain", - "ecosystem": "ethereum", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://api.bscscan.com/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://bscscan.com/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "6e43f1b7-1ec3-48a7-8ecd-8d680578d2b8", - "name": "BNB", - "symbol": "BNB", - "precision": 18, - "priceId": "binancecoin", - "purchaseProviders": [ - "moonpay", - "ramp" - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", - "color": "FF0066", - "ethereumType": "normal", - "priceProvider": { - "type": "chainlink", - "id": "0x6970460aabF80C5BE983C6b74e5D06dEDCA95D4A", - "precision": 8 - } - }, - { - "isUtility": false, - "id": "0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3", - "name": "DAI", - "symbol": "DAI", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "FF0066", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x2170Ed0880ac9A755fd29B2688956BD959F933F8", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "FF0066", - "ethereumType": "bep20" - }, - { - "isUtility": false, - "id": "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d", - "name": "usd coin", - "symbol": "usdc", - "precision": 18, - "priceId": "usd-coin", - "purchaseProviders": [ - "moonpay" - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4", - "ethereumType": "bep20" - }, - { - "isUtility": false, - "id": "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56", - "name": "binance usd", - "symbol": "busd", - "precision": 18, - "priceId": "binance-usd", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", - "color": "F3BA2F", - "ethereumType": "bep20" - }, + "assets": [ + { + "id": "dc9e23e8-f4bf-4864-9f2c-c2fbd4b03886", + "name": "bifrost native coin", + "symbol": "bnc", + "precision": 12, + "priceId": "bifrost-native-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + }, + { + "id": "fd62d09e-cfae-44f8-81a0-bf99732643fc", + "type": "token2", + "currencyId": "0", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066" + }, + { + "id": "9ff3dbb1-5986-44b9-b247-db82ae3584a1", + "type": "token2", + "currencyId": "1", + "name": "moonbeam", + "symbol": "glmr", + "precision": 18, + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF" + }, + { + "id": "8dc39b21-04c9-4d1d-b9ec-8ea111052e77", + "type": "token2", + "currencyId": "2", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + } + ], + "nodes": [ + { + "url": "wss://api-bifrost-polkadot.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://hk.p.bifrost-rpc.liebi.com/ws", + "name": "Liebi node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bifrost.svg", + "addressPrefix": 6 + }, + { + "disabled": false, + "chainId": "2fc8bb6ed7c0051bdcf4866c322ed32b6276572713607e3297ccf411b8f14aa9", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2013", + "name": "Litentry", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-litentry-api.squid.tachi.soramitsu.co.jp/graphql" + } + }, + "assets": [ + { + "id": "10de552c-20cb-4a86-9bf8-cf5827ca2f71", + "name": "litentry", + "symbol": "lit", + "precision": 18, + "priceId": "litentry", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LIT_DOT.svg", + "color": "02C86A", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-litentry.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.litentry-parachain.litentry.io", + "name": "Litentry node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Litentry.svg", + "addressPrefix": 31 + }, + { + "disabled": false, + "chainId": "1bb969d85965e4bb5a651abbedf21a54b6b31a21f66b5401cc3f1e286268d736", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2035", + "name": "Phala", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-phala-api.squid.tachi.soramitsu.co.jp/graphql" + } + }, + "assets": [ + { + "id": "50add3d2-baa6-4bf3-9995-e6532ad51726", + "name": "phala", + "symbol": "pha", + "precision": 12, + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-phala.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://api.phala.network/ws", + "name": "Phala node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/phala.svg", + "addressPrefix": 30 + }, + { + "disabled": false, + "chainId": "daab8df776eb52ec604a5df5d388bb62a050a0aaec4556a64265b9d42755552d", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2019", + "name": "Composable Finance", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-composable-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ { - "isUtility": false, - "id": "0x40af3827F39D0EAcBF4A168f8D4ee67c121D11c9", - "name": "trueusd", - "symbol": "tusd", - "precision": 18, - "priceId": "true-usd", - "purchaseProviders": [ - "moonpay" + "type": "subscan", + "types": [ + "extrinsic", + "account" ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUSD.svg", - "color": "005ADD", - "ethereumType": "bep20" - }, - { - "isUtility": false, - "id": "0xCC42724C6683B7E57334c4E856f4c9965ED682bD", - "name": "polygon", - "symbol": "matic", - "precision": 18, - "priceId": "matic-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", - "color": "8247E5", - "ethereumType": "bep20" - }, - { - "isUtility": false, - "id": "0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82", - "name": "pancakeswap", - "symbol": "cake", - "precision": 18, - "priceId": "pancakeswap-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CAKE.svg", - "color": "D1884F", - "ethereumType": "bep20" - }, - { - "isUtility": false, - "id": "0x965F527D9159dCe6288a2219DB51fc6Eef120dD1", - "name": "biswap", - "symbol": "bsw", - "precision": 18, - "priceId": "biswap", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BSW.svg", - "color": "E42648", - "ethereumType": "bep20" - }, - { - "isUtility": false, - "id": "0xa260E12d2B924cb899AE80BB58123ac3fEE1E2F0", - "name": "hooked protocol", - "symbol": "hook", - "precision": 18, - "priceId": "hooked-protocol", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HOOK.svg", - "color": "048EC8", - "ethereumType": "bep20" - }, - { - "isUtility": false, - "id": "0xcF6BB5389c92Bdda8a3747Ddb454cB7a64626C63", - "name": "venus", - "symbol": "xvs", - "precision": 18, - "priceId": "venus", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XVS.svg", - "color": "048EC8", - "ethereumType": "bep20" - } - ], - "nodes": [ - { - "url": "https://bsc.publicnode.com", - "name": "Public https" - }, - { - "url": "https://bsc-mainnet.blastapi.io/", - "name": "Blast https" - }, - { - "url": "https://bsc-dataseed1.ninicoin.io/", - "name": "Ninicoin" - }, - { - "url": "https://bsc.nodereal.io/", - "name": "Nodereal" + "url": "https://composable.subscan.io/{type}/{value}" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/bnbchain.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "97", - "rank": 102, - "name": "BNB Smart Chain Testnet", - "ecosystem": "ethereum", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://api-testnet.bscscan.com/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://testnet.bscscan.com/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "49e67f26-e01b-4aeb-b741-f0bd727c51e4", - "name": "tBNB", - "symbol": "tBNB", - "precision": 18, - "priceId": "binancecoin", - "color": "FF0066", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0xEC5dCb5Dbf4B114C9d0F65BcCAb49EC54F6A0867", - "name": "DAI", - "symbol": "DAI", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "FF0066", - "ethereumType": "bep20" - } - ], - "nodes": [ - { - "url": "https://bsc-testnet.blastapi.io/", - "name": "Blast https" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/bnbchain.svg", - "addressPrefix": 0, - "options": [ - "testnet", - "ethereum", - "utilityFeePayment" - ] + "assets": [ + { + "id": "7f429a3f-4666-40a2-a506-58bfe01504c4", + "name": "composable finance", + "symbol": "layr", + "precision": 12, + "priceId": "composable-finance-layr", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LAYR.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-composable.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.composable.finance", + "name": "Composable node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/composable.svg", + "addressPrefix": 49 + }, + { + "disabled": false, + "chainId": "35a06bfec2edf0ff4be89a6428ccd9ff5bd0167d618c5a0d4341f9600a458d14", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2119", + "name": "Bajun Kusama", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-bajun-api.squid.tachi.soramitsu.co.jp/graphql" + } }, - { - "disabled": false, - "chainId": "11155111", - "name": "Sepolia", - "ecosystem": "ethereum", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://api-sepolia.etherscan.io/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://sepolia.etherscan.io/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "c2a6c062-d511-4bde-9ce6-ea775d2a302s", - "name": "sepolia eth", - "symbol": "seth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "FF0066", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0x7AF17A48a6336F7dc1beF9D485139f7B6f4FB5C8", - "name": "dai stablecoin", - "symbol": "dai", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "FF0066", - "ethereumType": "erc20" - } - ], - "nodes": [ - { - "url": "https://eth-sepolia.blastapi.io/", - "name": "Blast https" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "addressPrefix": 0, - "options": [ - "testnet", - "ethereum", - "utilityFeePayment", - "nft" - ] + "assets": [ + { + "id": "cbf84703-ba1d-4a39-ab5e-424756c91422", + "name": "bajun network", + "symbol": "baju", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BAJU.svg", + "color": "69A6DA", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc-parachain.bajun.network", + "name": "AjunaNetwork node" + }, + { + "url": "wss://bajun.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bajun.svg", + "addressPrefix": 1337 + }, + { + "disabled": false, + "chainId": "feb426ca713f0f46c96465b8f039890370cf6bfd687c9076ea2843f58a6ae8a7", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2113", + "name": "Kabocha", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-kabocha-api.squid.tachi.soramitsu.co.jp/graphql" + } }, - { - "disabled": false, - "chainId": "137", - "rank": 3, - "name": "Polygon", - "ecosystem": "ethereum", - "externalApi": { - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://polygonscan.com/{type}/{value}" - } - ], - "history": { - "type": "etherscan", - "url": "https://api.polygonscan.com/api" - } + "assets": [ + { + "id": "898eb0a1-ede6-437a-97b7-e92407db985f", + "name": "kabocha", + "symbol": "kab", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAB.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kabocha.jelliedowl.com", + "name": "JelliedOwl node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kabocha.svg", + "addressPrefix": 27 + }, + { + "disabled": true, + "chainId": "52149c30c1eb11460dce6c08b73df8d53bb93b4a15d0a2e7fd5dafe86a73c0da", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2107", + "name": "KICO", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/KICO-x-Fearless-Wallet" + } + }, + "assets": [ + { + "id": "3a11badb-fe19-4cf4-9651-4b635a49bb7e", + "name": "kico", + "symbol": "kico", + "precision": 14, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KICO.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc.kico.dico.io", + "name": "DICO Foundation node" }, - "assets": [ - { - "isUtility": true, - "id": "0x0000000000000000000000000000000000001010", - "name": "polygon", - "symbol": "matic", - "precision": 18, - "priceId": "matic-network", - "purchaseProviders": [ - "moonpay", - "ramp" - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", - "color": "FF0066", - "ethereumType": "normal", - "priceProvider": { - "type": "chainlink", - "id": "0x52099d4523531f678dfc568a7b1e5038aadce1d6", - "precision": 8 - } - }, - { - "isUtility": false, - "id": "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619", - "name": "weth", - "symbol": "weth", - "precision": 18, - "priceId": "weth", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/WETH.svg", - "color": "FFFFFF", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", - "name": "usd coin", - "symbol": "usdc", - "precision": 6, - "priceId": "usd-coin", - "purchaseProviders": [ - "moonpay", - "ramp" - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xc2132D05D31c914a87C6611C10748AEb04B58e8F", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "priceId": "tether", - "purchaseProviders": [ - "moonpay", - "ramp" - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x3BA4c387f786bFEE076A58914F5Bd38d668B42c3", - "name": "bnb", - "symbol": "bnb", - "precision": 18, - "priceId": "binancecoin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", - "color": "F3BA2F", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xdAb529f40E671A1D4bF91361c21bf9f0C9712ab7", - "name": "binance usd", - "symbol": "busd", - "precision": 18, - "priceId": "binance-usd", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", - "color": "F3BA2F", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063", - "name": "dai", - "symbol": "dai", - "precision": 18, - "priceId": "dai", - "purchaseProviders": [ - "ramp" + { + "url": "wss://rpc.api.kico.dico.io", + "name": "DICO Foundation 2 node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/KICO.svg", + "addressPrefix": 42 + }, + { + "disabled": true, + "chainId": "d611f22d291c5b7b69f1e105cca03352984c344c4421977efaa4cbdd1834e2aa", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2110", + "name": "Mangata Kusama Mainnet", + "ecosystem": "substrate", + "assets": [ + { + "id": "27ccf12f-3ae0-4c5e-b337-ee43b7c23928", + "name": "mangata x", + "symbol": "mgx", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MGX.svg", + "color": "10C5C5", + "isUtility": true, + "type": "normal" + }, + { + "id": "f63730eb-9fe2-41e9-9ec3-3cc4e6f02d0a", + "type": "ormlChain", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "4", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + }, + { + "id": "459f852b-665c-4743-8b2c-5bc5fc6abdda", + "type": "ormlChain", + "name": "bifrost native coin", + "symbol": "bnc", + "precision": 12, + "currencyId": "14", + "priceId": "bifrost-native-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", + "color": "FFFFFF" + }, + { + "id": "8ef9ca57-f2e4-4edb-9365-2805c7143537", + "type": "ormlChain", + "name": "voucher ksm", + "symbol": "vksm", + "precision": 12, + "currencyId": "15", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VKSM.svg", + "color": "FFFFFF" + }, + { + "id": "31aef057-d42a-419c-b0c4-cd61dc7e96c5", + "type": "ormlChain", + "name": "zenlink network", + "symbol": "zlk", + "precision": 18, + "currencyId": "26", + "priceId": "zenlink-network-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZLK.svg", + "color": "FFFFFF" + }, + { + "id": "3b46e22a-f819-4b2b-9dca-23dec1b66f82", + "type": "ormlChain", + "name": "rmrk", + "symbol": "rmrk", + "precision": 10, + "currencyId": "31", + "priceId": "rmrk", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", + "color": "392B73" + }, + { + "id": "2c28b884-dcbe-4653-91d2-934beefe4f2c", + "type": "ormlChain", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "30", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + }, + { + "id": "a4268819-dd67-45ba-a8f4-32277e3817b1", + "type": "ormlChain", + "name": "turing token", + "symbol": "tur", + "precision": 10, + "currencyId": "7", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUR.svg", + "color": "5DCBD0" + } + ], + "nodes": [ + { + "url": "wss://prod-kusama-collator-01.mangatafinance.cloud", + "name": "Mangata node" + }, + { + "url": "wss://kusama-archive.mangata.online", + "name": "Mangata Archive node" + }, + { + "url": "wss://kusama-rpc.mangata.online", + "name": "Mangata RPC node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/MagnataX.svg", + "addressPrefix": 42 + }, + { + "disabled": true, + "chainId": "eacdd2d5b42de9769ccbb6e8d9013ab0d90ab105bf601d4aac53e874c145ec21", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2116", + "name": "DataHighway Tanganika", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/DataHighway-Tanganika-x-Fearless-Wallet" + } + }, + "assets": [ + { + "id": "15df9971-2e6a-4619-a5ca-9ad571655287", + "name": "datahighway", + "symbol": "dhx", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DHX.svg", + "color": "6C179F", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://tanganika.datahighway.com", + "name": "DataHighway node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/DataHighway.svg", + "addressPrefix": 33 + }, + { + "disabled": true, + "chainId": "89d3ec46d2fb43ef5a9713833373d5ea666b092fa8fd68fbc34596036571b907", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "name": "Equilibrium", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "F9AF1A", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xD6DF932A45C0f255f85145f286eA0b292B21C90B", - "name": "aave", - "symbol": "aave", - "precision": 18, - "priceId": "aave", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AAVE.svg", - "color": "B6509E", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x172370d5Cd63279eFa6d502DAB29171933a610AF", - "name": "curve dao", - "symbol": "crv", - "precision": 18, - "priceId": "curve-dao-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRV.svg", - "color": "B6509E", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xb33EaAd8d922B1083446DC23f610c2567fB5180f", - "name": "uniswap", - "symbol": "uni", - "precision": 18, - "priceId": "uniswap", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UNI.svg", - "color": "FF007A", - "ethereumType": "erc20" - } - ], - "nodes": [ - { - "url": "https://polygon-mainnet.blastapi.io/", - "name": "Blast https" + "url": "https://equilibrium.subscan.io/{type}/{value}" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polygon.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "nft", - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "80001", - "rank": 103, - "name": "Polygon mumbai testnet", - "ecosystem": "ethereum", - "externalApi": { - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://mumbai.polygonscan.com/{type}/{value}" - } + "assets": [ + { + "id": "47d1f5c5-c43d-4082-b577-ba0af91cb1a6", + "name": "equilibrium", + "symbol": "eq", + "currencyId": "25969", + "precision": 9, + "existentialDeposit": "1000000000", + "priceId": "equilibrium-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQ.svg", + "color": "5176E6", + "isUtility": true, + "type": "equilibrium" + }, + { + "id": "50bb6d02-1aad-4a94-b41c-2a15b4aee0e8", + "name": "equilibrium dollar protocol", + "symbol": "eqd", + "currencyId": "6648164", + "precision": 9, + "existentialDeposit": "1000000000", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQD.svg", + "color": "4D8BED", + "type": "equilibrium" + }, + { + "id": "6b21d130-7475-4f61-b893-799061fc05bf", + "name": "acala", + "symbol": "aca", + "currencyId": "6382433", + "precision": 9, + "priceId": "acala", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", + "color": "FFFFFF", + "type": "equilibrium" + }, + { + "id": "9c67711c-7f0c-45fa-b7fc-66b655ba17e1", + "name": "bnb", + "symbol": "bnb", + "currencyId": "6450786", + "precision": 9, + "priceId": "binancecoin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", + "color": "F3BA2F", + "type": "equilibrium" + }, + { + "id": "b62f4a0a-883f-496f-a797-fd2b24abe01b", + "name": "polkadot", + "symbol": "dot", + "currencyId": "6582132", + "precision": 9, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "type": "equilibrium" + }, + { + "id": "665c8d3d-a035-45fb-9c9c-7cfaf7da96c6", + "name": "astar", + "symbol": "astr", + "currencyId": "1634956402", + "precision": 9, + "priceId": "astar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", + "color": "0AE2FF", + "type": "equilibrium" + }, + { + "id": "c98efbda-a452-4329-8199-fef32dc9307e", + "name": "acala dollar", + "symbol": "ausd", + "currencyId": "1635087204", + "precision": 9, + "priceId": "acala-dollar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", + "color": "E40C5B", + "type": "equilibrium" + }, + { + "id": "793fc038-c134-4d58-af6d-cb7c1be5a4ea", + "name": "binance usd", + "symbol": "busd", + "currencyId": "1651864420", + "precision": 9, + "priceId": "binance-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", + "color": "F3BA2F", + "type": "equilibrium" + }, + { + "id": "e8c17b03-a94c-4fd3-a599-189a1b5e8e32", + "name": "moonbeam", + "symbol": "glmr", + "currencyId": "1735159154", + "precision": 9, + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF", + "type": "equilibrium" + }, + { + "id": "a9d1b0b2-ad4e-4d86-88c5-72a8947099f0", + "name": "inter ibtc", + "symbol": "ibtc", + "currencyId": "1768060003", + "precision": 9, + "priceId": "interbtc", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", + "color": "F2AE7F", + "type": "equilibrium" + }, + { + "id": "502acf71-3c1f-4f1c-91d9-179fd2987a34", + "name": "interlay", + "symbol": "intr", + "currencyId": "1768846450", + "precision": 9, + "priceId": "interlay", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", + "color": "FFFFFF", + "type": "equilibrium" + }, + { + "id": "f67bfaf7-e081-4355-abda-4f1faaeb3579", + "name": "parallel finance", + "symbol": "para", + "currencyId": "1885434465", + "precision": 9, + "priceId": "parallel-finance", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PARA.svg", + "color": "4C19E7", + "type": "equilibrium" + }, + { + "id": "c1ad2bb4-701a-4711-bacb-59259ff3d57d", + "name": "tether usd", + "symbol": "usdt", + "currencyId": "1970496628", + "precision": 9, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "type": "equilibrium" + }, + { + "id": "26a16776-71c9-450d-bfaf-df3a8cd6d277", + "name": "fluid xdot", + "symbol": "xdot", + "currencyId": "2019848052", + "precision": 9, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "type": "equilibrium" + }, + { + "id": "1eb9d66e-a92d-49c5-95fc-fd7a844fc66d", + "name": "equilibrium dot", + "symbol": "eqdot", + "currencyId": "435694104436", + "precision": 9, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/eqDOT.svg", + "color": "FFFFFF", + "type": "equilibrium" + } + ], + "nodes": [ + { + "url": "wss://api-equilibrium.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/equilibrium.svg", + "addressPrefix": 68, + "options": [ + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "724c168d8e86b78b831c641e2cc822b8d1bf99fa0b4b28fe59985cd6fd580215", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2039", + "name": "Integritee Shell", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-integritee" + } + }, + "assets": [ + { + "id": "07c55d3a-b24e-410e-b9ca-7da0707fbd61", + "name": "integritee", + "symbol": "teer", + "precision": 12, + "priceId": "integritee", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TEER.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-integritee.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/integritee.svg", + "addressPrefix": 13 + }, + { + "disabled": false, + "chainId": "0f62b701fb12d02237a33b84818c11f621653d2b1614c777973babf4652b535d", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2114", + "name": "Turing Network", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-turing" + } + }, + "assets": [ + { + "id": "148ce615-aea3-42fa-be45-5eb5606813b8", + "name": "turing token", + "symbol": "tur", + "precision": 10, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUR.svg", + "color": "5DCBD0", + "isUtility": true, + "type": "normal" + }, + { + "id": "e8774037-c4a5-42b5-87a4-cf946a60a406", + "type": "assetId", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "1", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "existentialDeposit": "100000000" + } + ], + "nodes": [ + { + "url": "wss://api-turing.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.turing.oak.tech", + "name": "OAK node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/OAK.svg", + "addressPrefix": 51 + }, + { + "disabled": false, + "chainId": "7dd99936c1e9e6d1ce7d90eb6f33bea8393b4bf87677d675aa63c9cb3e8c5b5b", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "1001", + "name": "Encointer on Kusama", + "ecosystem": "substrate", + "assets": [ + { + "id": "1e0c2ec6-935f-49bd-a854-5e12ee6c9f1b", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "purchaseProviders": [ + "ramp" ], - "history": { - "type": "etherscan", - "url": "https://api-testnet.polygonscan.com/api" - } + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kusama.api.encointer.org", + "name": "Encointer Association node" }, - "assets": [ - { - "isUtility": true, - "id": "0x0000000000000000000000000000000000001010", - "name": "polygon", - "symbol": "matic", - "precision": 18, - "priceId": "matic", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", - "color": "8247E5", - "ethereumType": "normal" - } - ], - "nodes": [ + { + "url": "wss://sys.ibp.network/encointer-kusama", + "name": "IBP-GeoDNS1 node" + }, + { + "url": "wss://sys.dotters.network/encointer-kusama", + "name": "IBP-GeoDNS2 node" + }, + { + "url": "wss://ksm-rpc.stakeworld.io/encointer", + "name": "Stakeworld node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/encointer.svg", + "addressPrefix": 2 + }, + { + "disabled": true, + "chainId": "0e06260459b4f9034aba0a75108c08ed73ea51d2763562749b1d3600986c4ea5", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2102", + "name": "Pichiu Network", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/Pichiu-x-Fearless-Wallet" + } + }, + "assets": [ + { + "id": "5b196f7c-475a-493e-abbf-9f808d6fb863", + "name": "pichu token", + "symbol": "pchu", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PCHU.svg", + "color": "AE4071", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kusama.kylin-node.co.uk", + "name": "Kylin Network node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/pichiu.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "d42e9606a995dfe433dc7955dc2a70f495f350f373daa200098ae84437816ad2", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2125", + "name": "InvArch Tinker Network", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/InvArch-Tinker-x-Fearless-Wallet" + } + }, + "assets": [ + { + "id": "8b58d683-fdc9-477e-a1b2-2c95b663e4a5", + "name": "tinkernet parachain", + "symbol": "tnkr", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TNKR.svg", + "color": "AC2489", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-invarch.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Tinkernet.svg", + "addressPrefix": 117 + }, + { + "disabled": true, + "chainId": "19a3733beb9cb8a970a308d835599e9005e02dc007a35440e461a451466776f8", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2123", + "name": "GM Parachain", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid.subsquid.io/gs-main-gmordie/graphql" + } + }, + "assets": [ + { + "id": "19763697-37d8-4643-b840-3fd8565f5d83", + "name": "gm parachain", + "symbol": "fren", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/FREN.svg", + "color": "F7D64D", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://leemo.gmordie.com", + "name": "leemo node" + }, + { + "url": "wss://ws.gm.bldnodes.org", + "name": "bLd Nodes node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/GM%20Parachain.svg", + "addressPrefix": 7013 + }, + { + "disabled": true, + "chainId": "ca93a37c913a25fa8fdb33c7f738afc39379cb71d37874a16d4c091a5aef9f89", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2121", + "name": "Imbue Kusama", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/Imbue-x-Fearless-Wallet" + } + }, + "assets": [ + { + "id": "c01b37ab-eefa-427d-ba50-dd7a1cbe1798", + "name": "imbue network", + "symbol": "imbu", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/IMBU.svg", + "color": "C3FD51", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://imbue-kusama.imbue.network", + "name": "Imbue Network node node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Imbue.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "cceae7f3b9947cdb67369c026ef78efa5f34a08fe5808d373c04421ecf4f1aaf", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2124", + "name": "Amplitude", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-amplitude-api.squid.tachi.soramitsu.co.jp/graphql" + } + }, + "assets": [ + { + "id": "b2e6c029-ae73-46f9-9660-51d7034ddc53", + "name": "amplitude", + "symbol": "ampe", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AMPE.svg", + "color": "7CE2A0", + "isUtility": true, + "type": "normal" + }, + { + "id": "b2f80126-9b7f-4026-adc8-dd7fb39baf2c", + "type": "xcm", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "0", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + }, + { + "id": "dc34cadc-d448-4bd8-a484-af6e602fe08d", + "type": "xcm", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "1", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "existentialDeposit": "10000" + }, + { + "id": "465b44c5-ab78-4283-960e-d3b834adb646", + "type": "xcm", + "name": "picasso", + "symbol": "pica", + "precision": 12, + "currencyId": "2", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PICA.svg", + "color": "FFFFFF" + } + ], + "nodes": [ + { + "url": "wss://api-amplitude.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc-amplitude.pendulumchain.tech", + "name": "PendulumChain node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Amplitude.svg", + "addressPrefix": 57 + }, + { + "disabled": true, + "chainId": "f0b8924b12e8108550d28870bc03f7b45a947e1b2b9abf81bfb0b89ecb60570e", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2046", + "name": "Darwinia2", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-darwinia-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ { - "url": "https://polygon-testnet.blastapi.io/", - "name": "Blast https" + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://darwinia-parachain.subscan.io/{type}/{value}" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polygon.svg", - "addressPrefix": 0, - "options": [ - "testnet", - "ethereum", - "nft", - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e", - "rank": 109, - "name": "Rococo", - "ecosystem": "substrate", - "externalApi": { - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://rococo.subscan.io/{type}/{value}" - } - ] + "assets": [ + { + "id": "b861f610-cf2c-43ad-a660-f6b809a05062", + "name": "darwinia", + "symbol": "ring", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RING.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc.darwinia.network", + "name": "Darwinia Network node" }, - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b2", - "symbol": "ROC" - } - ], - "availableDestinations": [ - { - "chainId": "3266816be9fa51b32cfea58d3e33ca77246bc9618595a4300e44c8856a8d8a17", - "assets": [ - { - "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b2", - "symbol": "ROC" - } - ], - "bridgeParachainId": "8685a8d3e57fa8024b91b8ead6cc97acf953889c6fb0a355602826a1e2db198f" - } - ] + { + "url": "wss://darwinia-rpc.dwellir.com", + "name": "Dwellir node" }, - "assets": [ - { - "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b2", - "name": "rococo", - "symbol": "roc", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ROC.svg", - "color": "FFFFFF", - "type": "normal", - "isUtility": true - } - ], - "nodes": [ + { + "url": "wss://parachain-rpc.darwinia.network", + "name": "Darwinia Network 1 node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/darwinia.svg", + "addressPrefix": 18 + }, + { + "disabled": true, + "chainId": "f2584690455deda322214e97edfffaf4c1233b6e4625e39478496b3e2f5a44c5", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2052", + "name": "Kylin Network", + "ecosystem": "substrate", + "assets": [ + { + "id": "7512aeb7-7bdc-42dc-abe3-80ed764c80bd", + "name": "kylin network", + "symbol": "kyl", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KYL.svg", + "color": "AE4071", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://polkadot.kylin-node.co.uk", + "name": "Kylin Network node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kylin%20Network.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "d4c0c08ca49dc7c680c3dac71a7c0703e5b222f4b6c03fe4c5219bb8f22c18dc", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "name": "Crust Shadow Parachain", + "ecosystem": "substrate", + "paraId": "2012", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-crust_shadow_parachain" + }, + "explorers": [ { - "url": "wss://rococo-rpc.polkadot.io", - "name": "Parity node" + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://shadow.subscan.io/{type}/{value}" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Rococo.svg", - "addressPrefix": 42, - "options": [ - "testnet" ] }, - { - "disabled": false, - "chainId": "8685a8d3e57fa8024b91b8ead6cc97acf953889c6fb0a355602826a1e2db198f", - "parentId": "6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e", - "paraId": "2011", - "name": "SORA Rococo parachain", - "ecosystem": "substrate", - "assets": [ - { - "id": "b5a44630-920e-43ee-809f-61890d0888b0123", - "name": "sora", - "symbol": "rxor", - "currencyId": "0x0200000000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", - "color": "EE2233", - "isUtility": true, - "type": "soraAsset" - }, + "assets": [ + { + "id": "d1e3be8c-880e-46fe-97e3-761c0a58aed1", + "name": "crust shadow", + "symbol": "csm", + "precision": 12, + "priceId": "crust-storage-market", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CSM_Crust_Shadow.svg", + "color": "F3AD56", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc-shadow.crust.network", + "name": "Crust node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/crustshadow.svg", + "addressPrefix": 66 + }, + { + "disabled": true, + "chainId": "6e938c4a786f8df6f38d0c06f00a8573f1f7aabeebf48aee5157a93cc5fe3271", + "name": "Kusama (test)", + "ecosystem": "substrate", + "assets": [ + { + "id": "03561957-3383-4f9f-8033-1b2c36d88db6", + "name": "kusama", + "symbol": "unit", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "staking": "relaychain", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://ws.relaychain-node-1.k1.tst.fearless.soramitsu.co.jp", + "name": "SORA Kusama Test node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kusama.svg", + "addressPrefix": 2, + "options": [ + "poolStaking" + ] + }, + { + "disabled": true, + "chainId": "fd4d46e9a51e16babf791b94d6dbf771ed1d7de8a11b310aa98c847890fa9ff3", + "name": "Polkadot (test)", + "ecosystem": "substrate", + "assets": [ + { + "id": "405e7e40-a2f1-45a3-a32f-7f271b2819d2", + "name": "polkadot", + "symbol": "unit", + "precision": 10, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "staking": "relaychain", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://ws.relaychain-node-2.p1.tst.fearless.soramitsu.co.jp/", + "name": "SORA Polkadot Test node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polkadot.svg", + "addressPrefix": 2, + "options": [ + "poolStaking" + ] + }, + { + "disabled": true, + "chainId": "b34f6cd03a41f0fab38ba9fd5b11cce5f303633c46f39f0c6fdc7c3c602bafa9", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "name": "Snow Kusama", + "ecosystem": "substrate", + "assets": [ + { + "id": "e739d665-7af5-4e65-ab5f-93f54a5b70b3", + "name": "snow", + "symbol": "icz", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ICZ.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://snow-rpc.icenetwork.io", + "name": "Snow node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SNOW.svg", + "addressPrefix": 2207 + }, + { + "disabled": true, + "chainId": "3266816be9fa51b32cfea58d3e33ca77246bc9618595a4300e44c8856a8d8a17", + "rank": 100, + "name": "SORA test", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "sora", + "url": "https://api.subquery.network/sq/sora-xor/sora-staging" + }, + "staking": { + "type": "sora", + "url": "https://squid.subsquid.io/sora-stage/v/v5/graphql" + } + }, + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ { - "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b2123", - "name": "rococo", - "symbol": "roc", - "precision": 18, - "currencyId": "0x00dc9b4341fde46c9ac80b623d0d43afd9ac205baabdc087cadaa06f92b309c7", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/WND.svg", - "color": "FFFFFF", - "type": "soraAsset" + "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b1", + "symbol": "ROC" } ], - "nodes": [ + "availableDestinations": [ { - "url": "wss://ws.parachain-collator-1.c1.stg1.sora2.soramitsu.co.jp", - "name": "Soramitsu node" + "chainId": "6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e", + "assets": [ + { + "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b1", + "symbol": "ROC" + } + ] } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", - "addressPrefix": 420, - "options": [ - "testnet" ] }, - { - "disabled": false, - "chainId": "3af4ff48ec76d2efc8476730f423ac07e25ad48f5f4c9dc39c778b164d808615", - "name": "Enjin Matrixchain", - "ecosystem": "substrate", - "externalApi": { - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://enjin.subscan.io//{type}/{value}" - } - ] + "assets": [ + { + "id": "b5a44630-920e-43ee-809f-61890d0888b0", + "name": "sora", + "symbol": "xor", + "currencyId": "0x0200000000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", + "color": "EE2233", + "isUtility": true, + "type": "soraAsset", + "staking": "relaychain" }, - "assets": [ - { - "id": "13c8d9cb-897b-4507-8ae7-ba2c219d270d", - "name": "enjin coin", - "symbol": "enj", - "precision": 18, - "priceId": "enjincoin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ENJ.svg", - "color": "5A27ED", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ + { + "id": "0ecacd48-ffd4-4a2e-87e3-c5f72f9a9877", + "name": "sora validator", + "symbol": "val", + "currencyId": "0x0200040000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora-validator-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VAL.svg", + "color": "F3B966", + "type": "soraAsset", + "isNative": true + }, + { + "id": "87ba5538-34db-4d53-9104-25f42b0bb55b", + "name": "polkaswap", + "symbol": "pswap", + "currencyId": "0x0200050000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "polkaswap", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PSWAP.svg", + "color": "FF0066", + "type": "soraAsset", + "isNative": true + }, + { + "id": "038a7045-af00-466d-b72b-95485c4674b7", + "name": "sora synthetics", + "symbol": "xst", + "currencyId": "0x0200090000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora-synthetics", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XST.svg", + "color": "EE2233", + "type": "soraAsset", + "isNative": true + }, + { + "id": "c96e012c-0786-4980-9750-bae61de0aa19", + "name": "sora synthetic usd", + "symbol": "xstusd", + "currencyId": "0x0200080000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora-synthetic-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XSTUSD.svg", + "color": "EE2233", + "type": "soraAsset", + "isNative": true + }, + { + "id": "7bcc178d-1ebe-46b8-88fb-79649828f21d", + "name": "demeter", + "symbol": "deo", + "currencyId": "0x00f2f4fda40a4bf1fc3769d156fa695532eec31e265d75068524462c0b80f674", + "precision": 18, + "priceId": "demeter", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DEO.svg", + "color": "54B198", + "type": "soraAsset", + "isNative": true + }, + { + "id": "79ba9571-6ea4-4790-8fda-d20ddbad4f33", + "name": "ceres", + "symbol": "ceres", + "currencyId": "0x008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440", + "precision": 18, + "priceId": "ceres", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CERES.svg", + "color": "243579", + "type": "soraAsset", + "isNative": true + }, + { + "id": "38eae54b-723d-457c-8d45-4beab249612f", + "name": "noir token", + "symbol": "noir", + "currencyId": "0x0044aee0776cfb826434af8ef0f8e2c7e9e6644cfda0ae0f02c471b1eebc2483", + "precision": 18, + "priceId": "noir-phygital", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NOIR.svg", + "color": "A0A7FF", + "type": "soraAsset", + "isNative": true + }, + { + "id": "2565e418-d5bc-4318-99b5-53e893681518", + "name": "umitoken", + "symbol": "umi", + "currencyId": "0x003252667a82d2dd70fa046eea663eaec1f2e37c20879f113b880b04c5ebd805", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UMI.svg", + "color": "3C7EB2", + "type": "soraAsset", + "isNative": true + }, + { + "id": "9b040bf8-a852-4e10-aa14-d3793db27a95", + "name": "tether usd", + "symbol": "usdt", + "currencyId": "0x0083a6b3fbc6edae06f115c8953ddd7cbfba0b74579d6ea190f96853073b76f4", + "precision": 18, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "type": "soraAsset" + }, + { + "id": "1b20dfcd-a40d-4850-a407-5a45f3bf4889", + "name": "binance usd", + "symbol": "busd", + "currencyId": "0x00567d096a736f33bf78cad7b01e33463923b9c933ee13ab7e3fb7b23f5f953a", + "precision": 18, + "priceId": "binance-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", + "color": "F3BA2F", + "type": "soraAsset" + }, + { + "id": "5c017385-e702-47d2-8f3a-ac8146c2b9dd", + "name": "usd coin", + "symbol": "usdc", + "currencyId": "0x00ef6658f79d8b560f77b7b20a5d7822f5bc22539c7b4056128258e5829da517", + "precision": 18, + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4", + "type": "soraAsset" + }, + { + "id": "db07f99c-0c76-483a-891f-86fbd028fdc5", + "name": "bokolo cash", + "symbol": "BCSI", + "currencyId": "0x00eacaea6599a04358fda986388ef0bb0c17a553ec819d5de2900c0af0862502", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BCSD.svg", + "color": "FFFFFF", + "type": "soraAsset" + }, + { + "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b1", + "name": "rococo", + "symbol": "roc", + "precision": 18, + "currencyId": "0x00dc9b4341fde46c9ac80b623d0d43afd9ac205baabdc087cadaa06f92b309c7", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "type": "soraAsset" + }, + { + "id": "ada3b18e-1912-4f96-ad3b-4d0e1b1d1d0a", + "symbol": "tbcd", + "name": "sora tbc dollar", + "currencyId": "0x02000a0000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/TBCD.svg", + "color": "6D8954", + "type": "soraAsset", + "isNative": true + }, + { + "id": "eface91d-b2a8-49d2-88e8-640586bda477", + "name": "polkadot", + "symbol": "dot", + "currencyId": "0x0003b1dbee890acfb1b3bc12d1bb3b4295f52755423f84d1751b2545cebf000b", + "precision": 18, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "type": "soraAsset" + }, + { + "id": "191c31de-62b1-41e4-aad3-15a5be1b4cd4", + "name": "dai", + "symbol": "dai", + "currencyId": "0x0200060000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "dai", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", + "color": "F9AF1A", + "type": "soraAsset" + }, + { + "id": "3ab2c884-6c6e-4f92-b87a-a013c80210af", + "name": "ethereum", + "symbol": "eth", + "currencyId": "0x0200070000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "627EEA", + "type": "soraAsset" + } + ], + "nodes": [ + { + "url": "wss://ws.framenode-8.s5.stg1.sora2.soramitsu.co.jp", + "name": "Sora Stage #8" + }, + { + "url": "wss://ws.framenode-1.r0.dev.sora2.soramitsu.co.jp", + "name": "Sora Card Test Node #1" + }, + { + "url": "wss://ws.framenode-2.r0.dev.sora2.soramitsu.co.jp", + "name": "Sora Card Test Node #2" + }, + { + "url": "wss://ws.framenode-3.r0.dev.sora2.soramitsu.co.jp", + "name": "Sora Card Test Node #3" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", + "addressPrefix": 69, + "options": [ + "testnet", + "polkaswap", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", + "rank": 0, + "name": "SORA Mainnet", + "ecosystem": "substrate", + "externalApi": { + "staking": { + "type": "sora", + "url": "https://fearless-wallet.squids.live/sora-fw/v/v12/graphql" + }, + "history": { + "type": "sora", + "url": "https://fearless-wallet.squids.live/sora-fw/v/v12/graphql" + }, + "pricing": { + "type": "sora", + "url": "https://api.subquery.network/sq/sora-xor/sora-prod" + }, + "explorers": [ { - "url": "wss://rpc.matrix.blockchain.enjin.io", - "name": "Enjin Foundation node" + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://sora.subscan.io/{type}/{value}" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Enjin.svg", - "addressPrefix": 1110 + ] }, - { - "disabled": false, - "chainId": "a37725fd8943d2a524cb7ecc65da438f9fa644db78ba24dcd0003e2f95645e8f", - "parentId": "3af4ff48ec76d2efc8476730f423ac07e25ad48f5f4c9dc39c778b164d808615", - "name": "Canary Matrixchain", - "ecosystem": "substrate", - "externalApi": { - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://matrix.subscan.io///{type}/{value}" - } - ] + "assets": [ + { + "id": "b774c386-5cce-454a-a845-1ec0381538ec", + "name": "sora", + "symbol": "xor", + "currencyId": "0x0200000000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", + "color": "EE2233", + "isUtility": true, + "type": "soraAsset", + "staking": "relaychain", + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200000000000000000000000000000000000000000000000000000000000000" + } }, - "assets": [ - { - "id": "85c17bd8-2565-4cf3-8e0f-14f38ff55eee", - "name": "enjin coin", - "symbol": "cenj", - "precision": 18, - "priceId": "enjincoin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ENJ.svg", - "color": "5A27ED", - "isUtility": true, - "type": "normal" + { + "id": "24d0809e-0a4c-42ea-bdd8-dc7a518f389c", + "name": "sora validator", + "symbol": "val", + "currencyId": "0x0200040000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora-validator-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VAL.svg", + "color": "F3B966", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200040000000000000000000000000000000000000000000000000000000000" } - ], - "nodes": [ - { - "url": "wss://rpc.matrix.canary.enjin.io", - "name": "Enjin Foundation node" + }, + { + "id": "37a999a2-5e90-4448-8b0e-98d06ac8f9d4", + "name": "polkaswap", + "symbol": "pswap", + "currencyId": "0x0200050000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "polkaswap", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PSWAP.svg", + "color": "FF0066", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200050000000000000000000000000000000000000000000000000000000000" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Enjin.svg", - "addressPrefix": 9030, - "options": [ - "testnet" - ] - }, - { - "disabled": false, - "chainId": "42161", - "rank": 4, - "name": "Arbitrum One", - "ecosystem": "ethereum", - "externalApi": { - "history": { - "type": "oklink", - "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=ARBITRUM" - }, - "explorers": [ - { - "type": "oklink", - "types": [ - "tx", - "address" - ], - "url": "https://www.okx.com/web3/explorer/arbitrum/{type}/{value}?channelID=flessw" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "37b6375a-0708-4728-bec9-bf15b8680aff", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "purchaseProviders": [ - "moonpay", - "ramp" - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "FF0066", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0x912CE59144191C1204E64559FE8253a0e49E6548", - "name": "arbitrum", - "symbol": "arb", - "precision": 18, - "priceId": "arbitrum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ARB.svg", - "color": "12AAFF", - "ethereumType": "erc20" + }, + { + "id": "75a0bc9b-a1fb-446e-8781-621036bfd979", + "name": "sora synthetics", + "symbol": "xst", + "currencyId": "0x0200090000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora-synthetics", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XST.svg", + "color": "EE2233", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200090000000000000000000000000000000000000000000000000000000000" } - ], - "nodes": [ - { - "url": "https://arbitrum-one.publicnode.com/", - "name": "Public http node" + }, + { + "id": "217925d8-c529-4480-98e5-b8bf651129ef", + "name": "sora synthetic usd", + "symbol": "xstusd", + "currencyId": "0x0200080000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora-synthetic-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XSTUSD.svg", + "color": "EE2233", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200080000000000000000000000000000000000000000000000000000000000" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Arbitrum.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "chainlinkProvider", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "10", - "rank": 5, - "name": "OP Mainnet", - "ecosystem": "ethereum", - "externalApi": { - "history": { - "type": "oklink", - "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=OP" - }, - "explorers": [ - { - "type": "oklink", - "types": [ - "tx", - "address" - ], - "url": "https://www.okx.com/web3/explorer/optimism/{type}/{value}?channelID=flessw" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "08bb34b8-8027-4fea-948d-5243f5cbd6ba", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "purchaseProviders": [ - "moonpay", - "ramp" - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "FF0066", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0x4200000000000000000000000000000000000042", - "name": "optimism", - "symbol": "op", - "precision": 18, - "priceId": "optimism", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OP.svg", - "color": "FF0420", - "ethereumType": "erc20" + }, + { + "id": "5e3de486-789e-4e47-8f49-870852cfebb6", + "name": "demeter", + "symbol": "deo", + "currencyId": "0x00f2f4fda40a4bf1fc3769d156fa695532eec31e265d75068524462c0b80f674", + "precision": 18, + "priceId": "demeter", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DEO.svg", + "color": "54B198", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x00f2f4fda40a4bf1fc3769d156fa695532eec31e265d75068524462c0b80f674" } - ], - "nodes": [ - { - "url": "https://optimism-mainnet.blastapi.io/", - "name": "Blast https node" - }, - { - "url": "https://optimism.publicnode.com/", - "name": "Public http node" + }, + { + "id": "8fe0cbf4-7ece-45f6-968b-5c1b77accff0", + "name": "ceres", + "symbol": "ceres", + "currencyId": "0x008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440", + "precision": 18, + "priceId": "ceres", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CERES.svg", + "color": "243579", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Optimism.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "43114", - "rank": 6, - "name": "Avalanche C-Chain", - "ecosystem": "ethereum", - "externalApi": { - "history": { - "type": "oklink", - "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=AVAXC" - }, - "explorers": [ - { - "type": "oklink", - "types": [ - "tx", - "address" - ], - "url": "https://www.okx.com/web3/explorer/avax/{type}/{value}?channelID=flessw" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "870f6877-c917-48bc-aa64-723416c94ebb", - "name": "avalanche", - "symbol": "avax", - "precision": 18, - "priceId": "avalanche-2", - "purchaseProviders": [ - "moonpay", - "ramp" - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AVAX.svg", - "color": "E84142", - "ethereumType": "normal" + }, + { + "id": "079f2a74-1440-440c-b826-6d85a7dd3a91", + "name": "noir token", + "symbol": "noir", + "currencyId": "0x0044aee0776cfb826434af8ef0f8e2c7e9e6644cfda0ae0f02c471b1eebc2483", + "precision": 18, + "priceId": "noir-phygital", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NOIR.svg", + "color": "A0A7FF", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x0044aee0776cfb826434af8ef0f8e2c7e9e6644cfda0ae0f02c471b1eebc2483" } - ], - "nodes": [ - { - "url": "https://avalanche-c-chain.publicnode.com/", - "name": "Public https node" + }, + { + "id": "2de2b668-33cd-4e85-a501-4921481e618f", + "name": "umitoken", + "symbol": "umi", + "currencyId": "0x003252667a82d2dd70fa046eea663eaec1f2e37c20879f113b880b04c5ebd805", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UMI.svg", + "color": "3C7EB2", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x003252667a82d2dd70fa046eea663eaec1f2e37c20879f113b880b04c5ebd805" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Avalanche.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "195", - "rank": 130, - "name": "X Layer Testnet", - "ecosystem": "ethereum", - "externalApi": { - "history": { - "type": "oklink", - "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=XLAYER_TESTNET" - }, - "explorers": [ - { - "type": "oklink", - "types": [ - "tx", - "address" - ], - "url": "https://www.okx.com/explorer/xlayer-test/{type}/{value}" - } - ] }, - "assets": [ - { - "isUtility": true, - "id": "a61b1842-30c0-431d-9bbc-fc3370562455", - "name": "okb", - "symbol": "okb", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XLOKB.svg", - "color": "FFFFFF", - "ethereumType": "normal" + { + "id": "4c7b8da9-b297-4093-b8bc-28d477e7b5ad", + "name": "tether usd", + "symbol": "usdt", + "currencyId": "0x0083a6b3fbc6edae06f115c8953ddd7cbfba0b74579d6ea190f96853073b76f4", + "precision": 18, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x0083a6b3fbc6edae06f115c8953ddd7cbfba0b74579d6ea190f96853073b76f4" } - ], - "nodes": [ - { - "url": "https://testrpc.xlayer.tech/", - "name": "X Layer Test Tech https node" - }, - { - "url": "https://xlayertestrpc.okx.com/", - "name": "X Layer Test OKX https node" + }, + { + "id": "23c41bbb-2e1a-4d64-bbab-5080975ecc1c", + "name": "binance usd", + "symbol": "busd", + "currencyId": "0x00567d096a736f33bf78cad7b01e33463923b9c933ee13ab7e3fb7b23f5f953a", + "precision": 18, + "priceId": "binance-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", + "color": "F3BA2F", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00567d096a736f33bf78cad7b01e33463923b9c933ee13ab7e3fb7b23f5f953a" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/xlayerchain.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "196", - "rank": 13, - "name": "X Layer Mainnet", - "ecosystem": "ethereum", - "externalApi": { - "history": { - "type": "oklink", - "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=XLAYER" - }, - "explorers": [ - { - "type": "oklink", - "types": [ - "tx", - "address" - ], - "url": "https://www.okx.com/web3/explorer/xlayer-test/{type}/{value}" - } - ] }, - "assets": [ - { - "isUtility": true, - "id": "dcf40e8d-f041-45b8-8cc8-e5b95bedb86e", - "name": "okb", - "symbol": "okb", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XLOKB.svg", - "color": "FFFFFF", - "priceId": "okb", - "ethereumType": "normal" + { + "id": "c8ce20ed-8690-4b46-9b3d-872e325ae636", + "name": "usd coin", + "symbol": "usdc", + "currencyId": "0x00ef6658f79d8b560f77b7b20a5d7822f5bc22539c7b4056128258e5829da517", + "precision": 18, + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00ef6658f79d8b560f77b7b20a5d7822f5bc22539c7b4056128258e5829da517" } - ], - "nodes": [ - { - "url": "https://rpc.xlayer.tech/", - "name": "X Layer Tech https node" - }, - { - "url": "https://xlayerrpc.okx.com/", - "name": "X Layer OKX https node" + }, + { + "id": "1e6f8ba3-5aeb-41d8-b80e-a44ce0f33716", + "name": "dai", + "symbol": "dai", + "currencyId": "0x0200060000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "dai", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", + "color": "F9AF1A", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200060000000000000000000000000000000000000000000000000000000000" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/xlayerchain.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "1101", - "rank": 7, - "name": "Polygon zkEVM", - "ecosystem": "ethereum", - "externalApi": { - "history": { - "type": "oklink", - "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=POLYGON_ZKEVM" - }, - "explorers": [ - { - "type": "oklink", - "types": [ - "tx", - "address" - ], - "url": "https://www.okx.com/web3/explorer/polygon-zkevm/{type}/{value}?channelID=flessw" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "8f85b561-18f5-4cf0-9077-305ebc84d015", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "purchaseProviders": [ - "ramp" - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "FF0066", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0xA8CE8aee21bC2A48a5EF670afCc9274C7bbbC035", - "name": "usd coin", - "symbol": "usdc", - "precision": 6, - "priceId": "usd-coin", - "purchaseProviders": [ - "ramp" - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xa2036f0538221a77A3937F1379699f44945018d0", - "name": "polygon", - "symbol": "matic", - "precision": 18, - "priceId": "matic-network", - "purchaseProviders": [ - "ramp" - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", - "color": "8247E5", - "ethereumType": "erc20" + }, + { + "id": "82f45df3-b6d8-43e7-a440-c0e73ab59785", + "name": "ethereum", + "symbol": "eth", + "currencyId": "0x0200070000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "627EEA", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200070000000000000000000000000000000000000000000000000000000000" } - ], - "nodes": [ - { - "url": "https://zkevm-rpc.com", - "name": "Zkevm https node" - }, - { - "url": "https://polygon-zkevm-mainnet.public.blastapi.io", - "name": "Blast https node" + }, + { + "id": "94e573f3-a9f3-4f7e-9244-8492288ca558", + "name": "soshiba", + "symbol": "soshiba", + "currencyId": "0x005aa73d7a4a3fdbe830c7d0ee26c09ba7f1db119da86d5b4dcb6609dac5ceb5", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/SHIB.svg", + "color": "FFA409", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x005aa73d7a4a3fdbe830c7d0ee26c09ba7f1db119da86d5b4dcb6609dac5ceb5" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polygon.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "7001", - "rank": 14, - "name": "ZetaChain Testnet", - "ecosystem": "ethereum", - "assets": [ - { - "isUtility": true, - "id": "0f07791b-b091-49c1-81b7-9facba2b7db3", - "name": "zetachain", - "symbol": "zeta", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZETA.svg", - "color": "235643", - "ethereumType": "normal" + }, + { + "id": "68a46965-94e8-4a03-af65-6237f83d482f", + "symbol": "tbcd", + "name": "sora tbc dollar", + "currencyId": "0x02000a0000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/TBCD.svg", + "color": "6D8954", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x02000a0000000000000000000000000000000000000000000000000000000000" } - ], - "externalApi": { - "history": { - "type": "blockscout", - "url": "https://zetachain-athens-3.blockscout.com/api/v2/addresses/" + }, + { + "id": "61f864b5-9fe0-4ba5-b5b6-c338ceaeee91", + "name": "hermes dao", + "symbol": "hmx", + "currencyId": "0x002d4e9e03f192cc33b128319a049f353db98fbf4d98f717fd0b7f66a0462142", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/HMX.svg", + "priceId": "hermes-dao", + "color": "FFFFFF", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x002d4e9e03f192cc33b128319a049f353db98fbf4d98f717fd0b7f66a0462142" } }, - "nodes": [ - { - "url": "https://rpc.ankr.com/zetachain_evm_athens_testnet", - "name": "Ankr https node" - }, - { - "url": "https://zetachain-athens-evm.blockpi.network/v1/rpc/public", - "name": "Blockpi https node" - }, - { - "url": "https://zetachain-testnet-evm.itrocket.net", - "name": "Itrocket https node" + { + "id": "a13169a1-32fa-4b44-aecb-c404c5f3cdbc", + "name": "bokolo cash", + "symbol": "BCSI", + "currencyId": "0x00eacaea6599a04358fda986388ef0bb0c17a553ec819d5de2900c0af0862502", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BCSD.svg", + "color": "FFFFFF", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00eacaea6599a04358fda986388ef0bb0c17a553ec819d5de2900c0af0862502" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Zetachain.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "7834781d38e4798d548e34ec947d19deea29df148a7bf32484b7b24dacf8d4b7", - "name": "Reef Mainnet", - "ecosystem": "substrate", - "assets": [ - { - "id": "55697eb0-ca77-47e3-a436-b05460ab1ead", - "name": "reef", - "symbol": "reef", - "precision": 18, - "priceId": "reef", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/REEF.svg", - "color": "C547CB", - "isUtility": true, - "type": "normal", - "staking": "relaychain" + }, + { + "id": "5416b261-a759-4ba6-bc83-ea79a83c5101", + "name": "kusama", + "symbol": "ksm", + "currencyId": "0x00117b0fa73c4672e03a7d9d774e3b3f91beb893e93d9a8d0430295f44225db8", + "precision": 18, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00117b0fa73c4672e03a7d9d774e3b3f91beb893e93d9a8d0430295f44225db8" } - ], - "externalApi": { - "history": { - "type": "reef", - "url": "https://squid.subsquid.io/reef-explorer/graphql" - }, - "staking": { - "type": "reef", - "url": "https://squid.subsquid.io/reef-explorer/graphql" - }, - "explorers": [ - { - "type": "reef", - "types": [ - "transfer", - "extrinsic", - "account" - ], - "url": "https://reefscan.com/{type}/{value}" - } - ] }, - "nodes": [ - { - "url": "wss://rpc.reefscan.com/ws", - "name": "Reef Community node" + { + "id": "cd092a5a-4eb6-4318-9f11-4bf8454d67a2", + "name": "polkadot", + "symbol": "dot", + "currencyId": "0x0003b1dbee890acfb1b3bc12d1bb3b4295f52755423f84d1751b2545cebf000b", + "precision": 18, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x0003b1dbee890acfb1b3bc12d1bb3b4295f52755423f84d1751b2545cebf000b" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/reefchain.svg", - "addressPrefix": 42 - }, - { - "disabled": false, - "chainId": "f3c7ad88f6a80f366c4be216691411ef0622e8b809b1046ea297ef106058d4eb", - "name": "Manta Parachain", - "ecosystem": "substrate", - "assets": [ - { - "id": "0c41f3da-3c42-413a-aca3-bfb19b717df7", - "name": "manta", - "symbol": "manta", - "precision": 18, - "priceId": "manta-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MANTA.svg", - "color": "29CCB9", - "isUtility": true, - "type": "normal" + }, + { + "id": "fb88fa55-b8c8-4ff1-afa8-f72a86a238a4", + "name": "acala", + "symbol": "aca", + "currencyId": "0x001ddbe1a880031da72f7ea421260bec635fa7d1aa72593d5412795408b6b2ba", + "precision": 18, + "priceId": "acala", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", + "color": "FFFFFF", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x001ddbe1a880031da72f7ea421260bec635fa7d1aa72593d5412795408b6b2ba" } - ], - "externalApi": { - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://manta.subscan.io/{type}/{value}" - } - ] }, - "nodes": [ - { - "url": "wss://ws.manta.systems", - "name": "Manta Community node" + { + "id": "acc32ee0-8fdc-4743-91e1-f70cc4f3069b", + "name": "astar", + "symbol": "astr", + "currencyId": "0x009dd037fcb32f4fe17c513abd4641a2ece844d106e30788124f0c0acc6e748e", + "precision": 18, + "priceId": "astar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", + "color": "0AE2FF", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x009dd037fcb32f4fe17c513abd4641a2ece844d106e30788124f0c0acc6e748e" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/mantachain.svg", - "addressPrefix": 77 - }, - { - "disabled": false, - "chainId": "169", - "name": "Manta Pacific Mainnet", - "ecosystem": "ethereum", - "assets": [ - { - "isUtility": true, - "id": "af44954d-2be1-4021-ae0b-f05d8180400a", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "627EEA", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0x95CeF13441Be50d20cA4558CC0a27B601aC544E5", - "name": "manta", - "symbol": "manta", - "precision": 18, - "priceId": "manta-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MANTA.svg", - "color": "8247E5", - "ethereumType": "erc20" + }, + { + "id": "0ef3afdc-cdd3-47cc-bd52-817c54ae65b5", + "name": "liberland merit", + "symbol": "llm", + "currencyId": "0x00073edd278e1bd6a7f9d0b27d4f3e93b73c8f0832b58a4df13c69611a99f156", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLM.svg", + "color": "EFB900", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00073edd278e1bd6a7f9d0b27d4f3e93b73c8f0832b58a4df13c69611a99f156" } - ], - "externalApi": { - "history": { - "type": "blockscout", - "url": "https://pacific-explorer.manta.network/api/v2/addresses/" + }, + { + "id": "1c3b4fcb-5a5f-4319-9dce-d178006eb9bf", + "name": "liberland dollar", + "symbol": "lld", + "currencyId": "0x00513be65493a7fc3e2128d4230061a530acf40478a4affa20bbba27a310673e", + "precision": 18, + "priceId": "liberland-lld", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLD.svg", + "color": "00437F", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00513be65493a7fc3e2128d4230061a530acf40478a4affa20bbba27a310673e" } }, - "nodes": [ - { - "url": "https://pacific-rpc.manta.network/http", - "name": "Manta https node" - }, - { - "url": "https://1rpc.io/manta", - "name": "1RPC https node" + { + "id": "a543b9a2-f85a-4974-92fc-435d6bc418e5", + "name": "toncoin", + "symbol": "toncoin", + "currencyId": "0x00e8c8923623335128807857dfa38f9212e9803394a2c976e97245d7063bbe10", + "precision": 18, + "priceId": "the-open-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg", + "color": "0098EA", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00e8c8923623335128807857dfa38f9212e9803394a2c976e97245d7063bbe10" + } + }, + { + "id": "59a87850-0194-4040-b92e-b869ee3dd3fa", + "name": "kensetsu token", + "symbol": "ken", + "currencyId": "0x02000b0000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KEN.svg", + "color": "00004E", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x02000b0000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "ffc85c62-c970-4cb4-900c-f7d4831c3695", + "name": "kensetsu usd", + "symbol": "kusd", + "currencyId": "0x02000c0000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KUSD.svg", + "color": "BF0A30", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x02000c0000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "46e8a947-ade7-4c87-83b5-d724a35da919", + "name": "apollo", + "symbol": "apollo", + "currencyId": "0x00efe45135018136733be626b380a87ae663ccf6784a25fe9d9d2be64acecb9d", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/APOLLO.svg", + "color": "EB0EAD", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00efe45135018136733be626b380a87ae663ccf6784a25fe9d9d2be64acecb9d" + } + }, + { + "id": "1028531a-5e46-4759-9452-1c3c903b7cec", + "name": "kensetsu ounce of gold", + "symbol": "kgold", + "currencyId": "0x02000d0000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KGOLD.svg", + "color": "FAF49C", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x02000d0000000000000000000000000000000000000000000000000000000000" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/mantachain.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": true, - "chainId": "d8761d3c88f26dc12875c00d3165f7d67243d56fc85b4cf19937601a7916e5a9", - "name": "Enjin Relaychain", - "ecosystem": "substrate", - "externalApi": { - "explorers": [ - { - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://enjin.subscan.io/{type}/{value}" - } - ] }, - "assets": [ - { - "id": "43748d94-90ba-41b2-8732-326cd943a501", - "name": "enjin coin", - "symbol": "enj", - "precision": 18, - "priceId": "enjincoin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ENJ.svg", - "color": "5A27ED", - "isUtility": true, - "type": "normal" + { + "id": "b221dd6b-c34e-4ed0-b46c-70f7ed0758d9", + "name": "chameleon", + "symbol": "karma", + "currencyId": "0x02000f0000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KARMA.svg", + "color": "EE1122", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x02000f0000000000000000000000000000000000000000000000000000000000" } - ], - "nodes": [ - { - "url": "wss://rpc.relay.blockchain.enjin.io", - "name": "Enjin Foundation node" + }, + { + "id": "8ad4fe9d-1d1c-4708-88c4-1b96dc2615d0", + "name": "sora pussy", + "symbol": "pussy", + "currencyId": "0x00f40bff02811ad7bd4f84bfa8dc3c79a61e2a17cd55c8418d553e7ffaf596ac", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PUSSY.svg", + "color": "F54E48", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00f40bff02811ad7bd4f84bfa8dc3c79a61e2a17cd55c8418d553e7ffaf596ac" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Enjin.svg", - "addressPrefix": 2135 - }, - { - "disabled": false, - "chainId": "6bd89e052d67a45bb60a9a23e8581053d5e0d619f15cb9865946937e690c42d6", - "name": "Liberland", - "ecosystem": "substrate", - "assets": [ + }, + { + "id": "6ea1fc55-5154-4ebc-85d2-5ccc9a26d81c", + "name": "kensetsu xor", + "symbol": "kxor", + "currencyId": "0x02000e0000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KXOR.svg", + "color": "EE1122", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x02000e0000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "def9e74d-3e0f-43d3-9d30-798202b3bd18", + "name": "vested xor", + "symbol": "vxor", + "currencyId": "0x006a271832f44c93bd8692584d85415f0f3dccef9748fecd129442c8edcb4361", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VXOR.svg", + "color": "E3232C", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x006a271832f44c93bd8692584d85415f0f3dccef9748fecd129442c8edcb4361" + } + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "5416b261-a759-4ba6-bc83-ea79a83c5101", + "symbol": "KSM" + }, + { + "id": "cd092a5a-4eb6-4318-9f11-4bf8454d67a2", + "symbol": "DOT" + }, + { + "id": "fb88fa55-b8c8-4ff1-afa8-f72a86a238a4", + "symbol": "ACA" + }, { "id": "a6b83d39-a488-4b34-8352-280705a792ea", - "name": "liberland dollar", - "symbol": "lld", - "precision": 12, - "priceId": "liberland-lld", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLD.svg", - "color": "00437F", - "isUtility": true, - "type": "normal" + "symbol": "LLD" }, { - "id": "30b43eb9-36b4-4b40-bf72-330d2e20ee86", - "name": "liberland merit", - "symbol": "llm", - "precision": 12, - "currencyId": "1", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLM.svg", - "color": "EFB900", - "type": "assets" + "id": "b774c386-5cce-454a-a845-1ec0381538ec", + "symbol": "XOR" }, { - "id": "2e7179c9-4308-420e-a654-43c92d119717", - "name": "sora xor", - "symbol": "xor", - "precision": 18, - "currencyId": "774441749", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", - "color": "EE2233", - "type": "assets" - } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "a6b83d39-a488-4b34-8352-280705a792e", - "symbol": "LLD" - }, - { - "id": "30b43eb9-36b4-4b40-bf72-330d2e20ee86", - "symbol": "LLM" - }, - { - "id": "2e7179c9-4308-420e-a654-43c92d119717", - "symbol": "XOR" - } - ], - "availableDestinations": [ - { - "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", - "assets": [ - { - "id": "a6b83d39-a488-4b34-8352-280705a792e", - "symbol": "LLD", - "minAmount": "1000000000000" - }, - { - "id": "30b43eb9-36b4-4b40-bf72-330d2e20ee86", - "symbol": "LLM" - }, - { - "id": "2e7179c9-4308-420e-a654-43c92d119717", - "symbol": "XOR" - } - ] - } - ] - }, - "nodes": [ + "id": "0ef3afdc-cdd3-47cc-bd52-817c54ae65b5", + "symbol": "LLM" + }, { - "url": "wss://mainnet.liberland.org", - "name": "Liberland node" + "id": "acc32ee0-8fdc-4743-91e1-f70cc4f3069b", + "symbol": "ASTR" } ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/liberland.svg", - "addressPrefix": 42 - }, - { - "disabled": false, - "chainId": "248", - "rank": 15, - "name": "Oasys Mainnet", - "ecosystem": "ethereum", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.oasys.games/api" + "availableDestinations": [ + { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assets": [ + { + "id": "5416b261-a759-4ba6-bc83-ea79a83c5101", + "symbol": "KSM" + } + ] }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://explorer.oasys.games/{type}/{value}" - } - ] - }, - "assets": [ { - "isUtility": true, - "id": "11d2ece1-ecae-4596-aae4-ee9db83a5e2a", - "name": "oasys", - "symbol": "oas", - "precision": 18, - "priceId": "oasys", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", - "color": "00A84F", - "ethereumType": "normal" - } - ], - "nodes": [ + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + } + ] + }, { - "url": "https://oasys.blockpi.network/v1/rpc/public/", - "name": "Blockpi https node" + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assets": [ + { + "id": "fb88fa55-b8c8-4ff1-afa8-f72a86a238a4", + "symbol": "ACA", + "minAmount": "1000000000000000000" + } + ] }, { - "url": "https://rpc.mainnet.oasys.games/", - "name": "Oasys https node" + "chainId": "6bd89e052d67a45bb60a9a23e8581053d5e0d619f15cb9865946937e690c42d6", + "assets": [ + { + "id": "a6b83d39-a488-4b34-8352-280705a792ea", + "symbol": "LLD", + "minAmount": "1000000000000000000" + }, + { + "id": "b774c386-5cce-454a-a845-1ec0381538ec", + "symbol": "XOR" + }, + { + "id": "0ef3afdc-cdd3-47cc-bd52-817c54ae65b5", + "symbol": "LLM" + } + ] + }, + { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assets": [ + { + "id": "acc32ee0-8fdc-4743-91e1-f70cc4f3069b", + "symbol": "ASTR" + } + ] } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/oasys.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "29548", - "rank": 150, - "name": "MCH Verse Mainnet", - "ecosystem": "ethereum", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.oasys.mycryptoheroes.net/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://explorer.oasys.mycryptoheroes.net/{type}/{value}" - } - ] + "nodes": [ + { + "url": "wss://ws.mof.sora.org", + "name": "SORA Parliament Ministry of Finance Node" }, - "assets": [ - { - "isUtility": true, - "id": "dad38228-7e66-46cb-b8f8-bee5a738a18a", - "name": "oasys", - "symbol": "oas", - "precision": 18, - "priceId": "oasys", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", - "color": "00A84F", - "ethereumType": "normal" + { + "url": "wss://mof2.sora.org", + "name": "SORA Parliament Ministry of Finance Node" + }, + { + "url": "wss://mof3.sora.org", + "name": "SORA Parliament Ministry of Finance Node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", + "addressPrefix": 69, + "options": [ + "polkaswap", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "70255b4d28de0fc4e1a193d7e175ad1ccef431598211c55538f1018651a0344e", + "name": "Aleph Zero", + "ecosystem": "substrate", + "externalApi": { + "history":{ + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-aleph-zero" + } + }, + "assets": [ + { + "id": "4ea52d6e-a433-4f11-a811-4634068c79a2", + "name": "aleph zero", + "symbol": "azero", + "precision": 12, + "priceId": "aleph-zero", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AZERO.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-aleph-zero-mainnet.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://ws.azero.dev", + "name": "Aleph Zero Foundation node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/white/Aleph%20Zero.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "00dcb981df86429de8bbacf9803401f09485366c44efbf53af9ecfab03adc7e5", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "1002", + "name": "Kusama BridgeHub", + "ecosystem": "substrate", + "externalApi":{ + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet---kusama-bridgehub" + } + }, + "assets": [ + { + "id": "f0f8e709-20f3-44e6-a6c3-89e9e82f78ed", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-kusama-bridge-hub.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://kusama-bridge-hub-rpc.polkadot.io", + "name": "Parity node" + }, + { + "url": "wss://sys.ibp.network/bridgehub-kusama", + "name": "IBP-GeoDNS1 node" + }, + { + "url": "wss://sys.dotters.network/bridgehub-kusama", + "name": "IBP-GeoDNS2 node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bridgehub.svg", + "addressPrefix": 2 + }, + { + "disabled": false, + "chainId": "6f0f071506de39058fe9a95bbca983ac0e9c5da3443909574e95d52eb078d348", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2222", + "name": "Ipci", + "ecosystem": "substrate", + "assets": [ + { + "id": "b20185e9-2f5c-4c3d-bd5a-c751cd76d439", + "name": "dao ipci", + "symbol": "mito", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MITO.svg", + "color": "0BF0A6", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kusama.rpc.ipci.io", + "name": "Airalab node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/DAOIPCI.svg", + "addressPrefix": 32 + }, + { + "disabled": false, + "chainId": "cdedc8eadbfa209d3f207bba541e57c3c58a667b05a2e1d1e86353c9000758da", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2015", + "name": "Integritee Network (Kusama)", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://integritee.subscan.io/{type}/{value}" } ], - "nodes": [ - { - "url": "https://rpc.oasys.mycryptoheroes.net/", - "name": "MCH https node" + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-integritee" + } + }, + "assets": [ + { + "id": "c8b67e07-8b3b-4b92-b23d-23b5bb1f8f42", + "name": "integritee", + "symbol": "teer", + "precision": 12, + "priceId": "integritee", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TEER.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kusama.api.integritee.network", + "name": "Integritee node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/integritee.svg", + "addressPrefix": 13 + }, + { + "disabled": false, + "chainId": "2991d4125ac465d64c4c0b915fedd7168b5961b7676480636e3747f1ad64cfb9", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2236", + "name": "Subzero", + "ecosystem": "substrate", + "assets": [ + { + "id": "3a1cc15e-903b-4102-9384-364c00e67283", + "name": "zero", + "symbol": "zero", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZERO.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc-1.kusama.node.zero.io", + "name": "ZeroNetwork node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Subzero.svg", + "addressPrefix": 25 + }, + { + "disabled": false, + "chainId": "e358eb1d11b31255a286c12e44fe6780b7edb171d657905a97e39f71d9c6c3ee", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2051", + "name": "Ajuna Polkadot", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://ajuna.subscan.io/{type}/{value}" } ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/mchverse.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet---ajuna" + } }, - { - "disabled": false, - "chainId": "2400", - "rank": 151, - "name": "TCG Verse Mainnet", - "ecosystem": "ethereum", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.tcgverse.xyz/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://explorer.tcgverse.xyz/{type}/{value}" - } - ] + "assets": [ + { + "id": "b0afcb19-5d4c-442c-ac0f-53c64b1ea0ae", + "name": "ajuna network", + "symbol": "ajun", + "precision": 12, + "priceId": "ajuna-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BAJU.svg", + "color": "69A6DA", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc-parachain.ajuna.network", + "name": "AjunaNetwork node" }, - "assets": [ - { - "isUtility": true, - "id": "e2661f7b-3916-464d-8ea2-5650b6c7de94", - "name": "oasys", - "symbol": "oas", - "precision": 18, - "priceId": "oasys", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", - "color": "00A84F", - "ethereumType": "normal" + { + "url": "wss://ajuna.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bajun.svg", + "addressPrefix": 1328 + }, + { + "disabled": false, + "chainId": "c14597baeccb232d662770d2d50ae832ca8c3192693d2b0814e6433f2888ddd6", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2048", + "name": "Bitgreen", + "ecosystem": "substrate", + "assets": [ + { + "id": "26c62511-6300-41ef-b760-c94dd6b0f8a5", + "name": "bitgreen", + "symbol": "bbb", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BBB.svg", + "color": "C0FF00", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://mainnet.bitgreen.org", + "name": "Bitgreen node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bitgreen.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "4319cc49ee79495b57a1fec4d2bd43f59052dcc690276de566c2691d6df4f7b8", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2008", + "name": "Crust", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://crust-parachain.subscan.io/{type}/{value}" } ], - "nodes": [ + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-crust" + } + }, + "assets": [ + { + "id": "07ad91ea-1cb6-47dd-bc57-0e884727c5bf", + "name": "crust network", + "symbol": "cru", + "precision": 12, + "priceId": "crust-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRU.svg", + "color": "FA8C16", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://crust-parachain.crustapps.net", + "name": "Crust node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Crust.svg", + "addressPrefix": 88 + }, + { + "disabled": false, + "chainId": "4a587bf17a404e3572747add7aab7bbe56e805a5479c6c436f07f36fcc8d3ae1", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2091", + "name": "Frequency", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/frequency" + } + }, + "assets": [ + { + "id": "598af8e7-c0ad-4785-80cf-669705c93dd9", + "name": "frequency", + "symbol": "frqcy", + "precision": 8, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/FRQCY.svg", + "color": "4473EC", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-frequency.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://0.rpc.frequency.xyz", + "name": "Frequency 0 node" + }, + { + "url": "wss://1.rpc.frequency.xyz", + "name": "Frequency 1 node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Frequency.svg", + "addressPrefix": 90 + }, + { + "disabled": true, + "chainId": "7838c3c774e887c0a53bcba9e64f702361a1a852d5550b86b58cd73827fa1e1e", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2007", + "name": "Kapex", + "ecosystem": "substrate", + "assets": [ + { + "id": "a99dd750-0c15-49df-a86f-6caa577614bc", + "name": "kapex parachain", + "symbol": "kpx", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KPX.svg", + "color": "306EB6", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kapex-rpc.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kapex%20(Totem).svg", + "addressPrefix": 2007 + }, + { + "disabled": false, + "chainId": "5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "rank": 10, + "paraId": "2094", + "name": "Pendulum", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-pendulum-api.squid.tachi.soramitsu.co.jp/graphql" + } + }, + "assets": [ + { + "id": "ebf2822f-2dd4-4f59-aeb3-ae7defa53932", + "name": "pendulum", + "symbol": "pen", + "precision": 12, + "priceId": "pendulum-chain", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PEN.svg", + "color": "8D809E", + "isUtility": true, + "type": "normal" + }, + { + "id": "bc55b3f0-2b34-4561-aeb6-bd4ca9c88b7e", + "type": "xcm", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "1", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "existentialDeposit": "10000" + }, + { + "id": "a54675c6-83de-4f11-84ee-b8cd1754e512", + "type": "xcm", + "name": "moonbeam", + "symbol": "glmr", + "precision": 18, + "currencyId": "6", + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF" + }, + { + "id": "6578b36f-eed9-4e60-bbd9-def276266957", + "type": "xcm", + "name": "usd coin", + "symbol": "usdc", + "precision": 6, + "currencyId": "2", + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4" + }, + { + "id": "1463120c-42c8-499d-a16f-8fcb9f1ee58c", + "type": "xcm", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "currencyId": "0", + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066" + }, + { + "id": "1070de6d-0bb9-4159-8852-ced84ff7ad10", + "type": "xcm", + "name": "brazilian digital", + "symbol": "brz", + "precision": 18, + "currencyId": "4", + "priceId": "brz", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BRZ.svg", + "color": "14B23D" + }, + { + "id": "cdfd0d0e-f19a-4636-8823-3d3b4efcff03", + "type": "xcm", + "name": "pink", + "symbol": "pink", + "precision": 10, + "currencyId": "7", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PINK.svg", + "color": "FF0066" + }, + { + "id": "a1a2523b-e151-49ed-a42e-73c67e964067", + "type": "xcm", + "name": "hydradx", + "symbol": "hdx", + "precision": 12, + "currencyId": "8", + "priceId": "hydradx", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HDX.svg", + "color": "FFFFFF" + }, + { + "id": "b890fc17-a609-4d79-a45e-2bb6e59f82c0", + "type": "xcm", + "name": "voucher dot", + "symbol": "vdot", + "precision": 10, + "currencyId": "10", + "priceId": "voucher-dot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/vDOT.svg", + "color": "E6007A" + }, + { + "id": "3af48a15-5358-4616-bca5-14cca9c5b0dc", + "type": "xcm", + "name": "astar", + "symbol": "astr", + "precision": 18, + "currencyId": "9", + "priceId": "astar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", + "color": "0AE2FF" + }, + { + "id": "579b7f7f-330f-43a4-b2f0-c890bd97c92d", + "type": "xcm", + "name": "bifrost native coin", + "symbol": "bnc", + "precision": 12, + "currencyId": "11", + "priceId": "bifrost-native-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", + "color": "FFFFFF" + }, + { + "id": "ce9aebd0-c1f6-4ddf-b3a0-65fce4c556e5", + "type": "xcm", + "name": "axelar bridged usdc", + "symbol": "usdc.axl", + "precision": 6, + "currencyId": "12", + "priceId": "axelar-bridged-usdc-cosmos", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC_AXL.svg", + "color": "3E73C4" + } + ], + "nodes": [ + { + "url": "wss://api-pendulum.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc-pendulum.prd.pendulumchain.tech", + "name": "PendulumChain node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Pendulum.svg", + "addressPrefix": 56, + "options": [ + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "6859c81ca95ef624c9dfe4dc6e3381c33e5d6509e35e147092bfbc780f777c4e", + "name": "Ternoa Mainnet", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-ternoa" + }, + "staking": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-ternoa" + } + }, + "assets": [ + { + "id": "2e447cea-6fe1-4b08-8a97-94cc2ee622a6", + "name": "ternoa", + "symbol": "caps", + "precision": 18, + "priceId": "coin-capsule", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CAPS.svg", + "color": "FF002B", + "isUtility": true, + "type": "normal", + "staking": "relaychain" + } + ], + "nodes": [ + { + "url": "wss://mainnet.ternoa.network", + "name": "CapsuleCorp node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Ternoa.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "6d8d9f145c2177fa83512492cdd80a71e29f22473f4a8943a6292149ac319fb9", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2011", + "name": "SORA Kusama parachain", + "ecosystem": "substrate", + "assets": [ + { + "id": "2df458e8-c4a9-4026-986f-8962a36fe604", + "name": "sora", + "symbol": "xor", + "precision": 12, + "priceId": "sora", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", + "color": "EE2233", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://ws.parachain-collator-1.c1.sora2.soramitsu.co.jp", + "name": "Soramitsu node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", + "addressPrefix": 420 + }, + { + "disabled": false, + "chainId": "e92d165ad41e41e215d09713788173aecfdbe34d3bed29409d33a2ef03980738", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2025", + "name": "SORA Polkadot parachain", + "ecosystem": "substrate", + "assets": [ + { + "id": "a7c696d7-42ce-4ed6-a036-4f0f76386c49", + "name": "sora", + "symbol": "xor", + "precision": 18, + "priceId": "sora", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", + "color": "EE2233", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://ws.parachain-collator-1.pc1.sora2.soramitsu.co.jp", + "name": "Soramitsu node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", + "addressPrefix": 81 + }, + { + "disabled": false, + "chainId": "1", + "rank": 1, + "name": "Ethereum", + "ecosystem": "ethereum", + "externalApi": { + "explorers": [ { - "url": "https://rpc.tcgverse.xyz/", - "name": "TCG https node" + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://etherscan.io/{type}/{value}" } ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/tcgverse.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] + "history": { + "type": "etherscan", + "url": "https://api.etherscan.io/api" + } }, - { - "disabled": false, - "chainId": "19011", - "rank": 152, - "name": "HOME Verse Mainnet", - "ecosystem": "ethereum", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.oasys.homeverse.games/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://explorer.oasys.homeverse.games/{type}/{value}" - } - ] + "assets": [ + { + "isUtility": true, + "id": "c2a6c062-d511-4bde-9ce6-ea775d2a302c", + "name": "ethereum", + "symbol": "eth", + "precision": 18, + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "FF0066", + "ethereumType": "normal", + "priceProvider": { + "type": "chainlink", + "id": "0x639fe6ab55c921f74e7fac1ee960c0b6293ba612", + "precision": 8 + } + }, + { + "isUtility": false, + "id": "0x6B175474E89094C44Da98b954EedeAC495271d0F", + "name": "dai stablecoin", + "symbol": "dai", + "precision": 18, + "priceId": "dai", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", + "color": "FF0066", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", + "name": "usd coin", + "symbol": "usdc", + "precision": 6, + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9", + "name": "aave", + "symbol": "aave", + "precision": 18, + "priceId": "aave", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AAVE.svg", + "color": "B6509E", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xD533a949740bb3306d119CC777fa900bA034cd52", + "name": "curve dao", + "symbol": "crv", + "precision": 18, + "priceId": "curve-dao-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRV.svg", + "color": "B6509E", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984", + "name": "uniswap", + "symbol": "uni", + "precision": 18, + "priceId": "uniswap", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UNI.svg", + "color": "FF007A", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x514910771AF9Ca656af840dff83E8264EcF986CA", + "name": "chainlink", + "symbol": "link", + "precision": 18, + "priceId": "chainlink", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LINK.svg", + "color": "FFFFFF", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x111111111117dC0aa78b770fA6A738034120C302", + "name": "1inch", + "symbol": "1inch", + "precision": 18, + "priceId": "1inch", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/1INCH.svg", + "color": "FFFFFF", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xB8c77482e45F1F44dE1745F52C74426C631bDD52", + "name": "bnb", + "symbol": "bnb", + "precision": 18, + "priceId": "binancecoin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", + "color": "F3BA2F", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x455e53CBB86018Ac2B8092FdCd39d8444aFFC3F6", + "name": "polygon ecosystem token", + "symbol": "pol", + "precision": 18, + "priceId": "polygon-ecosystem-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/POL.svg", + "color": "A229C5", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x40FD72257597aA14C7231A7B1aaa29Fce868F677", + "name": "sora", + "symbol": "xor", + "precision": 18, + "priceId": "sora", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", + "color": "EE2233", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xe88f8313e61A97cEc1871EE37fBbe2a8bf3ed1E4", + "name": "sora validator", + "symbol": "val", + "precision": 18, + "priceId": "sora-validator-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VAL.svg", + "color": "F3B966", + "ethereumType": "erc20" }, - "assets": [ + { + "isUtility": false, + "id": "0x519C1001D550C0a1DaE7d1fC220f7d14c2A521BB", + "name": "polkaswap", + "symbol": "pswap", + "precision": 18, + "priceId": "polkaswap", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PSWAP.svg", + "color": "FF0066", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x2e7B0d4F9B2EaF782eD3D160e3a0a4b1a7930aDA", + "name": "ceres", + "symbol": "ceres", + "precision": 18, + "priceId": "ceres", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CERES.svg", + "color": "243579", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x32a7C02e79c4ea1008dD6564b35F131428673c41", + "name": "crust network", + "symbol": "cru", + "precision": 18, + "priceId": "crust-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRU.svg", + "color": "FA8C16", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x3845badAde8e6dFF049820680d1F14bD3903a5d0", + "name": "the sandbox", + "symbol": "sand", + "precision": 18, + "priceId": "sand", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/SAND.svg", + "color": "4AA4EB", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x236501327e701692a281934230AF0b6BE8Df3353", + "name": "fluence", + "symbol": "flt", + "precision": 18, + "priceId": "fluence-2", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/FLT.svg", + "color": "FFFFFF", + "ethereumType": "erc20" + } + ], + "nodes": [ + { + "url": "https://eth-mainnet.blastapi.io/", + "name": "Blast https" + }, + { + "url": "https://ethereum.publicnode.com", + "name": "Public https" + }, + { + "url": "https://nodes.mewapi.io/rpc/eth", + "name": "MEW https" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Ethereum.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "nft", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "56", + "rank": 2, + "name": "BNB Smart Chain", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "etherscan", + "url": "https://api.bscscan.com/api" + }, + "explorers": [ { - "isUtility": true, - "id": "943d4fe9-76e5-48bd-9220-4fcda4e3b8e4", - "name": "oasys", - "symbol": "oas", - "precision": 18, - "priceId": "oasys", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", - "color": "00A84F", - "ethereumType": "normal" + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://bscscan.com/{type}/{value}" } - ], - "nodes": [ + ] + }, + "assets": [ + { + "isUtility": true, + "id": "6e43f1b7-1ec3-48a7-8ecd-8d680578d2b8", + "name": "BNB", + "symbol": "BNB", + "precision": 18, + "priceId": "binancecoin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", + "color": "FF0066", + "ethereumType": "normal", + "priceProvider": { + "type": "chainlink", + "id": "0x6970460aabF80C5BE983C6b74e5D06dEDCA95D4A", + "precision": 8 + } + }, + { + "isUtility": false, + "id": "0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3", + "name": "DAI", + "symbol": "DAI", + "precision": 18, + "priceId": "dai", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", + "color": "FF0066", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x2170Ed0880ac9A755fd29B2688956BD959F933F8", + "name": "ethereum", + "symbol": "eth", + "precision": 18, + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "FF0066", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d", + "name": "usd coin", + "symbol": "usdc", + "precision": 18, + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56", + "name": "binance usd", + "symbol": "busd", + "precision": 18, + "priceId": "binance-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", + "color": "F3BA2F", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0x40af3827F39D0EAcBF4A168f8D4ee67c121D11c9", + "name": "trueusd", + "symbol": "tusd", + "precision": 18, + "priceId": "true-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUSD.svg", + "color": "005ADD", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0xCC42724C6683B7E57334c4E856f4c9965ED682bD", + "name": "polygon", + "symbol": "matic", + "precision": 18, + "priceId": "matic-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", + "color": "8247E5", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82", + "name": "pancakeswap", + "symbol": "cake", + "precision": 18, + "priceId": "pancakeswap-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CAKE.svg", + "color": "D1884F", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0x965F527D9159dCe6288a2219DB51fc6Eef120dD1", + "name": "biswap", + "symbol": "bsw", + "precision": 18, + "priceId": "biswap", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BSW.svg", + "color": "E42648", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0xa260E12d2B924cb899AE80BB58123ac3fEE1E2F0", + "name": "hooked protocol", + "symbol": "hook", + "precision": 18, + "priceId": "hooked-protocol", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HOOK.svg", + "color": "048EC8", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0xcF6BB5389c92Bdda8a3747Ddb454cB7a64626C63", + "name": "venus", + "symbol": "xvs", + "precision": 18, + "priceId": "venus", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XVS.svg", + "color": "048EC8", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0xF21768cCBC73Ea5B6fd3C687208a7c2def2d966e", + "name": "reef", + "symbol": "reef", + "precision": 18, + "priceId": "reef", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/REEF.svg", + "color": "C547CB", + "ethereumType": "bep20" + } + ], + "nodes": [ + { + "url": "https://bsc.publicnode.com", + "name": "Public https" + }, + { + "url": "wss://bsc.publicnode.com", + "name": "Public wss" + }, + { + "url": "https://bsc-mainnet.blastapi.io/", + "name": "Blast https" + }, + { + "url": "wss://bsc-mainnet.blastapi.io/", + "name": "Blast wss" + }, + { + "url": "https://bsc-dataseed1.ninicoin.io/", + "name": "Ninicoin" + }, + { + "url": "https://bsc.nodereal.io/", + "name": "Nodereal" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/bnbchain.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "137", + "rank": 3, + "name": "Polygon", + "ecosystem": "ethereum", + "externalApi": { + "explorers": [ { - "url": "https://rpc.mainnet.oasys.homeverse.games/", - "name": "HOME https node" + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://polygonscan.com/{type}/{value}" } ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/homeverse.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] + "history": { + "type": "etherscan", + "url": "https://api.polygonscan.com/api" + } }, - { - "disabled": false, - "chainId": "5555", - "rank": 153, - "name": "Chain Verse Mainnet", - "ecosystem": "ethereum", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.chainverse.info/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://explorer.chainverse.info/{type}/{value}" - } - ] + "assets": [ + { + "isUtility": true, + "id": "0x0000000000000000000000000000000000001010", + "name": "polygon ecosystem token", + "symbol": "pol", + "precision": 18, + "priceId": "polygon-ecosystem-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/POL.svg", + "color": "A229C5", + "ethereumType": "normal", + "priceProvider": { + "type": "chainlink", + "id": "0x52099d4523531f678dfc568a7b1e5038aadce1d6", + "precision": 8 + } }, - "assets": [ - { - "isUtility": true, - "id": "f1eeb4f0-d87d-41ef-8e23-af5a535b793c", - "name": "oasys", - "symbol": "oas", - "precision": 18, - "priceId": "oasys", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", - "color": "00A84F", - "ethereumType": "normal" + { + "isUtility": false, + "id": "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619", + "name": "weth", + "symbol": "weth", + "precision": 18, + "priceId": "weth", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/WETH.svg", + "color": "FFFFFF", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", + "name": "usd coin", + "symbol": "usdc", + "precision": 6, + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xc2132D05D31c914a87C6611C10748AEb04B58e8F", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x3BA4c387f786bFEE076A58914F5Bd38d668B42c3", + "name": "bnb", + "symbol": "bnb", + "precision": 18, + "priceId": "binancecoin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", + "color": "F3BA2F", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xdAb529f40E671A1D4bF91361c21bf9f0C9712ab7", + "name": "binance usd", + "symbol": "busd", + "precision": 18, + "priceId": "binance-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", + "color": "F3BA2F", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063", + "name": "dai", + "symbol": "dai", + "precision": 18, + "priceId": "dai", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", + "color": "F9AF1A", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xD6DF932A45C0f255f85145f286eA0b292B21C90B", + "name": "aave", + "symbol": "aave", + "precision": 18, + "priceId": "aave", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AAVE.svg", + "color": "B6509E", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x172370d5Cd63279eFa6d502DAB29171933a610AF", + "name": "curve dao", + "symbol": "crv", + "precision": 18, + "priceId": "curve-dao-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRV.svg", + "color": "B6509E", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xb33EaAd8d922B1083446DC23f610c2567fB5180f", + "name": "uniswap", + "symbol": "uni", + "precision": 18, + "priceId": "uniswap", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UNI.svg", + "color": "FF007A", + "ethereumType": "erc20" + } + ], + "nodes": [ + { + "url": "https://polygon-mainnet.blastapi.io/", + "name": "Blast https" + }, + { + "url": "wss://polygon-mainnet.blastapi.io/", + "name": "Blast wss" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polygon.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "nft", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "3af4ff48ec76d2efc8476730f423ac07e25ad48f5f4c9dc39c778b164d808615", + "parentId": "d8761d3c88f26dc12875c00d3165f7d67243d56fc85b4cf19937601a7916e5a9", + "name": "Enjin Matrixchain", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://matrix.subscan.io/{type}/{value}" } ], - "nodes": [ + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/enjin-matrixchain" + } + }, + "assets": [ + { + "id": "13c8d9cb-897b-4507-8ae7-ba2c219d270d", + "name": "enjin coin", + "symbol": "enj", + "precision": 18, + "priceId": "enjincoin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ENJ.svg", + "color": "5A27ED", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc.matrix.blockchain.enjin.io", + "name": "Enjin Foundation node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Enjin.svg", + "addressPrefix": 1110 + }, + { + "disabled": false, + "chainId": "a37725fd8943d2a524cb7ecc65da438f9fa644db78ba24dcd0003e2f95645e8f", + "name": "Canary Matrixchain", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://canary-matrix.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "85c17bd8-2565-4cf3-8e0f-14f38ff55eee", + "name": "enjin coin", + "symbol": "cenj", + "precision": 18, + "priceId": "enjincoin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ENJ.svg", + "color": "5A27ED", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc.matrix.canary.enjin.io", + "name": "Enjin Foundation node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Enjin.svg", + "addressPrefix": 9030, + "options": [ + "testnet" + ] + }, + { + "disabled": true, + "chainId": "d8761d3c88f26dc12875c00d3165f7d67243d56fc85b4cf19937601a7916e5a9", + "name": "Enjin Relaychain", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://enjin.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "43748d94-90ba-41b2-8732-326cd943a501", + "name": "enjin coin", + "symbol": "enj", + "precision": 18, + "priceId": "enjincoin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ENJ.svg", + "color": "5A27ED", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc.relay.blockchain.enjin.io", + "name": "Enjin Foundation node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Enjin.svg", + "addressPrefix": 2135 + }, + { + "disabled": false, + "chainId": "42161", + "rank": 4, + "name": "Arbitrum One", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "oklink", + "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=ARBITRUM" + }, + "explorers": [ { - "url": "https://rpc.chainverse.info/", - "name": "Chain https node" + "type": "oklink", + "types": [ + "tx", + "address" + ], + "url": "https://www.okx.com/web3/explorer/arbitrum/{type}/{value}?channelID=flessw" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/chainverse.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "7225878", - "rank": 154, - "name": "Saakuru Verse Mainnet", - "ecosystem": "ethereum", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.saakuru.network/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://explorer.saakuru.network/{type}/{value}" - } - ] + "assets": [ + { + "isUtility": true, + "id": "37b6375a-0708-4728-bec9-bf15b8680aff", + "name": "ethereum", + "symbol": "eth", + "precision": 18, + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "FF0066", + "ethereumType": "normal" + }, + { + "isUtility": false, + "id": "0x912CE59144191C1204E64559FE8253a0e49E6548", + "name": "arbitrum", + "symbol": "arb", + "precision": 18, + "priceId": "arbitrum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ARB.svg", + "color": "12AAFF", + "ethereumType": "erc20" + } + ], + "nodes": [ + { + "url": "https://arbitrum-one.publicnode.com/", + "name": "Public http node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Arbitrum.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "chainlinkProvider", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "10", + "rank": 5, + "name": "OP Mainnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "oklink", + "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=OP" }, - "assets": [ + "explorers": [ { - "isUtility": true, - "id": "5e15fa7a-b398-49a6-8459-da4b4f660f32", - "name": "oasys", - "symbol": "oas", - "precision": 18, - "priceId": "oasys", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", - "color": "00A84F", - "ethereumType": "normal" - } - ], - "nodes": [ - { - "url": "https://rpc.saakuru.network/", - "name": "Saakuru https node" + "type": "oklink", + "types": [ + "tx", + "address" + ], + "url": "https://www.okx.com/web3/explorer/optimism/{type}/{value}?channelID=flessw" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/saakuruverse.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "50005", - "rank": 155, - "name": "Yooldo Verse Mainnet", - "ecosystem": "ethereum", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.yooldo-verse.xyz/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://explorer.yooldo-verse.xyz/{type}/{value}" - } - ] + "assets": [ + { + "isUtility": true, + "id": "08bb34b8-8027-4fea-948d-5243f5cbd6ba", + "name": "ethereum", + "symbol": "eth", + "precision": 18, + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "FF0066", + "ethereumType": "normal" + }, + { + "isUtility": false, + "id": "0x4200000000000000000000000000000000000042", + "name": "optimism", + "symbol": "op", + "precision": 18, + "priceId": "optimism", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OP.svg", + "color": "FF0420", + "ethereumType": "erc20" + } + ], + "nodes": [ + { + "url": "https://optimism-mainnet.blastapi.io/", + "name": "Blast https node" }, - "assets": [ + { + "url": "wss://optimism-mainnet.blastapi.io/", + "name": "Blast wss node" + }, + { + "url": "https://optimism.publicnode.com/", + "name": "Public http node" + }, + { + "url": "wss://optimism.publicnode.com/", + "name": "Public wss node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Optimism.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "43114", + "rank": 6, + "name": "Avalanche C-Chain", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "oklink", + "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=AVAXC" + }, + "explorers": [ { - "isUtility": true, - "id": "648d069c-c32f-4fbc-af23-14f77a9158aa", - "name": "oasys", - "symbol": "oas", - "precision": 18, - "priceId": "oasys", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", - "color": "00A84F", - "ethereumType": "normal" + "type": "oklink", + "types": [ + "tx", + "address" + ], + "url": "https://www.okx.com/web3/explorer/avax/{type}/{value}?channelID=flessw" } - ], - "nodes": [ + ] + }, + "assets": [ + { + "isUtility": true, + "id": "870f6877-c917-48bc-aa64-723416c94ebb", + "name": "avalanche", + "symbol": "avax", + "precision": 18, + "priceId": "avalanche-2", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AVAX.svg", + "color": "E84142", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://avalanche-c-chain.publicnode.com/", + "name": "Public https node" + }, + { + "url": "wss://avalanche-c-chain.publicnode.com/ext/bc/C/ws", + "name": "Public wss node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Avalanche.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "1101", + "rank": 7, + "name": "Polygon zkEVM", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "oklink", + "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=POLYGON_ZKEVM" + }, + "explorers": [ { - "url": "https://rpc.yooldo-verse.xyz/", - "name": "Yooldo https node" + "type": "oklink", + "types": [ + "tx", + "address" + ], + "url": "https://www.okx.com/web3/explorer/polygon-zkevm/{type}/{value}?channelID=flessw" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/yooldoverse.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "30", - "rank": 16, - "name": "Rootstock Mainnet", - "ecosystem": "ethereum", - "externalApi": { - "history": { - "type": "blockscout", - "url": "https://rootstock.blockscout.com//api/v2/addresses/" - } + "assets": [ + { + "isUtility": true, + "id": "8f85b561-18f5-4cf0-9077-305ebc84d015", + "name": "ethereum", + "symbol": "eth", + "precision": 18, + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "FF0066", + "ethereumType": "normal" + }, + { + "isUtility": false, + "id": "0xA8CE8aee21bC2A48a5EF670afCc9274C7bbbC035", + "name": "usd coin", + "symbol": "usdc", + "precision": 6, + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xa2036f0538221a77A3937F1379699f44945018d0", + "name": "polygon", + "symbol": "matic", + "precision": 18, + "priceId": "matic-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", + "color": "8247E5", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x22b21beddef74fe62f031d2c5c8f7a9f8a4b304d", + "name": "polygon ecosystem token", + "symbol": "pol", + "precision": 18, + "priceId": "polygon-ecosystem-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/POL.svg", + "color": "A229C5", + "ethereumType": "erc20" + } + ], + "nodes": [ + { + "url": "https://zkevm-rpc.com", + "name": "Zkevm https node" + }, + { + "url": "https://polygon-zkevm-mainnet.public.blastapi.io", + "name": "Blast https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polygon.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "7001", + "name": "ZetaChain Testnet", + "ecosystem": "ethereum", + "assets": [ + { + "isUtility": true, + "id": "0f07791b-b091-49c1-81b7-9facba2b7db3", + "name": "zetachain", + "symbol": "zeta", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZETA.svg", + "color": "235643", + "ethereumType": "normal" + } + ], + "externalApi": { + "history": { + "type": "blockscout", + "url": "https://zetachain-athens-3.blockscout.com/api/v2/" + } + }, + "nodes": [ + { + "url": "https://rpc.ankr.com/zetachain_evm_athens_testnet", + "name": "Ankr https node" + }, + { + "url": "https://zetachain-athens-evm.blockpi.network/v1/rpc/public", + "name": "Blockpi https node" + }, + { + "url": "https://zetachain-testnet-evm.itrocket.net", + "name": "Itrocket https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Zetachain.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "7834781d38e4798d548e34ec947d19deea29df148a7bf32484b7b24dacf8d4b7", + "name": "Reef Mainnet", + "ecosystem": "substrate", + "assets": [ + { + "id": "55697eb0-ca77-47e3-a436-b05460ab1ead", + "name": "reef", + "symbol": "reef", + "precision": 18, + "priceId": "reef", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/REEF.svg", + "color": "C547CB", + "isUtility": true, + "type": "normal", + "staking": "relaychain" + } + ], + "externalApi": { + "history": { + "type": "reef", + "url": "https://squid.subsquid.io/reef-explorer/graphql" + }, + "staking": { + "type": "reef", + "url": "https://squid.subsquid.io/reef-explorer/graphql" }, - "assets": [ + "explorers": [ { - "isUtility": true, - "id": "defb1fb8-8cf1-49b1-8dd3-b8dac33394a4", - "name": "rootstock rsk rbtc", - "symbol": "rbtc", - "precision": 18, - "priceId": "rootstock", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RBTC.svg", - "color": "", - "ethereumType": "normal" + "type": "reef", + "types": [ + "transfer", + "extrinsic", + "account" + ], + "url": "https://reefscan.com/{type}/{value}" } - ], - "nodes": [ - { - "url": "https://public-node.rsk.co/", - "name": "Public https node" - }, - { - "url": "https://mycrypto.rsk.co/", - "name": "Mycrypto https node" + ] + }, + "nodes": [ + { + "url": "wss://rpc.reefscan.com/ws", + "name": "Reef Community node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/reefchain.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "f3c7ad88f6a80f366c4be216691411ef0622e8b809b1046ea297ef106058d4eb", + "name": "Manta Parachain", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://manta.subscan.io/{type}/{value}" } ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/rootstock.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet---manta" + } }, - { - "disabled": false, - "chainId": "50dd5d206917bf10502c68fb4d18a59fc8aa31586f4e8856b493e43544aa82aa", - "name": "XX network", - "ecosystem": "substrate", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-xx-network" + "assets": [ + { + "id": "0c41f3da-3c42-413a-aca3-bfb19b717df7", + "name": "manta", + "symbol": "manta", + "precision": 18, + "priceId": "manta-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MANTA.svg", + "color": "29CCB9", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://ws.manta.systems", + "name": "Manta Community node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/mantachain.svg", + "addressPrefix": 77 + }, + { + "disabled": false, + "chainId": "6bd89e052d67a45bb60a9a23e8581053d5e0d619f15cb9865946937e690c42d6", + "name": "Liberland", + "ecosystem": "substrate", + "assets": [ + { + "id": "a6b83d39-a488-4b34-8352-280705a792ea", + "name": "liberland dollar", + "symbol": "lld", + "precision": 12, + "priceId": "liberland-lld", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLD.svg", + "color": "00437F", + "isUtility": true, + "type": "normal" + }, + { + "id": "30b43eb9-36b4-4b40-bf72-330d2e20ee86", + "name": "liberland merit", + "symbol": "llm", + "precision": 12, + "currencyId": "1", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLM.svg", + "color": "EFB900", + "type": "assets", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00073edd278e1bd6a7f9d0b27d4f3e93b73c8f0832b58a4df13c69611a99f156" } }, - "assets": [ - { - "id": "526dca29-63ff-4683-88d6-852d1455b17b", - "name": "xx network", - "symbol": "xx", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XX.svg", - "priceId": "xxcoin", - "color": "0AC1C7", - "isUtility": true, - "type": "normal" + { + "id": "2e7179c9-4308-420e-a654-43c92d119717", + "name": "sora xor", + "symbol": "xor", + "priceId": "sora", + "precision": 18, + "currencyId": "774441749", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", + "color": "EE2233", + "type": "assets", + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200000000000000000000000000000000000000000000000000000000000000" } - ], - "nodes": [ - { - "url": "wss://xxnetwork-rpc.dwellir.com", - "name": "Dwellir node" - }, + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ { - "url": "wss://rpc.xx.network", - "name": "xx Foundation node #1" + "id": "a6b83d39-a488-4b34-8352-280705a792e", + "symbol": "LLD" }, { - "url": "wss://rpc-hetzner.xx.network", - "name": "xx Foundation node #2" + "id": "30b43eb9-36b4-4b40-bf72-330d2e20ee86", + "symbol": "LLM" }, { - "url": "wss://rpc-do.xx.network", - "name": "xx Foundation node #3" + "id": "2e7179c9-4308-420e-a654-43c92d119717", + "symbol": "XOR" + } + ], + "availableDestinations": [ + { + "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", + "assets": [ + { + "id": "a6b83d39-a488-4b34-8352-280705a792e", + "symbol": "LLD", + "minAmount": "1000000000000" + }, + { + "id": "30b43eb9-36b4-4b40-bf72-330d2e20ee86", + "symbol": "LLM" + }, + { + "id": "2e7179c9-4308-420e-a654-43c92d119717", + "symbol": "XOR" + } + ] } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/xxnetwork.svg", - "addressPrefix": 55 + ] }, - { - "disabled": false, - "chainId": "6660", - "name": "Latest Testnet", - "ecosystem": "ethereum", - "externalApi": { - "history": { - "type": "blockscout", - "url": "https://testscan.latestchain.io/api/v2/addresses/" - } + "nodes": [ + { + "url": "wss://mainnet.liberland.org", + "name": "Liberland node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/liberland.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "248", + "name": "Oasys Mainnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "etherscan", + "url": "https://explorer.oasys.games/api" }, - "assets": [ + "explorers": [ { - "isUtility": true, - "id": "1a31227d-c6fe-4c78-a3d6-353be70e56a6", - "name": "latest", - "symbol": "latest", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LATEST.svg", - "color": "FC81EA", - "ethereumType": "normal" + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://explorer.oasys.games/{type}/{value}" } - ], - "nodes": [ + ] + }, + "assets": [ + { + "isUtility": true, + "id": "11d2ece1-ecae-4596-aae4-ee9db83a5e2a", + "name": "oasys", + "symbol": "oas", + "precision": 18, + "priceId": "oasys", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", + "color": "00A84F", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://oasys.blockpi.network/v1/rpc/public/", + "name": "Blockpi https node" + }, + { + "url": "https://rpc.mainnet.oasys.games/", + "name": "Oasys https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/oasys.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "72778", + "name": "CAGA Ankara Testnet", + "ecosystem": "ethereum", + "assets": [ + { + "isUtility": true, + "id": "a9270ef5-379a-4228-8d72-e6efb2b5f7b4", + "name": "caga", + "symbol": "caga", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CAGA.svg", + "color": "FFFFFF", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "wss://wss.ankara-cagacrypto.com", + "name": "Caga wss node" + }, + { + "url": "https://www.ankara-cagacrypto.com", + "name": "Caga https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/cagachain.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "50dd5d206917bf10502c68fb4d18a59fc8aa31586f4e8856b493e43544aa82aa", + "name": "XX network", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-xx-network" + } + }, + "assets": [ + { + "id": "526dca29-63ff-4683-88d6-852d1455b17b", + "name": "xx network", + "symbol": "xx", + "precision": 9, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XX.svg", + "priceId": "xxcoin", + "color": "0AC1C7", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://xxnetwork-rpc.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.xx.network", + "name": "xx Foundation node #1" + }, + { + "url": "wss://rpc-hetzner.xx.network", + "name": "xx Foundation node #2" + }, + { + "url": "wss://rpc-do.xx.network", + "name": "xx Foundation node #3" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/xxnetwork.svg", + "addressPrefix": 55 + }, + { + "disabled": false, + "chainId": "d3d2f3a3495dc597434a99d7d449ebad6616db45e4e4f178f31cc6fa14378b70", + "name": "Avail Turing Testnet", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://avail-turing.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "72778e65-53b6-4cb4-bb4c-c029121eb494", + "name": "avail token", + "symbol": "avail", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Avail.svg", + "color": "56E5FF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://turing-testnet.avail-rpc.com", + "name": "Ankr node" + }, + { + "url": "wss://avail-turing.public.blastapi.io", + "name": "Blast node" + }, + { + "url": "wss://avail-turing-rpc.publicnode.com", + "name": "AllNode node" + }, + { + "url": "wss://turing.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + }, + { + "url": "wss://avail-turing.bountyblok.io", + "name": "Bountyblok node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Avail.svg", + "addressPrefix": 42, + "options": [ + "checkAppId", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "196", + "rank": 13, + "name": "X Layer Mainnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "oklink", + "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=XLAYER" + }, + "explorers": [ { - "url": "https://testnet-rpc.latestchain.io", - "name": "Latest https node" + "type": "oklink", + "types": [ + "tx", + "address" + ], + "url": "https://www.okx.com/explorer/xlayer-test/{type}/{value}" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/latestchain.svg", - "addressPrefix": 0, - "options": [ - "testnet", - "ethereum", - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "9630", - "name": "Latest Mainnet", - "ecosystem": "ethereum", - "externalApi": { + "assets": [ + { + "isUtility": true, + "id": "dcf40e8d-f041-45b8-8cc8-e5b95bedb86e", + "name": "okb", + "symbol": "okb", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XLOKB.svg", + "color": "FFFFFF", + "priceId": "okb", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://rpc.xlayer.tech/", + "name": "X Layer Tech https node" + }, + { + "url": "wss://ws.xlayer.tech/", + "name": "X Layer Tech wss node" + }, + { + "url": "https://xlayerrpc.okx.com/", + "name": "X Layer OKX https node" + }, + { + "url": "wss://xlayerws.okx.com/", + "name": "X Layer OKX wss node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/xlayerchain.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "0614f7b74a2e47f7c8d8e2a5335be84bdde9402a43f5decdec03200a87c8b943", + "rank": 14, + "name": "Analog Testnet", + "ecosystem": "substrate", + "externalApi": { "history": { - "type": "blockscout", - "url": "https://scan.latestchain.io/api/v2/addresses/" + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/analog-testnet__c29yY" } + }, + "assets": [ + { + "id": "9a8799db-a479-4a73-ae81-3b637c8624d8", + "name": "tanlog", + "symbol": "tanlog", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TANLOG.svg", + "color": "9A74F7", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc.testnet.analog.one", + "name": "Analog Testnet node" + } + ], + "options": [ + "utilityFeePayment" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Analog.svg", + "addressPrefix": 12850 + }, + { + "disabled": false, + "chainId": "c1af4cb4eb3918e5db15086c0cc5ec17fb334f728b7c65dd44bfe1e174ff8b3f", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "1004", + "name": "Kusama People", + "ecosystem": "substrate", + "assets": [ + { + "id": "b54f9075-6364-4ad9-8ac2-ed8a604491fd", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kusama-people-rpc.polkadot.io", + "name": "Parity node" + }, + { + "url": "wss://ksm-rpc.stakeworld.io/people", + "name": "Stakeworld node" + } + ], + "options": [ + "identityChain" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/People.svg", + "addressPrefix": 2 + }, + { + "disabled": false, + "chainId": "67fa177a097bfa18f77ea95ab56e9bcdfeb0e5b8a40e46298bb93e16b6fc5008", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "1004", + "name": "Polkadot People", + "ecosystem": "substrate", + "assets": [ + { + "isUtility": true, + "id": "bb56f037-6f96-45e6-9b3c-c9059bf0f731", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://sys.ibp.network/people-polkadot", + "name": "IBP1 node" + }, + { + "url": "wss://sys.dotters.network/people-polkadot", + "name": "IBP2 node" + }, + { + "url": "wss://rpc-people-polkadot.luckyfriday.io", + "name": "LuckyFriday node" }, - "assets": [ + { + "url": "wss://polkadot-people-rpc.polkadot.io", + "name": "Parity node" + }, + { + "url": "wss://people-polkadot.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + } + ], + "options": [ + "identityChain" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/People.svg", + "addressPrefix": 0 + }, + { + "disabled": false, + "chainId": "8217", + "name": "Kaia Mainnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "oklink", + "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=KAIA" + }, + "explorers": [ { - "isUtility": true, - "id": "e7094e62-d86d-4c08-8497-9ebc4c9011ea", - "name": "latest", - "symbol": "latest", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LATEST.svg", - "color": "FC81EA", - "ethereumType": "normal" + "type": "oklink", + "types": [ + "tx", + "address" + ], + "url": "https://www.okx.com/web3/explorer/kaia/{type}/{value}?channelID=flessw" } - ], - "nodes": [ + ] + }, + "assets": [ + { + "isUtility": true, + "id": "dd80081e-7fc3-4a69-8218-57018d6e31c2", + "name": "kaia", + "symbol": "kaia", + "precision": 18, + "priceId": "kaia", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAIA.svg", + "color": "DE1E41", + "ethereumType": "normal" + }, + { + "isUtility": false, + "id": "0x6270b58be569a7c0b8f47594f191631ae5b2c86c", + "name": "usd coin", + "symbol": "usdc", + "precision": 6, + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xcee8faf64bb97a73bb51e115aa89c17ffa8dd167", + "name": "orbit bridge klaytn usd tether", + "symbol": "ousdt", + "precision": 6, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x078db7827a5531359f6cb63f62cfa20183c4f10c", + "name": "dai stablecoin", + "symbol": "dai", + "precision": 18, + "priceId": "dai", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", + "color": "FF0066", + "ethereumType": "erc20" + } + ], + "nodes": [ + { + "url": "https://public-en.node.kaia.io/", + "name": "Kaia Foundation https node" + }, + { + "url": "wss://public-en.node.kaia.io/ws", + "name": "Kaia Foundation wss node" + }, + { + "url": "https://alpha-hardworking-orb.kaia-mainnet.quiknode.pro/", + "name": "QuickNode https node" + }, + { + "url": "wss://alpha-hardworking-orb.kaia-mainnet.quiknode.pro/", + "name": "QuickNode wss node" + }, + { + "url": "https://kaia.blockpi.network/v1/rpc/public", + "name": "Blockpi https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/kaiachain.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "1001", + "name": "Kaia Kairos Testnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "klaytn", + "url": "https://api-baobab.klaytnscope.com/v2/" + }, + "explorers": [ { - "url": "https://mainnet-rpc.latestchain.io", - "name": "Latest https node" + "type": "klaytn", + "types": [ + "tx", + "account" + ], + "url": "https://baobab.klaytnscope.com/{type}/{value}" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/latest.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "72778", - "name": "CAGA Ankara Testnet", - "ecosystem": "ethereum", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.ankara-cagacrypto.com/api" - } + "assets": [ + { + "isUtility": true, + "id": "2ba4723a-74b4-4a6f-a888-e51937773807", + "name": "kaia", + "symbol": "kaia", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAIA.svg", + "color": "FFFFFF", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://public-en.kairos.node.kaia.io", + "name": "Kairos https node" }, - "assets": [ + { + "url": "https://public-en-baobab.klaytn.net", + "name": "Klaytn Foundation https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/kaiachain.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment", + "testnet" + ] + }, + { + "disabled": false, + "chainId": "88", + "name": "Viction", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "vicscan", + "url": "https://www.vicscan.xyz/api/" + }, + "explorers": [ { - "isUtility": true, - "id": "a9270ef5-379a-4228-8d72-e6efb2b5f7b4", - "name": "caga", - "symbol": "caga", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CAGA.svg", - "color": "FFFFFF", - "ethereumType": "normal" + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://www.vicscan.xyz/{type}/{value}" } - ], - "nodes": [ + ] + }, + "assets": [ + { + "isUtility": true, + "id": "d7635547-bc3a-4410-944f-f8b851745c32", + "name": "viction", + "symbol": "vic", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VIC.svg", + "color": "FFFFFF", + "priceId": "tomochain", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://viction.blockpi.network/v1/rpc/public", + "name": "Blockpi https node" + }, + { + "url": "https://rpc.viction.xyz", + "name": "Viction https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/viction.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "995", + "name": "5ire", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "fire", + "url": "https://api.evm.scan.5ire.network/5ire/" + }, + "explorers": [ { - "url": "https://www.ankara-cagacrypto.com", - "name": "Caga https node" + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://5irescan.io/{type}/{value}" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/cagachain.svg", - "addressPrefix": 0, - "options": [ - "testnet", - "ethereum", - "utilityFeePayment" ] }, - { - "disabled": false, - "chainId": "6f09966420b2608d1947ccfb0f2a362450d1fc7fd902c29b67c906eaa965a7ae", - "name": "Avail Goldberg Testnet", - "ecosystem": "substrate", - "externalApi": { + "assets": [ + { + "isUtility": true, + "id": "f9e1d5bb-2402-45c3-9147-e8166e3a7c75", + "name": "5ire", + "symbol": "5fire", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/5IRE.svg", + "color": "071941", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://rpc.5ire.network", + "name": "5ire https node" + }, + { + "url": "wss://rpc.5ire.network", + "name": "5ire wss node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/5irechain.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "b91746b45e0346cc2f815a520b9c6cb4d5c0902af848db0a80f85932d2e8276a", + "name": "Avail DA Mainnet", + "ecosystem": "substrate", + "externalApi": { "explorers": [ { "type": "subscan", @@ -8656,309 +8450,307 @@ "extrinsic", "account" ], - "url": "https://avail-testnet.subscan.io/{type}/{value}" + "url": "https://avail.subscan.io/{type}/{value}" } - ] - }, - "assets": [ - { - "id": "72778e65-53b6-4cb4-bb4c-c029121eb494", - "name": "avail token", - "symbol": "avl", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AVL.svg", - "color": "56E5FF", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://goldberg-testnet-rpc.avail.tools/ws", - "name": "Avail Goldberg Testnet node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Avail.svg", - "addressPrefix": 42, - "options": [ - "checkAppId" - ] + ], + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-avail" + } }, - { - "disabled": false, - "chainId": "0614f7b74a2e47f7c8d8e2a5335be84bdde9402a43f5decdec03200a87c8b943", - "name": "Analog Testnet", - "ecosystem": "substrate", - "assets": [ - { - "id": "9a8799db-a479-4a73-ae81-3b637c8624d8", - "name": "tanlog", - "symbol": "tanlog", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TANLOG.svg", - "color": "9A74F7", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ + "assets": [ { - "url": "wss://rpc.testnet.analog.one", - "name": "Analog Testnet node" - } - ], - "options": [ - "testnet" - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Analog.svg", - "addressPrefix": 12850 - }, - { - "disabled": false, - "chainId": "c1af4cb4eb3918e5db15086c0cc5ec17fb334f728b7c65dd44bfe1e174ff8b3f", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "name": "Kusama People", - "ecosystem": "substrate", - "assets": [ - { - "id": "b54f9075-6364-4ad9-8ac2-ed8a604491fd", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" + "id": "c1f11fa8-7369-4456-a0f2-be66030715c2", + "name": "avail token", + "symbol": "avail", + "precision": 18, + "priceId": "avail", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Avail.svg", + "color": "56E5FF", + "isUtility": true, + "type": "normal" } - ], - "nodes": [ + ], + "nodes": [ { - "url": "wss://kusama-people-rpc.polkadot.io", - "name": "Parity node" + "url": "wss://avail-mainnet.public.blastapi.io/", + "name": "Blastapi node" }, { - "url": "wss://ksm-rpc.stakeworld.io/people", - "name": "Stakeworld node" - } - ], - "options": [ - "identityChain" - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/People.svg", - "addressPrefix": 2 - }, - { - "disabled": false, - "chainId": "8217", - "name": "Klaytn Mainnet Cypress", - "ecosystem": "ethereum", - "externalApi": { - "history": { - "type": "oklink", - "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=KLAYTN" - }, - "explorers": [ - { - "type": "oklink", - "types": [ - "tx", - "address" - ], - "url": "https://www.okx.com/web3/explorer/klaytn/{type}/{value}?channelID=flessw" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "dd80081e-7fc3-4a69-8218-57018d6e31c2", - "name": "klaytn", - "symbol": "klay", - "precision": 18, - "priceId": "klay-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KLAY.svg", - "color": "DE1E41", - "ethereumType": "normal" + "url": "wss://mainnet.avail-rpc.com/", + "name": " Ankr node" }, { - "isUtility": false, - "id": "0x6270b58be569a7c0b8f47594f191631ae5b2c86c", - "name": "usd coin", - "symbol": "usdc", - "precision": 6, - "priceId": "usd-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4", - "ethereumType": "erc20" + "url": "wss://avail-rpc.rubynodes.io/", + "name": " Ruby node" }, { - "isUtility": false, - "id": "0xcee8faf64bb97a73bb51e115aa89c17ffa8dd167", - "name": "orbit bridge klaytn usd tether", - "symbol": "ousdt", - "precision": 6, - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "ethereumType": "erc20" + "url": "wss://avail-us.brightlystake.com", + "name": " BrightlyStake node" }, { - "isUtility": false, - "id": "0x078db7827a5531359f6cb63f62cfa20183c4f10c", - "name": "dai stablecoin", - "symbol": "dai", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "FF0066", - "ethereumType": "erc20" - } - ], - "nodes": [ + "url": "wss://rpc-avail.globalstake.io", + "name": " GlobalStake node" + }, { - "url": "https://public-en-cypress.klaytn.net/", - "name": "Klaytn Foundation https node" + "url": "wss://avail.rpc.bountyblok.io", + "name": "Bountyblok node" }, { - "url": "https://klaytn-pokt.nodies.app/", - "name": "POKT free https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Klaytn.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "1001", - "name": "Kaia Kairos Testnet", - "ecosystem": "ethereum", - "assets": [ - { - "isUtility": true, - "id": "2ba4723a-74b4-4a6f-a888-e51937773807", - "name": "klaytn", - "symbol": "klay", - "precision": 18, - "priceId": "klay-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KLAY.svg", - "color": "DE1E41", - "ethereumType": "normal" - } - ], - "nodes": [ + "url": "wss://avail.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + }, { - "url": "https://public-en.kairos.node.kaia.io", - "name": "Kairos https node" + "url": "wss://avail-rpc.lgns.net/", + "name": "LugaNodes node" }, { - "url": "https://public-en-baobab.klaytn.net", - "name": "Klaytn Foundation https node" + "url": "wss://rpc.avail.stakepool.dev.br/ws", + "name": "StakePool node" + } + ], + "options": [ + "checkAppId" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Avail.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "2340", + "name": "Atleta Olympia", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "blockscout", + "url": "https://blockscout.atleta.network/api/v2/" + }, + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://blockscout.atleta.network/{type}/{value}" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Klaytn.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment", - "testnet" ] }, - { - "disabled": false, - "chainId": "-239", - "name": "Ton Mainnet", - "ecosystem": "ton", - "iosMinAppVersion": "3.8.1", - "externalApi": { - "history": { - "type": "ton", - "url": "https://keeper.tonapi.io" - }, - "explorers": [ - { - "type": "tonviewer", - "types": [ - "tonAccount", - "tonTransaction" - ], - "url": "https://tonviewer.com/{type}/{value}" - } - ] + "assets": [ + { + "isUtility": true, + "id": "e25d94ba-805d-4d82-9238-2c4d3e7d2ff5", + "name": "ATLA", + "symbol": "ATLA", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ATLA.svg", + "color": "FFFFFF", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://testnet-rpc.atleta.network:9944", + "name": "Atla https node" + }, + { + "url": "wss://testnet-rpc.atleta.network:9944", + "name": "Atla wss node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Atleta.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment", + "testnet" + ] + }, + { + "disabled": false, + "chainId": "168168", + "name": "ZChains", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "zchain", + "url": "https://mainnet-scan-api.zchains.com/api/v1/" }, - "assets": [ + "explorers": [ { - "isUtility": true, - "id": "2ba4723a-74b4-4a6f-a888-e51937773807-239", - "name": "toncoin", - "symbol": "ton", - "precision": 9, - "priceId": "the-open-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg", - "color": "0098EA", - "tonType": "normal" + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://scan.zchains.com/{type}/{value}" } - ], - "nodes": [ + ] + }, + "assets": [ + { + "isUtility": true, + "id": "a8b3e303-ded2-4d79-8bb4-1592e0b1230a", + "name": "ZCD", + "symbol": "ZCD", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZCD.svg", + "priceId": "zchains", + "color": "E10600", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://rpc.zchains.com", + "name": "ZChains https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/zchain.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "2525", + "name": "inEVM", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "blockscout", + "url": "https://explorer.inevm.com/api/v2/" + }, + "explorers": [ { - "url": "https://keeper.tonapi.io", - "name": "Keeper api" + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://explorer.inevm.com/{type}/{value}" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg", - "addressPrefix": 0, - "options": ["remoteAssets"] + ] }, - { - "disabled": false, - "chainId": "-3", - "name": "Ton Testnet", - "ecosystem": "ton", - "iosMinAppVersion": "3.8.1", - "externalApi": { - "history": { - "type": "ton", - "url": "https://keeper.tonapi.io" - }, - "explorers": [ - { - "type": "tonviewer", - "types": [ - "tonAccount", - "tonTransaction" - ], - "url": "https://tonviewer.com/{type}/{value}" - } - ] + "assets": [ + { + "isUtility": true, + "id": "d23263f5-1167-4eef-9a8d-a42df86c2647", + "name": "Injective", + "symbol": "INJ", + "precision": 18, + "priceId": "injective-protocol", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INJ.svg", + "color": "00F2FE", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://mainnet.rpc.inevm.com/http", + "name": "inEVM https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/inevm.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "-239", + "name": "Ton Mainnet", + "ecosystem": "ton", + "iosMinAppVersion": "4.0.1", + "externalApi": { + "history": { + "type": "ton", + "url": "https://keeper.tonapi.io" }, - "assets": [ + "explorers": [ { - "isUtility": true, - "id": "2ba4723a-74b4-4a6f-a888-e51937773807-239", - "name": "toncoin", - "symbol": "ton", - "precision": 9, - "priceId": "the-open-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg", - "color": "0098EA", - "tonType": "normal" + "type": "tonviewer", + "types": [ + "tonAccount", + "tonTransaction" + ], + "url": "https://tonviewer.com/{type}/{value}" } - ], - "nodes": [ + ] + }, + "assets": [ + { + "isUtility": true, + "id": "2ba4723a-74b4-4a6f-a888-e51937773807-239", + "name": "toncoin", + "symbol": "ton", + "precision": 9, + "priceId": "the-open-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg", + "color": "0098EA", + "tonType": "normal" + } + ], + "nodes": [ + { + "url": "https://keeper.tonapi.io", + "name": "Keeper api" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg", + "addressPrefix": 0, + "options": ["remoteAssets"] + }, + { + "disabled": false, + "chainId": "-3", + "name": "Ton Testnet", + "ecosystem": "ton", + "iosMinAppVersion": "3.8.1", + "externalApi": { + "history": { + "type": "ton", + "url": "https://keeper.tonapi.io" + }, + "explorers": [ { - "url": "https://testnet.tonapi.io", - "name": "Keeper api testnet" + "type": "tonviewer", + "types": [ + "tonAccount", + "tonTransaction" + ], + "url": "https://tonviewer.com/{type}/{value}" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg", - "addressPrefix": 0, - "options": [ - "remoteAssets", - "testnet" ] - } - ] + }, + "assets": [ + { + "isUtility": true, + "id": "2ba4723a-74b4-4a6f-a888-e51937773807-239", + "name": "toncoin", + "symbol": "ton", + "precision": 9, + "priceId": "the-open-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg", + "color": "0098EA", + "tonType": "normal" + } + ], + "nodes": [ + { + "url": "https://testnet.tonapi.io", + "name": "Keeper api testnet" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg", + "addressPrefix": 0, + "options": [ + "remoteAssets", + "testnet" + ] + } +] From 69c3ebae074af46f435f9fac165f3c4140ca19c1 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Fri, 8 Nov 2024 11:09:49 +0500 Subject: [PATCH 063/156] code review fixes --- fearless.xcodeproj/project.pbxproj | 4 ++++ fearless/Common/Extension/MetaAccountModel.swift | 14 ++++++++++++++ .../ChainAccount/ChainAccountWireframe.swift | 2 +- .../WalletOption/WalletOptionPresenter.swift | 10 +--------- .../WalletOption/WalletOptionProtocols.swift | 2 +- .../WalletOption/WalletOptionViewController.swift | 7 +++++-- .../WalletsManagmentViewModelFactory.swift | 11 ----------- 7 files changed, 26 insertions(+), 24 deletions(-) create mode 100644 fearless/Common/Extension/MetaAccountModel.swift diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index 9cbe7b24ac..efb6762cb8 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -320,6 +320,7 @@ 07C438DE2C638D3900475B14 /* TonConnectManifest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07C438DD2C638D3900475B14 /* TonConnectManifest.swift */; }; 07CA72C32CD8A63F00EF5279 /* CDChainAccountMigrationPolicyV12.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07CA72C22CD8A63F00EF5279 /* CDChainAccountMigrationPolicyV12.swift */; }; 07CA72C52CD8AD0100EF5279 /* CDMetaAccountMigrationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07CA72C42CD8AD0100EF5279 /* CDMetaAccountMigrationPolicy.swift */; }; + 07CA73FB2CDDE27400EF5279 /* MetaAccountModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07CA73FA2CDDE27400EF5279 /* MetaAccountModel.swift */; }; 07D05E4128EC08B800B66C70 /* StakinkPoolRewardCalculator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D05E4028EC08B800B66C70 /* StakinkPoolRewardCalculator.swift */; }; 07D05E4928EEFF2C00B66C70 /* SelectValidatorsStartPoolViewModelState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D05E4728EEFDC900B66C70 /* SelectValidatorsStartPoolViewModelState.swift */; }; 07D05E4A28EEFF2F00B66C70 /* SelectValidatorsStartPoolStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D05E4628EEFDC900B66C70 /* SelectValidatorsStartPoolStrategy.swift */; }; @@ -3530,6 +3531,7 @@ 07C438DD2C638D3900475B14 /* TonConnectManifest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectManifest.swift; sourceTree = ""; }; 07CA72C22CD8A63F00EF5279 /* CDChainAccountMigrationPolicyV12.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CDChainAccountMigrationPolicyV12.swift; sourceTree = ""; }; 07CA72C42CD8AD0100EF5279 /* CDMetaAccountMigrationPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CDMetaAccountMigrationPolicy.swift; sourceTree = ""; }; + 07CA73FA2CDDE27400EF5279 /* MetaAccountModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetaAccountModel.swift; sourceTree = ""; }; 07D05E4028EC08B800B66C70 /* StakinkPoolRewardCalculator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakinkPoolRewardCalculator.swift; sourceTree = ""; }; 07D05E4628EEFDC900B66C70 /* SelectValidatorsStartPoolStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartPoolStrategy.swift; sourceTree = ""; }; 07D05E4728EEFDC900B66C70 /* SelectValidatorsStartPoolViewModelState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartPoolViewModelState.swift; sourceTree = ""; }; @@ -10145,6 +10147,7 @@ FA24FEFD2B95C32200CD9E04 /* Decimal+DoubleValue.swift */, FAC6CDA82BA814F20013A17E /* UIControl+Disable.swift */, 0778A1292C5763D6008A1254 /* Task.swift */, + 07CA73FA2CDDE27400EF5279 /* MetaAccountModel.swift */, ); path = Extension; sourceTree = ""; @@ -17473,6 +17476,7 @@ FAA0133128DA12B6000A5230 /* StakingPoolMainViewController.swift in Sources */, FA68301C2930DD35002AD926 /* RecommendedValidatorListPoolViewModelFactory.swift in Sources */, FA93A30C2834FCAD0021330F /* ValidatorSearchRelaychainStrategy.swift in Sources */, + 07CA73FB2CDDE27400EF5279 /* MetaAccountModel.swift in Sources */, 0701B98E2C78FAF000DCD395 /* LiquidityPoolListCell.swift in Sources */, 844CB56E26F9CB1500396E13 /* CrowdloanLocalStorageSubscriber.swift in Sources */, 073417B4298BA28300104F41 /* EquilibriumTotalWalletService.swift in Sources */, diff --git a/fearless/Common/Extension/MetaAccountModel.swift b/fearless/Common/Extension/MetaAccountModel.swift new file mode 100644 index 0000000000..6a4542995c --- /dev/null +++ b/fearless/Common/Extension/MetaAccountModel.swift @@ -0,0 +1,14 @@ +import Foundation +import SSFModels +import UIKit + +extension MetaAccountModel { + func icon() -> UIImage { + switch ecosystem { + case .regular: + return R.image.iconBirdGreen()! + case .ton: + return R.image.tonIcon()! + } + } +} diff --git a/fearless/Modules/NewWallet/ChainAccount/ChainAccountWireframe.swift b/fearless/Modules/NewWallet/ChainAccount/ChainAccountWireframe.swift index ea33b9c341..e01677c86e 100644 --- a/fearless/Modules/NewWallet/ChainAccount/ChainAccountWireframe.swift +++ b/fearless/Modules/NewWallet/ChainAccount/ChainAccountWireframe.swift @@ -172,7 +172,7 @@ final class ChainAccountWireframe: ChainAccountWireframeProtocol { func showCreate(uniqueChainModel: UniqueChainModel, from view: ControllerBackedProtocol?) { guard let createController = AccountCreateViewFactory.createViewForOnboarding( - ecosystem: .regular, // TODO: - Select ecosystem + ecosystem: .regular, model: UsernameSetupModel(username: uniqueChainModel.meta.name), flow: .chain(model: uniqueChainModel) )?.controller else { diff --git a/fearless/Modules/WalletOption/WalletOptionPresenter.swift b/fearless/Modules/WalletOption/WalletOptionPresenter.swift index b371365371..fe5edc27a9 100644 --- a/fearless/Modules/WalletOption/WalletOptionPresenter.swift +++ b/fearless/Modules/WalletOption/WalletOptionPresenter.swift @@ -11,15 +11,6 @@ final class WalletOptionPresenter { private let wallet: MetaAccountModel - lazy var hasWalletDetailsButton: Bool = { - switch wallet.ecosystem { - case .regular: - return true - case .ton: - return false - } - }() - // MARK: - Constructors init( @@ -95,6 +86,7 @@ extension WalletOptionPresenter: WalletOptionViewOutput { func didLoad(view: WalletOptionViewInput) { self.view = view interactor.setup(with: self) + view.walletDetailsButton(isVisible: wallet.ecosystem.isRegular) } } diff --git a/fearless/Modules/WalletOption/WalletOptionProtocols.swift b/fearless/Modules/WalletOption/WalletOptionProtocols.swift index eae58a764b..222eda5e8c 100644 --- a/fearless/Modules/WalletOption/WalletOptionProtocols.swift +++ b/fearless/Modules/WalletOption/WalletOptionProtocols.swift @@ -4,10 +4,10 @@ typealias WalletOptionModuleCreationResult = (view: WalletOptionViewInput, input protocol WalletOptionViewInput: ControllerBackedProtocol { func setDeleteButtonIsVisible(_ isVisible: Bool) + func walletDetailsButton(isVisible: Bool) } protocol WalletOptionViewOutput: AnyObject { - var hasWalletDetailsButton: Bool { get } func didLoad(view: WalletOptionViewInput) func walletDetailsDidTap() func exportWalletDidTap() diff --git a/fearless/Modules/WalletOption/WalletOptionViewController.swift b/fearless/Modules/WalletOption/WalletOptionViewController.swift index 542c9285d8..042b6d17c4 100644 --- a/fearless/Modules/WalletOption/WalletOptionViewController.swift +++ b/fearless/Modules/WalletOption/WalletOptionViewController.swift @@ -34,8 +34,6 @@ final class WalletOptionViewController: UIViewController, ViewHolder { super.viewDidLoad() setupActions() output.didLoad(view: self) - rootView.walletDetailsButton.isHidden = !output.hasWalletDetailsButton - rootView.accountScoreButton.isHidden = !output.hasWalletDetailsButton } // MARK: - Private methods @@ -65,6 +63,11 @@ extension WalletOptionViewController: WalletOptionViewInput { func setDeleteButtonIsVisible(_ isVisible: Bool) { rootView.deleteWalletButton.isHidden = !isVisible } + + func walletDetailsButton(isVisible: Bool) { + rootView.walletDetailsButton.isHidden = !isVisible + rootView.accountScoreButton.isHidden = !isVisible + } } // MARK: - Localizable diff --git a/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentViewModelFactory.swift b/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentViewModelFactory.swift index 7a8aea95bf..4482adb09e 100644 --- a/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentViewModelFactory.swift +++ b/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentViewModelFactory.swift @@ -152,14 +152,3 @@ final class WalletsManagmentViewModelFactory: WalletsManagmentViewModelFactoryPr return priceWithChangeAttributed } } - -extension MetaAccountModel { - func icon() -> UIImage { - switch ecosystem { - case .regular: - return R.image.iconBirdGreen()! - case .ton: - return R.image.tonIcon()! - } - } -} From ca1fb8f94246b00d72cea3efc69089f486c38268 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Mon, 11 Nov 2024 10:29:49 +0500 Subject: [PATCH 064/156] v12 chains.json for prod --- fearless/Common/Configs/ApplicationConfigs.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fearless/Common/Configs/ApplicationConfigs.swift b/fearless/Common/Configs/ApplicationConfigs.swift index 4ccff2c1ac..a1a69e5167 100644 --- a/fearless/Common/Configs/ApplicationConfigs.swift +++ b/fearless/Common/Configs/ApplicationConfigs.swift @@ -153,9 +153,9 @@ extension ApplicationConfig: ApplicationConfigProtocol, XcmConfigProtocol { } #else if isDev.or(false) { - return GitHubUrl.url(suffix: "chains/v11/chains_dev.json", branch: .developFree) + return GitHubUrl.url(suffix: "chains/v12/chains_dev.json", branch: .developFree) } else { - return GitHubUrl.url(suffix: "chains/v11/chains.json") + return GitHubUrl.url(suffix: "chains/v12/chains.json") } #endif } From 8cab0a619d399faadf6df1d7693238e55e8134ea Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Mon, 11 Nov 2024 10:57:51 +0500 Subject: [PATCH 065/156] feature toggle has been removed from chains application config --- fearless/Common/Configs/ApplicationConfigs.swift | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/fearless/Common/Configs/ApplicationConfigs.swift b/fearless/Common/Configs/ApplicationConfigs.swift index a1a69e5167..b42b116e69 100644 --- a/fearless/Common/Configs/ApplicationConfigs.swift +++ b/fearless/Common/Configs/ApplicationConfigs.swift @@ -146,17 +146,9 @@ extension ApplicationConfig: ApplicationConfigProtocol, XcmConfigProtocol { var chainsSourceUrl: URL { let isDev = LocalToggleService.shared.chainsListToggle?.storageValue #if F_DEV - if isDev.or(true) { - return GitHubUrl.url(suffix: "chains/v12/chains_dev.json", branch: .developFree) - } else { - return GitHubUrl.url(suffix: "chains/v12/chains.json") - } + return GitHubUrl.url(suffix: "chains/v12/chains_dev.json", branch: .developFree) #else - if isDev.or(false) { - return GitHubUrl.url(suffix: "chains/v12/chains_dev.json", branch: .developFree) - } else { - return GitHubUrl.url(suffix: "chains/v12/chains.json") - } + return GitHubUrl.url(suffix: "chains/v12/chains.json") #endif } From 4ebe5339ed04da30c73f9b6e33c66cb08a27d360 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Mon, 11 Nov 2024 13:18:40 +0500 Subject: [PATCH 066/156] [#FLW-5010] On EVM/Substrate wallet we should not show dApp browser --- .../MainTabBar/MainTabBarViewController.swift | 17 ++++---- .../MainTabBar/MainTabBarViewFactory.swift | 39 +++++++++++++++++-- .../Modules/Profile/ProfilePresenter.swift | 2 - .../Modules/Profile/ProfileProtocol.swift | 1 - .../Modules/Profile/ProfileWireframe.swift | 17 -------- .../ViewModel/ProfileViewModelFactory.swift | 21 ---------- 6 files changed, 44 insertions(+), 53 deletions(-) diff --git a/fearless/Modules/MainTabBar/MainTabBarViewController.swift b/fearless/Modules/MainTabBar/MainTabBarViewController.swift index 347d0d45d9..96b5a635a5 100644 --- a/fearless/Modules/MainTabBar/MainTabBarViewController.swift +++ b/fearless/Modules/MainTabBar/MainTabBarViewController.swift @@ -20,7 +20,7 @@ final class MainTabBarViewController: UITabBarController { self.eventCenter = eventCenter self.fullViewControllersList = viewControllers self.wallet = wallet - + super.init(nibName: nil, bundle: nil) self.viewControllers = viewControllers @@ -35,7 +35,7 @@ final class MainTabBarViewController: UITabBarController { override func viewDidLoad() { super.viewDidLoad() delegate = self - + eventCenter.add(observer: self, dispatchIn: .main) } @@ -54,7 +54,7 @@ final class MainTabBarViewController: UITabBarController { setValue(tabBar, forKey: "tabBar") applyLocalization() - + update(with: wallet) } @@ -83,19 +83,20 @@ final class MainTabBarViewController: UITabBarController { private func wrappedSelectedViewController() -> UIViewController? { selectedViewController?.navigationRootViewController() } - + private func update(with wallet: MetaAccountModel) { if let tabBar = self.tabBar as? TabBar { tabBar.setup(for: wallet.ecosystem) } + let indexes: IndexSet switch wallet.ecosystem { case .regular: - setViewControllers(fullViewControllersList, animated: true) + indexes = [0, 2, 3, 4, 5] case .ton: - let indexes: IndexSet = [0, 1, 4] - let tonViewControllers = indexes.map { fullViewControllersList[$0] } - setViewControllers(tonViewControllers, animated: true) + indexes = [0, 1, 5] } + let tonViewControllers = indexes.map { fullViewControllersList[$0] } + setViewControllers(tonViewControllers, animated: true) } } diff --git a/fearless/Modules/MainTabBar/MainTabBarViewFactory.swift b/fearless/Modules/MainTabBar/MainTabBarViewFactory.swift index 998563c7f9..81fa1c65db 100644 --- a/fearless/Modules/MainTabBar/MainTabBarViewFactory.swift +++ b/fearless/Modules/MainTabBar/MainTabBarViewFactory.swift @@ -85,7 +85,10 @@ final class MainTabBarViewFactory: MainTabBarViewFactoryProtocol { let walletController = createWalletController(walletConnect: walletConnect) viewControllers.append(walletController) - let crowdloanController = createBrowserController(wallet: wallet) + let dAppController = createBrowserController(wallet: wallet) + viewControllers.append(dAppController) + + let crowdloanController = createCrowdloanController() viewControllers.append(crowdloanController) let polkaswapControoller = createPolkaswapController(wallet: wallet) @@ -159,18 +162,18 @@ final class MainTabBarViewFactory: MainTabBarViewFactoryProtocol { .withRenderingMode(.alwaysOriginal) var navigationController: FearlessNavigationController - + if let viewController = viewController { navigationController = FearlessNavigationController(rootViewController: viewController) } else { navigationController = FearlessNavigationController() } - + navigationController.tabBarItem = createTabBarItem( normalImage: normalIcon, selectedImage: selectedIcon ) - + return navigationController } @@ -240,6 +243,34 @@ final class MainTabBarViewFactory: MainTabBarViewFactoryProtocol { return fakeSwapViewController } + static func createCrowdloanController() -> UIViewController? { + let crowdloanState = CrowdloanSharedState() + crowdloanState.settings.setup() + + guard let selectedMetaAccount = SelectedWalletSettings.shared.value, + let crowloanView = CrowdloanListViewFactory.createView( + with: crowdloanState, + selectedMetaAccount: selectedMetaAccount + ) + else { + return nil + } + + let navigationController = FearlessNavigationController(rootViewController: crowloanView.controller) + + let icon = R.image.iconTabCrowloan() + let normalIcon = icon?.tinted(with: R.color.colorGray()!)? + .withRenderingMode(.alwaysOriginal) + let selectedIcon = icon?.tinted(with: R.color.colorWhite()!)? + .withRenderingMode(.alwaysOriginal) + navigationController.tabBarItem = createTabBarItem( + normalImage: normalIcon, + selectedImage: selectedIcon + ) + + return navigationController + } + static func createTabBarItem( normalImage: UIImage?, selectedImage: UIImage? diff --git a/fearless/Modules/Profile/ProfilePresenter.swift b/fearless/Modules/Profile/ProfilePresenter.swift index 95a64ed4b1..1115cea211 100644 --- a/fearless/Modules/Profile/ProfilePresenter.swift +++ b/fearless/Modules/Profile/ProfilePresenter.swift @@ -103,8 +103,6 @@ extension ProfilePresenter: ProfilePresenterProtocol { break case .walletConnect: wireframe.showWalletConnect(from: view) - case .crowdloans: - wireframe.showCrowdloan(from: view) } } diff --git a/fearless/Modules/Profile/ProfileProtocol.swift b/fearless/Modules/Profile/ProfileProtocol.swift index ad1e803902..dee7fbb6f9 100644 --- a/fearless/Modules/Profile/ProfileProtocol.swift +++ b/fearless/Modules/Profile/ProfileProtocol.swift @@ -57,7 +57,6 @@ protocol ProfileWireframeProtocol: ErrorPresentable, func showPolkaswapDisclaimer(from view: ControllerBackedProtocol?) func showWalletConnect(from view: ControllerBackedProtocol?) func openDebugMenu(from view: ControllerBackedProtocol?) - func showCrowdloan(from view: ControllerBackedProtocol?) } protocol ProfileViewFactoryProtocol: AnyObject { diff --git a/fearless/Modules/Profile/ProfileWireframe.swift b/fearless/Modules/Profile/ProfileWireframe.swift index bbe0ea0213..4d7297260a 100644 --- a/fearless/Modules/Profile/ProfileWireframe.swift +++ b/fearless/Modules/Profile/ProfileWireframe.swift @@ -127,23 +127,6 @@ final class ProfileWireframe: ProfileWireframeProtocol, AuthorizationPresentable view?.controller.present(navigation, animated: true) } - func showCrowdloan(from view: ControllerBackedProtocol?) { - let crowdloanState = CrowdloanSharedState() - crowdloanState.settings.setup() - - guard let selectedMetaAccount = SelectedWalletSettings.shared.value, - let crowloanView = CrowdloanListViewFactory.createView( - with: crowdloanState, - selectedMetaAccount: selectedMetaAccount - ) - else { - return - } - - let navigationController = FearlessNavigationController(rootViewController: crowloanView.controller) - view?.controller.present(navigationController, animated: true) - } - // MARK: Private private func showPinSetup(from view: ProfileViewProtocol?) { diff --git a/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift b/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift index 209cdb9f52..3cfbfb2458 100644 --- a/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift +++ b/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift @@ -19,7 +19,6 @@ protocol ProfileViewModelFactoryProtocol: AnyObject { enum ProfileOption: UInt, CaseIterable { case walletConnect case accountList - case crowdloans case currency case language case polkaswapDisclaimer @@ -174,13 +173,6 @@ final class ProfileViewModelFactory: ProfileViewModelFactoryProtocol { } return createAccountScoreViewModel(locale: locale) - case .crowdloans: - switch ecosystem { - case .regular: - return createCrowdloans(for: locale) - default: - return nil - } } } @@ -264,19 +256,6 @@ final class ProfileViewModelFactory: ProfileViewModelFactoryProtocol { ) } - private func createCrowdloans(for locale: Locale) -> ProfileOptionViewModel { - let title = R.string.localizable - .tabbarCrowdloanTitle(preferredLanguages: locale.rLanguages) - return ProfileOptionViewModel( - title: title, - icon: R.image.crowdloansProfileIcon()!, - accessoryTitle: nil, - accessoryImage: nil, - accessoryType: .arrow, - option: .crowdloans - ) - } - private func createLanguageViewModel(from language: Language?, locale: Locale) -> ProfileOptionViewModel { let title = R.string.localizable .languageTitle(preferredLanguages: locale.rLanguages) From 43a6394001f4e1798911843c46ef17f473e0b896 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Mon, 11 Nov 2024 13:35:31 +0500 Subject: [PATCH 067/156] [#FLW-5040] We cant create new wallet from browser screen --- .../CrowdloanList/CrowdloanListInteractor.swift | 12 +++++++----- .../CrowdloanList/CrowdloanListViewFactory.swift | 1 - .../CrowdloansListInteractor+Protocols.swift | 4 +++- .../Modules/DappBrowser/DappBrowserPresenter.swift | 4 ++++ .../Modules/DappBrowser/DappBrowserProtocols.swift | 2 +- .../MainTabBar/MainTabBarViewController.swift | 1 + 6 files changed, 16 insertions(+), 8 deletions(-) diff --git a/fearless/Modules/Crowdloan/CrowdloanList/CrowdloanListInteractor.swift b/fearless/Modules/Crowdloan/CrowdloanList/CrowdloanListInteractor.swift index 053376bd06..01483a29b0 100644 --- a/fearless/Modules/Crowdloan/CrowdloanList/CrowdloanListInteractor.swift +++ b/fearless/Modules/Crowdloan/CrowdloanList/CrowdloanListInteractor.swift @@ -7,7 +7,9 @@ import SSFAccountManagment final class CrowdloanListInteractor: RuntimeConstantFetching { weak var presenter: CrowdloanListInteractorOutputProtocol! - let selectedMetaAccount: MetaAccountModel + var selectedMetaAccount: MetaAccountModel? { + SelectedWalletSettings.shared.value + } let crowdloanOperationFactory: CrowdloanOperationFactoryProtocol let jsonDataProviderFactory: JsonDataProviderFactoryProtocol let chainRegistry: ChainRegistryProtocol @@ -33,7 +35,6 @@ final class CrowdloanListInteractor: RuntimeConstantFetching { } init( - selectedMetaAccount: MetaAccountModel, settings: CrowdloanChainSettings, chainRegistry: ChainRegistryProtocol, crowdloanOperationFactory: CrowdloanOperationFactoryProtocol, @@ -45,7 +46,6 @@ final class CrowdloanListInteractor: RuntimeConstantFetching { logger: LoggerProtocol? = nil, eventCenter: EventCenterProtocol ) { - self.selectedMetaAccount = selectedMetaAccount self.crowdloanOperationFactory = crowdloanOperationFactory self.chainRegistry = chainRegistry self.jsonDataProviderFactory = jsonDataProviderFactory @@ -64,7 +64,7 @@ final class CrowdloanListInteractor: RuntimeConstantFetching { connection: ChainConnection, runtimeService: RuntimeCodingServiceProtocol ) { - guard !crowdloans.isEmpty else { + guard !crowdloans.isEmpty, let selectedMetaAccount else { presenter.didReceiveContributions(result: .success([:])) return } @@ -267,7 +267,9 @@ extension CrowdloanListInteractor { } func handleSelectionChange(to chain: ChainModel) { - guard let accountId = selectedMetaAccount.fetch(for: chain.accountRequest())?.accountId else { + guard + let selectedMetaAccount, + let accountId = selectedMetaAccount.fetch(for: chain.accountRequest())?.accountId else { presenter.didReceiveAccountInfo( result: .failure(ChainAccountFetchingError.accountNotExists) ) diff --git a/fearless/Modules/Crowdloan/CrowdloanList/CrowdloanListViewFactory.swift b/fearless/Modules/Crowdloan/CrowdloanList/CrowdloanListViewFactory.swift index 8c19ef62b5..f2994f0395 100644 --- a/fearless/Modules/Crowdloan/CrowdloanList/CrowdloanListViewFactory.swift +++ b/fearless/Modules/Crowdloan/CrowdloanList/CrowdloanListViewFactory.swift @@ -80,7 +80,6 @@ struct CrowdloanListViewFactory { ) return CrowdloanListInteractor( - selectedMetaAccount: selectedMetaAccount, settings: state.settings, chainRegistry: chainRegistry, crowdloanOperationFactory: crowdloanOperationFactory, diff --git a/fearless/Modules/Crowdloan/CrowdloanList/CrowdloansListInteractor+Protocols.swift b/fearless/Modules/Crowdloan/CrowdloanList/CrowdloansListInteractor+Protocols.swift index 681241754e..9d1f7c7d62 100644 --- a/fearless/Modules/Crowdloan/CrowdloanList/CrowdloansListInteractor+Protocols.swift +++ b/fearless/Modules/Crowdloan/CrowdloanList/CrowdloansListInteractor+Protocols.swift @@ -14,7 +14,9 @@ extension CrowdloanListInteractor: CrowdloanListInteractorInputProtocol { return } - guard let accountId = selectedMetaAccount.fetch(for: chain.accountRequest())?.accountId else { + guard + let selectedMetaAccount, + let accountId = selectedMetaAccount.fetch(for: chain.accountRequest())?.accountId else { presenter.didReceiveAccountInfo( result: .failure(ChainAccountFetchingError.accountNotExists) ) diff --git a/fearless/Modules/DappBrowser/DappBrowserPresenter.swift b/fearless/Modules/DappBrowser/DappBrowserPresenter.swift index 78e8f15c31..f461693a18 100644 --- a/fearless/Modules/DappBrowser/DappBrowserPresenter.swift +++ b/fearless/Modules/DappBrowser/DappBrowserPresenter.swift @@ -219,6 +219,10 @@ extension DappBrowserPresenter: WalletsManagmentModuleOutput { self.wallet = wallet provideWalletViewModel() } + + func showAddNewWallet() { + router.showCreateNewWallet(ecosystem: nil, from: view) + } } // MARK: - NetworkManagmentModuleOutput diff --git a/fearless/Modules/DappBrowser/DappBrowserProtocols.swift b/fearless/Modules/DappBrowser/DappBrowserProtocols.swift index d3f43f1a4c..2f6672435c 100644 --- a/fearless/Modules/DappBrowser/DappBrowserProtocols.swift +++ b/fearless/Modules/DappBrowser/DappBrowserProtocols.swift @@ -5,7 +5,7 @@ typealias DappBrowserModuleCreationResult = ( input: DappBrowserModuleInput ) -protocol DappBrowserRouterInput: AnyObject { +protocol DappBrowserRouterInput: AccountManagementPresentable { func showWalletManagment( from view: ControllerBackedProtocol?, moduleOutput: WalletsManagmentModuleOutput? diff --git a/fearless/Modules/MainTabBar/MainTabBarViewController.swift b/fearless/Modules/MainTabBar/MainTabBarViewController.swift index 96b5a635a5..cd819bf4d6 100644 --- a/fearless/Modules/MainTabBar/MainTabBarViewController.swift +++ b/fearless/Modules/MainTabBar/MainTabBarViewController.swift @@ -96,6 +96,7 @@ final class MainTabBarViewController: UITabBarController { indexes = [0, 1, 5] } let tonViewControllers = indexes.map { fullViewControllersList[$0] } + selectedIndex = 0 setViewControllers(tonViewControllers, animated: true) } } From ce22dde7112c238032068291567065e9699d6090 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Tue, 12 Nov 2024 13:14:57 +0500 Subject: [PATCH 068/156] [#FLW-5046] Main screen asset balance visibility --- .../Common/Helpers/WalletAssetsObserver.swift | 3 +++ .../ChainAssetListBuilder.swift | 24 ++++++++++++++----- .../AssetManagementViewModelFactory.swift | 17 +++++++++---- 3 files changed, 34 insertions(+), 10 deletions(-) diff --git a/fearless/Common/Helpers/WalletAssetsObserver.swift b/fearless/Common/Helpers/WalletAssetsObserver.swift index a6ba9d41f9..d617b684ed 100644 --- a/fearless/Common/Helpers/WalletAssetsObserver.swift +++ b/fearless/Common/Helpers/WalletAssetsObserver.swift @@ -108,6 +108,9 @@ final class WalletAssetsObserverImpl: WalletAssetsObserver { returning: [ChainModel: [ChainAssetId: AccountInfo?]].self ) { group in chains.forEach { chain in + guard !chain.ecosystem.isTon else { + return + } group.addTask { do { let accountInfos = try await self.accountInfoRemote.fetchAccountInfos(for: chain, wallet: self.wallet) diff --git a/fearless/Common/ViewModelFactory/ChainAssetListBuilder.swift b/fearless/Common/ViewModelFactory/ChainAssetListBuilder.swift index ca426037c5..835d9da95f 100644 --- a/fearless/Common/ViewModelFactory/ChainAssetListBuilder.swift +++ b/fearless/Common/ViewModelFactory/ChainAssetListBuilder.swift @@ -356,13 +356,25 @@ extension ChainAssetListBuilder { chainAssets: [ChainAsset], for wallet: MetaAccountModel ) -> [ChainAsset] { - let enabledAssetIds: [String] = wallet.assetsVisibility - .filter { !$0.hidden } - .map { $0.assetId } - let enabled = chainAssets.filter { - enabledAssetIds.contains($0.identifier) + switch wallet.ecosystem { + case .regular: + let enabledAssetIds: [String] = wallet.assetsVisibility + .filter { !$0.hidden } + .map { $0.assetId } + let enabled = chainAssets.filter { + enabledAssetIds.contains($0.identifier) + } + return enabled + case .ton: + let tonChainAssets = chainAssets.filter { chainAsset in + if let assetVisibility = wallet.assetsVisibility.first(where: { $0.assetId == chainAsset.identifier }) { + return !assetVisibility.hidden + } else { + return true + } + } + return tonChainAssets } - return enabled } func defaultByPopular(chainAssets: [ChainAsset]) -> [ChainAsset] { diff --git a/fearless/Modules/AssetManagement/ViewModel/AssetManagementViewModelFactory.swift b/fearless/Modules/AssetManagement/ViewModel/AssetManagementViewModelFactory.swift index 48001af0b9..ba6f4f766e 100644 --- a/fearless/Modules/AssetManagement/ViewModel/AssetManagementViewModelFactory.swift +++ b/fearless/Modules/AssetManagement/ViewModel/AssetManagementViewModelFactory.swift @@ -277,10 +277,19 @@ final class AssetManagementViewModelFactoryDefault: AssetManagementViewModelFact wallet: MetaAccountModel, chainAsset: ChainAsset ) -> Bool { - let isEnabled = wallet.assetsVisibility.contains(where: { - $0.assetId == chainAsset.identifier && !$0.hidden - }) - return isEnabled + switch wallet.ecosystem { + case .regular: + let isEnabled = wallet.assetsVisibility.contains(where: { + $0.assetId == chainAsset.identifier && !$0.hidden + }) + return isEnabled + case .ton: + if let visibility = wallet.assetsVisibility.first(where: { $0.assetId == chainAsset.identifier}) { + return !visibility.hidden + } else { + return true + } + } } private func createFilterButtonTitle( From a17a01d1e2796d9738c30c279c645bc38ed5f661 Mon Sep 17 00:00:00 2001 From: Radmir <52320354+DRadmir@users.noreply.github.com> Date: Tue, 12 Nov 2024 16:34:33 +0500 Subject: [PATCH 069/156] Feature/fw adoptation (#1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Support has been provided for the new ecosystem * Ton connect has been supported * pod cache clean * Local feature toggle has been implemented * test environment has been provided * Prices for ton jettons * [#FLW-4884, #FLW-4885, #4886] dapp connections fixes * [#FLW-4890, #FLW-4893] Remove the connected app from mobile if the disconnect occurred on the web * [#FLW-4894] The selected favourite network disappearing * [#FLW-4923] There is not Sumimasen screen * [#FLW-4924] The search function doesn’t work on the Connected screen * SwiftLint * Duplicating Assets and Prices has been fixed * [#FLW-4925] There are wrong icons * [#FLW-4927, #FLW-4928] Substrate transfer has been fixed * [#FLW-4929] There is an error on Bokolo * [#FLW-4930, #FLW-4933] There is an error on ETH * [#FLW-4935] Create a new wallet or import by mnemonic . By JSON we can export only substrate * Short doc for the Ton Connect Service * [#FLW-4936] There is not possible to sign the transaction * Short doc for the Ton Connect message builder * [#FLW-4928] There is an error on DOT and Acala * [#FLW-4929] There is an error on Bokolo * [#FLW-4933] Create a new wallet or import by mnemonic . On the export flow there is not RAW Seed * [#FLW-4937] On the From and To we can see same address * Select chains for debug menu * equatable fix * [#FLW-4937] On the From and To we can see same address * chains list toggle fix * ton token * [#FLW-4934] Message for debug * ton key fix * [#FLW-4941, #FLW-4942] After importing the wallet there is not ETH balance * Revert "[#FLW-4934] Message for debug" This reverts commit 3476aad8a7c3576adc5b8051a2a0e6c97fb7f462. * [#FLW-4947] Import wallet by RAW or JSON. We can see mnemonic on the export flow * [#FLW-4951, FLW-4950] After logout the connections didn’t dropped * [#FLW-4952] Without TON account we can pass dApp connection flow * [#FLW-4953] There is not address on TON account if we imported it on settings * [#FLW-4954] We should stay on wallets list screen when we are trying to connect dApp but we do not have TON account * [#FLW-4937] On the From and To we can see same address * Generamba templated has been added in git * Connected accounts screen has been added * Ecosystem for wallet has been implemented * ecosystem for wallet * lint * Banners * Crowdloan view for settings * [#FLW-4968, #FLW-4962] We should have only Mnemonic for importing the TON wallet * [#FLW-4965] There is no fee and loader * [#FLW-4967] Select TON wallet. There are skeletons of NFT on the NFT screen * [#FLW-4964] We can’t read TON QR Code * [#FLW-4963] Flashing warning on the main screen * [#FLW-4971] Substrate wallet. Accounts. There are not active buttons * FLW-4974, FLW-4975, FLW-4977, FLW-4878 * build fix * localization * bundle identifier fix * some fixes * code review fixes * [#FLW-4991] Wrong behaviour after updating the app * [#FLW-4992] Create TON wallet. On settings we can see Warning alert * [#FLW-4993, FLW-4994] The fiat balance is blinking * code review fixes * v12 chains.json for prod * feature toggle has been removed from chains application config --------- Co-authored-by: Alex Lebedko --- .gitignore | 3 - GenerambaTemplates/.gitignore | 1 - Podfile.lock | 28 +- .../Code/assembly.swift.liquid | 0 .../Code/interactor.swift.liquid | 0 .../Code/presenter.swift.liquid | 0 .../Code/protocol.swift.liquid | 0 .../Code/router.swift.liquid | 0 .../viper-code-layout/Code/view.swift.liquid | 0 .../Code/viewlayout.swift.liquid | 0 .../Tests/tests.swift.liquid | 0 .../viper-code-layout.rambaspec | 0 fearless.xcodeproj/project.pbxproj | 3136 ++- .../xcshareddata/swiftpm/Package.resolved | 53 +- fearless/AppDelegate.swift | 14 + .../ApplicationLayer/ServiceAssembly.swift | 329 + .../SubstrateAccountInfoFetching.swift | 269 +- .../Balance/AccountInfoRemoteService.swift | 102 + .../Balance/BalanceLocksFetching.swift | 3 +- .../EthereumRemoteBalanceFetching.swift | 138 +- ...t => SubstrateRemoteBalanceFetching.swift} | 132 +- .../Balance/TonRemoteBalanceFetching.swift | 292 + .../Ethereum/BaseEthereumService.swift | 1 - .../LocalListToggle.swift | 33 + .../LocalToggleService.swift | 96 + .../Services/Models/TonConnectError.swift | 6 + .../Services/Models/TonConnectEvent.swift | 4 + .../Services/Models/TonConnectManifest.swift | 13 + .../Models/TonConnectParameters.swift | 17 + .../Models/TonConnectRequestPayload.swift | 36 + .../Onboarding/OnboardingService.swift | 15 +- .../Services/TonConnectEventsCenter.swift | 133 + .../Services/TonConnectMessageBuilder.swift | 71 + .../TonConnectMessageBuilderImpl.swift | 329 + .../Services/TonConnectService.swift | 72 + .../Services/TonConnectServiceDelegate.swift | 46 + .../Services/TonConnectServiceImpl.swift | 363 + .../Services/TonConnectSessionCrypto.swift | 62 + .../Tokens/EthereumTransferService.swift | 6 +- .../Tokens/SubstrateTransferService.swift | 5 +- .../WalletConnect/WalletConnectSigner.swift | 8 +- .../eip_mew/abi/ABIParameterTypes.swift | 10 +- .../eip_mew/abi/ABIParsing.swift | 6 +- .../StakingRewardsFetcherAssembly.swift | 2 +- .../ApplicationLayer/TonJettonInjector.swift | 91 + .../Contents.json | 12 + .../crowdloansProfileIcon.png | Bin 0 -> 538 bytes .../featuredBanner.imageset/Contents.json | 12 + .../featuredBanner.pdf | Bin 0 -> 606205 bytes .../iconBrowser.imageset/Contents.json | 12 + .../iconBrowser.imageset/iconBrowser.pdf | Bin 0 -> 1639 bytes .../regularBanner.imageset/Contents.json | 12 + .../regularBanner.imageset/regularBanner.pdf | Bin 0 -> 5494 bytes .../tonBanner.imageset/Contents.json | 12 + .../tonBanner.imageset/tonBanner.pdf | Bin 0 -> 4771 bytes .../tonIcon.imageset/Contents.json | 12 + .../tonIcon.imageset/tonIcon.pdf | Bin 0 -> 1329 bytes fearless/CIKeys.stencil | 4 + .../AddressChainDefiner.swift | 3 +- .../Common/Configs/ApplicationConfigs.swift | 16 +- .../Common/Crypto/KeystoreExportWrapper.swift | 6 +- fearless/Common/Crypto/SigningWrapper.swift | 2 +- .../DataProvider/ExistentialDeposit.swift | 34 +- .../DataProvider/Sources/DappDataSource.swift | 85 + .../PriceLocalStorageSubscriber.swift | 2 +- .../WalletLocalStorageSubscriber.swift | 70 +- .../Events/MetaAccountModelChangedEvent.swift | 1 + .../Events/SelectedAccountChanged.swift | 1 + .../Events/WalletNameChanged.swift | 2 + .../Foundation/NSPredicate+Filter.swift | 4 + .../Extension/Foundation/String+Helpers.swift | 4 +- .../Common/Extension/MetaAccountModel.swift | 14 + .../Model/AccountImportSource+ViewModel.swift | 2 +- .../Model/ExportOption+ViewModel.swift | 34 +- .../Common/Extension/SettingsExtension.swift | 11 + .../CDTonConnectedApp+CoreDataDecodable.swift | 30 + .../Storage/CDTonDapp+CoreDataDecodable.swift | 30 + fearless/Common/Extension/Task.swift | 17 + .../Common/Extension/UIKit/UITableView.swift | 11 +- ...setTransactionData+ArrowsquidHistory.swift | 1 + ...setTransactionData+GiantsquidHistory.swift | 4 +- ...AssetTransactionData+SubqueryHistory.swift | 2 +- ...AssetTransactionData+SubsquidHistory.swift | 2 +- .../Wallet/AssetTransactionData+Ton.swift | 149 + .../Helpers/AccountProviderFactory.swift | 1 + .../Helpers/AccountRepositoryFactory.swift | 2 + .../Common/Helpers/AddressConversion.swift | 94 - .../Common/Helpers/AssetModelMapper.swift | 10 +- .../Common/Helpers/ChainAccountFetching.swift | 92 - .../Common/Helpers/ChainAssetsFetching.swift | 9 +- .../Common/Helpers/EthereumNodeFetching.swift | 1 + .../Common/Helpers/WalletAssetsObserver.swift | 3 + .../LocalAuthentication/BiometryAuth.swift | 2 +- .../Common/Model/AccountImportSource.swift | 1 + .../AvailableExportOptionsProvider.swift | 85 +- fearless/Common/Model/ChainAction.swift | 5 +- fearless/Common/Model/ChainAsset.swift | 52 +- .../Model/ChainRegistry/ChainModel.swift | 6 +- .../ExternalApiExplorerType.swift | 2 + .../ManagedMetaAccountModel.swift | 1 + .../ChainRegistry/MetaAccountModel.swift | 281 - fearless/Common/Model/DisplayAddress.swift | 6 - fearless/Common/Model/KeystoreTag.swift | 45 + fearless/Common/Model/TonConstansts.swift | 9 + fearless/Common/Model/WalletBalanceInfo.swift | 2 +- .../AccountOperationFactoryError.swift | 1 + .../MetaAccountOperationFactory.swift | 314 +- .../Common/Protocols/AccountFetching.swift | 25 +- .../AccountManagementPresentable.swift | 12 +- .../AccountSelectionPresentable.swift | 1 + .../Protocols/RuntimeConstantFetching.swift | 27 + .../ChainRegistry/ChainRegistry.swift | 89 +- .../ChainRegistry/ChainSyncService.swift | 24 +- ...edControllerStashAccountCheckService.swift | 1 + .../ExtrinsicOperationFactory.swift | 5 +- .../NominatorPayoutInfoFactory.swift | 1 + .../PayoutRewardsService+Fetch.swift | 1 + .../PayoutValidatorForValidatorFactory.swift | 1 + ...idPayoutValidatorForNominatorFactory.swift | 1 + ...yPayoutValidatorsForNominatorFactory.swift | 1 + ...dPayoutValidatorsForNominatorFactory.swift | 1 + .../ValidatorPayoutInfoFactory.swift | 1 + fearless/Common/Services/PricesService.swift | 5 +- .../AccountInfoUpdatingService.swift | 21 +- ...ereumWalletRemoteSubscriptionService.swift | 11 +- .../Common/Services/ServiceCoordinator.swift | 75 +- .../EntityToModel/ChainModelMapper.swift | 36 +- .../EntityToModel/MetaAccountMapper.swift | 156 - .../CDChainAccountMigrationPolicyV12.swift | 18 + .../CDMetaAccountMigrationPolicy.swift | 46 + .../UserStorage/UserStorageVersion.swift | 3 + .../xcmapping.xml | 316 + .../Storage/SelectedWalletSettings.swift | 2 + .../contents | 26 +- .../Storage/UserDataStorageFacade.swift | 2 +- .../SubstrateCallFactoryDefault.swift | 8 +- .../SubstrateCallFactoryProtocol.swift | 3 +- .../Common/Substrate/Types/AccountInfo.swift | 4 +- .../Substrate/Types/EraRewardPoints.swift | 11 + .../URLHandling/TonConnectUrlHandling.swift | 24 + .../Validators/BaseDataValidatorFactory.swift | 2 +- .../GradientBorderedTriangularedView.swift | 31 + .../Common/View/SearchTriangularedView.swift | 13 +- .../View/SelectEcosystemBannerView.swift | 79 + fearless/Common/View/StackedTableView.swift | 1 - fearless/Common/View/SymbolView.swift | 4 +- .../TriangularedView/TriangularedView.swift | 79 +- fearless/Configs/fearless.debug.xcconfig | 2 + fearless/Configs/fearless.dev.xcconfig | 2 + fearless/Configs/fearless.release.xcconfig | 2 + ...ft => BalanceRepositoryCacheWrapper.swift} | 32 +- .../BlockscoutHistoryOperationFactory.swift | 2 +- .../EtherscanHistoryOperationFactory.swift | 6 +- .../Main/HistoryOperationFactory.swift | 3 +- .../Main/OklinkHistoryOperationFactory.swift | 4 +- .../SubqueryHistoryOperationFactory.swift | 6 +- .../Main/TonHistoryOperationFactory.swift | 197 + .../ParachainHistoryOperationFactory.swift | 2 +- .../BlockExplorer/History/TonModels.swift | 669 + .../GiantsquidRewardOperationFactory.swift | 1 + .../Rewards/ReefRewardOperationFactory.swift | 1 + .../Rewards/RewardOperationFactory.swift | 2 +- .../NFT/AlchemyNFTOperationFactory.swift | 4 +- .../CoreLayer/TonComponents/TonAccount.swift | 23 + .../CoreLayer/TonComponents/TonAddress.swift | 18 + .../AccountConfirmInteractor.swift | 1 + .../BaseAccountConfirmInteractor.swift | 23 +- .../Model/AccountConfirmFlow.swift | 21 +- .../AccountCreateInteractor.swift | 23 +- .../AccountCreatePresenter.swift | 62 +- .../AccountCreateProtocols.swift | 3 + .../AccountCreateViewController.swift | 13 +- .../AccountCreateViewFactory.swift | 18 +- .../AccountCreateViewLayout.swift | 4 +- .../Model/AccountCreateChainType.swift | 6 +- .../AccountImportInteractor.swift | 1 + .../AccountImportPresenter.swift | 26 +- .../AccountImportViewController.swift | 7 +- .../AccountImportViewLayout.swift | 1 + .../BaseAccountImportInteractor.swift | 22 +- .../Model/AccountImportRequest.swift | 7 +- .../AddAccount+AccountConfirmInteractor.swift | 1 + .../AddAccount+AccountImportInteractor.swift | 1 + .../AddAccount+OnboardingMainWireframe.swift | 9 +- .../AddAccount+UsernameSetupWireframe.swift | 5 +- .../Modules/AllDone/AllDonePresenter.swift | 53 +- .../AssetListSearchAssembly.swift | 1 + .../AssetManagementAssembly.swift | 28 +- .../AssetManagementProtocols.swift | 2 + .../AssetManagementRouter.swift | 1 + .../AssetManagementViewModelFactory.swift | 12 +- .../BackupCreatePasswordInteractor.swift | 51 +- .../BackupPasswordInteractor.swift | 1 + .../BackupRiskWarningsRouter.swift | 5 +- .../BackupWallet/BackupWalletAssembly.swift | 1 + .../BackupWallet/BackupWalletInteractor.swift | 28 +- .../BackupWallet/BackupWalletPresenter.swift | 14 +- .../BackupWallet/BackupWalletProtocols.swift | 2 + .../BackupWallet/BackupWalletRouter.swift | 3 +- .../BackupWalletViewModelFactory.swift | 27 +- .../BackupWalletName/WalletNameAssembly.swift | 1 + .../WalletNameInteractor.swift | 1 + .../WalletNamePresenter.swift | 1 + .../BalanceInfoDependencyContainer.swift | 3 +- .../BalanceLocksDetailInteractor.swift | 1 + .../Banners/BannerCollectionViewCell.swift | 5 +- .../Modules/Banners/BannersAssembly.swift | 6 +- .../Modules/Banners/BannersInteractor.swift | 32 +- .../Modules/Banners/BannersPresenter.swift | 50 +- .../Modules/Banners/BannersProtocols.swift | 5 +- .../Banners/BannersViewModelFactory.swift | 43 +- .../ClaimCrowdloanRewardsInteractor.swift | 1 + .../ConnectedAccountsAssembly.swift | 44 + .../ConnectedAccountsInteractor.swift | 61 + .../ConnectedAccountsPresenter.swift | 151 + .../ConnectedAccountsProtocols.swift | 42 + .../ConnectedAccountsRouter.swift | 110 + .../ConnectedAccountsTableCell.swift | 111 + .../ConnectedAccountsTableHeaderView.swift | 59 + .../ConnectedAccountsViewController.swift | 190 + .../ConnectedAccountsViewLayout.swift | 74 + .../ConnectedAccountsViewModelFactory.swift | 179 + .../WalletConnectCoordinator.swift | 108 +- .../WalletConnectProposalCoordinator.swift | 60 +- .../WalletConnectSessionCoordinator.swift | 11 +- .../CreateContactInteractor.swift | 1 + .../CrossChain/CrossChainAssembly.swift | 3 +- .../CrossChain/CrossChainInteractor.swift | 1 + .../CrossChain/CrossChainPresenter.swift | 1 + .../CrossChain/CrossChainViewController.swift | 2 +- .../CrossChainConfirmationInteractor.swift | 1 + .../CrossChainConfirmationProtocols.swift | 4 +- ...ossChainConfirmationViewModelFactory.swift | 8 +- .../CrossChainDepsContainer.swift | 20 +- .../CrowdloanContributionInteractor.swift | 1 + .../CrowdloanContributionConfirmData.swift | 1 + ...owdloanContributionConfirmInteractor.swift | 1 + ...rowdloanContributionConfirmProtocols.swift | 1 + ...wdloanContributionConfirmViewFactory.swift | 3 +- ...rowdloanContributionSetupViewFactory.swift | 3 +- .../CrowdloanListInteractor.swift | 1 + .../CrowdloansListInteractor+Protocols.swift | 1 + .../Cells/BrowserExploreFeaturedCell.swift | 91 + .../Cells/DappBrowserListCell.swift | 122 + .../DappBrowser/DappBrowserAssembly.swift | 53 + .../DappBrowser/DappBrowserInteractor.swift | 97 + .../DappBrowser/DappBrowserPresenter.swift | 248 + .../DappBrowser/DappBrowserProtocols.swift | 36 + .../DappBrowser/DappBrowserRouter.swift | 68 + .../DappBrowserViewController.swift | 290 + .../DappBrowser/DappBrowserViewModel.swift | 30 + .../DappBrowserViewModelFactory.swift | 255 + .../View/DappBrowserFeaturedView.swift | 265 + .../View/DappBrowserSectionHeaderView.swift | 114 + .../View/DappBrowserViewLayout.swift | 147 + .../DappBrowserListAssembly.swift | 32 + .../DappBrowserListInteractor.swift | 15 + .../DappBrowserListPresenter.swift | 91 + .../DappBrowserListProtocols.swift | 18 + .../DappBrowserListRouter.swift | 16 + .../DappBrowserListViewController.swift | 170 + .../DappBrowserListViewLayout.swift | 85 + .../EcosystemOptionsAssembly.swift | 45 + .../EcosystemOptionsInteractor.swift | 40 + .../EcosystemOptionsPresenter.swift | 94 + .../EcosystemOptionsProtocols.swift | 17 + .../EcosystemOptionsRouter.swift | 4 + .../EcosystemOptionsViewController.swift | 62 + .../EcosystemOptionsViewLayout.swift | 107 + .../AccountExportPasswordInteractor.swift | 11 +- fearless/Modules/Export/ExportFlow.swift | 26 +- .../ExportGenericViewController.swift | 79 +- .../ExportGenericViewModel.swift | 16 +- .../ExportGenericViewModelBinder.swift | 4 +- .../ExportMnemonic/ExportMnemonicData.swift | 2 +- .../ExportMnemonicInteractor.swift | 35 +- .../ExportMnemonicPresenter.swift | 8 +- .../ExportMnemonicProtocols.swift | 2 +- .../ExportMnemonicWireframe.swift | 3 +- .../ExportMnemonicConfirmInteractor.swift | 9 +- .../ExportMnemonicConfirmProtocols.swift | 3 +- .../ExportMnemonicConfirmViewFactory.swift | 3 +- .../ExportRestoreJsonInteractor.swift | 1 + .../ExportRestoreJsonPresenter.swift | 2 +- .../ExportSeed/ExportSeedInteractor.swift | 20 +- .../ExportSeed/ExportSeedPresenter.swift | 2 +- .../ExportSeed/ExportSeedProtocols.swift | 1 - .../FeatureToggleListAssembly.swift | 24 + .../FeatureToggleListInteractor.swift | 30 + .../FeatureToggleListPresenter.swift | 78 + .../FeatureToggleListProtocols.swift | 10 + .../FeatureToggleListRouter.swift | 3 + .../FeatureToggleListViewController.swift | 92 + .../FeatureToggleListViewLayout.swift | 28 + .../GetPreinstalledWalletInteractor.swift | 1 + .../LiquidityPoolDetailsInteractor.swift | 2 + .../Resources/chains.json | 16625 ++++++++-------- .../LiquidityPoolDetails/Resources/dapps.json | 131 + ...LiquidityPoolRemoveLiquidityAssembly.swift | 6 +- ...quidityPoolRemoveLiquidityInteractor.swift | 1 + ...tyPoolRemoveLiquidityConfirmAssembly.swift | 6 +- .../LiquidityPoolSupplyAssembly.swift | 6 +- .../LiquidityPoolSupplyInteractor.swift | 1 + .../LiquidityPoolSupplyConfirmAssembly.swift | 6 +- ...LiquidityPoolSupplyConfirmInteractor.swift | 1 + ...vailableLiquidityPoolsListInteractor.swift | 1 + ...AvailableLiquidityPoolsListPresenter.swift | 1 + ...leLiquidityPoolsListViewModelFactory.swift | 1 + .../UserLiquidityPoolsListInteractor.swift | 2 + .../UserLiquidityPoolsListPresenter.swift | 1 + ...erLiquidityPoolsListViewModelFactory.swift | 1 + .../MainTabBar/MainTabBarInteractor.swift | 3 - .../MainTabBar/MainTabBarPresenter.swift | 23 +- .../MainTabBar/MainTabBarProtocol.swift | 8 +- .../MainTabBar/MainTabBarViewController.swift | 89 +- .../MainTabBar/MainTabBarViewFactory.swift | 68 +- .../MainTabBar/MainTabBarWireframe.swift | 11 +- fearless/Modules/MainTabBar/TabBar.swift | 58 +- .../MainNftContainerAssembly.swift | 1 + .../MainNftContainerRouter.swift | 1 + .../MainNftContainerViewController.swift | 4 +- .../NftCollectionProtocols.swift | 2 + .../NftCollection/NftCollectionRouter.swift | 1 + .../NFT/NftDetails/NftDetailsAssembly.swift | 1 + .../NFT/NftDetails/NftDetailsPresenter.swift | 1 + .../NFT/NftDetails/NftDetailsProtocols.swift | 2 + .../NFT/NftDetails/NftDetailsRouter.swift | 1 + .../Modules/NFT/NftSend/NftSendAssembly.swift | 16 +- .../NFT/NftSend/NftSendPresenter.swift | 1 + .../NFT/NftSend/NftSendViewController.swift | 2 +- .../NftSendConfirmAssembly.swift | 7 +- .../NftSendConfirmPresenter.swift | 1 + .../NetworkIssuesNotificationAssembly.swift | 1 + .../NetworkIssuesNotificationRouter.swift | 3 +- .../NetworkManagmentAssembly.swift | 2 + .../NetworkManagmentPresenter.swift | 3 +- .../ChainAccount/ChainAccountInteractor.swift | 19 +- .../ChainAccount/ChainAccountPresenter.swift | 2 +- .../ChainAccountViewFactory.swift | 12 +- .../ChainAccount/ChainAccountWireframe.swift | 5 +- .../ChainAccountViewModelFactory.swift | 3 +- .../ChainAssetListAssembly.swift | 34 +- .../ChainAssetListDependencyContainer.swift | 1 + .../ChainAssetListInteractor.swift | 51 +- .../ChainAssetListPresenter.swift | 18 +- .../ChainAssetListProtocols.swift | 5 +- .../ChainAssetList/ChainAssetListRouter.swift | 7 +- .../ChainAssetListViewController.swift | 36 +- .../Views/ChainAssetListViewLayout.swift | 50 +- .../WalletSendConfirmViewModelFactory.swift | 71 - .../WalletSendConfirmViewState.swift | 6 - .../WalletSendConfirmInteractor.swift | 159 - .../WalletSendConfirmPresenter.swift | 378 - .../WalletSendConfirmProtocols.swift | 47 - .../WalletSendConfirmViewController.swift | 81 - .../WalletSendConfirmViewFactory.swift | 122 - ...etTransactionDetailsViewModelFactory.swift | 15 +- .../WalletTransactionDetailsProtocols.swift | 1 - .../WalletTransactionHistoryDataState.swift | 2 - ...etTransactionHistoryViewModelFactory.swift | 7 +- .../Views/WalletTransactionHistoryCell.swift | 10 +- .../WalletTransactionHistoryInteractor.swift | 2 +- .../WalletTransactionHistoryProtocols.swift | 1 - .../Views/NodeSelectionTableCell.swift | 4 - .../Onboarding/OnboardingViewLayout.swift | 2 - .../OnboardingMainPresenter.swift | 133 +- .../OnboardingMainProtocol.swift | 9 +- .../OnboardingMainViewController.swift | 144 +- .../OnboardingMainViewFactory.swift | 16 +- .../OnboardingMainViewLayout.swift | 153 + .../OnboardingMainWireframe.swift | 9 +- .../ChangePincode/PinChangeInteractor.swift | 2 +- .../View/CheckPincodeViewController.swift | 4 +- .../LocalAuthInteractor.swift | 4 +- .../Pincode/PinSetup/PinSetupInteractor.swift | 4 +- .../PinSetup/PinSetupViewController.swift | 4 +- .../PolkaswapAdjustmentPresenter.swift | 2 +- .../PolkaswapSwapConfirmationProtocols.swift | 1 - .../Modules/Profile/ProfileInteractor.swift | 15 +- .../Modules/Profile/ProfilePresenter.swift | 13 +- .../Modules/Profile/ProfileProtocol.swift | 3 + .../Profile/ProfileViewController.swift | 21 +- .../Modules/Profile/ProfileViewFactory.swift | 3 +- .../Modules/Profile/ProfileWireframe.swift | 33 +- .../View/ProfileSectionTableViewCell.xib | 8 +- .../Profile/ViewModel/ProfileViewModel.swift | 3 + .../ViewModel/ProfileViewModelFactory.swift | 55 +- .../ReceiveAndRequestAssetPresenter.swift | 9 +- fearless/Modules/Root/RootInteractor.swift | 14 +- .../Modules/Root/RootPresenterFactory.swift | 5 +- .../Modules/Root/RootViewController.swift | 4 - fearless/Modules/ScanQR/ScanQRAssembly.swift | 4 +- .../SelectCurrencyAssembly.swift | 7 +- .../SelectCurrencyInteractor.swift | 31 +- .../SelectNetworkProtocols.swift | 1 - fearless/Modules/Send/SendAssembly.swift | 104 - .../Send/SendDependencyContainer.swift | 212 - fearless/Modules/Send/SendInteractor.swift | 283 - fearless/Modules/Send/SendPresenter.swift | 1253 -- fearless/Modules/Send/SendProtocols.swift | 119 - .../Send/ViewModel/SendViewModelFactory.swift | 62 - .../AnalyticsValidatorsInteractor.swift | 1 + .../AnalyticsValidatorsViewModelFactory.swift | 1 + .../ControllerAccountInteractor.swift | 1 + ...trollerAccountConfirmationInteractor.swift | 1 + .../Staking/Model/ElectedValidatorInfo.swift | 2 + .../Staking/Model/ExistingBonding.swift | 1 + .../Staking/Model/InitiatedBonding.swift | 1 + .../Staking/Model/RewardDestination.swift | 1 + .../Operations/IdentityOperationFactory.swift | 1 + .../Operations/SlashesOperationFactory.swift | 1 + .../ParachainCollatorOperationFactory.swift | 12 + .../RelaychainValidatorOperationFactory.swift | 65 +- ...ctValidatorsConfirmParachainStrategy.swift | 1 + ...tValidatorsConfirmPoolViewModelState.swift | 2 +- ...rsConfirmPoolInitiatedViewModelState.swift | 2 +- .../SelectValidatorsConfirmationModel.swift | 1 + ...lectValidatorsStartParachainStrategy.swift | 1 + .../SelectValidatorsStartPresenter.swift | 3 +- .../SelectedValidatorListWireframe.swift | 1 - .../Flow/Pool/ValidatorInfoPoolStrategy.swift | 2 + .../ValidatorInfoRelaychainStrategy.swift | 2 + .../ValidatorSearchPresenter.swift | 1 + .../ValidatorSearchWireframe.swift | 1 - .../YourValidatorListRelaychainStrategy.swift | 1 + .../ParachainRewardCalculatorEngine.swift | 2 - .../PortionRewardCalculatorEngine.swift | 2 +- .../Flow/StakingAmountFlow.swift | 1 - .../StakingAmountViewFactory.swift | 3 +- .../StakingBalanceRelaychainStrategy.swift | 1 + ...akingBalanceRelaychainViewModelState.swift | 1 + .../StakingBondMoreViewFactory.swift | 3 +- ...ndMoreConfirmationRelaychainStrategy.swift | 1 + .../StakingMainInteractor+InputProtocol.swift | 1 + .../StakingMainInteractor+Subscription.swift | 3 +- .../StakingMain/StakingMainProtocols.swift | 2 +- .../StakingMain/StakingMainViewFactory.swift | 2 +- .../StakingMain/StakingMainWireframe.swift | 3 +- .../States/NominatorState+Status.swift | 1 + .../States/ValidatorState+Status.swift | 1 + ...youtConfirmationPoolViewModelFactory.swift | 1 + ...ngPayoutConfirmationViewModelFactory.swift | 1 + ...PayoutConfirmationrelaychainStrategy.swift | 1 + ...onfirmationParachainViewModelFactory.swift | 1 + ...RebondConfirmationRelaychainStrategy.swift | 1 + ...nfirmationRelaychainViewModelFactory.swift | 1 + .../StakingRedeemRelaychainStrategy.swift | 1 + ...RedeemConfirmationRelaychainStrategy.swift | 1 + .../StakingRewardDestConfirmInteractor.swift | 1 + ...ingRewardDestConfirmViewModelFactory.swift | 1 + .../StakingRewardDestSetupInteractor.swift | 1 + ...akingUnbondConfirmRelaychainStrategy.swift | 1 + .../StakingPoolJoinConfigAssembly.swift | 3 +- .../PoolRolesConfirmProtocols.swift | 1 - .../StakingPoolCreateAssembly.swift | 3 +- .../StakingPoolCreateViewModelFactory.swift | 1 + .../StakingPoolMainAssembly.swift | 3 +- .../StakingPoolManagementAssembly.swift | 3 +- .../SwapTransactionViewModelFactory.swift | 1 + ...witchAccount+OnboardingMainWireframe.swift | 8 +- ...SwitchAccount+UsernameSetupWireframe.swift | 5 +- .../Models/DappBridgeMessageType.swift | 7 + .../Models/DappBridgeResponse.swift | 38 + .../Models/SendTransactionSignRequest.swift | 21 + .../TonWebBridge/Models/TonConnect.swift | 209 + .../TonWebBridge/Models/TonConnectApp.swift | 34 + .../Models/TonConnectAppRequest.swift | 34 + .../Models/TonConnectDessision.swift | 10 + .../Models/TonConnectModels.swift | 14 + .../TonConnectResponses+Encodable.swift | 127 + .../Models/TonConnectSendDessision.swift | 15 + .../Modules/TonWebBridge/Models/TonDapp.swift | 22 + .../TonWebBridge/TonWebBridgeAssembly.swift | 39 + .../TonWebBridge/TonWebBridgeHeaderView.swift | 123 + .../TonWebBridge/TonWebBridgeInteractor.swift | 51 + .../TonWebBridge/TonWebBridgePresenter.swift | 348 + .../TonWebBridge/TonWebBridgeProtocols.swift | 12 + .../TonWebBridge/TonWebBridgeRouter.swift | 3 + .../TonWebBridgeViewController.swift | 195 + .../TonWebBridge/TonWebBridgeViewLayout.swift | 59 + .../ConfirmTransferAssembly.swift | 49 + .../ConfirmTransferPresenter.swift | 181 + .../ConfirmTransferProtocols.swift | 25 + .../ConfirmTransferRouter.swift} | 5 +- .../ConfirmTransferViewController.swift | 89 + .../Models}/WalletSendConfirmViewModel.swift | 0 .../WalletSendConfirmViewModelFactory.swift | 178 + .../WalletSendConfirmViewLayout.swift | 0 .../Transfer/BokoloTransferFlowUseCase.swift | 316 + .../EthereumTransferFlowUseCase.swift | 178 + .../Transfer/Models}/RecipientViewModel.swift | 2 +- .../Models}/SelectNetworkViewModel.swift | 0 .../Transfer/Models}/SendFlow.swift | 20 +- .../Models/SendViewModelFactory.swift | 126 + .../Transfer/Models}/TipViewModel.swift | 0 .../Transfer}/SendViewLayout.swift | 36 +- .../Transfer/SoraQrTransferFlowUseCase.swift | 174 + .../SubstrateTransferFlowUseCase.swift | 217 + .../Transfer/TonTransferFlowUseCase.swift | 236 + .../Transfer/Transfer/TransferAssembly.swift | 86 + .../Transfer/TransferFlowUseCase.swift | 205 + .../Transfer/TransferInteractor.swift | 217 + .../Transfer/Transfer/TransferPresenter.swift | 836 + .../Transfer/Transfer/TransferProtocols.swift | 53 + .../Transfer/TransferRouter.swift} | 54 +- .../Transfer/TransferViewController.swift} | 143 +- .../Transfer/TransferViewLayout.swift | 22 + .../SendDataValidatingFactory.swift | 39 +- .../UsernameSetupPresenter.swift | 5 +- .../UsernameSetupProtocols.swift | 17 +- .../UsernameSetupViewController.swift | 4 - .../UsernameSetupViewFactory.swift | 23 +- .../UsernameSetupWireframe.swift | 4 +- .../WalletConnectActiveSessionsRouter.swift | 10 +- .../WalletConnectConfirmationAssembly.swift | 12 +- .../WalletConnectConfirmationInputData.swift | 29 +- .../WalletConnectConfirmationInteractor.swift | 88 +- .../WalletConnectConfirmationPresenter.swift | 110 +- ...tConnectConfirmationViewModelFactory.swift | 69 +- .../Model/SessionStatus.swift | 63 + .../WalletConnectProposalViewModel.swift | 44 +- ...alletConnectProposalViewModelFactory.swift | 272 +- .../WalletConnectProposalAssembly.swift | 5 +- ...etConnectProposalExpandableTableCell.swift | 27 +- .../WalletConnectProposalInteractor.swift | 19 +- .../WalletConnectProposalPresenter.swift | 201 +- .../WalletConnectProposalProtocols.swift | 4 +- .../WalletConnectProposalViewController.swift | 21 +- .../WalletConnectProposalViewLayout.swift | 4 +- .../ConnectRequestVariant.swift | 30 + .../WalletConnectSessionAssembly.swift | 12 +- .../WalletConnectSessionInteractor.swift | 9 +- .../WalletConnectSessionPresenter.swift | 160 +- .../WalletConnectSessionProtocols.swift | 4 +- .../WalletConnectSessionViewModel.swift | 1 + ...WalletConnectSessionViewModelFactory.swift | 100 +- .../ViewModels/WalletDetailsFlow.swift | 1 + .../WalletDetailsInteractor.swift | 3 +- .../WalletDetailsPresenter.swift | 14 + .../WalletDetailsViewFactory.swift | 5 +- .../WalletDetailsWireframe.swift | 3 +- .../WalletMainContainerViewModelFactory.swift | 14 +- .../WalletMainContainerAssembly.swift | 8 +- .../WalletMainContainerInteractor.swift | 9 +- .../WalletMainContainerPresenter.swift | 18 +- .../WalletMainContainerProtocols.swift | 1 + .../WalletMainContainerRouter.swift | 19 +- .../WalletOption/WalletOptionAssembly.swift | 3 +- .../WalletOption/WalletOptionInteractor.swift | 9 +- .../WalletOption/WalletOptionPresenter.swift | 12 +- .../WalletOption/WalletOptionProtocols.swift | 5 +- .../WalletOption/WalletOptionRouter.swift | 11 +- .../WalletOptionViewController.swift | 5 + .../WalletsManagmentCellViewModel.swift | 3 + .../WalletsManagmentViewModelFactory.swift | 14 +- .../WalletsManagmentAssembly.swift | 5 +- .../WalletsManagmentPresenter.swift | 105 +- .../WalletsManagmentProtocols.swift | 5 +- .../WalletsManagmentRouter.swift | 3 +- .../WalletsManagmentTableCell.swift | 21 +- .../WalletsManagmentViewController.swift | 5 - .../WalletsManagmentViewLayout.swift | 16 +- fearless/en.lproj/Localizable.strings | 70 +- fearless/fearless.entitlements | 10 + fearless/id.lproj/Localizable.strings | 62 +- fearless/ja.lproj/Localizable.strings | 160 +- fearless/pt.lproj/Localizable.strings | 48 +- fearless/ru.lproj/Localizable.strings | 554 +- fearless/tr.lproj/Localizable.strings | 124 +- fearless/vi.lproj/Localizable.strings | 90 +- fearless/zh-Hans.lproj/Localizable.strings | 90 +- .../ConfirmTransferTests.swift | 16 + .../Modules/Transfer/TransferTests.swift | 16 + 573 files changed, 28395 insertions(+), 15225 deletions(-) delete mode 100644 GenerambaTemplates/.gitignore rename {GenerambaTemplates => Templates}/viper-code-layout/Code/assembly.swift.liquid (100%) rename {GenerambaTemplates => Templates}/viper-code-layout/Code/interactor.swift.liquid (100%) rename {GenerambaTemplates => Templates}/viper-code-layout/Code/presenter.swift.liquid (100%) rename {GenerambaTemplates => Templates}/viper-code-layout/Code/protocol.swift.liquid (100%) rename {GenerambaTemplates => Templates}/viper-code-layout/Code/router.swift.liquid (100%) rename {GenerambaTemplates => Templates}/viper-code-layout/Code/view.swift.liquid (100%) rename {GenerambaTemplates => Templates}/viper-code-layout/Code/viewlayout.swift.liquid (100%) rename {GenerambaTemplates => Templates}/viper-code-layout/Tests/tests.swift.liquid (100%) rename {GenerambaTemplates => Templates}/viper-code-layout/viper-code-layout.rambaspec (100%) create mode 100644 fearless/ApplicationLayer/ServiceAssembly.swift create mode 100644 fearless/ApplicationLayer/Services/Balance/AccountInfoRemoteService.swift rename fearless/ApplicationLayer/Services/Balance/{AccountInfo => }/EthereumRemoteBalanceFetching.swift (76%) rename fearless/ApplicationLayer/Services/Balance/{RemoteSubscription/AccountInfoRemoteService.swift => SubstrateRemoteBalanceFetching.swift} (70%) create mode 100644 fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift create mode 100644 fearless/ApplicationLayer/Services/FeatureToggleService/LocalListToggle.swift create mode 100644 fearless/ApplicationLayer/Services/FeatureToggleService/LocalToggleService.swift create mode 100644 fearless/ApplicationLayer/Services/Models/TonConnectError.swift create mode 100644 fearless/ApplicationLayer/Services/Models/TonConnectEvent.swift create mode 100644 fearless/ApplicationLayer/Services/Models/TonConnectManifest.swift create mode 100644 fearless/ApplicationLayer/Services/Models/TonConnectParameters.swift create mode 100644 fearless/ApplicationLayer/Services/Models/TonConnectRequestPayload.swift create mode 100644 fearless/ApplicationLayer/Services/TonConnectEventsCenter.swift create mode 100644 fearless/ApplicationLayer/Services/TonConnectMessageBuilder.swift create mode 100644 fearless/ApplicationLayer/Services/TonConnectMessageBuilderImpl.swift create mode 100644 fearless/ApplicationLayer/Services/TonConnectService.swift create mode 100644 fearless/ApplicationLayer/Services/TonConnectServiceDelegate.swift create mode 100644 fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift create mode 100644 fearless/ApplicationLayer/Services/TonConnectSessionCrypto.swift create mode 100644 fearless/ApplicationLayer/TonJettonInjector.swift create mode 100644 fearless/Assets.xcassets/crowdloansProfileIcon.imageset/Contents.json create mode 100644 fearless/Assets.xcassets/crowdloansProfileIcon.imageset/crowdloansProfileIcon.png create mode 100644 fearless/Assets.xcassets/featuredBanner.imageset/Contents.json create mode 100644 fearless/Assets.xcassets/featuredBanner.imageset/featuredBanner.pdf create mode 100644 fearless/Assets.xcassets/iconBrowser.imageset/Contents.json create mode 100644 fearless/Assets.xcassets/iconBrowser.imageset/iconBrowser.pdf create mode 100644 fearless/Assets.xcassets/regularBanner.imageset/Contents.json create mode 100644 fearless/Assets.xcassets/regularBanner.imageset/regularBanner.pdf create mode 100644 fearless/Assets.xcassets/tonBanner.imageset/Contents.json create mode 100644 fearless/Assets.xcassets/tonBanner.imageset/tonBanner.pdf create mode 100644 fearless/Assets.xcassets/tonIcon.imageset/Contents.json create mode 100644 fearless/Assets.xcassets/tonIcon.imageset/tonIcon.pdf create mode 100644 fearless/Common/DataProvider/Sources/DappDataSource.swift create mode 100644 fearless/Common/Extension/MetaAccountModel.swift create mode 100644 fearless/Common/Extension/Storage/CDTonConnectedApp+CoreDataDecodable.swift create mode 100644 fearless/Common/Extension/Storage/CDTonDapp+CoreDataDecodable.swift create mode 100644 fearless/Common/Extension/Task.swift create mode 100644 fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift delete mode 100644 fearless/Common/Helpers/AddressConversion.swift delete mode 100644 fearless/Common/Helpers/ChainAccountFetching.swift delete mode 100644 fearless/Common/Model/ChainRegistry/MetaAccountModel.swift delete mode 100644 fearless/Common/Model/DisplayAddress.swift create mode 100644 fearless/Common/Model/TonConstansts.swift delete mode 100644 fearless/Common/Storage/EntityToModel/MetaAccountMapper.swift create mode 100644 fearless/Common/Storage/Migration/UserStorage/CDChainAccountMigrationPolicyV12.swift create mode 100644 fearless/Common/Storage/Migration/UserStorage/CDMetaAccountMigrationPolicy.swift create mode 100644 fearless/Common/Storage/MigrationMappings/MultiAssetV12.xcmappingmodel/xcmapping.xml create mode 100644 fearless/Common/URLHandling/TonConnectUrlHandling.swift create mode 100644 fearless/Common/View/GradientBorderedTriangularedView.swift create mode 100644 fearless/Common/View/SelectEcosystemBannerView.swift rename fearless/CoreLayer/CoreComponents/Repository/{EthereumBalanceRepositoryCacheWrapper.swift => BalanceRepositoryCacheWrapper.swift} (59%) create mode 100644 fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/TonHistoryOperationFactory.swift create mode 100644 fearless/CoreLayer/OperationFactory/BlockExplorer/History/TonModels.swift create mode 100644 fearless/CoreLayer/TonComponents/TonAccount.swift create mode 100644 fearless/CoreLayer/TonComponents/TonAddress.swift create mode 100644 fearless/Modules/ConnectedAccounts/ConnectedAccountsAssembly.swift create mode 100644 fearless/Modules/ConnectedAccounts/ConnectedAccountsInteractor.swift create mode 100644 fearless/Modules/ConnectedAccounts/ConnectedAccountsPresenter.swift create mode 100644 fearless/Modules/ConnectedAccounts/ConnectedAccountsProtocols.swift create mode 100644 fearless/Modules/ConnectedAccounts/ConnectedAccountsRouter.swift create mode 100644 fearless/Modules/ConnectedAccounts/ConnectedAccountsTableCell.swift create mode 100644 fearless/Modules/ConnectedAccounts/ConnectedAccountsTableHeaderView.swift create mode 100644 fearless/Modules/ConnectedAccounts/ConnectedAccountsViewController.swift create mode 100644 fearless/Modules/ConnectedAccounts/ConnectedAccountsViewLayout.swift create mode 100644 fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift create mode 100644 fearless/Modules/DappBrowser/Cells/BrowserExploreFeaturedCell.swift create mode 100644 fearless/Modules/DappBrowser/Cells/DappBrowserListCell.swift create mode 100644 fearless/Modules/DappBrowser/DappBrowserAssembly.swift create mode 100644 fearless/Modules/DappBrowser/DappBrowserInteractor.swift create mode 100644 fearless/Modules/DappBrowser/DappBrowserPresenter.swift create mode 100644 fearless/Modules/DappBrowser/DappBrowserProtocols.swift create mode 100644 fearless/Modules/DappBrowser/DappBrowserRouter.swift create mode 100644 fearless/Modules/DappBrowser/DappBrowserViewController.swift create mode 100644 fearless/Modules/DappBrowser/DappBrowserViewModel.swift create mode 100644 fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift create mode 100644 fearless/Modules/DappBrowser/View/DappBrowserFeaturedView.swift create mode 100644 fearless/Modules/DappBrowser/View/DappBrowserSectionHeaderView.swift create mode 100644 fearless/Modules/DappBrowser/View/DappBrowserViewLayout.swift create mode 100644 fearless/Modules/DappBrowserList/DappBrowserListAssembly.swift create mode 100644 fearless/Modules/DappBrowserList/DappBrowserListInteractor.swift create mode 100644 fearless/Modules/DappBrowserList/DappBrowserListPresenter.swift create mode 100644 fearless/Modules/DappBrowserList/DappBrowserListProtocols.swift create mode 100644 fearless/Modules/DappBrowserList/DappBrowserListRouter.swift create mode 100644 fearless/Modules/DappBrowserList/DappBrowserListViewController.swift create mode 100644 fearless/Modules/DappBrowserList/DappBrowserListViewLayout.swift create mode 100644 fearless/Modules/EcosystemOptions/EcosystemOptionsAssembly.swift create mode 100644 fearless/Modules/EcosystemOptions/EcosystemOptionsInteractor.swift create mode 100644 fearless/Modules/EcosystemOptions/EcosystemOptionsPresenter.swift create mode 100644 fearless/Modules/EcosystemOptions/EcosystemOptionsProtocols.swift create mode 100644 fearless/Modules/EcosystemOptions/EcosystemOptionsRouter.swift create mode 100644 fearless/Modules/EcosystemOptions/EcosystemOptionsViewController.swift create mode 100644 fearless/Modules/EcosystemOptions/EcosystemOptionsViewLayout.swift create mode 100644 fearless/Modules/FeatureToggleList/FeatureToggleListAssembly.swift create mode 100644 fearless/Modules/FeatureToggleList/FeatureToggleListInteractor.swift create mode 100644 fearless/Modules/FeatureToggleList/FeatureToggleListPresenter.swift create mode 100644 fearless/Modules/FeatureToggleList/FeatureToggleListProtocols.swift create mode 100644 fearless/Modules/FeatureToggleList/FeatureToggleListRouter.swift create mode 100644 fearless/Modules/FeatureToggleList/FeatureToggleListViewController.swift create mode 100644 fearless/Modules/FeatureToggleList/FeatureToggleListViewLayout.swift create mode 100644 fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/dapps.json delete mode 100644 fearless/Modules/NewWallet/WalletSendConfirm/ViewModels/WalletSendConfirmViewModelFactory.swift delete mode 100644 fearless/Modules/NewWallet/WalletSendConfirm/ViewModels/WalletSendConfirmViewState.swift delete mode 100644 fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmInteractor.swift delete mode 100644 fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmPresenter.swift delete mode 100644 fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmProtocols.swift delete mode 100644 fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmViewController.swift delete mode 100644 fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmViewFactory.swift create mode 100644 fearless/Modules/OnbordingMain/OnboardingMainViewLayout.swift delete mode 100644 fearless/Modules/Send/SendAssembly.swift delete mode 100644 fearless/Modules/Send/SendDependencyContainer.swift delete mode 100644 fearless/Modules/Send/SendInteractor.swift delete mode 100644 fearless/Modules/Send/SendPresenter.swift delete mode 100644 fearless/Modules/Send/SendProtocols.swift delete mode 100644 fearless/Modules/Send/ViewModel/SendViewModelFactory.swift create mode 100644 fearless/Modules/TonWebBridge/Models/DappBridgeMessageType.swift create mode 100644 fearless/Modules/TonWebBridge/Models/DappBridgeResponse.swift create mode 100644 fearless/Modules/TonWebBridge/Models/SendTransactionSignRequest.swift create mode 100644 fearless/Modules/TonWebBridge/Models/TonConnect.swift create mode 100644 fearless/Modules/TonWebBridge/Models/TonConnectApp.swift create mode 100644 fearless/Modules/TonWebBridge/Models/TonConnectAppRequest.swift create mode 100644 fearless/Modules/TonWebBridge/Models/TonConnectDessision.swift create mode 100644 fearless/Modules/TonWebBridge/Models/TonConnectModels.swift create mode 100644 fearless/Modules/TonWebBridge/Models/TonConnectResponses+Encodable.swift create mode 100644 fearless/Modules/TonWebBridge/Models/TonConnectSendDessision.swift create mode 100644 fearless/Modules/TonWebBridge/Models/TonDapp.swift create mode 100644 fearless/Modules/TonWebBridge/TonWebBridgeAssembly.swift create mode 100644 fearless/Modules/TonWebBridge/TonWebBridgeHeaderView.swift create mode 100644 fearless/Modules/TonWebBridge/TonWebBridgeInteractor.swift create mode 100644 fearless/Modules/TonWebBridge/TonWebBridgePresenter.swift create mode 100644 fearless/Modules/TonWebBridge/TonWebBridgeProtocols.swift create mode 100644 fearless/Modules/TonWebBridge/TonWebBridgeRouter.swift create mode 100644 fearless/Modules/TonWebBridge/TonWebBridgeViewController.swift create mode 100644 fearless/Modules/TonWebBridge/TonWebBridgeViewLayout.swift create mode 100644 fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferAssembly.swift create mode 100644 fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferPresenter.swift create mode 100644 fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferProtocols.swift rename fearless/Modules/{NewWallet/WalletSendConfirm/WalletSendConfirmWireframe.swift => Transfer/ConfirmTransfer/ConfirmTransferRouter.swift} (91%) create mode 100644 fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferViewController.swift rename fearless/Modules/{NewWallet/WalletSendConfirm/ViewModels => Transfer/ConfirmTransfer/Models}/WalletSendConfirmViewModel.swift (100%) create mode 100644 fearless/Modules/Transfer/ConfirmTransfer/Models/WalletSendConfirmViewModelFactory.swift rename fearless/Modules/{NewWallet/WalletSendConfirm => Transfer/ConfirmTransfer}/WalletSendConfirmViewLayout.swift (100%) create mode 100644 fearless/Modules/Transfer/Transfer/BokoloTransferFlowUseCase.swift create mode 100644 fearless/Modules/Transfer/Transfer/EthereumTransferFlowUseCase.swift rename fearless/Modules/{Send/ViewModel => Transfer/Transfer/Models}/RecipientViewModel.swift (84%) rename fearless/Modules/{Send/ViewModel => Transfer/Transfer/Models}/SelectNetworkViewModel.swift (100%) rename fearless/Modules/{Send => Transfer/Transfer/Models}/SendFlow.swift (69%) create mode 100644 fearless/Modules/Transfer/Transfer/Models/SendViewModelFactory.swift rename fearless/Modules/{Send/ViewModel => Transfer/Transfer/Models}/TipViewModel.swift (100%) rename fearless/Modules/{Send => Transfer/Transfer}/SendViewLayout.swift (88%) create mode 100644 fearless/Modules/Transfer/Transfer/SoraQrTransferFlowUseCase.swift create mode 100644 fearless/Modules/Transfer/Transfer/SubstrateTransferFlowUseCase.swift create mode 100644 fearless/Modules/Transfer/Transfer/TonTransferFlowUseCase.swift create mode 100644 fearless/Modules/Transfer/Transfer/TransferAssembly.swift create mode 100644 fearless/Modules/Transfer/Transfer/TransferFlowUseCase.swift create mode 100644 fearless/Modules/Transfer/Transfer/TransferInteractor.swift create mode 100644 fearless/Modules/Transfer/Transfer/TransferPresenter.swift create mode 100644 fearless/Modules/Transfer/Transfer/TransferProtocols.swift rename fearless/Modules/{Send/SendRouter.swift => Transfer/Transfer/TransferRouter.swift} (89%) rename fearless/Modules/{Send/SendViewController.swift => Transfer/Transfer/TransferViewController.swift} (68%) create mode 100644 fearless/Modules/Transfer/Transfer/TransferViewLayout.swift rename fearless/Modules/{Send => Transfer}/Validators/SendDataValidatingFactory.swift (86%) create mode 100644 fearless/Modules/WalletConnectProposal/Model/SessionStatus.swift create mode 100644 fearless/Modules/WalletConnectSession/ConnectRequestVariant.swift create mode 100644 fearless/fearless.entitlements create mode 100644 fearlessTests/Modules/ConfirmTransfer/ConfirmTransferTests.swift create mode 100644 fearlessTests/Modules/Transfer/TransferTests.swift diff --git a/.gitignore b/.gitignore index 0cb7e551df..d7235b70a7 100644 --- a/.gitignore +++ b/.gitignore @@ -54,8 +54,5 @@ fearless/env-vars.sh *.generated.swift Tests/Mocks/CommonMocks.swift Tests/Mocks/ModuleMocks.swift -# -# Generamba -Templates/ # Misc **/.DS_Store diff --git a/GenerambaTemplates/.gitignore b/GenerambaTemplates/.gitignore deleted file mode 100644 index 79b5594df7..0000000000 --- a/GenerambaTemplates/.gitignore +++ /dev/null @@ -1 +0,0 @@ -**/.DS_Store diff --git a/Podfile.lock b/Podfile.lock index caeecf90a6..8e1e65320b 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -3,12 +3,12 @@ PODS: - Charts/Core (= 4.1.0) - Charts/Core (4.1.0): - SwiftAlgorithms (~> 1.0) - - CocoaLumberjack (3.8.4): - - CocoaLumberjack/Core (= 3.8.4) - - CocoaLumberjack/Core (3.8.4) - - Cuckoo (1.10.4): - - Cuckoo/Swift (= 1.10.4) - - Cuckoo/Swift (1.10.4) + - CocoaLumberjack (3.8.5): + - CocoaLumberjack/Core (= 3.8.5) + - CocoaLumberjack/Core (3.8.5) + - Cuckoo (2.0.9): + - Cuckoo/Swift (= 2.0.9) + - Cuckoo/Swift (2.0.9) - FearlessKeys (0.1.4) - FireMock (3.1) - Kingfisher (7.10.2) @@ -16,7 +16,7 @@ PODS: - R.swift (6.1.0): - R.swift.Library (~> 5.3.0) - R.swift.Library (5.3.0) - - ReachabilitySwift (5.0.0) + - ReachabilitySwift (5.2.3) - SnapKit (5.0.1) - SoraFoundation (1.0.0): - SoraFoundation/DateProcessing (= 1.0.0) @@ -76,8 +76,8 @@ PODS: - CocoaLumberjack (~> 3.0) - SwiftAlgorithms (1.0.0) - SwiftFormat/CLI (0.47.13) - - SwiftLint (0.54.0) - - SwiftyBeaver (2.0.0) + - SwiftLint (0.56.2) + - SwiftyBeaver (2.1.1) DEPENDENCIES: - Charts (~> 4.1.0) @@ -138,15 +138,15 @@ CHECKOUT OPTIONS: SPEC CHECKSUMS: Charts: ce0768268078eee0336f122c3c4ca248e4e204c5 - CocoaLumberjack: df59726690390bb8aaaa585938564ba1c8dbbb44 - Cuckoo: 20b8aed94022e0e43e90f7c9e4fb0c86f0926a01 + CocoaLumberjack: 6a459bc897d6d80bd1b8c78482ec7ad05dffc3f0 + Cuckoo: e2cc9a06a47d3faee7430a261c9c654b79b35f6e FearlessKeys: 5ec2782533624d237c899677a8c10859fbbc6668 FireMock: 3eed872059c12f94855413347da83b9d6d1a6fac Kingfisher: 99edc495d3b7607e6425f0d6f6847b2abd6d716d MediaView: 10ff6a5c7950a7c72c5da9e9b89cc85a981e6abc R.swift: ec98ff71c4ab2f6fd01dd077e5afd15e63a4834c R.swift.Library: 0fc583cb55a99e28901299cc451614cad1161962 - ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825 + ReachabilitySwift: 7f151ff156cea1481a8411701195ac6a984f4979 SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb SoraFoundation: 988d90ee3159311b02e42aeba0cf7e85d8bc724c SoraKeystore: e1789fe41412606d8a1116b86bd00d46d4cb9ccb @@ -155,8 +155,8 @@ SPEC CHECKSUMS: SVGKit: 1ad7513f8c74d9652f94ed64ddecda1a23864dea SwiftAlgorithms: 38dda4731d19027fdeee1125f973111bf3386b53 SwiftFormat: 73573b89257437c550b03d934889725fbf8f75e5 - SwiftLint: c1de071d9d08c8aba837545f6254315bc900e211 - SwiftyBeaver: 014b0c12065026b731bac80305294f27d63e27f6 + SwiftLint: bd7cfb914762ab5f0cbb632964849571db075706 + SwiftyBeaver: ade157e4f857812e7d7f15f2e3396bb8733f8a1c PODFILE CHECKSUM: 6eca9a23a0e78699b9b76e0f4a5d70c067f5290f diff --git a/GenerambaTemplates/viper-code-layout/Code/assembly.swift.liquid b/Templates/viper-code-layout/Code/assembly.swift.liquid similarity index 100% rename from GenerambaTemplates/viper-code-layout/Code/assembly.swift.liquid rename to Templates/viper-code-layout/Code/assembly.swift.liquid diff --git a/GenerambaTemplates/viper-code-layout/Code/interactor.swift.liquid b/Templates/viper-code-layout/Code/interactor.swift.liquid similarity index 100% rename from GenerambaTemplates/viper-code-layout/Code/interactor.swift.liquid rename to Templates/viper-code-layout/Code/interactor.swift.liquid diff --git a/GenerambaTemplates/viper-code-layout/Code/presenter.swift.liquid b/Templates/viper-code-layout/Code/presenter.swift.liquid similarity index 100% rename from GenerambaTemplates/viper-code-layout/Code/presenter.swift.liquid rename to Templates/viper-code-layout/Code/presenter.swift.liquid diff --git a/GenerambaTemplates/viper-code-layout/Code/protocol.swift.liquid b/Templates/viper-code-layout/Code/protocol.swift.liquid similarity index 100% rename from GenerambaTemplates/viper-code-layout/Code/protocol.swift.liquid rename to Templates/viper-code-layout/Code/protocol.swift.liquid diff --git a/GenerambaTemplates/viper-code-layout/Code/router.swift.liquid b/Templates/viper-code-layout/Code/router.swift.liquid similarity index 100% rename from GenerambaTemplates/viper-code-layout/Code/router.swift.liquid rename to Templates/viper-code-layout/Code/router.swift.liquid diff --git a/GenerambaTemplates/viper-code-layout/Code/view.swift.liquid b/Templates/viper-code-layout/Code/view.swift.liquid similarity index 100% rename from GenerambaTemplates/viper-code-layout/Code/view.swift.liquid rename to Templates/viper-code-layout/Code/view.swift.liquid diff --git a/GenerambaTemplates/viper-code-layout/Code/viewlayout.swift.liquid b/Templates/viper-code-layout/Code/viewlayout.swift.liquid similarity index 100% rename from GenerambaTemplates/viper-code-layout/Code/viewlayout.swift.liquid rename to Templates/viper-code-layout/Code/viewlayout.swift.liquid diff --git a/GenerambaTemplates/viper-code-layout/Tests/tests.swift.liquid b/Templates/viper-code-layout/Tests/tests.swift.liquid similarity index 100% rename from GenerambaTemplates/viper-code-layout/Tests/tests.swift.liquid rename to Templates/viper-code-layout/Tests/tests.swift.liquid diff --git a/GenerambaTemplates/viper-code-layout/viper-code-layout.rambaspec b/Templates/viper-code-layout/viper-code-layout.rambaspec similarity index 100% rename from GenerambaTemplates/viper-code-layout/viper-code-layout.rambaspec rename to Templates/viper-code-layout/viper-code-layout.rambaspec diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index 3dc9640ae4..efb6762cb8 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -9,17 +9,156 @@ /* Begin PBXBuildFile section */ 002561414AF1F8F3B4B65538 /* WalletTransactionDetailsWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7416F3AFA5F4D1130B1C410 /* WalletTransactionDetailsWireframe.swift */; }; 0077B6854FDCA7ECCD557B09 /* StakingPoolCreateViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D651E438F86F37CC07D6D3F /* StakingPoolCreateViewController.swift */; }; - 00E9DD69FCE94A4F4929B419 /* AccountStatisticsProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BF646F59913E95891915BDC /* AccountStatisticsProtocols.swift */; }; 02EC6059AEE8C92B4EDD09C0 /* LiquidityPoolsOverviewViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC0B2D0A77F4B0F7CC9E7C1D /* LiquidityPoolsOverviewViewLayout.swift */; }; 02FA6FDF7212F1F8D056BC18 /* SwapTransactionDetailAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = C597BAB74DF23914B68FDC39 /* SwapTransactionDetailAssembly.swift */; }; 04A17615051F4A1AE0E63BF8 /* PolkaswapSwapConfirmationViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F67BB672040911E4A165446 /* PolkaswapSwapConfirmationViewLayout.swift */; }; 04F9CF04588676D79EFB8570 /* ClaimCrowdloanRewardsAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBAA28C551344F1457D76DD5 /* ClaimCrowdloanRewardsAssembly.swift */; }; 054C4BCDEC29ED5F74A36E8B /* ExportMnemonicPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61EBE466BDCF77E65FDCDF81 /* ExportMnemonicPresenter.swift */; }; 05A6BB4F8F0912404A4D8413 /* WalletTransactionDetailsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82FD4E0BB1ABA364AFD2E891 /* WalletTransactionDetailsPresenter.swift */; }; - 06197BBE4299DC971C42DB92 /* WalletSendConfirmPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A687FBDA0912F8727CE0D81 /* WalletSendConfirmPresenter.swift */; }; 0678271BE1BA5BBC084F478A /* RecommendedValidatorListWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57C624E71FCE0FFF8EAD5BA9 /* RecommendedValidatorListWireframe.swift */; }; 06826AA6DBAEA5BBF45BB5CA /* LiquidityPoolSupplyConfirmInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4594686D10DBB7627B8C9A12 /* LiquidityPoolSupplyConfirmInteractor.swift */; }; 069C7D4C9648112115B90234 /* NftSendConfirmProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20EB6F377A05C11850066B9F /* NftSendConfirmProtocols.swift */; }; + 0701B8972C78F34A00DCD395 /* AccountStatisticsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B88B2C78F34A00DCD395 /* AccountStatisticsViewModel.swift */; }; + 0701B8982C78F34A00DCD395 /* AccountStatisticsViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B88C2C78F34A00DCD395 /* AccountStatisticsViewModelFactory.swift */; }; + 0701B8992C78F34A00DCD395 /* AccountStatisticsAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B88E2C78F34A00DCD395 /* AccountStatisticsAssembly.swift */; }; + 0701B89A2C78F34A00DCD395 /* AccountStatisticsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B88F2C78F34A00DCD395 /* AccountStatisticsInteractor.swift */; }; + 0701B89B2C78F34A00DCD395 /* AccountStatisticsPresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8902C78F34A00DCD395 /* AccountStatisticsPresentable.swift */; }; + 0701B89C2C78F34A00DCD395 /* AccountStatisticsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8912C78F34A00DCD395 /* AccountStatisticsPresenter.swift */; }; + 0701B89D2C78F34A00DCD395 /* AccountStatisticsProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8922C78F34A00DCD395 /* AccountStatisticsProtocols.swift */; }; + 0701B89E2C78F34A00DCD395 /* AccountStatisticsRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8932C78F34A00DCD395 /* AccountStatisticsRouter.swift */; }; + 0701B89F2C78F34A00DCD395 /* AccountStatisticsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8942C78F34A00DCD395 /* AccountStatisticsViewController.swift */; }; + 0701B8A02C78F34A00DCD395 /* AccountStatisticsViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8952C78F34A00DCD395 /* AccountStatisticsViewLayout.swift */; }; + 0701B8A32C78F54200DCD395 /* Cosmos in Frameworks */ = {isa = PBXBuildFile; productRef = 0701B8A22C78F54200DCD395 /* Cosmos */; }; + 0701B8A92C78F5DB00DCD395 /* BlockscoutHistoryOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8A42C78F5DB00DCD395 /* BlockscoutHistoryOperationFactory.swift */; }; + 0701B8AA2C78F5DB00DCD395 /* ViscanHistoryOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8A52C78F5DB00DCD395 /* ViscanHistoryOperationFactory.swift */; }; + 0701B8AB2C78F5DB00DCD395 /* ZChainHistoryOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8A62C78F5DB00DCD395 /* ZChainHistoryOperationFactory.swift */; }; + 0701B8AC2C78F5DB00DCD395 /* FireHistoryOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8A72C78F5DB00DCD395 /* FireHistoryOperationFactory.swift */; }; + 0701B8AD2C78F5DB00DCD395 /* KaiaHistoryOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8A82C78F5DB00DCD395 /* KaiaHistoryOperationFactory.swift */; }; + 0701B8B12C78F63400DCD395 /* InfoTitleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8AE2C78F63400DCD395 /* InfoTitleView.swift */; }; + 0701B8B22C78F63400DCD395 /* AccountScoreView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8AF2C78F63400DCD395 /* AccountScoreView.swift */; }; + 0701B8B82C78F69500DCD395 /* UIImage+ColorsInvert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8B32C78F69400DCD395 /* UIImage+ColorsInvert.swift */; }; + 0701B8B92C78F69500DCD395 /* BlockExplorerType+Filters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8B42C78F69400DCD395 /* BlockExplorerType+Filters.swift */; }; + 0701B8BA2C78F69500DCD395 /* FWCosmosView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8B52C78F69400DCD395 /* FWCosmosView.swift */; }; + 0701B8BB2C78F69500DCD395 /* ChainModel+Nomis.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8B62C78F69500DCD395 /* ChainModel+Nomis.swift */; }; + 0701B8BC2C78F69500DCD395 /* Decimal+Formatting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8B72C78F69500DCD395 /* Decimal+Formatting.swift */; }; + 0701B8BF2C78F6C400DCD395 /* AccountScoreViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8BD2C78F6C300DCD395 /* AccountScoreViewModel.swift */; }; + 0701B8E92C78F71800DCD395 /* TonConnectError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8C02C78F71800DCD395 /* TonConnectError.swift */; }; + 0701B8EA2C78F71800DCD395 /* TonConnectEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8C12C78F71800DCD395 /* TonConnectEvent.swift */; }; + 0701B8EB2C78F71800DCD395 /* TonConnectManifest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8C22C78F71800DCD395 /* TonConnectManifest.swift */; }; + 0701B8EC2C78F71800DCD395 /* TonConnectParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8C32C78F71800DCD395 /* TonConnectParameters.swift */; }; + 0701B8ED2C78F71800DCD395 /* TonConnectRequestPayload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8C42C78F71800DCD395 /* TonConnectRequestPayload.swift */; }; + 0701B8EE2C78F71800DCD395 /* NomisAccountStatisticsRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8C62C78F71800DCD395 /* NomisAccountStatisticsRequest.swift */; }; + 0701B8EF2C78F71800DCD395 /* NomisAccountStatisticsFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8C82C78F71800DCD395 /* NomisAccountStatisticsFetcher.swift */; }; + 0701B8F02C78F71800DCD395 /* NomisJSONDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8C92C78F71800DCD395 /* NomisJSONDecoder.swift */; }; + 0701B8F12C78F71800DCD395 /* NomisRequestSigner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8CA2C78F71800DCD395 /* NomisRequestSigner.swift */; }; + 0701B8F22C78F71800DCD395 /* AccountStatisticsFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8CC2C78F71800DCD395 /* AccountStatisticsFetching.swift */; }; + 0701B8F32C78F71800DCD395 /* OKXDexAllTokensRequestParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8CE2C78F71800DCD395 /* OKXDexAllTokensRequestParameters.swift */; }; + 0701B8F42C78F71800DCD395 /* OKXDexApproveRequestParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8CF2C78F71800DCD395 /* OKXDexApproveRequestParameters.swift */; }; + 0701B8F52C78F71800DCD395 /* OKXDexLiquiditySourceRequestParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8D02C78F71800DCD395 /* OKXDexLiquiditySourceRequestParameters.swift */; }; + 0701B8F62C78F71800DCD395 /* OKXDexQuotesRequestParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8D12C78F71800DCD395 /* OKXDexQuotesRequestParameters.swift */; }; + 0701B8F72C78F71800DCD395 /* OKXDexSwapRequestParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8D22C78F71800DCD395 /* OKXDexSwapRequestParameters.swift */; }; + 0701B8F82C78F71800DCD395 /* OKXApproveTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8D52C78F71800DCD395 /* OKXApproveTransaction.swift */; }; + 0701B8F92C78F71800DCD395 /* OKXDexProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8D62C78F71800DCD395 /* OKXDexProtocol.swift */; }; + 0701B8FA2C78F71800DCD395 /* OKXDexQuote.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8D72C78F71800DCD395 /* OKXDexQuote.swift */; }; + 0701B8FB2C78F71800DCD395 /* OKXDexRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8D82C78F71800DCD395 /* OKXDexRouter.swift */; }; + 0701B8FC2C78F71800DCD395 /* OKXDexSubrouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8D92C78F71800DCD395 /* OKXDexSubrouter.swift */; }; + 0701B8FD2C78F71800DCD395 /* OKXLiquiditySource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8DA2C78F71800DCD395 /* OKXLiquiditySource.swift */; }; + 0701B8FE2C78F71800DCD395 /* OKXQuote.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8DB2C78F71800DCD395 /* OKXQuote.swift */; }; + 0701B8FF2C78F71800DCD395 /* OKXResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8DC2C78F71800DCD395 /* OKXResponse.swift */; }; + 0701B9002C78F71800DCD395 /* OKXSupportedChain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8DD2C78F71800DCD395 /* OKXSupportedChain.swift */; }; + 0701B9012C78F71800DCD395 /* OKXSwap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8DE2C78F71800DCD395 /* OKXSwap.swift */; }; + 0701B9022C78F71800DCD395 /* OKXSwapTransaction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8DF2C78F71800DCD395 /* OKXSwapTransaction.swift */; }; + 0701B9032C78F71800DCD395 /* OKXToken.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8E02C78F71800DCD395 /* OKXToken.swift */; }; + 0701B9042C78F71800DCD395 /* OKXDexRequestSigner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8E22C78F71800DCD395 /* OKXDexRequestSigner.swift */; }; + 0701B9052C78F71800DCD395 /* OKXDexAggregatorService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B8E42C78F71800DCD395 /* OKXDexAggregatorService.swift */; }; + 0701B9652C78FAF000DCD395 /* LiquidityPools+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9082C78FAF000DCD395 /* LiquidityPools+ViewModel.swift */; }; + 0701B9662C78FAF000DCD395 /* LiquidityPoolsConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9092C78FAF000DCD395 /* LiquidityPoolsConstants.swift */; }; + 0701B9672C78FAF000DCD395 /* assets.json in Resources */ = {isa = PBXBuildFile; fileRef = 0701B90B2C78FAF000DCD395 /* assets.json */; }; + 0701B9682C78FAF000DCD395 /* chains.json in Resources */ = {isa = PBXBuildFile; fileRef = 0701B90C2C78FAF000DCD395 /* chains.json */; }; + 0701B9692C78FAF000DCD395 /* dapps.json in Resources */ = {isa = PBXBuildFile; fileRef = 0701B90D2C78FAF000DCD395 /* dapps.json */; }; + 0701B96A2C78FAF000DCD395 /* polkadot-9370metadata in Resources */ = {isa = PBXBuildFile; fileRef = 0701B90E2C78FAF000DCD395 /* polkadot-9370metadata */; }; + 0701B96B2C78FAF000DCD395 /* polkaswapSettings.json in Resources */ = {isa = PBXBuildFile; fileRef = 0701B90F2C78FAF000DCD395 /* polkaswapSettings.json */; }; + 0701B96C2C78FAF000DCD395 /* runtime-default.json in Resources */ = {isa = PBXBuildFile; fileRef = 0701B9102C78FAF000DCD395 /* runtime-default.json */; }; + 0701B96D2C78FAF000DCD395 /* runtime-empty.json in Resources */ = {isa = PBXBuildFile; fileRef = 0701B9112C78FAF000DCD395 /* runtime-empty.json */; }; + 0701B96E2C78FAF000DCD395 /* runtime-kusama.json in Resources */ = {isa = PBXBuildFile; fileRef = 0701B9122C78FAF000DCD395 /* runtime-kusama.json */; }; + 0701B96F2C78FAF000DCD395 /* runtime-polkadot.json in Resources */ = {isa = PBXBuildFile; fileRef = 0701B9132C78FAF000DCD395 /* runtime-polkadot.json */; }; + 0701B9702C78FAF000DCD395 /* runtime-rococo.json in Resources */ = {isa = PBXBuildFile; fileRef = 0701B9142C78FAF000DCD395 /* runtime-rococo.json */; }; + 0701B9712C78FAF000DCD395 /* runtime-westend.json in Resources */ = {isa = PBXBuildFile; fileRef = 0701B9152C78FAF000DCD395 /* runtime-westend.json */; }; + 0701B9722C78FAF000DCD395 /* types.json in Resources */ = {isa = PBXBuildFile; fileRef = 0701B9162C78FAF000DCD395 /* types.json */; }; + 0701B9732C78FAF000DCD395 /* LiquidityPoolDetailsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9182C78FAF000DCD395 /* LiquidityPoolDetailsViewModel.swift */; }; + 0701B9742C78FAF000DCD395 /* LiquidityPoolDetailsViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9192C78FAF000DCD395 /* LiquidityPoolDetailsViewModelFactory.swift */; }; + 0701B9752C78FAF000DCD395 /* LiquidityPoolDetailsAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B91B2C78FAF000DCD395 /* LiquidityPoolDetailsAssembly.swift */; }; + 0701B9762C78FAF000DCD395 /* LiquidityPoolDetailsInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B91C2C78FAF000DCD395 /* LiquidityPoolDetailsInput.swift */; }; + 0701B9772C78FAF000DCD395 /* LiquidityPoolDetailsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B91D2C78FAF000DCD395 /* LiquidityPoolDetailsInteractor.swift */; }; + 0701B9782C78FAF000DCD395 /* LiquidityPoolDetailsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B91E2C78FAF000DCD395 /* LiquidityPoolDetailsPresenter.swift */; }; + 0701B9792C78FAF000DCD395 /* LiquidityPoolDetailsProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B91F2C78FAF000DCD395 /* LiquidityPoolDetailsProtocols.swift */; }; + 0701B97A2C78FAF000DCD395 /* LiquidityPoolDetailsRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9202C78FAF000DCD395 /* LiquidityPoolDetailsRouter.swift */; }; + 0701B97B2C78FAF000DCD395 /* LiquidityPoolDetailsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9212C78FAF000DCD395 /* LiquidityPoolDetailsViewController.swift */; }; + 0701B97C2C78FAF000DCD395 /* LiquidityPoolDetailsViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9222C78FAF000DCD395 /* LiquidityPoolDetailsViewLayout.swift */; }; + 0701B97D2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9242C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityAssembly.swift */; }; + 0701B97E2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9252C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityInteractor.swift */; }; + 0701B97F2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9262C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityPresenter.swift */; }; + 0701B9802C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9272C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityProtocols.swift */; }; + 0701B9812C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9282C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityRouter.swift */; }; + 0701B9822C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9292C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityViewController.swift */; }; + 0701B9832C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B92A2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityViewLayout.swift */; }; + 0701B9842C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B92C2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmAssembly.swift */; }; + 0701B9852C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B92D2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmProtocols.swift */; }; + 0701B9862C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B92E2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmViewController.swift */; }; + 0701B9872C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B92F2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmViewLayout.swift */; }; + 0701B9882C78FAF000DCD395 /* AvailableLiquidityPoolsListInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9312C78FAF000DCD395 /* AvailableLiquidityPoolsListInteractor.swift */; }; + 0701B9892C78FAF000DCD395 /* AvailableLiquidityPoolsListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9322C78FAF000DCD395 /* AvailableLiquidityPoolsListPresenter.swift */; }; + 0701B98A2C78FAF000DCD395 /* AvailableLiquidityPoolsListViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9332C78FAF000DCD395 /* AvailableLiquidityPoolsListViewModelFactory.swift */; }; + 0701B98B2C78FAF000DCD395 /* UserLiquidityPoolsListInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9352C78FAF000DCD395 /* UserLiquidityPoolsListInteractor.swift */; }; + 0701B98C2C78FAF000DCD395 /* UserLiquidityPoolsListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9362C78FAF000DCD395 /* UserLiquidityPoolsListPresenter.swift */; }; + 0701B98D2C78FAF000DCD395 /* UserLiquidityPoolsListViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9372C78FAF000DCD395 /* UserLiquidityPoolsListViewModelFactory.swift */; }; + 0701B98E2C78FAF000DCD395 /* LiquidityPoolListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B93A2C78FAF000DCD395 /* LiquidityPoolListCell.swift */; }; + 0701B98F2C78FAF000DCD395 /* LiquidityPoolListCellModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B93C2C78FAF000DCD395 /* LiquidityPoolListCellModel.swift */; }; + 0701B9902C78FAF000DCD395 /* LiquidityPoolListType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B93D2C78FAF000DCD395 /* LiquidityPoolListType.swift */; }; + 0701B9912C78FAF000DCD395 /* LiquidityPoolListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B93E2C78FAF000DCD395 /* LiquidityPoolListViewModel.swift */; }; + 0701B9922C78FAF000DCD395 /* LiquidityPoolsListAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9402C78FAF000DCD395 /* LiquidityPoolsListAssembly.swift */; }; + 0701B9932C78FAF000DCD395 /* LiquidityPoolsListProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9412C78FAF000DCD395 /* LiquidityPoolsListProtocols.swift */; }; + 0701B9942C78FAF000DCD395 /* LiquidityPoolsListRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9422C78FAF000DCD395 /* LiquidityPoolsListRouter.swift */; }; + 0701B9952C78FAF000DCD395 /* LiquidityPoolsListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9432C78FAF000DCD395 /* LiquidityPoolsListViewController.swift */; }; + 0701B9962C78FAF000DCD395 /* LiquidityPoolsListViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9442C78FAF000DCD395 /* LiquidityPoolsListViewLayout.swift */; }; + 0701B9972C78FAF000DCD395 /* LiquidityPoolsOverviewAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9462C78FAF000DCD395 /* LiquidityPoolsOverviewAssembly.swift */; }; + 0701B9982C78FAF000DCD395 /* LiquidityPoolsOverviewInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9472C78FAF000DCD395 /* LiquidityPoolsOverviewInteractor.swift */; }; + 0701B9992C78FAF000DCD395 /* LiquidityPoolsOverviewPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9482C78FAF000DCD395 /* LiquidityPoolsOverviewPresenter.swift */; }; + 0701B99A2C78FAF000DCD395 /* LiquidityPoolsOverviewProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9492C78FAF000DCD395 /* LiquidityPoolsOverviewProtocols.swift */; }; + 0701B99B2C78FAF000DCD395 /* LiquidityPoolsOverviewRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B94A2C78FAF000DCD395 /* LiquidityPoolsOverviewRouter.swift */; }; + 0701B99C2C78FAF000DCD395 /* LiquidityPoolsOverviewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B94B2C78FAF000DCD395 /* LiquidityPoolsOverviewViewController.swift */; }; + 0701B99D2C78FAF000DCD395 /* LiquidityPoolsOverviewViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B94C2C78FAF000DCD395 /* LiquidityPoolsOverviewViewLayout.swift */; }; + 0701B99E2C78FAF000DCD395 /* LiquidityPoolSupplyViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B94E2C78FAF000DCD395 /* LiquidityPoolSupplyViewModel.swift */; }; + 0701B99F2C78FAF000DCD395 /* LiquidityPoolSupplyViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B94F2C78FAF000DCD395 /* LiquidityPoolSupplyViewModelFactory.swift */; }; + 0701B9A02C78FAF000DCD395 /* LiquidityPoolSupplyAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9512C78FAF000DCD395 /* LiquidityPoolSupplyAssembly.swift */; }; + 0701B9A12C78FAF000DCD395 /* LiquidityPoolSupplyInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9522C78FAF000DCD395 /* LiquidityPoolSupplyInteractor.swift */; }; + 0701B9A22C78FAF000DCD395 /* LiquidityPoolSupplyPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9532C78FAF000DCD395 /* LiquidityPoolSupplyPresenter.swift */; }; + 0701B9A32C78FAF000DCD395 /* LiquidityPoolSupplyProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9542C78FAF000DCD395 /* LiquidityPoolSupplyProtocols.swift */; }; + 0701B9A42C78FAF000DCD395 /* LiquidityPoolSupplyRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9552C78FAF000DCD395 /* LiquidityPoolSupplyRouter.swift */; }; + 0701B9A52C78FAF000DCD395 /* LiquidityPoolSupplyViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9562C78FAF000DCD395 /* LiquidityPoolSupplyViewController.swift */; }; + 0701B9A62C78FAF000DCD395 /* LiquidityPoolSupplyViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9572C78FAF000DCD395 /* LiquidityPoolSupplyViewLayout.swift */; }; + 0701B9A72C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9592C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewModel.swift */; }; + 0701B9A82C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B95A2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewModelFactory.swift */; }; + 0701B9A92C78FAF000DCD395 /* LiquidityPoolSupplyConfirmAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B95C2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmAssembly.swift */; }; + 0701B9AA2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B95D2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmInteractor.swift */; }; + 0701B9AB2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B95E2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmPresenter.swift */; }; + 0701B9AC2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B95F2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmProtocols.swift */; }; + 0701B9AD2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9602C78FAF000DCD395 /* LiquidityPoolSupplyConfirmRouter.swift */; }; + 0701B9AE2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9612C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewController.swift */; }; + 0701B9AF2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9622C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewLayout.swift */; }; + 0701B9B12C78FB5600DCD395 /* NetworkRequestUrlParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9B02C78FB5600DCD395 /* NetworkRequestUrlParameters.swift */; }; + 0701B9B32C78FBC600DCD395 /* AccountStatistics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9B22C78FBC600DCD395 /* AccountStatistics.swift */; }; + 0701B9B52C78FD2000DCD395 /* BlockExplorerApiKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9B42C78FD2000DCD395 /* BlockExplorerApiKey.swift */; }; + 0701B9BE2C78FD8800DCD395 /* KaiaHistoryResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9B62C78FD8800DCD395 /* KaiaHistoryResponse.swift */; }; + 0701B9BF2C78FD8800DCD395 /* ZChainHistoryResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9B82C78FD8800DCD395 /* ZChainHistoryResponse.swift */; }; + 0701B9C02C78FD8800DCD395 /* 5ireHistoryResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9BA2C78FD8800DCD395 /* 5ireHistoryResponse.swift */; }; + 0701B9C12C78FD8800DCD395 /* VicscanHistoryResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9BC2C78FD8800DCD395 /* VicscanHistoryResponse.swift */; }; + 0701B9C62C78FDE000DCD395 /* AssetTransactionData+FireHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9C22C78FDDF00DCD395 /* AssetTransactionData+FireHistory.swift */; }; + 0701B9C72C78FDE000DCD395 /* AssetTransactionData+ZChainHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9C32C78FDDF00DCD395 /* AssetTransactionData+ZChainHistory.swift */; }; + 0701B9C82C78FDE000DCD395 /* AssetTransactionData+VicscanHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9C42C78FDE000DCD395 /* AssetTransactionData+VicscanHistory.swift */; }; + 0701B9C92C78FDE000DCD395 /* AssetTransactionData+KaiaHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9C52C78FDE000DCD395 /* AssetTransactionData+KaiaHistory.swift */; }; + 0701B9CB2C78FE2C00DCD395 /* ScamInfoFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9CA2C78FE2C00DCD395 /* ScamInfoFetcher.swift */; }; + 0701B9CD2C78FF7900DCD395 /* AccountScoreSettingsChanged.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0701B9CC2C78FF7900DCD395 /* AccountScoreSettingsChanged.swift */; }; 0702B31529701759003519F5 /* AmountInputViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0702B31429701759003519F5 /* AmountInputViewModel.swift */; }; 0702B31829701864003519F5 /* WalletViewModelObserverContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0702B31729701864003519F5 /* WalletViewModelObserverContainer.swift */; }; 0702B31A29701884003519F5 /* MoneyPresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0702B31929701884003519F5 /* MoneyPresentable.swift */; }; @@ -51,19 +190,51 @@ 070CDD8A2ACBE59700F3F20A /* ReceiveAndRequestAssetAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 070CDD812ACBE59700F3F20A /* ReceiveAndRequestAssetAssembly.swift */; }; 070CDD8B2ACBE59700F3F20A /* ReceiveAndRequestAssetProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 070CDD822ACBE59700F3F20A /* ReceiveAndRequestAssetProtocols.swift */; }; 070CDD8C2ACBE59700F3F20A /* ReceiveAndRequestAssetInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 070CDD832ACBE59700F3F20A /* ReceiveAndRequestAssetInteractor.swift */; }; + 070ED7D22C3E7DE100DF4098 /* TonSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 070ED7D12C3E7DE100DF4098 /* TonSwift */; }; + 070ED7DB2C45321300DF4098 /* TonRemoteBalanceFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = 070ED7DA2C45321300DF4098 /* TonRemoteBalanceFetching.swift */; }; + 070ED7EB2C4543D900DF4098 /* EventSource in Frameworks */ = {isa = PBXBuildFile; productRef = 070ED7EA2C4543D900DF4098 /* EventSource */; }; + 070ED7ED2C4543D900DF4098 /* StreamURLSessionTransport in Frameworks */ = {isa = PBXBuildFile; productRef = 070ED7EC2C4543D900DF4098 /* StreamURLSessionTransport */; }; + 070ED7EF2C4543D900DF4098 /* TonAPI in Frameworks */ = {isa = PBXBuildFile; productRef = 070ED7EE2C4543D900DF4098 /* TonAPI */; }; + 070ED7F12C4543D900DF4098 /* TonStreamingAPI in Frameworks */ = {isa = PBXBuildFile; productRef = 070ED7F02C4543D900DF4098 /* TonStreamingAPI */; }; 0713097D28C63893002B17D0 /* ScamSyncService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0713097C28C63893002B17D0 /* ScamSyncService.swift */; }; 0713097F28C6F60D002B17D0 /* ScamSyncServiceFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0713097E28C6F60D002B17D0 /* ScamSyncServiceFactory.swift */; }; 0713098128C6F7BB002B17D0 /* CDScamInfo+CoreDataCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0713098028C6F7BB002B17D0 /* CDScamInfo+CoreDataCodable.swift */; }; + 0715FCD42C65E96000AA674E /* TonWebBridgeHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCD32C65E96000AA674E /* TonWebBridgeHeaderView.swift */; }; + 0715FCD92C6608B700AA674E /* TonConnectMessageBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCD82C6608B700AA674E /* TonConnectMessageBuilder.swift */; }; + 0715FCDD2C660AF700AA674E /* DappBridgeMessageType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCDC2C660AF700AA674E /* DappBridgeMessageType.swift */; }; + 0715FCDF2C661E1D00AA674E /* TonConnect.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCDE2C661E1D00AA674E /* TonConnect.swift */; }; + 0715FCE12C6620B500AA674E /* DappBridgeResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCE02C6620B500AA674E /* DappBridgeResponse.swift */; }; + 0715FCE32C66262100AA674E /* TonConnectResponses+Encodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCE22C66262100AA674E /* TonConnectResponses+Encodable.swift */; }; + 0715FCE52C66378900AA674E /* TonConnectModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCE42C66378900AA674E /* TonConnectModels.swift */; }; + 071606C42C7C6C2400C1DF75 /* PricesUpdated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071606C32C7C6C2400C1DF75 /* PricesUpdated.swift */; }; + 071606C62C7C6C3200C1DF75 /* PricesService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071606C52C7C6C3200C1DF75 /* PricesService.swift */; }; + 071606CA2C7C6C8800C1DF75 /* PriceDataHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071606C72C7C6C8700C1DF75 /* PriceDataHelper.swift */; }; + 071606CB2C7C6C8800C1DF75 /* AssetRepositoryFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071606C82C7C6C8800C1DF75 /* AssetRepositoryFactory.swift */; }; + 071606CC2C7C6C8800C1DF75 /* AssetModelMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071606C92C7C6C8800C1DF75 /* AssetModelMapper.swift */; }; + 071606CF2C7CB91D00C1DF75 /* LocalToggleService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071606CE2C7CB91D00C1DF75 /* LocalToggleService.swift */; }; + 071606D12C7CB95500C1DF75 /* LocalListToggle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071606D02C7CB95500C1DF75 /* LocalListToggle.swift */; }; 0716C83C28853ACA004C8CB1 /* WalletBalanceSubscriptionAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0716C83B28853ACA004C8CB1 /* WalletBalanceSubscriptionAdapter.swift */; }; 0716C84C288802EB004C8CB1 /* SwipableTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0716C84B288802EB004C8CB1 /* SwipableTableViewCell.swift */; }; 0716C84F28880304004C8CB1 /* UITableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0716C84D28880304004C8CB1 /* UITableViewCell.swift */; }; 0716C85028880304004C8CB1 /* UIResponder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0716C84E28880304004C8CB1 /* UIResponder.swift */; }; 071BC67529274F47007685D1 /* HashCopiedEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071BC67429274F47007685D1 /* HashCopiedEvent.swift */; }; 071BC677292B21CC007685D1 /* UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071BC676292B21CC007685D1 /* UIImage.swift */; }; + 07230EAB2C73515E00B92466 /* DappDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07230EAA2C73515E00B92466 /* DappDataSource.swift */; }; + 07230EAD2C735AA200B92466 /* DappBrowserViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07230EAC2C735AA200B92466 /* DappBrowserViewModelFactory.swift */; }; + 07230EAF2C73608900B92466 /* DappBrowserViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07230EAE2C73608900B92466 /* DappBrowserViewModel.swift */; }; + 07230EB12C7456B900B92466 /* dapps.json in Resources */ = {isa = PBXBuildFile; fileRef = 07230EB02C7456B900B92466 /* dapps.json */; }; + 0723EDA02C48E37400880620 /* SoraQrTransferFlowUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0723ED9F2C48E37400880620 /* SoraQrTransferFlowUseCase.swift */; }; + 0723EDA42C49369D00880620 /* TransferFlowUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0723EDA32C49369D00880620 /* TransferFlowUseCase.swift */; }; + 0723EDA62C50B87B00880620 /* BokoloTransferFlowUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0723EDA52C50B87B00880620 /* BokoloTransferFlowUseCase.swift */; }; + 0723EDA82C50D6FE00880620 /* SubstrateTransferFlowUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0723EDA72C50D6FD00880620 /* SubstrateTransferFlowUseCase.swift */; }; + 0723EDB22C50FAD900880620 /* EthereumTransferFlowUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0723EDB12C50FAD900880620 /* EthereumTransferFlowUseCase.swift */; }; 0726FFAC2AC4399C00336D76 /* WalletConnectPolkadorSigner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0726FFAA2AC4399C00336D76 /* WalletConnectPolkadorSigner.swift */; }; 0726FFAD2AC4399C00336D76 /* WalletConnectPolkadotParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0726FFAB2AC4399C00336D76 /* WalletConnectPolkadotParser.swift */; }; 0726FFB02AC439DE00336D76 /* WalletConnectExtrinsic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0726FFAE2AC439DE00336D76 /* WalletConnectExtrinsic.swift */; }; 0726FFB12AC439DE00336D76 /* WalletConnectPolkadotSignature.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0726FFAF2AC439DE00336D76 /* WalletConnectPolkadotSignature.swift */; }; + 0728BD162C984DA0002369FD /* ConnectedAccountsTableHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0728BD152C984DA0002369FD /* ConnectedAccountsTableHeaderView.swift */; }; + 0728BD182C984E7A002369FD /* ConnectedAccountsTableCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0728BD172C984E7A002369FD /* ConnectedAccountsTableCell.swift */; }; + 0728BD1A2C99474B002369FD /* ConnectedAccountsViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0728BD192C99474B002369FD /* ConnectedAccountsViewModelFactory.swift */; }; 072EB84828E2A267007E70FF /* StakingPoolCreateConfirmViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 072EB84728E2A267007E70FF /* StakingPoolCreateConfirmViewModelFactory.swift */; }; 072EB84A28E2A2A1007E70FF /* StakingPoolCreateConfirmViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 072EB84928E2A2A1007E70FF /* StakingPoolCreateConfirmViewModel.swift */; }; 073417B2298BA28300104F41 /* EqOraclePricePoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 073417AF298BA28300104F41 /* EqOraclePricePoint.swift */; }; @@ -72,11 +243,16 @@ 07349F3228FE5EEB00A802B9 /* SwipeCellButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07349F3128FE5EEB00A802B9 /* SwipeCellButton.swift */; }; 073B34BC2AE8CC4500DC5106 /* WalletConnectDisconnectService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 073B34BB2AE8CC4500DC5106 /* WalletConnectDisconnectService.swift */; }; 073B34BF2AE91FE600DC5106 /* WalletConnectProposalDataValidating.swift in Sources */ = {isa = PBXBuildFile; fileRef = 073B34BE2AE91FE600DC5106 /* WalletConnectProposalDataValidating.swift */; }; + 073DE30C2C5B99D6003B4990 /* TonHistoryOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 073DE30B2C5B99D6003B4990 /* TonHistoryOperationFactory.swift */; }; + 073DE30F2C5BA35B003B4990 /* TonModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 073DE30E2C5BA35B003B4990 /* TonModels.swift */; }; + 073DE3112C5BB783003B4990 /* AssetTransactionData+Ton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 073DE3102C5BB783003B4990 /* AssetTransactionData+Ton.swift */; }; 074EB7AA290B9E20000A2A6A /* ApplicationStatusAlertEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 074EB7A9290B9E20000A2A6A /* ApplicationStatusAlertEvent.swift */; }; 074EB7AD290B9F64000A2A6A /* AddressCopiedEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 074EB7AC290B9F64000A2A6A /* AddressCopiedEvent.swift */; }; 074EB7AF290BA057000A2A6A /* ConnectionOfflineEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 074EB7AE290BA056000A2A6A /* ConnectionOfflineEvent.swift */; }; 074EB7B1290BA142000A2A6A /* ConnectionOnlineEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 074EB7B0290BA142000A2A6A /* ConnectionOnlineEvent.swift */; }; 075C647028098AFB00A55094 /* EthereumConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 075C646F28098AFB00A55094 /* EthereumConstants.swift */; }; + 075E5FCF2C7F1A180044C142 /* TonConnectServiceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 075E5FCE2C7F1A180044C142 /* TonConnectServiceDelegate.swift */; }; + 075E5FD12C7F1A630044C142 /* TonConnectService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 075E5FD02C7F1A630044C142 /* TonConnectService.swift */; }; 075FC63528D9AB1600E25263 /* CommonInputViewV2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 075FC63428D9AB1600E25263 /* CommonInputViewV2.swift */; }; 0761DEB228E1F54D00B90D2C /* StakingPoolCreateViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0761DEB128E1F54D00B90D2C /* StakingPoolCreateViewModel.swift */; }; 0761DEB428E1F57600B90D2C /* StakingPoolCreateViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0761DEB328E1F57600B90D2C /* StakingPoolCreateViewModelFactory.swift */; }; @@ -109,16 +285,22 @@ 076D9D6229506CFA002762E3 /* polkaswapSettings.json in Resources */ = {isa = PBXBuildFile; fileRef = 076D9D6129506CE3002762E3 /* polkaswapSettings.json */; }; 076D9D6629507B39002762E3 /* PolkaswapSettingsFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 076D9D6529507B39002762E3 /* PolkaswapSettingsFactory.swift */; }; 076D9D6829509F1C002762E3 /* PolkaswapSettingMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 076D9D6729509F1C002762E3 /* PolkaswapSettingMapper.swift */; }; + 0772377A2C819A6600D8061F /* TonConnectMessageBuilderImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 077237792C819A6600D8061F /* TonConnectMessageBuilderImpl.swift */; }; + 0778A12A2C5763D6008A1254 /* Task.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0778A1292C5763D6008A1254 /* Task.swift */; }; + 0778A12E2C58D0F2008A1254 /* TonJettonInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0778A12D2C58D0F2008A1254 /* TonJettonInjector.swift */; }; 0783EEAE2AE1342F006476F4 /* UIColor+Gradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0783EEAD2AE1342F006476F4 /* UIColor+Gradient.swift */; }; 0783EEB02AE1867A006476F4 /* WalletConnectEthereumTransferService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0783EEAF2AE1867A006476F4 /* WalletConnectEthereumTransferService.swift */; }; 0783EEB22AE193F3006476F4 /* BokoloConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0783EEB12AE193F3006476F4 /* BokoloConstants.swift */; }; 078E34C128058B9D00DF187A /* DocumentType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 078E34C028058B9D00DF187A /* DocumentType.swift */; }; 078E34C328058BFD00DF187A /* DocumentPickerPresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 078E34C228058BFD00DF187A /* DocumentPickerPresentable.swift */; }; 078FD51027F310FE00F031E6 /* StartViewHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 078FD50F27F310FE00F031E6 /* StartViewHelper.swift */; }; + 07A949842C466E8C00613B9D /* SubstrateRemoteBalanceFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07A949832C466E8C00613B9D /* SubstrateRemoteBalanceFetching.swift */; }; + 07A949872C47C39800613B9D /* ServiceAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07A949862C47C39800613B9D /* ServiceAssembly.swift */; }; 07AC51132AD8040C000970B8 /* XorlessTransfer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07AC51122AD8040C000970B8 /* XorlessTransfer.swift */; }; 07B018D128C7135400E05510 /* ScamInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07B018D028C7135400E05510 /* ScamInfo.swift */; }; 07B018D328C714B300E05510 /* ScamServiceOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07B018D228C714B300E05510 /* ScamServiceOperationFactory.swift */; }; 07B018DB28C9D66300E05510 /* ScamWarningExpandableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07B018DA28C9D66300E05510 /* ScamWarningExpandableView.swift */; }; + 07B56CFA2C520B5B00E924AA /* TonTransferFlowUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07B56CF92C520B5B00E924AA /* TonTransferFlowUseCase.swift */; }; 07B6BC7A28B78E8000621864 /* SheetAlertPresentableStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07B6BC7928B78E8000621864 /* SheetAlertPresentableStyle.swift */; }; 07B6BC7C28B875D800621864 /* UIControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07B6BC7B28B875D800621864 /* UIControl.swift */; }; 07B6BC7F28BC71DB00621864 /* NetworkIssuesNotificationViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07B6BC7E28BC71DB00621864 /* NetworkIssuesNotificationViewModelFactory.swift */; }; @@ -129,10 +311,16 @@ 07BF3D992B3D8BCD0046ABF4 /* ChainlinkOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07BF3D982B3D8BCD0046ABF4 /* ChainlinkOperationFactory.swift */; }; 07BF3D9B2B3D8C370046ABF4 /* ManualOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07BF3D9A2B3D8C370046ABF4 /* ManualOperation.swift */; }; 07BF3D9D2B3D8C9B0046ABF4 /* AssetTransactionData+OklinkHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07BF3D9C2B3D8C9B0046ABF4 /* AssetTransactionData+OklinkHistory.swift */; }; - 07BF3D9F2B3D98850046ABF4 /* BlockscoutHistoryOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07BF3D9E2B3D98850046ABF4 /* BlockscoutHistoryOperationFactory.swift */; }; 07BF3DA12B3D98BD0046ABF4 /* AssetTransactionData+Zeta.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07BF3DA02B3D98BD0046ABF4 /* AssetTransactionData+Zeta.swift */; }; 07BFF8AA2AD666CE005A5C58 /* AutoNamespacesError+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07BFF8A92AD666CE005A5C58 /* AutoNamespacesError+Extension.swift */; }; 07C3397229189B720057C4A5 /* ChainsTypesSyncService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07C3397129189B720057C4A5 /* ChainsTypesSyncService.swift */; }; + 07C438D72C638B2900475B14 /* TonConnectServiceImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07C438D62C638B2900475B14 /* TonConnectServiceImpl.swift */; }; + 07C438DA2C638BAA00475B14 /* TonConnectParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07C438D92C638BAA00475B14 /* TonConnectParameters.swift */; }; + 07C438DC2C638BB800475B14 /* TonConnectRequestPayload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07C438DB2C638BB800475B14 /* TonConnectRequestPayload.swift */; }; + 07C438DE2C638D3900475B14 /* TonConnectManifest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07C438DD2C638D3900475B14 /* TonConnectManifest.swift */; }; + 07CA72C32CD8A63F00EF5279 /* CDChainAccountMigrationPolicyV12.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07CA72C22CD8A63F00EF5279 /* CDChainAccountMigrationPolicyV12.swift */; }; + 07CA72C52CD8AD0100EF5279 /* CDMetaAccountMigrationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07CA72C42CD8AD0100EF5279 /* CDMetaAccountMigrationPolicy.swift */; }; + 07CA73FB2CDDE27400EF5279 /* MetaAccountModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07CA73FA2CDDE27400EF5279 /* MetaAccountModel.swift */; }; 07D05E4128EC08B800B66C70 /* StakinkPoolRewardCalculator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D05E4028EC08B800B66C70 /* StakinkPoolRewardCalculator.swift */; }; 07D05E4928EEFF2C00B66C70 /* SelectValidatorsStartPoolViewModelState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D05E4728EEFDC900B66C70 /* SelectValidatorsStartPoolViewModelState.swift */; }; 07D05E4A28EEFF2F00B66C70 /* SelectValidatorsStartPoolStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D05E4628EEFDC900B66C70 /* SelectValidatorsStartPoolStrategy.swift */; }; @@ -148,6 +336,12 @@ 07D05E6628EF0BE500B66C70 /* SelectValidatorsConfirmPoolStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D05E6428EF0BCC00B66C70 /* SelectValidatorsConfirmPoolStrategy.swift */; }; 07D05E6728EF0BE500B66C70 /* SelectValidatorsConfirmPoolViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D05E6228EF0BCC00B66C70 /* SelectValidatorsConfirmPoolViewModelFactory.swift */; }; 07D05E6928EF0F2700B66C70 /* PoolNominateCall.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D05E6828EF0F2700B66C70 /* PoolNominateCall.swift */; }; + 07D0BD3B2C6E2282001ECD58 /* TonConnectUrlHandling.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D0BD3A2C6E2282001ECD58 /* TonConnectUrlHandling.swift */; }; + 07D0BD3E2C6F0CA0001ECD58 /* DappBrowserFeaturedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D0BD3D2C6F0CA0001ECD58 /* DappBrowserFeaturedView.swift */; }; + 07D0BD412C6F0E9C001ECD58 /* BrowserExploreFeaturedCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D0BD402C6F0E9C001ECD58 /* BrowserExploreFeaturedCell.swift */; }; + 07D0BD432C6F179E001ECD58 /* DappBrowserListCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D0BD422C6F179E001ECD58 /* DappBrowserListCell.swift */; }; + 07D0BD452C6F191C001ECD58 /* DappBrowserSectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D0BD442C6F191C001ECD58 /* DappBrowserSectionHeaderView.swift */; }; + 07DCB8622CD363EF00A01C64 /* TonConstansts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07DCB8612CD363EF00A01C64 /* TonConstansts.swift */; }; 07DE95B528A1119400E9C2CB /* BalanceInfoRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07DE95AC28A1119400E9C2CB /* BalanceInfoRouter.swift */; }; 07DE95B628A1119400E9C2CB /* BalanceInfoAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07DE95AD28A1119400E9C2CB /* BalanceInfoAssembly.swift */; }; 07DE95B728A1119400E9C2CB /* BalanceInfoProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07DE95AE28A1119400E9C2CB /* BalanceInfoProtocols.swift */; }; @@ -179,6 +373,21 @@ 07DFA456289B78E20035A8AB /* CopyableLabelView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07DFA455289B78E10035A8AB /* CopyableLabelView.swift */; }; 07DFA45A289B8D520035A8AB /* WalletBalanceInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07DFA459289B8D520035A8AB /* WalletBalanceInfo.swift */; }; 07E346D4288E616E00A8FAEC /* WalletBalanceBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07E346D3288E616E00A8FAEC /* WalletBalanceBuilder.swift */; }; + 07EC555B2CD8A3600074132E /* MultiAssetV12.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = 07EC555A2CD8A3600074132E /* MultiAssetV12.xcmappingmodel */; }; + 07ECB7F32C69CF13000E0A14 /* TonConnectDessision.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB7F22C69CF13000E0A14 /* TonConnectDessision.swift */; }; + 07ECB7F52C69EDCE000E0A14 /* SessionStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB7F42C69EDCE000E0A14 /* SessionStatus.swift */; }; + 07ECB7F72C69F4A1000E0A14 /* TonDapp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB7F62C69F4A1000E0A14 /* TonDapp.swift */; }; + 07ECB7F92C69F62F000E0A14 /* CDTonDapp+CoreDataDecodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB7F82C69F62F000E0A14 /* CDTonDapp+CoreDataDecodable.swift */; }; + 07ECB7FB2C6A07AF000E0A14 /* TonConnectAppRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB7FA2C6A07AF000E0A14 /* TonConnectAppRequest.swift */; }; + 07ECB7FD2C6A07C1000E0A14 /* SendTransactionSignRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB7FC2C6A07C1000E0A14 /* SendTransactionSignRequest.swift */; }; + 07ECB7FF2C6A0BB2000E0A14 /* ConnectRequestVariant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB7FE2C6A0BB2000E0A14 /* ConnectRequestVariant.swift */; }; + 07ECB8012C6A0F9B000E0A14 /* TonConnectSendDessision.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB8002C6A0F9B000E0A14 /* TonConnectSendDessision.swift */; }; + 07ECB8032C6B4EA3000E0A14 /* TonConnectSessionCrypto.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB8022C6B4EA3000E0A14 /* TonConnectSessionCrypto.swift */; }; + 07ECB8052C6B71DE000E0A14 /* TonConnectApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB8042C6B71DE000E0A14 /* TonConnectApp.swift */; }; + 07ECB8072C6B7380000E0A14 /* CDTonConnectedApp+CoreDataDecodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB8062C6B7380000E0A14 /* CDTonConnectedApp+CoreDataDecodable.swift */; }; + 07ECB8092C6C6CDE000E0A14 /* TonConnectEventsCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB8082C6C6CDE000E0A14 /* TonConnectEventsCenter.swift */; }; + 07ECB80B2C6C6E76000E0A14 /* TonConnectError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB80A2C6C6E75000E0A14 /* TonConnectError.swift */; }; + 07ECB80D2C6C7411000E0A14 /* TonConnectEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB80C2C6C7410000E0A14 /* TonConnectEvent.swift */; }; 07ED2EB92C341A0100FF7500 /* NodeApiKeyInjector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ED2EB82C341A0100FF7500 /* NodeApiKeyInjector.swift */; }; 07F2B75728A3A4B800280C38 /* ChainCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07F2B75628A3A4B800280C38 /* ChainCollectionView.swift */; }; 07F2B75C28A6565500280C38 /* assets.json in Resources */ = {isa = PBXBuildFile; fileRef = 07F2B75A28A6533900280C38 /* assets.json */; }; @@ -195,7 +404,10 @@ 07FBC9E228BE24E900ED65B4 /* MissingAccountFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07FBC9E128BE24E900ED65B4 /* MissingAccountFetcher.swift */; }; 07FBC9E628BE29C900ED65B4 /* ChainIssuesCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07FBC9E528BE29C900ED65B4 /* ChainIssuesCenter.swift */; }; 07FD95C027F4384900F07064 /* UIFont+dynamicSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07FD95BF27F4384900F07064 /* UIFont+dynamicSize.swift */; }; - 092219D6B9BF321344D9679F /* MultichainAssetSelectionRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52E0A32C643A1304F29D40A1 /* MultichainAssetSelectionRouter.swift */; }; + 07FEC1342CAE624B003938C6 /* OnboardingMainViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07FEC1332CAE624B003938C6 /* OnboardingMainViewLayout.swift */; }; + 07FEC1362CAE6848003938C6 /* SelectEcosystemBannerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07FEC1352CAE6848003938C6 /* SelectEcosystemBannerView.swift */; }; + 084DDCBC4CE8438770EB48DE /* ConfirmTransferRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD1C635488F941373CDBE377 /* ConfirmTransferRouter.swift */; }; + 08C2974B3B5AAA757CE57E33 /* FeatureToggleListInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 769372B10E8D3C2BF7304FC3 /* FeatureToggleListInteractor.swift */; }; 093C10C88C0A209158EA75D1 /* UsernameSetupTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C5EF68BE0E29D2305CB7337 /* UsernameSetupTests.swift */; }; 0A4820F04EC9DA9DD515EC3A /* MainNftContainerRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C1CA1EF5BF1151E0DFB298C /* MainNftContainerRouter.swift */; }; 0AAFEFA17F249F4BEF051F6B /* ControllerAccountConfirmationPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54FB887490A8B33890B4E0E4 /* ControllerAccountConfirmationPresenter.swift */; }; @@ -204,6 +416,7 @@ 0B6D0B65AC659C6239B1C496 /* ClaimCrowdloanRewardsProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7219B81CEA13CD60BD8FAFE /* ClaimCrowdloanRewardsProtocols.swift */; }; 0BD66304BF73EBDFE1857380 /* WarningAlertPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BCAF4A12D0F22D3C9035A1A /* WarningAlertPresenter.swift */; }; 0BE766EBE26CC38D305BA69D /* ClaimCrowdloanRewardsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4774F00EDBB28F374797637 /* ClaimCrowdloanRewardsInteractor.swift */; }; + 0C154A425E0B8175F0A3FCC4 /* ConfirmTransferTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E29D11C365629B959F44DFA /* ConfirmTransferTests.swift */; }; 0C2AA829B5CB89B39E0FA95E /* CrowdloanContributionConfirmProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF01941105BCD02536538362 /* CrowdloanContributionConfirmProtocols.swift */; }; 0C4F3F7AB14F4851C12974B6 /* WarningAlertProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 446B4A7184327D64AE8F0610 /* WarningAlertProtocols.swift */; }; 0CA307BC2F570941CD22C9AA /* ExportMnemonicConfirmViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF4688AF0658F8BB7A90C2BE /* ExportMnemonicConfirmViewFactory.swift */; }; @@ -211,7 +424,6 @@ 0D05777212DFA8CFC5A692E3 /* WalletsManagmentViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2970944BE4B937A39E07C608 /* WalletsManagmentViewController.swift */; }; 0D6C27413F73190438306EC1 /* NetworkInfoInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8D61B74FE9C5199FD0AEBC /* NetworkInfoInteractor.swift */; }; 0D7DDA00BBF1D0CFD9A26306 /* LiquidityPoolSupplyProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FB7091F743BBACC09553298 /* LiquidityPoolSupplyProtocols.swift */; }; - 0DAA7B1B7DF576C761DEF046 /* WalletSendConfirmWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A22A2EB487E282DCA93C676 /* WalletSendConfirmWireframe.swift */; }; 0DAEDA34F5BCECE5BD64DF26 /* WalletTransactionHistoryWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B3B14C046584AAAF483715F /* WalletTransactionHistoryWireframe.swift */; }; 0E30EB59B860DE611FF0DC7D /* NftCollectionRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92E3687D398A32597A888B82 /* NftCollectionRouter.swift */; }; 0E6C2939AFB3D125C760D5A0 /* CrowdloanContributionSetupProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7484BA696561262926D87FE5 /* CrowdloanContributionSetupProtocols.swift */; }; @@ -223,10 +435,10 @@ 1062C095BC566A1EA8DE1C06 /* CrowdloanContributionSetupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C71DEF78B69F017DF460AB7 /* CrowdloanContributionSetupViewController.swift */; }; 10B4951F5E0C515EFBDBC32E /* StakingPoolCreateConfirmPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3837CE5CB2D48D8A694A7EE0 /* StakingPoolCreateConfirmPresenter.swift */; }; 10DEF797CB3DC5BF0903EC4C /* LiquidityPoolRemoveLiquidityConfirmViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3459F610D6E5C782D8695A9 /* LiquidityPoolRemoveLiquidityConfirmViewLayout.swift */; }; - 11FDC274784B05B690368C07 /* AccountStatisticsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB86E65E22C0AF7EDD0701A4 /* AccountStatisticsPresenter.swift */; }; 134AFD616BE52A1AE290EEF7 /* StakingBalanceFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = C67ACC943DA07FC529AE69B4 /* StakingBalanceFlow.swift */; }; 135CEEC5363BE34130958578 /* ControllerAccountConfirmationInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B8473AA386E1AD6F0F0C964 /* ControllerAccountConfirmationInteractor.swift */; }; 1496E87A7652C7D230A9BB46 /* AssetNetworksRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36A3D64FF58C40E5CC6A6E89 /* AssetNetworksRouter.swift */; }; + 152915F53A2C88A15B2BA725 /* TonWebBridgeAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D47F5B181BB5778DDEF1125 /* TonWebBridgeAssembly.swift */; }; 152AC909C26E809ACCA55B35 /* CreateContactInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D482753E0D75C5F5E0617998 /* CreateContactInteractor.swift */; }; 1550A6E8789263C0D734091A /* StakingUnbondSetupWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC5083A5751A1A3CC95F4F6F /* StakingUnbondSetupWireframe.swift */; }; 159A8702C30A21988AD76805 /* StakingPoolCreateConfirmAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 408D33DEE675B00ED511517A /* StakingPoolCreateConfirmAssembly.swift */; }; @@ -236,21 +448,24 @@ 180B223378B806EB6C0DC7F0 /* SelectedValidatorListFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0033D320A9033F5200279087 /* SelectedValidatorListFlow.swift */; }; 1870655BC8B762AA57717EC6 /* PolkaswapTransaktionSettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F04623D6CE10669D914CA2F /* PolkaswapTransaktionSettingsViewController.swift */; }; 19A29027666EB5388CBFAD61 /* StakingRewardDetailsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D613E20E96E7BA5B8F4B9799 /* StakingRewardDetailsInteractor.swift */; }; + 19C7939FFE0178C1A7E68631 /* TransferPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0524F9F46A9D77159B2B14FE /* TransferPresenter.swift */; }; 1A2A55DCA9403CCE2A98E93E /* WalletTransactionDetailsViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1211B723BB656770C4EA5BC2 /* WalletTransactionDetailsViewFactory.swift */; }; + 1A6E37652003721AB5044812 /* DappBrowserListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 490FDCAC66E3A0C80F501A5F /* DappBrowserListViewController.swift */; }; 1BC06B323C5E5DE1B5A62CB4 /* PolkaswapTransaktionSettingsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD730FFB75B5D76EA939042D /* PolkaswapTransaktionSettingsInteractor.swift */; }; 1BEADE77C6236CB3BF719A47 /* CrowdloanContributionSetupViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C96E41F878ED0A0A6F469D3 /* CrowdloanContributionSetupViewFactory.swift */; }; 1BFC90E1D8646F7429FFD5E6 /* ExportMnemonicProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF3AD755B2B3DCFB3D14DF91 /* ExportMnemonicProtocols.swift */; }; 1CBFE5F285223EA5D5300C49 /* WalletMainContainerProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8312AF0B70350EE27DB5B4A /* WalletMainContainerProtocols.swift */; }; 1DE31955634007BAC3B63158 /* ChainAccountTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AEA7ECB8434DF494D2B25B9 /* ChainAccountTests.swift */; }; + 1E4DCD7DF7A101622D4145A4 /* EcosystemOptionsProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51A2CC33FFE5CFA1CCCC64BB /* EcosystemOptionsProtocols.swift */; }; 1E59CE2953F8835954A4E5A7 /* LiquidityPoolsOverviewPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BA8DC8007FC0A322C6DF00E /* LiquidityPoolsOverviewPresenter.swift */; }; 1E766A1656C2117F3F64769A /* NetworkManagementTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FFEB823BE0057CFB78CC033 /* NetworkManagementTests.swift */; }; 1EF031DB5316E1D180089C7B /* PolkaswapAdjustmentInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F9F3C33EF043B3EA5FFBC45 /* PolkaswapAdjustmentInteractor.swift */; }; 1F6A32CBF7B43390AF412B1A /* NodeSelectionWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80809FE46E7B8EBDE3680706 /* NodeSelectionWireframe.swift */; }; 1F85759D01F2419CD938D33F /* AccountExportPasswordTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B93A1BA7DFEE1D7728B84949 /* AccountExportPasswordTests.swift */; }; 1F88F3DBFA0BD6D0FDF558F3 /* SelectValidatorsConfirmViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 975DECE71DE70DFD866B8E23 /* SelectValidatorsConfirmViewFactory.swift */; }; - 1FBA501F4EC1A9AAD5736D56 /* MultichainAssetSelectionInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94C59B15363623B38F70E54E /* MultichainAssetSelectionInteractor.swift */; }; 20B2942A4241F6713A1C70D9 /* StakingRewardDetailsViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2377F8FB07B47637346249F5 /* StakingRewardDetailsViewFactory.swift */; }; 20F28EF4AD17FC56A5A6697B /* NftSendPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C62522E202A1C5EE60D25122 /* NftSendPresenter.swift */; }; + 21F6235E4B4AB0DDA0849DF5 /* ConnectedAccountsViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9B71CD26CEE6C228B8AE392 /* ConnectedAccountsViewLayout.swift */; }; 225493AF467A54A56F74FFF5 /* LiquidityPoolsOverviewProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = A692D227372B24F922EFA058 /* LiquidityPoolsOverviewProtocols.swift */; }; 23398AEC756086FEEEE91E65 /* WalletsManagmentRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B55A4C7E8BD87A7C8634ADD /* WalletsManagmentRouter.swift */; }; 237AD34CD1C2778834D7B330 /* AnalyticsValidatorsViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6F8BBBA9EABA266B288333F /* AnalyticsValidatorsViewFactory.swift */; }; @@ -262,6 +477,7 @@ 257AF452E202DC6B8A576559 /* StakingPoolCreateConfirmViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5555FA26DF1BD5483F7544B5 /* StakingPoolCreateConfirmViewLayout.swift */; }; 25A837D8E6138EDAFA9240CD /* WalletsManagmentViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0960D0A04ACDF443B5C5E185 /* WalletsManagmentViewLayout.swift */; }; 2624D8CEBB61A185A5E8B994 /* AccountExportPasswordViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6DE4840EBB9892A5E35FB443 /* AccountExportPasswordViewController.xib */; }; + 26F0F2A52C7EFD38CBC2F1C3 /* ConfirmTransferAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BD8F497D1380B608E046658 /* ConfirmTransferAssembly.swift */; }; 270C21973CB61F0BF3D2D1E3 /* CrowdloanListProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02ACCC85B2CCF3D9392CA9B4 /* CrowdloanListProtocols.swift */; }; 272C9E2101FEE14CE4A79249 /* ChainAccountBalanceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61BE50276590067C81F4761F /* ChainAccountBalanceTests.swift */; }; 278F5341DC043EBED7C0733D /* CrowdloanListViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = E70C8A9C6BF8AE46CAE1CB61 /* CrowdloanListViewFactory.swift */; }; @@ -280,29 +496,35 @@ 2AD0A19525D3D3EC00312428 /* GitHubOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AD0A19425D3D3EC00312428 /* GitHubOperationFactory.swift */; }; 2B0FC94B4AE9AFE9532F493F /* ReferralCrowdloanViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71285CF636B32ACD8EB5519E /* ReferralCrowdloanViewFactory.swift */; }; 2B99F241DC91645B1226E10C /* WarningAlertWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 639AD37D87BD08106E7E6E2A /* WarningAlertWireframe.swift */; }; - 2BBE065C2A5C31B830DE0957 /* AccountStatisticsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C85B1F841C281165D7AACB1 /* AccountStatisticsViewController.swift */; }; 2C3124A5EBC1AD57C01EEA17 /* SelectValidatorsStartInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEFED3DAA18BCEF0BFA15728 /* SelectValidatorsStartInteractor.swift */; }; 2CF2F93AF862CF54FC46B560 /* PurchaseInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91D44421CCD7AD220A05CD0E /* PurchaseInteractor.swift */; }; 2CFEBF8B7B9C820D1A80B60B /* StakingPoolCreateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A6A52B8A4D734D5BCADE355 /* StakingPoolCreateTests.swift */; }; + 2DEDA5E3970B445CBBE2F1D1 /* TransferAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = A90D38E873CA7EBD23FC14B5 /* TransferAssembly.swift */; }; 2E57C70427E8AB3D00AF075A /* CrowdloanWikiTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E57C70327E8AB3D00AF075A /* CrowdloanWikiTableViewCell.swift */; }; 2E57C70B27E9EC0F00AF075A /* ProfileViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E57C70A27E9EC0E00AF075A /* ProfileViewState.swift */; }; 2E57C70D27E9ED5400AF075A /* ProfileViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E57C70C27E9ED5300AF075A /* ProfileViewModel.swift */; }; 2E57C70F27EA169000AF075A /* ProfileViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E57C70E27EA169000AF075A /* ProfileViewLayout.swift */; }; 2ED5B5FFD880BA1905051E89 /* StakingUnbondSetupFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD8B6213B00597B3F56F650D /* StakingUnbondSetupFlow.swift */; }; 2FCB062A2D873BD72B795DB3 /* AssetSelectionPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7A0A5EE9BE2862B085712A0 /* AssetSelectionPresenter.swift */; }; + 2FF5B2DEC92C9801F00B9485 /* ConnectedAccountsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D21069CCE65307334B89FD09 /* ConnectedAccountsPresenter.swift */; }; 306E249AD210DFAA8C03D435 /* AllDonePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6A654294D46A966EE99764F /* AllDonePresenter.swift */; }; 30C7FD6C58F1ED50AFB456FD /* LiquidityPoolRemoveLiquidityAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = C61BE0DFC48282DFDBB820C9 /* LiquidityPoolRemoveLiquidityAssembly.swift */; }; 3133215566E418F40844A60E /* ExportMnemonicWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ACA4A5B186EE6D40BFE9D66 /* ExportMnemonicWireframe.swift */; }; + 3152634A9E3FBF5E463CF56E /* ConfirmTransferViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20FAD50119EE0DBA135AC9A7 /* ConfirmTransferViewController.swift */; }; 31E260D462BF33CFCDFEBA6C /* AnalyticsRewardDetailsProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE294DDEAB7902D7CE1F1BA1 /* AnalyticsRewardDetailsProtocols.swift */; }; 3229E306230161AA99B14BDD /* StakingRewardPayoutsViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 336395FFC4B2104A9651A2DE /* StakingRewardPayoutsViewFactory.swift */; }; 3245549CB47E65B28A2C01CD /* WalletOptionInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326260E461C031624CDB62BA /* WalletOptionInteractor.swift */; }; 3250F2C0E12ED42A355853BE /* SelectValidatorsStartProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = EED9939B17C4224C8E153F8A /* SelectValidatorsStartProtocols.swift */; }; + 32BB821E16F9BF88523A6047 /* DappBrowserViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = F684B043895B80CAD70A59CF /* DappBrowserViewLayout.swift */; }; + 331DD15DB978230C3D22E865 /* EcosystemOptionsRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF89A85366996FE0E1053FC /* EcosystemOptionsRouter.swift */; }; 3336F04749ADC27C81BA9464 /* ContactsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82CBCBA8BF2D753248238555 /* ContactsViewController.swift */; }; 33D23A4A92AF90C385568462 /* ChainSelectionProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDDA0B079962E00FAFBE07AD /* ChainSelectionProtocols.swift */; }; 33D41E7EAA441A589449CD4E /* StakingUnbondConfirmTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C52E93D987DC64991F58508 /* StakingUnbondConfirmTests.swift */; }; 340AC2484415B10F247C135E /* AnalyticsValidatorsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7320E1CD9EA1A33EA29D0700 /* AnalyticsValidatorsPresenter.swift */; }; + 3495B757A7C05ECFE3842D2D /* EcosystemOptionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5744A4699B3930EB459972BD /* EcosystemOptionsViewController.swift */; }; 357946E87E1F8D0563286D0F /* PolkaswapTransaktionSettingsViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F7C84A88D3405B38B0E8134 /* PolkaswapTransaktionSettingsViewLayout.swift */; }; 36139329003D9269E8D5C11C /* StakingMainTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E11C7AF9A8DEC07246D5626 /* StakingMainTests.swift */; }; + 36909529AF4B97AE71AD4C24 /* TonWebBridgePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BD26C200A700CCA34980B61 /* TonWebBridgePresenter.swift */; }; 3761C36C5BAFFB1518CD93A0 /* FiltersProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8C34B051607218638BA851 /* FiltersProtocols.swift */; }; 37AE170856990F9FBEF052FC /* AllDoneAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 262F98DEF54FA9592BE22B94 /* AllDoneAssembly.swift */; }; 37E1E9782B9752BC50AF2476 /* YourValidatorListViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BE8644A4F6DED808248A0FE /* YourValidatorListViewFactory.swift */; }; @@ -314,6 +536,7 @@ 3B0F51B1D1590FAAE73CD36C /* SwapTransactionDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32FDB8843EB793C85B222FDB /* SwapTransactionDetailViewController.swift */; }; 3B9314DE6AFC01CA7EF0DAAA /* SelectValidatorsConfirmFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 364C90F7AD36FD6F6E690D7D /* SelectValidatorsConfirmFlow.swift */; }; 3CA86739CB09801714B194BD /* PurchaseWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C52C6CD7112BF0E1E3A98CE /* PurchaseWireframe.swift */; }; + 3CDF2323ABDADEBC32F2AE4B /* DappBrowserListViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F28F73B0BC6C4EEBCC5B546 /* DappBrowserListViewLayout.swift */; }; 3D1FB0EF87D42F08D9250552 /* PurchasePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56FF8DBE5C32EE4C68ECD623 /* PurchasePresenter.swift */; }; 3DCDF9784283313336CC0505 /* NftSendConfirmPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE826F356F6D72EACFB0AE31 /* NftSendConfirmPresenter.swift */; }; 3DF50E6F78F1B1052625BA7D /* ChainSelectionPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2222D628B9EA092D1C6B1CAE /* ChainSelectionPresenter.swift */; }; @@ -333,6 +556,7 @@ 41B29C1C9239BB2DCB7903A7 /* SelectValidatorsStartViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4C391292F22D16427C77CD9 /* SelectValidatorsStartViewFactory.swift */; }; 42B79A8D0D9540C1D97D991C /* AccountConfirmWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 599FEDBD7E8B665F1A93BA70 /* AccountConfirmWireframe.swift */; }; 436D8B9651C88360A6D72E90 /* ChainSelectionWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = C829A981119FEA0EAE4E96E9 /* ChainSelectionWireframe.swift */; }; + 438F38672873F0B8BA950489 /* DappBrowserAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32F4A2C14730740C6D319C5A /* DappBrowserAssembly.swift */; }; 4448B591D4A193DBC9E2E3BF /* AccountCreateInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A7B39A61DB0D2F0F1B1DBA1 /* AccountCreateInteractor.swift */; }; 445F1F1FB3ECC47D8DD2FBEA /* NetworkIssuesNotificationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40728E7BBC553AFA8FF4142B /* NetworkIssuesNotificationViewController.swift */; }; 4470194B729475D683584A6C /* WalletTransactionHistoryInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 375E9A7A1206E366E862D81D /* WalletTransactionHistoryInteractor.swift */; }; @@ -345,12 +569,10 @@ 48A787921C2B3E9F22722154 /* ControllerAccountConfirmationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 025F392269B990931ADBE8F6 /* ControllerAccountConfirmationTests.swift */; }; 48E7D7072820F66F286A0B9D /* StakingMainViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 55CC5A63AC07644409E997C1 /* StakingMainViewController.xib */; }; 496AC83B6434378501B657E0 /* StakingPoolCreateViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = D733A49D80BA2BF400AF23A6 /* StakingPoolCreateViewLayout.swift */; }; - 49F6A6C2A56A3DE9D456FE7D /* MultichainAssetSelectionViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0484D190E85F4EFAF5EC33EE /* MultichainAssetSelectionViewLayout.swift */; }; 4A520B7081BE2D7604B69354 /* AccountImportWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85F45A5C6145F863760F4409 /* AccountImportWireframe.swift */; }; 4A63ECA587C601999AAEB974 /* StakingPoolCreateProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49EBB77A32A59568B0DACFE5 /* StakingPoolCreateProtocols.swift */; }; 4A957B3BAC231B70CBC00EC3 /* LiquidityPoolsOverviewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD8B69E9E18C11EAEC9284B3 /* LiquidityPoolsOverviewViewController.swift */; }; 4C7AC4E214171478AC98A898 /* StakingRewardDestConfirmTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9403C5F9C88A4690C62A204B /* StakingRewardDestConfirmTests.swift */; }; - 4D44ACFB841F7CE18CE98559 /* MultichainAssetSelectionAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9596692C164228636164C830 /* MultichainAssetSelectionAssembly.swift */; }; 4D822D169784790EBF173EEE /* WalletMainContainerPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D738FE711DD760B47C0BA65 /* WalletMainContainerPresenter.swift */; }; 4E5CD7B8821FA5298EA1598E /* CrowdloanContributionSetupWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3574BADE9CF77599048C7010 /* CrowdloanContributionSetupWireframe.swift */; }; 4F12420C17B321F52D694E92 /* AddCustomNodeInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 900E67A76C0702F8123EBB47 /* AddCustomNodeInteractor.swift */; }; @@ -361,16 +583,18 @@ 503DFF0EFCAD0A8B526FEC3A /* SelectMarketViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 320E2207FB549F7C31A80441 /* SelectMarketViewController.swift */; }; 506F0D372BCC8302E513637C /* CrowdloanContributionConfirmWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA59CE2C7AE548ACA9D66FD7 /* CrowdloanContributionConfirmWireframe.swift */; }; 50758C9BBB27AE5732FF78BA /* StakingRewardPayoutsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFEBC03AB1841681427D38AF /* StakingRewardPayoutsViewController.swift */; }; + 5106A2E8BB43AF62D2BBF286 /* DappBrowserProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFC41ED0064460B3048E7D14 /* DappBrowserProtocols.swift */; }; 5142E2C6609188D529BB558A /* LiquidityPoolRemoveLiquidityConfirmProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 882D47A501D9D6CCE7B99691 /* LiquidityPoolRemoveLiquidityConfirmProtocols.swift */; }; 51876200A6B1EDC54609DF46 /* LiquidityPoolRemoveLiquidityProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D49CA5CB156C1EA38BEBE00 /* LiquidityPoolRemoveLiquidityProtocols.swift */; }; 51FC48FA6FD4D2FB1781424D /* ReferralCrowdloanWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D51D60F19284936A6E9F47D /* ReferralCrowdloanWireframe.swift */; }; 525CCCA7CFD7BE570AD0FCCA /* WalletOptionProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73078ED3B2642FEAF348DB2A /* WalletOptionProtocols.swift */; }; - 52AEA30073F8CB856B692757 /* AccountStatisticsViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7743EA304BC53649D0473225 /* AccountStatisticsViewLayout.swift */; }; + 528DD3FD73C2C6152E632A00 /* ConnectedAccountsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2445A50C4FDB87374486CDDA /* ConnectedAccountsInteractor.swift */; }; + 52F16C3E24F3982384B1082E /* DappBrowserListRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF0C991DB1C7567632BB54A9 /* DappBrowserListRouter.swift */; }; 539340533D8383965751C6D8 /* NodeSelectionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B0CF2F98779D3C18D0C0A29 /* NodeSelectionTests.swift */; }; 53DA09F488806FFE86C841AA /* SelectMarketInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB837A15BAAED64BC32F3F44 /* SelectMarketInteractor.swift */; }; - 54A3B34605E787B47741ED1A /* Pods_fearlessAll_fearlessIntegrationTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C323602A21644DCB1B2EEFF6 /* Pods_fearlessAll_fearlessIntegrationTests.framework */; }; 54C8E20A8D7DD92AC92B8041 /* SelectMarketProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD0EAB8749661CB4428685FB /* SelectMarketProtocols.swift */; }; 5712A48A0C8AEFD9355FD9DA /* WarningAlertInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04361405728BBC71AD2D014F /* WarningAlertInteractor.swift */; }; + 57376A74C6310F1FA52FA28C /* TonWebBridgeRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 381BD34B5A6E2B1625B2C24C /* TonWebBridgeRouter.swift */; }; 57E20F0723C4748D576C4882 /* StakingUnbondSetupViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = A82E373FFFBF708D7CF0973E /* StakingUnbondSetupViewFactory.swift */; }; 5869563D0EA593FBD02C169C /* StakingPayoutConfirmationProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52F8D055D0481469073AA859 /* StakingPayoutConfirmationProtocols.swift */; }; 5888936B3D13D92F1534E08B /* CrowdloanListViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63F4BE52D0625CD8C21D2460 /* CrowdloanListViewLayout.swift */; }; @@ -380,13 +604,15 @@ 5980BDE494C9E473E5959C71 /* NftCollectionProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD845193EDFC3A1D0BC73719 /* NftCollectionProtocols.swift */; }; 59838EECC194BB0E6E0AEAA2 /* PolkaswapAdjustmentPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D683E7DE3533CA418BD21 /* PolkaswapAdjustmentPresenter.swift */; }; 5A7D43CA17B84C71E8EEF256 /* LiquidityPoolRemoveLiquidityPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B3E9CA265E5C0F3E83429CE /* LiquidityPoolRemoveLiquidityPresenter.swift */; }; + 5A8C0ED62A840E8E0B56E85C /* FeatureToggleListProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE7B9BC51F6B13337450E3DC /* FeatureToggleListProtocols.swift */; }; + 5A8DA5F75BC11EC27A0BC63D /* Pods_fearlessAll_fearlessIntegrationTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD693FC7740866321DA11AC1 /* Pods_fearlessAll_fearlessIntegrationTests.framework */; }; 5C796EF8ED29F564B5D1126B /* CrowdloanContributionConfirmViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F75722D2F921FD1C2D4105D /* CrowdloanContributionConfirmViewController.swift */; }; 5D0665A581B9F8DFDBD0CF7B /* WalletChainAccountDashboardWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 885A9E2D3619FEFC5ED0C093 /* WalletChainAccountDashboardWireframe.swift */; }; 5DDD2206DF795CF205610455 /* AccountExportPasswordPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31226053044986BC828AA912 /* AccountExportPasswordPresenter.swift */; }; 5E8504507116E0177D70314B /* LiquidityPoolSupplyViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 438E01C5C877428168E9F3F8 /* LiquidityPoolSupplyViewLayout.swift */; }; 5E9402965D385607E04156DC /* NftDetailsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32DEDC1A0ED429DD43EC621E /* NftDetailsPresenter.swift */; }; - 5E974C26655D3E64AD6A923D /* AccountStatisticsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0542BF70B1BADBF1459D57FB /* AccountStatisticsInteractor.swift */; }; 5F5825D27863628412B672CA /* NftSendConfirmRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803E71983CD61FFBFE98DA7A /* NftSendConfirmRouter.swift */; }; + 604162EC2B721993E397E6B0 /* ConfirmTransferPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DD32F4D6D8DABF991E09C7C /* ConfirmTransferPresenter.swift */; }; 607699C7CEEDA3598613DCA0 /* NetworkInfoViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EDA19BC3280F1838C687EC8 /* NetworkInfoViewFactory.swift */; }; 60C22E112CA857A2EA5A129E /* LiquidityPoolsOverviewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC76E7D99A98423180BC572F /* LiquidityPoolsOverviewTests.swift */; }; 61B5A91FBEF633FCC8D965B6 /* LiquidityPoolsOverviewAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC863A9CE29C63B740C6E4D9 /* LiquidityPoolsOverviewAssembly.swift */; }; @@ -397,8 +623,8 @@ 64B7826F78B8AE649B1EF08F /* CrowdloanContributionSetupTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C01DCD4DA014E8FB50B9F11 /* CrowdloanContributionSetupTests.swift */; }; 65909D701527D99837B439D9 /* StakingRewardDetailsWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 638A65DAC86BAF9EB4D2F2F8 /* StakingRewardDetailsWireframe.swift */; }; 65E0BC7A96EDE5E52D32A11B /* AllDoneViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61A5A7C701EF966BF48D6B9E /* AllDoneViewController.swift */; }; + 6666BE6CC1E1A468385C4CCF /* EcosystemOptionsViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2DB48A2C904672E63D78D4D /* EcosystemOptionsViewLayout.swift */; }; 66AECEC6A6EB8184114B041E /* LiquidityPoolSupplyRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6503D178156C6407EC848D41 /* LiquidityPoolSupplyRouter.swift */; }; - 68477096FFF2FE210D9C94B3 /* MultichainAssetSelectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66D18E89F0DB92133A96EDF9 /* MultichainAssetSelectionViewController.swift */; }; 69DE177B9D1745FEE848E870 /* WalletTransactionDetailsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B37BB3FF5CDF7EA9D7371B7 /* WalletTransactionDetailsInteractor.swift */; }; 69EF1DC4093AC9AF06D71CF4 /* AnalyticsRewardDetailsViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29100320799A2B46836A257B /* AnalyticsRewardDetailsViewFactory.swift */; }; 6A16194632D42862692CC067 /* PolkaswapSwapConfirmationInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9B5FD28F2B9A0B0D8ED3607 /* PolkaswapSwapConfirmationInteractor.swift */; }; @@ -424,8 +650,11 @@ 6FAC7E8F0DACB3F2AA0BE825 /* LiquidityPoolSupplyConfirmProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCCD9A6B753FD1510D3DD311 /* LiquidityPoolSupplyConfirmProtocols.swift */; }; 705F5EEDD70D6941D138D3F9 /* ContactsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E4DF941DE0EDEF99A843A9D /* ContactsInteractor.swift */; }; 709ABA5647D7DFF36EBCE73E /* WarningAlertViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4B7FA75791904AF541BE380 /* WarningAlertViewFactory.swift */; }; + 709EF639857F35CA2EF69D06 /* TransferViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E8E30C194FD07DC9ECCBE74 /* TransferViewController.swift */; }; 70EAB410A0106F22C2183847 /* StakingUnbondSetupTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61E1CD099F7C30ABE0E8A001 /* StakingUnbondSetupTests.swift */; }; 719B429B58B9A0551381F92F /* FiltersViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECBF10B7D4707E4D7D6387CF /* FiltersViewFactory.swift */; }; + 71DE4946BC2CE1DE0300BC16 /* DappBrowserListAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BD242D3369DD517695F330A /* DappBrowserListAssembly.swift */; }; + 720633807C7746A254866395 /* TonWebBridgeInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 014B8F922BD4E7BFB8D1483D /* TonWebBridgeInteractor.swift */; }; 7258EEAE786D51F57ECE1E4F /* NodeSelectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 605CA30BCCB5F23C64E6D6EC /* NodeSelectionViewController.swift */; }; 7365B203D7F32028225366E5 /* ControllerAccountTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 850E0DBBF0EC8422AEBF2189 /* ControllerAccountTests.swift */; }; 737F71CCDF39E7A400EBB7C0 /* NetworkIssuesNotificationViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 169ADB0FB6C83C9CEED2F780 /* NetworkIssuesNotificationViewLayout.swift */; }; @@ -439,13 +668,17 @@ 762BB1AC2F45142B6319B59F /* NftSendProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = F55184167D22A33EF7FF77AE /* NftSendProtocols.swift */; }; 76C5FD0685615E602696B23D /* SelectValidatorsConfirmTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28EF0F9F97C89137F642016E /* SelectValidatorsConfirmTests.swift */; }; 76F74188F16A370D79033A12 /* AnalyticsRewardDetailsWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB5E8FAB4C12D7BFEEF576AD /* AnalyticsRewardDetailsWireframe.swift */; }; + 773CBBDAE8BFB7764C20A675 /* ConnectedAccountsProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6ED240B5595B623CE5E0941C /* ConnectedAccountsProtocols.swift */; }; 775C4C720600DAE242C67192 /* WalletSendConfirmViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A4416B96A9DD5FB5EEA086E /* WalletSendConfirmViewLayout.swift */; }; 78314B269F1CF1A499DE5CCB /* StakingBondMoreFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 784D20E16EEE55C2CF7B319B /* StakingBondMoreFlow.swift */; }; 78627BC990DE9C037CE69BB0 /* CreateContactAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84D73E43CA6C635583970107 /* CreateContactAssembly.swift */; }; + 78BCB91F4434229B18C1E524 /* Pods_fearlessAll_fearless.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 120EE82BCC6A905D5590BD45 /* Pods_fearlessAll_fearless.framework */; }; 78D94A761EFECED60F38232D /* CustomValidatorListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 270B309EC85D8897A4ADD98A /* CustomValidatorListViewController.swift */; }; 78E3117D66E60D72F2501F09 /* NftSendConfirmViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86182A9129A59C6753C4D465 /* NftSendConfirmViewLayout.swift */; }; 794029A3A00B085D6CFE3FF1 /* StakingUnbondConfirmFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40B10454C90325D80CCBEC60 /* StakingUnbondConfirmFlow.swift */; }; 79BB283470BB561FA646A235 /* WalletTransactionDetailsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB67BB02A5FD525C8ACA5521 /* WalletTransactionDetailsTests.swift */; }; + 79E0E33666B1D9AFD62A1CD8 /* Pods_fearlessTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 45889B3DF6A7C6505FFD97AE /* Pods_fearlessTests.framework */; }; + 7AB0A0585C89ED136B07A995 /* TransferInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8647FEB1772B20938D9E8D63 /* TransferInteractor.swift */; }; 7B7B34D621DC2FE76E0F5DB4 /* NetworkIssuesNotificationRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3211D250E4167C916B8B9D6A /* NetworkIssuesNotificationRouter.swift */; }; 7BC6FB48B9B4EC790923FF1E /* StakingPoolCreateRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6897929D244B5C29E3FD0727 /* StakingPoolCreateRouter.swift */; }; 7BEEF481CD12F404AD746FB5 /* WalletChainAccountDashboardViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5408FF305E4A49A683BC43E0 /* WalletChainAccountDashboardViewLayout.swift */; }; @@ -459,6 +692,7 @@ 7E3FB57A93AFAE39CF3030C8 /* ClaimCrowdloanRewardsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CCB1AFB751075497345C3E7 /* ClaimCrowdloanRewardsViewController.swift */; }; 7FC8C78DD68304B05B501F83 /* NodeSelectionProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63CCCC63389A70294F816143 /* NodeSelectionProtocols.swift */; }; 800FCAF66DC8A24020D16A9C /* AccountExportPasswordInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 194C9BFEE9BA8C9E448D79AA /* AccountExportPasswordInteractor.swift */; }; + 8095003039EDD1072601BAA7 /* DappBrowserPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 339C0DAFDB2C99655C2D64E4 /* DappBrowserPresenter.swift */; }; 80970FC53F7701A7898F3E84 /* WalletScanQRTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47E3A9998DBB9F1FC4A1FB0A /* WalletScanQRTests.swift */; }; 82379C63F216F4B4B7832A71 /* StakingPoolCreatePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADD19595322BF8FEC0F1F746 /* StakingPoolCreatePresenter.swift */; }; 82663A49E28CF2504BEAFB01 /* AssetNetworksViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9DE46BBDFD90D42835CA6B9 /* AssetNetworksViewController.swift */; }; @@ -493,6 +727,7 @@ 840BF22526C2653100E3A955 /* ChainSyncServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 840BF22426C2653100E3A955 /* ChainSyncServiceTests.swift */; }; 840BF22726C2C8A600E3A955 /* ChainSyncEvents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 840BF22626C2C8A600E3A955 /* ChainSyncEvents.swift */; }; 840C71B826821C0600B6D9C2 /* StakingRebondMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 840C71B726821C0600B6D9C2 /* StakingRebondMock.swift */; }; + 840C71BA26821D2000B6D9C2 /* StakingRedeemMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 840C71B926821D2000B6D9C2 /* StakingRedeemMock.swift */; }; 840DCBF125DFEE4800D45C6A /* AmountInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 840DCBF025DFEE4800D45C6A /* AmountInputView.swift */; }; 840DCBF625E0059D00D45C6A /* AmountInputView+Inspectable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 840DCBF525E0059D00D45C6A /* AmountInputView+Inspectable.swift */; }; 840DCBFB25E0703A00D45C6A /* RewardSelectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 840DCBFA25E0703A00D45C6A /* RewardSelectionView.swift */; }; @@ -512,8 +747,6 @@ 841937872544772F00CFA50C /* animatedBg.gif in Resources */ = {isa = PBXBuildFile; fileRef = 841937862544772F00CFA50C /* animatedBg.gif */; }; 841AAC2126F6860B00F0A25E /* AssetBalanceFormatterFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841AAC2026F6860B00F0A25E /* AssetBalanceFormatterFactory.swift */; }; 841AAC2326F6879900F0A25E /* AssetBalanceDisplayInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841AAC2226F6879900F0A25E /* AssetBalanceDisplayInfo.swift */; }; - 841AAC2526F692EF00F0A25E /* AddressConversion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841AAC2426F692EF00F0A25E /* AddressConversion.swift */; }; - 841AAC2726F6A2A500F0A25E /* ChainAccountFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841AAC2626F6A2A500F0A25E /* ChainAccountFetching.swift */; }; 841AAC2D26F7315300F0A25E /* CrowdloanRemoteSubscriptionService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841AAC2C26F7315300F0A25E /* CrowdloanRemoteSubscriptionService.swift */; }; 841AAC2F26F73E0C00F0A25E /* LocalStorageKeyFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841AAC2E26F73E0C00F0A25E /* LocalStorageKeyFactory.swift */; }; 841B45292603D91800C08693 /* EraValidatorsServiceStub.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841B45282603D91800C08693 /* EraValidatorsServiceStub.swift */; }; @@ -697,8 +930,6 @@ 84585A31251C0B9300390F7A /* NetworkInfoMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84585A30251C0B9300390F7A /* NetworkInfoMode.swift */; }; 845B821526EF657700D25C72 /* PersistentValueSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845B821426EF657700D25C72 /* PersistentValueSettings.swift */; }; 845B821726EF7FED00D25C72 /* SelectedWalletSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845B821626EF7FED00D25C72 /* SelectedWalletSettings.swift */; }; - 845B821926EF808D00D25C72 /* MetaAccountMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845B821826EF808D00D25C72 /* MetaAccountMapper.swift */; }; - 845B821B26EF80BC00D25C72 /* MetaAccountModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845B821A26EF80BC00D25C72 /* MetaAccountModel.swift */; }; 845B821D26EF80DB00D25C72 /* ChainAccountModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845B821C26EF80DB00D25C72 /* ChainAccountModel.swift */; }; 845B821F26EF8E8900D25C72 /* ManagedMetaAccountModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845B821E26EF8E8900D25C72 /* ManagedMetaAccountModel.swift */; }; 845B822126EF8F1A00D25C72 /* ManagedMetaAccountMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845B822026EF8F1A00D25C72 /* ManagedMetaAccountMapper.swift */; }; @@ -814,7 +1045,6 @@ 847119D5262EF95A00716580 /* PayoutInfoFactoryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 847119D4262EF95A00716580 /* PayoutInfoFactoryProtocol.swift */; }; 847119EB262EFF3800716580 /* ValidatorPayoutInfoFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 847119EA262EFF3800716580 /* ValidatorPayoutInfoFactory.swift */; }; 8471538D2653B29100CB91D8 /* ChangeRewardDestinationViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8471538C2653B29100CB91D8 /* ChangeRewardDestinationViewModelFactory.swift */; }; - 84729741260A9C13009B86D0 /* DisplayAddress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84729740260A9C13009B86D0 /* DisplayAddress.swift */; }; 8472974D260A9CDF009B86D0 /* SelectValidatorsConfirmationModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8472974C260A9CDF009B86D0 /* SelectValidatorsConfirmationModel.swift */; }; 84729758260AA519009B86D0 /* SelectValidatorsConfirmInteractorBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84729757260AA519009B86D0 /* SelectValidatorsConfirmInteractorBase.swift */; }; 8472975D260B1B71009B86D0 /* ExistingBonding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8472975C260B1B71009B86D0 /* ExistingBonding.swift */; }; @@ -1214,6 +1444,7 @@ 84F5105B263AB9F2005D15AE /* NetworkFeeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F5105A263AB9F2005D15AE /* NetworkFeeView.swift */; }; 84F51060263AE530005D15AE /* TitleValueView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F5105F263AE530005D15AE /* TitleValueView.swift */; }; 84F5107C263C0C11005D15AE /* AnyProviderCleaning.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F5107B263C0C11005D15AE /* AnyProviderCleaning.swift */; }; + 84F543329636D42A3BE5C574 /* ConnectedAccountsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C3011E6F226BFC9BE9C5475 /* ConnectedAccountsViewController.swift */; }; 84F6B6482619A87C0038F10D /* ExtrinsicIndexWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F6B6472619A87C0038F10D /* ExtrinsicIndexWrapper.swift */; }; 84F6B6502619E1ED0038F10D /* Int+Operations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F6B64F2619E1ED0038F10D /* Int+Operations.swift */; }; 84F77AAA265EE86B00F54885 /* CrowdloanErrorPresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F77AA9265EE86B00F54885 /* CrowdloanErrorPresentable.swift */; }; @@ -1244,17 +1475,18 @@ 85547F698B551ACD387D84E2 /* SelectValidatorsStartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E62CD2831DCF0A2D5DBB08F /* SelectValidatorsStartViewController.swift */; }; 85A093F6055DDD2E2E9253F2 /* ControllerAccountProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = F829E7F8B39EE7D977001510 /* ControllerAccountProtocols.swift */; }; 85B1B7387F09A8405C4E688A /* WalletSendConfirmTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AF4258723E2FACBBA556D00 /* WalletSendConfirmTests.swift */; }; + 85E0298F05FF6D4B9F113E47 /* TransferRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA8C84B54C44C4D28D54B657 /* TransferRouter.swift */; }; 872DF7DE5A001DF5B8A4E288 /* StakingBondMoreConfirmationFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96BA5883C1103D3A2218D839 /* StakingBondMoreConfirmationFlow.swift */; }; 87C1FC2909A8360DDBA625E5 /* LiquidityPoolSupplyInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BA528679A82B9A327853804 /* LiquidityPoolSupplyInteractor.swift */; }; 885551F78A5926D16D5AF0CB /* ControllerAccountPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E5CB64B91B35804B3671456 /* ControllerAccountPresenter.swift */; }; 886E8CF81EF2566D98D9693E /* ExportSeedViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62FA66143B25AA70B02CE461 /* ExportSeedViewFactory.swift */; }; - 887CE12C7C59F5DB092E9227 /* AccountStatisticsRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDD63BEB84A28855006BE680 /* AccountStatisticsRouter.swift */; }; 887DCCC498EB8472021DCE3E /* PolkaswapSwapConfirmationRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC50F2FF6E8EBC00B56CB86D /* PolkaswapSwapConfirmationRouter.swift */; }; 888D852FAE0318FAE4A31252 /* PolkaswapAdjustmentViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8AAC6AAD532FC7E63765D85 /* PolkaswapAdjustmentViewController.swift */; }; 88F3A9FB9CEA464275F1115E /* ExportMnemonicViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47759907380BE9300E54DC78 /* ExportMnemonicViewFactory.swift */; }; 89C8A9B990B08016A70ED336 /* StakingPoolInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EADA37D0D22D4CC99A7911A /* StakingPoolInfoViewController.swift */; }; 8A109807FBF5FE089DEDBA8E /* FiltersTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C85AF940D0B379062D292D93 /* FiltersTests.swift */; }; 8A1FC8AEE234C7FEBF7B6B2E /* CrowdloanContributionConfirmTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 385FE8691EA37DE9F562B34E /* CrowdloanContributionConfirmTests.swift */; }; + 8A388A315B0E4EF220EF3F5B /* DappBrowserRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FBC05405B64AD114FB89FFE /* DappBrowserRouter.swift */; }; 8A3CC3AAFF6B962CF3BE7BF3 /* CreateContactTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCC952210C0714F32C3AE570 /* CreateContactTests.swift */; }; 8A957CAF82C856E61054B02F /* LiquidityPoolRemoveLiquidityConfirmViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 916326B6F6651BBC5913B26F /* LiquidityPoolRemoveLiquidityConfirmViewController.swift */; }; 8B292AD8D20AB9AB5DB905B1 /* WalletOptionAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1E3F963A56923FD036280BD /* WalletOptionAssembly.swift */; }; @@ -1265,11 +1497,11 @@ 8CDA490B390BFA261906F8FC /* CrowdloanContributionSetupViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23BC71941B91D3E372CDB11C /* CrowdloanContributionSetupViewLayout.swift */; }; 8D9BC9C36DC891CDD900A895 /* AccountConfirmViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3104ABC4BECF08B0BA836AA /* AccountConfirmViewController.swift */; }; 8F0B3FE843167777A1D3771C /* NodeSelectionViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67B3E1906EEBE32E71E82BB6 /* NodeSelectionViewLayout.swift */; }; - 8FC70700D2154F472636D458 /* AccountStatisticsAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62CD1B83902C1B5763476EFF /* AccountStatisticsAssembly.swift */; }; 9081D43697D992F51E057ED2 /* CrowdloanContributionSetupPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F7068913923A6DEEE9D8EA0 /* CrowdloanContributionSetupPresenter.swift */; }; 90A3F46EF181DC2B821CC80C /* CrowdloanContributionConfirmViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F791FE1B479CE1DF936F79F /* CrowdloanContributionConfirmViewFactory.swift */; }; 90EFE3768F1375470FDBE6F6 /* PurchaseViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AA3BF0C9C1E0E2C67D962F5 /* PurchaseViewFactory.swift */; }; 910CEF0535028E629FD9798C /* SwapTransactionDetailViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB255DD7988E0E0E9CA35DA9 /* SwapTransactionDetailViewLayout.swift */; }; + 91246793157F1B0FF2A1217F /* DappBrowserInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB8CC373A5E9E1C11181A4B9 /* DappBrowserInteractor.swift */; }; 9174AA8CEB0D79C25842EC52 /* RecommendedValidatorListTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABFC2AD62212BE16C7B7C429 /* RecommendedValidatorListTests.swift */; }; 91986C1E07B1827BDD5DC82F /* NetworkInfoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26635BD49FBF19DB1253906E /* NetworkInfoTests.swift */; }; 921E4891E85C0DC6FDD8A0D0 /* CrowdloanContributionConfirmInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1366336078BCA34EFB4C6FF9 /* CrowdloanContributionConfirmInteractor.swift */; }; @@ -1279,9 +1511,9 @@ 9436FE913C0FBDAF8CE232C5 /* ClaimCrowdloanRewardsRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC1236F31289F7F25A25E69C /* ClaimCrowdloanRewardsRouter.swift */; }; 94B0F0C84AF74B3CD7223C3A /* AccountConfirmPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7306D50F278F6CC90DC88F27 /* AccountConfirmPresenter.swift */; }; 94EB0971EDA635A626CA8B72 /* StakingPoolCreateInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8D9DD27C76FE239728ED5F8 /* StakingPoolCreateInteractor.swift */; }; + 950694F134BAD1AB2B4775E3 /* ConnectedAccountsAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = A40B8FB36589FB4D3DB1A5B6 /* ConnectedAccountsAssembly.swift */; }; 9565BEB636E6D386B0C0FBE5 /* StakingPayoutConfirmationViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BE0492B98AB9C1540846B39 /* StakingPayoutConfirmationViewFactory.swift */; }; 9659B32D4622C8D9679298DF /* ChainSelectionViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = F15D1C78B2844216802DA000 /* ChainSelectionViewFactory.swift */; }; - 96B2C3B29C0EA1A068ED5FB1 /* WalletSendConfirmProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF834BF779244B8AF7746B04 /* WalletSendConfirmProtocols.swift */; }; 96EBE5F57C97C7A7A525E864 /* SwapTransactionDetailProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC265B5F209B038633AE0E3F /* SwapTransactionDetailProtocols.swift */; }; 982BB3FA25BA6AD5443B24C6 /* NetworkIssuesNotificationPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35EAD41DB1444DA38D8C65E2 /* NetworkIssuesNotificationPresenter.swift */; }; 991BF0BF6DD4D4243073E8C9 /* NftSendConfirmAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9C58C9D53A7EA34E5CB00C /* NftSendConfirmAssembly.swift */; }; @@ -1292,6 +1524,7 @@ 99DCBCC3298620721B213012 /* ClaimCrowdloanRewardsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B152D1AC1CD34A4530CB6D0 /* ClaimCrowdloanRewardsTests.swift */; }; 9A6A55297F41DAE45071BF57 /* ExportSeedInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A865455F8FC60413A6CB8A44 /* ExportSeedInteractor.swift */; }; 9A940CBA3F309D438945A90C /* ControllerAccountConfirmationProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBA49A762B2FBB66FD6A55FC /* ControllerAccountConfirmationProtocols.swift */; }; + 9ACC689D2FE77C2122103E81 /* EcosystemOptionsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EB7489DB0FFE77F7B7AABE8 /* EcosystemOptionsPresenter.swift */; }; 9B4F0484B81BBF8DFA618599 /* AccountCreateViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9636093217ABE05A7FAC9B9 /* AccountCreateViewFactory.swift */; }; 9C8AAE31F22421A975A17DF4 /* AddCustomNodeWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0968457BE5556B46D789C30 /* AddCustomNodeWireframe.swift */; }; 9D5F6A48E7A9166B9341F417 /* NetworkInfoViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = B5934BA68F375F5F8237967D /* NetworkInfoViewController.xib */; }; @@ -1311,7 +1544,6 @@ A48C21F10B9EB92454E898AE /* NftDetailsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82072889A33037BFC9D8F574 /* NftDetailsTests.swift */; }; A4FE32D50E4B7CB5B53E0067 /* StakingPoolInfoProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDCB1F95F35D50950D0A021E /* StakingPoolInfoProtocols.swift */; }; A565F118B7ED356099662F03 /* ExportMnemonicTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E32C2DC4CC106A3509BE651D /* ExportMnemonicTests.swift */; }; - A5AB7027E1E73E39E4026C5C /* Pods_fearlessTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 59FDAE57EE0A97872E76E6CE /* Pods_fearlessTests.framework */; }; A5C7F51539B8D93D9186DA2C /* LiquidityPoolRemoveLiquidityViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6419D75A346CE10236161522 /* LiquidityPoolRemoveLiquidityViewLayout.swift */; }; A64E3CA61C6CEE74F2FD9825 /* PolkaswapTransaktionSettingsAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7931155840DACB340284ABBB /* PolkaswapTransaktionSettingsAssembly.swift */; }; A6855830B76B0782A696583A /* AssetNetworksInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C554924081754A981EB4243E /* AssetNetworksInteractor.swift */; }; @@ -1323,6 +1555,7 @@ A8F69AC9D7294E7DCBA50470 /* SelectValidatorsStartPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B6244A9538B39AFCD3A6F3A /* SelectValidatorsStartPresenter.swift */; }; A9597D17F54CFF4F3704D868 /* AssetNetworksPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67B1037AEC97DBEAF9FD50C1 /* AssetNetworksPresenter.swift */; }; AA394DEC06AC872CC79C0FDC /* AssetNetworksAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D05025D7DB75DB7A766586 /* AssetNetworksAssembly.swift */; }; + AA69046E4B7838BE78859A24 /* TonWebBridgeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E51A659E2865BD98B6DEF16 /* TonWebBridgeViewController.swift */; }; AB5E2A2B4CC823E6F6515ADD /* StakingRewardPayoutsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ECD8589BD30A8BE9492AD87 /* StakingRewardPayoutsPresenter.swift */; }; AB678EAA622BFEAEEA8166F2 /* AllDoneViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54776237A20227DFE025E3AC /* AllDoneViewLayout.swift */; }; ABA3D873BBECB7F4BD670872 /* ExportSeedPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFB278373745C20822442686 /* ExportSeedPresenter.swift */; }; @@ -1409,7 +1642,6 @@ AEBE16E6262EA7C100DF257C /* StakingErrors.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEBE16E5262EA7C100DF257C /* StakingErrors.swift */; }; AEBE16F1262EAD7F00DF257C /* StakingPayoutsConfirmTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEBE16F0262EAD7F00DF257C /* StakingPayoutsConfirmTests.swift */; }; AEBE174C262FF4DB00DF257C /* PayoutConfirmViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEBE174B262FF4DB00DF257C /* PayoutConfirmViewModel.swift */; }; - AECBFFADE502D32B7D026B62 /* MultichainAssetSelectionProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2E749A964E0920F98B62B71 /* MultichainAssetSelectionProtocols.swift */; }; AEDD7C0F269C81F500A8405F /* BlockWeights.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEDD7C0E269C81F500A8405F /* BlockWeights.swift */; }; AEE4E34D25E915ED00D6DF31 /* RewardCalculatorServiceProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEE4E34C25E915ED00D6DF31 /* RewardCalculatorServiceProtocol.swift */; }; AEE4E35225E945AA00D6DF31 /* RewardCalculatorFacade.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEE4E35125E945AA00D6DF31 /* RewardCalculatorFacade.swift */; }; @@ -1453,6 +1685,7 @@ B112AC02371DE4C1DAD48BB1 /* LiquidityPoolRemoveLiquidityRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25D9454047EBBD8D8A0174A4 /* LiquidityPoolRemoveLiquidityRouter.swift */; }; B15D513381B7626AB90018F0 /* StakingPoolInfoInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA0B7C9F68A6BF3D3A6D8234 /* StakingPoolInfoInteractor.swift */; }; B2E3219218E3F54EEB7D5C3C /* NftSendViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0A0CC21B0CD2A47B9B28841 /* NftSendViewController.swift */; }; + B3329255AB6C6493CDA806D6 /* TransferViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75796C9C1AC23FDE8E1E31DB /* TransferViewLayout.swift */; }; B40863AA7377BFE5F8A30259 /* LiquidityPoolSupplyConfirmTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A43F0468DEBA7500C6B23AF /* LiquidityPoolSupplyConfirmTests.swift */; }; B478746C8342468ECACE3478 /* StakingRewardDetailsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D3BFF5C921FEB356E2C39A4 /* StakingRewardDetailsTests.swift */; }; B51AD1836313CE26F369ED3F /* CustomValidatorListWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96D540DFC00C25D8F73CFDC3 /* CustomValidatorListWireframe.swift */; }; @@ -1461,10 +1694,11 @@ B7E42D9E7CA509D7BE723357 /* PolkaswapTransaktionSettingsRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03EFBB5CE05706ADFEF00796 /* PolkaswapTransaktionSettingsRouter.swift */; }; B893A2515909AB6915196317 /* NetworkInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B0E2EDF787BF82F16663215 /* NetworkInfoViewController.swift */; }; BA7AEE82627CFC0AFD69B299 /* RecommendedValidatorListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA2580363AC3E4A9CD40256E /* RecommendedValidatorListPresenter.swift */; }; - BB96B1EA86DAB3E83B50E4BD /* MultichainAssetSelectionPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26B8EEA0D384CCA5EB1CA052 /* MultichainAssetSelectionPresenter.swift */; }; + BB11D0C16D51423BFB0C45F2 /* FeatureToggleListAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF4A966103685CC10F99B63B /* FeatureToggleListAssembly.swift */; }; BC2DF589C6623601C39EF8F4 /* LiquidityPoolSupplyPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31F848482B2AD7D6831B0CCE /* LiquidityPoolSupplyPresenter.swift */; }; + BCB9B3DF3D8104BC8456811B /* TonWebBridgeProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AA1493E216DF3B3616A9EE6 /* TonWebBridgeProtocols.swift */; }; BD571417BD18C711B76E1D62 /* ExportSeedWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B4C1B5D56DB69BA0AECF731 /* ExportSeedWireframe.swift */; }; - BDE80F08EBEE3B0C95598EA8 /* WalletSendConfirmInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAE152D16E6C78D297BFFC3C /* WalletSendConfirmInteractor.swift */; }; + BD7E3B9E0E9744C3281274A5 /* ConnectedAccountsRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 153C062150631BF45B59CB3F /* ConnectedAccountsRouter.swift */; }; BE3F6213B26F35EB6324DBD8 /* ControllerAccountWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDB9EDB05686DF11958145E1 /* ControllerAccountWireframe.swift */; }; BE98780A37B6F68759D770EB /* WalletTransactionHistoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F8DF39247202A30B63F05DA /* WalletTransactionHistoryTests.swift */; }; BEA539EE97A287868FD8BE46 /* AssetSelectionViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9622C6C3102EF12BEE78D63D /* AssetSelectionViewFactory.swift */; }; @@ -1477,47 +1711,17 @@ C20ED4531583D0C8E38715E0 /* PurchaseProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 782CC21A2F9EEF5DBA3AB1AA /* PurchaseProtocols.swift */; }; C3C7D60B36C778DA0A307BCC /* AddCustomNodeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58CD8A37F219A0BCC0C6063E /* AddCustomNodeViewController.swift */; }; C3D915637D26E807B85957CF /* NodeSelectionPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ABDA8952766DE724CD078D6 /* NodeSelectionPresenter.swift */; }; + C4427244A22EA7BA7F7C9E9F /* StakingRedeemTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 403D8D690B564EDC04996945 /* StakingRedeemTests.swift */; }; C46EEF6A9A9A601694E72DB1 /* StakingMainWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96F09665083031502F9693F8 /* StakingMainWireframe.swift */; }; C481665C170F4D9523DC73AF /* WarningAlertViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = D55EEBFA4A54B3AAF9F52855 /* WarningAlertViewLayout.swift */; }; C4F8BEB6DFA03A374135BD6B /* FiltersInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = E692235C8CF576F69971D118 /* FiltersInteractor.swift */; }; C592F4FB550050E116EEEB83 /* WalletOptionViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96950EE6AE1BA8F9130A4390 /* WalletOptionViewLayout.swift */; }; - C5AFED6C37C2C29E9903D136 /* Pods_fearlessAll_fearless.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6A28799A82C0EC2F8ABDE831 /* Pods_fearlessAll_fearless.framework */; }; + C593B432712EAD72251EC00B /* DappBrowserViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C3533520260EDD83C2F26B1 /* DappBrowserViewController.swift */; }; C600C4D52802B87100111316 /* UsernameSetupViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = C600C4D42802B87100111316 /* UsernameSetupViewLayout.swift */; }; C600C4D728053DF500111316 /* UsernameSetupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C600C4D628053DF500111316 /* UsernameSetupViewController.swift */; }; C600C4D928054A1B00111316 /* AccountCreateFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = C600C4D828054A1B00111316 /* AccountCreateFlow.swift */; }; C61166692B3BFA9000F483C4 /* NftHeaderCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C61166682B3BFA9000F483C4 /* NftHeaderCell.swift */; }; C611666C2B3C03B800F483C4 /* NftHeaderCellViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C611666B2B3C03B800F483C4 /* NftHeaderCellViewModel.swift */; }; - C6182B0F2C631AAC0089558D /* IrohaCrypto in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B0E2C631AAC0089558D /* IrohaCrypto */; }; - C6182B112C631AAC0089558D /* MPQRCoreSDK in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B102C631AAC0089558D /* MPQRCoreSDK */; }; - C6182B132C631AAC0089558D /* RobinHood in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B122C631AAC0089558D /* RobinHood */; }; - C6182B152C631AAC0089558D /* SSFAccountManagment in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B142C631AAC0089558D /* SSFAccountManagment */; }; - C6182B172C631AAC0089558D /* SSFAccountManagmentStorage in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B162C631AAC0089558D /* SSFAccountManagmentStorage */; }; - C6182B192C631AAC0089558D /* SSFAssetManagment in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B182C631AAC0089558D /* SSFAssetManagment */; }; - C6182B1B2C631AAC0089558D /* SSFChainConnection in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B1A2C631AAC0089558D /* SSFChainConnection */; }; - C6182B1D2C631AAC0089558D /* SSFChainRegistry in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B1C2C631AAC0089558D /* SSFChainRegistry */; }; - C6182B1F2C631AAC0089558D /* SSFCloudStorage in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B1E2C631AAC0089558D /* SSFCloudStorage */; }; - C6182B212C631AAC0089558D /* SSFCrypto in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B202C631AAC0089558D /* SSFCrypto */; }; - C6182B232C631AAC0089558D /* SSFEraKit in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B222C631AAC0089558D /* SSFEraKit */; }; - C6182B252C631AAC0089558D /* SSFExtrinsicKit in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B242C631AAC0089558D /* SSFExtrinsicKit */; }; - C6182B272C631AAC0089558D /* SSFHelpers in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B262C631AAC0089558D /* SSFHelpers */; }; - C6182B292C631AAC0089558D /* SSFKeyPair in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B282C631AAC0089558D /* SSFKeyPair */; }; - C6182B2B2C631AAC0089558D /* SSFLogger in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B2A2C631AAC0089558D /* SSFLogger */; }; - C6182B2D2C631AAC0089558D /* SSFModels in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B2C2C631AAC0089558D /* SSFModels */; }; - C6182B2F2C631AAC0089558D /* SSFNetwork in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B2E2C631AAC0089558D /* SSFNetwork */; }; - C6182B312C631AAC0089558D /* SSFPolkaswap in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B302C631AAC0089558D /* SSFPolkaswap */; }; - C6182B332C631AAC0089558D /* SSFPools in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B322C631AAC0089558D /* SSFPools */; }; - C6182B352C631AAC0089558D /* SSFPoolsStorage in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B342C631AAC0089558D /* SSFPoolsStorage */; }; - C6182B372C631AAC0089558D /* SSFQRService in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B362C631AAC0089558D /* SSFQRService */; }; - C6182B392C631AAC0089558D /* SSFRuntimeCodingService in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B382C631AAC0089558D /* SSFRuntimeCodingService */; }; - C6182B3B2C631AAC0089558D /* SSFSigner in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B3A2C631AAC0089558D /* SSFSigner */; }; - C6182B3D2C631AAC0089558D /* SSFSingleValueCache in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B3C2C631AAC0089558D /* SSFSingleValueCache */; }; - C6182B3F2C631AAC0089558D /* SSFStorageQueryKit in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B3E2C631AAC0089558D /* SSFStorageQueryKit */; }; - C6182B412C631AAC0089558D /* SSFTransferService in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B402C631AAC0089558D /* SSFTransferService */; }; - C6182B432C631AAC0089558D /* SSFUtils in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B422C631AAC0089558D /* SSFUtils */; }; - C6182B452C631AAC0089558D /* SSFXCM in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B442C631AAC0089558D /* SSFXCM */; }; - C6182B472C631AAC0089558D /* SoraKeystore in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B462C631AAC0089558D /* SoraKeystore */; }; - C6182B492C631AAC0089558D /* keccak in Frameworks */ = {isa = PBXBuildFile; productRef = C6182B482C631AAC0089558D /* keccak */; }; - C6182B4C2C6474F30089558D /* PricesService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6182B4B2C6474F30089558D /* PricesService.swift */; }; C6264C292799A56E00FCA0DB /* WalletDetailsTableCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6264C282799A56E00FCA0DB /* WalletDetailsTableCell.swift */; }; C6264C2C2799C15C00FCA0DB /* WalletDetailsCellViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6264C2B2799C15C00FCA0DB /* WalletDetailsCellViewModel.swift */; }; C6264C2E2799C7EE00FCA0DB /* WalletDetailsViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6264C2D2799C7EE00FCA0DB /* WalletDetailsViewLayout.swift */; }; @@ -1558,7 +1762,6 @@ C640416028F5191100845780 /* CreateContactViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C640415F28F5191100845780 /* CreateContactViewModel.swift */; }; C640416228F51F9900845780 /* CreateContactViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = C640416128F51F9900845780 /* CreateContactViewModelFactory.swift */; }; C648FFC828DC43A70072951B /* EmptyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C648FFC728DC43A70072951B /* EmptyView.swift */; }; - C64DD7582C75C53A00E97804 /* PriceDataMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = C64DD7572C75C53A00E97804 /* PriceDataMapper.swift */; }; C64ECCE328873F2500CFF434 /* ChainAssetsFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = C64ECCE228873F2500CFF434 /* ChainAssetsFetching.swift */; }; C6584E352982524700592A92 /* WalletTransactionHistoryDependencyContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6584E342982524700592A92 /* WalletTransactionHistoryDependencyContainer.swift */; }; C65A6592288E5CF400679D65 /* AccountInfoFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = C65A6591288E5CF400679D65 /* AccountInfoFetching.swift */; }; @@ -1604,10 +1807,6 @@ C6DC2D602B18411000BAA4DB /* UIImageView+gif.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6DC2D5F2B18411000BAA4DB /* UIImageView+gif.swift */; }; C6E5671768DA68535DA5B1C7 /* ControllerAccountConfirmationViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = F02DBCA4A63A5E52E3739374 /* ControllerAccountConfirmationViewFactory.swift */; }; C6FB932E27C9334100563E61 /* AvailableExportOptionsProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6FB932D27C9334100563E61 /* AvailableExportOptionsProvider.swift */; }; - C6FBA6D82C65DDBC008B18D9 /* AssetModelMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6FBA6D72C65DDBC008B18D9 /* AssetModelMapper.swift */; }; - C6FBA6DA2C65EA56008B18D9 /* AssetRepositoryFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6FBA6D92C65EA56008B18D9 /* AssetRepositoryFactory.swift */; }; - C6FBA6DC2C69E006008B18D9 /* PriceDataHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6FBA6DB2C69E006008B18D9 /* PriceDataHelper.swift */; }; - C6FBA6DE2C72E0FD008B18D9 /* PricesUpdated.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6FBA6DD2C72E0FD008B18D9 /* PricesUpdated.swift */; }; C77CCA7FF969A2F006A0B6C4 /* WalletChainAccountDashboardProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8E1C5E0E16867BDA51B6734 /* WalletChainAccountDashboardProtocols.swift */; }; C7D77690E10875CF1856EBA1 /* StakingRewardPayoutsProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7911693957DFAF141EBDAFEC /* StakingRewardPayoutsProtocols.swift */; }; C80B2FDBD395CDEAD1B7E996 /* AnalyticsRewardDetailsViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC2C9D26B9F9CC048C67796F /* AnalyticsRewardDetailsViewLayout.swift */; }; @@ -1621,6 +1820,7 @@ CBC2B73D7749D5C635EECEE8 /* NftSendViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 747F68F0421FB144AE3FBA4E /* NftSendViewLayout.swift */; }; CC20F3D5802535EDA836926A /* ContactsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87F9D215513308538FA3FDC4 /* ContactsTests.swift */; }; CC545DF80038901FA06FDD58 /* SelectValidatorsConfirmViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B8B0940B2CB25AD9C36206E /* SelectValidatorsConfirmViewController.swift */; }; + CCA06979DC3F21E5CCA505F0 /* FeatureToggleListViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D09EBD67803AB57DF0F7636 /* FeatureToggleListViewLayout.swift */; }; CCF5A7CED175D5E43B2C9971 /* StakingUnbondSetupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC17D12DCD0CDAF0BC13D80D /* StakingUnbondSetupViewController.swift */; }; CD027E4D430D8939A3D64EB6 /* AllDoneRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31302AE4D5325D2AEC030832 /* AllDoneRouter.swift */; }; CD76A6513A708051857FD480 /* StakingAmountProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 999C15317E0B4FC67B9C17C5 /* StakingAmountProtocols.swift */; }; @@ -1643,12 +1843,15 @@ D403B7725ED25E20A20F9D6A /* WalletMainContainerViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44FDDC470A6921DC2258939E /* WalletMainContainerViewLayout.swift */; }; D41CA684433AD861BEC2213B /* WalletTransactionHistoryViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE29083D5CE7EA0D886D069A /* WalletTransactionHistoryViewFactory.swift */; }; D565DB5ED3B8B4D9BCFB4C21 /* CustomValidatorListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14E3337CDD7C831AEAA4582F /* CustomValidatorListPresenter.swift */; }; + D5C25B13DB0180C0A78C2372 /* ConfirmTransferProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 759EAF04B9064529D6862A14 /* ConfirmTransferProtocols.swift */; }; D6511F7C3E55197F82AB552C /* RecommendedValidatorListViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE4AF0849E32E5B9C72E2ABB /* RecommendedValidatorListViewFactory.swift */; }; + D80CDA0DDAB54204CBF873D0 /* DappBrowserListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A656BB6CADD5BEBD41CE492 /* DappBrowserListPresenter.swift */; }; D83B47B07C0D40A327AC44F7 /* CustomValidatorListViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = F52B8815D6AF5E69B145D245 /* CustomValidatorListViewFactory.swift */; }; D8581E5440A19D977E17BFDE /* StakingAmountViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = D39D54DC9992CF9CB6699AA3 /* StakingAmountViewFactory.swift */; }; D886425A55425810AD070AB5 /* ControllerAccountConfirmationWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = C96C3B5ABF4A8124848EFD17 /* ControllerAccountConfirmationWireframe.swift */; }; D8C33C4064C3B2F30BB478A5 /* LiquidityPoolSupplyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C4CAC8978B0848DF5FD6FE /* LiquidityPoolSupplyTests.swift */; }; D9E803290BE797D889EA372D /* AssetSelectionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2655EE5CFAAD20C0FF59188 /* AssetSelectionTests.swift */; }; + D9FEC396410376629DEB9625 /* TransferProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD417B638E8EFD33EBDC91DF /* TransferProtocols.swift */; }; DA5B38EE4622B33AFCA11A50 /* WalletsManagmentPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41E19988955B1C159EDA2555 /* WalletsManagmentPresenter.swift */; }; DA62812C23210601F4ECF84D /* ContactsProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B06C949668CFFDE6F739CC0 /* ContactsProtocols.swift */; }; DAAD3A3FCBA0C0E613167EBF /* ContactsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AD3D74F8E0B0F097092FDD7 /* ContactsPresenter.swift */; }; @@ -1657,6 +1860,7 @@ DBA436B3B1C90965FE8F9B79 /* YourValidatorListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0533F9E531CDFB721D697769 /* YourValidatorListPresenter.swift */; }; DBA6A0A26D77E7A587C51792 /* PolkaswapSwapConfirmationProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA6FC016067C632AF256EB62 /* PolkaswapSwapConfirmationProtocols.swift */; }; DBBD1651F45FECA1B17AAF40 /* CreateContactViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 480AE579B48B3DA9C247CCB5 /* CreateContactViewController.swift */; }; + DBF246FDD6E70D1DC6529539 /* TonWebBridgeViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75D1886C774F9F63C897CAF1 /* TonWebBridgeViewLayout.swift */; }; DCDAE9E8C805B71A8F8CEFBD /* YourValidatorListTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 890203CBFFCBF517C0BAA396 /* YourValidatorListTests.swift */; }; DCE13AA9F3BA0EB54F793017 /* LiquidityPoolSupplyAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62928FB3556EEA3A228131AC /* LiquidityPoolSupplyAssembly.swift */; }; DD1ADD4F777B0C6398C73805 /* NftDetailsRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B08B264C09E63A936384E2A /* NftDetailsRouter.swift */; }; @@ -1667,8 +1871,10 @@ DE9FA0FA5A6B685CBD593025 /* AllDoneInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C705CA1083C1EE58426D90CD /* AllDoneInteractor.swift */; }; DFD5EDA2F7C096DB3A5368E4 /* CustomValidatorListTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9A16451B21451996CAA31F8 /* CustomValidatorListTests.swift */; }; DFF0320CF3AA41142DEAC5F2 /* LiquidityPoolsOverviewInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6717FF1B7777400B62F028C3 /* LiquidityPoolsOverviewInteractor.swift */; }; + E01C6EA1C6DB699485EEA5F5 /* TransferTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7525F0A27140F3C058CA5B0C /* TransferTests.swift */; }; E14F809C3917EFA4B5388AC8 /* AccountConfirmViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = A14CA4551FCC2EBD078E2242 /* AccountConfirmViewFactory.swift */; }; E1772980B5A4EB33D1801204 /* PolkaswapAdjustmentViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25FF82C2FD912021A1F20876 /* PolkaswapAdjustmentViewLayout.swift */; }; + E256770DDF3AF748A5057FD4 /* DappBrowserListInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EE85E6A9028E814231D8466 /* DappBrowserListInteractor.swift */; }; E2645EB7614F4C7A60B48777 /* PolkaswapAdjustmentProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A9EBD3B7AEA5EF594DFEB49 /* PolkaswapAdjustmentProtocols.swift */; }; E29066A3781333DF890E8F9B /* ContactsAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF65551AE1E858C563054E87 /* ContactsAssembly.swift */; }; E2C68C903A8B7AB2ECD82E7C /* ChainAccountListTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FA0310E7E7EA9A985602CCA /* ChainAccountListTests.swift */; }; @@ -1682,9 +1888,11 @@ E5F3DF66415E54AE04D0C9A9 /* StakingMainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A05EB4FAF2FDE7DECEA93E4 /* StakingMainViewController.swift */; }; E667BD4B6BA45B9B3464AD85 /* LiquidityPoolRemoveLiquidityConfirmAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECE2059F621D024F85EFBFD0 /* LiquidityPoolRemoveLiquidityConfirmAssembly.swift */; }; E6981A506AC931D30E85169E /* WalletOptionPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFD95EE4822A564C0D4D1CFE /* WalletOptionPresenter.swift */; }; + E6EC748865580AB3FA6756BE /* EcosystemOptionsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A751AAC4AA1E6401E4F43142 /* EcosystemOptionsInteractor.swift */; }; E7CAD629FF0D4E97594F7A05 /* YourValidatorListInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B60728FCFBC8A9BE4C7B50B /* YourValidatorListInteractor.swift */; }; E8B8D3D290DC7057144559CE /* WalletChainAccountDashboardPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E83833EB33E51A12F96F83B /* WalletChainAccountDashboardPresenter.swift */; }; - EA16E259F0B0C1D3A6A1902A /* WalletSendConfirmViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF4A813A6FB09F9FE5891578 /* WalletSendConfirmViewController.swift */; }; + E94EAFC25B7E5BAA04CB6085 /* EcosystemOptionsAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E06ADA1BE2C3A9277A30E1B /* EcosystemOptionsAssembly.swift */; }; + E9EE315D66D4E664BC250529 /* FeatureToggleListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAA8A8A8C3822633813C71F2 /* FeatureToggleListPresenter.swift */; }; EA8ECCD37FE5D6478018D3FC /* RecommendedValidatorListViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C0FA282377DCAB7C59ACFB6 /* RecommendedValidatorListViewController.xib */; }; EB544E8D26ABEE4ADE2F939F /* AnalyticsRewardDetailsInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC0C84704B8876688E59FA58 /* AnalyticsRewardDetailsInteractor.swift */; }; EB5F587A71CCE1F0F86154CF /* ControllerAccountViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 002A29AE58EB53E915330490 /* ControllerAccountViewFactory.swift */; }; @@ -1692,8 +1900,10 @@ EB9D8D22AA13BF12F845856B /* ReferralCrowdloanProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 953E21C32079A8051A0EE964 /* ReferralCrowdloanProtocols.swift */; }; EC978E6C4FBF39BE9ED10C86 /* SelectValidatorsStartWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 889A825F58F5CB54118A9D35 /* SelectValidatorsStartWireframe.swift */; }; ECA54AB8148BBA63084353FD /* LiquidityPoolRemoveLiquidityConfirmTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31F75A22E215273305AF7AA2 /* LiquidityPoolRemoveLiquidityConfirmTests.swift */; }; + ED3514135CA429A516482F69 /* DappBrowserListProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B3AB5BB9A2488FDD8DDFBA6 /* DappBrowserListProtocols.swift */; }; EDC02F2FDCDB55519DB0273D /* AnalyticsRewardDetailsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761FDEBB414B1CFAD6992352 /* AnalyticsRewardDetailsTests.swift */; }; EDC72DAB0BDD63E0521E66B5 /* WarningAlertViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22FD9A4EA33DB4B6AFA5B0C4 /* WarningAlertViewController.swift */; }; + EDE467D5D4E6EC2A69FAD84A /* FeatureToggleListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97A985C8D05C0BAFEEFADFE7 /* FeatureToggleListViewController.swift */; }; EE6FC6EFB089A94EF105F2CC /* StakingRewardPayoutsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 934678CCA0EF35B6AE4AE8A1 /* StakingRewardPayoutsTests.swift */; }; EF02C9661F03C8EF58182997 /* StakingAmountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB76FEC075A6FE1D246BA5DD /* StakingAmountViewController.swift */; }; EF23CA9AF3889FEAB2D6CBD6 /* NftCollectionPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25B80FDDB5C3032A0BBBD826 /* NftCollectionPresenter.swift */; }; @@ -1811,7 +2021,6 @@ F4BDDCBE2657A57F005336BA /* TransferValidatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4BDDCBD2657A57F005336BA /* TransferValidatorTests.swift */; }; F4C086B826D10E3400716AEC /* UIRefreshControl+ProgramaticallyBeginRefresh.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4C086B726D10E3400716AEC /* UIRefreshControl+ProgramaticallyBeginRefresh.swift */; }; F4C086C726D1159E00716AEC /* SubqueryEraStakersInfoSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4C086C626D1159E00716AEC /* SubqueryEraStakersInfoSource.swift */; }; - F4CBA064CDCF0F6EEFE1DDA1 /* WalletSendConfirmViewFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12441689D2AF47D508D16CCF /* WalletSendConfirmViewFactory.swift */; }; F4D551A12643DD240002363F /* AccountSelectionPresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4D551A02643DD240002363F /* AccountSelectionPresentable.swift */; }; F4D6FF0E26B3DD6E002313AF /* AnalyticsRewardsProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4D6FF0D26B3DD6E002313AF /* AnalyticsRewardsProtocols.swift */; }; F4D6FF1326B3DDDF002313AF /* AnalyticsRewardsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4D6FF1226B3DDDF002313AF /* AnalyticsRewardsViewController.swift */; }; @@ -1853,6 +2062,7 @@ F7EB8F835CFA7FC949EF4C22 /* YourValidatorListWireframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 906C55FC079AF6112AF0745B /* YourValidatorListWireframe.swift */; }; F83EA1F4ECE14C390C0B287F /* StakingUnbondSetupInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D101339CC1292531CC4DB0AC /* StakingUnbondSetupInteractor.swift */; }; F865D752EBD2363E971BE267 /* MainNftContainerAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E69C4F66805399A3DB4ED8 /* MainNftContainerAssembly.swift */; }; + F952CDC56E85FA82DDEBE5D3 /* FeatureToggleListRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4EE06DBE885C0467D8929FE /* FeatureToggleListRouter.swift */; }; FA00488F282CC7710032FF49 /* SelectValidatorsStartFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA00488E282CC7710032FF49 /* SelectValidatorsStartFlow.swift */; }; FA004891282CCA400032FF49 /* SelectValidatorsStartParachainStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA004890282CCA400032FF49 /* SelectValidatorsStartParachainStrategy.swift */; }; FA004893282CCA520032FF49 /* SelectValidatorsStartRelaychainStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA004892282CCA520032FF49 /* SelectValidatorsStartRelaychainStrategy.swift */; }; @@ -1861,7 +2071,6 @@ FA004899282CCFCD0032FF49 /* SelectValidatorsStartParachainViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA004898282CCFCD0032FF49 /* SelectValidatorsStartParachainViewModelFactory.swift */; }; FA00489B282CCFDC0032FF49 /* SelectValidatorsStartRelaychainViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA00489A282CCFDC0032FF49 /* SelectValidatorsStartRelaychainViewModelFactory.swift */; }; FA0066E92935D07D0068FC61 /* RecommendedValidatorListPoolStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA0066E82935D07D0068FC61 /* RecommendedValidatorListPoolStrategy.swift */; }; - FA01B2BB2C6213740078A35B /* InfoTitleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA01B2BA2C6213740078A35B /* InfoTitleView.swift */; }; FA054A9A2BCD1FA3007B8F6D /* AvailableLiquidityPoolsListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA054A992BCD1FA3007B8F6D /* AvailableLiquidityPoolsListPresenter.swift */; }; FA054A9C2BCD1FAF007B8F6D /* AvailableLiquidityPoolsListViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA054A9B2BCD1FAF007B8F6D /* AvailableLiquidityPoolsListViewModelFactory.swift */; }; FA072C14277AE2FE00731718 /* QRCaptureService.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA072C13277AE2FE00731718 /* QRCaptureService.swift */; }; @@ -1917,7 +2126,6 @@ FA2222912BD239500031DE04 /* SoraSubqueryPriceResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2222902BD239500031DE04 /* SoraSubqueryPriceResponse.swift */; }; FA2222942BD2726F0031DE04 /* SkeletonLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2222932BD2726F0031DE04 /* SkeletonLabel.swift */; }; FA2222962BD272A30031DE04 /* SkeletonLoadableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2222952BD272A30031DE04 /* SkeletonLoadableView.swift */; }; - FA236A412C4FA0A4009330F2 /* NomisJSONDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA236A402C4FA0A4009330F2 /* NomisJSONDecoder.swift */; }; FA24FEFE2B95C32200CD9E04 /* Decimal+DoubleValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA24FEFD2B95C32200CD9E04 /* Decimal+DoubleValue.swift */; }; FA256984274CE5A500875A53 /* BalanceLockType.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA256982274CE5A400875A53 /* BalanceLockType.swift */; }; FA256985274CE5A500875A53 /* BalanceLocks+Sort.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA256983274CE5A500875A53 /* BalanceLocks+Sort.swift */; }; @@ -1942,8 +2150,6 @@ FA256A45274CE8BD00875A53 /* StoriesCollectionItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA256A43274CE8BC00875A53 /* StoriesCollectionItem.swift */; }; FA256A46274CE8BD00875A53 /* StoriesCollectionItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = FA256A44274CE8BD00875A53 /* StoriesCollectionItem.xib */; }; FA256A48274CE8C200875A53 /* StakingMainInteractor+Subscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA256A47274CE8C200875A53 /* StakingMainInteractor+Subscription.swift */; }; - FA273E5C2C4F67AA00F9CB13 /* AccountStatisticsViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA273E5B2C4F67A900F9CB13 /* AccountStatisticsViewModelFactory.swift */; }; - FA273E5E2C4F680500F9CB13 /* AccountStatisticsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA273E5D2C4F680500F9CB13 /* AccountStatisticsViewModel.swift */; }; FA286AF52A3043C3008BD527 /* ConvenienceError.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA286AF42A3043C3008BD527 /* ConvenienceError.swift */; }; FA286B0B2A3043DB008BD527 /* CrossChainConfirmationViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA286AF72A3043DB008BD527 /* CrossChainConfirmationViewLayout.swift */; }; FA286B0C2A3043DB008BD527 /* CrossChainConfirmationRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA286AF82A3043DB008BD527 /* CrossChainConfirmationRouter.swift */; }; @@ -2135,31 +2341,17 @@ FA38C9A1275FD6B9005C5577 /* BundleImageViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA38C9A0275FD6B9005C5577 /* BundleImageViewModel.swift */; }; FA38C9C12761E68B005C5577 /* AccountViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA38C9C02761E68B005C5577 /* AccountViewModel.swift */; }; FA38C9C32761E77A005C5577 /* AccountViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA38C9C22761E77A005C5577 /* AccountViewModelFactory.swift */; }; - FA38C9CB276305A3005C5577 /* WalletSendConfirmViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA38C9CA276305A3005C5577 /* WalletSendConfirmViewState.swift */; }; FA38C9CD276305B6005C5577 /* WalletSendConfirmViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA38C9CC276305B6005C5577 /* WalletSendConfirmViewModel.swift */; }; FA38C9CF27634A18005C5577 /* WalletSendConfirmViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA38C9CE27634A18005C5577 /* WalletSendConfirmViewModelFactory.swift */; }; - FA3F42F92C50C8EF00AA1397 /* ScamInfoFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA3F42F82C50C8EF00AA1397 /* ScamInfoFetcher.swift */; }; FA3F5B17281A790A00BEF03B /* StakingAmountFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA3F5B16281A790A00BEF03B /* StakingAmountFlow.swift */; }; FA3F5B67281BAF5200BEF03B /* StakingAmountRelaychainStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA3F5B66281BAF5200BEF03B /* StakingAmountRelaychainStrategy.swift */; }; FA3F5B69281BAF5C00BEF03B /* StakingAmountParachainStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA3F5B68281BAF5C00BEF03B /* StakingAmountParachainStrategy.swift */; }; FA3F5B6B281BAF6600BEF03B /* StakingAmountParachainViewModelState.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA3F5B6A281BAF6600BEF03B /* StakingAmountParachainViewModelState.swift */; }; FA402F2F27C7C646008CF986 /* ExportAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA402F2E27C7C646008CF986 /* ExportAction.swift */; }; - FA41B61D2C64856D00D0713A /* FireHistoryOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA41B61C2C64856D00D0713A /* FireHistoryOperationFactory.swift */; }; - FA41B6202C6495EE00D0713A /* 5ireHistoryResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA41B61F2C6495EE00D0713A /* 5ireHistoryResponse.swift */; }; - FA41B6222C64988700D0713A /* AssetTransactionData+FireHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA41B6212C64988700D0713A /* AssetTransactionData+FireHistory.swift */; }; - FA41B6262C64BE6800D0713A /* ViscanHistoryOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA41B6252C64BE6800D0713A /* ViscanHistoryOperationFactory.swift */; }; - FA41B6292C64C15000D0713A /* VicscanHistoryResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA41B6282C64C15000D0713A /* VicscanHistoryResponse.swift */; }; - FA41B62B2C64C5A200D0713A /* AssetTransactionData+VicscanHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA41B62A2C64C5A200D0713A /* AssetTransactionData+VicscanHistory.swift */; }; FA44284229D44E51000142EB /* ChainStakingSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA44284129D44E51000142EB /* ChainStakingSettings.swift */; }; FA4441342BF75FD90067C633 /* LiquidityPoolListType.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4441332BF75FD90067C633 /* LiquidityPoolListType.swift */; }; - FA4542422C6B367B00610A71 /* BlockExplorerType+Filters.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4542412C6B367B00610A71 /* BlockExplorerType+Filters.swift */; }; FA46D2C7283DDD07005A112B /* ParachainStakingCandidateMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA46D2C6283DDD07005A112B /* ParachainStakingCandidateMetadata.swift */; }; FA4889672B7F5E360092ABF8 /* GiantsquidExtrinsic.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4889662B7F5E360092ABF8 /* GiantsquidExtrinsic.swift */; }; - FA4B098E2C47804F001B73F9 /* NomisRequestSigner.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4B098D2C47804F001B73F9 /* NomisRequestSigner.swift */; }; - FA4B75AF2C6F325F001B954F /* MultichainAssetFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4B75AD2C6F325E001B954F /* MultichainAssetFetching.swift */; }; - FA4B75B02C6F325F001B954F /* OKXMultichainAssetSelection.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4B75AE2C6F325E001B954F /* OKXMultichainAssetSelection.swift */; }; - FA4B75B22C6F3270001B954F /* MultichainChainFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4B75B12C6F3270001B954F /* MultichainChainFetching.swift */; }; - FA4B75B42C6F333A001B954F /* OKXMultichainChainFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4B75B32C6F333A001B954F /* OKXMultichainChainFetching.swift */; }; FA4B928F284493C60003BCEF /* DelegateCall.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4B928E284493C60003BCEF /* DelegateCall.swift */; }; FA4B92912844CF750003BCEF /* MetaAccountModelChangedEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4B92902844CF750003BCEF /* MetaAccountModelChangedEvent.swift */; }; FA4B92982844D0100003BCEF /* ShimmeredLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4B92952844D0100003BCEF /* ShimmeredLabel.swift */; }; @@ -2180,7 +2372,6 @@ FA4C3D122886794D00176398 /* SelfSizingTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4C3D112886794D00176398 /* SelfSizingTableView.swift */; }; FA4CC6642817C3AC00A7E85F /* StackedTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4CC6632817C3AC00A7E85F /* StackedTableView.swift */; }; FA4CC666281801CB00A7E85F /* StakingUnitInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4CC665281801CB00A7E85F /* StakingUnitInfoView.swift */; }; - FA5032B22C4E58C500075909 /* AccountStatisticsPresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA5032B12C4E58C500075909 /* AccountStatisticsPresentable.swift */; }; FA5085AC2C33C6D4002DF97D /* SafeArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA5085AA2C33C6D4002DF97D /* SafeArray.swift */; }; FA5085AD2C33C6D4002DF97D /* SafeDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA5085AB2C33C6D4002DF97D /* SafeDictionary.swift */; }; FA5137AA29AC6F2F00560EBA /* PolkaswapDisclaimerViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA5137A129AC6F2F00560EBA /* PolkaswapDisclaimerViewModel.swift */; }; @@ -2339,6 +2530,7 @@ FA72546F2AC2F12D00EC47A6 /* Web3Wallet in Frameworks */ = {isa = PBXBuildFile; productRef = FA72546E2AC2F12D00EC47A6 /* Web3Wallet */; }; FA7336FD2A132F740096A291 /* AlchemyHistoryOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA7336FC2A132F740096A291 /* AlchemyHistoryOperationFactory.swift */; }; FA7337092A1339890096A291 /* AssetTransactionData+AlchemyHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA7337082A1339890096A291 /* AssetTransactionData+AlchemyHistory.swift */; }; + FA740A8D2CC8C03400981508 /* GradientBorderedTriangularedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA740A8C2CC8C03400981508 /* GradientBorderedTriangularedView.swift */; }; FA74359529C0733E0085A47E /* Array+Difference.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA74359429C0733E0085A47E /* Array+Difference.swift */; }; FA74359729C0734B0085A47E /* CDAccountInfo+CoreDataCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA74359629C0734B0085A47E /* CDAccountInfo+CoreDataCodable.swift */; }; FA74359929C0735B0085A47E /* ChainSettingsRepositoryFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA74359829C0735B0085A47E /* ChainSettingsRepositoryFactory.swift */; }; @@ -2391,6 +2583,35 @@ FA8800682B31A335000AE5EB /* StakingAccountSubscriptionV13.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8800672B31A335000AE5EB /* StakingAccountSubscriptionV13.swift */; }; FA88006A2B31A33E000AE5EB /* StakingAccountSubscriptionV14.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8800692B31A33E000AE5EB /* StakingAccountSubscriptionV14.swift */; }; FA88006C2B31A46D000AE5EB /* StakingAccountSubscriptionAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA88006B2B31A46D000AE5EB /* StakingAccountSubscriptionAssembly.swift */; }; + FA8810982BDCAF260084CC4B /* IrohaCrypto in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810972BDCAF260084CC4B /* IrohaCrypto */; }; + FA88109A2BDCAF260084CC4B /* RobinHood in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810992BDCAF260084CC4B /* RobinHood */; }; + FA88109C2BDCAF260084CC4B /* SSFAccountManagment in Frameworks */ = {isa = PBXBuildFile; productRef = FA88109B2BDCAF260084CC4B /* SSFAccountManagment */; }; + FA88109E2BDCAF260084CC4B /* SSFAccountManagmentStorage in Frameworks */ = {isa = PBXBuildFile; productRef = FA88109D2BDCAF260084CC4B /* SSFAccountManagmentStorage */; }; + FA8810A02BDCAF260084CC4B /* SSFAssetManagment in Frameworks */ = {isa = PBXBuildFile; productRef = FA88109F2BDCAF260084CC4B /* SSFAssetManagment */; }; + FA8810A22BDCAF260084CC4B /* SSFChainConnection in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810A12BDCAF260084CC4B /* SSFChainConnection */; }; + FA8810A42BDCAF260084CC4B /* SSFChainRegistry in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810A32BDCAF260084CC4B /* SSFChainRegistry */; }; + FA8810A62BDCAF260084CC4B /* SSFCloudStorage in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810A52BDCAF260084CC4B /* SSFCloudStorage */; }; + FA8810A82BDCAF260084CC4B /* SSFCrypto in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810A72BDCAF260084CC4B /* SSFCrypto */; }; + FA8810AA2BDCAF260084CC4B /* SSFEraKit in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810A92BDCAF260084CC4B /* SSFEraKit */; }; + FA8810AC2BDCAF260084CC4B /* SSFExtrinsicKit in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810AB2BDCAF260084CC4B /* SSFExtrinsicKit */; }; + FA8810AE2BDCAF260084CC4B /* SSFHelpers in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810AD2BDCAF260084CC4B /* SSFHelpers */; }; + FA8810B02BDCAF260084CC4B /* SSFKeyPair in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810AF2BDCAF260084CC4B /* SSFKeyPair */; }; + FA8810B22BDCAF260084CC4B /* SSFLogger in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810B12BDCAF260084CC4B /* SSFLogger */; }; + FA8810B42BDCAF260084CC4B /* SSFModels in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810B32BDCAF260084CC4B /* SSFModels */; }; + FA8810B62BDCAF260084CC4B /* SSFNetwork in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810B52BDCAF260084CC4B /* SSFNetwork */; }; + FA8810B82BDCAF260084CC4B /* SSFPolkaswap in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810B72BDCAF260084CC4B /* SSFPolkaswap */; }; + FA8810BA2BDCAF260084CC4B /* SSFPools in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810B92BDCAF260084CC4B /* SSFPools */; }; + FA8810BC2BDCAF260084CC4B /* SSFPoolsStorage in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810BB2BDCAF260084CC4B /* SSFPoolsStorage */; }; + FA8810BE2BDCAF260084CC4B /* SSFQRService in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810BD2BDCAF260084CC4B /* SSFQRService */; }; + FA8810C02BDCAF260084CC4B /* SSFRuntimeCodingService in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810BF2BDCAF260084CC4B /* SSFRuntimeCodingService */; }; + FA8810C22BDCAF260084CC4B /* SSFSigner in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810C12BDCAF260084CC4B /* SSFSigner */; }; + FA8810C42BDCAF260084CC4B /* SSFSingleValueCache in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810C32BDCAF260084CC4B /* SSFSingleValueCache */; }; + FA8810C62BDCAF260084CC4B /* SSFStorageQueryKit in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810C52BDCAF260084CC4B /* SSFStorageQueryKit */; }; + FA8810C82BDCAF260084CC4B /* SSFTransferService in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810C72BDCAF260084CC4B /* SSFTransferService */; }; + FA8810CA2BDCAF260084CC4B /* SSFUtils in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810C92BDCAF260084CC4B /* SSFUtils */; }; + FA8810CC2BDCAF260084CC4B /* SSFXCM in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810CB2BDCAF260084CC4B /* SSFXCM */; }; + FA8810CE2BDCAF260084CC4B /* SoraKeystore in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810CD2BDCAF260084CC4B /* SoraKeystore */; }; + FA8810D02BDCAF260084CC4B /* keccak in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810CF2BDCAF260084CC4B /* keccak */; }; FA8810D32BDCCF7E0084CC4B /* UserLiquidityPoolsListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8810D22BDCCF7E0084CC4B /* UserLiquidityPoolsListPresenter.swift */; }; FA8810D52BDCD19D0084CC4B /* UserLiquidityPoolsListViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8810D42BDCD19D0084CC4B /* UserLiquidityPoolsListViewModelFactory.swift */; }; FA887A452C107A1100CA720F /* LiquidityPoolSupplyConfirmViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA887A442C107A1100CA720F /* LiquidityPoolSupplyConfirmViewModel.swift */; }; @@ -2408,6 +2629,9 @@ FA8F6386298253ED004B8CD4 /* AddConnectionError.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8F6385298253ED004B8CD4 /* AddConnectionError.swift */; }; FA8F63AB29825C90004B8CD4 /* AccountShareFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8F63A529825C90004B8CD4 /* AccountShareFactory.swift */; }; FA8F63B1298273FE004B8CD4 /* DecodedTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8F63B0298273FE004B8CD4 /* DecodedTypes.swift */; }; + FA8FD1812AF4B55100354482 /* Web3 in Frameworks */ = {isa = PBXBuildFile; productRef = FA8FD1802AF4B55100354482 /* Web3 */; }; + FA8FD1832AF4B55100354482 /* Web3ContractABI in Frameworks */ = {isa = PBXBuildFile; productRef = FA8FD1822AF4B55100354482 /* Web3ContractABI */; }; + FA8FD1852AF4B55100354482 /* Web3PromiseKit in Frameworks */ = {isa = PBXBuildFile; productRef = FA8FD1842AF4B55100354482 /* Web3PromiseKit */; }; FA8FD1882AF4BEDD00354482 /* Swime in Frameworks */ = {isa = PBXBuildFile; productRef = FA8FD1872AF4BEDD00354482 /* Swime */; }; FA8FD18B2AFB7E6C00354482 /* AssetNetworksTableCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8FD18A2AFB7E6C00354482 /* AssetNetworksTableCell.swift */; }; FA8FD18E2AFBA2EA00354482 /* AssetNetworksTableCellModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8FD18D2AFBA2EA00354482 /* AssetNetworksTableCellModel.swift */; }; @@ -2467,8 +2691,6 @@ FA93A313283653B70021330F /* ValidatorListFilterFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA93A312283653B70021330F /* ValidatorListFilterFlow.swift */; }; FA93A3162836542D0021330F /* ValidatorListFilterRelaychainViewModelState.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA93A3152836542D0021330F /* ValidatorListFilterRelaychainViewModelState.swift */; }; FA93A3182836543B0021330F /* ValidatorListFilterRelaychainViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA93A3172836543B0021330F /* ValidatorListFilterRelaychainViewModelFactory.swift */; }; - FA93D1F72C61E52C006B494E /* BlockExplorerApiKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA93D1F62C61E52C006B494E /* BlockExplorerApiKey.swift */; }; - FA9464252C5CC434001E810F /* LiquidityPoolDetailsInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA9464242C5CC434001E810F /* LiquidityPoolDetailsInput.swift */; }; FA97E68B2A0281230035F5D7 /* GiantsquidRewardOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA97E68A2A0281230035F5D7 /* GiantsquidRewardOperationFactory.swift */; }; FA99422827FE925000D771E5 /* UISwitch+CustomSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA99422727FE925000D771E5 /* UISwitch+CustomSize.swift */; }; FA99422D28002BB800D771E5 /* MissingAccountOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA99422C28002BB800D771E5 /* MissingAccountOptions.swift */; }; @@ -2641,18 +2863,10 @@ FAB0EDE227AA9C94003D93C2 /* NodeSelectionTableCellViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB0EDE127AA9C94003D93C2 /* NodeSelectionTableCellViewModel.swift */; }; FAB16A312A9C9BBF00E71F43 /* NftCollectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB16A302A9C9BBF00E71F43 /* NftCollectionCell.swift */; }; FAB16A342A9C9BD000E71F43 /* NftCellViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB16A332A9C9BD000E71F43 /* NftCellViewModel.swift */; }; - FAB482EB2C58A8AA00594D89 /* Web3 in Frameworks */ = {isa = PBXBuildFile; productRef = FAB482EA2C58A8AA00594D89 /* Web3 */; }; - FAB482ED2C58A8AA00594D89 /* Web3ContractABI in Frameworks */ = {isa = PBXBuildFile; productRef = FAB482EC2C58A8AA00594D89 /* Web3ContractABI */; }; - FAB482EF2C58A8AA00594D89 /* Web3PromiseKit in Frameworks */ = {isa = PBXBuildFile; productRef = FAB482EE2C58A8AA00594D89 /* Web3PromiseKit */; }; - FAB482F12C58AC7F00594D89 /* ChainModel+Nomis.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB482F02C58AC7F00594D89 /* ChainModel+Nomis.swift */; }; FAB707622BB317D300A1131C /* CrossChainViewLoadingCollector.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB707612BB317D300A1131C /* CrossChainViewLoadingCollector.swift */; }; FAB707652BB3C06900A1131C /* AssetsAccountRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB707642BB3C06900A1131C /* AssetsAccountRequest.swift */; }; FAB707672BB3C1A400A1131C /* AssetAccountInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB707662BB3C1A400A1131C /* AssetAccountInfo.swift */; }; FAB8B96E29F23FCB002E5F04 /* ChainAccountBalanceViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB8B96D29F23FCA002E5F04 /* ChainAccountBalanceViewModel.swift */; }; - FAB90CE92C6F584000D13804 /* ChainSelectionCollectionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB90CE82C6F584000D13804 /* ChainSelectionCollectionCell.swift */; }; - FAB90CED2C6F5B2A00D13804 /* ChainSelectionCollectionCellModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB90CEC2C6F5B2A00D13804 /* ChainSelectionCollectionCellModel.swift */; }; - FAB90CEF2C6F5B4F00D13804 /* MultichainAssetSelectionViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB90CEE2C6F5B4F00D13804 /* MultichainAssetSelectionViewModelFactory.swift */; }; - FAB90CF12C73351C00D13804 /* UIImage+ColorsInvert.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB90CF02C73351C00D13804 /* UIImage+ColorsInvert.swift */; }; FABA161B2B0C941B001AF2F0 /* MultiassetV11MigrationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = FABA161A2B0C941B001AF2F0 /* MultiassetV11MigrationPolicy.swift */; }; FABA161D2B0C94CA001AF2F0 /* UserDataModelV10toV11.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = FABA161C2B0C94C9001AF2F0 /* UserDataModelV10toV11.xcmappingmodel */; }; FABA162D2B0C9504001AF2F0 /* TabBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = FABA162C2B0C9504001AF2F0 /* TabBar.swift */; }; @@ -2674,16 +2888,9 @@ FAC0BBD0291D0EB000E6F106 /* TipViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBB6291D0EAF00E6F106 /* TipViewModel.swift */; }; FAC0BBD1291D0EB000E6F106 /* RecipientViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBB7291D0EAF00E6F106 /* RecipientViewModel.swift */; }; FAC0BBD2291D0EB000E6F106 /* SelectNetworkViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBB8291D0EAF00E6F106 /* SelectNetworkViewModel.swift */; }; - FAC0BBD3291D0EB000E6F106 /* SendDependencyContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBB9291D0EAF00E6F106 /* SendDependencyContainer.swift */; }; - FAC0BBD4291D0EB000E6F106 /* SendPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBBA291D0EAF00E6F106 /* SendPresenter.swift */; }; - FAC0BBD5291D0EB000E6F106 /* SendProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBBB291D0EAF00E6F106 /* SendProtocols.swift */; }; FAC0BBD6291D0EB000E6F106 /* SendFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBBC291D0EAF00E6F106 /* SendFlow.swift */; }; FAC0BBD7291D0EB000E6F106 /* SendViewLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBBD291D0EAF00E6F106 /* SendViewLayout.swift */; }; - FAC0BBD8291D0EB000E6F106 /* SendAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBBE291D0EAF00E6F106 /* SendAssembly.swift */; }; - FAC0BBD9291D0EB000E6F106 /* SendViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBBF291D0EAF00E6F106 /* SendViewController.swift */; }; - FAC0BBDA291D0EB000E6F106 /* SendRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBC0291D0EAF00E6F106 /* SendRouter.swift */; }; FAC0BBDB291D0EB000E6F106 /* SendDataValidatingFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBC2291D0EAF00E6F106 /* SendDataValidatingFactory.swift */; }; - FAC0BBDC291D0EB000E6F106 /* SendInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBC3291D0EAF00E6F106 /* SendInteractor.swift */; }; FAC0BBDD291D0EB000E6F106 /* SelectAssetViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBC6291D0EB000E6F106 /* SelectAssetViewModelFactory.swift */; }; FAC0BBDE291D0EB000E6F106 /* SelectAssetAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBC7291D0EB000E6F106 /* SelectAssetAssembly.swift */; }; FAC0BBDF291D0EB000E6F106 /* SelectAssetRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC0BBC8291D0EB000E6F106 /* SelectAssetRouter.swift */; }; @@ -2775,12 +2982,6 @@ FAD067D12C20453E0050291F /* DefaultEraStakersFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD067CE2C20453E0050291F /* DefaultEraStakersFetching.swift */; }; FAD067D32C20550B0050291F /* UIImageView+Shimmered.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD067D22C20550B0050291F /* UIImageView+Shimmered.swift */; }; FAD067D52C214E7C0050291F /* LiquidityPoolsConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD067D42C214E7C0050291F /* LiquidityPoolsConstants.swift */; }; - FAD240D62C64D3D100B389FF /* ZChainHistoryOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD240D52C64D3D100B389FF /* ZChainHistoryOperationFactory.swift */; }; - FAD240D92C64D3FF00B389FF /* ZChainHistoryResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD240D82C64D3FF00B389FF /* ZChainHistoryResponse.swift */; }; - FAD240DB2C64E22B00B389FF /* AssetTransactionData+ZChainHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD240DA2C64E22A00B389FF /* AssetTransactionData+ZChainHistory.swift */; }; - FAD240DE2C64E97900B389FF /* KaiaHistoryResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD240DD2C64E97900B389FF /* KaiaHistoryResponse.swift */; }; - FAD240E02C64EA1D00B389FF /* KaiaHistoryOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD240DF2C64EA1D00B389FF /* KaiaHistoryOperationFactory.swift */; }; - FAD240E22C64EA6E00B389FF /* AssetTransactionData+KaiaHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD240E12C64EA6E00B389FF /* AssetTransactionData+KaiaHistory.swift */; }; FAD428942A834A8E001D6A16 /* TopViewControllerHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD428932A834A8E001D6A16 /* TopViewControllerHelper.swift */; }; FAD428962A834BA8001D6A16 /* UIApplication+TopViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD428952A834BA8001D6A16 /* UIApplication+TopViewController.swift */; }; FAD428982A860C9B001D6A16 /* EthereumNodeFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD428972A860C9B001D6A16 /* EthereumNodeFetching.swift */; }; @@ -2857,10 +3058,6 @@ FAD429362A8656B7001D6A16 /* UICollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD429342A8656B7001D6A16 /* UICollectionView.swift */; }; FAD558CB298933F8008AA5A8 /* ChainModelGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84F13F0F26F1DC43006725FF /* ChainModelGenerator.swift */; }; FAD558CC298A17A1008AA5A8 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 842D1E8F24D20B1500C30A7A /* Constants.swift */; }; - FAD5FF252C463C07003201F5 /* AccountStatisticsFetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD5FF242C463C07003201F5 /* AccountStatisticsFetching.swift */; }; - FAD5FF272C463C4F003201F5 /* AccountStatistics.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD5FF262C463C4F003201F5 /* AccountStatistics.swift */; }; - FAD5FF2B2C46464B003201F5 /* NomisAccountStatisticsFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD5FF2A2C46464B003201F5 /* NomisAccountStatisticsFetcher.swift */; }; - FAD5FF2E2C464717003201F5 /* NomisAccountStatisticsRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD5FF2D2C464717003201F5 /* NomisAccountStatisticsRequest.swift */; }; FAD646C2284DD2CF007CCB92 /* StakingBalanceRelaychainStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD646C1284DD2CF007CCB92 /* StakingBalanceRelaychainStrategy.swift */; }; FAD646C4284DD2DA007CCB92 /* StakingBalanceRelaychainViewModelState.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD646C3284DD2DA007CCB92 /* StakingBalanceRelaychainViewModelState.swift */; }; FAD646C6284DD2E5007CCB92 /* StakingBalanceRelaychainViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD646C5284DD2E5007CCB92 /* StakingBalanceRelaychainViewModelFactory.swift */; }; @@ -2903,7 +3100,6 @@ FAEDC1392820E62F00E6582C /* StakingAmountRelaychainViewModelState.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAEDC1382820E62F00E6582C /* StakingAmountRelaychainViewModelState.swift */; }; FAEDC13D2820F59100E6582C /* StakingAmountViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAEDC13C2820F59100E6582C /* StakingAmountViewModel.swift */; }; FAEDC13F2821264E00E6582C /* StakingAmountRelaychainViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAEDC13E2821264E00E6582C /* StakingAmountRelaychainViewModelFactory.swift */; }; - FAEFA6D52C6DCF7C00095C07 /* NetworkRequestUrlParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAEFA6D42C6DCF7C00095C07 /* NetworkRequestUrlParameters.swift */; }; FAF5E9CD27E46D3E005A3448 /* GithubJSONDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF5E9CA27E46D3E005A3448 /* GithubJSONDecoder.swift */; }; FAF5E9CE27E46D3E005A3448 /* URLConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF5E9CC27E46D3E005A3448 /* URLConstants.swift */; }; FAF5E9D127E46D6A005A3448 /* AppVersionObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF5E9D027E46D6A005A3448 /* AppVersionObserver.swift */; }; @@ -2914,10 +3110,6 @@ FAF5E9DC27E46DAA005A3448 /* RootViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF5E9DA27E46DAA005A3448 /* RootViewController.swift */; }; FAF5E9DE27E46DCC005A3448 /* String+VersionComparsion.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF5E9DD27E46DCC005A3448 /* String+VersionComparsion.swift */; }; FAF5E9E127E4A4C1005A3448 /* RootViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF5E9E027E4A4C1005A3448 /* RootViewModel.swift */; }; - FAF600752C48D79600E56558 /* Cosmos in Frameworks */ = {isa = PBXBuildFile; productRef = FAF600742C48D79600E56558 /* Cosmos */; }; - FAF600772C48F08B00E56558 /* AccountScoreView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF600762C48F08B00E56558 /* AccountScoreView.swift */; }; - FAF6007A2C48F12000E56558 /* AccountScoreViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF600792C48F12000E56558 /* AccountScoreViewModel.swift */; }; - FAF6D90D2C57654F00274E69 /* Decimal+Formatting.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF6D90C2C57654F00274E69 /* Decimal+Formatting.swift */; }; FAF92E6627B4275F005467CE /* Bool+ToInt.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF92E6527B4275E005467CE /* Bool+ToInt.swift */; }; FAF96B582B636FC700E299C1 /* SystemNumberRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF96B572B636FC700E299C1 /* SystemNumberRequest.swift */; }; FAF9C2962AAADE3300A61D21 /* DeprecatedControllerStashAccountCheckService.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF9C2952AAADE3300A61D21 /* DeprecatedControllerStashAccountCheckService.swift */; }; @@ -2932,9 +3124,7 @@ FAF9C2B32AAF3FDF00A61D21 /* GetPreinstalledWalletViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF9C2AC2AAF3FDF00A61D21 /* GetPreinstalledWalletViewController.swift */; }; FAF9C2B42AAF3FDF00A61D21 /* GetPreinstalledWalletProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF9C2AD2AAF3FDF00A61D21 /* GetPreinstalledWalletProtocols.swift */; }; FAF9C2B72AAF3FF100A61D21 /* GetPreinstalledWalletTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF9C2B62AAF3FF100A61D21 /* GetPreinstalledWalletTests.swift */; }; - FAFB47D72ABD589C0008F8CA /* EthereumBalanceRepositoryCacheWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAFB47D62ABD589C0008F8CA /* EthereumBalanceRepositoryCacheWrapper.swift */; }; - FAFB5EE02C5A11A30015D3DD /* AccountScoreSettingsChanged.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAFB5EDF2C5A11A30015D3DD /* AccountScoreSettingsChanged.swift */; }; - FAFB5EE22C5A2CE80015D3DD /* FWCosmosView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAFB5EE12C5A2CE80015D3DD /* FWCosmosView.swift */; }; + FAFB47D72ABD589C0008F8CA /* BalanceRepositoryCacheWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAFB47D62ABD589C0008F8CA /* BalanceRepositoryCacheWrapper.swift */; }; FAFBEE81284621800036D08C /* SelectedValidatorListParachainViewModelState.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAFBEE80284621800036D08C /* SelectedValidatorListParachainViewModelState.swift */; }; FAFBEE83284621900036D08C /* SelectedValidatorListParachainViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAFBEE82284621900036D08C /* SelectedValidatorListParachainViewModelFactory.swift */; }; FAFDB2C329112A00003971FB /* SubstrateCallPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAFDB2C229112A00003971FB /* SubstrateCallPath.swift */; }; @@ -3027,17 +3217,157 @@ 002A29AE58EB53E915330490 /* ControllerAccountViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountViewFactory.swift; sourceTree = ""; }; 0033D320A9033F5200279087 /* SelectedValidatorListFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectedValidatorListFlow.swift; sourceTree = ""; }; 003FA37F2B240C5D7605340D /* StakingMainInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingMainInteractor.swift; sourceTree = ""; }; + 014B8F922BD4E7BFB8D1483D /* TonWebBridgeInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TonWebBridgeInteractor.swift; sourceTree = ""; }; 01A85735F958D05CFEFCB4DF /* NftSendRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendRouter.swift; sourceTree = ""; }; 025F392269B990931ADBE8F6 /* ControllerAccountConfirmationTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountConfirmationTests.swift; sourceTree = ""; }; 02ACCC85B2CCF3D9392CA9B4 /* CrowdloanListProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanListProtocols.swift; sourceTree = ""; }; 03EFBB5CE05706ADFEF00796 /* PolkaswapTransaktionSettingsRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapTransaktionSettingsRouter.swift; sourceTree = ""; }; 04361405728BBC71AD2D014F /* WarningAlertInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WarningAlertInteractor.swift; sourceTree = ""; }; 04806331BF10F63A49326941 /* NetworkInfoWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkInfoWireframe.swift; sourceTree = ""; }; - 0484D190E85F4EFAF5EC33EE /* MultichainAssetSelectionViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MultichainAssetSelectionViewLayout.swift; sourceTree = ""; }; 04EF69DFE142600FF2708A13 /* ControllerAccountConfirmationViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountConfirmationViewController.swift; sourceTree = ""; }; + 0524F9F46A9D77159B2B14FE /* TransferPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TransferPresenter.swift; sourceTree = ""; }; 0533F9E531CDFB721D697769 /* YourValidatorListPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = YourValidatorListPresenter.swift; sourceTree = ""; }; - 0542BF70B1BADBF1459D57FB /* AccountStatisticsInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountStatisticsInteractor.swift; sourceTree = ""; }; 06F6B892F62579DE761073CA /* LiquidityPoolSupplyConfirmPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmPresenter.swift; sourceTree = ""; }; + 0701B88B2C78F34A00DCD395 /* AccountStatisticsViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountStatisticsViewModel.swift; sourceTree = ""; }; + 0701B88C2C78F34A00DCD395 /* AccountStatisticsViewModelFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountStatisticsViewModelFactory.swift; sourceTree = ""; }; + 0701B88E2C78F34A00DCD395 /* AccountStatisticsAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountStatisticsAssembly.swift; sourceTree = ""; }; + 0701B88F2C78F34A00DCD395 /* AccountStatisticsInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountStatisticsInteractor.swift; sourceTree = ""; }; + 0701B8902C78F34A00DCD395 /* AccountStatisticsPresentable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountStatisticsPresentable.swift; sourceTree = ""; }; + 0701B8912C78F34A00DCD395 /* AccountStatisticsPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountStatisticsPresenter.swift; sourceTree = ""; }; + 0701B8922C78F34A00DCD395 /* AccountStatisticsProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountStatisticsProtocols.swift; sourceTree = ""; }; + 0701B8932C78F34A00DCD395 /* AccountStatisticsRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountStatisticsRouter.swift; sourceTree = ""; }; + 0701B8942C78F34A00DCD395 /* AccountStatisticsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountStatisticsViewController.swift; sourceTree = ""; }; + 0701B8952C78F34A00DCD395 /* AccountStatisticsViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountStatisticsViewLayout.swift; sourceTree = ""; }; + 0701B8A42C78F5DB00DCD395 /* BlockscoutHistoryOperationFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BlockscoutHistoryOperationFactory.swift; sourceTree = ""; }; + 0701B8A52C78F5DB00DCD395 /* ViscanHistoryOperationFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViscanHistoryOperationFactory.swift; sourceTree = ""; }; + 0701B8A62C78F5DB00DCD395 /* ZChainHistoryOperationFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ZChainHistoryOperationFactory.swift; sourceTree = ""; }; + 0701B8A72C78F5DB00DCD395 /* FireHistoryOperationFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FireHistoryOperationFactory.swift; sourceTree = ""; }; + 0701B8A82C78F5DB00DCD395 /* KaiaHistoryOperationFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KaiaHistoryOperationFactory.swift; sourceTree = ""; }; + 0701B8AE2C78F63400DCD395 /* InfoTitleView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InfoTitleView.swift; sourceTree = ""; }; + 0701B8AF2C78F63400DCD395 /* AccountScoreView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountScoreView.swift; sourceTree = ""; }; + 0701B8B32C78F69400DCD395 /* UIImage+ColorsInvert.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIImage+ColorsInvert.swift"; sourceTree = ""; }; + 0701B8B42C78F69400DCD395 /* BlockExplorerType+Filters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "BlockExplorerType+Filters.swift"; sourceTree = ""; }; + 0701B8B52C78F69400DCD395 /* FWCosmosView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FWCosmosView.swift; sourceTree = ""; }; + 0701B8B62C78F69500DCD395 /* ChainModel+Nomis.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "ChainModel+Nomis.swift"; sourceTree = ""; }; + 0701B8B72C78F69500DCD395 /* Decimal+Formatting.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Decimal+Formatting.swift"; sourceTree = ""; }; + 0701B8BD2C78F6C300DCD395 /* AccountScoreViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountScoreViewModel.swift; sourceTree = ""; }; + 0701B8C02C78F71800DCD395 /* TonConnectError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectError.swift; sourceTree = ""; }; + 0701B8C12C78F71800DCD395 /* TonConnectEvent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectEvent.swift; sourceTree = ""; }; + 0701B8C22C78F71800DCD395 /* TonConnectManifest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectManifest.swift; sourceTree = ""; }; + 0701B8C32C78F71800DCD395 /* TonConnectParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectParameters.swift; sourceTree = ""; }; + 0701B8C42C78F71800DCD395 /* TonConnectRequestPayload.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectRequestPayload.swift; sourceTree = ""; }; + 0701B8C62C78F71800DCD395 /* NomisAccountStatisticsRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NomisAccountStatisticsRequest.swift; sourceTree = ""; }; + 0701B8C82C78F71800DCD395 /* NomisAccountStatisticsFetcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NomisAccountStatisticsFetcher.swift; sourceTree = ""; }; + 0701B8C92C78F71800DCD395 /* NomisJSONDecoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NomisJSONDecoder.swift; sourceTree = ""; }; + 0701B8CA2C78F71800DCD395 /* NomisRequestSigner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NomisRequestSigner.swift; sourceTree = ""; }; + 0701B8CC2C78F71800DCD395 /* AccountStatisticsFetching.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountStatisticsFetching.swift; sourceTree = ""; }; + 0701B8CE2C78F71800DCD395 /* OKXDexAllTokensRequestParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexAllTokensRequestParameters.swift; sourceTree = ""; }; + 0701B8CF2C78F71800DCD395 /* OKXDexApproveRequestParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexApproveRequestParameters.swift; sourceTree = ""; }; + 0701B8D02C78F71800DCD395 /* OKXDexLiquiditySourceRequestParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexLiquiditySourceRequestParameters.swift; sourceTree = ""; }; + 0701B8D12C78F71800DCD395 /* OKXDexQuotesRequestParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexQuotesRequestParameters.swift; sourceTree = ""; }; + 0701B8D22C78F71800DCD395 /* OKXDexSwapRequestParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexSwapRequestParameters.swift; sourceTree = ""; }; + 0701B8D52C78F71800DCD395 /* OKXApproveTransaction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXApproveTransaction.swift; sourceTree = ""; }; + 0701B8D62C78F71800DCD395 /* OKXDexProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexProtocol.swift; sourceTree = ""; }; + 0701B8D72C78F71800DCD395 /* OKXDexQuote.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexQuote.swift; sourceTree = ""; }; + 0701B8D82C78F71800DCD395 /* OKXDexRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexRouter.swift; sourceTree = ""; }; + 0701B8D92C78F71800DCD395 /* OKXDexSubrouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexSubrouter.swift; sourceTree = ""; }; + 0701B8DA2C78F71800DCD395 /* OKXLiquiditySource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXLiquiditySource.swift; sourceTree = ""; }; + 0701B8DB2C78F71800DCD395 /* OKXQuote.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXQuote.swift; sourceTree = ""; }; + 0701B8DC2C78F71800DCD395 /* OKXResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXResponse.swift; sourceTree = ""; }; + 0701B8DD2C78F71800DCD395 /* OKXSupportedChain.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXSupportedChain.swift; sourceTree = ""; }; + 0701B8DE2C78F71800DCD395 /* OKXSwap.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXSwap.swift; sourceTree = ""; }; + 0701B8DF2C78F71800DCD395 /* OKXSwapTransaction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXSwapTransaction.swift; sourceTree = ""; }; + 0701B8E02C78F71800DCD395 /* OKXToken.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXToken.swift; sourceTree = ""; }; + 0701B8E22C78F71800DCD395 /* OKXDexRequestSigner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexRequestSigner.swift; sourceTree = ""; }; + 0701B8E42C78F71800DCD395 /* OKXDexAggregatorService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexAggregatorService.swift; sourceTree = ""; }; + 0701B9082C78FAF000DCD395 /* LiquidityPools+ViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "LiquidityPools+ViewModel.swift"; sourceTree = ""; }; + 0701B9092C78FAF000DCD395 /* LiquidityPoolsConstants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsConstants.swift; sourceTree = ""; }; + 0701B90B2C78FAF000DCD395 /* assets.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = assets.json; sourceTree = ""; }; + 0701B90C2C78FAF000DCD395 /* chains.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = chains.json; sourceTree = ""; }; + 0701B90D2C78FAF000DCD395 /* dapps.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = dapps.json; sourceTree = ""; }; + 0701B90E2C78FAF000DCD395 /* polkadot-9370metadata */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "polkadot-9370metadata"; sourceTree = ""; }; + 0701B90F2C78FAF000DCD395 /* polkaswapSettings.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = polkaswapSettings.json; sourceTree = ""; }; + 0701B9102C78FAF000DCD395 /* runtime-default.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "runtime-default.json"; sourceTree = ""; }; + 0701B9112C78FAF000DCD395 /* runtime-empty.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "runtime-empty.json"; sourceTree = ""; }; + 0701B9122C78FAF000DCD395 /* runtime-kusama.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "runtime-kusama.json"; sourceTree = ""; }; + 0701B9132C78FAF000DCD395 /* runtime-polkadot.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "runtime-polkadot.json"; sourceTree = ""; }; + 0701B9142C78FAF000DCD395 /* runtime-rococo.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "runtime-rococo.json"; sourceTree = ""; }; + 0701B9152C78FAF000DCD395 /* runtime-westend.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "runtime-westend.json"; sourceTree = ""; }; + 0701B9162C78FAF000DCD395 /* types.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = types.json; sourceTree = ""; }; + 0701B9182C78FAF000DCD395 /* LiquidityPoolDetailsViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsViewModel.swift; sourceTree = ""; }; + 0701B9192C78FAF000DCD395 /* LiquidityPoolDetailsViewModelFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsViewModelFactory.swift; sourceTree = ""; }; + 0701B91B2C78FAF000DCD395 /* LiquidityPoolDetailsAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsAssembly.swift; sourceTree = ""; }; + 0701B91C2C78FAF000DCD395 /* LiquidityPoolDetailsInput.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsInput.swift; sourceTree = ""; }; + 0701B91D2C78FAF000DCD395 /* LiquidityPoolDetailsInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsInteractor.swift; sourceTree = ""; }; + 0701B91E2C78FAF000DCD395 /* LiquidityPoolDetailsPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsPresenter.swift; sourceTree = ""; }; + 0701B91F2C78FAF000DCD395 /* LiquidityPoolDetailsProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsProtocols.swift; sourceTree = ""; }; + 0701B9202C78FAF000DCD395 /* LiquidityPoolDetailsRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsRouter.swift; sourceTree = ""; }; + 0701B9212C78FAF000DCD395 /* LiquidityPoolDetailsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsViewController.swift; sourceTree = ""; }; + 0701B9222C78FAF000DCD395 /* LiquidityPoolDetailsViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsViewLayout.swift; sourceTree = ""; }; + 0701B9242C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityAssembly.swift; sourceTree = ""; }; + 0701B9252C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityInteractor.swift; sourceTree = ""; }; + 0701B9262C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityPresenter.swift; sourceTree = ""; }; + 0701B9272C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityProtocols.swift; sourceTree = ""; }; + 0701B9282C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityRouter.swift; sourceTree = ""; }; + 0701B9292C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityViewController.swift; sourceTree = ""; }; + 0701B92A2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityViewLayout.swift; sourceTree = ""; }; + 0701B92C2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityConfirmAssembly.swift; sourceTree = ""; }; + 0701B92D2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityConfirmProtocols.swift; sourceTree = ""; }; + 0701B92E2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityConfirmViewController.swift; sourceTree = ""; }; + 0701B92F2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityConfirmViewLayout.swift; sourceTree = ""; }; + 0701B9312C78FAF000DCD395 /* AvailableLiquidityPoolsListInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AvailableLiquidityPoolsListInteractor.swift; sourceTree = ""; }; + 0701B9322C78FAF000DCD395 /* AvailableLiquidityPoolsListPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AvailableLiquidityPoolsListPresenter.swift; sourceTree = ""; }; + 0701B9332C78FAF000DCD395 /* AvailableLiquidityPoolsListViewModelFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AvailableLiquidityPoolsListViewModelFactory.swift; sourceTree = ""; }; + 0701B9352C78FAF000DCD395 /* UserLiquidityPoolsListInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserLiquidityPoolsListInteractor.swift; sourceTree = ""; }; + 0701B9362C78FAF000DCD395 /* UserLiquidityPoolsListPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserLiquidityPoolsListPresenter.swift; sourceTree = ""; }; + 0701B9372C78FAF000DCD395 /* UserLiquidityPoolsListViewModelFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserLiquidityPoolsListViewModelFactory.swift; sourceTree = ""; }; + 0701B93A2C78FAF000DCD395 /* LiquidityPoolListCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolListCell.swift; sourceTree = ""; }; + 0701B93C2C78FAF000DCD395 /* LiquidityPoolListCellModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolListCellModel.swift; sourceTree = ""; }; + 0701B93D2C78FAF000DCD395 /* LiquidityPoolListType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolListType.swift; sourceTree = ""; }; + 0701B93E2C78FAF000DCD395 /* LiquidityPoolListViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolListViewModel.swift; sourceTree = ""; }; + 0701B9402C78FAF000DCD395 /* LiquidityPoolsListAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsListAssembly.swift; sourceTree = ""; }; + 0701B9412C78FAF000DCD395 /* LiquidityPoolsListProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsListProtocols.swift; sourceTree = ""; }; + 0701B9422C78FAF000DCD395 /* LiquidityPoolsListRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsListRouter.swift; sourceTree = ""; }; + 0701B9432C78FAF000DCD395 /* LiquidityPoolsListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsListViewController.swift; sourceTree = ""; }; + 0701B9442C78FAF000DCD395 /* LiquidityPoolsListViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsListViewLayout.swift; sourceTree = ""; }; + 0701B9462C78FAF000DCD395 /* LiquidityPoolsOverviewAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewAssembly.swift; sourceTree = ""; }; + 0701B9472C78FAF000DCD395 /* LiquidityPoolsOverviewInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewInteractor.swift; sourceTree = ""; }; + 0701B9482C78FAF000DCD395 /* LiquidityPoolsOverviewPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewPresenter.swift; sourceTree = ""; }; + 0701B9492C78FAF000DCD395 /* LiquidityPoolsOverviewProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewProtocols.swift; sourceTree = ""; }; + 0701B94A2C78FAF000DCD395 /* LiquidityPoolsOverviewRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewRouter.swift; sourceTree = ""; }; + 0701B94B2C78FAF000DCD395 /* LiquidityPoolsOverviewViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewViewController.swift; sourceTree = ""; }; + 0701B94C2C78FAF000DCD395 /* LiquidityPoolsOverviewViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewViewLayout.swift; sourceTree = ""; }; + 0701B94E2C78FAF000DCD395 /* LiquidityPoolSupplyViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyViewModel.swift; sourceTree = ""; }; + 0701B94F2C78FAF000DCD395 /* LiquidityPoolSupplyViewModelFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyViewModelFactory.swift; sourceTree = ""; }; + 0701B9512C78FAF000DCD395 /* LiquidityPoolSupplyAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyAssembly.swift; sourceTree = ""; }; + 0701B9522C78FAF000DCD395 /* LiquidityPoolSupplyInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyInteractor.swift; sourceTree = ""; }; + 0701B9532C78FAF000DCD395 /* LiquidityPoolSupplyPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyPresenter.swift; sourceTree = ""; }; + 0701B9542C78FAF000DCD395 /* LiquidityPoolSupplyProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyProtocols.swift; sourceTree = ""; }; + 0701B9552C78FAF000DCD395 /* LiquidityPoolSupplyRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyRouter.swift; sourceTree = ""; }; + 0701B9562C78FAF000DCD395 /* LiquidityPoolSupplyViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyViewController.swift; sourceTree = ""; }; + 0701B9572C78FAF000DCD395 /* LiquidityPoolSupplyViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyViewLayout.swift; sourceTree = ""; }; + 0701B9592C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmViewModel.swift; sourceTree = ""; }; + 0701B95A2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewModelFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmViewModelFactory.swift; sourceTree = ""; }; + 0701B95C2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmAssembly.swift; sourceTree = ""; }; + 0701B95D2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmInteractor.swift; sourceTree = ""; }; + 0701B95E2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmPresenter.swift; sourceTree = ""; }; + 0701B95F2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmProtocols.swift; sourceTree = ""; }; + 0701B9602C78FAF000DCD395 /* LiquidityPoolSupplyConfirmRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmRouter.swift; sourceTree = ""; }; + 0701B9612C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmViewController.swift; sourceTree = ""; }; + 0701B9622C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmViewLayout.swift; sourceTree = ""; }; + 0701B9B02C78FB5600DCD395 /* NetworkRequestUrlParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkRequestUrlParameters.swift; sourceTree = ""; }; + 0701B9B22C78FBC600DCD395 /* AccountStatistics.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountStatistics.swift; sourceTree = ""; }; + 0701B9B42C78FD2000DCD395 /* BlockExplorerApiKey.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BlockExplorerApiKey.swift; sourceTree = ""; }; + 0701B9B62C78FD8800DCD395 /* KaiaHistoryResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KaiaHistoryResponse.swift; sourceTree = ""; }; + 0701B9B82C78FD8800DCD395 /* ZChainHistoryResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ZChainHistoryResponse.swift; sourceTree = ""; }; + 0701B9BA2C78FD8800DCD395 /* 5ireHistoryResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = 5ireHistoryResponse.swift; sourceTree = ""; }; + 0701B9BC2C78FD8800DCD395 /* VicscanHistoryResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VicscanHistoryResponse.swift; sourceTree = ""; }; + 0701B9C22C78FDDF00DCD395 /* AssetTransactionData+FireHistory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+FireHistory.swift"; sourceTree = ""; }; + 0701B9C32C78FDDF00DCD395 /* AssetTransactionData+ZChainHistory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+ZChainHistory.swift"; sourceTree = ""; }; + 0701B9C42C78FDE000DCD395 /* AssetTransactionData+VicscanHistory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+VicscanHistory.swift"; sourceTree = ""; }; + 0701B9C52C78FDE000DCD395 /* AssetTransactionData+KaiaHistory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+KaiaHistory.swift"; sourceTree = ""; }; + 0701B9CA2C78FE2C00DCD395 /* ScamInfoFetcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScamInfoFetcher.swift; sourceTree = ""; }; + 0701B9CC2C78FF7900DCD395 /* AccountScoreSettingsChanged.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccountScoreSettingsChanged.swift; sourceTree = ""; }; 0702B31429701759003519F5 /* AmountInputViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AmountInputViewModel.swift; sourceTree = ""; }; 0702B31729701864003519F5 /* WalletViewModelObserverContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletViewModelObserverContainer.swift; sourceTree = ""; }; 0702B31929701884003519F5 /* MoneyPresentable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoneyPresentable.swift; sourceTree = ""; }; @@ -3069,19 +3399,48 @@ 070CDD812ACBE59700F3F20A /* ReceiveAndRequestAssetAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReceiveAndRequestAssetAssembly.swift; sourceTree = ""; }; 070CDD822ACBE59700F3F20A /* ReceiveAndRequestAssetProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReceiveAndRequestAssetProtocols.swift; sourceTree = ""; }; 070CDD832ACBE59700F3F20A /* ReceiveAndRequestAssetInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReceiveAndRequestAssetInteractor.swift; sourceTree = ""; }; + 070ED7D62C3FBB8800DF4098 /* SubstrateDataModel_v8.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = SubstrateDataModel_v8.xcdatamodel; sourceTree = ""; }; + 070ED7DA2C45321300DF4098 /* TonRemoteBalanceFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonRemoteBalanceFetching.swift; sourceTree = ""; }; 0713097C28C63893002B17D0 /* ScamSyncService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScamSyncService.swift; sourceTree = ""; }; 0713097E28C6F60D002B17D0 /* ScamSyncServiceFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScamSyncServiceFactory.swift; sourceTree = ""; }; 0713098028C6F7BB002B17D0 /* CDScamInfo+CoreDataCodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CDScamInfo+CoreDataCodable.swift"; sourceTree = ""; }; + 0715FCD32C65E96000AA674E /* TonWebBridgeHeaderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonWebBridgeHeaderView.swift; sourceTree = ""; }; + 0715FCD82C6608B700AA674E /* TonConnectMessageBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectMessageBuilder.swift; sourceTree = ""; }; + 0715FCDC2C660AF700AA674E /* DappBridgeMessageType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DappBridgeMessageType.swift; sourceTree = ""; }; + 0715FCDE2C661E1D00AA674E /* TonConnect.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnect.swift; sourceTree = ""; }; + 0715FCE02C6620B500AA674E /* DappBridgeResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DappBridgeResponse.swift; sourceTree = ""; }; + 0715FCE22C66262100AA674E /* TonConnectResponses+Encodable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "TonConnectResponses+Encodable.swift"; sourceTree = ""; }; + 0715FCE42C66378900AA674E /* TonConnectModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectModels.swift; sourceTree = ""; }; + 071606C32C7C6C2400C1DF75 /* PricesUpdated.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PricesUpdated.swift; sourceTree = ""; }; + 071606C52C7C6C3200C1DF75 /* PricesService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PricesService.swift; sourceTree = ""; }; + 071606C72C7C6C8700C1DF75 /* PriceDataHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PriceDataHelper.swift; sourceTree = ""; }; + 071606C82C7C6C8800C1DF75 /* AssetRepositoryFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssetRepositoryFactory.swift; sourceTree = ""; }; + 071606C92C7C6C8800C1DF75 /* AssetModelMapper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssetModelMapper.swift; sourceTree = ""; }; + 071606CE2C7CB91D00C1DF75 /* LocalToggleService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalToggleService.swift; sourceTree = ""; }; + 071606D02C7CB95500C1DF75 /* LocalListToggle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalListToggle.swift; sourceTree = ""; }; + 07165B1F2C6DDF4E00C11E3B /* fearless.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = fearless.entitlements; sourceTree = ""; }; 0716C83B28853ACA004C8CB1 /* WalletBalanceSubscriptionAdapter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletBalanceSubscriptionAdapter.swift; sourceTree = ""; }; 0716C84B288802EB004C8CB1 /* SwipableTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwipableTableViewCell.swift; sourceTree = ""; }; 0716C84D28880304004C8CB1 /* UITableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UITableViewCell.swift; sourceTree = ""; }; 0716C84E28880304004C8CB1 /* UIResponder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIResponder.swift; sourceTree = ""; }; 071BC67429274F47007685D1 /* HashCopiedEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HashCopiedEvent.swift; sourceTree = ""; }; 071BC676292B21CC007685D1 /* UIImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIImage.swift; sourceTree = ""; }; + 07230EAA2C73515E00B92466 /* DappDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DappDataSource.swift; sourceTree = ""; }; + 07230EAC2C735AA200B92466 /* DappBrowserViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DappBrowserViewModelFactory.swift; sourceTree = ""; }; + 07230EAE2C73608900B92466 /* DappBrowserViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DappBrowserViewModel.swift; sourceTree = ""; }; + 07230EB02C7456B900B92466 /* dapps.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = dapps.json; sourceTree = ""; }; + 0723ED9F2C48E37400880620 /* SoraQrTransferFlowUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoraQrTransferFlowUseCase.swift; sourceTree = ""; }; + 0723EDA32C49369D00880620 /* TransferFlowUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransferFlowUseCase.swift; sourceTree = ""; }; + 0723EDA52C50B87B00880620 /* BokoloTransferFlowUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BokoloTransferFlowUseCase.swift; sourceTree = ""; }; + 0723EDA72C50D6FD00880620 /* SubstrateTransferFlowUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubstrateTransferFlowUseCase.swift; sourceTree = ""; }; + 0723EDB12C50FAD900880620 /* EthereumTransferFlowUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EthereumTransferFlowUseCase.swift; sourceTree = ""; }; 0726FFAA2AC4399C00336D76 /* WalletConnectPolkadorSigner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletConnectPolkadorSigner.swift; sourceTree = ""; }; 0726FFAB2AC4399C00336D76 /* WalletConnectPolkadotParser.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletConnectPolkadotParser.swift; sourceTree = ""; }; 0726FFAE2AC439DE00336D76 /* WalletConnectExtrinsic.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletConnectExtrinsic.swift; sourceTree = ""; }; 0726FFAF2AC439DE00336D76 /* WalletConnectPolkadotSignature.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletConnectPolkadotSignature.swift; sourceTree = ""; }; + 0728BD152C984DA0002369FD /* ConnectedAccountsTableHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsTableHeaderView.swift; sourceTree = ""; }; + 0728BD172C984E7A002369FD /* ConnectedAccountsTableCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsTableCell.swift; sourceTree = ""; }; + 0728BD192C99474B002369FD /* ConnectedAccountsViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsViewModelFactory.swift; sourceTree = ""; }; 072EB84728E2A267007E70FF /* StakingPoolCreateConfirmViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateConfirmViewModelFactory.swift; sourceTree = ""; }; 072EB84928E2A2A1007E70FF /* StakingPoolCreateConfirmViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateConfirmViewModel.swift; sourceTree = ""; }; 073417AF298BA28300104F41 /* EqOraclePricePoint.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EqOraclePricePoint.swift; sourceTree = ""; }; @@ -3090,11 +3449,16 @@ 07349F3128FE5EEB00A802B9 /* SwipeCellButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwipeCellButton.swift; sourceTree = ""; }; 073B34BB2AE8CC4500DC5106 /* WalletConnectDisconnectService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletConnectDisconnectService.swift; sourceTree = ""; }; 073B34BE2AE91FE600DC5106 /* WalletConnectProposalDataValidating.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletConnectProposalDataValidating.swift; sourceTree = ""; }; + 073DE30B2C5B99D6003B4990 /* TonHistoryOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonHistoryOperationFactory.swift; sourceTree = ""; }; + 073DE30E2C5BA35B003B4990 /* TonModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonModels.swift; sourceTree = ""; }; + 073DE3102C5BB783003B4990 /* AssetTransactionData+Ton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+Ton.swift"; sourceTree = ""; }; 074EB7A9290B9E20000A2A6A /* ApplicationStatusAlertEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationStatusAlertEvent.swift; sourceTree = ""; }; 074EB7AC290B9F64000A2A6A /* AddressCopiedEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddressCopiedEvent.swift; sourceTree = ""; }; 074EB7AE290BA056000A2A6A /* ConnectionOfflineEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectionOfflineEvent.swift; sourceTree = ""; }; 074EB7B0290BA142000A2A6A /* ConnectionOnlineEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectionOnlineEvent.swift; sourceTree = ""; }; 075C646F28098AFB00A55094 /* EthereumConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EthereumConstants.swift; sourceTree = ""; }; + 075E5FCE2C7F1A180044C142 /* TonConnectServiceDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectServiceDelegate.swift; sourceTree = ""; }; + 075E5FD02C7F1A630044C142 /* TonConnectService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectService.swift; sourceTree = ""; }; 075FC63428D9AB1600E25263 /* CommonInputViewV2.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommonInputViewV2.swift; sourceTree = ""; }; 0761DEB128E1F54D00B90D2C /* StakingPoolCreateViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateViewModel.swift; sourceTree = ""; }; 0761DEB328E1F57600B90D2C /* StakingPoolCreateViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateViewModelFactory.swift; sourceTree = ""; }; @@ -3127,6 +3491,9 @@ 076D9D6129506CE3002762E3 /* polkaswapSettings.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = polkaswapSettings.json; sourceTree = ""; }; 076D9D6529507B39002762E3 /* PolkaswapSettingsFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PolkaswapSettingsFactory.swift; sourceTree = ""; }; 076D9D6729509F1C002762E3 /* PolkaswapSettingMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PolkaswapSettingMapper.swift; sourceTree = ""; }; + 077237792C819A6600D8061F /* TonConnectMessageBuilderImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectMessageBuilderImpl.swift; sourceTree = ""; }; + 0778A1292C5763D6008A1254 /* Task.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Task.swift; sourceTree = ""; }; + 0778A12D2C58D0F2008A1254 /* TonJettonInjector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonJettonInjector.swift; sourceTree = ""; }; 0783EEAD2AE1342F006476F4 /* UIColor+Gradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+Gradient.swift"; sourceTree = ""; }; 0783EEAF2AE1867A006476F4 /* WalletConnectEthereumTransferService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletConnectEthereumTransferService.swift; sourceTree = ""; }; 0783EEB12AE193F3006476F4 /* BokoloConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BokoloConstants.swift; sourceTree = ""; }; @@ -3136,10 +3503,13 @@ 07A4F5242B5004E60007C54A /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/InfoPlist.strings"; sourceTree = ""; }; 07A4F5252B5004E60007C54A /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/Localizable.strings"; sourceTree = ""; }; 07A4F5262B5004E60007C54A /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "pt-PT"; path = "pt-PT.lproj/Localizable.stringsdict"; sourceTree = ""; }; + 07A949832C466E8C00613B9D /* SubstrateRemoteBalanceFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubstrateRemoteBalanceFetching.swift; sourceTree = ""; }; + 07A949862C47C39800613B9D /* ServiceAssembly.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServiceAssembly.swift; sourceTree = ""; }; 07AC51122AD8040C000970B8 /* XorlessTransfer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XorlessTransfer.swift; sourceTree = ""; }; 07B018D028C7135400E05510 /* ScamInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScamInfo.swift; sourceTree = ""; }; 07B018D228C714B300E05510 /* ScamServiceOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScamServiceOperationFactory.swift; sourceTree = ""; }; 07B018DA28C9D66300E05510 /* ScamWarningExpandableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScamWarningExpandableView.swift; sourceTree = ""; }; + 07B56CF92C520B5B00E924AA /* TonTransferFlowUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonTransferFlowUseCase.swift; sourceTree = ""; }; 07B6BC7928B78E8000621864 /* SheetAlertPresentableStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SheetAlertPresentableStyle.swift; sourceTree = ""; }; 07B6BC7B28B875D800621864 /* UIControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIControl.swift; sourceTree = ""; }; 07B6BC7E28BC71DB00621864 /* NetworkIssuesNotificationViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkIssuesNotificationViewModelFactory.swift; sourceTree = ""; }; @@ -3150,12 +3520,18 @@ 07BF3D982B3D8BCD0046ABF4 /* ChainlinkOperationFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChainlinkOperationFactory.swift; sourceTree = ""; }; 07BF3D9A2B3D8C370046ABF4 /* ManualOperation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManualOperation.swift; sourceTree = ""; }; 07BF3D9C2B3D8C9B0046ABF4 /* AssetTransactionData+OklinkHistory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+OklinkHistory.swift"; sourceTree = ""; }; - 07BF3D9E2B3D98850046ABF4 /* BlockscoutHistoryOperationFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BlockscoutHistoryOperationFactory.swift; sourceTree = ""; }; 07BF3DA02B3D98BD0046ABF4 /* AssetTransactionData+Zeta.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+Zeta.swift"; sourceTree = ""; }; 07BFF8A52AD6635F005A5C58 /* WalletConnectConfirmationCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = WalletConnectConfirmationCoordinator.swift; path = "/Users/soramitsu/Documents/soramitsu/fearless-iOS/fearless/Modules/Coordinators/WalletConnectConfirmationCoordinator.swift"; sourceTree = ""; }; 07BFF8A92AD666CE005A5C58 /* AutoNamespacesError+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AutoNamespacesError+Extension.swift"; sourceTree = ""; }; 07C3397029178D390057C4A5 /* types.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = types.json; sourceTree = ""; }; 07C3397129189B720057C4A5 /* ChainsTypesSyncService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainsTypesSyncService.swift; sourceTree = ""; }; + 07C438D62C638B2900475B14 /* TonConnectServiceImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectServiceImpl.swift; sourceTree = ""; }; + 07C438D92C638BAA00475B14 /* TonConnectParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectParameters.swift; sourceTree = ""; }; + 07C438DB2C638BB800475B14 /* TonConnectRequestPayload.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectRequestPayload.swift; sourceTree = ""; }; + 07C438DD2C638D3900475B14 /* TonConnectManifest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectManifest.swift; sourceTree = ""; }; + 07CA72C22CD8A63F00EF5279 /* CDChainAccountMigrationPolicyV12.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CDChainAccountMigrationPolicyV12.swift; sourceTree = ""; }; + 07CA72C42CD8AD0100EF5279 /* CDMetaAccountMigrationPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CDMetaAccountMigrationPolicy.swift; sourceTree = ""; }; + 07CA73FA2CDDE27400EF5279 /* MetaAccountModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetaAccountModel.swift; sourceTree = ""; }; 07D05E4028EC08B800B66C70 /* StakinkPoolRewardCalculator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakinkPoolRewardCalculator.swift; sourceTree = ""; }; 07D05E4628EEFDC900B66C70 /* SelectValidatorsStartPoolStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartPoolStrategy.swift; sourceTree = ""; }; 07D05E4728EEFDC900B66C70 /* SelectValidatorsStartPoolViewModelState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartPoolViewModelState.swift; sourceTree = ""; }; @@ -3171,7 +3547,13 @@ 07D05E6328EF0BCC00B66C70 /* SelectValidatorsConfirmPoolViewModelState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsConfirmPoolViewModelState.swift; sourceTree = ""; }; 07D05E6428EF0BCC00B66C70 /* SelectValidatorsConfirmPoolStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsConfirmPoolStrategy.swift; sourceTree = ""; }; 07D05E6828EF0F2700B66C70 /* PoolNominateCall.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PoolNominateCall.swift; sourceTree = ""; }; + 07D0BD3A2C6E2282001ECD58 /* TonConnectUrlHandling.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectUrlHandling.swift; sourceTree = ""; }; + 07D0BD3D2C6F0CA0001ECD58 /* DappBrowserFeaturedView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DappBrowserFeaturedView.swift; sourceTree = ""; }; + 07D0BD402C6F0E9C001ECD58 /* BrowserExploreFeaturedCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrowserExploreFeaturedCell.swift; sourceTree = ""; }; + 07D0BD422C6F179E001ECD58 /* DappBrowserListCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DappBrowserListCell.swift; sourceTree = ""; }; + 07D0BD442C6F191C001ECD58 /* DappBrowserSectionHeaderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DappBrowserSectionHeaderView.swift; sourceTree = ""; }; 07DB9C087A812B3606897A78 /* NetworkInfoPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkInfoPresenter.swift; sourceTree = ""; }; + 07DCB8612CD363EF00A01C64 /* TonConstansts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConstansts.swift; sourceTree = ""; }; 07DE95AC28A1119400E9C2CB /* BalanceInfoRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BalanceInfoRouter.swift; sourceTree = ""; }; 07DE95AD28A1119400E9C2CB /* BalanceInfoAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BalanceInfoAssembly.swift; sourceTree = ""; }; 07DE95AE28A1119400E9C2CB /* BalanceInfoProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BalanceInfoProtocols.swift; sourceTree = ""; }; @@ -3203,6 +3585,21 @@ 07DFA455289B78E10035A8AB /* CopyableLabelView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CopyableLabelView.swift; path = fearless/Common/View/CopyableLabelView.swift; sourceTree = SOURCE_ROOT; }; 07DFA459289B8D520035A8AB /* WalletBalanceInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletBalanceInfo.swift; sourceTree = ""; }; 07E346D3288E616E00A8FAEC /* WalletBalanceBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletBalanceBuilder.swift; sourceTree = ""; }; + 07EC555A2CD8A3600074132E /* MultiAssetV12.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = MultiAssetV12.xcmappingmodel; sourceTree = ""; }; + 07ECB7F22C69CF13000E0A14 /* TonConnectDessision.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectDessision.swift; sourceTree = ""; }; + 07ECB7F42C69EDCE000E0A14 /* SessionStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionStatus.swift; sourceTree = ""; }; + 07ECB7F62C69F4A1000E0A14 /* TonDapp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonDapp.swift; sourceTree = ""; }; + 07ECB7F82C69F62F000E0A14 /* CDTonDapp+CoreDataDecodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CDTonDapp+CoreDataDecodable.swift"; sourceTree = ""; }; + 07ECB7FA2C6A07AF000E0A14 /* TonConnectAppRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectAppRequest.swift; sourceTree = ""; }; + 07ECB7FC2C6A07C1000E0A14 /* SendTransactionSignRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendTransactionSignRequest.swift; sourceTree = ""; }; + 07ECB7FE2C6A0BB2000E0A14 /* ConnectRequestVariant.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectRequestVariant.swift; sourceTree = ""; }; + 07ECB8002C6A0F9B000E0A14 /* TonConnectSendDessision.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectSendDessision.swift; sourceTree = ""; }; + 07ECB8022C6B4EA3000E0A14 /* TonConnectSessionCrypto.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectSessionCrypto.swift; sourceTree = ""; }; + 07ECB8042C6B71DE000E0A14 /* TonConnectApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectApp.swift; sourceTree = ""; }; + 07ECB8062C6B7380000E0A14 /* CDTonConnectedApp+CoreDataDecodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CDTonConnectedApp+CoreDataDecodable.swift"; sourceTree = ""; }; + 07ECB8082C6C6CDE000E0A14 /* TonConnectEventsCenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectEventsCenter.swift; sourceTree = ""; }; + 07ECB80A2C6C6E75000E0A14 /* TonConnectError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectError.swift; sourceTree = ""; }; + 07ECB80C2C6C7410000E0A14 /* TonConnectEvent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonConnectEvent.swift; sourceTree = ""; }; 07ED2EB82C341A0100FF7500 /* NodeApiKeyInjector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NodeApiKeyInjector.swift; sourceTree = ""; }; 07F2B75628A3A4B800280C38 /* ChainCollectionView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChainCollectionView.swift; sourceTree = ""; }; 07F2B75A28A6533900280C38 /* assets.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = assets.json; sourceTree = ""; }; @@ -3220,6 +3617,8 @@ 07FBC9E128BE24E900ED65B4 /* MissingAccountFetcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissingAccountFetcher.swift; sourceTree = ""; }; 07FBC9E528BE29C900ED65B4 /* ChainIssuesCenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainIssuesCenter.swift; sourceTree = ""; }; 07FD95BF27F4384900F07064 /* UIFont+dynamicSize.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIFont+dynamicSize.swift"; sourceTree = ""; }; + 07FEC1332CAE624B003938C6 /* OnboardingMainViewLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingMainViewLayout.swift; sourceTree = ""; }; + 07FEC1352CAE6848003938C6 /* SelectEcosystemBannerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectEcosystemBannerView.swift; sourceTree = ""; }; 0892AD886F2BE499C075C701 /* MainNftContainerProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MainNftContainerProtocols.swift; sourceTree = ""; }; 08EB1FC5907B5165836318C4 /* AnalyticsValidatorsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsValidatorsTests.swift; sourceTree = ""; }; 09373C708FE543066B943E45 /* NftDetailsInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftDetailsInteractor.swift; sourceTree = ""; }; @@ -3230,16 +3629,19 @@ 0BDDF1911884C819F63DCA80 /* NodeSelectionViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NodeSelectionViewFactory.swift; sourceTree = ""; }; 0C1CA1EF5BF1151E0DFB298C /* MainNftContainerRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MainNftContainerRouter.swift; sourceTree = ""; }; 0C34D496D0F57E685237B3A7 /* StakingUnbondConfirmInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondConfirmInteractor.swift; sourceTree = ""; }; + 0D47F5B181BB5778DDEF1125 /* TonWebBridgeAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TonWebBridgeAssembly.swift; sourceTree = ""; }; 0DB89A1483E4601F427056B3 /* NetworkIssuesNotificationAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkIssuesNotificationAssembly.swift; sourceTree = ""; }; 0E07F60661001B2C505D9C8B /* SelectMarketPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectMarketPresenter.swift; sourceTree = ""; }; - 0F48467D97F9D06F83F70894 /* Pods-fearlessAll-fearless.dev.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessAll-fearless.dev.xcconfig"; path = "Target Support Files/Pods-fearlessAll-fearless/Pods-fearlessAll-fearless.dev.xcconfig"; sourceTree = ""; }; + 0F28F73B0BC6C4EEBCC5B546 /* DappBrowserListViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserListViewLayout.swift; sourceTree = ""; }; 0F67BB672040911E4A165446 /* PolkaswapSwapConfirmationViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapSwapConfirmationViewLayout.swift; sourceTree = ""; }; + 1107A1285620FDD030DE2268 /* Pods-fearlessAll-fearlessIntegrationTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessAll-fearlessIntegrationTests.release.xcconfig"; path = "Target Support Files/Pods-fearlessAll-fearlessIntegrationTests/Pods-fearlessAll-fearlessIntegrationTests.release.xcconfig"; sourceTree = ""; }; 112609AE5629962646248BF0 /* LiquidityPoolSupplyConfirmAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmAssembly.swift; sourceTree = ""; }; + 120EE82BCC6A905D5590BD45 /* Pods_fearlessAll_fearless.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_fearlessAll_fearless.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1211B723BB656770C4EA5BC2 /* WalletTransactionDetailsViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionDetailsViewFactory.swift; sourceTree = ""; }; - 12441689D2AF47D508D16CCF /* WalletSendConfirmViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmViewFactory.swift; sourceTree = ""; }; 1366336078BCA34EFB4C6FF9 /* CrowdloanContributionConfirmInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionConfirmInteractor.swift; sourceTree = ""; }; 14611E105279789A149B3755 /* AssetNetworksProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetNetworksProtocols.swift; sourceTree = ""; }; 14E3337CDD7C831AEAA4582F /* CustomValidatorListPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CustomValidatorListPresenter.swift; sourceTree = ""; }; + 153C062150631BF45B59CB3F /* ConnectedAccountsRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsRouter.swift; sourceTree = ""; }; 15E7F3E6BBE50797A9EB9145 /* WalletTransactionHistoryViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionHistoryViewController.swift; sourceTree = ""; }; 169ADB0FB6C83C9CEED2F780 /* NetworkIssuesNotificationViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkIssuesNotificationViewLayout.swift; sourceTree = ""; }; 172B3E9BE51A339D7A09BDA3 /* UsernameSetupPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UsernameSetupPresenter.swift; sourceTree = ""; }; @@ -3253,6 +3655,7 @@ 1A7B39A61DB0D2F0F1B1DBA1 /* AccountCreateInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountCreateInteractor.swift; sourceTree = ""; }; 1AF4258723E2FACBBA556D00 /* WalletSendConfirmTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmTests.swift; sourceTree = ""; }; 1B08B264C09E63A936384E2A /* NftDetailsRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftDetailsRouter.swift; sourceTree = ""; }; + 1B3AB5BB9A2488FDD8DDFBA6 /* DappBrowserListProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserListProtocols.swift; sourceTree = ""; }; 1B3E9CA265E5C0F3E83429CE /* LiquidityPoolRemoveLiquidityPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityPresenter.swift; sourceTree = ""; }; 1BE8644A4F6DED808248A0FE /* YourValidatorListViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = YourValidatorListViewFactory.swift; sourceTree = ""; }; 1C52C6CD7112BF0E1E3A98CE /* PurchaseWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PurchaseWireframe.swift; sourceTree = ""; }; @@ -3262,9 +3665,11 @@ 1D738FE711DD760B47C0BA65 /* WalletMainContainerPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletMainContainerPresenter.swift; sourceTree = ""; }; 1DECC58C93DB18E79A03B5A0 /* AssetSelectionProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetSelectionProtocols.swift; sourceTree = ""; }; 1E5CB64B91B35804B3671456 /* ControllerAccountPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountPresenter.swift; sourceTree = ""; }; + 1F03612B61CDE654A7AFAC21 /* Pods-fearlessAll-fearless.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessAll-fearless.debug.xcconfig"; path = "Target Support Files/Pods-fearlessAll-fearless/Pods-fearlessAll-fearless.debug.xcconfig"; sourceTree = ""; }; 1F3B726402D4DB25059EF156 /* AnalyticsValidatorsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsValidatorsProtocols.swift; sourceTree = ""; }; 200C6B2C85846AED8CA9451A /* ExportMnemonicInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExportMnemonicInteractor.swift; sourceTree = ""; }; 20EB6F377A05C11850066B9F /* NftSendConfirmProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendConfirmProtocols.swift; sourceTree = ""; }; + 20FAD50119EE0DBA135AC9A7 /* ConfirmTransferViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConfirmTransferViewController.swift; sourceTree = ""; }; 21A199872F289F61BCF0C62D /* WalletsManagmentAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletsManagmentAssembly.swift; sourceTree = ""; }; 2222D628B9EA092D1C6B1CAE /* ChainSelectionPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChainSelectionPresenter.swift; sourceTree = ""; }; 22289DD3B70546794C4838CC /* WalletChainAccountDashboardTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletChainAccountDashboardTests.swift; sourceTree = ""; }; @@ -3273,13 +3678,13 @@ 23A74BDB54D503FA2BFBEF35 /* StakingUnbondSetupProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondSetupProtocols.swift; sourceTree = ""; }; 23BC71941B91D3E372CDB11C /* CrowdloanContributionSetupViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionSetupViewLayout.swift; sourceTree = ""; }; 23CF7E56EC624BDB60290387 /* CreateContactPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreateContactPresenter.swift; sourceTree = ""; }; + 2445A50C4FDB87374486CDDA /* ConnectedAccountsInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsInteractor.swift; sourceTree = ""; }; 25B80FDDB5C3032A0BBBD826 /* NftCollectionPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftCollectionPresenter.swift; sourceTree = ""; }; 25D9454047EBBD8D8A0174A4 /* LiquidityPoolRemoveLiquidityRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityRouter.swift; sourceTree = ""; }; 25FF82C2FD912021A1F20876 /* PolkaswapAdjustmentViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapAdjustmentViewLayout.swift; sourceTree = ""; }; 262F98DEF54FA9592BE22B94 /* AllDoneAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AllDoneAssembly.swift; sourceTree = ""; }; 2648EEF96694A7FEC94520E8 /* WalletHistoryFilterTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletHistoryFilterTests.swift; sourceTree = ""; }; 26635BD49FBF19DB1253906E /* NetworkInfoTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkInfoTests.swift; sourceTree = ""; }; - 26B8EEA0D384CCA5EB1CA052 /* MultichainAssetSelectionPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MultichainAssetSelectionPresenter.swift; sourceTree = ""; }; 270B309EC85D8897A4ADD98A /* CustomValidatorListViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CustomValidatorListViewController.swift; sourceTree = ""; }; 27D5AF2F7609ADE855308089 /* AccountExportPasswordViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountExportPasswordViewController.swift; sourceTree = ""; }; 28CCDB1822156D69578A3042 /* StakingPoolInfoPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolInfoPresenter.swift; sourceTree = ""; }; @@ -3297,16 +3702,20 @@ 2AD0A19425D3D3EC00312428 /* GitHubOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GitHubOperationFactory.swift; sourceTree = ""; }; 2AEC13E6950006302AC51B96 /* WalletTransactionHistoryProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionHistoryProtocols.swift; sourceTree = ""; }; 2B55A4C7E8BD87A7C8634ADD /* WalletsManagmentRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletsManagmentRouter.swift; sourceTree = ""; }; + 2BD242D3369DD517695F330A /* DappBrowserListAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserListAssembly.swift; sourceTree = ""; }; 2BE0492B98AB9C1540846B39 /* StakingPayoutConfirmationViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPayoutConfirmationViewFactory.swift; sourceTree = ""; }; 2C542733CEFB871FCD23195E /* NftSendConfirmInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendConfirmInteractor.swift; sourceTree = ""; }; 2CF682B92176E0FED5D7B4DB /* LiquidityPoolDetailsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsTests.swift; sourceTree = ""; }; + 2D09EBD67803AB57DF0F7636 /* FeatureToggleListViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FeatureToggleListViewLayout.swift; sourceTree = ""; }; 2D9C58C9D53A7EA34E5CB00C /* NftSendConfirmAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendConfirmAssembly.swift; sourceTree = ""; }; + 2E4B0600AFFB96A75CF98755 /* StakingRedeemProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRedeemProtocols.swift; sourceTree = ""; }; 2E57C70327E8AB3D00AF075A /* CrowdloanWikiTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrowdloanWikiTableViewCell.swift; sourceTree = ""; }; 2E57C70A27E9EC0E00AF075A /* ProfileViewState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileViewState.swift; sourceTree = ""; }; 2E57C70C27E9ED5300AF075A /* ProfileViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileViewModel.swift; sourceTree = ""; }; 2E57C70E27EA169000AF075A /* ProfileViewLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileViewLayout.swift; sourceTree = ""; }; 2EC386082DDF4DF1ADDCB49D /* WalletOptionRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletOptionRouter.swift; sourceTree = ""; }; 2ECD8589BD30A8BE9492AD87 /* StakingRewardPayoutsPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRewardPayoutsPresenter.swift; sourceTree = ""; }; + 2EE85E6A9028E814231D8466 /* DappBrowserListInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserListInteractor.swift; sourceTree = ""; }; 30F3EC1C2DAE60DD6BB99B42 /* StakingUnbondConfirmViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondConfirmViewFactory.swift; sourceTree = ""; }; 31226053044986BC828AA912 /* AccountExportPasswordPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountExportPasswordPresenter.swift; sourceTree = ""; }; 312DE7ADA5ABC3214AD3D4AD /* StakingAmountInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingAmountInteractor.swift; sourceTree = ""; }; @@ -3317,22 +3726,27 @@ 3211D250E4167C916B8B9D6A /* NetworkIssuesNotificationRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkIssuesNotificationRouter.swift; sourceTree = ""; }; 326260E461C031624CDB62BA /* WalletOptionInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletOptionInteractor.swift; sourceTree = ""; }; 32DEDC1A0ED429DD43EC621E /* NftDetailsPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftDetailsPresenter.swift; sourceTree = ""; }; + 32F4A2C14730740C6D319C5A /* DappBrowserAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserAssembly.swift; sourceTree = ""; }; 32FDB8843EB793C85B222FDB /* SwapTransactionDetailViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SwapTransactionDetailViewController.swift; sourceTree = ""; }; 336395FFC4B2104A9651A2DE /* StakingRewardPayoutsViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRewardPayoutsViewFactory.swift; sourceTree = ""; }; + 339C0DAFDB2C99655C2D64E4 /* DappBrowserPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserPresenter.swift; sourceTree = ""; }; 3574BADE9CF77599048C7010 /* CrowdloanContributionSetupWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionSetupWireframe.swift; sourceTree = ""; }; 35EAD41DB1444DA38D8C65E2 /* NetworkIssuesNotificationPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkIssuesNotificationPresenter.swift; sourceTree = ""; }; 364C90F7AD36FD6F6E690D7D /* SelectValidatorsConfirmFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectValidatorsConfirmFlow.swift; sourceTree = ""; }; + 365CAE2753E7D5F9B9DB7D1F /* CustomValidatorListInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CustomValidatorListInteractor.swift; sourceTree = ""; }; 36A3D64FF58C40E5CC6A6E89 /* AssetNetworksRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetNetworksRouter.swift; sourceTree = ""; }; 375E9A7A1206E366E862D81D /* WalletTransactionHistoryInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionHistoryInteractor.swift; sourceTree = ""; }; + 381BD34B5A6E2B1625B2C24C /* TonWebBridgeRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TonWebBridgeRouter.swift; sourceTree = ""; }; 3837CE5CB2D48D8A694A7EE0 /* StakingPoolCreateConfirmPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateConfirmPresenter.swift; sourceTree = ""; }; 385FE8691EA37DE9F562B34E /* CrowdloanContributionConfirmTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionConfirmTests.swift; sourceTree = ""; }; - 38B543AA1B941C76CB021051 /* Pods-fearlessTests.dev.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessTests.dev.xcconfig"; path = "Target Support Files/Pods-fearlessTests/Pods-fearlessTests.dev.xcconfig"; sourceTree = ""; }; 3A43F0468DEBA7500C6B23AF /* LiquidityPoolSupplyConfirmTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmTests.swift; sourceTree = ""; }; + 3A93673EEA8F71E8DDA84557 /* StakingRedeemWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRedeemWireframe.swift; sourceTree = ""; }; 3ABDA8952766DE724CD078D6 /* NodeSelectionPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NodeSelectionPresenter.swift; sourceTree = ""; }; 3B0E2EDF787BF82F16663215 /* NetworkInfoViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkInfoViewController.swift; sourceTree = ""; }; 3B6244A9538B39AFCD3A6F3A /* SelectValidatorsStartPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartPresenter.swift; sourceTree = ""; }; 3B8473AA386E1AD6F0F0C964 /* ControllerAccountConfirmationInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountConfirmationInteractor.swift; sourceTree = ""; }; 3BA8DC8007FC0A322C6DF00E /* LiquidityPoolsOverviewPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewPresenter.swift; sourceTree = ""; }; + 3C3533520260EDD83C2F26B1 /* DappBrowserViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserViewController.swift; sourceTree = ""; }; 3D2C2FC3E31C03D08BDEC7A1 /* PolkaswapAdjustmentRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapAdjustmentRouter.swift; sourceTree = ""; }; 3D49CA5CB156C1EA38BEBE00 /* LiquidityPoolRemoveLiquidityProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityProtocols.swift; sourceTree = ""; }; 3E992CCDC1D581F7E9D3F1CA /* AccountConfirmInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountConfirmInteractor.swift; sourceTree = ""; }; @@ -3343,6 +3757,7 @@ 3F5C47F8D6CB97D16DFF06B7 /* WalletsManagmentInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletsManagmentInteractor.swift; sourceTree = ""; }; 3F7068913923A6DEEE9D8EA0 /* CrowdloanContributionSetupPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionSetupPresenter.swift; sourceTree = ""; }; 3F75722D2F921FD1C2D4105D /* CrowdloanContributionConfirmViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionConfirmViewController.swift; sourceTree = ""; }; + 403D8D690B564EDC04996945 /* StakingRedeemTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRedeemTests.swift; sourceTree = ""; }; 40728E7BBC553AFA8FF4142B /* NetworkIssuesNotificationViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkIssuesNotificationViewController.swift; sourceTree = ""; }; 408D33DEE675B00ED511517A /* StakingPoolCreateConfirmAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateConfirmAssembly.swift; sourceTree = ""; }; 40B10454C90325D80CCBEC60 /* StakingUnbondConfirmFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondConfirmFlow.swift; sourceTree = ""; wrapsLines = 1; }; @@ -3354,6 +3769,7 @@ 447D03660EFFD8CF46374D85 /* NftSendConfirmViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendConfirmViewController.swift; sourceTree = ""; }; 447FE0DC90DF4B4D13CADE62 /* NodeSelectionInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NodeSelectionInteractor.swift; sourceTree = ""; }; 44FDDC470A6921DC2258939E /* WalletMainContainerViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletMainContainerViewLayout.swift; sourceTree = ""; }; + 45889B3DF6A7C6505FFD97AE /* Pods_fearlessTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_fearlessTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 4594686D10DBB7627B8C9A12 /* LiquidityPoolSupplyConfirmInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmInteractor.swift; sourceTree = ""; }; 45C8249F3F41DC0FFCF27EFF /* NftSendTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendTests.swift; sourceTree = ""; }; 470B64C45E547C25FCCCFC33 /* StakingMainProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingMainProtocols.swift; sourceTree = ""; }; @@ -3361,15 +3777,17 @@ 47E3A9998DBB9F1FC4A1FB0A /* WalletScanQRTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletScanQRTests.swift; sourceTree = ""; }; 480AE579B48B3DA9C247CCB5 /* CreateContactViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreateContactViewController.swift; sourceTree = ""; }; 48C158C8D1855BCE53636934 /* AccountCreateProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountCreateProtocols.swift; sourceTree = ""; }; + 490FDCAC66E3A0C80F501A5F /* DappBrowserListViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserListViewController.swift; sourceTree = ""; }; 4952E0B8F8DCD92FE4A37892 /* AddCustomNodeViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AddCustomNodeViewLayout.swift; sourceTree = ""; }; 497EFA05A2D8076BFE82964D /* LiquidityPoolSupplyViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyViewController.swift; sourceTree = ""; }; 49C564052FAA3160AA8975CB /* NftSendAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendAssembly.swift; sourceTree = ""; }; 49EBB77A32A59568B0DACFE5 /* StakingPoolCreateProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateProtocols.swift; sourceTree = ""; }; 4B3B14C046584AAAF483715F /* WalletTransactionHistoryWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionHistoryWireframe.swift; sourceTree = ""; }; - 4BF646F59913E95891915BDC /* AccountStatisticsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountStatisticsProtocols.swift; sourceTree = ""; }; + 4BD26C200A700CCA34980B61 /* TonWebBridgePresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TonWebBridgePresenter.swift; sourceTree = ""; }; 4C0FA282377DCAB7C59ACFB6 /* RecommendedValidatorListViewController.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; path = RecommendedValidatorListViewController.xib; sourceTree = ""; }; 4C5EF68BE0E29D2305CB7337 /* UsernameSetupTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UsernameSetupTests.swift; sourceTree = ""; }; 4C71DEF78B69F017DF460AB7 /* CrowdloanContributionSetupViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionSetupViewController.swift; sourceTree = ""; }; + 4CF89A85366996FE0E1053FC /* EcosystemOptionsRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EcosystemOptionsRouter.swift; sourceTree = ""; }; 4D4690DFD868E50CA9FAFBC6 /* ClaimCrowdloanRewardsViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ClaimCrowdloanRewardsViewLayout.swift; sourceTree = ""; }; 4F651991A2F781300002F2E3 /* MainNftContainerPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MainNftContainerPresenter.swift; sourceTree = ""; }; 4F7C84A88D3405B38B0E8134 /* PolkaswapTransaktionSettingsViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapTransaktionSettingsViewLayout.swift; sourceTree = ""; }; @@ -3378,27 +3796,30 @@ 5002B8FA2695F470587677D2 /* AccountConfirmProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountConfirmProtocols.swift; sourceTree = ""; }; 502D42F4A480889BA226CAD3 /* StakingMainPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingMainPresenter.swift; sourceTree = ""; }; 5126D2E4032D179A7D210552 /* WalletsManagmentProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletsManagmentProtocols.swift; sourceTree = ""; }; + 51A2CC33FFE5CFA1CCCC64BB /* EcosystemOptionsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EcosystemOptionsProtocols.swift; sourceTree = ""; }; 523339F3ED67EDEB8C5D2110 /* ClaimCrowdloanRewardsPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ClaimCrowdloanRewardsPresenter.swift; sourceTree = ""; }; 527CD27768E9A75E6CA87FE4 /* AccountConfirmTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountConfirmTests.swift; sourceTree = ""; }; 52A64FCFC95E3841032F910B /* ChainSelectionTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChainSelectionTests.swift; sourceTree = ""; }; - 52E0A32C643A1304F29D40A1 /* MultichainAssetSelectionRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MultichainAssetSelectionRouter.swift; sourceTree = ""; }; 52F8D055D0481469073AA859 /* StakingPayoutConfirmationProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPayoutConfirmationProtocols.swift; sourceTree = ""; }; 5408FF305E4A49A683BC43E0 /* WalletChainAccountDashboardViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletChainAccountDashboardViewLayout.swift; sourceTree = ""; }; + 54648003EC8531169B687994 /* Pods-fearlessTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessTests.debug.xcconfig"; path = "Target Support Files/Pods-fearlessTests/Pods-fearlessTests.debug.xcconfig"; sourceTree = ""; }; 54776237A20227DFE025E3AC /* AllDoneViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AllDoneViewLayout.swift; sourceTree = ""; }; 54FB887490A8B33890B4E0E4 /* ControllerAccountConfirmationPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountConfirmationPresenter.swift; sourceTree = ""; }; 55499F69824A67FA32C02C77 /* StakingPoolInfoRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolInfoRouter.swift; sourceTree = ""; }; 5555FA26DF1BD5483F7544B5 /* StakingPoolCreateConfirmViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateConfirmViewLayout.swift; sourceTree = ""; }; 55CC5A63AC07644409E997C1 /* StakingMainViewController.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; path = StakingMainViewController.xib; sourceTree = ""; }; + 560C48D7A83F51F001622D71 /* StakingRedeemInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRedeemInteractor.swift; sourceTree = ""; }; 5663C645EB394E16BFC848AB /* NftCollectionTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftCollectionTests.swift; sourceTree = ""; }; 5674162035C7D9F226FA9964 /* StakingUnbondConfirmViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondConfirmViewController.swift; sourceTree = ""; }; 56FF8DBE5C32EE4C68ECD623 /* PurchasePresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PurchasePresenter.swift; sourceTree = ""; }; + 5744A4699B3930EB459972BD /* EcosystemOptionsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EcosystemOptionsViewController.swift; sourceTree = ""; }; 57C624E71FCE0FFF8EAD5BA9 /* RecommendedValidatorListWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecommendedValidatorListWireframe.swift; sourceTree = ""; }; 58CD8A37F219A0BCC0C6063E /* AddCustomNodeViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AddCustomNodeViewController.swift; sourceTree = ""; }; 594BC61689EC942ED0A64A4A /* ReferralCrowdloanViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ReferralCrowdloanViewLayout.swift; sourceTree = ""; }; 599FEDBD7E8B665F1A93BA70 /* AccountConfirmWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountConfirmWireframe.swift; sourceTree = ""; }; - 59FDAE57EE0A97872E76E6CE /* Pods_fearlessTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_fearlessTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 5A05EB4FAF2FDE7DECEA93E4 /* StakingMainViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingMainViewController.swift; sourceTree = ""; }; 5A4416B96A9DD5FB5EEA086E /* WalletSendConfirmViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmViewLayout.swift; sourceTree = ""; }; + 5AA1493E216DF3B3616A9EE6 /* TonWebBridgeProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TonWebBridgeProtocols.swift; sourceTree = ""; }; 5AA3BF0C9C1E0E2C67D962F5 /* PurchaseViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PurchaseViewFactory.swift; sourceTree = ""; }; 5B0CF2F98779D3C18D0C0A29 /* NodeSelectionTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NodeSelectionTests.swift; sourceTree = ""; }; 5B5D683E7DE3533CA418BD21 /* PolkaswapAdjustmentPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapAdjustmentPresenter.swift; sourceTree = ""; }; @@ -3411,6 +3832,7 @@ 5D39CEB720F336B3A400477E /* ContactsViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ContactsViewLayout.swift; sourceTree = ""; }; 5D5F6F1BDBC4BE780D593700 /* NetworkIssuesNotificationInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkIssuesNotificationInteractor.swift; sourceTree = ""; }; 5D81DBDDD34EA20C3270EDB4 /* AddCustomNodeViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AddCustomNodeViewFactory.swift; sourceTree = ""; }; + 5DD32F4D6D8DABF991E09C7C /* ConfirmTransferPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConfirmTransferPresenter.swift; sourceTree = ""; }; 5E096A576B747C09B14FD38D /* WalletMainContainerAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletMainContainerAssembly.swift; sourceTree = ""; }; 5E11C7AF9A8DEC07246D5626 /* StakingMainTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingMainTests.swift; sourceTree = ""; }; 5F6F7AE5AFF3F2E7BADA02BB /* LiquidityPoolDetailsAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsAssembly.swift; sourceTree = ""; }; @@ -3426,18 +3848,15 @@ 61EBE466BDCF77E65FDCDF81 /* ExportMnemonicPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExportMnemonicPresenter.swift; sourceTree = ""; }; 6216F6F1B91F798F07695FB6 /* StakingAmountWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingAmountWireframe.swift; sourceTree = ""; }; 62928FB3556EEA3A228131AC /* LiquidityPoolSupplyAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyAssembly.swift; sourceTree = ""; }; - 62CD1B83902C1B5763476EFF /* AccountStatisticsAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountStatisticsAssembly.swift; sourceTree = ""; }; 62FA66143B25AA70B02CE461 /* ExportSeedViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExportSeedViewFactory.swift; sourceTree = ""; }; 638A65DAC86BAF9EB4D2F2F8 /* StakingRewardDetailsWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRewardDetailsWireframe.swift; sourceTree = ""; }; 639AD37D87BD08106E7E6E2A /* WarningAlertWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WarningAlertWireframe.swift; sourceTree = ""; }; - 63B11A7ADEF107B6341C378F /* Pods-fearlessAll-fearlessIntegrationTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessAll-fearlessIntegrationTests.release.xcconfig"; path = "Target Support Files/Pods-fearlessAll-fearlessIntegrationTests/Pods-fearlessAll-fearlessIntegrationTests.release.xcconfig"; sourceTree = ""; }; 63CCCC63389A70294F816143 /* NodeSelectionProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NodeSelectionProtocols.swift; sourceTree = ""; }; 63F4BE52D0625CD8C21D2460 /* CrowdloanListViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanListViewLayout.swift; sourceTree = ""; }; 6419D75A346CE10236161522 /* LiquidityPoolRemoveLiquidityViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityViewLayout.swift; sourceTree = ""; }; 641B699003FF648A380F7FA6 /* LiquidityPoolSupplyConfirmViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmViewLayout.swift; sourceTree = ""; }; 6503D178156C6407EC848D41 /* LiquidityPoolSupplyRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyRouter.swift; sourceTree = ""; }; 65AD15693E21C869DE1FDD17 /* UsernameSetupWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UsernameSetupWireframe.swift; sourceTree = ""; }; - 66D18E89F0DB92133A96EDF9 /* MultichainAssetSelectionViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MultichainAssetSelectionViewController.swift; sourceTree = ""; }; 66FFB904E5A83F2EFBCCBBF8 /* StakingPoolInfoTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolInfoTests.swift; sourceTree = ""; }; 6717FF1B7777400B62F028C3 /* LiquidityPoolsOverviewInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewInteractor.swift; sourceTree = ""; }; 67B1037AEC97DBEAF9FD50C1 /* AssetNetworksPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetNetworksPresenter.swift; sourceTree = ""; }; @@ -3446,18 +3865,19 @@ 6887529305794E17D9434D44 /* LiquidityPoolRemoveLiquidityInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityInteractor.swift; sourceTree = ""; }; 6897929D244B5C29E3FD0727 /* StakingPoolCreateRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateRouter.swift; sourceTree = ""; }; 69B00AC48FB7D11855875EB9 /* SwapTransactionDetailPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SwapTransactionDetailPresenter.swift; sourceTree = ""; }; - 6A28799A82C0EC2F8ABDE831 /* Pods_fearlessAll_fearless.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_fearlessAll_fearless.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 6A825B6368073B06F32D7C8F /* StakingMainViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingMainViewFactory.swift; sourceTree = ""; }; 6B0277C3D897EADD48A7C64F /* AnalyticsValidatorsInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsValidatorsInteractor.swift; sourceTree = ""; }; 6B152D1AC1CD34A4530CB6D0 /* ClaimCrowdloanRewardsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ClaimCrowdloanRewardsTests.swift; sourceTree = ""; }; 6B37BB3FF5CDF7EA9D7371B7 /* WalletTransactionDetailsInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionDetailsInteractor.swift; sourceTree = ""; }; 6B60728FCFBC8A9BE4C7B50B /* YourValidatorListInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = YourValidatorListInteractor.swift; sourceTree = ""; wrapsLines = 1; }; 6B896BA49EE0D4C77401D097 /* AnalyticsValidatorsWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsValidatorsWireframe.swift; sourceTree = ""; }; + 6C3011E6F226BFC9BE9C5475 /* ConnectedAccountsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsViewController.swift; sourceTree = ""; }; 6C52E93D987DC64991F58508 /* StakingUnbondConfirmTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondConfirmTests.swift; sourceTree = ""; }; 6C7AAA265DB437D2CDDC165E /* NftCollectionInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftCollectionInteractor.swift; sourceTree = ""; }; 6C90AA5852CFA841CED20631 /* AllDoneProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AllDoneProtocols.swift; sourceTree = ""; }; 6D3BFF5C921FEB356E2C39A4 /* StakingRewardDetailsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRewardDetailsTests.swift; sourceTree = ""; }; 6DE4840EBB9892A5E35FB443 /* AccountExportPasswordViewController.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; path = AccountExportPasswordViewController.xib; sourceTree = ""; }; + 6ED240B5595B623CE5E0941C /* ConnectedAccountsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsProtocols.swift; sourceTree = ""; }; 6EDB8BAE1FAE3C7502E9245E /* NftDetailsViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftDetailsViewLayout.swift; sourceTree = ""; }; 6FA0310E7E7EA9A985602CCA /* ChainAccountListTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChainAccountListTests.swift; sourceTree = ""; }; 71285CF636B32ACD8EB5519E /* ReferralCrowdloanViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ReferralCrowdloanViewFactory.swift; sourceTree = ""; }; @@ -3467,23 +3887,29 @@ 747F68F0421FB144AE3FBA4E /* NftSendViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendViewLayout.swift; sourceTree = ""; }; 7484BA696561262926D87FE5 /* CrowdloanContributionSetupProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionSetupProtocols.swift; sourceTree = ""; }; 748E0AF1A286016CB220155C /* ControllerAccountInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountInteractor.swift; sourceTree = ""; }; + 7525F0A27140F3C058CA5B0C /* TransferTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TransferTests.swift; sourceTree = ""; }; + 75796C9C1AC23FDE8E1E31DB /* TransferViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TransferViewLayout.swift; sourceTree = ""; }; + 759EAF04B9064529D6862A14 /* ConfirmTransferProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConfirmTransferProtocols.swift; sourceTree = ""; }; 75B53E901B1475DE858A2C99 /* ContactsRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ContactsRouter.swift; sourceTree = ""; }; + 75D1886C774F9F63C897CAF1 /* TonWebBridgeViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TonWebBridgeViewLayout.swift; sourceTree = ""; }; 761FDEBB414B1CFAD6992352 /* AnalyticsRewardDetailsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsRewardDetailsTests.swift; sourceTree = ""; }; - 7743EA304BC53649D0473225 /* AccountStatisticsViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountStatisticsViewLayout.swift; sourceTree = ""; }; + 769372B10E8D3C2BF7304FC3 /* FeatureToggleListInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FeatureToggleListInteractor.swift; sourceTree = ""; }; 779702BC0E9C9882BEA5C273 /* StakingPoolCreateConfirmInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateConfirmInteractor.swift; sourceTree = ""; }; 782CC21A2F9EEF5DBA3AB1AA /* PurchaseProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PurchaseProtocols.swift; sourceTree = ""; }; 784D20E16EEE55C2CF7B319B /* StakingBondMoreFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingBondMoreFlow.swift; sourceTree = ""; }; 7911693957DFAF141EBDAFEC /* StakingRewardPayoutsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRewardPayoutsProtocols.swift; sourceTree = ""; }; 7931155840DACB340284ABBB /* PolkaswapTransaktionSettingsAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapTransaktionSettingsAssembly.swift; sourceTree = ""; }; + 7A269FFAB51579A58387BD00 /* Pods-fearlessAll-fearless.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessAll-fearless.release.xcconfig"; path = "Target Support Files/Pods-fearlessAll-fearless/Pods-fearlessAll-fearless.release.xcconfig"; sourceTree = ""; }; + 7A656BB6CADD5BEBD41CE492 /* DappBrowserListPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserListPresenter.swift; sourceTree = ""; }; 7BCAF4A12D0F22D3C9035A1A /* WarningAlertPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WarningAlertPresenter.swift; sourceTree = ""; }; - 7BDBADCF78FB10BE08DE5259 /* Pods-fearlessTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessTests.release.xcconfig"; path = "Target Support Files/Pods-fearlessTests/Pods-fearlessTests.release.xcconfig"; sourceTree = ""; }; 7C70EBF83B2547452417E588 /* StakingRewardDetailsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRewardDetailsViewController.swift; sourceTree = ""; }; - 7C85B1F841C281165D7AACB1 /* AccountStatisticsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountStatisticsViewController.swift; sourceTree = ""; }; 7CCB1AFB751075497345C3E7 /* ClaimCrowdloanRewardsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ClaimCrowdloanRewardsViewController.swift; sourceTree = ""; }; 7DDDB2B35CD3299F50613141 /* ReferralCrowdloanViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ReferralCrowdloanViewController.swift; sourceTree = ""; }; 7DE7B3D0BE06472153C0A78C /* NftCollectionAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftCollectionAssembly.swift; sourceTree = ""; }; 7E62CD2831DCF0A2D5DBB08F /* SelectValidatorsStartViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartViewController.swift; sourceTree = ""; }; + 7E8E30C194FD07DC9ECCBE74 /* TransferViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TransferViewController.swift; sourceTree = ""; }; 7EADA37D0D22D4CC99A7911A /* StakingPoolInfoViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolInfoViewController.swift; sourceTree = ""; }; + 7EB7489DB0FFE77F7B7AABE8 /* EcosystemOptionsPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EcosystemOptionsPresenter.swift; sourceTree = ""; }; 7ED5BEE4CC908012820FE89F /* NetworkInfoProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkInfoProtocols.swift; sourceTree = ""; }; 803E71983CD61FFBFE98DA7A /* NftSendConfirmRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendConfirmRouter.swift; sourceTree = ""; }; 80809FE46E7B8EBDE3680706 /* NodeSelectionWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NodeSelectionWireframe.swift; sourceTree = ""; }; @@ -3524,6 +3950,8 @@ 840BF22426C2653100E3A955 /* ChainSyncServiceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainSyncServiceTests.swift; sourceTree = ""; }; 840BF22626C2C8A600E3A955 /* ChainSyncEvents.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainSyncEvents.swift; sourceTree = ""; }; 840C71B726821C0600B6D9C2 /* StakingRebondMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingRebondMock.swift; sourceTree = ""; }; + 840C71B926821D2000B6D9C2 /* StakingRedeemMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingRedeemMock.swift; sourceTree = ""; }; + 840D891C26242AE500AB231B /* StorageRequestParams.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageRequestParams.swift; sourceTree = ""; }; 840DCBF025DFEE4800D45C6A /* AmountInputView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AmountInputView.swift; sourceTree = ""; }; 840DCBF525E0059D00D45C6A /* AmountInputView+Inspectable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AmountInputView+Inspectable.swift"; sourceTree = ""; }; 840DCBFA25E0703A00D45C6A /* RewardSelectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RewardSelectionView.swift; sourceTree = ""; }; @@ -3535,6 +3963,7 @@ 84113B6B255B2835009BD21A /* AccountCreateError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountCreateError.swift; sourceTree = ""; }; 84113B90255B2CA0009BD21A /* MainTransitionHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainTransitionHelper.swift; sourceTree = ""; }; 841185E6263F3B6D00E8A8B6 /* HintView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = HintView.swift; path = fearless/Common/View/HintView.swift; sourceTree = SOURCE_ROOT; }; + 841493DB2604C144000D8D1A /* SubscanRewardData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscanRewardData.swift; sourceTree = ""; }; 8414943F2604E71C000D8D1A /* TotalRewardItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TotalRewardItem.swift; sourceTree = ""; }; 84155DEC2539817200A27058 /* ApplicationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationService.swift; sourceTree = ""; }; 84155DF2253A1DBA00A27058 /* SchedulerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SchedulerTests.swift; sourceTree = ""; }; @@ -3543,11 +3972,10 @@ 841937862544772F00CFA50C /* animatedBg.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = animatedBg.gif; sourceTree = ""; }; 841AAC2026F6860B00F0A25E /* AssetBalanceFormatterFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetBalanceFormatterFactory.swift; sourceTree = ""; }; 841AAC2226F6879900F0A25E /* AssetBalanceDisplayInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetBalanceDisplayInfo.swift; sourceTree = ""; }; - 841AAC2426F692EF00F0A25E /* AddressConversion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddressConversion.swift; sourceTree = ""; }; - 841AAC2626F6A2A500F0A25E /* ChainAccountFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainAccountFetching.swift; sourceTree = ""; }; 841AAC2C26F7315300F0A25E /* CrowdloanRemoteSubscriptionService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrowdloanRemoteSubscriptionService.swift; sourceTree = ""; }; 841AAC2E26F73E0C00F0A25E /* LocalStorageKeyFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalStorageKeyFactory.swift; sourceTree = ""; }; 841B45282603D91800C08693 /* EraValidatorsServiceStub.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EraValidatorsServiceStub.swift; sourceTree = ""; }; + 841E6AF525EC12100007DDFE /* PreparedNomination.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreparedNomination.swift; sourceTree = ""; }; 841E6AFD25EC12DE0007DDFE /* SelectedValidatorInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedValidatorInfo.swift; sourceTree = ""; }; 841E6B0925EC1C140007DDFE /* RelaychainValidatorOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelaychainValidatorOperationFactory.swift; sourceTree = ""; }; 84205896260C795B007D26C6 /* NominatorState+Status.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NominatorState+Status.swift"; sourceTree = ""; }; @@ -3577,6 +4005,7 @@ 8428764F24ADDE0200D91AD8 /* ProfileWireframe.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProfileWireframe.swift; sourceTree = ""; }; 8428765024ADDE0200D91AD8 /* ProfileViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProfileViewController.swift; sourceTree = ""; }; 8428765124ADDE0200D91AD8 /* ProfileInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProfileInteractor.swift; sourceTree = ""; }; + 8428765E24ADE0BB00D91AD8 /* UserSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserSettings.swift; sourceTree = ""; }; 8428766824ADF27D00D91AD8 /* AuthorizationPresentable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthorizationPresentable.swift; sourceTree = ""; }; 8428766A24ADF51D00D91AD8 /* UIViewController+Modal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController+Modal.swift"; sourceTree = ""; }; 8428766D24AE046200D91AD8 /* LanguageSelectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LanguageSelectionViewController.swift; sourceTree = ""; }; @@ -3632,10 +4061,14 @@ 8430AB1126023C9F005B1066 /* PendingBondedState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PendingBondedState.swift; sourceTree = ""; }; 8430AB1626023D2D005B1066 /* BaseStashNextState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseStashNextState.swift; sourceTree = ""; }; 8432E55024EFDF6100B05B58 /* AccountItemMapperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountItemMapperTests.swift; sourceTree = ""; }; + 843461CA26E2590200DCE0CD /* SubscanHistoryOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscanHistoryOperationFactory.swift; sourceTree = ""; }; + 843461CC26E2596E00DCE0CD /* WalletRemoteHistoryFiltering.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletRemoteHistoryFiltering.swift; sourceTree = ""; }; + 843461CE26E25AD400DCE0CD /* SubscanHistoryItem+Wallet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SubscanHistoryItem+Wallet.swift"; sourceTree = ""; }; 8434C9E325401EF3009E4191 /* TransactionHistoryItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionHistoryItem.swift; sourceTree = ""; }; 8434C9E525403686009E4191 /* CDTransactionHistoryItem+CoreDataDecodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CDTransactionHistoryItem+CoreDataDecodable.swift"; sourceTree = ""; }; 8434C9E92540AE51009E4191 /* ExtrinsicEraTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtrinsicEraTests.swift; sourceTree = ""; }; 8436E94326C853E4003D4EA7 /* RuntimeSnapshotOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeSnapshotOperationFactory.swift; sourceTree = ""; }; + 8436E94526C85405003D4EA7 /* RuntimeSnapshot.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeSnapshot.swift; sourceTree = ""; }; 8436EDE125895804004D9E97 /* RampProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RampProvider.swift; sourceTree = ""; }; 8436EDE625895846004D9E97 /* PurchaseProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PurchaseProvider.swift; sourceTree = ""; }; 8436EDEE25896722004D9E97 /* PurchaseAggregator+Default.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PurchaseAggregator+Default.swift"; sourceTree = ""; }; @@ -3652,6 +4085,7 @@ 843910BA253F021E00E3C217 /* WalletStakingChanged.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletStakingChanged.swift; sourceTree = ""; }; 843910C0253F36F300E3C217 /* BaseStorageChildSubscription.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseStorageChildSubscription.swift; sourceTree = ""; }; 843910C6253F56EA00E3C217 /* BaseOperation+Result.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BaseOperation+Result.swift"; sourceTree = ""; }; + 843910C8253F591D00E3C217 /* ScaleDecoderOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScaleDecoderOperation.swift; sourceTree = ""; }; 843910CD253F7E8000E3C217 /* SubstrateDataStorageFacade.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubstrateDataStorageFacade.swift; sourceTree = ""; }; 843910D0253F8DAD00E3C217 /* NetworkAvailabilityLayerPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkAvailabilityLayerPresenter.swift; sourceTree = ""; }; 843910D2253F8DAD00E3C217 /* NetworkAvailabilityLayerProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkAvailabilityLayerProtocols.swift; sourceTree = ""; }; @@ -3721,6 +4155,8 @@ 844EFB64265FD61D0090ACB1 /* CrowdloanContributeConfirmViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrowdloanContributeConfirmViewModel.swift; sourceTree = ""; }; 8454C21C2632A78900657DAD /* EventRecord.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventRecord.swift; sourceTree = ""; }; 8454C2642632B0EF00657DAD /* EventCodingPath.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventCodingPath.swift; sourceTree = ""; }; + 8454C2692632B8CE00657DAD /* BalanceDepositEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BalanceDepositEvent.swift; sourceTree = ""; }; + 8454C26E2632BBAA00657DAD /* ExtrinsicProcessing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtrinsicProcessing.swift; sourceTree = ""; }; 8454C2822632FC2500657DAD /* ExtrinsicProcessingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtrinsicProcessingTests.swift; sourceTree = ""; }; 845532CF2684690D00C2645D /* ParachainSlotLease.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParachainSlotLease.swift; sourceTree = ""; }; 845532D126846B6800C2645D /* ParachainLeaseInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParachainLeaseInfo.swift; sourceTree = ""; }; @@ -3731,8 +4167,6 @@ 84585A30251C0B9300390F7A /* NetworkInfoMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkInfoMode.swift; sourceTree = ""; }; 845B821426EF657700D25C72 /* PersistentValueSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PersistentValueSettings.swift; sourceTree = ""; }; 845B821626EF7FED00D25C72 /* SelectedWalletSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedWalletSettings.swift; sourceTree = ""; }; - 845B821826EF808D00D25C72 /* MetaAccountMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetaAccountMapper.swift; sourceTree = ""; }; - 845B821A26EF80BC00D25C72 /* MetaAccountModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetaAccountModel.swift; sourceTree = ""; }; 845B821C26EF80DB00D25C72 /* ChainAccountModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainAccountModel.swift; sourceTree = ""; }; 845B821E26EF8E8900D25C72 /* ManagedMetaAccountModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManagedMetaAccountModel.swift; sourceTree = ""; }; 845B822026EF8F1A00D25C72 /* ManagedMetaAccountMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManagedMetaAccountMapper.swift; sourceTree = ""; }; @@ -3797,6 +4231,8 @@ 8467FD4024ED3C72005D486C /* AlignableContentControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlignableContentControl.swift; sourceTree = ""; }; 8467FD4224ED5F46005D486C /* ProfileSectionTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileSectionTableViewCell.swift; sourceTree = ""; }; 8467FD4424ED5F60005D486C /* ProfileSectionTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ProfileSectionTableViewCell.xib; sourceTree = ""; }; + 8467FD4624ED6496005D486C /* ProfileDetailsTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ProfileDetailsTableViewCell.xib; sourceTree = ""; }; + 8467FD4824ED64A5005D486C /* ProfileDetailsTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileDetailsTableViewCell.swift; sourceTree = ""; }; 8467FD4B24EEA081005D486C /* ProfileTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileTests.swift; sourceTree = ""; }; 8467FD5224EFD210005D486C /* UserDataStorageFacade.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDataStorageFacade.swift; sourceTree = ""; }; 8467FD5424EFD254005D486C /* StorageFacadeProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageFacadeProtocol.swift; sourceTree = ""; }; @@ -3840,6 +4276,7 @@ 846CD24C2656FEB800A2E4B6 /* StorageKeysQueryService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageKeysQueryService.swift; sourceTree = ""; }; 846CD25A265709A800A2E4B6 /* StorageKeySuffixMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageKeySuffixMapper.swift; sourceTree = ""; }; 846CDECC258D212D009F3E75 /* AlertImageWithTitleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertImageWithTitleView.swift; sourceTree = ""; }; + 8470D6CC253E3170009E9A5D /* AccountInfoSubscription.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountInfoSubscription.swift; sourceTree = ""; }; 8470D6CF253E321C009E9A5D /* StorageSubscriptionProtocols.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageSubscriptionProtocols.swift; sourceTree = ""; }; 8470D6D1253E3382009E9A5D /* StorageSubscriptionContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageSubscriptionContainer.swift; sourceTree = ""; }; 8470D6D3253E35F0009E9A5D /* StorageUpdate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageUpdate.swift; sourceTree = ""; }; @@ -3848,7 +4285,6 @@ 847119D4262EF95A00716580 /* PayoutInfoFactoryProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PayoutInfoFactoryProtocol.swift; sourceTree = ""; }; 847119EA262EFF3800716580 /* ValidatorPayoutInfoFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValidatorPayoutInfoFactory.swift; sourceTree = ""; }; 8471538C2653B29100CB91D8 /* ChangeRewardDestinationViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeRewardDestinationViewModelFactory.swift; sourceTree = ""; }; - 84729740260A9C13009B86D0 /* DisplayAddress.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DisplayAddress.swift; sourceTree = ""; }; 8472974C260A9CDF009B86D0 /* SelectValidatorsConfirmationModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsConfirmationModel.swift; sourceTree = ""; }; 84729757260AA519009B86D0 /* SelectValidatorsConfirmInteractorBase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsConfirmInteractorBase.swift; sourceTree = ""; }; 8472975C260B1B71009B86D0 /* ExistingBonding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExistingBonding.swift; sourceTree = ""; }; @@ -3908,6 +4344,7 @@ 848919DA26FB663D004DBAD5 /* CrowdloansChainViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrowdloansChainViewModel.swift; sourceTree = ""; }; 84893BFB24D9B0F1008F6A3F /* PredicateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PredicateTests.swift; sourceTree = ""; }; 84893BFD24DA0000008F6A3F /* FieldStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FieldStatus.swift; sourceTree = ""; }; + 84893C0224DA8641008F6A3F /* AccountCreationRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountCreationRequest.swift; sourceTree = ""; }; 84893C0424DA8663008F6A3F /* AccountCreationError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountCreationError.swift; sourceTree = ""; }; 84893C0624DA890F008F6A3F /* CommonError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommonError.swift; sourceTree = ""; }; 8489EDB9264DB25500FF997E /* RecommendationsComposing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecommendationsComposing.swift; sourceTree = ""; }; @@ -3959,6 +4396,7 @@ 8490144924A93D0B008F705E /* FearlessNavigationBar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FearlessNavigationBar.swift; sourceTree = ""; }; 8490144A24A93D0B008F705E /* FearlessNavigationController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FearlessNavigationController.swift; sourceTree = ""; }; 8490144E24A93E2E008F705E /* UIImage+Drawing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIImage+Drawing.swift"; sourceTree = ""; }; + 8490145024A93FD1008F705E /* FearlessLoadingViewPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FearlessLoadingViewPresenter.swift; sourceTree = ""; }; 8490145124A93FD1008F705E /* FearlessLoadingViewFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FearlessLoadingViewFactory.swift; sourceTree = ""; }; 8490145524A9404E008F705E /* AttributedStringDecorator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AttributedStringDecorator.swift; sourceTree = ""; }; 8490145724A9406D008F705E /* LegalData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LegalData.swift; sourceTree = ""; }; @@ -3998,6 +4436,9 @@ 849014D224AA8F60008F705E /* MainTabBarWireframe.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainTabBarWireframe.swift; sourceTree = ""; }; 849014E724AA925C008F705E /* ScrollsToTop.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScrollsToTop.swift; sourceTree = ""; }; 849014FB24AA9939008F705E /* Charset+Mnemonic.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Charset+Mnemonic.swift"; sourceTree = ""; }; + 8490150824AB8A3A008F705E /* WalletEmptyStateDataSource+Module.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "WalletEmptyStateDataSource+Module.swift"; sourceTree = ""; }; + 8490150E24AB8A3A008F705E /* WalletEmptyStateDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletEmptyStateDataSource.swift; sourceTree = ""; }; + 8490152024ABC721008F705E /* WalletStaticImageViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletStaticImageViewModel.swift; sourceTree = ""; }; 8490152624ABCC40008F705E /* NumberFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NumberFormatter.swift; sourceTree = ""; }; 8490152D24ABD0F5008F705E /* Logger+Wallet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Logger+Wallet.swift"; sourceTree = ""; }; 8490386A262E22DC0016D541 /* NominatorPayoutInfoFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NominatorPayoutInfoFactory.swift; sourceTree = ""; }; @@ -4011,6 +4452,8 @@ 84944249265306BD0016E7BD /* ChangeRewardDestinationViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeRewardDestinationViewModel.swift; sourceTree = ""; }; 8494425E265330650016E7BD /* StakingRewardDestinationSetupTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingRewardDestinationSetupTests.swift; sourceTree = ""; }; 8494D86A25247F9600614D8F /* Decimal+String.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Decimal+String.swift"; sourceTree = ""; }; + 8494D86F2525321700614D8F /* SubscanDefinitions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscanDefinitions.swift; sourceTree = ""; }; + 8494D8772525343500614D8F /* SubscanOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscanOperationFactory.swift; sourceTree = ""; }; 8494D8792525350000614D8F /* SubscanStatusData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscanStatusData.swift; sourceTree = ""; }; 8494D87B252537E500614D8F /* SubscanError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscanError.swift; sourceTree = ""; }; 849528DD2603697B009DC845 /* RewardEstimationView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = RewardEstimationView.xib; sourceTree = ""; }; @@ -4031,14 +4474,20 @@ 849ABE48262763BB00011A2A /* Longrun.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Longrun.swift; sourceTree = ""; }; 849ABE552627738900011A2A /* Mapping.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Mapping.swift; sourceTree = ""; }; 849ABE5A2627739400011A2A /* ListReducing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListReducing.swift; sourceTree = ""; }; + 849ABE62262785F200011A2A /* ControllerMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ControllerMapper.swift; sourceTree = ""; }; 849ABE6726278A4100011A2A /* NominateMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NominateMapper.swift; sourceTree = ""; }; 849ABE6C2627949E00011A2A /* BatchMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BatchMapper.swift; sourceTree = ""; }; + 849ABE7126280F3800011A2A /* ControllersReducer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ControllersReducer.swift; sourceTree = ""; }; + 849ABE762628103200011A2A /* ControllersListReducer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ControllersListReducer.swift; sourceTree = ""; }; + 849ABE7B2628116F00011A2A /* NominationsReducer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NominationsReducer.swift; sourceTree = ""; }; + 849ABE80262811CF00011A2A /* NominationsListReducer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NominationsListReducer.swift; sourceTree = ""; }; 849ABE852628154900011A2A /* SubscanRawExtrinsicData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscanRawExtrinsicData.swift; sourceTree = ""; }; 849DEBD325ED015C00C64C19 /* SelectValidatorsConfirmViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsConfirmViewModel.swift; sourceTree = ""; }; 849DEC5825ED756F00C64C19 /* SubstrateCallFactoryDefault.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubstrateCallFactoryDefault.swift; sourceTree = ""; }; 849DEC6025EE13CE00C64C19 /* AddressOptionsPresentable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddressOptionsPresentable.swift; sourceTree = ""; }; 849DF02C26C40B7900B702F4 /* RuntimeFilesOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeFilesOperationFactory.swift; sourceTree = ""; }; 849DF02E26C53DB900B702F4 /* RuntimeSyncEvents.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeSyncEvents.swift; sourceTree = ""; }; + 849E0CCF25CFDDB700B33506 /* StorageUpdateData+Decoding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "StorageUpdateData+Decoding.swift"; sourceTree = ""; }; 849E689426AF388500E0E7BE /* ElectedValidatorInfo+Selected.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ElectedValidatorInfo+Selected.swift"; sourceTree = ""; }; 849ECD3426DE70B900F542A3 /* SingleToMultiassetUserMigrationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SingleToMultiassetUserMigrationTests.swift; sourceTree = ""; }; 849ECD3826DF792800F542A3 /* SkeletonRow+View.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SkeletonRow+View.swift"; sourceTree = ""; }; @@ -4115,6 +4564,9 @@ 84CA68E026BEAC7C003B9453 /* SpecVersionSubscriptionFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpecVersionSubscriptionFactory.swift; sourceTree = ""; }; 84CB224F270360AC0041C8C1 /* RelaychainStakingLocalSubscriptionFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelaychainStakingLocalSubscriptionFactory.swift; sourceTree = ""; }; 84CCBFBB2509709500180F4F /* UIBarButtonItem+Style.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIBarButtonItem+Style.swift"; sourceTree = ""; }; + 84CD356F252620FB0081BC0B /* CryptoType+Extrinsic.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CryptoType+Extrinsic.swift"; sourceTree = ""; }; + 84CD82AD263C1452001A6F01 /* SubstrateProviderSubscriber.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubstrateProviderSubscriber.swift; sourceTree = ""; }; + 84CD82B2263C30BC001A6F01 /* SubstrateProviderSubscriptionHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubstrateProviderSubscriptionHandler.swift; sourceTree = ""; }; 84CE69DC2565BB6400559427 /* AboutViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutViewModel.swift; sourceTree = ""; }; 84CE69E72566750D00559427 /* ByteLengthProcessor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ByteLengthProcessor.swift; sourceTree = ""; }; 84CE69EC25667A5600559427 /* ByteLengthEncodingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ByteLengthEncodingTests.swift; sourceTree = ""; }; @@ -4162,16 +4614,21 @@ 84D8F16A24D8263300AF43E9 /* ModalPickerFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModalPickerFactory.swift; sourceTree = ""; }; 84D8F16C24D82C7E00AF43E9 /* ModalPickerConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModalPickerConfiguration.swift; sourceTree = ""; }; 84D8F16E24D8451F00AF43E9 /* CryptoType+ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CryptoType+ViewModel.swift"; sourceTree = ""; }; + 84D8F17024D856D300AF43E9 /* SNAddressType+ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SNAddressType+ViewModel.swift"; sourceTree = ""; }; + 84D97EC0251FEE1E00F07405 /* WalletAssetId+Display.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WalletAssetId+Display.swift"; sourceTree = ""; }; 84D97EC72520D32000F07405 /* PolkadotIcon+Image.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PolkadotIcon+Image.swift"; sourceTree = ""; }; 84D9C41026CD361C004AB2AB /* SpecVersionSubscriptionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpecVersionSubscriptionTests.swift; sourceTree = ""; }; 84DA3B1124C6D29100B5E27F /* RuntimeVersion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeVersion.swift; sourceTree = ""; }; 84DA3B1324C6D7C700B5E27F /* RuntimeDispatchInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeDispatchInfo.swift; sourceTree = ""; }; + 84DA3B1824C8200E00B5E27F /* ConnectionItem+Default.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ConnectionItem+Default.swift"; sourceTree = ""; }; 84DAC197268D3DD9002D0DF4 /* SNAddressType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SNAddressType.swift; sourceTree = ""; }; 84DB4E1D25E93B1700A6DF41 /* Identity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Identity.swift; sourceTree = ""; }; 84DB4E2225E945E000A6DF41 /* SlashingSpans.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SlashingSpans.swift; sourceTree = ""; }; 84DB4E5B25EA71C100A6DF41 /* StringScaleMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringScaleMapper.swift; sourceTree = ""; }; 84DB4E6B25EA740600A6DF41 /* ConstantCodingPath.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConstantCodingPath.swift; sourceTree = ""; }; + 84DB9E8926409E8200F23DD3 /* StakingRedeemLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingRedeemLayout.swift; sourceTree = ""; }; 84DB9E8F2640A48E00F23DD3 /* StakingRedeemViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingRedeemViewModel.swift; sourceTree = ""; }; + 84DB9E972640A49E00F23DD3 /* StakingRedeemViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingRedeemViewModelFactory.swift; sourceTree = ""; }; 84DBEA41265E80DD00FDF73C /* LearnMoreViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LearnMoreViewModel.swift; sourceTree = ""; }; 84DBEA46265E98C300FDF73C /* AmountInputResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AmountInputResult.swift; sourceTree = ""; }; 84DBEA4D265ED5B600FDF73C /* CrowdloanDataValidatorFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrowdloanDataValidatorFactory.swift; sourceTree = ""; }; @@ -4227,6 +4684,7 @@ 84F2FEF925E797E8008338D5 /* StorageRequestFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageRequestFactory.swift; sourceTree = ""; }; 84F2FEFE25E7ADE7008338D5 /* ValidatorPrefs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValidatorPrefs.swift; sourceTree = ""; }; 84F2FF0625E7AF8F008338D5 /* EraValidatorInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EraValidatorInfo.swift; sourceTree = ""; }; + 84F30E9625FD3C5300039D09 /* EventEmittingStorageSubscription.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventEmittingStorageSubscription.swift; sourceTree = ""; }; 84F30E9B25FD3DBC00039D09 /* EmptyHandlingStorageSubscription.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyHandlingStorageSubscription.swift; sourceTree = ""; }; 84F30EA025FD3EE700039D09 /* ChildSubscriptionFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChildSubscriptionFactory.swift; sourceTree = ""; }; 84F30EE325FFAC0800039D09 /* StreamableProviderOptions+Substrate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "StreamableProviderOptions+Substrate.swift"; sourceTree = ""; }; @@ -4258,6 +4716,7 @@ 84F5105A263AB9F2005D15AE /* NetworkFeeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkFeeView.swift; sourceTree = ""; }; 84F5105F263AE530005D15AE /* TitleValueView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TitleValueView.swift; sourceTree = ""; }; 84F5107B263C0C11005D15AE /* AnyProviderCleaning.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnyProviderCleaning.swift; sourceTree = ""; }; + 84F6B6422619A8480038F10D /* SubscanConcreteExtrinsicsData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscanConcreteExtrinsicsData.swift; sourceTree = ""; }; 84F6B6472619A87C0038F10D /* ExtrinsicIndexWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtrinsicIndexWrapper.swift; sourceTree = ""; }; 84F6B64F2619E1ED0038F10D /* Int+Operations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Int+Operations.swift"; sourceTree = ""; }; 84F77AA9265EE86B00F54885 /* CrowdloanErrorPresentable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrowdloanErrorPresentable.swift; sourceTree = ""; }; @@ -4268,18 +4727,25 @@ 84FA8359265CE5BE00FDF727 /* TitleMultiValueView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TitleMultiValueView.swift; sourceTree = ""; }; 84FAB0622542C8D600319F74 /* ContactItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactItem.swift; sourceTree = ""; }; 84FAB0642542CA4200319F74 /* CDContactItem+CoreDataDecodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CDContactItem+CoreDataDecodable.swift"; sourceTree = ""; }; + 84FAB0662542D06B00319F74 /* WalletContactOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletContactOperationFactory.swift; sourceTree = ""; }; + 84FAB0772543791A00319F74 /* ContactContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactContext.swift; sourceTree = ""; }; 84FACB1625F559F200F32ED4 /* WestendStub.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WestendStub.swift; sourceTree = ""; }; 84FACB1E25F55EC900F32ED4 /* RuntimeCodingServiceStub.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeCodingServiceStub.swift; sourceTree = ""; }; 84FACB2C25F562CB00F32ED4 /* westend-metadata */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "westend-metadata"; sourceTree = ""; }; 84FACB3725F5630000F32ED4 /* RuntimeHelper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RuntimeHelper.swift; sourceTree = ""; }; 84FACB6525F56D5000F32ED4 /* CalculatorServiceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalculatorServiceTests.swift; sourceTree = ""; }; 84FACCD825F8C22A00F32ED4 /* BigInt+Hex.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BigInt+Hex.swift"; sourceTree = ""; }; + 84FB1F662526920B00E0242B /* SubscanTransferData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscanTransferData.swift; sourceTree = ""; }; + 84FB1F68252694B600E0242B /* HistoryInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HistoryInfo.swift; sourceTree = ""; }; 84FB1F6C2526987D00E0242B /* TransactionHistoryContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionHistoryContext.swift; sourceTree = ""; }; + 84FB1F782527065A00E0242B /* HistoryConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HistoryConstants.swift; sourceTree = ""; }; 84FB298B2639ABA500BE0FCD /* YourValidatorList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YourValidatorList.swift; sourceTree = ""; }; + 84FB29932639ABD700BE0FCD /* YourValidatorList+SelectionStart.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "YourValidatorList+SelectionStart.swift"; sourceTree = ""; }; 84FB29982639AC2300BE0FCD /* YourValidatorList+SelectionConfirm.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "YourValidatorList+SelectionConfirm.swift"; sourceTree = ""; }; 84FD3DAE2540BEA000A234E3 /* TransactionHistoryItem+Status.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TransactionHistoryItem+Status.swift"; sourceTree = ""; }; 84FD3DB02540C09800A234E3 /* TransactionHistoryMergeManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionHistoryMergeManager.swift; sourceTree = ""; }; 84FD3DB42540ED0900A234E3 /* Block.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Block.swift; sourceTree = ""; }; + 84FD3DB62540EF0700A234E3 /* TransactionSubscription.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionSubscription.swift; sourceTree = ""; }; 84FD3DBA254104B600A234E3 /* WalletNewTransactionInserted.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletNewTransactionInserted.swift; sourceTree = ""; }; 84FFE504261290830054EA63 /* NetworkInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkInfoView.swift; sourceTree = ""; }; 84FFE50C261290BC0054EA63 /* NetworkInfoView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NetworkInfoView.xib; sourceTree = ""; }; @@ -4287,15 +4753,16 @@ 85211D55E2AF0A697FB3EB84 /* AnalyticsRewardDetailsPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsRewardDetailsPresenter.swift; sourceTree = ""; }; 85F45A5C6145F863760F4409 /* AccountImportWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountImportWireframe.swift; sourceTree = ""; }; 86182A9129A59C6753C4D465 /* NftSendConfirmViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendConfirmViewLayout.swift; sourceTree = ""; }; - 8646C6DACE714085B4B0F799 /* Pods-fearlessAll-fearlessIntegrationTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessAll-fearlessIntegrationTests.debug.xcconfig"; path = "Target Support Files/Pods-fearlessAll-fearlessIntegrationTests/Pods-fearlessAll-fearlessIntegrationTests.debug.xcconfig"; sourceTree = ""; }; + 8647FEB1772B20938D9E8D63 /* TransferInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TransferInteractor.swift; sourceTree = ""; }; 86F7A369E31DCB9ABD556EE9 /* CrowdloanListPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanListPresenter.swift; sourceTree = ""; }; 87F9D215513308538FA3FDC4 /* ContactsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ContactsTests.swift; sourceTree = ""; }; + 8821119C96944A0E3526E93A /* StakingRedeemViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRedeemViewFactory.swift; sourceTree = ""; }; 882D47A501D9D6CCE7B99691 /* LiquidityPoolRemoveLiquidityConfirmProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityConfirmProtocols.swift; sourceTree = ""; }; 885A9E2D3619FEFC5ED0C093 /* WalletChainAccountDashboardWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletChainAccountDashboardWireframe.swift; sourceTree = ""; }; 889A825F58F5CB54118A9D35 /* SelectValidatorsStartWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartWireframe.swift; sourceTree = ""; }; 890203CBFFCBF517C0BAA396 /* YourValidatorListTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = YourValidatorListTests.swift; sourceTree = ""; }; 894987C6E4C372A0E0E72E86 /* WalletChainAccountDashboardViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletChainAccountDashboardViewController.swift; sourceTree = ""; }; - 8A687FBDA0912F8727CE0D81 /* WalletSendConfirmPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmPresenter.swift; sourceTree = ""; }; + 895FD86323A090143D0ADA24 /* Pods-fearlessTests.dev.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessTests.dev.xcconfig"; path = "Target Support Files/Pods-fearlessTests/Pods-fearlessTests.dev.xcconfig"; sourceTree = ""; }; 8A6A52B8A4D734D5BCADE355 /* StakingPoolCreateTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateTests.swift; sourceTree = ""; }; 8AD3D74F8E0B0F097092FDD7 /* ContactsPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ContactsPresenter.swift; sourceTree = ""; }; 8B06C949668CFFDE6F739CC0 /* ContactsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ContactsProtocols.swift; sourceTree = ""; }; @@ -4317,10 +4784,9 @@ 934678CCA0EF35B6AE4AE8A1 /* StakingRewardPayoutsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRewardPayoutsTests.swift; sourceTree = ""; }; 93B26AA9CB558F02F69FF59B /* ExportMnemonicConfirmWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExportMnemonicConfirmWireframe.swift; sourceTree = ""; }; 9403C5F9C88A4690C62A204B /* StakingRewardDestConfirmTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRewardDestConfirmTests.swift; sourceTree = ""; }; - 94C59B15363623B38F70E54E /* MultichainAssetSelectionInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MultichainAssetSelectionInteractor.swift; sourceTree = ""; }; + 947E19739DB3292DAA943CD3 /* Pods-fearlessAll-fearlessIntegrationTests.dev.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessAll-fearlessIntegrationTests.dev.xcconfig"; path = "Target Support Files/Pods-fearlessAll-fearlessIntegrationTests/Pods-fearlessAll-fearlessIntegrationTests.dev.xcconfig"; sourceTree = ""; }; 953E21C32079A8051A0EE964 /* ReferralCrowdloanProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ReferralCrowdloanProtocols.swift; sourceTree = ""; }; 955A6977CCE5861E4F5DCFBB /* AnalyticsValidatorsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsValidatorsViewController.swift; sourceTree = ""; }; - 9596692C164228636164C830 /* MultichainAssetSelectionAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MultichainAssetSelectionAssembly.swift; sourceTree = ""; }; 961642321C9AD1885325A3D7 /* WalletMainContainerViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletMainContainerViewController.swift; sourceTree = ""; }; 9622C6C3102EF12BEE78D63D /* AssetSelectionViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetSelectionViewFactory.swift; sourceTree = ""; }; 96950EE6AE1BA8F9130A4390 /* WalletOptionViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletOptionViewLayout.swift; sourceTree = ""; }; @@ -4328,42 +4794,54 @@ 96D540DFC00C25D8F73CFDC3 /* CustomValidatorListWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CustomValidatorListWireframe.swift; sourceTree = ""; }; 96F09665083031502F9693F8 /* StakingMainWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingMainWireframe.swift; sourceTree = ""; }; 975DECE71DE70DFD866B8E23 /* SelectValidatorsConfirmViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectValidatorsConfirmViewFactory.swift; sourceTree = ""; }; + 97A985C8D05C0BAFEEFADFE7 /* FeatureToggleListViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FeatureToggleListViewController.swift; sourceTree = ""; }; 97E2A7A3731FAC0C965A898A /* StakingPoolInfoViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolInfoViewLayout.swift; sourceTree = ""; }; 99198B2B26321E4004840029 /* PolkaswapSwapConfirmationViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapSwapConfirmationViewController.swift; sourceTree = ""; }; + 9981A1A70BCCB1B1644A7CE0 /* Pods-fearlessAll-fearless.dev.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessAll-fearless.dev.xcconfig"; path = "Target Support Files/Pods-fearlessAll-fearless/Pods-fearlessAll-fearless.dev.xcconfig"; sourceTree = ""; }; 999C15317E0B4FC67B9C17C5 /* StakingAmountProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingAmountProtocols.swift; sourceTree = ""; }; - 9A22A2EB487E282DCA93C676 /* WalletSendConfirmWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmWireframe.swift; sourceTree = ""; }; 9A9EBD3B7AEA5EF594DFEB49 /* PolkaswapAdjustmentProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapAdjustmentProtocols.swift; sourceTree = ""; }; 9AEA7ECB8434DF494D2B25B9 /* ChainAccountTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChainAccountTests.swift; sourceTree = ""; }; 9B5626189788682A84D4E9D7 /* SelectValidatorsConfirmPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectValidatorsConfirmPresenter.swift; sourceTree = ""; }; 9BA528679A82B9A327853804 /* LiquidityPoolSupplyInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyInteractor.swift; sourceTree = ""; }; + 9BD8F497D1380B608E046658 /* ConfirmTransferAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConfirmTransferAssembly.swift; sourceTree = ""; }; 9C01DCD4DA014E8FB50B9F11 /* CrowdloanContributionSetupTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionSetupTests.swift; sourceTree = ""; }; 9C05A688EA7379572BBCE545 /* SelectMarketRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectMarketRouter.swift; sourceTree = ""; }; + 9E06ADA1BE2C3A9277A30E1B /* EcosystemOptionsAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EcosystemOptionsAssembly.swift; sourceTree = ""; }; + 9E29D11C365629B959F44DFA /* ConfirmTransferTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConfirmTransferTests.swift; sourceTree = ""; }; + 9E51A659E2865BD98B6DEF16 /* TonWebBridgeViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TonWebBridgeViewController.swift; sourceTree = ""; }; + 9FBC05405B64AD114FB89FFE /* DappBrowserRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserRouter.swift; sourceTree = ""; }; 9FED48DE9B681995E6E4A581 /* LiquidityPoolDetailsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsProtocols.swift; sourceTree = ""; }; A14CA4551FCC2EBD078E2242 /* AccountConfirmViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountConfirmViewFactory.swift; sourceTree = ""; }; A3104ABC4BECF08B0BA836AA /* AccountConfirmViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountConfirmViewController.swift; sourceTree = ""; }; A31780E84948D7FE632ECB02 /* YourValidatorListProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = YourValidatorListProtocols.swift; sourceTree = ""; }; A3BACB7E24BC87F9218DBBC4 /* StakingPayoutConfirmationViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPayoutConfirmationViewController.swift; sourceTree = ""; }; + A40B8FB36589FB4D3DB1A5B6 /* ConnectedAccountsAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsAssembly.swift; sourceTree = ""; }; A427660DDA1D882327F8FF5C /* AssetNetworksTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetNetworksTests.swift; sourceTree = ""; }; A4900562AFFD45F29F4C5DEF /* LiquidityPoolDetailsViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsViewLayout.swift; sourceTree = ""; }; A6543901A1EE819323DCD95D /* WalletChainAccountDashboardInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletChainAccountDashboardInteractor.swift; sourceTree = ""; }; A692D227372B24F922EFA058 /* LiquidityPoolsOverviewProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewProtocols.swift; sourceTree = ""; }; A7219B81CEA13CD60BD8FAFE /* ClaimCrowdloanRewardsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ClaimCrowdloanRewardsProtocols.swift; sourceTree = ""; }; - A77DF1CA9610844CF63C4BBC /* Pods-fearlessAll-fearless.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessAll-fearless.debug.xcconfig"; path = "Target Support Files/Pods-fearlessAll-fearless/Pods-fearlessAll-fearless.debug.xcconfig"; sourceTree = ""; }; + A751AAC4AA1E6401E4F43142 /* EcosystemOptionsInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EcosystemOptionsInteractor.swift; sourceTree = ""; }; A7AD1285797131E836CD994B /* AssetSelectionWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetSelectionWireframe.swift; sourceTree = ""; }; A82E373FFFBF708D7CF0973E /* StakingUnbondSetupViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondSetupViewFactory.swift; sourceTree = ""; }; A84638893DC99974E098719E /* StakingUnbondConfirmWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondConfirmWireframe.swift; sourceTree = ""; }; A865455F8FC60413A6CB8A44 /* ExportSeedInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExportSeedInteractor.swift; sourceTree = ""; }; + A90D38E873CA7EBD23FC14B5 /* TransferAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TransferAssembly.swift; sourceTree = ""; }; A9D05025D7DB75DB7A766586 /* AssetNetworksAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetNetworksAssembly.swift; sourceTree = ""; }; AA2580363AC3E4A9CD40256E /* RecommendedValidatorListPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecommendedValidatorListPresenter.swift; sourceTree = ""; }; AB2349A5057312BDB6C65804 /* StakingAmountViewController.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; path = StakingAmountViewController.xib; sourceTree = ""; }; AB67BB02A5FD525C8ACA5521 /* WalletTransactionDetailsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionDetailsTests.swift; sourceTree = ""; }; + AB8CC373A5E9E1C11181A4B9 /* DappBrowserInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserInteractor.swift; sourceTree = ""; }; ABFC2AD62212BE16C7B7C429 /* RecommendedValidatorListTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecommendedValidatorListTests.swift; sourceTree = ""; }; AC0C84704B8876688E59FA58 /* AnalyticsRewardDetailsInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsRewardDetailsInteractor.swift; sourceTree = ""; }; AC404A4071AF571FAC4C1994 /* AccountExportPasswordProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountExportPasswordProtocols.swift; sourceTree = ""; }; ACAEDA02F409FE23749A1551 /* AccountCreateWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountCreateWireframe.swift; sourceTree = ""; }; AD0EAB8749661CB4428685FB /* SelectMarketProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectMarketProtocols.swift; sourceTree = ""; }; + AD417B638E8EFD33EBDC91DF /* TransferProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TransferProtocols.swift; sourceTree = ""; }; ADD19595322BF8FEC0F1F746 /* StakingPoolCreatePresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreatePresenter.swift; sourceTree = ""; }; ADD348E749EC6A7E3BB069DE /* StakingUnbondConfirmProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondConfirmProtocols.swift; sourceTree = ""; }; + AE1000F126679886004753B7 /* ChangeTargetsRecommendationWireframe.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeTargetsRecommendationWireframe.swift; sourceTree = ""; }; + AE1000F326679946004753B7 /* InitiatedBondingRecommendationWireframe.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InitiatedBondingRecommendationWireframe.swift; sourceTree = ""; }; AE20602B2636EA5800357578 /* MoonPayKeys.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoonPayKeys.swift; sourceTree = ""; }; AE2060AF2637068700357578 /* CIKeys.stencil */ = {isa = PBXFileReference; lastKnownFileType = text; path = CIKeys.stencil; sourceTree = ""; }; AE2C101D267A6271004AA8E9 /* CustomValidatorListComposerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomValidatorListComposerTests.swift; sourceTree = ""; }; @@ -4425,9 +4903,15 @@ AEA0C8A9267B6B4300F9666F /* SelectedValidatorListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedValidatorListViewController.swift; sourceTree = ""; }; AEA0C8AB267B6B5200F9666F /* SelectedValidatorListViewFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedValidatorListViewFactory.swift; sourceTree = ""; }; AEA0C8AD267B818900F9666F /* SelectedValidatorListViewLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedValidatorListViewLayout.swift; sourceTree = ""; }; + AEA0C8AF267B82BA00F9666F /* SelectedValidatorListHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedValidatorListHeaderView.swift; sourceTree = ""; }; AEA0C8B3267BA40C00F9666F /* SelectedValidatorListViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedValidatorListViewModelFactory.swift; sourceTree = ""; }; AEA0C8B5267BABCC00F9666F /* SelectedValidatorListViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedValidatorListViewModel.swift; sourceTree = ""; }; AEA0C8B7267C905500F9666F /* SelectedValidatorCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedValidatorCell.swift; sourceTree = ""; }; + AEA0C8B9268113F800F9666F /* YourValidatorList+RecommendedList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "YourValidatorList+RecommendedList.swift"; sourceTree = ""; }; + AEA0C8BB2681140700F9666F /* YourValidatorList+CustomList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "YourValidatorList+CustomList.swift"; sourceTree = ""; }; + AEA0C8BD2681141700F9666F /* YourValidatorList+SelectedList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "YourValidatorList+SelectedList.swift"; sourceTree = ""; }; + AEA0C8C5268131C500F9666F /* InitiatedBondingSelectedValidatorsListWireframe.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InitiatedBondingSelectedValidatorsListWireframe.swift; sourceTree = ""; }; + AEA0C8C7268131DD00F9666F /* ChangeTargetsSelectedValidatorsListWireframe.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeTargetsSelectedValidatorsListWireframe.swift; sourceTree = ""; }; AEA0C8CA26813AE400F9666F /* SelectedValidatorListTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedValidatorListTests.swift; sourceTree = ""; }; AEA2C1B32681E99D0069492E /* ValidatorSearchProtocols.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValidatorSearchProtocols.swift; sourceTree = ""; }; AEA2C1B52681E9B20069492E /* ValidatorSearchViewFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValidatorSearchViewFactory.swift; sourceTree = ""; }; @@ -4438,6 +4922,7 @@ AEA2C1BF2681E9EC0069492E /* ValidatorSearchViewLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValidatorSearchViewLayout.swift; sourceTree = ""; }; AEAC68F426E9F93B00346599 /* CoingeckoDefinitions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoingeckoDefinitions.swift; sourceTree = ""; }; AEAC68F626E9FB8400346599 /* CoingeckoOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoingeckoOperationFactory.swift; sourceTree = ""; }; + AEAC68FD26EA3C2A00346599 /* CoingeckoPriceSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoingeckoPriceSource.swift; sourceTree = ""; }; AEAC690326EB891900346599 /* Logger+FearlessUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Logger+FearlessUtils.swift"; sourceTree = ""; }; AEACD5F8265E94AB00A09892 /* StatusViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusViewModel.swift; sourceTree = ""; }; AEB9978F26119E4C005C60A5 /* StoriesViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoriesViewModelFactory.swift; sourceTree = ""; }; @@ -4481,6 +4966,8 @@ AEFC6D6E2600D7CD000BD310 /* NetworkInfoViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkInfoViewModelFactory.swift; sourceTree = ""; }; AEFED3DAA18BCEF0BFA15728 /* SelectValidatorsStartInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartInteractor.swift; sourceTree = ""; }; AF01941105BCD02536538362 /* CrowdloanContributionConfirmProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionConfirmProtocols.swift; sourceTree = ""; }; + AF0C991DB1C7567632BB54A9 /* DappBrowserListRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserListRouter.swift; sourceTree = ""; }; + AF4A966103685CC10F99B63B /* FeatureToggleListAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FeatureToggleListAssembly.swift; sourceTree = ""; }; AF4DB8C42D41C3A14A379122 /* CreateContactProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreateContactProtocols.swift; sourceTree = ""; }; AFC9C09ABBCEB6E581134E84 /* MainNftContainerViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MainNftContainerViewController.swift; sourceTree = ""; }; AFD95EE4822A564C0D4D1CFE /* WalletOptionPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletOptionPresenter.swift; sourceTree = ""; }; @@ -4491,24 +4978,28 @@ B3459F610D6E5C782D8695A9 /* LiquidityPoolRemoveLiquidityConfirmViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityConfirmViewLayout.swift; sourceTree = ""; }; B399E7CA0A03A06EFDF1B126 /* PolkaswapTransaktionSettingsPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapTransaktionSettingsPresenter.swift; sourceTree = ""; }; B4774F00EDBB28F374797637 /* ClaimCrowdloanRewardsInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ClaimCrowdloanRewardsInteractor.swift; sourceTree = ""; }; + B4EE06DBE885C0467D8929FE /* FeatureToggleListRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FeatureToggleListRouter.swift; sourceTree = ""; }; B5934BA68F375F5F8237967D /* NetworkInfoViewController.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; path = NetworkInfoViewController.xib; sourceTree = ""; }; B5E69C4F66805399A3DB4ED8 /* MainNftContainerAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MainNftContainerAssembly.swift; sourceTree = ""; }; B8D9DD27C76FE239728ED5F8 /* StakingPoolCreateInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateInteractor.swift; sourceTree = ""; }; B90CEC70F101AA25A4C00021 /* YourValidatorListViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = YourValidatorListViewController.swift; sourceTree = ""; }; B93A1BA7DFEE1D7728B84949 /* AccountExportPasswordTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountExportPasswordTests.swift; sourceTree = ""; }; + BA8C84B54C44C4D28D54B657 /* TransferRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TransferRouter.swift; sourceTree = ""; }; + BAB2478DE3AF0885A3ED7ED8 /* StakingRedeemPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRedeemPresenter.swift; sourceTree = ""; }; BB5E8FAB4C12D7BFEEF576AD /* AnalyticsRewardDetailsWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsRewardDetailsWireframe.swift; sourceTree = ""; }; BB719C069A26244D194C4374 /* WalletChainAccountDashboardViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletChainAccountDashboardViewFactory.swift; sourceTree = ""; }; BB837A15BAAED64BC32F3F44 /* SelectMarketInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectMarketInteractor.swift; sourceTree = ""; }; - BB86E65E22C0AF7EDD0701A4 /* AccountStatisticsPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountStatisticsPresenter.swift; sourceTree = ""; }; BC2C9D26B9F9CC048C67796F /* AnalyticsRewardDetailsViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsRewardDetailsViewLayout.swift; sourceTree = ""; }; + BD1C635488F941373CDBE377 /* ConfirmTransferRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConfirmTransferRouter.swift; sourceTree = ""; }; + BE7B9BC51F6B13337450E3DC /* FeatureToggleListProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FeatureToggleListProtocols.swift; sourceTree = ""; }; BE7D061906CF67230BF5393A /* NftSendConfirmTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendConfirmTests.swift; sourceTree = ""; }; C0EE58376751B23A9CEAEE1A /* StakingPoolCreateConfirmRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateConfirmRouter.swift; sourceTree = ""; }; C16219B3D0D2A658185C0850 /* MainNftContainerInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MainNftContainerInteractor.swift; sourceTree = ""; }; + C18EC31B3CF418C773F495C7 /* Pods-fearlessAll-fearlessIntegrationTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessAll-fearlessIntegrationTests.debug.xcconfig"; path = "Target Support Files/Pods-fearlessAll-fearlessIntegrationTests/Pods-fearlessAll-fearlessIntegrationTests.debug.xcconfig"; sourceTree = ""; }; C191A3875F3255B72E01FA92 /* CrowdloanListWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanListWireframe.swift; sourceTree = ""; }; C23EA8830B337C4F8142A395 /* AddCustomNodeTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AddCustomNodeTests.swift; sourceTree = ""; }; C2956D0C69019DDCDAB2EB34 /* CustomValidatorListViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CustomValidatorListViewLayout.swift; sourceTree = ""; }; C316BE4F5A0342D379F783E8 /* StartSelectValidatorsTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StartSelectValidatorsTests.swift; sourceTree = ""; }; - C323602A21644DCB1B2EEFF6 /* Pods_fearlessAll_fearlessIntegrationTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_fearlessAll_fearlessIntegrationTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C503100478AB56E903598A78 /* ReferralCrowdloanPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ReferralCrowdloanPresenter.swift; sourceTree = ""; }; C52B689ECDB43EB0FEE95553 /* LiquidityPoolRemoveLiquidityTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityTests.swift; sourceTree = ""; }; C53DFFFB3B5B48DB51692EFA /* LiquidityPoolDetailsInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsInteractor.swift; sourceTree = ""; }; @@ -4518,10 +5009,9 @@ C600C4D42802B87100111316 /* UsernameSetupViewLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UsernameSetupViewLayout.swift; sourceTree = ""; }; C600C4D628053DF500111316 /* UsernameSetupViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UsernameSetupViewController.swift; sourceTree = ""; }; C600C4D828054A1B00111316 /* AccountCreateFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountCreateFlow.swift; sourceTree = ""; }; + C603E81028583C2A00007B72 /* StakingMainRelaychainStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingMainRelaychainStrategy.swift; sourceTree = ""; }; C61166682B3BFA9000F483C4 /* NftHeaderCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NftHeaderCell.swift; sourceTree = ""; }; C611666B2B3C03B800F483C4 /* NftHeaderCellViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NftHeaderCellViewModel.swift; sourceTree = ""; }; - C6182B4A2C6327D00089558D /* SubstrateDataModel_v8.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = SubstrateDataModel_v8.xcdatamodel; sourceTree = ""; }; - C6182B4B2C6474F30089558D /* PricesService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PricesService.swift; sourceTree = ""; }; C61BE0DFC48282DFDBB820C9 /* LiquidityPoolRemoveLiquidityAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityAssembly.swift; sourceTree = ""; }; C62522E202A1C5EE60D25122 /* NftSendPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendPresenter.swift; sourceTree = ""; }; C6264C282799A56E00FCA0DB /* WalletDetailsTableCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletDetailsTableCell.swift; sourceTree = ""; }; @@ -4564,7 +5054,6 @@ C640415F28F5191100845780 /* CreateContactViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateContactViewModel.swift; sourceTree = ""; }; C640416128F51F9900845780 /* CreateContactViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateContactViewModelFactory.swift; sourceTree = ""; }; C648FFC728DC43A70072951B /* EmptyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyView.swift; sourceTree = ""; }; - C64DD7572C75C53A00E97804 /* PriceDataMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PriceDataMapper.swift; sourceTree = ""; }; C64ECCE228873F2500CFF434 /* ChainAssetsFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainAssetsFetching.swift; sourceTree = ""; }; C6584E342982524700592A92 /* WalletTransactionHistoryDependencyContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletTransactionHistoryDependencyContainer.swift; sourceTree = ""; }; C65A6591288E5CF400679D65 /* AccountInfoFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountInfoFetching.swift; sourceTree = ""; }; @@ -4621,29 +5110,6 @@ C6E992712B999A8B00806910 /* id */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = id; path = id.lproj/Localizable.stringsdict; sourceTree = ""; }; C6F8BBBA9EABA266B288333F /* AnalyticsValidatorsViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsValidatorsViewFactory.swift; sourceTree = ""; }; C6FB932D27C9334100563E61 /* AvailableExportOptionsProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvailableExportOptionsProvider.swift; sourceTree = ""; }; - C6FBA6D72C65DDBC008B18D9 /* AssetModelMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetModelMapper.swift; sourceTree = ""; }; - C6FBA6D92C65EA56008B18D9 /* AssetRepositoryFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetRepositoryFactory.swift; sourceTree = ""; }; - C6FBA6DB2C69E006008B18D9 /* PriceDataHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PriceDataHelper.swift; sourceTree = ""; }; - C6FBA6DD2C72E0FD008B18D9 /* PricesUpdated.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PricesUpdated.swift; sourceTree = ""; }; - C6FBA6FC2C743D21008B18D9 /* OKXDexAggregatorService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexAggregatorService.swift; sourceTree = ""; }; - C6FBA6FE2C743D45008B18D9 /* OKXDexRequestSigner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexRequestSigner.swift; sourceTree = ""; }; - C6FBA7002C743D51008B18D9 /* OKXDexSwapRequestParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexSwapRequestParameters.swift; sourceTree = ""; }; - C6FBA7012C743D51008B18D9 /* OKXDexAllTokensRequestParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexAllTokensRequestParameters.swift; sourceTree = ""; }; - C6FBA7022C743D51008B18D9 /* OKXDexApproveRequestParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexApproveRequestParameters.swift; sourceTree = ""; }; - C6FBA7032C743D52008B18D9 /* OKXDexLiquiditySourceRequestParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexLiquiditySourceRequestParameters.swift; sourceTree = ""; }; - C6FBA7042C743D52008B18D9 /* OKXDexQuotesRequestParameters.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexQuotesRequestParameters.swift; sourceTree = ""; }; - C6FBA70A2C743D5D008B18D9 /* OKXResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXResponse.swift; sourceTree = ""; }; - C6FBA70B2C743D5D008B18D9 /* OKXToken.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXToken.swift; sourceTree = ""; }; - C6FBA70C2C743D5D008B18D9 /* OKXSupportedChain.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXSupportedChain.swift; sourceTree = ""; }; - C6FBA70D2C743D5D008B18D9 /* OKXDexQuote.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexQuote.swift; sourceTree = ""; }; - C6FBA70E2C743D5E008B18D9 /* OKXSwap.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXSwap.swift; sourceTree = ""; }; - C6FBA70F2C743D5E008B18D9 /* OKXDexProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexProtocol.swift; sourceTree = ""; }; - C6FBA7102C743D5E008B18D9 /* OKXDexRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexRouter.swift; sourceTree = ""; }; - C6FBA7112C743D5E008B18D9 /* OKXDexSubrouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXDexSubrouter.swift; sourceTree = ""; }; - C6FBA7122C743D5E008B18D9 /* OKXApproveTransaction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXApproveTransaction.swift; sourceTree = ""; }; - C6FBA7132C743D5F008B18D9 /* OKXLiquiditySource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXLiquiditySource.swift; sourceTree = ""; }; - C6FBA7142C743D5F008B18D9 /* OKXQuote.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXQuote.swift; sourceTree = ""; }; - C6FBA7152C743D5F008B18D9 /* OKXSwapTransaction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXSwapTransaction.swift; sourceTree = ""; }; C705CA1083C1EE58426D90CD /* AllDoneInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AllDoneInteractor.swift; sourceTree = ""; }; C7416F3AFA5F4D1130B1C410 /* WalletTransactionDetailsWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionDetailsWireframe.swift; sourceTree = ""; }; C74A2166B054240BD5D925B6 /* UsernameSetupViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UsernameSetupViewFactory.swift; sourceTree = ""; }; @@ -4657,6 +5123,7 @@ C96C3B5ABF4A8124848EFD17 /* ControllerAccountConfirmationWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountConfirmationWireframe.swift; sourceTree = ""; }; CA7427142A4B905B5DB15498 /* NftDetailsViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftDetailsViewController.swift; sourceTree = ""; }; CA8ECADDA809DE7932B7A17C /* StakingPoolCreateConfirmProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateConfirmProtocols.swift; sourceTree = ""; }; + CAA8A8A8C3822633813C71F2 /* FeatureToggleListPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FeatureToggleListPresenter.swift; sourceTree = ""; }; CC17D12DCD0CDAF0BC13D80D /* StakingUnbondSetupViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondSetupViewController.swift; sourceTree = ""; }; CC5083A5751A1A3CC95F4F6F /* StakingUnbondSetupWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondSetupWireframe.swift; sourceTree = ""; }; CC516FE0E7682210D0F07FB2 /* StakingPoolInfoAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolInfoAssembly.swift; sourceTree = ""; }; @@ -4665,11 +5132,10 @@ CD8B6213B00597B3F56F650D /* StakingUnbondSetupFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondSetupFlow.swift; sourceTree = ""; }; CE29083D5CE7EA0D886D069A /* WalletTransactionHistoryViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionHistoryViewFactory.swift; sourceTree = ""; }; CE294DDEAB7902D7CE1F1BA1 /* AnalyticsRewardDetailsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnalyticsRewardDetailsProtocols.swift; sourceTree = ""; }; - CF4A813A6FB09F9FE5891578 /* WalletSendConfirmViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmViewController.swift; sourceTree = ""; }; CF891BE39D442C2D06DDF3BB /* StakingRewardDetailsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRewardDetailsProtocols.swift; sourceTree = ""; }; D06A0B252CCD6CAE8C5EDC16 /* AddCustomNodeProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AddCustomNodeProtocols.swift; sourceTree = ""; }; D101339CC1292531CC4DB0AC /* StakingUnbondSetupInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondSetupInteractor.swift; sourceTree = ""; }; - D2E749A964E0920F98B62B71 /* MultichainAssetSelectionProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MultichainAssetSelectionProtocols.swift; sourceTree = ""; }; + D21069CCE65307334B89FD09 /* ConnectedAccountsPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsPresenter.swift; sourceTree = ""; }; D39D54DC9992CF9CB6699AA3 /* StakingAmountViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingAmountViewFactory.swift; sourceTree = ""; }; D430E8B808864B281A62AB43 /* LiquidityPoolSupplyConfirmViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmViewController.swift; sourceTree = ""; }; D45B7031E0809CED062C83F8 /* StakingUnbondConfirmPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingUnbondConfirmPresenter.swift; sourceTree = ""; }; @@ -4687,10 +5153,12 @@ D7FE5F01FC9364788A91EFA5 /* SelectValidatorsConfirmProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectValidatorsConfirmProtocols.swift; sourceTree = ""; }; D80247ADAAB061D1A10856B2 /* WalletTransactionDetailsViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionDetailsViewLayout.swift; sourceTree = ""; }; D852BF894D6E06EB9A92BC71 /* CrowdloanListViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanListViewController.swift; sourceTree = ""; }; + D9657DB9D8AB36AADD726E5E /* Pods-fearlessTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessTests.release.xcconfig"; path = "Target Support Files/Pods-fearlessTests/Pods-fearlessTests.release.xcconfig"; sourceTree = ""; }; D9A16451B21451996CAA31F8 /* CustomValidatorListTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CustomValidatorListTests.swift; sourceTree = ""; }; DA8D61B74FE9C5199FD0AEBC /* NetworkInfoInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkInfoInteractor.swift; sourceTree = ""; }; DB255DD7988E0E0E9CA35DA9 /* SwapTransactionDetailViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SwapTransactionDetailViewLayout.swift; sourceTree = ""; }; DB76FEC075A6FE1D246BA5DD /* StakingAmountViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingAmountViewController.swift; sourceTree = ""; }; + DB7F5F9B54BE4234C5682BDE /* StakingRedeemViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRedeemViewController.swift; sourceTree = ""; }; DBA49A762B2FBB66FD6A55FC /* ControllerAccountConfirmationProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountConfirmationProtocols.swift; sourceTree = ""; }; DC265B5F209B038633AE0E3F /* SwapTransactionDetailProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SwapTransactionDetailProtocols.swift; sourceTree = ""; }; DC50F2FF6E8EBC00B56CB86D /* PolkaswapSwapConfirmationRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapSwapConfirmationRouter.swift; sourceTree = ""; }; @@ -4703,7 +5171,6 @@ E11575D8B4F64C2E805372A5 /* AccountExportPasswordViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountExportPasswordViewFactory.swift; sourceTree = ""; }; E1E60EF37AC0A7646ED8FE64 /* AccountImportViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountImportViewFactory.swift; sourceTree = ""; }; E32C2DC4CC106A3509BE651D /* ExportMnemonicTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExportMnemonicTests.swift; sourceTree = ""; }; - E357E95FDDBF8F3938402145 /* Pods-fearlessAll-fearless.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessAll-fearless.release.xcconfig"; path = "Target Support Files/Pods-fearlessAll-fearless/Pods-fearlessAll-fearless.release.xcconfig"; sourceTree = ""; }; E4E78D69E8EBC3EB4D01F8EF /* CrowdloanListInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanListInteractor.swift; sourceTree = ""; }; E57E3EA5C070C64000ABCDC0 /* StakingRewardPayoutsWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRewardPayoutsWireframe.swift; sourceTree = ""; }; E587507F8CDA7F84A1A4EA95 /* WarningAlertTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WarningAlertTests.swift; sourceTree = ""; }; @@ -4713,14 +5180,13 @@ E70C8A9C6BF8AE46CAE1CB61 /* CrowdloanListViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanListViewFactory.swift; sourceTree = ""; }; E8AAC6AAD532FC7E63765D85 /* PolkaswapAdjustmentViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapAdjustmentViewController.swift; sourceTree = ""; }; E9636093217ABE05A7FAC9B9 /* AccountCreateViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountCreateViewFactory.swift; sourceTree = ""; }; + E9B71CD26CEE6C228B8AE392 /* ConnectedAccountsViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConnectedAccountsViewLayout.swift; sourceTree = ""; }; E9DE46BBDFD90D42835CA6B9 /* AssetNetworksViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AssetNetworksViewController.swift; sourceTree = ""; }; - EA86DE0B14A20416D3AF1E1E /* Pods-fearlessAll-fearlessIntegrationTests.dev.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessAll-fearlessIntegrationTests.dev.xcconfig"; path = "Target Support Files/Pods-fearlessAll-fearlessIntegrationTests/Pods-fearlessAll-fearlessIntegrationTests.dev.xcconfig"; sourceTree = ""; }; EB8605FD90D8C3553A9897B4 /* AccountImportPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountImportPresenter.swift; sourceTree = ""; }; EC012CF1C792B34BD5FF45A2 /* NftDetailsProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftDetailsProtocols.swift; sourceTree = ""; }; EC863A9CE29C63B740C6E4D9 /* LiquidityPoolsOverviewAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewAssembly.swift; sourceTree = ""; }; ECBF10B7D4707E4D7D6387CF /* FiltersViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FiltersViewFactory.swift; sourceTree = ""; }; ECE2059F621D024F85EFBFD0 /* LiquidityPoolRemoveLiquidityConfirmAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolRemoveLiquidityConfirmAssembly.swift; sourceTree = ""; }; - ED916AAFB6B5A7FA0C802615 /* Pods-fearlessTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-fearlessTests.debug.xcconfig"; path = "Target Support Files/Pods-fearlessTests/Pods-fearlessTests.debug.xcconfig"; sourceTree = ""; }; EDB9EDB05686DF11958145E1 /* ControllerAccountWireframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountWireframe.swift; sourceTree = ""; }; EDDA0B079962E00FAFBE07AD /* ChainSelectionProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChainSelectionProtocols.swift; sourceTree = ""; }; EDED6FBACD36C077521CB24D /* FiltersViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FiltersViewController.swift; sourceTree = ""; }; @@ -4728,9 +5194,9 @@ EED9939B17C4224C8E153F8A /* SelectValidatorsStartProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartProtocols.swift; sourceTree = ""; }; EF3AD755B2B3DCFB3D14DF91 /* ExportMnemonicProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExportMnemonicProtocols.swift; sourceTree = ""; }; EF65551AE1E858C563054E87 /* ContactsAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ContactsAssembly.swift; sourceTree = ""; }; - EF834BF779244B8AF7746B04 /* WalletSendConfirmProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmProtocols.swift; sourceTree = ""; }; EFB1161D25AF1FC90AA23B7A /* WalletTransactionHistoryViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletTransactionHistoryViewLayout.swift; sourceTree = ""; }; EFB278373745C20822442686 /* ExportSeedPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExportSeedPresenter.swift; sourceTree = ""; }; + EFC41ED0064460B3048E7D14 /* DappBrowserProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserProtocols.swift; sourceTree = ""; }; F02C3AF74DE2F2CDBD165803 /* NetworkIssuesNotificationProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NetworkIssuesNotificationProtocols.swift; sourceTree = ""; }; F02DBCA4A63A5E52E3739374 /* ControllerAccountConfirmationViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountConfirmationViewFactory.swift; sourceTree = ""; }; F12B2D844B474F810C807451 /* AccountManagementTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountManagementTests.swift; sourceTree = ""; }; @@ -4738,9 +5204,11 @@ F1E3F963A56923FD036280BD /* WalletOptionAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletOptionAssembly.swift; sourceTree = ""; }; F23E38DCBC74C528D7839B76 /* CrowdloanContributionSetupInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CrowdloanContributionSetupInteractor.swift; sourceTree = ""; }; F28EDDF9277242505FDDECA1 /* CustomValidatorListProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CustomValidatorListProtocols.swift; sourceTree = ""; }; + F2DB48A2C904672E63D78D4D /* EcosystemOptionsViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EcosystemOptionsViewLayout.swift; sourceTree = ""; }; F312CA3A7087424A540614DD /* StakingPoolCreateAssembly.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateAssembly.swift; sourceTree = ""; }; F329740EC1B8CC94D02A8ABD /* SwapTransactionDetailRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SwapTransactionDetailRouter.swift; sourceTree = ""; }; F3EB4CF4E3E4B486D16BDE5C /* SwapTransactionDetailInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SwapTransactionDetailInteractor.swift; sourceTree = ""; }; + F400A7C1260CE1670061D576 /* StakingRewardStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingRewardStatus.swift; sourceTree = ""; }; F406B0E526299E34004FDCCC /* ErrorStateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorStateView.swift; sourceTree = ""; }; F408E9B526B807200043CFE0 /* AnalyticsRewardsHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsRewardsHeaderView.swift; sourceTree = ""; }; F408E9BD26B80FD30043CFE0 /* AnalyticsSectionHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsSectionHeader.swift; sourceTree = ""; }; @@ -4807,6 +5275,7 @@ F462B363260C88050005AB01 /* UITableView+Reuse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITableView+Reuse.swift"; sourceTree = ""; }; F469114A26392DD500E04D4D /* StakingBondMoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingBondMoreTests.swift; sourceTree = ""; }; F471897526C297AA006487AD /* AnalyticsValidatorsPage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsValidatorsPage.swift; sourceTree = ""; }; + F471897A26C29A78006487AD /* AnalyticsValidatorsPageSelector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsValidatorsPageSelector.swift; sourceTree = ""; }; F474D387260CBEE600013699 /* StakingRewardDetailsViewLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingRewardDetailsViewLayout.swift; sourceTree = ""; }; F477CD25262EAD30004DF739 /* StakingPayoutViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingPayoutViewModelFactory.swift; sourceTree = ""; }; F477CD39262EE0E7004DF739 /* StakingRewardDetailsViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingRewardDetailsViewModelFactory.swift; sourceTree = ""; }; @@ -4863,6 +5332,7 @@ F4DCAE4626207EF900CCA6BF /* PayoutRewardsServiceProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PayoutRewardsServiceProtocol.swift; sourceTree = ""; }; F4DCAE4E2620819000CCA6BF /* PayoutRewardsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PayoutRewardsService.swift; sourceTree = ""; }; F4E117B8264BAA81006F03B0 /* ControllerAccountConfirmationVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ControllerAccountConfirmationVM.swift; sourceTree = ""; }; + F4E339622614A03F0028B6B1 /* ExtrinsicsInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtrinsicsInfo.swift; sourceTree = ""; }; F4EAC7962642E0D800FBDDC3 /* ControllerAccountViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ControllerAccountViewModelFactory.swift; sourceTree = ""; }; F4EF24C726BA713300F28B4E /* AnalyticsStakeHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsStakeHeaderView.swift; sourceTree = ""; }; F4EF24CF26BA7A4300F28B4E /* AnalyticsViewModelFactoryBase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsViewModelFactoryBase.swift; sourceTree = ""; }; @@ -4881,6 +5351,7 @@ F52B8815D6AF5E69B145D245 /* CustomValidatorListViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CustomValidatorListViewFactory.swift; sourceTree = ""; }; F55184167D22A33EF7FF77AE /* NftSendProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendProtocols.swift; sourceTree = ""; }; F61D8973ADEB461DE2AD3E13 /* RecommendedValidatorListViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecommendedValidatorListViewController.swift; sourceTree = ""; }; + F684B043895B80CAD70A59CF /* DappBrowserViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DappBrowserViewLayout.swift; sourceTree = ""; }; F74547DAC8B04C2A1A7FD625 /* StakingRedeemFlow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingRedeemFlow.swift; sourceTree = ""; }; F829E7F8B39EE7D977001510 /* ControllerAccountProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountProtocols.swift; sourceTree = ""; }; F9416E68AE4D5613E9434226 /* StakingPoolCreateConfirmViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateConfirmViewController.swift; sourceTree = ""; }; @@ -4893,7 +5364,6 @@ FA004898282CCFCD0032FF49 /* SelectValidatorsStartParachainViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartParachainViewModelFactory.swift; sourceTree = ""; }; FA00489A282CCFDC0032FF49 /* SelectValidatorsStartRelaychainViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartRelaychainViewModelFactory.swift; sourceTree = ""; }; FA0066E82935D07D0068FC61 /* RecommendedValidatorListPoolStrategy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RecommendedValidatorListPoolStrategy.swift; sourceTree = ""; }; - FA01B2BA2C6213740078A35B /* InfoTitleView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InfoTitleView.swift; sourceTree = ""; }; FA054A992BCD1FA3007B8F6D /* AvailableLiquidityPoolsListPresenter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvailableLiquidityPoolsListPresenter.swift; sourceTree = ""; }; FA054A9B2BCD1FAF007B8F6D /* AvailableLiquidityPoolsListViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvailableLiquidityPoolsListViewModelFactory.swift; sourceTree = ""; }; FA072C13277AE2FE00731718 /* QRCaptureService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCaptureService.swift; sourceTree = ""; }; @@ -4950,18 +5420,21 @@ FA2222902BD239500031DE04 /* SoraSubqueryPriceResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoraSubqueryPriceResponse.swift; sourceTree = ""; }; FA2222932BD2726F0031DE04 /* SkeletonLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SkeletonLabel.swift; sourceTree = ""; }; FA2222952BD272A30031DE04 /* SkeletonLoadableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SkeletonLoadableView.swift; sourceTree = ""; }; - FA236A402C4FA0A4009330F2 /* NomisJSONDecoder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NomisJSONDecoder.swift; sourceTree = ""; }; FA24FEFD2B95C32200CD9E04 /* Decimal+DoubleValue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Decimal+DoubleValue.swift"; sourceTree = ""; }; FA256982274CE5A400875A53 /* BalanceLockType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BalanceLockType.swift; sourceTree = ""; }; FA256983274CE5A500875A53 /* BalanceLocks+Sort.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "BalanceLocks+Sort.swift"; sourceTree = ""; }; + FA256986274CE5B700875A53 /* SHA256.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SHA256.swift; sourceTree = ""; }; FA256988274CE5DC00875A53 /* ViewController+Wrapper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "ViewController+Wrapper.swift"; sourceTree = ""; }; FA25698A274CE61000875A53 /* MultiSignature+CryptoType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "MultiSignature+CryptoType.swift"; sourceTree = ""; }; FA25698D274CE65100875A53 /* HTTPRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HTTPRequest.swift; sourceTree = ""; }; + FA25698E274CE65100875A53 /* DashcaseJSONEncoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DashcaseJSONEncoder.swift; sourceTree = ""; }; FA25698F274CE65100875A53 /* AnyCodingKey.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnyCodingKey.swift; sourceTree = ""; }; FA256991274CE65100875A53 /* HTTPRequestBuilder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HTTPRequestBuilder.swift; sourceTree = ""; }; FA256992274CE65100875A53 /* HTTPHeadersBuilderProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HTTPHeadersBuilderProtocol.swift; sourceTree = ""; }; FA256993274CE65100875A53 /* HTTPRequestBuilderProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HTTPRequestBuilderProtocol.swift; sourceTree = ""; }; + FA2569A0274CE66100875A53 /* SubscanMemoData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SubscanMemoData.swift; sourceTree = ""; }; FA2569A3274CE6AD00875A53 /* polkadot-v14-runtime */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "polkadot-v14-runtime"; sourceTree = ""; }; + FA2569A4274CE6AD00875A53 /* BalanceLockSubscription.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BalanceLockSubscription.swift; sourceTree = ""; }; FA2569B1274CE71700875A53 /* RemarkCall.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RemarkCall.swift; sourceTree = ""; }; FA2569B3274CE71D00875A53 /* BalanceLock.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BalanceLock.swift; sourceTree = ""; }; FA2569B5274CE73F00875A53 /* NetworkFeeFooterView+Protocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NetworkFeeFooterView+Protocol.swift"; sourceTree = ""; }; @@ -4971,12 +5444,32 @@ FA2569B9274CE74000875A53 /* AttentionView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AttentionView.swift; sourceTree = ""; }; FA2569BB274CE74000875A53 /* BottomSheetInfoBalanceCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BottomSheetInfoBalanceCell.swift; sourceTree = ""; }; FA2569BC274CE74000875A53 /* BottomSheetInfoTableCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BottomSheetInfoTableCell.swift; sourceTree = ""; }; + FA256A05274CE7D500875A53 /* AstarBonusService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AstarBonusService.swift; sourceTree = ""; }; + FA256A09274CE7D500875A53 /* MoonbeamMakeSignatureInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamMakeSignatureInfo.swift; sourceTree = ""; }; + FA256A0A274CE7D500875A53 /* MoonbeamAgreeRemarkInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamAgreeRemarkInfo.swift; sourceTree = ""; }; + FA256A0B274CE7D500875A53 /* MoonbeamGuidinfoInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamGuidinfoInfo.swift; sourceTree = ""; }; + FA256A0C274CE7D500875A53 /* MoonbeamAgreeRemarkData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamAgreeRemarkData.swift; sourceTree = ""; }; + FA256A0D274CE7D500875A53 /* MoonbeamMakeSignatureData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamMakeSignatureData.swift; sourceTree = ""; }; + FA256A0E274CE7D500875A53 /* MoonbeamCheckRemarkData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamCheckRemarkData.swift; sourceTree = ""; }; + FA256A0F274CE7D500875A53 /* MoonbeamVerifyRemarkData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamVerifyRemarkData.swift; sourceTree = ""; }; + FA256A10274CE7D500875A53 /* MoonbeamVerifyRemarkInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamVerifyRemarkInfo.swift; sourceTree = ""; }; + FA256A11274CE7D500875A53 /* MoonbeamCheckRemarkInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamCheckRemarkInfo.swift; sourceTree = ""; }; + FA256A13274CE7D500875A53 /* MoonbeamHTTPHeadersBuilder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamHTTPHeadersBuilder.swift; sourceTree = ""; }; + FA256A15274CE7D500875A53 /* MoonbeamMakeSignatureRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamMakeSignatureRequest.swift; sourceTree = ""; }; + FA256A16274CE7D500875A53 /* MoonbeamVerifyRemarkRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamVerifyRemarkRequest.swift; sourceTree = ""; }; + FA256A17274CE7D500875A53 /* MoonbeamAgreeRemarkRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamAgreeRemarkRequest.swift; sourceTree = ""; }; + FA256A18274CE7D500875A53 /* MoonbeamCheckRemarkRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamCheckRemarkRequest.swift; sourceTree = ""; }; + FA256A19274CE7D500875A53 /* MoonbeamGuidInfoRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamGuidInfoRequest.swift; sourceTree = ""; }; + FA256A1A274CE7D500875A53 /* MoonbeamHealthRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamHealthRequest.swift; sourceTree = ""; }; + FA256A1B274CE7D500875A53 /* MoonbeamJSONDecoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamJSONDecoder.swift; sourceTree = ""; }; + FA256A1C274CE7D500875A53 /* MoonbeamJSONEncoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MoonbeamJSONEncoder.swift; sourceTree = ""; }; + FA256A1D274CE7D500875A53 /* CrowdloanAgreementServiceProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CrowdloanAgreementServiceProtocol.swift; sourceTree = ""; }; FA256A1E274CE7D500875A53 /* CrowdloanBonusServiceProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CrowdloanBonusServiceProtocol.swift; sourceTree = ""; }; + FA256A1F274CE7D500875A53 /* CrowdloanAgreementServiceError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CrowdloanAgreementServiceError.swift; sourceTree = ""; }; + FA256A38274CE80100875A53 /* CrowdloanAddMemoParam.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CrowdloanAddMemoParam.swift; sourceTree = ""; }; FA256A43274CE8BC00875A53 /* StoriesCollectionItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoriesCollectionItem.swift; sourceTree = ""; }; FA256A44274CE8BD00875A53 /* StoriesCollectionItem.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = StoriesCollectionItem.xib; sourceTree = ""; }; FA256A47274CE8C200875A53 /* StakingMainInteractor+Subscription.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "StakingMainInteractor+Subscription.swift"; sourceTree = ""; }; - FA273E5B2C4F67A900F9CB13 /* AccountStatisticsViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountStatisticsViewModelFactory.swift; sourceTree = ""; }; - FA273E5D2C4F680500F9CB13 /* AccountStatisticsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountStatisticsViewModel.swift; sourceTree = ""; }; FA286AF42A3043C3008BD527 /* ConvenienceError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConvenienceError.swift; sourceTree = ""; }; FA286AF72A3043DB008BD527 /* CrossChainConfirmationViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CrossChainConfirmationViewLayout.swift; sourceTree = ""; }; FA286AF82A3043DB008BD527 /* CrossChainConfirmationRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CrossChainConfirmationRouter.swift; sourceTree = ""; }; @@ -5167,31 +5660,17 @@ FA38C9A0275FD6B9005C5577 /* BundleImageViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BundleImageViewModel.swift; sourceTree = ""; }; FA38C9C02761E68B005C5577 /* AccountViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountViewModel.swift; sourceTree = ""; }; FA38C9C22761E77A005C5577 /* AccountViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountViewModelFactory.swift; sourceTree = ""; }; - FA38C9CA276305A3005C5577 /* WalletSendConfirmViewState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmViewState.swift; sourceTree = ""; }; FA38C9CC276305B6005C5577 /* WalletSendConfirmViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmViewModel.swift; sourceTree = ""; }; FA38C9CE27634A18005C5577 /* WalletSendConfirmViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmViewModelFactory.swift; sourceTree = ""; }; - FA3F42F82C50C8EF00AA1397 /* ScamInfoFetcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScamInfoFetcher.swift; sourceTree = ""; }; FA3F5B16281A790A00BEF03B /* StakingAmountFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingAmountFlow.swift; sourceTree = ""; }; FA3F5B66281BAF5200BEF03B /* StakingAmountRelaychainStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingAmountRelaychainStrategy.swift; sourceTree = ""; }; FA3F5B68281BAF5C00BEF03B /* StakingAmountParachainStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingAmountParachainStrategy.swift; sourceTree = ""; }; FA3F5B6A281BAF6600BEF03B /* StakingAmountParachainViewModelState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingAmountParachainViewModelState.swift; sourceTree = ""; }; FA402F2E27C7C646008CF986 /* ExportAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExportAction.swift; sourceTree = ""; }; - FA41B61C2C64856D00D0713A /* FireHistoryOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FireHistoryOperationFactory.swift; sourceTree = ""; }; - FA41B61F2C6495EE00D0713A /* 5ireHistoryResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = 5ireHistoryResponse.swift; sourceTree = ""; }; - FA41B6212C64988700D0713A /* AssetTransactionData+FireHistory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+FireHistory.swift"; sourceTree = ""; }; - FA41B6252C64BE6800D0713A /* ViscanHistoryOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViscanHistoryOperationFactory.swift; sourceTree = ""; }; - FA41B6282C64C15000D0713A /* VicscanHistoryResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VicscanHistoryResponse.swift; sourceTree = ""; }; - FA41B62A2C64C5A200D0713A /* AssetTransactionData+VicscanHistory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+VicscanHistory.swift"; sourceTree = ""; }; FA44284129D44E51000142EB /* ChainStakingSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainStakingSettings.swift; sourceTree = ""; }; FA4441332BF75FD90067C633 /* LiquidityPoolListType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiquidityPoolListType.swift; sourceTree = ""; }; - FA4542412C6B367B00610A71 /* BlockExplorerType+Filters.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BlockExplorerType+Filters.swift"; sourceTree = ""; }; FA46D2C6283DDD07005A112B /* ParachainStakingCandidateMetadata.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParachainStakingCandidateMetadata.swift; sourceTree = ""; }; FA4889662B7F5E360092ABF8 /* GiantsquidExtrinsic.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiantsquidExtrinsic.swift; sourceTree = ""; }; - FA4B098D2C47804F001B73F9 /* NomisRequestSigner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NomisRequestSigner.swift; sourceTree = ""; }; - FA4B75AD2C6F325E001B954F /* MultichainAssetFetching.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MultichainAssetFetching.swift; sourceTree = ""; }; - FA4B75AE2C6F325E001B954F /* OKXMultichainAssetSelection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OKXMultichainAssetSelection.swift; sourceTree = ""; }; - FA4B75B12C6F3270001B954F /* MultichainChainFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultichainChainFetching.swift; sourceTree = ""; }; - FA4B75B32C6F333A001B954F /* OKXMultichainChainFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OKXMultichainChainFetching.swift; sourceTree = ""; }; FA4B928E284493C60003BCEF /* DelegateCall.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DelegateCall.swift; sourceTree = ""; }; FA4B92902844CF750003BCEF /* MetaAccountModelChangedEvent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MetaAccountModelChangedEvent.swift; sourceTree = ""; }; FA4B92952844D0100003BCEF /* ShimmeredLabel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ShimmeredLabel.swift; sourceTree = ""; }; @@ -5209,10 +5688,10 @@ FA4B92AA2844D0E60003BCEF /* SelectCurrencyViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectCurrencyViewController.swift; sourceTree = ""; }; FA4B92AB2844D0E60003BCEF /* SelectCurrencyPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectCurrencyPresenter.swift; sourceTree = ""; }; FA4B92AC2844D0E60003BCEF /* SelectCurrencyViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectCurrencyViewLayout.swift; sourceTree = ""; }; + FA4B92B72844D2360003BCEF /* CoingeckoPricesSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoingeckoPricesSource.swift; sourceTree = ""; }; FA4C3D112886794D00176398 /* SelfSizingTableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelfSizingTableView.swift; sourceTree = ""; }; FA4CC6632817C3AC00A7E85F /* StackedTableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StackedTableView.swift; sourceTree = ""; }; FA4CC665281801CB00A7E85F /* StakingUnitInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingUnitInfoView.swift; sourceTree = ""; }; - FA5032B12C4E58C500075909 /* AccountStatisticsPresentable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountStatisticsPresentable.swift; sourceTree = ""; }; FA5085AA2C33C6D4002DF97D /* SafeArray.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SafeArray.swift; sourceTree = ""; }; FA5085AB2C33C6D4002DF97D /* SafeDictionary.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SafeDictionary.swift; sourceTree = ""; }; FA5137A129AC6F2F00560EBA /* PolkaswapDisclaimerViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PolkaswapDisclaimerViewModel.swift; sourceTree = ""; }; @@ -5367,8 +5846,13 @@ FA72541D2AC2E48400EC47A6 /* WalletConnectService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletConnectService.swift; sourceTree = ""; }; FA72541E2AC2E48400EC47A6 /* WalletConnectSocketFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletConnectSocketFactory.swift; sourceTree = ""; }; FA72541F2AC2E48500EC47A6 /* WalletConnectPayloadFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletConnectPayloadFactory.swift; sourceTree = ""; }; + FA7336BD2A0E3B7F0096A291 /* NetworkClientFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkClientFactory.swift; sourceTree = ""; }; + FA7336BE2A0E3B7F0096A291 /* RequestConfiguratorFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestConfiguratorFactory.swift; sourceTree = ""; }; + FA7336BF2A0E3B7F0096A291 /* RequestSignerFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestSignerFactory.swift; sourceTree = ""; }; + FA7336C02A0E3B7F0096A291 /* ResponseDecodersFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ResponseDecodersFactory.swift; sourceTree = ""; }; FA7336FC2A132F740096A291 /* AlchemyHistoryOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlchemyHistoryOperationFactory.swift; sourceTree = ""; }; FA7337082A1339890096A291 /* AssetTransactionData+AlchemyHistory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+AlchemyHistory.swift"; sourceTree = ""; }; + FA740A8C2CC8C03400981508 /* GradientBorderedTriangularedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GradientBorderedTriangularedView.swift; sourceTree = ""; }; FA74359429C0733E0085A47E /* Array+Difference.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Array+Difference.swift"; sourceTree = ""; }; FA74359629C0734B0085A47E /* CDAccountInfo+CoreDataCodable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CDAccountInfo+CoreDataCodable.swift"; sourceTree = ""; }; FA74359829C0735B0085A47E /* ChainSettingsRepositoryFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChainSettingsRepositoryFactory.swift; sourceTree = ""; }; @@ -5391,6 +5875,7 @@ FA7C9A6F2BA007AE0031580A /* ArrowsquidHistoryResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArrowsquidHistoryResponse.swift; sourceTree = ""; }; FA7D46CC2AF24191005D681B /* SoraRewardOperationFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SoraRewardOperationFactory.swift; sourceTree = ""; }; FA7D46CE2AF24A1B005D681B /* SoraSubsquidPayoutValidatorForNominatorFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SoraSubsquidPayoutValidatorForNominatorFactory.swift; sourceTree = ""; }; + FA80391428DC2DA2007365E8 /* StakingPoolPalletID.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingPoolPalletID.swift; sourceTree = ""; }; FA80391628DD70D7007365E8 /* AccountOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountOperationFactory.swift; sourceTree = ""; }; FA851FF027917494004F5979 /* WalletTransactionDetailsViewState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletTransactionDetailsViewState.swift; sourceTree = ""; }; FA85373527EC874500918A1E /* InactiveBondAlertConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InactiveBondAlertConfig.swift; sourceTree = ""; }; @@ -5496,15 +5981,17 @@ FA93A312283653B70021330F /* ValidatorListFilterFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValidatorListFilterFlow.swift; sourceTree = ""; }; FA93A3152836542D0021330F /* ValidatorListFilterRelaychainViewModelState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValidatorListFilterRelaychainViewModelState.swift; sourceTree = ""; }; FA93A3172836543B0021330F /* ValidatorListFilterRelaychainViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValidatorListFilterRelaychainViewModelFactory.swift; sourceTree = ""; }; - FA93D1F62C61E52C006B494E /* BlockExplorerApiKey.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BlockExplorerApiKey.swift; sourceTree = ""; }; - FA9464242C5CC434001E810F /* LiquidityPoolDetailsInput.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsInput.swift; sourceTree = ""; }; FA97E68A2A0281230035F5D7 /* GiantsquidRewardOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiantsquidRewardOperationFactory.swift; sourceTree = ""; }; FA99422727FE925000D771E5 /* UISwitch+CustomSize.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UISwitch+CustomSize.swift"; sourceTree = ""; }; FA99422C28002BB800D771E5 /* MissingAccountOptions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MissingAccountOptions.swift; sourceTree = ""; }; FA99423428053C5000D771E5 /* ChainAccountInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChainAccountInfo.swift; sourceTree = ""; }; + FA99423628053C6800D771E5 /* IconWithTitleViewModelFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IconWithTitleViewModelFactory.swift; sourceTree = ""; }; FA99426828053C9300D771E5 /* ExportFlow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExportFlow.swift; sourceTree = ""; }; FA99426A28053CFA00D771E5 /* WalletDetailsFlow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletDetailsFlow.swift; sourceTree = ""; }; FA99426B28053CFA00D771E5 /* WalletDetailsViewModelFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletDetailsViewModelFactory.swift; sourceTree = ""; }; + FA99426F2805524200D771E5 /* BalanceBuilder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BalanceBuilder.swift; sourceTree = ""; }; + FA9942702805524200D771E5 /* GetBalanceProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GetBalanceProvider.swift; sourceTree = ""; }; + FA99549627B255AB00CCC94B /* AddCustomNodeViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddCustomNodeViewModel.swift; sourceTree = ""; }; FA99549827B3609700CCC94B /* TableSectionTitleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TableSectionTitleView.swift; sourceTree = ""; }; FA99549A27B3B60700CCC94B /* WalletNameChanged.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletNameChanged.swift; sourceTree = ""; }; FA99C92C283B4AB5007B1F83 /* SelectValidatorsConfirmRelaychainInitiatedViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsConfirmRelaychainInitiatedViewModelFactory.swift; sourceTree = ""; }; @@ -5664,6 +6151,7 @@ FAADC1B32926597400DA9903 /* ScanQRPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScanQRPresenter.swift; sourceTree = ""; }; FAADC1B42926597400DA9903 /* ScanQRProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScanQRProtocols.swift; sourceTree = ""; }; FAADC1B52926597400DA9903 /* ScanQRRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScanQRRouter.swift; sourceTree = ""; }; + FAADF71129C47D10002B6D39 /* RuntimeSpecVersion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RuntimeSpecVersion.swift; sourceTree = ""; }; FAAF61732877DBC50094B4BC /* EthereumIcon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EthereumIcon.swift; sourceTree = ""; }; FAAF946B2A0CFF90009A4BA5 /* Array+Duplicates.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Array+Duplicates.swift"; sourceTree = ""; }; FAB0EDD827AA692D003D93C2 /* NodeSelectionTableCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NodeSelectionTableCell.swift; sourceTree = ""; }; @@ -5673,15 +6161,10 @@ FAB0EDE127AA9C94003D93C2 /* NodeSelectionTableCellViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NodeSelectionTableCellViewModel.swift; sourceTree = ""; }; FAB16A302A9C9BBF00E71F43 /* NftCollectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NftCollectionCell.swift; sourceTree = ""; }; FAB16A332A9C9BD000E71F43 /* NftCellViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NftCellViewModel.swift; sourceTree = ""; }; - FAB482F02C58AC7F00594D89 /* ChainModel+Nomis.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ChainModel+Nomis.swift"; sourceTree = ""; }; FAB707612BB317D300A1131C /* CrossChainViewLoadingCollector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrossChainViewLoadingCollector.swift; sourceTree = ""; }; FAB707642BB3C06900A1131C /* AssetsAccountRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetsAccountRequest.swift; sourceTree = ""; }; FAB707662BB3C1A400A1131C /* AssetAccountInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetAccountInfo.swift; sourceTree = ""; }; FAB8B96D29F23FCA002E5F04 /* ChainAccountBalanceViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChainAccountBalanceViewModel.swift; sourceTree = ""; }; - FAB90CE82C6F584000D13804 /* ChainSelectionCollectionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainSelectionCollectionCell.swift; sourceTree = ""; }; - FAB90CEC2C6F5B2A00D13804 /* ChainSelectionCollectionCellModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainSelectionCollectionCellModel.swift; sourceTree = ""; }; - FAB90CEE2C6F5B4F00D13804 /* MultichainAssetSelectionViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultichainAssetSelectionViewModelFactory.swift; sourceTree = ""; }; - FAB90CF02C73351C00D13804 /* UIImage+ColorsInvert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+ColorsInvert.swift"; sourceTree = ""; }; FABA161A2B0C941B001AF2F0 /* MultiassetV11MigrationPolicy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MultiassetV11MigrationPolicy.swift; sourceTree = ""; }; FABA161C2B0C94C9001AF2F0 /* UserDataModelV10toV11.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = UserDataModelV10toV11.xcmappingmodel; sourceTree = ""; }; FABA162C2B0C9504001AF2F0 /* TabBar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TabBar.swift; sourceTree = ""; }; @@ -5703,16 +6186,9 @@ FAC0BBB6291D0EAF00E6F106 /* TipViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TipViewModel.swift; sourceTree = ""; }; FAC0BBB7291D0EAF00E6F106 /* RecipientViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RecipientViewModel.swift; sourceTree = ""; }; FAC0BBB8291D0EAF00E6F106 /* SelectNetworkViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectNetworkViewModel.swift; sourceTree = ""; }; - FAC0BBB9291D0EAF00E6F106 /* SendDependencyContainer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendDependencyContainer.swift; sourceTree = ""; }; - FAC0BBBA291D0EAF00E6F106 /* SendPresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendPresenter.swift; sourceTree = ""; }; - FAC0BBBB291D0EAF00E6F106 /* SendProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendProtocols.swift; sourceTree = ""; }; FAC0BBBC291D0EAF00E6F106 /* SendFlow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendFlow.swift; sourceTree = ""; }; FAC0BBBD291D0EAF00E6F106 /* SendViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendViewLayout.swift; sourceTree = ""; }; - FAC0BBBE291D0EAF00E6F106 /* SendAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendAssembly.swift; sourceTree = ""; }; - FAC0BBBF291D0EAF00E6F106 /* SendViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendViewController.swift; sourceTree = ""; }; - FAC0BBC0291D0EAF00E6F106 /* SendRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendRouter.swift; sourceTree = ""; }; FAC0BBC2291D0EAF00E6F106 /* SendDataValidatingFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendDataValidatingFactory.swift; sourceTree = ""; }; - FAC0BBC3291D0EAF00E6F106 /* SendInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SendInteractor.swift; sourceTree = ""; }; FAC0BBC6291D0EB000E6F106 /* SelectAssetViewModelFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectAssetViewModelFactory.swift; sourceTree = ""; }; FAC0BBC7291D0EB000E6F106 /* SelectAssetAssembly.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectAssetAssembly.swift; sourceTree = ""; }; FAC0BBC8291D0EB000E6F106 /* SelectAssetRouter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectAssetRouter.swift; sourceTree = ""; }; @@ -5735,10 +6211,12 @@ FAC6CD9C2BA8097C0013A17E /* L10n.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = L10n.swift; sourceTree = ""; }; FAC6CD9E2BA80AB70013A17E /* WalletLanguage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletLanguage.swift; sourceTree = ""; }; FAC6CDA02BA80CB10013A17E /* WalletTransactionType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletTransactionType.swift; sourceTree = ""; }; + FAC6CDA62BA814020013A17E /* BalanceContext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BalanceContext.swift; sourceTree = ""; }; FAC6CDA82BA814F20013A17E /* UIControl+Disable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIControl+Disable.swift"; sourceTree = ""; }; FAC6CDAC2BA81D680013A17E /* FeeViewProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeeViewProtocol.swift; sourceTree = ""; }; FAC6CDAE2BA81FA00013A17E /* WalletLoggerProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletLoggerProtocol.swift; sourceTree = ""; }; FAC6CDB02BA821B00013A17E /* WalletImageViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletImageViewModelProtocol.swift; sourceTree = ""; }; + FACACE1027BCF104005422EE /* MetaAccountCreationMetadata.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MetaAccountCreationMetadata.swift; sourceTree = ""; }; FACACE1227BCF10E005422EE /* MetaAccountImportMetadata.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MetaAccountImportMetadata.swift; sourceTree = ""; }; FACACE1327BCF10E005422EE /* MetaAccountImportPreferredInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MetaAccountImportPreferredInfo.swift; sourceTree = ""; }; FACD42782A5BE7C6009975AA /* RuntimeSnapshotReady.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RuntimeSnapshotReady.swift; sourceTree = ""; }; @@ -5810,12 +6288,6 @@ FAD067CE2C20453E0050291F /* DefaultEraStakersFetching.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultEraStakersFetching.swift; sourceTree = ""; }; FAD067D22C20550B0050291F /* UIImageView+Shimmered.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIImageView+Shimmered.swift"; sourceTree = ""; }; FAD067D42C214E7C0050291F /* LiquidityPoolsConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsConstants.swift; sourceTree = ""; }; - FAD240D52C64D3D100B389FF /* ZChainHistoryOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZChainHistoryOperationFactory.swift; sourceTree = ""; }; - FAD240D82C64D3FF00B389FF /* ZChainHistoryResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZChainHistoryResponse.swift; sourceTree = ""; }; - FAD240DA2C64E22A00B389FF /* AssetTransactionData+ZChainHistory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+ZChainHistory.swift"; sourceTree = ""; }; - FAD240DD2C64E97900B389FF /* KaiaHistoryResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KaiaHistoryResponse.swift; sourceTree = ""; }; - FAD240DF2C64EA1D00B389FF /* KaiaHistoryOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KaiaHistoryOperationFactory.swift; sourceTree = ""; }; - FAD240E12C64EA6E00B389FF /* AssetTransactionData+KaiaHistory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+KaiaHistory.swift"; sourceTree = ""; }; FAD428932A834A8E001D6A16 /* TopViewControllerHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TopViewControllerHelper.swift; sourceTree = ""; }; FAD428952A834BA8001D6A16 /* UIApplication+TopViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIApplication+TopViewController.swift"; sourceTree = ""; }; FAD428972A860C9B001D6A16 /* EthereumNodeFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EthereumNodeFetching.swift; sourceTree = ""; }; @@ -5890,10 +6362,6 @@ FAD429312A865695001D6A16 /* CheckboxButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheckboxButton.swift; sourceTree = ""; }; FAD429332A8656B6001D6A16 /* UITableView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UITableView.swift; sourceTree = ""; }; FAD429342A8656B7001D6A16 /* UICollectionView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UICollectionView.swift; sourceTree = ""; }; - FAD5FF242C463C07003201F5 /* AccountStatisticsFetching.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountStatisticsFetching.swift; sourceTree = ""; }; - FAD5FF262C463C4F003201F5 /* AccountStatistics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountStatistics.swift; sourceTree = ""; }; - FAD5FF2A2C46464B003201F5 /* NomisAccountStatisticsFetcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NomisAccountStatisticsFetcher.swift; sourceTree = ""; }; - FAD5FF2D2C464717003201F5 /* NomisAccountStatisticsRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NomisAccountStatisticsRequest.swift; sourceTree = ""; }; FAD646C1284DD2CF007CCB92 /* StakingBalanceRelaychainStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingBalanceRelaychainStrategy.swift; sourceTree = ""; }; FAD646C3284DD2DA007CCB92 /* StakingBalanceRelaychainViewModelState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingBalanceRelaychainViewModelState.swift; sourceTree = ""; }; FAD646C5284DD2E5007CCB92 /* StakingBalanceRelaychainViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingBalanceRelaychainViewModelFactory.swift; sourceTree = ""; }; @@ -5910,9 +6378,9 @@ FAD9AAC42B8DFF6700AA603B /* PrefixStorageRequestWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefixStorageRequestWorker.swift; sourceTree = ""; }; FAD9AAC62B8E002F00AA603B /* PrefixStorageResponseValueExtractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefixStorageResponseValueExtractor.swift; sourceTree = ""; }; FADB9DB429D551A100303F7D /* SoraRewardCalculatorService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoraRewardCalculatorService.swift; sourceTree = ""; }; + FADBA5EE2B5FD05C00CFCF30 /* ClaimCrowdloanRewardsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClaimCrowdloanRewardsViewModel.swift; sourceTree = ""; }; FADBA5F02B5FD0C200CFCF30 /* ClaimCrowdloanRewardViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClaimCrowdloanRewardViewModelFactory.swift; sourceTree = ""; }; FADBA5F22B5FE36200CFCF30 /* ChainAccountViewMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainAccountViewMode.swift; sourceTree = ""; }; - FAE152D16E6C78D297BFFC3C /* WalletSendConfirmInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WalletSendConfirmInteractor.swift; sourceTree = ""; }; FAE39AEE2A9DBDD30011A9D6 /* NftCollectionViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NftCollectionViewModelFactory.swift; sourceTree = ""; }; FAE39AF02A9DBDDA0011A9D6 /* NftCollectionViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NftCollectionViewModel.swift; sourceTree = ""; }; FAE39AF22A9E1A4F0011A9D6 /* ChainsSetupCompleted.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainsSetupCompleted.swift; sourceTree = ""; }; @@ -5925,6 +6393,8 @@ FAE39B082AA1D4410011A9D6 /* NftSendConfirmViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NftSendConfirmViewModelFactory.swift; sourceTree = ""; }; FAE39B162AA965940011A9D6 /* URL+IPFS.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URL+IPFS.swift"; sourceTree = ""; }; FAE5858E2B0764EC00240FE1 /* SoraSubsquidHistoryOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoraSubsquidHistoryOperationFactory.swift; sourceTree = ""; }; + FAE5F62E27B2383E00F13206 /* AddCustomNodeViewState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddCustomNodeViewState.swift; sourceTree = ""; }; + FAE5F63027B2384F00F13206 /* AddCustomNodeViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddCustomNodeViewModelFactory.swift; sourceTree = ""; }; FAE9EB9C288AB74D009390B6 /* AnalyticsRewardsFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsRewardsFlow.swift; sourceTree = ""; }; FAE9EB9E288ABBBE009390B6 /* AnalyticRewardsParachainViewModelState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticRewardsParachainViewModelState.swift; sourceTree = ""; }; FAE9EBA0288ABBC7009390B6 /* AnalyticRewardsParachainStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticRewardsParachainStrategy.swift; sourceTree = ""; }; @@ -5936,7 +6406,6 @@ FAEDC1382820E62F00E6582C /* StakingAmountRelaychainViewModelState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingAmountRelaychainViewModelState.swift; sourceTree = ""; }; FAEDC13C2820F59100E6582C /* StakingAmountViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingAmountViewModel.swift; sourceTree = ""; }; FAEDC13E2821264E00E6582C /* StakingAmountRelaychainViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingAmountRelaychainViewModelFactory.swift; sourceTree = ""; }; - FAEFA6D42C6DCF7C00095C07 /* NetworkRequestUrlParameters.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkRequestUrlParameters.swift; sourceTree = ""; }; FAF5E9CA27E46D3E005A3448 /* GithubJSONDecoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GithubJSONDecoder.swift; sourceTree = ""; }; FAF5E9CC27E46D3E005A3448 /* URLConstants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLConstants.swift; sourceTree = ""; }; FAF5E9D027E46D6A005A3448 /* AppVersionObserver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppVersionObserver.swift; sourceTree = ""; }; @@ -5947,9 +6416,6 @@ FAF5E9DA27E46DAA005A3448 /* RootViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RootViewController.swift; sourceTree = ""; }; FAF5E9DD27E46DCC005A3448 /* String+VersionComparsion.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+VersionComparsion.swift"; sourceTree = ""; }; FAF5E9E027E4A4C1005A3448 /* RootViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootViewModel.swift; sourceTree = ""; }; - FAF600762C48F08B00E56558 /* AccountScoreView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountScoreView.swift; sourceTree = ""; }; - FAF600792C48F12000E56558 /* AccountScoreViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountScoreViewModel.swift; sourceTree = ""; }; - FAF6D90C2C57654F00274E69 /* Decimal+Formatting.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Decimal+Formatting.swift"; sourceTree = ""; }; FAF92E6527B4275E005467CE /* Bool+ToInt.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Bool+ToInt.swift"; sourceTree = ""; }; FAF96B572B636FC700E299C1 /* SystemNumberRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemNumberRequest.swift; sourceTree = ""; }; FAF9C2952AAADE3300A61D21 /* DeprecatedControllerStashAccountCheckService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeprecatedControllerStashAccountCheckService.swift; sourceTree = ""; }; @@ -5970,9 +6436,7 @@ FAF9C2AC2AAF3FDF00A61D21 /* GetPreinstalledWalletViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GetPreinstalledWalletViewController.swift; sourceTree = ""; }; FAF9C2AD2AAF3FDF00A61D21 /* GetPreinstalledWalletProtocols.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GetPreinstalledWalletProtocols.swift; sourceTree = ""; }; FAF9C2B62AAF3FF100A61D21 /* GetPreinstalledWalletTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GetPreinstalledWalletTests.swift; sourceTree = ""; }; - FAFB47D62ABD589C0008F8CA /* EthereumBalanceRepositoryCacheWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EthereumBalanceRepositoryCacheWrapper.swift; sourceTree = ""; }; - FAFB5EDF2C5A11A30015D3DD /* AccountScoreSettingsChanged.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountScoreSettingsChanged.swift; sourceTree = ""; }; - FAFB5EE12C5A2CE80015D3DD /* FWCosmosView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FWCosmosView.swift; sourceTree = ""; }; + FAFB47D62ABD589C0008F8CA /* BalanceRepositoryCacheWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BalanceRepositoryCacheWrapper.swift; sourceTree = ""; }; FAFBEE80284621800036D08C /* SelectedValidatorListParachainViewModelState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedValidatorListParachainViewModelState.swift; sourceTree = ""; }; FAFBEE82284621900036D08C /* SelectedValidatorListParachainViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedValidatorListParachainViewModelFactory.swift; sourceTree = ""; }; FAFDB2C229112A00003971FB /* SubstrateCallPath.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SubstrateCallPath.swift; sourceTree = ""; }; @@ -6037,9 +6501,9 @@ FC0B2D0A77F4B0F7CC9E7C1D /* LiquidityPoolsOverviewViewLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewViewLayout.swift; sourceTree = ""; }; FC1236F31289F7F25A25E69C /* ClaimCrowdloanRewardsRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ClaimCrowdloanRewardsRouter.swift; sourceTree = ""; }; FC76E7D99A98423180BC572F /* LiquidityPoolsOverviewTests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewTests.swift; sourceTree = ""; }; + FD693FC7740866321DA11AC1 /* Pods_fearlessAll_fearlessIntegrationTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_fearlessAll_fearlessIntegrationTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; FD845193EDFC3A1D0BC73719 /* NftCollectionProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftCollectionProtocols.swift; sourceTree = ""; }; FD8B69E9E18C11EAEC9284B3 /* LiquidityPoolsOverviewViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsOverviewViewController.swift; sourceTree = ""; }; - FDD63BEB84A28855006BE680 /* AccountStatisticsRouter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AccountStatisticsRouter.swift; sourceTree = ""; }; FE4AF0849E32E5B9C72E2ABB /* RecommendedValidatorListViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecommendedValidatorListViewFactory.swift; sourceTree = ""; }; FE826F356F6D72EACFB0AE31 /* NftSendConfirmPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NftSendConfirmPresenter.swift; sourceTree = ""; }; FF4688AF0658F8BB7A90C2BE /* ExportMnemonicConfirmViewFactory.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExportMnemonicConfirmViewFactory.swift; sourceTree = ""; }; @@ -6053,7 +6517,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 54A3B34605E787B47741ED1A /* Pods_fearlessAll_fearlessIntegrationTests.framework in Frameworks */, + 5A8DA5F75BC11EC27A0BC63D /* Pods_fearlessAll_fearlessIntegrationTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -6061,47 +6525,51 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C6182B212C631AAC0089558D /* SSFCrypto in Frameworks */, - C6182B272C631AAC0089558D /* SSFHelpers in Frameworks */, - C6182B172C631AAC0089558D /* SSFAccountManagmentStorage in Frameworks */, - C6182B3B2C631AAC0089558D /* SSFSigner in Frameworks */, - C6182B2B2C631AAC0089558D /* SSFLogger in Frameworks */, - C6182B2F2C631AAC0089558D /* SSFNetwork in Frameworks */, - C6182B112C631AAC0089558D /* MPQRCoreSDK in Frameworks */, - C6182B292C631AAC0089558D /* SSFKeyPair in Frameworks */, - C6182B2D2C631AAC0089558D /* SSFModels in Frameworks */, - C6182B3F2C631AAC0089558D /* SSFStorageQueryKit in Frameworks */, - C6182B312C631AAC0089558D /* SSFPolkaswap in Frameworks */, - C6182B3D2C631AAC0089558D /* SSFSingleValueCache in Frameworks */, + FA8810B62BDCAF260084CC4B /* SSFNetwork in Frameworks */, FA72546F2AC2F12D00EC47A6 /* Web3Wallet in Frameworks */, - C6182B1F2C631AAC0089558D /* SSFCloudStorage in Frameworks */, - C6182B232C631AAC0089558D /* SSFEraKit in Frameworks */, - C6182B472C631AAC0089558D /* SoraKeystore in Frameworks */, - C6182B372C631AAC0089558D /* SSFQRService in Frameworks */, - C6182B352C631AAC0089558D /* SSFPoolsStorage in Frameworks */, + FA8810B02BDCAF260084CC4B /* SSFKeyPair in Frameworks */, + FA8810AE2BDCAF260084CC4B /* SSFHelpers in Frameworks */, + 070ED7EF2C4543D900DF4098 /* TonAPI in Frameworks */, + FA8810A22BDCAF260084CC4B /* SSFChainConnection in Frameworks */, + FA8810A02BDCAF260084CC4B /* SSFAssetManagment in Frameworks */, + FA88109A2BDCAF260084CC4B /* RobinHood in Frameworks */, + FA8810C82BDCAF260084CC4B /* SSFTransferService in Frameworks */, FA72546B2AC2F12D00EC47A6 /* WalletConnectNetworking in Frameworks */, - C6182B1D2C631AAC0089558D /* SSFChainRegistry in Frameworks */, - C6182B432C631AAC0089558D /* SSFUtils in Frameworks */, - FAF600752C48D79600E56558 /* Cosmos in Frameworks */, - C6182B412C631AAC0089558D /* SSFTransferService in Frameworks */, - C6182B0F2C631AAC0089558D /* IrohaCrypto in Frameworks */, - C6182B492C631AAC0089558D /* keccak in Frameworks */, + 070ED7EB2C4543D900DF4098 /* EventSource in Frameworks */, + FA8810CA2BDCAF260084CC4B /* SSFUtils in Frameworks */, FA8FD1882AF4BEDD00354482 /* Swime in Frameworks */, - FAB482ED2C58A8AA00594D89 /* Web3ContractABI in Frameworks */, - FAB482EB2C58A8AA00594D89 /* Web3 in Frameworks */, - C6182B452C631AAC0089558D /* SSFXCM in Frameworks */, + FA8810BA2BDCAF260084CC4B /* SSFPools in Frameworks */, + FA8810A42BDCAF260084CC4B /* SSFChainRegistry in Frameworks */, + 070ED7ED2C4543D900DF4098 /* StreamURLSessionTransport in Frameworks */, + FA8FD1832AF4B55100354482 /* Web3ContractABI in Frameworks */, + FA8810B82BDCAF260084CC4B /* SSFPolkaswap in Frameworks */, + FA8FD1812AF4B55100354482 /* Web3 in Frameworks */, + FA8810BE2BDCAF260084CC4B /* SSFQRService in Frameworks */, + FA8810CE2BDCAF260084CC4B /* SoraKeystore in Frameworks */, + FA88109E2BDCAF260084CC4B /* SSFAccountManagmentStorage in Frameworks */, + FA8810AC2BDCAF260084CC4B /* SSFExtrinsicKit in Frameworks */, + FA88109C2BDCAF260084CC4B /* SSFAccountManagment in Frameworks */, + FA8810A62BDCAF260084CC4B /* SSFCloudStorage in Frameworks */, + FA8810A82BDCAF260084CC4B /* SSFCrypto in Frameworks */, + FA8810C42BDCAF260084CC4B /* SSFSingleValueCache in Frameworks */, + FA8810AA2BDCAF260084CC4B /* SSFEraKit in Frameworks */, + FA8FD1852AF4B55100354482 /* Web3PromiseKit in Frameworks */, + FA8810D02BDCAF260084CC4B /* keccak in Frameworks */, + 0701B8A32C78F54200DCD395 /* Cosmos in Frameworks */, + FA8810C62BDCAF260084CC4B /* SSFStorageQueryKit in Frameworks */, + FA8810B42BDCAF260084CC4B /* SSFModels in Frameworks */, FA7254672AC2F12D00EC47A6 /* WalletConnect in Frameworks */, + 070ED7F12C4543D900DF4098 /* TonStreamingAPI in Frameworks */, FA72546D2AC2F12D00EC47A6 /* WalletConnectPairing in Frameworks */, - C6182B1B2C631AAC0089558D /* SSFChainConnection in Frameworks */, FA7254692AC2F12D00EC47A6 /* WalletConnectAuth in Frameworks */, - FAB482EF2C58A8AA00594D89 /* Web3PromiseKit in Frameworks */, - C5AFED6C37C2C29E9903D136 /* Pods_fearlessAll_fearless.framework in Frameworks */, - C6182B392C631AAC0089558D /* SSFRuntimeCodingService in Frameworks */, - C6182B332C631AAC0089558D /* SSFPools in Frameworks */, - C6182B192C631AAC0089558D /* SSFAssetManagment in Frameworks */, - C6182B152C631AAC0089558D /* SSFAccountManagment in Frameworks */, - C6182B252C631AAC0089558D /* SSFExtrinsicKit in Frameworks */, - C6182B132C631AAC0089558D /* RobinHood in Frameworks */, + FA8810C02BDCAF260084CC4B /* SSFRuntimeCodingService in Frameworks */, + FA8810BC2BDCAF260084CC4B /* SSFPoolsStorage in Frameworks */, + FA8810B22BDCAF260084CC4B /* SSFLogger in Frameworks */, + FA8810C22BDCAF260084CC4B /* SSFSigner in Frameworks */, + FA8810982BDCAF260084CC4B /* IrohaCrypto in Frameworks */, + FA8810CC2BDCAF260084CC4B /* SSFXCM in Frameworks */, + 070ED7D22C3E7DE100DF4098 /* TonSwift in Frameworks */, + 78BCB91F4434229B18C1E524 /* Pods_fearlessAll_fearless.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -6109,7 +6577,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A5AB7027E1E73E39E4026C5C /* Pods_fearlessTests.framework in Frameworks */, + 79E0E33666B1D9AFD62A1CD8 /* Pods_fearlessTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -6259,6 +6727,395 @@ path = YourValidatorList; sourceTree = ""; }; + 0701B88D2C78F34A00DCD395 /* ViewModel */ = { + isa = PBXGroup; + children = ( + 0701B88B2C78F34A00DCD395 /* AccountStatisticsViewModel.swift */, + 0701B88C2C78F34A00DCD395 /* AccountStatisticsViewModelFactory.swift */, + ); + path = ViewModel; + sourceTree = ""; + }; + 0701B8962C78F34A00DCD395 /* AccountStatistics */ = { + isa = PBXGroup; + children = ( + 0701B88D2C78F34A00DCD395 /* ViewModel */, + 0701B88E2C78F34A00DCD395 /* AccountStatisticsAssembly.swift */, + 0701B88F2C78F34A00DCD395 /* AccountStatisticsInteractor.swift */, + 0701B8902C78F34A00DCD395 /* AccountStatisticsPresentable.swift */, + 0701B8912C78F34A00DCD395 /* AccountStatisticsPresenter.swift */, + 0701B8922C78F34A00DCD395 /* AccountStatisticsProtocols.swift */, + 0701B8932C78F34A00DCD395 /* AccountStatisticsRouter.swift */, + 0701B8942C78F34A00DCD395 /* AccountStatisticsViewController.swift */, + 0701B8952C78F34A00DCD395 /* AccountStatisticsViewLayout.swift */, + ); + path = AccountStatistics; + sourceTree = ""; + }; + 0701B8B02C78F63400DCD395 /* AccountScore */ = { + isa = PBXGroup; + children = ( + 0701B8AF2C78F63400DCD395 /* AccountScoreView.swift */, + ); + path = AccountScore; + sourceTree = ""; + }; + 0701B8BE2C78F6C300DCD395 /* AccountScore */ = { + isa = PBXGroup; + children = ( + 0701B8BD2C78F6C300DCD395 /* AccountScoreViewModel.swift */, + ); + path = AccountScore; + sourceTree = ""; + }; + 0701B8C52C78F71800DCD395 /* Models */ = { + isa = PBXGroup; + children = ( + 0701B8C02C78F71800DCD395 /* TonConnectError.swift */, + 0701B8C12C78F71800DCD395 /* TonConnectEvent.swift */, + 0701B8C22C78F71800DCD395 /* TonConnectManifest.swift */, + 0701B8C32C78F71800DCD395 /* TonConnectParameters.swift */, + 0701B8C42C78F71800DCD395 /* TonConnectRequestPayload.swift */, + ); + path = Models; + sourceTree = ""; + }; + 0701B8C72C78F71800DCD395 /* Request */ = { + isa = PBXGroup; + children = ( + 0701B8C62C78F71800DCD395 /* NomisAccountStatisticsRequest.swift */, + ); + path = Request; + sourceTree = ""; + }; + 0701B8CB2C78F71800DCD395 /* Nomis */ = { + isa = PBXGroup; + children = ( + 0701B8C72C78F71800DCD395 /* Request */, + 0701B8C82C78F71800DCD395 /* NomisAccountStatisticsFetcher.swift */, + 0701B8C92C78F71800DCD395 /* NomisJSONDecoder.swift */, + 0701B8CA2C78F71800DCD395 /* NomisRequestSigner.swift */, + ); + path = Nomis; + sourceTree = ""; + }; + 0701B8CD2C78F71800DCD395 /* AccountStatistics */ = { + isa = PBXGroup; + children = ( + 0701B8CB2C78F71800DCD395 /* Nomis */, + 0701B8CC2C78F71800DCD395 /* AccountStatisticsFetching.swift */, + ); + path = AccountStatistics; + sourceTree = ""; + }; + 0701B8D32C78F71800DCD395 /* Parameters */ = { + isa = PBXGroup; + children = ( + 0701B8CE2C78F71800DCD395 /* OKXDexAllTokensRequestParameters.swift */, + 0701B8CF2C78F71800DCD395 /* OKXDexApproveRequestParameters.swift */, + 0701B8D02C78F71800DCD395 /* OKXDexLiquiditySourceRequestParameters.swift */, + 0701B8D12C78F71800DCD395 /* OKXDexQuotesRequestParameters.swift */, + 0701B8D22C78F71800DCD395 /* OKXDexSwapRequestParameters.swift */, + ); + path = Parameters; + sourceTree = ""; + }; + 0701B8D42C78F71800DCD395 /* Request */ = { + isa = PBXGroup; + children = ( + 0701B8D32C78F71800DCD395 /* Parameters */, + ); + path = Request; + sourceTree = ""; + }; + 0701B8E12C78F71800DCD395 /* Response */ = { + isa = PBXGroup; + children = ( + 0701B8D52C78F71800DCD395 /* OKXApproveTransaction.swift */, + 0701B8D62C78F71800DCD395 /* OKXDexProtocol.swift */, + 0701B8D72C78F71800DCD395 /* OKXDexQuote.swift */, + 0701B8D82C78F71800DCD395 /* OKXDexRouter.swift */, + 0701B8D92C78F71800DCD395 /* OKXDexSubrouter.swift */, + 0701B8DA2C78F71800DCD395 /* OKXLiquiditySource.swift */, + 0701B8DB2C78F71800DCD395 /* OKXQuote.swift */, + 0701B8DC2C78F71800DCD395 /* OKXResponse.swift */, + 0701B8DD2C78F71800DCD395 /* OKXSupportedChain.swift */, + 0701B8DE2C78F71800DCD395 /* OKXSwap.swift */, + 0701B8DF2C78F71800DCD395 /* OKXSwapTransaction.swift */, + 0701B8E02C78F71800DCD395 /* OKXToken.swift */, + ); + path = Response; + sourceTree = ""; + }; + 0701B8E32C78F71800DCD395 /* Network */ = { + isa = PBXGroup; + children = ( + 0701B8D42C78F71800DCD395 /* Request */, + 0701B8E12C78F71800DCD395 /* Response */, + 0701B8E22C78F71800DCD395 /* OKXDexRequestSigner.swift */, + ); + path = Network; + sourceTree = ""; + }; + 0701B8E52C78F71800DCD395 /* okx-dex-aggregator */ = { + isa = PBXGroup; + children = ( + 0701B8E32C78F71800DCD395 /* Network */, + 0701B8E42C78F71800DCD395 /* OKXDexAggregatorService.swift */, + ); + path = "okx-dex-aggregator"; + sourceTree = ""; + }; + 0701B90A2C78FAF000DCD395 /* Common */ = { + isa = PBXGroup; + children = ( + 0701B9082C78FAF000DCD395 /* LiquidityPools+ViewModel.swift */, + 0701B9092C78FAF000DCD395 /* LiquidityPoolsConstants.swift */, + ); + path = Common; + sourceTree = ""; + }; + 0701B9172C78FAF000DCD395 /* Resources */ = { + isa = PBXGroup; + children = ( + 0701B90B2C78FAF000DCD395 /* assets.json */, + 0701B90C2C78FAF000DCD395 /* chains.json */, + 0701B90D2C78FAF000DCD395 /* dapps.json */, + 0701B90E2C78FAF000DCD395 /* polkadot-9370metadata */, + 0701B90F2C78FAF000DCD395 /* polkaswapSettings.json */, + 0701B9102C78FAF000DCD395 /* runtime-default.json */, + 0701B9112C78FAF000DCD395 /* runtime-empty.json */, + 0701B9122C78FAF000DCD395 /* runtime-kusama.json */, + 0701B9132C78FAF000DCD395 /* runtime-polkadot.json */, + 0701B9142C78FAF000DCD395 /* runtime-rococo.json */, + 0701B9152C78FAF000DCD395 /* runtime-westend.json */, + 0701B9162C78FAF000DCD395 /* types.json */, + ); + path = Resources; + sourceTree = ""; + }; + 0701B91A2C78FAF000DCD395 /* ViewModel */ = { + isa = PBXGroup; + children = ( + 0701B9182C78FAF000DCD395 /* LiquidityPoolDetailsViewModel.swift */, + 0701B9192C78FAF000DCD395 /* LiquidityPoolDetailsViewModelFactory.swift */, + ); + path = ViewModel; + sourceTree = ""; + }; + 0701B9232C78FAF000DCD395 /* LiquidityPoolDetails */ = { + isa = PBXGroup; + children = ( + 0701B9172C78FAF000DCD395 /* Resources */, + 0701B91A2C78FAF000DCD395 /* ViewModel */, + 0701B91B2C78FAF000DCD395 /* LiquidityPoolDetailsAssembly.swift */, + 0701B91C2C78FAF000DCD395 /* LiquidityPoolDetailsInput.swift */, + 0701B91D2C78FAF000DCD395 /* LiquidityPoolDetailsInteractor.swift */, + 0701B91E2C78FAF000DCD395 /* LiquidityPoolDetailsPresenter.swift */, + 0701B91F2C78FAF000DCD395 /* LiquidityPoolDetailsProtocols.swift */, + 0701B9202C78FAF000DCD395 /* LiquidityPoolDetailsRouter.swift */, + 0701B9212C78FAF000DCD395 /* LiquidityPoolDetailsViewController.swift */, + 0701B9222C78FAF000DCD395 /* LiquidityPoolDetailsViewLayout.swift */, + ); + path = LiquidityPoolDetails; + sourceTree = ""; + }; + 0701B92B2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidity */ = { + isa = PBXGroup; + children = ( + 0701B9242C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityAssembly.swift */, + 0701B9252C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityInteractor.swift */, + 0701B9262C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityPresenter.swift */, + 0701B9272C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityProtocols.swift */, + 0701B9282C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityRouter.swift */, + 0701B9292C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityViewController.swift */, + 0701B92A2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityViewLayout.swift */, + ); + path = LiquidityPoolRemoveLiquidity; + sourceTree = ""; + }; + 0701B9302C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirm */ = { + isa = PBXGroup; + children = ( + 0701B92C2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmAssembly.swift */, + 0701B92D2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmProtocols.swift */, + 0701B92E2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmViewController.swift */, + 0701B92F2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmViewLayout.swift */, + ); + path = LiquidityPoolRemoveLiquidityConfirm; + sourceTree = ""; + }; + 0701B9342C78FAF000DCD395 /* AvailablePools */ = { + isa = PBXGroup; + children = ( + 0701B9312C78FAF000DCD395 /* AvailableLiquidityPoolsListInteractor.swift */, + 0701B9322C78FAF000DCD395 /* AvailableLiquidityPoolsListPresenter.swift */, + 0701B9332C78FAF000DCD395 /* AvailableLiquidityPoolsListViewModelFactory.swift */, + ); + path = AvailablePools; + sourceTree = ""; + }; + 0701B9382C78FAF000DCD395 /* UserPools */ = { + isa = PBXGroup; + children = ( + 0701B9352C78FAF000DCD395 /* UserLiquidityPoolsListInteractor.swift */, + 0701B9362C78FAF000DCD395 /* UserLiquidityPoolsListPresenter.swift */, + 0701B9372C78FAF000DCD395 /* UserLiquidityPoolsListViewModelFactory.swift */, + ); + path = UserPools; + sourceTree = ""; + }; + 0701B9392C78FAF000DCD395 /* Flows */ = { + isa = PBXGroup; + children = ( + 0701B9342C78FAF000DCD395 /* AvailablePools */, + 0701B9382C78FAF000DCD395 /* UserPools */, + ); + path = Flows; + sourceTree = ""; + }; + 0701B93B2C78FAF000DCD395 /* View */ = { + isa = PBXGroup; + children = ( + 0701B93A2C78FAF000DCD395 /* LiquidityPoolListCell.swift */, + ); + path = View; + sourceTree = ""; + }; + 0701B93F2C78FAF000DCD395 /* ViewModel */ = { + isa = PBXGroup; + children = ( + 0701B93C2C78FAF000DCD395 /* LiquidityPoolListCellModel.swift */, + 0701B93D2C78FAF000DCD395 /* LiquidityPoolListType.swift */, + 0701B93E2C78FAF000DCD395 /* LiquidityPoolListViewModel.swift */, + ); + path = ViewModel; + sourceTree = ""; + }; + 0701B9452C78FAF000DCD395 /* LiquidityPoolsList */ = { + isa = PBXGroup; + children = ( + 0701B9392C78FAF000DCD395 /* Flows */, + 0701B93B2C78FAF000DCD395 /* View */, + 0701B93F2C78FAF000DCD395 /* ViewModel */, + 0701B9402C78FAF000DCD395 /* LiquidityPoolsListAssembly.swift */, + 0701B9412C78FAF000DCD395 /* LiquidityPoolsListProtocols.swift */, + 0701B9422C78FAF000DCD395 /* LiquidityPoolsListRouter.swift */, + 0701B9432C78FAF000DCD395 /* LiquidityPoolsListViewController.swift */, + 0701B9442C78FAF000DCD395 /* LiquidityPoolsListViewLayout.swift */, + ); + path = LiquidityPoolsList; + sourceTree = ""; + }; + 0701B94D2C78FAF000DCD395 /* LiquidityPoolsOverview */ = { + isa = PBXGroup; + children = ( + 0701B9462C78FAF000DCD395 /* LiquidityPoolsOverviewAssembly.swift */, + 0701B9472C78FAF000DCD395 /* LiquidityPoolsOverviewInteractor.swift */, + 0701B9482C78FAF000DCD395 /* LiquidityPoolsOverviewPresenter.swift */, + 0701B9492C78FAF000DCD395 /* LiquidityPoolsOverviewProtocols.swift */, + 0701B94A2C78FAF000DCD395 /* LiquidityPoolsOverviewRouter.swift */, + 0701B94B2C78FAF000DCD395 /* LiquidityPoolsOverviewViewController.swift */, + 0701B94C2C78FAF000DCD395 /* LiquidityPoolsOverviewViewLayout.swift */, + ); + path = LiquidityPoolsOverview; + sourceTree = ""; + }; + 0701B9502C78FAF000DCD395 /* ViewModel */ = { + isa = PBXGroup; + children = ( + 0701B94E2C78FAF000DCD395 /* LiquidityPoolSupplyViewModel.swift */, + 0701B94F2C78FAF000DCD395 /* LiquidityPoolSupplyViewModelFactory.swift */, + ); + path = ViewModel; + sourceTree = ""; + }; + 0701B9582C78FAF000DCD395 /* LiquidityPoolSupply */ = { + isa = PBXGroup; + children = ( + 0701B9502C78FAF000DCD395 /* ViewModel */, + 0701B9512C78FAF000DCD395 /* LiquidityPoolSupplyAssembly.swift */, + 0701B9522C78FAF000DCD395 /* LiquidityPoolSupplyInteractor.swift */, + 0701B9532C78FAF000DCD395 /* LiquidityPoolSupplyPresenter.swift */, + 0701B9542C78FAF000DCD395 /* LiquidityPoolSupplyProtocols.swift */, + 0701B9552C78FAF000DCD395 /* LiquidityPoolSupplyRouter.swift */, + 0701B9562C78FAF000DCD395 /* LiquidityPoolSupplyViewController.swift */, + 0701B9572C78FAF000DCD395 /* LiquidityPoolSupplyViewLayout.swift */, + ); + path = LiquidityPoolSupply; + sourceTree = ""; + }; + 0701B95B2C78FAF000DCD395 /* ViewModel */ = { + isa = PBXGroup; + children = ( + 0701B9592C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewModel.swift */, + 0701B95A2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewModelFactory.swift */, + ); + path = ViewModel; + sourceTree = ""; + }; + 0701B9632C78FAF000DCD395 /* LiquidityPoolSupplyConfirm */ = { + isa = PBXGroup; + children = ( + 0701B95B2C78FAF000DCD395 /* ViewModel */, + 0701B95C2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmAssembly.swift */, + 0701B95D2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmInteractor.swift */, + 0701B95E2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmPresenter.swift */, + 0701B95F2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmProtocols.swift */, + 0701B9602C78FAF000DCD395 /* LiquidityPoolSupplyConfirmRouter.swift */, + 0701B9612C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewController.swift */, + 0701B9622C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewLayout.swift */, + ); + path = LiquidityPoolSupplyConfirm; + sourceTree = ""; + }; + 0701B9642C78FAF000DCD395 /* LiquidityPools */ = { + isa = PBXGroup; + children = ( + 0701B90A2C78FAF000DCD395 /* Common */, + 0701B9232C78FAF000DCD395 /* LiquidityPoolDetails */, + 0701B92B2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidity */, + 0701B9302C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirm */, + 0701B9452C78FAF000DCD395 /* LiquidityPoolsList */, + 0701B94D2C78FAF000DCD395 /* LiquidityPoolsOverview */, + 0701B9582C78FAF000DCD395 /* LiquidityPoolSupply */, + 0701B9632C78FAF000DCD395 /* LiquidityPoolSupplyConfirm */, + ); + path = LiquidityPools; + sourceTree = ""; + }; + 0701B9B72C78FD8800DCD395 /* Kaia */ = { + isa = PBXGroup; + children = ( + 0701B9B62C78FD8800DCD395 /* KaiaHistoryResponse.swift */, + ); + path = Kaia; + sourceTree = ""; + }; + 0701B9B92C78FD8800DCD395 /* ZChain */ = { + isa = PBXGroup; + children = ( + 0701B9B82C78FD8800DCD395 /* ZChainHistoryResponse.swift */, + ); + path = ZChain; + sourceTree = ""; + }; + 0701B9BB2C78FD8800DCD395 /* 5ire */ = { + isa = PBXGroup; + children = ( + 0701B9BA2C78FD8800DCD395 /* 5ireHistoryResponse.swift */, + ); + path = 5ire; + sourceTree = ""; + }; + 0701B9BD2C78FD8800DCD395 /* Viscan */ = { + isa = PBXGroup; + children = ( + 0701B9BC2C78FD8800DCD395 /* VicscanHistoryResponse.swift */, + ); + path = Viscan; + sourceTree = ""; + }; 0702B3162970182B003519F5 /* Amount */ = { isa = PBXGroup; children = ( @@ -6321,14 +7178,54 @@ 0713097B28C6387B002B17D0 /* ScamService */ = { isa = PBXGroup; children = ( + 0701B9CA2C78FE2C00DCD395 /* ScamInfoFetcher.swift */, 0713097C28C63893002B17D0 /* ScamSyncService.swift */, 0713097E28C6F60D002B17D0 /* ScamSyncServiceFactory.swift */, 07B018D228C714B300E05510 /* ScamServiceOperationFactory.swift */, - FA3F42F82C50C8EF00AA1397 /* ScamInfoFetcher.swift */, ); path = ScamService; sourceTree = ""; }; + 0715FCD52C65FC3600AA674E /* Models */ = { + isa = PBXGroup; + children = ( + 07ECB7FC2C6A07C1000E0A14 /* SendTransactionSignRequest.swift */, + 07ECB7FA2C6A07AF000E0A14 /* TonConnectAppRequest.swift */, + 0715FCDE2C661E1D00AA674E /* TonConnect.swift */, + 0715FCE22C66262100AA674E /* TonConnectResponses+Encodable.swift */, + 0715FCDC2C660AF700AA674E /* DappBridgeMessageType.swift */, + 0715FCE02C6620B500AA674E /* DappBridgeResponse.swift */, + 0715FCE42C66378900AA674E /* TonConnectModels.swift */, + 07ECB7F22C69CF13000E0A14 /* TonConnectDessision.swift */, + 07ECB8002C6A0F9B000E0A14 /* TonConnectSendDessision.swift */, + 07ECB7F62C69F4A1000E0A14 /* TonDapp.swift */, + 07ECB8042C6B71DE000E0A14 /* TonConnectApp.swift */, + ); + path = Models; + sourceTree = ""; + }; + 071606CD2C7CB8FE00C1DF75 /* FeatureToggleService */ = { + isa = PBXGroup; + children = ( + 071606CE2C7CB91D00C1DF75 /* LocalToggleService.swift */, + 071606D02C7CB95500C1DF75 /* LocalListToggle.swift */, + ); + path = FeatureToggleService; + sourceTree = ""; + }; + 0723ED9E2C48E35600880620 /* Flows */ = { + isa = PBXGroup; + children = ( + 0723EDA32C49369D00880620 /* TransferFlowUseCase.swift */, + 0723ED9F2C48E37400880620 /* SoraQrTransferFlowUseCase.swift */, + 0723EDA72C50D6FD00880620 /* SubstrateTransferFlowUseCase.swift */, + 0723EDA52C50B87B00880620 /* BokoloTransferFlowUseCase.swift */, + 0723EDB12C50FAD900880620 /* EthereumTransferFlowUseCase.swift */, + 07B56CF92C520B5B00E924AA /* TonTransferFlowUseCase.swift */, + ); + name = Flows; + sourceTree = ""; + }; 0726FFA82AC4387F00336D76 /* WalletConnect */ = { isa = PBXGroup; children = ( @@ -6359,6 +7256,15 @@ name = Sign; sourceTree = ""; }; + 0728BD142C984D86002369FD /* View */ = { + isa = PBXGroup; + children = ( + 0728BD152C984DA0002369FD /* ConnectedAccountsTableHeaderView.swift */, + 0728BD172C984E7A002369FD /* ConnectedAccountsTableCell.swift */, + ); + name = View; + sourceTree = ""; + }; 072EB84628E2A258007E70FF /* ViewModel */ = { isa = PBXGroup; children = ( @@ -6395,6 +7301,14 @@ name = Validators; sourceTree = ""; }; + 073DE30D2C5BA34A003B4990 /* Models */ = { + isa = PBXGroup; + children = ( + 073DE30E2C5BA35B003B4990 /* TonModels.swift */, + ); + name = Models; + sourceTree = ""; + }; 074EB7AB290B9F02000A2A6A /* Events */ = { isa = PBXGroup; children = ( @@ -6481,6 +7395,43 @@ name = ViewModel; sourceTree = ""; }; + 0778A12C2C58D0E1008A1254 /* Ton */ = { + isa = PBXGroup; + children = ( + 0778A12D2C58D0F2008A1254 /* TonJettonInjector.swift */, + ); + name = Ton; + sourceTree = ""; + }; + 07A949822C46600200613B9D /* AccountInfoRemoteService */ = { + isa = PBXGroup; + children = ( + FAD0678F2C2042F30050291F /* AccountInfoRemoteService.swift */, + 070CDD6C2ACAACB900F3F20A /* EthereumRemoteBalanceFetching.swift */, + 070ED7DA2C45321300DF4098 /* TonRemoteBalanceFetching.swift */, + 07A949832C466E8C00613B9D /* SubstrateRemoteBalanceFetching.swift */, + ); + name = AccountInfoRemoteService; + sourceTree = ""; + }; + 07A949852C47C38600613B9D /* ServiceAssembly */ = { + isa = PBXGroup; + children = ( + 07A949862C47C39800613B9D /* ServiceAssembly.swift */, + ); + name = ServiceAssembly; + sourceTree = ""; + }; + 07B56CFB2C53C45100E924AA /* Transfer */ = { + isa = PBXGroup; + children = ( + FAC0BBC1291D0EAF00E6F106 /* Validators */, + 37720679F35B0EF1AAE4E483 /* Transfer */, + 4728D679CE010F910E5F12EC /* ConfirmTransfer */, + ); + path = Transfer; + sourceTree = ""; + }; 07B6BC7D28BC71BF00621864 /* ViewModel */ = { isa = PBXGroup; children = ( @@ -6507,6 +7458,33 @@ path = Chainlink; sourceTree = ""; }; + 07C438D52C638AE400475B14 /* TonConnect */ = { + isa = PBXGroup; + children = ( + 07C438D82C638B4300475B14 /* Models */, + 07C438D62C638B2900475B14 /* TonConnectServiceImpl.swift */, + 075E5FD02C7F1A630044C142 /* TonConnectService.swift */, + 075E5FCE2C7F1A180044C142 /* TonConnectServiceDelegate.swift */, + 07ECB8082C6C6CDE000E0A14 /* TonConnectEventsCenter.swift */, + 07ECB8022C6B4EA3000E0A14 /* TonConnectSessionCrypto.swift */, + 0715FCD82C6608B700AA674E /* TonConnectMessageBuilder.swift */, + 077237792C819A6600D8061F /* TonConnectMessageBuilderImpl.swift */, + ); + name = TonConnect; + sourceTree = ""; + }; + 07C438D82C638B4300475B14 /* Models */ = { + isa = PBXGroup; + children = ( + 07ECB80C2C6C7410000E0A14 /* TonConnectEvent.swift */, + 07ECB80A2C6C6E75000E0A14 /* TonConnectError.swift */, + 07C438DD2C638D3900475B14 /* TonConnectManifest.swift */, + 07C438DB2C638BB800475B14 /* TonConnectRequestPayload.swift */, + 07C438D92C638BAA00475B14 /* TonConnectParameters.swift */, + ); + path = Models; + sourceTree = ""; + }; 07D05E4228EEFBFE00B66C70 /* Pool */ = { isa = PBXGroup; children = ( @@ -6557,6 +7535,25 @@ path = PoolExisting; sourceTree = ""; }; + 07D0BD3C2C6F0C8D001ECD58 /* View */ = { + isa = PBXGroup; + children = ( + 07D0BD442C6F191C001ECD58 /* DappBrowserSectionHeaderView.swift */, + F684B043895B80CAD70A59CF /* DappBrowserViewLayout.swift */, + 07D0BD3D2C6F0CA0001ECD58 /* DappBrowserFeaturedView.swift */, + ); + path = View; + sourceTree = ""; + }; + 07D0BD3F2C6F0E90001ECD58 /* Cells */ = { + isa = PBXGroup; + children = ( + 07D0BD402C6F0E9C001ECD58 /* BrowserExploreFeaturedCell.swift */, + 07D0BD422C6F179E001ECD58 /* DappBrowserListCell.swift */, + ); + path = Cells; + sourceTree = ""; + }; 07DE95AB28A1119400E9C2CB /* BalanceInfo */ = { isa = PBXGroup; children = ( @@ -6686,6 +7683,7 @@ children = ( FA6262312AC2E35A005D3D95 /* WalletConnectProposalViewModel.swift */, FA6262322AC2E35A005D3D95 /* WalletConnectProposalViewModelFactory.swift */, + 07ECB7F42C69EDCE000E0A14 /* SessionStatus.swift */, ); path = Model; sourceTree = ""; @@ -6721,6 +7719,7 @@ isa = PBXGroup; children = ( FA6262012AC2E359005D3D95 /* WalletConnectSessionViewModelFactory.swift */, + 07ECB7FE2C6A0BB2000E0A14 /* ConnectRequestVariant.swift */, FA6262042AC2E359005D3D95 /* WalletConnectSessionViewModel.swift */, ); name = Model; @@ -6785,6 +7784,8 @@ isa = PBXGroup; children = ( FA93A2E22833AEFB0021330F /* Flow */, + AE1000F026679824004753B7 /* InitiatedBonding */, + AE1000EF2667981A004753B7 /* ChangeTargets */, 84D2F45825EF053F008B914D /* Views */, 84D2F45225EF043C008B914D /* ViewModel */, D6C6573C52692E4A56E35FF9 /* RecommendedValidatorListProtocols.swift */, @@ -6858,6 +7859,15 @@ path = Validators; sourceTree = ""; }; + 0F353CD57BFACDCEED0B6D07 /* StakingRedeem */ = { + isa = PBXGroup; + children = ( + 403D8D690B564EDC04996945 /* StakingRedeemTests.swift */, + 840C71B926821D2000B6D9C2 /* StakingRedeemMock.swift */, + ); + path = StakingRedeem; + sourceTree = ""; + }; 1132E923A881889011B3D2A6 /* ChainAccountBalanceList */ = { isa = PBXGroup; children = ( @@ -6906,6 +7916,7 @@ isa = PBXGroup; children = ( F429324D26280F5F00752C2C /* ViewModel */, + F400A7C0260CE1560061D576 /* Model */, F474D386260CBED500013699 /* View */, CF891BE39D442C2D06DDF3BB /* StakingRewardDetailsProtocols.swift */, 638A65DAC86BAF9EB4D2F2F8 /* StakingRewardDetailsWireframe.swift */, @@ -6998,19 +8009,33 @@ 2698CD398B0412EB85D620AB /* Pods */ = { isa = PBXGroup; children = ( - A77DF1CA9610844CF63C4BBC /* Pods-fearlessAll-fearless.debug.xcconfig */, - 0F48467D97F9D06F83F70894 /* Pods-fearlessAll-fearless.dev.xcconfig */, - E357E95FDDBF8F3938402145 /* Pods-fearlessAll-fearless.release.xcconfig */, - 8646C6DACE714085B4B0F799 /* Pods-fearlessAll-fearlessIntegrationTests.debug.xcconfig */, - EA86DE0B14A20416D3AF1E1E /* Pods-fearlessAll-fearlessIntegrationTests.dev.xcconfig */, - 63B11A7ADEF107B6341C378F /* Pods-fearlessAll-fearlessIntegrationTests.release.xcconfig */, - ED916AAFB6B5A7FA0C802615 /* Pods-fearlessTests.debug.xcconfig */, - 38B543AA1B941C76CB021051 /* Pods-fearlessTests.dev.xcconfig */, - 7BDBADCF78FB10BE08DE5259 /* Pods-fearlessTests.release.xcconfig */, + 1F03612B61CDE654A7AFAC21 /* Pods-fearlessAll-fearless.debug.xcconfig */, + 9981A1A70BCCB1B1644A7CE0 /* Pods-fearlessAll-fearless.dev.xcconfig */, + 7A269FFAB51579A58387BD00 /* Pods-fearlessAll-fearless.release.xcconfig */, + C18EC31B3CF418C773F495C7 /* Pods-fearlessAll-fearlessIntegrationTests.debug.xcconfig */, + 947E19739DB3292DAA943CD3 /* Pods-fearlessAll-fearlessIntegrationTests.dev.xcconfig */, + 1107A1285620FDD030DE2268 /* Pods-fearlessAll-fearlessIntegrationTests.release.xcconfig */, + 54648003EC8531169B687994 /* Pods-fearlessTests.debug.xcconfig */, + 895FD86323A090143D0ADA24 /* Pods-fearlessTests.dev.xcconfig */, + D9657DB9D8AB36AADD726E5E /* Pods-fearlessTests.release.xcconfig */, ); path = Pods; sourceTree = ""; }; + 289549035B3DBF4E3B283D2E /* DappBrowserList */ = { + isa = PBXGroup; + children = ( + 1B3AB5BB9A2488FDD8DDFBA6 /* DappBrowserListProtocols.swift */, + AF0C991DB1C7567632BB54A9 /* DappBrowserListRouter.swift */, + 7A656BB6CADD5BEBD41CE492 /* DappBrowserListPresenter.swift */, + 2EE85E6A9028E814231D8466 /* DappBrowserListInteractor.swift */, + 490FDCAC66E3A0C80F501A5F /* DappBrowserListViewController.swift */, + 0F28F73B0BC6C4EEBCC5B546 /* DappBrowserListViewLayout.swift */, + 2BD242D3369DD517695F330A /* DappBrowserListAssembly.swift */, + ); + path = DappBrowserList; + sourceTree = ""; + }; 28CCC9C191E2305B65727756 /* NodeSelection */ = { isa = PBXGroup; children = ( @@ -7069,24 +8094,6 @@ path = ExportMnemonicConfirm; sourceTree = ""; }; - 2DF924A75A7F31CD79261A40 /* MultichainAssetSelection */ = { - isa = PBXGroup; - children = ( - FAB90CEB2C6F5B2100D13804 /* ViewModel */, - FAB90CE72C6F582C00D13804 /* View */, - FA4B75AC2C6F325E001B954F /* AssetFetching */, - FA4B75AB2C6F3233001B954F /* ChainSelection */, - D2E749A964E0920F98B62B71 /* MultichainAssetSelectionProtocols.swift */, - 52E0A32C643A1304F29D40A1 /* MultichainAssetSelectionRouter.swift */, - 26B8EEA0D384CCA5EB1CA052 /* MultichainAssetSelectionPresenter.swift */, - 94C59B15363623B38F70E54E /* MultichainAssetSelectionInteractor.swift */, - 66D18E89F0DB92133A96EDF9 /* MultichainAssetSelectionViewController.swift */, - 0484D190E85F4EFAF5EC33EE /* MultichainAssetSelectionViewLayout.swift */, - 9596692C164228636164C830 /* MultichainAssetSelectionAssembly.swift */, - ); - path = MultichainAssetSelection; - sourceTree = ""; - }; 2E04CA9A3624EA1AD62722E8 /* WalletOption */ = { isa = PBXGroup; children = ( @@ -7124,6 +8131,23 @@ path = StakingRewardDetails; sourceTree = ""; }; + 37720679F35B0EF1AAE4E483 /* Transfer */ = { + isa = PBXGroup; + children = ( + FAC0BBB4291D0EAF00E6F106 /* Models */, + 0723ED9E2C48E35600880620 /* Flows */, + FAC0BBBD291D0EAF00E6F106 /* SendViewLayout.swift */, + AD417B638E8EFD33EBDC91DF /* TransferProtocols.swift */, + BA8C84B54C44C4D28D54B657 /* TransferRouter.swift */, + 0524F9F46A9D77159B2B14FE /* TransferPresenter.swift */, + 8647FEB1772B20938D9E8D63 /* TransferInteractor.swift */, + 7E8E30C194FD07DC9ECCBE74 /* TransferViewController.swift */, + 75796C9C1AC23FDE8E1E31DB /* TransferViewLayout.swift */, + A90D38E873CA7EBD23FC14B5 /* TransferAssembly.swift */, + ); + path = Transfer; + sourceTree = ""; + }; 3C30D61B22D5AB28B6EBED5C /* PolkaswapAdjustment */ = { isa = PBXGroup; children = ( @@ -7223,10 +8247,23 @@ path = NftCollection; sourceTree = ""; }; + 4728D679CE010F910E5F12EC /* ConfirmTransfer */ = { + isa = PBXGroup; + children = ( + FA38C9C927630595005C5577 /* Models */, + 5A4416B96A9DD5FB5EEA086E /* WalletSendConfirmViewLayout.swift */, + 759EAF04B9064529D6862A14 /* ConfirmTransferProtocols.swift */, + BD1C635488F941373CDBE377 /* ConfirmTransferRouter.swift */, + 5DD32F4D6D8DABF991E09C7C /* ConfirmTransferPresenter.swift */, + 20FAD50119EE0DBA135AC9A7 /* ConfirmTransferViewController.swift */, + 9BD8F497D1380B608E046658 /* ConfirmTransferAssembly.swift */, + ); + path = ConfirmTransfer; + sourceTree = ""; + }; 478C62A42D572C8647512722 /* LiquidityPoolDetails */ = { isa = PBXGroup; children = ( - FA9464242C5CC434001E810F /* LiquidityPoolDetailsInput.swift */, FA6ECE722BF49BE300481B2B /* ViewModel */, 9FED48DE9B681995E6E4A581 /* LiquidityPoolDetailsProtocols.swift */, 28E3B4BA1160B87C435C2AAF /* LiquidityPoolDetailsRouter.swift */, @@ -7288,6 +8325,7 @@ F43A8A93265B9C8700A8A5A8 /* View */, F28EDDF9277242505FDDECA1 /* CustomValidatorListProtocols.swift */, 14E3337CDD7C831AEAA4582F /* CustomValidatorListPresenter.swift */, + 365CAE2753E7D5F9B9DB7D1F /* CustomValidatorListInteractor.swift */, 270B309EC85D8897A4ADD98A /* CustomValidatorListViewController.swift */, F52B8815D6AF5E69B145D245 /* CustomValidatorListViewFactory.swift */, ); @@ -7417,21 +8455,6 @@ path = ChainAccountBalance; sourceTree = ""; }; - 64D18A46DA9DBF23A06F760C /* WalletSendConfirm */ = { - isa = PBXGroup; - children = ( - FA38C9C927630595005C5577 /* ViewModels */, - EF834BF779244B8AF7746B04 /* WalletSendConfirmProtocols.swift */, - 9A22A2EB487E282DCA93C676 /* WalletSendConfirmWireframe.swift */, - 8A687FBDA0912F8727CE0D81 /* WalletSendConfirmPresenter.swift */, - FAE152D16E6C78D297BFFC3C /* WalletSendConfirmInteractor.swift */, - CF4A813A6FB09F9FE5891578 /* WalletSendConfirmViewController.swift */, - 5A4416B96A9DD5FB5EEA086E /* WalletSendConfirmViewLayout.swift */, - 12441689D2AF47D508D16CCF /* WalletSendConfirmViewFactory.swift */, - ); - path = WalletSendConfirm; - sourceTree = ""; - }; 64FCC7EEABFD71322F5AB7AF /* CustomValidators */ = { isa = PBXGroup; children = ( @@ -7517,7 +8540,9 @@ 749EAA035EECE4D63C56C358 /* LiquidityPoolSupplyConfirm */, 48EAF80DCC0C537917FC5A23 /* LiquidityPoolRemoveLiquidity */, BDB80385E6818AE7707DDFF8 /* LiquidityPoolRemoveLiquidityConfirm */, - D8D6C7AD682F80950E731020 /* MultichainAssetSelection */, + FBD5D2C2BD7B0632C232E4CF /* Transfer */, + A53888D7C5E76ACD934B51DC /* ConfirmTransfer */, + 70891280ED837AB71A90AB0B /* FeatureToggleList */, ); path = Modules; sourceTree = ""; @@ -7549,6 +8574,13 @@ path = Flow; sourceTree = ""; }; + 70891280ED837AB71A90AB0B /* FeatureToggleList */ = { + isa = PBXGroup; + children = ( + ); + path = FeatureToggleList; + sourceTree = ""; + }; 7100EDE40D25E1075DD151C3 /* WalletTransactionHistory */ = { isa = PBXGroup; children = ( @@ -7720,6 +8752,7 @@ 84155DE8253980D700A27058 /* Services */ = { isa = PBXGroup; children = ( + 071606C52C7C6C3200C1DF75 /* PricesService.swift */, FAF9C2952AAADE3300A61D21 /* DeprecatedControllerStashAccountCheckService.swift */, 841AAC2B26F7311200F0A25E /* RemoteSubscription */, 84D1110A26B922C10016D962 /* ChainRegistry */, @@ -7732,7 +8765,6 @@ 84BE209D25E85CCA00B4748C /* ServiceCoordinator.swift */, 076D9D5F29504BA3002762E3 /* PolkaswapSettingsSyncService.swift */, 076D9D6529507B39002762E3 /* PolkaswapSettingsFactory.swift */, - C6182B4B2C6474F30089558D /* PricesService.swift */, ); path = Services; sourceTree = ""; @@ -7811,6 +8843,7 @@ 8428764224ADDE0200D91AD8 /* Profile */ = { isa = PBXGroup; children = ( + 8493D0DD26FE5D0800A28008 /* Model */, 8428764624ADDE0200D91AD8 /* ViewModel */, 8428764A24ADDE0200D91AD8 /* View */, 8428764D24ADDE0200D91AD8 /* ProfileProtocol.swift */, @@ -7842,6 +8875,8 @@ 8428764C24ADDE0200D91AD8 /* ProfileTableViewCell.xib */, 8467FD4224ED5F46005D486C /* ProfileSectionTableViewCell.swift */, 8467FD4424ED5F60005D486C /* ProfileSectionTableViewCell.xib */, + 8467FD4824ED64A5005D486C /* ProfileDetailsTableViewCell.swift */, + 8467FD4624ED6496005D486C /* ProfileDetailsTableViewCell.xib */, 2E57C70E27EA169000AF075A /* ProfileViewLayout.swift */, ); path = View; @@ -8129,6 +9164,7 @@ F4488CF126143E0000AEE6DB /* EraRewardPoints.swift */, 8454C21C2632A78900657DAD /* EventRecord.swift */, 8454C2642632B0EF00657DAD /* EventCodingPath.swift */, + 8454C2692632B8CE00657DAD /* BalanceDepositEvent.swift */, 84939B1726E1690D000111DA /* TreasuryDepositEvent.swift */, 8473D3FF2657E8BB00B394B2 /* CrowdloanFunds.swift */, 8473D4072657E9AD00B394B2 /* CrowdloanLastContribution.swift */, @@ -8147,6 +9183,7 @@ FA2FC82728B380FD00CC0A42 /* RuntimeCall+CallCodingPath.swift */, FA25698A274CE61000875A53 /* MultiSignature+CryptoType.swift */, 843910B8253EFB8100E3C217 /* StorageKeyFactory+Implicit.swift */, + 849E0CCF25CFDDB700B33506 /* StorageUpdateData+Decoding.swift */, 845BB8BF25E4508800E5FCDC /* SS58FactoryExtensions.swift */, 842349C42624E98C0066ACFE /* MultiAddress+Query.swift */, 84A617252625AF51007B75E1 /* RuntimeMetadata+Internal.swift */, @@ -8227,6 +9264,7 @@ 843F65782658548A00829C14 /* Model */ = { isa = PBXGroup; children = ( + FA256A38274CE80100875A53 /* CrowdloanAddMemoParam.swift */, 843F6579265854A700829C14 /* CrowdloanDisplayInfo.swift */, 848EAEAF2659310A00676CEA /* CrowdloanStatus.swift */, 8473D4202657FFFB00B394B2 /* Crowdloan.swift */, @@ -8247,6 +9285,7 @@ 8472975C260B1B71009B86D0 /* ExistingBonding.swift */, 84403D8725E92A9C00494FD4 /* InitiatedBonding.swift */, AE7129C02608CAE7000AA3F5 /* NetworkStakingInfo.swift */, + 841E6AF525EC12100007DDFE /* PreparedNomination.swift */, 845BB8D525E461FC00E5FCDC /* RewardDestination.swift */, 841E6AFD25EC12DE0007DDFE /* SelectedValidatorInfo.swift */, 8425EB1A25EADD8600C307C9 /* StakingConstants.swift */, @@ -8276,6 +9315,7 @@ 07F2B75A28A6533900280C38 /* assets.json */, 076D9D6129506CE3002762E3 /* polkaswapSettings.json */, 07F2B75B28A6535B00280C38 /* chains.json */, + 07230EB02C7456B900B92466 /* dapps.json */, 07C3397029178D390057C4A5 /* types.json */, 84452F7025D5E2B300F47EC5 /* runtime-westend.json */, 84452F7125D5E2B300F47EC5 /* runtime-polkadot.json */, @@ -8375,16 +9415,22 @@ isa = PBXGroup; children = ( FA74359E29C073790085A47E /* ChainSettingsMapper.swift */, - 845B821826EF808D00D25C72 /* MetaAccountMapper.swift */, 84CA68DE26BEAA0F003B9453 /* ChainModelMapper.swift */, 845B822026EF8F1A00D25C72 /* ManagedMetaAccountMapper.swift */, FA6A6DBC27B60A84007D1A20 /* ChainNodeModelMapper.swift */, 076D9D6729509F1C002762E3 /* PolkaswapSettingMapper.swift */, - C64DD7572C75C53A00E97804 /* PriceDataMapper.swift */, ); path = EntityToModel; sourceTree = ""; }; + 84585A32251CE1BF00390F7A /* Contacts */ = { + isa = PBXGroup; + children = ( + 84FAB0772543791A00319F74 /* ContactContext.swift */, + ); + path = Contacts; + sourceTree = ""; + }; 845BB8B625E4464D00E5FCDC /* ExtrinsicService */ = { isa = PBXGroup; children = ( @@ -8457,7 +9503,9 @@ 07C3397129189B720057C4A5 /* ChainsTypesSyncService.swift */, 8436E94326C853E4003D4EA7 /* RuntimeSnapshotOperationFactory.swift */, 07F2B76228ACDA7800280C38 /* RuntimeHotBootSnapshotFactory.swift */, + 8436E94526C85405003D4EA7 /* RuntimeSnapshot.swift */, 844CB57126F9EB2000396E13 /* RuntimeCodingService.swift */, + FAADF71129C47D10002B6D39 /* RuntimeSpecVersion.swift */, ); path = RuntimeProviderPool; sourceTree = ""; @@ -8489,12 +9537,15 @@ isa = PBXGroup; children = ( 07BF3D952B3D8B3A0046ABF4 /* PriceDataSource.swift */, + 07230EAA2C73515E00B92466 /* DappDataSource.swift */, + FA4B92B72844D2360003BCEF /* CoingeckoPricesSource.swift */, 84EE6826264AD37B0026E6D3 /* Rewards */, 8463A71E25E39E07003B8160 /* StorageProviderSource.swift */, 8472C600265D7A1F00E2481B /* WebSocketProviderSource.swift */, 84F4386F25D9BC3900AEDA56 /* EmptyStreamableSource.swift */, 843F657026584D2C00829C14 /* JsonSingleProviderSource.swift */, F4C086C626D1159E00716AEC /* SubqueryEraStakersInfoSource.swift */, + AEAC68FD26EA3C2A00346599 /* CoingeckoPriceSource.swift */, ); path = Sources; sourceTree = ""; @@ -8528,6 +9579,7 @@ children = ( 8467FCFB24E5C3BD005D486C /* URLHandlingService.swift */, 8467FCFD24E5C50B005D486C /* KeystoreImportService.swift */, + 07D0BD3A2C6E2282001ECD58 /* TonConnectUrlHandling.swift */, ); path = URLHandling; sourceTree = ""; @@ -8626,6 +9678,8 @@ 843910B5253EE62B00E3C217 /* DataProviderChange+Result.swift */, 8434C9E525403686009E4191 /* CDTransactionHistoryItem+CoreDataDecodable.swift */, 84FAB0642542CA4200319F74 /* CDContactItem+CoreDataDecodable.swift */, + 07ECB7F82C69F62F000E0A14 /* CDTonDapp+CoreDataDecodable.swift */, + 07ECB8062C6B7380000E0A14 /* CDTonConnectedApp+CoreDataDecodable.swift */, 2A66CF4E25D109770006E4C1 /* CDPhishingItem+CoreDataDecodable.swift */, 84452FA425D679F200F47EC5 /* CDRuntimeMetadataItem+CoreDataCodable.swift */, 84786E1E25FA6C390089DFF7 /* CDStashItem+CoreDataCodable.swift */, @@ -8712,13 +9766,18 @@ 8470D6CE253E31FB009E9A5D /* StorageSubscription */ = { isa = PBXGroup; children = ( + FA2569A4274CE6AD00875A53 /* BalanceLockSubscription.swift */, FA2569A2274CE6AD00875A53 /* Overrides */, + 8470D6CC253E3170009E9A5D /* AccountInfoSubscription.swift */, 843910C0253F36F300E3C217 /* BaseStorageChildSubscription.swift */, 8470D6D1253E3382009E9A5D /* StorageSubscriptionContainer.swift */, 8470D6CF253E321C009E9A5D /* StorageSubscriptionProtocols.swift */, 8470D6D3253E35F0009E9A5D /* StorageUpdate.swift */, + 84FD3DB62540EF0700A234E3 /* TransactionSubscription.swift */, + 84F30E9625FD3C5300039D09 /* EventEmittingStorageSubscription.swift */, 84F30E9B25FD3DBC00039D09 /* EmptyHandlingStorageSubscription.swift */, 84F30EA025FD3EE700039D09 /* ChildSubscriptionFactory.swift */, + 8454C26E2632BBAA00657DAD /* ExtrinsicProcessing.swift */, ); path = StorageSubscription; sourceTree = ""; @@ -8798,6 +9857,8 @@ 84893BFF24DA8600008F6A3F /* Model */ = { isa = PBXGroup; children = ( + FACACE1027BCF104005422EE /* MetaAccountCreationMetadata.swift */, + 84893C0224DA8641008F6A3F /* AccountCreationRequest.swift */, 84893C0424DA8663008F6A3F /* AccountCreationError.swift */, C661B3B527E2E7AB005F1F7D /* AccountCreateChainType.swift */, C600C4D828054A1B00111316 /* AccountCreateFlow.swift */, @@ -8855,7 +9916,8 @@ 8438E1D024BFAAD2001BDB13 /* fearlessIntegrationTests */, 849013A924A80984008F705E /* Products */, 2698CD398B0412EB85D620AB /* Pods */, - C278E98FD96B1805C96BD127 /* Frameworks */, + 84CFF1CA26526C4700DB7CF7 /* Recovered References */, + 900558FC038333522F24E367 /* Frameworks */, ); sourceTree = ""; }; @@ -8872,6 +9934,7 @@ 849013AA24A80984008F705E /* fearless */ = { isa = PBXGroup; children = ( + 07165B1F2C6DDF4E00C11E3B /* fearless.entitlements */, FA8644342767AB7E00956D8E /* CoreLayer */, FA38C9A227606FDD005C5577 /* ApplicationLayer */, 8490141D24A93027008F705E /* Fonts */, @@ -8948,6 +10011,8 @@ 849013D224A9268D008F705E /* Modules */ = { isa = PBXGroup; children = ( + 0701B9642C78FAF000DCD395 /* LiquidityPools */, + 0701B8962C78F34A00DCD395 /* AccountStatistics */, FAD067AF2C2044B10050291F /* AssetManagement */, FA1D51D42BCFD410001353E7 /* LiquidityPools */, FA34EEC82B98723B0042E73E /* BalanceLocksDetail */, @@ -8966,13 +10031,11 @@ FA8F6383298253ED004B8CD4 /* AddConnection */, FAADC1AE2926597400DA9903 /* ScanQR */, FAC0BBC4291D0EB000E6F106 /* SelectAsset */, - FAC0BBB3291D0EAF00E6F106 /* Send */, FA2FC7CC28B3807C00CC0A42 /* StakingPool */, 07DE95BE28A169A500E9C2CB /* AssetListSearch */, 07DE95AB28A1119400E9C2CB /* BalanceInfo */, 070B2C4D289CE43A00F78F82 /* SelectNetwork */, FA4B92A12844D0E60003BCEF /* SelectCurrency */, - FA99423828053C8600D771E5 /* SelectExportAccount */, C6264C262799A54400FCA0DB /* WalletDetails */, 8438C486265649F800047E3F /* Crowdloan */, 8428767524AE046300D91AD8 /* About */, @@ -9015,8 +10078,13 @@ 45C94A390068322611CA7C02 /* SwapTransactionDetail */, DA46895F73B0FB1064146E47 /* AssetNetworks */, 0AEF32A92BEEDB9B5A60A433 /* ClaimCrowdloanRewards */, - 8E7E74939224B5DA444D4AFA /* AccountStatistics */, - 2DF924A75A7F31CD79261A40 /* MultichainAssetSelection */, + 07B56CFB2C53C45100E924AA /* Transfer */, + 9E9B8E7D0CF6D39DD826885F /* TonWebBridge */, + AD55C5CD2FE0946A08730F0A /* DappBrowser */, + 289549035B3DBF4E3B283D2E /* DappBrowserList */, + AE187612EF3DE462ED577B3E /* FeatureToggleList */, + EA050F0D10984D982C31B98F /* ConnectedAccounts */, + 8ABF976F131CB662FADD2B1B /* EcosystemOptions */, ); path = Modules; sourceTree = ""; @@ -9040,6 +10108,11 @@ 849013D724A927E2008F705E /* Extension */ = { isa = PBXGroup; children = ( + 0701B8B42C78F69400DCD395 /* BlockExplorerType+Filters.swift */, + 0701B8B62C78F69500DCD395 /* ChainModel+Nomis.swift */, + 0701B8B72C78F69500DCD395 /* Decimal+Formatting.swift */, + 0701B8B52C78F69400DCD395 /* FWCosmosView.swift */, + 0701B8B32C78F69400DCD395 /* UIImage+ColorsInvert.swift */, FA5085AA2C33C6D4002DF97D /* SafeArray.swift */, FA5085AB2C33C6D4002DF97D /* SafeDictionary.swift */, FACD427E2A5BE7D8009975AA /* JSONRPCOperation+Result.swift */, @@ -9073,11 +10146,8 @@ FAA9BC402B8F17BA00A875BF /* Collection+Average.swift */, FA24FEFD2B95C32200CD9E04 /* Decimal+DoubleValue.swift */, FAC6CDA82BA814F20013A17E /* UIControl+Disable.swift */, - FAF6D90C2C57654F00274E69 /* Decimal+Formatting.swift */, - FAB482F02C58AC7F00594D89 /* ChainModel+Nomis.swift */, - FAFB5EE12C5A2CE80015D3DD /* FWCosmosView.swift */, - FA4542412C6B367B00610A71 /* BlockExplorerType+Filters.swift */, - FAB90CF02C73351C00D13804 /* UIImage+ColorsInvert.swift */, + 0778A1292C5763D6008A1254 /* Task.swift */, + 07CA73FA2CDDE27400EF5279 /* MetaAccountModel.swift */, ); path = Extension; sourceTree = ""; @@ -9108,7 +10178,6 @@ 843910AF253ED36C00E3C217 /* ChainStorageItem.swift */, 84893C0624DA890F008F6A3F /* CommonError.swift */, 84FAB0622542C8D600319F74 /* ContactItem.swift */, - 84729740260A9C13009B86D0 /* DisplayAddress.swift */, 84754CA12513DB8800854599 /* EmptyAccountIcon.swift */, 84F2FF0625E7AF8F008338D5 /* EraValidatorInfo.swift */, 84F4A9172550331D000CF0A3 /* ExportOption.swift */, @@ -9123,6 +10192,7 @@ 84786E1925FA6A470089DFF7 /* StashItem.swift */, 84B71DE4260B90270003A100 /* SubstrateAlias.swift */, 845BB8DA25E462B100E5FCDC /* SubstrateConstansts.swift */, + 07DCB8612CD363EF00A01C64 /* TonConstansts.swift */, 075C646F28098AFB00A55094 /* EthereumConstants.swift */, 842876AF24AE059700D91AD8 /* SupportData.swift */, 849014A524AA801B008F705E /* TextSharingSource.swift */, @@ -9159,13 +10229,13 @@ FAAA29562B8DED770089AFE6 /* MapKeyType.swift */, FA34EEF02B9875CC0042E73E /* AccountIdVariant.swift */, FAC6CD852BA7F9990013A17E /* Pagination.swift */, + 0701B9B22C78FBC600DCD395 /* AccountStatistics.swift */, FAC6CD892BA7FA4B0013A17E /* AssetTransactionData.swift */, FAC6CD8B2BA7FA6C0013A17E /* AmountDecimal.swift */, FAC6CD8D2BA7FBD30013A17E /* WalletHistoryRequest.swift */, FAC6CD8F2BA7FCA70013A17E /* AssetTransactionFee.swift */, FAC6CD992BA809160013A17E /* ReceiveInfo.swift */, FAC6CDA02BA80CB10013A17E /* WalletTransactionType.swift */, - FAD5FF262C463C4F003201F5 /* AccountStatistics.swift */, ); path = Model; sourceTree = ""; @@ -9185,6 +10255,7 @@ children = ( 8490140324A92F6D008F705E /* ViewModel */, 8490140224A92F6D008F705E /* OnboardingMainViewController.swift */, + 07FEC1332CAE624B003938C6 /* OnboardingMainViewLayout.swift */, 8490140624A92F6D008F705E /* OnbordingMain.xib */, 8490140824A92F6D008F705E /* OnboardingMainPresenter.swift */, 8490140924A92F6D008F705E /* OnboardingMainViewFactory.swift */, @@ -9258,6 +10329,7 @@ isa = PBXGroup; children = ( 8490145124A93FD1008F705E /* FearlessLoadingViewFactory.swift */, + 8490145024A93FD1008F705E /* FearlessLoadingViewPresenter.swift */, ); path = LoadingView; sourceTree = ""; @@ -9329,6 +10401,9 @@ 8490145424A9403C008F705E /* Helpers */ = { isa = PBXGroup; children = ( + 071606C92C7C6C8800C1DF75 /* AssetModelMapper.swift */, + 071606C82C7C6C8800C1DF75 /* AssetRepositoryFactory.swift */, + 071606C72C7C6C8700C1DF75 /* PriceDataHelper.swift */, FAD067982C2043FC0050291F /* ChainConnectionVisibilityHelper.swift */, FAD067972C2043FC0050291F /* WalletAssetsObserver.swift */, FA286AF42A3043C3008BD527 /* ConvenienceError.swift */, @@ -9358,8 +10433,6 @@ 84B677D526AED45500863DC6 /* SharedList.swift */, 841AAC2026F6860B00F0A25E /* AssetBalanceFormatterFactory.swift */, 841AAC2226F6879900F0A25E /* AssetBalanceDisplayInfo.swift */, - 841AAC2426F692EF00F0A25E /* AddressConversion.swift */, - 841AAC2626F6A2A500F0A25E /* ChainAccountFetching.swift */, 844CB57926FA706C00396E13 /* ChainAssetDisplayInfo.swift */, C64ECCE228873F2500CFF434 /* ChainAssetsFetching.swift */, 07F2B75E28AA183C00280C38 /* PrintTimer.swift */, @@ -9369,9 +10442,6 @@ FAD428972A860C9B001D6A16 /* EthereumNodeFetching.swift */, FA584C792AB2BFE300F6F020 /* MediaType.swift */, FAC6CDAE2BA81FA00013A17E /* WalletLoggerProtocol.swift */, - C6FBA6D72C65DDBC008B18D9 /* AssetModelMapper.swift */, - C6FBA6D92C65EA56008B18D9 /* AssetRepositoryFactory.swift */, - C6FBA6DB2C69E006008B18D9 /* PriceDataHelper.swift */, ); path = Helpers; sourceTree = ""; @@ -9434,9 +10504,11 @@ 845CB6FE2627633A005F798B /* Longrun */, 8490148324AA27C1008F705E /* OperationManagerFacade.swift */, 84A2C90324E07F400020D3B7 /* AccountOperationFactoryError.swift */, + 843910C8253F591D00E3C217 /* ScaleDecoderOperation.swift */, 848FFE8225E686C200652AA5 /* StorageDecodingOperation.swift */, 848FFE8F25E6CF4300652AA5 /* StorageKeyEncodingOperation.swift */, 84F2FEF925E797E8008338D5 /* StorageRequestFactory.swift */, + 840D891C26242AE500AB231B /* StorageRequestParams.swift */, 84E6D57B262E2CE8000EA3F5 /* OperationCombiningService.swift */, AE4623712719A85900E4FD30 /* MetaAccountOperationFactory.swift */, ); @@ -9446,6 +10518,7 @@ 8490147C24AA14AF008F705E /* Crypto */ = { isa = PBXGroup; children = ( + FA256986274CE5B700875A53 /* SHA256.swift */, 84C74364251E4D60009576C6 /* SigningWrapperProtocol.swift */, 8467FD2924EA6C62005D486C /* SigningWrapper.swift */, 84C74362251E4C2F009576C6 /* DummySigner.swift */, @@ -9461,7 +10534,8 @@ 8490149D24AA7F9A008F705E /* View */ = { isa = PBXGroup; children = ( - FA01B2BA2C6213740078A35B /* InfoTitleView.swift */, + 0701B8B02C78F63400DCD395 /* AccountScore */, + 0701B8AE2C78F63400DCD395 /* InfoTitleView.swift */, FA1D02032BBE71F2005B7071 /* TokenPairIconsView.swift */, FA34EE9D2B9871BD0042E73E /* TriangularedTitleMultiValueView.swift */, FAD429312A865695001D6A16 /* CheckboxButton.swift */, @@ -9549,7 +10623,8 @@ FA2222932BD2726F0031DE04 /* SkeletonLabel.swift */, FA2222952BD272A30031DE04 /* SkeletonLoadableView.swift */, FA887A482C1C19DB00CA720F /* WarningView.swift */, - FAF600782C48F11200E56558 /* AccountScore */, + 07FEC1352CAE6848003938C6 /* SelectEcosystemBannerView.swift */, + FA740A8C2CC8C03400981508 /* GradientBorderedTriangularedView.swift */, ); path = View; sourceTree = ""; @@ -9633,7 +10708,15 @@ 849014FD24AB698B008F705E /* Wallet */ = { isa = PBXGroup; children = ( + FAC6CDA52BA814020013A17E /* AccountList */, FA8F63A429825C90004B8CD4 /* Receive */, + 84585A32251CE1BF00390F7A /* Contacts */, + 8490151924ABC343008F705E /* History */, + 849E2330254AEF9F00B1F6D4 /* InvoiceScan */, + 84D97ECD2521CA2100F07405 /* View */, + 8490150E24AB8A3A008F705E /* WalletEmptyStateDataSource.swift */, + 8490150824AB8A3A008F705E /* WalletEmptyStateDataSource+Module.swift */, + 8490152024ABC721008F705E /* WalletStaticImageViewModel.swift */, ); path = Wallet; sourceTree = ""; @@ -9655,24 +10738,33 @@ path = Network; sourceTree = ""; }; + 8490151924ABC343008F705E /* History */ = { + isa = PBXGroup; + children = ( + 84FB1F782527065A00E0242B /* HistoryConstants.swift */, + ); + path = History; + sourceTree = ""; + }; 8490152C24ABD0EA008F705E /* Wallet */ = { isa = PBXGroup; children = ( 07BF3D9C2B3D8C9B0046ABF4 /* AssetTransactionData+OklinkHistory.swift */, FA6C175029935DAD00A55254 /* AssetTransactionData+GiantsquidHistory.swift */, FA6C175129935DAD00A55254 /* AssetTransactionData+SubqueryHistory.swift */, + 0701B9C22C78FDDF00DCD395 /* AssetTransactionData+FireHistory.swift */, + 0701B9C52C78FDE000DCD395 /* AssetTransactionData+KaiaHistory.swift */, + 0701B9C42C78FDE000DCD395 /* AssetTransactionData+VicscanHistory.swift */, + 0701B9C32C78FDDF00DCD395 /* AssetTransactionData+ZChainHistory.swift */, FA6C175229935DAE00A55254 /* AssetTransactionData+SubsquidHistory.swift */, 8490152D24ABD0F5008F705E /* Logger+Wallet.swift */, 84FD3DAE2540BEA000A234E3 /* TransactionHistoryItem+Status.swift */, FA7337082A1339890096A291 /* AssetTransactionData+AlchemyHistory.swift */, 07BF3DA02B3D98BD0046ABF4 /* AssetTransactionData+Zeta.swift */, FA9A8F082A6FB8F9008FA99F /* AssetTransactionData+EtherscanHistory.swift */, + 073DE3102C5BB783003B4990 /* AssetTransactionData+Ton.swift */, FA14AE8A2B0788D20066CADF /* AssetTransactionData+SoraSubsquidHistory.swift */, FA7C9A6D2BA007420031580A /* AssetTransactionData+ArrowsquidHistory.swift */, - FA41B6212C64988700D0713A /* AssetTransactionData+FireHistory.swift */, - FA41B62A2C64C5A200D0713A /* AssetTransactionData+VicscanHistory.swift */, - FAD240DA2C64E22A00B389FF /* AssetTransactionData+ZChainHistory.swift */, - FAD240E12C64EA6E00B389FF /* AssetTransactionData+KaiaHistory.swift */, ); path = Wallet; sourceTree = ""; @@ -9717,7 +10809,7 @@ 849244902514EDD900477C1B /* ViewModel */ = { isa = PBXGroup; children = ( - FAF6007D2C48FC2A00E56558 /* AccountScore */, + 0701B8BE2C78F6C300DCD395 /* AccountScore */, FA1D02052BBE71F9005B7071 /* TokenPairsIconViewModel.swift */, 0702B3162970182B003519F5 /* Amount */, FAA013A028DA1328000A5230 /* StakeAmountViewModel.swift */, @@ -9741,6 +10833,14 @@ path = ViewModel; sourceTree = ""; }; + 8493D0DD26FE5D0800A28008 /* Model */ = { + isa = PBXGroup; + children = ( + 8428765E24ADE0BB00D91AD8 /* UserSettings.swift */, + ); + path = Model; + sourceTree = ""; + }; 8493D3E727059B2B00157009 /* Services */ = { isa = PBXGroup; children = ( @@ -9768,19 +10868,44 @@ path = StakingRewardDestinationSetup; sourceTree = ""; }; + 8494D85C25246E7D00614D8F /* ViewModel */ = { + isa = PBXGroup; + children = ( + ); + path = ViewModel; + sourceTree = ""; + }; 8494D86E2525316500614D8F /* Subscan */ = { isa = PBXGroup; children = ( 8494D872252532F600614D8F /* Data */, + 8494D871252532F000614D8F /* Info */, + 8494D86F2525321700614D8F /* SubscanDefinitions.swift */, + 8494D8772525343500614D8F /* SubscanOperationFactory.swift */, + 843461CA26E2590200DCE0CD /* SubscanHistoryOperationFactory.swift */, + 843461CE26E25AD400DCE0CD /* SubscanHistoryItem+Wallet.swift */, ); path = Subscan; sourceTree = ""; }; + 8494D871252532F000614D8F /* Info */ = { + isa = PBXGroup; + children = ( + 84FB1F68252694B600E0242B /* HistoryInfo.swift */, + F4E339622614A03F0028B6B1 /* ExtrinsicsInfo.swift */, + ); + path = Info; + sourceTree = ""; + }; 8494D872252532F600614D8F /* Data */ = { isa = PBXGroup; children = ( + FA2569A0274CE66100875A53 /* SubscanMemoData.swift */, 8494D8792525350000614D8F /* SubscanStatusData.swift */, 8494D87B252537E500614D8F /* SubscanError.swift */, + 84FB1F662526920B00E0242B /* SubscanTransferData.swift */, + 841493DB2604C144000D8D1A /* SubscanRewardData.swift */, + 84F6B6422619A8480038F10D /* SubscanConcreteExtrinsicsData.swift */, 84F6B6472619A87C0038F10D /* ExtrinsicIndexWrapper.swift */, 849ABE852628154900011A2A /* SubscanRawExtrinsicData.swift */, ); @@ -9839,8 +10964,10 @@ 849AFEB826DCCCA900B65924 /* Wallet */ = { isa = PBXGroup; children = ( + 84FAB0662542D06B00319F74 /* WalletContactOperationFactory.swift */, 8418E71F2617602000DCF6C8 /* WalletRemoteHistoryProtocols.swift */, 84FB1F6C2526987D00E0242B /* TransactionHistoryContext.swift */, + 843461CC26E2596E00DCE0CD /* WalletRemoteHistoryFiltering.swift */, FA80391628DD70D7007365E8 /* AccountOperationFactory.swift */, ); path = Wallet; @@ -9864,6 +10991,13 @@ path = ViewModel; sourceTree = ""; }; + 849E2330254AEF9F00B1F6D4 /* InvoiceScan */ = { + isa = PBXGroup; + children = ( + ); + path = InvoiceScan; + sourceTree = ""; + }; 84A2A60826B82B1C000C6C6C /* ValidatorOperationFactory */ = { isa = PBXGroup; children = ( @@ -9960,6 +11094,8 @@ children = ( 844CB56926F9C57D00396E13 /* WalletLocalStorageSubscriber.swift */, 844CB56B26F9C5C900396E13 /* WalletLocalSubscriptionHandler.swift */, + 84CD82AD263C1452001A6F01 /* SubstrateProviderSubscriber.swift */, + 84CD82B2263C30BC001A6F01 /* SubstrateProviderSubscriptionHandler.swift */, 844CB56D26F9CB1500396E13 /* CrowdloanLocalStorageSubscriber.swift */, 844CB56F26F9CB3300396E13 /* CrowdloanLocalSubscriptionHandler.swift */, 84038FEB26FFBA4D00C73F3F /* PriceLocalStorageSubscriber.swift */, @@ -9984,10 +11120,18 @@ FA9278A727C382C600FF7B5B /* MultiassetV2.xcmappingmodel */, FA69A94627CE3476000352A6 /* SubstrateV2Mapping.xcmappingmodel */, FA28A9B129D2E451005AA42E /* MultiassetV9.xcmappingmodel */, + 07EC555A2CD8A3600074132E /* MultiAssetV12.xcmappingmodel */, ); path = MigrationMappings; sourceTree = ""; }; + 84CFF1CA26526C4700DB7CF7 /* Recovered References */ = { + isa = PBXGroup; + children = ( + ); + name = "Recovered References"; + sourceTree = ""; + }; 84CFF1CE26526FBC00DB7CF7 /* StakingBondMore */ = { isa = PBXGroup; children = ( @@ -10053,7 +11197,6 @@ 84D1110D26B931C20016D962 /* ChainModel.swift */, 84D1111026B932480016D962 /* AssetModel.swift */, 84D1111226B932C40016D962 /* ChainNodeModel.swift */, - 845B821A26EF80BC00D25C72 /* MetaAccountModel.swift */, 845B821C26EF80DB00D25C72 /* ChainAccountModel.swift */, 845B821E26EF8E8900D25C72 /* ManagedMetaAccountModel.swift */, ); @@ -10118,6 +11261,7 @@ children = ( FA936BEF2872E35F0059B97A /* TitleSwitchTableViewCellModelFactory.swift */, FA936BF02872E35F0059B97A /* TitleSwitchViewModel.swift */, + FA99423628053C6800D771E5 /* IconWithTitleViewModelFactory.swift */, 84D8F15C24D8178000AF43E9 /* IconWithTitleViewModel.swift */, 84D8F15E24D8179000AF43E9 /* TitleWithSubtitleViewModel.swift */, 84754C9F2513D83E00854599 /* AccountPickerViewModel.swift */, @@ -10126,22 +11270,43 @@ path = ViewModel; sourceTree = ""; }; + 84D97ECD2521CA2100F07405 /* View */ = { + isa = PBXGroup; + children = ( + 8494D85C25246E7D00614D8F /* ViewModel */, + ); + path = View; + sourceTree = ""; + }; 84DA3B1724C8200100B5E27F /* Model */ = { isa = PBXGroup; children = ( + 84DA3B1824C8200E00B5E27F /* ConnectionItem+Default.swift */, 84D8F16E24D8451F00AF43E9 /* CryptoType+ViewModel.swift */, + 84D8F17024D856D300AF43E9 /* SNAddressType+ViewModel.swift */, 843C49E024DFFC9500B71DDA /* AccountImportSource+ViewModel.swift */, 84754C992513871300854599 /* SNAddressType+Codable.swift */, + 84D97EC0251FEE1E00F07405 /* WalletAssetId+Display.swift */, + 84CD356F252620FB0081BC0B /* CryptoType+Extrinsic.swift */, 8460516C25536C4800A1F0B4 /* ExportOption+ViewModel.swift */, 84A259F72555C8C9001E91BC /* CryptoType+Keystore.swift */, ); path = Model; sourceTree = ""; }; + 84DB9E8826409E7200F23DD3 /* View */ = { + isa = PBXGroup; + children = ( + 84DB9E8926409E8200F23DD3 /* StakingRedeemLayout.swift */, + ); + path = View; + sourceTree = ""; + }; 84DB9E8E2640A47500F23DD3 /* ViewModel */ = { isa = PBXGroup; children = ( 84DB9E8F2640A48E00F23DD3 /* StakingRedeemViewModel.swift */, + 84DB9E972640A49E00F23DD3 /* StakingRedeemViewModelFactory.swift */, ); path = ViewModel; sourceTree = ""; @@ -10185,6 +11350,9 @@ 84DED4012666533300A153BB /* CustomCrowdloan */ = { isa = PBXGroup; children = ( + FA256A04274CE7D500875A53 /* Astar */, + FA256A1F274CE7D500875A53 /* CrowdloanAgreementServiceError.swift */, + FA256A1D274CE7D500875A53 /* CrowdloanAgreementServiceProtocol.swift */, FA256A1E274CE7D500875A53 /* CrowdloanBonusServiceProtocol.swift */, FA256A06274CE7D500875A53 /* Moonbeam */, 8444D1352671179000AF6D8C /* Bifrost */, @@ -10240,6 +11408,8 @@ 84EBC54824F660A700459D15 /* Events */ = { isa = PBXGroup; children = ( + 071606C32C7C6C2400C1DF75 /* PricesUpdated.swift */, + 0701B9CC2C78FF7900DCD395 /* AccountScoreSettingsChanged.swift */, FACD42782A5BE7C6009975AA /* RuntimeSnapshotReady.swift */, FACD42792A5BE7C6009975AA /* WalletRemoteSubscriptionWasUpdatedEvent.swift */, FA4B92902844CF750003BCEF /* MetaAccountModelChangedEvent.swift */, @@ -10260,8 +11430,6 @@ FA37AE4C28603C37001DCA96 /* StakingUpdatedEvent.swift */, FAE39AF22A9E1A4F0011A9D6 /* ChainsSetupCompleted.swift */, C65C7F6A2AD82B8D0069D877 /* LogoutEvent.swift */, - FAFB5EDF2C5A11A30015D3DD /* AccountScoreSettingsChanged.swift */, - C6FBA6DD2C72E0FD008B18D9 /* PricesUpdated.swift */, ); path = Events; sourceTree = ""; @@ -10341,6 +11509,7 @@ 8494425D2653301C0016E7BD /* StakingRewardDestinationSetup */, 84EAC2F62642EA05003CC2ED /* StakingRebondConfirmation */, AEE5FB0A264298F3002B8FDC /* StakingRebondSetup */, + 0F353CD57BFACDCEED0B6D07 /* StakingRedeem */, E07E434DE762128EF27B7578 /* StakingUnbondConfirm */, 1DC0AAB0BD0067CC0FDF9B27 /* StakingUnbondSetup */, 3722354DA3C59896C49B5794 /* StakingRewardDetails */, @@ -10428,7 +11597,11 @@ isa = PBXGroup; children = ( 84FB298B2639ABA500BE0FCD /* YourValidatorList.swift */, + 84FB29932639ABD700BE0FCD /* YourValidatorList+SelectionStart.swift */, 84FB29982639AC2300BE0FCD /* YourValidatorList+SelectionConfirm.swift */, + AEA0C8B9268113F800F9666F /* YourValidatorList+RecommendedList.swift */, + AEA0C8BB2681140700F9666F /* YourValidatorList+CustomList.swift */, + AEA0C8BD2681141700F9666F /* YourValidatorList+SelectedList.swift */, ); path = ChangeValidators; sourceTree = ""; @@ -10490,6 +11663,20 @@ path = CreateContact; sourceTree = ""; }; + 8ABF976F131CB662FADD2B1B /* EcosystemOptions */ = { + isa = PBXGroup; + children = ( + 51A2CC33FFE5CFA1CCCC64BB /* EcosystemOptionsProtocols.swift */, + 4CF89A85366996FE0E1053FC /* EcosystemOptionsRouter.swift */, + 7EB7489DB0FFE77F7B7AABE8 /* EcosystemOptionsPresenter.swift */, + A751AAC4AA1E6401E4F43142 /* EcosystemOptionsInteractor.swift */, + 5744A4699B3930EB459972BD /* EcosystemOptionsViewController.swift */, + F2DB48A2C904672E63D78D4D /* EcosystemOptionsViewLayout.swift */, + 9E06ADA1BE2C3A9277A30E1B /* EcosystemOptionsAssembly.swift */, + ); + path = EcosystemOptions; + sourceTree = ""; + }; 8D1ECC1A61E3F7E33FC44649 /* NetworkManagement */ = { isa = PBXGroup; children = ( @@ -10507,20 +11694,14 @@ path = StakingRewardPayouts; sourceTree = ""; }; - 8E7E74939224B5DA444D4AFA /* AccountStatistics */ = { + 900558FC038333522F24E367 /* Frameworks */ = { isa = PBXGroup; children = ( - FA273E5A2C4F679900F9CB13 /* ViewModel */, - 4BF646F59913E95891915BDC /* AccountStatisticsProtocols.swift */, - FDD63BEB84A28855006BE680 /* AccountStatisticsRouter.swift */, - BB86E65E22C0AF7EDD0701A4 /* AccountStatisticsPresenter.swift */, - 0542BF70B1BADBF1459D57FB /* AccountStatisticsInteractor.swift */, - 7C85B1F841C281165D7AACB1 /* AccountStatisticsViewController.swift */, - 7743EA304BC53649D0473225 /* AccountStatisticsViewLayout.swift */, - 62CD1B83902C1B5763476EFF /* AccountStatisticsAssembly.swift */, - FA5032B12C4E58C500075909 /* AccountStatisticsPresentable.swift */, + 120EE82BCC6A905D5590BD45 /* Pods_fearlessAll_fearless.framework */, + FD693FC7740866321DA11AC1 /* Pods_fearlessAll_fearlessIntegrationTests.framework */, + 45889B3DF6A7C6505FFD97AE /* Pods_fearlessTests.framework */, ); - path = AccountStatistics; + name = Frameworks; sourceTree = ""; }; 9439C16432098735E8F4C122 /* LiquidityPoolDetails */ = { @@ -10586,6 +11767,22 @@ path = CreateContact; sourceTree = ""; }; + 9E9B8E7D0CF6D39DD826885F /* TonWebBridge */ = { + isa = PBXGroup; + children = ( + 0715FCD52C65FC3600AA674E /* Models */, + 0715FCD32C65E96000AA674E /* TonWebBridgeHeaderView.swift */, + 5AA1493E216DF3B3616A9EE6 /* TonWebBridgeProtocols.swift */, + 381BD34B5A6E2B1625B2C24C /* TonWebBridgeRouter.swift */, + 4BD26C200A700CCA34980B61 /* TonWebBridgePresenter.swift */, + 014B8F922BD4E7BFB8D1483D /* TonWebBridgeInteractor.swift */, + 9E51A659E2865BD98B6DEF16 /* TonWebBridgeViewController.swift */, + 75D1886C774F9F63C897CAF1 /* TonWebBridgeViewLayout.swift */, + 0D47F5B181BB5778DDEF1125 /* TonWebBridgeAssembly.swift */, + ); + path = TonWebBridge; + sourceTree = ""; + }; A17E1D8ADC21C651CE346F73 /* CrowdloanContributionConfirm */ = { isa = PBXGroup; children = ( @@ -10602,6 +11799,14 @@ path = AccountConfirm; sourceTree = ""; }; + A53888D7C5E76ACD934B51DC /* ConfirmTransfer */ = { + isa = PBXGroup; + children = ( + 9E29D11C365629B959F44DFA /* ConfirmTransferTests.swift */, + ); + path = ConfirmTransfer; + sourceTree = ""; + }; A800B16846A754FEDAF801EC /* AssetSelection */ = { isa = PBXGroup; children = ( @@ -10645,6 +11850,53 @@ path = StakingUnbondConfirm; sourceTree = ""; }; + AD55C5CD2FE0946A08730F0A /* DappBrowser */ = { + isa = PBXGroup; + children = ( + 07D0BD3F2C6F0E90001ECD58 /* Cells */, + 07D0BD3C2C6F0C8D001ECD58 /* View */, + EFC41ED0064460B3048E7D14 /* DappBrowserProtocols.swift */, + 9FBC05405B64AD114FB89FFE /* DappBrowserRouter.swift */, + 339C0DAFDB2C99655C2D64E4 /* DappBrowserPresenter.swift */, + 07230EAC2C735AA200B92466 /* DappBrowserViewModelFactory.swift */, + AB8CC373A5E9E1C11181A4B9 /* DappBrowserInteractor.swift */, + 3C3533520260EDD83C2F26B1 /* DappBrowserViewController.swift */, + 07230EAE2C73608900B92466 /* DappBrowserViewModel.swift */, + 32F4A2C14730740C6D319C5A /* DappBrowserAssembly.swift */, + ); + path = DappBrowser; + sourceTree = ""; + }; + AE1000EF2667981A004753B7 /* ChangeTargets */ = { + isa = PBXGroup; + children = ( + AE1000F126679886004753B7 /* ChangeTargetsRecommendationWireframe.swift */, + ); + path = ChangeTargets; + sourceTree = ""; + }; + AE1000F026679824004753B7 /* InitiatedBonding */ = { + isa = PBXGroup; + children = ( + AE1000F326679946004753B7 /* InitiatedBondingRecommendationWireframe.swift */, + ); + path = InitiatedBonding; + sourceTree = ""; + }; + AE187612EF3DE462ED577B3E /* FeatureToggleList */ = { + isa = PBXGroup; + children = ( + BE7B9BC51F6B13337450E3DC /* FeatureToggleListProtocols.swift */, + B4EE06DBE885C0467D8929FE /* FeatureToggleListRouter.swift */, + CAA8A8A8C3822633813C71F2 /* FeatureToggleListPresenter.swift */, + 769372B10E8D3C2BF7304FC3 /* FeatureToggleListInteractor.swift */, + 97A985C8D05C0BAFEEFADFE7 /* FeatureToggleListViewController.swift */, + 2D09EBD67803AB57DF0F7636 /* FeatureToggleListViewLayout.swift */, + AF4A966103685CC10F99B63B /* FeatureToggleListAssembly.swift */, + ); + path = FeatureToggleList; + sourceTree = ""; + }; AE2C845B25EE829E00986716 /* ViewModel */ = { isa = PBXGroup; children = ( @@ -10852,6 +12104,7 @@ isa = PBXGroup; children = ( AEA0C8AD267B818900F9666F /* SelectedValidatorListViewLayout.swift */, + AEA0C8AF267B82BA00F9666F /* SelectedValidatorListHeaderView.swift */, AEA0C8B7267C905500F9666F /* SelectedValidatorCell.swift */, ); path = View; @@ -10878,6 +12131,8 @@ isa = PBXGroup; children = ( AEA0C8A5267B6B2600F9666F /* SelectedValidatorListWireframe.swift */, + AEA0C8C5268131C500F9666F /* InitiatedBondingSelectedValidatorsListWireframe.swift */, + AEA0C8C7268131DD00F9666F /* ChangeTargetsSelectedValidatorsListWireframe.swift */, ); path = Wireframe; sourceTree = ""; @@ -11159,14 +12414,12 @@ path = ConfirmSelectValidators; sourceTree = ""; }; - C278E98FD96B1805C96BD127 /* Frameworks */ = { + C603E80F28583C0500007B72 /* Relaychain */ = { isa = PBXGroup; children = ( - 6A28799A82C0EC2F8ABDE831 /* Pods_fearlessAll_fearless.framework */, - C323602A21644DCB1B2EEFF6 /* Pods_fearlessAll_fearlessIntegrationTests.framework */, - 59FDAE57EE0A97872E76E6CE /* Pods_fearlessTests.framework */, + C603E81028583C2A00007B72 /* StakingMainRelaychainStrategy.swift */, ); - name = Frameworks; + path = Relaychain; sourceTree = ""; }; C6264C262799A54400FCA0DB /* WalletDetails */ = { @@ -11268,6 +12521,7 @@ C63CB3232851C59A0071AF26 /* Flow */ = { isa = PBXGroup; children = ( + C603E80F28583C0500007B72 /* Relaychain */, C63CB3242851C5C90071AF26 /* StakingMainFlow.swift */, ); path = Flow; @@ -11367,64 +12621,6 @@ path = Model; sourceTree = ""; }; - C6FBA6E52C743BDD008B18D9 /* okx-dex-aggregator */ = { - isa = PBXGroup; - children = ( - C6FBA6FC2C743D21008B18D9 /* OKXDexAggregatorService.swift */, - C6FBA6E82C743C31008B18D9 /* Network */, - ); - path = "okx-dex-aggregator"; - sourceTree = ""; - }; - C6FBA6E82C743C31008B18D9 /* Network */ = { - isa = PBXGroup; - children = ( - C6FBA6FE2C743D45008B18D9 /* OKXDexRequestSigner.swift */, - C6FBA6F02C743C88008B18D9 /* Response */, - C6FBA6EF2C743C82008B18D9 /* Request */, - ); - path = Network; - sourceTree = ""; - }; - C6FBA6EF2C743C82008B18D9 /* Request */ = { - isa = PBXGroup; - children = ( - C6FBA6F12C743C96008B18D9 /* Parameters */, - ); - path = Request; - sourceTree = ""; - }; - C6FBA6F02C743C88008B18D9 /* Response */ = { - isa = PBXGroup; - children = ( - C6FBA7122C743D5E008B18D9 /* OKXApproveTransaction.swift */, - C6FBA70F2C743D5E008B18D9 /* OKXDexProtocol.swift */, - C6FBA70D2C743D5D008B18D9 /* OKXDexQuote.swift */, - C6FBA7102C743D5E008B18D9 /* OKXDexRouter.swift */, - C6FBA7112C743D5E008B18D9 /* OKXDexSubrouter.swift */, - C6FBA7132C743D5F008B18D9 /* OKXLiquiditySource.swift */, - C6FBA7142C743D5F008B18D9 /* OKXQuote.swift */, - C6FBA70A2C743D5D008B18D9 /* OKXResponse.swift */, - C6FBA70C2C743D5D008B18D9 /* OKXSupportedChain.swift */, - C6FBA70E2C743D5E008B18D9 /* OKXSwap.swift */, - C6FBA7152C743D5F008B18D9 /* OKXSwapTransaction.swift */, - C6FBA70B2C743D5D008B18D9 /* OKXToken.swift */, - ); - path = Response; - sourceTree = ""; - }; - C6FBA6F12C743C96008B18D9 /* Parameters */ = { - isa = PBXGroup; - children = ( - C6FBA7012C743D51008B18D9 /* OKXDexAllTokensRequestParameters.swift */, - C6FBA7022C743D51008B18D9 /* OKXDexApproveRequestParameters.swift */, - C6FBA7032C743D52008B18D9 /* OKXDexLiquiditySourceRequestParameters.swift */, - C6FBA7042C743D52008B18D9 /* OKXDexQuotesRequestParameters.swift */, - C6FBA7002C743D51008B18D9 /* OKXDexSwapRequestParameters.swift */, - ); - path = Parameters; - sourceTree = ""; - }; C7AEDB8341B78EC46F6F98DC /* UsernameSetup */ = { isa = PBXGroup; children = ( @@ -11524,13 +12720,6 @@ path = ReferralCrowdloan; sourceTree = ""; }; - D8D6C7AD682F80950E731020 /* MultichainAssetSelection */ = { - isa = PBXGroup; - children = ( - ); - path = MultichainAssetSelection; - sourceTree = ""; - }; D8F784121F6FDD3BCB25424B /* LiquidityPoolRemoveLiquidity */ = { isa = PBXGroup; children = ( @@ -11567,6 +12756,13 @@ children = ( FA3430F328508BE5002B5975 /* Flow */, 84DB9E8E2640A47500F23DD3 /* ViewModel */, + 84DB9E8826409E7200F23DD3 /* View */, + 2E4B0600AFFB96A75CF98755 /* StakingRedeemProtocols.swift */, + 3A93673EEA8F71E8DDA84557 /* StakingRedeemWireframe.swift */, + BAB2478DE3AF0885A3ED7ED8 /* StakingRedeemPresenter.swift */, + 560C48D7A83F51F001622D71 /* StakingRedeemInteractor.swift */, + DB7F5F9B54BE4234C5682BDE /* StakingRedeemViewController.swift */, + 8821119C96944A0E3526E93A /* StakingRedeemViewFactory.swift */, ); path = StakingRedeem; sourceTree = ""; @@ -11613,6 +12809,7 @@ E08A61668B679B7F2B25AF0E /* AddCustomNode */ = { isa = PBXGroup; children = ( + FAE5F62D27B2383200F13206 /* ViewModel */, D06A0B252CCD6CAE8C5EDC16 /* AddCustomNodeProtocols.swift */, B0968457BE5556B46D789C30 /* AddCustomNodeWireframe.swift */, D5B7937620F4339EE948EC25 /* AddCustomNodePresenter.swift */, @@ -11671,6 +12868,22 @@ path = WalletsManagment; sourceTree = ""; }; + EA050F0D10984D982C31B98F /* ConnectedAccounts */ = { + isa = PBXGroup; + children = ( + 0728BD142C984D86002369FD /* View */, + 6ED240B5595B623CE5E0941C /* ConnectedAccountsProtocols.swift */, + 153C062150631BF45B59CB3F /* ConnectedAccountsRouter.swift */, + D21069CCE65307334B89FD09 /* ConnectedAccountsPresenter.swift */, + 0728BD192C99474B002369FD /* ConnectedAccountsViewModelFactory.swift */, + 2445A50C4FDB87374486CDDA /* ConnectedAccountsInteractor.swift */, + 6C3011E6F226BFC9BE9C5475 /* ConnectedAccountsViewController.swift */, + E9B71CD26CEE6C228B8AE392 /* ConnectedAccountsViewLayout.swift */, + A40B8FB36589FB4D3DB1A5B6 /* ConnectedAccountsAssembly.swift */, + ); + path = ConnectedAccounts; + sourceTree = ""; + }; EE3CBEFADE55F44DE05DCEF2 /* LiquidityPoolSupply */ = { isa = PBXGroup; children = ( @@ -11718,6 +12931,14 @@ path = LiquidityPoolRemoveLiquidityConfirm; sourceTree = ""; }; + F400A7C0260CE1560061D576 /* Model */ = { + isa = PBXGroup; + children = ( + F400A7C1260CE1670061D576 /* StakingRewardStatus.swift */, + ); + path = Model; + sourceTree = ""; + }; F406B0E426299E25004FDCCC /* ErrorView */ = { isa = PBXGroup; children = ( @@ -11888,6 +13109,7 @@ F4433D5E26C166470002A91E /* AnalyticsValidatorsView.swift */, F4433D6626C1668E0002A91E /* AnalyticsValidatorsHeaderView.swift */, F4433D6E26C1696A0002A91E /* AnalyticsValidatorsCell.swift */, + F471897A26C29A78006487AD /* AnalyticsValidatorsPageSelector.swift */, ); path = View; sourceTree = ""; @@ -12109,8 +13331,13 @@ F4DCAE4626207EF900CCA6BF /* PayoutRewardsServiceProtocol.swift */, F4DCAE4E2620819000CCA6BF /* PayoutRewardsService.swift */, F44CD8F326242825005DDF23 /* PayoutRewardsService+Fetch.swift */, + 849ABE62262785F200011A2A /* ControllerMapper.swift */, 849ABE6726278A4100011A2A /* NominateMapper.swift */, 849ABE6C2627949E00011A2A /* BatchMapper.swift */, + 849ABE7126280F3800011A2A /* ControllersReducer.swift */, + 849ABE762628103200011A2A /* ControllersListReducer.swift */, + 849ABE7B2628116F00011A2A /* NominationsReducer.swift */, + 849ABE80262811CF00011A2A /* NominationsListReducer.swift */, 847119D4262EF95A00716580 /* PayoutInfoFactoryProtocol.swift */, 847119EA262EFF3800716580 /* ValidatorPayoutInfoFactory.swift */, 8490386A262E22DC0016D541 /* NominatorPayoutInfoFactory.swift */, @@ -12334,6 +13561,7 @@ isa = PBXGroup; children = ( FA25698D274CE65100875A53 /* HTTPRequest.swift */, + FA25698E274CE65100875A53 /* DashcaseJSONEncoder.swift */, FA25698F274CE65100875A53 /* AnyCodingKey.swift */, FA256990274CE65100875A53 /* Builder */, ); @@ -12367,20 +13595,53 @@ path = BottomSheet; sourceTree = ""; }; + FA256A04274CE7D500875A53 /* Astar */ = { + isa = PBXGroup; + children = ( + FA256A05274CE7D500875A53 /* AstarBonusService.swift */, + ); + path = Astar; + sourceTree = ""; + }; FA256A06274CE7D500875A53 /* Moonbeam */ = { isa = PBXGroup; children = ( + FA256A08274CE7D500875A53 /* Models */, + FA256A13274CE7D500875A53 /* MoonbeamHTTPHeadersBuilder.swift */, + FA256A14274CE7D500875A53 /* Requests */, + FA256A1B274CE7D500875A53 /* MoonbeamJSONDecoder.swift */, + FA256A1C274CE7D500875A53 /* MoonbeamJSONEncoder.swift */, ); path = Moonbeam; sourceTree = ""; }; - FA273E5A2C4F679900F9CB13 /* ViewModel */ = { + FA256A08274CE7D500875A53 /* Models */ = { isa = PBXGroup; children = ( - FA273E5B2C4F67A900F9CB13 /* AccountStatisticsViewModelFactory.swift */, - FA273E5D2C4F680500F9CB13 /* AccountStatisticsViewModel.swift */, + FA256A09274CE7D500875A53 /* MoonbeamMakeSignatureInfo.swift */, + FA256A0A274CE7D500875A53 /* MoonbeamAgreeRemarkInfo.swift */, + FA256A0B274CE7D500875A53 /* MoonbeamGuidinfoInfo.swift */, + FA256A0C274CE7D500875A53 /* MoonbeamAgreeRemarkData.swift */, + FA256A0D274CE7D500875A53 /* MoonbeamMakeSignatureData.swift */, + FA256A0E274CE7D500875A53 /* MoonbeamCheckRemarkData.swift */, + FA256A0F274CE7D500875A53 /* MoonbeamVerifyRemarkData.swift */, + FA256A10274CE7D500875A53 /* MoonbeamVerifyRemarkInfo.swift */, + FA256A11274CE7D500875A53 /* MoonbeamCheckRemarkInfo.swift */, ); - path = ViewModel; + path = Models; + sourceTree = ""; + }; + FA256A14274CE7D500875A53 /* Requests */ = { + isa = PBXGroup; + children = ( + FA256A15274CE7D500875A53 /* MoonbeamMakeSignatureRequest.swift */, + FA256A16274CE7D500875A53 /* MoonbeamVerifyRemarkRequest.swift */, + FA256A17274CE7D500875A53 /* MoonbeamAgreeRemarkRequest.swift */, + FA256A18274CE7D500875A53 /* MoonbeamCheckRemarkRequest.swift */, + FA256A19274CE7D500875A53 /* MoonbeamGuidInfoRequest.swift */, + FA256A1A274CE7D500875A53 /* MoonbeamHealthRequest.swift */, + ); + path = Requests; sourceTree = ""; }; FA286AF62A3043DB008BD527 /* CrossChainConfirmation */ = { @@ -12429,7 +13690,7 @@ FA2DF9962A8C97170047F440 /* NFT */ = { isa = PBXGroup; children = ( - FA93D1F62C61E52C006B494E /* BlockExplorerApiKey.swift */, + 0701B9B42C78FD2000DCD395 /* BlockExplorerApiKey.swift */, FA6261F32AC2C7A8005D3D95 /* NFTOperationFactoryProtocol.swift */, FA584C7B2AB3071E00F6F020 /* AlchemyNFTOperationFactory.swift */, ); @@ -12628,6 +13889,7 @@ FA2FC82028B380C500CC0A42 /* StakingPoolRoles.swift */, FA2FC82128B380C500CC0A42 /* StakingPoolMember.swift */, FA2FC82228B380C500CC0A42 /* StakingPool.swift */, + FA80391428DC2DA2007365E8 /* StakingPoolPalletID.swift */, ); path = StakingPools; sourceTree = ""; @@ -12693,6 +13955,17 @@ path = ResponseDecoders; sourceTree = ""; }; + FA3067392B6257F6006A0BA5 /* Network */ = { + isa = PBXGroup; + children = ( + FA7336BD2A0E3B7F0096A291 /* NetworkClientFactory.swift */, + FA7336BE2A0E3B7F0096A291 /* RequestConfiguratorFactory.swift */, + FA7336BF2A0E3B7F0096A291 /* RequestSignerFactory.swift */, + FA7336C02A0E3B7F0096A291 /* ResponseDecodersFactory.swift */, + ); + path = Network; + sourceTree = ""; + }; FA30673A2B625806006A0BA5 /* Storage */ = { isa = PBXGroup; children = ( @@ -12999,6 +14272,8 @@ FA38C9A227606FDD005C5577 /* ApplicationLayer */ = { isa = PBXGroup; children = ( + 0778A12C2C58D0E1008A1254 /* Ton */, + 07A949852C47C38600613B9D /* ServiceAssembly */, FA22228B2BD237850031DE04 /* Pricing */, FA34EE8D2B98710C0042E73E /* Models */, FA34EE8A2B9870FE0042E73E /* ComponentFactories */, @@ -13017,8 +14292,11 @@ FA38C9A32760700B005C5577 /* Services */ = { isa = PBXGroup; children = ( - C6FBA6E52C743BDD008B18D9 /* okx-dex-aggregator */, - FAD5FF232C463BEE003201F5 /* AccountStatistics */, + 071606CD2C7CB8FE00C1DF75 /* FeatureToggleService */, + 0701B8CD2C78F71800DCD395 /* AccountStatistics */, + 0701B8C52C78F71800DCD395 /* Models */, + 0701B8E52C78F71800DCD395 /* okx-dex-aggregator */, + 07C438D52C638AE400475B14 /* TonConnect */, FA09AD332C37AB9400BE0B9C /* TransactionObserver */, FA34EE902B98711F0042E73E /* CrowdloanService.swift */, FA34EE912B9871200042E73E /* Onboarding */, @@ -13037,14 +14315,13 @@ path = Services; sourceTree = ""; }; - FA38C9C927630595005C5577 /* ViewModels */ = { + FA38C9C927630595005C5577 /* Models */ = { isa = PBXGroup; children = ( - FA38C9CA276305A3005C5577 /* WalletSendConfirmViewState.swift */, FA38C9CC276305B6005C5577 /* WalletSendConfirmViewModel.swift */, FA38C9CE27634A18005C5577 /* WalletSendConfirmViewModelFactory.swift */, ); - path = ViewModels; + path = Models; sourceTree = ""; }; FA3F5B0D281A650300BEF03B /* Flow */ = { @@ -13077,48 +14354,6 @@ path = Parachain; sourceTree = ""; }; - FA41B61E2C64951300D0713A /* 5ire */ = { - isa = PBXGroup; - children = ( - FA41B61F2C6495EE00D0713A /* 5ireHistoryResponse.swift */, - ); - path = 5ire; - sourceTree = ""; - }; - FA41B6272C64C14500D0713A /* Viscan */ = { - isa = PBXGroup; - children = ( - FA41B6282C64C15000D0713A /* VicscanHistoryResponse.swift */, - ); - path = Viscan; - sourceTree = ""; - }; - FA4B098C2C4674C9001B73F9 /* Request */ = { - isa = PBXGroup; - children = ( - FAD5FF2D2C464717003201F5 /* NomisAccountStatisticsRequest.swift */, - ); - path = Request; - sourceTree = ""; - }; - FA4B75AB2C6F3233001B954F /* ChainSelection */ = { - isa = PBXGroup; - children = ( - FA4B75B12C6F3270001B954F /* MultichainChainFetching.swift */, - FA4B75B32C6F333A001B954F /* OKXMultichainChainFetching.swift */, - ); - path = ChainSelection; - sourceTree = ""; - }; - FA4B75AC2C6F325E001B954F /* AssetFetching */ = { - isa = PBXGroup; - children = ( - FA4B75AD2C6F325E001B954F /* MultichainAssetFetching.swift */, - FA4B75AE2C6F325E001B954F /* OKXMultichainAssetSelection.swift */, - ); - path = AssetFetching; - sourceTree = ""; - }; FA4B929C2844D0C80003BCEF /* SyntaxSugar */ = { isa = PBXGroup; children = ( @@ -13172,21 +14407,22 @@ FA5137B329AC76EB00560EBA /* Main */ = { isa = PBXGroup; children = ( + 0701B8A42C78F5DB00DCD395 /* BlockscoutHistoryOperationFactory.swift */, + 0701B8A72C78F5DB00DCD395 /* FireHistoryOperationFactory.swift */, + 0701B8A82C78F5DB00DCD395 /* KaiaHistoryOperationFactory.swift */, + 0701B8A52C78F5DB00DCD395 /* ViscanHistoryOperationFactory.swift */, + 0701B8A62C78F5DB00DCD395 /* ZChainHistoryOperationFactory.swift */, 07BF3D932B3D873F0046ABF4 /* OklinkHistoryOperationFactory.swift */, FA5137B429AC76EB00560EBA /* SubqueryHistoryOperationFactory.swift */, FA5137B529AC76EB00560EBA /* GiantsquidHistoryOperationFactory.swift */, FA5137B629AC76EB00560EBA /* SubsquidHistoryOperationFactory.swift */, FA5137B729AC76EB00560EBA /* HistoryOperationFactory.swift */, - 07BF3D9E2B3D98850046ABF4 /* BlockscoutHistoryOperationFactory.swift */, + 073DE30B2C5B99D6003B4990 /* TonHistoryOperationFactory.swift */, FA7336FC2A132F740096A291 /* AlchemyHistoryOperationFactory.swift */, FA9A8F012A6F91BA008FA99F /* EtherscanHistoryOperationFactory.swift */, FAE5858E2B0764EC00240FE1 /* SoraSubsquidHistoryOperationFactory.swift */, FA8800532B2C5D91000AE5EB /* ReefSubsquidHistoryOperationFactory.swift */, FA7C9A6B2BA004E80031580A /* ArrowsquidHistoryOperationFactory.swift */, - FA41B61C2C64856D00D0713A /* FireHistoryOperationFactory.swift */, - FA41B6252C64BE6800D0713A /* ViscanHistoryOperationFactory.swift */, - FAD240D52C64D3D100B389FF /* ZChainHistoryOperationFactory.swift */, - FAD240DF2C64EA1D00B389FF /* KaiaHistoryOperationFactory.swift */, ); path = Main; sourceTree = ""; @@ -13349,6 +14585,7 @@ FA6C175B29935DC700A55254 /* History */ = { isa = PBXGroup; children = ( + 073DE30D2C5BA34A003B4990 /* Models */, FAFFAE3229AC84180074AF1F /* Staking */, FA5137B329AC76EB00560EBA /* Main */, ); @@ -13482,9 +14719,18 @@ FA7336BC2A0E3B7F0096A291 /* ComponentFactories */ = { isa = PBXGroup; children = ( - FA30673A2B625806006A0BA5 /* Storage */, + FA30673A2B625806006A0BA5 /* Storage */, + FA3067392B6257F6006A0BA5 /* Network */, + ); + path = ComponentFactories; + sourceTree = ""; + }; + FA7336C52A0E3B870096A291 /* Network */ = { + isa = PBXGroup; + children = ( + 0701B9B02C78FB5600DCD395 /* NetworkRequestUrlParameters.swift */, ); - path = ComponentFactories; + path = Network; sourceTree = ""; }; FA7741D32B6A350200358315 /* StakingRewards */ = { @@ -13589,7 +14835,6 @@ C6267B8028BDF6A5001E31BF /* ChainAssetList */, 2C42012908B4F046FC9BB712 /* WalletChainAccountDashboard */, FA6DB7BB2757C9AF00233FBA /* ChainAccount */, - 64D18A46DA9DBF23A06F760C /* WalletSendConfirm */, 5B4415B6DC23A48F6E84B1C2 /* WalletTransactionHistory */, 98D53F0D0FA4CBD6693747C1 /* WalletTransactionDetails */, ); @@ -13890,11 +15135,13 @@ path = Relaychain; sourceTree = ""; }; - FA99423828053C8600D771E5 /* SelectExportAccount */ = { + FA99426E2805524200D771E5 /* GetBalanceProvider */ = { isa = PBXGroup; children = ( + FA99426F2805524200D771E5 /* BalanceBuilder.swift */, + FA9942702805524200D771E5 /* GetBalanceProvider.swift */, ); - path = SelectExportAccount; + path = GetBalanceProvider; sourceTree = ""; }; FA99C92B283B4A9F007B1F83 /* RelaychainInitiated */ = { @@ -13968,10 +15215,12 @@ FA9A8F282A725AE9008FA99F /* Balance */ = { isa = PBXGroup; children = ( + 07A949822C46600200613B9D /* AccountInfoRemoteService */, FAD0678C2C2042F30050291F /* RemoteSubscription */, FA34EE992B98712D0042E73E /* BalanceLocksFetching.swift */, FA9A8F292A725AFC008FA99F /* AccountInfo */, 07E346D2288E614C00A8FAEC /* WalletBalanceSubscription */, + FA99426E2805524200D771E5 /* GetBalanceProvider */, ); path = Balance; sourceTree = ""; @@ -13979,7 +15228,6 @@ FA9A8F292A725AFC008FA99F /* AccountInfo */ = { isa = PBXGroup; children = ( - 070CDD6C2ACAACB900F3F20A /* EthereumRemoteBalanceFetching.swift */, C65A6591288E5CF400679D65 /* AccountInfoFetching.swift */, FA9A8F2A2A725B30008FA99F /* SubstrateAccountInfoFetching.swift */, ); @@ -14291,9 +15539,9 @@ FAAB998A27A7C76100CD1A3B /* CoreComponents */ = { isa = PBXGroup; children = ( - FAEFA6D32C6DCF6500095C07 /* Network */, FA3067292B6246BD006A0BA5 /* Storage */, FAFB47D52ABD588D0008F8CA /* Repository */, + FA7336C52A0E3B870096A291 /* Network */, ); path = CoreComponents; sourceTree = ""; @@ -14434,23 +15682,6 @@ path = AssetsPallet; sourceTree = ""; }; - FAB90CE72C6F582C00D13804 /* View */ = { - isa = PBXGroup; - children = ( - FAB90CE82C6F584000D13804 /* ChainSelectionCollectionCell.swift */, - ); - path = View; - sourceTree = ""; - }; - FAB90CEB2C6F5B2100D13804 /* ViewModel */ = { - isa = PBXGroup; - children = ( - FAB90CEC2C6F5B2A00D13804 /* ChainSelectionCollectionCellModel.swift */, - FAB90CEE2C6F5B4F00D13804 /* MultichainAssetSelectionViewModelFactory.swift */, - ); - path = ViewModel; - sourceTree = ""; - }; FABA162E2B0C9510001AF2F0 /* NetworkManagment */ = { isa = PBXGroup; children = ( @@ -14478,33 +15709,16 @@ path = RuntimeCall; sourceTree = ""; }; - FAC0BBB3291D0EAF00E6F106 /* Send */ = { + FAC0BBB4291D0EAF00E6F106 /* Models */ = { isa = PBXGroup; children = ( - FAC0BBB4291D0EAF00E6F106 /* ViewModel */, - FAC0BBB9291D0EAF00E6F106 /* SendDependencyContainer.swift */, - FAC0BBBA291D0EAF00E6F106 /* SendPresenter.swift */, - FAC0BBBB291D0EAF00E6F106 /* SendProtocols.swift */, FAC0BBBC291D0EAF00E6F106 /* SendFlow.swift */, - FAC0BBBD291D0EAF00E6F106 /* SendViewLayout.swift */, - FAC0BBBE291D0EAF00E6F106 /* SendAssembly.swift */, - FAC0BBBF291D0EAF00E6F106 /* SendViewController.swift */, - FAC0BBC0291D0EAF00E6F106 /* SendRouter.swift */, - FAC0BBC1291D0EAF00E6F106 /* Validators */, - FAC0BBC3291D0EAF00E6F106 /* SendInteractor.swift */, - ); - path = Send; - sourceTree = ""; - }; - FAC0BBB4291D0EAF00E6F106 /* ViewModel */ = { - isa = PBXGroup; - children = ( FAC0BBB5291D0EAF00E6F106 /* SendViewModelFactory.swift */, FAC0BBB6291D0EAF00E6F106 /* TipViewModel.swift */, FAC0BBB7291D0EAF00E6F106 /* RecipientViewModel.swift */, FAC0BBB8291D0EAF00E6F106 /* SelectNetworkViewModel.swift */, ); - path = ViewModel; + path = Models; sourceTree = ""; }; FAC0BBC1291D0EAF00E6F106 /* Validators */ = { @@ -14555,6 +15769,14 @@ path = Localization; sourceTree = ""; }; + FAC6CDA52BA814020013A17E /* AccountList */ = { + isa = PBXGroup; + children = ( + FAC6CDA62BA814020013A17E /* BalanceContext.swift */, + ); + path = AccountList; + sourceTree = ""; + }; FAC842347BD44065AAC00D29 /* SelectMarket */ = { isa = PBXGroup; children = ( @@ -14613,6 +15835,8 @@ FACD42912A5BE811009975AA /* SingleToMultiassetMigrationPolicy.swift */, FACD42922A5BE811009975AA /* MultiassetV2MigrationPolicy.swift */, FACD42932A5BE811009975AA /* UserStorageVersion.swift */, + 07CA72C42CD8AD0100EF5279 /* CDMetaAccountMigrationPolicy.swift */, + 07CA72C22CD8A63F00EF5279 /* CDChainAccountMigrationPolicyV12.swift */, ); path = UserStorage; sourceTree = ""; @@ -14629,7 +15853,6 @@ isa = PBXGroup; children = ( FAD0678E2C2042F30050291F /* Requests.swift */, - FAD0678F2C2042F30050291F /* AccountInfoRemoteService.swift */, ); path = RemoteSubscription; sourceTree = ""; @@ -14677,22 +15900,6 @@ path = TableViews; sourceTree = ""; }; - FAD240D72C64D3EF00B389FF /* ZChain */ = { - isa = PBXGroup; - children = ( - FAD240D82C64D3FF00B389FF /* ZChainHistoryResponse.swift */, - ); - path = ZChain; - sourceTree = ""; - }; - FAD240DC2C64E96F00B389FF /* Kaia */ = { - isa = PBXGroup; - children = ( - FAD240DD2C64E97900B389FF /* KaiaHistoryResponse.swift */, - ); - path = Kaia; - sourceTree = ""; - }; FAD4289B2A865635001D6A16 /* BackupRiskWarnings */ = { isa = PBXGroup; children = ( @@ -14859,26 +16066,6 @@ path = BackupWalletImported; sourceTree = ""; }; - FAD5FF232C463BEE003201F5 /* AccountStatistics */ = { - isa = PBXGroup; - children = ( - FAD5FF2C2C464705003201F5 /* Nomis */, - FAD5FF242C463C07003201F5 /* AccountStatisticsFetching.swift */, - ); - path = AccountStatistics; - sourceTree = ""; - }; - FAD5FF2C2C464705003201F5 /* Nomis */ = { - isa = PBXGroup; - children = ( - FA4B098C2C4674C9001B73F9 /* Request */, - FAD5FF2A2C46464B003201F5 /* NomisAccountStatisticsFetcher.swift */, - FA4B098D2C47804F001B73F9 /* NomisRequestSigner.swift */, - FA236A402C4FA0A4009330F2 /* NomisJSONDecoder.swift */, - ); - path = Nomis; - sourceTree = ""; - }; FAD646BF284DD2B2007CCB92 /* Flow */ = { isa = PBXGroup; children = ( @@ -14965,6 +16152,7 @@ FADBA5ED2B5FD04F00CFCF30 /* ViewModel */ = { isa = PBXGroup; children = ( + FADBA5EE2B5FD05C00CFCF30 /* ClaimCrowdloanRewardsViewModel.swift */, FADBA5F02B5FD0C200CFCF30 /* ClaimCrowdloanRewardViewModelFactory.swift */, ); path = ViewModel; @@ -15025,6 +16213,16 @@ path = ViewModel; sourceTree = ""; }; + FAE5F62D27B2383200F13206 /* ViewModel */ = { + isa = PBXGroup; + children = ( + FAE5F62E27B2383E00F13206 /* AddCustomNodeViewState.swift */, + FAE5F63027B2384F00F13206 /* AddCustomNodeViewModelFactory.swift */, + FA99549627B255AB00CCC94B /* AddCustomNodeViewModel.swift */, + ); + path = ViewModel; + sourceTree = ""; + }; FAE9EB99288AB72D009390B6 /* Flow */ = { isa = PBXGroup; children = ( @@ -15064,14 +16262,6 @@ path = Adapter; sourceTree = ""; }; - FAEFA6D32C6DCF6500095C07 /* Network */ = { - isa = PBXGroup; - children = ( - FAEFA6D42C6DCF7C00095C07 /* NetworkRequestUrlParameters.swift */, - ); - path = Network; - sourceTree = ""; - }; FAF5E9C827E46D3E005A3448 /* Codable */ = { isa = PBXGroup; children = ( @@ -15121,22 +16311,6 @@ path = ViewModel; sourceTree = ""; }; - FAF600782C48F11200E56558 /* AccountScore */ = { - isa = PBXGroup; - children = ( - FAF600762C48F08B00E56558 /* AccountScoreView.swift */, - ); - path = AccountScore; - sourceTree = ""; - }; - FAF6007D2C48FC2A00E56558 /* AccountScore */ = { - isa = PBXGroup; - children = ( - FAF600792C48F12000E56558 /* AccountScoreViewModel.swift */, - ); - path = AccountScore; - sourceTree = ""; - }; FAF96B562B636FBC00E299C1 /* SystemPallet */ = { isa = PBXGroup; children = ( @@ -15179,7 +16353,7 @@ FAFB47D52ABD588D0008F8CA /* Repository */ = { isa = PBXGroup; children = ( - FAFB47D62ABD589C0008F8CA /* EthereumBalanceRepositoryCacheWrapper.swift */, + FAFB47D62ABD589C0008F8CA /* BalanceRepositoryCacheWrapper.swift */, ); path = Repository; sourceTree = ""; @@ -15206,10 +16380,10 @@ FAFFAE4129AC84B10074AF1F /* BlockExplorer */ = { isa = PBXGroup; children = ( - FAD240DC2C64E96F00B389FF /* Kaia */, - FAD240D72C64D3EF00B389FF /* ZChain */, - FA41B6272C64C14500D0713A /* Viscan */, - FA41B61E2C64951300D0713A /* 5ire */, + 0701B9BB2C78FD8800DCD395 /* 5ire */, + 0701B9B72C78FD8800DCD395 /* Kaia */, + 0701B9BD2C78FD8800DCD395 /* Viscan */, + 0701B9B92C78FD8800DCD395 /* ZChain */, FA9A8F032A6FAB69008FA99F /* Etherscan */, FAFFAE4229AC84B10074AF1F /* RewardOrSlashData.swift */, FAFFAE4329AC84B10074AF1F /* Subquery */, @@ -15308,6 +16482,14 @@ path = StakingPoolInfo; sourceTree = ""; }; + FBD5D2C2BD7B0632C232E4CF /* Transfer */ = { + isa = PBXGroup; + children = ( + 7525F0A27140F3C058CA5B0C /* TransferTests.swift */, + ); + path = Transfer; + sourceTree = ""; + }; FDE858484C32A17DA1E55997 /* WalletHistoryFilter */ = { isa = PBXGroup; children = ( @@ -15331,11 +16513,11 @@ isa = PBXNativeTarget; buildConfigurationList = 8438E1D624BFAAD2001BDB13 /* Build configuration list for PBXNativeTarget "fearlessIntegrationTests" */; buildPhases = ( - 89AD8B440B53D55B8CAA828D /* [CP] Check Pods Manifest.lock */, + 73654FAB1D050C79A2FAE4D4 /* [CP] Check Pods Manifest.lock */, 8438E1CB24BFAAD2001BDB13 /* Sources */, 8438E1CC24BFAAD2001BDB13 /* Frameworks */, 8438E1CD24BFAAD2001BDB13 /* Resources */, - 143B40CCA3BF094926B9773C /* [CP] Embed Pods Frameworks */, + A19088A12BE0C0B6EB7CA58A /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -15351,16 +16533,15 @@ isa = PBXNativeTarget; buildConfigurationList = 849013C724A80986008F705E /* Build configuration list for PBXNativeTarget "fearless" */; buildPhases = ( - 94F787D261F4281B7F6AFE26 /* [CP] Check Pods Manifest.lock */, + B99BB6683A83CEA62988CEA4 /* [CP] Check Pods Manifest.lock */, AE2060202636DA5900357578 /* Inject keys */, - F472A8D6261758DE003C58BC /* SwiftFormat */, 849013CD24A92260008F705E /* Swiftlint */, 849013CE24A92280008F705E /* R.swift */, 849013A424A80984008F705E /* Sources */, 849013A524A80984008F705E /* Frameworks */, 849013A624A80984008F705E /* Resources */, FAD429442A8A1A74001D6A16 /* Inject Google Keys */, - B60C6E08CACA1CEBC1520619 /* [CP] Embed Pods Frameworks */, + 8AA801B80376DBDCB49F8A62 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -15373,11 +16554,45 @@ FA72546A2AC2F12D00EC47A6 /* WalletConnectNetworking */, FA72546C2AC2F12D00EC47A6 /* WalletConnectPairing */, FA72546E2AC2F12D00EC47A6 /* Web3Wallet */, + FA8FD1802AF4B55100354482 /* Web3 */, + FA8FD1822AF4B55100354482 /* Web3ContractABI */, + FA8FD1842AF4B55100354482 /* Web3PromiseKit */, FA8FD1872AF4BEDD00354482 /* Swime */, - FAF600742C48D79600E56558 /* Cosmos */, - FAB482EA2C58A8AA00594D89 /* Web3 */, - FAB482EC2C58A8AA00594D89 /* Web3ContractABI */, - FAB482EE2C58A8AA00594D89 /* Web3PromiseKit */, + FA8810972BDCAF260084CC4B /* IrohaCrypto */, + FA8810992BDCAF260084CC4B /* RobinHood */, + FA88109B2BDCAF260084CC4B /* SSFAccountManagment */, + FA88109D2BDCAF260084CC4B /* SSFAccountManagmentStorage */, + FA88109F2BDCAF260084CC4B /* SSFAssetManagment */, + FA8810A12BDCAF260084CC4B /* SSFChainConnection */, + FA8810A32BDCAF260084CC4B /* SSFChainRegistry */, + FA8810A52BDCAF260084CC4B /* SSFCloudStorage */, + FA8810A72BDCAF260084CC4B /* SSFCrypto */, + FA8810A92BDCAF260084CC4B /* SSFEraKit */, + FA8810AB2BDCAF260084CC4B /* SSFExtrinsicKit */, + FA8810AD2BDCAF260084CC4B /* SSFHelpers */, + FA8810AF2BDCAF260084CC4B /* SSFKeyPair */, + FA8810B12BDCAF260084CC4B /* SSFLogger */, + FA8810B32BDCAF260084CC4B /* SSFModels */, + FA8810B52BDCAF260084CC4B /* SSFNetwork */, + FA8810B72BDCAF260084CC4B /* SSFPolkaswap */, + FA8810B92BDCAF260084CC4B /* SSFPools */, + FA8810BB2BDCAF260084CC4B /* SSFPoolsStorage */, + FA8810BD2BDCAF260084CC4B /* SSFQRService */, + FA8810BF2BDCAF260084CC4B /* SSFRuntimeCodingService */, + FA8810C12BDCAF260084CC4B /* SSFSigner */, + FA8810C32BDCAF260084CC4B /* SSFSingleValueCache */, + FA8810C52BDCAF260084CC4B /* SSFStorageQueryKit */, + FA8810C72BDCAF260084CC4B /* SSFTransferService */, + FA8810C92BDCAF260084CC4B /* SSFUtils */, + FA8810CB2BDCAF260084CC4B /* SSFXCM */, + FA8810CD2BDCAF260084CC4B /* SoraKeystore */, + FA8810CF2BDCAF260084CC4B /* keccak */, + 070ED7D12C3E7DE100DF4098 /* TonSwift */, + 070ED7EA2C4543D900DF4098 /* EventSource */, + 070ED7EC2C4543D900DF4098 /* StreamURLSessionTransport */, + 070ED7EE2C4543D900DF4098 /* TonAPI */, + 070ED7F02C4543D900DF4098 /* TonStreamingAPI */, + 0701B8A22C78F54200DCD395 /* Cosmos */, ); productName = fearless; productReference = 849013A824A80984008F705E /* fearless.app */; @@ -15387,13 +16602,13 @@ isa = PBXNativeTarget; buildConfigurationList = 849013CA24A80986008F705E /* Build configuration list for PBXNativeTarget "fearlessTests" */; buildPhases = ( - 21F8A6D4168E40BE9DA1D44D /* [CP] Check Pods Manifest.lock */, + DBFA8ECE30CBA05568FDA0F3 /* [CP] Check Pods Manifest.lock */, 842D1E8824D207C700C30A7A /* Modules Mock */, 842D1E8924D207D900C30A7A /* Common Mock */, 849013BA24A80986008F705E /* Sources */, 849013BB24A80986008F705E /* Frameworks */, 849013BC24A80986008F705E /* Resources */, - 9BB29B8B34CC212C09DCB1ED /* [CP] Embed Pods Frameworks */, + 465E17CE036B35C44BA2C00C /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -15446,10 +16661,12 @@ mainGroup = 8490139F24A80984008F705E; packageReferences = ( FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */, + FA8FD17F2AF4B55100354482 /* XCRemoteSwiftPackageReference "Web3.swift" */, FA8FD1862AF4BEDD00354482 /* XCRemoteSwiftPackageReference "Swime" */, FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */, - FAF600732C48D79500E56558 /* XCRemoteSwiftPackageReference "Cosmos" */, - FAB482E92C58A8AA00594D89 /* XCRemoteSwiftPackageReference "Web3.swift" */, + 070ED7D02C3E7DE100DF4098 /* XCRemoteSwiftPackageReference "ton-swift" */, + 070ED7E92C4543D900DF4098 /* XCRemoteSwiftPackageReference "ton-api-swift" */, + 0701B8A12C78F54200DCD395 /* XCRemoteSwiftPackageReference "Cosmos" */, ); productRefGroup = 849013A924A80984008F705E /* Products */; projectDirPath = ""; @@ -15474,6 +16691,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 0701B96B2C78FAF000DCD395 /* polkaswapSettings.json in Resources */, 8490142324A93027008F705E /* sora-Bold.otf in Resources */, 841937872544772F00CFA50C /* animatedBg.gif in Resources */, 8490145E24A94373008F705E /* Localizable.strings in Resources */, @@ -15483,9 +16701,12 @@ AEFC6D622600A772000BD310 /* StoriesPreviewCollectionItem.xib in Resources */, 842876AC24AE049B00D91AD8 /* SelectionTitleTableViewCell.xib in Resources */, 849013B824A80986008F705E /* LaunchScreen.storyboard in Resources */, + 0701B9712C78FAF000DCD395 /* runtime-westend.json in Resources */, 842876AE24AE049B00D91AD8 /* SelectionListViewController.xib in Resources */, + 0701B96D2C78FAF000DCD395 /* runtime-empty.json in Resources */, 8428765824ADDE0200D91AD8 /* ProfileTableViewCell.xib in Resources */, 84D8F16724D81CB100AF43E9 /* TitleWithSubtitleTableViewCell.xib in Resources */, + 0701B96A2C78FAF000DCD395 /* polkadot-9370metadata in Resources */, 84D2F45A25EF0556008B914D /* RecommendedValidatorCell.xib in Resources */, 84452F7625D5E2B300F47EC5 /* runtime-default.json in Resources */, FA66FE902779C9AE0037C989 /* runtime-empty.json in Resources */, @@ -15495,6 +16716,7 @@ 8490141424A92F6D008F705E /* OnbordingMain.xib in Resources */, AEF5058B261EF27B0098574D /* PurchaseProviderPickerTableViewCell.xib in Resources */, 849013B524A80986008F705E /* Assets.xcassets in Resources */, + 07230EB12C7456B900B92466 /* dapps.json in Resources */, 84D8F15724D80D5500AF43E9 /* ModalPickerViewController.xib in Resources */, 84452F7525D5E2B300F47EC5 /* runtime-polkadot.json in Resources */, 84754C9E2513B46100854599 /* AccountPickerTableViewCell.xib in Resources */, @@ -15503,10 +16725,13 @@ AE9EF282260B58250026910A /* StoriesViewController.xib in Resources */, 8490142524A93027008F705E /* sora-SemiBold.otf in Resources */, 84452F7425D5E2B300F47EC5 /* runtime-westend.json in Resources */, + 0701B9672C78FAF000DCD395 /* assets.json in Resources */, FACD42BF2A5BE93D009975AA /* polkadot-9370metadata in Resources */, FA256A46274CE8BD00875A53 /* StoriesCollectionItem.xib in Resources */, 076D9D6229506CFA002762E3 /* polkaswapSettings.json in Resources */, 849014B824AA87E3008F705E /* PinSetupViewController.xib in Resources */, + 0701B9722C78FAF000DCD395 /* types.json in Resources */, + 0701B96E2C78FAF000DCD395 /* runtime-kusama.json in Resources */, 84D8F16924D821ED00AF43E9 /* IconWithTitleTableViewCell.xib in Resources */, 84DF21A325347042005454AE /* DetailsDisplayTableViewCell.xib in Resources */, 849528DE2603697B009DC845 /* RewardEstimationView.xib in Resources */, @@ -15518,11 +16743,16 @@ 8438C45B2655AC2600047E3F /* runtime-rococo.json in Resources */, AE2060B02637068700357578 /* CIKeys.stencil in Resources */, 9D5F6A48E7A9166B9341F417 /* NetworkInfoViewController.xib in Resources */, + 0701B96F2C78FAF000DCD395 /* runtime-polkadot.json in Resources */, 07F2B75D28A6565900280C38 /* chains.json in Resources */, 84FFE50D261290BC0054EA63 /* NetworkInfoView.xib in Resources */, + 0701B9692C78FAF000DCD395 /* dapps.json in Resources */, 2624D8CEBB61A185A5E8B994 /* AccountExportPasswordViewController.xib in Resources */, + 0701B96C2C78FAF000DCD395 /* runtime-default.json in Resources */, + 0701B9682C78FAF000DCD395 /* chains.json in Resources */, 48E7D7072820F66F286A0B9D /* StakingMainViewController.xib in Resources */, FA93754A2AE928BE002CA482 /* types.json in Resources */, + 0701B9702C78FAF000DCD395 /* runtime-rococo.json in Resources */, 742374EE778D76ABC965E107 /* StakingAmountViewController.xib in Resources */, EA8ECCD37FE5D6478018D3FC /* RecommendedValidatorListViewController.xib in Resources */, ); @@ -15548,24 +16778,24 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 143B40CCA3BF094926B9773C /* [CP] Embed Pods Frameworks */ = { + 465E17CE036B35C44BA2C00C /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-fearlessAll-fearlessIntegrationTests/Pods-fearlessAll-fearlessIntegrationTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-fearlessTests/Pods-fearlessTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-fearlessAll-fearlessIntegrationTests/Pods-fearlessAll-fearlessIntegrationTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-fearlessTests/Pods-fearlessTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-fearlessAll-fearlessIntegrationTests/Pods-fearlessAll-fearlessIntegrationTests-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-fearlessTests/Pods-fearlessTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 21F8A6D4168E40BE9DA1D44D /* [CP] Check Pods Manifest.lock */ = { + 73654FAB1D050C79A2FAE4D4 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -15580,7 +16810,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-fearlessTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-fearlessAll-fearlessIntegrationTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -15661,65 +16891,38 @@ shellPath = /bin/sh; shellScript = "\"$PODS_ROOT/R.swift/rswift\" generate \"$PROJECT_DIR/R.generated.swift\"\n"; }; - 89AD8B440B53D55B8CAA828D /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-fearlessAll-fearlessIntegrationTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 94F787D261F4281B7F6AFE26 /* [CP] Check Pods Manifest.lock */ = { + 8AA801B80376DBDCB49F8A62 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-fearlessAll-fearless/Pods-fearlessAll-fearless-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-fearlessAll-fearless-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-fearlessAll-fearless/Pods-fearlessAll-fearless-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-fearlessAll-fearless/Pods-fearlessAll-fearless-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 9BB29B8B34CC212C09DCB1ED /* [CP] Embed Pods Frameworks */ = { + A19088A12BE0C0B6EB7CA58A /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-fearlessTests/Pods-fearlessTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-fearlessAll-fearlessIntegrationTests/Pods-fearlessAll-fearlessIntegrationTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-fearlessTests/Pods-fearlessTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-fearlessAll-fearlessIntegrationTests/Pods-fearlessAll-fearlessIntegrationTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-fearlessTests/Pods-fearlessTests-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-fearlessAll-fearlessIntegrationTests/Pods-fearlessAll-fearlessIntegrationTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; AE2060202636DA5900357578 /* Inject keys */ = { @@ -15740,26 +16943,31 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "#check if env-vars.sh exists\nif [ -f $PROJECT_DIR/$PROJECT_NAME/env-vars.sh ]\nthen\nsource $PROJECT_DIR/$PROJECT_NAME/env-vars.sh\nfi\n#no `else` case needed if the CI works as expected\n\nWORK_DIR=\"$PROJECT_DIR/$PROJECT_NAME\"\necho \"Sourcery Work Directory = $WORK_DIR\"\n\nOUT_FILE=\"$PROJECT_DIR/CIKeys.generated.swift\"\necho \"Sourcery Output File = $OUT_FILE\"\n\n\"$PODS_ROOT/Sourcery/bin/sourcery\" --templates \"$WORK_DIR\" --sources \"$WORK_DIR\" --output \"$OUT_FILE\" --args moonPaySecretKey=$MOONPAY_PRODUCTION_SECRET,moonPayTestSecretKey=$MOONPAY_TEST_SECRET,subscanAPIKey=$SUBSCAN_API_KEY,soraCardAPIKey=$SORA_CARD_API_KEY,soraCardDomain=$SORA_CARD_DOMAIN,soraCardKycEndpoint=$SORA_CARD_KYC_ENDPOINT_URL,soraCardKycUsername=$SORA_CARD_KYC_USERNAME,soraCardKycPassword=$SORA_CARD_KYC_PASSWORD,paywingsRepositoryUrl=$PAY_WINGS_REPOSITORY_URL,paywingsUsername=$PAY_WINGS_USERNAME,paywingsPassword=$PAY_WINGS_PASSWORD,x1EndpointUrlRelease=$X1_ENDPOINT_URL_RELEASE,x1WidgetIdRelease=$X1_WIDGET_ID_RELEASE,x1EndpointUrlDebug=$X1_ENDPOINT_URL_DEBUG,x1WidgetIdDebug=$X1_WIDGET_ID_DEBUG,ethereumApiKey=$FL_BLAST_API_ETHEREUM_KEY,bscApiKey=$FL_BLAST_API_BSC_KEY,sepoliaApiKey=$FL_BLAST_API_SEPOLIA_KEY,goerliApiKey=$FL_BLAST_API_GOERLI_KEY,polygonApiKey=$FL_BLAST_API_POLYGON_KEY,walletConnectProjectId=$FL_WALLET_CONNECT_PROJECT_ID,webClientIdRelease=$WEB_CLIENT_ID_RELEASE,fearlessGoogleUrlSchemeRelease=$FEARLESS_GOOGLE_URL_SCHEME_RELEASE,webClientIdDebug=$WEB_CLIENT_ID_DEBUG,fearlessGoogleUrlSchemeDebug=$FEARLESS_GOOGLE_URL_SCHEME_DEBUG,etherscanApiKey=$FL_IOS_ETHERSCAN_API_KEY,bscscanApiKey=$FL_IOS_BSCSCAN_API_KEY,polygonscanApiKey=$FL_IOS_POLYGONSCAN_API_KEY,alchemyApiKey=$FL_IOS_ALCHEMY_API_ETHEREUM_KEY,oklinkApiKey=$FL_OKLINK_API_KEY,opMainnetApiKey=$FL_IOS_OPTIMISTIC_ETHERSCAN_API_KEY,,dwellirApiKey=$FL_DWELLIR_API_KEY\n\n#add params to the xcconfig files\nvariableNames=(\"FEARLESS_GOOGLE_TOKEN\" \"FEARLESS_GOOGLE_URL_SCHEME\")\n\n# Iterate over the array\nfor variableName in \"${variableNames[@]}\"; do\n for file in \"$PROJECT_DIR\"/fearless/Configs/*.xcconfig; do\n if ! grep -q \"^$variableName = ${!variableName}$\" \"$file\"; then\n echo \"$variableName = ${!variableName}\" >> \"$file\"\n fi\n done\ndone\n\n/usr/libexec/PlistBuddy -c \"Set :CFBundleURLTypes:0:CFBundleURLSchemes:0 $FEARLESS_GOOGLE_URL_SCHEME\" \"$PROJECT_DIR\"/fearless/Info.plist\n\n/usr/libexec/PlistBuddy -c \"Set :GIDClientID $FEARLESS_GOOGLE_TOKEN\" \"$PROJECT_DIR\"/fearless/Info.plist\n"; + shellScript = "#check if env-vars.sh exists\nif [ -f $PROJECT_DIR/$PROJECT_NAME/env-vars.sh ]\nthen\nsource $PROJECT_DIR/$PROJECT_NAME/env-vars.sh\nfi\n#no `else` case needed if the CI works as expected\n\nWORK_DIR=\"$PROJECT_DIR/$PROJECT_NAME\"\necho \"Sourcery Work Directory = $WORK_DIR\"\n\nOUT_FILE=\"$PROJECT_DIR/CIKeys.generated.swift\"\necho \"Sourcery Output File = $OUT_FILE\"\n\n\"$PODS_ROOT/Sourcery/bin/sourcery\" --templates \"$WORK_DIR\" --sources \"$WORK_DIR\" --output \"$OUT_FILE\" --args moonPaySecretKey=$MOONPAY_PRODUCTION_SECRET,moonPayTestSecretKey=$MOONPAY_TEST_SECRET,subscanAPIKey=$SUBSCAN_API_KEY,soraCardAPIKey=$SORA_CARD_API_KEY,soraCardDomain=$SORA_CARD_DOMAIN,soraCardKycEndpoint=$SORA_CARD_KYC_ENDPOINT_URL,soraCardKycUsername=$SORA_CARD_KYC_USERNAME,soraCardKycPassword=$SORA_CARD_KYC_PASSWORD,paywingsRepositoryUrl=$PAY_WINGS_REPOSITORY_URL,paywingsUsername=$PAY_WINGS_USERNAME,paywingsPassword=$PAY_WINGS_PASSWORD,x1EndpointUrlRelease=$X1_ENDPOINT_URL_RELEASE,x1WidgetIdRelease=$X1_WIDGET_ID_RELEASE,x1EndpointUrlDebug=$X1_ENDPOINT_URL_DEBUG,x1WidgetIdDebug=$X1_WIDGET_ID_DEBUG,ethereumApiKey=$FL_BLAST_API_ETHEREUM_KEY,bscApiKey=$FL_BLAST_API_BSC_KEY,sepoliaApiKey=$FL_BLAST_API_SEPOLIA_KEY,goerliApiKey=$FL_BLAST_API_GOERLI_KEY,polygonApiKey=$FL_BLAST_API_POLYGON_KEY,walletConnectProjectId=$FL_WALLET_CONNECT_PROJECT_ID,webClientIdRelease=$WEB_CLIENT_ID_RELEASE,fearlessGoogleUrlSchemeRelease=$FEARLESS_GOOGLE_URL_SCHEME_RELEASE,webClientIdDebug=$WEB_CLIENT_ID_DEBUG,fearlessGoogleUrlSchemeDebug=$FEARLESS_GOOGLE_URL_SCHEME_DEBUG,etherscanApiKey=$FL_IOS_ETHERSCAN_API_KEY,bscscanApiKey=$FL_IOS_BSCSCAN_API_KEY,polygonscanApiKey=$FL_IOS_POLYGONSCAN_API_KEY,alchemyApiKey=$FL_IOS_ALCHEMY_API_ETHEREUM_KEY,oklinkApiKey=$FL_OKLINK_API_KEY,opMainnetApiKey=$FL_IOS_OPTIMISTIC_ETHERSCAN_API_KEY,dwellirApiKey=$FL_DWELLIR_API_KEY,\n tonApiKey=$FL_IOS_TON_API_KEY\n\n#add params to the xcconfig files\nvariableNames=(\"FEARLESS_GOOGLE_TOKEN\" \"FEARLESS_GOOGLE_URL_SCHEME\")\n\n# Iterate over the array\nfor variableName in \"${variableNames[@]}\"; do\n for file in \"$PROJECT_DIR\"/fearless/Configs/*.xcconfig; do\n if ! grep -q \"^$variableName = ${!variableName}$\" \"$file\"; then\n echo \"$variableName = ${!variableName}\" >> \"$file\"\n fi\n done\ndone\n\n/usr/libexec/PlistBuddy -c \"Set :CFBundleURLTypes:0:CFBundleURLSchemes:0 $FEARLESS_GOOGLE_URL_SCHEME\" \"$PROJECT_DIR\"/fearless/Info.plist\n\n/usr/libexec/PlistBuddy -c \"Set :GIDClientID $FEARLESS_GOOGLE_TOKEN\" \"$PROJECT_DIR\"/fearless/Info.plist\n"; }; - B60C6E08CACA1CEBC1520619 /* [CP] Embed Pods Frameworks */ = { + B99BB6683A83CEA62988CEA4 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-fearlessAll-fearless/Pods-fearlessAll-fearless-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-fearlessAll-fearless/Pods-fearlessAll-fearless-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-fearlessAll-fearless-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-fearlessAll-fearless/Pods-fearlessAll-fearless-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - F472A8D6261758DE003C58BC /* SwiftFormat */ = { + DBFA8ECE30CBA05568FDA0F3 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -15767,15 +16975,19 @@ inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); - name = SwiftFormat; + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-fearlessTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/SwiftFormat/CommandLineTool/swiftformat\" \"$SRCROOT/fearless\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; FAD429442A8A1A74001D6A16 /* Inject Google Keys */ = { isa = PBXShellScriptBuildPhase; @@ -15882,6 +17094,7 @@ 846CD25B265709A800A2E4B6 /* StorageKeySuffixMapper.swift in Sources */, 076D9D4D29431C71002762E3 /* SwapQuoteAmountFactory.swift in Sources */, 07F2B75728A3A4B800280C38 /* ChainCollectionView.swift in Sources */, + 075E5FCF2C7F1A180044C142 /* TonConnectServiceDelegate.swift in Sources */, 8473D40D2657E9DC00B394B2 /* MultiSigner.swift in Sources */, FA17B4B527E858CB006E0735 /* JsonLoadingFailedAlertConfig.swift in Sources */, FAD9AAC52B8DFF6700AA603B /* PrefixStorageRequestWorker.swift in Sources */, @@ -15911,21 +17124,25 @@ F484FF5F264BA2720015320F /* ControllerAccountConfirmationLayout.swift in Sources */, FAA0134C28DA12D7000A5230 /* StakingUnbondConfirmPoolViewModelFactory.swift in Sources */, FA38C9752758CD5D005C5577 /* ChainAccountViewState.swift in Sources */, + 0701B8FD2C78F71800DCD395 /* OKXLiquiditySource.swift in Sources */, FAD956772BB2BE8C00A8BF76 /* SystemAccountRequest.swift in Sources */, 841494402604E71C000D8D1A /* TotalRewardItem.swift in Sources */, FA584C7A2AB2BFE300F6F020 /* MediaType.swift in Sources */, C6264C292799A56E00FCA0DB /* WalletDetailsTableCell.swift in Sources */, 84DA3B1224C6D29100B5E27F /* RuntimeVersion.swift in Sources */, + 073DE30C2C5B99D6003B4990 /* TonHistoryOperationFactory.swift in Sources */, FA176BB82851B42700258125 /* StakingBalanceParachainViewModelFactory.swift in Sources */, 843C49DB24DF373000B71DDA /* AccountImportRequest.swift in Sources */, FA09AD352C37ABA000BE0B9C /* TransactionObserver.swift in Sources */, 843910C1253F36F300E3C217 /* BaseStorageChildSubscription.swift in Sources */, + 0701B9962C78FAF000DCD395 /* LiquidityPoolsListViewLayout.swift in Sources */, 84644AC52567EC05004EAA4B /* MultilineTriangularedView.swift in Sources */, FA86443E2768439900956D8E /* ContainerProtocols.swift in Sources */, 07F818012AD55D3600B87358 /* WalletConnectSessionCoordinator.swift in Sources */, FA53D8902C084ECA00173ADB /* LiquidityPoolSupplyViewModel.swift in Sources */, 8428765224ADDE0200D91AD8 /* ProfilePresenter.swift in Sources */, F4F22987260DC4F300ACFDB8 /* StakingRewardDetailsSimpleLabelViewModel.swift in Sources */, + 0701B89C2C78F34A00DCD395 /* AccountStatisticsPresenter.swift in Sources */, 84DD5F77263DFD9C00425ACF /* WarningConditionViolation.swift in Sources */, 84D2F45425EF044B008B914D /* RecommendedValidatorListViewModel.swift in Sources */, FA93A30E2834FCB80021330F /* ValidatorSearchRelaychainViewModelFactory.swift in Sources */, @@ -15934,6 +17151,7 @@ 070CDD8C2ACBE59700F3F20A /* ReceiveAndRequestAssetInteractor.swift in Sources */, 8494D86B25247F9600614D8F /* Decimal+String.swift in Sources */, FAAC292E2ADCF3BB00063962 /* WalletConnectProposalCoordinator.swift in Sources */, + 07ECB7FF2C6A0BB2000E0A14 /* ConnectRequestVariant.swift in Sources */, 84873B0926029CBD000A83EE /* StakingStateViewModelFactory.swift in Sources */, FAFFAE3729AC84180074AF1F /* ParachainSubqueryHistoryOperationFactory.swift in Sources */, 84C3F78C26020DE800D47501 /* StakingStateMachineProtocols.swift in Sources */, @@ -15947,13 +17165,14 @@ FA6D40812837A4A300A7A4C6 /* SelectedValidatorListRelaychainViewModelFactory.swift in Sources */, FAD9AAC32B8DFE0200AA603B /* PrefixRequest.swift in Sources */, 849014C824AA8A28008F705E /* BiometryAuth.swift in Sources */, - FA4B75B02C6F325F001B954F /* OKXMultichainAssetSelection.swift in Sources */, 84690797264154E80030E693 /* SlashesOperationFactory.swift in Sources */, 8424A8C7262EC0E50091BFB1 /* PayoutInfo.swift in Sources */, 8428768C24AE046300D91AD8 /* AboutPresenter.swift in Sources */, FA62626B2AC2E35A005D3D95 /* WalletConnectProposalViewModel.swift in Sources */, + 0701B8AA2C78F5DB00DCD395 /* ViscanHistoryOperationFactory.swift in Sources */, FA2E9BB927A14A600023FAD2 /* FiltersPresentable.swift in Sources */, 843910C7253F56EA00E3C217 /* BaseOperation+Result.swift in Sources */, + 071606CB2C7C6C8800C1DF75 /* AssetRepositoryFactory.swift in Sources */, 0702B31A29701884003519F5 /* MoneyPresentable.swift in Sources */, 842D1E8424D197C900C30A7A /* KeyboardAdoptable.swift in Sources */, 849DEBD425ED015C00C64C19 /* SelectValidatorsConfirmViewModel.swift in Sources */, @@ -15964,12 +17183,14 @@ FA4B92AD2844D0E60003BCEF /* SelectCurrencyViewModelFactory.swift in Sources */, FAC6CDAF2BA81FA00013A17E /* WalletLoggerProtocol.swift in Sources */, FA86442327671C8C00956D8E /* WalletTransactionHistorySection.swift in Sources */, + 0723EDB22C50FAD900880620 /* EthereumTransferFlowUseCase.swift in Sources */, FAA0133228DA12B6000A5230 /* StakingPoolMainRouter.swift in Sources */, 07D05E5F28EF0A0A00B66C70 /* SelectValidatorsConfirmPoolInitiatedStrategy.swift in Sources */, F47BBD8B263189DB0087DA11 /* StakingBalanceAction.swift in Sources */, 0716C84F28880304004C8CB1 /* UITableViewCell.swift in Sources */, FA8800542B2C5D91000AE5EB /* ReefSubsquidHistoryOperationFactory.swift in Sources */, FACD42B02A5BE8A4009975AA /* NumbersAndSlashesProcessor.swift in Sources */, + 0715FCE52C66378900AA674E /* TonConnectModels.swift in Sources */, F4F2297C260DC05600ACFDB8 /* StakingRewardTokenUsdViewModel.swift in Sources */, FA256989274CE5DD00875A53 /* ViewController+Wrapper.swift in Sources */, FAC6CD8A2BA7FA4B0013A17E /* AssetTransactionData.swift in Sources */, @@ -15979,9 +17200,9 @@ 847C96302553426D002D288F /* ExportGenericViewModel.swift in Sources */, FAFFAE9229AC84B10074AF1F /* RewardOrSlash.swift in Sources */, FAD429022A86567F001D6A16 /* BackupCreatePasswordViewController.swift in Sources */, - C6FBA6DC2C69E006008B18D9 /* PriceDataHelper.swift in Sources */, AEE5FB1826457AC1002B8FDC /* StakingRewardDestSetupViewController.swift in Sources */, 07DFA45A289B8D520035A8AB /* WalletBalanceInfo.swift in Sources */, + 0715FCDF2C661E1D00AA674E /* TonConnect.swift in Sources */, FAA0137328DA12E3000A5230 /* StakingRedeemConfirmationFlow.swift in Sources */, 842D1E8624D1A90400C30A7A /* NSPredicate+Validation.swift in Sources */, F4FDA0F826A57626003D753B /* EraCountdownOperationFactory.swift in Sources */, @@ -15996,8 +17217,8 @@ 844EFB5A265FCD9F0090ACB1 /* CrowdloanContributionProtocols.swift in Sources */, 073B34BC2AE8CC4500DC5106 /* WalletConnectDisconnectService.swift in Sources */, F47BBD93263199830087DA11 /* StakingBalanceUnbondingWidgetView.swift in Sources */, + 0701B9042C78F71800DCD395 /* OKXDexRequestSigner.swift in Sources */, AE8B8837267351E300AB0AA9 /* CustomValidatorRelaychainListComposer.swift in Sources */, - FAD240E02C64EA1D00B389FF /* KaiaHistoryOperationFactory.swift in Sources */, FAE39B042AA0655B0011A9D6 /* BaseEthereumService.swift in Sources */, FA3F5B6B281BAF6600BEF03B /* StakingAmountParachainViewModelState.swift in Sources */, 845E49832636C87B002F8C22 /* StakingManageViewModel.swift in Sources */, @@ -16007,6 +17228,7 @@ 84BE207825E7D62100B4748C /* ActiveEraInfo.swift in Sources */, FA37AE2C2859BA30001DCA96 /* StakingBondMoreConfirmationParachainViewModelState.swift in Sources */, C6A8D6C127FC318A0080F81C /* UniqueChainViewModel.swift in Sources */, + 071606CF2C7CB91D00C1DF75 /* LocalToggleService.swift in Sources */, 845BB8C925E45D1500E5FCDC /* BondCall.swift in Sources */, F40966B926B297D6008CD244 /* AnalyticsRewardsViewModel.swift in Sources */, FAFFAE8E29AC84B10074AF1F /* SubqueryCollatorDataResponse.swift in Sources */, @@ -16047,6 +17269,7 @@ FA72542C2AC2E48500EC47A6 /* AppMetadata.swift in Sources */, C63468DF28F2C178005CB1F1 /* Contact.swift in Sources */, FA286B162A3043DB008BD527 /* CrossChainRouter.swift in Sources */, + 07EC555B2CD8A3600074132E /* MultiAssetV12.xcmappingmodel in Sources */, 848C3D0926248A3B005481C3 /* TransferCall.swift in Sources */, C63468E428F3530A005CB1F1 /* AddressBookViewModelFactory.swift in Sources */, 8401AEC42642A71D000B03E3 /* StakingRebondConfirmationWireframe.swift in Sources */, @@ -16064,6 +17287,7 @@ FA2569BF274CE74100875A53 /* NetworkFeeView+Protocol.swift in Sources */, 843C49E124DFFC9500B71DDA /* AccountImportSource+ViewModel.swift in Sources */, 84038FF226FFBE1900C73F3F /* JsonLocalSubscriptionHandler.swift in Sources */, + 0701B9A92C78FAF000DCD395 /* LiquidityPoolSupplyConfirmAssembly.swift in Sources */, 842898D1265A955A002D5D65 /* ImageViewModel.swift in Sources */, 8490145324A93FD1008F705E /* FearlessLoadingViewFactory.swift in Sources */, 849842F92659241C006BBB9F /* CompletedCrowdloanTableViewCell.swift in Sources */, @@ -16097,14 +17321,18 @@ FA2E9BAE27A116DA0023FAD2 /* SwitchFilterTableCellViewModel.swift in Sources */, 8430AAE126022CA1005B1066 /* BaseStakingState.swift in Sources */, FA7337092A1339890096A291 /* AssetTransactionData+AlchemyHistory.swift in Sources */, + 0701B9AB2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmPresenter.swift in Sources */, + 0728BD182C984E7A002369FD /* ConnectedAccountsTableCell.swift in Sources */, FA256998274CE65100875A53 /* HTTPHeadersBuilderProtocol.swift in Sources */, FA6C175529935DAE00A55254 /* AssetTransactionData+SubsquidHistory.swift in Sources */, C67E781527B31FCB0053346B /* CheckPincodePresenter.swift in Sources */, + 0701B8B22C78F63400DCD395 /* AccountScoreView.swift in Sources */, FA7254282AC2E48500EC47A6 /* JSONRPCError+Fearless.swift in Sources */, FA93A3182836543B0021330F /* ValidatorListFilterRelaychainViewModelFactory.swift in Sources */, 8490141124A92F6D008F705E /* OnboardingMainViewController.swift in Sources */, FAD067D02C20453E0050291F /* LegacyEraStakersFetching.swift in Sources */, 842349C52624E98C0066ACFE /* MultiAddress+Query.swift in Sources */, + 0701B8992C78F34A00DCD395 /* AccountStatisticsAssembly.swift in Sources */, 84155DED2539817200A27058 /* ApplicationService.swift in Sources */, FA169FAB28BCBAF000E8D2DC /* PoolStakingAccountUpdatingService.swift in Sources */, 84403D7F25E91BC100494FD4 /* SuperIdentity.swift in Sources */, @@ -16136,6 +17364,7 @@ 84F13F0826F13898006725FF /* StakingAssetSettings.swift in Sources */, 84F30EF1260001A600039D09 /* DataProviderChange+Helper.swift in Sources */, FA6262492AC2E35A005D3D95 /* WalletConnectActiveSessionsInteractor.swift in Sources */, + 07ECB7F72C69F4A1000E0A14 /* TonDapp.swift in Sources */, F47BBD8026317B970087DA11 /* StakingBalanceViewModel.swift in Sources */, FA2FC80028B3807C00CC0A42 /* StakingPoolJoinChoosePoolViewController.swift in Sources */, 848919D926FB5F99004DBAD5 /* CrowdloanChainTableViewCell.swift in Sources */, @@ -16153,6 +17382,7 @@ 8443FDB12554B7640092893D /* TitledMnemonicView.swift in Sources */, AE2C84CA25EF986E00986716 /* ValidatorInfoProtocols.swift in Sources */, AEFC6D672600A808000BD310 /* StoriesPreviewCollectionItem.swift in Sources */, + 0715FCD92C6608B700AA674E /* TonConnectMessageBuilder.swift in Sources */, 07DE95B828A1119400E9C2CB /* BalanceInfoInteractor.swift in Sources */, FA86442027671C7700956D8E /* WalletTransactionHistoryCellViewModel.swift in Sources */, FA17B4C027E97536006E0735 /* DeactivatableView.swift in Sources */, @@ -16175,12 +17405,14 @@ C6267B9328BDF6A5001E31BF /* ChainAssetListProtocols.swift in Sources */, FA3430F628508C02002B5975 /* StakingRedeemRelaychainStrategy.swift in Sources */, 84F13F1A26F23697006725FF /* Data+Keccak.swift in Sources */, + 0701B98A2C78FAF000DCD395 /* AvailableLiquidityPoolsListViewModelFactory.swift in Sources */, 84A3034926A834F900E64382 /* ValidatorInfoViewLayout.swift in Sources */, F409670026B29A58008CD244 /* FWLineChartView.swift in Sources */, FA34EEE32B98723C0042E73E /* OnboardingAssembly.swift in Sources */, FA2FC80628B3807C00CC0A42 /* StakingPoolJoinConfigViewController.swift in Sources */, 84EBC55024F660A700459D15 /* EventCenter.swift in Sources */, 849ABE862628154900011A2A /* SubscanRawExtrinsicData.swift in Sources */, + 07A949842C466E8C00613B9D /* SubstrateRemoteBalanceFetching.swift in Sources */, C6CA20442B072B98001503C2 /* NftCollectionFilters.swift in Sources */, FA936BD8286C66BF0059B97A /* StakingRebondConfirmationParachainViewModelState.swift in Sources */, FAADC1A929261F7000DA9903 /* PoolRolesConfirmPresenter.swift in Sources */, @@ -16189,7 +17421,7 @@ 849014CB24AA8B75008F705E /* RootControllerAnimationCoordinator.swift in Sources */, 84DED3FC266651EB00A153BB /* ReferralCrowdloanViewModel.swift in Sources */, FA2FC82328B380C500CC0A42 /* StakingPoolState.swift in Sources */, - FA3F42F92C50C8EF00AA1397 /* ScamInfoFetcher.swift in Sources */, + 07ECB7F52C69EDCE000E0A14 /* SessionStatus.swift in Sources */, 8428766924ADF27D00D91AD8 /* AuthorizationPresentable.swift in Sources */, F4871DEE26D63E3E00D27F23 /* AnalyticsRewardDetailsViewModel.swift in Sources */, AEA0C8AA267B6B4300F9666F /* SelectedValidatorListViewController.swift in Sources */, @@ -16197,6 +17429,7 @@ FA2E9B95279FE9380023FAD2 /* TextCopyPresentable.swift in Sources */, 2A66CFAF25D10EDF0006E4C1 /* PhishingItem.swift in Sources */, FA37AE4B285C5294001DCA96 /* ExecuteDelegationRequestCall.swift in Sources */, + 0701B9C82C78FDE000DCD395 /* AssetTransactionData+VicscanHistory.swift in Sources */, AEA2C1C02681E9EC0069492E /* ValidatorSearchViewLayout.swift in Sources */, 8490144B24A93D0B008F705E /* FearlessNavigationBar.swift in Sources */, 84F4393A25DAC48D00AEDA56 /* JSONRPCAliases.swift in Sources */, @@ -16223,7 +17456,6 @@ 8467FD5324EFD210005D486C /* UserDataStorageFacade.swift in Sources */, C63CB31E284F790F0071AF26 /* DelegationInfoCell.swift in Sources */, FAD429092A86567F001D6A16 /* BannersViewController.swift in Sources */, - FAC0BBD4291D0EB000E6F106 /* SendPresenter.swift in Sources */, AE6F7FE12685E812002BBC3E /* ValidatorListFilterViewController.swift in Sources */, FA2FC7C928B3805400CC0A42 /* JoinPoolCall.swift in Sources */, AEF50586261EE6230098574D /* PurchaseProviderPickerTableViewCell.swift in Sources */, @@ -16232,7 +17464,6 @@ FAD067D12C20453E0050291F /* DefaultEraStakersFetching.swift in Sources */, FA15BC112823AFE10037C023 /* ParachainStakingLocalSubscriptionHandler.swift in Sources */, FAD646C2284DD2CF007CCB92 /* StakingBalanceRelaychainStrategy.swift in Sources */, - FAD240DB2C64E22B00B389FF /* AssetTransactionData+ZChainHistory.swift in Sources */, FAF5E9D827E46D77005A3448 /* AppVersion.swift in Sources */, 840DCBFB25E0703A00D45C6A /* RewardSelectionView.swift in Sources */, FA34EEE72B98723C0042E73E /* BalanceLocksDetailInteractor.swift in Sources */, @@ -16245,14 +17476,17 @@ FAA0133128DA12B6000A5230 /* StakingPoolMainViewController.swift in Sources */, FA68301C2930DD35002AD926 /* RecommendedValidatorListPoolViewModelFactory.swift in Sources */, FA93A30C2834FCAD0021330F /* ValidatorSearchRelaychainStrategy.swift in Sources */, + 07CA73FB2CDDE27400EF5279 /* MetaAccountModel.swift in Sources */, + 0701B98E2C78FAF000DCD395 /* LiquidityPoolListCell.swift in Sources */, 844CB56E26F9CB1500396E13 /* CrowdloanLocalStorageSubscriber.swift in Sources */, 073417B4298BA28300104F41 /* EquilibriumTotalWalletService.swift in Sources */, + 0701B8EA2C78F71800DCD395 /* TonConnectEvent.swift in Sources */, 0716C84C288802EB004C8CB1 /* SwipableTableViewCell.swift in Sources */, 8401AEC32642A71D000B03E3 /* StakingRebondConfirmationViewController.swift in Sources */, 841AAC2D26F7315300F0A25E /* CrowdloanRemoteSubscriptionService.swift in Sources */, 8406B5AF26FBE7EF00635B61 /* SelectionIconDetailsTableViewCell.swift in Sources */, 849014BE24AA87E4008F705E /* PinSetupPresenter.swift in Sources */, - FAC0BBD9291D0EB000E6F106 /* SendViewController.swift in Sources */, + 0701B9C62C78FDE000DCD395 /* AssetTransactionData+FireHistory.swift in Sources */, FAA0139D28DA131B000A5230 /* StakingBondMorePoolViewModelState.swift in Sources */, FA286B0F2A3043DB008BD527 /* CrossChainConfirmationData.swift in Sources */, 8467FD0224E5D2D9005D486C /* OnboardingMainInteractor.swift in Sources */, @@ -16272,12 +17506,13 @@ FA7741E42B6A350200358315 /* GiantsquidStakingRewardsFetcher.swift in Sources */, FA7C9A702BA007AE0031580A /* ArrowsquidHistoryResponse.swift in Sources */, 845BB8D125E45F1300E5FCDC /* NominateCall.swift in Sources */, + 0778A12A2C5763D6008A1254 /* Task.swift in Sources */, FAD429162A86567F001D6A16 /* BackupSelectWalletRouter.swift in Sources */, + 0723EDA82C50D6FE00880620 /* SubstrateTransferFlowUseCase.swift in Sources */, 840689FC26321F2700A017B1 /* StorageQuery.swift in Sources */, 8423ADD026B2C38600057EDD /* ImportantFlowViewFactory.swift in Sources */, FA38C9CD276305B6005C5577 /* WalletSendConfirmViewModel.swift in Sources */, FA99C938283B76F5007B1F83 /* SelectValidatorsConfirmRelaychainExistingStrategy.swift in Sources */, - FAB90CF12C73351C00D13804 /* UIImage+ColorsInvert.swift in Sources */, FAD429212A865680001D6A16 /* WalletNamePresenter.swift in Sources */, 844EFB65265FD61D0090ACB1 /* CrowdloanContributeConfirmViewModel.swift in Sources */, FAADC1B72926597400DA9903 /* ScanQRViewLayout.swift in Sources */, @@ -16285,7 +17520,6 @@ 8472975D260B1B71009B86D0 /* ExistingBonding.swift in Sources */, 8490144C24A93D0B008F705E /* FearlessNavigationController.swift in Sources */, 84CE69DD2565BB6400559427 /* AboutViewModel.swift in Sources */, - C6FBA6DE2C72E0FD008B18D9 /* PricesUpdated.swift in Sources */, 070B2C57289CE43A00F78F82 /* SelectNetworkInteractor.swift in Sources */, 84F2FEFF25E7ADE7008338D5 /* ValidatorPrefs.swift in Sources */, FA2FC80E28B3807D00CC0A42 /* StakingPoolJoinConfirmProtocols.swift in Sources */, @@ -16293,10 +17527,11 @@ 84BE209E25E85CCA00B4748C /* ServiceCoordinator.swift in Sources */, 84D1F31E260F585E0077DDFE /* AddAccount.swift in Sources */, 8467FD4324ED5F46005D486C /* ProfileSectionTableViewCell.swift in Sources */, - FA38C9CB276305A3005C5577 /* WalletSendConfirmViewState.swift in Sources */, + 0701B89A2C78F34A00DCD395 /* AccountStatisticsInteractor.swift in Sources */, 076D9D6029504BA3002762E3 /* PolkaswapSettingsSyncService.swift in Sources */, FA7254452AC2E48500EC47A6 /* WalletConnectPayloadFactory.swift in Sources */, 846CA77C27099DD90011124C /* WeaklyAnalyticsRewardSource.swift in Sources */, + 0701B97B2C78FAF000DCD395 /* LiquidityPoolDetailsViewController.swift in Sources */, 84452F9D25D6768000F47EC5 /* RuntimeMetadataItem.swift in Sources */, 849842FE26592C2B006BBB9F /* StatusSectionView.swift in Sources */, F42D125F26C1B14D00E59214 /* AnalyticsValidatorsViewModelFactory.swift in Sources */, @@ -16310,6 +17545,7 @@ 076D9D37293E34EE002762E3 /* SwapVariant.swift in Sources */, 84C6801024D6EE4500006BF5 /* PlusIndicatorView.swift in Sources */, FAC0BBE1291D0EB000E6F106 /* SelectAssetCell.swift in Sources */, + 0701B8F52C78F71800DCD395 /* OKXDexLiquiditySourceRequestParameters.swift in Sources */, 8428765A24ADDE0200D91AD8 /* ProfileViewFactory.swift in Sources */, 8490141624A92F6D008F705E /* OnboardingMainViewFactory.swift in Sources */, FAC0BBD2291D0EB000E6F106 /* SelectNetworkViewModel.swift in Sources */, @@ -16322,6 +17558,7 @@ 8428765724ADDE0200D91AD8 /* ProfileTableViewCell.swift in Sources */, FA7D46CF2AF24A1B005D681B /* SoraSubsquidPayoutValidatorForNominatorFactory.swift in Sources */, 8401AE8D2641EF7B000B03E3 /* NetworkFeeFooterView.swift in Sources */, + 0701B9CB2C78FE2C00DCD395 /* ScamInfoFetcher.swift in Sources */, 841AAC2F26F73E0C00F0A25E /* LocalStorageKeyFactory.swift in Sources */, FACD429F2A5BE811009975AA /* StorageMigrator.swift in Sources */, FAFFAE7429AC84B10074AF1F /* SubqueryLiquidity.swift in Sources */, @@ -16334,10 +17571,12 @@ 847119EB262EFF3800716580 /* ValidatorPayoutInfoFactory.swift in Sources */, 84CFF1F126526FBC00DB7CF7 /* StakingBondMoreConfirmationInteractor.swift in Sources */, FAD429122A86567F001D6A16 /* BannersRouter.swift in Sources */, + 0701B8B82C78F69500DCD395 /* UIImage+ColorsInvert.swift in Sources */, AEF7404E25E6DC9400407D41 /* RewardCalculatorEngine.swift in Sources */, FA7A4C7F2A1F937A0051FB4D /* ParachainRewardCalculatorEngine.swift in Sources */, 07DFA4462897EE370035A8AB /* WalletsManagmentViewModelFactory.swift in Sources */, 07D05E4A28EEFF2F00B66C70 /* SelectValidatorsStartPoolStrategy.swift in Sources */, + 0701B9A62C78FAF000DCD395 /* LiquidityPoolSupplyViewLayout.swift in Sources */, FAA0137E28DA12F0000A5230 /* StakingRedeemPoolViewModelFactory.swift in Sources */, FAFFAE8529AC84B10074AF1F /* SubqueryRewardOrSlash.swift in Sources */, 84CA68D926BE9E7F003B9453 /* SpecVersionSubscription.swift in Sources */, @@ -16354,6 +17593,7 @@ AEE5FB1026457806002B8FDC /* StakingRewardDestSetupViewFactory.swift in Sources */, 849ABE49262763BB00011A2A /* Longrun.swift in Sources */, 076D9D6829509F1C002762E3 /* PolkaswapSettingMapper.swift in Sources */, + 0701B9B52C78FD2000DCD395 /* BlockExplorerApiKey.swift in Sources */, 076D9D41293F2A1F002762E3 /* SlippageToleranceView.swift in Sources */, 84644A30256722D2004EAA4B /* TriangularedBlurButton+Inspectable.swift in Sources */, FA6262672AC2E35A005D3D95 /* WalletConnectProposalRouter.swift in Sources */, @@ -16363,6 +17603,7 @@ F4D6FF4D26B3EB65002313AF /* AnalyticsHistoryCell.swift in Sources */, 84F43C0F25DF016600AEDA56 /* DispatchQueueHelper.swift in Sources */, 8490147824A94A37008F705E /* RootPresenterFactory.swift in Sources */, + 0701B99D2C78FAF000DCD395 /* LiquidityPoolsOverviewViewLayout.swift in Sources */, FAD646D2284F1069007CCB92 /* StakingBondMoreConfirmationRelaychainViewModelState.swift in Sources */, 849014C224AA87E4008F705E /* LocalAuthPresenter.swift in Sources */, 84CA68D126BE99ED003B9453 /* RuntimeProviderFactory.swift in Sources */, @@ -16374,6 +17615,7 @@ 8472C5AF265CF9C500E2481B /* StakingRewardDestConfirmViewLayout.swift in Sources */, 84FD3DBB254104B600A234E3 /* WalletNewTransactionInserted.swift in Sources */, 8428765C24ADDE0200D91AD8 /* ProfileViewController.swift in Sources */, + 0701B8982C78F34A00DCD395 /* AccountStatisticsViewModelFactory.swift in Sources */, FAC0BBDB291D0EB000E6F106 /* SendDataValidatingFactory.swift in Sources */, 843B1D7A263EED5C00AF8957 /* StakingUnbondConfirmLayout.swift in Sources */, F4B06BFA264509E8003214D5 /* SetControllerCall.swift in Sources */, @@ -16394,6 +17636,7 @@ 842876B224AE059700D91AD8 /* SupportData.swift in Sources */, 84893C0524DA8663008F6A3F /* AccountCreationError.swift in Sources */, 84282FBD26D05A54002CA322 /* ChainRegistryFacade.swift in Sources */, + 071606C42C7C6C2400C1DF75 /* PricesUpdated.swift in Sources */, F4DCAE4F2620819000CCA6BF /* PayoutRewardsService.swift in Sources */, 8463A70325E2FCD0003B8160 /* WeakWrapper.swift in Sources */, FAAA29292B8DCE3E0089AFE6 /* StorageResponseValueExtractor.swift in Sources */, @@ -16409,12 +17652,10 @@ 84100F3826A6085C00A5054E /* YourValidatorListDescSectionView.swift in Sources */, FAE9EB9F288ABBBE009390B6 /* AnalyticRewardsParachainViewModelState.swift in Sources */, AE528E4F26852E410058935A /* ValidatorSearchViewModelFactory.swift in Sources */, - 841AAC2526F692EF00F0A25E /* AddressConversion.swift in Sources */, 07089AF528B64701001566CA /* ChainReconnectingEvent.swift in Sources */, 8490147624A94A37008F705E /* RootInteractor.swift in Sources */, F40966CE26B297D6008CD244 /* AnalyticsStakeProtocols.swift in Sources */, 07DE95B728A1119400E9C2CB /* BalanceInfoProtocols.swift in Sources */, - FAF6007A2C48F12000E56558 /* AccountScoreViewModel.swift in Sources */, 849014C524AA890D008F705E /* UIFont+Style.swift in Sources */, 0726FFB12AC439DE00336D76 /* WalletConnectPolkadotSignature.swift in Sources */, FA3430EE285065A1002B5975 /* StakingUnbondConfirmRelaychainStrategy.swift in Sources */, @@ -16422,7 +17663,6 @@ 8490149924AA7892008F705E /* SharingPresentable.swift in Sources */, FA5137AA29AC6F2F00560EBA /* PolkaswapDisclaimerViewModel.swift in Sources */, 84754C9C2513B26000854599 /* AccountPickerTableViewCell.swift in Sources */, - FAC0BBD5291D0EB000E6F106 /* SendProtocols.swift in Sources */, 8472C5B1265CF9C500E2481B /* StakingRewardDestConfirmViewFactory.swift in Sources */, F4488CF226143E0000AEE6DB /* EraRewardPoints.swift in Sources */, 849DF02F26C53DB900B702F4 /* RuntimeSyncEvents.swift in Sources */, @@ -16430,6 +17670,7 @@ FA7336FD2A132F740096A291 /* AlchemyHistoryOperationFactory.swift in Sources */, 844DD65525EAF32D00B1DA97 /* SelectValidatorsStartViewModel.swift in Sources */, FA936BD0286C41E80059B97A /* StakingRebondConfirmationRelaychainViewModelState.swift in Sources */, + 0701B9002C78F71800DCD395 /* OKXSupportedChain.swift in Sources */, C661B3AD27DF0193005F1F7D /* AccountCreateViewLayout.swift in Sources */, 8470D6D0253E321C009E9A5D /* StorageSubscriptionProtocols.swift in Sources */, 076D9D39293E3500002762E3 /* PolkaswapLiquidityFilterMode.swift in Sources */, @@ -16445,6 +17686,7 @@ FAA086CE28470B2100CC2F33 /* SelectValidatorsConfirmParachainStrategy.swift in Sources */, 84DA3B1424C6D7C700B5E27F /* RuntimeDispatchInfo.swift in Sources */, F4D96B6C2637EB1300B23D3D /* StakingBalanceActionsWidgetViewModel.swift in Sources */, + 0701B9BF2C78FD8800DCD395 /* ZChainHistoryResponse.swift in Sources */, FA8F6386298253ED004B8CD4 /* AddConnectionError.swift in Sources */, FA6ECE762BF49D3D00481B2B /* LiquidityPoolDetailsViewModelFactory.swift in Sources */, 84A8FD8E265FDA76002ADB58 /* CrowdloanContributionConfirmData.swift in Sources */, @@ -16457,6 +17699,7 @@ 8428768624AE046300D91AD8 /* LanguageSelectionPresenter.swift in Sources */, 8490152724ABCC40008F705E /* NumberFormatter.swift in Sources */, 846A2C4325271CDE00731018 /* TransactionType.swift in Sources */, + 0701B89F2C78F34A00DCD395 /* AccountStatisticsViewController.swift in Sources */, 2A84E87825D425750006FE9C /* AlertControllerFactory.swift in Sources */, 0761DEB228E1F54D00B90D2C /* StakingPoolCreateViewModel.swift in Sources */, FAD429032A86567F001D6A16 /* BackupCreatePasswordAssembly.swift in Sources */, @@ -16479,17 +17722,20 @@ FAD4290D2A86567F001D6A16 /* BannersViewModelFactory.swift in Sources */, FACD429B2A5BE811009975AA /* SubstrateStorageMigrator.swift in Sources */, F4A6C9E4265283EB00FABF98 /* StakingStateViewModelFactory+Alerts.swift in Sources */, - FAD5FF2E2C464717003201F5 /* NomisAccountStatisticsRequest.swift in Sources */, FAD429202A865680001D6A16 /* WalletNameProtocols.swift in Sources */, FA7741DE2B6A350200358315 /* StakingRewardFetcher.swift in Sources */, 84452F5825D5C30600F47EC5 /* FilesRepository.swift in Sources */, + 0701B9932C78FAF000DCD395 /* LiquidityPoolsListProtocols.swift in Sources */, FAD067A72C2044490050291F /* SubstrateDataModel.xcdatamodeld in Sources */, FAFFAE7C29AC84B10074AF1F /* KmmCallCodingPath.swift in Sources */, + 0701B9B32C78FBC600DCD395 /* AccountStatistics.swift in Sources */, FA2FC84128B3879900CC0A42 /* InsettedLabel.swift in Sources */, FAADC1AD29261F7000DA9903 /* PoolRolesConfirmRouter.swift in Sources */, F4871DF326D63E8700D27F23 /* AnalyticsRewardDetailsViewModelFactory.swift in Sources */, + 07ECB8032C6B4EA3000E0A14 /* TonConnectSessionCrypto.swift in Sources */, FA9A8F1F2A72573C008FA99F /* AlchemyHistory.swift in Sources */, 84873B0426029B75000A83EE /* StakingEstimationViewModel.swift in Sources */, + 0701B8F92C78F71800DCD395 /* OKXDexProtocol.swift in Sources */, AE6F7FE32685E812002BBC3E /* ValidatorListFilterViewLayout.swift in Sources */, FA169FA928BCBA1F00E8D2DC /* PoolStakingAccountSubscription.swift in Sources */, 84038FF026FFBE0600C73F3F /* JsonLocalStorageSubscriber.swift in Sources */, @@ -16498,6 +17744,8 @@ FAFFAE9129AC84B10074AF1F /* SubqueryStakeData.swift in Sources */, FA3067502B627D23006A0BA5 /* TokensLocksRequest.swift in Sources */, FA37AE352859C473001DCA96 /* StakingUnbondSetupParachainViewModelFactory.swift in Sources */, + 0701B8FC2C78F71800DCD395 /* OKXDexSubrouter.swift in Sources */, + 0701B8BC2C78F69500DCD395 /* Decimal+Formatting.swift in Sources */, F408E9BE26B80FD30043CFE0 /* AnalyticsSectionHeader.swift in Sources */, FA7254382AC2E48500EC47A6 /* ABIDecoding.swift in Sources */, FA6262562AC2E35A005D3D95 /* MultiSelectNetworksProtocols.swift in Sources */, @@ -16510,6 +17758,7 @@ 84F4A9A42551A8F3000CF0A3 /* AccountExportPasswordError.swift in Sources */, FAF9C2AE2AAF3FDF00A61D21 /* GetPreinstalledWalletAssembly.swift in Sources */, 84CA68DB26BEA33F003B9453 /* ChainRegistryFactory.swift in Sources */, + 0701B9A32C78FAF000DCD395 /* LiquidityPoolSupplyProtocols.swift in Sources */, FAD428982A860C9B001D6A16 /* EthereumNodeFetching.swift in Sources */, AE9EF255260A82830026910A /* StoriesViewController.swift in Sources */, 8463A72D25E3A8E1003B8160 /* ChainStorageDecodedItem.swift in Sources */, @@ -16536,14 +17785,18 @@ 8463A71A25E3116A003B8160 /* BalanceViewModel.swift in Sources */, 076D9D35293E34AF002762E3 /* LiquiditySourceType.swift in Sources */, FA286B0B2A3043DB008BD527 /* CrossChainConfirmationViewLayout.swift in Sources */, + 07ECB8052C6B71DE000E0A14 /* TonConnectApp.swift in Sources */, + 0701B9732C78FAF000DCD395 /* LiquidityPoolDetailsViewModel.swift in Sources */, C6CA3081286192C50087776D /* DelegationViewModel.swift in Sources */, FAD429052A86567F001D6A16 /* BackupCreatePasswordRouter.swift in Sources */, FACD42A42A5BE811009975AA /* KeystoreMigrator.swift in Sources */, FAA0137528DA12E3000A5230 /* StakingRedeemConfirmationRelaychainViewModelFactory.swift in Sources */, FA97E68B2A0281230035F5D7 /* GiantsquidRewardOperationFactory.swift in Sources */, + 0701B99B2C78FAF000DCD395 /* LiquidityPoolsOverviewRouter.swift in Sources */, FA2E9BC127A2A1000023FAD2 /* FilterSectionHeaderView.swift in Sources */, FA17B4D127E9CF21006E0735 /* main.swift in Sources */, FAA0133C28DA12B6000A5230 /* StakingPoolManagementProtocols.swift in Sources */, + 0701B8FF2C78F71800DCD395 /* OKXResponse.swift in Sources */, FACD42842A5BE7F4009975AA /* AwaitOperation.swift in Sources */, FA5137B829AC76EB00560EBA /* SubqueryHistoryOperationFactory.swift in Sources */, 8425EA9A25EA83FA00C307C9 /* ChainData+Value.swift in Sources */, @@ -16568,11 +17821,13 @@ 84031C17263EC95C008FD9D4 /* SetPayeeCall.swift in Sources */, 84100F3A26A60B0900A5054E /* YourValidatorListStatusSectionView.swift in Sources */, 84F30EEC25FFF40C00039D09 /* Nomination.swift in Sources */, - FAD5FF272C463C4F003201F5 /* AccountStatistics.swift in Sources */, + 0701B97C2C78FAF000DCD395 /* LiquidityPoolDetailsViewLayout.swift in Sources */, FA7254442AC2E48500EC47A6 /* WalletConnectSocketFactory.swift in Sources */, FA37AE3C2859CCD8001DCA96 /* StakingUnbondConfirmParachainViewModelFactory.swift in Sources */, + 0701B89E2C78F34A00DCD395 /* AccountStatisticsRouter.swift in Sources */, FA38C9C32761E77A005C5577 /* AccountViewModelFactory.swift in Sources */, FA8800562B2C610E000AE5EB /* ReefSubsquidHistory.swift in Sources */, + 073DE3112C5BB783003B4990 /* AssetTransactionData+Ton.swift in Sources */, 84F51060263AE530005D15AE /* TitleValueView.swift in Sources */, FACD427B2A5BE7C6009975AA /* RuntimeSnapshotReady.swift in Sources */, 84DB4E5C25EA71C100A6DF41 /* StringScaleMapper.swift in Sources */, @@ -16580,6 +17835,7 @@ 843C49D824DD98CC00B71DDA /* DerivationPathConstants.swift in Sources */, FA8FD18E2AFBA2EA00354482 /* AssetNetworksTableCellModel.swift in Sources */, AEE5FB1A26457AE9002B8FDC /* StakingRewardDestSetupProtocols.swift in Sources */, + 0701B8F22C78F71800DCD395 /* AccountStatisticsFetching.swift in Sources */, 8436EDE225895804004D9E97 /* RampProvider.swift in Sources */, 849013AC24A80984008F705E /* AppDelegate.swift in Sources */, FAD428942A834A8E001D6A16 /* TopViewControllerHelper.swift in Sources */, @@ -16616,17 +17872,19 @@ 8430AADC26022C58005B1066 /* NoStashState.swift in Sources */, 84F4A9182550331D000CF0A3 /* ExportOption.swift in Sources */, FA2FC80C28B3807C00CC0A42 /* StakingPoolJoinConfirmInteractor.swift in Sources */, - FAD240D92C64D3FF00B389FF /* ZChainHistoryResponse.swift in Sources */, 84FD3DB12540C09800A234E3 /* TransactionHistoryMergeManager.swift in Sources */, + 071606CC2C7C6C8800C1DF75 /* AssetModelMapper.swift in Sources */, 84038FEC26FFBA4D00C73F3F /* PriceLocalStorageSubscriber.swift in Sources */, 8473D4082657E9AD00B394B2 /* CrowdloanLastContribution.swift in Sources */, FA15BC0D2823ADCD0037C023 /* ParachainStakingLocalSubscriptionFactory.swift in Sources */, 07D05E6528EF0BE500B66C70 /* SelectValidatorsConfirmPoolViewModelState.swift in Sources */, 845FC93426B09EDB0021EC48 /* RoundedButton+Style.swift in Sources */, FABA163B2B0C9510001AF2F0 /* NetworkManagmentPresenter.swift in Sources */, + 07CA72C32CD8A63F00EF5279 /* CDChainAccountMigrationPolicyV12.swift in Sources */, FA4B929F2844D0C80003BCEF /* SnapKit.swift in Sources */, AE9EF25F260A82A50026910A /* StoriesPresenter.swift in Sources */, FA34EEF12B9875CC0042E73E /* AccountIdVariant.swift in Sources */, + 0701B9772C78FAF000DCD395 /* LiquidityPoolDetailsInteractor.swift in Sources */, 07089AFE28B7841A001566CA /* SheetAlertViewLayout.swift in Sources */, FA3067222B621540006A0BA5 /* LockProtocol.swift in Sources */, C63468DA28E5E3A3005CB1F1 /* TableView+Scrolling.swift in Sources */, @@ -16635,6 +17893,7 @@ 07DE95CB28A169A600E9C2CB /* AssetListSearchRouter.swift in Sources */, FA93A2EC2833B1000021330F /* RecommendedValidatorListRelaychainStrategy.swift in Sources */, 845C40792702571200BFA50B /* StakingRemoteSubscriptionService.swift in Sources */, + 0701B9752C78FAF000DCD395 /* LiquidityPoolDetailsAssembly.swift in Sources */, FAA0133A28DA12B6000A5230 /* StakingPoolManagementViewController.swift in Sources */, 8468B86A24F63CBA00B76BC6 /* AddAccount+AccountImportInteractor.swift in Sources */, 84B66A0B26FDB70F0038B963 /* CrowdloansListInteractor+Protocols.swift in Sources */, @@ -16678,7 +17937,6 @@ FAFBEE83284621900036D08C /* SelectedValidatorListParachainViewModelFactory.swift in Sources */, 84D1F2FB260F51770077DDFE /* SwitchAccount.swift in Sources */, 8428765D24ADDE0200D91AD8 /* ProfileInteractor.swift in Sources */, - FAB90CE92C6F584000D13804 /* ChainSelectionCollectionCell.swift in Sources */, 849014C124AA87E4008F705E /* LocalAuthProtocol.swift in Sources */, 841E6B0A25EC1C140007DDFE /* RelaychainValidatorOperationFactory.swift in Sources */, 8472C5B5265CF9C500E2481B /* StakingRewardDestConfirmProtocols.swift in Sources */, @@ -16689,22 +17947,26 @@ FAF5E9CE27E46D3E005A3448 /* URLConstants.swift in Sources */, 070CDD8B2ACBE59700F3F20A /* ReceiveAndRequestAssetProtocols.swift in Sources */, F477CD9026306DC6004DF739 /* StakingManageCell.swift in Sources */, + 0701B9982C78FAF000DCD395 /* LiquidityPoolsOverviewInteractor.swift in Sources */, AEA2C1B62681E9B20069492E /* ValidatorSearchViewFactory.swift in Sources */, AEE4E35225E945AA00D6DF31 /* RewardCalculatorFacade.swift in Sources */, FAAA29412B8DCED90089AFE6 /* StorageFallbackDecodingListWorker.swift in Sources */, + 0701B9652C78FAF000DCD395 /* LiquidityPools+ViewModel.swift in Sources */, + 0701B9922C78FAF000DCD395 /* LiquidityPoolsListAssembly.swift in Sources */, FA6C176429935DC800A55254 /* SubqueryRewardOperationFactory.swift in Sources */, AE4A71D42607B1440017C663 /* NetworkStakingInfoViewModel.swift in Sources */, - FA41B6292C64C15000D0713A /* VicscanHistoryResponse.swift in Sources */, FAADC1B82926597400DA9903 /* ScanQRInteractor.swift in Sources */, FAD067BF2C2044B10050291F /* AssetManagementInteractor.swift in Sources */, 8439398A2636E8840087658D /* YourValidatorListViewLayout.swift in Sources */, FA93A3012834C8240021330F /* ValidatorInfoRelaychainStrategy.swift in Sources */, 84378775264D2C6600E6AFD2 /* UsernameSetupModel.swift in Sources */, FAD4290F2A86567F001D6A16 /* BannerCollectionViewCell.swift in Sources */, + 0728BD1A2C99474B002369FD /* ConnectedAccountsViewModelFactory.swift in Sources */, 84DB4E2325E945E000A6DF41 /* SlashingSpans.swift in Sources */, FA93A2E42833B0520021330F /* RecommendedValidatorListFlow.swift in Sources */, 849014DB24AA8F60008F705E /* MainTabBarProtocol.swift in Sources */, FA286B152A3043DB008BD527 /* CrossChainConfirmationViewModelFactory.swift in Sources */, + 0701B99E2C78FAF000DCD395 /* LiquidityPoolSupplyViewModel.swift in Sources */, 0713097D28C63893002B17D0 /* ScamSyncService.swift in Sources */, 84786E1525FA57B90089DFF7 /* StakingLedger.swift in Sources */, 8497FC6026317783002FEAA7 /* AccountInfoViewModel.swift in Sources */, @@ -16714,6 +17976,7 @@ 8490142F24A935FE008F705E /* ControllerBackedProtocol.swift in Sources */, FAFFAE8B29AC84B10074AF1F /* SubqueryEraValidatorInfo.swift in Sources */, 84DF21A125347031005454AE /* DetailsDisplayTableViewCell.swift in Sources */, + 0701B9882C78FAF000DCD395 /* AvailableLiquidityPoolsListInteractor.swift in Sources */, FA256994274CE65100875A53 /* HTTPRequest.swift in Sources */, 07BF3D962B3D8B3A0046ABF4 /* PriceDataSource.swift in Sources */, AE2C845D25EE833A00986716 /* RewardViewModel.swift in Sources */, @@ -16723,7 +17986,9 @@ FA5137AE29AC6F2F00560EBA /* PolkaswapDisclaimerAssembly.swift in Sources */, FA9A8F052A6FADBD008FA99F /* EtherscanHistoryResponse.swift in Sources */, 8406B5AB26FBD9EB00635B61 /* AccountInfoUpdatingService.swift in Sources */, + 0701B8FB2C78F71800DCD395 /* OKXDexRouter.swift in Sources */, FA1109EB27A92D56003C2158 /* ChainAction.swift in Sources */, + 0701B8AC2C78F5DB00DCD395 /* FireHistoryOperationFactory.swift in Sources */, FA86442A276743BB00956D8E /* WalletTransactionHistoryDataState.swift in Sources */, FA8ED43628FD983A00EBB712 /* YourValidatorListRelaychainStrategy.swift in Sources */, AE6F7FE62685F2C3002BBC3E /* ValidatorListFilterViewModel.swift in Sources */, @@ -16750,6 +18015,7 @@ FA99426C28053CFA00D771E5 /* WalletDetailsFlow.swift in Sources */, FAC6CD902BA7FCA70013A17E /* AssetTransactionFee.swift in Sources */, FA9A8F262A72579D008FA99F /* AlchemySortOrder.swift in Sources */, + 07ECB7F32C69CF13000E0A14 /* TonConnectDessision.swift in Sources */, FAFFAEAC29AC90E50074AF1F /* SubqueryPayoutValidatorsForNominatorFactory.swift in Sources */, FA8800632B31A04C000AE5EB /* StakingAccountResolverAssembly.swift in Sources */, FAA013B328DA1355000A5230 /* StakingPoolRewards.swift in Sources */, @@ -16761,7 +18027,6 @@ 8401AEC72642A71D000B03E3 /* StakingRebondConfirmationPresenter.swift in Sources */, FAC6CDA12BA80CB10013A17E /* WalletTransactionType.swift in Sources */, FA74359F29C073790085A47E /* ChainSettingsMapper.swift in Sources */, - FA4B75B22C6F3270001B954F /* MultichainChainFetching.swift in Sources */, 844CB56226F943AD00396E13 /* WalletLocalSubscriptionFactory.swift in Sources */, 8490386B262E22DC0016D541 /* NominatorPayoutInfoFactory.swift in Sources */, C6264C362799F69900FCA0DB /* WalletDetailsPresenter.swift in Sources */, @@ -16780,6 +18045,7 @@ FAAF946C2A0CFF90009A4BA5 /* Array+Duplicates.swift in Sources */, 074EB7AD290B9F64000A2A6A /* AddressCopiedEvent.swift in Sources */, FAB16A312A9C9BBF00E71F43 /* NftCollectionCell.swift in Sources */, + 0701B8A92C78F5DB00DCD395 /* BlockscoutHistoryOperationFactory.swift in Sources */, FAFFAE8C29AC84B10074AF1F /* SubqueryDelegatorHistoryNodes.swift in Sources */, FA34EEEB2B98723C0042E73E /* BalanceLocksDetailViewLayout.swift in Sources */, 849014E024AA8F60008F705E /* MainTabBarWireframe.swift in Sources */, @@ -16799,21 +18065,24 @@ FADBA5F42B5FE5C900CFCF30 /* ChainAccountPresenter.swift in Sources */, 8467FCFC24E5C3BD005D486C /* URLHandlingService.swift in Sources */, F40966BA26B297D6008CD244 /* AnalyticsSummaryRewardViewModel.swift in Sources */, + 0701B99F2C78FAF000DCD395 /* LiquidityPoolSupplyViewModelFactory.swift in Sources */, FAA0133D28DA12B6000A5230 /* StakingPoolManagementPresenter.swift in Sources */, FAAA29422B8DCED90089AFE6 /* JSONRPCListWorker.swift in Sources */, 849013DB24A927E2008F705E /* Logger.swift in Sources */, 84443BA226C123F100C33B5D /* Data+Random.swift in Sources */, 07DE95CA28A169A600E9C2CB /* AssetListSearchAssembly.swift in Sources */, - FA273E5E2C4F680500F9CB13 /* AccountStatisticsViewModel.swift in Sources */, 070CDD872ACBE59700F3F20A /* QRView.swift in Sources */, FA6262582AC2E35A005D3D95 /* MultiSelectNetworksRouter.swift in Sources */, 84C6800E24D6ECE800006BF5 /* ExpandableActionControl.swift in Sources */, 8490148424AA27C1008F705E /* OperationManagerFacade.swift in Sources */, + 0701B9A02C78FAF000DCD395 /* LiquidityPoolSupplyAssembly.swift in Sources */, + 0701B9912C78FAF000DCD395 /* LiquidityPoolListViewModel.swift in Sources */, FAD067C72C2044B10050291F /* AssetManagementViewLayout.swift in Sources */, - FAD240DE2C64E97900B389FF /* KaiaHistoryResponse.swift in Sources */, + 0723EDA42C49369D00880620 /* TransferFlowUseCase.swift in Sources */, 2AD0A19025D3D1E100312428 /* GitHubPhishingServiceFactory.swift in Sources */, FA14AE892B0785670066CADF /* SoraSubsquidHistoryResponse.swift in Sources */, FAAA29572B8DED770089AFE6 /* MapKeyType.swift in Sources */, + 0715FCD42C65E96000AA674E /* TonWebBridgeHeaderView.swift in Sources */, FACD42BC2A5BE91E009975AA /* PortionRewardCalculatorEngine.swift in Sources */, AEF505A92620249F0098574D /* UIColor+HEX.swift in Sources */, FACD42A12A5BE811009975AA /* MultiassetV2MigrationPolicy.swift in Sources */, @@ -16849,6 +18118,7 @@ 8430AACC2602249B005B1066 /* InitialStakingState.swift in Sources */, FAAA294A2B8DCF350089AFE6 /* AsyncStorageRequestFactory+Extension.swift in Sources */, 84786DA825F9F58E0089DFF7 /* EraValidatorService+Fetch.swift in Sources */, + FA740A8D2CC8C03400981508 /* GradientBorderedTriangularedView.swift in Sources */, FAD428FF2A86567F001D6A16 /* BackupRiskWarningsAssembly.swift in Sources */, 8428769324AE046300D91AD8 /* AboutWireframe.swift in Sources */, FA6261F22AC2A535005D3D95 /* MIME+PathExtensions.swift in Sources */, @@ -16868,6 +18138,9 @@ 84DB4E6C25EA740600A6DF41 /* ConstantCodingPath.swift in Sources */, 84FA835A265CE5BE00FDF727 /* TitleMultiValueView.swift in Sources */, C6398F36287FD230008EF3BE /* StakingBondMoreConfirmParachainViewModelFactory.swift in Sources */, + 0701B9A12C78FAF000DCD395 /* LiquidityPoolSupplyInteractor.swift in Sources */, + 0701B8B12C78F63400DCD395 /* InfoTitleView.swift in Sources */, + 0701B9662C78FAF000DCD395 /* LiquidityPoolsConstants.swift in Sources */, 849014BB24AA87E4008F705E /* PinSetupWireframe.swift in Sources */, F40966FE26B29A58008CD244 /* ChartData.swift in Sources */, F40D0AF2260CCE5800CBD43B /* StakingPayoutBaseTableCell.swift in Sources */, @@ -16899,6 +18172,7 @@ FAD646DA284F58C1007CCB92 /* StakingUnbondSetupRelaychainStrategy.swift in Sources */, FA62625D2AC2E35A005D3D95 /* RawDataInteractor.swift in Sources */, FABA163D2B0C9510001AF2F0 /* NetworkManagmentProtocols.swift in Sources */, + 0701B9852C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmProtocols.swift in Sources */, 84113B6C255B2835009BD21A /* AccountCreateError.swift in Sources */, FA17B4AE27E84911006E0735 /* WarningAlertConfig.swift in Sources */, 849014C024AA87E4008F705E /* ScreenAuthorizationPresenter.swift in Sources */, @@ -16908,12 +18182,15 @@ FA4B92982844D0100003BCEF /* ShimmeredLabel.swift in Sources */, FA7254342AC2E48500EC47A6 /* String+Hex.swift in Sources */, AEB9979026119E4D005C60A5 /* StoriesViewModelFactory.swift in Sources */, + 0701B97A2C78FAF000DCD395 /* LiquidityPoolDetailsRouter.swift in Sources */, 84754C852510A1A400854599 /* ModalAlertPresenting.swift in Sources */, 8494424A265306BD0016E7BD /* ChangeRewardDestinationViewModel.swift in Sources */, + 0701B9052C78F71800DCD395 /* OKXDexAggregatorService.swift in Sources */, 845B821526EF657700D25C72 /* PersistentValueSettings.swift in Sources */, F4DCAE4726207EF900CCA6BF /* PayoutRewardsServiceProtocol.swift in Sources */, FAA0139128DA1303000A5230 /* StakingPayoutConfirmationPoolStrategy.swift in Sources */, FAC0BBD0291D0EB000E6F106 /* TipViewModel.swift in Sources */, + 07C438DC2C638BB800475B14 /* TonConnectRequestPayload.swift in Sources */, FA72543E2AC2E48500EC47A6 /* ABIEncoding.swift in Sources */, F4F65C3826D8B86F002EE838 /* FWXAxisEmptyValueFormatter.swift in Sources */, 8424DB0B26B8466A008C834F /* ValidatorOperationFactoryProtocol.swift in Sources */, @@ -16921,6 +18198,7 @@ 848FFE6625E6742400652AA5 /* EraValidatorService.swift in Sources */, 8493D3E927059B6700157009 /* StakingServiceFactory.swift in Sources */, 84729758260AA519009B86D0 /* SelectValidatorsConfirmInteractorBase.swift in Sources */, + 0701B97E2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityInteractor.swift in Sources */, FA4B92B22844D0E60003BCEF /* SelectCurrencyProtocols.swift in Sources */, 846CD24D2656FEB800A2E4B6 /* StorageKeysQueryService.swift in Sources */, FA286B1B2A3043DB008BD527 /* CrossChainProtocols.swift in Sources */, @@ -16928,6 +18206,7 @@ 8468B86C24F63CEF00B76BC6 /* AddAccount+AccountConfirmInteractor.swift in Sources */, F43A597B26D53775005E973D /* AnalyticsBaseViewController.swift in Sources */, FA256999274CE65100875A53 /* HTTPRequestBuilderProtocol.swift in Sources */, + 0701B9862C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmViewController.swift in Sources */, FAA0138C28DA1303000A5230 /* StakingPayoutConfirmationViewModelFactory.swift in Sources */, 84D8F16324D8194100AF43E9 /* TitleWithSubtitleTableViewCell.swift in Sources */, FA99C931283B4ADF007B1F83 /* SelectValidatorsConfirmRelaychainInitiatedStrategy.swift in Sources */, @@ -16943,7 +18222,6 @@ 84F30EE425FFAC0800039D09 /* StreamableProviderOptions+Substrate.swift in Sources */, FAF9C2A42AAF3FCC00A61D21 /* FeatureToggleService.swift in Sources */, FAD067CB2C2044F00050291F /* OnboardingConfigVersionResolver.swift in Sources */, - FAC0BBDA291D0EB000E6F106 /* SendRouter.swift in Sources */, FA2FC80D28B3807D00CC0A42 /* StakingPoolJoinConfirmRouter.swift in Sources */, 070B2C61289CFE0000F78F82 /* SelectedNetworkButton.swift in Sources */, C6A8D6BD27EF0CF40080F81C /* UIView.swift in Sources */, @@ -16956,7 +18234,6 @@ FA2FC7FA28B3807C00CC0A42 /* StakingPoolListTableCellModel.swift in Sources */, C661B3B227DF99A8005F1F7D /* AccountCreateViewController.swift in Sources */, 8461CC8326BC0006007460E4 /* MortalEraOperationFactory.swift in Sources */, - FA273E5C2C4F67AA00F9CB13 /* AccountStatisticsViewModelFactory.swift in Sources */, 8425EA8B25EA7AF200C307C9 /* UnappliedSlashes.swift in Sources */, 84893BFE24DA0000008F6A3F /* FieldStatus.swift in Sources */, 84F51053263AB440005D15AE /* StakingUnbondSetupLayout.swift in Sources */, @@ -16967,6 +18244,7 @@ FA62623B2AC2E35A005D3D95 /* WalletConnectConfirmationProtocols.swift in Sources */, 8448221826B1624E007F4492 /* SelectValidatorsConfirmViewLayout.swift in Sources */, C6267B9528BDF6A5001E31BF /* ChainAssetListPresenter.swift in Sources */, + 0778A12E2C58D0F2008A1254 /* TonJettonInjector.swift in Sources */, FAD429362A8656B7001D6A16 /* UICollectionView.swift in Sources */, 8490145624A9404E008F705E /* AttributedStringDecorator.swift in Sources */, 843910B4253EE52100E3C217 /* WalletBalanceChanged.swift in Sources */, @@ -16992,8 +18270,9 @@ 07BF3D9B2B3D8C370046ABF4 /* ManualOperation.swift in Sources */, 8490142C24A935FE008F705E /* ErrorPresentable.swift in Sources */, C6267B8F28BDF6A5001E31BF /* ChainAssetListViewModel.swift in Sources */, + 0701B8E92C78F71800DCD395 /* TonConnectError.swift in Sources */, 84DF21A5253473B0005454AE /* ModalInfoFactory.swift in Sources */, - 841AAC2726F6A2A500F0A25E /* ChainAccountFetching.swift in Sources */, + 0728BD162C984DA0002369FD /* ConnectedAccountsTableHeaderView.swift in Sources */, FA6262692AC2E35A005D3D95 /* WalletConnectProposalExpandableTableCell.swift in Sources */, 847C9620255340F2002D288F /* ExportGenericViewController.swift in Sources */, FA86442C27674A8600956D8E /* WalletTransactionHistoryViewState.swift in Sources */, @@ -17005,12 +18284,11 @@ FAFFAE9C29AC84B10074AF1F /* ParachainSubsquidRewardResponse.swift in Sources */, FACD42A52A5BE811009975AA /* Migrating.swift in Sources */, FAA013A328DA1328000A5230 /* TitleMultiValueViewModel.swift in Sources */, - 84729741260A9C13009B86D0 /* DisplayAddress.swift in Sources */, + 0701B9A22C78FAF000DCD395 /* LiquidityPoolSupplyPresenter.swift in Sources */, 84F4386125D9A83100AEDA56 /* TimeInterval+Time.swift in Sources */, - FAEFA6D52C6DCF7C00095C07 /* NetworkRequestUrlParameters.swift in Sources */, 844EFB5F265FCE180090ACB1 /* CrowdloanContributionInteractor.swift in Sources */, - FAD240E22C64EA6E00B389FF /* AssetTransactionData+KaiaHistory.swift in Sources */, FAA0138F28DA1303000A5230 /* StakingPayoutConfirmationPoolViewModelFactory.swift in Sources */, + 0701B9972C78FAF000DCD395 /* LiquidityPoolsOverviewAssembly.swift in Sources */, FAD428F32A86567F001D6A16 /* BackupPasswordViewLayout.swift in Sources */, 845BB8C025E4508800E5FCDC /* SS58FactoryExtensions.swift in Sources */, 070B2C59289CE43A00F78F82 /* SelectNetworkRouter.swift in Sources */, @@ -17019,9 +18297,11 @@ 8428765424ADDE0200D91AD8 /* ProfileViewModelFactory.swift in Sources */, FAA0134E28DA12D7000A5230 /* StakingUnbondConfirmPoolStrategy.swift in Sources */, C661B3B427DFBA41005F1F7D /* AccountInfoSubscriptionProviderWrapper.swift in Sources */, + 071606D12C7CB95500C1DF75 /* LocalListToggle.swift in Sources */, F40966C326B297D6008CD244 /* AnalyticsContainerViewLayout.swift in Sources */, 84E1CD02260DCC62001E81B5 /* SwitchAccount+OnboardingMainWireframe.swift in Sources */, FAFFAE8D29AC84B10074AF1F /* SubqueryDelegationAction.swift in Sources */, + 0701B9012C78F71800DCD395 /* OKXSwap.swift in Sources */, FACD42982A5BE811009975AA /* SubstrateStorageVersion.swift in Sources */, 84D1111326B932C40016D962 /* ChainNodeModel.swift in Sources */, 84C6801224D6F44400006BF5 /* ExpandableActionControl+Inspectable.swift in Sources */, @@ -17098,10 +18378,10 @@ AEE4E34D25E915ED00D6DF31 /* RewardCalculatorServiceProtocol.swift in Sources */, FA2FC82D28B3816D00CC0A42 /* StorageKeyDataExtractor.swift in Sources */, 849013DD24A927E2008F705E /* KeystoreExtensions.swift in Sources */, - FA236A412C4FA0A4009330F2 /* NomisJSONDecoder.swift in Sources */, FAD429062A86567F001D6A16 /* BackupCreatePasswordPresenter.swift in Sources */, FAD0679A2C2043FC0050291F /* ChainConnectionVisibilityHelper.swift in Sources */, FAD0068427EA255900C97E09 /* AboutTableViewCell.swift in Sources */, + 0772377A2C819A6600D8061F /* TonConnectMessageBuilderImpl.swift in Sources */, FAE39AF32A9E1A4F0011A9D6 /* ChainsSetupCompleted.swift in Sources */, AE20602C2636EA5800357578 /* MoonPayKeys.swift in Sources */, FA99C92F283B4AC5007B1F83 /* SelectValidatorsConfirmRelaychainInitiatedViewModelState.swift in Sources */, @@ -17114,13 +18394,16 @@ F40966CC26B297D6008CD244 /* AnalyticsStakeWireframe.swift in Sources */, FAD067C52C2044B10050291F /* AssetManagementTableHeaderView.swift in Sources */, AE9EF27D260B53130026910A /* StoriesViewFactory.swift in Sources */, + 0701B9782C78FAF000DCD395 /* LiquidityPoolDetailsPresenter.swift in Sources */, FAD428FC2A86567F001D6A16 /* BackupRiskWarningsInteractor.swift in Sources */, FA335AAC29C81ADC0003DBDD /* SubstrateCallFactoryProtocol.swift in Sources */, 84FAB0652542CA4200319F74 /* CDContactItem+CoreDataDecodable.swift in Sources */, FA44284229D44E51000142EB /* ChainStakingSettings.swift in Sources */, + 0715FCE32C66262100AA674E /* TonConnectResponses+Encodable.swift in Sources */, FABA161B2B0C941B001AF2F0 /* MultiassetV11MigrationPolicy.swift in Sources */, 8472974D260A9CDF009B86D0 /* SelectValidatorsConfirmationModel.swift in Sources */, 847C966325536455002D288F /* ExportRestoreJsonViewFactory.swift in Sources */, + 0701B8AD2C78F5DB00DCD395 /* KaiaHistoryOperationFactory.swift in Sources */, FAFFAE3829AC84180074AF1F /* ParachainSubsquidHistoryOperationFactory.swift in Sources */, FA6262372AC2E35A005D3D95 /* WalletConnectConfirmationViewController.swift in Sources */, C67E781B27B3AD510053346B /* CheckPincodeViewLayout.swift in Sources */, @@ -17159,7 +18442,6 @@ FA2DF9A02A8CA0F80047F440 /* NFTModel.swift in Sources */, FA62624B2AC2E35A005D3D95 /* WalletConnectActiveSessionsViewModelFactory.swift in Sources */, 84CA68E126BEAC7C003B9453 /* SpecVersionSubscriptionFactory.swift in Sources */, - FA41B6202C6495EE00D0713A /* 5ireHistoryResponse.swift in Sources */, AE2C846525EE884900986716 /* RewardViewModelFactory.swift in Sources */, 076D9D3B293E3511002762E3 /* SwapValues.swift in Sources */, DAB29F2A9C864D7FCF1AF934 /* UsernameSetupProtocols.swift in Sources */, @@ -17173,6 +18455,7 @@ 840BF22726C2C8A600E3A955 /* ChainSyncEvents.swift in Sources */, C6267B9028BDF6A5001E31BF /* ChainAccountBalanceCellViewModel.swift in Sources */, FA2FC81328B3807D00CC0A42 /* StakingPoolStartViewModelFactory.swift in Sources */, + 07ECB80D2C6C7411000E0A14 /* TonConnectEvent.swift in Sources */, C6CA307D285F61B70087776D /* ParachainState.swift in Sources */, F43A596A26D520E0005E973D /* EmptyStateViewCell.swift in Sources */, FAFFAE9829AC84B10074AF1F /* DelegatorHistoryResponse.swift in Sources */, @@ -17180,6 +18463,7 @@ AEA2C1B42681E99D0069492E /* ValidatorSearchProtocols.swift in Sources */, FA2569C1274CE74100875A53 /* AttentionView.swift in Sources */, 7489BDA1D23D8DF73E7EB9BC /* UsernameSetupWireframe.swift in Sources */, + 07230EAB2C73515E00B92466 /* DappDataSource.swift in Sources */, FAA0133428DA12B6000A5230 /* StakingPoolNetworkInfo.swift in Sources */, 84E1CCFA260DCBF9001E81B5 /* SwitchAccount+UsernameSetupWireframe.swift in Sources */, 84CFF1E626526FBC00DB7CF7 /* StakingBondMoreInteractor.swift in Sources */, @@ -17189,6 +18473,7 @@ FACD42A02A5BE811009975AA /* SingleToMultiassetMigrationPolicy.swift in Sources */, 84F4387525D9C6EB00AEDA56 /* SubstrateDataProviderFactory.swift in Sources */, 8430AB002602338D005B1066 /* PendingNominatorState.swift in Sources */, + 0701B9872C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmViewLayout.swift in Sources */, AE7129BC2608C069000AA3F5 /* RelaychainStakingInfoOperationFactory.swift in Sources */, 84754CA02513D83E00854599 /* AccountPickerViewModel.swift in Sources */, 076D9D4529405987002762E3 /* SlippageToleranceViewModelFactory.swift in Sources */, @@ -17196,12 +18481,12 @@ 84D8F16D24D82C7E00AF43E9 /* ModalPickerConfiguration.swift in Sources */, 07F817FB2AD4173100B87358 /* WalletConnectCoordinatorRouter.swift in Sources */, FAA013B128DA134B000A5230 /* PoolWithdrawUnbondedCall.swift in Sources */, + 07ECB8012C6A0F9B000E0A14 /* TonConnectSendDessision.swift in Sources */, C6CA20392B05EBFB001503C2 /* NftFiltersPresenter.swift in Sources */, FA936BF22872E35F0059B97A /* TitleSwitchViewModel.swift in Sources */, FAD4292E2A865680001D6A16 /* BackupWalletImportedProtocols.swift in Sources */, 84BAB6102642C286007782D0 /* SelectedRebondVariant.swift in Sources */, 84F5107C263C0C11005D15AE /* AnyProviderCleaning.swift in Sources */, - FAD5FF2B2C46464B003201F5 /* NomisAccountStatisticsFetcher.swift in Sources */, FAA0134628DA12CD000A5230 /* StakingUnbondSetupPoolViewModelState.swift in Sources */, 84BEE22325646AC000D05EB3 /* SelectedUsernameChanged.swift in Sources */, 8467FD4124ED3C72005D486C /* AlignableContentControl.swift in Sources */, @@ -17219,9 +18504,11 @@ 6B62E63FB9E379EA19A41464 /* AccountCreateProtocols.swift in Sources */, 84EBAB0B265E28590015E446 /* ChainDateCalculator.swift in Sources */, FAA013A728DA133E000A5230 /* ShadowRoundedBackground.swift in Sources */, + 07230EAD2C735AA200B92466 /* DappBrowserViewModelFactory.swift in Sources */, AE9EF26E260A82D50026910A /* SlideViewModel.swift in Sources */, 84754C9A2513871300854599 /* SNAddressType+Codable.swift in Sources */, F78EA110179B6D75DDF53F8B /* AccountCreateWireframe.swift in Sources */, + 0701B9022C78F71800DCD395 /* OKXSwapTransaction.swift in Sources */, 84DEAA7B265DB987000DDADE /* CrowdloanContributeCall.swift in Sources */, 84963D6E26F91826003FE8E4 /* RemoteSubscriptionRequests.swift in Sources */, FA402F2F27C7C646008CF986 /* ExportAction.swift in Sources */, @@ -17258,6 +18545,7 @@ 84E6D57C262E2CE8000EA3F5 /* OperationCombiningService.swift in Sources */, FA1D01FA2BBE713D005B7071 /* LiquidityPoolListViewModel.swift in Sources */, 0726FFAD2AC4399C00336D76 /* WalletConnectPolkadotParser.swift in Sources */, + 07D0BD452C6F191C001ECD58 /* DappBrowserSectionHeaderView.swift in Sources */, FA2222942BD2726F0031DE04 /* SkeletonLabel.swift in Sources */, FA22228D2BD237910031DE04 /* SubqueryPriceFetcher.swift in Sources */, FAED6F4427DA19C70051B337 /* AccountInfoSubscriptionAdapter.swift in Sources */, @@ -17265,6 +18553,7 @@ 846C372E26B199D10098F303 /* StakingDurationOperationFactory.swift in Sources */, 9B4F0484B81BBF8DFA618599 /* AccountCreateViewFactory.swift in Sources */, 846CDECD258D212D009F3E75 /* AlertImageWithTitleView.swift in Sources */, + 071606C62C7C6C3200C1DF75 /* PricesService.swift in Sources */, FA936BE62872E3300059B97A /* ExistentialDepositCurrencyId.swift in Sources */, 84D8F15B24D8136700AF43E9 /* ModalPickerCellProtocol.swift in Sources */, 84F4386625D9B8C600AEDA56 /* TypeRegistryPrepared.swift in Sources */, @@ -17276,12 +18565,14 @@ AEE5FB0526415E5D002B8FDC /* StakingRebondSetupViewFactory.swift in Sources */, AEAC68F726E9FB8400346599 /* CoingeckoOperationFactory.swift in Sources */, FA3430F2285065BD002B5975 /* StakingUnbondConfirmRelaychainViewModelFactory.swift in Sources */, + 0701B8FA2C78F71800DCD395 /* OKXDexQuote.swift in Sources */, C63FE88A29000EB500E97E8E /* FearlessKeyboardHandler.swift in Sources */, FAA0138D28DA1303000A5230 /* StakingPayoutConfirmationrelaychainStrategy.swift in Sources */, FA904D942B04AEDB00DAEC2D /* SortFilterCellViewModel.swift in Sources */, FAA0137128DA12E3000A5230 /* StakingRedeemConfirmationParachainStrategy.swift in Sources */, 846042C02666E2C800CFFCFC /* KaruraResultData.swift in Sources */, 84BE20A825E8D93E00B4748C /* Data+StorageKey.swift in Sources */, + 0701B9A42C78FAF000DCD395 /* LiquidityPoolSupplyRouter.swift in Sources */, 84EBC55224F660A700459D15 /* EventProtocols.swift in Sources */, AE6F7FE02685E812002BBC3E /* ValidatorListFilterProtocols.swift in Sources */, 84C6801624D7036B00006BF5 /* SubtitleActionControl.swift in Sources */, @@ -17293,6 +18584,7 @@ FA8644472768522000956D8E /* HistoryHeaderType.swift in Sources */, F40966C126B297D6008CD244 /* AnalyticsPeriodView.swift in Sources */, FA7254372AC2E48500EC47A6 /* Data+Length.swift in Sources */, + 0701B8F02C78F71800DCD395 /* NomisJSONDecoder.swift in Sources */, FA286B172A3043DB008BD527 /* CrossChainViewController.swift in Sources */, 84D97EC82520D32000F07405 /* PolkadotIcon+Image.swift in Sources */, F4A198F3263299C900CD6E61 /* StakingBalanceData.swift in Sources */, @@ -17302,6 +18594,7 @@ 84A2C90424E07F400020D3B7 /* AccountOperationFactoryError.swift in Sources */, FA38C98E275DFB8E005C5577 /* BaseTopBar.swift in Sources */, FAB707652BB3C06900A1131C /* AssetsAccountRequest.swift in Sources */, + 0701B8ED2C78F71800DCD395 /* TonConnectRequestPayload.swift in Sources */, AE6DE7322627EA930018D5B5 /* PayoutCall.swift in Sources */, FAD0068127EA252400C97E09 /* AboutViewState.swift in Sources */, 84DD5F26263D72C400425ACF /* ExtrinsicFeeProxy.swift in Sources */, @@ -17347,7 +18640,7 @@ 84EBC55124F660A700459D15 /* EventVisitor.swift in Sources */, FA93A313283653B70021330F /* ValidatorListFilterFlow.swift in Sources */, 8454C21D2632A78900657DAD /* EventRecord.swift in Sources */, - FA01B2BB2C6213740078A35B /* InfoTitleView.swift in Sources */, + 0723EDA02C48E37400880620 /* SoraQrTransferFlowUseCase.swift in Sources */, FAD429002A86567F001D6A16 /* BackupRiskWarningsViewController.swift in Sources */, FAC0BBE6291D11D600E6F106 /* SelectableAmountInputView.swift in Sources */, 84C4C2F9255DB9510045B582 /* PinChangeInteractor.swift in Sources */, @@ -17383,6 +18676,7 @@ FAD429112A86567F001D6A16 /* CollectionViewDataSource.swift in Sources */, FA93A2FF2834AF9E0021330F /* ValidatorInfoParachainViewModelState.swift in Sources */, FA72543D2AC2E48500EC47A6 /* ABI.swift in Sources */, + 0701B99A2C78FAF000DCD395 /* LiquidityPoolsOverviewProtocols.swift in Sources */, 94B0F0C84AF74B3CD7223C3A /* AccountConfirmPresenter.swift in Sources */, 8468B87224F63D3A00B76BC6 /* AddAccount+AccountCreateWireframe.swift in Sources */, C65A6594288E5E0500679D65 /* NSLockExtension.swift in Sources */, @@ -17392,6 +18686,7 @@ FAFFAE8829AC84B10074AF1F /* SubqueryExtrinsic.swift in Sources */, 8472C5B2265CF9C500E2481B /* StakingRewardDestConfirmInteractor.swift in Sources */, FACD42B42A5BE8E1009975AA /* CheckPincodeWireframe.swift in Sources */, + 0701B8BF2C78F6C400DCD395 /* AccountScoreViewModel.swift in Sources */, 846CA77A27099B1E0011124C /* StakingAnalyticsLocalSubscriptionFactory.swift in Sources */, FA62626E2AC2E35A005D3D95 /* WalletConnectProposalWalletsTableCell.swift in Sources */, FAADC1B62926597400DA9903 /* ScanQRAssembly.swift in Sources */, @@ -17399,7 +18694,6 @@ 8D9BC9C36DC891CDD900A895 /* AccountConfirmViewController.swift in Sources */, FA9A8F472A82005F008FA99F /* EthereumWalletRemoteSubscriptionService.swift in Sources */, E14F809C3917EFA4B5388AC8 /* AccountConfirmViewFactory.swift in Sources */, - FAC0BBD3291D0EB000E6F106 /* SendDependencyContainer.swift in Sources */, FA34EED52B98723C0042E73E /* OnboardingStartProtocols.swift in Sources */, AE9EF264260A82B80026910A /* StoriesWireframe.swift in Sources */, 848EAEB02659310A00676CEA /* CrowdloanStatus.swift in Sources */, @@ -17422,6 +18716,7 @@ FA14AE8B2B0788D20066CADF /* AssetTransactionData+SoraSubsquidHistory.swift in Sources */, FAE5858F2B0764ED00240FE1 /* SoraSubsquidHistoryOperationFactory.swift in Sources */, 84F47D4B2666EF1C00F7647A /* KaruraStatementData.swift in Sources */, + 07CA72C52CD8AD0100EF5279 /* CDMetaAccountMigrationPolicy.swift in Sources */, 8443FE24255586230092893D /* ExportMnemonicConfirmProtocols.swift in Sources */, FA93A2E128323CF10021330F /* CustomValidatorListRelaychainStrategy.swift in Sources */, C6DC2D602B18411000BAA4DB /* UIImageView+gif.swift in Sources */, @@ -17452,7 +18747,6 @@ C665E4F029C35801001946D1 /* TimeFormatter.swift in Sources */, 073417B3298BA28300104F41 /* EquilibriumTotalBalanceServiceFactory.swift in Sources */, 84FAB0632542C8D600319F74 /* ContactItem.swift in Sources */, - FAD5FF252C463C07003201F5 /* AccountStatisticsFetching.swift in Sources */, C67E781927B3AC350053346B /* CheckPincodeViewController.swift in Sources */, FA5137B029AC6F2F00560EBA /* PolkaswapDisclaimerProtocols.swift in Sources */, FACD42972A5BE811009975AA /* SettingsMigrator.swift in Sources */, @@ -17462,6 +18756,7 @@ F4F65C3D26D8B9DD002EE838 /* FWYAxisChartFormatter.swift in Sources */, 847C963525534E41002D288F /* UIFactory.swift in Sources */, 07BFF8AA2AD666CE005A5C58 /* AutoNamespacesError+Extension.swift in Sources */, + 0701B8F72C78F71800DCD395 /* OKXDexSwapRequestParameters.swift in Sources */, F40966D026B297D7008CD244 /* AnalyticsStakeInteractor.swift in Sources */, 8416A2D8265A99DE0052EE89 /* CrowdloanViewConstants.swift in Sources */, 84CA68D526BE9E62003B9453 /* ChainRegistry.swift in Sources */, @@ -17474,7 +18769,6 @@ 84C91FAA261E724F002796B9 /* SwitchTableViewCell.swift in Sources */, 84644A0725670B03004EAA4B /* TriangularedBlurView.swift in Sources */, AEA2C1BE2681E9DD0069492E /* ValidatorSearchViewController.swift in Sources */, - C6FBA6D82C65DDBC008B18D9 /* AssetModelMapper.swift in Sources */, FA34EED92B98723C0042E73E /* OnboardingStartInteractor.swift in Sources */, 84A6171B2625AC3E007B75E1 /* CallCodingPath.swift in Sources */, FA936BF12872E35F0059B97A /* TitleSwitchTableViewCellModelFactory.swift in Sources */, @@ -17485,6 +18779,7 @@ FA34EE972B9871200042E73E /* OnboardingPageInfo.swift in Sources */, FA2FC81B28B3807D00CC0A42 /* StakingPoolStartViewLayout.swift in Sources */, 8460516D25536C4800A1F0B4 /* ExportOption+ViewModel.swift in Sources */, + 0701B9832C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityViewLayout.swift in Sources */, FA286B192A3043DB008BD527 /* CrossChainPresenter.swift in Sources */, F458D3982642911B0055CB75 /* ControllerAccountViewModel.swift in Sources */, FAADC1A629261F7000DA9903 /* PoolRolesConfirmViewModelFactory.swift in Sources */, @@ -17499,16 +18794,18 @@ 84786E1025FA20D30089DFF7 /* StakingAccountResolver.swift in Sources */, 07DE95BD28A1119400E9C2CB /* BalanceInfoViewLayout.swift in Sources */, 070CDD6D2ACAACB900F3F20A /* EthereumRemoteBalanceFetching.swift in Sources */, + 0701B98D2C78FAF000DCD395 /* UserLiquidityPoolsListViewModelFactory.swift in Sources */, FAAA293F2B8DCED90089AFE6 /* MapKeyEncodingWorker.swift in Sources */, FAA086D028470B3200CC2F33 /* SelectValidatorsConfirmParachainViewModelState.swift in Sources */, FA62625B2AC2E35A005D3D95 /* MultiSelectNetworksViewModel.swift in Sources */, FAB707672BB3C1A400A1131C /* AssetAccountInfo.swift in Sources */, FAD429182A86567F001D6A16 /* BackupSelectWalletTableCell.swift in Sources */, FA34EEDD2B98723C0042E73E /* OnboardingPageCell.swift in Sources */, + 07D0BD432C6F179E001ECD58 /* DappBrowserListCell.swift in Sources */, FAE9EBA7288ABBFC009390B6 /* AnalyticsRewardsRelaychainViewModelState.swift in Sources */, 07F2B76328ACDA7800280C38 /* RuntimeHotBootSnapshotFactory.swift in Sources */, FA38C9C12761E68B005C5577 /* AccountViewModel.swift in Sources */, - FAFB47D72ABD589C0008F8CA /* EthereumBalanceRepositoryCacheWrapper.swift in Sources */, + FAFB47D72ABD589C0008F8CA /* BalanceRepositoryCacheWrapper.swift in Sources */, 8436E94426C853E4003D4EA7 /* RuntimeSnapshotOperationFactory.swift in Sources */, F40966C726B297D6008CD244 /* AnalyticsRewardsViewFactory.swift in Sources */, 8489EDBA264DB25500FF997E /* RecommendationsComposing.swift in Sources */, @@ -17537,12 +18834,14 @@ 07E346D4288E616E00A8FAEC /* WalletBalanceBuilder.swift in Sources */, 84F30EA125FD3EE700039D09 /* ChildSubscriptionFactory.swift in Sources */, 8401AEC12642A71D000B03E3 /* StakingRebondConfirmationViewModel.swift in Sources */, + 0701B9892C78FAF000DCD395 /* AvailableLiquidityPoolsListPresenter.swift in Sources */, FAD4290B2A86567F001D6A16 /* DefaultFlowLayout.swift in Sources */, FF2BFCFD981582584A9DA42D /* NetworkInfoWireframe.swift in Sources */, FA9A8F452A78C045008FA99F /* SubstrateTransferService.swift in Sources */, 84E1CD0C260DCD23001E81B5 /* SwitchAccount+AccountConfirmWireframe.swift in Sources */, FA584C8C2AB420ED00F6F020 /* AlchemyNftInfo.swift in Sources */, AE6F7FDF2685E812002BBC3E /* ValidatorListFilterPresenter.swift in Sources */, + 0701B9A82C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewModelFactory.swift in Sources */, 8430AAF626023087005B1066 /* NominatorState.swift in Sources */, 07B018DB28C9D66300E05510 /* ScamWarningExpandableView.swift in Sources */, C044E792971B542B79B9A88F /* NetworkInfoPresenter.swift in Sources */, @@ -17586,7 +18885,6 @@ 84CA68CF26BD6872003B9453 /* RuntimeSyncService.swift in Sources */, 84EA0B2A25E579DF00AFB0DC /* AssetBalanceViewModel.swift in Sources */, FA6DB7C52757C9B000233FBA /* ChainAccountViewController.swift in Sources */, - 07BF3D9F2B3D98850046ABF4 /* BlockscoutHistoryOperationFactory.swift in Sources */, 84FD3DAF2540BEA000A234E3 /* TransactionHistoryItem+Status.swift in Sources */, 84CEAAF326D6ED870021B881 /* KeystoreTag.swift in Sources */, 074EB7AF290BA057000A2A6A /* ConnectionOfflineEvent.swift in Sources */, @@ -17595,6 +18893,7 @@ 8488ECEA258CE456004591CC /* PurchaseViewController.swift in Sources */, FA3430F828508C10002B5975 /* StakingRedeemRelaychainViewModelState.swift in Sources */, 847C9659255362F7002D288F /* RestoreJson.swift in Sources */, + 0701B9AC2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmProtocols.swift in Sources */, FAA0133328DA12B6000A5230 /* StakingPoolMainViewLayout.swift in Sources */, FA004891282CCA400032FF49 /* SelectValidatorsStartParachainStrategy.swift in Sources */, FAFFAEA129AC84D30074AF1F /* LinkDecorator.swift in Sources */, @@ -17611,10 +18910,8 @@ FAC6CDB12BA821B00013A17E /* WalletImageViewModelProtocol.swift in Sources */, 8430AAF12602306A005B1066 /* BondedState.swift in Sources */, FAA086D628475AF300CC2F33 /* ParachainStakingDelegatorState.swift in Sources */, - FA93D1F72C61E52C006B494E /* BlockExplorerApiKey.swift in Sources */, 84C3F77B2601F08B00D47501 /* NominationViewModel.swift in Sources */, 07DE95D428A225A100E9C2CB /* WalletMainContainerViewModelFactory.swift in Sources */, - FA4B75AF2C6F325F001B954F /* MultichainAssetFetching.swift in Sources */, 846A2C4B2529F99400731018 /* AccountRepositoryFactory.swift in Sources */, AE528E4D26852C380058935A /* ValidatorSearchViewModel.swift in Sources */, F408E9B626B807200043CFE0 /* AnalyticsRewardsHeaderView.swift in Sources */, @@ -17625,7 +18922,9 @@ F4C086C726D1159E00716AEC /* SubqueryEraStakersInfoSource.swift in Sources */, C6CA20412B072955001503C2 /* NftFiltersAssembly.swift in Sources */, FA6DB7C32757C9B000233FBA /* ChainAccountViewLayout.swift in Sources */, + 0715FCE12C6620B500AA674E /* DappBridgeResponse.swift in Sources */, AEF5071E262369C00098574D /* PurchaseProviderProtocol.swift in Sources */, + 0701B8EE2C78F71800DCD395 /* NomisAccountStatisticsRequest.swift in Sources */, FA34EEB22B9872240042E73E /* StakingLedgerRequest.swift in Sources */, FAA0138028DA12F0000A5230 /* StakingRedeemPoolStrategy.swift in Sources */, FA9A8F1C2A72573C008FA99F /* AlchemyResponse.swift in Sources */, @@ -17638,14 +18937,13 @@ FA34EEAE2B9872180042E73E /* NominationPoolsPoolMembersRequest.swift in Sources */, F4D96B672637E89300B23D3D /* UIView+Separator.swift in Sources */, 070CDD862ACBE59700F3F20A /* ReceiveAndRequestAssetViewLayout.swift in Sources */, + 0701B9C02C78FD8800DCD395 /* 5ireHistoryResponse.swift in Sources */, 99A4B2A357ADEA45EFF515A5 /* AccountExportPasswordProtocols.swift in Sources */, 64B508A1A3D820AA8DBCFAA3 /* AccountExportPasswordWireframe.swift in Sources */, FAF5E9D627E46D77005A3448 /* AppVersionError.swift in Sources */, F462B351260C7DBE0005AB01 /* StakingRewardHistoryTableCell.swift in Sources */, - FAB90CEF2C6F5B4F00D13804 /* MultichainAssetSelectionViewModelFactory.swift in Sources */, FA72543C2AC2E48500EC47A6 /* ABIParameterTypes.swift in Sources */, AE89720825F12143008EC414 /* ValidatorInfoViewModel.swift in Sources */, - FA41B61D2C64856D00D0713A /* FireHistoryOperationFactory.swift in Sources */, FA864445276851CF00956D8E /* ContainerViewController.swift in Sources */, FA9A8F272A72579D008FA99F /* AlchemyTokenCategory.swift in Sources */, C65C7F6B2AD82B8D0069D877 /* LogoutEvent.swift in Sources */, @@ -17664,8 +18962,10 @@ C661B3B027DF75D4005F1F7D /* AccountCreateViewModel.swift in Sources */, 61E0DC83C1D60D677274D7CE /* AccountExportPasswordViewFactory.swift in Sources */, FA93A30A2834FCA10021330F /* ValidatorSearchRelaychainViewModelState.swift in Sources */, + 07230EAF2C73608900B92466 /* DappBrowserViewModel.swift in Sources */, 1BFC90E1D8646F7429FFD5E6 /* ExportMnemonicProtocols.swift in Sources */, 3133215566E418F40844A60E /* ExportMnemonicWireframe.swift in Sources */, + 0701B8A02C78F34A00DCD395 /* AccountStatisticsViewLayout.swift in Sources */, 84F77AAA265EE86B00F54885 /* CrowdloanErrorPresentable.swift in Sources */, 84CFF1EC26526FBC00DB7CF7 /* StakingBondMoreConfirmRelaychainViewModelFactory.swift in Sources */, FAC0BBB2291D074500E6F106 /* RuntimeCallPath.swift in Sources */, @@ -17680,7 +18980,6 @@ FAFFAE9929AC84B10074AF1F /* SubsquidHistoryResponse.swift in Sources */, 88F3A9FB9CEA464275F1115E /* ExportMnemonicViewFactory.swift in Sources */, FAFFAEA429AC850A0074AF1F /* TimeInterval+Debounce.swift in Sources */, - FAD240D62C64D3D100B389FF /* ZChainHistoryOperationFactory.swift in Sources */, F4D551A12643DD240002363F /* AccountSelectionPresentable.swift in Sources */, 07696A2D28BDC81F00B17040 /* ReaderWriterLock.swift in Sources */, FA8ED43828FD984500EBB712 /* YourValidatorListRelaychainViewModelState.swift in Sources */, @@ -17693,6 +18992,7 @@ 0CA307BC2F570941CD22C9AA /* ExportMnemonicConfirmViewFactory.swift in Sources */, 844CB57A26FA706C00396E13 /* ChainAssetDisplayInfo.swift in Sources */, 845B821F26EF8E8900D25C72 /* ManagedMetaAccountModel.swift in Sources */, + 0701B9032C78F71800DCD395 /* OKXToken.swift in Sources */, FAFFAE7829AC84B10074AF1F /* SubquerySwap.swift in Sources */, FA389B3A2840CBEA00FF16E9 /* ValidatorSearchParachainViewModelFactory.swift in Sources */, 8430AB1226023C9F005B1066 /* PendingBondedState.swift in Sources */, @@ -17702,12 +19002,12 @@ 841E6AFE25EC12DE0007DDFE /* SelectedValidatorInfo.swift in Sources */, C89D156BA8B690E8E4DE19ED /* ExportSeedProtocols.swift in Sources */, 076D9D2E2939B780002762E3 /* PolkaswapOperationFactoryProtocol.swift in Sources */, - FAB482F12C58AC7F00594D89 /* ChainModel+Nomis.swift in Sources */, FA74359D29C0736F0085A47E /* StorageWrapper.swift in Sources */, 84B64E3F2704567700914E88 /* RelaychainStakingLocalStorageSubscriber.swift in Sources */, BD571417BD18C711B76E1D62 /* ExportSeedWireframe.swift in Sources */, 8463A73825E3AA47003B8160 /* AccountInfo.swift in Sources */, FA53D8922C08510000173ADB /* LiquidityPoolSupplyViewModelFactory.swift in Sources */, + 0701B9AF2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewLayout.swift in Sources */, ABA3D873BBECB7F4BD670872 /* ExportSeedPresenter.swift in Sources */, FA5DD0E3278EFE2500967047 /* WalletTransactionHistoryTableSectionHeader.swift in Sources */, FAA0134728DA12CD000A5230 /* StakingUnbondSetupPoolStrategy.swift in Sources */, @@ -17718,7 +19018,6 @@ 886E8CF81EF2566D98D9693E /* ExportSeedViewFactory.swift in Sources */, C6DC2D5A2B1458CC00BAA4DB /* CollectionViewSectionHeader.swift in Sources */, C20ED4531583D0C8E38715E0 /* PurchaseProtocols.swift in Sources */, - FA41B6222C64988700D0713A /* AssetTransactionData+FireHistory.swift in Sources */, 3CA86739CB09801714B194BD /* PurchaseWireframe.swift in Sources */, 84FB298C2639ABA500BE0FCD /* YourValidatorList.swift in Sources */, FA8ED43D28FD98BE00EBB712 /* YourValidatorListPoolStrategy.swift in Sources */, @@ -17732,11 +19031,10 @@ FAF9C2B22AAF3FDF00A61D21 /* GetPreinstalledWalletPresenter.swift in Sources */, 90EFE3768F1375470FDBE6F6 /* PurchaseViewFactory.swift in Sources */, F4A198EE2631AA2000CD6E61 /* StakingBalanceUnbondingItemView.swift in Sources */, - FAFB5EE22C5A2CE80015D3DD /* FWCosmosView.swift in Sources */, C63468E228F2C964005CB1F1 /* ContactTableCell.swift in Sources */, 076D9D57294B38E1002762E3 /* PolkaswapPreviewParams.swift in Sources */, + 07ECB80B2C6C6E76000E0A14 /* TonConnectError.swift in Sources */, FA7254432AC2E48500EC47A6 /* WalletConnectService.swift in Sources */, - FA4B75B42C6F333A001B954F /* OKXMultichainChainFetching.swift in Sources */, 845532D226846B6800C2645D /* ParachainLeaseInfo.swift in Sources */, 84DE8BD6264A651A002AF1EF /* RewardSelectionView+Inspectable.swift in Sources */, 8472C5AD265CF9C500E2481B /* StakingRewardDestConfirmViewModelFactory.swift in Sources */, @@ -17793,6 +19091,7 @@ FAD067C92C2044D30050291F /* ChainAssetListViewLayout.swift in Sources */, 0713098128C6F7BB002B17D0 /* CDScamInfo+CoreDataCodable.swift in Sources */, FA93A3162836542D0021330F /* ValidatorListFilterRelaychainViewModelState.swift in Sources */, + 07B56CFA2C520B5B00E924AA /* TonTransferFlowUseCase.swift in Sources */, FA8644512768A13400956D8E /* TwoLabelView.swift in Sources */, F477CD3A262EE0E7004DF739 /* StakingRewardDetailsViewModelFactory.swift in Sources */, 846CA77E2709A34D0011124C /* StakingAnalyticsLocalStorageSubscriber.swift in Sources */, @@ -17808,6 +19107,8 @@ FA286B182A3043DB008BD527 /* CrossChainInteractor.swift in Sources */, FA6C175429935DAE00A55254 /* AssetTransactionData+SubqueryHistory.swift in Sources */, C6584E352982524700592A92 /* WalletTransactionHistoryDependencyContainer.swift in Sources */, + 0701B8AB2C78F5DB00DCD395 /* ZChainHistoryOperationFactory.swift in Sources */, + 07ECB8072C6B7380000E0A14 /* CDTonConnectedApp+CoreDataDecodable.swift in Sources */, FAE9EBA9288ABC0C009390B6 /* AnalyticsRewardsRelaychainViewModelFactory.swift in Sources */, FA6C17912993601A00A55254 /* AddressChainDefiner.swift in Sources */, FAFFAE7629AC84B10074AF1F /* TransactionContextKeys.swift in Sources */, @@ -17827,6 +19128,7 @@ FA4C3D122886794D00176398 /* SelfSizingTableView.swift in Sources */, CC545DF80038901FA06FDD58 /* SelectValidatorsConfirmViewController.swift in Sources */, 1F88F3DBFA0BD6D0FDF558F3 /* SelectValidatorsConfirmViewFactory.swift in Sources */, + 0701B9AA2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmInteractor.swift in Sources */, FA38C9A1275FD6B9005C5577 /* BundleImageViewModel.swift in Sources */, D344C6DAC1F8BB6152BA8DD0 /* RecommendedValidatorListProtocols.swift in Sources */, FA4B92A02844D0C80003BCEF /* Optional.swift in Sources */, @@ -17835,6 +19137,7 @@ FAD428F72A86567F001D6A16 /* BackupPasswordRouter.swift in Sources */, FA93A2EA2833B0F90021330F /* RecommendedValidatorListRelaychainViewModelFactory.swift in Sources */, 0678271BE1BA5BBC084F478A /* RecommendedValidatorListWireframe.swift in Sources */, + 0701B9942C78FAF000DCD395 /* LiquidityPoolsListRouter.swift in Sources */, F441BE0E263984DD0096B67B /* BondExtraCall.swift in Sources */, FA8810D52BDCD19D0084CC4B /* UserLiquidityPoolsListViewModelFactory.swift in Sources */, BA7AEE82627CFC0AFD69B299 /* RecommendedValidatorListPresenter.swift in Sources */, @@ -17843,7 +19146,9 @@ FAFFAE8329AC84B10074AF1F /* SubqueryHistory.swift in Sources */, B071927DF8DD5C3CA84494BA /* RecommendedValidatorListViewController.swift in Sources */, FAD428962A834BA8001D6A16 /* UIApplication+TopViewController.swift in Sources */, + 075E5FD12C7F1A630044C142 /* TonConnectService.swift in Sources */, D6511F7C3E55197F82AB552C /* RecommendedValidatorListViewFactory.swift in Sources */, + 07DCB8622CD363EF00A01C64 /* TonConstansts.swift in Sources */, C7D77690E10875CF1856EBA1 /* StakingRewardPayoutsProtocols.swift in Sources */, FA936BCE286C41DF0059B97A /* StakingRebondConfirmationRelaychainStrategy.swift in Sources */, FA4B928F284493C60003BCEF /* DelegateCall.swift in Sources */, @@ -17859,6 +19164,7 @@ 58F693958EF69F59D7C9760E /* StakingRewardPayoutsInteractor.swift in Sources */, FAA0139628DA1312000A5230 /* StakingBondMoreConfirmationPoolViewModelState.swift in Sources */, FAD428FA2A86567F001D6A16 /* BackupRiskWarningsViewLayout.swift in Sources */, + 0701B8BB2C78F69500DCD395 /* ChainModel+Nomis.swift in Sources */, 50758C9BBB27AE5732FF78BA /* StakingRewardPayoutsViewController.swift in Sources */, AEF507AF262423FD0098574D /* HmacSigner.swift in Sources */, 3229E306230161AA99B14BDD /* StakingRewardPayoutsViewFactory.swift in Sources */, @@ -17866,16 +19172,17 @@ FA17B4BE27E892CA006E0735 /* AppUpdatePresentable.swift in Sources */, FAAF61742877DBC50094B4BC /* EthereumIcon.swift in Sources */, 7E1A03082260E0D31AD394CA /* StakingRewardDetailsProtocols.swift in Sources */, + 0701B8F12C78F71800DCD395 /* NomisRequestSigner.swift in Sources */, FA34EEE82B98723C0042E73E /* BalanceLocksDetailRouter.swift in Sources */, 65909D701527D99837B439D9 /* StakingRewardDetailsWireframe.swift in Sources */, FA62623E2AC2E35A005D3D95 /* WalletConnectConfirmationInteractor.swift in Sources */, 6A977B56FD6441F52660771C /* StakingRewardDetailsPresenter.swift in Sources */, - 845B821926EF808D00D25C72 /* MetaAccountMapper.swift in Sources */, 19A29027666EB5388CBFAD61 /* StakingRewardDetailsInteractor.swift in Sources */, F47BBD692630BB3C0087DA11 /* StakingBalanceViewFactory.swift in Sources */, 846AC7EF2638D9200075F7DA /* YourValidatorTableCell.swift in Sources */, FA9A8F432A78C03D008FA99F /* EthereumTransferService.swift in Sources */, C937154FA9021AECD72A871B /* StakingRewardDetailsViewController.swift in Sources */, + 07ECB7FD2C6A07C1000E0A14 /* SendTransactionSignRequest.swift in Sources */, FA2FC81028B3807D00CC0A42 /* StakingPoolJoinConfirmAssembly.swift in Sources */, AEA0C8B8267C905500F9666F /* SelectedValidatorCell.swift in Sources */, 20B2942A4241F6713A1C70D9 /* StakingRewardDetailsViewFactory.swift in Sources */, @@ -17884,7 +19191,6 @@ FAF96B582B636FC700E299C1 /* SystemNumberRequest.swift in Sources */, 84BB3CEE267CD6B500676FFE /* CrowdloanContributionDict.swift in Sources */, 849842EC26587B20006BBB9F /* YourCrowdloansTableViewCell.swift in Sources */, - 845B821B26EF80BC00D25C72 /* MetaAccountModel.swift in Sources */, F409673326B29C9B008CD244 /* RewardAnalyticsWidgetViewModel.swift in Sources */, C63CB322285077640071AF26 /* DelegationInfoCellModel.swift in Sources */, FABA16422B0C9510001AF2F0 /* NetworkManagmentFilter.swift in Sources */, @@ -17893,7 +19199,6 @@ A871B6ABACAE8A811010F792 /* StakingPayoutConfirmationWireframe.swift in Sources */, F4D6FF1326B3DDDF002313AF /* AnalyticsRewardsViewController.swift in Sources */, 1795E946F1E386442E96E2BC /* StakingPayoutConfirmationPresenter.swift in Sources */, - FA4542422C6B367B00610A71 /* BlockExplorerType+Filters.swift in Sources */, AEFA82BC4285117096BCBB16 /* StakingPayoutConfirmationInteractor.swift in Sources */, 6D47EAB127FAB7559A9FA107 /* StakingPayoutConfirmationViewController.swift in Sources */, F4EF24C826BA713300F28B4E /* AnalyticsStakeHeaderView.swift in Sources */, @@ -17901,7 +19206,9 @@ FA6262522AC2E35A005D3D95 /* MultiSelectNetworksAssembly.swift in Sources */, 9565BEB636E6D386B0C0FBE5 /* StakingPayoutConfirmationViewFactory.swift in Sources */, FA37AE202858838A001DCA96 /* ParachainStakingScheduledRequest.swift in Sources */, + 0701B9842C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityConfirmAssembly.swift in Sources */, FA6262512AC2E35A005D3D95 /* WalletConnectActiveSessionsTableCell.swift in Sources */, + 0701B89D2C78F34A00DCD395 /* AccountStatisticsProtocols.swift in Sources */, FAA086D82848AB8600CC2F33 /* YourRewardDestinationViewModel.swift in Sources */, FA2569C2274CE74100875A53 /* BottomSheetInfoBalanceCell.swift in Sources */, FA6262542AC2E35A005D3D95 /* MultiSelectNetworksViewLayout.swift in Sources */, @@ -17912,7 +19219,6 @@ FAADC1A529261F7000DA9903 /* PoolRolesConfirmProtocols.swift in Sources */, F022F1444E0F75CCA42F4648 /* YourValidatorListProtocols.swift in Sources */, 8493D0E326FF571D00A28008 /* PriceProviderFactory.swift in Sources */, - FAFB5EE02C5A11A30015D3DD /* AccountScoreSettingsChanged.swift in Sources */, F7EB8F835CFA7FC949EF4C22 /* YourValidatorListWireframe.swift in Sources */, AEA0C8AC267B6B5200F9666F /* SelectedValidatorListViewFactory.swift in Sources */, DBA436B3B1C90965FE8F9B79 /* YourValidatorListPresenter.swift in Sources */, @@ -17944,18 +19250,21 @@ FAE39AFF2AA063720011A9D6 /* EthereumNftTransferService.swift in Sources */, AEA0C8B6267BABCC00F9666F /* SelectedValidatorListViewModel.swift in Sources */, 4FBD73DD27CAA339727616B5 /* StakingUnbondSetupPresenter.swift in Sources */, + 0701B9C92C78FDE000DCD395 /* AssetTransactionData+KaiaHistory.swift in Sources */, 072EB84828E2A267007E70FF /* StakingPoolCreateConfirmViewModelFactory.swift in Sources */, FA88006C2B31A46D000AE5EB /* StakingAccountSubscriptionAssembly.swift in Sources */, FA2FC7CB28B3805400CC0A42 /* CreatePoolCall.swift in Sources */, FAC6CD8E2BA7FBD30013A17E /* WalletHistoryRequest.swift in Sources */, FA7A4C7E2A1F937A0051FB4D /* SoraRewardCalculatorEngine.swift in Sources */, C63468E628F37912005CB1F1 /* CDContact + CoreDataCodable.swift in Sources */, + 0701B9902C78FAF000DCD395 /* LiquidityPoolListType.swift in Sources */, F40966C926B297D6008CD244 /* AnalyticsStakeViewModelFactory.swift in Sources */, 84CFF1F026526FBC00DB7CF7 /* StakingBondMoreConfirmationViewLayout.swift in Sources */, F4433D6F26C1696A0002A91E /* AnalyticsValidatorsCell.swift in Sources */, C600C4D728053DF500111316 /* UsernameSetupViewController.swift in Sources */, F83EA1F4ECE14C390C0B287F /* StakingUnbondSetupInteractor.swift in Sources */, F418E891264D318C00699085 /* AlertsView.swift in Sources */, + 0701B9AD2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmRouter.swift in Sources */, FAADC19929261F6400DA9903 /* NominationPoolsUpdateRolesCall.swift in Sources */, CCF5A7CED175D5E43B2C9971 /* StakingUnbondSetupViewController.swift in Sources */, FA1D02002BBE713D005B7071 /* LiquidityPoolListCell.swift in Sources */, @@ -17966,7 +19275,8 @@ 07DE95C828A169A600E9C2CB /* AssetListSearchPresenter.swift in Sources */, FAA0136C28DA12E3000A5230 /* StakingRedeemConfirmationInteractor.swift in Sources */, 8401AEC52642A71D000B03E3 /* StakingRebondConfirmationViewFactory.swift in Sources */, - FA4B098E2C47804F001B73F9 /* NomisRequestSigner.swift in Sources */, + 0701B9B12C78FB5600DCD395 /* NetworkRequestUrlParameters.swift in Sources */, + 0701B9762C78FAF000DCD395 /* LiquidityPoolDetailsInput.swift in Sources */, 07D05E4B28EEFF3100B66C70 /* SelectValidatorsStartPoolViewModelFactory.swift in Sources */, 27FA1D57A06AA3A030D226B6 /* StakingUnbondConfirmWireframe.swift in Sources */, 843A2C7326A8641400266F53 /* MultiValueView.swift in Sources */, @@ -17981,6 +19291,9 @@ FAA0136D28DA12E3000A5230 /* StakingRedeemConfirmationPresenter.swift in Sources */, 3E1462D9E1C0D490E81FD288 /* StakingUnbondConfirmViewFactory.swift in Sources */, 078E34C328058BFD00DF187A /* DocumentPickerPresentable.swift in Sources */, + 0701B8972C78F34A00DCD395 /* AccountStatisticsViewModel.swift in Sources */, + 07A949872C47C39800613B9D /* ServiceAssembly.swift in Sources */, + 0701B9BE2C78FD8800DCD395 /* KaiaHistoryResponse.swift in Sources */, AEE5FB1C264A610C002B8FDC /* StakingRewardDestSetupLayout.swift in Sources */, 07089AF928B78248001566CA /* SheetAlertPresentable.swift in Sources */, 070CDD8A2ACBE59700F3F20A /* ReceiveAndRequestAssetAssembly.swift in Sources */, @@ -18024,6 +19337,7 @@ FA37AE272859AB1B001DCA96 /* DelegatorBondMoreCall.swift in Sources */, 076D9D4F2946E665002762E3 /* PolkaswapSwapCall.swift in Sources */, 270C21973CB61F0BF3D2D1E3 /* CrowdloanListProtocols.swift in Sources */, + 0701B9992C78FAF000DCD395 /* LiquidityPoolsOverviewPresenter.swift in Sources */, 6D61E43A79BDF5EA6CA9E85D /* CrowdloanListWireframe.swift in Sources */, FA936BD4286C66A60059B97A /* StakingRebondConfirmationParachainStrategy.swift in Sources */, A090FF206B56A0E465C62072 /* CrowdloanListPresenter.swift in Sources */, @@ -18031,6 +19345,7 @@ FA7254242AC2E48500EC47A6 /* WalletConnectModelFactory.swift in Sources */, C6267B9628BDF6A5001E31BF /* ChainAssetListInteractor.swift in Sources */, 2E57C70F27EA169000AF075A /* ProfileViewLayout.swift in Sources */, + 0701B8EB2C78F71800DCD395 /* TonConnectManifest.swift in Sources */, 07DFA454289A69490035A8AB /* Styles.swift in Sources */, 849DF02D26C40B7900B702F4 /* RuntimeFilesOperationFactory.swift in Sources */, 0B2B9C6E2BA2E924D6A54F4B /* CrowdloanListInteractor.swift in Sources */, @@ -18038,9 +19353,11 @@ 5888936B3D13D92F1534E08B /* CrowdloanListViewLayout.swift in Sources */, 278F5341DC043EBED7C0733D /* CrowdloanListViewFactory.swift in Sources */, 7CBE9FFAF8394786CA131D4D /* CustomValidatorListProtocols.swift in Sources */, + 0701B9742C78FAF000DCD395 /* LiquidityPoolDetailsViewModelFactory.swift in Sources */, B51AD1836313CE26F369ED3F /* CustomValidatorListWireframe.swift in Sources */, D565DB5ED3B8B4D9BCFB4C21 /* CustomValidatorListPresenter.swift in Sources */, FA6262432AC2E35A005D3D95 /* WalletConnectSessionPresenter.swift in Sources */, + 0701B98F2C78FAF000DCD395 /* LiquidityPoolListCellModel.swift in Sources */, F47D328226C260CC00CF35A2 /* FWPieChartView.swift in Sources */, 78D94A761EFECED60F38232D /* CustomValidatorListViewController.swift in Sources */, 7401E7CAEEE6890BE74ACCE1 /* CustomValidatorListViewLayout.swift in Sources */, @@ -18048,16 +19365,20 @@ 07D05E5E28EF0A0A00B66C70 /* SelectValidatorsConfirmPoolInitiatedViewModelState.swift in Sources */, FAFFAE8029AC84B10074AF1F /* SubqueryTransfer.swift in Sources */, FAE39AEF2A9DBDD30011A9D6 /* NftCollectionViewModelFactory.swift in Sources */, + 0701B8FE2C78F71800DCD395 /* OKXQuote.swift in Sources */, FA2569C0274CE74100875A53 /* EtheriumAddressForRewardView.swift in Sources */, FA4B92AF2844D0E60003BCEF /* SelectCurrencyInteractor.swift in Sources */, C611666C2B3C03B800F483C4 /* NftHeaderCellViewModel.swift in Sources */, FAD067992C2043FC0050291F /* WalletAssetsObserver.swift in Sources */, + 0701B9C72C78FDE000DCD395 /* AssetTransactionData+ZChainHistory.swift in Sources */, 0E6C2939AFB3D125C760D5A0 /* CrowdloanContributionSetupProtocols.swift in Sources */, 4E5CD7B8821FA5298EA1598E /* CrowdloanContributionSetupWireframe.swift in Sources */, 9081D43697D992F51E057ED2 /* CrowdloanContributionSetupPresenter.swift in Sources */, + 070ED7DB2C45321300DF4098 /* TonRemoteBalanceFetching.swift in Sources */, 830A27C5447348F1D202D996 /* CrowdloanContributionSetupInteractor.swift in Sources */, AE4C53E5268C6F8300B03CE8 /* ValidatorListFilterSortCell.swift in Sources */, 1062C095BC566A1EA8DE1C06 /* CrowdloanContributionSetupViewController.swift in Sources */, + 07FEC1362CAE6848003938C6 /* SelectEcosystemBannerView.swift in Sources */, FAF5E9DB27E46DAA005A3448 /* RootViewLayout.swift in Sources */, 8CDA490B390BFA261906F8FC /* CrowdloanContributionSetupViewLayout.swift in Sources */, 1BEADE77C6236CB3BF719A47 /* CrowdloanContributionSetupViewFactory.swift in Sources */, @@ -18082,13 +19403,14 @@ 90A3F46EF181DC2B821CC80C /* CrowdloanContributionConfirmViewFactory.swift in Sources */, FAA0133728DA12B6000A5230 /* StakingPoolMainAssembly.swift in Sources */, 07FD95C027F4384900F07064 /* UIFont+dynamicSize.swift in Sources */, + 0701B8EF2C78F71800DCD395 /* NomisAccountStatisticsFetcher.swift in Sources */, EB9D8D22AA13BF12F845856B /* ReferralCrowdloanProtocols.swift in Sources */, - FA5032B22C4E58C500075909 /* AccountStatisticsPresentable.swift in Sources */, FA7254292AC2E48500EC47A6 /* Caip2.swift in Sources */, 51FC48FA6FD4D2FB1781424D /* ReferralCrowdloanWireframe.swift in Sources */, 0F3E58FC800ED8722589F89E /* ReferralCrowdloanPresenter.swift in Sources */, 9F4A48B1BE3A1110A0CF9F36 /* ReferralCrowdloanViewController.swift in Sources */, CE2792E78B14CE02394D8CF4 /* ReferralCrowdloanViewLayout.swift in Sources */, + 07D0BD3B2C6E2282001ECD58 /* TonConnectUrlHandling.swift in Sources */, 2B0FC94B4AE9AFE9532F493F /* ReferralCrowdloanViewFactory.swift in Sources */, FAA0137228DA12E3000A5230 /* StakingRedeemConfirmationParachainViewModelFactory.swift in Sources */, FAD4291B2A86567F001D6A16 /* WalletNameRouter.swift in Sources */, @@ -18097,7 +19419,9 @@ 33D23A4A92AF90C385568462 /* ChainSelectionProtocols.swift in Sources */, 436D8B9651C88360A6D72E90 /* ChainSelectionWireframe.swift in Sources */, FA2DF9AA2A8F4C470047F440 /* NftListViewModelFactory.swift in Sources */, + 0701B9A72C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewModel.swift in Sources */, 3DF50E6F78F1B1052625BA7D /* ChainSelectionPresenter.swift in Sources */, + 073DE30F2C5BA35B003B4990 /* TonModels.swift in Sources */, 59745D3C9602745E1417D2F6 /* ChainSelectionInteractor.swift in Sources */, FAA0137F28DA12F0000A5230 /* StakingRedeemPoolViewModelState.swift in Sources */, FA62623F2AC2E35A005D3D95 /* WalletConnectSessionViewModelFactory.swift in Sources */, @@ -18114,6 +19438,7 @@ FAFFAE8929AC84B10074AF1F /* SubqueryRewardData.swift in Sources */, 340AC2484415B10F247C135E /* AnalyticsValidatorsPresenter.swift in Sources */, 07DE95D728A225DE00E9C2CB /* WalletMainContainerViewModel.swift in Sources */, + 0701B9812C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityRouter.swift in Sources */, C9A608AFCFF4030D63D1FB4F /* AnalyticsValidatorsInteractor.swift in Sources */, 8BF525D6B5DFB7CF6C03B015 /* AnalyticsValidatorsViewController.swift in Sources */, FA6262662AC2E35A005D3D95 /* WalletConnectProposalAssembly.swift in Sources */, @@ -18126,7 +19451,6 @@ F17C7FA0DB540A803558D1BB /* AnalyticsRewardDetailsPresenter.swift in Sources */, EB544E8D26ABEE4ADE2F939F /* AnalyticsRewardDetailsInteractor.swift in Sources */, FA17B4D227E9CF21006E0735 /* FearlessApplication.swift in Sources */, - FAB90CED2C6F5B2A00D13804 /* ChainSelectionCollectionCellModel.swift in Sources */, EB7B660B0B1BAA915C004A8D /* AnalyticsRewardDetailsViewController.swift in Sources */, 07DE95BB28A1119400E9C2CB /* BalanceInfoViewController.swift in Sources */, C80B2FDBD395CDEAD1B7E996 /* AnalyticsRewardDetailsViewLayout.swift in Sources */, @@ -18138,6 +19462,7 @@ CDB78A5A733E4A4F1A2C48C8 /* AssetSelectionWireframe.swift in Sources */, FA054A9A2BCD1FA3007B8F6D /* AvailableLiquidityPoolsListPresenter.swift in Sources */, 2FCB062A2D873BD72B795DB3 /* AssetSelectionPresenter.swift in Sources */, + 0701B9AE2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmViewController.swift in Sources */, BEA539EE97A287868FD8BE46 /* AssetSelectionViewFactory.swift in Sources */, 07DFA44B289918E10035A8AB /* ModalSheetBlurPresentationController.swift in Sources */, FA2E9BBF27A297CE0023FAD2 /* FilterSectionViewModel.swift in Sources */, @@ -18149,27 +19474,24 @@ FAA0136B28DA12E3000A5230 /* StakingRedeemConfirmationLayout.swift in Sources */, FABA163F2B0C9510001AF2F0 /* NetworkManagmentAssembly.swift in Sources */, FAB707622BB317D300A1131C /* CrossChainViewLoadingCollector.swift in Sources */, - 96B2C3B29C0EA1A068ED5FB1 /* WalletSendConfirmProtocols.swift in Sources */, FAABC4702845BAEE002CF40E /* CustomValidatorParachainListComposer.swift in Sources */, FA2E9BB027A118120023FAD2 /* FiltersViewModelFactory.swift in Sources */, - 0DAA7B1B7DF576C761DEF046 /* WalletSendConfirmWireframe.swift in Sources */, FA6262442AC2E35A005D3D95 /* WalletConnectSessionViewLayout.swift in Sources */, - 06197BBE4299DC971C42DB92 /* WalletSendConfirmPresenter.swift in Sources */, - BDE80F08EBEE3B0C95598EA8 /* WalletSendConfirmInteractor.swift in Sources */, FAC6CDAD2BA81D680013A17E /* FeeViewProtocol.swift in Sources */, FA72542E2AC2E48500EC47A6 /* WalletConnectSignDecision.swift in Sources */, - EA16E259F0B0C1D3A6A1902A /* WalletSendConfirmViewController.swift in Sources */, 775C4C720600DAE242C67192 /* WalletSendConfirmViewLayout.swift in Sources */, FAD429012A86567F001D6A16 /* BackupCreatePasswordViewLayout.swift in Sources */, - F4CBA064CDCF0F6EEFE1DDA1 /* WalletSendConfirmViewFactory.swift in Sources */, 3A7BF8FD79B7130241222C35 /* WalletTransactionHistoryProtocols.swift in Sources */, FAC6CD9D2BA8097C0013A17E /* L10n.swift in Sources */, FAAA291D2B8DBFEE0089AFE6 /* StorageRequestWorkerBuilder.swift in Sources */, + 0701B8F32C78F71800DCD395 /* OKXDexAllTokensRequestParameters.swift in Sources */, FA93A2E82833B0F10021330F /* RecommendedValidatorListRelaychainViewModelState.swift in Sources */, FAD429322A865696001D6A16 /* CheckboxButton.swift in Sources */, + 07D0BD3E2C6F0CA0001ECD58 /* DappBrowserFeaturedView.swift in Sources */, + 0701B9802C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityProtocols.swift in Sources */, 0DAEDA34F5BCECE5BD64DF26 /* WalletTransactionHistoryWireframe.swift in Sources */, FAD4291F2A86567F001D6A16 /* WalletNameAssembly.swift in Sources */, - FAF6D90D2C57654F00274E69 /* Decimal+Formatting.swift in Sources */, + 0701B97D2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityAssembly.swift in Sources */, D1E085712E7BC0EBF2F4F020 /* WalletTransactionHistoryPresenter.swift in Sources */, FA7D46CD2AF24191005D681B /* SoraRewardOperationFactory.swift in Sources */, FAD429132A86567F001D6A16 /* BackupSelectWalletInteractor.swift in Sources */, @@ -18181,7 +19503,6 @@ 4F66A13E327CBDD04A2411FA /* WalletTransactionHistoryViewLayout.swift in Sources */, FA8800612B31A027000AE5EB /* StakingAccountResolverV14.swift in Sources */, D41CA684433AD861BEC2213B /* WalletTransactionHistoryViewFactory.swift in Sources */, - FAF600772C48F08B00E56558 /* AccountScoreView.swift in Sources */, C77CCA7FF969A2F006A0B6C4 /* WalletChainAccountDashboardProtocols.swift in Sources */, 07DE95C728A169A600E9C2CB /* AssetListSearchProtocols.swift in Sources */, FA99549B27B3B60700CCC94B /* WalletNameChanged.swift in Sources */, @@ -18190,6 +19511,7 @@ B7021EF189E8215B22DDCB09 /* WalletChainAccountDashboardInteractor.swift in Sources */, 93E53195ABD9DA7466A8AAF8 /* WalletChainAccountDashboardViewController.swift in Sources */, FA37AE412859E0DB001DCA96 /* StakingRedeemParachainViewModelState.swift in Sources */, + 071606CA2C7C6C8800C1DF75 /* PriceDataHelper.swift in Sources */, 7BEEF481CD12F404AD746FB5 /* WalletChainAccountDashboardViewLayout.swift in Sources */, D23DD717E3EA941FA78B59C9 /* WalletChainAccountDashboardViewFactory.swift in Sources */, FAA0136A28DA12E3000A5230 /* StakingRedeemConfirmationWireframe.swift in Sources */, @@ -18202,7 +19524,6 @@ 3E053332BA9D170FB1569ABB /* WalletTransactionDetailsProtocols.swift in Sources */, 002561414AF1F8F3B4B65538 /* WalletTransactionDetailsWireframe.swift in Sources */, FA88005D2B319F9D000AE5EB /* BaseStakingAccountResolver.swift in Sources */, - FAC0BBD8291D0EB000E6F106 /* SendAssembly.swift in Sources */, 05A6BB4F8F0912404A4D8413 /* WalletTransactionDetailsPresenter.swift in Sources */, 69DE177B9D1745FEE848E870 /* WalletTransactionDetailsInteractor.swift in Sources */, 44B20C179522F7E38DAA2441 /* WalletTransactionDetailsViewController.swift in Sources */, @@ -18227,7 +19548,7 @@ 7FC8C78DD68304B05B501F83 /* NodeSelectionProtocols.swift in Sources */, 1F6A32CBF7B43390AF412B1A /* NodeSelectionWireframe.swift in Sources */, 07089AFC28B783B5001566CA /* SheetAletViewController.swift in Sources */, - C64DD7582C75C53A00E97804 /* PriceDataMapper.swift in Sources */, + 0701B9952C78FAF000DCD395 /* LiquidityPoolsListViewController.swift in Sources */, C3D915637D26E807B85957CF /* NodeSelectionPresenter.swift in Sources */, FA6C178E29935EEE00A55254 /* DateFormats.swift in Sources */, FA8EE741294C4DB80052C888 /* AllDoneViewModelFactory.swift in Sources */, @@ -18235,7 +19556,6 @@ FA6262592AC2E35A005D3D95 /* MultiSelectNetworksViewController.swift in Sources */, 7258EEAE786D51F57ECE1E4F /* NodeSelectionViewController.swift in Sources */, 8F0B3FE843167777A1D3771C /* NodeSelectionViewLayout.swift in Sources */, - FAC0BBDC291D0EB000E6F106 /* SendInteractor.swift in Sources */, 07089AF328B63386001566CA /* UIButton.swift in Sources */, FA6262502AC2E35A005D3D95 /* WalletConnectActiveSessionsProtocols.swift in Sources */, FA37AE382859CCA7001DCA96 /* StakingUnbondConfirmParachainStrategy.swift in Sources */, @@ -18248,6 +19568,7 @@ 9C8AAE31F22421A975A17DF4 /* AddCustomNodeWireframe.swift in Sources */, FA34EEB42B9872240042E73E /* StakingCurrentEraRequest.swift in Sources */, 07DFA456289B78E20035A8AB /* CopyableLabelView.swift in Sources */, + 07ECB8092C6C6CDE000E0A14 /* TonConnectEventsCenter.swift in Sources */, 07D05E6728EF0BE500B66C70 /* SelectValidatorsConfirmPoolViewModelFactory.swift in Sources */, AE552BD2B83A94626F109CA9 /* AddCustomNodePresenter.swift in Sources */, FA34EE9A2B98712D0042E73E /* BalanceLocksFetching.swift in Sources */, @@ -18255,7 +19576,6 @@ C3C7D60B36C778DA0A307BCC /* AddCustomNodeViewController.swift in Sources */, FAD428FE2A86567F001D6A16 /* BackupRiskWarningsRouter.swift in Sources */, 502DF063219C7211C2225BD4 /* AddCustomNodeViewLayout.swift in Sources */, - C6182B4C2C6474F30089558D /* PricesService.swift in Sources */, 0713097F28C6F60D002B17D0 /* ScamSyncServiceFactory.swift in Sources */, E5A07BDF3D37C761F453696A /* AddCustomNodeViewFactory.swift in Sources */, 0C4F3F7AB14F4851C12974B6 /* WarningAlertProtocols.swift in Sources */, @@ -18268,9 +19588,11 @@ EDC72DAB0BDD63E0521E66B5 /* WarningAlertViewController.swift in Sources */, FA6262652AC2E35A005D3D95 /* WalletConnectProposalInteractor.swift in Sources */, C481665C170F4D9523DC73AF /* WarningAlertViewLayout.swift in Sources */, + 0701B8BA2C78F69500DCD395 /* FWCosmosView.swift in Sources */, FA72542B2AC2E48500EC47A6 /* WalletConnectProposalDecision.swift in Sources */, 709ABA5647D7DFF36EBCE73E /* WarningAlertViewFactory.swift in Sources */, FA389B382840CBE000FF16E9 /* ValidatorSearchParachainStrategy.swift in Sources */, + 0723EDA62C50B87B00880620 /* BokoloTransferFlowUseCase.swift in Sources */, FA7254302AC2E48500EC47A6 /* WalletConnectPayload.swift in Sources */, FAA0139F28DA131B000A5230 /* StakingBondMorePoolStrategy.swift in Sources */, 180B223378B806EB6C0DC7F0 /* SelectedValidatorListFlow.swift in Sources */, @@ -18317,9 +19639,11 @@ 6FA6FA6944AD6519FB8A2AC0 /* WalletMainContainerViewController.swift in Sources */, FA7254412AC2E48500EC47A6 /* ABIParsing.swift in Sources */, D403B7725ED25E20A20F9D6A /* WalletMainContainerViewLayout.swift in Sources */, + 0701B99C2C78FAF000DCD395 /* LiquidityPoolsOverviewViewController.swift in Sources */, FA9A8F1B2A72573C008FA99F /* AlchemyRequest.swift in Sources */, 76214649137E7061F701FE38 /* WalletMainContainerAssembly.swift in Sources */, FC9BD9BC4722D8B17B7A7ACC /* MainNftContainerProtocols.swift in Sources */, + 0701B9822C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityViewController.swift in Sources */, FA286B132A3043DB008BD527 /* CrossChainConfirmationViewController.swift in Sources */, 0A4820F04EC9DA9DD515EC3A /* MainNftContainerRouter.swift in Sources */, FA8ED43328FD960F00EBB712 /* YourValidatorListFlow.swift in Sources */, @@ -18337,16 +19661,17 @@ 38BFEDD4B9F31EF2532962BD /* NetworkIssuesNotificationAssembly.swift in Sources */, A4FE32D50E4B7CB5B53E0067 /* StakingPoolInfoProtocols.swift in Sources */, 07BF3D942B3D873F0046ABF4 /* OklinkHistoryOperationFactory.swift in Sources */, - FA9464252C5CC434001E810F /* LiquidityPoolDetailsInput.swift in Sources */, C8C32CC78C058E9F277AB625 /* StakingPoolInfoRouter.swift in Sources */, DE1CFE599177A7A296EAF463 /* StakingPoolInfoPresenter.swift in Sources */, B15D513381B7626AB90018F0 /* StakingPoolInfoInteractor.swift in Sources */, 89C8A9B990B08016A70ED336 /* StakingPoolInfoViewController.swift in Sources */, 281D17EF8C45A1FC49FD1523 /* StakingPoolInfoViewLayout.swift in Sources */, 39DA5795FB9DBF626B72B5C6 /* StakingPoolInfoAssembly.swift in Sources */, + 0715FCDD2C660AF700AA674E /* DappBridgeMessageType.swift in Sources */, 4A63ECA587C601999AAEB974 /* StakingPoolCreateProtocols.swift in Sources */, 7BC6FB48B9B4EC790923FF1E /* StakingPoolCreateRouter.swift in Sources */, 82379C63F216F4B4B7832A71 /* StakingPoolCreatePresenter.swift in Sources */, + 0701B89B2C78F34A00DCD395 /* AccountStatisticsPresentable.swift in Sources */, 94EB0971EDA635A626CA8B72 /* StakingPoolCreateInteractor.swift in Sources */, 0077B6854FDCA7ECCD557B09 /* StakingPoolCreateViewController.swift in Sources */, FA88005F2B31A005000AE5EB /* StakingAccountResolverV13.swift in Sources */, @@ -18372,29 +19697,34 @@ DAAD3A3FCBA0C0E613167EBF /* ContactsPresenter.swift in Sources */, 705F5EEDD70D6941D138D3F9 /* ContactsInteractor.swift in Sources */, 3336F04749ADC27C81BA9464 /* ContactsViewController.swift in Sources */, + 07ECB7F92C69F62F000E0A14 /* CDTonDapp+CoreDataDecodable.swift in Sources */, 2515863D26C9F862AB800C4C /* ContactsViewLayout.swift in Sources */, E29066A3781333DF890E8F9B /* ContactsAssembly.swift in Sources */, 9E2D97A489E8F84A8A0916A8 /* CreateContactProtocols.swift in Sources */, D3C2414CAC720D2D08F0CC4F /* CreateContactRouter.swift in Sources */, + 07C438D72C638B2900475B14 /* TonConnectServiceImpl.swift in Sources */, FA7254222AC2E48500EC47A6 /* WalletConnectSigner.swift in Sources */, 4641B3CABB5FE1DCFBEDA379 /* CreateContactPresenter.swift in Sources */, 152AC909C26E809ACCA55B35 /* CreateContactInteractor.swift in Sources */, FA6262392AC2E35A005D3D95 /* WalletConnectConfirmationPresenter.swift in Sources */, + 07C438DE2C638D3900475B14 /* TonConnectManifest.swift in Sources */, FACD427F2A5BE7D8009975AA /* JSONRPCOperation+Result.swift in Sources */, FAD429252A865680001D6A16 /* BackupWalletPresenter.swift in Sources */, DBBD1651F45FECA1B17AAF40 /* CreateContactViewController.swift in Sources */, AF1FD8891DC8B68A9C17C5B2 /* CreateContactViewLayout.swift in Sources */, + 0701B9A52C78FAF000DCD395 /* LiquidityPoolSupplyViewController.swift in Sources */, FAA9BC412B8F17BA00A875BF /* Collection+Average.swift in Sources */, 78627BC990DE9C037CE69BB0 /* CreateContactAssembly.swift in Sources */, DD96B37BBEE1535951802B55 /* AllDoneProtocols.swift in Sources */, CD027E4D430D8939A3D64EB6 /* AllDoneRouter.swift in Sources */, + 0701B8F62C78F71800DCD395 /* OKXDexQuotesRequestParameters.swift in Sources */, FAD067912C2042F30050291F /* Requests.swift in Sources */, - FA41B62B2C64C5A200D0713A /* AssetTransactionData+VicscanHistory.swift in Sources */, 306E249AD210DFAA8C03D435 /* AllDonePresenter.swift in Sources */, DE9FA0FA5A6B685CBD593025 /* AllDoneInteractor.swift in Sources */, 65E0BC7A96EDE5E52D32A11B /* AllDoneViewController.swift in Sources */, AB678EAA622BFEAEEA8166F2 /* AllDoneViewLayout.swift in Sources */, 073B34BF2AE91FE600DC5106 /* WalletConnectProposalDataValidating.swift in Sources */, + 0701B9C12C78FD8800DCD395 /* VicscanHistoryResponse.swift in Sources */, 37AE170856990F9FBEF052FC /* AllDoneAssembly.swift in Sources */, E2645EB7614F4C7A60B48777 /* PolkaswapAdjustmentProtocols.swift in Sources */, 27CD06DA03B268E2C6A90B15 /* PolkaswapAdjustmentRouter.swift in Sources */, @@ -18402,7 +19732,6 @@ 1EF031DB5316E1D180089C7B /* PolkaswapAdjustmentInteractor.swift in Sources */, 888D852FAE0318FAE4A31252 /* PolkaswapAdjustmentViewController.swift in Sources */, E1772980B5A4EB33D1801204 /* PolkaswapAdjustmentViewLayout.swift in Sources */, - FA41B6262C64BE6800D0713A /* ViscanHistoryOperationFactory.swift in Sources */, 0D02CBA6399C508D9F25AC8D /* PolkaswapAdjustmentAssembly.swift in Sources */, 2510425D74B7318818B57B0F /* PolkaswapTransaktionSettingsProtocols.swift in Sources */, B7E42D9E7CA509D7BE723357 /* PolkaswapTransaktionSettingsRouter.swift in Sources */, @@ -18431,6 +19760,7 @@ ADF845374BEF73D90D4BF005 /* SwapTransactionDetailRouter.swift in Sources */, A73B076B0E983DA669C1F215 /* SwapTransactionDetailPresenter.swift in Sources */, 41040A200CF5E77C291128DA /* SwapTransactionDetailInteractor.swift in Sources */, + 0701B97F2C78FAF000DCD395 /* LiquidityPoolRemoveLiquidityPresenter.swift in Sources */, 3B0F51B1D1590FAAE73CD36C /* SwapTransactionDetailViewController.swift in Sources */, 910CEF0535028E629FD9798C /* SwapTransactionDetailViewLayout.swift in Sources */, 02FA6FDF7212F1F8D056BC18 /* SwapTransactionDetailAssembly.swift in Sources */, @@ -18444,10 +19774,12 @@ DDEEF4532805420415471B6A /* NftDetailsAssembly.swift in Sources */, 5980BDE494C9E473E5959C71 /* NftCollectionProtocols.swift in Sources */, 0E30EB59B860DE611FF0DC7D /* NftCollectionRouter.swift in Sources */, + 0701B8F82C78F71800DCD395 /* OKXApproveTransaction.swift in Sources */, EF23CA9AF3889FEAB2D6CBD6 /* NftCollectionPresenter.swift in Sources */, D3BB5CACD4790A601BF01AF5 /* NftCollectionInteractor.swift in Sources */, E5CE21BA40C554E06B566E98 /* NftCollectionViewController.swift in Sources */, FA7254252AC2E48500EC47A6 /* WalletConnectEthereumSigner.swift in Sources */, + 07D0BD412C6F0E9C001ECD58 /* BrowserExploreFeaturedCell.swift in Sources */, FB214D3851B28AA8FF05AA41 /* NftCollectionViewLayout.swift in Sources */, FE65F897D63CAA8F8AE4B972 /* NftCollectionAssembly.swift in Sources */, FA6262572AC2E35A005D3D95 /* MultiSelectNetworksViewModelFactory.swift in Sources */, @@ -18456,6 +19788,7 @@ 20F28EF4AD17FC56A5A6697B /* NftSendPresenter.swift in Sources */, 4823ED3F25DD943928D102C9 /* NftSendInteractor.swift in Sources */, FA6262472AC2E35A005D3D95 /* WalletConnectSessionProtocols.swift in Sources */, + 0701B8F42C78F71800DCD395 /* OKXDexApproveRequestParameters.swift in Sources */, FA6262602AC2E35A005D3D95 /* RawDataPresenter.swift in Sources */, B2E3219218E3F54EEB7D5C3C /* NftSendViewController.swift in Sources */, CBC2B73D7749D5C635EECEE8 /* NftSendViewLayout.swift in Sources */, @@ -18466,10 +19799,11 @@ 0EFEBFB39CE4B0A61B6CD914 /* NftSendConfirmInteractor.swift in Sources */, FB6B2B551238260D754E036D /* NftSendConfirmViewController.swift in Sources */, 78E3117D66E60D72F2501F09 /* NftSendConfirmViewLayout.swift in Sources */, + 07FEC1342CAE624B003938C6 /* OnboardingMainViewLayout.swift in Sources */, + 0701B8EC2C78F71800DCD395 /* TonConnectParameters.swift in Sources */, 991BF0BF6DD4D4243073E8C9 /* NftSendConfirmAssembly.swift in Sources */, 62843B73F8616209F57A66FC /* AssetNetworksProtocols.swift in Sources */, 1496E87A7652C7D230A9BB46 /* AssetNetworksRouter.swift in Sources */, - C6FBA6DA2C65EA56008B18D9 /* AssetRepositoryFactory.swift in Sources */, A9597D17F54CFF4F3704D868 /* AssetNetworksPresenter.swift in Sources */, A6855830B76B0782A696583A /* AssetNetworksInteractor.swift in Sources */, 82663A49E28CF2504BEAFB01 /* AssetNetworksViewController.swift in Sources */, @@ -18486,12 +19820,14 @@ F52C9FF9ABB4ED034D177CF8 /* LiquidityPoolsOverviewRouter.swift in Sources */, 1E59CE2953F8835954A4E5A7 /* LiquidityPoolsOverviewPresenter.swift in Sources */, DFF0320CF3AA41142DEAC5F2 /* LiquidityPoolsOverviewInteractor.swift in Sources */, + 07C438DA2C638BAA00475B14 /* TonConnectParameters.swift in Sources */, 4A957B3BAC231B70CBC00EC3 /* LiquidityPoolsOverviewViewController.swift in Sources */, 02EC6059AEE8C92B4EDD09C0 /* LiquidityPoolsOverviewViewLayout.swift in Sources */, 61B5A91FBEF633FCC8D965B6 /* LiquidityPoolsOverviewAssembly.swift in Sources */, CF96BE0B636DA8227E689DDA /* LiquidityPoolDetailsProtocols.swift in Sources */, FAD067D52C214E7C0050291F /* LiquidityPoolsConstants.swift in Sources */, 23E30A21620831C600CBC1D6 /* LiquidityPoolDetailsRouter.swift in Sources */, + 0701B9792C78FAF000DCD395 /* LiquidityPoolDetailsProtocols.swift in Sources */, D2A85A5EE89EAAA856EA5C0F /* LiquidityPoolDetailsPresenter.swift in Sources */, 7D8D644C5E1695288A0E86C0 /* LiquidityPoolDetailsInteractor.swift in Sources */, A1C05D0028CD04C16AB6082F /* LiquidityPoolDetailsViewController.swift in Sources */, @@ -18500,6 +19836,7 @@ 0D7DDA00BBF1D0CFD9A26306 /* LiquidityPoolSupplyProtocols.swift in Sources */, 66AECEC6A6EB8184114B041E /* LiquidityPoolSupplyRouter.swift in Sources */, FA5085AD2C33C6D4002DF97D /* SafeDictionary.swift in Sources */, + 07ECB7FB2C6A07AF000E0A14 /* TonConnectAppRequest.swift in Sources */, BC2DF589C6623601C39EF8F4 /* LiquidityPoolSupplyPresenter.swift in Sources */, 87C1FC2909A8360DDBA625E5 /* LiquidityPoolSupplyInteractor.swift in Sources */, F31469BD18062A4A008FE39E /* LiquidityPoolSupplyViewController.swift in Sources */, @@ -18523,20 +19860,64 @@ 8A957CAF82C856E61054B02F /* LiquidityPoolRemoveLiquidityConfirmViewController.swift in Sources */, 10DEF797CB3DC5BF0903EC4C /* LiquidityPoolRemoveLiquidityConfirmViewLayout.swift in Sources */, E667BD4B6BA45B9B3464AD85 /* LiquidityPoolRemoveLiquidityConfirmAssembly.swift in Sources */, - 00E9DD69FCE94A4F4929B419 /* AccountStatisticsProtocols.swift in Sources */, - 887CE12C7C59F5DB092E9227 /* AccountStatisticsRouter.swift in Sources */, - 11FDC274784B05B690368C07 /* AccountStatisticsPresenter.swift in Sources */, - 5E974C26655D3E64AD6A923D /* AccountStatisticsInteractor.swift in Sources */, - 2BBE065C2A5C31B830DE0957 /* AccountStatisticsViewController.swift in Sources */, - 52AEA30073F8CB856B692757 /* AccountStatisticsViewLayout.swift in Sources */, - 8FC70700D2154F472636D458 /* AccountStatisticsAssembly.swift in Sources */, - AECBFFADE502D32B7D026B62 /* MultichainAssetSelectionProtocols.swift in Sources */, - 092219D6B9BF321344D9679F /* MultichainAssetSelectionRouter.swift in Sources */, - BB96B1EA86DAB3E83B50E4BD /* MultichainAssetSelectionPresenter.swift in Sources */, - 1FBA501F4EC1A9AAD5736D56 /* MultichainAssetSelectionInteractor.swift in Sources */, - 68477096FFF2FE210D9C94B3 /* MultichainAssetSelectionViewController.swift in Sources */, - 49F6A6C2A56A3DE9D456FE7D /* MultichainAssetSelectionViewLayout.swift in Sources */, - 4D44ACFB841F7CE18CE98559 /* MultichainAssetSelectionAssembly.swift in Sources */, + D9FEC396410376629DEB9625 /* TransferProtocols.swift in Sources */, + 85E0298F05FF6D4B9F113E47 /* TransferRouter.swift in Sources */, + 19C7939FFE0178C1A7E68631 /* TransferPresenter.swift in Sources */, + 7AB0A0585C89ED136B07A995 /* TransferInteractor.swift in Sources */, + 709EF639857F35CA2EF69D06 /* TransferViewController.swift in Sources */, + B3329255AB6C6493CDA806D6 /* TransferViewLayout.swift in Sources */, + 2DEDA5E3970B445CBBE2F1D1 /* TransferAssembly.swift in Sources */, + 0701B98C2C78FAF000DCD395 /* UserLiquidityPoolsListPresenter.swift in Sources */, + 0701B9CD2C78FF7900DCD395 /* AccountScoreSettingsChanged.swift in Sources */, + D5C25B13DB0180C0A78C2372 /* ConfirmTransferProtocols.swift in Sources */, + 084DDCBC4CE8438770EB48DE /* ConfirmTransferRouter.swift in Sources */, + 604162EC2B721993E397E6B0 /* ConfirmTransferPresenter.swift in Sources */, + 3152634A9E3FBF5E463CF56E /* ConfirmTransferViewController.swift in Sources */, + 26F0F2A52C7EFD38CBC2F1C3 /* ConfirmTransferAssembly.swift in Sources */, + BCB9B3DF3D8104BC8456811B /* TonWebBridgeProtocols.swift in Sources */, + 57376A74C6310F1FA52FA28C /* TonWebBridgeRouter.swift in Sources */, + 36909529AF4B97AE71AD4C24 /* TonWebBridgePresenter.swift in Sources */, + 720633807C7746A254866395 /* TonWebBridgeInteractor.swift in Sources */, + AA69046E4B7838BE78859A24 /* TonWebBridgeViewController.swift in Sources */, + 0701B8B92C78F69500DCD395 /* BlockExplorerType+Filters.swift in Sources */, + DBF246FDD6E70D1DC6529539 /* TonWebBridgeViewLayout.swift in Sources */, + 152915F53A2C88A15B2BA725 /* TonWebBridgeAssembly.swift in Sources */, + 5106A2E8BB43AF62D2BBF286 /* DappBrowserProtocols.swift in Sources */, + 8A388A315B0E4EF220EF3F5B /* DappBrowserRouter.swift in Sources */, + 8095003039EDD1072601BAA7 /* DappBrowserPresenter.swift in Sources */, + 91246793157F1B0FF2A1217F /* DappBrowserInteractor.swift in Sources */, + C593B432712EAD72251EC00B /* DappBrowserViewController.swift in Sources */, + 32BB821E16F9BF88523A6047 /* DappBrowserViewLayout.swift in Sources */, + 438F38672873F0B8BA950489 /* DappBrowserAssembly.swift in Sources */, + ED3514135CA429A516482F69 /* DappBrowserListProtocols.swift in Sources */, + 52F16C3E24F3982384B1082E /* DappBrowserListRouter.swift in Sources */, + D80CDA0DDAB54204CBF873D0 /* DappBrowserListPresenter.swift in Sources */, + E256770DDF3AF748A5057FD4 /* DappBrowserListInteractor.swift in Sources */, + 1A6E37652003721AB5044812 /* DappBrowserListViewController.swift in Sources */, + 3CDF2323ABDADEBC32F2AE4B /* DappBrowserListViewLayout.swift in Sources */, + 71DE4946BC2CE1DE0300BC16 /* DappBrowserListAssembly.swift in Sources */, + 0701B98B2C78FAF000DCD395 /* UserLiquidityPoolsListInteractor.swift in Sources */, + 5A8C0ED62A840E8E0B56E85C /* FeatureToggleListProtocols.swift in Sources */, + F952CDC56E85FA82DDEBE5D3 /* FeatureToggleListRouter.swift in Sources */, + E9EE315D66D4E664BC250529 /* FeatureToggleListPresenter.swift in Sources */, + 08C2974B3B5AAA757CE57E33 /* FeatureToggleListInteractor.swift in Sources */, + EDE467D5D4E6EC2A69FAD84A /* FeatureToggleListViewController.swift in Sources */, + CCA06979DC3F21E5CCA505F0 /* FeatureToggleListViewLayout.swift in Sources */, + BB11D0C16D51423BFB0C45F2 /* FeatureToggleListAssembly.swift in Sources */, + 773CBBDAE8BFB7764C20A675 /* ConnectedAccountsProtocols.swift in Sources */, + BD7E3B9E0E9744C3281274A5 /* ConnectedAccountsRouter.swift in Sources */, + 2FF5B2DEC92C9801F00B9485 /* ConnectedAccountsPresenter.swift in Sources */, + 528DD3FD73C2C6152E632A00 /* ConnectedAccountsInteractor.swift in Sources */, + 84F543329636D42A3BE5C574 /* ConnectedAccountsViewController.swift in Sources */, + 21F6235E4B4AB0DDA0849DF5 /* ConnectedAccountsViewLayout.swift in Sources */, + 950694F134BAD1AB2B4775E3 /* ConnectedAccountsAssembly.swift in Sources */, + 1E4DCD7DF7A101622D4145A4 /* EcosystemOptionsProtocols.swift in Sources */, + 331DD15DB978230C3D22E865 /* EcosystemOptionsRouter.swift in Sources */, + 9ACC689D2FE77C2122103E81 /* EcosystemOptionsPresenter.swift in Sources */, + E6EC748865580AB3FA6756BE /* EcosystemOptionsInteractor.swift in Sources */, + 3495B757A7C05ECFE3842D2D /* EcosystemOptionsViewController.swift in Sources */, + 6666BE6CC1E1A468385C4CCF /* EcosystemOptionsViewLayout.swift in Sources */, + E94EAFC25B7E5BAA04CB6085 /* EcosystemOptionsAssembly.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -18639,6 +20020,7 @@ 846CA778270911920011124C /* StakingLocalSubscriptionFactoryStub.swift in Sources */, AE805FCA26B42AE200007CE9 /* ValidatorOperationFactoryStub.swift in Sources */, FAD428A52A865636001D6A16 /* BackupRiskWarningsTests.swift in Sources */, + 840C71BA26821D2000B6D9C2 /* StakingRedeemMock.swift in Sources */, 84FACB3825F5630000F32ED4 /* RuntimeHelper.swift in Sources */, FAD428A92A865636001D6A16 /* BackupWalletImportedTests.swift in Sources */, A565F118B7ED356099662F03 /* ExportMnemonicTests.swift in Sources */, @@ -18668,6 +20050,7 @@ 70EAB410A0106F22C2183847 /* StakingUnbondSetupTests.swift in Sources */, 33D41E7EAA441A589449CD4E /* StakingUnbondConfirmTests.swift in Sources */, 84AA004326C5DFD800BCB4DC /* RuntimeSyncServiceTests.swift in Sources */, + C4427244A22EA7BA7F7C9E9F /* StakingRedeemTests.swift in Sources */, 7365B203D7F32028225366E5 /* ControllerAccountTests.swift in Sources */, 48A787921C2B3E9F22722154 /* ControllerAccountConfirmationTests.swift in Sources */, F4897BB126AED13D0075F291 /* EraCountdownOperationFactoryStub.swift in Sources */, @@ -18711,6 +20094,8 @@ B40863AA7377BFE5F8A30259 /* LiquidityPoolSupplyConfirmTests.swift in Sources */, 6BF307ADE63FA92389340779 /* LiquidityPoolRemoveLiquidityTests.swift in Sources */, ECA54AB8148BBA63084353FD /* LiquidityPoolRemoveLiquidityConfirmTests.swift in Sources */, + E01C6EA1C6DB699485EEA5F5 /* TransferTests.swift in Sources */, + 0C154A425E0B8175F0A3FCC4 /* ConfirmTransferTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -18804,7 +20189,7 @@ /* Begin XCBuildConfiguration section */ 8438E1D724BFAAD2001BDB13 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8646C6DACE714085B4B0F799 /* Pods-fearlessAll-fearlessIntegrationTests.debug.xcconfig */; + baseConfigurationReference = C18EC31B3CF418C773F495C7 /* Pods-fearlessAll-fearlessIntegrationTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -18826,7 +20211,7 @@ }; 8438E1D824BFAAD2001BDB13 /* Dev */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EA86DE0B14A20416D3AF1E1E /* Pods-fearlessAll-fearlessIntegrationTests.dev.xcconfig */; + baseConfigurationReference = 947E19739DB3292DAA943CD3 /* Pods-fearlessAll-fearlessIntegrationTests.dev.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -18848,7 +20233,7 @@ }; 8438E1D924BFAAD2001BDB13 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 63B11A7ADEF107B6341C378F /* Pods-fearlessAll-fearlessIntegrationTests.release.xcconfig */; + baseConfigurationReference = 1107A1285620FDD030DE2268 /* Pods-fearlessAll-fearlessIntegrationTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -18991,8 +20376,10 @@ baseConfigurationReference = 849013FA24A92A05008F705E /* fearless.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon$(ICON_SUFFIX)"; + CODE_SIGN_ENTITLEMENTS = fearless/fearless.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 7; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = YLWWUD25VZ; ENABLE_BITCODE = NO; INFOPLIST_FILE = fearless/Info.plist; @@ -19003,10 +20390,11 @@ "$(CONFIGURATION_BUILD_DIR)", "$(FRAMEWORK_SEARCH_PATHS)", ); - MARKETING_VERSION = 2.2.3; + MARKETING_VERSION = 4.0.1; OTHER_SWIFT_FLAGS = "$(inherited)"; - PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless; + PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearlesswallet; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 1; }; @@ -19017,9 +20405,10 @@ baseConfigurationReference = 849013F924A92A05008F705E /* fearless.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon$(ICON_SUFFIX)"; + CODE_SIGN_ENTITLEMENTS = fearless/fearless.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 7; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = YLWWUD25VZ; ENABLE_BITCODE = NO; INFOPLIST_FILE = fearless/Info.plist; @@ -19030,8 +20419,8 @@ "$(CONFIGURATION_BUILD_DIR)", "$(FRAMEWORK_SEARCH_PATHS)", ); - MARKETING_VERSION = 2.2.3; - PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless; + MARKETING_VERSION = 4.0.1; + PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearlesswallet; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; @@ -19041,7 +20430,7 @@ }; 849013CB24A80986008F705E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = ED916AAFB6B5A7FA0C802615 /* Pods-fearlessTests.debug.xcconfig */; + baseConfigurationReference = 54648003EC8531169B687994 /* Pods-fearlessTests.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; BUNDLE_LOADER = "$(TEST_HOST)"; @@ -19066,7 +20455,7 @@ }; 849013CC24A80986008F705E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7BDBADCF78FB10BE08DE5259 /* Pods-fearlessTests.release.xcconfig */; + baseConfigurationReference = D9657DB9D8AB36AADD726E5E /* Pods-fearlessTests.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; BUNDLE_LOADER = "$(TEST_HOST)"; @@ -19155,9 +20544,10 @@ baseConfigurationReference = 849013F824A92A05008F705E /* fearless.dev.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "AppIcon$(ICON_SUFFIX)"; + CODE_SIGN_ENTITLEMENTS = fearless/fearless.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 7; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = YLWWUD25VZ; ENABLE_BITCODE = NO; INFOPLIST_FILE = fearless/Info.plist; @@ -19168,9 +20558,9 @@ "$(CONFIGURATION_BUILD_DIR)", "$(FRAMEWORK_SEARCH_PATHS)", ); - MARKETING_VERSION = 2.2.3; + MARKETING_VERSION = 4.0.1; OTHER_SWIFT_FLAGS = "$(inherited)"; - PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless; + PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearlesswallet; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; @@ -19180,7 +20570,7 @@ }; 8490140024A92A27008F705E /* Dev */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 38B543AA1B941C76CB021051 /* Pods-fearlessTests.dev.xcconfig */; + baseConfigurationReference = 895FD86323A090143D0ADA24 /* Pods-fearlessTests.dev.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; BUNDLE_LOADER = "$(TEST_HOST)"; @@ -19249,6 +20639,30 @@ /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ + 0701B8A12C78F54200DCD395 /* XCRemoteSwiftPackageReference "Cosmos" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/evgenyneu/Cosmos.git"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 25.0.1; + }; + }; + 070ED7D02C3E7DE100DF4098 /* XCRemoteSwiftPackageReference "ton-swift" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/DRadmir/ton-swift"; + requirement = { + branch = main; + kind = branch; + }; + }; + 070ED7E92C4543D900DF4098 /* XCRemoteSwiftPackageReference "ton-api-swift" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/DRadmir/ton-api-swift.git"; + requirement = { + branch = main; + kind = branch; + }; + }; FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/WalletConnect/WalletConnectSwiftV2"; @@ -19261,19 +20675,11 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/soramitsu/shared-features-spm.git"; requirement = { - branch = "price-update-center"; + branch = "FW-new-ecosystem"; kind = branch; }; }; - FA8FD1862AF4BEDD00354482 /* XCRemoteSwiftPackageReference "Swime" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/sendyhalim/Swime"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 3.0.0; - }; - }; - FAB482E92C58A8AA00594D89 /* XCRemoteSwiftPackageReference "Web3.swift" */ = { + FA8FD17F2AF4B55100354482 /* XCRemoteSwiftPackageReference "Web3.swift" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/bnsports/Web3.swift.git"; requirement = { @@ -19281,186 +20687,236 @@ version = 7.7.7; }; }; - FAF600732C48D79500E56558 /* XCRemoteSwiftPackageReference "Cosmos" */ = { + FA8FD1862AF4BEDD00354482 /* XCRemoteSwiftPackageReference "Swime" */ = { isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/evgenyneu/Cosmos.git"; + repositoryURL = "https://github.com/sendyhalim/Swime"; requirement = { - kind = exactVersion; - version = 25.0.1; + kind = upToNextMajorVersion; + minimumVersion = 3.0.0; }; }; /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ - C6182B0E2C631AAC0089558D /* IrohaCrypto */ = { + 0701B8A22C78F54200DCD395 /* Cosmos */ = { isa = XCSwiftPackageProductDependency; - productName = IrohaCrypto; + package = 0701B8A12C78F54200DCD395 /* XCRemoteSwiftPackageReference "Cosmos" */; + productName = Cosmos; + }; + 070ED7D12C3E7DE100DF4098 /* TonSwift */ = { + isa = XCSwiftPackageProductDependency; + package = 070ED7D02C3E7DE100DF4098 /* XCRemoteSwiftPackageReference "ton-swift" */; + productName = TonSwift; + }; + 070ED7EA2C4543D900DF4098 /* EventSource */ = { + isa = XCSwiftPackageProductDependency; + package = 070ED7E92C4543D900DF4098 /* XCRemoteSwiftPackageReference "ton-api-swift" */; + productName = EventSource; + }; + 070ED7EC2C4543D900DF4098 /* StreamURLSessionTransport */ = { + isa = XCSwiftPackageProductDependency; + package = 070ED7E92C4543D900DF4098 /* XCRemoteSwiftPackageReference "ton-api-swift" */; + productName = StreamURLSessionTransport; }; - C6182B102C631AAC0089558D /* MPQRCoreSDK */ = { + 070ED7EE2C4543D900DF4098 /* TonAPI */ = { isa = XCSwiftPackageProductDependency; - productName = MPQRCoreSDK; + package = 070ED7E92C4543D900DF4098 /* XCRemoteSwiftPackageReference "ton-api-swift" */; + productName = TonAPI; }; - C6182B122C631AAC0089558D /* RobinHood */ = { + 070ED7F02C4543D900DF4098 /* TonStreamingAPI */ = { isa = XCSwiftPackageProductDependency; + package = 070ED7E92C4543D900DF4098 /* XCRemoteSwiftPackageReference "ton-api-swift" */; + productName = TonStreamingAPI; + }; + FA7254662AC2F12D00EC47A6 /* WalletConnect */ = { + isa = XCSwiftPackageProductDependency; + package = FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */; + productName = WalletConnect; + }; + FA7254682AC2F12D00EC47A6 /* WalletConnectAuth */ = { + isa = XCSwiftPackageProductDependency; + package = FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */; + productName = WalletConnectAuth; + }; + FA72546A2AC2F12D00EC47A6 /* WalletConnectNetworking */ = { + isa = XCSwiftPackageProductDependency; + package = FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */; + productName = WalletConnectNetworking; + }; + FA72546C2AC2F12D00EC47A6 /* WalletConnectPairing */ = { + isa = XCSwiftPackageProductDependency; + package = FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */; + productName = WalletConnectPairing; + }; + FA72546E2AC2F12D00EC47A6 /* Web3Wallet */ = { + isa = XCSwiftPackageProductDependency; + package = FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */; + productName = Web3Wallet; + }; + FA8810972BDCAF260084CC4B /* IrohaCrypto */ = { + isa = XCSwiftPackageProductDependency; + package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; + productName = IrohaCrypto; + }; + FA8810992BDCAF260084CC4B /* RobinHood */ = { + isa = XCSwiftPackageProductDependency; + package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = RobinHood; }; - C6182B142C631AAC0089558D /* SSFAccountManagment */ = { + FA88109B2BDCAF260084CC4B /* SSFAccountManagment */ = { isa = XCSwiftPackageProductDependency; + package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFAccountManagment; }; - C6182B162C631AAC0089558D /* SSFAccountManagmentStorage */ = { + FA88109D2BDCAF260084CC4B /* SSFAccountManagmentStorage */ = { isa = XCSwiftPackageProductDependency; + package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFAccountManagmentStorage; }; - C6182B182C631AAC0089558D /* SSFAssetManagment */ = { + FA88109F2BDCAF260084CC4B /* SSFAssetManagment */ = { isa = XCSwiftPackageProductDependency; + package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFAssetManagment; }; - C6182B1A2C631AAC0089558D /* SSFChainConnection */ = { + FA8810A12BDCAF260084CC4B /* SSFChainConnection */ = { isa = XCSwiftPackageProductDependency; + package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFChainConnection; }; - C6182B1C2C631AAC0089558D /* SSFChainRegistry */ = { + FA8810A32BDCAF260084CC4B /* SSFChainRegistry */ = { isa = XCSwiftPackageProductDependency; + package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFChainRegistry; }; - C6182B1E2C631AAC0089558D /* SSFCloudStorage */ = { + FA8810A52BDCAF260084CC4B /* SSFCloudStorage */ = { isa = XCSwiftPackageProductDependency; + package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFCloudStorage; }; - C6182B202C631AAC0089558D /* SSFCrypto */ = { + FA8810A72BDCAF260084CC4B /* SSFCrypto */ = { isa = XCSwiftPackageProductDependency; + package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFCrypto; }; - C6182B222C631AAC0089558D /* SSFEraKit */ = { + FA8810A92BDCAF260084CC4B /* SSFEraKit */ = { isa = XCSwiftPackageProductDependency; + package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFEraKit; }; - C6182B242C631AAC0089558D /* SSFExtrinsicKit */ = { + FA8810AB2BDCAF260084CC4B /* SSFExtrinsicKit */ = { isa = XCSwiftPackageProductDependency; + package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFExtrinsicKit; }; - C6182B262C631AAC0089558D /* SSFHelpers */ = { + FA8810AD2BDCAF260084CC4B /* SSFHelpers */ = { isa = XCSwiftPackageProductDependency; + package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFHelpers; }; - C6182B282C631AAC0089558D /* SSFKeyPair */ = { + FA8810AF2BDCAF260084CC4B /* SSFKeyPair */ = { isa = XCSwiftPackageProductDependency; + package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFKeyPair; }; - C6182B2A2C631AAC0089558D /* SSFLogger */ = { + FA8810B12BDCAF260084CC4B /* SSFLogger */ = { isa = XCSwiftPackageProductDependency; + package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFLogger; }; - C6182B2C2C631AAC0089558D /* SSFModels */ = { + FA8810B32BDCAF260084CC4B /* SSFModels */ = { isa = XCSwiftPackageProductDependency; + package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFModels; }; - C6182B2E2C631AAC0089558D /* SSFNetwork */ = { + FA8810B52BDCAF260084CC4B /* SSFNetwork */ = { isa = XCSwiftPackageProductDependency; + package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFNetwork; }; - C6182B302C631AAC0089558D /* SSFPolkaswap */ = { + FA8810B72BDCAF260084CC4B /* SSFPolkaswap */ = { isa = XCSwiftPackageProductDependency; + package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFPolkaswap; }; - C6182B322C631AAC0089558D /* SSFPools */ = { + FA8810B92BDCAF260084CC4B /* SSFPools */ = { isa = XCSwiftPackageProductDependency; + package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFPools; }; - C6182B342C631AAC0089558D /* SSFPoolsStorage */ = { + FA8810BB2BDCAF260084CC4B /* SSFPoolsStorage */ = { isa = XCSwiftPackageProductDependency; + package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFPoolsStorage; }; - C6182B362C631AAC0089558D /* SSFQRService */ = { + FA8810BD2BDCAF260084CC4B /* SSFQRService */ = { isa = XCSwiftPackageProductDependency; + package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFQRService; }; - C6182B382C631AAC0089558D /* SSFRuntimeCodingService */ = { + FA8810BF2BDCAF260084CC4B /* SSFRuntimeCodingService */ = { isa = XCSwiftPackageProductDependency; + package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFRuntimeCodingService; }; - C6182B3A2C631AAC0089558D /* SSFSigner */ = { + FA8810C12BDCAF260084CC4B /* SSFSigner */ = { isa = XCSwiftPackageProductDependency; + package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFSigner; }; - C6182B3C2C631AAC0089558D /* SSFSingleValueCache */ = { + FA8810C32BDCAF260084CC4B /* SSFSingleValueCache */ = { isa = XCSwiftPackageProductDependency; + package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFSingleValueCache; }; - C6182B3E2C631AAC0089558D /* SSFStorageQueryKit */ = { + FA8810C52BDCAF260084CC4B /* SSFStorageQueryKit */ = { isa = XCSwiftPackageProductDependency; + package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFStorageQueryKit; }; - C6182B402C631AAC0089558D /* SSFTransferService */ = { + FA8810C72BDCAF260084CC4B /* SSFTransferService */ = { isa = XCSwiftPackageProductDependency; + package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFTransferService; }; - C6182B422C631AAC0089558D /* SSFUtils */ = { + FA8810C92BDCAF260084CC4B /* SSFUtils */ = { isa = XCSwiftPackageProductDependency; + package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFUtils; }; - C6182B442C631AAC0089558D /* SSFXCM */ = { + FA8810CB2BDCAF260084CC4B /* SSFXCM */ = { isa = XCSwiftPackageProductDependency; + package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFXCM; }; - C6182B462C631AAC0089558D /* SoraKeystore */ = { + FA8810CD2BDCAF260084CC4B /* SoraKeystore */ = { isa = XCSwiftPackageProductDependency; + package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SoraKeystore; }; - C6182B482C631AAC0089558D /* keccak */ = { + FA8810CF2BDCAF260084CC4B /* keccak */ = { isa = XCSwiftPackageProductDependency; + package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = keccak; }; - FA7254662AC2F12D00EC47A6 /* WalletConnect */ = { - isa = XCSwiftPackageProductDependency; - package = FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */; - productName = WalletConnect; - }; - FA7254682AC2F12D00EC47A6 /* WalletConnectAuth */ = { - isa = XCSwiftPackageProductDependency; - package = FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */; - productName = WalletConnectAuth; - }; - FA72546A2AC2F12D00EC47A6 /* WalletConnectNetworking */ = { - isa = XCSwiftPackageProductDependency; - package = FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */; - productName = WalletConnectNetworking; - }; - FA72546C2AC2F12D00EC47A6 /* WalletConnectPairing */ = { - isa = XCSwiftPackageProductDependency; - package = FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */; - productName = WalletConnectPairing; - }; - FA72546E2AC2F12D00EC47A6 /* Web3Wallet */ = { - isa = XCSwiftPackageProductDependency; - package = FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */; - productName = Web3Wallet; - }; - FA8FD1872AF4BEDD00354482 /* Swime */ = { - isa = XCSwiftPackageProductDependency; - package = FA8FD1862AF4BEDD00354482 /* XCRemoteSwiftPackageReference "Swime" */; - productName = Swime; - }; - FAB482EA2C58A8AA00594D89 /* Web3 */ = { + FA8FD1802AF4B55100354482 /* Web3 */ = { isa = XCSwiftPackageProductDependency; - package = FAB482E92C58A8AA00594D89 /* XCRemoteSwiftPackageReference "Web3.swift" */; + package = FA8FD17F2AF4B55100354482 /* XCRemoteSwiftPackageReference "Web3.swift" */; productName = Web3; }; - FAB482EC2C58A8AA00594D89 /* Web3ContractABI */ = { + FA8FD1822AF4B55100354482 /* Web3ContractABI */ = { isa = XCSwiftPackageProductDependency; - package = FAB482E92C58A8AA00594D89 /* XCRemoteSwiftPackageReference "Web3.swift" */; + package = FA8FD17F2AF4B55100354482 /* XCRemoteSwiftPackageReference "Web3.swift" */; productName = Web3ContractABI; }; - FAB482EE2C58A8AA00594D89 /* Web3PromiseKit */ = { + FA8FD1842AF4B55100354482 /* Web3PromiseKit */ = { isa = XCSwiftPackageProductDependency; - package = FAB482E92C58A8AA00594D89 /* XCRemoteSwiftPackageReference "Web3.swift" */; + package = FA8FD17F2AF4B55100354482 /* XCRemoteSwiftPackageReference "Web3.swift" */; productName = Web3PromiseKit; }; - FAF600742C48D79600E56558 /* Cosmos */ = { + FA8FD1872AF4BEDD00354482 /* Swime */ = { isa = XCSwiftPackageProductDependency; - package = FAF600732C48D79500E56558 /* XCRemoteSwiftPackageReference "Cosmos" */; - productName = Cosmos; + package = FA8FD1862AF4BEDD00354482 /* XCRemoteSwiftPackageReference "Swime" */; + productName = Swime; }; /* End XCSwiftPackageProductDependency section */ @@ -19468,7 +20924,7 @@ FAD0679F2C2044490050291F /* SubstrateDataModel.xcdatamodeld */ = { isa = XCVersionGroup; children = ( - C6182B4A2C6327D00089558D /* SubstrateDataModel_v8.xcdatamodel */, + 070ED7D62C3FBB8800DF4098 /* SubstrateDataModel_v8.xcdatamodel */, FAD067A02C2044490050291F /* SubstrateDataModel.xcdatamodel */, FAD067A12C2044490050291F /* SubstrateDataModel_v4.xcdatamodel */, FAD067A22C2044490050291F /* SubstrateDataModel_v2.xcdatamodel */, @@ -19477,7 +20933,7 @@ FAD067A52C2044490050291F /* SubstrateDataModel_v6.xcdatamodel */, FAD067A62C2044490050291F /* SubstrateDataModel_v3.xcdatamodel */, ); - currentVersion = C6182B4A2C6327D00089558D /* SubstrateDataModel_v8.xcdatamodel */; + currentVersion = 070ED7D62C3FBB8800DF4098 /* SubstrateDataModel_v8.xcdatamodel */; path = SubstrateDataModel.xcdatamodeld; sourceTree = ""; versionGroupType = wrapper.xcdatamodel; diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 17631718ed..46530cb07a 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "63872357be3b8d8ea5520be135fe981d8816f9791ecdf1f6a79c9211e5ad62a2", + "originHash" : "db3e9f7067135f4497b6059ac444951778a2f8ca758335577305759626739473", "pins" : [ { "identity" : "appauth-ios", @@ -15,8 +15,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/attaswift/BigInt.git", "state" : { - "revision" : "793a7fac0bfc318e85994bf6900652e827aef33e", - "version" : "5.4.1" + "revision" : "0ed110f7555c34ff468e72e1686e59721f2b0da6", + "version" : "5.3.0" } }, { @@ -141,8 +141,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/soramitsu/shared-features-spm.git", "state" : { - "branch" : "price-update-center", - "revision" : "2b13aea1e4284e8c47204895ace1f56ae2536212" + "branch" : "FW-new-ecosystem", + "revision" : "c3de9e1a7f9b8043da8b8638282aa6a40776208f" } }, { @@ -159,8 +159,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-collections.git", "state" : { - "revision" : "9bf03ff58ce34478e66aaee630e491823326fd06", - "version" : "1.1.3" + "revision" : "3d2dc41a01f9e49d84f0a3925fb858bed64f702d", + "version" : "1.1.2" } }, { @@ -177,8 +177,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-nio.git", "state" : { - "revision" : "30df8551f4e636b8f68627dbc205221bcfc57782", - "version" : "2.71.0" + "revision" : "4c4453b489cf76e6b3b0f300aba663eb78182fad", + "version" : "2.70.0" } }, { @@ -186,8 +186,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-nio-extras.git", "state" : { - "revision" : "d1ead62745cc3269e482f1c51f27608057174379", - "version" : "1.24.0" + "revision" : "05c36b57453d23ea63785d58a7dbc7b70ba1745e", + "version" : "1.23.0" } }, { @@ -204,8 +204,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-nio-ssl.git", "state" : { - "revision" : "7b84abbdcef69cc3be6573ac12440220789dcd69", - "version" : "2.27.2" + "revision" : "a9fa5efd86e7ce2e5c1b6de113262e58035ca251", + "version" : "2.27.1" } }, { @@ -217,6 +217,15 @@ "version" : "1.21.0" } }, + { + "identity" : "swift-openapi-runtime", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-openapi-runtime", + "state" : { + "revision" : "a51b3bd6f2151e9a6f792ca6937a7242c4758768", + "version" : "0.3.6" + } + }, { "identity" : "swift-qrcode-generator", "kind" : "remoteSourceControl", @@ -262,6 +271,24 @@ "version" : "3.1.0" } }, + { + "identity" : "ton-api-swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/DRadmir/ton-api-swift.git", + "state" : { + "branch" : "main", + "revision" : "8ddff19a40d3d00503cab7fb9d9eb77459169488" + } + }, + { + "identity" : "ton-swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/DRadmir/ton-swift", + "state" : { + "branch" : "main", + "revision" : "73c9894e2be8d6d16b87853342eb2755d2e4be8a" + } + }, { "identity" : "tweetnacl-swiftwrap", "kind" : "remoteSourceControl", diff --git a/fearless/AppDelegate.swift b/fearless/AppDelegate.swift index 2b4f1bcb27..f6b8a6e086 100644 --- a/fearless/AppDelegate.swift +++ b/fearless/AppDelegate.swift @@ -30,4 +30,18 @@ class AppDelegate: UIResponder, UIApplicationDelegate { ) -> Bool { URLHandlingService.shared.handle(url: url) } + + func application( + _: UIApplication, + continue userActivity: NSUserActivity, + restorationHandler _: @escaping ([any UIUserActivityRestoring]?) -> Void + ) -> Bool { + guard + userActivity.activityType == NSUserActivityTypeBrowsingWeb, + let url = userActivity.webpageURL + else { + return false + } + return URLHandlingService.shared.handle(url: url) + } } diff --git a/fearless/ApplicationLayer/ServiceAssembly.swift b/fearless/ApplicationLayer/ServiceAssembly.swift new file mode 100644 index 0000000000..52466b2417 --- /dev/null +++ b/fearless/ApplicationLayer/ServiceAssembly.swift @@ -0,0 +1,329 @@ +import Foundation +import SSFTransferService +import SoraKeystore +import SSFStorageQueryKit +import RobinHood +import SSFUtils +import SSFModels +import SSFNetwork + +final class ServiceAssembly { + static let shared = ServiceAssembly() + private init() {} + + lazy var chainRegistry = ChainRegistryFacade.sharedRegistry + lazy var logger = Logger.shared + lazy var operationManager = OperationManagerFacade.sharedManager + lazy var substrateRepositoryFacade = SubstrateDataStorageFacade.shared + lazy var keystore: KeystoreProtocol = Keychain() + lazy var priceLocalSubscriber = PriceLocalStorageSubscriberImpl.shared + lazy var eventCenter = EventCenter.shared + lazy var userDefaults = SettingsManager.shared + lazy var localToggle = LocalToggleService.shared + lazy var walletBalanceSubscriptionAdapter = WalletBalanceSubscriptionAdapter.shared + + private var _accountInfoRemoteServiceDefault: AccountInfoRemoteService? + func accountInfoRemoteServiceDefault() -> AccountInfoRemoteService { + if let _accountInfoRemoteServiceDefault { + return _accountInfoRemoteServiceDefault + } + + let service = AccountInfoRemoteServiceDefault( + ethereumRemoteBalanceFetching: ethereumRemoteBalanceFetching(), + tonRemoteBalanceFetching: tonRemoteBalanceFetching(), + substrateRemoteBalanceFetching: substrateRemoteBalanceFetching() + ) + _accountInfoRemoteServiceDefault = service + return service + } + + private var _ethereumRemoteBalanceFetching: AccountInfoRemoteService? + func ethereumRemoteBalanceFetching() -> AccountInfoRemoteService { + if let _ethereumRemoteBalanceFetching { + return _ethereumRemoteBalanceFetching + } + let ethereumBalanceRepositoryWrapper = BalanceRepositoryCacheWrapper( + logger: logger, + repository: accountInfoStorageWrapper(), + operationManager: operationManager + ) + let service = EthereumRemoteBalanceFetching( + chainRegistry: chainRegistry, + repositoryWrapper: ethereumBalanceRepositoryWrapper + ) + _ethereumRemoteBalanceFetching = service + return service + } + + private var _tonRemoteBalanceFetching: AccountInfoRemoteService? + func tonRemoteBalanceFetching() -> AccountInfoRemoteService { + if let _tonRemoteBalanceFetching { + return _tonRemoteBalanceFetching + } + let tonBalanceRepositoryWrapper = BalanceRepositoryCacheWrapper( + logger: logger, + repository: accountInfoStorageWrapper(), + operationManager: operationManager + ) + + let service = TonRemoteBalanceFetchingImpl( + chainRegistry: chainRegistry, + repositoryWrapper: tonBalanceRepositoryWrapper, + jettonInjector: tonJettonInjector() + ) + _tonRemoteBalanceFetching = service + return service + } + + private var _substrateRemoteBalanceFetching: AccountInfoRemoteService? + func substrateRemoteBalanceFetching() -> AccountInfoRemoteService { + if let _substrateRemoteBalanceFetching { + return _substrateRemoteBalanceFetching + } + let storagePerformer = SSFStorageQueryKit.StorageRequestPerformerDefault( + chainRegistry: chainRegistry + ) + let service = SubstrateRemoteBalanceFetchingImpl( + storagePerformer: storagePerformer + ) + _substrateRemoteBalanceFetching = service + return service + } + + private var _accountInfoStorageWrapper: AnyDataProviderRepository? + func accountInfoStorageWrapper() -> AnyDataProviderRepository { + if let _accountInfoStorageWrapper { + return _accountInfoStorageWrapper + } + let service = SubstrateRepositoryFactory( + storageFacade: UserDataStorageFacade.shared + ).createAccountInfoStorageItemRepository() + + _accountInfoStorageWrapper = service + return service + } + + private var _existentialDepositService: ExistentialDepositServiceProtocol? + func existentialDepositService() -> ExistentialDepositServiceProtocol { + if let _existentialDepositService { + return _existentialDepositService + } + let existentialDepositService = ExistentialDepositService( + operationManager: operationManager, + chainRegistry: chainRegistry + ) + _existentialDepositService = existentialDepositService + return existentialDepositService + } + + func transferService(for wallet: MetaAccountModel) -> TransferService { + TransferServiceDefault( + wallet: wallet, + keystore: keystore, + chainRegistry: chainRegistry + ) + } + + private var _storageOperationFactory: StorageRequestFactoryProtocol? + func storageOperationFactory() -> StorageRequestFactoryProtocol { + if let _storageOperationFactory { + return _storageOperationFactory + } + let storageOperationFactory = StorageRequestFactory( + remoteFactory: StorageKeyFactory(), + operationManager: operationManager + ) + _storageOperationFactory = storageOperationFactory + return storageOperationFactory + } + + private var _polkaswapService: PolkaswapService? + func polkaswapService() -> PolkaswapService { + if let _polkaswapService { + return _polkaswapService + } + + let settingsRepository: CoreDataRepository = + substrateRepositoryFacade.createRepository( + filter: nil, + sortDescriptors: [], + mapper: AnyCoreDataMapper(PolkaswapSettingMapper()) + ) + + let operationFactory = PolkaswapOperationFactory( + storageRequestFactory: storageOperationFactory(), + chainRegistry: chainRegistry, + chainId: Chain.soraMain.genesisHash + ) + let polkaswapService = PolkaswapServiceImpl( + polkaswapOperationFactory: operationFactory, + settingsRepository: AnyDataProviderRepository(settingsRepository), + operationManager: operationManager + ) + _polkaswapService = polkaswapService + return polkaswapService + } + + func chainModelRepository( + for filter: NSPredicate? = NSPredicate.enabledCHain(), + sortDescriptors: [NSSortDescriptor] = [] + ) -> AnyDataProviderRepository { + let chainRepository = ChainRepositoryFactory().createRepository( + for: filter, + sortDescriptors: sortDescriptors + ) + return AnyDataProviderRepository(chainRepository) + } + + func asyncChainModelRepository( + for filter: NSPredicate? = NSPredicate.enabledCHain(), + sortDescriptors: [NSSortDescriptor] = [] + ) -> AsyncAnyRepository { + let chainRepository = ChainRepositoryFactory().createAsyncRepository( + for: filter, + sortDescriptors: sortDescriptors + ) + return AsyncAnyRepository(chainRepository) + } + + func addressChainDefiner(wallet: MetaAccountModel) -> AddressChainDefiner { + AddressChainDefiner( + operationManager: operationManager, + chainModelRepository: chainModelRepository(), + wallet: wallet + ) + } + + func chainAssetFetching(qualityOfService: QualityOfService) -> ChainAssetFetchingProtocol { + let operationQueue = OperationQueue() + operationQueue.qualityOfService = qualityOfService + let chainAssetFetching = ChainAssetsFetching( + chainRepository: chainModelRepository(), + operationQueue: operationQueue + ) + return chainAssetFetching + } + + private var _scamInfoAsyncRepository: AsyncAnyRepository? + func scamInfoAsyncRepository() -> AsyncAnyRepository { + if let _scamInfoAsyncRepository { + return _scamInfoAsyncRepository + } + let mapper: CodableCoreDataMapper = + CodableCoreDataMapper(entityIdentifierFieldName: #keyPath(CDScamInfo.address)) + let repository: AsyncCoreDataRepositoryDefault = + substrateRepositoryFacade.createAsyncRepository( + filter: nil, + sortDescriptors: [], + mapper: AnyCoreDataMapper(mapper) + ) + let anyRepository = AsyncAnyRepository(repository) + _scamInfoAsyncRepository = anyRepository + return anyRepository + } + + private var _tonJettonInjector: TonJettonInjector? + func tonJettonInjector() -> TonJettonInjector { + if let _tonJettonInjector { + return _tonJettonInjector + } + + let repo = asyncChainModelRepository() + let injector = TonJettonInjectorImpl( + chainModelRepository: repo, + eventCenter: eventCenter, + logger: logger + ) + _tonJettonInjector = injector + return injector + } + + private var _tonConnectService: TonConnectService? + func tonConnectService() -> TonConnectService { + if let _tonConnectService { + return _tonConnectService + } + + let networkWorker = SSFNetwork.NetworkWorkerImpl() + let eventCenter = TonConnectEventsCenter( + chainRegistry: chainRegistry, + lastEventStore: SettingsManager.shared, + logger: logger + ) + let service = TonConnectServiceImpl( + chainRegistry: chainRegistry, + tonService: tonSendService(), + networkWorker: networkWorker, + messageBuilder: TonConnectMessageBuilderImpl(), + appRepository: tonConnectAppAsyncRepository(), + eventCenter: eventCenter, + logger: logger + ) + _tonConnectService = service + return service + } + + private var _tonDappAsyncRepository: AsyncAnyRepository? + func tonDappAsyncRepository() -> AsyncAnyRepository { + if let _tonDappAsyncRepository { + return _tonDappAsyncRepository + } + + let mapper: CodableCoreDataMapper = + CodableCoreDataMapper(entityIdentifierFieldName: #keyPath(CDTonDapp.identifier)) + let repo = substrateRepositoryFacade.createAsyncRepository( + filter: nil, + sortDescriptors: [], + mapper: AnyCoreDataMapper(mapper) + ) + let anyRepo = AsyncAnyRepository(repo) + _tonDappAsyncRepository = anyRepo + return anyRepo + } + + private var _tonConnectAppAsyncRepository: AsyncAnyRepository? + func tonConnectAppAsyncRepository() -> AsyncAnyRepository { + if let _tonConnectAppAsyncRepository { + return _tonConnectAppAsyncRepository + } + + let mapper: CodableCoreDataMapper = CodableCoreDataMapper() + let repo = substrateRepositoryFacade.createAsyncRepository( + filter: nil, + sortDescriptors: [], + mapper: AnyCoreDataMapper(mapper) + ) + let anyRepo = AsyncAnyRepository(repo) + _tonConnectAppAsyncRepository = anyRepo + return anyRepo + } + + private var _tonSendService: TonSendService? + func tonSendService() -> TonSendService { + if let _tonSendService { + return _tonSendService + } + + let service = TonSendServiceDefault( + chainRegistry: chainRegistry + ) + _tonSendService = service + return service + } + + func tonBocFactory( + metaId: String, + accountResponse: ChainAccountResponse + ) throws -> BocFactory { + let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil + let tag: String = KeystoreTagV2.secretKeyTag( + for: .ton, + metaId: metaId, + accountId: accountId + ) + + let secretKey = try keystore.fetchKey(for: tag) + let factory = BocFactoryImpl(secretKey: secretKey) + return factory + } +} diff --git a/fearless/ApplicationLayer/Services/Balance/AccountInfo/SubstrateAccountInfoFetching.swift b/fearless/ApplicationLayer/Services/Balance/AccountInfo/SubstrateAccountInfoFetching.swift index c93993653e..b479ee300c 100644 --- a/fearless/ApplicationLayer/Services/Balance/AccountInfo/SubstrateAccountInfoFetching.swift +++ b/fearless/ApplicationLayer/Services/Balance/AccountInfo/SubstrateAccountInfoFetching.swift @@ -127,67 +127,69 @@ final class AccountInfoFetching: AccountInfoFetchingProtocol { completionBlock(chainAsset, nil) return } - if chainAsset.chain.isEthereum { - self?.handleEthereumAccountInfo( - chainAsset: chainAsset, - item: item, completionBlock: - completionBlock - ) - return - } - switch chainAsset.chainAssetType { - case .normal: - self?.handleAccountInfo( - chainAsset: chainAsset, - item: item, - completionBlock: completionBlock - ) - case - .ormlChain, - .ormlAsset, - .foreignAsset, - .stableAssetPoolToken, - .liquidCrowdloan, - .vToken, - .vsToken, - .stable, - .assetId, - .token2, - .xcm: - self?.handleOrmlAccountInfo( - chainAsset: chainAsset, - item: item, - completionBlock: completionBlock - ) - case .equilibrium: - self?.handleEquilibrium( - chainAsset: chainAsset, - accountId: accountId, - item: item, - completionBlock: completionBlock - ) - case .assets: - self?.handleAssetAccount( - chainAsset: chainAsset, - item: item, - completionBlock: completionBlock - ) - case .soraAsset: - if chainAsset.isUtility { + + switch chainAsset.chain.ecosystem { + case .substrate, .ethereumBased: + switch chainAsset.chainAssetType.substrateAssetType { + case .normal: self?.handleAccountInfo( chainAsset: chainAsset, item: item, completionBlock: completionBlock ) - } else { + case + .ormlChain, + .ormlAsset, + .foreignAsset, + .stableAssetPoolToken, + .liquidCrowdloan, + .vToken, + .vsToken, + .stable, + .assetId, + .token2, + .xcm: self?.handleOrmlAccountInfo( chainAsset: chainAsset, item: item, completionBlock: completionBlock ) + case .equilibrium: + self?.handleEquilibrium( + chainAsset: chainAsset, + accountId: accountId, + item: item, + completionBlock: completionBlock + ) + case .assets: + self?.handleAssetAccount( + chainAsset: chainAsset, + item: item, + completionBlock: completionBlock + ) + case .soraAsset: + if chainAsset.isUtility { + self?.handleAccountInfo( + chainAsset: chainAsset, + item: item, + completionBlock: completionBlock + ) + } else { + self?.handleOrmlAccountInfo( + chainAsset: chainAsset, + item: item, + completionBlock: completionBlock + ) + } + case .none: + break } - case .none: - break + case .ethereum, .ton: + self?.handleEthereumAccountInfo( + chainAsset: chainAsset, + item: item, completionBlock: + completionBlock + ) } default: completionBlock(chainAsset, nil) @@ -266,101 +268,102 @@ private extension AccountInfoFetching { return ClosureOperation { [:] } } - if chainAsset.chain.isEthereum { - return ClosureOperation { - let accountInfo = try JSONDecoder().decode(AccountInfo?.self, from: accountInfoStorageWrapper.data) + switch chainAsset.chain.ecosystem { + case .substrate, .ethereumBased: + let chainAssetType = chainAsset.chainAssetType.substrateAssetType.map { type in + guard type == .soraAsset else { + return type + } - return [chainAsset: accountInfo] + /* Sora assets logic */ + if chainAsset.isUtility { + return .normal + } else { + return .soraAsset + } } - } + switch chainAssetType { + case .none: + return ClosureOperation { [chainAsset: nil] } + case .normal: + guard let decodingOperation: StorageDecodingOperation = createDecodingOperation( + for: accountInfoStorageWrapper.data, + chainAsset: chainAsset, + storagePath: .account + ) else { + return ClosureOperation { [chainAsset: nil] } + } - let chainAssetType = chainAsset.chainAssetType.map { type in - guard type == .soraAsset else { - return type - } + let operation = createNormalMappingOperation( + chainAsset: chainAsset, + dependingOn: decodingOperation + ) - /* Sora assets logic */ - if chainAsset.isUtility { - return .normal - } else { - return .soraAsset - } - } - switch chainAssetType { - case .none: - return ClosureOperation { [chainAsset: nil] } - case .normal: - guard let decodingOperation: StorageDecodingOperation = createDecodingOperation( - for: accountInfoStorageWrapper.data, - chainAsset: chainAsset, - storagePath: .account - ) else { - return ClosureOperation { [chainAsset: nil] } - } + return operation + case + .ormlChain, + .ormlAsset, + .foreignAsset, + .stableAssetPoolToken, + .liquidCrowdloan, + .vToken, + .vsToken, + .stable, + .soraAsset, + .assetId, + .token2, + .xcm: + guard let decodingOperation: StorageDecodingOperation = createDecodingOperation( + for: accountInfoStorageWrapper.data, + chainAsset: chainAsset, + storagePath: .tokens + ) else { + return ClosureOperation { [chainAsset: nil] } + } - let operation = createNormalMappingOperation( - chainAsset: chainAsset, - dependingOn: decodingOperation - ) + let operation = createOrmlMappingOperation( + chainAsset: chainAsset, + dependingOn: decodingOperation + ) - return operation - case - .ormlChain, - .ormlAsset, - .foreignAsset, - .stableAssetPoolToken, - .liquidCrowdloan, - .vToken, - .vsToken, - .stable, - .soraAsset, - .assetId, - .token2, - .xcm: - guard let decodingOperation: StorageDecodingOperation = createDecodingOperation( - for: accountInfoStorageWrapper.data, - chainAsset: chainAsset, - storagePath: .tokens - ) else { - return ClosureOperation { [chainAsset: nil] } - } + return operation + case .equilibrium: + guard let decodingOperation: StorageDecodingOperation = createDecodingOperation( + for: accountInfoStorageWrapper.data, + chainAsset: chainAsset, + storagePath: chainAsset.storagePath + ) else { + return ClosureOperation { [chainAsset: nil] } + } - let operation = createOrmlMappingOperation( - chainAsset: chainAsset, - dependingOn: decodingOperation - ) + let operation = createEquilibriumMappingOperation( + chainAsset: chainAsset, + dependingOn: decodingOperation + ) - return operation - case .equilibrium: - guard let decodingOperation: StorageDecodingOperation = createDecodingOperation( - for: accountInfoStorageWrapper.data, - chainAsset: chainAsset, - storagePath: chainAsset.storagePath - ) else { - return ClosureOperation { [chainAsset: nil] } - } + return operation + case .assets: + guard let decodingOperation: StorageDecodingOperation = createDecodingOperation( + for: accountInfoStorageWrapper.data, + chainAsset: chainAsset, + storagePath: .assetsAccount + ) else { + return ClosureOperation { [chainAsset: nil] } + } - let operation = createEquilibriumMappingOperation( - chainAsset: chainAsset, - dependingOn: decodingOperation - ) + let operation = createAssetMappingOperation( + chainAsset: chainAsset, + dependingOn: decodingOperation + ) - return operation - case .assets: - guard let decodingOperation: StorageDecodingOperation = createDecodingOperation( - for: accountInfoStorageWrapper.data, - chainAsset: chainAsset, - storagePath: .assetsAccount - ) else { - return ClosureOperation { [chainAsset: nil] } + return operation } + case .ethereum, .ton: + return ClosureOperation { + let accountInfo = try JSONDecoder().decode(AccountInfo?.self, from: accountInfoStorageWrapper.data) - let operation = createAssetMappingOperation( - chainAsset: chainAsset, - dependingOn: decodingOperation - ) - - return operation + return [chainAsset: accountInfo] + } } } diff --git a/fearless/ApplicationLayer/Services/Balance/AccountInfoRemoteService.swift b/fearless/ApplicationLayer/Services/Balance/AccountInfoRemoteService.swift new file mode 100644 index 0000000000..22fd5b2475 --- /dev/null +++ b/fearless/ApplicationLayer/Services/Balance/AccountInfoRemoteService.swift @@ -0,0 +1,102 @@ +import Foundation +import SSFStorageQueryKit +import SSFChainRegistry +import SSFNetwork +import SSFModels +import SSFUtils +import RobinHood + +protocol AccountInfoRemoteService { + func fetchAccountInfos( + for chain: ChainModel, + wallet: MetaAccountModel + ) async throws -> [ChainAssetId: AccountInfo?] + + func fetchAccountInfo( + for chainAsset: ChainAsset, + wallet: MetaAccountModel + ) async throws -> AccountInfo? + + func fetchAccountInfos( + for chainAssets: [ChainAsset], + wallet: MetaAccountModel + ) async throws -> [ChainAssetKey: AccountInfo?] +} + +final class AccountInfoRemoteServiceDefault: AccountInfoRemoteService { + private let ethereumRemoteBalanceFetching: AccountInfoRemoteService + private let tonRemoteBalanceFetching: AccountInfoRemoteService + private let substrateRemoteBalanceFetching: AccountInfoRemoteService + + init( + ethereumRemoteBalanceFetching: AccountInfoRemoteService, + tonRemoteBalanceFetching: AccountInfoRemoteService, + substrateRemoteBalanceFetching: AccountInfoRemoteService + ) { + self.ethereumRemoteBalanceFetching = ethereumRemoteBalanceFetching + self.tonRemoteBalanceFetching = tonRemoteBalanceFetching + self.substrateRemoteBalanceFetching = substrateRemoteBalanceFetching + } + + // MARK: - AccountInfoStorageService + + func fetchAccountInfos( + for chain: ChainModel, + wallet: MetaAccountModel + ) async throws -> [ChainAssetId: AccountInfo?] { + let fetcher = getFetcher(for: chain.ecosystem) + let accountInfos = try await fetcher.fetchAccountInfos(for: chain, wallet: wallet) + return accountInfos + } + + func fetchAccountInfo( + for chainAsset: ChainAsset, + wallet: MetaAccountModel + ) async throws -> AccountInfo? { + let fetcher = getFetcher(for: chainAsset.chain.ecosystem) + let accountInfos = try await fetcher.fetchAccountInfo(for: chainAsset, wallet: wallet) + return accountInfos + } + + func fetchAccountInfos( + for chainAssets: [ChainAsset], + wallet: MetaAccountModel + ) async throws -> [ChainAssetKey: AccountInfo?] { + let dict = Dictionary(grouping: chainAssets, by: { $0.chain }) + let balances = try await withThrowingTaskGroup( + of: [ChainAssetKey: AccountInfo?].self, + returning: [ChainAssetKey: AccountInfo?].self + ) { [weak self] group in + guard let self else { return [:] } + + dict.forEach { chain, chainAssets in + group.addTask { + let fetcher = self.getFetcher(for: chain.ecosystem) + let result = try await fetcher.fetchAccountInfos(for: chainAssets, wallet: wallet) + return result + } + } + + var result: [ChainAssetKey: AccountInfo?] = [:] + for try await balance in group { + result = result.merging(balance, uniquingKeysWith: { current, _ in current }) + } + return result + } + + return balances + } + + // MARK: - Private methods + + private func getFetcher(for ecosystem: Ecosystem) -> AccountInfoRemoteService { + switch ecosystem { + case .substrate, .ethereumBased: + return substrateRemoteBalanceFetching + case .ethereum: + return ethereumRemoteBalanceFetching + case .ton: + return tonRemoteBalanceFetching + } + } +} diff --git a/fearless/ApplicationLayer/Services/Balance/BalanceLocksFetching.swift b/fearless/ApplicationLayer/Services/Balance/BalanceLocksFetching.swift index 68e5f06498..7dfe54c086 100644 --- a/fearless/ApplicationLayer/Services/Balance/BalanceLocksFetching.swift +++ b/fearless/ApplicationLayer/Services/Balance/BalanceLocksFetching.swift @@ -3,6 +3,7 @@ import SSFModels import SSFUtils import RobinHood import BigInt +import SSFCrypto enum BalanceLocksFetchingError: Error { case unknownChainAssetType @@ -47,7 +48,7 @@ final class BalanceLocksFetchingDefault { let controllerAddress: String? = try? await storageRequestPerformer.performSingle(controllerRequest) if let controllerAddress { - return try controllerAddress.toAccountId() + return try controllerAddress.toAccountId(using: chainAsset.chain.chainFormat) } let controllerAccountId: Data? = try await storageRequestPerformer.performSingle(controllerRequest) diff --git a/fearless/ApplicationLayer/Services/Balance/AccountInfo/EthereumRemoteBalanceFetching.swift b/fearless/ApplicationLayer/Services/Balance/EthereumRemoteBalanceFetching.swift similarity index 76% rename from fearless/ApplicationLayer/Services/Balance/AccountInfo/EthereumRemoteBalanceFetching.swift rename to fearless/ApplicationLayer/Services/Balance/EthereumRemoteBalanceFetching.swift index bf58d130a5..4b78e0be7a 100644 --- a/fearless/ApplicationLayer/Services/Balance/AccountInfo/EthereumRemoteBalanceFetching.swift +++ b/fearless/ApplicationLayer/Services/Balance/EthereumRemoteBalanceFetching.swift @@ -4,33 +4,58 @@ import Web3ContractABI import Web3PromiseKit import SSFModels import RobinHood +import SSFCrypto -final actor EthereumRemoteBalanceFetching { +actor EthereumRemoteBalanceFetching: AccountInfoRemoteService { private let chainRegistry: ChainRegistryProtocol - private let repositoryWrapper: EthereumBalanceRepositoryCacheWrapper + private let repositoryWrapper: BalanceRepositoryCacheWrapper init( chainRegistry: ChainRegistryProtocol, - repositoryWrapper: EthereumBalanceRepositoryCacheWrapper + repositoryWrapper: BalanceRepositoryCacheWrapper ) { self.chainRegistry = chainRegistry self.repositoryWrapper = repositoryWrapper } - nonisolated private func fetchEthereumBalanceOperation(for chainAsset: ChainAsset, address: String) -> AwaitOperation<[ChainAsset: AccountInfo?]> { - AwaitOperation { [weak self] in - let accountInfo = try await self?.fetchETHBalance(for: chainAsset, address: address) - return [chainAsset: accountInfo] + // MARK: - AccountInfoRemoteService + + func fetchAccountInfos( + for chain: SSFModels.ChainModel, + wallet: MetaAccountModel + ) async throws -> [ChainAssetId: AccountInfo?] { + let chainAssets = chain.chainAssets + let response = try await fetch(for: chainAssets, wallet: wallet) + let mapped = response.map { + ($0.key.chainAssetId, $0.value) } + let map = Dictionary(uniqueKeysWithValues: mapped) + return map } - nonisolated private func fetchErc20BalanceOperation(for chainAsset: ChainAsset, address: String) -> AwaitOperation<[ChainAsset: AccountInfo?]> { - AwaitOperation { [weak self] in - let accountInfo = try await self?.fetchERC20Balance(for: chainAsset, address: address) - return [chainAsset: accountInfo] + func fetchAccountInfo( + for chainAsset: SSFModels.ChainAsset, + wallet: MetaAccountModel + ) async throws -> AccountInfo? { + guard let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId else { + throw ConvenienceError(error: "Missing account id for \(chainAsset.debugName)") } + let accountInfo = try await fetch( + for: chainAsset, + accountId: accountId + ) + return accountInfo + } + + func fetchAccountInfos( + for chainAssets: [SSFModels.ChainAsset], + wallet: MetaAccountModel + ) async throws -> [ChainAssetKey: AccountInfo?] { + try await fetchByUniqKey(for: chainAssets, wallet: wallet) } + // MARK: - Private methods + private func fetchETHBalance(for chainAsset: ChainAsset, address: String) async throws -> AccountInfo? { guard let ws = chainRegistry.getEthereumConnection(for: chainAsset.chain.chainId) else { throw ChainRegistryError.connectionUnavailable @@ -45,7 +70,7 @@ final actor EthereumRemoteBalanceFetching { return } if let balance = resp.result { - let accountInfo = AccountInfo(ethBalance: balance.quantity) + let accountInfo = AccountInfo(balance: balance.quantity) unwrapedContinuation.resume(with: .success(accountInfo)) nillableContinuation = nil } else if let error = resp.error { @@ -76,7 +101,7 @@ final actor EthereumRemoteBalanceFetching { } if let response = response, let balance = response["_balance"] as? BigUInt { - let accountInfo = AccountInfo(ethBalance: balance) + let accountInfo = AccountInfo(balance: balance) unwrapedContinuation.resume(with: .success(accountInfo)) nillableContinuation = nil } else if let error = error { @@ -90,43 +115,7 @@ final actor EthereumRemoteBalanceFetching { } } - nonisolated private func cache(accountInfo: AccountInfo?, chainAsset: ChainAsset, accountId: AccountId) throws { - guard let accountInfo else { return } - let storagePath = chainAsset.storagePath - - let localKey = try LocalStorageKeyFactory().createFromStoragePath( - storagePath, - chainAssetKey: chainAsset.uniqueKey(accountId: accountId) - ) - - try repositoryWrapper.save(data: accountInfo, identifier: localKey) - } -} - -extension EthereumRemoteBalanceFetching: AccountInfoFetchingProtocol { - func fetch( - for chainAsset: ChainAsset, - accountId: AccountId - ) async throws -> (ChainAsset, AccountInfo?) { - guard let address = try? AddressFactory.address(for: accountId, chain: chainAsset.chain) else { - return (chainAsset, nil) - } - - switch chainAsset.asset.ethereumType { - case .normal: - let accountInfo = try await fetchETHBalance(for: chainAsset, address: address) - try cache(accountInfo: accountInfo, chainAsset: chainAsset, accountId: accountId) - return (chainAsset, accountInfo) - case .erc20, .bep20: - let accountInfo = try await fetchERC20Balance(for: chainAsset, address: address) - try cache(accountInfo: accountInfo, chainAsset: chainAsset, accountId: accountId) - return (chainAsset, accountInfo) - case .none: - return (chainAsset, nil) - } - } - - func fetch( + private func fetch( for chainAssets: [ChainAsset], wallet: MetaAccountModel ) async throws -> [ChainAsset: AccountInfo?] { @@ -135,7 +124,7 @@ extension EthereumRemoteBalanceFetching: AccountInfoFetchingProtocol { return [:] } - let chainAssets = chainAssets.filter { $0.chain.isEthereum } + let chainAssets = chainAssets.filter { $0.chain.ecosystem.isEthereum } chainAssets.forEach { chainAsset in group.addTask { @@ -143,7 +132,7 @@ extension EthereumRemoteBalanceFetching: AccountInfoFetchingProtocol { return (chainAsset, nil) } - switch chainAsset.asset.ethereumType { + switch chainAsset.asset.assetType.ethereumAssetType { case .normal: do { let accountInfo = try await strongSelf.fetchETHBalance(for: chainAsset, address: address) @@ -186,29 +175,29 @@ extension EthereumRemoteBalanceFetching: AccountInfoFetchingProtocol { return balances } - nonisolated func fetch( + private func fetch( for chainAsset: ChainAsset, - accountId: AccountId, - completionBlock: @escaping (ChainAsset, AccountInfo?) -> Void - ) { - Task { - let result = try await fetch(for: chainAsset, accountId: accountId) - completionBlock(result.0, result.1) + accountId: AccountId + ) async throws -> AccountInfo? { + guard let address = try? AddressFactory.address(for: accountId, chain: chainAsset.chain) else { + return nil } - } - nonisolated func fetch( - for chainAssets: [ChainAsset], - wallet: MetaAccountModel, - completionBlock: @escaping ([ChainAsset: AccountInfo?]) -> Void - ) { - Task { - let result = try await fetch(for: chainAssets, wallet: wallet) - completionBlock(result) + switch chainAsset.asset.assetType.ethereumAssetType { + case .normal: + let accountInfo = try await fetchETHBalance(for: chainAsset, address: address) + try cache(accountInfo: accountInfo, chainAsset: chainAsset, accountId: accountId) + return accountInfo + case .erc20, .bep20: + let accountInfo = try await fetchERC20Balance(for: chainAsset, address: address) + try cache(accountInfo: accountInfo, chainAsset: chainAsset, accountId: accountId) + return accountInfo + case .none: + return nil } } - func fetchByUniqKey( + private func fetchByUniqKey( for chainAssets: [ChainAsset], wallet: MetaAccountModel ) async throws -> [ChainAssetKey: AccountInfo?] { @@ -223,4 +212,15 @@ extension EthereumRemoteBalanceFetching: AccountInfoFetchingProtocol { } return Dictionary(uniqueKeysWithValues: mapped) } + + nonisolated private func cache(accountInfo: AccountInfo?, chainAsset: ChainAsset, accountId: AccountId) throws { + let storagePath = chainAsset.storagePath + + let localKey = try LocalStorageKeyFactory().createFromStoragePath( + storagePath, + chainAssetKey: chainAsset.uniqueKey(accountId: accountId) + ) + + try repositoryWrapper.save(data: accountInfo, identifier: localKey) + } } diff --git a/fearless/ApplicationLayer/Services/Balance/RemoteSubscription/AccountInfoRemoteService.swift b/fearless/ApplicationLayer/Services/Balance/SubstrateRemoteBalanceFetching.swift similarity index 70% rename from fearless/ApplicationLayer/Services/Balance/RemoteSubscription/AccountInfoRemoteService.swift rename to fearless/ApplicationLayer/Services/Balance/SubstrateRemoteBalanceFetching.swift index 2698311962..9c8cfeecf3 100644 --- a/fearless/ApplicationLayer/Services/Balance/RemoteSubscription/AccountInfoRemoteService.swift +++ b/fearless/ApplicationLayer/Services/Balance/SubstrateRemoteBalanceFetching.swift @@ -1,40 +1,14 @@ import Foundation -import SSFStorageQueryKit -import SSFChainRegistry -import SSFNetwork import SSFModels -import SSFUtils -import RobinHood - -protocol AccountInfoRemoteService { - func fetchAccountInfos( - for chain: ChainModel, - wallet: MetaAccountModel - ) async throws -> [ChainAssetId: AccountInfo?] - - func fetchAccountInfo( - for chainAsset: ChainAsset, - wallet: MetaAccountModel - ) async throws -> AccountInfo? -} +import SSFStorageQueryKit -final class AccountInfoRemoteServiceDefault: AccountInfoRemoteService { - private let runtimeItemRepository: AsyncAnyRepository - private let ethereumRemoteBalanceFetching: EthereumRemoteBalanceFetching +actor SubstrateRemoteBalanceFetchingImpl: AccountInfoRemoteService { private let storagePerformer: SSFStorageQueryKit.StorageRequestPerformer - init( - runtimeItemRepository: AsyncAnyRepository, - ethereumRemoteBalanceFetching: EthereumRemoteBalanceFetching, - storagePerformer: SSFStorageQueryKit.StorageRequestPerformer - ) { - self.runtimeItemRepository = runtimeItemRepository - self.ethereumRemoteBalanceFetching = ethereumRemoteBalanceFetching + init(storagePerformer: SSFStorageQueryKit.StorageRequestPerformer) { self.storagePerformer = storagePerformer } - // MARK: - AccountInfoStorageService - func fetchAccountInfos( for chain: ChainModel, wallet: MetaAccountModel @@ -42,14 +16,8 @@ final class AccountInfoRemoteServiceDefault: AccountInfoRemoteService { guard let accountId = wallet.fetch(for: chain.accountRequest())?.accountId else { throw ConvenienceError(error: "Missing AccountId for chain: \(chain.name)") } - - if chain.isEthereum { - let accountInfos = try await fetchEthereum(for: chain, wallet: wallet) - return accountInfos - } else { - let accountInfos = try await fetchSubstrate(for: chain, accountId: accountId) - return accountInfos - } + let accountInfos = try await fetchSubstrate(for: chain, accountId: accountId) + return accountInfos } func fetchAccountInfo( @@ -59,22 +27,47 @@ final class AccountInfoRemoteServiceDefault: AccountInfoRemoteService { guard let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId else { throw ConvenienceError(error: "Missing account id for \(chainAsset.debugName)") } - if chainAsset.chain.isEthereum { - let response = try await ethereumRemoteBalanceFetching.fetch( - for: chainAsset, - accountId: accountId - ) - return response.1 - } else { - let request = createSubstrateRequest(for: chainAsset, accountId: accountId) - let response = try await storagePerformer.perform([request], chain: chainAsset.chain) - let map = try createSubstrateMap(from: response, chain: chainAsset.chain) - let accountInfo = map[chainAsset.chainAssetId] ?? nil - return accountInfo + let request = createSubstrateRequest(for: chainAsset, accountId: accountId) + let response = try await storagePerformer.perform([request], chain: chainAsset.chain) + let map = try await createSubstrateMap(from: response, chain: chainAsset.chain) + let accountInfo = map[chainAsset.chainAssetId] ?? nil + return accountInfo + } + + func fetchAccountInfos( + for chainAssets: [ChainAsset], + wallet: MetaAccountModel + ) async throws -> [ChainAssetKey: AccountInfo?] { + let dict = Dictionary(grouping: chainAssets, by: { $0.chain }) + let balances = try await withThrowingTaskGroup( + of: [ChainAssetKey: AccountInfo?].self, + returning: [ChainAssetKey: AccountInfo?].self + ) { [weak self] group in + guard let self else { return [:] } + + dict.forEach { chain, chainAssets in + group.addTask { + guard let accountId = wallet.fetch(for: chain.accountRequest())?.accountId else { + throw ConvenienceError(error: "Missing account id for \(chain.name)") + } + let requests = await chainAssets.asyncMap { await self.createSubstrateRequest(for: $0, accountId: accountId) } + let result = try await self.storagePerformer.perform(requests, chain: chain) + let map = try await self.createSubstrateMap(from: result, chain: chain, accountId: accountId) + return map + } + } + + var result: [ChainAssetKey: AccountInfo?] = [:] + for try await balance in group { + result = result.merging(balance, uniquingKeysWith: { current, _ in current }) + } + return result } + + return balances } - // MARK: - Private substrate methods + // MARK: - Private methods private func fetchSubstrate( for chain: ChainModel, @@ -82,14 +75,14 @@ final class AccountInfoRemoteServiceDefault: AccountInfoRemoteService { ) async throws -> [ChainAssetId: AccountInfo?] { let requests = chain.chainAssets.map { createSubstrateRequest(for: $0, accountId: accountId) } let result = try await storagePerformer.perform(requests, chain: chain) - let map = try createSubstrateMap(from: result, chain: chain) + let map = try await createSubstrateMap(from: result, chain: chain) return map } private func createSubstrateMap( from result: [MixStorageResponse], chain: ChainModel - ) throws -> [ChainAssetId: AccountInfo?] { + ) async throws -> [ChainAssetId: AccountInfo?] { try result.reduce([ChainAssetId: AccountInfo?]()) { part, response in var partial = part let id = ChainAssetId(id: response.request.requestId) @@ -101,6 +94,26 @@ final class AccountInfoRemoteServiceDefault: AccountInfoRemoteService { } } + private func createSubstrateMap( + from result: [MixStorageResponse], + chain: ChainModel, + accountId: AccountId + ) async throws -> [ChainAssetKey: AccountInfo?] { + try result.reduce([ChainAssetKey: AccountInfo?]()) { part, response in + var partial = part + let id = ChainAssetId(id: response.request.requestId) + guard let chainAsset = chain.chainAssets.first(where: { $0.chainAssetId == id }) else { + return part + } + let key = chainAsset.uniqueKey(accountId: accountId) + + let accountInfo = try mapAccountInfo(response: response, chain: chain) + partial[key] = accountInfo + + return partial + } + } + private func mapAccountInfo(response: MixStorageResponse, chain: ChainModel) throws -> AccountInfo? { guard let json = response.json else { return nil @@ -212,19 +225,4 @@ final class AccountInfoRemoteServiceDefault: AccountInfoRemoteService { return request } } - - // MARK: - Private ethereum methods - - private func fetchEthereum( - for chain: ChainModel, - wallet: MetaAccountModel - ) async throws -> [ChainAssetId: AccountInfo?] { - let chainAsset = chain.chainAssets - let response = try await ethereumRemoteBalanceFetching.fetch(for: chainAsset, wallet: wallet) - let mapped = response.map { - ($0.key.chainAssetId, $0.value) - } - let map = Dictionary(uniqueKeysWithValues: mapped) - return map - } } diff --git a/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift b/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift new file mode 100644 index 0000000000..83ae148b71 --- /dev/null +++ b/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift @@ -0,0 +1,292 @@ +import Foundation +import TonAPI +import BigInt +import SSFModels +import TonSwift + +enum TonRemoteBalanceFetchingError: Error { + case missingAccount + case balanceError + case jettonNotFound + case utilityNotFound +} + +actor TonRemoteBalanceFetchingImpl: AccountInfoRemoteService { + private let chainRegistry: ChainRegistryProtocol + private let repositoryWrapper: BalanceRepositoryCacheWrapper + private let jettonInjector: TonJettonInjector + + init( + chainRegistry: ChainRegistryProtocol, + repositoryWrapper: BalanceRepositoryCacheWrapper, + jettonInjector: TonJettonInjector + ) { + self.chainRegistry = chainRegistry + self.repositoryWrapper = repositoryWrapper + self.jettonInjector = jettonInjector + } + + // MARK: - AccountInfoRemoteService + + func fetchAccountInfos( + for chain: ChainModel, + wallet: MetaAccountModel + ) async throws -> [ChainAssetId: AccountInfo?] { + guard let accountId = wallet.fetch(for: chain.accountRequest())?.accountId else { + throw TonRemoteBalanceFetchingError.missingAccount + } + let address = try accountId.asTonAddress().toRaw() + + let chainAssets = chain.chainAssets.divide { chainAsset in + chainAsset.chainAssetType.tonAssetType == .normal + } + + guard let normal = chainAssets.slice.first else { + throw TonRemoteBalanceFetchingError.utilityNotFound + } + let jettons = chainAssets.remainder + + let chainAccountInfos = try await getChainAccountInfos( + address: address, + currency: wallet.selectedCurrency + ) + let normalBalance = chainAccountInfos.normal + let jettonBalances = chainAccountInfos.jettons + + let jettonsAccountInfos = createJettonsAccountInfos( + jettonBalances: jettonBalances, + jettons: jettons + ) + let jettonsAccountInfoMap = Dictionary( + uniqueKeysWithValues: jettonsAccountInfos.map { ($0.0.chainAssetId, $0.1) } + ) + + let cacheValue = [(normal, normalBalance)] + jettonsAccountInfos + try? cache( + cacheValue, + accountId: accountId + ) + + let normalMap: [ChainAssetId: AccountInfo?] = [normal.chainAssetId: normalBalance] + let union = normalMap.merging(jettonsAccountInfoMap, uniquingKeysWith: { current, _ in current }) + return union + } + + func fetchAccountInfo( + for chainAsset: ChainAsset, + wallet: MetaAccountModel + ) async throws -> AccountInfo? { + guard let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId else { + throw TonRemoteBalanceFetchingError.missingAccount + } + let address = try accountId.asTonAddress().toRaw() + + let accountInfo: AccountInfo + switch chainAsset.chainAssetType.tonAssetType { + case .normal: + accountInfo = try await getAccountInfo(address: address, currency: wallet.selectedCurrency) + case .jetton: + let jettons = try await getAccountJettonsBalances( + address: address, + currency: wallet.selectedCurrency + ) + guard let jetton = jettons.first(where: { jetton in + jetton.item.walletAddress.toRaw() == chainAsset.asset.id + }) else { + return nil + } + return AccountInfo(balance: jetton.quantity) + case .none: + return nil + } + + let cacheValue = [(chainAsset, accountInfo)] + try? cache( + cacheValue, + accountId: accountId + ) + return accountInfo + } + + func fetchAccountInfos( + for chainAssets: [ChainAsset], + wallet: MetaAccountModel + ) async throws -> [ChainAssetKey: AccountInfo?] { + let chainAssets = chainAssets.divide { chainAsset in + chainAsset.chainAssetType.tonAssetType == .normal + } + + guard let normal = chainAssets.slice.first else { + throw TonRemoteBalanceFetchingError.utilityNotFound + } + let jettons = chainAssets.remainder + + guard let accountId = wallet.fetch(for: normal.chain.accountRequest())?.accountId else { + throw TonRemoteBalanceFetchingError.missingAccount + } + + let address = try accountId.asTonAddress().toRaw() + let chainAccountInfos = try await getChainAccountInfos( + address: address, + currency: wallet.selectedCurrency + ) + let normalBalance = chainAccountInfos.normal + let jettonBalances = chainAccountInfos.jettons + + let jettonsAccountInfos = createJettonsAccountInfos( + jettonBalances: jettonBalances, + jettons: jettons + ) + let jettonsAccountInfoMap = Dictionary( + uniqueKeysWithValues: jettonsAccountInfos.map { ($0.0.uniqueKey(accountId: accountId), $0.1) } + ) + + let cacheValue = [(normal, normalBalance)] + jettonsAccountInfos + try? cache( + cacheValue, + accountId: accountId + ) + + let normalKey = normal.uniqueKey(accountId: accountId) + let normalMap: [ChainAssetKey: AccountInfo?] = [normalKey: normalBalance] + let union = normalMap.merging(jettonsAccountInfoMap, uniquingKeysWith: { current, _ in current }) + return union + } + + // MARK: - Private methods + + private func getTonRates( + currency: Currency + ) async throws -> [String: Components.Schemas.TokenRates] { + let assembly = try chainRegistry.getTonApiAssembly() + let tonAPIClient = assembly.tonAPIClient() + + let response = try await tonAPIClient.getRates( + query: .init(tokens: "TON", currencies: currency.id.uppercased()) + ) + + let entity = try response.ok.body.json + return entity.rates.additionalProperties + } + + private func createJettonsAccountInfos( + jettonBalances: [TonJettonBalance], + jettons: [ChainAsset] + ) -> [(ChainAsset, AccountInfo)] { + let jettonsAccountInfo: [(ChainAsset, AccountInfo)] = jettonBalances.compactMap { jetton in + let chainAsset = jettons.first(where: { $0.asset.id == jetton.item.walletAddress.toRaw() }) + guard let chainAsset else { return nil } + return (chainAsset, AccountInfo(balance: jetton.quantity)) + } + return jettonsAccountInfo + } + + private func getChainAccountInfos( + address: String, + currency: Currency + ) async throws -> (normal: AccountInfo, jettons: [TonJettonBalance]) { + async let normalBalanceTask = getAccountInfo(address: address, currency: currency) + async let jettonBalancesTask = getAccountJettonsBalances(address: address, currency: currency) + let normalBalance = try await normalBalanceTask + let jettonBalances = try await jettonBalancesTask + return (normalBalance, jettonBalances) + } + + private func getAccountInfo( + address: String, + currency: Currency + ) async throws -> AccountInfo { + let assembly = try chainRegistry.getTonApiAssembly() + let tonAPIClient = assembly.tonAPIClient() + + async let response = try tonAPIClient.getAccount(.init(path: .init(account_id: address))) + async let rates = try getTonRates(currency: currency) + + let account = try await TonAccount(account: try response.ok.body.json) + let stringBalance = String(account.balance) + guard let balance = BigUInt(string: stringBalance) else { + throw TonRemoteBalanceFetchingError.balanceError + } + + if let tonRates = try? await rates["TON"] { + let tonPriceData = mapJettonRates(rates: tonRates, currency: currency) + await jettonInjector.inject(tonPriceData: tonPriceData) + } + + let accountInfo = AccountInfo(balance: balance) + return accountInfo + } + + private func getAccountJettonsBalances( + address: String, + currency: Currency + ) async throws -> [TonJettonBalance] { + let assembly = try chainRegistry.getTonApiAssembly() + let tonAPIClient = assembly.tonAPIClient() + + let response = try await tonAPIClient.getAccountJettonsBalances( + path: .init(account_id: address), + query: .init(currencies: currency.id.uppercased()) + ) + + let jettons = try response.ok.body.json.balances.compactMap { jetton in + do { + let quantity = BigUInt(stringLiteral: jetton.balance) + let walletAddress = try TonSwift.Address.parse(jetton.wallet_address.address) + let jettonInfo = try TonJettonInfo(jettonPreview: jetton.jetton) + let jettonItem = TonJettonItem(jettonInfo: jettonInfo, walletAddress: walletAddress) + let rates = mapJettonRates(rates: jetton.price, currency: currency) + let jettonBalance = TonJettonBalance( + item: jettonItem, + quantity: quantity, + priceData: rates + ) + return jettonBalance + } catch { + return nil + } + } + Task { + await jettonInjector.inject(jettonItems: jettons) + } + return jettons + } + + private func mapJettonRates( + rates: Components.Schemas.TokenRates?, + currency: Currency + ) -> [PriceData] { + guard let price = rates?.prices?.additionalProperties.first?.value else { + return [] + } + let priceData = PriceData( + currencyId: currency.id, + priceId: "", + price: String(price), + fiatDayChange: .zero, + coingeckoPriceId: nil + ) + return [priceData] + } + + nonisolated private func cache( + _ cache: [(ChainAsset, AccountInfo)], + accountId: AccountId? + ) throws { + guard let accountId else { + return + } + + let transform = try cache.map { + let storagePath = $0.0.storagePath + + let localKey = try LocalStorageKeyFactory().createFromStoragePath( + storagePath, + chainAssetKey: $0.0.uniqueKey(accountId: accountId) + ) + return (localKey, $0.1) + } + let map = Dictionary(uniqueKeysWithValues: transform) + try repositoryWrapper.save(map: map) + } +} diff --git a/fearless/ApplicationLayer/Services/Ethereum/BaseEthereumService.swift b/fearless/ApplicationLayer/Services/Ethereum/BaseEthereumService.swift index dd7ef8c7d6..bbbf260387 100644 --- a/fearless/ApplicationLayer/Services/Ethereum/BaseEthereumService.swift +++ b/fearless/ApplicationLayer/Services/Ethereum/BaseEthereumService.swift @@ -100,7 +100,6 @@ class BaseEthereumService { _ = try await queryMaxPriorityFeePerGas() return true } catch { - print("error: ", error) return false } } diff --git a/fearless/ApplicationLayer/Services/FeatureToggleService/LocalListToggle.swift b/fearless/ApplicationLayer/Services/FeatureToggleService/LocalListToggle.swift new file mode 100644 index 0000000000..abce8f8a19 --- /dev/null +++ b/fearless/ApplicationLayer/Services/FeatureToggleService/LocalListToggle.swift @@ -0,0 +1,33 @@ +import Foundation +import RobinHood + +struct LocalListToggle: Codable { + let key: String + let title: String + let description: String + var storageValue: Bool + + func toggle() -> Self { + LocalListToggle( + key: key, + title: title, + description: description, + storageValue: !storageValue + ) + } +} + +extension LocalListToggle { + static let chains = LocalListToggle( + key: "0", + title: "Chains list env", + description: "is chains_dev.json", + storageValue: true + ) + static let tonEnv = LocalListToggle( + key: "1", + title: "Ton environment", + description: "is testnet", + storageValue: false + ) +} diff --git a/fearless/ApplicationLayer/Services/FeatureToggleService/LocalToggleService.swift b/fearless/ApplicationLayer/Services/FeatureToggleService/LocalToggleService.swift new file mode 100644 index 0000000000..1b6a8828b1 --- /dev/null +++ b/fearless/ApplicationLayer/Services/FeatureToggleService/LocalToggleService.swift @@ -0,0 +1,96 @@ +import Foundation +import SoraKeystore +import SSFSingleValueCache +import RobinHood + +final class LocalToggleService: ApplicationServiceProtocol { + + static let shared = LocalToggleService() + + private lazy var storage = UserDefaults(suiteName: "Feature.Toggle.List") + private lazy var decoder = JSONDecoder() + private lazy var encoder = JSONEncoder() + + private init() {} + + lazy var list: [LocalListToggle] = { + guard let dict = storage?.dictionaryRepresentation() else { + return [] + } + let toggles: [LocalListToggle] = dict.compactMap({ (_, value) in + guard let data = value as? Data else { + return nil + } + return try? decoder.decode(LocalListToggle.self, from: data) + }) + return toggles + }() + + func setup() { + let dict = storage?.dictionaryRepresentation() + Self.toggles.forEach { toggle in + guard + dict?[toggle.key] == nil, + let data = try? encoder.encode(toggle) + else { + return + } + storage?.set(data, forKey: toggle.key) + } + storage?.synchronize() + } + + func throttle() {} + + private func getToggle(for key: String) -> LocalListToggle? { + guard + let data = storage?.value(forKey: key) as? Data, + let toggle = try? decoder.decode(LocalListToggle.self, from: data) + else { + return nil + } + return toggle + } + + func set(toggle: LocalListToggle) { + guard let data = try? encoder.encode(toggle) else { + return + } + storage?.setValue(data, forKey: toggle.key) + storage?.synchronize() + } + + // MARK: - Registry + + /// Default toggles + /// New Toggle should be register in Feature.Toggle.List user defaults + /// For shown in debug menu list + static let toggles: [LocalListToggle] = [ + LocalListToggle.chains, + LocalListToggle.tonEnv + ] + + /// storageValue => isDev. + /// Default value true + var chainsListToggle: LocalListToggle? { + get { + getToggle(for: "0") + } + set { + if let newValue { + set(toggle: newValue) + } + } + } + + /// storageValue => isTestnet. + /// Default value false + var tonEnvListToggle: LocalListToggle { + get { + getToggle(for: "1") ?? LocalListToggle.tonEnv + } + set { + set(toggle: newValue) + } + } +} diff --git a/fearless/ApplicationLayer/Services/Models/TonConnectError.swift b/fearless/ApplicationLayer/Services/Models/TonConnectError.swift new file mode 100644 index 0000000000..f180be3784 --- /dev/null +++ b/fearless/ApplicationLayer/Services/Models/TonConnectError.swift @@ -0,0 +1,6 @@ +import Foundation + +struct TonConnectError: Swift.Error, Decodable { + let statusCode: Int + let message: String +} diff --git a/fearless/ApplicationLayer/Services/Models/TonConnectEvent.swift b/fearless/ApplicationLayer/Services/Models/TonConnectEvent.swift new file mode 100644 index 0000000000..0a672de0ce --- /dev/null +++ b/fearless/ApplicationLayer/Services/Models/TonConnectEvent.swift @@ -0,0 +1,4 @@ +struct TonConnectEvent: Decodable { + let from: String + let message: String +} diff --git a/fearless/ApplicationLayer/Services/Models/TonConnectManifest.swift b/fearless/ApplicationLayer/Services/Models/TonConnectManifest.swift new file mode 100644 index 0000000000..4049e70d82 --- /dev/null +++ b/fearless/ApplicationLayer/Services/Models/TonConnectManifest.swift @@ -0,0 +1,13 @@ +import Foundation + +struct TonConnectManifest: Codable, Equatable { + let url: URL + let name: String + let iconUrl: URL? + let termsOfUseUrl: URL? + let privacyPolicyUrl: URL? + + var host: String { + url.host ?? "" + } +} diff --git a/fearless/ApplicationLayer/Services/Models/TonConnectParameters.swift b/fearless/ApplicationLayer/Services/Models/TonConnectParameters.swift new file mode 100644 index 0000000000..40f3f7e9f1 --- /dev/null +++ b/fearless/ApplicationLayer/Services/Models/TonConnectParameters.swift @@ -0,0 +1,17 @@ +import Foundation + +struct TonConnectParameters { + enum Version: String { + case v2 = "2" + } + + let version: Version + let clientId: String + let requestPayload: TonConnectRequestPayload + + init(version: Version, clientId: String, requestPayload: TonConnectRequestPayload) { + self.version = version + self.clientId = clientId + self.requestPayload = requestPayload + } +} diff --git a/fearless/ApplicationLayer/Services/Models/TonConnectRequestPayload.swift b/fearless/ApplicationLayer/Services/Models/TonConnectRequestPayload.swift new file mode 100644 index 0000000000..66bf826053 --- /dev/null +++ b/fearless/ApplicationLayer/Services/Models/TonConnectRequestPayload.swift @@ -0,0 +1,36 @@ +import Foundation + +struct TonConnectRequestPayload: Decodable { + enum Item: Decodable { + case tonAddress + case tonProof(payload: String) + case unknown + + enum CodingKeys: CodingKey { + case name + case payload + } + + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + let name = try container.decode(String.self, forKey: .name) + switch name { + case "ton_addr": + self = .tonAddress + case "ton_proof": + let payload = try container.decode(String.self, forKey: .payload) + self = .tonProof(payload: payload) + default: + self = .unknown + } + } + } + + let manifestUrl: URL + let items: [Item] + + init(manifestUrl: URL, items: [Item]) { + self.manifestUrl = manifestUrl + self.items = items + } +} diff --git a/fearless/ApplicationLayer/Services/Onboarding/OnboardingService.swift b/fearless/ApplicationLayer/Services/Onboarding/OnboardingService.swift index 8349bfa525..010f3954fa 100644 --- a/fearless/ApplicationLayer/Services/Onboarding/OnboardingService.swift +++ b/fearless/ApplicationLayer/Services/Onboarding/OnboardingService.swift @@ -11,20 +11,7 @@ protocol OnboardingServiceProtocol { func fetchConfigs() async throws -> OnboardingConfigPlatform } -actor OnboardingService { - private let networkOperationFactory: NetworkOperationFactoryProtocol - private let operationQueue: OperationQueue - - init( - networkOperationFactory: NetworkOperationFactoryProtocol, - operationQueue: OperationQueue - ) { - self.networkOperationFactory = networkOperationFactory - self.operationQueue = operationQueue - } -} - -extension OnboardingService: OnboardingServiceProtocol { +actor OnboardingService: OnboardingServiceProtocol { func fetchConfigs() async throws -> OnboardingConfigPlatform { guard let onboardingConfigUrl = ApplicationConfig.shared.onboardingConfig else { throw OnboardingServiceError.urlBroken diff --git a/fearless/ApplicationLayer/Services/TonConnectEventsCenter.swift b/fearless/ApplicationLayer/Services/TonConnectEventsCenter.swift new file mode 100644 index 0000000000..394aed01ff --- /dev/null +++ b/fearless/ApplicationLayer/Services/TonConnectEventsCenter.swift @@ -0,0 +1,133 @@ +import Foundation +import SoraKeystore +import SSFModels +import TonConnectAPI +import EventSource +import TonSwift + +protocol TonConnectEventsCenterDelegate: AnyObject { + func didReceive(event: TonConnectEventsCenter.Event) async +} + +actor TonConnectEventsCenter { + private enum Constant { + static let lastEventKey = "ton.connect.last.event.key" + } + enum Event { + case request( + request: TonConnect.AppRequest, + walletId: MetaAccountId, + app: TonConnectApp + ) + } + + private weak var delegate: TonConnectEventsCenterDelegate? + private let chainRegistry: ChainRegistryProtocol + private let lastEventStore: SettingsManagerProtocol + private let logger: LoggerProtocol + + private var observableApps: [TonConnectApp] = [] + private var task: Task? + private lazy var jsonDecoder = JSONDecoder() + + init( + chainRegistry: ChainRegistryProtocol, + lastEventStore: SettingsManagerProtocol, + logger: LoggerProtocol + ) { + self.chainRegistry = chainRegistry + self.lastEventStore = lastEventStore + self.logger = logger + } + + func set(delegate: TonConnectEventsCenterDelegate) { + self.delegate = delegate + } + + func stop() { + task?.cancel() + task = nil + } + + func start(with apps: [TonConnectApp]) throws { + observableApps = apps + let apiClient = try chainRegistry.getTonApiAssembly().tonConnectAPIClient() + task?.cancel() + + let task = Task { + let ids = apps + .map { $0.keyPair.publicKey.hexString } + .compactMap { $0 } + .joined(separator: ",") + let lastEventId = lastEventStore.value(of: String.self, for: Constant.lastEventKey) + + let errorParser = EventSourceDecodableErrorParser() + let stream = try await EventSource.eventSource({ + let response = try await apiClient.events( + query: .init( + client_id: [ids], + last_event_id: lastEventId + ) + ) + return try response.ok.body.text_event_hyphen_stream + }, errorParser: errorParser) + + for try await events in stream { + await handleEventSourceEvents(events) + } + + guard !Task.isCancelled else { return } + try start(with: apps) + } + self.task = task + } + + // MARK: - Private methods + + private func handleEventSourceEvents(_ events: [EventSource.Event]) async { + guard + let event = events.last(where: { $0.event == "message" }), + let data = event.data?.data(using: .utf8), + let tonConnectEvent = try? jsonDecoder.decode(TonConnectEvent.self, from: data) + else { + return + } + + lastEventStore.set(value: event.id, for: Constant.lastEventKey) + await handleEvent(tonConnectEvent) + } + + private func handleEvent(_ tonConnectEvent: TonConnectEvent) async { + guard let app = observableApps.first(where: { $0.clientId == tonConnectEvent.from }) else { + return + } + + do { + let sessionCrypto = try TonConnectSessionCrypto(privateKey: app.keyPair.privateKey) + guard + let senderPublicKey = Data(tonHex: app.clientId), + let message = Data(base64Encoded: tonConnectEvent.message) + else { + return + } + let decryptedMessage = try sessionCrypto.decrypt( + message: message, + senderPublicKey: senderPublicKey + ) + let request = try jsonDecoder.decode( + TonConnect.AppRequest.self, + from: decryptedMessage + ) + + await delegate?.didReceive( + event: .request( + request: request, + walletId: app.walletId, + app: app + ) + ) + } catch { + logger.customError(error) + } + } +} diff --git a/fearless/ApplicationLayer/Services/TonConnectMessageBuilder.swift b/fearless/ApplicationLayer/Services/TonConnectMessageBuilder.swift new file mode 100644 index 0000000000..c480e25122 --- /dev/null +++ b/fearless/ApplicationLayer/Services/TonConnectMessageBuilder.swift @@ -0,0 +1,71 @@ +import Foundation +import SoraKeystore +import SSFModels +import WebKit +import TonSwift + +protocol TonConnectMessageBuilder { + /// WKWebViewConfiguration with the js injection script + func getConfiguration( + userContentController: WKUserContentController + ) -> WKWebViewConfiguration + + /// Building the message to reconnect the dApp + /// Reconnecting if already connected and the dApp is in local store + func getConnectEventSuccess( + wallet: MetaAccountModel + ) throws -> String + + /// Parsing the DappFunctionInvokeMessage from the body + func getDappFunctionInvokeMessage( + from body: Any + ) throws -> DappFunctionInvokeMessage + + /// Parsing the TonConnectRequestPayload from the message + func getTonConnectRequestPayload( + from message: DappFunctionInvokeMessage + ) throws -> TonConnectRequestPayload + + /// Parsing the AppRequest to present it to the user for approval or rejection + /// Proposal for the user based on the JS Bridge connection type + func getTonConnectAppRequest( + from message: DappFunctionInvokeMessage + ) throws -> TonConnect.AppRequest + + /// Parsing the ConnectEventSuccess + /// ConnectEventSuccess can be send via JS Bridge and HTTP + /// Sends if the connection has been approved by the user + func getConnectEventSuccessResponse( + requestPayloadItems: [TonConnectRequestPayload.Item], + wallet: MetaAccountModel, + manifest: TonConnectManifest, + tonChainModel: ChainModel + ) throws -> TonConnect.ConnectEventSuccess + + /// Encrypt the ConnectEventSuccess using TonConnectSessionCrypto + /// Used for sending the message via HTTP connection + func encryptSuccessResponse( + successResponse: TonConnect.ConnectEventSuccess, + clientId: String, + sessionCrypto: TonConnectSessionCrypto + ) throws -> String + + /// Build the SendTransactionResponseError error message + func buildSendTransactionResponseError( + sessionCrypto: TonConnectSessionCrypto, + errorCode: TonConnect.SendTransactionResponseError.ErrorCode, + id: String, + clientId: String + ) throws -> String + + /// Preparing the message for the Ton Connect API from boc + func buildSendTransactionResponseSuccess( + sessionCrypto: TonConnectSessionCrypto, + boc: String, + id: String, + clientId: String + ) throws -> String + + /// Encode to String any Event + func getString(from event: Encodable) throws -> String +} diff --git a/fearless/ApplicationLayer/Services/TonConnectMessageBuilderImpl.swift b/fearless/ApplicationLayer/Services/TonConnectMessageBuilderImpl.swift new file mode 100644 index 0000000000..bf657b6ff5 --- /dev/null +++ b/fearless/ApplicationLayer/Services/TonConnectMessageBuilderImpl.swift @@ -0,0 +1,329 @@ +import Foundation +import SoraKeystore +import SSFModels +import WebKit +import TonSwift + +final class TonConnectMessageBuilderImpl: TonConnectMessageBuilder { + + private enum Constants { + static let windowKey = "Fearless" + } + + func getConfiguration( + userContentController: WKUserContentController + ) -> WKWebViewConfiguration { + let configuration = WKWebViewConfiguration() + let script = WKUserScript( + source: dAppJsInjection(), + injectionTime: WKUserScriptInjectionTime.atDocumentStart, + forMainFrameOnly: true + ) + userContentController.addUserScript(script) + configuration.userContentController = userContentController + return configuration + } + + func getConnectEventSuccess( + wallet: MetaAccountModel + ) throws -> String { + guard + let address = wallet.ecosystem.tonAddress, + let publicKey = wallet.ecosystem.tonPublicKey, + let contract = wallet.ecosystem.tonWalletContract() + else { + throw ConvenienceError(error: "Missing TON") + } + + let network = LocalToggleService.shared.tonEnvListToggle.storageValue ? TonConstants.testnetChainId : TonConstants.tonChainId + let replyItem = TonConnect.ConnectItemReply.tonAddress( + .init( + address: address, + network: Int16(network), + publicKey: TonSwift.PublicKey(data: publicKey), + walletStateInit: contract.stateInit + ) + ) + let event = TonConnect.ConnectEventSuccess( + payload: .init( + items: [replyItem], + device: .init() + ) + ) + + let string = try getString(from: event) + return string + } + + func getDappFunctionInvokeMessage( + from body: Any + ) throws -> DappFunctionInvokeMessage { + guard + let string = body as? String, + let data = string.data(using: .utf8), + let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any], + let type = json["type"] as? String, + let messageType = DappBridgeMessageType(rawValue: type), + messageType == .invokeRnFunc, + let name = json["name"] as? String, + let functionType = DappBridgeFunctionType(rawValue: name), + let invocationId = json["invocationId"] as? String, + let args = json["args"] as? [Any] + else { + throw ConvenienceError(error: "Decoding error") + } + + let message = DappFunctionInvokeMessage( + type: functionType, + invocationId: invocationId, + args: args + ) + + return message + } + + func getTonConnectAppRequest( + from message: DappFunctionInvokeMessage + ) throws -> TonConnect.AppRequest { + guard message.args.isNotEmpty else { + throw TonConnect.SendTransactionResponseError.ErrorCode.badRequest + } + let data = try JSONSerialization.data(withJSONObject: message.args[0]) + let request = try JSONDecoder().decode(TonConnect.AppRequest.self, from: data) + return request + } + + func getTonConnectRequestPayload( + from message: DappFunctionInvokeMessage + ) throws -> TonConnectRequestPayload { + guard + message.args.count >= 2, + let connectPayload = message.args[1] as? [String: Any] + else { + throw ConvenienceError(error: "Invalidate message") + } + let data = try JSONSerialization.data(withJSONObject: connectPayload) + let payload = try JSONDecoder().decode(TonConnectRequestPayload.self, from: data) + return payload + } + + func getConnectEventSuccessResponse( + requestPayloadItems: [TonConnectRequestPayload.Item], + wallet: MetaAccountModel, + manifest: TonConnectManifest, + tonChainModel: ChainModel + ) throws -> TonConnect.ConnectEventSuccess { + guard + let address = wallet.ecosystem.tonAddress, + let publicKey = wallet.ecosystem.tonPublicKey, + let walletStateInit = wallet.ecosystem.tonWalletContract()?.stateInit + else { + throw ConvenienceError(error: "Missing TON") + } + + let replyItems = try requestPayloadItems.compactMap { item in + switch item { + case .tonAddress: + let network = LocalToggleService.shared.tonEnvListToggle.storageValue ? TonConstants.testnetChainId : TonConstants.tonChainId + return TonConnect.ConnectItemReply.tonAddress( + .init( + address: address, + network: Int16(network), + publicKey: TonSwift.PublicKey(data: publicKey), + walletStateInit: walletStateInit + ) + ) + case let .tonProof(payload): + guard let accountResponse = wallet.fetch(for: tonChainModel.accountRequest()) else { + throw ConvenienceError(error: "Missing account response") + } + let walletPrivateKey = try getSecretKey( + for: tonChainModel, + metaId: wallet.metaId, + accountResponse: accountResponse + ) + return TonConnect.ConnectItemReply.tonProof(.success(.init( + address: address, + domain: manifest.host, + payload: payload, + privateKey: TonSwift.PrivateKey(data: walletPrivateKey) + ))) + case .unknown: + return nil + } + } + let successEvent = TonConnect.ConnectEventSuccess( + payload: .init( + items: replyItems, + device: .init() + ) + ) + + return successEvent + } + + func encryptSuccessResponse( + successResponse: TonConnect.ConnectEventSuccess, + clientId: String, + sessionCrypto: TonConnectSessionCrypto + ) throws -> String { + let responseData = try JSONEncoder().encode(successResponse) + guard let receiverPublicKey = Data(tonHex: clientId) else { + throw TonConnectServiceError.incorrectClientId + } + let response = try sessionCrypto.encrypt( + message: responseData, + receiverPublicKey: receiverPublicKey + ) + let base64Response = response.base64EncodedString() + return base64Response + } + + func buildSendTransactionResponseError( + sessionCrypto: TonConnectSessionCrypto, + errorCode: TonConnect.SendTransactionResponseError.ErrorCode, + id: String, + clientId: String + ) throws -> String { + let response = TonConnect.SendTransactionResponse.error(.init( + id: id, + error: .init(code: errorCode, message: "") + ) + ) + let transactionResponseData = try JSONEncoder().encode(response) + guard let receiverPublicKey = Data(tonHex: clientId) else { return "" } + + let encryptedTransactionResponse = try sessionCrypto.encrypt( + message: transactionResponseData, + receiverPublicKey: receiverPublicKey + ) + + return encryptedTransactionResponse.base64EncodedString() + } + + func buildSendTransactionResponseSuccess( + sessionCrypto: TonConnectSessionCrypto, + boc: String, + id: String, + clientId: String + ) throws -> String { + let response = TonConnect.SendTransactionResponse.success( + .init( + result: boc, + id: id + ) + ) + let transactionResponseData = try JSONEncoder().encode(response) + guard let receiverPublicKey = Data(tonHex: clientId) else { return "" } + + let encryptedTransactionResponse = try sessionCrypto.encrypt( + message: transactionResponseData, + receiverPublicKey: receiverPublicKey + ) + + return encryptedTransactionResponse.base64EncodedString() + } + + func getString(from event: Encodable) throws -> String { + let data = try JSONEncoder().encode(event) + guard let string = String(data: data, encoding: .utf8) else { + throw ConvenienceError(error: "Encoding error") + } + return string + } + + // MARK: - Private methods + + private func getSecretKey( + for chain: ChainModel, + metaId: String, + accountResponse: ChainAccountResponse + ) throws -> Data { + let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil + let tag: String = KeystoreTagV2.secretKeyTag(for: chain.ecosystem, metaId: metaId, accountId: accountId) + + let keystore = Keychain() + let secretKey = try keystore.fetchKey(for: tag) + return secretKey + } + + private func dAppJsInjection() -> String { + let deviceInfo = TonConnect.DeviceInfo() + let info = Info( + isWalletBrowser: true, + deviceInfo: deviceInfo, + protocolVersion: 2 + ) + guard + let infoData = try? JSONEncoder().encode(info), + var infoString = String(data: infoData, encoding: .utf8) + else { + return "" + } + infoString = String(describing: infoString).replacingOccurrences(of: "\\", with: "") + return """ + (() => { + if (!window.\(Constants.windowKey)) { + window.rnPromises = {}; + window.rnEventListeners = []; + window.invokeRnFunc = (name, args, resolve, reject) => { + const invocationId = btoa(Math.random()).substring(0, 12); + const timeoutMs = null; + const timeoutId = timeoutMs ? setTimeout(() => reject(new Error('bridge timeout for function with name: '+name+'')), timeoutMs) : null; + window.rnPromises[invocationId] = { resolve, reject, timeoutId } + window.webkit.messageHandlers.dapp.postMessage(JSON.stringify({ + type: '\(DappBridgeMessageType.invokeRnFunc.rawValue)', + invocationId: invocationId, + name, + args, + })); + }; + + window.addEventListener('message', ({ data }) => { + try { + const message = data; + console.log('message bridge', JSON.stringify(message)); + if (message.type === '\(DappBridgeMessageType.functionResponse.rawValue)') { + const promise = window.rnPromises[message.invocationId]; + + if (!promise) { + return; + } + + if (promise.timeoutId) { + clearTimeout(promise.timeoutId); + } + + if (message.status === 'fulfilled') { + promise.resolve(JSON.parse(message.data)); + } else { + promise.reject(new Error(message.data)); + } + + delete window.rnPromises[message.invocationId]; + } + + if (message.type === '\(DappBridgeMessageType.event.rawValue)') { + window.rnEventListeners.forEach((listener) => listener(message.event)); + } + } catch { } + }); + } + + const listen = (cb) => { + window.rnEventListeners.push(cb); + return () => { + const index = window.rnEventListeners.indexOf(cb); + if (index > -1) { + window.rnEventListeners.splice(index, 1); + } + }; + }; + + window.\(Constants.windowKey) = { + tonconnect: Object.assign(\(infoString),{ send: (...args) => {return new Promise((resolve, reject) => window.invokeRnFunc('send', args, resolve, reject))},connect: (...args) => {return new Promise((resolve, reject) => window.invokeRnFunc('connect', args, resolve, reject))},restoreConnection: (...args) => {return new Promise((resolve, reject) => window.invokeRnFunc('restoreConnection', args, resolve, reject))},disconnect: (...args) => {return new Promise((resolve, reject) => window.invokeRnFunc('disconnect', args, resolve, reject))} },{ listen }), + } + })(); + """ + } +} diff --git a/fearless/ApplicationLayer/Services/TonConnectService.swift b/fearless/ApplicationLayer/Services/TonConnectService.swift new file mode 100644 index 0000000000..8b216340de --- /dev/null +++ b/fearless/ApplicationLayer/Services/TonConnectService.swift @@ -0,0 +1,72 @@ +import Foundation +import SSFModels + +/// Ton Connect has two different ways to establish a connection +/// 1. Ton JS Bridge https://github.com/ton-connect/docs/blob/main/bridge.md#js-bridge +/// 2. HTTP Bridge https://github.com/ton-connect/docs/blob/main/bridge.md#http-bridge +protocol TonConnectService: ApplicationServiceProtocol { + + /// Adding listener for delegate: TonConnectServiceDelegate + func set( + listener: TonConnectServiceDelegate + ) async + + /// Load the Manifest and establish a connection via the Ton Connect service + func establishConnection( + with uri: String + ) async throws + + /// Loading Manifest + func fetchManifest( + with url: URL + ) async throws -> TonConnectManifest + + /// Confirm the connection via the Ton Connect service + func confirmConnectionRequest( + wallet: MetaAccountModel, + tonChainModel: ChainModel, + params: TonConnectParameters, + manifest: TonConnectManifest + ) async throws + + /// Cancels the request from the Ton Connect service + func cancelRequest( + appRequest: TonConnect.AppRequest, + app: TonConnectApp + ) async throws + + /// Sending a message to the TON blockchain from the JS bridge event + func approveTonJsBridgeSend( + wallet: MetaAccountModel, + parameter: SendTransactionParam + ) async throws -> String + + /// Sending a message to the TON blockchain + /// and to the Ton Connect API + func confirmTonConnectRequest( + wallet: MetaAccountModel, + appRequest: TonConnect.AppRequest, + app: TonConnectApp, + parameter: SendTransactionParam + ) async throws + + /// Getting the connected apps from the local repo + func getConnectedApp( + for wallet: MetaAccountModel + ) async throws -> [TonConnectApp] + + /// Saving a new connected app + /// External or Internal + func saveConnected( + app: TonConnectApp + ) async + + /// Deleting the connected app + /// External or Internal + func saveDisconnected( + app: TonConnectApp + ) async + + /// Disconnect from all apps and update event center + func disconnectAll() async +} diff --git a/fearless/ApplicationLayer/Services/TonConnectServiceDelegate.swift b/fearless/ApplicationLayer/Services/TonConnectServiceDelegate.swift new file mode 100644 index 0000000000..e44b3c5274 --- /dev/null +++ b/fearless/ApplicationLayer/Services/TonConnectServiceDelegate.swift @@ -0,0 +1,46 @@ +import Foundation +import SSFModels + +protocol TonConnectServiceDelegate: AnyObject { + func suggestConnect( + manifest: TonConnectManifest, + requestPayload: TonConnectParameters, + invocationId: String?, + delegate: WalletConnectProposalModuleOutput? + ) + func send( + request: TonConnect.AppRequest, + invocationId: String, + wallet: MetaAccountModel, + dapp: TonDapp, + delegate: WalletConnectSessionModuleOutput? + ) + func send( + request: TonConnect.AppRequest, + walletId: MetaAccountId, + app: TonConnectApp + ) + func didDisconnectedApp() +} + +extension TonConnectServiceDelegate { + func suggestConnect( + manifest: TonConnectManifest, + requestPayload: TonConnectParameters, + invocationId: String?, + delegate: WalletConnectProposalModuleOutput? + ) {} + func send( + request: TonConnect.AppRequest, + invocationId: String, + wallet: MetaAccountModel, + dapp: TonDapp, + delegate: WalletConnectSessionModuleOutput? + ) {} + func send( + request: TonConnect.AppRequest, + walletId: MetaAccountId, + app: TonConnectApp + ) {} + func didDisconnectedApp() {} +} diff --git a/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift b/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift new file mode 100644 index 0000000000..c7f0df9704 --- /dev/null +++ b/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift @@ -0,0 +1,363 @@ +import Foundation +import SSFTransferService +import SSFNetwork +import SSFModels +import TonConnectAPI +import RobinHood +import TonSwift + +enum TonConnectServiceError: Swift.Error { + case incorrectUrl + case incorrectClientId +} + +actor TonConnectServiceImpl: TonConnectService { + private let chainRegistry: ChainRegistryProtocol + private let tonSendService: TonSendService + private let networkWorker: SSFNetwork.NetworkWorker + private let messageBuilder: TonConnectMessageBuilder + private let appRepository: AsyncAnyRepository + private let eventCenter: TonConnectEventsCenter + private let logger: LoggerProtocol + + private var listeners: [WeakWrapper] = [] + + init( + chainRegistry: ChainRegistryProtocol, + tonService: TonSendService, + networkWorker: SSFNetwork.NetworkWorker, + messageBuilder: TonConnectMessageBuilder, + appRepository: AsyncAnyRepository, + eventCenter: TonConnectEventsCenter, + logger: LoggerProtocol + ) { + self.chainRegistry = chainRegistry + self.tonSendService = tonService + self.networkWorker = networkWorker + self.messageBuilder = messageBuilder + self.appRepository = appRepository + self.eventCenter = eventCenter + self.logger = logger + } + + // MARK: - TonConnectService + + func set(listener: TonConnectServiceDelegate) async { + let weakListener = WeakWrapper(target: listener) + listeners.append(weakListener) + } + + func establishConnection(with uri: String) async throws { + let config = try getConfig(uri) + let manifest = try await fetchManifest(with: config.requestPayload.manifestUrl) + + listeners.forEach { + ($0.target as? TonConnectServiceDelegate)?.suggestConnect( + manifest: manifest, + requestPayload: config, + invocationId: nil, + delegate: nil + ) + } + } + + func fetchManifest(with url: URL) async throws -> TonConnectManifest { + let request = SSFNetwork.RequestConfig( + baseURL: url, + method: .get, + endpoint: nil, + headers: nil, + body: nil + ) + let manifest: TonConnectManifest = try await networkWorker.performRequest(with: request) + return manifest + } + + func confirmConnectionRequest( + wallet: MetaAccountModel, + tonChainModel: ChainModel, + params: TonConnectParameters, + manifest: TonConnectManifest + ) async throws { + let connectSuccessResponseEvent: TonConnect.ConnectEventSuccess = try messageBuilder.getConnectEventSuccessResponse( + requestPayloadItems: params.requestPayload.items, + wallet: wallet, + manifest: manifest, + tonChainModel: tonChainModel + ) + + let sessionCrypto = try TonConnectSessionCrypto() + let encrypted = try messageBuilder.encryptSuccessResponse( + successResponse: connectSuccessResponseEvent, + clientId: params.clientId, + sessionCrypto: sessionCrypto + ) + + try await sendMessageConfirmConnectionRequest( + body: encrypted, + sessionCrypto: sessionCrypto, + parameters: params + ) + + await saveToStore( + wallet: wallet, + clientId: params.clientId, + appUrl: manifest.url, + sessionCrypto: sessionCrypto, + name: manifest.name, + iconUrl: manifest.iconUrl + ) + await updateEventCenter() + } + + func cancelRequest( + appRequest: TonConnect.AppRequest, + app: TonConnectApp + ) async throws { + let apiClient = try chainRegistry.getTonApiAssembly().tonConnectAPIClient() + let sessionCrypto = try TonConnectSessionCrypto(privateKey: app.keyPair.privateKey) + let body = try messageBuilder.buildSendTransactionResponseError( + sessionCrypto: sessionCrypto, + errorCode: .userDeclinedTransaction, + id: appRequest.id, + clientId: app.clientId + ) + _ = try await apiClient.message( + query: .init( + client_id: sessionCrypto.sessionId, + to: app.clientId, + ttl: 300 + ), + body: .plainText(.init(stringLiteral: body)) + ) + } + + func approveTonJsBridgeSend( + wallet: MetaAccountModel, + parameter: SendTransactionParam + ) async throws -> String { + guard + let sender = wallet.ecosystem.tonAddress, + let walletContract = wallet.ecosystem.tonWalletContract() + else { + throw ConvenienceError(error: "Missing Ton params") + } + async let seqno = try tonSendService.loadSeqno(address: sender.toRaw()) + async let timeout = tonSendService.getTimeoutSafely(TTL: 5 * 60) + + let bocFactory = try createBocFactory(for: wallet) + let boc = try await bocFactory.createTonConnectTransferBoc( + sender: sender, + contract: walletContract, + parameter: parameter, + seqno: seqno, + timeout: timeout + ) + + try await tonSendService.sendTransaction(boc: boc) + return boc + } + + func confirmTonConnectRequest( + wallet: MetaAccountModel, + appRequest: TonConnect.AppRequest, + app: TonConnectApp, + parameter: SendTransactionParam + ) async throws { + guard + let sender = wallet.ecosystem.tonAddress, + let walletContract = wallet.ecosystem.tonWalletContract() + else { + throw ConvenienceError(error: "Missing Ton params") + } + let sessionCrypto = try TonConnectSessionCrypto(privateKey: app.keyPair.privateKey) + async let seqno = try tonSendService.loadSeqno(address: sender.toRaw()) + async let timeout = tonSendService.getTimeoutSafely(TTL: 5 * 60) + + let bocFactory = try createBocFactory(for: wallet) + let boc = try await bocFactory.createTonConnectTransferBoc( + sender: sender, + contract: walletContract, + parameter: parameter, + seqno: seqno, + timeout: timeout + ) + try await tonSendService.sendTransaction(boc: boc) + + let body = try messageBuilder.buildSendTransactionResponseSuccess( + sessionCrypto: sessionCrypto, + boc: boc, + id: appRequest.id, + clientId: app.clientId + ) + + let apiClient = try chainRegistry.getTonApiAssembly().tonConnectAPIClient() + _ = try await apiClient.message( + query: .init( + client_id: sessionCrypto.sessionId, + to: app.clientId, + ttl: 300 + ), + body: .plainText(.init(stringLiteral: body)) + ) + } + + func getConnectedApp(for wallet: MetaAccountModel) async throws -> [TonConnectApp] { + let apps = try await appRepository.fetchAll() + let walletApps = apps.filter { $0.walletId == wallet.metaId } + return walletApps + } + + func saveConnected(app: TonConnectApp) async { + await appRepository.save(models: [app]) + await updateEventCenter() + } + + func saveDisconnected(app: TonConnectApp) async { + await appRepository.remove(ids: [app.identifier]) + await updateEventCenter() + listeners.forEach { + ($0.target as? TonConnectServiceDelegate)?.didDisconnectedApp() + } + } + + func disconnectAll() async { + guard let apps = try? await appRepository.fetchAll() else { + return + } + await appRepository.remove(ids: apps.map { $0.identifier }) + await updateEventCenter() + listeners.forEach { + ($0.target as? TonConnectServiceDelegate)?.didDisconnectedApp() + } + } + + // MARK: - ApplicationServiceProtocol + + nonisolated func setup() { + Task { + await eventCenter.set(delegate: self) + let apps = try await appRepository.fetchAll() + try await eventCenter.start(with: apps) + } + } + + nonisolated func throttle() { + Task { + await eventCenter.stop() + } + } + + // MARK: - Private methods + + private func updateEventCenter() async { + do { + let apps = try await appRepository.fetchAll() + try await eventCenter.start(with: apps) + } catch { + logger.customError(error) + } + } + + private func saveToStore( + wallet: MetaAccountModel, + clientId: String, + appUrl: URL, + sessionCrypto: TonConnectSessionCrypto, + name: String, + iconUrl: URL? + ) async { + let app = TonConnectApp( + walletId: wallet.metaId, + clientId: clientId, + appUrl: appUrl, + name: name, + iconUrl: iconUrl, + publicKey: sessionCrypto.keyPair.publicKey.data, + privateKey: sessionCrypto.keyPair.privateKey.data + ) + await appRepository.save(models: [app]) + } + + private func sendMessageConfirmConnectionRequest( + body: String, + sessionCrypto: TonConnectSessionCrypto, + parameters: TonConnectParameters + ) async throws { + let apiClient = try chainRegistry.getTonApiAssembly().tonConnectAPIClient() + let response = try await apiClient.message( + query: .init( + client_id: sessionCrypto.sessionId, + to: parameters.clientId, + ttl: 300 + ), + body: .plainText(.init(stringLiteral: body)) + ) + + _ = try response.ok.body.json + } + + private func getConfig(_ deeplink: String) throws -> TonConnectParameters { + guard + let url = URL(string: deeplink), + let components = URLComponents(url: url, resolvingAgainstBaseURL: true), + components.scheme == "tc", + let queryItems = components.queryItems, + let versionValue = queryItems.first(where: { $0.name == "v" })?.value, + let version = TonConnectParameters.Version(rawValue: versionValue), + let clientId = queryItems.first(where: { $0.name == "id" })?.value, + let requestPayloadValue = queryItems.first(where: { $0.name == "r" })?.value, + let requestPayloadData = requestPayloadValue.data(using: .utf8), + let requestPayload = try? JSONDecoder().decode(TonConnectRequestPayload.self, from: requestPayloadData) + else { + throw TonConnectServiceError.incorrectUrl + } + + return TonConnectParameters( + version: version, + clientId: clientId, + requestPayload: requestPayload + ) + } + + private func createBocFactory(for wallet: MetaAccountModel) throws -> BocFactory { + let network = LocalToggleService.shared.tonEnvListToggle.storageValue ? TonConstants.testnetChainId : TonConstants.tonChainId + let request = ChainAccountRequest( + chainId: "\(network)", + addressPrefix: 0, + ecosystem: .ton, + accountId: nil + ) + guard let accountResponse = wallet.fetch(for: request) else { + throw ConvenienceError(error: "Account response fetch error") + } + + let bocFactory = try ServiceAssembly.shared.tonBocFactory( + metaId: wallet.metaId, + accountResponse: accountResponse + ) + return bocFactory + } +} + +// MARK: - TonConnectEventsCenterDelegate + +extension TonConnectServiceImpl: TonConnectEventsCenterDelegate { + func didReceive(event: TonConnectEventsCenter.Event) { + switch event { + case let .request(request, walletId, app): + switch request.method { + case .sendTransaction: + listeners.forEach { + ($0.target as? TonConnectServiceDelegate)?.send( + request: request, + walletId: walletId, + app: app + ) + } + case .disconnect: + Task { await saveDisconnected(app: app) } + } + } + } +} diff --git a/fearless/ApplicationLayer/Services/TonConnectSessionCrypto.swift b/fearless/ApplicationLayer/Services/TonConnectSessionCrypto.swift new file mode 100644 index 0000000000..3e764ee313 --- /dev/null +++ b/fearless/ApplicationLayer/Services/TonConnectSessionCrypto.swift @@ -0,0 +1,62 @@ +import Foundation +import TweetNacl +import TonSwift + +struct TonConnectSessionCrypto { + private enum Constants { + static let nonceLength = 24 + } + + let sessionId: String + let keyPair: KeyPair + + init() throws { + let keyPair = try TweetNacl.NaclBox.keyPair() + self.keyPair = KeyPair( + publicKey: .init(data: keyPair.publicKey), + privateKey: .init(data: keyPair.secretKey) + ) + sessionId = keyPair.publicKey.hexString() + } + + init(privateKey: PrivateKey) throws { + let keyPair = try TweetNacl.NaclBox.keyPair(fromSecretKey: privateKey.data) + self.keyPair = KeyPair( + publicKey: .init(data: keyPair.publicKey), + privateKey: .init(data: keyPair.secretKey) + ) + sessionId = keyPair.publicKey.hexString() + } + + func encrypt(message: Data, receiverPublicKey: Data) throws -> Data { + let nonce = try createNonce() + let encrypted = try TweetNacl.NaclBox.box( + message: message, + nonce: nonce, + publicKey: receiverPublicKey, + secretKey: keyPair.privateKey.data + ) + return nonce + encrypted + } + + func decrypt(message: Data, senderPublicKey: Data) throws -> Data { + guard message.count >= Constants.nonceLength else { + return Data() + } + let nonce = message[0 ..< Constants.nonceLength] + let internalMessage = message[Constants.nonceLength ..< message.count] + let decrypted = try TweetNacl.NaclBox.open( + message: internalMessage, + nonce: nonce, + publicKey: senderPublicKey, + secretKey: keyPair.privateKey.data + ) + return decrypted + } +} + +private extension TonConnectSessionCrypto { + func createNonce() throws -> Data { + try TweetNacl.NaclUtil.secureRandomData(count: Constants.nonceLength) + } +} diff --git a/fearless/ApplicationLayer/Services/Transfer/Tokens/EthereumTransferService.swift b/fearless/ApplicationLayer/Services/Transfer/Tokens/EthereumTransferService.swift index b3df8682ab..a014331681 100644 --- a/fearless/ApplicationLayer/Services/Transfer/Tokens/EthereumTransferService.swift +++ b/fearless/ApplicationLayer/Services/Transfer/Tokens/EthereumTransferService.swift @@ -27,7 +27,7 @@ final class EthereumTransferService: BaseEthereumService, TransferServiceProtoco } func estimateFee(for transfer: Transfer) async throws -> BigUInt { - switch transfer.chainAsset.asset.ethereumType { + switch transfer.chainAsset.asset.assetType.ethereumAssetType { case .normal: let address = try EthereumAddress(rawAddress: transfer.receiver.hexToBytes()) let senderAddress = try EthereumAddress(rawAddress: senderAddress.hexToBytes()) @@ -56,7 +56,7 @@ final class EthereumTransferService: BaseEthereumService, TransferServiceProtoco } func estimateFee(for transfer: Transfer, baseFeePerGas: EthereumQuantity) async throws -> BigUInt { - switch transfer.chainAsset.asset.ethereumType { + switch transfer.chainAsset.asset.assetType.ethereumAssetType { case .normal: let address = try EthereumAddress(rawAddress: transfer.receiver.hexToBytes()) let call = EthereumCall(to: address) @@ -214,7 +214,7 @@ final class EthereumTransferService: BaseEthereumService, TransferServiceProtoco // MARK: Transfers func submit(transfer: Transfer) async throws -> String { - switch transfer.chainAsset.asset.ethereumType { + switch transfer.chainAsset.asset.assetType.ethereumAssetType { case .normal: return try await transferNative(transfer: transfer) case .erc20, .bep20: diff --git a/fearless/ApplicationLayer/Services/Transfer/Tokens/SubstrateTransferService.swift b/fearless/ApplicationLayer/Services/Transfer/Tokens/SubstrateTransferService.swift index edd13bd489..b1cecf22c0 100644 --- a/fearless/ApplicationLayer/Services/Transfer/Tokens/SubstrateTransferService.swift +++ b/fearless/ApplicationLayer/Services/Transfer/Tokens/SubstrateTransferService.swift @@ -4,6 +4,7 @@ import SSFExtrinsicKit import SSFSigner import SSFUtils import BigInt +import SSFCrypto final class SubstrateTransferService: TransferServiceProtocol { private let extrinsicService: SSFExtrinsicKit.ExtrinsicServiceProtocol @@ -25,7 +26,7 @@ final class SubstrateTransferService: TransferServiceProtocol { guard let address = address, let accountId = try? AddressFactory.accountId(from: address, chain: chain) else { - return AddressFactory.randomAccountId(for: chain) + return AddressFactory.randomAccountId(for: chain.chainFormat) } return accountId @@ -68,7 +69,7 @@ final class SubstrateTransferService: TransferServiceProtocol { guard let address = address, let accountId = try? AddressFactory.accountId(from: address, chain: chain) else { - return AddressFactory.randomAccountId(for: chain) + return AddressFactory.randomAccountId(for: chain.chainFormat) } return accountId diff --git a/fearless/ApplicationLayer/Services/WalletConnect/WalletConnectSigner.swift b/fearless/ApplicationLayer/Services/WalletConnect/WalletConnectSigner.swift index 058e3bacbd..c9a79cbfe2 100644 --- a/fearless/ApplicationLayer/Services/WalletConnect/WalletConnectSigner.swift +++ b/fearless/ApplicationLayer/Services/WalletConnect/WalletConnectSigner.swift @@ -80,8 +80,8 @@ final class WalletConnectSignerImpl: WalletConnectSigner { let publicKeyData = try extractPublicKey(for: chain) let secretKeyData = try extractPrivateKey(for: chain) - return TransactionSignerAssembly.signer( - for: chain.chainBaseType, + return try TransactionSignerAssembly.signer( + for: chain.ecosystem, publicKeyData: publicKeyData, secretKeyData: secretKeyData, cryptoType: cryptoType @@ -93,9 +93,7 @@ final class WalletConnectSignerImpl: WalletConnectSigner { throw AutoNamespacesError.requiredAccountsNotSatisfied } let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil - let tag: String = chain.isEthereumBased - ? KeystoreTagV2.ethereumSecretKeyTagForMetaId(wallet.metaId, accountId: accountId) - : KeystoreTagV2.substrateSecretKeyTagForMetaId(wallet.metaId, accountId: accountId) + let tag: String = KeystoreTagV2.secretKeyTag(for: chain.ecosystem, metaId: wallet.metaId, accountId: accountId) let secretKey = try keystore.fetchKey(for: tag) diff --git a/fearless/ApplicationLayer/Services/WalletConnect/eip_mew/abi/ABIParameterTypes.swift b/fearless/ApplicationLayer/Services/WalletConnect/eip_mew/abi/ABIParameterTypes.swift index c2cf93cb6d..2314a55851 100755 --- a/fearless/ApplicationLayer/Services/WalletConnect/eip_mew/abi/ABIParameterTypes.swift +++ b/fearless/ApplicationLayer/Services/WalletConnect/eip_mew/abi/ABIParameterTypes.swift @@ -48,7 +48,7 @@ public extension ABI.Element { return false } return true - case .bytes(length: _): + case .bytes: return true default: return true @@ -57,7 +57,7 @@ public extension ABI.Element { var isArray: Bool { switch self { - case .array(type: _, length: _): + case .array: return true default: return false @@ -108,9 +108,9 @@ public extension ABI.Element { var emptyValue: Any { switch self { - case .uint(bits: _): + case .uint: return BigUInt(0) - case .int(bits: _): + case .int: return BigUInt(0) case .address: return Address(address: "0x0000000000000000000000000000000000000000")! @@ -127,7 +127,7 @@ public extension ABI.Element { return Data() case .string: return "" - case .tuple(types: _): + case .tuple: return [Any]() } } diff --git a/fearless/ApplicationLayer/Services/WalletConnect/eip_mew/abi/ABIParsing.swift b/fearless/ApplicationLayer/Services/WalletConnect/eip_mew/abi/ABIParsing.swift index 58b96a3778..a1470d5756 100755 --- a/fearless/ApplicationLayer/Services/WalletConnect/eip_mew/abi/ABIParsing.swift +++ b/fearless/ApplicationLayer/Services/WalletConnect/eip_mew/abi/ABIParsing.swift @@ -121,7 +121,7 @@ extension ABI.Input { func parse() throws -> ABI.Element.InOut { let name = self.name != nil ? self.name! : "" let parameterType = try ABITypeParser.parseTypeString(type) - if case .tuple(types: _) = parameterType { + if case .tuple = parameterType { let components = try self.components?.compactMap { (inp: ABI.Input) throws -> ABI.Element.ParameterType in let input = try inp.parse() return input.type @@ -148,7 +148,7 @@ extension ABI.Output { let name = self.name != nil ? self.name! : "" let parameterType = try ABITypeParser.parseTypeString(type) switch parameterType { - case .tuple(types: _): + case .tuple: let components = try self.components?.compactMap { (inp: ABI.Output) throws -> ABI.Element.ParameterType in let input = try inp.parse() return input.type @@ -158,7 +158,7 @@ extension ABI.Output { return nativeInput case let .array(type: subtype, length: length): switch subtype { - case .tuple(types: _): + case .tuple: let components = try self.components?.compactMap { (inp: ABI.Output) throws -> ABI.Element.ParameterType in let input = try inp.parse() return input.type diff --git a/fearless/ApplicationLayer/StakingRewards/StakingRewardsFetcherAssembly.swift b/fearless/ApplicationLayer/StakingRewards/StakingRewardsFetcherAssembly.swift index 321792be90..7955fca0ea 100644 --- a/fearless/ApplicationLayer/StakingRewards/StakingRewardsFetcherAssembly.swift +++ b/fearless/ApplicationLayer/StakingRewards/StakingRewardsFetcherAssembly.swift @@ -17,7 +17,7 @@ final class StakingRewardsFetcherAssembly { return SoraStakingRewardsFetcher(chain: chain) case .reef: return ReefStakingRewardsFetcher(chain: chain) - case .alchemy, .etherscan, .oklink, .blockscout, .fire, .vicscan, .zchain, .klaytn: + case .alchemy, .etherscan, .oklink, .blockscout, .fire, .vicscan, .zchain, .klaytn, .ton: throw StakingRewardsFetcherError.missingBlockExplorer(chain: chain.name) } } diff --git a/fearless/ApplicationLayer/TonJettonInjector.swift b/fearless/ApplicationLayer/TonJettonInjector.swift new file mode 100644 index 0000000000..3deb853f76 --- /dev/null +++ b/fearless/ApplicationLayer/TonJettonInjector.swift @@ -0,0 +1,91 @@ +import Foundation +import RobinHood +import SSFModels + +protocol TonJettonInjector { + func inject(jettonItems: [TonJettonBalance]) async + func inject(tonPriceData: [PriceData]) async +} + +actor TonJettonInjectorImpl: TonJettonInjector { + private let chainModelRepository: AsyncAnyRepository + private let logger: LoggerProtocol + private let eventCenter: EventCenterProtocol + + init( + chainModelRepository: AsyncAnyRepository, + eventCenter: EventCenterProtocol, + logger: LoggerProtocol + ) { + self.chainModelRepository = chainModelRepository + self.eventCenter = eventCenter + self.logger = logger + } + + func inject(jettonItems: [TonJettonBalance]) async { + do { + let network = LocalToggleService.shared.tonEnvListToggle.storageValue ? TonConstants.testnetChainId : TonConstants.tonChainId + guard let tonChain = try await chainModelRepository.fetch(by: "\(network)", options: RepositoryFetchOptions()) else { + throw ConvenienceError(error: "Ton chain is not fetched") + } + var assetModels = map(jettonItems: jettonItems) + if let tonAsset = tonChain.utilityAssets().first { + assetModels.insert(tonAsset) + } + let updatedChainModel = tonChain.replacingAssets(Array(assetModels)) + await chainModelRepository.save(models: [updatedChainModel]) + let priceUpdatedEvent = PricesUpdated() + eventCenter.notify(with: priceUpdatedEvent) + + logger.info("The Open Network has been updated with new assets: \(assetModels.map { $0.name })") + } catch { + logger.customError(error) + } + } + + func inject(tonPriceData: [PriceData]) async { + do { + let network = LocalToggleService.shared.tonEnvListToggle.storageValue ? TonConstants.testnetChainId : TonConstants.tonChainId + guard let tonChain = try await chainModelRepository.fetch(by: "\(network)", options: RepositoryFetchOptions()) else { + throw ConvenienceError(error: "Ton chain is not fetched") + } + guard let tonAsset = tonChain.utilityChainAssets().first else { + return + } + let updatedTonAsset = tonAsset.asset.replacingPrice(tonPriceData) + var jettons = Array(tonChain.assets.filter { !$0.isUtility }) + jettons.append(updatedTonAsset) + let updatedChain = tonChain.replacingAssets(jettons) + await chainModelRepository.save(models: [updatedChain]) + let priceUpdatedEvent = PricesUpdated() + eventCenter.notify(with: priceUpdatedEvent) + } catch { + logger.customError(error) + } + } + + private func map(jettonItems: [TonJettonBalance]) -> Set { + let mapped = jettonItems.map { balanceInfo in + AssetModel( + id: balanceInfo.item.walletAddress.toRaw(), + name: balanceInfo.item.jettonInfo.name, + symbol: balanceInfo.item.jettonInfo.symbol ?? balanceInfo.item.jettonInfo.name, + precision: UInt16(balanceInfo.item.jettonInfo.fractionDigits), + icon: balanceInfo.item.jettonInfo.imageURL, + currencyId: balanceInfo.item.jettonInfo.address.toRaw(), + existentialDeposit: nil, + color: nil, + isUtility: false, + isNative: false, + staking: nil, + purchaseProviders: nil, + assetType: .ton(tonType: .jetton), + priceProvider: nil, + coingeckoPriceId: nil, + priceData: balanceInfo.priceData + ) + } + + return Set(mapped) + } +} diff --git a/fearless/Assets.xcassets/crowdloansProfileIcon.imageset/Contents.json b/fearless/Assets.xcassets/crowdloansProfileIcon.imageset/Contents.json new file mode 100644 index 0000000000..9804412c47 --- /dev/null +++ b/fearless/Assets.xcassets/crowdloansProfileIcon.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "crowdloansProfileIcon.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/fearless/Assets.xcassets/crowdloansProfileIcon.imageset/crowdloansProfileIcon.png b/fearless/Assets.xcassets/crowdloansProfileIcon.imageset/crowdloansProfileIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..ad4eaed534cd9a5568708f3a5b1aea07d937c1c2 GIT binary patch literal 538 zcmV+#0_FXQP)H@#_5^O-tUfGzV!6}{zh)8)> zGc0pq4Get=`6+eC4PuD{3#FKh2)cq5bd!d8BbcC5%4Ljw=$t_g8N?0szf}CTbnBtJ zd>Y=!M-Q__-b{WFs=n#o&SDR*+&zSa0d(1b!jFn}0}4GxB^fqHSIkJ>20 zfIM0n9`+6MVr$z>wZ>%NfPKMETu^S$D35@kMP-pO$+b$u&SQeU!(P6l%MRu?p!UaQ z4&5-<2*=2C+CtnxCo(%6ntg cZiFiR0iwu<9jMVZa{vGU07*qoM6N<$f(fJJ7XSbN literal 0 HcmV?d00001 diff --git a/fearless/Assets.xcassets/featuredBanner.imageset/Contents.json b/fearless/Assets.xcassets/featuredBanner.imageset/Contents.json new file mode 100644 index 0000000000..2d3c27c783 --- /dev/null +++ b/fearless/Assets.xcassets/featuredBanner.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "featuredBanner.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/fearless/Assets.xcassets/featuredBanner.imageset/featuredBanner.pdf b/fearless/Assets.xcassets/featuredBanner.imageset/featuredBanner.pdf new file mode 100644 index 0000000000000000000000000000000000000000..bff3d3e407a9c8db4d8e4658a2d9d3ed92360179 GIT binary patch literal 606205 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Π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

iLy`!X1Y~3T<&Cks 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%0A&?HGE1C*tB^bA2MMR?aKSs}%$FA^#bi57&pA>R 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

yS47mhK#6vy%b?b;W_nJqOd^L| zC2P1MTa7)^W=|~2h`A*T6V!ZuZICJ7+U~Y{J9O7;eao^tV_CJ$NnL&a0EYhnsr!v4 zp{U&He`)Z-T51;(U_CXi6tCGr%0N z8?f0m?tT~jroJb~C8QR5y{C$8)JT(*n!@sFCJ`e?98sfM%m97C-avRgijsT?;AcV& zN(xK9znXSADtprRWoO&|9UpeTh^LGeeFIfxAH@tYTp{{2Q#OAp&A9QTQ8aPK;k|z0 z5ag0 zc&j%*wO_@Uioj%F;nI|IU!X*B1qT}PeGq*%j$~uYX1N~_yzJ*KDNH` zJ=LY=nQwEV-dM+~-HQ~sy=WngC1~W4G7@PWxA|p4@sdE!a1OtSwOSA9wik_PMZ2d%I7CmX9nps?Bk$UO?VVO0HvR5hNv5;%8QjwBm^4DO6XNixUfqp4I)Rb*|88ho*$3={RaPY)_rmoB^A^!fh)UWQnTv4Xnm_rI3s zf8wtcr-(1dhqS_$x@>YZ*NF^Zn|S0S&yXa0z?M}z5l-cTFtO)*xvzA!@a6Zzj|bk~ z$fm`$D8v#8_7<>Ps2oEIOMrK!qf2!E04P)<+i@=Gp10s1!O`I@CJzwnmWNQ0u0%GL zj;1fQ-^rFpTWb;)H6CQofFrk3U+2a+Uyr^j@czAVFNAEb=F}}T)ViAg08zIqgNc1P;x}i$4St`O!%k(g z(SE<>@;^4lN#4@k>i+<*$L4Nm`aQ<8cDC_+v4S_hU7()Bx%yVk)|d7x_0iybvq%-B z7$YYHbSH#SyRY8IrEGY5&TD@SoqpUGK_`^yk~cH%Wh0I_jNs<7t>)e}9a>Uz5==qo ztdjX7@d{Yhp54xJN$9i(Nk%cc)&564D~(T3l33IWYhT^QtP3ba9S+_`?xg;;(TRXn zax<`y7@UR4IoRVQ1CfW7L>@P8pY3(2lAt;#ObYeR7{t@ZkwP1oP ze25T6Pf|LcsXUsr7t~Y2k4mVaa}X6hd(=$4^sAd`n?`DcXS8)nYdEC^SOy2N8Lfs~ zRoL{WTV%e!K134d%NX4(#CD243jy8E5PIi>6Pk|WO8X!G)cjhpourtwhYWK3f=Mn_ zbH@bdoDx2@7N*(0AaVlabDjx3^UXTPY?qla^AJ#=bpQ}R&j-IJ(=|%!Upn$>2TjBd z{mpPvjq2aX?WpYw5-&kd%|@q;RHK^iIYd#-OODu~RP{Bfqv-mlh&5YH4@9++_Wu4w ziWnkN&m*zG01jxB)MDFqNG*3_jlHz@b4P7!8%;FK5fK!#GZTOS9Fk9AUvT^l{g6CO z<2`k3HC-jOZBj6eJ&BQ^u+v0<6m3%N2IY2BxosfK%s%$fn))yHW&M>_J$ZCHONAQs zyO?#oem$=qn9Xe!?~76K4?~uzaUrVIrkViH%A7p`~JRN*H*RBZ|mW*{iL+r&Jz0Zm~Kk)m))|S5z z_4^$drLcg@b8@hxj2CGrZX8J9@$()@>IHa5gT6ofD$=zj)IYQ&zb$6Voik6nzkHu4 zd1c^**JvZh>^SM%`9;l0Zk%l-C^als?QF{{XkY;2Opq z*_EgGqe1a5nzx!Bqid?#O2G`)vqy0dKuINZmRK=bi+rzh}c!K0VLy(KGwfx4}uj-i5eZwRT&Q*6nSnY0jWAj{41p_?c9KSY&ga1%BJy ze$e^_-^2Y~{4B2CD)XA%bbGsV4xwqicBq~fGP6SzF&QShC6j7yIL;Rn;n#sYXX8yX z`*X$DS2lOB+C}}Bs zYFi&Dintj)x%v-U`y1fLz$cyTHSZZ%eX{oXeBCoeZW?{LK6ThX>h0tE&R+@u!)2Kx zXg_CH3RcRs|M20MmGkJPqsY|CPoFAw1unk?l$8Os>WDcF0$KBud?!8Uws!= zzMCh?l&xB_{=2`>!|+$b3u_@Bz2a8;cDAY#*&-QBaCXKcwu!d{iAE7fji-EljRlIHQg z&8AsK@+-oVG(b0&@fl-^*4HzVnN$h$*W)g&N!IoiJ^H`PdqzG_Z&bFwccJukpDa1H zkAA1RYd$Wv7h0Z$;oEZhloofFeq7L*V-0S@DJ)P*v!c7mcC)IXIm1_!zsAd(9}c#l z)^_nt6w*U0+q~1+DGo$`KAmTG3p|Uoh!*lmfjD5Nr^{awel=P6dUK=dHw~+50nE`^ zOKZMkCg6P7^mk)rVHqHiCa3nh&*EsuO8Fnge;vGE;%!syvT70~!Y`D+X1QsnM9kkMGByjb9HF<)(f;W=XI#x)?jx3&K5U*Tqa-CRv1Rc<&bFBMT_h@CH?!B5vxY% z+LhdKfbtU`C_d?IV;TJSx1UkC0yx}SL~)qy$CbQ{^CN@iN`7O^j>KmjE3EMU0EF)~ zTibgbGTE+fuAC%MBJOD%_8Io)&<<ayyl;DBi1d4FsY_@L7KZHN|6K7t$Rqy%#0Gawd;LnRMF4=s;9n9DxZe@n$9^UO$NeU!Hl}8CO@JFAI;8?rV!OH!X&3)HT{{R6- zw6keP-Kf7`%>9D4Zx-oR@JS>xY8qgTS>d~yCBKR$1IsCNn{94MQMiX_$RG06$;DgL zb=b9?K2fCkF*C##cfE|5wCi_W*tmq@n&FUx_G5#{^EQlU;tvJaI9kjR)6RCz}!s5R%%<>n8pS7&5+1lFw0C{wNefQbh=&<zQ8kU?{KPAQRU{w*k^v}3-T>qVR#E$*q+)gF|bv4XC>CkBVj6b83JhS?ZIp^5u&^ zEDLubU8n9xb{9BFoFA>={xYqF#C=}B-Tc<+{w2D9YiF&Q#hPW%uMTDR{{US(_CFp< ztaB453-)`4IrdC{pRIH@mhS{|f)4mRyL0k`z);c;yZ-<^UH<@xbghpS_%eML#WHAj z2h56C(P5k^Rh}D}qePSg$PSq$Pbk5Wxl>W2M{xwV?y5fBB=;wHk04DeIOTxs-8X&} z{Q|KOtq9bn?wRp1q~RwSEm4zuc_DWb%Elm}$jgv+k_QLR9sdBkSTkIkhc`~CC_)ib zs8S^4h}Z>;l>l!iZa7h%aa|1dKiX5gA}Gvpf%B6YRb#*e?!Y^UAAcDlx#^uHx^_W` z;084vw-3I4^ADK%5;0oBchGWL5lJgS85@j}NJ(a6lFZzaea}-?wChj#Z!aYO09wz2 zHoLkkc~$;j{d(%6KokHl1#XdyuX_rq&q}izcBMqkb+$HoZkKHysjbKMnI{{qZ1Pvl z8ONI|FDno~bY)DKJb($Ptyw`|ci6gg+?|YTJu>F%7rGl^wT$8CnY_4A`WHQ0{gnle zVOE#>BHV3)DK!}f@ynPk{{RGE-#G3IG<>*8vOIP0o5fxLnLo846If19k$DHt1issc-EUQF8uQ_ejY<0| zt;P1+@#=NY4&b@quDhOUH62JVmv1PujP+YYTVeQ^z;^!tfibM9EuwZUA_roA^9{%I zY@gP(3|P+;!kw$NK}TeA%1&FeDBDIdLV$6OgQ5H?BMJexXvd~Ftwu_TqsXUnY(|=$ z^hhC|q zcw|)aTUh8mX8t0)koCyH83)u6)K+Bnz~>^pH%CPAcl=3p2MMi}BF5wXe#(sfo@2l- z{{TGXJpTX-9AJ(bbRZRFAdaB*2hjV9aI4JRWx5GM$upm@k*%i|^2y~Yvb0VP3~UZm zjCwcaoN^6zHky^K>nsv54;E7ig6p0Np*cOlL68UqPH+~uok|iS^O1Knc{tBdcwxt= z>F9oyV^4H}KGO<`h}(xHfdJrwSs5D#Il;~kBe<)Yx-)~;*F8eo#tlLV?W9rVx)vF5 z7ikE`0KPDwg#dw&K*-sV=lb@X^1%vB`=+*+?C#m!l2oF$MtZKoeulameMr%PZe!Akb2O8A%+7Yl5XN)UEg^|=MIPNxE+u5Bazy>d%X`% z@m-PCbU)o*Mn8EGAOb)?DZtL+e(U|#=two#_>aKx>e@_No{GE3O|deMmS&9+=8b#q z8^fSH;FQTK3GzKE_V-1-7gnd{P(uUJko8vfHI*vLvi6ks9ZGJWxjl|!jgFx7$n0ybKJ~71$__de^luIYRhr;#aof_nt7{~MMh8B%ej8yLfET4tuvU*v z5Y&3Iw#*Dwc^0p-)DDNBrE;!fOCCo`#=5rz9xJDkKDZUL;V%Msqv8g=4~D!Sr%9;l z69VNI3X#T~yt2snNTNZ@NaQFTO*Y7E@yo3|NuJf}pAJ7}UyA<#6YUPS;r%gm{{RoE zB28yhm2~|z0Q=v+pJkxMKuhDOTpRygb)yhxdy&5lwTI?AyD$QwvKL_}bp(bzv_uMa_Q4fn+TR_Edmh(sZ+tY(@`KTY1aVHK9%O(H zHz*w@N$nIul6xPDULO6HehumFVAi}~pK!*hQ##Q{V=XrdhcGFML(1U0+IaG6{-Hizs=zS$JPe za~ps+rukr>cGHo&c?YdvUjE6t>C?1}%a0J~@3{BQmU|&Q+%$Gb3#z{d)6CF6CJ8KO29+KQ8Uz5=*0aD_oLyjyTbDxiqPq z%Ig~7*v$q$XBjvlM<oH6M(|j@-r^X`c2!d zewbf;dGTXw`cAvz4~AYU((Uxf-DTaTL4FSBjq;|_XOU0HM*xn5^u=^v3H~~G8(;C( zvwf*+38!33EaDqG<(ksu$NsQ0L2?n75yqqC0dh&sP6Z^{F6Z;p;t$yx_)8^^f;Gr4 zZyO|O`m}GO>H}#b0WL#DCQe2YToaBnUp)Ai;pdDz2dIr7#+ohOk#dBPw@{Vfe-vT1 ztcQ-Fh_CBb&%(bC{yEF8+<31}x7T!;k%P_?mx)o&nXysilh-)FjdTOosPOSlVM6!yUrnSY_BlMnMt<2QEc73zny2`NXzn zXGmdUn@Do!ji)@eai3hsM&fc5bgs(YB@st$2-^%fUuhi>C<59s%P8P;zX?F-@UNtF4@a&xBMFUfO`&^Z&Xar5=BkWH-i(!I6JPYkg! zM@Leuth^N}a6t#CBOy z{{V*JNLi7>&8TQs8-jy*9uL}Vn2?P)8)X|-P_6+y4~hN@c!FqKQPSfVniYaZ^2Ki; zaI(t)c^<`>mYOJ(29vsE2jdQYTJX<__3sPn5o;bDy_U-A4Eb|H zs;$&QLnN_u0#Lh$P0x+B#Q1~49}&JE!<(sPlTKWiC%47Lu~uE1M7Y8Nnc;$-+iUb| zOHTo4?WRfbFT+<}8P@eXzqZe)*zTUnRWXK+NMVJV-J(yFDTvAnv$vF|1bqdmcmu#6 z5bb2uJQv~{4OVGXf|eHrB$1SIBt~aq&5lDV5_6jT_c7zz_zXuiY7NqUS4*aiU2Csx zIwR_6WVCBjN;Pdh{ry+@pNo1&#Y_7urnOz^{uymbG*TpI%#z)nNt!LcB zC6%9SMO2VU$l&6-f3onBsTiuS{{RB*WMc7EqZZXA_jkMh03)%v_{F6pQB7l}Tcyer za#93l{{U8kMDt}1`%J07njokDhj z*-ZGHw!~fEx>7g_Rly;!F@sATh{0f@`E_g6ztiuz+n42-+;d6$vH2zXx9MZekAwVO z;;W^Z<}hhX8p?`O%8d}H+!7F61sykT#{(p174}!ce}rBg@UEMAscT+krHn>6WSL>} z?r!Fk0=AaXk+rUvpO!zEDzeDj3|D#JUj<%jdZ^Phy9sq2S*_Hzn{LS*k!45EdwAQT zw~YaP-z&^iF4e)!Vf<0})#0y&FD{edJKIka_{&JOlH2=TMl@dyK*tRQiaBvD!sHJy z?~&wf@-w+uWBEB|*u3Uz2SPTEnk_W*?7aH@l-jZD;wfOVSh|pW)gN8$zRUXcH$F7{ zR@D3@v%x+diYs3n>b9R`hS??$2Zl6>z-NoiCvV#4U9WX=+~Xg>qj$)!dts+&hSJ*j z+v#>eZ?5kIds;P+GFl{IhD%7H?qH1k&m^(UCJ_dB?G7n*gw%C+zAL^4n_AVb-^{|! z?8Qr+!LKfU>`{E)SlrLLOo;r`$DTKj#aA)uIy$sk4TO&AxMA-uAN_6A!~5^Ts3+u! zRWrqX)?JfwHHVAacWu9``>TJn{Qegcn!7sF>wdfc0K@&K+eBh(8qB)>rzWQGi)hGL z;DJdi1-xTyQ7Jr-i`1T3iDSt%o=z7%am`hX^OM|Fk-+?G?O_E3p&gO(vzwHhrMo@D z!xJU%!`0G0=}Xw>EDlc|WP5Sf_`$9P0ACAUOvL6{V_f88mUlh9S2gIr3T!UMld45? z5dv5e;xp8h1j)F6-@JWmfxLv<_*Nv4?ei{jeLhr?hv&MynlehQST5`FJzPR=l_~i@ zz>i3QBDFqVc?Cufp(BBj*S{FeTC|B|ndATfG6w`@cQDRW0fUaDcBHmlFXvxK=vtJToq}lBGD#)X zqy-`Qn{@V(F6?9xnJp9%j9Hwxa-Az3*tKk zMzWG4<}1Sy46nE`#N((Z(Ma~iYxr^>Cr`b;ke~E;n8p~Bhdx{}kTd)*apn#>sOwq0 z($G`oDPXnbx$_`Qu0Z0fTj}?Aj~rIeypJ@C8U<3tnYsl7C5h|>d!w}TNZaR`mj{C* zbUm@3>DIa{i`&gR!#ZvCq}iIvd*lxwFSJay`N4ec2YJB*?;ghnl=C@9m2&T=;3(kl zcXP_4@Wq#h1ix-rwGCcA3~obN+O|eRkbi$D9C={v1pNMoIM~T`aV5-+CEd)w>nD)q zk4!G^0;uex09U8mcxS}gowdH97MC!!@`6QiG)6mU(WUge!i@a4 z`zZV`vGJFUFFa@BdpErB&w-&$LhckFHPyo~7PhOBGV@46f$B%DYxldtS|*?HlfjL3 z;<@9q@ehh;`(5qT)P7~NU(A3cAAKTNAdObm1ZhwZpeZhS{OgQ!=LhvF4)3q7`uQcR z?(DX??q#@5J+!`G*M5uUXlcG0@YaE)=$;GsduG}@cxqz0ZJP59+$gNFnaE}@437Kd zpP5opugj3HcVF=aqv2VtyeZ+hSH?dPbz5W(^I|Aqwg+$8ZsbguEfx0^L78S^LhfSj zF8H6sTAzVzH2pHt$_+>2CyT##ZE6_#ThVhQvK%Wdov`_(YzA}3EW*0q0(c_R!CG|T z?pssVwMjnHs%lbzC%w5N1=tMjjYrEAL**6}Zl?^A8Yt#E-#Dd)+vkCnBy8NiJ>Zm!IEuT=6he zQO}t#DyT>j0#y9Fi1N=ATWj;l;J*_1*7dC~FFa?Y%DR1|n1;j8x45)eyz~ns(?6N} z=iRWeDu5`b$u$Yso3J@vd2ji-U;=Jg$u4=E+H7cjI# zV<`oH*Zr1?){B2^=h|=1G(OuxwsRt25#=*(;QI<^=U08R!Ii&o2cd?OxJ>B&6$ZvW>StYLXMmUX;%kYHE26H{x{cN@sj(r zYf~z?RXF=Pt4IBP=kr#vjBgx+-k-2zkzZ2&(q9Rmz}_vp)pY3NHa8QZT$mRSB-au7 z&`${MZF>*zVeYNH4hn%^G#GGlMSlI3=5WT*jv}94ou6al@i9U z_-}XdL&ti5g&}Vy)ybOja(1jXk&)&(CxO%`KBqkauRMwZ%rHK+`cL~T{5ggn1KKUz zL9V_fTuhfdsFFVn>FOHw#_-_z+47f#Ihja2SDVC{$JB7Ls-2tBKHcBRU7O|DPi;{q zv|6+3kA~h97Z*BbiYzS7on#|R9}mQ_he4zhwdRG%^5dTMQ*(yHC7K2Rw&7iV^W)p; zB!)=SLa}6co!QIrZT|rFBsP8&(B&4B+(Pe&HlMNELb0r~KpWW-mEYW`@%W-hfwQE4WfyrQ?ipZpip`|o3AX>{Mzt>SMI>H2lFu<5d$ zHW(6bwcJU!?HGx}%M7xe(YT4E^5mU^`Al{y$tw(e4e^8He6ZYG+W2$}Ymo9ip;X!Z zo|2GSSR!J@Z!QQ9*D~&v7X)qjRChlf{C{nuD)?(lA}u>iNaU6_=p~IeM{dKC@ma*+ z@<}qt3uJ{g@a3h_-rU`IpH@#kXm(od#Re{FKF3ftdCnTJ4`46RgPlWXICCqB0 zfyv{b75a7~7wjPHc{C^~w2p_tKLET{tVJE(qa;=lN%I8+OD+h{ARUAL`X}1HxA=4L zdqwbl^ctvkdzinDP14FoaEgIcXW0quy9C!s;7t;1O$y2k`EzYmJC4-DkU%^fV4MTn z-mLs=xbaSd@MpxQ!TNl9uDGyyVG$Z;SY;t4kRsrgjR|4cbs&LX1zR$&imB|SJ0|`| z&_fGOjCrhm3YxSrz*(cXjX)cWmX|69eOaNv{Ka`Ei2M(r__s~C)AeXp`%k-bCk^*y z=MId#t1jb%p5z`075IF=61;wH7g9|~#@n}rg`|x$*Nu`cKDGND@DIk9x4#9vJK{eV z-b;0VcW>uSJj~KL6Hd{@r#WUP(=$R06yq(d+wMZrDs>+4^2{?(o&)8|bC z!_crdF|?O%1`gCKwKKtzr9i zlc;P<>qaaixI{TqkU>eKJjF7Q=-m!758odMekWa8>QQR;*Nv%KUjWT9i5_X%bY?Qf zrwW(zz>I)_QX)V0Na*%Qd=bEMPpT(!cSNe~IHB@P>T`mX! zki{A@?1)E4^J9j1Pw-6;#y68&XL&_DeF;sgyK1|x{=c5xjv7^EMrzFcaPbwi_O~#6 zQuuirYA_h%8il-Ixzueo2S)Q4h|TIoL)!p%70fJtW!u;<{38B2@W7Qky;DNhElR%A z`?+nWQ<3Ve)Ow?i%qxKSSK=7&^h?bjSiTd-ZF6xEca%p8HblZ`5IU9nOj5^moH-8C z1uCIbWoep{cqhjfeiXY&A=358-&L?O#pEcJ4$J7HR^UY=I$ffU6g<4-SM&BW3nf*o4b>)7@`%FDmG^f&EpY@^ecgG)x7uQ#shKW4JZA#XAi*&jJ4=lnFaNRn6 zx&}+6310&@Ya)FAv^*&J*)HQ#t7q}Vd8yppZV0QGq1Sma!gIUAJV z0y=fC-1sLsmL`O0N$S&oG}ZqA7pI}~dA1o-pFj2G`5dO5bE^1$JyJUuVwGpGYgrm8 zZDx5@zHQEz9%CzR#!PD)lDGsAG2^#Z_d0t$mGm!dGUSzTN54`z&mZGkn!W6iNk8#_<;EL0UI#$Ck6=K@1Jb`hqXxA+I=Y%VWxtmSl%)UV=Hi&7B_72a-$6-_e=ChNN&Ac)>oD>T=Z8v zb$;(p_$Kpwzq|YWf8Z6iDdC1krF)-&J~()r!uD_B{cb4yN1)ETB(l6azF+nj=ciB` zARd@J*NSbYFBD>MbnC~KtZq70M@JEOXYCZ_M`xCxdwCls=x*oWSMl7y9 z0et({o5^HEh9b(WIU$)wKOE!oHPU=LwY0wR95$Cy1TrIee3kv;jl&EXNIV>K*A?~` zgnT(^;wzZ6+qfc@=#SmWaJ*%PRb-LA=I)B;f_Nu2^LdVP^65HG^0L0W{{X=~d>&M> zYuYUjie>PRh*H&W&4jIN_$w-n$Z|8)aw`IBIiWjcMnmYs2lcPh&2!+Llo~8oKVg>I z?VKTqz|pF=&7N=>xETb32+j`%ygOa+C8~#9EQ&HYIURA(jCHOYyNn}JXh%BLp z`#>BX_%-zSe8!zyB<#-?whDChdYrzKc)CulXR0=KT1=8Y(}pOg=fUiD=LfOHZG28! zNAbR;b!oR{=F64}0ADstiEsx%WmaH20xO<%Rv5=#$KI^?nasD=QnB39>F_c7?EsVY zApW(yss8#kJevHBRK3Roj=6_&oxMe4>55|Wt>oonET2?xSbkfG>DszU2N=a>SsPe2 zNq*HDvb1;#Utq{2XNe;ujPN&m^Nb$1D=V1WTN+SIQKFDZwS$1=Mo1$n*ux&=F0G^oRAarIK9cseKrkfj!cx>zo$>su8jI$sh{ln+Y zf;)Vjxy4ZM^D}FjWG^T!=P_&y5&O0ckCS!}uk)@d(&mhvx-+H`<#CH=D=cK9+&|3B z7oIxc9CbPC^{MSJjhtjK@5vQ(TW`0EJmD0cJ75puB;!55N{vFRsFAkr$WflS>&Kw( zamVRhad$^IE}|g3v%5>1CutxoS?z;iOJIQO=v0tT81>??@BA?p)yrRn5lbtH2mk;Z zxWMBC^MTU6>%zVz@Ya#w4O3Fn!nVJwGub3kDLzyLeDaOi1O*!uHa>PNRFz%6Wb6(H zPw=cTu~VGqYjpKCuNy`&ZvA}>c&*kL)->!fN+3<%VFPwCp7^QcJ5O3@BNgbQjA>9Q zjm1b!M#t8GBVkbynwzzCJ_+z&h&~~Bt4;84h3)>+scO=QqEdFEj!Q`+e++S`F74St zG#Q$o41N}C9~5=TwCg#d({#N$FSTl#ozE7w7NFqCDdQ!N%N%R-NaO%Ik^4>iK7Pu& z8fd9wb76I&csNRi;?hU*H7#0rwmfs{tOGU<;K^i#QrR=+6FJ!zo%}cWOK0H^4d_}n zm1A`N8uME6()3vyt9@4L*Zpp-slunsTP%Yef-laohPaHG1YrHw;lGW(9@1^2&^%1f zCCWq^&@`fXF3@3%!*bhVypBAUYmniULp8#NSqO;TyRkiwUe$az;Vmb_$zgLG8a|0* z2#z@7#jG~pIM`$I@#Q#U@;qcVP)8Pxiho48`!thlTeT`(wa}b zF`od|qzKsujtyXVgTsCw@okG~o+#5TwR=|_$9D=$IrQEMQ}iI$Kk+xm7M~A%1>z4F z+z&Cdt1F4&hyu+l=^GfM3O;7b09zdtGaLX-c9u^(mNv3ovb60CO({>hWGK7Jj=;8X zDtXoHJ01md@K;vwp!;vZpA%eoc36fZ)9;Jl>GkP|S{@Sk)vS1P z#3w}f&8ObmYu7CxvmR__&TvLb*gRHs$9*ld^mW_R}#v;edUCBeTjPET6>!`E`NT6 z$rAA@%7bwFr%sng)^zywy#rK=OC3f;`y2`s!Wvk^0Hp>d-56qzlAc+>Tmno=9Ke4k z-XrkVvEe;hZ4+F8!E+V}!3>fkec2;%!^Y#4V0jgTv}V72KWsnQL&2KQh0|B?&9mET zMTvsS+A}l9BeNME)(F*zgvls-h{+M64d_&^B>XM$2Z!}f4C<2U8nj+q(d}g;l#(|a zl0-kn9Ew9D4xrGVMpv3KJK%~jPWsbG=BQ&x{ON|CdeS#aL$L|XMA)g1N{H5sR=ER= z`&Bnuy7gJddYgfjG9HzMbcE;Dx@lJ+_pFPEw*&1%?kCvg=1hVJu6pL&#z|kgd9J!> zut}`B;@qb+i7{=inkLT$dxOY7TG@s`#K~?*0eKkQ+-C!?An*zF?O5{L;fP)j=tV>t zYiAsg%hUXS{Z*9VeN7=dXwRrV8Gg~95q=t3Hi2h(9;@NG3i-NDsTbR{$+m*O@$W7I zb>PNS^U}VBviQUMIQ&DAFFaGFYQGM(&5ECF(WL&M^4>r8BbCMu02TS& z7NUoVL5+`AUUQ%C4u|rogAKcsh65NXa7RwW9!@(N@G-nUhr~BIN0v{j)BXeb-1acp zwQ4rxmC^b<-wd=L62$X-H2AsU-xHa5@-;h!)9%j$ffl70#{iBcJ-Nke+y2jgAN1t= zZlBmF9Z>QILNQeX)fgo6`Yk-#u#?N;BZIjR_t}n zM@n+~UF6oTry-${qagnPz!`r7UPSm(qE@3>eBz(u7az#=DRC^<#~b|5)O`cs@5ap| zRJW3U2kOZ^v=OW_HI>Wa$mq@o(aOqzc~n zvsby#_wQ$HjPyB^r`EjB^)nakJ-4@w{{X|&?>ko*MJ`oK@qgxinc05Jo-^?3HTR4n zk3zDAN;I0bqiLqbvI$r34>8;!3or~3zFoX?P+WXM{hxjk>C;AFi5p6z~KF7I3Sl4NAC0|fALIUXyc$!k58wzJ~f&+NSt+&9_bfd`!<0f&m#CL|dg zoHfj&Y-ExS;1u|5a_nGG2P4#EA8a0@+OOhksXXhJEW`kEbJM5L4@&y{CQU~RPuSrj z%D*35z2BR=K5}^J)StAf`I+e6F7fT}i(a5gYS1CRED{{Tw#9|7v=;6VnxhLJp(B9TET zF(Q$>Bal##K=#3|7h6~^=83JD*%QfC+z%x@!;(GsAO8SVeC<38sp9HZTT0LFO@F~Y zf_TMK2?|em-F@v8HYj^bLVJceU9u3pfKmoY1B2GKtz%iqiZ{XJj1$v1EyFVL+;DS_ z)ppj-+fjv*2W7y}jQb983}yRD9w z!(@bL3Hf6K8T9F0tQ(d{$BHOpw%5@>Xzyn<~JoGnN?0_g+O8$=XB7b#$6?nWV-5IY0=z~>A+pJ6SjY`S${*F&|?c7pv#9?7 zfaev_%=RfJV$a!Y!s4W5st#^i9!l3bs!@2(wxB?H>DjYk_r zFUfvHw4Sf^KmXSJEibvTnzF>T`L; zVIt6ZsIyzKAzN&oVyY@`4Tl*CpD6e_;r%-2Rq+P36RdEhyo&zS0sG_*vF{p*?W zPl+S&?v?hXh}~XXI@{V?FAs5XCU!=rwsDqjih!};R@<=vu{apX=Kv15K7-c2YMbIt zoqyudtJqsh;tfc}EIuC6ZAkOxh@G=)6El34w(_#?d;lmy)JZ7~HYzjylnx|^sZ zuFHNk(j>OM_x8@2JVD}nYu!RnKjY!F+iQ#LDC#1LNFqqo^iVsJYs&usX^)A1 z4eS3+s9Yr*R#!NptpOwA7$7{h{GUjsvlq3nK!008T0XF7Stmyif7B z;pL~qeR@`&Yab9^HlL)-_Lf$VM-{XJ7^YQQsZ5@3*`{Yg>y=eNNIPG&KZ9(W_Hps& zhCDH07M-Qo_{vGlBF`ErrSkr8-S zSB~=M!Tuw2z(lQV47wXLHBxdRs0os#KCCjwPv<$Vjl9zM~2An6k78cNM+cVjWN z)O7o$^6xAz)B@J`5%aZxAgcmV)P_P-gI+~iT&tcA@%&e>`RvW%CiIr)p{X5BChT+T zQLAx^M__sBNlbP=Tm7VTQJ}@9{A;j_&VLJL*HwcAi>)H*l_ggLoJ7PpI3yeq(z*fS zEds{+8}AWcN2yJGhFv-|k9HBHE~XoB9(9qCQMgtNNL6KAf$h4konx)(mzpM|o@Jh+ z47T&B=+R829CaO-*T~-h?DVKS5c)o`Xb!F6Jx1%p_w63onsu~xTX&z!+2#QgC>~*D z>TAx&HyU2nJEoV(-LJXd??~u{n&gqa75#l9K1@Z6Csc2`!@SU8Vwl(1gLVZ!YJGZf+%0SUoSdz$=2_^qbPeP!Wq z6%{ZnT-Du{*uWTY>c3Uvc5qbtNfbC$njO4ae||m;M5eD>}l)a8(xT z{sMoa`_Bf`G@GqX;@?ZM1+H}oqPBz#l4P0IHQ;2PTd>W3+xQE^Hdb2hv8L&lcNTGY zQpZd1)vWfeRiRND-`>6*UJ_V5O2Ee_-5okt<_EwJ4@Iv0Z16^#BJPem;dVv=1X@P- z9mwd)JN^~=ci}Au{u0d}RJysBr4m0SWbTs^;xH2dqlOT}8tHMo_`matqT&`WV|Vyz@b6FhMV z4CG5Rr3pO58$T|1KNGH%;me(J{{X|<{*$I_k1fPcXL}5nhB;iyqUssZWuDGPGc=@Q z1-9-`6fx5HmGKKtm%!TYm7`x;>M@Hm8oi{b{{SbO6ez|PRb(3&GM$758}Wup{LZde zuN6%<&XjvuY2?>!pUn3Ct&`^IbMt57M~W}}TdrLBn38Fx%+LM%i9=5(r_1JsJn|KG z{m=z+kvvyd07BdCt;d%O9;|?$nEwE@=Ow%J^c95DJHtKc+8R@E#~lZn=@u|~`-VaE zHKV1rHiXAKkUDc;(b!x(Xi`+^t0kfEvZ>7`-&50cl>4W*_}A1w3;a7Z-TkZ+!05MZ zq!Oe968y|Zwih3be5$Hky)^0 zAMEtW?O#2ex}2WkJ&d(N{_{SR@lBoc_;NTj=pK1xz0=U7OSp*s)e(`1AHuP#7WVC1 zn#?!1&Gt)u_Wouv+d*ItV!6vJ4hY5wHOqKo$9gA=7ghDYz|Y!mTJgQblwKy% zEuuFppuLch8A}`kvE9S2PbzSI>)prT@f6{FOs^kPiiR?sNA4|8kUVvud{xpuBWl-w z6}0nXe|&t{_8&6Ypa*0^+Ci0g(Qv(Y590xiU^JjE3CH7Ksz0_~fu~>m9lE@eA8yd4 zhVCQ%-O?;ls6LL8boBuCugGxHKP2Rz=U&bhYOHLuwwihzQ@nTTX+6YY$OnVh`B#@~ zQk^GWw$!bk=RmFxylgOk@zGtp#Zivq&2YXWPdCbCAfK3Y_1pe6^f(PA%j9`@wWZI| zui5*?mYQ6iZSBR%#U+-S>@1_6S;@7zyRqdh(nrC!NLO~=2wWW3t9()MMxCl#=)Nw| zJTI*O0L4A4+1yESdu8@0rh@Umv*v)@UdtKW-)SFuG8KVifC;aUJ{5SgTkzF|to|Qz zCz=aeP=1y#y1C!BsUp5@V{jCI;eTWale^x1iLXVl=TUXLyMU;6o% zyi=_B+sAg+cDMQ!rk|z3Jf39IUduGWC5B5^06}UZoy>ERyIr~K$2IUr#k+S)p9|}d ztAE7DLxdgK1*Eks3jO5cY`_zN&~x6uNVQEz#=4}ox~wBrFx|X+;qu_x@km3i<)2cS zcq+MNMZnJ8q~^apzA#wF{{RSAfVDWIAf%Vpc-kC=S9ro?C{l9|B|~Q)c=j7_OicKC)dpjHj0!Sul;Czsp1BTJH}D9k;XwgbAov4T7`%yRjD`*Sw^=9@-n!3L~t&otn;uC`{0Ehd)QRGt*!ykyh@R9jY$uxFa~29q2hb_h7P)*~iO}J~Tw>vWIG=zU9h+%-(v+IHb}3|u@vi2e^#!wR`s%4Te?1`gegz= z^j?pruXBv?UYTO|(u+j$)=4&|(9GqS;4e5V#PBeqC$O)N{wVmG*HgNOLDF4b!%uf< zB}^2#y1_}S^5>PNBEubI>PEXtUN7rvZdO(Tso3N#=$|3J*u8kILLO~ zW_1M!h!R`oX`H(jAajm`7{>qrH~jJ_Z&!Ebo3diZ5GDfCA*Nc62s=Y zI02I-e7Mzy>;PT+Cu38~r9~tVtT4!;az6G63UY99BINAaP7rgz9Wl=Mi^+;hZ8Fhh zfZQK4Xv_Si5d5ltcDeboc`P&QfNPRzHOP(AY4bB(yu`PPB_DD=fE;9;@O(^+?JGeAaKB$r;I} z8IMfYLUu_Rx7f8ToaT^7F2eMrrd9%|jsTLP{9mRzprjEv&_^0-l5#9E8oT zb6=%jvZuqnC&T(wm;NYLf?p8XM|-KyxF?mMO(HF=jBZM*-0K%RW7^CQkVitoz8LsX z;Y&Xk_~OdTSS*?@p0a8>tFKhk?8lpNkM^BFjX&FE75h){$_KEIPK(4EcCBUosWWSu z#M*wF{iAPfI9MaG((WKwZg#^RtlLm*QU$)?%0}WP%`YTpCVgG-*H3~Zy4SDm&Y9v_ z(%#nY-(;|@v``YT!2}NF5fM(*mLgI@NzWt?AJjZO;opj$IMi(IETc~d=rj3RfP}Kz z>pG-(-}`{xP>$Sor)!bBG@TZ6L&k1;YPw?)LxU{f{B9qHG>dxo8yAtesl1*ERpSt!X zI~`0av7)4E6;uEe3G}9-&Q)x#*P&DCso((I3 zdF8;YEmvN#(k+GNp)igz%8CFi&hBuihz948j|z$jCb4x75jWbONztG>mZcs8#;0UZ zXOM0t!4U)f&>BKHR3e|C_-&H@EoWMsYC66OM=4FQTPuC#wv3arJsL(WBlm5%QSzDh z7h&?`>8H&;%cra9>AC7)a;lh(UXkv6{{Zom#25OXggzx`*9fuRSa@y-g{cBhvrpnX zudzY7x*5zW`>;q+Ayp(2Ptm>=y3~f0npU*v+P0MPY4=4zRcWmVUBF|3EJit()nAT= zzD)3PA07BF;!nhx2J3$ud`9s8m1J{}_BuwVWos4>q1z*I$0oko@#da1onkK++Tmci zWVOHStAa(n!(*}+F-Us(Z=c{5jVygkH7Xd4Th?C|o&NwxyL^Q@QJm#Yp385S`Tk|q z9;Y=p=BmQ$BJeTSk3tCqA8%Mjij%gi*0!9%!J^_aNqOHw%@FN z3t!xPJ@H-lz`br(cr2oh=RuxdoZV>!yrhkrmNQsLR^6Gt^ae8AAS2U0G0$zR_*YZ# z6}_VBH+rmM34xQ!TOh?)O)HGBWF=ZS)E0Ky8xihxQ(V#0a#oD~SMIGYY%V6Uy@lpw2 zIKt!YktmSy%!?*6Fl*#qqlzidnO&D_5s}Vmjnbqv!^o=(kyK66rRh<&4KX4URo@k1 zy=oR2JklE~vXVMgIb+UvtsGTZc7@3}6cTgu!=8e&Wr%~#dJ*u}s@DGiYq^A3TQ~(} zyLGol1b_6j zxj4%VdvqM+kO{{Sj_bQh^y$spjd81?3yC2wL4JM9=bF%G%wj`^hfTjXtwWMiDva`_gW zx{4j~fPnooPungIV%z@r{{UYVAKETlV>tQ`N<5ilKQShni|h_b4KBl>P<@B>r=%?Z z0C;oiPHNOv`+C*Hh?=z?=5m$FvBDRgrmseXa0eAKL+w_Q9AMMAB1E-pFQp=_Nx=MS z8Yp9Q&u{RrOVF>hi@3atwZ`Fqqk=ndYnReAD~s68N$i-9U+t&bkb;Wvywy@dwdMROyD>?Hx01TEm$Kl$sYiP4% z`L5SPcT?BTg=LK{qB5BQnLM@_A(-SG=NZRZe~A2B;wkjYLt=i-8OxRf<|W8+&+vc% z;C0S3jw=Vpkx8g{b4%8c`Y zruf@af(WfV?>5#T!Z>F|xwlZn6SgTsqU4UM6#Li4cRE&~VBazkj)&6~dr$FJv!)Od za_T>Y`4u&=u&S*kamKu%vG*>W;*SnXi1m9mv?m13Y7D3d&OdW2ZwEcnVUO;fmFafZ z+NI8zZnUjIJWFkkP^5QH3grBzImD8Ij9{XU8=M;WJ4^VLY)Yo15s3F>u2$q~owEPoOo(;_1KMU3}fYuaVN4pTn=_ zfB)C~F-797$55!i#aUh{foc#-0qb9B{=}L+t^WY+3E^v->>GVDNp%O^(-yH8Qhtqt z)3tnIYzLSHecSsO+sytp*WTQxo&Nv`?z82G?#rjnc+VV@-o9&!Yq(&mCE2gPL(|IQ zomjSh<$lkq&+ywpNr7o6wSsB3c`mIj;QLgYi5tN$Iqq}GtUm;;zlpzSzZQ6z3QKR{ z?H0#QwPDCpbtKZW0zko$6tUaJ8F@IaFX2axyjv_fCx>+34rKD@3>FoBf zmV!B=wSiiBVREa^;k=Wum9IzmJ#B4m@eksZcJVA;UG9|@)If>?Sg*>Ub_`poufVX? zpEX)@we@;C=;W5ZdY@N1HkHqyPjgVWL!OmmwNk!YhP0enlv{%v`As60K_(8u$_OPx zV2}tTRrJ)|A3FSI@h-iuU)y{W_UT`((OUTe)s0L<_$AQez#WFarThqhP|v7*G^^-QgVz zN%(oM>sp8HX=i&rui`uJI(=$+p6kMwMHs9KV~8r-`Dj2yzKo)Cv9X%_>rZ_uO&ZQ^ z3GLrXXu-BNyFSgc9C=<>?)LuxyIq*~PYnpuigI1n(tfLSx-B1lSyW>xk5_LlsQEX< zH@_G4Pud&8H+QgT8YS8A-nk{Use7G7!)|Ug^^naXeVREYEPh2m5CC$=gIvp$c(z6-Tq{=)Ol8`!akw_<5}S2k=eyr{Qfb zeMUPYYjrc(#AJEw=91b*b}N#_qU4jB<9svlQ{dg_?JMy+!Fu0?EUqD+NYFKVDE7R6 zXY*Ejd!Hrab#xLqMqmyJ`U>-}0shh2$HTAqNPZZ2W5C*vi7sq4%|`0hcr5i140f8F zhWZtFp4t{e`_{pe%iK8tj%we5e0lLwKiXr(K0EP0!<}mG=J&$dU9hy%ptp)kSU%F` zHkvtZ7V(V^$6Qo368K+G*R-6{lf)068F-?hjFc#eCiIKlXr^;YY-s7<^39o57zD zE})J(T|+}*t?8Q8hW)E=du9w5ioRw%f>6sDE##&_x88=%`59V#pLo06|TA6 zDia*Hn{l;LEEuhoKvW@$fwfI4G`*f4c#lP(>tIuVWYtIVUM$C9X;_`G-Sp0)%V#7Ug(Dbb9R_38vK3|lg{{TR7 zX|L;}J*s$aB(=M^m9i2U`W@K7M#*i?ICVQzF&NHyug2ex8gkkAe_cf-8&2_0h~h<2 zkQCn8&G-z?*!uo8`Xj3Az9yf<`g&^D7xubL6Zvm!ttFt6Mnn=e~0e1 zO*}&`mfNPeiR6|kFwS0ALJX@b6+2W&tF({3fCX}28Y7!g@NbEiQik27(&q>zVqL&X zxJ$AEpr%$fUK=0`aw~Gi>}wtn{>ieMHH!YiNZ>L{6k(>G#Uu!!0b+ns;Jdf+SW4j+Uxv}Qgr#E z;GXFGUz*-)RJ*d3M*C+~eg_+7Wp2GbW?FuoF2-HQ86Vdb*Ld?xxUunE&2tgAZDt~5 zje!O`m*Qj~@(g#e6(IDk2HId_47?TRpF_d?i2ZB&cMDNfrlz`|oz;tkoL@uJwCVTl z8Rw;YXM-jYX&xh#9BtEa_1$v<80Z5GMoYwK|i z?ci-9Sme$z&)mj6>w_@D&ZIeDyMAYG7P5q{+4h(0@p-#j)*}NXY3>2~ykLH&r})+3 zo3DvCI$wq??pDpOH3&$WMDrt$%!WrLlroYqN#NI>e#+h{v(|iReWt*6)ngta{{#aeEO{kayN8E}cqv%Tv-? zTK3-FdLKnbq$fw-)qlY>tiRx&Qq35-J~lxcasp|)NgZ*MbLsW3efTr*e?j{^o0#{F`+v$C^}~@@&V-fGU>3EI`5Xe}(@5wYQD_EnZ*gJ_Ya@mEf~tQwn>~7-#w|V+4lbcz>OzOx4+SECbf-ag67iYXW9GIk590*FZ1rm zLei2~9dn*deVYyZt?=p_hba_)**oL}WFR)6k&c9@KQfLuJoc}Pd?_9BS>N1R`EY7C zB52@=xQN}|OA83qiN@J(p5EFbepiYK$OnO6QFz8XJul&v^9KK)I>Rj-}`~LuA=vFN# zZz9gcOTP+IJ9v?aV8jOA2ws4$cHE9Ek+ zy8$HD;ZM$lD>E=&$8R7UbT#u;=9zb=N+G?7#>_G@K@2@qjtKf5Iv#khralAy*im?6 zNlyy+>dmgLl!b<5a;7CbV5s>pq?X8BoSd5VFCJ*W556GillbSrGDUW-+x2ZZQ*nT% z-Pb7;XL*YR7ih60L+1IDa*vh6W_ZjD{;!XNap^D0=eJh}hs4L);iYHT_&HLiRUVb- z+NZn%!=D`ys{@;+q!_4AbKcSf9aod!^5ZQ7Z(Q3+SXZT&J1ZAGlDoE zs0D@yImj6AUr|dHPO|2Nk0PZB({_?7boTVeTIk!x-YNdWZw(DfU+m`Fn6vyU7zEvo z-e1ngX6>Y&LE@;`=z6xPcy#SH*{-g~9#mhwagR|R{lD-mRC>mTs_1uLV%6eHTaJHr z^FkOA*pD+H`y3x?RU<~DN~N1c!c`)lE!EC;KnFOgGGeu^ZEmgNTZ@P!iYNQ7=*oxa zizcK^dXCR+*gI)!yUCDOo4XGkO zmLWG%LXJ^M=i7EiPB;~f8S~0hOUZv;rB;t3QR}-WzP=AARpvD~$OMLAo_cZ+{=UMx zy9;Oj#<8_KK)aH8pJ{UHgn1}P!B4%r3^^k_j{L=ifR+<$8G{_r<=)!`3*(gGf zyasv>oh!(0@7DJ2<5V$)SxzER#?@2C2jQCP{8D0u5d=)8TaC*jm0kW&!9O>HDiyaCgtXHFM)E_3BpVAoey7b$5264IOv*($j?&vFNIU6+P@8Ls%( zUu`QxVpD3zY6KPmanM8rfISHm->O&g!GLEF2~SdWS+_m zeb*#j9QZZhpABl#$ai})4tz3;oZ${<2j~+__(MC8z2k>_6Pc_XF3g zrrF0*JguZe%zbHWB>w=3giD{itbZX@@%_bG&6??`Gdt zO#2+3qjo$`@rr4ti)4Nd(_(-xC06@X#M0oAw3zK;geeDdiAd;c(FA~3k$g3}8nv&8 zd{$+7PQ9(_Q=w)IJcuSXcHwcx(FL+??~3%3FaWVTK;)Ca1M#ki=tPZgGAjAbeim1@&TE!$;6l%~{TwK}a!Rdblt0I@s(O<_X@ zz2Y_|e=|qZTY##3yV-_0+o;%@fyC}5tC!4 z*lBi=*y+$EwY+)T9BZ{fJd=*(o=G_*@=j}o_`BmY_K=BoYoPZvF&kWI*KTYn0{{XvR8kjP1d!dUR-1hwDNiSoQ1k& zhR(fsudc2mhV~1KOUT5rTq#FJ0!d112d@7bvYr^%2czoJ zU)#vHF^Dg1Brshk(BYsuC5Z!eX4jGuilQ{asL2;x21)cVVeE) zc6<7rUzwhUo#uC}#gx?RChqn37CfIr#XdV}{{UmqwEqB!HjxLu@Kwj#81uR8Cmu!g zTyutnw|auS5P7d_((H6=eKBm-@Nk>Ibv0gNdl>A zx@E4trC#WlqkI~a5?e?J$SE?I&mTswJ@_%M{j=dmhv(EU%vahZX4>izgEWm`&ut?Q zkjwu7ERJn-2f<#Rl@8; zaR5+J8>alK=D!Szx*f7E)>DR4)lYDJ!Q#K9-;XfEq8|Zx(#=F~;g1qo7bs*%#CnG7 zDFIcDmESH-9InBVPFrh!5q{Es5r@Fv9z1j5n`H9s?e$5eg>ir)x(jfa_5xljIIBsb z)6pInaoVFib5a~sY;riQE(B+qh||e68xu?j*!HN6N>6IJXK4e+HU0bfRyKecWX4Wg z?#81BF5Kg=9GZ#EMO}_DZStbMwS>1TB&^E?v_I=+lY~xt_h!%Vu1!^sSy=9cmxW<3 za`_8!Fi|5B$zV{9uL{002w7MCRhNw zu*I^+kKJIOnN^ub6-DlKFBj@9tLwK8@x;NTW@EXw{{Ra0BaZkdJ$Eqx*wru0hy-cm z!x{3?6Cf@)$5Vrb=yQycNn@JleC_hd>*caK5{<5ri>gZu1(w_tTr%%thsHi&SPU;5 zHp~SFW_@usES_K5*J7c`!hra0OY~v@Bx8UTeKTFxh5R3>c#>wkjtBc4sZ%SVjxegH zg+lCucLX3%%ua9)4MXD8(jwIxNYE!%(e(B|=>%&Kxdt~%2a(O7OA zkLz8ICAvV@2PJ?cuiwW)JCW0Z0XeGoT5CW=@r}xPI0pwENc6`XXQ2nZdT_7OM+E5g ziO(&m$0DR#Y*wI*91+Mg{{SkwFLMhN5)V<4P- zd`+!GqS>KvB;La-+>WQer6Wt|au&KIIzFFysEx|^TUZQZ0lR1MtuGbF{{RvQRCMyx z{{Z8)t>We}cy`wB%vXkU6GXt}Ss#(lsK5kvJXJ3hBe#d`)D8p)e*&Jlu2{N4pXsAtNMO0eX69R4-8;N4v58k9G~ zkUmEr?3&Z~ouRFctTnqKn>|Q*p_ia>_khP@c^<~JwWZ4TW=mDfx*Y^svuS$#T8*=O ztjg!GKD<|_c*Da1?4$9XihS!U_TM-`pC&>xxPj3h*Rui-PJUC5UY}~l;~@qC>t9>^ z4EUFCp(|*9Bl9h^eM99J20iU%Gkw{Du-ftGB1qeZQblrNp(<(btEZYQ9R2 z$^H!TyV!2+vL=mYLBYo)eMNJ!X?`EoIF)>dZsU$??2n1Q7x-VSAMIZU>#)yzB9n1z zZmwWi4^soM07OqBHYBEYgN#?szwobhnWXaLP}%6&>+kDVg~Z0JdDfn~7}mqel(`9efq*aMp5X0X+?sWRyC5z&Qx8omeAbjIHI@minuvu7 zNH+qa?mPIf;a}%b8!kbv@5BBwy0X;17W`7x6Unr`Y4j_Zce^9oT>j<>m(Ep}%V{E6 zRiqn&;4>0Me?8(OI&y=O__>wz>+eN(*(I;seWHBPa=-MnKJ`3x;-fEsPg-eWI6M$= zexrj_W}64E6_cr*95u^_BBG-#i~LICaPMBbfA)LJ zd2Mc^S>T;nB#K22j*c)@m9iN~JcGfn&kr1Y2-iLY_=@}DhwT3VXFcDCH4mR(@SUXc zTgcI=B;09|BL+!h86qLhG8ZaJk7{_zS+ywPrv04KvbVu6D_+rko{7EtnbU-@vUM%Z z7r%Aqdun?%XPuh-40L8T5h`t?-&<>4%qB&O2xwVj!?7o7%7EA35!rv3TW8(dO z<~=`5w(!Q4b9ZqrLPZUw&ZK0JoN@qh(p_?{{X~Z4)Cw-8Q?8@R@U^7 z2Wl^kVjTnsK)9AsCim1KWkojNg-Uh9mmtk)w~y1tIwtIXxa z<2{0Mw_C5D{2QE?h;`2t{@kCm^|hs^nPaAE5*uqYZ~2F4w#2*0!;$6{-6Q(Q!Fpo9 zemps)=-wC5wC@dge%);J-74NITWCi_h7|~dJAU$o~u*D#lxfWhLdi-36TU!BV`JaBZ3iT{OsK zSB#P%U9XHb>;W7tf(PIA&O0!4r%V@&^vrgQn%>E?= zoE5LtjZ0aN!`>d$JVALjZS<>YuMeBfR@yd{u6Hmw367xG;r{@|%}nVRS2}&fgU$^d zv#xqIykaR&{0e22$^QUrJ?rc|H=^+s=TWP)<8M`a{tv0==MjxKYV@=H3V#K>Q6Gi= zE%+l{zL}wd+f=n#UnO?KET3nP=R6IPl5^9V{e$t3i|o8P<5_$%o_p(B#IWiXR*_rJ zCz`<`x40pcgpE>5W@nJPZ6srHARob4B>Q%m4c6_VJ>`fWbOt+*u0X*U^v~1vi&Xf5 zdE$?Ro(uTP9qrT;cyj49-w~~gMkbchNu!SB9nFKAh@qKA@Dx7qK>&}xY^y zQVW=2kzdGblAw*imCU({R3x9?#>&{<#X|7o>>_L^Sw?<-66i)$d$*{fxyevtK zw*VK7h8rXCx>&lHdaiPo`mbKU*O~RMlxjxHq4~w*?Eve#McPOf3*A0OnpOh^GO@yL zG6x_^iZ00L?;Xe8mP~xXJI!l!%{myIvn+^4HcCG5Bhd98*%kVAA5z8!6Ja{QAe|Zl)9{hDv?Zs$EeG?;Y{nIyH-*@N<>0hAApJTy{tbK9&9!wMB zUGc!@Psjd8ine|%%F*~*<)h;zI(y)Mg>wG@vMbDfBkCsIca+nNm|l2E;XnOq+W5b5 z_J09Oa8#1d3jS;l^sj-(GyLgV?@OZyVuL#FtL#wl?k#j{O?^3JJ}FC!oZat28wf_bkn_{Fd3 zx`&VT8^|wWx`|=4jbw$^RAU{yK!E5-Vh%yaLy_9LsZn#y>dh~*zeAbS<-)~zoHyR@ zRBo@*707I!g-=j@>lWu+Vs=|08TIx506nUtG5+})9;JSeHEr5kmRW9cQ*a8P5?HYS0Hcyvkg5k#d)L4CYetho)0r+-HNU&u@`+hY z7>9InMJtSfZ2@GCcl)MBXu$|4dgc5v;n_4OVDTQm45nGt&74rSBy0j3?CdkpWJ`CA zkpNZ_WIKn`9|=AhYThN9JzG$3CdMXLXM=KXFoPU+(BtJuEzy}-&;y5Pzk47uC&=+G zc}+pW60{fM`+9z-t(M>)H#GM>li_EDwHs{&c!uKg?f}wB_5d;Vq%0(kNgK&g9mkrF zB8}>*UP z#mV32BR;QvaIwb@ z;WRCOFjTj)g~(#RDUJYyr=Je_5x3;m<1@rn#MO0vNq=3JUgy_FoN22+nJcx7n)>P1 z7V}%_o)ZgkauJmwI;GrfvB%`1tVCPF&2Y!dSqGaLAnnb5H2ie&Y4MN5twU0cfwfXZ z0|0*Kg^Zo5gD)B^pLArtd)MjL#?KkS@Q>ji$n?84l zaTZacy6VlVSlHtOB%TIwlj&Z8ZEX&RrGIT*sFm25?c-o_@?adW{^VeSeMt&wo(J&r zYEHLO%CICydwGg@M9Uc!h$vMROCRC~91wVKh;G%?!1Jgao+wlyT=`ZJPQ zy7Eso`fTbc&)LVO=g%s9vG$MTaaShd{^Co!$qchfNoGCrbBuHVb^@XDa50M9Hl%i_ z&9e^G*BPX&j(5G;k|W1Br+|Gb@s9_kS9QQAwN>sb4Oc1On(n+O zLhB@N6BT83=)jJLl0JtO=d9pyOj&?AH8P5l<&w~Fn@;Ha3qkm+bFAJp*BT|Y^~Ay5 zqw^lx(dS?XnG0ftXX)dmt)i{81M3`ncVn?)O?l($skxUq0M|e$zuoIxb6vM% zP#MWQ*Q-wt80d}(SH9<_*!Z&JMUVa^lF0<}{pUw9jCv5H1Nhgpd?JF!$Nn#Z!(WOt zw6}(PyNj6ALPU1RWN$Da2vg+%ouRqTO?;Sc30_TmAHts;+;~3n?(P*5rOm9C?Hdd$ z?je;Kvz3jVS9u(i%J-~sSa#trW$`|v!`AoLKF05lr@Ga(`;A8Fmvcr7uq3~h<9gf1 z4i$GP4&;S%laQk!xVv{(mw5mV0Z=l$ansZC^{$J>33GL%CHsXQO!FkN&K55=Z0?pt z87{_Y4hB$_NcqNVm9n_Ewq=%9R)`*1$wkI`g;BhZ%j;8wYm(ix`-{ate*N`2J3B}X z)N{Do2bixSG2lk0bC6DW03I8!sja;qLe$QaJ^77hnn#x6No}s}rgIDOcR(leFsGap z=hCpEyo+6yJ4+KM*;;0eiy%atDBR-!vChx{Uop0Va!Fx~Um5F$XKN@3X=llDK4n!T zWQ>k8j0{$FIi)^SRXC*=CUSbU*V^u0P`~SNsT%(PaB!pQPbc-R8tyrK@bY8IL%;_l z{YPF+Yu{@E$8dy$AfXOcS(DV`CZ?K+>@qqS@Kq01yF3vvfi22Ka4uC%#V zG0xvJi#WuuL z;go~hJOINWoD=C>-&eKj+VVObd!btQWcaL#EUca!)-$H zst=Tas~n)r(V^CKggKNbt?&w1z}uCzqTMp$e8@KrPoIx#dDsSG7{r z@BT)SuBtz0%b}~IYC0yH;X=tNxtO?-V_;T6BY+uEbHa>~xE^wN1md`Nnmf53=Ii$@ zDQ7!WDg)>gat3?$^y0KND4Oe7lH*H9WxBX`hiZ}?w`b+!=E39MscJDiw^Clk09dAF z+Q_?5lDj~_&N3A7p2oVU!A0|T*Zu*8Svf9NwjKSOy1?H}D2-3u7|CpZFKWcF8?_`( zxmE+}MhEL!TGpW^QrvKgpz-v^KQL<}M`I?bZ|cX7z_0QduDIWo%11P<%#uG#KW8x| z#r~COwymhM=#U?=#Onl;$0g3FWKlerjyCe#0lk1Z$T=1I*Wv#FigQ@W43>WmJWUHi zr(&+Br^^-(KqCIs*}&ieykm;|di|ZX3G{y$_z%rgjvYfuiA(v>uMyqe+7&3+XKym% z76A_BT(JzHivGrEXxWXX4L3nMqpl2njMuSOwcMvg@etOzQ@AcMgK9>$-oz%4J~xsE?B8|Z@$Fg(bt*#CJ0*bBTmgf9S}V{&ApwV#jqX=8P3v21XrW#F@?5A9T`Ed%xS9Bpr6ZBUe^9T_~OncXyDU}fz_?$Kc}86=1Be{c$386wBN%|8+fMHU1Bc} z$$NJ8x?R2f;#~vA(t~6Z_O@~Ugm4IE>H%>0@@VP&ARs<*1FzsH*n#`y&eqmm5VWa6j z8`nHXZKgvNq<31A&LfRg0cV2Tvuyxpb7Yg;=AGhS5kuj<66aQz1*2R>gyVdT!msDa z_6DPh_=>B{u@jX37i~88bUsfl%V6k2FpmEKsc*#J7yKjPyYK9+UhUTBXm(hw<(wcr z1DKVzk~zmG9OAh-JVm1ThTwRwz_;+~v)e`^y|jVBmV01H7>ME4cu6fD;5P!v{7Og0 zy2bU)-Q3r=j%Av5F6?@jY?4iJ*H`Md5#2E>G$%34gru>a#UxTBU!ZIr;=D|+jPVrf zM-c~S7j*vsM!PhQh z40B%wcuV46#61U52HH09MXmFxHmBs8NnO5Yj#XWvQ=gbfHopgQkV*Q_!@e=I)~&v@#8i5 zJ^OlIi=Wzy#Sn=+&#~KScI4-}S;oX106&hie;vw-(#OZdfl!vnp__`VU*5FQ40|!C z$uxzkGD+#pJBYIcFLNkG0E3L@rzZd$bjdjVYPP?2x3fc_X-Au5m5>kzJiNF7<(nTV zC*+K7&&~4mE97YnBsT+l+rcHoxEruod1x`;8;>3H+pS>uZp!k?)@$b}D@eQK-b0dv z0ypPy!8kat-o-Ynt{fA9Z>oj@Z01ccC+_%e;4mX^v zV2!^qs%J-+SY^AulokM$+~@ADcXD&F0UVK*&t16+cUH7(1#`9bCZ0}U> z?y{0;anzqVD77!)98h>3P1jo1Ya z-h}+6vJQ6=bB@*>3Qs-XSZ2Gpk91{kCGud(oxdtV>ewMyYVSY}Gm*t#x4I@cbfBoV z(JMw0F|soYJ25P($03-Ipptr!dR9MPjBcXu{eNAJ))C1iEe}cX99p-CG|SBg!*-Xy zWO&vmYdcc%m{=X-bYY(jxcsKzFML;Ppududa;%K^f;KY{e-zE*WBx{j_EOGmfiuBWpoK}VLV{=VbSbX_**!aAJs zO`^N{94nzZQ)Zd!u>N(()?Qw&n>O&X7Y84IP!n9-r?FZrG`X% ze8HWgDl6xyd|B~I=TuEgS@C`HTx2%UbvTwR9>@TQ`e8s((AHQ?+YstHwJE5zrmf%Z zx7^292Tj3KQf~gAnersi?wRdXBzZ7Ok^caWoPP<=106g2+OX24ySKQI#NJF&VWdQ1 z8kZ`ixlo~jBX&3kA-dPU_`}3nuCZ@%HoFz1%?XxexQ^a9XJV%#B@_iM+%E?wy?o$x zZBoghvW<)jEV3D5KQfaf(kTZy!NRJNIlvy3_Bnnoc$hZhXMXqp03*Q0Vc|kcTcZm0 z)9jaF6*k2tN{{ZG1}pT#0zI)v6WX@59A0UwbOGD~$Tty@x;W$mk3dTPHID-;#;(2p z0Q&XxIBJ~HvpjmyN$4m*DnPxeKndoTfH|(DV%>YGH0fT*FOdBJU6L$IXn;JxS=+e z5*M+%l}Y<7kN2Z)LYSrXY!z?_BDlYa+7J9AkjJ8-W=nWlBzIC7!WO|f{vbFs?I=NO zrbQDGv;YoI8R^eXdskoLCYQ!O4xZBW5B8>vxr#^o^1-+6u_ty@J5GCJ(!A=h_H{j~ z+3)^mY$eZ6*}eLIk@Fve;EMkMP!SB^+79b&Rn>t~yN|v>ACa$J)30JTXH?Y`m9PY&{m{?HC%6D(pQo*LS64}# z)LK`$k!#?Ov#M>3LyU4pSo`I=W~^N33{WVzmyW^6{VTrlMYgYZVlTA$LvK>dh}b{38zVLSrMjLNEmUJQa=JceJUx`b6T;~f`hU#kA?>=9LQm|V# zc*%hn{w1?oVW!q$jvI&)G>oyrq9*TR6-Q3lu7nXL6_>3=_N!=ae#{i3W0HD(Dr~QN z2*+&`?Ca)f@8q%Mq2*0N3=+TDuj3HPeSYcuef=x3*cfE@tes9PNg?uXS9b1$zu;=q zC99wR(fmPCPNW?uG$El;wzYS9Ln*d(ZbK(e%-5f>!&hOWTx?ZfbI0=I`q!I}i)!a? z63SYivcI#h#FV}GXYk*}`jm)M!Z)wr&2?@(vkGbV%^B0~+{wZSXG>rlf6*(1!kJMR#dI>w zBPHYtva9Z0&%6LO^Zec79$!-pS~$!;iZ1?%yQlJ%)Af&Y?lOs~uV+5L*W!!3E8S8}+RcC#dWie1ZX-}cq;?k(m6&=KW$LEA65{LtdFfvq_>SXM_*dg)_?_W< zSueCLWkg!tlz0y=T(aE4gyYN(%v5zUvkYyxEWbnP-X_v~Nu=6qz8}1f{{T+Ej7x7c zM=2sO;E#UH4hTFD4;A9i9~zXFCLas@A5{B!cSm$6ILnd$07&SrZ(E@?g+1mop7l!N z?0`>kSa%mkIL&z#aq0Ctp+M1^`>8dJHRuO+aDT03Pj`%#HHUF{a(0?2;<>cA-4o^y zjz0)BD?{QRi2ncxY-67P09&!Rweb#tlO3+PZ!}FAl~oAYdkA9c%Y!CAy^!CQ9|S%e zYd;;nGFfR}CYEc9bY;5MCUQ%ym7qwv)~QvcQ#Ko_gQC%Gr(bMP?T>rtr>M) zHScA!-$b^xyo^Rbu@zx7?32}hUC&v!xr!*#7!hHLB~(bzVG$4oRZu!AfC7%dR-`wF zjo-n?2>7V=j$4QTRk=&rSC2eml6K} zbr|ns*;Jmy*DIs^IkNDtg{?F@d%K(2;YC-GE^d$7E;j9X5{ikkHK^?&FP ze6bM6Bo8_)Mo)P{6JHKPA&xkkrD#PvK=_Lx%Lx#Jf*1_84`N0NpHM6Ab9}CzI+XC$ zI{pu%`8zYg!eXUDQK=q>?dOB_UlVCsjmLoeVGZ8BZDACjZPuEPAvbVNU0hyK1H}6*}B;#w4u5j5k@bAK3 zh#D8i9|6hX&lzmH)bzBDOQ_fuc3W~hE_6;k?&@HTu;!iE1gs77K z)eAzKutB(qN11L9_x6~H&nw8T{{YRiSYp)L=}ox>)sdCNia{WuT!!P3jOVs%;xP5G zIeh)kPbcO700ExN)GI49@*Bp#3H1Bf;J39%^j$`FK2$Q?tTyvL2Nv_(ltq7Ad)9_g zf)VB7ybr}b4e^(Q97E!5F5<*DAl$er?BR_)5)T@{ax#pJ%$ zP11IKw)`|d8nmn1-7@K~H0dsFUl=l5_1Z|t-4o=4k6c!y+P<-U1XlOgmzNf+g0aZ6 zNf^gWD=|@lU#{BE?4jdZm-D2&@HdQ0=l7bXfZAor>;p-sNEG9-#c=mOvX_gZke~Qf z-T}JX{BY{}wYdKPzDXnSuVx-1<3pp7o>5*t?!S-ebMn4vQGi{H-3}Tc zGDopsPftpy?(HJ&jz(jRsshK5eFjO#zAN>5&-PyNxc%txAH&@-Q=QLot7&sRoehKjHh4!nV z*vaA#5roOV)h7FW>P9w)l-ymPF4QXI`I}Q{A1H1XnW6kP)rPqbiTq12)wGRUE~r1% zCBYz}kW2g7(ePD42#OFfk1V8o-eboS$5WGw<&WIo%I^MGc70;cV+oT+i%shO{{Z-J zmcD16{5|+8{ve%vOX80?mf$a$J=2%HzK9=_c_0X(*?_8wqi7otDcs*$TWPj-mhswJ z#vp<)3e%J9){rdoKbHd>206nq=W6vV$3Jy)Pob_8T=5;F z+()F{M)FB@BBj2Vn;PQzk3k}q0yuI$Wn!vF5<2H$_zJkXxap}&Zi}-1zDvm-t)lK`d6+LuQ(O(F_<_AIjd=#`u8F7Bb>Ut^CwfBYcM>jkwxwqorKxcYhJJ ztEIKjd@8MPZ-kTPb}q6`m?TSSlJ@qfHy<^fz$L&LpAod}E5$}VUs;|V55+oEOt<=q zyEVR@X>!|ThE9qQg2e*t zF2+28aU^&FGn-V(^C39;e5)g#VK~ym-&JS*)zzoho1@dNnydNvoMNFDD!o4w#Xo7^ zi<*bTe;QAv#OwA;DK@lmk>#UDkg%x-46uSjFgR%mZg4B+yHA>C%90m@>;C}js&Yxla%SXZ}r+gk9Y=Yu>mq(yHmTKgJ@R?7sz0mOmq~!D+g?gAA#o}CfHhP>`ycB3B&AI1NKPIa*p0u+z54}-m#eD=%9lqt0H8;(w zK5sOe>eN9p;gXrYs_ylr-RVVy%YI?SbQ*2RiWPq0v-wvjU*D~5+Bf<-^WKJmGugaN zBFUooZ&i2mrk)vLW|0-JZJWzM_l6IbjAx-4>t1NLFf8uDR(37V%jS`cb_ZwXO?Cb) ziS7I!;W?NVGn@Av56UJ*>CbVVmFL#-6_`bErL)L{5*hfcOa`UJD+w!#uO^#fq)K9PAkpzuMw)tIJJ;T zB>c-F{{R{3gviRE=%dr}txpr*qQNGaYTvqxYGFO7^&R@x zWeQhrZ*v;eT1p6Q)!dWG&mMxhZwU*l9Y!ry-dBO`&Q+0$wtL`=5nRo*9(2Ha*MFu& zv8cyET~bfB#yS&x>`FJHFF@z(p zUSt{k4{GK$?N%*MP-t`)cp+qH+Ib5pc*1Ndd2%8OO5-FDPDdnFqoLawT1l*l{%=BN4{vxmeji3>>~(F>GXKY2EViio=2J)tb$h zY7o*QbtoB$3Qv4z<@6nSsAs!r8s-TCMrCcTv6HlgP&bZ9R&0)kpdAktM)y>Z>?a0T zmuPGcT;%$mE4rN**ypKHea9`UvWuxBLHAD4Qdxrotf6usMtpPx@Tw27Cau}&cNf#= zX=BO9e0L}OO=!<#kRh`S8dh=UGX30){Gk5;vJXDyx~fS=Jgno4d7aVqw}5qbi{a;n zykl)6!h9*MT-e>o9AamKPSjy`mQ`65<6kW<9h8;%T|;%+Yxftxx`OK(QrxpgBNh;RHI4wd3dN3oZ~Qyn8$ww$!rk=)xx5oHPlk`p9r8p#;{ z09l4077LlfPR+vpe|V~^tDj)&QJbw2P)U+qHN5Z#%tEipGUqrLRt`pcXPV|9m=zr6 zy9sW7$9Oc87)FQW7T5)hM=8uoauI3y zQHihT0p6?0EmJofb5-7ajw-o@VYkp*Ut3FOc@o?~GL(4TLn|rj7#;{U@Yn4Z;O~e& z2-2hRe}Hw{*!(+SqC2fU7-rHkep!*Rx#A3VuwqPLf<8cY{kqcfYL(Ph_jdBy+{BYZ zGPH6=<0|OjhE@lvup|-bUOsb@VY51Z&lOEct(#Y|=;gVcY!v;a2{qr${HyS9j2VZM#HFN@U<wVn(nV|qaIG7b8kA4=v-Q)#CsV%tIo7P z+3(>OhqWlRJr6?r1n{tR5nWs?c?Tmgi8c|Q#A3bCSdvMv(6~E=Ws=jKI+Z!D^m?P@ zv;6I56H|nFZRk2{t4%rybqmH3+S;SdD|8DSN?pnNDwA94(Gq3HW?$!`*nR#F|c)(#s1o8*4JRGAEx3giqbtAlk!g;GMlqehq%pJ}HmJ zKeQ*rEq>jDTg$9m!x0A{$7)5gka^(wIUd#f3Gr*syxJ z&hr&@{boNZJA9oUyWEU^U{0RBjgv_@x6bzu^F_yv&zq$mC&dvL% z*;8sN{J6;7nD~M=GrhY%*+F@-}jX= zBN9B1le=i^UN&m^bYIqotCucfyt~yxvk2t*qw?1~P?8I(=PcWsWNgIcisK|HEq!eo z$$XF(esWz~f^vK09;ES(rvP(J((Gr|Z&hv9+T1u(8cxy09>v@_ci9-gEZ+GfXBF2r zgQUYFO{#d8PJn`cbqh;&;0``f0+c6@p(m0#ub;%?6n}U6U-CVQRGhu@l(sOyhY(^XgVS}_VARc%)$m9AP*A^nD zH92xEY<1FtQch>2__JQ{jn;#u+jw^3{{Tw5w3~FiT`t z7J_SW=BY!QxVpb#5JVWx0}uiK0BPA& zdiJj}gy_(X)m?s9^xEe2T&E{^{%6g0npcP{H5g}2*%D?c^ zDL*2BKo~h=n%bQy;}mLCg`U1m{o5|)9??*|V(F4<#E-pUR>(<8@^RmSzpD@_b z#hs*Jjj^f#+z;*?eKX#%Ex|{YA}|r#`H}rAs*(k`l6DLg%ql}*lYt9ldxN-Uxp1K; zm3MAsk(80pk6+9h_HeZmm67FQDYUN3$}lSJo}WGZo?HVs>zbsefK7T&hG6on8sagR zAe(v5oX*U8aG4ml0d;XqHyz2Rsj7O7&P(Eus*oAx0~oYb%FOv|L<~A`jsJ zC)0|w8tUROx%qL=y=BdHsiapai>v*f?&V-}xE^@wDuj|)SqY$T-734ZBB-|{`$WjmFYq9Y@rZqcj zdr1Ci4^TO)z8dhg!5(&`rU(E%P6^{ZI|^z^A{yp;9bSoVb}mefA(3WK4o2irC&~jJ zM>)Yb$EnT*dL5^grc0N{nSy~jxkkt*<$M)AcN6slj8`iq__vSBf+T_@8&$9m?!dtb z-)mrQ3_v)^&H<&;?k3bP&~0O4r}u$BdlukZ{=RfzSCB(ChQ-GEMgMyE9uqAgL}EJSYy`aHNo+bmOngDWuv$e(lwb zW!B`-ZsM}O`Rs5uzhvE4x^*tC2%(>{w#C_eY+8g=5)Kr zCF0?UnjOrIpPd_M8C+vy?aAIr>wtP1g_lvWV|}Kikwb#TMs~=6pO|BD!31%PG-J?mO^F6{R+lv>qnb2^s2 zs%bY$kV?+0&&})UT^^C+J6&Z(o}@NO*pFJq)pTifa3+Dc{{TL<$;;uLVi&@w$UGh^ zeGF1)_a?rVN{lSIxQYJbFF4Ok)yVBxo9#DeabcWxQC@H1y=Lmgg_f$NvA`{#=ZgAs z!F~g?@h^uj{7BbcY#MMbY~pN8>$QlHn0?rRQV%<#j6_sV-?7QKafVRL}p?{6ZZl zG!B#+5XfJXT6Q-D6e^xU1b%gz-1AEdm2lnoHO+{RGO?{Ga=V`2qFqOEr|Is6qqzsl zETn>p;K{vl&g6AR_1f9(U#MOL_@%6TNYJf5EBI|%CuokA=`33%tko(u6Euf)#- z-aegrk`23XRtdoc;h1ygLoiZse){ptA+LqcIDKN5vz5Bq`#bL!Yf?Y?Vevb*JZhg!3;Wsh%K*fxr{#&JBWJG_NzGSlTjGE4os{B~^ zKNLeoo=CMX8h9Q=Nu!G95LjQ@`GBynmQAeE#5X{|J1N)z_3a~8@XwEhwU2}n%IjLS zwe##eKdQ#lL#5cx>@M%7B(rLF7aM_T<7Zcmm9l}!ABt4rRg_Asrre4@pO`D_9g8#yHT5sD(yr!u>SzS3B-&2 z*&-~AIvSql?`dUj92^xq5PO4P4*28Zw}5^e>3UCv{BZ^Dzhk9~YdG~;+(oJjkfY4F zwvG^zMQa&f-W8N(+slkO4_>XH{8`j)bk)4lwTmwu=*ft~>N0(rbZwxB(^85xh_(;i zyNU)JWRi1VDUIR0Ms;~i{{VvJRT}JQ&b##eO2<%)?;>XW6SVB24q6h7;+TgsMraP6`^D2F`3J@5^i4lZ zw$vcKhr`q8jL_K26l)*Z=7;yFkqFBm^4l`ucYf>4cU{6Tey4{p7-&^gp*Je6G^Cc1 zcG0D+?E3ZT*z)m}r!?HvquaUlZT|p>ZFH-6W4Sw{UB#vY&SLBf$Qd6dXr?)A9#xLs zg#!G2<1dN&9->w($B&t2 z@TVVlTkYrO{{XtbA47)tpX1$I$DSj*@kX^HH1{t15zgY7Ju}8nMv#HapFx4+%*3}f zp>=ZC*Bgd*D8l6D0DJnL^+}^Uxv%I<9u_ny#+5Z>m6Gg!dtS7v$;wXcmN()x2enQd z%Mm%j13#Dee=4Nl?ErSDgr+l|nErLFsr5!tm5%Sho-fw?C9c@`hr^dIW2xzqiLK{D z^CPb$bHjQNMj1{HYxS?-x5Zr};>>rK-W0h$8u6sIGedJ}WFt4RZ^J##kkcKn430O; zVo1c9WGYy*el3|s;8X6OUtYN5uXW(k6SLxWrvo!uj}zYZ2TB3ybo)1k?M`9Y6dx1MUr=P z((*X^-wpD#p8a=h*xy1+KND+IWw{2{wY)2(w&3`(u6X#d9UF zVQ(Uxr}yv(OY+Kb$^75&FYR?>;+;Bg4SZ*@7tehVwU<@4i5_c+$SM~0*@%YeLYBcM zIh5yP48t+rL-)*Z|k&NbRMR`Hbc8hP? z5b=YBkbk${xt$NgR~i)3YX1NTwOe~jX#q*Jsg>o^o^Cd>Bt>4%UNFWnhR#|t!zagl zKdo!Jbf0Opxsz0q9jz>O?y?1y+4m>eCP$SMXvi_e0|ED&fmXGD7VEl$T@7jrZ$C~8 z9J9BaE+d>6*^wks_LK;_{^aEeTy;1!srR4}~Cwiy#HHD+FFhAM(h^!x{9iHE3+K z9~5ial#I4F7x#W_nti^tF}GQ+3q5!mr6Kcz?MDqqqYdcMr>Q#vZTHCyVh~TT-NaQz8ab1=Ev8n4? zJ>9*PgtmS}LU@JJ2b(N&8F<5p;#QYu&vP;Y58QE(JbLq5vay!V?@#+I(Ov4`!;Z6m5O%pr}Q5Xx9S z`-$R{<-<8_5mCZUtl`b_({GZ{w$xSADR_U!zBc%Q;r8(_hN5jNZP2!sdA3|mkwjEY z8s18gz^=GIC9SN{WQGTp15)v)O^73yp?6H-0 z3a8DMMGCRT6tQ0e_=oXtOYl{sgT=lj{>0VDWV+I{Ym;-R+)ElR$mYIG!)*|iLxzY+ zAy;h7PfyS9i60uZ?;XN)4HgLeKjC;B{hv;@Tzr5GG{g+_}fKIS`%kj~9}56No;(kGQH zma0p!m81RHo=1?ZV+h9q>*0y#!Fi=^^1sZ?+>*>m$@R{9WbXUfs;_XC>O$k@9E|SH zcm%h8oPWzRjQrj6gUNRSqYk7n;MeGf!|#c@SC6!@b81XiaDXR)+vY-e%Krd) zGtmBZ`R^KFs??M!Tijon_FO4mlIDx}zeCpkA$V%n;wFgy0A|Pb&9p^rE3`aGnu383-)nClxG~Y8lsfm`i1IMLw zI&w2CU;@PC;CIDy5rZoMUj6WsOVX`wpT_G8F@$EiWoJ}3AxnU%11Cx=skT*FUa5J@idFK`B{w37q@y@>|iS>8@l2D*;MG{H0 zV|;;d12H9vugbX!I0C8&<5j>=00a&I03N&yfAy=+%P3Bj7(%zj*VXF(02X%RWf|3! z>AgC7EfM6`x{PA+(`YdgNMV9^lEk)sGH`h03eLOJ+EUoZn~*|+2_WN~gMdD#+pTSC zT2>?e)r@XOVy%vQ-&6-r265rLK2g-_0G3pBdm?T{KWR$UH>yG3=(4 zVNRaKInH~Yc`e&H*%#-IYkNTOrS7#I#-!|)nq7|5cYAVnTR<4#2Y=#r{s@zFkIvON zHQnj@Pk?mE=CaUTz9j3G@tGP8JWFY#TMU1#yuO@6aPhBJ2_3q2^Sd1j-Co(W(c&)> zT*a=#rv{4FPqPSoHDNb+blU>4{{U#*{{VQhqyUoA`HDkRom*@rPWrRNwXYD}SfWLv zTgz!{D-=tKQ)IJk!Q7zaC>aD}ILOH))LMLZHuiA~pS}j}z1-w++anq8S-Q5fsrbvp zH(LI$JhQaVzDXx@EV3{hZ*m6a$4~;QfC8uh3e_%RPc~d_OyC?2Ph9r*KAkH%&e5~n zbiL^|o`vrSc!yE&KaK1>Tc+kq-8xZrsM~NH)9R%@4=-z8>+Me;GVG zJ>-55@dOr{e!H*U&9>tI08*VxoAnW9NG*dEx0J=P!3XBtYw^*wSz^66tak@s4u84n z&#=_g`~`z zPU#=GH$EZopM^A&t9Y+ewuaVbGOEf}3rJDP3cg-ImkKfFH=6Epcn57w7mM_N7u#9u zejlD2y9wdUQ$Whm$ODxjZ~+?_5X#>&H_CC0SLEKMX{tfvpZG&{zYtvB_(M-W*;-Dt zAr39JtfD(RiIF!fu`wwjk1{D$JG`(f>^&R9x{t!RA=NxHe3u$a!wX$T>;;_Vlq$;vnqVa|Ah_xSpKLdYe-vGicHQx}~SnIl&Cu~-lU8@O_ zTZ7eOlIlQ5ck+sWNfq1v)E*nuJYDc#SI~5{XS%q%(?SI5cU{F9KY(+S{VUh}5#ZZD z3dc3k3ofU76|`3qfya|&62Wb4A8`e|YlIwSi#hq2*PDpJDzzQFzj(Gm$K>gU%;CIQ%uU8Uw>?;){<8Ml^uaA1~ zqe2v*snS+Uq0LgPrzbhPwrYtDNV4X#gonLICgQZQnYSDI9+f54?XI0;KBIXjm1}Do z%`AtaM;I*ZeU(8bvu&KqBF7&khyxwT>?@#`!n5DWWpk_DEprdy?u~GVQ23AHID%?A$XAXTl*KKUnF^B)q1;GGIccQ(xspPs zg$B6~9Qc~g!&jQmjXYTvyQE9uX<~ma+sc|7=*s^9qQP$~LbJcyn8qcw&V2P>ERah+ z_rwnvXw%qgdSBXF3r#vCy47wxh-HEcB1w_%BE5|vp4VwUV?!$xkO6{0TKOMZ@y~_z z%|64%QMK2GycOV!cD>Ow%Y(XT1j0a?wc5+Mk&H;sVF4yW{#2hL5sr86MatS1w@1jo zwbzbyKMnjovG`@EU5Wft)aH~#<>e0!_-=JqeL#XE>>?U(&swX93B7!$VG;{bh0Jx*(%$7*!8yWDcI1DsS< zI|H676U9?tu3NH=WSDRJi^=|#Ltef&Hy&6&EPQ@H{c5x4n|MB7zI)d=`->d*tfH?j zW?ObvLfK3qzK?Tk5@s@TMgxMUpgoVLf5yE*H9NT`wOFMh-C^3hi7JfSiyoXGF_^Ic zaKC}^%jr$50^wU@t1i+w!OtI;TJHQkeQl`N0Vd{c!DZY@`@y^d!|iZrVtu zYskjfXDr+f1A~TK9)LF^xCXPY^%17Tt9*f?VTEJLu)tjOAT|Kpq~sn(LE`1FiQouf zmBhC4fxU77B}M}R0Rh(}2Im8gmB;L7&FvDLX72g3%~23oYd00kpjhc=Erv{$$6@h7y`kS<6Lmr#|w;;kb!>;)zr0% zeNyrkjljBy?s1$I+0)#R56kz6U!WA1{wFMxgUu(lCPRT6yDmM1ydM07%9TDUkS=Mt|MzXtBr6IIJyR zX(zZ?18j*GIL{1!txE&h&e7ZXA<_5@Mn?mj`h9A7dk*Y}S6h8!P=?;o_pf#ymAxLH zXk%C;jb1hE!yuehNG+hUe>UA#B+t)-+rAH4tEl+5OR#U;u$Dx~0Ce;|-;ECKSr-(R ztV^E{!KGiV#j>n$%nlfg`ECYJ&>r1BwP4=)D##npl>OZBtCQ3q@A=m?YpH6UEWe7v z4917AvigqX*GWCMh`t?okY8z1#PZvwV>3pRZSxdlfN}#aai7ESJt>iX4$>uRW22S*F&2{<_9ft+z&rh%+zx`m)yCc~gz@VFb7%iG4q$I5x<)bqu3 zz8?797QBZ+_<>^uxVSh=xDi4Of-uN10As@vd-WCKJ~{Bb{t(rhQ_?pJW^AJ;-isuB zjgD|~Htrnf11B}ltluqFXVBY7d(`zUd_%BX%{8aD`OUc}Bb;p|NI3KWRgVB_M^(|j z!E`*vw%P`AKmcV4UPCT7DN-&Vj5Usv%Cog&{`fh6C%XJR(wuTn;Gar`4YPh51a zcR{d!3}4(wYFcNJT^U9`M9C*<eO~BIxcog#yNl^B8|_xQWz2G} zN1nTv1D}@!6+d3MtvR)QZ&9*a3!NpVSk64h%9ZcOOcHzK*QLv-S>0QPfz*WzRE{%% z0LUDkwUgpTwzbf_@bQ=P3P!+;mIIs>Raqc0;IfI4LLBRT6@8j@>~nC8@#N;mwo zkA(x&_c`^>D@PZ7NQ2P53DWiFFr#c!!N|cJb;tGTT_5}>SDqQMo5Nlomuzf?Im+Y% z8;_Yc1IZ&hy7EZ&u3FJFi{?_hEoaEXkCsgO4Y(Nk)vZ&*D{~1pWakG5b~hjPvIjnd zR7plo)e&*JyMh1H{6JI1Dd|zKN_7Aj%|NGX)tq9hN;aJO)J8yoZ8RII94G)xLe74ebsk95<#Z{V+qI-GaW&uQQf8*Wz< zDDrgMn~%5}(spd=lDfMVibiWf;Ry2ffnObH{vo*1*xSvCZRE&glO-8jwg(?W)E-4` z&u^yRtd|xAmLgd42bu}vYpR?wWE@DNq2y+~OkQ6a-tAkb(o6Dv*OUD9Jqmc4Q}>~_ zW9tFpnRGi?yan+;NuCRzw#}?+*LU+Wz3sh?tk+i7w-M#M#CM>4PsBxA=F)9QBm z4u`MYU+9|k&WiebTa9bPI%LIK3GVJC-jZo#MH5>TiHr*ysPfx$7h$%(Rq)rwUle#_ zOHT=Siq7A~-WG`M8fK&&*54;5?6(M3dqc)Zje?wf%10IIUK+djUE)nmHGcv4sCZ{w zkVdbi__RkgwCxkd(Z;vo4ZNrsMg`1q;0$L3*NcqFXAgO8*4J@*^;+9aEYpItZk>*r zSmgBo0Ehms)miUrT>48&_>1vV!CH=~Y2qC+$5k3mk8P=Hx0+1<0NBz9ZZWnc1!Ib7 zg1SiYm>s$Kd$oEuhdfc>pBVUQ{9mJK&u<;Qf? zer09ke3Pwde;a%g7OSiHyGgjz*IY91)T9Rg08G1r>6Pvf&1%J29ioJx6DO9a%Bo5E zeOuw5jQl0x{{V(|+EM^vA5ifFqI?1%n@XEW(%GH-Cq;L zIRq);zOhOP)Vx=?w0e8mYOSMc$y;uRwU=WYt0+rtcl3vhXj%&1T#z7br*( z`O%FxO*6$LtGq`bO9o_ob|*c@70_FFKSQ^YWV4e}XND3%Gu_&xj-Z&+5X)|>&p;Fo zwdY9D_hT} zLo8BRT>kPo?d54ik+a6`{!xP$Nf^9zOEM){wA?(4<%Z`yO=cf&~wd>8Qd_V0*RGZ*|M8stf`GQ$kkmPi6e zf^wwb6U!?eYvWHD_~*sH5H;(M6Zqd$pH|f_f7Z`%#pEhFC>;?OqN0UW9RRP}GCl`X z6n&I^nzfvt#@A^703!3ZHsKu8*?@QIdS~DKYxK+>2A&=frA9W2*&i{8#7d-`rtaBd*53=B=9XA_t%zX2&M76g zJ!`b)Fq%FptdSBiirjm4$4aiyWY7i?h1IgB6+9A@V6HF$&nF*PN*49}bbK%&^*g70f-BU8`Jq$&P}u*8NY#HeCn##g8P@_77@;aqZp znzrccQ{{T-&#`Mj`}t!A?dnI1D=Du&N$gwEV1kn0(f~KZZx`ZKv%s@E=r?Yp2&W zODDK@l25hi5L|9)qgdMwZy~^F!mrDKKm(ry_#G1RMYBilSza0IU_-w7;*&{o=d*tG*OzvBhz9pUFzm=Ee6lYUCtku7-%>575zinMN zM{Aip58x|nU$laL(W}oTgmdU0Pq90%PV)@E*~yz}324*vkkk=d{oUBG8|&g?%OyNNw( z=`cJofx^CeRF(U?xA@%i>*h74z3JJ1U5Oe-nn3cFc|jS;B>EhMCBG8m=~ZXB`F0K! zj_d$9Jde6Cpo8m^Q9GByft+Il?tza$KEB3;wr9X$pKAJ8QoXKuQmfJ>ZL-eWpP}a- z{r>$ZE zQ%AA!L=C=00?zObt1L_VsSmWV;AHi6KBBlmBLmjE-4{@OHd$5UON(pB%u~Z5ZIU7A z8)*b!fI|WZARg6|uK0R57EM<~-*KiEIov;cZb>*vK<((@ZEs`6ai#3vBipC>9a8<` z=Uesv05cLRj2^t#qWBNS)A&PPvei@>Qr-751C7Xj^8O;cpK~dzG0Jg8d^~E!)0)wd zO1!DbP8*}@pNrob?0z9>npT~sTD_`RywW*hK65V61_$>*JoT@d?q=ReJ!+SnNaWRd zB?qalTn<}L2?a)q(Ayb~sfnAZS8}|>lbX+vGLj~O=&lm^Fg-->^DhoCd0m~kM_R_~S@U{DBSgq`rWwo3~ z_b>y3Nhg^kb{n1BlHR}pDP?&)=OLU8qp%7&3ZP&rj>-T6hLu!�ur)a%yt_0ERlE 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%0A-gy#~8@_*jC&Q4z1y6uKe4rK77SCNmyBO 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 GIs6Am9HZy} literal 0 HcmV?d00001 diff --git a/fearless/Assets.xcassets/tonIcon.imageset/Contents.json b/fearless/Assets.xcassets/tonIcon.imageset/Contents.json new file mode 100644 index 0000000000..ecacd4f719 --- /dev/null +++ b/fearless/Assets.xcassets/tonIcon.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "tonIcon.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/fearless/Assets.xcassets/tonIcon.imageset/tonIcon.pdf b/fearless/Assets.xcassets/tonIcon.imageset/tonIcon.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1ed3ea59a775ef2dda83b09e00f4379a213c5052 GIT binary patch literal 1329 zcmY!laBvK;I`dFTEr~!5FAK2q*+Jp}3?dH8Gc~g0Xk%=`2}8p0@9GU6JCiZhWe} zEw(G~H;3B7*2xZ>Uw;1f-gn|j%EU;Px#xHNnPfA$J-`3|zc0t<-`^h-Uq6%m@74IT z@sHO|eqMC?$DXynH|Ksy-<+Es{D9rGf!S-+}<)(Rr8Wctn^&VLq_+$-d{2M{1`xg8c4dXq7bfexS(a51G3uK|qq3K73=Pt3xsy`+QSg?^uf9VLEOXYdyDjV7F|ZY$WHqrtPUm*Kr-Ux>G2u z)aAg}w2d`KEs7);;LND^{u?rRv8b zo4i+jj;ylb^ah^=flN=Ao1Ll7cx^RxL)X12ief#p_a-(R71H+$^82$!;Nuyin8Lbn z&y2KioqIQr?VIE|Bf|UH$p>c9HZNx#O*zrQ=^%9FaMV`Arip=zQaOwC*6%)|5#4=I zbGu%s+T@J6@9(Vo;+(I~u;%B!!%;kU-@Q2b(f4Naf0gbqr%kPKjEW(ZIICU8+;w$OLX%gZk*R)~&;Ci;-df>Z_lfW&lIF7QoF z$xL+0uTY3qFwipq0|dj^2quJJ!AuHDEzU13N=_|S0A)l_4gzH==lr~q)I6Y#pj-$O z3`i^jiYb^vg^=lc@`EJW+*0sJXj33 z5ack3$DI>P5_9s?QMFbSrKWKiD426WybmH3%uG#A3G&C@=fU7DgO3chjE#d;jo~H{iI5dj$b5k`HG%`~(A%UVF nl%HRs0P-+6fc1kjt5Sik2Nz(8MI~VG7#bRwbE&Gj`nv%DSg+)m literal 0 HcmV?d00001 diff --git a/fearless/CIKeys.stencil b/fearless/CIKeys.stencil index 22cc2ed7b2..d517db0348 100644 --- a/fearless/CIKeys.stencil +++ b/fearless/CIKeys.stencil @@ -65,3 +65,7 @@ enum ThirdPartyServicesApiKeys { enum DwellirNodeApiKey { static var dwellirApiKey: String = "{{ argument.dwellirApiKey }}" } + +enum TonNodeApiKey { + static var tonApiKey: String = "{{ argument.tonApiKey }}" +} diff --git a/fearless/Common/AddressChainDefiner/AddressChainDefiner.swift b/fearless/Common/AddressChainDefiner/AddressChainDefiner.swift index 400e8dff64..eae991342e 100644 --- a/fearless/Common/AddressChainDefiner/AddressChainDefiner.swift +++ b/fearless/Common/AddressChainDefiner/AddressChainDefiner.swift @@ -1,5 +1,6 @@ import RobinHood import SSFModels +import SSFCrypto enum AddressValidationResult { case valid(String) @@ -68,7 +69,7 @@ final class AddressChainDefiner { guard let address = address, address.isNotEmpty, let accoundId = (try? AddressFactory.accountId(from: address, chain: chain)) else { return .invalid(address) } - if accoundId == wallet.substrateAccountId || accoundId == wallet.ethereumAddress { + if accoundId == wallet.ecosystem.substrateAccountId || accoundId == wallet.ecosystem.ethereumAddress { return .sameAddress(address) } return .valid(address) diff --git a/fearless/Common/Configs/ApplicationConfigs.swift b/fearless/Common/Configs/ApplicationConfigs.swift index b5f885bb8c..b42b116e69 100644 --- a/fearless/Common/Configs/ApplicationConfigs.swift +++ b/fearless/Common/Configs/ApplicationConfigs.swift @@ -33,6 +33,7 @@ protocol ApplicationConfigProtocol { var appVersionURL: URL? { get } var scamListCsvURL: URL? { get } var polkaswapSettingsURL: URL? { get } + var dappSourceUrl: URL { get } } final class ApplicationConfig { @@ -143,17 +144,22 @@ extension ApplicationConfig: ApplicationConfigProtocol, XcmConfigProtocol { // MARK: - GitHub var chainsSourceUrl: URL { - #if F_DEV - GitHubUrl.url(suffix: "chains/v11/chains_dev.json", branch: .developFree) - #else - GitHubUrl.url(suffix: "chains/v11/chains.json") - #endif + let isDev = LocalToggleService.shared.chainsListToggle?.storageValue +#if F_DEV + return GitHubUrl.url(suffix: "chains/v12/chains_dev.json", branch: .developFree) +#else + return GitHubUrl.url(suffix: "chains/v12/chains.json") +#endif } var chainTypesSourceUrl: URL { GitHubUrl.url(suffix: "chains/all_chains_types.json") } + var dappSourceUrl: URL { + GitHubUrl.url(suffix: "appConfigs/dapps.json", branch: .developFree) + } + // MARK: - xcm var destinationFeeSourceUrl: URL { diff --git a/fearless/Common/Crypto/KeystoreExportWrapper.swift b/fearless/Common/Crypto/KeystoreExportWrapper.swift index 43159954c0..a1dd4ae1d1 100644 --- a/fearless/Common/Crypto/KeystoreExportWrapper.swift +++ b/fearless/Common/Crypto/KeystoreExportWrapper.swift @@ -40,9 +40,7 @@ final class KeystoreExportWrapper: KeystoreExportWrapperProtocol { accountId: AccountId?, genesisHash: String? ) throws -> Data { - let secretKeyTag = chainAccount.isEthereumBased - ? KeystoreTagV2.ethereumSecretKeyTagForMetaId(metaId, accountId: accountId) - : KeystoreTagV2.substrateSecretKeyTagForMetaId(metaId, accountId: accountId) + let secretKeyTag = KeystoreTagV2.secretKeyTag(for: chainAccount.ecosystem, metaId: metaId, accountId: accountId) let secretKey = try keystore.fetchKey(for: secretKeyTag) @@ -66,7 +64,7 @@ final class KeystoreExportWrapper: KeystoreExportWrapperProtocol { let definition = try builder.build( from: keystoreData, password: password, - isEthereum: chainAccount.isEthereumBased + isEthereum: chainAccount.ecosystem.isEthereum || chainAccount.ecosystem.isEthereumBased ) return try jsonEncoder.encode(definition) diff --git a/fearless/Common/Crypto/SigningWrapper.swift b/fearless/Common/Crypto/SigningWrapper.swift index bbb7f6b374..ca6ba6764e 100644 --- a/fearless/Common/Crypto/SigningWrapper.swift +++ b/fearless/Common/Crypto/SigningWrapper.swift @@ -16,7 +16,7 @@ final class SigningWrapper: SigningWrapperProtocol { self.keystore = keystore self.metaId = metaId accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil - isEthereumBased = accountResponse.isEthereumBased + isEthereumBased = accountResponse.ecosystem.isEthereumBased || accountResponse.ecosystem.isEthereum cryptoType = accountResponse.cryptoType publicKeyData = accountResponse.publicKey } diff --git a/fearless/Common/DataProvider/ExistentialDeposit.swift b/fearless/Common/DataProvider/ExistentialDeposit.swift index a6a345bf05..f25b6d784d 100644 --- a/fearless/Common/DataProvider/ExistentialDeposit.swift +++ b/fearless/Common/DataProvider/ExistentialDeposit.swift @@ -9,6 +9,10 @@ protocol ExistentialDepositServiceProtocol { chainAsset: ChainAsset, completion: @escaping (Result) -> Void ) + + func fetchExistentialDeposit( + chainAsset: ChainAsset + ) async throws -> BigUInt } final class ExistentialDepositService: RuntimeConstantFetching, ExistentialDepositServiceProtocol { @@ -16,18 +20,15 @@ final class ExistentialDepositService: RuntimeConstantFetching, ExistentialDepos private let operationManager: OperationManagerProtocol private let chainRegistry: ChainRegistryProtocol - private let chainId: ChainModel.Id // MARK: - Constructor init( operationManager: OperationManagerProtocol, - chainRegistry: ChainRegistryProtocol, - chainId: ChainModel.Id + chainRegistry: ChainRegistryProtocol ) { self.operationManager = operationManager self.chainRegistry = chainRegistry - self.chainId = chainId } // MARK: - Public methods @@ -36,12 +37,12 @@ final class ExistentialDepositService: RuntimeConstantFetching, ExistentialDepos chainAsset: ChainAsset, completion: @escaping (Result) -> Void ) { - guard let runtimeService = chainRegistry.getRuntimeProvider(for: chainId) else { + guard let runtimeService = chainRegistry.getRuntimeProvider(for: chainAsset.chain.chainId) else { completion(.failure(ChainRegistryError.runtimeMetadaUnavailable)) return } - switch chainAsset.chainAssetType { + switch chainAsset.chainAssetType.substrateAssetType { case .equilibrium: fetchConstant( for: .equilibriumExistentialDeposit, @@ -61,13 +62,28 @@ final class ExistentialDepositService: RuntimeConstantFetching, ExistentialDepos } } + func fetchExistentialDeposit( + chainAsset: ChainAsset + ) async throws -> BigUInt { + try await withUnsafeThrowingContinuation { continuation in + fetchExistentialDeposit(chainAsset: chainAsset) { result in + switch result { + case let .success(success): + continuation.resume(returning: success) + case let .failure(failure): + continuation.resume(throwing: failure) + } + } + } + } + // MARK: - Private methods private func fetchSubAssetsExistentialDeposit( chainAsset: ChainAsset, completion: @escaping (Result) -> Void ) { - guard let connection = chainRegistry.getConnection(for: chainId) else { + guard let connection = chainRegistry.getConnection(for: chainAsset.chain.chainId) else { completion(.failure(ChainRegistryError.connectionUnavailable)) return } @@ -106,11 +122,11 @@ final class ExistentialDepositService: RuntimeConstantFetching, ExistentialDepos chainAsset: ChainAsset, completion: @escaping (Result) -> Void ) { - guard let connection = chainRegistry.getConnection(for: chainId) else { + guard let connection = chainRegistry.getConnection(for: chainAsset.chain.chainId) else { completion(.failure(ChainRegistryError.connectionUnavailable)) return } - guard let runtimeService = chainRegistry.getRuntimeProvider(for: chainId) else { + guard let runtimeService = chainRegistry.getRuntimeProvider(for: chainAsset.chain.chainId) else { completion(.failure(ChainRegistryError.runtimeMetadaUnavailable)) return } diff --git a/fearless/Common/DataProvider/Sources/DappDataSource.swift b/fearless/Common/DataProvider/Sources/DappDataSource.swift new file mode 100644 index 0000000000..562843db81 --- /dev/null +++ b/fearless/Common/DataProvider/Sources/DappDataSource.swift @@ -0,0 +1,85 @@ +import Foundation +import RobinHood + +struct DappCategory: Codable, Equatable { + let type: DappCategoryType + let apps: [TonDapp] +} + +enum DappCategoryType: String, Codable, Equatable { + case top + case connected + case featured + case utilities + case nft + case defi + case explorers +} + +final class DappDataSource: SingleValueProviderSourceProtocol { + static let fetchLocalData = false + typealias Model = [DappCategory] + + func fetchOperation() -> CompoundOperationWrapper<[DappCategory]?> { + if Self.fetchLocalData { + return localOperation() + } else { + return remoteOperation() + } + } + + // MARK: - Private methods + + private func remoteOperation() -> CompoundOperationWrapper<[DappCategory]?> { + let requestFactory = BlockNetworkRequestFactory { + var request = URLRequest(url: ApplicationConfig.shared.dappSourceUrl) + request.httpMethod = HttpMethod.get.rawValue + return request + } + + let resultFactory = AnyNetworkResultFactory<[DappCategory]?> { data, response, error in + do { + if let data = data { + let response = try JSONDecoder().decode( + [DappCategory].self, + from: data + ) + + return .success(response) + } else if let error = error { + return .failure(error) + } else { + return .failure(ConvenienceError(error: "wrong data")) + } + } catch { + return .failure(error) + } + } + + let operation = NetworkOperation( + requestFactory: requestFactory, + resultFactory: resultFactory + ) + + return CompoundOperationWrapper( + targetOperation: operation, + dependencies: operation.dependencies + ) + } + + private func localOperation() -> CompoundOperationWrapper<[DappCategory]?> { + let target = ClosureOperation { + guard let chainsUrl = Bundle.main.url(forResource: "dapps", withExtension: "json") else { + throw ChainSyncServiceError.missingLocalFile + } + + let data = try Data(contentsOf: chainsUrl) + let dapps = try JSONDecoder().decode([DappCategory]?.self, from: data) + return dapps + } + return CompoundOperationWrapper( + targetOperation: target, + dependencies: [] + ) + } +} diff --git a/fearless/Common/DataProvider/Subscription/PriceLocalStorageSubscriber.swift b/fearless/Common/DataProvider/Subscription/PriceLocalStorageSubscriber.swift index a0e3ceb27e..ee4ff69f12 100644 --- a/fearless/Common/DataProvider/Subscription/PriceLocalStorageSubscriber.swift +++ b/fearless/Common/DataProvider/Subscription/PriceLocalStorageSubscriber.swift @@ -43,7 +43,7 @@ final class PriceLocalStorageSubscriberImpl: PriceLocalStorageSubscriber { private var chainAssets: [ChainAsset] = [] private let chainsRepository: AsyncCoreDataRepositoryDefault - init() { + private init() { chainsRepository = ChainRepositoryFactory().createAsyncRepository() setup() } diff --git a/fearless/Common/DataProvider/Subscription/WalletLocalStorageSubscriber.swift b/fearless/Common/DataProvider/Subscription/WalletLocalStorageSubscriber.swift index 637222bdff..aeef180b13 100644 --- a/fearless/Common/DataProvider/Subscription/WalletLocalStorageSubscriber.swift +++ b/fearless/Common/DataProvider/Subscription/WalletLocalStorageSubscriber.swift @@ -77,45 +77,45 @@ extension WalletLocalStorageSubscriber { return } - if chainAsset.chain.isEthereum { - handleEthereumAccountInfo(for: accountId, chainAsset: chainAsset, item: item) - return - } - - if chainAsset.chain.isSora, chainAsset.isUtility { - handleAccountInfo(for: accountId, chainAsset: chainAsset, item: item) - return - } + switch chainAsset.chain.ecosystem { + case .substrate, .ethereumBased: + if chainAsset.chain.isSora, chainAsset.isUtility { + handleAccountInfo(for: accountId, chainAsset: chainAsset, item: item) + return + } - switch chainAsset.chainAssetType { - case .normal: - handleAccountInfo(for: accountId, chainAsset: chainAsset, item: item) - - case - .ormlChain, - .ormlAsset, - .foreignAsset, - .stableAssetPoolToken, - .liquidCrowdloan, - .vToken, - .vsToken, - .stable, - .assetId, - .token2, - .xcm: - handleOrmlAccountInfo(for: accountId, chainAsset: chainAsset, item: item) - case .equilibrium: - handleEquilibrium(for: accountId, chainAsset: chainAsset, item: item) - case .assets: - handleAssetAccount(for: accountId, chainAsset: chainAsset, item: item) - case .soraAsset: - if chainAsset.isUtility { + switch chainAsset.chainAssetType.substrateAssetType { + case .normal: handleAccountInfo(for: accountId, chainAsset: chainAsset, item: item) - } else { + + case + .ormlChain, + .ormlAsset, + .foreignAsset, + .stableAssetPoolToken, + .liquidCrowdloan, + .vToken, + .vsToken, + .stable, + .assetId, + .token2, + .xcm: handleOrmlAccountInfo(for: accountId, chainAsset: chainAsset, item: item) + case .equilibrium: + handleEquilibrium(for: accountId, chainAsset: chainAsset, item: item) + case .assets: + handleAssetAccount(for: accountId, chainAsset: chainAsset, item: item) + case .soraAsset: + if chainAsset.isUtility { + handleAccountInfo(for: accountId, chainAsset: chainAsset, item: item) + } else { + handleOrmlAccountInfo(for: accountId, chainAsset: chainAsset, item: item) + } + case .none: + break } - case .none: - break + case .ethereum, .ton: + handleEthereumAccountInfo(for: accountId, chainAsset: chainAsset, item: item) } } diff --git a/fearless/Common/EventCenter/Events/MetaAccountModelChangedEvent.swift b/fearless/Common/EventCenter/Events/MetaAccountModelChangedEvent.swift index 49c0272646..90b2705aa5 100644 --- a/fearless/Common/EventCenter/Events/MetaAccountModelChangedEvent.swift +++ b/fearless/Common/EventCenter/Events/MetaAccountModelChangedEvent.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels struct MetaAccountModelChangedEvent: EventProtocol { let account: MetaAccountModel diff --git a/fearless/Common/EventCenter/Events/SelectedAccountChanged.swift b/fearless/Common/EventCenter/Events/SelectedAccountChanged.swift index f1e72e1c1e..583ec6fa8d 100644 --- a/fearless/Common/EventCenter/Events/SelectedAccountChanged.swift +++ b/fearless/Common/EventCenter/Events/SelectedAccountChanged.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels struct SelectedAccountChanged: EventProtocol { var account: MetaAccountModel diff --git a/fearless/Common/EventCenter/Events/WalletNameChanged.swift b/fearless/Common/EventCenter/Events/WalletNameChanged.swift index 1f72ac651d..4c9cdef190 100644 --- a/fearless/Common/EventCenter/Events/WalletNameChanged.swift +++ b/fearless/Common/EventCenter/Events/WalletNameChanged.swift @@ -1,3 +1,5 @@ +import SSFModels + struct WalletNameChanged: EventProtocol { let wallet: MetaAccountModel diff --git a/fearless/Common/Extension/Foundation/NSPredicate+Filter.swift b/fearless/Common/Extension/Foundation/NSPredicate+Filter.swift index 1a94b0e4e1..76dc9b1f94 100644 --- a/fearless/Common/Extension/Foundation/NSPredicate+Filter.swift +++ b/fearless/Common/Extension/Foundation/NSPredicate+Filter.swift @@ -96,4 +96,8 @@ extension NSPredicate { static func enabledCHain() -> NSPredicate { NSPredicate(format: "%K == false", #keyPath(CDChain.disabled)) } + + static func regularEcosystem() -> NSPredicate { + NSPredicate(format: "%K == nil", #keyPath(CDMetaAccount.tonAddress)) + } } diff --git a/fearless/Common/Extension/Foundation/String+Helpers.swift b/fearless/Common/Extension/Foundation/String+Helpers.swift index 7698c72f23..7e62793882 100644 --- a/fearless/Common/Extension/Foundation/String+Helpers.swift +++ b/fearless/Common/Extension/Foundation/String+Helpers.swift @@ -26,7 +26,7 @@ extension String { let size = self.size(withAttributes: fontAttributes) return size } - + func height(withConstrainedWidth width: CGFloat, font: UIFont) -> CGFloat { let constraintRect = CGSize(width: width, height: .greatestFiniteMagnitude) let boundingBox = self.boundingRect( @@ -35,7 +35,7 @@ extension String { attributes: [NSAttributedString.Key.font: font], context: nil ) - + return ceil(boundingBox.height) } } diff --git a/fearless/Common/Extension/MetaAccountModel.swift b/fearless/Common/Extension/MetaAccountModel.swift new file mode 100644 index 0000000000..6a4542995c --- /dev/null +++ b/fearless/Common/Extension/MetaAccountModel.swift @@ -0,0 +1,14 @@ +import Foundation +import SSFModels +import UIKit + +extension MetaAccountModel { + func icon() -> UIImage { + switch ecosystem { + case .regular: + return R.image.iconBirdGreen()! + case .ton: + return R.image.tonIcon()! + } + } +} diff --git a/fearless/Common/Extension/Model/AccountImportSource+ViewModel.swift b/fearless/Common/Extension/Model/AccountImportSource+ViewModel.swift index 051907a10f..c9cfd1d228 100644 --- a/fearless/Common/Extension/Model/AccountImportSource+ViewModel.swift +++ b/fearless/Common/Extension/Model/AccountImportSource+ViewModel.swift @@ -3,7 +3,7 @@ import Foundation extension AccountImportSource { func titleForLocale(_ locale: Locale) -> String { switch self { - case .mnemonic: + case .mnemonic, .tonMnemonic: return R.string.localizable .importMnemonic(preferredLanguages: locale.rLanguages) case .seed: diff --git a/fearless/Common/Extension/Model/ExportOption+ViewModel.swift b/fearless/Common/Extension/Model/ExportOption+ViewModel.swift index fbc6bcb22d..de02b16e5b 100644 --- a/fearless/Common/Extension/Model/ExportOption+ViewModel.swift +++ b/fearless/Common/Extension/Model/ExportOption+ViewModel.swift @@ -1,29 +1,35 @@ import Foundation +import SSFModels extension ExportOption { - func titleForLocale(_ locale: Locale, ethereumBased: Bool?) -> String { + func titleForLocale(_ locale: Locale, ecosystem: Ecosystem?) -> String { switch self { case .mnemonic: return R.string.localizable .importMnemonic(preferredLanguages: locale.rLanguages) case .keystore: - guard let ethereumBased = ethereumBased else { - return R.string.localizable - .importRecoveryJson(preferredLanguages: locale.rLanguages) + switch ecosystem { + case .substrate: + return R.string.localizable.importSubstrateRecoveryJson(preferredLanguages: locale.rLanguages) + case .ethereumBased, .ethereum: + return R.string.localizable.importEthereumRecoveryJson(preferredLanguages: locale.rLanguages) + case .ton: + return "" + case .none: + return R.string.localizable.importRecoveryJson(preferredLanguages: locale.rLanguages) } - return ethereumBased - ? R.string.localizable.importEthereumRecoveryJson(preferredLanguages: locale.rLanguages) - : R.string.localizable.importSubstrateRecoveryJson(preferredLanguages: locale.rLanguages) case .seed: - guard let ethereumBased = ethereumBased else { - return R.string.localizable - .importRawSeed(preferredLanguages: locale.rLanguages) + switch ecosystem { + case .substrate: + return R.string.localizable.accountImportSubstrateRawSeedPlaceholder(preferredLanguages: locale.rLanguages) + case .ethereumBased, .ethereum: + return R.string.localizable.accountImportEthereumRawSeedPlaceholder(preferredLanguages: locale.rLanguages) + case .ton: + return "" + case .none: + return R.string.localizable.importRawSeed(preferredLanguages: locale.rLanguages) } - - return ethereumBased - ? R.string.localizable.accountImportEthereumRawSeedPlaceholder(preferredLanguages: locale.rLanguages) - : R.string.localizable.accountImportSubstrateRawSeedPlaceholder(preferredLanguages: locale.rLanguages) } } } diff --git a/fearless/Common/Extension/SettingsExtension.swift b/fearless/Common/Extension/SettingsExtension.swift index 9d9b578144..eed89107c2 100644 --- a/fearless/Common/Extension/SettingsExtension.swift +++ b/fearless/Common/Extension/SettingsExtension.swift @@ -15,6 +15,7 @@ enum SettingsKey: String { case selectedCurrency case shouldPlayAssetManagementAnimateKey case accountScoreEnabled + case shouldShowAddWalletBanner } extension SettingsManagerProtocol { @@ -92,4 +93,14 @@ extension SettingsManagerProtocol { } } } + + var shouldShowAddWalletBanner: Bool { + get { + bool(for: SettingsKey.shouldShowAddWalletBanner.rawValue) ?? true + } + + set { + set(value: newValue, for: SettingsKey.shouldShowAddWalletBanner.rawValue) + } + } } diff --git a/fearless/Common/Extension/Storage/CDTonConnectedApp+CoreDataDecodable.swift b/fearless/Common/Extension/Storage/CDTonConnectedApp+CoreDataDecodable.swift new file mode 100644 index 0000000000..1c2f178a13 --- /dev/null +++ b/fearless/Common/Extension/Storage/CDTonConnectedApp+CoreDataDecodable.swift @@ -0,0 +1,30 @@ +import Foundation +import RobinHood +import CoreData + +extension CDTonConnectedApp: CoreDataCodable { + public func populate(from decoder: any Decoder, using _: NSManagedObjectContext) throws { + let app = try TonConnectApp(from: decoder) + identifier = app.identifier + + walletId = app.walletId + clientId = app.clientId + appUrl = app.appUrl + name = app.name + iconUrl = app.iconUrl + publicKey = app.publicKey + privateKey = app.privateKey + } + + public func encode(to encoder: any Encoder) throws { + var container = encoder.container(keyedBy: TonConnectApp.CodingKeys.self) + + try container.encode(walletId, forKey: .walletId) + try container.encode(clientId, forKey: .clientId) + try container.encode(appUrl, forKey: .appUrl) + try container.encode(name, forKey: .name) + try container.encode(iconUrl, forKey: .iconUrl) + try container.encode(publicKey, forKey: .publicKey) + try container.encode(privateKey, forKey: .privateKey) + } +} diff --git a/fearless/Common/Extension/Storage/CDTonDapp+CoreDataDecodable.swift b/fearless/Common/Extension/Storage/CDTonDapp+CoreDataDecodable.swift new file mode 100644 index 0000000000..1e1f8e57e3 --- /dev/null +++ b/fearless/Common/Extension/Storage/CDTonDapp+CoreDataDecodable.swift @@ -0,0 +1,30 @@ +import Foundation +import RobinHood +import CoreData + +extension CDTonDapp: CoreDataCodable { + public func populate(from decoder: Decoder, using _: NSManagedObjectContext) throws { + let container = try decoder.container(keyedBy: TonDapp.CodingKeys.self) + + identifier = try container.decode(String.self, forKey: .identifier) + chains = try container.decode([String].self, forKey: .chains) as? NSArray + name = try container.decode(String.self, forKey: .name) + appDescription = try container.decode(String?.self, forKey: .description) + icon = try container.decode(URL?.self, forKey: .icon) + poster = try container.decode(URL?.self, forKey: .poster) + url = try container.decode(URL.self, forKey: .url) + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: TonDapp.CodingKeys.self) + + let chains = chains as? [String] + try container.encode(chains, forKey: .chains) + try container.encode(name, forKey: .name) + try container.encodeIfPresent(appDescription, forKey: .description) + try container.encodeIfPresent(icon, forKey: .icon) + try container.encodeIfPresent(poster, forKey: .poster) + try container.encode(url, forKey: .url) + try container.encode(identifier, forKey: .identifier) + } +} diff --git a/fearless/Common/Extension/Task.swift b/fearless/Common/Extension/Task.swift new file mode 100644 index 0000000000..20e61baa0c --- /dev/null +++ b/fearless/Common/Extension/Task.swift @@ -0,0 +1,17 @@ +import Foundation + +extension Task where Failure == Never, Success == Void { + init( + priority: TaskPriority? = nil, + operation: @escaping () async throws -> Void, + catch: @escaping (Error) -> Void + ) { + self.init(priority: priority) { + do { + _ = try await operation() + } catch { + `catch`(error) + } + } + } +} diff --git a/fearless/Common/Extension/UIKit/UITableView.swift b/fearless/Common/Extension/UIKit/UITableView.swift index faa676c486..e2416811bd 100644 --- a/fearless/Common/Extension/UIKit/UITableView.swift +++ b/fearless/Common/Extension/UIKit/UITableView.swift @@ -4,13 +4,16 @@ import UIKit extension UITableView { func setAndLayoutTableHeaderView(header: UIView) { tableHeaderView = header - tableHeaderView?.translatesAutoresizingMaskIntoConstraints = false - tableHeaderView?.snp.remakeConstraints { make in - make.width.equalTo(self.frame.width) - } + header.translatesAutoresizingMaskIntoConstraints = false + header.setNeedsLayout() header.layoutIfNeeded() header.frame.size = header.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize) tableHeaderView = header + + header.snp.remakeConstraints { make in + make.width.equalTo(self.frame.width-32) + make.leading.equalToSuperview().inset(16) + } } } diff --git a/fearless/Common/Extension/Wallet/AssetTransactionData+ArrowsquidHistory.swift b/fearless/Common/Extension/Wallet/AssetTransactionData+ArrowsquidHistory.swift index 2de7f34163..f632d8d637 100644 --- a/fearless/Common/Extension/Wallet/AssetTransactionData+ArrowsquidHistory.swift +++ b/fearless/Common/Extension/Wallet/AssetTransactionData+ArrowsquidHistory.swift @@ -4,6 +4,7 @@ import BigInt import IrohaCrypto import SSFUtils import SSFModels +import SSFCrypto extension AssetTransactionData { static func createTransaction( diff --git a/fearless/Common/Extension/Wallet/AssetTransactionData+GiantsquidHistory.swift b/fearless/Common/Extension/Wallet/AssetTransactionData+GiantsquidHistory.swift index dfeb95380f..ae9ce51b75 100644 --- a/fearless/Common/Extension/Wallet/AssetTransactionData+GiantsquidHistory.swift +++ b/fearless/Common/Extension/Wallet/AssetTransactionData+GiantsquidHistory.swift @@ -5,6 +5,7 @@ import IrohaCrypto import SSFUtils import SoraFoundation import SSFModels +import SSFCrypto extension AssetTransactionData { static func createTransaction( @@ -208,8 +209,7 @@ extension AssetTransactionData { let signedData = extrinsic.signedData, let fee = signedData.fee, let partialFee = fee.partialFee, - let partialFeeDecimal = Decimal.fromSubstrateAmount(partialFee, precision: Int16(asset.precision)) - { + let partialFeeDecimal = Decimal.fromSubstrateAmount(partialFee, precision: Int16(asset.precision)) { let fee = AssetTransactionFee( identifier: asset.id, assetId: asset.id, diff --git a/fearless/Common/Extension/Wallet/AssetTransactionData+SubqueryHistory.swift b/fearless/Common/Extension/Wallet/AssetTransactionData+SubqueryHistory.swift index 15d2b07309..35a4c4f3a1 100644 --- a/fearless/Common/Extension/Wallet/AssetTransactionData+SubqueryHistory.swift +++ b/fearless/Common/Extension/Wallet/AssetTransactionData+SubqueryHistory.swift @@ -1,5 +1,5 @@ import Foundation - +import SSFCrypto import BigInt import IrohaCrypto import SSFUtils diff --git a/fearless/Common/Extension/Wallet/AssetTransactionData+SubsquidHistory.swift b/fearless/Common/Extension/Wallet/AssetTransactionData+SubsquidHistory.swift index 457c09f3c8..d215d5c5bb 100644 --- a/fearless/Common/Extension/Wallet/AssetTransactionData+SubsquidHistory.swift +++ b/fearless/Common/Extension/Wallet/AssetTransactionData+SubsquidHistory.swift @@ -1,5 +1,5 @@ import Foundation - +import SSFCrypto import BigInt import IrohaCrypto import SSFUtils diff --git a/fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift b/fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift new file mode 100644 index 0000000000..2b71eb7d79 --- /dev/null +++ b/fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift @@ -0,0 +1,149 @@ +import Foundation +import BigInt +import SoraFoundation +import SSFModels +import TonSwift + +extension AssetTransactionData { + static func createTransaction( + event: TonAccountEvent, + action: AccountEventAction, + address: String, + chain _: ChainModel, + asset: AssetModel, + filters: [WalletTransactionHistoryFilter] + ) -> AssetTransactionData? { + let status: AssetTransactionStatus = event.isInProgress ? .pending : .commited + + var fees: [AssetTransactionFee] = [] + if let feeValue = BigUInt(string: String(abs(event.fee))), + let feeValue = Decimal.fromSubstrateAmount(feeValue, precision: Int16(asset.precision)) { + let fee = AssetTransactionFee( + identifier: asset.id, + assetId: asset.id, + amount: AmountDecimal(value: feeValue), + context: nil + ) + fees.append(fee) + } + + switch action.type { + case let .tonTransfer(tonTransfer): + let amountString = String(tonTransfer.amount) + guard + filters.contains(where: { $0.type == .transfer && $0.selected }), + let amountValue = BigUInt(string: amountString), + let amount = Decimal.fromSubstrateAmount(amountValue, precision: Int16(asset.precision)) + else { + return nil + } + + let senderFriendlyAddress = tonTransfer.sender.address.toFriendly().toString() + let recipientFriendlyAddress = tonTransfer.recipient.address.toFriendly().toString() + + let type: TransactionType = senderFriendlyAddress == address ? .outgoing : .incoming + let peerAddress = type == .incoming ? senderFriendlyAddress : recipientFriendlyAddress + + let peerName = try? TonSwift.Address.parse(peerAddress).toFriendly(bounceable: false).toString() + + var iconContext: [String: String] = [:] + if let iconUrl = asset.icon?.absoluteString { + iconContext["icon"] = iconUrl + } + return AssetTransactionData( + transactionId: event.eventId, + status: status, + assetId: "", + peerId: "", + peerFirstName: nil, + peerLastName: nil, + peerName: peerName, + details: "", + amount: AmountDecimal(value: amount), + fees: fees, + timestamp: Int64(event.timestamp), + type: type.rawValue, + reason: "", + context: iconContext + ) + case let .contractDeploy(deploy): + guard filters.contains(where: { $0.type == .other && $0.selected }) else { + return nil + } + return AssetTransactionData( + transactionId: event.eventId, + status: .commited, + assetId: "", + peerId: "", + peerFirstName: action.preview.name, + peerLastName: action.preview.description, + peerName: deploy.address.toFriendly().toString(), + details: "", + amount: AmountDecimal(value: .zero), + fees: fees, + timestamp: Int64(event.timestamp), + type: TransactionType.extrinsic.rawValue, + reason: "", + context: nil + ) + case let .jettonTransfer(jettonTransfer): + let amountString = String(jettonTransfer.amount) + guard + filters.contains(where: { $0.type == .transfer && $0.selected }), + let amountValue = BigUInt(string: amountString), + let amount = Decimal.fromSubstrateAmount(amountValue, precision: Int16(asset.precision)) + else { + return nil + } + + let sender = jettonTransfer.sender?.address.toFriendly().toString() + let type: TransactionType = sender == address ? .outgoing : .incoming + + var iconContext: [String: String] = [:] + if let iconUrl = jettonTransfer.jettonInfo.imageURL?.absoluteString { + iconContext["icon"] = iconUrl + } + return AssetTransactionData( + transactionId: event.eventId, + status: status, + assetId: "", + peerId: "", + peerFirstName: nil, + peerLastName: nil, + peerName: jettonTransfer.recipientAddress.toFriendly().toString(), + details: "", + amount: AmountDecimal(value: amount), + fees: fees, + timestamp: Int64(event.timestamp), + type: type.rawValue, + reason: "", + context: iconContext + ) + case let .jettonSwap(swap): + + let amountDecimal = Decimal.fromSubstrateAmount( + swap.amountIn, + precision: Int16(asset.precision) + ) ?? .zero + let amount = AmountDecimal(value: amountDecimal) + return AssetTransactionData( + transactionId: event.eventId, + status: status, + assetId: swap.jettonInfoIn?.symbol ?? "", + peerId: swap.jettonInfoOut?.symbol ?? "", + peerFirstName: nil, + peerLastName: nil, + peerName: "", + details: String(swap.amountOut), + amount: amount, + fees: fees, + timestamp: .zero, + type: TransactionType.swap.rawValue, + reason: "", + context: nil + ) + default: + return nil + } + } +} diff --git a/fearless/Common/Helpers/AccountProviderFactory.swift b/fearless/Common/Helpers/AccountProviderFactory.swift index 915229769b..aa9a64fb82 100644 --- a/fearless/Common/Helpers/AccountProviderFactory.swift +++ b/fearless/Common/Helpers/AccountProviderFactory.swift @@ -2,6 +2,7 @@ import Foundation import IrohaCrypto import RobinHood import SSFAccountManagmentStorage +import SSFModels protocol AccountProviderFactoryProtocol { var operationManager: OperationManagerProtocol { get } diff --git a/fearless/Common/Helpers/AccountRepositoryFactory.swift b/fearless/Common/Helpers/AccountRepositoryFactory.swift index dd3fd12057..4bb3d4a383 100644 --- a/fearless/Common/Helpers/AccountRepositoryFactory.swift +++ b/fearless/Common/Helpers/AccountRepositoryFactory.swift @@ -1,6 +1,8 @@ import Foundation import IrohaCrypto import RobinHood +import SSFModels +import SSFAccountManagmentStorage protocol AccountRepositoryFactoryProtocol { // TODO: remove diff --git a/fearless/Common/Helpers/AddressConversion.swift b/fearless/Common/Helpers/AddressConversion.swift deleted file mode 100644 index ab60a53437..0000000000 --- a/fearless/Common/Helpers/AddressConversion.swift +++ /dev/null @@ -1,94 +0,0 @@ -import Foundation -import IrohaCrypto -import SSFCrypto -import SSFModels - -enum ChainFormat { - case ethereum - case substrate(_ prefix: UInt16) - - func asSfCrypto() -> SFChainFormat { - switch self { - case .ethereum: - return .sfEthereum - case let .substrate(prefix): - return .sfSubstrate(prefix) - } - } -} - -enum AddressFactory { - private static func chainFormat(of chain: ChainModel) -> ChainFormat { - chain.isEthereumBased ? .ethereum : .substrate(chain.addressPrefix) - } - - static func address(for accountId: AccountId, chain: ChainModel) throws -> AccountAddress { - try accountId.toAddress(using: chainFormat(of: chain)) - } - - static func address(for accountId: AccountId, chainFormat: ChainFormat) throws -> AccountAddress { - try accountId.toAddress(using: chainFormat) - } - - static func accountId(from address: AccountAddress, chain: ChainModel) throws -> AccountId { - try address.toAccountId(using: chainFormat(of: chain)) - } - - static func randomAccountId(for chain: ChainModel) -> AccountId { - switch chainFormat(of: chain) { - case .ethereum: - return Data(count: EthereumConstants.accountIdLength) - case .substrate: - return Data(count: SubstrateConstants.accountIdLength) - } - } -} - -extension AccountId { - func toAddress(using conversion: ChainFormat) throws -> AccountAddress { - switch conversion { - case .ethereum: - return toHex(includePrefix: true) - case let .substrate(prefix): - return try SS58AddressFactory().address(fromAccountId: self, type: prefix) - } - } -} - -extension AccountAddress { - func toAccountId(using conversion: ChainFormat) throws -> AccountId { - switch conversion { - case .ethereum: - return try AccountId(hexStringSSF: self) - case let .substrate(prefix): - return try SS58AddressFactory().accountId(fromAddress: self, type: prefix) - } - } - - func toAccountId() throws -> AccountId { - if hasPrefix("0x") { - return try AccountId(hexStringSSF: self) - } else { - return try SS58AddressFactory().accountId(from: self) - } - } - - func toAccountIdWithTryExtractPrefix() throws -> AccountId { - if hasPrefix("0x") { - return try AccountId(hexStringSSF: self) - } else { - let prefix = try SS58AddressFactory().type(fromAddress: self) - return try SS58AddressFactory().accountId(fromAddress: self, addressPrefix: prefix.uint16Value) - } - } -} - -extension ChainModel { - var chainFormat: ChainFormat { - if isEthereumBased { - return .ethereum - } else { - return .substrate(addressPrefix) - } - } -} diff --git a/fearless/Common/Helpers/AssetModelMapper.swift b/fearless/Common/Helpers/AssetModelMapper.swift index c3f7d12d1b..96b72d1f97 100644 --- a/fearless/Common/Helpers/AssetModelMapper.swift +++ b/fearless/Common/Helpers/AssetModelMapper.swift @@ -80,6 +80,10 @@ extension AssetModelMapper: CoreDataMapperProtocol { return createPriceData(from: priceData) } + guard let assetType = ChainAssetType(storageValue: entity.type) else { + throw ConvenienceError(error: "ChainAssetType mapper error") + } + return AssetModel( id: entity.id!, name: name!, @@ -93,8 +97,7 @@ extension AssetModelMapper: CoreDataMapperProtocol { isNative: entity.isNative, staking: staking, purchaseProviders: purchaseProviders, - type: createChainAssetModelType(from: entity.type), - ethereumType: createEthereumAssetType(from: entity.ethereumType), + assetType: assetType, priceProvider: priceProvider, coingeckoPriceId: entity.priceId, priceData: priceDatas @@ -115,11 +118,10 @@ extension AssetModelMapper: CoreDataMapperProtocol { entity.color = model.color entity.name = model.name entity.currencyId = model.currencyId - entity.type = model.type?.rawValue + entity.type = model.assetType.rawValue entity.isUtility = model.isUtility entity.isNative = model.isNative entity.staking = model.staking?.rawValue - entity.ethereumType = model.ethereumType?.rawValue let priceProviderContext = CDPriceProvider(context: context) priceProviderContext.type = model.priceProvider?.type.rawValue diff --git a/fearless/Common/Helpers/ChainAccountFetching.swift b/fearless/Common/Helpers/ChainAccountFetching.swift deleted file mode 100644 index 1333523f5c..0000000000 --- a/fearless/Common/Helpers/ChainAccountFetching.swift +++ /dev/null @@ -1,92 +0,0 @@ -import Foundation -import SSFModels - -struct ChainAccountResponse: Equatable { - let chainId: ChainModel.Id - let accountId: AccountId - let publicKey: Data - let name: String - let cryptoType: CryptoType - let addressPrefix: UInt16 - let isEthereumBased: Bool - let isChainAccount: Bool - let walletId: String -} - -enum ChainAccountFetchingError: Error { - case accountNotExists -} - -extension ChainAccountResponse { - func toDisplayAddress() throws -> DisplayAddress { - let chainFormat: ChainFormat = isEthereumBased ? .ethereum : .substrate(addressPrefix) - let address = try accountId.toAddress(using: chainFormat) - - return DisplayAddress(address: address, username: name) - } - - func toAddress() -> AccountAddress? { - let chainFormat: ChainFormat = isEthereumBased ? .ethereum : .substrate(addressPrefix) - return try? accountId.toAddress(using: chainFormat) - } - - func chainFormat() -> ChainFormat { - isEthereumBased ? .ethereum : .substrate(addressPrefix) - } -} - -extension MetaAccountModel { - func fetch(for request: ChainAccountRequest) -> ChainAccountResponse? { - if let chainAccount = chainAccounts.first(where: { $0.chainId == request.chainId }) { - guard let cryptoType = CryptoType(rawValue: chainAccount.cryptoType) else { - return nil - } - - return ChainAccountResponse( - chainId: request.chainId, - accountId: chainAccount.accountId, - publicKey: chainAccount.publicKey, - name: name, - cryptoType: cryptoType, - addressPrefix: request.addressPrefix, - isEthereumBased: request.isEthereumBased, - isChainAccount: true, - walletId: metaId - ) - } - - if request.isEthereumBased { - guard let publicKey = ethereumPublicKey, let accountId = ethereumAddress else { - return nil - } - - return ChainAccountResponse( - chainId: request.chainId, - accountId: accountId, - publicKey: publicKey, - name: name, - cryptoType: .ecdsa, - addressPrefix: request.addressPrefix, - isEthereumBased: request.isEthereumBased, - isChainAccount: false, - walletId: metaId - ) - } - - guard let cryptoType = CryptoType(rawValue: substrateCryptoType) else { - return nil - } - - return ChainAccountResponse( - chainId: request.chainId, - accountId: substrateAccountId, - publicKey: substratePublicKey, - name: name, - cryptoType: cryptoType, - addressPrefix: request.addressPrefix, - isEthereumBased: false, - isChainAccount: false, - walletId: metaId - ) - } -} diff --git a/fearless/Common/Helpers/ChainAssetsFetching.swift b/fearless/Common/Helpers/ChainAssetsFetching.swift index 2f98e69488..af34bffa2a 100644 --- a/fearless/Common/Helpers/ChainAssetsFetching.swift +++ b/fearless/Common/Helpers/ChainAssetsFetching.swift @@ -236,7 +236,14 @@ private extension ChainAssetsFetching { case let .chainIds(ids): return chainAssets.filter { ids.contains($0.chain.chainId) } case .supportNfts: - return chainAssets.filter { $0.chain.isEthereum } + return chainAssets.filter { + switch $0.chain.ecosystem { + case .ethereum, .ton: + return true + case .substrate, .ethereumBased: + return false + } + } case let .assetNames(names): return chainAssets.filter { names.map { $0.lowercased() }.contains($0.asset.symbol.lowercased()) } case let .enabled(wallet): diff --git a/fearless/Common/Helpers/EthereumNodeFetching.swift b/fearless/Common/Helpers/EthereumNodeFetching.swift index af819436a1..9a8dbe95ed 100644 --- a/fearless/Common/Helpers/EthereumNodeFetching.swift +++ b/fearless/Common/Helpers/EthereumNodeFetching.swift @@ -2,6 +2,7 @@ import Foundation import SSFModels import Web3 import FearlessKeys +import SSFUtils enum EthereumChain: String { case ethereumMainnet = "1" diff --git a/fearless/Common/Helpers/WalletAssetsObserver.swift b/fearless/Common/Helpers/WalletAssetsObserver.swift index 7a8475b962..a6ba9d41f9 100644 --- a/fearless/Common/Helpers/WalletAssetsObserver.swift +++ b/fearless/Common/Helpers/WalletAssetsObserver.swift @@ -37,6 +37,7 @@ final class WalletAssetsObserverImpl: WalletAssetsObserver { self.eventCenter = eventCenter self.logger = logger self.userDefaultsStorage = userDefaultsStorage + eventCenter.add(observer: self) } // MARK: - WalletAssetsObserver @@ -236,6 +237,8 @@ final class WalletAssetsObserverImpl: WalletAssetsObserver { } } +// MARK: - EventVisitorProtocol + extension WalletAssetsObserverImpl: EventVisitorProtocol { func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { wallet = event.account diff --git a/fearless/Common/LocalAuthentication/BiometryAuth.swift b/fearless/Common/LocalAuthentication/BiometryAuth.swift index db9510e7c1..774dab6db3 100644 --- a/fearless/Common/LocalAuthentication/BiometryAuth.swift +++ b/fearless/Common/LocalAuthentication/BiometryAuth.swift @@ -55,7 +55,7 @@ class BiometryAuth: BiometryAuthProtocol { context.evaluatePolicy( LAPolicy.deviceOwnerAuthenticationWithBiometrics, localizedReason: localizedReason - ) { (result: Bool, _: Error?) -> Void in + ) { (result: Bool, _: Error?) in completionQueue.async { completionBlock(result) } diff --git a/fearless/Common/Model/AccountImportSource.swift b/fearless/Common/Model/AccountImportSource.swift index 6787fe0f21..08ab270d6d 100644 --- a/fearless/Common/Model/AccountImportSource.swift +++ b/fearless/Common/Model/AccountImportSource.swift @@ -1,6 +1,7 @@ import Foundation enum AccountImportSource: CaseIterable { + case tonMnemonic case mnemonic case seed case keystore diff --git a/fearless/Common/Model/AvailableExportOptionsProvider.swift b/fearless/Common/Model/AvailableExportOptionsProvider.swift index 6f8b64d684..17c32d97ba 100644 --- a/fearless/Common/Model/AvailableExportOptionsProvider.swift +++ b/fearless/Common/Model/AvailableExportOptionsProvider.swift @@ -1,63 +1,81 @@ import SoraKeystore +import SSFModels + protocol AvailableExportOptionsProviderProtocol { func getAvailableExportOptions( - for account: MetaAccountModel, + for wallet: MetaAccountModel, accountId: AccountId?, - isEthereum: Bool + ecosystem: Ecosystem ) -> [ExportOption] - func getAvailableExportOptions(for wallet: MetaAccountModel, accountId: AccountId?) -> [ExportOption] + func getAvailableExportOptions( + for wallet: MetaAccountModel, + accountId: AccountId? + ) -> [ExportOption] } final class AvailableExportOptionsProvider: AvailableExportOptionsProviderProtocol { let keystore = Keychain() func getAvailableExportOptions( - for account: MetaAccountModel, + for wallet: MetaAccountModel, accountId: AccountId?, - isEthereum: Bool + ecosystem: Ecosystem ) -> [ExportOption] { var options: [ExportOption] = [] - if mnemonicAvailable(for: account, accountId: accountId, isEthereum: isEthereum) { - options.append(.mnemonic) - } + switch ecosystem { + case .substrate, .ethereumBased, .ethereum: + if mnemonicAvailable(for: wallet, accountId: accountId, ecosystem: ecosystem) { + options.append(.mnemonic) + } - if seedAvailable(for: account, accountId: accountId) { - options.append(.seed) - } + if seedAvailable(for: wallet, accountId: accountId) { + options.append(.seed) + } - options.append(.keystore) + options.append(.keystore) + case .ton: + options.append(.mnemonic) + } return options } - func getAvailableExportOptions(for wallet: MetaAccountModel, accountId: AccountId?) -> [ExportOption] { - var options: [ExportOption] = [] - - if mnemonicAvailable(for: wallet, accountId: accountId, isEthereum: true), - mnemonicAvailable(for: wallet, accountId: accountId, isEthereum: false) { - options.append(.mnemonic) - } - if seedAvailable(for: wallet, accountId: accountId) { - options.append(.seed) + func getAvailableExportOptions( + for wallet: MetaAccountModel, + accountId: AccountId? + ) -> [ExportOption] { + switch wallet.ecosystem { + case .regular: + return [Ecosystem.ethereum, .ethereumBased, .substrate].map { + getAvailableExportOptions(for: wallet, accountId: accountId, ecosystem: $0) + } + .reduce([], +) + .uniq(predicate: { $0 }) + case .ton: + return getAvailableExportOptions(for: wallet, accountId: accountId, ecosystem: .ton) } - - options.append(.keystore) - - return options } } private extension AvailableExportOptionsProvider { - func mnemonicAvailable(for account: MetaAccountModel, accountId: AccountId?, isEthereum: Bool) -> Bool { - let entropyTag = KeystoreTagV2.entropyTagForMetaId(account.metaId, accountId: accountId) + func mnemonicAvailable( + for wallet: MetaAccountModel, + accountId: AccountId?, + ecosystem: Ecosystem + ) -> Bool { + let entropyTag = KeystoreTagV2.entropyTagForMetaId(wallet.metaId, accountId: accountId) let entropy = try? keystore.fetchKey(for: entropyTag) - if isEthereum { - if !account.canExportEthereumMnemonic { + + switch ecosystem { + case .substrate, .ton: + return entropy != nil + case .ethereumBased, .ethereum: + if !wallet.canExportEthereumMnemonic { return false } - let derivationPathTag = KeystoreTagV2.ethereumDerivationTagForMetaId(account.metaId, accountId: accountId) + let derivationPathTag = KeystoreTagV2.ethereumDerivationTagForMetaId(wallet.metaId, accountId: accountId) let derivationPath = try? keystore.fetchKey(for: derivationPathTag) guard let path = derivationPath else { return false @@ -65,18 +83,17 @@ private extension AvailableExportOptionsProvider { let dpString = String(data: path, encoding: .utf8) return entropy != nil && dpString != nil } - return entropy != nil } - func seedAvailable(for account: MetaAccountModel, accountId: AccountId?) -> Bool { + func seedAvailable(for wallet: MetaAccountModel, accountId: AccountId?) -> Bool { let ethereumTag = KeystoreTagV2.ethereumSeedTagForMetaId( - account.metaId, + wallet.metaId, accountId: accountId ) let ethereumSeed = try? keystore.fetchKey(for: ethereumTag) let substrateTag = KeystoreTagV2.substrateSeedTagForMetaId( - account.metaId, + wallet.metaId, accountId: accountId ) let substrateSeed = try? keystore.fetchKey(for: substrateTag) diff --git a/fearless/Common/Model/ChainAction.swift b/fearless/Common/Model/ChainAction.swift index b8af3c3a21..1dc01ecc1c 100644 --- a/fearless/Common/Model/ChainAction.swift +++ b/fearless/Common/Model/ChainAction.swift @@ -7,6 +7,7 @@ enum ChainAction { case subscan(url: URL) case etherscan(url: URL) case oklink(url: URL) + case tonviewer(url: URL) case switchNode case export case replace @@ -21,7 +22,7 @@ enum ChainAction { return R.image.iconRetry() case .copyAddress: return R.image.iconCopy() - case .polkascan, .subscan, .etherscan, .reefscan, .oklink: + case .polkascan, .subscan, .etherscan, .reefscan, .oklink, .tonviewer: return R.image.iconOpenWeb() case .replace: return R.image.iconReplace() @@ -54,6 +55,8 @@ enum ChainAction { return R.string.localizable.poolStakingManagementClaimTitle(preferredLanguages: locale.rLanguages) case .oklink: return R.string.localizable.transactionDetailsViewOklink(preferredLanguages: locale.rLanguages) + case .tonviewer: + return "Tonviewer" } } } diff --git a/fearless/Common/Model/ChainAsset.swift b/fearless/Common/Model/ChainAsset.swift index 9d3cb44232..ad39916c6c 100644 --- a/fearless/Common/Model/ChainAsset.swift +++ b/fearless/Common/Model/ChainAsset.swift @@ -5,36 +5,40 @@ import SSFModels extension ChainAsset { var assetDisplayInfo: AssetBalanceDisplayInfo { asset.displayInfo(with: chain.icon) } - var identifier: String { - [chain.identifier, asset.id].joined(separator: " : ") - } - var storagePath: StorageCodingPath { var storagePath: StorageCodingPath + switch chainAssetType { - case .normal, .equilibrium, .none: - storagePath = StorageCodingPath.account - case - .ormlChain, - .ormlAsset, - .foreignAsset, - .stableAssetPoolToken, - .liquidCrowdloan, - .vToken, - .vsToken, - .stable, - .assetId, - .token2, - .xcm: - storagePath = StorageCodingPath.tokens - case .assets: - storagePath = StorageCodingPath.assetsAccount - case .soraAsset: - if isUtility { + case .substrate(substrateType: let substrateType): + switch substrateType { + case .normal, .equilibrium: storagePath = StorageCodingPath.account - } else { + case + .ormlChain, + .ormlAsset, + .foreignAsset, + .stableAssetPoolToken, + .liquidCrowdloan, + .vToken, + .vsToken, + .stable, + .assetId, + .token2, + .xcm: storagePath = StorageCodingPath.tokens + case .assets: + storagePath = StorageCodingPath.assetsAccount + case .soraAsset: + if isUtility { + storagePath = StorageCodingPath.account + } else { + storagePath = StorageCodingPath.tokens + } } + case .ethereum: + storagePath = .account + case .ton: + storagePath = .tokens } return storagePath diff --git a/fearless/Common/Model/ChainRegistry/ChainModel.swift b/fearless/Common/Model/ChainRegistry/ChainModel.swift index 8ed8c6cf36..13dff2201b 100644 --- a/fearless/Common/Model/ChainRegistry/ChainModel.swift +++ b/fearless/Common/Model/ChainRegistry/ChainModel.swift @@ -24,7 +24,7 @@ extension ChainModel { extension ChainModel { func match(_ caip2ChainId: Caip2ChainId) -> Bool { - switch chainBaseType { + switch ecosystem { case .substrate: let namespace = "polkadot" let knownChainCaip2ChainId = Caip2ChainId( @@ -32,13 +32,15 @@ extension ChainModel { reference: chainId ) return knownChainCaip2ChainId.reference.hasPrefix(caip2ChainId.reference) && namespace == caip2ChainId.namespace - case .ethereum: + case .ethereum, .ethereumBased: let namespace = "eip155" let knownChainCaip2ChainId = Caip2ChainId( namespace: namespace, reference: chainId.replacingOccurrences(of: "0x", with: "") ) return caip2ChainId == knownChainCaip2ChainId + case .ton: + return false } } } diff --git a/fearless/Common/Model/ChainRegistry/ExternalApiExplorerType.swift b/fearless/Common/Model/ChainRegistry/ExternalApiExplorerType.swift index 3c89d31e1b..58291af1a7 100644 --- a/fearless/Common/Model/ChainRegistry/ExternalApiExplorerType.swift +++ b/fearless/Common/Model/ChainRegistry/ExternalApiExplorerType.swift @@ -16,6 +16,8 @@ extension ChainModel.ExternalApiExplorerType { return R.string.localizable.transactionDetailsViewReefscan(preferredLanguages: locale.rLanguages) case .oklink: return R.string.localizable.transactionDetailsViewOklink(preferredLanguages: locale.rLanguages) + case .tonviewer: + return R.string.localizable.tonTonviewerActionTitle(preferredLanguages: locale.rLanguages) case .unknown: return "" } diff --git a/fearless/Common/Model/ChainRegistry/ManagedMetaAccountModel.swift b/fearless/Common/Model/ChainRegistry/ManagedMetaAccountModel.swift index b109333010..2df5e44a63 100644 --- a/fearless/Common/Model/ChainRegistry/ManagedMetaAccountModel.swift +++ b/fearless/Common/Model/ChainRegistry/ManagedMetaAccountModel.swift @@ -1,5 +1,6 @@ import Foundation import RobinHood +import SSFModels struct ManagedMetaAccountModel: Equatable { static let noOrder: UInt32 = 0 diff --git a/fearless/Common/Model/ChainRegistry/MetaAccountModel.swift b/fearless/Common/Model/ChainRegistry/MetaAccountModel.swift deleted file mode 100644 index c39654f65a..0000000000 --- a/fearless/Common/Model/ChainRegistry/MetaAccountModel.swift +++ /dev/null @@ -1,281 +0,0 @@ -import Foundation -import RobinHood -import SSFModels - -typealias MetaAccountId = String - -struct MetaAccountModel: Equatable, Codable { - let metaId: MetaAccountId - let name: String - let substrateAccountId: Data - let substrateCryptoType: UInt8 - let substratePublicKey: Data - let ethereumAddress: Data? - let ethereumPublicKey: Data? - let chainAccounts: Set - let assetKeysOrder: [String]? - let canExportEthereumMnemonic: Bool - let unusedChainIds: [String]? - let selectedCurrency: Currency - let networkManagmentFilter: String? - let assetsVisibility: [AssetVisibility] - let hasBackup: Bool - let favouriteChainIds: [ChainModel.Id] - - var utilsModel: SSFModels.MetaAccountModel { - SSFModels.MetaAccountModel(metaId: metaId, name: name, substrateAccountId: substrateAccountId, substrateCryptoType: substrateCryptoType, substratePublicKey: substratePublicKey, ethereumAddress: ethereumAddress, ethereumPublicKey: ethereumPublicKey, chainAccounts: chainAccounts, assetKeysOrder: assetKeysOrder, assetFilterOptions: [], canExportEthereumMnemonic: canExportEthereumMnemonic, unusedChainIds: unusedChainIds, selectedCurrency: selectedCurrency, networkManagmentFilter: networkManagmentFilter, assetsVisibility: assetsVisibility, zeroBalanceAssetsHidden: false, hasBackup: hasBackup, favouriteChainIds: favouriteChainIds) - } -} - -extension MetaAccountModel { - var supportEthereum: Bool { - ethereumPublicKey != nil || chainAccounts.first(where: { $0.ethereumBased == true }) != nil - } -} - -extension MetaAccountModel: Identifiable { - var identifier: String { metaId } -} - -extension MetaAccountModel { - func isVisible(chainAsset: ChainAsset) -> Bool { - assetsVisibility.first(where: { $0.assetId == chainAsset.identifier })?.hidden == false - } - - func insertingChainAccount(_ newChainAccount: ChainAccountModel) -> MetaAccountModel { - var newChainAccounts = chainAccounts.filter { - $0.chainId != newChainAccount.chainId - } - - newChainAccounts.insert(newChainAccount) - - return MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: newChainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: assetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingEthereumAddress(_ newEthereumAddress: Data?) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: newEthereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: assetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingEthereumPublicKey(_ newEthereumPublicKey: Data?) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: newEthereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: assetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingName(_ walletName: String) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: walletName, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: assetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingAssetKeysOrder(_ newAssetKeysOrder: [String]) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: newAssetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: assetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingUnusedChainIds(_ newUnusedChainIds: [String]) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: newUnusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: assetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingCurrency(_ currency: Currency) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: currency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: assetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingNetworkManagmentFilter(_ identifire: String) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: identifire, - assetsVisibility: assetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingAssetsVisibility(_ newAssetsVisibility: [AssetVisibility]) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: newAssetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingIsBackuped(_ isBackuped: Bool) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: assetsVisibility, - hasBackup: isBackuped, - favouriteChainIds: favouriteChainIds - ) - } - - func replacingFavoutites(_ favouriteChainIds: [ChainModel.Id]) -> MetaAccountModel { - MetaAccountModel( - metaId: metaId, - name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, - chainAccounts: chainAccounts, - assetKeysOrder: assetKeysOrder, - canExportEthereumMnemonic: canExportEthereumMnemonic, - unusedChainIds: unusedChainIds, - selectedCurrency: selectedCurrency, - networkManagmentFilter: networkManagmentFilter, - assetsVisibility: assetsVisibility, - hasBackup: hasBackup, - favouriteChainIds: favouriteChainIds - ) - } -} diff --git a/fearless/Common/Model/DisplayAddress.swift b/fearless/Common/Model/DisplayAddress.swift deleted file mode 100644 index d6a77695d5..0000000000 --- a/fearless/Common/Model/DisplayAddress.swift +++ /dev/null @@ -1,6 +0,0 @@ -import Foundation - -struct DisplayAddress { - let address: AccountAddress - let username: String -} diff --git a/fearless/Common/Model/KeystoreTag.swift b/fearless/Common/Model/KeystoreTag.swift index 3681930f91..14ab2e4360 100644 --- a/fearless/Common/Model/KeystoreTag.swift +++ b/fearless/Common/Model/KeystoreTag.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels enum KeystoreTag: String, CaseIterable { case pincode @@ -12,6 +13,36 @@ enum KeystoreTag: String, CaseIterable { enum KeystoreTagV2: String, CaseIterable { case pincode + static func secretKeyTag( + for ecosystem: Ecosystem, + metaId: String, + accountId: AccountId? = nil + ) -> String { + switch ecosystem { + case .substrate: + return Self.substrateSecretKeyTagForMetaId(metaId, accountId: accountId) + case .ethereum, .ethereumBased: + return Self.ethereumSecretKeyTagForMetaId(metaId, accountId: accountId) + case .ton: + return Self.tonSecretKeyTagForMetaId(metaId, accountId: accountId) + } + } + + static func seedKeyTag( + for ecosystem: Ecosystem, + metaId: String, + accountId: AccountId? = nil + ) -> String { + switch ecosystem { + case .substrate: + return Self.substrateSeedTagForMetaId(metaId, accountId: accountId) + case .ethereum, .ethereumBased: + return Self.ethereumSeedTagForMetaId(metaId, accountId: accountId) + case .ton: + return "" + } + } + static func substrateSecretKeyTagForMetaId( _ metaId: String, accountId: AccountId? = nil @@ -26,6 +57,13 @@ enum KeystoreTagV2: String, CaseIterable { createTagForMetaId(metaId, accountId: accountId, suffix: "-ethereumSecretKey") } + static func tonSecretKeyTagForMetaId( + _ metaId: String, + accountId: AccountId? = nil + ) -> String { + createTagForMetaId(metaId, accountId: accountId, suffix: "-tonSecretKey") + } + static func entropyTagForMetaId( _ metaId: String, accountId: AccountId? = nil @@ -61,6 +99,13 @@ enum KeystoreTagV2: String, CaseIterable { createTagForMetaId(metaId, accountId: accountId, suffix: "-ethereumSeed") } + static func tonSeedTagForMetaId( + _ metaId: String, + accountId: AccountId? = nil + ) -> String { + createTagForMetaId(metaId, accountId: accountId, suffix: "-tonSeed") + } + private static func createTagForMetaId( _ metaId: String, accountId: AccountId?, diff --git a/fearless/Common/Model/TonConstansts.swift b/fearless/Common/Model/TonConstansts.swift new file mode 100644 index 0000000000..ee3f76a32e --- /dev/null +++ b/fearless/Common/Model/TonConstansts.swift @@ -0,0 +1,9 @@ +import Foundation +import SSFUtils + +struct TonConstants { + static let tonChainId = -239 + static let testnetChainId = -3 + static let tonAssetId = "2ba4723a-74b4-4a6f-a888-e51937773807-239" + static let tonIcon = URL(string: "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg")! +} diff --git a/fearless/Common/Model/WalletBalanceInfo.swift b/fearless/Common/Model/WalletBalanceInfo.swift index a68fddeff4..2f5453528b 100644 --- a/fearless/Common/Model/WalletBalanceInfo.swift +++ b/fearless/Common/Model/WalletBalanceInfo.swift @@ -1,7 +1,7 @@ import Foundation import SSFModels -struct WalletBalanceInfo { +struct WalletBalanceInfo: Equatable { let totalFiatValue: Decimal let enabledAssetFiatBalance: Decimal let dayChangePercent: Decimal diff --git a/fearless/Common/Operation/AccountOperationFactoryError.swift b/fearless/Common/Operation/AccountOperationFactoryError.swift index 6d1dd821e8..7279d6f6d0 100644 --- a/fearless/Common/Operation/AccountOperationFactoryError.swift +++ b/fearless/Common/Operation/AccountOperationFactoryError.swift @@ -6,4 +6,5 @@ enum AccountOperationFactoryError: Error { case unsupportedNetwork case decryption case missingUsername + case unsupportedImport } diff --git a/fearless/Common/Operation/MetaAccountOperationFactory.swift b/fearless/Common/Operation/MetaAccountOperationFactory.swift index eaf4845fcc..f126a8a083 100644 --- a/fearless/Common/Operation/MetaAccountOperationFactory.swift +++ b/fearless/Common/Operation/MetaAccountOperationFactory.swift @@ -1,19 +1,40 @@ import Foundation +import SSFAccountManagment import SSFUtils import IrohaCrypto import RobinHood import SoraKeystore import SSFModels import SSFCrypto +import TonSwift protocol MetaAccountOperationFactoryProtocol { - func newMetaAccountOperation(request: MetaAccountImportMnemonicRequest, isBackuped: Bool) -> BaseOperation - func newMetaAccountOperation(request: MetaAccountImportSeedRequest, isBackuped: Bool) -> BaseOperation - func newMetaAccountOperation(request: MetaAccountImportKeystoreRequest, isBackuped: Bool) -> BaseOperation - - func importChainAccountOperation(request: ChainAccountImportMnemonicRequest) -> BaseOperation - func importChainAccountOperation(request: ChainAccountImportSeedRequest) -> BaseOperation - func importChainAccountOperation(request: ChainAccountImportKeystoreRequest) -> BaseOperation + func newTonMetaAccountOperation( + request: MetaAccountImportTonMnemonicRequest, + isBackedUp: Bool + ) -> BaseOperation + func newMetaAccountOperation( + request: MetaAccountImportMnemonicRequest, + isBackedUp: Bool + ) -> BaseOperation + func newMetaAccountOperation( + request: MetaAccountImportSeedRequest, + isBackedUp: Bool + ) -> BaseOperation + func newMetaAccountOperation( + request: MetaAccountImportKeystoreRequest, + isBackedUp: Bool + ) -> BaseOperation + + func importChainAccountOperation( + request: ChainAccountImportMnemonicRequest + ) -> BaseOperation + func importChainAccountOperation( + request: ChainAccountImportSeedRequest + ) -> BaseOperation + func importChainAccountOperation( + request: ChainAccountImportKeystoreRequest + ) -> BaseOperation } final class MetaAccountOperationFactory { @@ -24,6 +45,14 @@ final class MetaAccountOperationFactory { let seed: Data } + private struct TonAccountQuery { + let publicKey: Data + let privateKey: Data + let address: TonSwift.Address + let seed: Data + let contractVersion: TonContractVersion + } + private enum SeedSource { case mnemonic(IRMnemonicProtocol) case seed(Data) @@ -84,13 +113,10 @@ private extension MetaAccountOperationFactory { func saveSecretKey( _ secretKey: Data, metaId: String, - accountId: AccountId? = nil, - ethereumBased: Bool + ecosystem: Ecosystem, + accountId: AccountId? = nil ) throws { - let tag = ethereumBased ? - KeystoreTagV2.ethereumSecretKeyTagForMetaId(metaId, accountId: accountId) : - KeystoreTagV2.substrateSecretKeyTagForMetaId(metaId, accountId: accountId) - + let tag = KeystoreTagV2.secretKeyTag(for: ecosystem, metaId: metaId, accountId: accountId) try keystore.saveKey(secretKey, with: tag) } @@ -123,13 +149,10 @@ private extension MetaAccountOperationFactory { func saveSeed( _ seed: Data, metaId: String, - accountId: AccountId? = nil, - ethereumBased: Bool + ecosystem: Ecosystem, + accountId: AccountId? = nil ) throws { - let tag = ethereumBased ? - KeystoreTagV2.ethereumSeedTagForMetaId(metaId, accountId: accountId) : - KeystoreTagV2.substrateSeedTagForMetaId(metaId, accountId: accountId) - + let tag = KeystoreTagV2.seedKeyTag(for: ecosystem, metaId: metaId, accountId: accountId) try keystore.saveKey(seed, with: tag) } @@ -223,33 +246,46 @@ private extension MetaAccountOperationFactory { ) } + private func getTonQuery( + mnemonic: String + ) throws -> TonAccountQuery { + let mnemonicArray = mnemonic.components(separatedBy: " ") + let seed = Mnemonic.mnemonicToSeed(mnemonicArray: mnemonicArray) + let keypair = try Mnemonic.mnemonicToPrivateKey(mnemonicArray: mnemonicArray) + + /// Currently support version 4 revision 2 + /// Do not forget to change contractVersion if will support v5 contract + let wallet = WalletV4R2(publicKey: keypair.publicKey.data) + let address = try wallet.address() + + return TonAccountQuery( + publicKey: keypair.publicKey.data, + privateKey: keypair.privateKey.data, + address: address, + seed: seed, + contractVersion: .v4R2 + ) + } + func createMetaAccount( name: String, - substratePublicKey: Data, - substrateCryptoType: CryptoType, - ethereumPublicKey: Data?, - isBackuped: Bool, - defaultChainId: ChainModel.Id? = nil + ecosystem: WalletEcosystem, + isBackedUp: Bool, + defaultChainId: ChainModel.Id? = nil, + assetsVisibility: [AssetVisibility] = [] ) throws -> MetaAccountModel { - let substrateAccountId = try substratePublicKey.publicKeyToAccountId() - let ethereumAddress = try ethereumPublicKey?.ethereumAddressFromPublicKey() - return MetaAccountModel( metaId: UUID().uuidString, name: name, - substrateAccountId: substrateAccountId, - substrateCryptoType: substrateCryptoType.rawValue, - substratePublicKey: substratePublicKey, - ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey, + ecosystem: ecosystem, chainAccounts: [], assetKeysOrder: nil, canExportEthereumMnemonic: true, unusedChainIds: nil, selectedCurrency: Currency.defaultCurrency(), networkManagmentFilter: defaultChainId, - assetsVisibility: [], - hasBackup: isBackuped, + assetsVisibility: assetsVisibility, + hasBackup: isBackedUp, favouriteChainIds: [] ) } @@ -258,9 +294,42 @@ private extension MetaAccountOperationFactory { // MARK: - MetaAccountOperationFactoryProtocol extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { + func newTonMetaAccountOperation( + request: MetaAccountImportTonMnemonicRequest, + isBackedUp: Bool + ) -> BaseOperation { + ClosureOperation { [self] in + let tonQuery = try getTonQuery(mnemonic: request.mnemonic) + let ecosystem = WalletEcosystem.ton(.init( + tonAddress: tonQuery.address, + tonPublicKey: tonQuery.publicKey, + tonContractVersion: tonQuery.contractVersion + )) + let metaAccount = try createMetaAccount( + name: request.username, + ecosystem: ecosystem, + isBackedUp: isBackedUp, + defaultChainId: "\(TonConstants.tonChainId)", + assetsVisibility: [.init( + assetId: ["\(TonConstants.tonChainId)", TonConstants.tonAssetId].joined(separator: " : "), + hidden: false + )] + ) + + let metaId = metaAccount.metaId + try saveSecretKey(tonQuery.privateKey, metaId: metaId, ecosystem: .ton) + guard let data = request.mnemonic.data(using: .utf8) else { + throw AccountCreateError.invalidMnemonicFormat + } + try saveEntropy(data, metaId: metaId) + + return metaAccount + } + } + func newMetaAccountOperation( request: MetaAccountImportMnemonicRequest, - isBackuped: Bool + isBackedUp: Bool ) -> BaseOperation { ClosureOperation { [self] in let substrateQuery = try getQuery( @@ -277,24 +346,32 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { ethereumBased: true ) + let substrateAccountId = try substrateQuery.publicKey.publicKeyToAccountId() + let ethereumAddress = try ethereumQuery.publicKey.ethereumAddressFromPublicKey() + let ecosystem = WalletEcosystem.regular(.init( + substrateAccountId: substrateAccountId, + substrateCryptoType: request.cryptoType.rawValue, + substratePublicKey: substrateQuery.publicKey, + ethereumAddress: ethereumAddress, + ethereumPublicKey: ethereumQuery.publicKey + )) + let metaAccount = try createMetaAccount( name: request.username, - substratePublicKey: substrateQuery.publicKey, - substrateCryptoType: request.cryptoType, - ethereumPublicKey: ethereumQuery.publicKey, - isBackuped: isBackuped, + ecosystem: ecosystem, + isBackedUp: isBackedUp, defaultChainId: request.defaultChainId ) let metaId = metaAccount.metaId - try saveSecretKey(substrateQuery.privateKey, metaId: metaId, ethereumBased: false) + try saveSecretKey(substrateQuery.privateKey, metaId: metaId, ecosystem: .substrate) try saveDerivationPath(request.substrateDerivationPath, metaId: metaId, ethereumBased: false) - try saveSeed(substrateQuery.seed, metaId: metaId, ethereumBased: false) + try saveSeed(substrateQuery.seed, metaId: metaId, ecosystem: .substrate) - try saveSecretKey(ethereumQuery.privateKey, metaId: metaId, ethereumBased: true) + try saveSecretKey(ethereumQuery.privateKey, metaId: metaId, ecosystem: .ethereumBased) try saveDerivationPath(request.ethereumDerivationPath, metaId: metaId, ethereumBased: true) - try saveSeed(ethereumQuery.privateKey, metaId: metaId, ethereumBased: true) + try saveSeed(ethereumQuery.privateKey, metaId: metaId, ecosystem: .ethereumBased) try saveEntropy(request.mnemonic.entropy(), metaId: metaId) @@ -305,7 +382,7 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { // We use seed vs seed.miniSeed for mnemonic. Check if it works for SeedRequest. func newMetaAccountOperation( request: MetaAccountImportSeedRequest, - isBackuped: Bool + isBackedUp: Bool ) -> BaseOperation { ClosureOperation { [self] in let substrateSeed = try Data(hexStringSSF: request.substrateSeed) @@ -328,24 +405,31 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { ) } + let substrateAccountId = try substrateQuery.publicKey.publicKeyToAccountId() + let ethereumAddress = try ethereumQuery?.publicKey.ethereumAddressFromPublicKey() + let ecosystem = WalletEcosystem.regular(.init( + substrateAccountId: substrateAccountId, + substrateCryptoType: request.cryptoType.rawValue, + substratePublicKey: substrateQuery.publicKey, + ethereumAddress: ethereumAddress, + ethereumPublicKey: ethereumQuery?.publicKey + )) let metaAccount = try createMetaAccount( name: request.username, - substratePublicKey: substrateQuery.publicKey, - substrateCryptoType: request.cryptoType, - ethereumPublicKey: ethereumQuery?.publicKey, - isBackuped: isBackuped + ecosystem: ecosystem, + isBackedUp: isBackedUp ) let metaId = metaAccount.metaId - try saveSecretKey(substrateQuery.privateKey, metaId: metaId, ethereumBased: false) + try saveSecretKey(substrateQuery.privateKey, metaId: metaId, ecosystem: .substrate) try saveDerivationPath(request.substrateDerivationPath, metaId: metaId, ethereumBased: false) - try saveSeed(substrateQuery.seed, metaId: metaId, ethereumBased: false) + try saveSeed(substrateQuery.seed, metaId: metaId, ecosystem: .substrate) if let query = ethereumQuery, let derivationPath = request.ethereumDerivationPath { - try saveSecretKey(query.privateKey, metaId: metaId, ethereumBased: true) + try saveSecretKey(query.privateKey, metaId: metaId, ecosystem: .ethereumBased) try saveDerivationPath(derivationPath, metaId: metaId, ethereumBased: true) - try saveSeed(query.privateKey, metaId: metaId, ethereumBased: true) + try saveSeed(query.privateKey, metaId: metaId, ecosystem: .ethereumBased) } return metaAccount @@ -354,7 +438,7 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { func newMetaAccountOperation( request: MetaAccountImportKeystoreRequest, - isBackuped: Bool + isBackedUp: Bool ) -> BaseOperation { ClosureOperation { [self] in let keystoreExtractor = KeystoreExtractor() @@ -410,19 +494,22 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { let metaId = UUID().uuidString let accountId = try substratePublicKey.rawData().publicKeyToAccountId() - try saveSecretKey(substrateKeystore.secretKeyData, metaId: metaId, ethereumBased: false) + try saveSecretKey(substrateKeystore.secretKeyData, metaId: metaId, ecosystem: .substrate) if let ethereumKeystore = ethereumKeystore { - try saveSecretKey(ethereumKeystore.secretKeyData, metaId: metaId, ethereumBased: true) + try saveSecretKey(ethereumKeystore.secretKeyData, metaId: metaId, ecosystem: .ethereumBased) } - return MetaAccountModel( - metaId: metaId, - name: request.username, + let ecosystem = WalletEcosystem.regular(.init( substrateAccountId: accountId, substrateCryptoType: request.cryptoType.rawValue, substratePublicKey: substratePublicKey.rawData(), ethereumAddress: ethereumAddress, - ethereumPublicKey: ethereumPublicKey?.rawData(), + ethereumPublicKey: ethereumPublicKey?.rawData() + )) + return MetaAccountModel( + metaId: metaId, + name: request.username, + ecosystem: ecosystem, chainAccounts: [], assetKeysOrder: nil, canExportEthereumMnemonic: true, @@ -430,7 +517,7 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { selectedCurrency: Currency.defaultCurrency(), networkManagmentFilter: nil, assetsVisibility: [], - hasBackup: isBackuped, + hasBackup: isBackedUp, favouriteChainIds: [] ) } @@ -438,40 +525,60 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { func importChainAccountOperation(request: ChainAccountImportMnemonicRequest) -> BaseOperation { ClosureOperation { [self] in - let query = try getQuery( - seedSource: .mnemonic(request.mnemonic), - derivationPath: request.derivationPath, - cryptoType: request.cryptoType, - ethereumBased: request.isEthereum - ) - let metaId = request.meta.metaId - let accountId = request.isEthereum ? - try query.publicKey.ethereumAddressFromPublicKey() : try query.publicKey.publicKeyToAccountId() + + let accountId: AccountId + let privateKey: Data + let publicKey: Data + switch request.ecosystem { + case .substrate: + let query = try getQuery( + seedSource: .mnemonic(request.mnemonic), + derivationPath: request.derivationPath, + cryptoType: request.cryptoType, + ethereumBased: false + ) + accountId = try query.publicKey.publicKeyToAccountId() + privateKey = query.privateKey + publicKey = query.publicKey + try saveSeed(query.seed, metaId: metaId, ecosystem: request.ecosystem) + case .ethereum, .ethereumBased: + let query = try getQuery( + seedSource: .mnemonic(request.mnemonic), + derivationPath: request.derivationPath, + cryptoType: request.cryptoType, + ethereumBased: true + ) + accountId = try query.publicKey.ethereumAddressFromPublicKey() + privateKey = query.privateKey + publicKey = query.publicKey + try saveSeed(query.seed, metaId: metaId, ecosystem: request.ecosystem) + case .ton: + throw AccountOperationFactoryError.unsupportedImport + } try saveSecretKey( - query.privateKey, + privateKey, metaId: metaId, - accountId: accountId, - ethereumBased: request.isEthereum + ecosystem: request.ecosystem, + accountId: accountId ) try saveDerivationPath( request.derivationPath, metaId: metaId, accountId: accountId, - ethereumBased: request.isEthereum + ethereumBased: request.ecosystem.isEthereum || request.ecosystem.isEthereumBased ) - try saveSeed(query.seed, metaId: metaId, accountId: accountId, ethereumBased: request.isEthereum) try saveEntropy(request.mnemonic.entropy(), metaId: metaId, accountId: accountId) let chainAccount = ChainAccountModel( chainId: request.chainId, accountId: accountId, - publicKey: query.publicKey, + publicKey: publicKey, cryptoType: request.cryptoType.rawValue, - ethereumBased: request.isEthereum + ecosystem: request.ecosystem ) return request.meta.insertingChainAccount(chainAccount) @@ -485,34 +592,42 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { seedSource: .seed(seed), derivationPath: request.derivationPath, cryptoType: request.cryptoType, - ethereumBased: request.isEthereum + ethereumBased: request.ecosystem.isEthereum || request.ecosystem.isEthereumBased ) - let accountId = request.isEthereum ? - try query.publicKey.ethereumAddressFromPublicKey() : try query.publicKey.publicKeyToAccountId() + + let accountId: AccountId + switch request.ecosystem { + case .substrate: + accountId = try query.publicKey.publicKeyToAccountId() + case .ethereum, .ethereumBased: + accountId = try query.publicKey.ethereumAddressFromPublicKey() + case .ton: + throw AccountOperationFactoryError.unsupportedImport + } let metaId = request.meta.metaId try saveSecretKey( query.privateKey, metaId: metaId, - accountId: accountId, - ethereumBased: request.isEthereum + ecosystem: request.ecosystem, + accountId: accountId ) try saveDerivationPath( request.derivationPath, metaId: metaId, accountId: accountId, - ethereumBased: request.isEthereum + ethereumBased: request.ecosystem.isEthereum || request.ecosystem.isEthereumBased ) - try saveSeed(seed, metaId: metaId, accountId: accountId, ethereumBased: request.isEthereum) + try saveSeed(seed, metaId: metaId, ecosystem: request.ecosystem) let chainAccount = ChainAccountModel( chainId: request.chainId, accountId: accountId, publicKey: query.publicKey, cryptoType: request.cryptoType.rawValue, - ethereumBased: request.isEthereum + ecosystem: request.ecosystem ) return request.meta.insertingChainAccount(chainAccount) @@ -533,19 +648,14 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { ) guard let keystore = try? keystoreExtractor - .extractFromDefinition(keystoreDefinition, password: request.password) - else { + .extractFromDefinition(keystoreDefinition, password: request.password) else { throw AccountOperationFactoryError.decryption } let publicKey: IRPublicKeyProtocol - if request.isEthereum { - if let privateKey = try? SECPrivateKey(rawData: keystore.secretKeyData) { - publicKey = try SECKeyFactory().derive(fromPrivateKey: privateKey).publicKey() - } else { - throw AccountOperationFactoryError.decryption - } - } else { + let accountId: Data + switch request.ecosystem { + case .substrate: switch request.cryptoType { case .sr25519: publicKey = try SNPublicKey(rawData: keystore.publicKeyData) @@ -554,15 +664,23 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { case .ecdsa: publicKey = try SECPublicKey(rawData: keystore.publicKeyData) } + accountId = try publicKey.rawData().publicKeyToAccountId() + case .ethereum, .ethereumBased: + if let privateKey = try? SECPrivateKey(rawData: keystore.secretKeyData) { + publicKey = try SECKeyFactory().derive(fromPrivateKey: privateKey).publicKey() + } else { + throw AccountOperationFactoryError.decryption + } + accountId = try publicKey.rawData().ethereumAddressFromPublicKey() + case .ton: + throw AccountOperationFactoryError.unsupportedImport } - let accountId = request.isEthereum ? - try publicKey.rawData().ethereumAddressFromPublicKey() : try publicKey.rawData().publicKeyToAccountId() try saveSecretKey( keystore.secretKeyData, metaId: request.meta.metaId, - accountId: accountId, - ethereumBased: request.isEthereum + ecosystem: request.ecosystem, + accountId: accountId ) let chainAccount = ChainAccountModel( @@ -570,7 +688,7 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { accountId: accountId, publicKey: publicKey.rawData(), cryptoType: request.cryptoType.rawValue, - ethereumBased: request.isEthereum + ecosystem: request.ecosystem ) return request.meta.insertingChainAccount(chainAccount) diff --git a/fearless/Common/Protocols/AccountFetching.swift b/fearless/Common/Protocols/AccountFetching.swift index 48365b74e9..ecac0078f9 100644 --- a/fearless/Common/Protocols/AccountFetching.swift +++ b/fearless/Common/Protocols/AccountFetching.swift @@ -1,6 +1,7 @@ import Foundation import RobinHood import SSFModels +import SSFAccountManagment protocol AccountFetching { func fetchAllMetaAccounts( @@ -74,17 +75,18 @@ extension AccountFetching { } for chainAccount in meta.chainAccounts { - let chainFormat: ChainFormat = chainAccount.ethereumBased ? .ethereum : .substrate(chain.addressPrefix) + let chainFormat: ChainFormat = chainAccount.ecosystem.isEthereumBased ? .ethereum : .substrate(chain.addressPrefix) if let chainAddress = try? chainAccount.accountId.toAddress(using: chainFormat), + let substrateCryptoType = meta.ecosystem.substrateCryptoType, chainAddress == address { let account = ChainAccountResponse( chainId: chain.chainId, accountId: chainAccount.accountId, publicKey: chainAccount.publicKey, name: meta.name, - cryptoType: CryptoType(rawValue: meta.substrateCryptoType) ?? .sr25519, + cryptoType: CryptoType(rawValue: substrateCryptoType) ?? .sr25519, addressPrefix: chain.addressPrefix, - isEthereumBased: chainAccount.ethereumBased, + ecosystem: chainAccount.ecosystem, isChainAccount: true, walletId: meta.metaId ) @@ -156,14 +158,17 @@ extension AccountFetching { } for chainAccount in meta.chainAccounts { + guard let substrateCryptoType = meta.ecosystem.substrateCryptoType else { + continue + } responses.append(ChainAccountResponse( chainId: chain.chainId, accountId: chainAccount.accountId, publicKey: chainAccount.publicKey, name: meta.name, - cryptoType: CryptoType(rawValue: meta.substrateCryptoType) ?? .sr25519, + cryptoType: CryptoType(rawValue: substrateCryptoType) ?? .sr25519, addressPrefix: chain.addressPrefix, - isEthereumBased: false, + ecosystem: chainAccount.ecosystem, isChainAccount: true, walletId: meta.metaId )) @@ -204,7 +209,15 @@ extension AccountFetching { } for chainAccount in meta.chainAccounts { - let chainFormat: ChainFormat = chainAccount.ethereumBased ? .ethereum : .substrate(chain.addressPrefix) + let chainFormat: ChainFormat + switch chainAccount.ecosystem { + case .substrate: + chainFormat = .substrate(chain.addressPrefix) + case .ethereumBased, .ethereum: + chainFormat = .ethereum + case .ton: + chainFormat = .ton(bounceable: true) + } if let chainAddress = try? chainAccount.accountId.toAddress(using: chainFormat), chainAddress == address { closure(.success(meta)) diff --git a/fearless/Common/Protocols/AccountManagementPresentable.swift b/fearless/Common/Protocols/AccountManagementPresentable.swift index b23c7f77f7..70ba1c2837 100644 --- a/fearless/Common/Protocols/AccountManagementPresentable.swift +++ b/fearless/Common/Protocols/AccountManagementPresentable.swift @@ -1,7 +1,10 @@ import Foundation protocol AccountManagementPresentable { - func showCreateNewWallet(from view: ControllerBackedProtocol?) + func showCreateNewWallet( + ecosystem: AccountCreateEcosystem?, + from view: ControllerBackedProtocol? + ) func showImportWallet( defaultSource: AccountImportSource, from view: ControllerBackedProtocol? @@ -11,8 +14,11 @@ protocol AccountManagementPresentable { } extension AccountManagementPresentable { - func showCreateNewWallet(from view: ControllerBackedProtocol?) { - guard let usernameSetup = UsernameSetupViewFactory.createViewForAdding() else { + func showCreateNewWallet( + ecosystem: AccountCreateEcosystem? = nil, + from view: ControllerBackedProtocol? + ) { + guard let usernameSetup = OnboardingMainViewFactory.createViewForAdding(ecosystem: ecosystem) else { return } diff --git a/fearless/Common/Protocols/AccountSelectionPresentable.swift b/fearless/Common/Protocols/AccountSelectionPresentable.swift index be34f4d234..7dc284f143 100644 --- a/fearless/Common/Protocols/AccountSelectionPresentable.swift +++ b/fearless/Common/Protocols/AccountSelectionPresentable.swift @@ -1,4 +1,5 @@ import SoraFoundation +import SSFModels protocol AccountSelectionPresentable: AnyObject { func presentAccountSelection( diff --git a/fearless/Common/Protocols/RuntimeConstantFetching.swift b/fearless/Common/Protocols/RuntimeConstantFetching.swift index 9b6902fdd9..dbb08622ed 100644 --- a/fearless/Common/Protocols/RuntimeConstantFetching.swift +++ b/fearless/Common/Protocols/RuntimeConstantFetching.swift @@ -11,6 +11,12 @@ protocol RuntimeConstantFetching { closure: @escaping (Result) -> Void ) + func fetchConstant( + for path: ConstantCodingPath, + runtimeCodingService: RuntimeCodingServiceProtocol, + operationManager: OperationManagerProtocol + ) async throws -> T + func fetchCompoundConstant( for path: ConstantCodingPath, runtimeCodingService: RuntimeCodingServiceProtocol, @@ -64,6 +70,27 @@ extension RuntimeConstantFetching { operationManager.enqueue(operations: [constOperation, codingFactoryOperation], in: .transient) } + func fetchConstant( + for path: ConstantCodingPath, + runtimeCodingService: RuntimeCodingServiceProtocol, + operationManager: OperationManagerProtocol + ) async throws -> T { + try await withUnsafeThrowingContinuation { continuation in + fetchConstant( + for: path, + runtimeCodingService: runtimeCodingService, + operationManager: operationManager + ) { (result: Swift.Result) in + switch result { + case let .success(constant): + continuation.resume(returning: constant) + case let .failure(error): + continuation.resume(throwing: error) + } + } + } + } + func fetchCompoundConstant( for path: ConstantCodingPath, runtimeCodingService: RuntimeCodingServiceProtocol, diff --git a/fearless/Common/Services/ChainRegistry/ChainRegistry.swift b/fearless/Common/Services/ChainRegistry/ChainRegistry.swift index 7d21701be4..b3262b665b 100644 --- a/fearless/Common/Services/ChainRegistry/ChainRegistry.swift +++ b/fearless/Common/Services/ChainRegistry/ChainRegistry.swift @@ -6,6 +6,7 @@ import Web3 import SSFChainRegistry import SSFRuntimeCodingService import SSFChainConnection +import FearlessKeys protocol ChainRegistryProtocol: AnyObject { var availableChainIds: Set? { get } @@ -15,15 +16,19 @@ protocol ChainRegistryProtocol: AnyObject { func resetConnection(for chainId: ChainModel.Id) func retryConnection(for chainId: ChainModel.Id) func getConnection(for chainId: ChainModel.Id) -> ChainConnection? - func getRuntimeProvider(for chainId: ChainModel.Id) -> RuntimeProviderProtocol? - func getChain(for chainId: ChainModel.Id) -> ChainModel? + func getEthereumConnection(for chainId: ChainModel.Id) -> Web3.Eth? + func chainsSubscribe( _ target: AnyObject, runningInQueue: DispatchQueue, updateClosure: @escaping ([DataProviderChange]) -> Void ) - func getEthereumConnection(for chainId: ChainModel.Id) -> Web3.Eth? func chainsUnsubscribe(_ target: AnyObject) + + func getTonApiAssembly() throws -> TonAPIAssembly + + func getRuntimeProvider(for chainId: ChainModel.Id) -> RuntimeProviderProtocol? + func getChain(for chainId: ChainModel.Id) -> ChainModel? func syncUp() func performHotBoot() func performColdBoot() @@ -53,6 +58,8 @@ final class ChainRegistry { connectionPools.first(where: { $0 is EthereumConnectionPool }) as? EthereumConnectionPool } + private(set) var tonApiAssembly: TonAPIAssembly? + // MARK: - State private var chains: [ChainModel] = [] @@ -128,18 +135,24 @@ final class ChainRegistry { // MARK: - Private DataProviderChange handle methods private func handleInsert(_ chain: ChainModel) throws { - if chain.isEthereum { - try handleNewEthereumChain(newChain: chain) - } else { + switch chain.ecosystem { + case .substrate, .ethereumBased: try handleNewSubstrateChain(newChain: chain) + case .ethereum: + try handleNewEthereumChain(newChain: chain) + case .ton: + handle(ton: chain) } } private func handleUpdate(_ chain: ChainModel) throws { - if chain.isEthereum { - try handleUpdatedEthereumChain(updatedChain: chain) - } else { + switch chain.ecosystem { + case .substrate, .ethereumBased: try handleUpdatedSubstrateChain(updatedChain: chain) + case .ethereum: + try handleUpdatedEthereumChain(updatedChain: chain) + case .ton: + handle(ton: chain) } } @@ -148,10 +161,11 @@ final class ChainRegistry { return } - if removedChain.isEthereum { - handleDeletedEthereumChain(chainId: chainId) - } else { + switch removedChain.ecosystem { + case .substrate, .ethereumBased: handleDeletedSubstrateChain(chainId: chainId) + case .ethereum, .ton: + handleDeletedChain(chainId: chainId) } } @@ -253,16 +267,36 @@ final class ChainRegistry { chains.append(updatedChain) } - private func handleDeletedEthereumChain(chainId: ChainModel.Id) { - chains = chains.filter { $0.chainId != chainId } - } - private func resetEthereumConnection(for _: ChainModel.Id) { // TODO: Reset eth connection } + // MARK: - Private Ton methods + + private func handle(ton chain: ChainModel) { + chains = chains.filter { $0.chainId != chain.chainId } + chains.append(chain) +//#if DEBUG + let token = TonNodeApiKeyDebug.tonApiKey +//#else +// let token = TonNodeApiKey.tonApiKey +//#endif + let isTesnet = LocalToggleService.shared.tonEnvListToggle.storageValue + if chain.options.or([]).contains(.testnet), isTesnet, let node = chain.nodes.first { + let apiAssembly = TonAPIAssembly(tonAPIURL: node.url, token: token) + tonApiAssembly = apiAssembly + } else if !chain.options.or([]).contains(.testnet), !isTesnet, let node = chain.nodes.first { + let apiAssembly = TonAPIAssembly(tonAPIURL: node.url, token: token) + tonApiAssembly = apiAssembly + } + } + // MARK: - Private others methods + private func handleDeletedChain(chainId: ChainModel.Id) { + chains = chains.filter { $0.chainId != chainId } + } + private func syncUpServices() { chainSyncService.syncUp() chainsTypesSyncService.syncUp() @@ -273,7 +307,7 @@ final class ChainRegistry { extension ChainRegistry: ChainRegistryProtocol { var availableChainIds: Set? { - readLock.concurrentlyRead { Set(runtimeVersionSubscriptions.keys + chains.filter { $0.isEthereum }.map { $0.chainId }) } + readLock.concurrentlyRead { Set(chains.map { $0.chainId }) } } var availableChains: [ChainModel] { @@ -390,22 +424,29 @@ extension ChainRegistry: ChainRegistryProtocol { return } - if chain.isEthereum { - resetEthereumConnection(for: chain.chainId) - } else { + switch chain.ecosystem { + case .substrate, .ethereumBased: resetSubstrateConnection(for: chain.chainId) + case .ethereum: + resetEthereumConnection(for: chain.chainId) + case .ton: + break } } func retryConnection(for chainId: ChainModel.Id) { - guard - let chain = chains.first(where: { $0.chainId == chainId }), - let currentConnection = getConnection(for: chainId) - else { + guard let currentConnection = getConnection(for: chainId) else { return } currentConnection.connectIfNeeded() } + + func getTonApiAssembly() throws -> TonAPIAssembly { + guard let tonApiAssembly else { + throw ChainRegistryError.connectionUnavailable + } + return tonApiAssembly + } } // MARK: - ConnectionPoolDelegate diff --git a/fearless/Common/Services/ChainRegistry/ChainSyncService.swift b/fearless/Common/Services/ChainRegistry/ChainSyncService.swift index 4f974e47be..70fd2ead12 100644 --- a/fearless/Common/Services/ChainRegistry/ChainSyncService.swift +++ b/fearless/Common/Services/ChainRegistry/ChainSyncService.swift @@ -108,7 +108,7 @@ final class ChainSyncService { remoteChains: [ChainModel], localChains: [ChainModel] )> = ClosureOperation { - let localChains = try localFetchOperation.extractNoCancellableResultData() + let localChains = (try? localFetchOperation.extractNoCancellableResultData()) ?? [] return ( remoteChains: remoteChains, @@ -161,6 +161,9 @@ final class ChainSyncService { let newOrUpdated: [ChainModel] = remoteChains.compactMap { remoteItem in if let localItem = localMapping[remoteItem.chainId] { + if localItem.options?.contains(.remoteAssets) == true { + return compareForRemoteAssetsOption(localItem: localItem, remoteItem: remoteItem) + } return localItem != remoteItem ? remoteItem : nil } else { return remoteItem @@ -176,6 +179,25 @@ final class ChainSyncService { handle(syncChanges: syncChanges) } + private func compareForRemoteAssetsOption( + localItem: ChainModel, + remoteItem: ChainModel + ) -> ChainModel? { + let updatedLocalChain = localItem.replacingAssets([]) + let updatedRemoteChain = remoteItem.replacingAssets([]) + + let localUtilityAsset = localItem.assets.first(where: { $0.isUtility }) + let remoteUtilityAsset = remoteItem.assets.first(where: { $0.isUtility }) + + if updatedLocalChain != updatedRemoteChain || localUtilityAsset != remoteUtilityAsset { + let assets = localItem.assets.union(remoteItem.assets) + let remoteChain = remoteItem.replacingAssets(Array(assets)) + return remoteChain + } else { + return nil + } + } + private func handle(syncChanges: SyncChanges) { let localSaveOperation = repository.saveOperation({ syncChanges.newOrUpdatedItems diff --git a/fearless/Common/Services/DeprecatedControllerStashAccountCheckService.swift b/fearless/Common/Services/DeprecatedControllerStashAccountCheckService.swift index 6639e186d8..160b284cdf 100644 --- a/fearless/Common/Services/DeprecatedControllerStashAccountCheckService.swift +++ b/fearless/Common/Services/DeprecatedControllerStashAccountCheckService.swift @@ -3,6 +3,7 @@ import RobinHood import SSFUtils import Foundation import SSFRuntimeCodingService +import SSFCrypto enum DeprecatedAccountIssue { case controller(issue: ControllerAccountIssue) diff --git a/fearless/Common/Services/ExtrinsicService/ExtrinsicOperationFactory.swift b/fearless/Common/Services/ExtrinsicService/ExtrinsicOperationFactory.swift index 188198ed1b..c8718313bc 100644 --- a/fearless/Common/Services/ExtrinsicService/ExtrinsicOperationFactory.swift +++ b/fearless/Common/Services/ExtrinsicService/ExtrinsicOperationFactory.swift @@ -4,6 +4,7 @@ import SSFUtils import IrohaCrypto import SSFModels import SSFRuntimeCodingService +import SSFCrypto typealias ExtrinsicBuilderClosure = (ExtrinsicBuilderProtocol) throws -> (ExtrinsicBuilderProtocol) typealias ExtrinsicBuilderIndexedClosure = (ExtrinsicBuilderProtocol, Int) throws -> (ExtrinsicBuilderProtocol) @@ -181,9 +182,9 @@ final class ExtrinsicOperationFactory { let era = try eraWrapper.targetOperation.extractNoCancellableResultData().extrinsicEra let eraBlockHash = try eraBlockOperation.extractNoCancellableResultData() - let account: MultiAddress = codingFactory.metadata.multiAddressParameter( + let account: MultiAddress = try codingFactory.metadata.multiAddressParameter( accountId: currentAccountId, - chainFormat: currentChainFormat.asSfCrypto() + chainFormat: currentChainFormat ) let extrinsics: [Data] = try (0 ..< numberOfExtrinsics).map { index in var builder: ExtrinsicBuilderProtocol = diff --git a/fearless/Common/Services/PayoutRewardsService/NominatorPayoutInfoFactory.swift b/fearless/Common/Services/PayoutRewardsService/NominatorPayoutInfoFactory.swift index a2a162b3a2..67dd4c3c5d 100644 --- a/fearless/Common/Services/PayoutRewardsService/NominatorPayoutInfoFactory.swift +++ b/fearless/Common/Services/PayoutRewardsService/NominatorPayoutInfoFactory.swift @@ -1,6 +1,7 @@ import Foundation import IrohaCrypto import SSFModels +import SSFCrypto final class NominatorPayoutInfoFactory: PayoutInfoFactoryProtocol { let addressPrefix: UInt16 diff --git a/fearless/Common/Services/PayoutRewardsService/PayoutRewardsService+Fetch.swift b/fearless/Common/Services/PayoutRewardsService/PayoutRewardsService+Fetch.swift index 3a0b82b445..19e6e94249 100644 --- a/fearless/Common/Services/PayoutRewardsService/PayoutRewardsService+Fetch.swift +++ b/fearless/Common/Services/PayoutRewardsService/PayoutRewardsService+Fetch.swift @@ -3,6 +3,7 @@ import SSFUtils import BigInt import IrohaCrypto import SSFRuntimeCodingService +import SSFCrypto extension PayoutRewardsService { func createChainHistoryRangeOperationWrapper( diff --git a/fearless/Common/Services/PayoutRewardsService/PayoutValidatorForValidatorFactory.swift b/fearless/Common/Services/PayoutRewardsService/PayoutValidatorForValidatorFactory.swift index 0918a5e843..f5c4a90a11 100644 --- a/fearless/Common/Services/PayoutRewardsService/PayoutValidatorForValidatorFactory.swift +++ b/fearless/Common/Services/PayoutRewardsService/PayoutValidatorForValidatorFactory.swift @@ -2,6 +2,7 @@ import Foundation import RobinHood import IrohaCrypto import SSFModels +import SSFCrypto final class PayoutValidatorsForValidatorFactory: PayoutValidatorsFactoryProtocol { private let chainAsset: ChainAsset diff --git a/fearless/Common/Services/PayoutRewardsService/SoraSubsquidPayoutValidatorForNominatorFactory.swift b/fearless/Common/Services/PayoutRewardsService/SoraSubsquidPayoutValidatorForNominatorFactory.swift index 845aed97f0..4c8b0de9c1 100644 --- a/fearless/Common/Services/PayoutRewardsService/SoraSubsquidPayoutValidatorForNominatorFactory.swift +++ b/fearless/Common/Services/PayoutRewardsService/SoraSubsquidPayoutValidatorForNominatorFactory.swift @@ -3,6 +3,7 @@ import Foundation import SSFUtils import IrohaCrypto import SSFModels +import SSFCrypto final class SoraSubsquidPayoutValidatorsForNominatorFactory { private let url: URL diff --git a/fearless/Common/Services/PayoutRewardsService/SubqueryPayoutValidatorsForNominatorFactory.swift b/fearless/Common/Services/PayoutRewardsService/SubqueryPayoutValidatorsForNominatorFactory.swift index beabedccff..ef8bb23754 100644 --- a/fearless/Common/Services/PayoutRewardsService/SubqueryPayoutValidatorsForNominatorFactory.swift +++ b/fearless/Common/Services/PayoutRewardsService/SubqueryPayoutValidatorsForNominatorFactory.swift @@ -3,6 +3,7 @@ import Foundation import SSFUtils import IrohaCrypto import SSFModels +import SSFCrypto final class SubqueryPayoutValidatorsForNominatorFactory { private let url: URL diff --git a/fearless/Common/Services/PayoutRewardsService/SubsquidPayoutValidatorsForNominatorFactory.swift b/fearless/Common/Services/PayoutRewardsService/SubsquidPayoutValidatorsForNominatorFactory.swift index e589631193..a32c32f657 100644 --- a/fearless/Common/Services/PayoutRewardsService/SubsquidPayoutValidatorsForNominatorFactory.swift +++ b/fearless/Common/Services/PayoutRewardsService/SubsquidPayoutValidatorsForNominatorFactory.swift @@ -3,6 +3,7 @@ import Foundation import SSFUtils import IrohaCrypto import SSFModels +import SSFCrypto final class SubsquidPayoutValidatorsForNominatorFactory { private let url: URL diff --git a/fearless/Common/Services/PayoutRewardsService/ValidatorPayoutInfoFactory.swift b/fearless/Common/Services/PayoutRewardsService/ValidatorPayoutInfoFactory.swift index 96c9ce2669..2f262ebb2b 100644 --- a/fearless/Common/Services/PayoutRewardsService/ValidatorPayoutInfoFactory.swift +++ b/fearless/Common/Services/PayoutRewardsService/ValidatorPayoutInfoFactory.swift @@ -1,6 +1,7 @@ import Foundation import IrohaCrypto import SSFModels +import SSFCrypto final class ValidatorPayoutInfoFactory: PayoutInfoFactoryProtocol { private let chainAsset: ChainAsset diff --git a/fearless/Common/Services/PricesService.swift b/fearless/Common/Services/PricesService.swift index 5a264d4413..6986ec4c17 100644 --- a/fearless/Common/Services/PricesService.swift +++ b/fearless/Common/Services/PricesService.swift @@ -133,13 +133,16 @@ private extension PricesService { var updatedChains: [ChainModel] = [] let uniqChains: [ChainModel] = chainAssets.compactMap { $0.chain }.uniq { $0.chainId } uniqChains.forEach { chain in + guard !chain.ecosystem.isTon else { + return + } var updatedAssets: [AssetModel] = [] chain.chainAssets.forEach { chainAsset in let assetPrices = prices.filter { $0.priceId == chainAsset.asset.priceId } let updatedAsset = chainAsset.asset.replacingPrice(assetPrices) updatedAssets.append(updatedAsset) } - let updatedChain = chain.replacing(updatedAssets) + let updatedChain = chain.replacingAssets(updatedAssets) updatedChains.append(updatedChain) } let saveOperation = chainRepository.saveOperation({ diff --git a/fearless/Common/Services/RemoteSubscription/AccountInfoUpdatingService.swift b/fearless/Common/Services/RemoteSubscription/AccountInfoUpdatingService.swift index e8c41c1b14..21a04f6959 100644 --- a/fearless/Common/Services/RemoteSubscription/AccountInfoUpdatingService.swift +++ b/fearless/Common/Services/RemoteSubscription/AccountInfoUpdatingService.swift @@ -15,7 +15,6 @@ final class AccountInfoUpdatingService { private(set) var selectedMetaAccount: MetaAccountModel private let chainRegistry: ChainRegistryProtocol private let substrateRemoteSubscriptionService: WalletRemoteSubscriptionServiceProtocol - private let ethereumRemoteSubscriptionService: WalletRemoteSubscriptionServiceProtocol private let logger: LoggerProtocol? private let eventCenter: EventCenterProtocol private var chains: [ChainModel.Id: ChainModel] = [:] @@ -36,14 +35,12 @@ final class AccountInfoUpdatingService { selectedAccount: MetaAccountModel, chainRegistry: ChainRegistryProtocol, remoteSubscriptionService: WalletRemoteSubscriptionServiceProtocol, - ethereumRemoteSubscriptionService: WalletRemoteSubscriptionServiceProtocol, logger: LoggerProtocol?, eventCenter: EventCenterProtocol ) { selectedMetaAccount = selectedAccount self.chainRegistry = chainRegistry substrateRemoteSubscriptionService = remoteSubscriptionService - self.ethereumRemoteSubscriptionService = ethereumRemoteSubscriptionService self.logger = logger self.eventCenter = eventCenter } @@ -54,14 +51,6 @@ final class AccountInfoUpdatingService { } } - private func getRemoteSubscriptionService(for chainAsset: ChainAsset) -> WalletRemoteSubscriptionServiceProtocol { - if chainAsset.chain.isEthereum { - return ethereumRemoteSubscriptionService - } else { - return substrateRemoteSubscriptionService - } - } - private func handle(changes: [DataProviderChange]) { for change in changes { switch change { @@ -94,16 +83,16 @@ final class AccountInfoUpdatingService { private func addSubscriptionIfNeeded(for chainAsset: ChainAsset, closure: RemoteSubscriptionClosure? = nil) { Task { - guard let accountId = selectedMetaAccount.fetch(for: chainAsset.chain.accountRequest())?.accountId else { - logger?.error("Couldn't create account for chain \(chainAsset.chain.chainId)") + guard chainAsset.chain.ecosystem.isSubstrate || chainAsset.chain.ecosystem.isEthereumBased, selectedMetaAccount.ecosystem.isRegular else { return } - guard !chainAsset.chain.isEthereum else { + guard let accountId = selectedMetaAccount.fetch(for: chainAsset.chain.accountRequest())?.accountId else { + logger?.error("Couldn't create account for chain \(chainAsset.chain.chainId)") return } - let maybeSubscriptionId = await getRemoteSubscriptionService(for: chainAsset).attachToAccountInfo( + let maybeSubscriptionId = await substrateRemoteSubscriptionService.attachToAccountInfo( of: accountId, chainAsset: chainAsset, queue: nil, @@ -142,7 +131,7 @@ final class AccountInfoUpdatingService { return } - getRemoteSubscriptionService(for: chainAsset).detachFromAccountInfo( + substrateRemoteSubscriptionService.detachFromAccountInfo( for: subscriptionInfo.subscriptionId, chainAssetKey: key, queue: nil diff --git a/fearless/Common/Services/RemoteSubscription/EthereumWalletRemoteSubscriptionService.swift b/fearless/Common/Services/RemoteSubscription/EthereumWalletRemoteSubscriptionService.swift index 2e8f0ff7ff..ce8041b489 100644 --- a/fearless/Common/Services/RemoteSubscription/EthereumWalletRemoteSubscriptionService.swift +++ b/fearless/Common/Services/RemoteSubscription/EthereumWalletRemoteSubscriptionService.swift @@ -3,20 +3,21 @@ import SSFModels import Web3 import Web3ContractABI import RobinHood +import SSFCrypto final class EthereumWalletRemoteSubscriptionService { private let chainRegistry: ChainRegistryProtocol private let logger: LoggerProtocol private let repository: AnyDataProviderRepository private let operationManager: OperationManagerProtocol - private let repositoryWrapper: EthereumBalanceRepositoryCacheWrapper + private let repositoryWrapper: BalanceRepositoryCacheWrapper init( chainRegistry: ChainRegistryProtocol, logger: LoggerProtocol, repository: AnyDataProviderRepository, operationManager: OperationManagerProtocol, - repositoryWrapper: EthereumBalanceRepositoryCacheWrapper + repositoryWrapper: BalanceRepositoryCacheWrapper ) { self.chainRegistry = chainRegistry self.logger = logger @@ -26,7 +27,7 @@ final class EthereumWalletRemoteSubscriptionService { } private func handleNewBlock(ws: Web3.Eth, chainAsset: ChainAsset, accountId: AccountId) throws { - switch chainAsset.asset.ethereumType { + switch chainAsset.asset.assetType.ethereumAssetType { case .normal: try fetchEthBalance(for: chainAsset, ws: ws, accountId: accountId) case .erc20, .bep20: @@ -42,7 +43,7 @@ final class EthereumWalletRemoteSubscriptionService { ws.getBalance(address: ethereumAddress, block: .latest) { [weak self] resp in if let balance = resp.result { - let accountInfo = AccountInfo(ethBalance: balance.quantity) + let accountInfo = AccountInfo(balance: balance.quantity) try? self?.handle(accountInfo: accountInfo, chainAsset: chainAsset, accountId: accountId) } } @@ -55,7 +56,7 @@ final class EthereumWalletRemoteSubscriptionService { let ethAddress = try EthereumAddress(rawAddress: address.hexToBytes()) contract.balanceOf(address: ethAddress).call(completion: { [weak self] response, _ in if let response = response, let balance = response["_balance"] as? BigUInt { - let accountInfo = AccountInfo(ethBalance: balance) + let accountInfo = AccountInfo(balance: balance) try? self?.handle(accountInfo: accountInfo, chainAsset: chainAsset, accountId: accountId) } }) diff --git a/fearless/Common/Services/ServiceCoordinator.swift b/fearless/Common/Services/ServiceCoordinator.swift index d042b5fbd6..e8cb022348 100644 --- a/fearless/Common/Services/ServiceCoordinator.swift +++ b/fearless/Common/Services/ServiceCoordinator.swift @@ -6,6 +6,7 @@ import SSFUtils import SSFChainRegistry import SSFNetwork import SSFStorageQueryKit +import SSFModels protocol ServiceCoordinatorProtocol: ApplicationServiceProtocol { func updateOnAccountChange() @@ -20,6 +21,8 @@ final class ServiceCoordinator { private let walletConnect: WalletConnectService private let walletAssetsObserver: WalletAssetsObserver private let pricesService: PricesServiceProtocol + private let tonConnectService: TonConnectService + private let toggleService: LocalToggleService init( walletSettings: SelectedWalletSettings, @@ -29,7 +32,9 @@ final class ServiceCoordinator { polkaswapSettingsService: PolkaswapSettingsSyncServiceProtocol, walletConnect: WalletConnectService, walletAssetsObserver: WalletAssetsObserver, - pricesService: PricesServiceProtocol + pricesService: PricesServiceProtocol, + tonConnectService: TonConnectService, + toggleService: LocalToggleService ) { self.walletSettings = walletSettings self.accountInfoService = accountInfoService @@ -39,6 +44,8 @@ final class ServiceCoordinator { self.walletConnect = walletConnect self.walletAssetsObserver = walletAssetsObserver self.pricesService = pricesService + self.tonConnectService = tonConnectService + self.toggleService = toggleService } } @@ -62,6 +69,8 @@ extension ServiceCoordinator: ServiceCoordinatorProtocol { walletConnect.setup() walletAssetsObserver.setup() pricesService.setup() + tonConnectService.setup() + toggleService.setup() } func throttle() { @@ -69,6 +78,7 @@ extension ServiceCoordinator: ServiceCoordinatorProtocol { accountInfoService.throttle() walletConnect.throttle() walletAssetsObserver.throttle() + tonConnectService.throttle() } } @@ -93,47 +103,15 @@ extension ServiceCoordinator { logger: logger ) - let ethereumBalanceRepositoryWrapper = EthereumBalanceRepositoryCacheWrapper( - logger: logger, - repository: repository, - operationManager: OperationManagerFacade.sharedManager - ) - - let ethereumWalletRemoteSubscription = EthereumWalletRemoteSubscriptionService( - chainRegistry: chainRegistry, - logger: logger, - repository: repository, - operationManager: OperationManagerFacade.sharedManager, - repositoryWrapper: ethereumBalanceRepositoryWrapper - ) - let accountInfoService = AccountInfoUpdatingService( selectedAccount: selectedMetaAccount, chainRegistry: chainRegistry, remoteSubscriptionService: walletRemoteSubscription, - ethereumRemoteSubscriptionService: ethereumWalletRemoteSubscription, logger: logger, eventCenter: EventCenter.shared ) - let runtimeMetadataRepository: AsyncCoreDataRepositoryDefault = - SubstrateDataStorageFacade.shared.createAsyncRepository() - - let ethereumRemoteBalanceFetching = EthereumRemoteBalanceFetching( - chainRegistry: chainRegistry, - repositoryWrapper: ethereumBalanceRepositoryWrapper - ) - - let storagePerformer = SSFStorageQueryKit.StorageRequestPerformerDefault( - chainRegistry: chainRegistry - ) - - let accountInfoRemote = AccountInfoRemoteServiceDefault( - runtimeItemRepository: AsyncAnyRepository(runtimeMetadataRepository), - ethereumRemoteBalanceFetching: ethereumRemoteBalanceFetching, - storagePerformer: storagePerformer - ) - + let accountInfoRemote = ServiceAssembly.shared.accountInfoRemoteServiceDefault() let walletAssetsObserver = WalletAssetsObserverImpl( wallet: selectedMetaAccount, chainRegistry: chainRegistry, @@ -151,32 +129,9 @@ extension ServiceCoordinator { polkaswapSettingsService: polkaswapSettingsService, walletConnect: walletConnect, walletAssetsObserver: walletAssetsObserver, - pricesService: PricesService.shared - ) - } - - private static func createPackageChainRegistry() -> SSFChainRegistry.ChainRegistryProtocol { - let chainSyncService = SSFChainRegistry.ChainSyncService( - chainsUrl: ApplicationConfig.shared.chainsSourceUrl, - operationQueue: OperationQueue(), - dataFetchFactory: SSFNetwork.NetworkOperationFactory() - ) - - let chainsTypesSyncService = SSFChainRegistry.ChainsTypesSyncService( - url: ApplicationConfig.shared.chainTypesSourceUrl, - dataOperationFactory: SSFNetwork.NetworkOperationFactory(), - operationQueue: OperationQueue() - ) - - let runtimeSyncService = SSFChainRegistry.RuntimeSyncService(dataOperationFactory: NetworkOperationFactory()) - - let chainRegistry = SSFChainRegistry.ChainRegistry( - runtimeProviderPool: SSFChainRegistry.RuntimeProviderPool(), - connectionPool: SSFChainRegistry.ConnectionPool(), - chainSyncService: chainSyncService, - chainsTypesSyncService: chainsTypesSyncService, - runtimeSyncService: runtimeSyncService + pricesService: PricesService.shared, + tonConnectService: ServiceAssembly.shared.tonConnectService(), + toggleService: ServiceAssembly.shared.localToggle ) - return chainRegistry } } diff --git a/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift b/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift index aaae08320f..b0591d72b8 100644 --- a/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift +++ b/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift @@ -5,6 +5,10 @@ import SSFModels import SSFUtils final class ChainModelMapper { + enum MapperError: Error { + case missingEcosystem + } + var entityIdentifierFieldName: String { #keyPath(CDChain.chainId) } typealias DataProviderModel = ChainModel @@ -65,13 +69,16 @@ final class ChainModelMapper { priceProvider = PriceProvider(type: type, id: id, precision: Int16(precision)) } + guard let assetType = ChainAssetType(storageValue: entity.type) else { + return nil + } + let priceDatas: [PriceData] = entity.priceData.or([]).compactMap { data in guard let priceData = data as? CDPriceData else { return nil } return createPriceData(from: priceData) } - return AssetModel( id: id, name: name, @@ -85,8 +92,7 @@ final class ChainModelMapper { isNative: entity.isNative, staking: staking, purchaseProviders: purchaseProviders, - type: createChainAssetModelType(from: entity.type), - ethereumType: createEthereumAssetType(from: entity.ethereumType), + assetType: assetType, priceProvider: priceProvider, coingeckoPriceId: entity.priceId, priceData: priceDatas @@ -125,11 +131,10 @@ final class ChainModelMapper { assetEntity.color = assetModel.color assetEntity.name = assetModel.name assetEntity.currencyId = assetModel.currencyId - assetEntity.type = assetModel.type?.rawValue + assetEntity.type = assetModel.assetType.rawValue assetEntity.isUtility = assetModel.isUtility assetEntity.isNative = assetModel.isNative assetEntity.staking = assetModel.staking?.rawValue - assetEntity.ethereumType = assetModel.ethereumType?.rawValue let priceProviderContext = CDPriceProvider(context: context) priceProviderContext.type = assetModel.priceProvider?.type.rawValue @@ -438,22 +443,6 @@ final class ChainModelMapper { entity.pricingApiUrl = apis?.pricing?.url } - private func createChainAssetModelType(from rawValue: String?) -> SubstrateAssetType? { - guard let rawValue = rawValue else { - return nil - } - - return SubstrateAssetType(rawValue: rawValue) - } - - private func createEthereumAssetType(from rawValue: String?) -> EthereumAssetType? { - guard let rawValue = rawValue else { - return nil - } - - return EthereumAssetType(rawValue: rawValue) - } - private func updateXcmConfig( in entity: CDChain, from xcmConfig: XcmChain?, @@ -502,6 +491,9 @@ final class ChainModelMapper { extension ChainModelMapper: CoreDataMapperProtocol { func transform(entity: CDChain) throws -> ChainModel { + guard let ecosystemRaw = entity.ecosystem, let ecosystem = Ecosystem(rawValue: ecosystemRaw) else { + throw ChainModelMapper.MapperError.missingEcosystem + } let nodes: [ChainNodeModel] = entity.nodes?.compactMap { anyNode in guard let node = anyNode as? CDChainNode else { return nil @@ -549,6 +541,7 @@ extension ChainModelMapper: CoreDataMapperProtocol { } let chainModel = ChainModel( + ecosystem: ecosystem, rank: rank, disabled: entity.disabled, chainId: entity.chainId!, @@ -590,6 +583,7 @@ extension ChainModelMapper: CoreDataMapperProtocol { if let rank = model.rank { entity.rank = "\(rank)" } + entity.ecosystem = model.ecosystem.rawValue entity.disabled = model.disabled entity.chainId = model.chainId entity.paraId = model.paraId diff --git a/fearless/Common/Storage/EntityToModel/MetaAccountMapper.swift b/fearless/Common/Storage/EntityToModel/MetaAccountMapper.swift deleted file mode 100644 index b728157b4c..0000000000 --- a/fearless/Common/Storage/EntityToModel/MetaAccountMapper.swift +++ /dev/null @@ -1,156 +0,0 @@ -import Foundation -import RobinHood -import CoreData -import SSFAccountManagmentStorage -import SSFModels - -final class MetaAccountMapper { - var entityIdentifierFieldName: String { #keyPath(CDMetaAccount.metaId) } - - typealias DataProviderModel = MetaAccountModel - typealias CoreDataEntity = CDMetaAccount -} - -extension MetaAccountMapper: CoreDataMapperProtocol { - func transform(entity: CoreDataEntity) throws -> DataProviderModel { - let chainAccounts: [ChainAccountModel] = try entity.chainAccounts?.compactMap { entity in - guard let chainAccontEntity = entity as? CDChainAccount else { - return nil - } - - let ethereumBased = chainAccontEntity.ethereumBased - - let accountId = try Data(hexStringSSF: chainAccontEntity.accountId!) - return ChainAccountModel( - chainId: chainAccontEntity.chainId!, - accountId: accountId, - publicKey: chainAccontEntity.publicKey!, - cryptoType: UInt8(bitPattern: Int8(chainAccontEntity.cryptoType)), - ethereumBased: ethereumBased - ) - } ?? [] - - var selectedCurrency: Currency? - if let currency = entity.selectedCurrency, - let id = currency.id, - let symbol = currency.symbol, - let name = currency.name, - let icon = currency.icon { - selectedCurrency = Currency( - id: id, - symbol: symbol, - name: name, - icon: icon, - isSelected: currency.isSelected - ) - } - - let substrateAccountId = try Data(hexStringSSF: entity.substrateAccountId!) - let ethereumAddress = try entity.ethereumAddress.map { try Data(hexStringSSF: $0) } - let assetsVisibility: [AssetVisibility]? = (entity.assetsVisibility?.allObjects as? [CDAssetVisibility])?.compactMap { - guard let assetId = $0.assetId else { - return nil - } - - return AssetVisibility(assetId: assetId, hidden: $0.hidden) - } - var favouriteChainIds: [String] = [] - if let entityFavouriteChainIds = entity.favouriteChainIds { - favouriteChainIds = (entityFavouriteChainIds as? [String]) ?? [] - } - - return DataProviderModel( - metaId: entity.metaId!, - name: entity.name!, - substrateAccountId: substrateAccountId, - substrateCryptoType: UInt8(bitPattern: Int8(entity.substrateCryptoType)), - substratePublicKey: entity.substratePublicKey!, - ethereumAddress: ethereumAddress, - ethereumPublicKey: entity.ethereumPublicKey, - chainAccounts: Set(chainAccounts), - assetKeysOrder: entity.assetKeysOrder as? [String], - canExportEthereumMnemonic: entity.canExportEthereumMnemonic, - unusedChainIds: entity.unusedChainIds as? [String], - selectedCurrency: selectedCurrency ?? Currency.defaultCurrency(), - networkManagmentFilter: entity.networkManagmentFilter, - assetsVisibility: assetsVisibility ?? [], - hasBackup: entity.hasBackup, - favouriteChainIds: favouriteChainIds - ) - } - - func populate( - entity: CoreDataEntity, - from model: DataProviderModel, - using context: NSManagedObjectContext - ) throws { - entity.metaId = model.metaId - entity.name = model.name - entity.substrateAccountId = model.substrateAccountId.toHex() - entity.substrateCryptoType = Int16(bitPattern: UInt16(model.substrateCryptoType)) - entity.substratePublicKey = model.substratePublicKey - entity.ethereumPublicKey = model.ethereumPublicKey - entity.ethereumAddress = model.ethereumAddress?.toHex() - entity.assetKeysOrder = model.assetKeysOrder as? NSArray - entity.canExportEthereumMnemonic = model.canExportEthereumMnemonic - entity.unusedChainIds = model.unusedChainIds as? NSArray - entity.networkManagmentFilter = model.networkManagmentFilter - entity.hasBackup = model.hasBackup - entity.favouriteChainIds = model.favouriteChainIds as NSArray - - for assetVisibility in model.assetsVisibility { - var assetVisibilityEntity = entity.assetsVisibility?.first { entity in - (entity as? CDAssetVisibility)?.assetId == assetVisibility.assetId - } as? CDAssetVisibility - - if assetVisibilityEntity == nil { - let newEntity = CDAssetVisibility(context: context) - entity.addToAssetsVisibility(newEntity) - assetVisibilityEntity = newEntity - } - - assetVisibilityEntity?.assetId = assetVisibility.assetId - assetVisibilityEntity?.hidden = assetVisibility.hidden - } - - for chainAccount in model.chainAccounts { - var chainAccountEntity = entity.chainAccounts?.first { - if let entity = $0 as? CDChainAccount, - entity.chainId == chainAccount.chainId { - return true - } else { - return false - } - } as? CDChainAccount - - if chainAccountEntity == nil { - let newEntity = CDChainAccount(context: context) - entity.addToChainAccounts(newEntity) - chainAccountEntity = newEntity - } - - chainAccountEntity?.accountId = chainAccount.accountId.toHex() - chainAccountEntity?.chainId = chainAccount.chainId - chainAccountEntity?.cryptoType = Int16(bitPattern: UInt16(chainAccount.cryptoType)) - chainAccountEntity?.publicKey = chainAccount.publicKey - chainAccountEntity?.ethereumBased = chainAccount.ethereumBased - } - - updatedEntityCurrency(for: entity, from: model, context: context) - } - - private func updatedEntityCurrency( - for entity: CoreDataEntity, - from model: DataProviderModel, - context: NSManagedObjectContext - ) { - let currencyEntity = CDCurrency(context: context) - currencyEntity.id = model.selectedCurrency.id - currencyEntity.name = model.selectedCurrency.name - currencyEntity.symbol = model.selectedCurrency.symbol - currencyEntity.icon = model.selectedCurrency.icon - currencyEntity.isSelected = model.selectedCurrency.isSelected ?? false - - entity.selectedCurrency = currencyEntity - } -} diff --git a/fearless/Common/Storage/Migration/UserStorage/CDChainAccountMigrationPolicyV12.swift b/fearless/Common/Storage/Migration/UserStorage/CDChainAccountMigrationPolicyV12.swift new file mode 100644 index 0000000000..82eef8017a --- /dev/null +++ b/fearless/Common/Storage/Migration/UserStorage/CDChainAccountMigrationPolicyV12.swift @@ -0,0 +1,18 @@ +import CoreData + +class CDChainAccountMigrationPolicyV12: NSEntityMigrationPolicy { + override func createDestinationInstances( + forSource sInstance: NSManagedObject, + in mapping: NSEntityMapping, + manager: NSMigrationManager + ) throws { + try super.createDestinationInstances(forSource: sInstance, in: mapping, manager: manager) + + if let destination = manager.destinationInstances( + forEntityMappingName: mapping.name, + sourceInstances: [sInstance] + ).first { + destination.setValue(nil, forKey: "ecosystem") + } + } +} diff --git a/fearless/Common/Storage/Migration/UserStorage/CDMetaAccountMigrationPolicy.swift b/fearless/Common/Storage/Migration/UserStorage/CDMetaAccountMigrationPolicy.swift new file mode 100644 index 0000000000..74e0e44d15 --- /dev/null +++ b/fearless/Common/Storage/Migration/UserStorage/CDMetaAccountMigrationPolicy.swift @@ -0,0 +1,46 @@ +// +// CDMetaAccountMigrationPolicy.swift +// fearless +// +// Created by Soramitsu on 04.11.2024. +// Copyright © 2024 Soramitsu. All rights reserved. +// + +import CoreData + +class CDMetaAccountMigrationPolicy: NSEntityMigrationPolicy { + override func createDestinationInstances( + forSource sInstance: NSManagedObject, + in mapping: NSEntityMapping, + manager: NSMigrationManager + ) throws { + try super.createDestinationInstances(forSource: sInstance, in: mapping, manager: manager) + + if let destination = manager.destinationInstances( + forEntityMappingName: mapping.name, + sourceInstances: [sInstance] + ).first { + destination.setValue(nil, forKey: "tonAddress") + destination.setValue(nil, forKey: "tonContractVersion") + destination.setValue(nil, forKey: "tonPublicKey") + + if destination.value(forKey: "substrateAccountId") == nil { + destination.setValue(nil, forKey: "substrateAccountId") + } + if destination.value(forKey: "substrateCryptoType") == nil { + destination.setValue(0, forKey: "substrateCryptoType") + } + if destination.value(forKey: "substratePublicKey") == nil { + destination.setValue(nil, forKey: "substratePublicKey") + } +// let substrateAccountId = destination.value(forKey: "substrateAccountId") +// destination.setValue(substrateAccountId, forKey: "substrateAccountId") +// +// let substrateCryptoType = destination.value(forKey: "substrateCryptoType") +// destination.setValue(substrateAccountId, forKey: "substrateCryptoType") +// +// let substratePublicKey = destination.value(forKey: "substratePublicKey") +// destination.setValue(substrateAccountId, forKey: "substratePublicKey") + } + } +} diff --git a/fearless/Common/Storage/Migration/UserStorage/UserStorageVersion.swift b/fearless/Common/Storage/Migration/UserStorage/UserStorageVersion.swift index b1535d2386..55bd17c276 100644 --- a/fearless/Common/Storage/Migration/UserStorage/UserStorageVersion.swift +++ b/fearless/Common/Storage/Migration/UserStorage/UserStorageVersion.swift @@ -13,6 +13,7 @@ enum UserStorageVersion: String, CaseIterable { case version10 = "MultiassetUserDataModel_v9" case version11 = "MultiassetUserDataModel_v10" case version12 = "MultiassetUserDataModel_v11" + case version13 = "MultiassetUserDataModel_v12" static var current: UserStorageVersion { guard let currentVersion = allCases.last else { @@ -47,6 +48,8 @@ enum UserStorageVersion: String, CaseIterable { case .version11: return .version12 case .version12: + return .version13 + case .version13: return nil } } diff --git a/fearless/Common/Storage/MigrationMappings/MultiAssetV12.xcmappingmodel/xcmapping.xml b/fearless/Common/Storage/MigrationMappings/MultiAssetV12.xcmappingmodel/xcmapping.xml new file mode 100644 index 0000000000..a68d7fc758 --- /dev/null +++ b/fearless/Common/Storage/MigrationMappings/MultiAssetV12.xcmappingmodel/xcmapping.xml @@ -0,0 +1,316 @@ + + + + + + 134481920 + 492BE521-0877-4A2F-8735-F7E04AE37625 + 153 + + + + NSPersistenceFrameworkVersion + 1344 + NSStoreModelVersionChecksumKey + bMpud663vz0bXQE24C6Rh4MvJ5jVnzsD2sI3njZkKbc= + NSStoreModelVersionHashes + + XDDevAttributeMapping + + 0plcXXRN7XHKl5CcF+fwriFmUpON3ZtcI/AfK748aWc= + + XDDevEntityMapping + + qeN1Ym3TkWN1G6dU9RfX6Kd2ccEvcDVWHpd3LpLgboI= + + XDDevMappingModel + + EqtMzvRnVZWkXwBHu4VeVGy8UyoOe+bi67KC79kphlQ= + + XDDevPropertyMapping + + XN33V44TTGY4JETlMoOB5yyTKxB+u4slvDIinv0rtGA= + + XDDevRelationshipMapping + + akYY9LhehVA/mCb4ATLWuI9XGLcjpm14wWL1oEBtIcs= + + + NSStoreModelVersionHashesDigest + +Hmc2uYZK6og+Pvx5GUJ7oW75UG4V/ksQanTjfTKUnxyGWJRMtB5tIRgVwGsrd7lz/QR57++wbvWsr6nxwyS0A== + NSStoreModelVersionHashesVersion + 3 + NSStoreModelVersionIdentifiers + + + + + + + + + name + + + + 1 + assetsVisibility + + + + ecosystem + + + + name + + + + 1 + selectedCurrency + + + + networkManagmentFilter + + + + fearless.CDChainAccountMigrationPolicyV12 + CDChainAccount + Undefined + 4 + CDChainAccount + 1 + + + + + + issueMuted + + + + substrateAccountId + + + + favouriteChainIds + + + + 1 + chainAccounts + + + + assetKeysOrder + + + + icon + + + + assetFilterOptions + + + + name + + + + publicKey + + + + substrateCryptoType + + + + isSelected + + + + accountId + + + + symbol + + + + CDAssetVisibility + Undefined + 5 + CDAssetVisibility + 1 + + + + + + 1 + metaAccount + + + + data + + + + hidden + + + + chainId + + + + canExportEthereumMnemonic + + + + 1 + wallet + + + + + CDAccountInfo + Undefined + 1 + CDAccountInfo + 1 + + + + + + tonAddress + + + + order + + + + unusedChainIds + + + + tonContractVersion + + + + url + + + + substratePublicKey + + + + metaId + + + + hasBackup + + + + CDChainSettings + Undefined + 6 + CDChainSettings + 1 + + + + + + ethereumAddress + + + + CDCustomChainNode + Undefined + 2 + CDCustomChainNode + 1 + + + + + + id + + + + assetId + + + + cryptoType + + + + identifier + + + + tonPublicKey + + + + fearless.CDMetaAccountMigrationPolicy + CDMetaAccount + Undefined + 3 + CDMetaAccount + 1 + + + + + + zeroBalanceAssetsHidden + + + + ethereumPublicKey + + + + chainId + + + + isSelected + + + + autobalanced + + + + /Users/soramitsu/Job/shared-features-spm/Sources/SSFAccountManagmentStorage/Resources/UserDataModel.xcdatamodeld/MultiassetUserDataModel_v11.xcdatamodel + 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vZGVkXxAaWERCdWNrZXRGb3JQYWNrYWdlc3N0b3JhZ2VfEBxYREJ1Y2tldEZvckludGVyZmFjZXNzdG9yYWdlXxAPX3hkX293bmluZ01vZGVsXxAdWERCdWNrZXRGb3JQYWNrYWdlc3dhc0VuY29kZWRWX293bmVyXxAbWERCdWNrZXRGb3JEYXRhVHlwZXNzdG9yYWdlW192aXNpYmlsaXR5XxAZWERCdWNrZXRGb3JDbGFzc2Vzc3RvcmFnZVVfbmFtZV8QH1hEQnVja2V0Rm9ySW50ZXJmYWNlc3dhc0VuY29kZWRfEB5YREJ1Y2tldEZvckRhdGFUeXBlc3dhc0VuY29kZWRfEBBfdW5pcXVlRWxlbWVudElEgASBBLeBBLWAAYAEgACBBLaBBLgQAIAFgAOABIAEgABQU1lFU9MAOAA5AA4AOgBCAEpXTlMua2V5c1pOUy5vYmplY3RzpwA7ADwAPQA+AD8AQABBgAaAB4AIgAmACoALgAynAEMARABFAEYARwBIAEmADYECq4EDzoEEE4CAgQRYgQG/gCtfEBFDREFzc2V0VmlzaWJpbGl0eV5DRENoYWluQWNjb3VudF8QEUNEQ3VzdG9tQ2hhaW5Ob2RlXUNEQWNjb3VudEluZm9dQ0RNZXRhQWNjb3VudF8QD0NEQ2hhaW5TZXR0aW5nc1pDREN1cnJlbmN53xAQAFMAVABVAFYAHwBXAFgAIQBZAFoADgAjAFsAXAAmAF0AXgBfACcAJwATAGMAZAAvACcAXgBnADsAXgBqAGsAbF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc2R1cGxpY2F0ZXNfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zc3RvcmFnZVtfaXNBYnN0cmFjdIAPgDOABIAEgAKAEIECSYAEgA+BAkuABoAPgQPNgA4IEmhP0BxXb3JkZXJlZNMAOAA5AA4AcAByAEqhAHGAEaEAc4ASgCteWERfUFN0ZXJlb3R5cGXZAB8AIwB3AA4AJgB4ACEAXQB5AEMAcQBeAH0AFQAnAC8AbACBXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgA2AEYAPgDKAAIAECIAT0wA4ADkADgCDAI0ASqkAhACFAIYAhwCIAIkAigCLAIyAFIAVgBaAF4AYgBmAGoAbgBypAI4AjwCQAJEAkgCTAJQAlQCWgB2AIYAigCSAJYAngCmALIAwgCtfEBNYRFBNQ29tcG91bmRJbmRleGVzXxAQWERfUFNLX2VsZW1lbnRJRF8QGVhEUE1VbmlxdWVuZXNzQ29uc3RyYWludHNfEBpYRF9QU0tfdmVyc2lvbkhhc2hNb2RpZmllcl8QGVhEX1BTS19mZXRjaFJlcXVlc3RzQXJyYXlfEBFYRF9QU0tfaXNBYnN0cmFjdF8QD1hEX1BTS191c2VySW5mb18QE1hEX1BTS19jbGFzc01hcHBpbmdfEBZYRF9QU0tfZW50aXR5Q2xhc3NOYW1l3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUArQAVAHMAbABsAGwALwBsALQAhABsAGwAFQBsVV90eXBlWF9kZWZhdWx0XF9hc3NvY2lhdGlvbltfaXNSZWFkT25seVlfaXNTdGF0aWNZX2lzVW5pcXVlWl9pc0Rlcml2ZWRaX2lzT3JkZXJlZFxfaXNDb21wb3NpdGVXX2lzTGVhZoAAgB6AAIASCAgICIAggBQICIAACNIAOQAOALsAvKCAH9IAvgC/AMAAwVokY2xhc3NuYW1lWCRjbGFzc2VzXk5TTXV0YWJsZUFycmF5owDAAMIAw1dOU0FycmF5WE5TT2JqZWN00gC+AL8AxQDGXxAQWERVTUxQcm9wZXJ0eUltcKQAxwDIAMkAw18QEFhEVU1MUHJvcGVydHlJbXBfEBRYRFVNTE5hbWVkRWxlbWVudEltcF8QD1hEVU1MRWxlbWVudEltcN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQBzAGwAbABsAC8AbAC0AIUAbABsABUAbIAAgACAAIASCAgICIAggBUICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVANsAFQBzAGwAbABsAC8AbAC0AIYAbABsABUAbIAAgCOAAIASCAgICIAggBYICIAACNIAOQAOAOkAvKCAH98QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQBzAGwAbABsAC8AbAC0AIcAbABsABUAbIAAgACAAIASCAgICIAggBcICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAPwAFQBzAGwAbABsAC8AbAC0AIgAbABsABUAbIAAgCaAAIASCAgICIAggBgICIAACNIAOQAOAQoAvKCAH98QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQBzAGwAbABsAC8AbAC0AIkAbABsABUAbIAAgCiAAIASCAgICIAggBkICIAACAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQEeABUAcwBsAGwAbAAvAGwAtACKAGwAbAAVAGyAAIAqgACAEggICAiAIIAaCAiAAAjTADgAOQAOASwBLQBKoKCAK9IAvgC/ATABMV8QE05TTXV0YWJsZURpY3Rpb25hcnmjATABMgDDXE5TRGljdGlvbmFyed8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVATUAFQBzAGwAbABsAC8AbAC0AIsAbABsABUAbIAAgC2AAIASCAgICIAggBsICIAACNYAIwAOACYAXQAfACEBQwFEABUAbAAVAC+ALoAvgAAIgABfEBRYREdlbmVyaWNSZWNvcmRDbGFzc9IAvgC/AUoBS11YRFVNTENsYXNzSW1wpgFMAU0BTgFPAVAAw11YRFVNTENsYXNzSW1wXxASWERVTUxDbGFzc2lmaWVySW1wXxARWERVTUxOYW1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AbAAvAGwAtAGsAGwAbAAVAGyAAIAogACAqwgICAiAIIBFCAiAAAjZAB8AIwXDAA4AJgXEACEAXQXFBN8BkABeAH0AFQAnAC8AbAXNXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgKiAO4APgDKAAIAECIC30wA4ADkADgXPBdcASqcCSgJLAkwCTQJOAk8CUIBSgFOAVIBVgFaAV4BYpwXYBdkF2gXbBdwF3QXegLiAuYC6gLuAvIC9gL6AK98QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQUkAGwAbABsAC8AbAC0AkoAbABsABUAbIAAgACAAIC2CAgICIAggFIICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQUkAGwAbABsAC8AbAC0AksAbABsABUAbIAAgCiAAIC2CAgICIAggFMICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQUkAGwAbABsAC8AbAC0AkwAbABsABUAbIAAgACAAIC2CAgICIAggFQICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVApAAFQUkAGwAbABsAC8AbAC0Ak0AbABsABUAbIAAgF2AAIC2CAgICIAggFUICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQUkAGwAbABsAC8AbAC0Ak4AbABsABUAbIAAgACAAIC2CAgICIAggFYICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQUkAGwAbABsAC8AbAC0Ak8AbABsABUAbIAAgACAAIC2CAgICIAggFcICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQUkAGwAbABsAC8AbAC0AlAAbABsABUAbIAAgACAAIC2CAgICIAggFgICIAACN8QEgCiAKMApAZKAB8ApgCnBksAIQClBkwAqAAOACMAqQCqACY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TADgAOQAOB/gH+QBKoKCAK98QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQenAGwAbABsAC8AbAC0AagAbABsABUAbIAAgCiAAIDbCAgICIAggEEICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAgEAFQenAGwAbABsAC8AbAC0AakAbABsABUAbIAAgEyAAIDbCAgICIAggEIICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQenAGwAbABsAC8AbAC0AaoAbABsABUAbIAAgCiAAIDbCAgICIAggEMICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQenAGwAbABsAC8AbAC0AasAbABsABUAbIAAgACAAIDbCAgICIAggEQICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQenAGwAbABsAC8AbAC0AawAbABsABUAbIAAgCiAAIDbCAgICIAggEUICIAACNkAHwAjCEcADgAmCEgAIQBdCEkE4QGQAF4AfQAVACcALwBsCFFfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WA2IA7gA+AMoAAgAQIgOfTADgAOQAOCFMIWwBKpwJKAksCTAJNAk4CTwJQgFKAU4BUgFWAVoBXgFinCFwIXQheCF8IYAhhCGKA6IDpgOqA64DtgO6A8IAr3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUAFQAVB6gAbABsAGwALwBsALQCSgBsAGwAFQBsgACAAIAAgOYICAgIgCCAUggIgAAI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUBDgAVB6gAbABsAGwALwBsALQCSwBsAGwAFQBsgACAKIAAgOYICAgIgCCAUwgIgAAI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUAFQAVB6gAbABsAGwALwBsALQCTABsAGwAFQBsgACAAIAAgOYICAgIgCCAVAgIgAAI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUIkwAVB6gAbABsAGwALwBsALQCTQBsAGwAFQBsgACA7IAAgOYICAgIgCCAVQgIgAAIEQcI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUAFQAVB6gAbABsAGwALwBsALQCTgBsAGwAFQBsgACAAIAAgOYICAgIgCCAVggIgAAI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUIsgAVB6gAbABsAGwALwBsALQCTwBsAGwAFQBsgACA74AAgOYICAgIgCCAVwgIgAAIXxAZTlNTZWN1cmVVbmFyY2hpdmVGcm9tRGF0Yd8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQeoAGwAbABsAC8AbAC0AlAAbABsABUAbIAAgACAAIDmCAgICIAggFgICIAACN8QEgCiAKMApAjQAB8ApgCnCNEAIQClCNIAqAAOACMAqQCqACYAqwAVABUAFQAnAEcAbABsCNoALwBsAF4AbALiBM0AbABsCOIAbF8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgIAICIDzCIAPCIEBCYCXCAiA8ggSmEQ1MdMAOAA5AA4I5gjpAEqiAY8C7IA6gGWiCOoI64D0gP+AK9kAHwAjCO4ADgAmCO8AIQBdCPAE4gGPAF4AfQAVACcALwBsCPhfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WA8YA6gA+AMoAAgAQIgPXTADgAOQAOCPoJAwBKqAGlAaYBpwGoAakBqgGrAayAPoA/gECAQYBCgEOARIBFqAkECQUJBgkHCQgJCQkKCQuA9oD3gPiA+oD7gPyA/YD+gCvfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQEOABUI6gBsAGwAbAAvAGwAtAGlAGwAbAAVAGyAAIAogACA9AgICAiAIIA+CAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQAVABUI6gBsAGwAbAAvAGwAtAGmAGwAbAAVAGyAAIAAgACA9AgICAiAIIA/CAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQktABUI6gBsAGwAbAAvAGwAtAGnAGwAbAAVAGyAAID5gACA9AgICAiAIIBACAiAAAjTADgAOQAOCTsJPABKoKCAK98QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQjqAGwAbABsAC8AbAC0AagAbABsABUAbIAAgCiAAID0CAgICIAggEEICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAgEAFQjqAGwAbABsAC8AbAC0AakAbABsABUAbIAAgEyAAID0CAgICIAggEIICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQjqAGwAbABsAC8AbAC0AaoAbABsABUAbIAAgCiAAID0CAgICIAggEMICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQjqAGwAbABsAC8AbAC0AasAbABsABUAbIAAgACAAID0CAgICIAggEQICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQjqAGwAbABsAC8AbAC0AawAbABsABUAbIAAgCiAAID0CAgICIAggEUICIAACNkAHwAjCYoADgAmCYsAIQBdCYwE4gLsAF4AfQAVACcALwBsCZRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WA8YBlgA+AMoAAgAQIgQEA0wA4ADkADgmWCZ4ASqcDnAOdA54DnwOgA6EDooBzgHSAdYB2gHeAeIB5pwmfCaAJoQmiCaMJpAmlgQEBgQECgQEEgQEFgQE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AEXUAABF3AAARgAAAEYsAABGUAAARowAAEaoAABGyAAARuwAAEcQAABHXAAAR4AAAEfMAABIKAAASHAAAElsAABJdAAASXwAAEmEAABJjAAASZAAAEmUAABJmAAASZwAAEmkAABJrAAASbAAAEm0AABJvAAAScAAAEq8AABKxAAASswAAErUAABK3AAASuAAAErkAABK6AAASuwAAEr0AABK/AAASwAAAEsEAABLDAAASxAAAEs0AABLOAAAS0AAAEw8AABMRAAATEwAAExUAABMXAAATGAAAExkAABMaAAATGwAAEx0AABMfAAATIAAAEyEAABMjAAATJAAAE2MAABNlAAATZwAAE2kAABNrAAATbAAAE20AABNuAAATbwAAE3EAABNzAAATdAAAE3UAABN3AAATeAAAE4EAABOCAAAThAAAE8MAABPFAAATxwAAE8kAABPLAAATzAAAE80AABPOAAATzwAAE9EAABPTAAAT1AAAE9UAABPXAAAT2AAAE9kAABQYAAAUGgAAFBwAABQeAAAUIAAAFCEAABQiAAAUIwAAFCQAABQmAAAUKAAAFCkAABQqAAAULAAAFC0AABQ6AAAUOwAAFDwAABQ+AAAURwAAFF0AABRkAAAUcQAAFLAAABSyAAAUtAAAFLYAABS4AAAUuQAAFLoAABS7AAAUvAAAFL4AABTAAAAUwQAAFMIAABTEAAAUxQAAFN4AABTgAAAU4gAAFOQAABTlAAAU5wAAFP4AABUHAAAVFQAAFSIAABUwAAAVRQAAFVkAABVwAAAVggAAFcEAABXDAAAVxQAAFccAABXJAAAVygAAFcsAABXMAAAVzQAAFc8AABXRAAAV0gAAFdMAABXVAAAV1gAAFeoAABXzAAAWCAAAFhcAABYsAAAWOgAAFk8AABZjAAAWegAAFowAABaZAAAWoAAAFqIAABakAAAWpgAAFq0AABavAAAWsQAAFrQAABa2AAAWvgAAFsUAABbMAAAXFwAAFzoAABdaAAAXegAAF3wAABd+AAAXgAAAF4IAABeEAAAXhQAAF4YAABeIAAAXiQAAF4sAABeMAAAXjgAAF5AAABeRAAAXkgAAF5QAABeVAAAXmgAAF6cAABesAAAXrgAAF7AAABe1AAAXtwAAF7kAABe7AAAX0AAAF+UAABgKAAAYLgAAGFUAABh5AAAYewAAGH0AABh/AAAYgQAAGIMAABiFAAAYhgAAGIgAABiVAAAYpgAAGKgAABiqAAAYrAAAGK4AABiwAAAYsgAAGLQAABi2AAAYxwAAGMkAABjLAAAYzQAAGM8AABjRAAAY0wAAGNUAABjXAAAY2QAAGPcAABkVAAAZKAAAGTwAABlRAAAZbgAAGYIAABmYAAAZ1wAAGdkAABnbAAAZ3QAAGd8AABngAAAZ4QAAGeIAABnjAAAZ5QAAGecAABnoAAAZ6QAAGesAABnsAAAaKwAAGi0AABovAAAaMQAAGjMAABo0AAAaNQAAGjYAABo3AAAaOQAAGjsAABo8AAAaPQAAGj8AABpAAAAafwAAGoEAABqDAAAahQAAGocAABqIAAAaiQAAGooAABqLAAAajQAAGo8AABqQAAAakQAAGpMAABqUAAAaoQAAGqIAABqjAAAapQAAGuQAABrmAAAa6AAAGuoAABrsAAAa7QAAGu4AABrvAAAa8AAAGvIAABr0AAAa9QAAGvYAABr4AAAa+QAAGzgAABs6AAAbPAAAGz4AABtAAAAbQQAAG0IAABtDAAAbRAAAG0YAABtIAAAbSQAAG0oAABtMAAAbTQAAG04AABuNAAAbjwAAG5EAABuTAAAblQAAG5YAABuXAAAbmAAAG5kAABubAAAbnQAAG54AABufAAAboQAAG6IAABvhAAAb4wAAG+UAABvnAAAb6QAAG+oAABvrAAAb7AAAG+0AABvvAAAb8QAAG/IAABvzAAAb9QAAG/YAABw1AAAcNwAAHDkAABw7AAAcPQAAHD4AABw/AAAcQAAAHEEAABxDAAAcRQAAHEYAABxHAAAcSQAAHEoAABxvAAAckwAAHLoAABzeAAAc4AAAHOIAABzkAAAc5gAAHOgAABzqAAAc6wAAHO0AABz6AAAdCQAAHQsAAB0NAAAdDwAAHREAAB0TAAAdFQAAHRcAAB0mAAAdKAAAHSoAAB0sAAAdLgAAHTAAAB0yAAAdNAAAHTYAAB1WAAAdgQAAHZsAAB20AAAdzgAAHe4AAB4RAAAeUAAAHlIAAB5UAAAeVgAAHlgAAB5ZAAAeWgAAHlsAAB5cAAAeXgAAHmAAAB5hAAAeYgAAHmQAAB5lAAAepAAAHqYAAB6oAAAeqgAAHqwAAB6tAAAergAAHq8AAB6wAAAesgAAHrQAAB61AAAetgAAHrgAAB65AAAe+AAAHvoAAB78AAAe/gAAHwAAAB8BAAAfAgAAHwMAAB8EAAAfBgAAHwgAAB8JAAAfCgAAHwwAAB8NAAAfTAAAH04AAB9QAAAfUgAAH1QAAB9VAAAfVgAAH1cAAB9YAAAfWgAAH1wAAB9dAAAfXgAAH2AAAB9hAAAfZAAAH6MAAB+lAAAfpwAAH6kAAB+rAAAfrAAAH60AAB+uAAAfrwAAH7EAAB+zAAAftAAAH7UAAB+3AAAfuAAAH/cAAB/5AAAf+wAAH/0AAB//AAAgAAAAIAEAACACAAAgAwAAIAUAACAHAAAgCAAAIAkAACALAAAgDAAAIEsAACBNAAAgTwAAIFEAACBTAAAgVAAAIFUAACBWAAAgVwAAIFkAACBbAAAgXAAAIF0AACBfAAAgYAAAIGkAACB3AAAghAAAIJIAACCfAAAgsgAAIMkAACDbAAAhJgAAIUkAACFpAAAhiQAAIYsAACGNAAAhjwAAIZEAACGTAAAhlAAAIZUAACGXAAAhmAAAIZoAACGbAAAhngAAIaAAACGhAAAhogAAIaQAACGlAAAhqgAAIbcAACG8AAAhvgAAIcAAACHFAAAhxwAAIckAACHLAAAh3gAAIgMAACInAAAiTgAAInIAACJ0AAAidgAAIngAACJ6AAAifAAAIn4AACJ/AAAigQAAIo4AACKfAAAioQAAIqMAACKlAAAipwAAIqkAACKrAAAirQAAIq8AACLAAAAiwgAAIsQAACLGAAAiyAAAIsoAACLMAAAizgAAItAAACLSAAAjEQAAIxMAACMVAAAjFwAAIxkAACMaAAAjGwAAIxwAACMdAAAjHwAAIyEAACMiAAAjIwAAIyUAACMmAAAjZQAAI2cAACNpAAAjawAAI20AACNuAAAjbwAAI3AAACNxAAAjcwAAI3UAACN2AAAjdwAAI3kAACN6AAAjuQAAI7sAACO9AAAjvwAAI8EAACPCAAAjwwAAI8QAACPFAAAjxwAAI8kAACPKAAAjywAAI80AACPOAAAj2wAAI9wAACPdAAAj3wAAJB4AACQgAAAkIgAAJCQAACQmAAAkJwAAJCgAACQpAAAkKgAAJCwAACQuAAAkLwAAJDAAACQyAAAkMwAAJHIAACR0AAAkdgAAJHgAACR6AAAkewAAJHwAACR9AAAkfgAAJIAAACSCAAAkgwAAJIQAACSGAAAkhwAAJMYAACTIAAAkygAAJMwAACTOAAAkzwAAJNAAACTRAAAk0gAAJNQAACTWAAAk1wAAJNgAACTaAAAk2wAAJRoAACUcAAAlHgAAJSAAACUiAAAlIwAAJSQAACUlAAAlJgAAJSgAACUqAAAlKwAAJSwAACUuAAAlLwAAJW4AACVwAAAlcgAAJXQAACV2AAAldwAAJXgAACV5AAAlegAAJXwAACV+AAAlfwAAJYAAACWCAAAlgwAAJagAACXMAAAl8wAAJhcAACYZAAAmGwAAJh0AACYfAAAmIQAAJiMAACYkAAAmJgAAJjMAACZCAAAmRAAAJkYAACZIAAAmSgAAJkwAACZOAAAmUAAAJl8AACZhAAAmYwAAJmUAACZnAAAmagAAJm0AACZwAAAmcgAAJoQAACaYAAAmqgAAJr8AACbRAAAm4AAAJv0AACc8AAAnPgAAJ0AAACdCAAAnRAAAJ0UAACdGAAAnRwAAJ0gAACdKAAAnTAAAJ00AACdOAAAnUAAAJ1EAACeQAAAnkgAAJ5QAACeWAAAnmAAAJ5kAACeaAAAnmwAAJ5wAACeeAAAnoAAAJ6EAACeiAAAnpAAAJ6UAACenAAAn5gAAJ+gAACfqAAAn7AAAJ+4AACfvAAAn8AAAJ/EAACfyAAAn9AAAJ/YAACf3AAAn+AAAJ/oAACf7AAAoOgAAKDwAACg+AAAoQAAAKEIAAChDAAAoRAAAKEUAAChGAAAoSAAAKEoAAChLAAAoTAAAKE4AAChPAAAokgAAKLYAACjaAAAo/QAAKSQAAClEAAApawAAKZIAACmyAAAp1gAAKfoAACn8AAAp/gAAKgAAACoCAAAqBAAAKgYAACoJAAAqCwAAKg0AACoQAAAqEgAAKhQAACoXAAAqGQAAKhoAACofAAAqLAAAKi8AACoxAAAqNAAAKjYAACo4AAAqXQAAKoEAACqoAAAqzAAAKs4AACrQAAAq0gAAKtQAACrWAAAq2AAAKtkAACrbAAAq6AAAKvsAACr9AAAq/wAAKwEAACsDAAArBQAAKwcAACsJAAArCwAAKw0AACsgAAArIgAAKyQAACsmAAArKAAAKyoAACssAAArLgAAKzAAACsyAAArNAAAK3MAACt1AAArdwAAK3kAACt7AAArfAAAK30AACt+AAArfwAAK4EAACuDAAArhAAAK4UAACuHAAAriAAAK5EAACuSAAArlAAAK9MAACvVAAAr1wAAK9kAACvbAAAr3AAAK90AACveAAAr3wAAK+EAACvjAAAr5AAAK+UAACvnAAAr6AAALCcAACwpAAAsKwAALC0AACwvAAAsMAAALDEAACwyAAAsMwAALDUAACw3AAAsOAAALDkAACw7AAAsPAAALEUAACxGAAAsSAAALIcAACyJAAAsiwAALI0AACyPAAAskAAALJEAACySAAAskwAALJUAACyXAAAsmAAALJkAACybAAAsnAAALNsAACzdAAAs3wAALOEAACzjAAAs5AAALOUAACzmAAAs5wAALOkAACzrAAAs7AAALO0AACzvAAAs8AAALPkAACz6AAAs/AAALTsAAC09AAAtPwAALUEAAC1DAAAtRAAALUUAAC1GAAAtRwAALUkAAC1LAAAtTAAALU0AAC1PAAAtUAAALY8AAC2RAAAtkwAALZUAAC2XAAAtmAAALZkAAC2aAAAtmwAALZ0AAC2fAAAtoAAALaEAAC2jAAAtpAAALbEAAC2yAAAtswAALbUAAC30AAAt9gAALfgAAC36AAAt/AAALf0AAC3+AAAt/wAALgAAAC4CAAAuBAAALgUAAC4GAAAuCAAALgkAAC5IAAAuSgAALkwAAC5OAAAuUAAALlEAAC5SAAAuUwAALlQAAC5WAAAuWAAALlkAAC5aAAAuXAAALl0AAC5rAAAueAAALqMAAC6lAAAupwAALqkAAC6rAAAurQAALq8AAC6xAAAuswAALrUAAC63AAAuuQAALrsAAC69AAAuvwAALsEAAC7DAAAuxQAALscAAC7JAAAuywAALvYAAC74AAAu+gAALvwAAC7+AAAvAQAALwQAAC8HAAAvCgAALw0AAC8QAAAvEwAALxYAAC8ZAAAvHAAALx8AAC8iAAAvJQAALygAAC8rAAAvLgAALzAAAC9CAAAvXAAAL3EAAC+EAAAvjwAAL5QAAC+jAAAvrQAAL8EAAC/VAAAv7gAAMAEAADAWAAAwKwAAMDoAADBIAAAwTgAAMGoAADCAAAAwhwAAMNIAADD1AAAxFQAAMTUAADE3AAAxOQAAMTsAADE9AAAxPwAAMUAAADFBAAAxQwAAMUQAADFGAAAxRwAAMUkAADFLAAAxTAAAMU0AADFPAAAxUAAAMVUAADFiAAAxZwAAMWkAADFrAAAxcAAAMXIAADF0AAAxdgAAMZsAADG/AAAx5gAAMgoAADIMAAAyDgAAMhAAADISAAAyFAAAMhYAADIXAAAyGQAAMiYAADI3AAAyOQAAMjsAADI9AAAyPwAAMkEAADJDAAAyRQAAMkcAADJYAAAyWgAAMlwAADJeAAAyYAAAMmIAADJkAAAyZgAAMmgAADJqAAAyqQAAMqsAADKtAAAyrwAAMrEAADKyAAAyswAAMrQAADK1AAAytwAAMrkAADK6AAAyuwAAMr0AADK+AAAy/QAAMv8AADMBAAAzAwAAMwUAADMGAAAzBwAAMwgAADMJAAAzCwAAMw0AADMOAAAzDwAAMxEAADMSAAAzUQAAM1MAADNVAAAzVwAAM1kAADNaAAAzWwAAM1wAADNdAAAzXwAAM2EAADNiAAAzYwAAM2UAADNmAAAzcwAAM3QAADN1AAAzdwAAM7YAADO4AAAzugAAM7wAADO+AAAzvwAAM8AAADPBAAAzwgAAM8QAADPGAAAzxwAAM8gAADPKAAAzywAANAoAADQMAAA0DgAANBAAADQSAAA0EwAANBQAADQVAAA0FgAANBgAADQaAAA0GwAANBwAADQeAAA0HwAANF4AADRgAAA0YgAANGQAADRmAAA0ZwAANGgAADRpAAA0agAANGwAADRuAAA0bwAANHAAADRyAAA0cwAANLIAADS0AAA0tgAANLgAADS6AAA0uwAANLwAADS9AAA0vgAANMAAADTCAAA0wwAANMQAADTGAAA0xwAANQYAADUIAAA1CgAANQwAADUOAAA1DwAANRAAADURAAA1EgAANRQAADUWAAA1FwAANRgAADUaAAA1GwAANUAAADVkAAA1iwAANa8AADWxAAA1swAANbUAADW3AAA1uQAANbsAADW8AAA1vgAANcsAADXaAAA13AAANd4AADXgAAA14gAANeQAADXmAAA16AAANfcAADX5AAA1+wAANf0AADX/AAA2AQAANgMAADYFAAA2BwAANkYAADZIAAA2SgAANkwAADZOAAA2TwAANlAAADZRAAA2UgAANlQAADZWAAA2VwAANlgAADZaAAA2WwAANpoAADacAAA2ngAANqAAADaiAAA2owAANqQAADalAAA2pgAANqgAADaqAAA2qwAANqwAADauAAA2rwAANu4AADbwAAA28gAANvQAADb2AAA29wAANvgAADb5AAA2+gAANvwAADb+AAA2/wAANwAAADcCAAA3AwAAN0IAADdEAAA3RgAAN0gAADdKAAA3SwAAN0wAADdNAAA3TgAAN1AAADdSAAA3UwAAN1QAADdWAAA3VwAAN5YAADeYAAA3mgAAN5wAADeeAAA3nwAAN6AAADehAAA3ogAAN6QAADemAAA3pwAAN6gAADeqAAA3qwAAN+oAADfsAAA37gAAN/AAADfyAAA38wAAN/QAADf1AAA39gAAN/gAADf6AAA3+wAAN/wAADf+AAA3/wAAOD4AADhAAAA4QgAAOEQAADhGAAA4RwAAOEgAADhJAAA4SgAAOEwAADhOAAA4TwAAOFAAADhSAAA4UwAAOJ4AADjBAAA44QAAOQEAADkDAAA5BQAAOQcAADkJAAA5CwAAOQwAADkNAAA5DwAAORAAADkSAAA5EwAAORUAADkXAAA5GAAAORkAADkbAAA5HAAAOSEAADkuAAA5MwAAOTUAADk3AAA5PAAAOT4AADlAAAA5QgAAOWcAADmLAAA5sgAAOdYAADnYAAA52gAAOdwAADneAAA54AAAOeIAADnjAAA55QAAOfIAADoDAAA6BQAAOgcAADoJAAA6CwAAOg0AADoPAAA6EQAAOhMAADokAAA6JgAAOigAADoqAAA6LAAAOi4AADowAAA6MgAAOjQAADo2AAA6dQAAOncAADp5AAA6ewAAOn0AADp+AAA6fwAAOoAAADqBAAA6gwAAOoUAADqGAAA6hwAAOokAADqKAAA6yQAAOssAADrNAAA6zwAAOtEAADrSAAA60wAAOtQAADrVAAA61wAAOtkAADraAAA62wAAOt0AADreAAA7HQAAOx8AADshAAA7IwAAOyUAADsmAAA7JwAAOygAADspAAA7KwAAOy0AADsuAAA7LwAAOzEAADsyAAA7PwAAO0AAADtBAAA7QwAAO4IAADuEAAA7hgAAO4gAADuKAAA7iwAAO4wAADuNAAA7jgAAO5AAADuSAAA7kwAAO5QAADuWAAA7lwAAO9YAADvYAAA72gAAO9wAADveAAA73wAAO+AAADvhAAA74gAAO+QAADvmAAA75wAAO+gAADvqAAA76wAAPCoAADwsAAA8LgAAPDAAADwyAAA8MwAAPDQAADw1AAA8NgAAPDgAADw6AAA8OwAAPDwAADw+AAA8PwAAPH4AADyAAAA8ggAAPIQAADyGAAA8hwAAPIgAADyJAAA8igAAPIwAADyOAAA8jwAAPJAAADySAAA8kwAAPNIAADzUAAA81gAAPNgAADzaAAA82wAAPNwAADzdAAA83gAAPOAAADziAAA84wAAPOQAADzmAAA85wAAPQwAAD0wAAA9VwAAPXsAAD19AAA9fwAAPYEAAD2DAAA9hQAAPYcAAD2IAAA9igAAPZcAAD2mAAA9qAAAPaoAAD2sAAA9rgAAPbAAAD2yAAA9tAAAPcMAAD3FAAA9xwAAPckAAD3LAAA9zQAAPc8AAD3RAAA90wAAPhIAAD4UAAA+FgAAPhgAAD4aAAA+GwAAPhwAAD4dAAA+HgAAPiAAAD4iAAA+IwAAPiQAAD4mAAA+JwAAPioAAD5pAAA+awAAPm0AAD5vAAA+cQAAPnIAAD5zAAA+dAAAPnUAAD53AAA+eQAAPnoAAD57AAA+fQAAPn4AAD69AAA+vwAAPsEAAD7DAAA+xQAAPsYAAD7HAAA+yAAAPskAAD7LAAA+zQAAPs4AAD7PAAA+0QAAPtIAAD8RAAA/EwAAPxUAAD8XAAA/GQAAPxoAAD8bAAA/HAAAPx0AAD8fAAA/IQAAPyIAAD8jAAA/JQAAPyYAAD8pAAA/aAAAP2oAAD9sAAA/bgAAP3AAAD9xAAA/cgAAP3MAAD90AAA/dgAAP3gAAD95AAA/egAAP3wAAD99AAA/vAAAP74AAD/AAAA/wgAAP8QAAD/FAAA/xgAAP8cAAD/IAAA/ygAAP8wAAD/NAAA/zgAAP9AAAD/RAABAEAAAQBIAAEAUAABAFgAAQBgAAEAZAABAGgAAQBsAAEAcAABAHgAAQCAAAEAhAABAIgAAQCQAAEAlAABAcAAAQJMAAECzAABA0wAAQNUAAEDXAABA2QAAQNsAAEDdAABA3gAAQN8AAEDhAABA4gAAQOQAAEDlAABA5wAAQOkAAEDqAABA6wAAQO0AAEDuAABA8wAAQQAAAEEFAABBBwAAQQkAAEEOAABBEAAAQRIAAEEUAABBOQAAQV0AAEGEAABBqAAAQaoAAEGsAABBrgAAQbAAAEGyAABBtAAAQbUAAEG3AABBxAAAQdUAAEHXAABB2QAAQdsAAEHdAABB3wAAQeEAAEHjAABB5QAAQfYAAEH4AABB+gAAQfwAAEH+AABCAAAAQgIAAEIEAABCBgAAQggAAEJHAABCSQAAQksAAEJNAABCTwAAQlAAAEJRAABCUgAAQlMAAEJVAABCVwAAQlgAAEJZAABCWwAAQlwAAEKbAABCnQAAQp8AAEKhAABCowAAQqQAAEKlAABCpgAAQqcAAEKpAABCqwAAQqwAAEKtAABCrwAAQrAAAELvAABC8QAAQvMAAEL1AABC9wAAQvgAAEL5AABC+gAAQvsAAEL9AABC/wAAQwAAAEMBAABDAwAAQwQAAEMRAABDEgAAQxMAAEMVAABDVAAAQ1YAAENYAABDWgAAQ1wAAENdAABDXgAAQ18AAENgAABDYgAAQ2QAAENlAABDZgAAQ2gAAENpAABDqAAAQ6oAAEOsAABDrgAAQ7AAAEOxAABDsgAAQ7MAAEO0AABDtgAAQ7gAAEO5AABDugAAQ7wAAEO9AABD/AAAQ/4AAEQAAABEAgAARAQAAEQFAABEBgAARAcAAEQIAABECgAARAwAAEQNAABEDgAARBAAAEQRAABEUAAARFIAAERUAABEVgAARFgAAERZAABEWgAARFsAAERcAABEXgAARGAAAERhAABEYgAARGQAAERlAABEpAAARKYAAESoAABEqgAARKwAAEStAABErgAARK8AAESwAABEsgAARLQAAES1AABEtgAARLgAAES5AABE3gAARQIAAEUpAABFTQAARU8AAEVRAABFUwAARVUAAEVXAABFWQAARVoAAEVcAABFaQAARXgAAEV6AABFfAAARX4AAEWAAABFggAARYQAAEWGAABFlQAARZcAAEWZAABFmwAARZ0AAEWfAABFoQAARaMAAEWlAABF5AAAReYAAEXoAABF6gAARewAAEXtAABF7gAARe8AAEXwAABF8gAARfQAAEX1AABF9gAARfgAAEX5AABGOAAARjoAAEY8AABGPgAARkAAAEZBAABGQgAARkMAAEZEAABGRgAARkgAAEZJAABGSgAARkwAAEZNAABGjAAARo4AAEaQAABGkgAARpQAAEaVAABGlgAARpcAAEaYAABGmgAARpwAAEadAABGngAARqAAAEahAABG4AAARuIAAEbkAABG5gAARugAAEbpAABG6gAARusAAEbsAABG7gAARvAAAEbxAABG8gAARvQAAEb1AABG+AAARzcAAEc5AABHOwAARz0AAEc/AABHQAAAR0EAAEdCAABHQwAAR0UAAEdHAABHSAAAR0kAAEdLAABHTAAAR4sAAEeNAABHjwAAR5EAAEeTAABHlAAAR5UAAEeWAABHlwAAR5kAAEebAABHnAAAR50AAEefAABHoAAAR7wAAEf7AABH/QAAR/8AAEgBAABIAwAASAQAAEgFAABIBgAASAcAAEgJAABICwAASAwAAEgNAABIDwAASBAAAEhbAABIfgAASJ4AAEi+AABIwAAASMIAAEjEAABIxgAASMgAAEjJAABIygAASMwAAEjNAABIzwAASNAAAEjTAABI1QAASNYAAEjXAABI2QAASNoAAEjfAABI7AAASPEAAEjzAABI9QAASPoAAEj8AABI/gAASQAAAEklAABJSQAASXAAAEmUAABJlgAASZgAAEmaAABJnAAASZ4AAEmgAABJoQAASaMAAEmwAABJwQAAScMAAEnFAABJxwAASckAAEnLAABJzQAASc8AAEnRAABJ4gAASeQAAEnmAABJ6AAASeoAAEnsAABJ7gAASfAAAEnyAABJ9AAASjMAAEo1AABKNwAASjkAAEo7AABKPAAASj0AAEo+AABKPwAASkEAAEpDAABKRAAASkUAAEpHAABKSAAASocAAEqJAABKiwAASo0AAEqPAABKkAAASpEAAEqSAABKkwAASpUAAEqXAABKmAAASpkAAEqbAABKnAAAStsAAErdAABK3wAASuEAAErjAABK5AAASuUAAErmAABK5wAASukAAErrAABK7AAASu0AAErvAABK8AAASv0AAEr+AABK/wAASwEAAEtAAABLQgAAS0QAAEtGAABLSAAAS0kAAEtKAABLSwAAS0wAAEtOAABLUAAAS1EAAEtSAABLVAAAS1UAAEuUAABLlgAAS5gAAEuaAABLnAAAS50AAEueAABLnwAAS6AAAEuiAABLpAAAS6UAAEumAABLqAAAS6kAAEvoAABL6gAAS+wAAEvuAABL8AAAS/EAAEvyAABL8wAAS/QAAEv2AABL+AAAS/kAAEv6AABL/AAAS/0AAEw8AABMPgAATEAAAExCAABMRAAATEUAAExGAABMRwAATEgAAExKAABMTAAATE0AAExOAABMUAAATFEAAEyQAABMkgAATJQAAEyWAABMmAAATJkAAEyaAABMmwAATJwAAEyeAABMoAAATKEAAEyiAABMpAAATKUAAEzKAABM7gAATRUAAE05AABNOwAATT0AAE0/AABNQQAATUMAAE1FAABNRgAATUkAAE1WAABNZQAATWcAAE1pAABNawAATW0AAE1vAABNcQAATXMAAE2CAABNhQAATYgAAE2LAABNjgAATZEAAE2UAABNlwAATZkAAE3YAABN2gAATdwAAE3eAABN4AAATeEAAE3iAABN4wAATeQAAE3mAABN6AAATekAAE3qAABN7AAATe0AAE4sAABOLgAATjEAAE4zAABONQAATjYAAE43AABOOAAATjkAAE47AABOPQAATj4AAE4/AABOQQAATkIAAE5EAABOgwAAToUAAE6HAABOiQAATosAAE6MAABOjQAATo4AAE6PAABOkQAATpMAAE6UAABOlQAATpcAAE6YAABO1wAATtkAAE7bAABO3QAATt8AAE7gAABO4QAATuIAAE7jAABO5QAATucAAE7oAABO6QAATusAAE7sAABPKwAATy0AAE8vAABPMQAATzMAAE80AABPNQAATzYAAE83AABPOQAATzsAAE88AABPPQAATz8AAE9AAABPfwAAT4EAAE+DAABPhQAAT4cAAE+IAABPiQAAT4oAAE+LAABPjQAAT48AAE+QAABPkQAAT5MAAE+UAABP0wAAT9UAAE/XAABP2QAAT9sAAE/cAABP3QAAT94AAE/fAABP4QAAT+MAAE/kAABP5QAAT+cAAE/oAABP8QAAUAQAAFARAABQJAAAUDEAAFBEAABQWwAAUG0AAFC4AABQ2wAAUPsAAFEbAABRHQAAUR8AAFEhAABRIwAAUSUAAFEmAABRJwAAUSoAAFErAABRLQAAUS4AAFEwAABRMgAAUTMAAFE0AABRNwAAUTgAAFE9AABRSgAAUU8AAFFRAABRUwAAUVgAAFFbAABRXgAAUWAAAFGFAABRqQAAUdAAAFH0AABR9wAAUfkAAFH7AABR/QAAUf8AAFIBAABSAgAAUgUAAFISAABSIwAAUiUAAFInAABSKQAAUisAAFItAABSLwAAUjEAAFIzAABSRAAAUkcAAFJKAABSTQAAUlAAAFJTAABSVgAAUlkAAFJcAABSXgAAUp0AAFKfAABSoQAAUqMAAFKmAABSpwAAUqgAAFKpAABSqgAAUqwAAFKuAABSrwAAUrAAAFKyAABSswAAUvIAAFL0AABS9gAAUvgAAFL7AABS/AAAUv0AAFL+AABS/wAAUwEAAFMDAABTBAAAUwUAAFMHAABTCAAAU0cAAFNJAABTTAAAU04AAFNRAABTUgAAU1MAAFNUAABTVQAAU1cAAFNZAABTWgAAU1sAAFNdAABTXgAAU2sAAFNsAABTbQAAU28AAFOuAABTsAAAU7IAAFO0AABTtwAAU7gAAFO5AABTugAAU7sAAFO9AABTvwAAU8AAAFPBAABTwwAAU8QAAFQDAABUBQAAVAcAAFQJAABUDAAAVA0AAFQOAABUDwAAVBAAAFQSAABUFAAAVBUAAFQWAABUGAAAVBkAAFRYAABUWgAAVFwAAFReAABUYQAAVGIAAFRjAABUZAAAVGUAAFRnAABUaQAAVGoAAFRrAABUbQAAVG4AAFStAABUrwAAVLEAAFSzAABUtgAAVLcAAFS4AABUuQAAVLoAAFS8AABUvgAAVL8AAFTAAABUwgAAVMMAAFUCAABVBAAAVQYAAFUIAABVCwAAVQwAAFUNAABVDgAAVQ8AAFURAABVEwAAVRQAAFUVAABVFwAAVRgAAFU9AABVYQAAVYgAAFWsAABVrwAAVbEAAFWzAABVtQAAVbcAAFW5AABVugAAVb0AAFXKAABV2QAAVdsAAFXdAABV3wAAVeEAAFXjAABV5QAAVecAAFX2AABV+QAAVfwAAFX/AABWAgAAVgUAAFYIAABWCwAAVg0AAFZMAABWTgAAVlAAAFZSAABWVQAAVlYAAFZXAABWWAAAVlkAAFZbAABWXQAAVl4AAFZfAABWYQAAVmIAAFahAABWowAAVqUAAFanAABWqgAAVqsAAFasAABWrQAAVq4AAFawAABWsgAAVrMAAFa0AABWtgAAVrcAAFb2AABW+AAAVvoAAFb8AABW/wAAVwAAAFcBAABXAgAAVwMAAFcFAABXBwAAVwgAAFcJAABXCwAAVwwAAFdLAABXTQAAV08AAFdRAABXVAAAV1UAAFdWAABXVwAAV1gAAFdaAABXXAAAV10AAFdeAABXYAAAV2EAAFegAABXogAAV6QAAFemAABXqQAAV6oAAFerAABXrAAAV60AAFevAABXsQAAV7IAAFezAABXtQAAV7YAAFf1AABX9wAAV/kAAFf7AABX/gAAV/8AAFgAAABYAQAAWAIAAFgEAABYBgAAWAcAAFgIAABYCgAAWAsAAFhKAABYTAAAWE4AAFhQAABYUwAAWFQAAFhVAABYVgAAWFcAAFhZAABYWwAAWFwAAFhdAABYXwAAWGAAAFirAABYzgAAWO4AAFkOAABZEAAAWRIAAFkUAABZFgAAWRgAAFkZAABZGgAAWR0AAFkeAABZIAAAWSEAAFkjAABZJQAAWSYAAFknAABZKgAAWSsAAFkwAABZPQAAWUIAAFlEAABZRgAAWUsAAFlOAABZUQAAWVMAAFl4AABZnAAAWcMAAFnnAABZ6gAAWewAAFnuAABZ8AAAWfIAAFn0AABZ9QAAWfgAAFoFAABaFgAAWhgAAFoaAABaHAAAWh4AAFogAABaIgAAWiQAAFomAABaNwAAWjoAAFo9AABaQAAAWkMAAFpGAABaSQAAWkwAAFpPAABaUQAAWpAAAFqSAABalAAAWpYAAFqZAABamgAAWpsAAFqcAABanQAAWp8AAFqhAABaogAAWqMAAFqlAABapgAAWuUAAFrnAABa6QAAWusAAFruAABa7wAAWvAAAFrxAABa8gAAWvQAAFr2AABa9wAAWvgAAFr6AABa+wAAWzoAAFs8AABbPwAAW0EAAFtEAABbRQAAW0YAAFtHAABbSAAAW0oAAFtMAABbTQAAW04AAFtQAABbUQAAW14AAFtfAABbYAAAW2IAAFuhAABbowAAW6UAAFunAABbqgAAW6sAAFusAABbrQAAW64AAFuwAABbsgAAW7MAAFu0AABbtgAAW7cAAFv2AABb+AAAW/oAAFv8AABb/wAAXAAAAFwBAABcAgAAXAMAAFwFAABcBwAAXAgAAFwJAABcCwAAXAwAAFxLAABcTQAAXE8AAFxRAABcVAAAXFUAAFxWAABcVwAAXFgAAFxaAABcXAAAXF0AAFxeAABcYAAAXGEAAFygAABcogAAXKQAAFymAABcqQAAXKoAAFyrAABcrAAAXK0AAFyvAABcsQAAXLIAAFyzAABctQAAXLYAAFz1AABc9wAAXPkAAFz7AABc/gAAXP8AAF0AAABdAQAAXQIAAF0EAABdBgAAXQcAAF0IAABdCgAAXQsAAF0wAABdVAAAXXsAAF2fAABdogAAXaQAAF2mAABdqAAAXaoAAF2sAABdrQAAXbAAAF29AABdzAAAXc4AAF3QAABd0gAAXdQAAF3WAABd2AAAXdoAAF3pAABd7AAAXe8AAF3yAABd9QAAXfgAAF37AABd/gAAXgAAAF4/AABeQQAAXkMAAF5FAABeSAAAXkkAAF5KAABeSwAAXkwAAF5OAABeUAAAXlEAAF5SAABeVAAAXlUAAF6UAABelgAAXpgAAF6aAABenQAAXp4AAF6fAABeoAAAXqEAAF6jAABepQAAXqYAAF6nAABeqQAAXqoAAF7pAABe6wAAXu0AAF7vAABe8gAAXvMAAF70AABe9QAAXvYAAF74AABe+gAAXvsAAF78AABe/gAAXv8AAF8+AABfQAAAX0IAAF9EAABfRwAAX0gAAF9JAABfSgAAX0sAAF9NAABfTwAAX1AAAF9RAABfUwAAX1QAAF+TAABflQAAX5cAAF+ZAABfnAAAX50AAF+eAABfnwAAX6AAAF+iAABfpAAAX6UAAF+mAABfqAAAX6kAAF/oAABf6gAAX+wAAF/uAABf8QAAX/IAAF/zAABf9AAAX/UAAF/3AABf+QAAX/oAAF/7AABf/QAAX/4AAGA9AABgPwAAYEEAAGBDAABgRgAAYEcAAGBIAABgSQAAYEoAAGBMAABgTgAAYE8AAGBQAABgUgAAYFMAAGCeAABgwQAAYOEAAGEBAABhAwAAYQUAAGEHAABhCQAAYQsAAGEMAABhDQAAYRAAAGERAABhEwAAYRQAAGEWAABhGAAAYRkAAGEaAABhHQAAYR4AAGEjAABhMAAAYTUAAGE3AABhOQAAYT4AAGFBAABhRAAAYUYAAGFrAABhjwAAYbYAAGHaAABh3QAAYd8AAGHhAABh4wAAYeUAAGHnAABh6AAAYesAAGH4AABiCQAAYgsAAGINAABiDwAAYhEAAGITAABiFQAAYhcAAGIZAABiKgAAYi0AAGIwAABiMwAAYjYAAGI5AABiPAAAYj8AAGJCAABiRAAAYoMAAGKFAABihwAAYokAAGKMAABijQAAYo4AAGKPAABikAAAYpIAAGKUAABilQAAYpYAAGKYAABimQAAYtgAAGLaAABi3AAAYt4AAGLhAABi4gAAYuMAAGLkAABi5QAAYucAAGLpAABi6gAAYusAAGLtAABi7gAAYy0AAGMvAABjMgAAYzQAAGM3AABjOAAAYzkAAGM6AABjOwAAYz0AAGM/AABjQAAAY0EAAGNDAABjRAAAY1EAAGNSAABjUwAAY1UAAGOUAABjlgAAY5gAAGOaAABjnQAAY54AAGOfAABjoAAAY6EAAGOjAABjpQAAY6YAAGOnAABjqQAAY6oAAGPpAABj6wAAY+0AAGPvAABj8gAAY/MAAGP0AABj9QAAY/YAAGP4AABj+gAAY/sAAGP8AABj/gAAY/8AAGQ+AABkQAAAZEIAAGREAABkRwAAZEgAAGRJAABkSgAAZEsAAGRNAABkTwAAZFAAAGRRAABkUwAAZFQAAGSTAABklQAAZJcAAGSZAABknAAAZJ0AAGSeAABknwAAZKAAAGSiAABkpAAAZKUAAGSmAABkqAAAZKkAAGToAABk6gAAZOwAAGTuAABk8QAAZPIAAGTzAABk9AAAZPUAAGT3AABk+QAAZPoAAGT7AABk/QAAZP4AAGUjAABlRwAAZW4AAGWSAABllQAAZZcAAGWZAABlmwAAZZ0AAGWfAABloAAAZaMAAGWwAABlvwAAZcEAAGXDAABlxQAAZccAAGXJAABlywAAZc0AAGXcAABl3wAAZeIAAGXlAABl6AAAZesAAGXuAABl8QAAZfMAAGYyAABmNAAAZjYAAGY4AABmOwAAZjwAAGY9AABmPgAAZj8AAGZBAABmQwAAZkQAAGZFAABmRwAAZkgAAGaHAABmiQAAZosAAGaNAABmkAAAZpEAAGaSAABmkwAAZpQAAGaWAABmmAAAZpkAAGaaAABmnAAAZp0AAGbcAABm3gAAZuAAAGbiAABm5QAAZuYAAGbnAABm6AAAZukAAGbrAABm7QAAZu4AAGbvAABm8QAAZvIAAGcxAABnMwAAZzUAAGc3AABnOgAAZzsAAGc8AABnPQAAZz4AAGdAAABnQgAAZ0MAAGdEAABnRgAAZ0cAAGeGAABniAAAZ4oAAGeMAABnjwAAZ5AAAGeRAABnkgAAZ5MAAGeVAABnlwAAZ5gAAGeZAABnmwAAZ5wAAGfbAABn3QAAZ+AAAGfiAABn5QAAZ+YAAGfnAABn6AAAZ+kAAGfrAABn7QAAZ+4AAGfvAABn8QAAZ/IAAGgOAABoTQAAaE8AAGhRAABoUwAAaFYAAGhXAABoWAAAaFkAAGhaAABoXAAAaF4AAGhfAABoYAAAaGIAAGhjAABorgAAaNEAAGjxAABpEQAAaRMAAGkVAABpFwAAaRkAAGkbAABpHAAAaR0AAGkgAABpIQAAaSMAAGkkAABpJgAAaSgAAGkpAABpKgAAaS0AAGkuAABpNwAAaUQAAGlJAABpSwAAaU0AAGlSAABpVQAAaVgAAGlaAABpfwAAaaMAAGnKAABp7gAAafEAAGnzAABp9QAAafcAAGn5AABp+wAAafwAAGn/AABqDAAAah0AAGofAABqIQAAaiMAAGolAABqJwAAaikAAGorAABqLQAAaj4AAGpBAABqRAAAakcAAGpKAABqTQAAalAAAGpTAABqVgAAalgAAGqXAABqmQAAapsAAGqdAABqoAAAaqEAAGqiAABqowAAaqQAAGqmAABqqAAAaqkAAGqqAABqrAAAaq0AAGrsAABq7gAAavAAAGryAABq9QAAavYAAGr3AABq+AAAavkAAGr7AABq/QAAav4AAGr/AABrAQAAawIAAGtBAABrQwAAa0YAAGtIAABrSwAAa0wAAGtNAABrTgAAa08AAGtRAABrUwAAa1QAAGtVAABrVwAAa1gAAGtlAABrZgAAa2cAAGtpAABrqAAAa6oAAGusAABrrgAAa7EAAGuyAABrswAAa7QAAGu1AABrtwAAa7kAAGu6AABruwAAa70AAGu+AABr/QAAa/8AAGwBAABsAwAAbAYAAGwHAABsCAAAbAkAAGwKAABsDAAAbA4AAGwPAABsEAAAbBIAAGwTAABsUgAAbFQAAGxWAABsWAAAbFsAAGxcAABsXQAAbF4AAGxfAABsYQAAbGMAAGxkAABsZQAAbGcAAGxoAABspwAAbKkAAGyrAABsrQAAbLAAAGyxAABssgAAbLMAAGy0AABstgAAbLgAAGy5AABsugAAbLwAAGy9AABs/AAAbP4AAG0AAABtAgAAbQUAAG0GAABtBwAAbQgAAG0JAABtCwAAbQ0AAG0OAABtDwAAbREAAG0SAABtNwAAbVsAAG2CAABtpgAAbakAAG2rAABtrQAAba8AAG2xAABtswAAbbQAAG23AABtxAAAbdMAAG3VAABt1wAAbdkAAG3bAABt3QAAbd8AAG3hAABt8AAAbfMAAG32AABt+QAAbfwAAG3/AABuAgAAbgUAAG4HAABuRgAAbkgAAG5KAABuTAAAbk8AAG5QAABuUQAAblIAAG5TAABuVQAAblcAAG5YAABuWQAAblsAAG5cAABumwAAbp0AAG6fAABuoQAAbqQAAG6lAABupgAAbqcAAG6oAABuqgAAbqwAAG6tAABurgAAbrAAAG6xAABu8AAAbvIAAG70AABu9gAAbvkAAG76AABu+wAAbvwAAG79AABu/wAAbwEAAG8CAABvAwAAbwUAAG8GAABvRQAAb0cAAG9JAABvSwAAb04AAG9PAABvUAAAb1EAAG9SAABvVAAAb1YAAG9XAABvWAAAb1oAAG9bAABvmgAAb5wAAG+eAABvoAAAb6MAAG+kAABvpQAAb6YAAG+nAABvqQAAb6sAAG+sAABvrQAAb68AAG+wAABv7wAAb/EAAG/zAABv9QAAb/gAAG/5AABv+gAAb/sAAG/8AABv/gAAcAAAAHABAABwAgAAcAQAAHAFAABwRAAAcEYAAHBIAABwSgAAcE0AAHBOAABwTwAAcFAAAHBRAABwUwAAcFUAAHBWAABwVwAAcFkAAHBaAABwpQAAcMgAAHDoAABxCAAAcQoAAHEMAABxDgAAcRAAAHESAABxEwAAcRQAAHEXAABxGAAAcRoAAHEbAABxHQAAcR8AAHEgAABxIQAAcSQAAHElAABxKgAAcTcAAHE8AABxPgAAcUAAAHFFAABxSAAAcUsAAHFNAABxcgAAcZYAAHG9AABx4QAAceQAAHHmAABx6AAAceoAAHHsAABx7gAAce8AAHHyAABx/wAAchAAAHISAAByFAAAchYAAHIYAAByGgAAchwAAHIeAAByIAAAcjEAAHI0AAByNwAAcjoAAHI9AAByQAAAckMAAHJGAABySQAAcksAAHKKAAByjAAAco4AAHKQAABykwAAcpQAAHKVAABylgAAcpcAAHKZAABymwAAcpwAAHKdAABynwAAcqAAAHLfAABy4QAAcuMAAHLlAABy6AAAcukAAHLqAABy6wAAcuwAAHLuAABy8AAAcvEAAHLyAABy9AAAcvUAAHM0AABzNgAAczkAAHM7AABzPgAAcz8AAHNAAABzQQAAc0IAAHNEAABzRgAAc0cAAHNIAABzSgAAc0sAAHNYAABzWQAAc1oAAHNcAABzmwAAc50AAHOfAABzoQAAc6QAAHOlAABzpgAAc6cAAHOoAABzqgAAc6wAAHOtAABzrgAAc7AAAHOxAABz8AAAc/IAAHP0AABz9gAAc/kAAHP6AABz+wAAc/wAAHP9AABz/wAAdAEAAHQCAAB0AwAAdAUAAHQGAAB0RQA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AlwMAAJcGAACXBwAAlwgAAJcJAACXCgAAlwwAAJcOAACXDwAAlxAAAJcSAACXEwAAl1IAAJdUAACXVgAAl1gAAJdbAACXXAAAl10AAJdeAACXXwAAl2EAAJdjAACXZAAAl2UAAJdnAACXaAAAl6cAAJepAACXrAAAl64AAJexAACXsgAAl7MAAJe0AACXtQAAl7cAAJe5AACXugAAl7sAAJe9AACXvgAAl8sAAJfMAACXzQAAl88AAJgOAACYEAAAmBIAAJgUAACYFwAAmBgAAJgZAACYGgAAmBsAAJgdAACYHwAAmCAAAJghAACYIwAAmCQAAJhjAACYZQAAmGcAAJhpAACYbAAAmG0AAJhuAACYbwAAmHAAAJhyAACYdAAAmHUAAJh2AACYeAAAmHkAAJi4AACYugAAmLwAAJi+AACYwQAAmMIAAJjDAACYxAAAmMUAAJjHAACYyQAAmMoAAJjLAACYzQAAmM4AAJkNAACZDwAAmREAAJkTAACZFgAAmRcAAJkYAACZGQAAmRoAAJkcAACZHgAAmR8AAJkgAACZIgAAmSMAAJliAACZZAAAmWYAAJloAACZawAAmWwAAJltAACZbgAAmW8AAJlxAACZcwAAmXQAAJl1AACZdwAAmXgAAJmdAACZwQAAmegAAJoMAACaDwAAmhEAAJoTAACaFQAAmhcAAJoZAACaGgAAmh0AAJoqAACaOQAAmjsAAJo9AACaPwAAmkEAAJpDAACaRQAAmkcAAJpWAACaWQAAmlwAAJpfAACaYgAAmmUAAJpoAACaawAAmm0AAJqsAACargAAmrAAAJqyAACatQAAmrYAAJq3AACauAAAmrkAAJq7AACavQAAmr4AAJq/AACawQAAmsIAAJsBAACbAwAAmwUAAJsHAACbCgAAmwsAAJsMAACbDQAAmw4AAJsQAACbEgAAmxMAAJsUAACbFgAAmxcAAJtWAACbWAAAm1oAAJtcAACbXwAAm2AAAJthAACbYgAAm2MAAJtlAACbZwAAm2gAAJtpAACbawAAm2wAAJurAACbrQAAm68AAJuxAACbtAAAm7UAAJu2AACbtwAAm7gAAJu6AACbvAAAm70AAJu+AACbwAAAm8EAAJwAAACcAgAAnAQAAJwGAACcCQAAnAoAAJwLAACcDAAAnA0AAJwPAACcEQAAnBIAAJwTAACcFQAAnBYAAJxVAACcVwAAnFkAAJxbAACcXgAAnF8AAJxgAACcYQAAnGIAAJxkAACcZgAAnGcAAJxoAACcagAAnGsAAJyqAACcrAAAnK4AAJywAACcswAAnLQAAJy1AACctgAAnLcAAJy5AACcuwAAnLwAAJy9AACcvwAAnMAAAJ0LAACdLgAAnU4AAJ1uAACdcAAAnXIAAJ10AACddgAAnXkAAJ16AACdewAAnX4AAJ1/AACdgQAAnYIAAJ2EAACdhwAAnYgAAJ2JAACdjAAAnY0AAJ2SAACdnwAAnaQAAJ2mAACdqAAAna0AAJ2wAACdswAAnbUAAJ3aAACd/gAAniUAAJ5JAACeTAAAnk4AAJ5QAACeUgAAnlQAAJ5WAACeVwAAnloAAJ5nAACeeAAAnnoAAJ58AACefgAAnoAAAJ6CAACehAAAnoYAAJ6IAACemQAAnpwAAJ6fAACeogAAnqUAAJ6oAACeqwAAnq4AAJ6xAACeswAAnvIAAJ70AACe9gAAnvgAAJ77AACe/AAAnv0AAJ7+AACe/wAAnwEAAJ8DAACfBAAAnwUAAJ8HAACfCAAAn0cAAJ9JAACfSwAAn00AAJ9QAACfUQAAn1IAAJ9TAACfVAAAn1YAAJ9YAACfWQAAn1oAAJ9cAACfXQAAn5wAAJ+eAACfoQAAn6MAAJ+mAACfpwAAn6gAAJ+pAACfqgAAn6wAAJ+uAACfrwAAn7AAAJ+yAACfswAAn8AAAJ/BAACfwgAAn8QAAKADAACgBQAAoAcAAKAJAACgDAAAoA0AAKAOAACgDwAAoBAAAKASAACgFAAAoBUAAKAWAACgGAAAoBkAAKBYAACgWgAAoFwAAKBeAACgYQAAoGIAAKBjAACgZAAAoGUAAKBnAACgaQAAoGoAAKBrAACgbQAAoG4AAKCtAACgrwAAoLEAAKCzAACgtgAAoLcAAKC4AACguQAAoLoAAKC8AACgvgAAoL8AAKDAAACgwgAAoMMAAKECAAChBAAAoQYAAKEIAAChCwAAoQwAAKENAAChDgAAoQ8AAKERAAChEwAAoRQAAKEVAAChFwAAoRgAAKFXAAChWQAAoVsAAKFdAAChYAAAoWEAAKFiAAChYwAAoWQAAKFmAAChaAAAoWkAAKFqAAChbAAAoW0AAKGSAAChtgAAod0AAKIBAACiBAAAogYAAKIIAACiCgAAogwAAKIOAACiDwAAohIAAKIfAACiLgAAojAAAKIyAACiNAAAojYAAKI4AACiOgAAojwAAKJLAACiTgAAolEAAKJUAACiVwAAoloAAKJdAACiYAAAomIAAKKhAACiowAAoqUAAKKnAACiqgAAoqsAAKKsAACirQAAoq4AAKKwAACisgAAorMAAKK0AACitgAAorcAAKL2AACi+AAAovoAAKL8AACi/wAAowAAAKMBAACjAgAAowMAAKMFAACjBwAAowgAAKMJAACjCwAAowwAAKNLAACjTQAAo08AAKNRAACjVAAAo1UAAKNWAACjVwAAo1gAAKNaAACjXAAAo10AAKNeAACjYAAAo2EAAKOgAACjogAAo6QAAKOmAACjqQAAo6oAAKOrAACjrAAAo60AAKOvAACjsQAAo7IAAKOzAACjtQAAo7YAAKP1AACj9wAAo/kAAKP7AACj/gAAo/8AAKQAAACkAQAApAIAAKQEAACkBgAApAcAAKQIAACkCgAApAsAAKRKAACkTAAApE4AAKRQAACkUwAApFQAAKRVAACkVgAApFcAAKRZAACkWwAApFwAAKRdAACkXwAApGAAAKSfAACkoQAApKMAAKSlAACkqAAApKkAAKSqAACkqwAApKwAAKSuAACksAAApLEAAKSyAACktAAApLUAAKUAAAClIwAApUMAAKVjAAClZQAApWcAAKVpAAClawAApW4AAKVvAAClcAAApXMAAKV0AACldgAApXcAAKV5AAClfAAApX0AAKV+AAClgQAApYIAAKWHAACllAAApZkAAKWbAAClnQAApaIAAKWlAAClqAAApaoAAKXPAACl8wAAphoAAKY+AACmQQAApkMAAKZFAACmRwAApkkAAKZLAACmTAAApk8AAKZcAACmbQAApm8AAKZxAACmcwAApnUAAKZ3AACmeQAApnsAAKZ9AACmjgAAppEAAKaUAACmlwAAppoAAKadAACmoAAApqMAAKamAACmqAAApucAAKbpAACm6wAApu0AAKbwAACm8QAApvIAAKbzAACm9AAApvYAAKb4AACm+QAApvoAAKb8AACm/QAApzwAAKc+AACnQAAAp0IAAKdFAACnRgAAp0cAAKdIAACnSQAAp0sAAKdNAACnTgAAp08AAKdRAACnUgAAp5EAAKeTAACnlgAAp5gAAKebAACnnAAAp50AAKeeAACnnwAAp6EAAKejAACnpAAAp6UAAKenAACnqAAAp7UAAKe2AACntwAAp7kAAKf4AACn+gAAp/wAAKf+AACoAQAAqAIAAKgDAACoBAAAqAUAAKgHAACoCQAAqAoAAKgLAACoDQAAqA4AAKhNAACoTwAAqFEAAKhTAACoVgAAqFcAAKhYAACoWQAAqFoAAKhcAACoXgAAqF8AAKhgAACoYgAAqGMAAKiiAACopAAAqKYAAKioAACoqwAAqKwAAKitAACorgAAqK8AAKixAACoswAAqLQAAKi1AACotwAAqLgAAKj3AACo+QAAqPsAAKj9AACpAAAAqQEAAKkCAACpAwAAqQQAAKkGAACpCAAAqQkAAKkKAACpDAAAqQ0AAKlMAACpTgAAqVAAAKlSAACpVQAAqVYAAKlXAACpWAAAqVkAAKlbAACpXQAAqV4AAKlfAACpYQAAqWIAAKmHAACpqwAAqdIAAKn2AACp+QAAqfsAAKn9AACp/wAAqgEAAKoDAACqBAAAqgcAAKoUAACqIwAAqiUAAKonAACqKQAAqisAAKotAACqLwAAqjEAAKpAAACqQwAAqkYAAKpJAACqTAAAqk8AAKpSAACqVQAAqlcAAKqWAACqmAAAqpoAAKqcAACqnwAAqqAAAKqhAACqogAAqqMAAKqlAACqpwAAqqgAAKqpAACqqwAAqqwAAKrrAACq7QAAqu8AAKrxAACq9AAAqvUAAKr2AACq9wAAqvgAAKr6AACq/AAAqv0AAKr+AACrAAAAqwEAAKtAAACrQgAAq0QAAKtGAACrSQAAq0oAAKtLAACrTAAAq00AAKtPAACrUQAAq1IAAKtTAACrVQAAq1YAAKuVAACrlwAAq5kAAKubAACrngAAq58AAKugAACroQAAq6IAAKukAACrpgAAq6cAAKuoAACrqgAAq6sAAKvqAACr7AAAq+4AAKvwAACr8wAAq/QAAKv1AACr9gAAq/cAAKv5AACr+wAAq/wAAKv9AACr/wAArAAAAKw/AACsQQAArEMAAKxFAACsSAAArEkAAKxKAACsSwAArEwAAKxOAACsUAAArFEAAKxSAACsVAAArFUAAKyUAACslgAArJgAAKyaAACsnQAArJ4AAKyfAACsoAAArKEAAKyjAACspQAArKYAAKynAACsqQAArKoAAKz1AACtGAAArTgAAK1YAACtWgAArVwAAK1eAACtYAAArWMAAK1kAACtZQAArWgAAK1pAACtawAArWwAAK1uAACtcQAArXIAAK1zAACtdgAArXcAAK2AAACtjQAArZIAAK2UAACtlgAArZsAAK2eAACtoQAAraMAAK3IAACt7AAArhMAAK43AACuOgAArjwAAK4+AACuQAAArkIAAK5EAACuRQAArkgAAK5VAACuZgAArmgAAK5qAACubAAArm4AAK5wAACucgAArnQAAK52AACuhwAArooAAK6NAACukAAArpMAAK6WAACumQAArpwAAK6fAACuoQAAruAAAK7iAACu5AAAruYAAK7pAACu6gAArusAAK7sAACu7QAAru8AAK7xAACu8gAArvMAAK71AACu9gAArzUAAK83AACvOQAArzsAAK8+AACvPwAAr0AAAK9BAACvQgAAr0QAAK9GAACvRwAAr0gAAK9KAACvSwAAr4oAAK+MAACvjwAAr5EAAK+UAACvlQAAr5YAAK+XAACvmAAAr5oAAK+cAACvnQAAr54AAK+gAACvoQAAr64AAK+vAACvsAAAr7IAAK/xAACv8wAAr/UAAK/3AACv+gAAr/sAAK/8AACv/QAAr/4AALAAAACwAgAAsAMAALAEAACwBgAAsAcAALBGAACwSAAAsEoAALBMAACwTwAAsFAAALBRAACwUgAAsFMAALBVAACwVwAAsFgAALBZAACwWwAAsFwAALCbAACwnQAAsJ8AALChAACwpAAAsKUAALCmAACwpwAAsKgAALCqAACwrAAAsK0AALCuAACwsAAAsLEAALDwAACw8gAAsPQAALD2AACw+QAAsPoAALD7AACw/AAAsP0AALD/AACxAQAAsQIAALEDAACxBQAAsQYAALFFAACxRwAAsUkAALFLAACxTgAAsU8AALFQAACxUQAAsVIAALFUAACxVgAAsVcAALFYAACxWgAAsVsAALGAAACxpAAAscsAALHvAACx8gAAsfQAALH2AACx+AAAsfoAALH8AACx/QAAsgAAALINAACyHAAAsh4AALIgAACyIgAAsiQAALImAACyKAAAsioAALI5AACyPAAAsj8AALJCAACyRQAAskgAALJLAACyTgAAslAAALKPAACykQAAspMAALKVAACymAAAspkAALKaAACymwAAspwAALKeAACyoAAAsqEAALKiAACypAAAsqUAALLkAACy5gAAsugAALLqAACy7QAAsu4AALLvAACy8AAAsvEAALLzAACy9QAAsvYAALL3AACy+QAAsvoAALM5AACzOwAAsz0AALM/AACzQgAAs0MAALNEAACzRQAAs0YAALNIAACzSgAAs0sAALNMAACzTgAAs08AALOOAACzkAAAs5IAALOUAACzlwAAs5gAALOZAACzmgAAs5sAALOdAACznwAAs6AAALOhAACzowAAs6QAALPjAACz5QAAs+cAALPpAACz7AAAs+0AALPuAACz7wAAs/AAALPyAACz9AAAs/UAALP2AACz+AAAs/kAALQ4AAC0OgAAtDwAALQ+AAC0QQAAtEIAALRDAAC0RAAAtEUAALRHAAC0SQAAtEoAALRLAAC0TQAAtE4AALSNAAC0jwAAtJEAALSTAAC0lgAAtJcAALSYAAC0mQAAtJoAALScAAC0ngAAtJ8AALSgAAC0ogAAtKMAALTuAAC1EQAAtTEAALVRAAC1UwAAtVUAALVXAAC1WQAAtVwAALVdAAC1XgAAtWEAALViAAC1ZAAAtWUAALVnAAC1aQAAtWoAALVrAAC1bgAAtW8AALV4AAC1hQAAtYoAALWMAAC1jgAAtZMAALWWAAC1mQAAtZsAALXAAAC15AAAtgsAALYvAAC2MgAAtjQAALY2AAC2OAAAtjoAALY8AAC2PQAAtkAAALZNAAC2XgAAtmAAALZiAAC2ZAAAtmYAALZoAAC2agAAtmwAALZuAAC2fwAAtoIAALaFAAC2iAAAtosAALaOAAC2kQAAtpQAALaXAAC2mQAAttgAALbaAAC23AAAtt4AALbhAAC24gAAtuMAALbkAAC25QAAtucAALbpAAC26gAAtusAALbtAAC27gAAty0AALcvAAC3MQAAtzMAALc2AAC3NwAAtzgAALc5AAC3OgAAtzwAALc+AAC3PwAAt0AAALdCAAC3QwAAt4IAALeEAAC3hwAAt4kAALeMAAC3jQAAt44AALePAAC3kAAAt5IAALeUAAC3lQAAt5YAALeYAAC3mQAAt6YAALenAAC3qAAAt6oAALfpAAC36wAAt+0AALfvAAC38gAAt/MAALf0AAC39QAAt/YAALf4AAC3+gAAt/sAALf8AAC3/gAAt/8AALg+AAC4QAAAuEIAALhEAAC4RwA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AySQAAMljAADJZQAAyWcAAMlpAADJbAAAyW0AAMluAADJbwAAyXAAAMlyAADJdAAAyXUAAMl2AADJeAAAyXkAAMm4AADJugAAyb0AAMm/AADJwgAAycMAAMnEAADJxQAAycYAAMnIAADJygAAycsAAMnMAADJzgAAyc8AAMncAADJ3QAAyd4AAMngAADKHwAAyiEAAMojAADKJQAAyigAAMopAADKKgAAyisAAMosAADKLgAAyjAAAMoxAADKMgAAyjQAAMo1AADKdAAAynYAAMp4AADKegAAyn0AAMp+AADKfwAAyoAAAMqBAADKgwAAyoUAAMqGAADKhwAAyokAAMqKAADKyQAAyssAAMrNAADKzwAAytIAAMrTAADK1AAAytUAAMrWAADK2AAAytoAAMrbAADK3AAAyt4AAMrfAADLHgAAyyAAAMsiAADLJAAAyycAAMsoAADLKQAAyyoAAMsrAADLLQAAyy8AAMswAADLMQAAyzMAAMs0AADLcwAAy3UAAMt3AADLeQAAy3wAAMt9AADLfgAAy38AAMuAAADLggAAy4QAAMuFAADLhgAAy4gAAMuJAADLrgAAy9IAAMv5AADMHQAAzCAAAMwiAADMJAAAzCYAAMwoAADMKgAAzCsAAMwuAADMOwAAzEoAAMxMAADMTgAAzFAAAMxSAADMVAAAzFYAAMxYAADMZwAAzGoAAMxtAADMcAAAzHMAAMx2AADMeQAAzHwAAMx+AADMvQAAzL8AAMzBAADMwwAAzMYAAMzHAADMyAAAzMkAAMzKAADMzAAAzM4AAMzPAADM0AAAzNIAAMzTAADNEgAAzRQAAM0WAADNGAAAzRsAAM0cAADNHQAAzR4AAM0fAADNIQAAzSMAAM0kAADNJQAAzScAAM0oAADNZwAAzWkAAM1rAADNbQAAzXAAAM1xAADNcgAAzXMAAM10AADNdgAAzXgAAM15AADNegAAzXwAAM19AADNvAAAzb4AAM3AAADNwgAAzcUAAM3GAADNxwAAzcgAAM3JAADNywAAzc0AAM3OAADNzwAAzdEAAM3SAADOEQAAzhMAAM4VAADOFwAAzhoAAM4bAADOHAAAzh0AAM4eAADOIAAAziIAAM4jAADOJAAAziYAAM4nAADOZgAAzmgAAM5qAADObAAAzm8AAM5wAADOcQAAznIAAM5zAADOdQAAzncAAM54AADOeQAAznsAAM58AADOuwAAzr0AAM6/AADOwQAAzsQAAM7FAADOxgAAzscAAM7IAADOygAAzswAAM7NAADOzgAAztAAAM7RAADPHAAAzz8AAM9fAADPfwAAz4EAAM+DAADPhQAAz4cAAM+JAADPigAAz4sAAM+OAADPjwAAz5EAAM+SAADPlAAAz5YAAM+XAADPmAAAz5sAAM+cAADPoQAAz64AAM+zAADPtQAAz7cAAM+8AADPvwAAz8IAAM/EAADP6QAA0A0AANA0AADQWAAA0FsAANBdAADQXwAA0GEAANBjAADQZQAA0GYAANBpAADQdgAA0IcAANCJAADQiwAA0I0AANCPAADQkQAA0JMAANCVAADQlwAA0KgAANCrAADQrgAA0LEAANC0AADQtwAA0LoAANC9AADQwAAA0MIAANEBAADRAwAA0QUAANEHAADRCgAA0QsAANEMAADRDQAA0Q4AANEQAADREgAA0RMAANEUAADRFgAA0RcAANFWAADRWAAA0VoAANFcAADRXwAA0WAAANFhAADRYgAA0WMAANFlAADRZwAA0WgAANFpAADRawAA0WwAANGrAADRrQAA0bAAANGyAADRtQAA0bYAANG3AADRuAAA0bkAANG7AADRvQAA0b4AANG/AADRwQAA0cIAANHPAADR0AAA0dEAANHTAADSEgAA0hQAANIWAADSGAAA0hsAANIcAADSHQAA0h4AANIfAADSIQAA0iMAANIkAADSJQAA0icAANIoAADSZwAA0mkAANJrAADSbQAA0nAAANJxAADScgAA0nMAANJ0AADSdgAA0ngAANJ5AADSegAA0nwAANJ9AADSvAAA0r4AANLAAADSwgAA0sUAANLGAADSxwAA0sgAANLJAADSywAA0s0AANLOAADSzwAA0tEAANLSAADTEQAA0xMAANMVAADTFwAA0xoAANMbAADTHAAA0x0AANMeAADTIAAA0yIAANMjAADTJAAA0yYAANMnAADTZgAA02gAANNqAADTbAAA028AANNwAADTcQAA03IAANNzAADTdQAA03cAANN4AADTeQAA03sAANN8AADToQAA08UAANPsAADUEAAA1BMAANQVAADUFwAA1BkAANQbAADUHQAA1B4AANQhAADULgAA1D0AANQ/AADUQQAA1EMAANRFAADURwAA1EkAANRLAADUWgAA1F0AANRgAADUYwAA1GYAANRpAADUbAAA1G8AANRxAADUsAAA1LIAANS0AADUtgAA1LkAANS6AADUuwAA1LwAANS9AADUvwAA1MEAANTCAADUwwAA1MUAANTGAADVBQAA1QcAANUJAADVCwAA1Q4AANUPAADVEAAA1REAANUSAADVFAAA1RYAANUXAADVGAAA1RoAANUbAADVWgAA1VwAANVeAADVYAAA1WMAANVkAADVZQAA1WYAANVnAADVaQAA1WsAANVsAADVbQAA1W8AANVwAADVrwAA1bEAANWzAADVtQAA1bgAANW5AADVugAA1bsAANW8AADVvgAA1cAAANXBAADVwgAA1cQAANXFAADWBAAA1gYAANYIAADWCgAA1g0AANYOAADWDwAA1hAAANYRAADWEwAA1hUAANYWAADWFwAA1hkAANYaAADWWQAA1lsAANZeAADWYAAA1mMAANZkAADWZQAA1mYAANZnAADWaQAA1msAANZsAADWbQAA1m8AANZwAADWjAAA1ssAANbNAADWzwAA1tEAANbUAADW1QAA1tYAANbXAADW2AAA1toAANbcAADW3QAA1t4AANbgAADW4QAA1ywAANdPAADXbwAA148AANeRAADXkwAA15UAANeXAADXmQAA15oAANebAADXngAA158AANehAADXogAA16UAANenAADXqAAA16kAANesAADXrQAA17IAANe/AADXxAAA18YAANfIAADXzQAA19AAANfTAADX1QAA1/oAANgeAADYRQAA2GkAANhsAADYbgAA2HAAANhyAADYdAAA2HYAANh3AADYegAA2IcAANiYAADYmgAA2JwAANieAADYoAAA2KIAANikAADYpgAA2KgAANi5AADYvAAA2L8AANjCAADYxQAA2MgAANjLAADYzgAA2NEAANjTAADZEgAA2RQAANkWAADZGAAA2RsAANkcAADZHQAA2R4AANkfAADZIQAA2SMAANkkAADZJQAA2ScAANkoAADZZwAA2WkAANlrAADZbQAA2XAAANlxAADZcgAA2XMAANl0AADZdgAA2XgAANl5AADZegAA2XwAANl9AADZvAAA2b4AANnBAADZwwAA2cYAANnHAADZyAAA2ckAANnKAADZzAAA2c4AANnPAADZ0AAA2dIAANnTAADZ4AAA2eEAANniAADZ5AAA2iMAANolAADaJwAA2ikAANosAADaLQAA2i4AANovAADaMAAA2jIAANo0AADaNQAA2jYAANo4AADaOQAA2ngAANp6AADafAAA2n4AANqBAADaggAA2oMAANqEAADahQAA2ocAANqJAADaigAA2osAANqNAADajgAA2s0AANrPAADa0QAA2tMAANrWAADa1wAA2tgAANrZAADa2gAA2twAANreAADa3wAA2uAAANriAADa4wAA2yIAANskAADbJgAA2ygAANsrAADbLAAA2y0AANsuAADbLwAA2zEAANszAADbNAAA2zUAANs3AADbOAAA23cAANt5AADbewAA230AANuAAADbgQAA24IAANuDAADbhAAA24YAANuIAADbiQAA24oAANuMAADbjQAA27IAANvWAADb/QAA3CEAANwkAADcJgAA3CgAANwqAADcLAAA3C4AANwvAADcMgAA3D8AANxOAADcUAAA3FIAANxUAADcVgAA3FgAANxaAADcXAAA3GsAANxuAADccQAA3HQAANx3AADcegAA3H0AANyAAADcggAA3MEAANzDAADcxQAA3McAANzKAADcywAA3MwAANzNAADczgAA3NAAANzSAADc0wAA3NQAANzWAADc1wAA3RYAAN0YAADdGwAA3R0AAN0gAADdIQAA3SIAAN0jAADdJAAA3SYAAN0oAADdKQAA3SoAAN0sAADdLQAA3WwAAN1uAADdcAAA3XIAAN11AADddgAA3XcAAN14AADdeQAA3XsAAN19AADdfgAA3X8AAN2BAADdggAA3cEAAN3DAADdxgAA3cgAAN3LAADdzAAA3c0AAN3OAADdzwAA3dEAAN3TAADd1AAA3dUAAN3XAADd2AAA3hsAAN4/AADeYwAA3oYAAN6tAADezQAA3vQAAN8bAADfOwAA318AAN+DAADfhQAA34gAAN+KAADfjAAA344AAN+RAADflAAA35YAAN+YAADfmwAA350AAN+fAADfogAA36UAAN+mAADfrwAA37wAAN+/AADfwQAA38QAAN/HAADfyQAA3+4AAOASAADgOQAA4F0AAOBgAADgYgAA4GQAAOBmAADgaAAA4GoAAOBrAADgbgAA4HsAAOCOAADgkAAA4JIAAOCUAADglgAA4JgAAOCaAADgnAAA4J4AAOCgAADgswAA4LYAAOC5AADgvAAA4L8AAODCAADgxQAA4MgAAODLAADgzgAA4NAAAOEPAADhEQAA4RQAAOEWAADhGQAA4RoAAOEbAADhHAAA4R0AAOEfAADhIQAA4SIAAOEjAADhJQAA4SYAAOEvAADhMAAA4TIAAOFxAADhcwAA4XUAAOF3AADhegAA4XsAAOF8AADhfQAA4X4AAOGAAADhggAA4YMAAOGEAADhhgAA4YcAAOHGAADhyAAA4csAAOHNAADh0AAA4dEAAOHSAADh0wAA4dQAAOHWAADh2AAA4dkAAOHaAADh3AAA4d0AAOHmAADh5wAA4ekAAOIoAADiKgAA4iwAAOIuAADiMQAA4jIAAOIzAADiNAAA4jUAAOI3AADiOQAA4joAAOI7AADiPQAA4j4AAOJ9AADifwAA4oIAAOKEAADihwAA4ogAAOKJAADiigAA4osAAOKNAADijwAA4pAAAOKRAADikwAA4pQAAOKdAADingAA4qAAAOLfAADi4QAA4uMAAOLlAADi6AAA4ukAAOLqAADi6wAA4uwAAOLuAADi8AAA4vEAAOLyAADi9AAA4vUAAOM0AADjNgAA4zkAAOM7AADjPgAA4z8AAONAAADjQQAA40IAAONEAADjRgAA40cAAONIAADjSgAA40sAAONYAADjWQAA41oAAONcAADjmwAA450AAOOfAADjoQAA46QAAOOlAADjpgAA46cAAOOoAADjqgAA46wAAOOtAADjrgAA47AAAOOxAADj8AAA4/IAAOP1AADj9wAA4/oAAOP7AADj/AAA4/0AAOP+AADkAAAA5AIAAOQDAADkBAAA5AYAAOQHAADkFgAA5CMAAOQwAADkMwAA5DYAAOQ5AADkPAAA5D8AAORCAADkTwAA5FIAAORVAADkWAAA5FsAAOReAADkYQAA5GMAAORuAADkdgAA5IAAAOSOAADkmAAA5KQAAOTvAADlEgAA5TIAAOVSAADlVAAA5VYAAOVYAADlWgAA5V0AAOVeAADlXwAA5WIAAOVjAADlZQAA5WYAAOVoAADlawAA5WwAAOVtAADlcAAA5XEAAOV2AADlgwAA5YgAAOWKAADljAAA5ZEAAOWUAADllwAA5ZkAAOW+AADl4gAA5gkAAOYtAADmMAAA5jIAAOY0AADmNgAA5jgAAOY6AADmOwAA5j4AAOZLAADmXAAA5l4AAOZgAADmYgAA5mQAAOZmAADmaAAA5moAAOZsAADmfQAA5oAAAOaDAADmhgAA5okAAOaMAADmjwAA5pIAAOaVAADmlwAA5tYAAObYAADm2gAA5twAAObfAADm4AAA5uEAAObiAADm4wAA5uUAAObnAADm6AAA5ukAAObrAADm7AAA5ysAAOctAADnLwAA5zEAAOc0AADnNQAA5zYAAOc3AADnOAAA5zoAAOc8AADnPQAA5z4AAOdAAADnQQAA54AAAOeCAADnhQAA54cAAOeKAADniwAA54wAAOeNAADnjgAA55AAAOeSAADnkwAA55QAAOeWAADnlwAA56QAAOelAADnpgAA56gAAOfnAADn6QAA5+sAAOftAADn8AAA5/EAAOfyAADn8wAA5/QAAOf2AADn+AAA5/kAAOf6AADn/AAA5/0AAOg8AADoPgAA6EAAAOhCAADoRQAA6EYAAOhHAADoSAAA6EkAAOhLAADoTQAA6E4AAOhPAADoUQAA6FIAAOiRAADokwAA6JUAAOiXAADomgAA6JsAAOicAADonQAA6J4AAOigAADoogAA6KMAAOikAADopgAA6KcAAOjmAADo6AAA6OoAAOjsAADo7wAA6PAAAOjxAADo8gAA6PMAAOj1AADo9wAA6PgAAOj5AADo+wAA6PwAAOk7AADpPQAA6T8AAOlBAADpRAAA6UUAAOlGAADpRwAA6UgAAOlKAADpTAAA6U0AAOlOAADpUAAA6VEAAOl2AADpmgAA6cEAAOnlAADp6AAA6eoAAOnsAADp7gAA6fAAAOnyAADp8wAA6fYAAOoDAADqEgAA6hQAAOoWAADqGAAA6hoAAOocAADqHgAA6iAAAOovAADqMgAA6jUAAOo4AADqOwAA6j4AAOpBAADqRAAA6kYAAOqFAADqhwAA6ooAAOqMAADqjwAA6pAAAOqRAADqkgAA6pMAAOqVAADqlwAA6pgAAOqZAADqmwAA6pwAAOqeAADq3QAA6t8AAOrhAADq4wAA6uYAAOrnAADq6AAA6ukAAOrqAADq7AAA6u4AAOrvAADq8AAA6vIAAOrzAADrMgAA6zQAAOs2AADrOAAA6zsAAOs8AADrPQAA6z4AAOs/AADrQQAA60MAAOtEAADrRQAA60cAAOtIAADrhwAA64kAAOuMAADrjgAA65EAAOuSAADrkwAA65QAAOuVAADrlwAA65kAAOuaAADrmwAA650AAOueAADroAAA698AAOvhAADr4wAA6+UAAOvoAADr6QAA6+oAAOvrAADr7AAA6+4AAOvwAADr8QAA6/IAAOv0AADr9QAA7DQAAOw2AADsOAAA7DoAAOw9AADsPgAA7D8AAOxAAADsQQAA7EMAAOxFAADsRgAA7EcAAOxJAADsSgAA7IkAAOyLAADsjQAA7I8AAOySAADskwAA7JQAAOyVAADslgAA7JgAAOyaAADsmwAA7JwAAOyeAADsnwAA7OoAAO0NAADtLQAA7U0AAO1PAADtUQAA7VMAAO1VAADtWAAA7VkAAO1aAADtXQAA7V4AAO1gAADtYQAA7WMAAO1mAADtZwAA7WgAAO1rAADtbAAA7XEAAO1+AADtgwAA7YUAAO2HAADtjAAA7Y8AAO2SAADtlAAA7bkAAO3dAADuBAAA7igAAO4rAADuLQAA7i8AAO4xAADuMwAA7jUAAO42AADuOQAA7kYAAO5XAADuWQAA7lsAAO5dAADuXwAA7mEAAO5jAADuZQAA7mcAAO54AADuewAA7n4AAO6BAADuhAAA7ocAAO6KAADujQAA7pAAAO6SAADu0QAA7tMAAO7VAADu1wAA7toAAO7bAADu3AAA7t0AAO7eAADu4AAA7uIAAO7jAADu5AAA7uYAAO7nAADvJgAA7ygAAO8qAADvLAAA7y8AAO8wAADvMQAA7zIAAO8zAADvNQAA7zcAAO84AADvOQAA7zsAAO88AADvewAA730AAO+AAADvggAA74UAAO+GAADvhwAA74gAAO+JAADviwAA740AAO+OAADvjwAA75EAAO+SAADvnwAA76AAAO+hAADvowAA7+IAAO/kAADv5gAA7+gAAO/rAADv7AAA7+0AAO/uAADv7wAA7/EAAO/zAADv9AAA7/UAAO/3AADv+AAA8DcAAPA5AADwOwAA8D0AAPBAAADwQQAA8EIAAPBDAADwRAAA8EYAAPBIAADwSQAA8EoAAPBMAADwTQAA8IwAAPCOAADwkAAA8JIAAPCVAADwlgAA8JcAAPCYAADwmQAA8JsAAPCdAADwngAA8J8AAPChAADwogAA8OEAAPDjAADw5QAA8OcAAPDqAADw6wAA8OwAAPDtAADw7gAA8PAAAPDyAADw8wAA8PQAAPD2AADw9wA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BDTcAAQ05AAENOgABDT0AAQ1AAAENQQABDUIAAQ1FAAENRgABDUsAAQ1YAAENXQABDV8AAQ1hAAENZgABDWkAAQ1sAAENbgABDZMAAQ23AAEN3gABDgIAAQ4FAAEOBwABDgkAAQ4LAAEODQABDg8AAQ4QAAEOEwABDiAAAQ4xAAEOMwABDjUAAQ43AAEOOQABDjsAAQ49AAEOPwABDkEAAQ5SAAEOVQABDlgAAQ5bAAEOXgABDmEAAQ5kAAEOZwABDmoAAQ5sAAEOqwABDq0AAQ6vAAEOsQABDrQAAQ61AAEOtgABDrcAAQ64AAEOugABDrwAAQ69AAEOvgABDsAAAQ7BAAEPAAABDwIAAQ8EAAEPBgABDwkAAQ8KAAEPCwABDwwAAQ8NAAEPDwABDxEAAQ8SAAEPEwABDxUAAQ8WAAEPVQABD1cAAQ9aAAEPXAABD18AAQ9gAAEPYQABD2IAAQ9jAAEPZQABD2cAAQ9oAAEPaQABD2sAAQ9sAAEPeQABD3oAAQ97AAEPfQABD7wAAQ++AAEPwAABD8IAAQ/FAAEPxgABD8cAAQ/IAAEPyQABD8sAAQ/NAAEPzgABD88AAQ/RAAEP0gABEBEAARATAAEQFQABEBcAARAaAAEQGwABEBwAARAdAAEQHgABECAAARAiAAEQIwABECQAARAmAAEQJwABEGYAARBoAAEQagABEGwAARBvAAEQcAABEHEAARByAAEQcwABEHUAARB3AAEQeAABEHkAARB7AAEQfAABELsAARC9AAEQvwABEMEAARDEAAEQxQABEMYAARDHAAEQyAABEMoAARDMAAEQzQABEM4AARDQAAEQ0QABERAAARESAAERFAABERYAAREZAAERGgABERsAAREcAAERHQABER8AAREhAAERIgABESMAARElAAERJgABEUsAARFvAAERlgABEboAARG9AAERvwABEcEAARHDAAERxQABEccAARHIAAERywABEdgAARHnAAER6QABEesAARHtAAER7wABEfEAARHzAAER9QABEgQAARIHAAESCgABEg0AARIQAAESEwABEhYAARIZAAESGwABEloAARJcAAESXgABEmAAARJjAAESZAABEmUAARJmAAESZwABEmkAARJrAAESbAABEm0AARJvAAEScAABEq8AARKxAAESswABErUAARK4AAESuQABEroAARK7AAESvAABEr4AARLAAAESwQABEsIAARLEAAESxQABEwQAARMGAAETCAABEwoAARMNAAETDgABEw8AARMQAAETEQABExMAARMVAAETFgABExcAARMZAAETGgABE1kAARNbAAETXQABE18AARNiAAETYwABE2QAARNlAAETZgABE2gAARNqAAETawABE2wAARNuAAETbwABE64AAROwAAETsgABE7QAARO3AAETuAABE7kAARO6AAETuwABE70AARO/AAETwAABE8EAARPDAAETxAABFAMAARQFAAEUBwABFAkAARQMAAEUDQABFA4AARQPAAEUEAABFBIAARQUAAEUFQABFBYAARQYAAEUGQABFFgAARRaAAEUXQABFF8AARRiAAEUYwABFGQAARRlAAEUZgABFGgAARRqAAEUawABFGwAARRuAAEUbwABFHgAARR5AAEUewABFLoAARS8AAEUvgABFMAAARTDAAEUxAABFMUAARTGAAEUxwABFMkAARTLAAEUzAABFM0AARTPAAEU0AABFQ8AARURAAEVEwABFRUAARUYAAEVGQABFRoAARUbAAEVHAABFR4AARUgAAEVIQABFSIAARUkAAEVJQABFWQAARVmAAEVaQABFWsAARVuAAEVbwABFXAAARVxAAEVcgABFXQAARV2AAEVdwABFXgAARV6AAEVewABFcYAARXpAAEWCQABFikAARYrAAEWLQABFi8AARYxAAEWMwABFjQAARY1AAEWOAABFjkAARY7AAEWPAABFj4AARZAAAEWQQABFkIAARZFAAEWRgABFksAARZYAAEWXQABFl8AARZhAAEWZgABFmkAARZsAAEWbgABFpMAARa3AAEW3gABFwIAARcFAAEXBwABFwkAARcLAAEXDQABFw8AARcQAAEXEwABFyAAARcxAAEXMwABFzUAARc3AAEXOQABFzsAARc9AAEXPwABF0EAARdSAAEXVQABF1gAARdbAAEXXgABF2EAARdkAAEXZwABF2oAARdsAAEXqwABF60AARevAAEXsQABF7QAARe1AAEXtgABF7cAARe4AAEXugABF7wAARe9AAEXvgABF8AAARfBAAEYAAABGAIAARgEAAEYBgABGAkAARgKAAEYCwABGAwAARgNAAEYDwABGBEAARgSAAEYEwABGBUAARgWAAEYVQABGFcAARhaAAEYXAABGF8AARhgAAEYYQABGGIAARhjAAEYZQABGGcAARhoAAEYaQABGGsAARhsAAEYeQABGHoAARh7AAEYfQABGLwAARi+AAEYwAABGMIAARjFAAEYxgABGMcAARjIAAEYyQABGMsAARjNAAEYzgABGM8AARjRAAEY0gABGREAARkTAAEZFQABGRcAARkaAAEZGwABGRwAARkdAAEZHgABGSAAARkiAAEZIwABGSQAARkmAAEZJwABGWYAARloAAEZagABGWwAARlvAAEZcAABGXEAARlyAAEZcwABGXUAARl3AAEZeAABGXkAARl7AAEZfAABGbsAARm9AAEZvwABGcEAARnEAAEZxQABGcYAARnHAAEZyAABGcoAARnMAAEZzQABGc4AARnQAAEZ0QABGhAAARoSAAEaFAABGhYAARoZAAEaGgABGhsAARocAAEaHQABGh8AARohAAEaIgABGiMAARolAAEaJgABGksAARpvAAEalgABGroAARq9AAEavwABGsEAARrDAAEaxQABGscAARrIAAEaywABGtgAARrnAAEa6QABGusAARrtAAEa7wABGvEAARrzAAEa9QABGwQAARsHAAEbCgABGw0AARsQAAEbEwABGxYAARsZAAEbGwABG1oAARtcAAEbXwABG2EAARtkAAEbZQABG2YAARtnAAEbaAABG2oAARtsAAEbbQABG24AARtwAAEbcQABG7AAARuyAAEbtAABG7YAARu5AAEbugABG7sAARu8AAEbvQABG78AARvBAAEbwgABG8MAARvFAAEbxgABHAUAARwHAAEcCQABHAsAARwOAAEcDwABHBAAARwRAAEcEgABHBQAARwWAAEcFwABHBgAARwaAAEcGwABHFoAARxcAAEcXwABHGEAARxkAAEcZQABHGYAARxnAAEcaAABHGoAARxsAAEcbQABHG4AARxwAAEccQABHHMAARyyAAEctAABHLYAARy4AAEcuwABHLwAARy9AAEcvgABHL8AARzBAAEcwwABHMQAARzFAAEcxwABHMgAAR0HAAEdCQABHQsAAR0NAAEdEAABHREAAR0SAAEdEwABHRQAAR0WAAEdGAABHRkAAR0aAAEdHAABHR0AAR1cAAEdXgABHWAAAR1iAAEdZQABHWYAAR1nAAEdaAABHWkAAR1rAAEdbQABHW4AAR1vAAEdcQABHXIAAR29AAEd4AABHgAAAR4gAAEeIgABHiQAAR4mAAEeKAABHioAAR4rAAEeLAABHi8AAR4wAAEeMgABHjMAAR41AAEeNwABHjgAAR45AAEePAABHj0AAR5CAAEeTwABHlQAAR5WAAEeWAABHl0AAR5gAAEeYwABHmUAAR6KAAEergABHtUAAR75AAEe/AABHv4AAR8AAAEfAgABHwQAAR8GAAEfBwABHwoAAR8XAAEfKAABHyoAAR8sAAEfLgABHzAAAR8yAAEfNAABHzYAAR84AAEfSQABH0wAAR9PAAEfUgABH1UAAR9YAAEfWwABH14AAR9hAAEfYwABH6IAAR+kAAEfpgABH6gAAR+rAAEfrAABH60AAR+uAAEfrwABH7EAAR+zAAEftAABH7UAAR+3AAEfuAABH/cAAR/5AAEf+wABH/0AASAAAAEgAQABIAIAASADAAEgBAABIAYAASAIAAEgCQABIAoAASAMAAEgDQABIEwAASBOAAEgUQABIFMAASBWAAEgVwABIFgAASBZAAEgWgABIFwAASBeAAEgXwABIGAAASBiAAEgYwABIHAAASBxAAEgcgABIHQAASCzAAEgtQABILcAASC5AAEgvAABIL0AASC+AAEgvwABIMAAASDCAAEgxAABIMUAASDGAAEgyAABIMkAASEIAAEhCgABIQwAASEOAAEhEQABIRIAASETAAEhFAABIRUAASEXAAEhGQABIRoAASEbAAEhHQABIR4AASFdAAEhXwABIWEAASFjAAEhZgABIWcAASFoAAEhaQABIWoAASFsAAEhbgABIW8AASFwAAEhcgABIXMAASGyAAEhtAABIbYAASG4AAEhuwABIbwAASG9AAEhvgABIb8AASHBAAEhwwABIcQAASHFAAEhxwABIcgAASIHAAEiCQABIgsAASINAAEiEAABIhEAASISAAEiEwABIhQAASIWAAEiGAABIhkAASIaAAEiHAABIh0AASJCAAEiZgABIo0AASKxAAEitAABIrYAASK4AAEiugABIrwAASK+AAEivwABIsIAASLPAAEi3gABIuAAASLiAAEi5AABIuYAASLoAAEi6gABIuwAASL7AAEi/gABIwEAASMEAAEjBwABIwoAASMNAAEjEAABIxIAASNRAAEjUwABI1UAASNXAAEjWgABI1sAASNcAAEjXQABI14AASNgAAEjYgABI2MAASNkAAEjZgABI2cAASOmAAEjqAABI6oAASOsAAEjrwABI7AAASOxAAEjsgABI7MAASO1AAEjtwABI7gAASO5AAEjuwABI7wAASP7AAEj/QABI/8AASQBAAEkBAABJAUAASQGAAEkBwABJAgAASQKAAEkDAABJA0AASQOAAEkEAABJBEAASRQAAEkUgABJFQAASRWAAEkWQABJFoAASRbAAEkXAABJF0AASRfAAEkYQABJGIAASRjAAEkZQABJGYAASSlAAEkpwABJKkAASSrAAEkrgABJK8AASSwAAEksQABJLIAASS0AAEktgABJLcAASS4AAEkugABJLsAAST6AAEk/AABJP4AASUAAAElAwABJQQAASUFAAElBgABJQcAASUJAAElCwABJQwAASUNAAElDwABJRAAASVPAAElUQABJVMAASVVAAElWAABJVkAASVaAAElWwABJVwAASVeAAElYAABJWEAASViAAElZAABJWUAASWwAAEl0wABJfMAASYTAAEmFQABJhcAASYZAAEmGwABJh0AASYeAAEmHwABJiIAASYjAAEmJQABJiYAASYoAAEmKgABJisAASYsAAEmLwABJjAAASY1AAEmQgABJkcAASZJAAEmSwABJlAAASZTAAEmVgABJlgAASZ9AAEmoQABJsgAASbsAAEm7wABJvEAASbzAAEm9QABJvcAASb5AAEm+gABJv0AAScKAAEnGwABJx0AAScfAAEnIQABJyMAASclAAEnJwABJykAAScrAAEnPAABJz8AASdCAAEnRQABJ0gAASdLAAEnTgABJ1EAASdUAAEnVgABJ5UAASeXAAEnmQABJ5sAASeeAAEnnwABJ6AAASehAAEnogABJ6QAASemAAEnpwABJ6gAASeqAAEnqwABJ+oAASfsAAEn7gABJ/AAASfzAAEn9AABJ/UAASf2AAEn9wABJ/kAASf7AAEn/AABJ/0AASf/AAEoAAABKD8AAShBAAEoRAABKEYAAShJAAEoSgABKEsAAShMAAEoTQABKE8AAShRAAEoUgABKFMAAShVAAEoVgABKGMAAShkAAEoZQABKGcAASimAAEoqAABKKoAASisAAEorwABKLAAASixAAEosgABKLMAASi1AAEotwABKLgAASi5AAEouwABKLwAASj7AAEo/QABKP8AASkBAAEpBAABKQUAASkGAAEpBwABKQgAASkKAAEpDAABKQ0AASkOAAEpEAABKREAASlQAAEpUgABKVQAASlWAAEpWQABKVoAASlbAAEpXAABKV0AASlfAAEpYQABKWIAASljAAEpZQABKWYAASmlAAEppwABKakAASmrAAEprgABKa8AASmwAAEpsQABKbIAASm0AAEptgABKbcAASm4AAEpugABKbsAASn6AAEp/AABKf4AASoAAAEqAwABKgQAASoFAAEqBgABKgcAASoJAAEqCwABKgwAASoNAAEqDwABKhAAASo1AAEqWQABKoAAASqkAAEqpwABKqkAASqrAAEqrQABKq8AASqxAAEqsgABKrUAASrCAAEq0QABKtMAASrVAAEq1wABKtkAASrbAAEq3QABKt8AASruAAEq8QABKvQAASr3AAEq+gABKv0AASsAAAErAwABKwUAAStEAAErRgABK0kAAStLAAErTgABK08AAStQAAErUQABK1IAAStUAAErVgABK1cAAStYAAErWgABK1sAASuaAAErnAABK54AASugAAErowABK6QAASulAAErpgABK6cAASupAAErqwABK6wAASutAAErrwABK7AAASvvAAEr8QABK/MAASv1AAEr+AABK/kAASv6AAEr+wABK/wAASv+AAEsAAABLAEAASwCAAEsBAABLAUAASxEAAEsRgABLEkAASxLAAEsTgABLE8AASxQAAEsUQABLFIAASxUAAEsVgABLFcAASxYAAEsWgABLFsAASyaAAEsnAABLJ4AASygAAEsowABLKQAASylAAEspgABLKcAASypAAEsqwABLKwAASytAAEsrwABLLAAASzvAAEs8QABLPMAASz1AAEs+AABLPkAASz6AAEs+wABLPwAASz+AAEtAAABLQEAAS0CAAEtBAABLQUAAS1EAAEtRgABLUgAAS1KAAEtTQABLU4AAS1PAAEtUAABLVEAAS1TAAEtVQABLVYAAS1XAAEtWQABLVoAAS2lAAEtyAABLegAAS4IAAEuCgABLgwAAS4OAAEuEAABLhIAAS4TAAEuFAABLhcAAS4YAAEuGgABLhsAAS4dAAEuHwABLiAAAS4hAAEuJAABLiUAAS4qAAEuNwABLjwAAS4+AAEuQAABLkUAAS5IAAEuSwABLk0AAS5yAAEulgABLr0AAS7hAAEu5AABLuYAAS7oAAEu6gABLuwAAS7uAAEu7wABLvIAAS7/AAEvEAABLxIAAS8UAAEvFgABLxgAAS8aAAEvHAABLx4AAS8gAAEvMQABLzQAAS83AAEvOgABLz0AAS9AAAEvQwABL0YAAS9JAAEvSwABL4oAAS+MAAEvjgABL5AAAS+TAAEvlAABL5UAAS+WAAEvlwABL5kAAS+bAAEvnAABL50AAS+fAAEvoAABL98AAS/hAAEv4wABL+UAAS/oAAEv6QABL+oAAS/rAAEv7AABL+4AAS/wAAEv8QABL/IAAS/0AAEv9QABMDQAATA2AAEwOQABMDsAATA+AAEwPwABMEAAATBBAAEwQgABMEQAATBGAAEwRwABMEgAATBKAAEwSwABMFgAATBZAAEwWgABMFwAATCbAAEwnQABMJ8AATChAAEwpAABMKUAATCmAAEwpwABMKgAATCqAAEwrAABMK0AATCuAAEwsAABMLEAATDwAAEw8gABMPQAATD2AAEw+QABMPoAATD7AAEw/AABMP0AATD/AAExAQABMQIAATEDAAExBQABMQYAATFFAAExRwABMUkAATFLAAExTgABMU8AATFQAAExUQABMVIAATFUAAExVgABMVcAATFYAAExWgABMVsAATGaAAExnAABMZ4AATGgAAExowABMaQAATGlAAExpgABMacAATGpAAExqwABMawAATGtAAExrwABMbAAATHvAAEx8QABMfMAATH1AAEx+AABMfkAATH6AAEx+wABMfwAATH+AAEyAAABMgEAATICAAEyBAABMgUAATIqAAEyTgABMnUAATKZAAEynAABMp4AATKgAAEyogABMqQAATKmAAEypwABMqoAATK3AAEyxgABMsgAATLKAAEyzAABMs4AATLQAAEy0gABMtQAATLjAAEy5gABMukAATLsAAEy7wABMvIAATL1AAEy+AABMvoAATM5AAEzOwABMz0AATM/AAEzQgABM0MAATNEAAEzRQABM0YAATNIAAEzSgABM0sAATNMAAEzTgABM08AATOOAAEzkAABM5IAATOUAAEzlwABM5gAATOZAAEzmgABM5sAATOdAAEznwABM6AAATOhAAEzowABM6QAATPjAAEz5QABM+cAATPpAAEz7AABM+0AATPuAAEz7wABM/AAATPyAAEz9AABM/UAATP2AAEz+AABM/kAATQ4AAE0OgABNDwAATQ+AAE0QQABNEIAATRDAAE0RAABNEUAATRHAAE0SQABNEoAATRLAAE0TQABNE4AATSNAAE0jwABNJEAATSTAAE0lgABNJcAATSYAAE0mQABNJoAATScAAE0ngABNJ8AATSgAAE0ogABNKMAATTiAAE05AABNOYAATToAAE06wABNOwAATTtAAE07gABNO8AATTxAAE08wABNPQAATT1AAE09wABNPgAATU3AAE1OQABNTsAATU9AAE1QAABNUEAATVCAAE1QwABNUQAATVGAAE1SAABNUkAATVKAAE1TAABNU0AATVWAAE1VwABNVkAATWYAAE1mgABNZwAATWeAAE1oAABNaEAATWiAAE1owABNaQAATWmAAE1qAABNakAATWqAAE1rAABNa0AATXsAAE17gABNfAAATXyAAE19AABNfUAATX2AAE19wABNfgAATX6AAE1/AABNf0AATX+AAE2AAABNgEAATZAAAE2QgABNkQAATZGAAE2SAABNkkAATZKAAE2SwABNkwAATZOAAE2UAABNlEAATZSAAE2VAABNlUAATagAAE2wwABNuMAATcDAAE3BQABNwcAATcJAAE3CwABNw0AATcOAAE3DwABNxIAATcTAAE3FQABNxYAATcYAAE3GgABNxsAATccAAE3HwABNyAAATcpAAE3NgABNzsAATc9AAE3PwABN0QAATdHAAE3SgABN0wAATdxAAE3lQABN7wAATfgAAE34wABN+UAATfnAAE36QABN+sAATftAAE37gABN/EAATf+AAE4DwABOBEAATgTAAE4FQABOBcAATgZAAE4GwABOB0AATgfAAE4MAABODMAATg2AAE4OQABODwAATg/AAE4QgABOEUAAThIAAE4SgABOIkAATiLAAE4jQABOI8AATiSAAE4kwABOJQAATiVAAE4lgABOJgAATiaAAE4mwABOJwAATieAAE4nwABON4AATjgAAE44gABOOQAATjnAAE46AABOOkAATjqAAE46wABOO0AATjvAAE48AABOPEAATjzAAE49AABOTMAATk1AAE5OAABOToAATk9AAE5PgABOT8AATlAAAE5QQABOUMAATlFAAE5RgABOUcAATlJAAE5SgABOVcAATlYAAE5WQABOVsAATmaAAE5nAABOZ4AATmgAAE5owABOaQAATmlAAE5pgABOacAATmpAAE5qwABOawAATmtAAE5rwABObAAATnvAAE58QABOfMAATn1AAE5+AABOfkAATn6AAE5+wABOfwAATn+AAE6AAABOgEAAToCAAE6BAABOgUAATpEAAE6RgABOkgAATpKAAE6TQABOk4AATpPAAE6UAABOlEAATpTAAE6VQABOlYAATpXAAE6WQABOloAATqZAAE6mwABOp0AATqfAAE6ogABOqMAATqkAAE6pQABOqYAATqoAAE6qgABOqsAATqsAAE6rgABOq8AATruAAE68AABOvIAATr0AAE69wABOvgAATr5AAE6+gABOvsAATr9AAE6/wABOwAAATsBAAE7AwABOwQAATspAAE7TQABO3QAATuYAAE7mwABO50AATufAAE7oQABO6MAATulAAE7pgABO6kAATu2AAE7xQABO8cAATvJAAE7ywABO80AATvPAAE70QABO9MAATviAAE75QABO+gAATvrAAE77gABO/EAATv0AAE79wABO/kAATw4AAE8OgABPDwAATw+AAE8QQABPEIAATxDAAE8RAABPEUAATxHAAE8SQABPEoAATxLAAE8TQABPE4AATyNAAE8jwABPJEAATyTAAE8lgABPJcAATyYAAE8mQABPJoAATycAAE8ngABPJ8AATygAAE8ogABPKMAATziAAE85AABPOYAATzoAAE86wABPOwAATztAAE87gABPO8AATzxAAE88wABPPQAATz1AAE89wABPPgAAT03AAE9OQABPTsAAT09AAE9QAABPUEAAT1CAAE9QwABPUQAAT1GAAE9SAABPUkAAT1KAAE9TAABPU0AAT2MAAE9jgABPZAAAT2SAAE9lQABPZYAAT2XAAE9mAABPZkAAT2bAAE9nQABPZ4AAT2fAAE9oQABPaIAAT3hAAE94wABPeUAAT3nAAE96gABPesAAT3sAAE97QABPe4AAT3wAAE98gABPfMAAT30AAE99gABPfcAAT42AAE+OAABPjoAAT48AAE+PwABPkAAAT5BAAE+QgABPkMAAT5FAAE+RwABPkgAAT5JAAE+SwABPkwAAT5VAAE+VgABPlgAAT6bAAE+vwABPuMAAT8GAAE/LQABP00AAT90AAE/mwABP7sAAT/fAAFAAwA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BV0IAAVdEAAFXRgABV0cAAVdKAAFXVwABV2oAAVdsAAFXbgABV3AAAVdyAAFXdAABV3YAAVd4AAFXegABV3wAAVePAAFXkgABV5UAAVeYAAFXmwABV54AAVehAAFXpAABV6cAAVeqAAFXrAABV+sAAVftAAFX8AABV/IAAVf1AAFX9gABV/cAAVf4AAFX+QABV/sAAVf9AAFX/gABV/8AAVgBAAFYAgABWAsAAVgMAAFYDgABWE0AAVhPAAFYUQABWFMAAVhWAAFYVwABWFgAAVhZAAFYWgABWFwAAVheAAFYXwABWGAAAVhiAAFYYwABWKIAAVikAAFYpwABWKkAAVisAAFYrQABWK4AAVivAAFYsAABWLIAAVi0AAFYtQABWLYAAVi4AAFYuQABWMIAAVjDAAFYxQABWQQAAVkGAAFZCAABWQoAAVkNAAFZDgABWQ8AAVkQAAFZEQABWRMAAVkVAAFZFgABWRcAAVkZAAFZGgABWVkAAVlbAAFZXgABWWAAAVljAAFZZAABWWUAAVlmAAFZZwABWWkAAVlrAAFZbAABWW0AAVlvAAFZcAABWXkAAVl6AAFZfAABWbsAAVm9AAFZvwABWcEAAVnEAAFZxQABWcYAAVnHAAFZyAABWcoAAVnMAAFZzQABWc4AAVnQAAFZ0QABWhAAAVoSAAFaFQABWhcAAVoaAAFaGwABWhwAAVodAAFaHgABWiAAAVoiAAFaIwABWiQAAVomAAFaJwABWjQAAVo1AAFaNgABWjgAAVp3AAFaeQABWnsAAVp9AAFagAABWoEAAVqCAAFagwABWoQAAVqGAAFaiAABWokAAVqKAAFajAABWo0AAVrMAAFazgABWtEAAVrTAAFa1gABWtcAAVrYAAFa2QABWtoAAVrcAAFa3gABWt8AAVrgAAFa4gABWuMAAVrxAAFa/gABWwMAAVsGAAFbCQABWw4AAVsRAAFbFAABWxYAAVsbAAFbJgABW3EAAVuUAAFbtAABW9QAAVvWAAFb2AABW9oAAVvcAAFb3wABW+AAAVvhAAFb5AABW+UAAVvnAAFb6AABW+oAAVvtAAFb7gABW+8AAVvyAAFb8wABW/gAAVwFAAFcCgABXAwAAVwOAAFcEwABXBYAAVwZAAFcGwABXEAAAVxkAAFciwABXK8AAVyyAAFctAABXLYAAVy4AAFcugABXLwAAVy9AAFcwAABXM0AAVzeAAFc4AABXOIAAVzkAAFc5gABXOgAAVzqAAFc7AABXO4AAVz/AAFdAgABXQUAAV0IAAFdCwABXQ4AAV0RAAFdFAABXRcAAV0ZAAFdWAABXVoAAV1cAAFdXgABXWEAAV1iAAFdYwABXWQAAV1lAAFdZwABXWkAAV1qAAFdawABXW0AAV1uAAFdrQABXa8AAV2xAAFdswABXbYAAV23AAFduAABXbkAAV26AAFdvAABXb4AAV2/AAFdwAABXcIAAV3DAAFeAgABXgQAAV4HAAFeCQABXgwAAV4NAAFeDgABXg8AAV4QAAFeEgABXhQAAV4VAAFeFgABXhgAAV4ZAAFeJgABXicAAV4oAAFeKgABXmkAAV5rAAFebQABXm8AAV5yAAFecwABXnQAAV51AAFedgABXngAAV56AAFeewABXnwAAV5+AAFefwABXr4AAV7AAAFewgABXsQAAV7HAAFeyAABXskAAV7KAAFeywABXs0AAV7PAAFe0AABXtEAAV7TAAFe1AABXxMAAV8VAAFfFwABXxkAAV8cAAFfHQABXx4AAV8fAAFfIAABXyIAAV8kAAFfJQABXyYAAV8oAAFfKQABX2gAAV9qAAFfbAABX24AAV9xAAFfcgABX3MAAV90AAFfdQABX3cAAV95AAFfegABX3sAAV99AAFffgABX70AAV+/AAFfwQABX8MAAV/GAAFfxwABX8gAAV/JAAFfygABX8wAAV/OAAFfzwABX9AAAV/SAAFf0wABX/gAAWAcAAFgQwABYGcAAWBqAAFgbAABYG4AAWBwAAFgcgABYHQAAWB1AAFgeAABYIUAAWCUAAFglgABYJgAAWCaAAFgnAABYJ4AAWCgAAFgogABYLEAAWC0AAFgtwABYLoAAWC9AAFgwAABYMMAAWDGAAFgyAABYQcAAWEJAAFhCwABYQ0AAWEQAAFhEQABYRIAAWETAAFhFAABYRYAAWEYAAFhGQABYRoAAWEcAAFhHQABYVwAAWFeAAFhYAABYWIAAWFlAAFhZgABYWcAAWFoAAFhaQABYWsAAWFtAAFhbgABYW8AAWFxAAFhcgABYbEAAWGzAAFhtQABYbcAAWG6AAFhuwABYbwAAWG9AAFhvgABYcAAAWHCAAFhwwABYcQAAWHGAAFhxwABYgYAAWIIAAFiCwABYg0AAWIQAAFiEQABYhIAAWITAAFiFAABYhYAAWIYAAFiGQABYhoAAWIcAAFiHQABYlwAAWJeAAFiYAABYmIAAWJlAAFiZgABYmcAAWJoAAFiaQABYmsAAWJtAAFibgABYm8AAWJxAAFicgABYrEAAWKzAAFitQABYrcAAWK6AAFiuwABYrwAAWK9AAFivgABYsAAAWLCAAFiwwABYsQAAWLGAAFixwABYwYAAWMIAAFjCgABYwwAAWMPAAFjEAABYxEAAWMSAAFjEwABYxUAAWMXAAFjGAABYxkAAWMbAAFjHAABY2cAAWOKAAFjqgABY8oAAWPMAAFjzgABY9AAAWPSAAFj1QABY9YAAWPXAAFj2gABY9sAAWPdAAFj3gABY+AAAWPjAAFj5AABY+UAAWPoAAFj6QABY/IAAWP/AAFkBAABZAYAAWQIAAFkDQABZBAAAWQTAAFkFQABZDoAAWReAAFkhQABZKkAAWSsAAFkrgABZLAAAWSyAAFktAABZLYAAWS3AAFkugABZMcAAWTYAAFk2gABZNwAAWTeAAFk4AABZOIAAWTkAAFk5gABZOgAAWT5AAFk/AABZP8AAWUCAAFlBQABZQgAAWULAAFlDgABZREAAWUTAAFlUgABZVQAAWVWAAFlWAABZVsAAWVcAAFlXQABZV4AAWVfAAFlYQABZWMAAWVkAAFlZQABZWcAAWVoAAFlpwABZakAAWWrAAFlrQABZbAAAWWxAAFlsgABZbMAAWW0AAFltgABZbgAAWW5AAFlugABZbwAAWW9AAFl/AABZf4AAWYBAAFmAwABZgYAAWYHAAFmCAABZgkAAWYKAAFmDAABZg4AAWYPAAFmEAABZhIAAWYTAAFmIAABZiEAAWYiAAFmJAABZmMAAWZlAAFmZwABZmkAAWZsAAFmbQABZm4AAWZvAAFmcAABZnIAAWZ0AAFmdQABZnYAAWZ4AAFmeQABZrgAAWa6AAFmvAABZr4AAWbBAAFmwgABZsMAAWbEAAFmxQABZscAAWbJAAFmygABZssAAWbNAAFmzgABZw0AAWcPAAFnEQABZxMAAWcWAAFnFwABZxgAAWcZAAFnGgABZxwAAWceAAFnHwABZyAAAWciAAFnIwABZ2IAAWdkAAFnZgABZ2gAAWdrAAFnbAABZ20AAWduAAFnbwABZ3EAAWdzAAFndAABZ3UAAWd3AAFneAABZ7cAAWe5AAFnuwABZ70AAWfAAAFnwQABZ8IAAWfDAAFnxAABZ8YAAWfIAAFnyQABZ8oAAWfMAAFnzQABZ/IAAWgWAAFoPQABaGEAAWhkAAFoZgABaGgAAWhqAAFobAABaG4AAWhvAAFocgABaH8AAWiOAAFokAABaJIAAWiUAAFolgABaJgAAWiaAAFonAABaKsAAWiuAAFosQABaLQAAWi3AAFougABaL0AAWjAAAFowgABaQEAAWkDAAFpBQABaQcAAWkKAAFpCwABaQwAAWkNAAFpDgABaRAAAWkSAAFpEwABaRQAAWkWAAFpFwABaVYAAWlYAAFpWgABaVwAAWlfAAFpYAABaWEAAWliAAFpYwABaWUAAWlnAAFpaAABaWkAAWlrAAFpbAABaasAAWmtAAFprwABabEAAWm0AAFptQABabYAAWm3AAFpuAABaboAAWm8AAFpvQABab4AAWnAAAFpwQABagAAAWoCAAFqBAABagYAAWoJAAFqCgABagsAAWoMAAFqDQABag8AAWoRAAFqEgABahMAAWoVAAFqFgABalUAAWpXAAFqWQABalsAAWpeAAFqXwABamAAAWphAAFqYgABamQAAWpmAAFqZwABamgAAWpqAAFqawABaqoAAWqsAAFqrgABarAAAWqzAAFqtAABarUAAWq2AAFqtwABarkAAWq7AAFqvAABar0AAWq/AAFqwAABav8AAWsBAAFrAwABawUAAWsIAAFrCQABawoAAWsLAAFrDAABaw4AAWsQAAFrEQABaxIAAWsUAAFrFQABax4AAWsfAAFrIQABa2QAAWuIAAFrrAABa88AAWv2AAFsFgABbD0AAWxkAAFshAABbKgAAWzMAAFszgABbNEAAWzTAAFs1QABbNcAAWzaAAFs3QABbN8AAWzhAAFs5AABbOYAAWzoAAFs6wABbO4AAWzvAAFs9AABbQEAAW0EAAFtBgABbQkAAW0MAAFtDgABbTMAAW1XAAFtfgABbaIAAW2lAAFtpwABbakAAW2rAAFtrQABba8AAW2wAAFtswABbcAAAW3TAAFt1QABbdcAAW3ZAAFt2wABbd0AAW3fAAFt4QABbeMAAW3lAAFt+AABbfsAAW3+AAFuAQABbgQAAW4HAAFuCgABbg0AAW4QAAFuEwABbhUAAW5UAAFuVgABblkAAW5bAAFuXgABbl8AAW5gAAFuYQABbmIAAW5kAAFuZgABbmcAAW5oAAFuagABbmsAAW50AAFudQABbncAAW62AAFuuAABbroAAW68AAFuvwABbsAAAW7BAAFuwgABbsMAAW7FAAFuxwABbsgAAW7JAAFuywABbswAAW8LAAFvDQABbxAAAW8SAAFvFQABbxYAAW8XAAFvGAABbxkAAW8bAAFvHQABbx4AAW8fAAFvIQABbyIAAW8rAAFvLAABby4AAW9tAAFvbwABb3EAAW9zAAFvdgABb3cAAW94AAFveQABb3oAAW98AAFvfgABb38AAW+AAAFvggABb4MAAW/CAAFvxAABb8cAAW/JAAFvzAABb80AAW/OAAFvzwABb9AAAW/SAAFv1AABb9UAAW/WAAFv2AABb9kAAW/iAAFv4wABb+UAAXAkAAFwJgABcCgAAXAqAAFwLQABcC4AAXAvAAFwMAABcDEAAXAzAAFwNQABcDYAAXA3AAFwOQABcDoAAXB5AAFwewABcH4AAXCAAAFwgwABcIQAAXCFAAFwhgABcIcAAXCJAAFwiwABcIwAAXCNAAFwjwABcJAAAXCdAAFwngABcJ8AAXChAAFw4AABcOIAAXDkAAFw5gABcOkAAXDqAAFw6wABcOwAAXDtAAFw7wABcPEAAXDyAAFw8wABcPUAAXD2AAFxNQABcTcAAXE6AAFxPAABcT8AAXFAAAFxQQABcUIAAXFDAAFxRQABcUcAAXFIAAFxSQABcUsAAXFMAAFxXgABcWsAAXFyAAFxdQABcXgAAXF7AAFxggABcYUAAXGIAAFxiwABcY0AAXGaAAFxpQABcfAAAXITAAFyMwABclMAAXJVAAFyVwABclkAAXJbAAFyXgABcl8AAXJgAAFyYwABcmQAAXJmAAFyZwABcmkAAXJsAAFybQABcm4AAXJxAAFycgABcncAAXKEAAFyiQABcosAAXKNAAFykgABcpUAAXKYAAFymgABcr8AAXLjAAFzCgABcy4AAXMxAAFzMwABczUAAXM3AAFzOQABczsAAXM8AAFzPwABc0wAAXNdAAFzXwABc2EAAXNjAAFzZQABc2cAAXNpAAFzawABc20AAXN+AAFzgQABc4QAAXOHAAFzigABc40AAXOQAAFzkwABc5YAAXOYAAFz1wABc9kAAXPbAAFz3QABc+AAAXPhAAFz4gABc+MAAXPkAAFz5gABc+gAAXPpAAFz6gABc+wAAXPtAAF0LAABdC4AAXQwAAF0MgABdDUAAXQ2AAF0NwABdDgAAXQ5AAF0OwABdD0AAXQ+AAF0PwABdEEAAXRCAAF0gQABdIMAAXSGAAF0iAABdIsAAXSMAAF0jQABdI4AAXSPAAF0kQABdJMAAXSUAAF0lQABdJcAAXSYAAF0pQABdKYAAXSnAAF0qQABdOgAAXTqAAF07AABdO4AAXTxAAF08gABdPMAAXT0AAF09QABdPcAAXT5AAF0+gABdPsAAXT9AAF0/gABdT0AAXU/AAF1QQABdUMAAXVGAAF1RwABdUgAAXVJAAF1SgABdUwAAXVOAAF1TwABdVAAAXVSAAF1UwABdZIAAXWUAAF1lgABdZgAAXWbAAF1nAABdZ0AAXWeAAF1nwABdaEAAXWjAAF1pAABdaUAAXWnAAF1qAABdecAAXXpAAF16wABde0AAXXwAAF18QABdfIAAXXzAAF19AABdfYAAXX4AAF1+QABdfoAAXX8AAF1/QABdjwAAXY+AAF2QAABdkIAAXZFAAF2RgABdkcAAXZIAAF2SQABdksAAXZNAAF2TgABdk8AAXZRAAF2UgABdncAAXabAAF2wgABduYAAXbpAAF26wABdu0AAXbvAAF28QABdvMAAXb0AAF29wABdwQAAXcTAAF3FQABdxcAAXcZAAF3GwABdx0AAXcfAAF3IQABdzAAAXczAAF3NgABdzkAAXc8AAF3PwABd0IAAXdFAAF3RwABd4YAAXeIAAF3iwABd40AAXeQAAF3kQABd5IAAXeTAAF3lAABd5YAAXeYAAF3mQABd5oAAXecAAF3nQABd6EAAXfgAAF34gABd+QAAXfmAAF36QABd+oAAXfrAAF37AABd+0AAXfvAAF38QABd/IAAXfzAAF39QABd/YAAXg1AAF4NwABeDkAAXg7AAF4PgABeD8AAXhAAAF4QQABeEIAAXhEAAF4RgABeEcAAXhIAAF4SgABeEsAAXiKAAF4jAABeI4AAXiQAAF4kwABeJQAAXiVAAF4lgABeJcAAXiZAAF4mwABeJwAAXidAAF4nwABeKAAAXjfAAF44QABeOMAAXjlAAF46AABeOkAAXjqAAF46wABeOwAAXjuAAF48AABePEAAXjyAAF49AABePUAAXk0AAF5NgABeTgAAXk6AAF5PQABeT4AAXk/AAF5QAABeUEAAXlDAAF5RQABeUYAAXlHAAF5SQABeUoAAXmJAAF5iwABeY0AAXmPAAF5kgABeZMAAXmUAAF5lQABeZYAAXmYAAF5mgABeZsAAXmcAAF5ngABeZ8AAXnqAAF6DQABei0AAXpNAAF6TwABelEAAXpTAAF6VQABelgAAXpZAAF6WgABel0AAXpeAAF6YAABemEAAXpjAAF6ZgABemcAAXpoAAF6awABemwAAXpxAAF6fgABeoMAAXqFAAF6hwABeowAAXqPAAF6kgABepQAAXq5AAF63QABewQAAXsoAAF7KwABey0AAXsvAAF7MQABezMAAXs1AAF7NgABezkAAXtGAAF7VwABe1kAAXtbAAF7XQABe18AAXthAAF7YwABe2UAAXtnAAF7eAABe3sAAXt+AAF7gQABe4QAAXuHAAF7igABe40AAXuQAAF7kgABe9EAAXvTAAF71QABe9cAAXvaAAF72wABe9wAAXvdAAF73gABe+AAAXviAAF74wABe+QAAXvmAAF75wABfCYAAXwoAAF8KgABfCwAAXwvAAF8MAABfDEAAXwyAAF8MwABfDUAAXw3AAF8OAABfDkAAXw7AAF8PAABfHsAAXx9AAF8gAABfIIAAXyFAAF8hgABfIcAAXyIAAF8iQABfIsAAXyNAAF8jgABfI8AAXyRAAF8kgABfJ8AAXygAAF8oQABfKMAAXziAAF85AABfOYAAXzoAAF86wABfOwAAXztAAF87gABfO8AAXzxAAF88wABfPQAAXz1AAF89wABfPgAAX03AAF9OQABfTsAAX09AAF9QAABfUEAAX1CAAF9QwABfUQAAX1GAAF9SAABfUkAAX1KAAF9TAABfU0AAX2MAAF9jgABfZAAAX2SAAF9lQABfZYAAX2XAAF9mAABfZkAAX2bAAF9nQABfZ4AAX2fAAF9oQABfaIAAX3hAAF94wABfeUAAX3nAAF96gABfesAAX3sAAF97QABfe4AAX3wAAF98gABffMAAX30AAF99gABffcAAX42AAF+OAABfjoAAX48AAF+PwABfkAAAX5BAAF+QgABfkMAAX5FAAF+RwABfkgAAX5JAAF+SwABfkwAAX5xAAF+lQABfrwAAX7gAAF+4wABfuUAAX7nAAF+6QA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 + + /Users/soramitsu/Job/shared-features-spm/Sources/SSFAccountManagmentStorage/Resources/UserDataModel.xcdatamodeld/MultiassetUserDataModel_v12.xcdatamodel + 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uZmlndXJhdGlvbnNCeU5hbWVfEBdfbW9kZWxWZXJzaW9uSWRlbnRpZmllcoACgQUEgACBBQGBBQKBBQPeABoAGwAcAB0AHgAfACAADgAhACIAIwAkACUAJgAnACgAKQAJACcAFQAtAC4ALwAwADEAJwAnABVfEBxYREJ1Y2tldEZvckNsYXNzZXN3YXNFbmNvZGVkXxAaWERCdWNrZXRGb3JQYWNrYWdlc3N0b3JhZ2VfEBxYREJ1Y2tldEZvckludGVyZmFjZXNzdG9yYWdlXxAPX3hkX293bmluZ01vZGVsXxAdWERCdWNrZXRGb3JQYWNrYWdlc3dhc0VuY29kZWRWX293bmVyXxAbWERCdWNrZXRGb3JEYXRhVHlwZXNzdG9yYWdlW192aXNpYmlsaXR5XxAZWERCdWNrZXRGb3JDbGFzc2Vzc3RvcmFnZVVfbmFtZV8QH1hEQnVja2V0Rm9ySW50ZXJmYWNlc3dhc0VuY29kZWRfEB5YREJ1Y2tldEZvckRhdGFUeXBlc3dhc0VuY29kZWRfEBBfdW5pcXVlRWxlbWVudElEgASBBP+BBP2AAYAEgACBBP6BBQAQAIAFgAOABIAEgABQU1lFU9MAOAA5AA4AOgBCAEpXTlMua2V5c1pOUy5vYmplY3RzpwA7ADwAPQA+AD8AQABBgAaAB4AIgAmACoALgAynAEMARABFAEYARwBIAEmADYEDUoEEFoEEW4CAgQSggQHwgCtfEBFDREFzc2V0VmlzaWJpbGl0eV5DRENoYWluQWNjb3VudF8QEUNEQ3VzdG9tQ2hhaW5Ob2RlXUNEQWNjb3VudEluZm9dQ0RNZXRhQWNjb3VudF8QD0NEQ2hhaW5TZXR0aW5nc1pDREN1cnJlbmN53xAQAFMAVABVAFYAHwBXAFgAIQBZAFoADgAjAFsAXAAmAF0AXgBfACcAJwATAGMAZAAvACcAXgBnADsAXgBqAGsAbF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc2R1cGxpY2F0ZXNfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zc3RvcmFnZVtfaXNBYnN0cmFjdIAPgDOABIAEgAKAEIECeoAEgA+BAnyABoAPgQQVgA4IEwAAAAEg8JdAV29yZGVyZWTTADgAOQAOAHAAcgBKoQBxgBGhAHOAEoArXlhEX1BTdGVyZW90eXBl2QAfACMAdwAOACYAeAAhAF0AeQBDAHEAXgB9ABUAJwAvAGwAgV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYANgBGAD4AygACABAiAE9MAOAA5AA4AgwCNAEqpAIQAhQCGAIcAiACJAIoAiwCMgBSAFYAWgBeAGIAZgBqAG4AcqQCOAI8AkACRAJIAkwCUAJUAloAdgCGAIoAkgCWAJ4ApgCyAMIArXxATWERQTUNvbXBvdW5kSW5kZXhlc18QEFhEX1BTS19lbGVtZW50SURfEBlYRFBNVW5pcXVlbmVzc0NvbnN0cmFpbnRzXxAaWERfUFNLX3ZlcnNpb25IYXNoTW9kaWZpZXJfEBlYRF9QU0tfZmV0Y2hSZXF1ZXN0c0FycmF5XxARWERfUFNLX2lzQWJzdHJhY3RfEA9YRF9QU0tfdXNlckluZm9fEBNYRF9QU0tfY2xhc3NNYXBwaW5nXxAWWERfUFNLX2VudGl0eUNsYXNzTmFtZd8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAK0AFQBzAGwAbABsAC8AbAC0AIQAbABsABUAbFVfdHlwZVhfZGVmYXVsdFxfYXNzb2NpYXRpb25bX2lzUmVhZE9ubHlZX2lzU3RhdGljWV9pc1VuaXF1ZVpfaXNEZXJpdmVkWl9pc09yZGVyZWRcX2lzQ29tcG9zaXRlV19pc0xlYWaAAIAegACAEggICAiAIIAUCAiAAAjSADkADgC7ALyggB/SAL4AvwDAAMFaJGNsYXNzbmFtZVgkY2xhc3Nlc15OU011dGFibGVBcnJheaMAwADCAMNXTlNBcnJheVhOU09iamVjdNIAvgC/AMUAxl8QEFhEVU1MUHJvcGVydHlJbXCkAMcAyADJAMNfEBBYRFVNTFByb3BlcnR5SW1wXxAUWERVTUxOYW1lZEVsZW1lbnRJbXBfEA9YRFVNTEVsZW1lbnRJbXDfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQAVABUAcwBsAGwAbAAvAGwAtACFAGwAbAAVAGyAAIAAgACAEggICAiAIIAVCAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQDbABUAcwBsAGwAbAAvAGwAtACGAGwAbAAVAGyAAIAjgACAEggICAiAIIAWCAiAAAjSADkADgDpALyggB/fEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQAVABUAcwBsAGwAbAAvAGwAtACHAGwAbAAVAGyAAIAAgACAEggICAiAIIAXCAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQD8ABUAcwBsAGwAbAAvAGwAtACIAGwAbAAVAGyAAIAmgACAEggICAiAIIAYCAiAAAjSADkADgEKALyggB/fEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQEOABUAcwBsAGwAbAAvAGwAtACJAGwAbAAVAGyAAIAogACAEggICAiAIIAZCAiAAAgI3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUBHgAVAHMAbABsAGwALwBsALQAigBsAGwAFQBsgACAKoAAgBIICAgIgCCAGggIgAAI0wA4ADkADgEsAS0ASqCggCvSAL4AvwEwATFfEBNOU011dGFibGVEaWN0aW9uYXJ5owEwATIAw1xOU0RpY3Rpb25hcnnfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQE1ABUAcwBsAGwAbAAvAGwAtACLAGwAbAAVAGyAAIAtgACAEggICAiAIIAbCAiAAAjWACMADgAmAF0AHwAhAUMBRAAVAGwAFQAvgC6AL4AACIAAXxAUWERHZW5lcmljUmVjb3JkQ2xhc3PSAL4AvwFKAUtdWERVTUxDbGFzc0ltcKYBTAFNAU4BTwFQAMNdWERVTUxDbGFzc0ltcF8QElhEVU1MQ2xhc3NpZmllckltcF8QEVhEVU1MTmFtZXNwYWNlSW1wXxAUWERVTUxOYW1lZEVsZW1lbnRJbXBfEA9YRFVNTEVsZW1lbnRJbXDfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQFTABUAcwBsAGwAbAAvAGwAtACMAGwAbAAVAGyAAIAxgACAEggICAiAIIAcCAiAAAhfEBFDREFzc2V0VmlzaWJpbGl0edIAvgC/AWIBY18QElhEVU1MU3RlcmVvdHlwZUltcKcBZAFlAWYBZwFoAWkAw18QElhEVU1MU3RlcmVvdHlwZUltcF1YRFVNTENsYXNzSW1wXxASWERVTUxDbGFzc2lmaWVySW1wXxARWERVTUxOYW1lc3BhY2VJbXBfEBRYRFVNTE5hbWVkRWxlbWVudEltcF8QD1hEVU1MRWxlbWVudEltcNMAOAA5AA4BawFvAEqjAWwBbQFugDSANYA2owFwAXEBcoA3gGKBA/6AK1dhc3NldElkVndhbGxldFZoaWRkZW7fEBIAogCjAKQBeAAfAKYApwF5ACEApQF6AKgADgAjAKkAqgAmAKsAFQAVABUAJwBDAGwAbAGCAC8AbABeAGwBhgFsAGwAbAGKAGxfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIANCAiAOQiADwiAYYA0CAiAOAgSsjqcXdMAOAA5AA4BjgGRAEqiAY8BkIA6gDuiAZIBk4A8gFCAK18QElhEX1BQcm9wU3RlcmVvdHlwZV8QElhEX1BBdHRfU3RlcmVvdHlwZdkAHwAjAZgADgAmAZkAIQBdAZoBcAGPAF4AfQAVACcALwBsAaJfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmV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Ab4BwgCvfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQEOABUC7gBsAGwAbAAvAGwAtAGlAGwAbAAVAGyAAIAogACAZggICAiAIIA+CAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQAVABUC7gBsAGwAbAAvAGwAtAGmAGwAbAAVAGyAAIAAgACAZggICAiAIIA/CAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFQMyABUC7gBsAGwAbAAvAGwAtAGnAGwAbAAVAGyAAIBrgACAZggICAiAIIBACAiAAAjTADgAOQAOA0ADQQBKoKCAK98QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQLuAGwAbABsAC8AbAC0AagAbABsABUAbIAAgCiAAIBmCAgICIAggEEICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQLuAGwAbABsAC8AbAC0AakAbABsABUAbIAAgCiAAIBmCAgICIAggEIICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQLuAGwAbABsAC8AbAC0AaoAbABsABUAbIAAgCiAAIBmCAgICIAggEMICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFQLuAGwAbABsAC8AbAC0AasAbABsABUAbIAAgACAAIBmCAgICIAggEQICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFQLuAGwAbABsAC8AbAC0AawAbABsABUAbIAAgCiAAIBmCAgICIAggEUICIAACNkAHwAjA48ADgAmA5AAIQBdA5EBcQLsAF4AfQAVACcALwBsA5lfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WAYoBlgA+AMoAAgAQIgHLTADgAOQAOA5sDowBKpwOcA50DngOfA6ADoQOigHOAdIB1gHaAd4B4gHm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IgQSk0wA4ADkADjoNOhcASqkAhACFAIYAhwCIAIkAigCLAIyAFIAVgBaAF4AYgBmAGoAbgBypOhg6GToaOhs6HDodOh46HzoggQSlgQSngQSogQSqgQSrgQStgQSugQSwgQSxgCvfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFTokABU5/gBsAGwAbAAvAGwAtACEAGwAbAAVAGyAAIEEpoAAgQSjCAgICIAggBQICIAACNIAOQAOOjIAvKCAH98QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFTn+AGwAbABsAC8AbAC0AIUAbABsABUAbIAAgACAAIEEowgICAiAIIAVCAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFTpFABU5/gBsAGwAbAAvAGwAtACGAGwAbAAVAGyAAIEEqYAAgQSjCAgICIAggBYICIAACNIAOQAOOlMAvKCAH98QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVABUAFTn+AGwAbABsAC8AbAC0AIcAbABsABUAbIAAgACAAIEEowgICAiAIIAXCAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFTpmABU5/gBsAGwAbAAvAGwAtACIAGwAbAAVAGyAAIEErIAAgQSjCAgICIAggBgICIAACNIAOQAOOnQAvKCAH98QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVAQ4AFTn+AGwAbABsAC8AbAC0AIkAbABsABUAbIAAgCiAAIEEowgICAiAIIAZCAiAAAjfEA8AogCjAKQAHwClAKYApwAhAKgADgAjAKkAqgAmAKsAFTqHABU5/gBsAGwAbAAvAGwAtACKAGwAbAAVAGyAAIEEr4AAgQSjCAgICIAggBoICIAACNMAOAA5AA46lTqWAEqgoIAr3xAPAKIAowCkAB8ApQCmAKcAIQCoAA4AIwCpAKoAJgCrABUBNQAVOf4AbABsAGwALwBsALQAiwBsAGwAFQBsgACALYAAgQSjCAgICIAggBsICIAACN8QDwCiAKMApAAfAKUApgCnACEAqAAOACMAqQCqACYAqwAVOqkAFTn+AGwAbABsAC8AbAC0AIwAbABsABU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AADIVAAAyFwAAMhkAADIbAAAyHAAAMh0AADIfAAAyIAAAMiIAADIjAAAyJQAAMicAADIoAAAyKQAAMisAADIsAAAyMQAAMj4AADJDAAAyRQAAMkcAADJMAAAyTgAAMlAAADJSAAAydwAAMpsAADLCAAAy5gAAMugAADLqAAAy7AAAMu4AADLwAAAy8gAAMvMAADL1AAAzAgAAMxMAADMVAAAzFwAAMxkAADMbAAAzHQAAMx8AADMhAAAzIwAAMzQAADM2AAAzOAAAMzoAADM8AAAzPgAAM0AAADNCAAAzRAAAM0YAADOFAAAzhwAAM4kAADOLAAAzjQAAM44AADOPAAAzkAAAM5EAADOTAAAzlQAAM5YAADOXAAAzmQAAM5oAADPZAAAz2wAAM90AADPfAAAz4QAAM+IAADPjAAAz5AAAM+UAADPnAAAz6QAAM+oAADPrAAAz7QAAM+4AADQtAAA0LwAANDEAADQzAAA0NQAANDYAADQ3AAA0OAAANDkAADQ7AAA0PQAAND4AADQ/AAA0QQAANEIAADRPAAA0UAAANFEAADRTAAA0kgAANJQAADSWAAA0mAAANJoAADSbAAA0nAAANJ0AADSeAAA0oAAANKIAADSjAAA0pAAANKYAADSnAAA05gAANOgAADTqAAA07AAANO4AADTvAAA08AAANPEAADTyAAA09AAANPYAADT3AAA0+AAANPoAADT7AAA1OgAANTwAADU+AAA1QAAANUIAADVDAAA1RAAANUUAADVGAAA1SAAANUoAADVLAAA1TAAANU4AADVPAAA1jgAANZAAADWSAAA1lAAANZYAADWXAAA1mAAANZkAADWaAAA1nAAANZ4AADWfAAA1oAAANaIAADWjAAA14gAANeQAADXmAAA16AAANeoAADXrAAA17AAANe0AADXuAAA18AAANfIAADXzAAA19AAANfYAADX3AAA2HAAANkAAADZnAAA2iwAANo0AADaPAAA2kQAANpMAADaVAAA2lwAANpgAADaaAAA2pwAANrYAADa4AAA2ugAANrwAADa+AAA2wAAANsIAADbEAAA20wAANtUAADbXAAA22QAANtsAADbdAAA23wAANuEAADbjAAA3IgAANyQAADcmAAA3KAAANyoAADcrAAA3LAAANy0AADcuAAA3MAAANzIAADczAAA3NAAANzY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AAEKOAABCkAAAQpIAAEKUAABClQAAQpcAAEKkAABCtQAAQrcAAEK5AABCuwAAQr0AAEK/AABCwQAAQsMAAELFAABC1gAAQtgAAELaAABC3AAAQt4AAELgAABC4gAAQuQAAELmAABC6AAAQycAAEMpAABDKwAAQy0AAEMvAABDMAAAQzEAAEMyAABDMwAAQzUAAEM3AABDOAAAQzkAAEM7AABDPAAAQ3sAAEN9AABDfwAAQ4EAAEODAABDhAAAQ4UAAEOGAABDhwAAQ4kAAEOLAABDjAAAQ40AAEOPAABDkAAAQ88AAEPRAABD0wAAQ9UAAEPXAABD2AAAQ9kAAEPaAABD2wAAQ90AAEPfAABD4AAAQ+EAAEPjAABD5AAAQ/EAAEPyAABD8wAAQ/UAAEQ0AABENgAARDgAAEQ6AABEPAAARD0AAEQ+AABEPwAAREAAAERCAABERAAAREUAAERGAABESAAAREkAAESIAABEigAARIwAAESOAABEkAAARJEAAESSAABEkwAARJQAAESWAABEmAAARJkAAESaAABEnAAARJ0AAETcAABE3gAAROAAAETiAABE5AAAROUAAETmAABE5wAAROgAAETqAABE7AAARO0AAETuAABE8AAARPEAAEUwAABFMgAARTQAAEU2AABFOAAARTkAAEU6AABFOwAARTwAAEU+AABFQAAARUEAAEVCAABFRAAARUUAAEWEAABFhgAARYgAAEWKAABFjAAARY0AAEWOAABFjwAARZAAAEWSAABFlAAARZUAAEWWAABFmAAARZkAAEW+AABF4gAARgkAAEYtAABGLwAARjEAAEYzAABGNQAARjcAAEY5AABGOgAARjwAAEZJAABGWAAARloAAEZcAABGXgAARmAAAEZiAABGZAAARmYAAEZ1AABGdwAARnkAAEZ7AABGfQAARn8AAEaBAABGgwAARoUAAEbEAABGxgAARsgAAEbKAABGzAAARs0AAEbOAABGzwAARtAAAEbSAABG1AAARtUAAEbWAABG2AAARtkAAEcYAABHGgAARxwAAEceAABHIAAARyEAAEciAABHIwAARyQAAEcmAABHKAAARykAAEcqAABHLAAARy0AAEdsAABHbgAAR3AAAEdyAABHdAAAR3UAAEd2AABHdwAAR3gAAEd6AABHfAAAR30AAEd+AABHgAAAR4EAAEfAAABHwgAAR8QAAEfGAABHyAAAR8kAAEfKAABHywAAR8wAAEfOAABH0AAAR9EAAEfSAABH1AAAR9UAAEfYAABIFwAASBkAAEgbAABIHQAASB8AAEggAABIIQAASCIAAEgjAABIJQAASCcAAEgoAABIKQAASCsAAEgsAABIawAASG0AAEhvAABIcQAASHMAAEh0AABIdQAASHYAAEh3AABIeQAASHsAAEh8AABIfQAASH8AAEiAAABInAAASNsAAEjdAABI3wAASOEAAEjjAABI5AAASOUAAEjmAABI5wAASOkAAEjrAABI7AAASO0AAEjvAABI8AAASTsAAEleAABJfgAASZ4AAEmgAABJogAASaQAAEmmAABJqAAASakAAEmqAABJrAAASa0AAEmvAABJsAAASbMAAEm1AABJtgAASbcAAEm5AABJugAASb8AAEnMAABJ0QAASdMAAEnVAABJ2gAASdwAAEnfAABJ4QAASgYAAEoqAABKUQAASnUAAEp3AABKeQAASnsAAEp9AABKfwAASoEAAEqCAABKhAAASpEAAEqiAABKpAAASqYAAEqoAABKqgAASqwAAEquAABKsAAASrIAAErDAABKxQAASscAAErJAABKywAASs0AAErPAABK0gAAStUAAErXAABLFgAASxgAAEsaAABLHAAASx4AAEsfAABLIAAASyEAAEsiAABLJAAASyYAAEsnAABLKAAASyoAAEsrAABLagAAS2wAAEtuAABLcAAAS3IAAEtzAABLdAAAS3UAAEt2AABLeAAAS3oAAEt7AABLfAAAS34AAEt/AABLvgAAS8AAAEvCAABLxAAAS8YAAEvHAABLyAAAS8kAAEvKAABLzAAAS84AAEvPAABL0AAAS9IAAEvTAABL4AAAS+EAAEviAABL5AAATCMAAEwlAABMJwAATCkAAEwrAABMLAAATC0AAEwuAABMLwAATDEAAEwzAABMNAAATDUAAEw3AABMOAAATHcAAEx5AABMewAATH0AAEx/AABMgAAATIEAAEyCAABMgwAATIUAAEyHAABMiAAATIkAAEyLAABMjAAATMsAAEzNAABMzwAATNEAAEzTAABM1AAATNUAAEzWAABM1wAATNkAAEzbAABM3AAATN0AAEzfAABM4AAATR8AAE0hAABNIwAATSUAAE0nAABNKAAATSkAAE0qAABNKwAATS0AAE0vAABNMAAATTEAAE0zAABNNAAATXMAAE11AABNdwAATXkAAE17AABNfAAATX0AAE1+AABNfwAATYEAAE2DAABNhAAATYUAAE2HAABNiAAATa0AAE3RAABN+AAAThwAAE4eAABOIAAATiIAAE4kAABOJgAATigAAE4pAABOLAAATjkAAE5IAABOSgAATkwAAE5OAABOUAAATlIAAE5UAABOVgAATmUAAE5oAABOawAATm4AAE5xAABOdAAATncAAE56AABOfAAATrsAAE69AABOvwAATsEAAE7EAABOxQAATsYAAE7HAABOyAAATsoAAE7MAABOzQAATs4AAE7QAABO0QAATxAAAE8SAABPFQAATxcAAE8aAABPGwAATxwAAE8dAABPHgAATyAAAE8iAABPIwAATyQAAE8mAABPJwAATykAAE9oAABPagAAT2wAAE9uAABPcQAAT3IAAE9zAABPdAAAT3UAAE93AABPeQAAT3oAAE97AABPfQAAT34AAE+9AABPvwAAT8EAAE/DAABPxgAAT8cAAE/IAABPyQAAT8oAAE/MAABPzgAAT88AAE/QAABP0gAAT9MAAFASAABQFAAAUBYAAFAYAABQGwAAUBwAAFAdAABQHgAAUB8AAFAhAABQIwAAUCQAAFAlAABQJwAAUCgAAFBnAABQaQAAUGsAAFBtAABQcAAAUHEAAFByAABQcwAAUHQAAFB2AABQeAAAUHkAAFB6AABQfAAAUH0AAFC8AABQvgAAUMAAAFDCAABQxQAAUMYAAFDHAABQyAAAUMkAAFDLAABQzQAAUM4AAFDPAABQ0QAAUNIAAFDbAABQ7gAAUPsAAFEOAABRGwAAUS4AAFFFAABRVwAAUaIAAFHFAABR5QAAUgUAAFIHAABSCQAAUgsAAFINAABSDwAAUhAAAFIRAABSFAAAUhUAAFIXAABSGAAAUhoAAFIcAABSHQAAUh4AAFIhAABSIgAAUicAAFI0AABSOQAAUjsAAFI9AABSQgAAUkUAAFJIAABSSgAAUm8AAFKTAABSugAAUt4AAFLhAABS4wAAUuUAAFLnAABS6QAAUusAAFLsAABS7wAAUvwAAFMNAABTDwAAUxEAAFMTAABTFQAAUxcAAFMZAABTGwAAUx0AAFMuAABTMQAAUzQAAFM3AABTOgAAUz0AAFNAAABTQwAAU0YAAFNIAABThwAAU4kAAFOLAABTjQAAU5AAAFORAABTkgAAU5MAAFOUAABTlgAAU5gAAFOZAABTmgAAU5wAAFOdAABT3AAAU94AAFPgAABT4gAAU+UAAFPmAABT5wAAU+gAAFPpAABT6wAAU+0AAFPuAABT7wAAU/EAAFPyAABUMQAAVDMAAFQ2AABUOAAAVDsAAFQ8AABUPQAAVD4AAFQ/AABUQQAAVEMAAFREAABURQAAVEcAAFRIAABUVQAAVFYAAFRXAABUWQAAVJgAAFSaAABUnAAAVJ4AAFShAABUogAAVKMAAFSkAABUpQAAVKcAAFSpAABUqgAAVKsAAFStAABUrgAAVO0AAFTvAABU8QAAVPMAAFT2AABU9wAAVPgAAFT5AABU+gAAVPwAAFT+AABU/wAAVQAAAFUCAABVAwAAVUIAAFVEAABVRgAAVUgAAFVLAABVTAAAVU0AAFVOAABVTwAAVVEAAFVTAABVVAAAVVUAAFVXAABVWAAAVZcAAFWZAABVmwAAVZ0AAFWgAABVoQAAVaIAAFWjAABVpAAAVaYAAFWoAABVqQAAVaoAAFWsAABVrQAAVewAAFXuAABV8AAAVfIAAFX1AABV9gAAVfcAAFX4AABV+QAAVfsAAFX9AABV/gAAVf8AAFYBAABWAgAAVicAAFZLAABWcgAAVpYAAFaZAABWmwAAVp0AAFafAABWoQAAVqMAAFakAABWpwAAVrQAAFbDAABWxQAAVscAAFbJAABWywAAVs0AAFbPAABW0QAAVuAAAFbjAABW5gAAVukAAFbsAABW7wAAVvIAAFb1AABW9wAAVzYAAFc4AABXOgAAVzwAAFc/AABXQAAAV0EAAFdCAABXQwAAV0UAAFdHAABXSAAAV0kAAFdLAABXTAAAV4sAAFeNAABXjwAAV5EAAFeUAABXlQAAV5YAAFeXAABXmAAAV5oAAFecAABXnQAAV54AAFegAABXoQAAV+AAAFfiAABX5AAAV+YAAFfpAABX6gAAV+sAAFfsAABX7QAAV+8AAFfxAABX8gAAV/MAAFf1AABX9gAAWDUAAFg3AABYOQAAWDsAAFg+AABYPwAAWEAAAFhBAABYQgAAWEQAAFhGAABYRwAAWEgAAFhKAABYSwAAWIoAAFiMAABYjgAAWJAAAFiTAABYlAAAWJUAAFiWAABYlwAAWJkAAFibAABYnAAAWJ0AAFifAABYoAAAWN8AAFjhAABY4wAAWOUAAFjoAABY6QAAWOoAAFjrAABY7AAAWO4AAFjwAABY8QAAWPIAAFj0AABY9QAAWTQAAFk2AABZOAAAWToAAFk9AABZPgAAWT8AAFlAAABZQQAAWUMAAFlFAABZRgAAWUcAAFlJAABZSgAAWZUAAFm4AABZ2AAAWfgAAFn6AABZ/AAAWf4AAFoAAABaAgAAWgMAAFoEAABaBwAAWggAAFoKAABaCwAAWg0AAFoPAABaEAAAWhEAAFoUAABaFQAAWhoAAFonAABaLAAAWi4AAFowAABaNQAAWjgAAFo7AABaPQAAWmIAAFqGAABarQAAWtEAAFrUAABa1gAAWtgAAFraAABa3AAAWt4AAFrfAABa4gAAWu8AAFsAAABbAgAAWwQAAFsGAABbCAAAWwoAAFsMAABbDgAAWxAAAFshAABbJAAAWycAAFsqAABbLQAAWzAAAFszAABbNgAAWzkAAFs7AABbegAAW3wAAFt+AABbgAAAW4MAAFuEAABbhQAAW4YAAFuHAABbiQAAW4sAAFuMAABbjQAAW48AAFuQAABbzwAAW9EAAFvTAABb1QAAW9gAAFvZAABb2gAAW9sAAFvcAABb3gAAW+AAAFvhAABb4gAAW+QAAFvlAABcJAAAXCYAAFwpAABcKwAAXC4AAFwvAABcMAAAXDEAAFwyAABcNAAAXDYAAFw3AABcOAAAXDoAAFw7AABcSAAAXEkAAFxKAABcTAAAXIsAAFyNAABcjwAAXJEAAFyUAABclQAAXJYAAFyXAABcmAAAXJoAAFycAABcnQAAXJ4AAFygAABcoQAAXOAAAFziAABc5AAAXOYAAFzpAABc6gAAXOsAAFzsAABc7QAAXO8AAFzxAABc8gAAXPMAAFz1AABc9gAAXTUAAF03AABdOQAAXTsAAF0+AABdPwAAXUAAAF1BAABdQgAAXUQAAF1GAABdRwAAXUgAAF1KAABdSwAAXYoAAF2MAABdjgAAXZAAAF2TAABdlAAAXZUAAF2WAABdlwAAXZkAAF2bAABdnAAAXZ0AAF2fAABdoAAAXd8AAF3hAABd4wAAXeUAAF3oAABd6QAAXeoAAF3rAABd7AAAXe4AAF3wAABd8QAAXfIAAF30AABd9QAAXhoAAF4+AABeZQAAXokAAF6MAABejgAAXpAAAF6SAABelAAAXpYAAF6XAABemgAAXqcAAF62AABeuAAAXroAAF68AABevgAAXsAAAF7CAABexAAAXtMAAF7WAABe2QAAXtwAAF7fAABe4gAAXuUAAF7oAABe6gAAXykAAF8rAABfLQAAXy8AAF8yAABfMwAAXzQAAF81AABfNgAAXzgAAF86AABfOwAAXzwAAF8+AABfPwAAX34AAF+AAABfggAAX4QAAF+HAABfiAAAX4kAAF+KAABfiwAAX40AAF+PAABfkAAAX5EAAF+TAABflAAAX9MAAF/VAABf1wAAX9kAAF/cAABf3QAAX94AAF/fAABf4AAAX+IAAF/kAABf5QAAX+YAAF/oAABf6QAAYCgAAGAqAABgLQAAYC8AAGAyAABgMwAAYDQAAGA1AABgNgAAYDgAAGA6AABgOwAAYDwAAGA+AABgPwAAYEIAAGCBAABggwAAYIUAAGCHAABgigAAYIsAAGCMAABgjQAAYI4AAGCQAABgkgAAYJMAAGCUAABglgAAYJcAAGDWAABg2AAAYNoAAGDcAABg3wAAYOAAAGDhAABg4gAAYOMAAGDlAABg5wAAYOgAAGDpAABg6wAAYOwAAGErAABhLQAAYS8AAGExAABhNAAAYTUAAGE2AABhNwAAYTgAAGE6AABhPAAAYT0AAGE+AABhQAAAYUEAAGGMAABhrwAAYc8AAGHvAABh8QAAYfMAAGH1AABh9wAAYfkAAGH6AABh+wAAYf4AAGH/AABiAQAAYgIAAGIEAABiBgAAYgcAAGIIAABiCwAAYgwAAGIRAABiHgAAYiMAAGIlAABiJwAAYiwAAGIvAABiMgAAYjQAAGJZAABifQAAYqQAAGLIAABiywAAYs0AAGLPAABi0QAAYtMAAGLVAABi1gAAYtkAAGLmAABi9wAAYvkAAGL7AABi/QAAYv8AAGMBAABjAwAAYwUAAGMHAABjGAAAYxsAAGMeAABjIQAAYyQAAGMnAABjKgAAYy0AAGMwAABjMgAAY3EAAGNzAABjdQAAY3cAAGN6AABjewAAY3wAAGN9AABjfgAAY4AAAGOCAABjgwAAY4QAAGOGAABjhwAAY8YAAGPIAABjygAAY8wAAGPPAABj0AAAY9EAAGPSAABj0wAAY9UAAGPXAABj2AAAY9kAAGPbAABj3AAAZBsAAGQdAABkIAAAZCIAAGQlAABkJgAAZCcAAGQoAABkKQAAZCsAAGQtAABkLgAAZC8AAGQxAABkMgAAZD8AAGRAAABkQQAAZEMAAGSCAABkhAAAZIYAAGSIAABkiwAAZIwAAGSNAABkjgAAZI8AAGSRAABkkwAAZJQAAGSVAABklwAAZJgAAGTXAABk2QAAZNsAAGTdAABk4AAAZOEAAGTiAABk4wAAZOQAAGTmAABk6AAAZOkAAGTqAABk7AAAZO0AAGUsAABlLgAAZTAAAGUyAABlNQAAZTYAAGU3AABlOAAAZTkAAGU7AABlPQAAZT4AAGU/AABlQQAAZUIAAGWBAABlgwAAZYUAAGWHAABligAAZYsAAGWMAABljQAAZY4AAGWQAABlkgAAZZMAAGWUAABllgAAZZcAAGXWAABl2AAAZdoAAGXcAABl3wAAZeAAAGXhAABl4gAAZeMAAGXlAABl5wAAZegAAGXpAABl6wAAZewAAGYRAABmNQAAZlwAAGaAAABmgwAAZoUAAGaHAABmiQAAZosAAGaNAABmjgAAZpEAAGaeAABmrQAAZq8AAGaxAABmswAAZrUAAGa3AABmuQAAZrsAAGbKAABmzQAAZtAAAGbTAABm1gAAZtkAAGbcAABm3wAAZuEAAGcgAABnIgAAZyQAAGcmAABnKQAAZyoAAGcrAABnLAAAZy0AAGcvAABnMQAAZzIAAGczAABnNQAAZzYAAGd1AABndwAAZ3kAAGd7AABnfgAAZ38AAGeAAABngQAAZ4IAAGeEAABnhgAAZ4cAAGeIAABnigAAZ4sAAGfKAABnzAAAZ84AAGfQAABn0wAAZ9QAAGfVAABn1gAAZ9cAAGfZAABn2wAAZ9wAAGfdAABn3wAAZ+AAAGgfAABoIQAAaCMAAGglAABoKAAAaCkAAGgqAABoKwAAaCwAAGguAABoMAAAaDEAAGgyAABoNAAAaDUAAGh0AABodgAAaHgAAGh6AABofQAAaH4AAGh/AABogAAAaIEAAGiDAABohQAAaIYAAGiHAABoiQAAaIoAAGjJAABoywAAaM0AAGjPAABo0gAAaNMAAGjUAABo1QAAaNYAAGjYAABo2gAAaNsAAGjcAABo3gAAaN8AAGkeAABpIAAAaSIAAGkkAABpJwAAaSgAAGkpAABpKgAAaSsAAGktAABpLwAAaTAAAGkxAABpMwAAaTQAAGl/AABpogAAacIAAGniAABp5AAAaeYAAGnoAABp6gAAaewAAGntAABp7gAAafEAAGnyAABp9AAAafUAAGn3AABp+QAAafoAAGn7AABp/gAAaf8AAGoEAABqEQAAahYAAGoYAABqGgAAah8AAGoiAABqJQAAaicAAGpMAABqcAAAapcAAGq7AABqvgAAasAAAGrCAABqxAAAasYAAGrIAABqyQAAaswAAGrZAABq6gAAauwAAGruAABq8AAAavIAAGr0AABq9gAAavgAAGr6AABrCwAAaw4AAGsRAABrFAAAaxcAAGsaAABrHQAAayAAAGsjAABrJQAAa2QAAGtmAABraAAAa2oAAGttAABrbgAAa28AAGtwAABrcQAAa3MAAGt1AABrdgAAa3cAAGt5AABregAAa7kAAGu7AABrvQAAa78AAGvCAABrwwAAa8QAAGvFAABrxgAAa8gAAGvKAABrywAAa8wAAGvOAABrzwAAbA4AAGwQAABsEwAAbBUAAGwYAABsGQAAbBoAAGwbAABsHAAAbB4AAGwgAABsIQAAbCIAAGwkAABsJQAAbDIAAGwzAABsNAAAbDYAAGx1AABsdwAAbHkAAGx7AABsfgAAbH8AAGyAAABsgQAAbIIAAGyEAABshgAAbIcAAGyIAABsigAAbIsAAGzKAABszAAAbM4AAGzQAABs0wAAbNQAAGzVAABs1gAAbNcAAGzZAABs2wAAbNwAAGzdAABs3wAAbOAAAG0fAABtIQAAbSMAAG0lAABtKAAAbSkAAG0qAABtKwAAbSwAAG0uAABtMAAAbTEAAG0yAABtNAAAbTUAAG10AABtdgAAbXgAAG16AABtfQAAbX4AAG1/AABtgAAAbYEAAG2DAABthQAAbYYAAG2HAABtiQAAbYoAAG3JAABtywAAbc0AAG3PAABt0gAAbdMAAG3UAABt1QAAbdYAAG3YAABt2gAAbdsAAG3cAABt3gAAbd8AAG4EAABuKAAAbk8AAG5zAABudgAAbngAAG56AABufAAAbn4AAG6AAABugQAAboQAAG6RAABuoAAAbqIAAG6kAABupgAAbqgAAG6qAABurAAAbq4AAG69AABuwAAAbsMAAG7GAABuyQAAbswAAG7PAABu0gAAbtQAAG8TAABvFQAAbxcAAG8ZAABvHAAAbx0AAG8eAABvHwAAbyAAAG8iAABvJAAAbyUAAG8mAABvKAAAbykAAG9oAABvagAAb2wAAG9uAABvcQAAb3IAAG9zAABvdAAAb3UAAG93AABveQAAb3oAAG97AABvfQAAb34AAG+9AABvvwAAb8EAAG/DAABvxgAAb8cAAG/IAABvyQAAb8oAAG/MAABvzgAAb88AAG/QAABv0gAAb9MAAHASAABwFAAAcBYAAHAYAABwGwAAcBwAAHAdAABwHgAAcB8AAHAhAABwIwAAcCQAAHAlAABwJwAAcCgAAHBnAABwaQAAcGsAAHBtAABwcAAAcHEAAHByAABwcwAAcHQAAHB2AABweAAAcHkAAHB6AABwfAAAcH0AAHC8AABwvgAAcMEAAHDDAABwxgAAcMcAAHDIAABwyQAAcMoAAHDMAABwzgAAcM8AAHDQAABw0gAAcNMAAHDvAABxLgAAcTAAAHEyAABxNAAAcTcAAHE4AABxOQAAcToAAHE7AABxPQAAcT8AAHFAAABxQQAAcUMAAHFEAABxjwAAcbIAAHHSAABx8gAAcfQAAHH2AABx+AAAcfoAAHH8AABx/QAAcf4AAHIBAAByAgAAcgQAAHIFAAByBwAAcgkAAHIKAAByCwAAcg4AAHIPAAByFAAAciEAAHImAAByKAAAcioAAHIvAAByMgAAcjUAAHI3AAByXAAAcoAAAHKnAAByywAAcs4AAHLQAABy0gAActQAAHLWAABy2AAActkAAHLcAABy6QAAcvoAAHL8AABy/gAAcwAAAHMCAABzBAAAcwYAAHMIAABzCgAAcxsAAHMeAABzIQAAcyQAAHMnAABzKgAAcy0AAHMwAABzMwAAczUAAHN0AABzdgAAc3gAAHN6AABzfQAAc34AAHN/AABzgAAAc4EAAHODAABzhQAAc4YAAHOHAABziQAAc4oAAHPJAABzywAAc80AAHPPAABz0gAAc9MAAHPUAABz1QAAc9YAAHPYAABz2gAAc9sAAHPcAABz3gAAc98AAHQeAAB0IAAAdCMAAHQlAAB0KAAAdCkAAHQqAAB0KwAAdCwAAHQuAAB0MAAAdDEAAHQyAAB0NAAAdDUAAHRCAAB0QwAAdEQAAHRGAAB0hQAAdIcAAHSJAAB0iwAAdI4AAHSPAAB0kAAAdJEAAHSSAAB0lAAAdJYAAHSXAAB0mAAAdJoAAHSbAAB02gAAdNwAAHTeAAB04AAAdOMAAHTkAAB05QAAdOYAAHTnAAB06QAAdOsAAHTsAAB07QAAdO8AAHTwAAB1LwAAdTEAAHUzAAB1NQAAdTgAAHU5AAB1OgAAdTsAAHU8AAB1PgAAdUAAAHVBAAB1QgAAdUQAAHVFAAB1hAAAdYYAAHWIAAB1igAAdY0AAHWOAAB1jwAAdZAAAHWRAAB1kwAAdZUAAHWWAAB1lwAAdZkAAHWaAAB12QAAddsAAHXdAAB13wAAdeIAAHXjAAB15AAAdeUAAHXmAAB16AAAdeoAAHXrAAB17AAAde4AAHXvAAB2FAAAdjgAAHZfAAB2gwAAdoYAAHaIAAB2igAAdowAAHaOAAB2kAAAdpEAAHaUAAB2oQAAdrAAAHayAAB2tAAAdrYAAHa4AAB2ugAAdrwAAHa+AAB2zQAAdtAAAHbTAAB21gAAdtkAAHbcAAB23wAAduIAAHbkAAB3IwAAdyUAAHcnAAB3KQAAdywAAHctAAB3LgAAdy8AAHcwAAB3MgAAdzQAAHc1AAB3NgAAdzgAAHc5AAB3eAAAd3oAAHd8AAB3fgAAd4EAAHeCAAB3gwAAd4QAAHeFAAB3hwAAd4kAAHeKAAB3iwAAd40AAHeOAAB3zQAAd88AAHfRAAB30wAAd9YAAHfXAAB32AAAd9kAAHfaAAB33AAAd94AAHffAAB34AAAd+IAAHfjAAB4IgAAeCQAAHgmAAB4KAAAeCsAAHgsAAB4LQAAeC4AAHgvAAB4MQAAeDMAAHg0AAB4NQAAeDcAAHg4AAB4dwAAeHkAAHh7AAB4fQAAeIAAAHiBAAB4ggAAeIMAAHiEAAB4hgAAeIgAAHiJAAB4igAAeIwAAHiNAAB4zAAAeM4AAHjQAAB40gAAeNUAAHjWAAB41wAAeNgAAHjZAAB42wAAeN0AAHjeAAB43wAAeOEAAHjiAAB5IQAAeSMAAHklAAB5JwAAeSoAAHkrAAB5LAAAeS0AAHkuAAB5MAAAeTIAAHkzAAB5NAAAeTYAAHk3AAB5ggAAeaUAAHnFAAB55QAAeecAAHnpAAB56wAAee0AAHnvAAB58AAAefEAAHn0AAB59QAAefcAAHn4AAB5+gAAefwAAHn9AAB5/gAAegEAAHoCAAB6CwAAehgAAHodAAB6HwAAeiEAAHomAAB6KQAAeiwAAHouAAB6UwAAencAAHqeAAB6wgAAesUAAHrHAAB6yQAAessAAHrNAAB6zwAAetAAAHrTAAB64AAAevEAAHrzAAB69QAAevcAAHr5AAB6+wAAev0AAHr/AAB7AQAAexIAAHsVAAB7GAAAexsAAHseAAB7IQAAeyQAAHsnAAB7KgAAeywAAHtrAAB7bQAAe28AAHtxAAB7dAAAe3UAAHt2AAB7dwAAe3gAAHt6AAB7fAAAe30AAHt+AAB7gAAAe4EAAHvAAAB7wgAAe8QAAHvGAAB7yQAAe8oAAHvLAAB7zAAAe80AAHvPAAB70QAAe9IAAHvTAAB71QAAe9YAAHwVAAB8FwAAfBoAAHwcAAB8HwAAfCAAAHwhAAB8IgAAfCMAAHwlAAB8JwAAfCgAAHwpAAB8KwAAfCwAAHw5AAB8OgAAfDsAAHw9AAB8fAAAfH4AAHyAAAB8ggAAfIUAAHyGAAB8hwAAfIgAAHyJAAB8iwAAfI0AAHyOAAB8jwAAfJEAAHySAAB80QAAfNMAAHzVAAB81wAAfNoAAHzbAAB83AAAfN0AAHzeAAB84AAAfOIAAHzjAAB85AAAfOYAAHznAAB9JgAAfSgAAH0qAAB9LAAAfS8AAH0wAAB9MQAAfTIAAH0zAAB9NQAAfTcAAH04AAB9OQAAfTsAAH08AAB9ewAAfX0AAH1/AAB9gQAAfYQAAH2FAAB9hgAAfYcAAH2IAAB9igAAfYwAAH2NAAB9jgAAfZAAAH2RAAB90AAAfdIAAH3UAAB91gAAfdkAAH3aAAB92wAAfdwAAH3dAAB93wAAfeEAAH3iAAB94wAAfeUAAH3mAAB+CwAAfi8AAH5WAAB+egAAfn0AAH5/AAB+gQAAfoMAAH6FAAB+hwAAfogAAH6LAAB+mAAAfqcAAH6pAAB+qwAAfq0AAH6vAAB+sQAAfrMAAH61AAB+xAAAfscAAH7KAAB+zQAAftAAAH7TAAB+1gAAftkAAH7bAAB/GgAAfxwAAH8eAAB/IAAAfyMAAH8kAAB/JQAAfyYAAH8nAAB/KQAAfysAAH8sAAB/LQAAfy8AAH8wAAB/bwAAf3EAAH9zAAB/dQAAf3gAAH95AAB/egAAf3sAAH98AAB/fgAAf4AAAH+BAAB/ggAAf4QAAH+FAAB/xAAAf8YAAH/IAAB/ygAAf80AAH/OAAB/zwAAf9AAAH/RAAB/0wAAf9UAAH/WAAB/1wAAf9kAAH/aAACAGQAAgBsAAIAeAACAIAAAgCMAAIAkAACAJQAAgCYAAIAnAACAKQAAgCsAAIAsAACALQAAgC8AAIAwAACAbwAAgHEAAIBzAACAdQAAgHgAAIB5AACAegAAgHsAAIB8AACAfgAAgIAAAICBAACAggAAgIQAAICFAACAxAAAgMYAAIDIAACAygAAgM0AAIDOAACAzwAAgNAAAIDRAACA0wAAgNUAAIDWAACA1wAAgNkAAIDaAACBGQAAgRsAAIEdAACBHwAAgSIAAIEjAACBJAAAgSUAAIEmAACBKAAAgSoAAIErAACBLAAAgS4AAIEvAACBegAAgZ0AAIG9AACB3QAAgd8AAIHhAACB4wAAgeUAAIHnAACB6AAAgekAAIHsAACB7QAAge8AAIHwAACB8gAAgfQAAIH1AACB9gAAgfkAAIH6AACB/wAAggwAAIIRAACCEwAAghUAAIIaAACCHQAAgiAAAIIiAACCRwAAgmsAAIKSAACCtgAAgrkAAIK7AACCvQAAgr8AAILBAACCwwAAgsQAAILHAACC1AAAguUAAILnAACC6QAAgusAAILtAACC7wAAgvEAAILzAACC9QAAgwYAAIMJAACDDAAAgw8AAIMSAACDFQAAgxgAAIMbAACDHgAAgyAAAINfAACDYQAAg2MAAINlAACDaAAAg2kAAINqAACDawAAg2wAAINuAACDcAAAg3EAAINyAACDdAAAg3UAAIO0AACDtgAAg7gAAIO6AACDvQAAg74AAIO/AACDwAAAg8EAAIPDAACDxQAAg8YAAIPHAACDyQAAg8oAAIQJAACECwAAhA4AAIQQAACEEwAAhBQAAIQVAACEFgAAhBcAAIQZAACEGwAAhBwAAIQdAACEHwAAhCAAAIQtAACELgAAhC8AAIQxAACEcAAAhHIAAIR0AACEdgAAhHkAAIR6AACEewAAhHwAAIR9AACEfwAAhIEAAISCAACEgwAAhIUAAISGAACExQAAhMcAAITJAACEywAAhM4AAITPAACE0AAAhNEAAITSAACE1AAAhNYAAITXAACE2AAAhNoAAITbAACFGgAAhRwAAIUeAACFIAAAhSMAAIUkAACFJQAAhSYAAIUnAACFKQAAhSsAAIUsAACFLQAAhS8AAIUwAACFbwAAhXEAAIVzAACFdQAAhXgAAIV5AACFegAAhXsAAIV8AACFfgAAhYAAAIWBAACFggAAhYQAAIWFAACFxAAAhcYAAIXIAACFygAAhc0AAIXOAACFzwAAhdAAAIXRAACF0wAAhdUAAIXWAACF1wAAhdkAAIXaAACF/wAAhiMAAIZKAACGbgAAhnEAAIZzAACGdQAAhncAAIZ5AACGewAAhnwAAIZ/AACGjAAAhpsAAIadAACGnwAAhqEAAIajAACGpQAAhqcAAIapAACGuAAAhrsAAIa+AACGwQAAhsQAAIbHAACGygAAhs0AAIbPAACHDgAAhxAAAIcSAACHFAAAhxcAAIcYAACHGQAAhxoAAIcbAACHHQAAhx8AAIcgAACHIQAAhyMAAIckAACHYwAAh2UAAIdnAACHaQAAh2wAAIdtAACHbgAAh28AAIdwAACHcgAAh3QAAId1AACHdgAAh3gAAId5AACHuAAAh7oAAIe8AACHvgAAh8EAAIfCAACHwwAAh8QAAIfFAACHxwAAh8kAAIfKAACHywAAh80AAIfOAACIDQAAiA8AAIgRAACIEwAAiBYAAIgXAACIGAAAiBkAAIgaAACIHAAAiB4AAIgfAACIIAAAiCIAAIgjAACIYgAAiGQAAIhmAACIaAAAiGsAAIhsAACIbQAAiG4AAIhvAACIcQAAiHMAAIh0AACIdQAAiHcAAIh4AACItwAAiLkAAIi8AACIvgAAiMEAAIjCAACIwwAAiMQAAIjFAACIxwAAiMkAAIjKAACIywAAiM0AAIjOAACI6gAAiSkAAIkrAACJLQAAiS8AAIkyAACJMwAAiTQAAIk1AACJNgAAiTgAAIk6AACJOwAAiTwAAIk+AACJPwAAiYoAAImtAACJzQAAie0AAInvAACJ8QAAifMAAIn1AACJ9wAAifgAAIn5AACJ/AAAif0AAIn/AACKAAAAigIAAIoEAACKBQAAigYAAIoJAACKCgAAig8AAIocAACKIQAAiiMAAIolAACKKgAAii0AAIowAACKMgAAilcAAIp7AACKogAAisYAAIrJAACKywAAis0AAIrPAACK0QAAitMAAIrUAACK1wAAiuQAAIr1AACK9wAAivkAAIr7AACK/QAAiv8AAIsBAACLAwAAiwUAAIsWAACLGQAAixwAAIsfAACLIgAAiyUAAIsoAACLKwAAiy4AAIswAACLbwAAi3EAAItzAACLdQAAi3gAAIt5AACLegAAi3sAAIt8AACLfgAAi4AAAIuBAACLggAAi4QAAIuFAACLxAAAi8YAAIvIAACLygAAi80AAIvOAACLzwAAi9AAAIvRAACL0wAAi9UAAIvWAACL1wAAi9kAAIvaAACMGQAAjBsAAIweAACMIAAAjCMAAIwkAACMJQAAjCYAAIwnAACMKQAAjCsAAIwsAACMLQAAjC8AAIwwAACMPQAAjD4AAIw/AACMQQAAjIAAAIyCAACMhAAAjIYAAIyJAACMigAAjIsAAIyMAACMjQAAjI8AAIyRAACMkgAAjJMAAIyVAACMlgAAjNUAAIzXAACM2QAAjNsAAIzeAACM3wAAjOAAAIzhAACM4gAAjOQAAIzmAACM5wAAjOgAAIzqAACM6wAAjSoAAI0sAACNLgAAjTAAAI0zAACNNAAAjTUAAI02AACNNwAAjTkAAI07AACNPAAAjT0AAI0/AACNQAAAjX8AAI2BAACNgwAAjYUAAI2IAACNiQAAjYoAAI2LAACNjAAAjY4AAI2QAACNkQAAjZIAAI2UAACNlQAAjdQAAI3WAACN2AAAjdoAAI3dAACN3gAAjd8AAI3gAACN4QAAjeMAAI3lAACN5gAAjecAAI3pAACN6gAAjg8AAI4zAACOWgAAjn4AAI6BAACOgwAAjoUAAI6HAACOiQAAjosAAI6MAACOjwAAjpwAAI6rAACOrQAAjq8AAI6xAACOswAAjrUAAI63AACOuQAAjsgAAI7LAACOzgAAjtEAAI7UAACO1wAAjtoAAI7dAACO3wAAjx4AAI8gAACPIgAAjyQAAI8nAACPKAAAjykAAI8qAACPKwAAjy0AAI8vAACPMAAAjzEAAI8zAACPNAAAj3MAAI91AACPdwAAj3kAAI98AACPfQAAj34AAI9/AACPgAAAj4IAAI+EAACPhQAAj4YAAI+IAACPiQAAj8gAAI/KAACPzAAAj84AAI/RAACP0gAAj9MAAI/UAACP1QAAj9cAAI/ZAACP2gAAj9sAAI/dAACP3gAAkB0AAJAfAACQIgAAkCQAAJAnAACQKAAAkCkAAJAqAACQKwAAkC0AAJAvAACQMAAAkDEAAJAzAACQNAAAkHMAAJB1AACQdwAAkHkAAJB8AACQfQAAkH4AAJB/AACQgAAAkIIAAJCEAACQhQAAkIYAAJCIAACQiQAAkMgAAJDKAACQzAAAkM4AAJDRAACQ0gAAkNMAAJDUAACQ1QAAkNcAAJDZAACQ2gAAkNsAAJDdAACQ3gAAkR0AAJEfAACRIQAAkSMAAJEmAACRJwAAkSgAAJEpAACRKgAAkSwAAJEuAACRLwAAkTAAAJEyAACRMwAAkX4AAJGhAACRwQAAkeEAAJHjAACR5QAAkecAAJHpAACR6wAAkewAAJHtAACR8AAAkfEAAJHzAACR9AAAkfYAAJH4AACR+QAAkfoAAJH9AACR/gAAkgcAAJIUAACSGQAAkhsAAJIdAACSIgAAkiUAAJIoAACSKgAAkk8AAJJzAACSmgAAkr4AAJLBAACSwwAAksUAAJLHAACSyQAAkssAAJLMAACSzwAAktwAAJLtAACS7wAAkvEAAJLzAACS9QAAkvcAAJL5AACS+wAAkv0AAJMOAACTEQAAkxQAAJMXAACTGgAAkx0AAJMgAACTIwAAkyYAAJMoAACTZwAAk2kAAJNrAACTbQAAk3AAAJNxAACTcgAAk3MAAJN0AACTdgAAk3gAAJN5AACTegAAk3wAAJN9AACTvAAAk74AAJPAAACTwgAAk8UAAJPGAACTxwAAk8gAAJPJAACTywAAk80AAJPOAACTzwAAk9EAAJPSAACUEQAAlBMAAJQWAACUGAAAlBsAAJQcAACUHQAAlB4AAJQfAACUIQAAlCMAAJQkAACUJQAAlCcAAJQoAACUNQAAlDYAAJQ3AACUOQAAlHgAAJR6AACUfAAAlH4AAJSBAACUggAAlIMAAJSEAACUhQAAlIcAAJSJAACUigAAlIsAAJSNAACUjgAAlM0AAJTPAACU0QAAlNMAAJTWAACU1wAAlNgAAJTZAACU2gAAlNwAAJTeAACU3wAAlOAAAJTiAACU4wAAlSIAAJUkAACVJgAAlSgAAJUrAACVLAAAlS0AAJUuAACVLwAAlTEAAJUzAACVNAAAlTUAAJU3AACVOAAAlXcAAJV5AACVewAAlX0AAJWAAACVgQAAlYIAAJWDAACVhAAAlYYAAJWIAACViQAAlYoAAJWMAACVjQAAlcwAAJXOAACV0AAAldIAAJXVAACV1gAAldcAAJXYAACV2QAAldsAAJXdAACV3gAAld8AAJXhAACV4gAAlgcAAJYrAACWUgAAlnYAAJZ5AACWewAAln0AAJZ/AACWgQAAloMAAJaEAACWhwAAlpQAAJajAACWpQAAlqcAAJapAACWqwAAlq0AAJavAACWsQAAlsAAAJbDAACWxgAAlskAAJbMAACWzwAAltIAAJbVAACW1wAAlxYAAJcYAACXGgAAlxwAAJcfAACXIAAAlyEAAJciAACXIwAAlyUAAJcnAACXKAAAlykAAJcrAACXLAAAl2sAAJdtAACXbwAAl3EAAJd0AACXdQAAl3YAAJd3AACXeAAAl3oAAJd8AACXfQAAl34AAJeAAACXgQAAl8AAAJfCAACXxAAAl8YAAJfJAACXygAAl8sAAJfMAACXzQAAl88AAJfRAACX0gAAl9MAAJfVAACX1gAAmBUAAJgXAACYGQAAmBsAAJgeAACYHwAAmCAAAJghAACYIgAAmCQAAJgmAACYJwAAmCgAAJgqAACYKwAAmGoAAJhsAACYbgAAmHAAAJhzAACYdAAAmHUAAJh2AACYdwAAmHkAAJh7AACYfAAAmH0AAJh/AACYgAAAmL8AAJjBAACYwwAAmMUAAJjIAACYyQAAmMoAAJjLAACYzAAAmM4AAJjQAACY0QAAmNIAAJjUAACY1QAAmRQAAJkWAACZGAAAmRoAAJkdAACZHgAAmR8AAJkgAACZIQAAmSMAAJklAACZJgAAmScAAJkpAACZKgAAmXUAAJmYAACZuAAAmdgAAJnaAACZ3AAAmd4AAJngAACZ4gAAmeMAAJnkAACZ5wAAmegAAJnqAACZ6wAAme4AAJnwAACZ8QAAmfIAAJn1AACZ9gAAmfsAAJoIAACaDQAAmg8AAJoRAACaFgAAmhkAAJocAACaHgAAmkMAAJpnAACajgAAmrIAAJq1AACatwAAmrkAAJq7AACavQAAmr8AAJrAAACawwAAmtAAAJrhAACa4wAAmuUAAJrnAACa6QAAmusAAJrtAACa7wAAmvEAAJsCAACbBQAAmwgAAJsLAACbDgAAmxEAAJsUAACbFwAAmxoAAJscAACbWwAAm10AAJtfAACbYQAAm2QAAJtlAACbZgAAm2cAAJtoAACbagAAm2wAAJttAACbbgAAm3AAAJtxAACbsAAAm7IAAJu0AACbtgAAm7kAAJu6AACbuwAAm7wAAJu9AACbvwAAm8EAAJvCAACbwwAAm8UAAJvGAACcBQAAnAcAAJwKAACcDAAAnA8AAJwQAACcEQAAnBIAAJwTAACcFQAAnBcAAJwYAACcGQAAnBsAAJwcAACcKQAAnCoAAJwrAACcLQAAnGwAAJxuAACccAAAnHIAAJx1AACcdgAAnHcAAJx4AACceQAAnHsAAJx9AACcfgAAnH8AAJyBAACcggAAnMEAAJzDAACcxQAAnMcAAJzKAACcywAAnMwAAJzNAACczgAAnNAAAJzSAACc0wAAnNQAAJzWAACc1wAAnRYAAJ0YAACdGgAAnRwAAJ0fAACdIAAAnSEAAJ0iAACdIwAAnSUAAJ0nAACdKAAAnSkAAJ0rAACdLAAAnWsAAJ1tAACdbwAAnXEAAJ10AACddQAAnXYAAJ13AACdeAAAnXoAAJ18AACdfQAAnX4AAJ2AAACdgQAAncAAAJ3CAACdxAAAncYAAJ3JAACdygAAncsAAJ3MAACdzQAAnc8AAJ3RAACd0gAAndMAAJ3VAACd1gAAnfsAAJ4fAACeRgAAnmoAAJ5tAACebwAAnnEAAJ5zAACedQAAnncAAJ54AACeewAAnogAAJ6VAACelwAAnpkAAJ6bAACenQAAnp8AAJ6hAACergAAnrEAAJ60AACetwAAnroAAJ69AACewAAAnsIAAJ8BAACfAwAAnwYAAJ8IAACfCwAAnwwAAJ8NAACfDgAAnw8AAJ8RAACfEwAAnxQAAJ8VAACfFwAAnxgAAJ9bAACffwAAn6MAAJ/GAACf7QAAoA0AAKA0AACgWwAAoHsAAKCfAACgwwAAoMUAAKDIAACgygAAoMwAAKDOAACg0QAAoNQAAKDWAACg2AAAoNsAAKDdAACg3wAAoOIAAKDlAACg5gAAoOsAAKD4AACg+wAAoP0AAKEAAAChAwAAoQUAAKEqAAChTgAAoXUAAKGZAAChnAAAoZ4AAKGgAAChogAAoaQAAKGmAAChpwAAoaoAAKG3AAChygAAocwAAKHOAACh0AAAodIAAKHUAACh1gAAodgAAKHaAACh3AAAoe8AAKHyAACh9QAAofgAAKH7AACh/gAAogEAAKIEAACiBwAAogoAAKIMAACiSwAAok0AAKJQAACiUgAAolUAAKJWAACiVwAAolgAAKJZAACiWwAAol0AAKJeAACiXwAAomEAAKJiAACiawAAomwAAKJuAACirQAAoq8AAKKxAACiswAAorYAAKK3AACiuAAAorkAAKK6AACivAAAor4AAKK/AACiwAAAosIAAKLDAACjAgAAowQAAKMHAACjCQAAowwAAKMNAACjDgAAow8AAKMQAACjEgAAoxQAAKMVAACjFgAAoxgAAKMZAACjIgAAoyMAAKMlAACjZAAAo2YAAKNoAACjagAAo20AAKNuAACjbwAAo3AAAKNxAACjcwAAo3UAAKN2AACjdwAAo3kAAKN6AACjuQAAo7sAAKO+AACjwAAAo8MAAKPEAACjxQAAo8YAAKPHAACjyQAAo8sAAKPMAACjzQAAo88AAKPQAACj2QAAo9oAAKPcAACkGwAApB0AAKQfAACkIQAApCQAAKQlAACkJgAApCcAAKQoAACkKgAApCwAAKQtAACkLgAApDAAAKQxAACkcAAApHIAAKR1AACkdwAApHoAAKR7AACkfAAApH0AAKR+AACkgAAApIIAAKSDAACkhAAApIYAAKSHAACklAAApJUAAKSWAACkmAAApNcAAKTZAACk2wAApN0AAKTgAACk4QAApOIAAKTjAACk5AAApOYAAKToAACk6QAApOoAAKTsAACk7QAApSwAAKUuAAClMQAApTMAAKU2AAClNwAApTgAAKU5AAClOgAApTwAAKU+AAClPwAApUAAAKVCAAClQwAApU4AAKVbAAClZgAApWgAAKVrAAClbgAApXEAAKVzAAClfgAApYEAAKWEAAClhwAApYoAAKWNAACljwAApZIAAKWXAAClngAApekAAKYMAACmLAAApkwAAKZOAACmUAAAplIAAKZUAACmVwAAplgAAKZZAACmXAAApl0AAKZfAACmYAAApmIAAKZkAACmZQAApmYAAKZpAACmagAApnMAAKaAAACmhQAApocAAKaJAACmjgAAppEAAKaUAACmlgAAprsAAKbfAACnBgAApyoAAKctAACnLwAApzEAAKczAACnNQAApzcAAKc4AACnOwAAp0gAAKdZAACnWwAAp10AAKdfAACnYQAAp2MAAKdlAACnZwAAp2kAAKd6AACnfQAAp4AAAKeDAACnhgAAp4kAAKeMAACnjwAAp5IAAKeUAACn0wAAp9UAAKfXAACn2QAAp9wAAKfdAACn3gAAp98AAKfgAACn4gAAp+QAAKflAACn5gAAp+gAAKfpAACoKAAAqCoAAKgsAACoLgAAqDEAAKgyAACoMwAAqDQAAKg1AACoNwAAqDkAAKg6AACoOwAAqD0AAKg+AACofQAAqH8AAKiCAACohAAAqIcAAKiIAACoiQAAqIoAAKiLAACojQAAqI8AAKiQAACokQAAqJMAAKiUAACooQAAqKIAAKijAACopQAAqOQAAKjmAACo6AAAqOoAAKjtAACo7gAAqO8AAKjwAACo8QAAqPMAAKj1AACo9gAAqPcAAKj5AACo+gAAqTkAAKk7AACpPQAAqT8AAKlCAACpQwAAqUQAAKlFAACpRgAAqUgAAKlKAACpSwAAqUwAAKlOAACpTwAAqY4AAKmQAACpkgAAqZQAAKmXAACpmAAAqZkAAKmaAACpmwAAqZ0AAKmfAACpoAAAqaEAAKmjAACppAAAqeMAAKnlAACp5wAAqekAAKnsAACp7QAAqe4AAKnvAACp8AAAqfIAAKn0AACp9QAAqfYAAKn4AACp+QAAqjgAAKo6AACqPAAAqj4AAKpBAACqQgAAqkMAAKpEAACqRQAAqkcAAKpJAACqSgAAqksAAKpNAACqTgAAqnMAAKqXAACqvgAAquIAAKrlAACq5wAAqukAAKrrAACq7QAAqu8AAKrwAACq8wAAqwAAAKsPAACrEQAAqxMAAKsVAACrFwAAqxkAAKsbAACrHQAAqywAAKsvAACrMgAAqzUAAKs4AACrOwAAqz4AAKtBAACrQwAAq4IAAKuEAACrhgAAq4gAAKuLAACrjAAAq40AAKuOAACrjwAAq5EAAKuTAACrlAAAq5UAAKuXAACrmAAAq9cAAKvZAACr2wAAq90AAKvgAACr4QAAq+IAAKvjAACr5AAAq+YAAKvoAACr6QAAq+oAAKvsAACr7QAArCwAAKwuAACsMAAArDIAAKw1AACsNgAArDcAAKw4AACsOQAArDsAAKw9AACsPgAArD8AAKxBAACsQgAArIEAAKyDAACshQAArIcAAKyKAACsiwAArIwAAKyNAACsjgAArJAAAKySAACskwAArJQAAKyWAACslwAArNYAAKzYAACs2gAArNwAAKzfAACs4AAArOEAAKziAACs4wAArOUAAKznAACs6AAArOkAAKzrAACs7AAArSsAAK0tAACtLwAArTEAAK00AACtNQAArTYAAK03AACtOAAArToAAK08AACtPQAArT4AAK1AAACtQQAArYAAAK2CAACthAAArYYAAK2JAACtigAArYsAAK2MAACtjQAArY8AAK2RAACtkgAArZMAAK2VAACtlgAAreEAAK4EAACuJAAArkQAAK5GAACuSAAArkoAAK5MAACuTwAArlAAAK5RAACuVAAArlUAAK5XAACuWAAArloAAK5dAACuXgAArl8AAK5iAACuYwAArmgAAK51AACuegAArnwAAK5+AACugwAAroYAAK6JAACuiwAArrAAAK7UAACu+wAArx8AAK8iAACvJAAAryYAAK8oAACvKgAArywAAK8tAACvMAAArz0AAK9OAACvUAAAr1IAAK9UAACvVgAAr1gAAK9aAACvXAAAr14AAK9vAACvcgAAr3UAAK94AACvewAAr34AAK+BAACvhAAAr4cAAK+JAACvyAAAr8oAAK/MAACvzgAAr9EAAK/SAACv0wAAr9QAAK/VAACv1wAAr9kAAK/aAACv2wAAr90AAK/eAACwHQAAsB8AALAhAACwIwAAsCYAALAnAACwKAAAsCkAALAqAACwLAAAsC4AALAvAACwMAAAsDIAALAzAACwcgAAsHQAALB3AACweQAAsHwAALB9AACwfgAAsH8AALCAAACwggAAsIQAALCFAACwhgAAsIgAALCJAACwlgAAsJcAALCYAACwmgAAsNkAALDbAACw3QAAsN8AALDiAACw4wAAsOQAALDlAACw5gAAsOgAALDqAACw6wAAsOwAALDuAACw7wAAsS4AALEwAACxMgAAsTQAALE3AACxOAAAsTkAALE6AACxOwAAsT0AALE/AACxQAAAsUEAALFDAACxRAAAsYMAALGFAACxhwAAsYkAALGMAACxjQAAsY4AALGPAACxkAAAsZIAALGUAACxlQAAsZYAALGYAACxmQAAsdgAALHaAACx3AAAsd4AALHhAACx4gAAseMAALHkAACx5QAAsecAALHpAACx6gAAsesAALHtAACx7gAAsi0AALIvAACyMQAAsjMAALI2AACyNwAAsjgAALI5AACyOgAAsjwAALI+AACyPwAAskAAALJCAACyQwAAsmgAALKMAACyswAAstcAALLaAACy3AAAst4AALLgAACy4gAAsuQAALLlAACy6AAAsvUAALMEAACzBgAAswgAALMKAACzDAAAsw4AALMQAACzEgAAsyEAALMkAACzJwAAsyoAALMtAACzMAAAszMAALM2AACzOAAAs3cAALN5AACzewAAs30AALOAAACzgQAAs4IAALODAACzhAAAs4YAALOIAACziQAAs4oAALOMAACzjQAAs8wAALPOAACz0AAAs9IAALPVAACz1gAAs9cAALPYAACz2QAAs9sAALPdAACz3gAAs98AALPhAACz4gAAtCEAALQjAAC0JQAAtCcAALQqAAC0KwAAtCwAALQtAAC0LgAAtDAAALQyAAC0MwAAtDQAALQ2AAC0NwAAtHYAALR4AAC0egAAtHwAALR/AAC0gAAAtIEAALSCAAC0gwAAtIUAALSHAAC0iAAAtIkAALSLAAC0jAAAtMsAALTNAAC0zwAAtNEAALTUAAC01QAAtNYAALTXAAC02AAAtNoAALTcAAC03QAAtN4AALTgAAC04QAAtSAAALUiAAC1JAAAtSYAALUpAAC1KgAAtSsAALUsAAC1LQAAtS8AALUxAAC1MgAAtTMAALU1AAC1NgAAtXUAALV3AAC1eQAAtXsAALV+AAC1fwAAtYAAALWBAAC1ggAAtYQAALWGAAC1hwAAtYgAALWKAAC1iwAAtdYAALX5AAC2GQAAtjkAALY7AAC2PQAAtj8AALZBAAC2RAAAtkUAALZGAAC2SQAAtkoAALZMAAC2TQAAtk8AALZSAAC2UwAAtlQAALZXAAC2WAAAtl0AALZqAAC2bwAAtnEAALZzAAC2eAAAtnsAALZ+AAC2gAAAtqUAALbJAAC28AAAtxQAALcXAAC3GQAAtxsAALcdAAC3HwAAtyEAALciAAC3JQAAtzIAALdDAAC3RQAAt0cAALdJAAC3SwAAt00AALdPAAC3UQAAt1MAALdkAAC3ZwAAt2oAALdtAAC3cAAAt3MAALd2AAC3eQAAt3wAALd+AAC3vQAAt78AALfBAAC3wwAAt8YAALfHAAC3yAAAt8kAALfKAAC3zAAAt84AALfPAAC30AAAt9IAALfTAAC4EgAAuBQAALgWAAC4GAAAuBsAALgcAAC4HQAAuB4AALgfAAC4IQAAuCMAALgkAAC4JQAAuCcAALgoAAC4ZwAAuGkAALhsAAC4bgAAuHEAALhyAAC4cwAAuHQAALh1AAC4dwAAuHkAALh6AAC4ewAAuH0AALh+AAC4iwAAuIwAALiNAAC4jwAAuM4AALjQAAC40gAAuNQAALjXAAC42AAAuNkAALjaAAC42wAAuN0AALjfAAC44AAAuOEAALjjAAC45AAAuSMAALklAAC5JwAAuSkAALksAAC5LQAAuS4AALkvAAC5MAAAuTIAALk0AAC5NQAAuTYAALk4AAC5OQAAuXgAALl6AAC5fAAAuX4AALmBAAC5ggAAuYMAALmEAAC5hQAAuYcAALmJAAC5igAAuYsAALmNAAC5jgAAuc0AALnPAAC50QAAudMAALnWAAC51wAAudgAALnZAAC52gAAudwAALneAAC53wAAueAAALniAAC54wAAuiIAALokAAC6JgAAuigAALorAAC6LAAAui0AALouAAC6LwAAujEAALozAAC6NAAAujUAALo3AAC6OAAAul0AALqBAAC6qAAAuswAALrPAAC60QAAutMAALrVAAC61wAAutkAALraAAC63QAAuuoAALr5AAC6+wAAuv0AALr/AAC7AQAAuwMAALsFAAC7BwAAuxYAALsZAAC7HAAAux8AALsiAAC7JQAAuygAALsrAAC7LQAAu2wAALtuAAC7cAAAu3IAALt1AAC7dgAAu3cAALt4AAC7eQAAu3sAALt9AAC7fgAAu38AALuBAAC7ggAAu8EAALvDAAC7xQAAu8cAALvKAAC7ywAAu8wAALvNAAC7zgAAu9AAALvSAAC70wAAu9QAALvWAAC71wAAvBYAALwYAAC8GgAAvBwAALwfAAC8IAAAvCEAALwiAAC8IwAAvCUAALwnAAC8KAAAvCkAALwrAAC8LAAAvGsAALxtAAC8bwAAvHEAALx0AAC8dQAAvHYAALx3AAC8eAAAvHoAALx8AAC8fQAAvH4AALyAAAC8gQAAvMAAALzCAAC8xAAAvMYAALzJAAC8ygAAvMsAALzMAAC8zQAAvM8AALzRAAC80gAAvNMAALzVAAC81gAAvRUAAL0XAAC9GQAAvRsAAL0eAAC9HwAAvSAAAL0hAAC9IgAAvSQAAL0mAAC9JwAAvSgAAL0qAAC9KwAAvWoAAL1sAAC9bgAAvXAAAL1zAAC9dAAAvXUAAL12AAC9dwAAvXkAAL17AAC9fAAAvX0AAL1/AAC9gAAAvcsAAL3uAAC+DgAAvi4AAL4wAAC+MgAAvjQAAL42AAC+OQAAvjoAAL47AAC+PgAAvj8AAL5BAAC+QgAAvkQAAL5HAAC+SAAAvkkAAL5MAAC+TQAAvlIAAL5fAAC+ZAAAvmYAAL5oAAC+bQAAvnAAAL5zAAC+dQAAvpoAAL6+AAC+5QAAvwkAAL8MAAC/DgAAvxAAAL8SAAC/FAAAvxYAAL8XAAC/GgAAvycAAL84AAC/OgAAvzwAAL8+AAC/QAAAv0IAAL9EAAC/RgAAv0gAAL9ZAAC/XAAAv18AAL9iAAC/ZQAAv2gAAL9rAAC/bgAAv3EAAL9zAAC/sgAAv7QAAL+2AAC/uAAAv7sAAL+8AAC/vQAAv74AAL+/AAC/wQAAv8MAAL/EAAC/xQAAv8cAAL/IAADABwAAwAkAAMALAADADQAAwBAAAMARAADAEgAAwBMAAMAUAADAFgAAwBgAAMAZAADAGgAAwBwAAMAdAADAXAAAwF4AAMBhAADAYwAAwGYAAMBnAADAaAAAwGkAAMBqAADAbAAAwG4AAMBvAADAcAAAwHIAAMBzAADAgAAAwIEAAMCCAADAhAAAwMMAAMDFAADAxwAAwMkAAMDMAADAzQAAwM4AAMDPAADA0AAAwNIAAMDUAADA1QAAwNYAAMDYAADA2QAAwRgAAMEaAADBHAAAwR4AAMEhAADBIgAAwSMAAMEkAADBJQAAwScAAMEpAADBKgAAwSsAAMEtAADBLgAAwW0AAMFvAADBcQAAwXMAAMF2AADBdwAAwXgAAMF5AADBegAAwXwAAMF+AADBfwAAwYAAAMGCAADBgwAAwcIAAMHEAADBxgAAwcgAAMHLAADBzAAAwc0AAMHOAADBzwAAwdEAAMHTAADB1AAAwdUAAMHXAADB2AAAwhcAAMIZAADCGwAAwh0AAMIgAADCIQAAwiIAAMIjAADCJAAAwiYAAMIoAADCKQAAwioAAMIsAADCLQAAwlIAAMJ2AADCnQAAwsEAAMLEAADCxgAAwsgAAMLKAADCzAAAws4AAMLPAADC0gAAwt8AAMLuAADC8AAAwvIAAML0AADC9gAAwvgAAML6AADC/AAAwwsAAMMOAADDEQAAwxQAAMMXAADDGgAAwx0AAMMgAADDIgAAw2EAAMNjAADDZQAAw2cAAMNqAADDawAAw2wAAMNtAADDbgAAw3AAAMNyAADDcwAAw3QAAMN2AADDdwAAw7YAAMO4AADDugAAw7wAAMO/AADDwAAAw8EAAMPCAADDwwAAw8U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AAM8DAADPBAAAzwUAAM8HAADPCQAAzwoAAM8LAADPDQAAzw4AAM9NAADPTwAAz1EAAM9TAADPVgAAz1cAAM9YAADPWQAAz1oAAM9cAADPXgAAz18AAM9gAADPYgAAz2MAAM+iAADPpAAAz6YAAM+oAADPqwAAz6wAAM+tAADPrgAAz68AAM+xAADPswAAz7QAAM+1AADPtwAAz7gAANADAADQJgAA0EYAANBmAADQaAAA0GoAANBsAADQbgAA0HAAANBxAADQcgAA0HUAANB2AADQeAAA0HkAANB7AADQfQAA0H4AANB/AADQggAA0IMAANCMAADQmQAA0J4AANCgAADQogAA0KcAANCqAADQrQAA0K8AANDUAADQ+AAA0R8AANFDAADRRgAA0UgAANFKAADRTAAA0U4AANFQAADRUQAA0VQAANFhAADRcgAA0XQAANF2AADReAAA0XoAANF8AADRfgAA0YAAANGCAADRkwAA0ZYAANGZAADRnAAA0Z8AANGiAADRpQAA0agAANGrAADRrQAA0ewAANHuAADR8AAA0fIAANH1AADR9gAA0fcAANH4AADR+QAA0fsAANH9AADR/gAA0f8AANIBAADSAgAA0kEAANJDAADSRQAA0kcAANJKAADSSwAA0kwAANJNAADSTgAA0lAAANJSAADSUwAA0lQAANJWAADSVwAA0pYAANKYAADSmwAA0p0AANKgAADSoQAA0qIAANKjAADSpAAA0qYAANKoAADSqQAA0qoAANKsAADSrQAA0roAANK7AADSvAAA0r4AANL9AADS/wAA0wEAANMDAADTBgAA0wcAANMIAADTCQAA0woAANMMAADTDgAA0w8AANMQAADTEgAA0xMAANNSAADTVAAA01YAANNYAADTWwAA01wAANNdAADTXgAA018AANNhAADTYwAA02QAANNlAADTZwAA02gAANOnAADTqQAA06sAANOtAADTsAAA07EAANOyAADTswAA07QAANO2AADTuAAA07kAANO6AADTvAAA070AANP8AADT/gAA1AAAANQCAADUBQAA1AYAANQHAADUCAAA1AkAANQLAADUDQAA1A4AANQPAADUEQAA1BIAANRRAADUUwAA1FUAANRXAADUWgAA1FsAANRcAADUXQAA1F4AANRgAADUYgAA1GMAANRkAADUZgAA1GcAANSMAADUsAAA1NcAANT7AADU/gAA1QAAANUCAADVBAAA1QYAANUIAADVCQAA1QwAANUZAADVKAAA1SoAANUsAADVLgAA1TAAANUyAADVNAAA1TYAANVFAADVSAAA1UsAANVOAADVUQAA1VQAANVXAADVWgAA1VwAANWbAADVnQAA1Z8AANWhAADVpAAA1aUAANWmAADVpwAA1agAANWqAADVrAAA1a0AANWuAADVsAAA1bEAANXwAADV8gAA1fQAANX2AADV+QAA1foAANX7AADV/AAA1f0AANX/AADWAQAA1gIAANYDAADWBQAA1gYAANZFAADWRwAA1kkAANZLAADWTgAA1k8AANZQAADWUQAA1lIAANZUAADWVgAA1lcAANZYAADWWgAA1lsAANaaAADWnAAA1p8AANahAADWpAAA1qUAANamAADWpwAA1qgAANaqAADWrAAA1q0AANauAADWsAAA1rEAANbwAADW8gAA1vQAANb2AADW+QAA1voAANb7AADW/AAA1v0AANb/AADXAQAA1wIAANcDAADXBQAA1wYAANdFAADXRwAA10kAANdLAADXTgAA108AANdQAADXUQAA11IAANdUAADXVgAA11cAANdYAADXWgAA11sAANeaAADXnAAA154AANegAADXowAA16QAANelAADXpgAA16cAANepAADXqwAA16wAANetAADXrwAA17AAANf7AADYHgAA2D4AANheAADYYAAA2GIAANhkAADYZgAA2GgAANhpAADYagAA2G0AANhuAADYcAAA2HEAANhzAADYdQAA2HYAANh3AADYegAA2HsAANiAAADYjQAA2JIAANiUAADYlgAA2JsAANieAADYoQAA2KMAANjIAADY7AAA2RMAANk3AADZOgAA2TwAANk+AADZQAAA2UIAANlEAADZRQAA2UgAANlVAADZZgAA2WgAANlqAADZbAAA2W4AANlwAADZcgAA2XQAANl2AADZhwAA2YoAANmNAADZkAAA2ZMAANmWAADZmQAA2ZwAANmfAADZoQAA2eAAANniAADZ5AAA2eYAANnpAADZ6gAA2esAANnsAADZ7QAA2e8AANnxAADZ8gAA2fMAANn1AADZ9gAA2jUAANo3AADaOQAA2jsAANo+AADaPwAA2kAAANpBAADaQgAA2kQAANpGAADaRwAA2kgAANpKAADaSwAA2ooAANqMAADajwAA2pEAANqUAADalQAA2pYAANqXAADamAAA2poAANqcAADanQAA2p4AANqgAADaoQAA2q4AANqvAADasAAA2rIAANrxAADa8wAA2vUAANr3AADa+gAA2vsAANr8AADa/QAA2v4AANsAAADbAgAA2wMAANsEAADbBgAA2wcAANtGAADbSAAA20oAANtMAADbTwAA21AAANtRAADbUgAA21MAANtVAADbVwAA21gAANtZAADbWwAA21wAANubAADbnQAA258AANuhAADbpAAA26UAANumAADbpwAA26gAANuqAADbrAAA260AANuuAADbsAAA27EAANvwAADb8gAA2/QAANv2AADb+QAA2/oAANv7AADb/AAA2/0AANv/AADcAQAA3AIAANwDAADcBQAA3AYAANxFAADcRwAA3EkAANxLAADcTgAA3E8AANxQAADcUQAA3FIAANxUAADcVgAA3FcAANxYAADcWgAA3FsAANyAAADcpAAA3MsAANzvAADc8gAA3PQAANz2AADc+AAA3PoAANz8AADc/QAA3QAAAN0NAADdHAAA3R4AAN0gAADdIgAA3SQAAN0mAADdKAAA3SoAAN05AADdPAAA3T8AAN1CAADdRQAA3UgAAN1LAADdTgAA3VAAAN2PAADdkQAA3ZMAAN2VAADdmAAA3ZkAAN2aAADdmwAA3ZwAAN2eAADdoAAA3aEAAN2iAADdpAAA3aUAAN3kAADd5gAA3egAAN3qAADd7QAA3e4AAN3vAADd8AAA3fEAAN3zAADd9QAA3fYAAN33AADd+QAA3foAAN45AADeOwAA3j0AAN4/AADeQgAA3kMAAN5EAADeRQAA3kYAAN5IAADeSgAA3ksAAN5MAADeTgAA3k8AAN6OAADekAAA3pIAAN6UAADelwAA3pgAAN6ZAADemgAA3psAAN6dAADenwAA3qAAAN6hAADeowAA3qQAAN7jAADe5QAA3ucAAN7pAADe7AAA3u0AAN7uAADe7wAA3vAAAN7yAADe9AAA3vUAAN72AADe+AAA3vkAAN84AADfOgAA3zwAAN8+AADfQQAA30IAAN9DAADfRAAA30UAAN9HAADfSQAA30oAAN9LAADfTQAA304AAN+NAADfjwAA35EAAN+TAADflgAA35cAAN+YAADfmQAA35oAAN+cAADfngAA358AAN+gAADfogAA36MAAN/uAADgEQAA4DEAAOBRAADgUwAA4FUAAOBXAADgWQAA4FsAAOBcAADgXQAA4GAAAOBhAADgYwAA4GQAAOBmAADgaAAA4GkAAOBqAADgbQAA4G4AAOBzAADggAAA4IUAAOCHAADgiQAA4I4AAOCRAADglAAA4JYAAOC7AADg3wAA4QYAAOEqAADhLQAA4S8AAOExAADhMwAA4TUAAOE3AADhOAAA4TsAAOFIAADhWQAA4VsAAOFdAADhXwAA4WEAAOFjAADhZQAA4WcAAOFpAADhegAA4X0AAOGAAADhgwAA4YYAAOGJAADhjAAA4Y8AAOGSAADhlAAA4dMAAOHVAADh1wAA4dkAAOHcAADh3QAA4d4AAOHfAADh4AAA4eIAAOHkAADh5QAA4eYAAOHoAADh6QAA4igAAOIqAADiLAAA4i4AAOIxAADiMgAA4jMAAOI0AADiNQAA4jcAAOI5AADiOgAA4jsAAOI9AADiPgAA4n0AAOJ/AADiggAA4oQAAOKHAADiiAAA4okAAOKKAADiiwAA4o0AAOKPAADikAAA4pEAAOKTAADilAAA4qEAAOKiAADiowAA4qUAAOLkAADi5gAA4ugAAOLqAADi7QAA4u4AAOLvAADi8AAA4vEAAOLzAADi9QAA4vYAAOL3AADi+QAA4voAAOM5AADjOwAA4z0AAOM/AADjQgAA40MAAONEAADjRQAA40YAAONIAADjSgAA40sAAONMAADjTgAA408AAOOOAADjkAAA45IAAOOUAADjlwAA45gAAOOZAADjmgAA45sAAOOdAADjnwAA46AAAOOhAADjowAA46QAAOPjAADj5QAA4+cAAOPpAADj7AAA4+0AAOPuAADj7wAA4/AAAOPyAADj9AAA4/UAAOP2AADj+AAA4/kAAOQ4AADkOgAA5DwAAOQ+AADkQQAA5EIAAORDAADkRAAA5EUAAORHAADkSQAA5EoAAORLAADkTQAA5E4AAORzAADklwAA5L4AAOTiAADk5QAA5OcAAOTpAADk6wAA5O0AAOTvAADk8AAA5PMAAOUAAADlDwAA5REAAOUTAADlFQAA5RcAAOUZAADlGwAA5R0AAOUsAADlLwAA5TIAAOU1AADlOAAA5TsAAOU+AADlQQAA5UMAAOWCAADlhAAA5YYAAOWIAADliwAA5YwAAOWNAADljgAA5Y8AAOWRAADlkwAA5ZQAAOWVAADllwAA5ZgAAOXXAADl2QAA5dsAAOXdAADl4AAA5eEAAOXiAADl4wAA5eQAAOXmAADl6AAA5ekAAOXqAADl7AAA5e0AAOYsAADmLgAA5jAAAOYyAADmNQAA5jYAAOY3AADmOAAA5jkAAOY7AADmPQAA5j4AAOY/AADmQQAA5kIAAOaBAADmgwAA5oUAAOaHAADmigAA5osAAOaMAADmjQAA5o4AAOaQAADmkgAA5pMAAOaUAADmlgAA5pcAAObWAADm2AAA5toAAObcAADm3wAA5uAAAObhAADm4gAA5uMAAOblAADm5wAA5ugAAObpAADm6wAA5uwAAOcrAADnLQAA5zAAAOcyAADnNQAA5zYAAOc3AADnOAAA5zkAAOc7AADnPQAA5z4AAOc/AADnQQAA50IAAOdeAADnnQAA558AAOehAADnowAA56YAAOenAADnqAAA56kAAOeqAADnrAAA564AAOevAADnsAAA57IAAOezAADn/gAA6CEAAOhBAADoYQAA6GMAAOhlAADoZwAA6GkAAOhrAADobAAA6G0AAOhwAADocQAA6HMAAOh0AADodgAA6HgAAOh5AADoegAA6H0AAOh+AADohwAA6JQAAOiZAADomwAA6J0AAOiiAADopQAA6KgAAOiqAADozwAA6PMAAOkaAADpPgAA6UEAAOlDAADpRQAA6UcAAOlJAADpSwAA6UwAAOlPAADpXAAA6W0AAOlvAADpcQAA6XMAAOl1AADpdwAA6XkAAOl7AADpfQAA6Y4AAOmRAADplAAA6ZcAAOmaAADpnQAA6aAAAOmjAADppgAA6agAAOnnAADp6QAA6esAAOntAADp8AAA6fEAAOnyAADp8wAA6fQAAOn2AADp+AAA6fkAAOn6AADp/AAA6f0AAOo8AADqPgAA6kAAAOpCAADqRQAA6kYAAOpHAADqSAAA6kkAAOpLAADqTQAA6k4AAOpPAADqUQAA6lIAAOqRAADqkwAA6pYAAOqYAADqmwAA6pwAAOqdAADqngAA6p8AAOqhAADqowAA6qQAAOqlAADqpwAA6qgAAOq1AADqtgAA6rcAAOq5AADq+AAA6voAAOr8AADq/gAA6wEAAOsCAADrAwAA6wQAAOsFAADrBwAA6wkAAOsKAADrCwAA6w0AAOsOAADrTQAA608AAOtRAADrUwAA61YAAOtXAADrWAAA61kAAOtaAADrXAAA614AAOtfAADrYAAA62IAAOtjAADrogAA66QAAOumAADrqAAA66sAAOusAADrrQAA664AAOuvAADrsQAA67MAAOu0AADrtQAA67cAAOu4AADr9wAA6/kAAOv7AADr/QAA7AAAAOwBAADsAgAA7AMAAOwEAADsBgAA7AgAAOwJAADsCgAA7AwAAOwNAADsTAAA7E4AAOxQAADsUgAA7FUAAOxWAADsVwAA7FgAAOxZAADsWwAA7F0AAOxeAADsXwAA7GEAAOxiAADshwAA7KsAAOzSAADs9gAA7PkAAOz7AADs/QAA7P8AAO0BAADtAwAA7QQAAO0HAADtFAAA7SMAAO0lAADtJwAA7SkAAO0rAADtLQAA7S8AAO0xAADtQAAA7UMAAO1GAADtSQAA7UwAAO1PAADtUgAA7VUAAO1XAADtlgAA7ZgAAO2aAADtnAAA7Z8AAO2gAADtoQAA7aIAAO2jAADtpQAA7acAAO2oAADtqQAA7asAAO2sAADt6wAA7e0AAO3vAADt8QAA7fQAAO31AADt9gAA7fcAAO34AADt+gAA7fwAAO39AADt/gAA7gAAAO4BAADuQAAA7kIAAO5EAADuRgAA7kkAAO5KAADuSwAA7kwAAO5NAADuTwAA7lEAAO5SAADuUwAA7lUAAO5WAADulQAA7pcAAO6ZAADumwAA7p4AAO6fAADuoAAA7qEAAO6iAADupAAA7qYAAO6nAADuqAAA7qoAAO6rAADu6gAA7uwAAO7uAADu8AAA7vMAAO70AADu9QAA7vYAAO73AADu+QAA7vsAAO78AADu/QAA7v8AAO8AAADvPwAA70EAAO9DAADvRQAA70gAAO9JAADvSgAA70sAAO9MAADvTgAA71AAAO9RAADvUgAA71QAAO9VAADvlAAA75YAAO+YAADvmgAA750AAO+eAADvnwAA76AAAO+hAADvowAA76UAAO+mAADvpwAA76kAAO+qAADv9QAA8BgAAPA4AADwWAAA8FoAAPBcAADwXgAA8GAAAPBiAADwYwAA8GQAAPBnAADwaAAA8GoAAPBrAADwbQAA8G8AAPBwAADwcQAA8HQAAPB1AADwegAA8IcAAPCMAADwjgAA8JA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AAQF8AAEBfwABAYIAAQGFAAEBhwABAcYAAQHIAAEBygABAcwAAQHPAAEB0AABAdEAAQHSAAEB0wABAdUAAQHXAAEB2AABAdkAAQHbAAEB3AABAhsAAQIdAAECHwABAiEAAQIkAAECJQABAiYAAQInAAECKAABAioAAQIsAAECLQABAi4AAQIwAAECMQABAnAAAQJyAAECdQABAncAAQJ6AAECewABAnwAAQJ9AAECfgABAoAAAQKCAAECgwABAoQAAQKGAAEChwABApQAAQKVAAEClgABApgAAQLXAAEC2QABAtsAAQLdAAEC4AABAuEAAQLiAAEC4wABAuQAAQLmAAEC6AABAukAAQLqAAEC7AABAu0AAQMsAAEDLgABAzAAAQMyAAEDNQABAzYAAQM3AAEDOAABAzkAAQM7AAEDPQABAz4AAQM/AAEDQQABA0IAAQOBAAEDgwABA4UAAQOHAAEDigABA4sAAQOMAAEDjQABA44AAQOQAAEDkgABA5MAAQOUAAEDlgABA5cAAQPWAAED2AABA9oAAQPcAAED3wABA+AAAQPhAAED4gABA+MAAQPlAAED5wABA+gAAQPpAAED6wABA+wAAQQrAAEELQABBC8AAQQxAAEENAABBDUAAQQ2AAEENwABBDgAAQQ6AAEEPAABBD0AAQQ+AAEEQAABBEEAAQRmAAEEigABBLEAAQTVAAEE2AABBNoAAQTcAAEE3gABBOAAAQTiAAEE4wABBOYAAQTzAAEFAgABBQQAAQUGAAEFCAABBQoAAQUMAAEFDgABBRAAAQUfAAEFIgABBSUAAQUoAAEFKwABBS4AAQUxAAEFNAABBTYAAQV1AAEFdwABBXkAAQV7AAEFfgABBX8AAQWAAAEFgQABBYIAAQWEAAEFhgABBYcAAQWIAAEFigABBYsAAQXKAAEFzAABBc4AAQXQAAEF0wABBdQAAQXVAAEF1gABBdcAAQXZAAEF2wABBdwAAQXdAAEF3wABBeAAAQYfAAEGIQABBiMAAQYlAAEGKAABBikAAQYqAAEGKwABBiwAAQYuAAEGMAABBjEAAQYyAAEGNAABBjUAAQZ0AAEGdgABBngAAQZ6AAEGfQABBn4AAQZ/AAEGgAABBoEAAQaDAAEGhQABBoYAAQaHAAEGiQABBooAAQbJAAEGywABBs0AAQbPAAEG0gABBtMAAQbUAAEG1QABBtYAAQbYAAEG2gABBtsAAQbcAAEG3gABBt8AAQceAAEHIAABByIAAQckAAEHJwABBygAAQcpAAEHKgABBysAAQctAAEHLwABBzAAAQcxAAEHMwABBzQAAQdzAAEHdQABB3cAAQd5AAEHfAABB30AAQd+AAEHfwABB4AAAQeCAAEHhAABB4UAAQeGAAEHiAABB4kAAQfUAAEH9wABCBcAAQg3AAEIOQABCDsAAQg9AAEIPwABCEEAAQhCAAEIQwABCEYAAQhHAAEISQABCEoAAQhMAAEITgABCE8AAQhQAAEIUwABCFQAAQhZAAEIZgABCGsAAQhtAAEIbwABCHQAAQh3AAEIegABCHwAAQihAAEIxQABCOwAAQkQAAEJEwABCRUAAQkXAAEJGQABCRsAAQkdAAEJHgABCSEAAQkuAAEJPwABCUEAAQlDAAEJRQABCUcAAQlJAAEJSwABCU0AAQlPAAEJYAABCWMAAQlmAAEJaQABCWwAAQlvAAEJcgABCXUAAQl4AAEJegABCbkAAQm7AAEJvQABCb8AAQnCAAEJwwABCcQAAQnFAAEJxgABCcgAAQnKAAEJywABCcwAAQnOAAEJzwABCg4AAQoQAAEKEgABChQAAQoXAAEKGAABChkAAQoaAAEKGwABCh0AAQofAAEKIAABCiEAAQojAAEKJAABCmMAAQplAAEKaAABCmoAAQptAAEKbgABCm8AAQpwAAEKcQABCnMAAQp1AAEKdgABCncAAQp5AAEKegABCocAAQqIAAEKiQABCosAAQrKAAEKzAABCs4AAQrQAAEK0wABCtQAAQrVAAEK1gABCtcAAQrZAAEK2wABCtwAAQrdAAEK3wABCuAAAQsfAAELIQABCyMAAQslAAELKAABCykAAQsqAAELKwABCywAAQsuAAELMAABCzEAAQsyAAELNAABCzUAAQt0AAELdgABC3gAAQt6AAELfQABC34AAQt/AAELgAABC4EAAQuDAAELhQABC4YAAQuHAAELiQABC4oAAQvJAAELywABC80AAQvPAAEL0gABC9MAAQvUAAEL1QABC9YAAQvYAAEL2gABC9sAAQvcAAEL3gABC98AAQweAAEMIAABDCIAAQwkAAEMJwABDCgAAQwpAAEMKgABDCsAAQwtAAEMLwABDDAAAQwxAAEMMwABDDQAAQxZAAEMfQABDKQAAQzIAAEMywABDM0AAQzPAAEM0QABDNMAAQzVAAEM1gABDNkAAQzmAAEM9QABDPcAAQz5AAEM+wABDP0AAQz/AAENAQABDQMAAQ0SAAENFQABDRgAAQ0bAAENHgABDSEAAQ0kAAENJwABDSkAAQ1oAAENagABDW0AAQ1vAAENcgABDXMAAQ10AAENdQABDXYAAQ14AAENegABDXsAAQ18AAENfgABDX8AAQ2+AAENwAABDcIAAQ3EAAENxwABDcgAAQ3JAAENygABDcsAAQ3NAAENzwABDdAAAQ3RAAEN0wABDdQAAQ4TAAEOFQABDhcAAQ4ZAAEOHAABDh0AAQ4eAAEOHwABDiAAAQ4iAAEOJAABDiUAAQ4mAAEOKAABDikAAQ5oAAEOagABDm0AAQ5vAAEOcgABDnMAAQ50AAEOdQABDnYAAQ54AAEOegABDnsAAQ58AAEOfgABDn8AAQ6BAAEOwAABDsIAAQ7EAAEOxgABDskAAQ7KAAEOywABDswAAQ7NAAEOzwABDtEAAQ7SAAEO0wABDtUAAQ7WAAEPFQABDxcAAQ8ZAAEPGwABDx4AAQ8fAAEPIAABDyEAAQ8iAAEPJAABDyYAAQ8nAAEPKAABDyoAAQ8rAAEPagABD2wAAQ9uAAEPcAABD3MAAQ90AAEPdQABD3YAAQ93AAEPeQABD3sAAQ98AAEPfQABD38AAQ+AAAEPywABD+4AARAOAAEQLgABEDAAARAyAAEQNAABEDYAARA4AAEQOQABEDoAARA9AAEQPgABEEAAARBBAAEQRAABEEYAARBHAAEQSAABEEsAARBMAAEQUQABEF4AARBjAAEQZQABEGcAARBsAAEQbwABEHIAARB0AAEQmQABEL0AARDkAAERCAABEQsAARENAAERDwABEREAARETAAERFQABERYAAREZAAERJgABETcAARE5AAEROwABET0AARE/AAERQQABEUMAARFFAAERRwABEVgAARFbAAERXgABEWEAARFkAAERZwABEWoAARFtAAERcAABEXIAARGxAAERswABEbUAARG3AAERugABEbsAARG8AAERvQABEb4AARHAAAERwgABEcMAARHEAAERxgABEccAARIGAAESCAABEgoAARIMAAESDwABEhAAARIRAAESEgABEhMAARIVAAESFwABEhgAARIZAAESGwABEhwAARJbAAESXQABEmAAARJiAAESZQABEmYAARJnAAESaAABEmkAARJrAAESbQABEm4AARJvAAEScQABEnIAARJ/AAESgAABEoEAARKDAAESwgABEsQAARLGAAESyAABEssAARLMAAESzQABEs4AARLPAAES0QABEtMAARLUAAES1QABEtcAARLYAAETFwABExkAARMbAAETHQABEyAAARMhAAETIgABEyMAARMkAAETJgABEygAARMpAAETKgABEywAARMtAAETbAABE24AARNwAAETcgABE3UAARN2AAETdwABE3gAARN5AAETewABE30AARN+AAETfwABE4EAAROCAAETwQABE8MAARPFAAETxwABE8oAARPLAAETzAABE80AARPOAAET0AABE9IAARPTAAET1AABE9YAARPXAAEUFgABFBgAARQaAAEUHAABFB8AARQgAAEUIQABFCIAARQjAAEUJQABFCcAARQoAAEUKQABFCsAARQsAAEUUQABFHUAARScAAEUwAABFMMAARTFAAEUxwABFMkAARTLAAEUzQABFM4AARTRAAEU3gABFO0AARTvAAEU8QABFPMAART1AAEU9wABFPkAART7AAEVCgABFQ0AARUQAAEVEwABFRYAARUZAAEVHAABFR8AARUhAAEVYAABFWIAARVkAAEVZgABFWkAARVqAAEVawABFWwAARVtAAEVbwABFXEAARVyAAEVcwABFXUAARV2AAEVtQABFbcAARW6AAEVvAABFb8AARXAAAEVwQABFcIAARXDAAEVxQABFccAARXIAAEVyQABFcsAARXMAAEWCwABFg0AARYPAAEWEQABFhQAARYVAAEWFgABFhcAARYYAAEWGgABFhwAARYdAAEWHgABFiAAARYhAAEWYAABFmIAARZlAAEWZwABFmoAARZrAAEWbAABFm0AARZuAAEWcAABFnIAARZzAAEWdAABFnYAARZ3AAEWugABFt4AARcCAAEXJQABF0wAARdsAAEXkwABF7oAARfaAAEX/gABGCIAARgkAAEYJwABGCkAARgrAAEYLQABGDAAARgzAAEYNQABGDcAARg6AAEYPAABGD4AARhBAAEYRAABGEUAARhKAAEYVwABGFoAARhcAAEYXwABGGIAARhkAAEYiQABGK0AARjUAAEY+AABGPsAARj9AAEY/wABGQEAARkDAAEZBQABGQYAARkJAAEZFgABGSkAARkrAAEZLQABGS8AARkxAAEZMwABGTUAARk3AAEZOQABGTsAARlOAAEZUQABGVQAARlXAAEZWgABGV0AARlgAAEZYwABGWYAARlpAAEZawABGaoAARmsAAEZrwABGbEAARm0AAEZtQABGbYAARm3AAEZuAABGboAARm8AAEZvQABGb4AARnAAAEZwQABGcoAARnLAAEZzQABGgwAARoOAAEaEAABGhIAARoVAAEaFgABGhcAARoYAAEaGQABGhsAARodAAEaHgABGh8AARohAAEaIgABGmEAARpjAAEaZgABGmgAARprAAEabAABGm0AARpuAAEabwABGnEAARpzAAEadAABGnUAARp3AAEaeAABGoEAARqCAAEahAABGsMAARrFAAEaxwABGskAARrMAAEazQABGs4AARrPAAEa0AABGtIAARrUAAEa1QABGtYAARrYAAEa2QABGxgAARsaAAEbHQABGx8AARsiAAEbIwABGyQAARslAAEbJgABGygAARsqAAEbKwABGywAARsuAAEbLwABGzgAARs5AAEbOwABG3oAARt8AAEbfgABG4AAARuDAAEbhAABG4UAARuGAAEbhwABG4kAARuLAAEbjAABG40AARuPAAEbkAABG88AARvRAAEb1AABG9YAARvZAAEb2gABG9sAARvcAAEb3QABG98AARvhAAEb4gABG+MAARvlAAEb5gABG/MAARv0AAEb9QABG/cAARw2AAEcOAABHDoAARw8AAEcPwABHEAAARxBAAEcQgABHEMAARxFAAEcRwABHEgAARxJAAEcSwABHEwAARyLAAEcjQABHJAAARySAAEclQABHJYAARyXAAEcmAABHJkAARybAAEcnQABHJ4AARyfAAEcoQABHKIAARyxAAEcvgABHMsAARzOAAEc0QABHNQAARzXAAEc2gABHN0AARzqAAEc7QABHPAAARzzAAEc9gABHPkAARz8AAEc/gABHQkAAR0RAAEdGwABHSUAAR0xAAEdOwABHYYAAR2pAAEdyQABHekAAR3rAAEd7QABHe8AAR3xAAEd9AABHfUAAR32AAEd+QABHfoAAR38AAEd/QABHf8AAR4CAAEeAwABHgQAAR4HAAEeCAABHg0AAR4aAAEeHwABHiEAAR4jAAEeKAABHisAAR4uAAEeMAABHlUAAR55AAEeoAABHsQAAR7HAAEeyQABHssAAR7NAAEezwABHtEAAR7SAAEe1QABHuIAAR7zAAEe9QABHvcAAR75AAEe+wABHv0AAR7/AAEfAQABHwMAAR8UAAEfFwABHxoAAR8dAAEfIAABHyMAAR8mAAEfKQABHywAAR8uAAEfbQABH28AAR9xAAEfcwABH3YAAR93AAEfeAABH3kAAR96AAEffAABH34AAR9/AAEfgAABH4IAAR+DAAEfwgABH8QAAR/GAAEfyAABH8sAAR/MAAEfzQABH84AAR/PAAEf0QABH9MAAR/UAAEf1QABH9cAAR/YAAEgFwABIBkAASAcAAEgHgABICEAASAiAAEgIwABICQAASAlAAEgJwABICkAASAqAAEgKwABIC0AASAuAAEgOwABIDwAASA9AAEgPwABIH4AASCAAAEgggABIIQAASCHAAEgiAABIIkAASCKAAEgiwABII0AASCPAAEgkAABIJEAASCTAAEglAABINMAASDVAAEg1wABINkAASDcAAEg3QABIN4AASDfAAEg4AABIOIAASDkAAEg5QABIOYAASDoAAEg6QABISgAASEqAAEhLAABIS4AASExAAEhMgABITMAASE0AAEhNQABITcAASE5AAEhOgABITsAASE9AAEhPgABIX0AASF/AAEhgQABIYMAASGGAAEhhwABIYgAASGJAAEhigABIYwAASGOAAEhjwABIZAAASGSAAEhkwABIdIAASHUAAEh1gABIdgAASHbAAEh3AABId0AASHeAAEh3wABIeEAASHjAAEh5AABIeUAASHnAAEh6AABIg0AASIxAAEiWAABInwAASJ/AAEigQABIoMAASKFAAEihwABIokAASKKAAEijQABIpoAASKpAAEiqwABIq0AASKvAAEisQABIrMAASK1AAEitwABIsYAASLJAAEizAABIs8AASLSAAEi1QABItgAASLbAAEi3QABIxwAASMeAAEjIQABIyMAASMmAAEjJwABIygAASMpAAEjKgABIywAASMuAAEjLwABIzAAASMyAAEjMwABI3IAASN0AAEjdgABI3gAASN7AAEjfAABI30AASN+AAEjfwABI4EAASODAAEjhAABI4UAASOHAAEjiAABI8cAASPJAAEjywABI80AASPQAAEj0QABI9IAASPTAAEj1AABI9YAASPYAAEj2QABI9oAASPcAAEj3QABJBwAASQeAAEkIQABJCMAASQmAAEkJwABJCgAASQpAAEkKgABJCwAASQuAAEkLwABJDAAASQyAAEkMwABJHIAASR0AAEkdgABJHgAASR7AAEkfAABJH0AASR+AAEkfwABJIEAASSDAAEkhAABJIUAASSHAAEkiAABJMcAASTJAAEkywABJM0AASTQAAEk0QABJNIAASTTAAEk1AABJNYAASTYAAEk2QABJNoAASTcAAEk3QABJRwAASUeAAElIAABJSIAASUlAAElJgABJScAASUoAAElKQABJSsAASUtAAElLgABJS8AASUxAAElMgABJX0AASWgAAElwAABJeAAASXiAAEl5AABJeYAASXoAAEl6wABJewAASXtAAEl8AABJfEAASXzAAEl9AABJfYAASX5AAEl+gABJfsAASX+AAEl/wABJgQAASYRAAEmFgABJhgAASYaAAEmHwABJiIAASYlAAEmJwABJkwAASZwAAEmlwABJrsAASa+AAEmwAABJsIAASbEAAEmxgABJsgAASbJAAEmzAABJtkAASbqAAEm7AABJu4AASbwAAEm8gABJvQAASb2AAEm+AABJvoAAScLAAEnDgABJxEAAScUAAEnFwABJxoAAScdAAEnIAABJyMAASclAAEnZAABJ2YAASdoAAEnagABJ20AASduAAEnbwABJ3AAASdxAAEncwABJ3UAASd2AAEndwABJ3kAASd6AAEnuQABJ7sAASe9AAEnvwABJ8IAASfDAAEnxAABJ8UAASfGAAEnyAABJ8oAASfLAAEnzAABJ84AASfPAAEoDgABKBAAASgTAAEoFQABKBgAASgZAAEoGgABKBsAASgcAAEoHgABKCAAASghAAEoIgABKCQAASglAAEoMgABKDMAASg0AAEoNgABKHUAASh3AAEoeQABKHsAASh+AAEofwABKIAAASiBAAEoggABKIQAASiGAAEohwABKIgAASiKAAEoiwABKMoAASjMAAEozgABKNAAASjTAAEo1AABKNUAASjWAAEo1wABKNkAASjbAAEo3AABKN0AASjfAAEo4AABKR8AASkhAAEpIwABKSUAASkoAAEpKQABKSoAASkrAAEpLAABKS4AASkwAAEpMQABKTIAASk0AAEpNQABKXQAASl2AAEpeAABKXoAASl9AAEpfgABKX8AASmAAAEpgQABKYMAASmFAAEphgABKYcAASmJAAEpigABKckAASnLAAEpzQABKc8AASnSAAEp0wABKdQAASnVAAEp1gABKdgAASnaAAEp2wABKdwAASneAAEp3wABKgQAASooAAEqTwABKnMAASp2AAEqeAABKnoAASp8AAEqfgABKoAAASqBAAEqhAABKpEAASqgAAEqogABKqQAASqmAAEqqAABKqoAASqsAAEqrgABKr0AASrAAAEqwwABKsYAASrJAAEqzAABKs8AASrSAAEq1AABKxMAASsVAAErFwABKxkAASscAAErHQABKx4AASsfAAErIAABKyIAASskAAErJQABKyYAASsoAAErKQABK2gAAStqAAErbAABK24AAStxAAErcgABK3MAASt0AAErdQABK3cAASt5AAEregABK3sAASt9AAErfgABK70AASu/AAErwQABK8MAASvGAAErxwABK8gAASvJAAErygABK8wAASvOAAErzwABK9AAASvSAAEr0wABLBIAASwUAAEsFgABLBgAASwbAAEsHAABLB0AASweAAEsHwABLCEAASwjAAEsJAABLCUAASwnAAEsKAABLGcAASxpAAEsawABLG0AASxwAAEscQABLHIAASxzAAEsdAABLHYAASx4AAEseQABLHoAASx8AAEsfQABLLwAASy+AAEswAABLMIAASzFAAEsxgABLMcAASzIAAEsyQABLMsAASzNAAEszgABLM8AASzRAAEs0gABLREAAS0TAAEtFQABLRcAAS0aAAEtGwABLRwAAS0dAAEtHgABLSAAAS0iAAEtIwABLSQAAS0mAAEtJwABLXIAAS2VAAEttQABLdUAAS3XAAEt2QABLdsAAS3dAAEt4AABLeEAAS3iAAEt5QABLeYAAS3oAAEt6QABLesAAS3uAAEt7wABLfAAAS3zAAEt9AABLfkAAS4GAAEuCwABLg0AAS4PAAEuFAABLhcAAS4aAAEuHAABLkEAAS5lAAEujAABLrAAAS6zAAEutQABLrcAAS65AAEuuwABLr0AAS6+AAEuwQABLs4AAS7fAAEu4QABLuMAAS7lAAEu5wABLukAAS7rAAEu7QABLu8AAS8AAAEvAwABLwYAAS8JAAEvDAABLw8AAS8SAAEvFQABLxgAAS8aAAEvWQABL1sAAS9dAAEvXwABL2IAAS9jAAEvZAABL2UAAS9mAAEvaAABL2oAAS9rAAEvbAABL24AAS9vAAEvrgABL7AAAS+yAAEvtAABL7cAAS+4AAEvuQABL7oAAS+7AAEvvQABL78AAS/AAAEvwQABL8MAAS/EAAEwAwABMAUAATAIAAEwCgABMA0AATAOAAEwDwABMBAAATARAAEwEwABMBUAATAWAAEwFwABMBkAATAaAAEwJwABMCgAATApAAEwKwABMGoAATBsAAEwbgABMHAAATBzAAEwdAABMHUAATB2AAEwdwABMHkAATB7AAEwfAABMH0AATB/AAEwgAABML8AATDBAAEwwwABMMUAATDIAAEwyQABMMoAATDLAAEwzAABMM4AATDQAAEw0QABMNIAATDUAAEw1QABMRQAATEWAAExGAABMRoAATEdAAExHgABMR8AATEgAAExIQABMSMAATElAAExJgABMScAATEpAAExKgABMWkAATFrAAExbQABMW8AATFyAAExcwABMXQAATF1AAExdgABMXgAATF6AAExewABMXwAATF+AAExfwABMb4AATHAAAExwgABMcQAATHHAAExyAABMckAATHKAAExywABMc0AATHPAAEx0AABMdEAATHTAAEx1AABMfkAATIdAAEyRAABMmgAATJrAAEybQABMm8AATJxAAEycwABMnUAATJ2AAEyeQABMoYAATKVAAEylwABMpkAATKbAAEynQABMp8AATKhAAEyowABMrIAATK1AAEyuAABMrsAATK+AAEywQABMsQAATLHAAEyyQABMwgAATMKAAEzDAABMw4AATMRAAEzEgABMxMAATMUAAEzFQABMxcAATMZAAEzGgABMxsAATMdAAEzHgABM10AATNfAAEzYQABM2MAATNmAAEzZwABM2gAATNpAAEzagABM2wAATNuAAEzbwABM3AAATNyAAEzcwABM7IAATO0AAEztgABM7gAATO7AAEzvAABM70AATO+AAEzvwABM8EAATPDAAEzxAABM8UAATPHAAEzyAABNAcAATQJAAE0CwABNA0AATQQAAE0EQABNBIAATQTAAE0FAABNBYAATQYAAE0GQABNBoAATQcAAE0HQABNFwAATReAAE0YAABNGIAATRlAAE0ZgABNGcAATRoAAE0aQABNGsAATRtAAE0bgABNG8AATRxAAE0cgABNLEAATSzAAE0tQABNLcAATS6AAE0uwABNLwAATS9AAE0vgABNMAAATTCAAE0wwABNMQAATTGAAE0xwABNQYAATUIAAE1CgABNQwAATUPAAE1EAABNREAATUSAAE1EwABNRUAATUXAAE1GAABNRkAATUbAAE1HAABNWcAATWKAAE1qgABNcoAATXMAAE1zgABNdAAATXSAAE11QABNdYAATXXAAE12gABNdsAATXdAAE13gABNeAAATXjAAE15AABNeUAATXoAAE16QABNfIAATX/AAE2BAABNgYAATYIAAE2DQABNhAAATYTAAE2FQABNjoAATZeAAE2hQABNqkAATasAAE2rgABNrAAATayAAE2tAABNrYAATa3AAE2ugABNscAATbYAAE22gABNtwAATbeAAE24AABNuIAATbkAAE25gABNugAATb5AAE2/AABNv8AATcCAAE3BQABNwgAATcLAAE3DgABNxEAATcTAAE3UgABN1QAATdWAAE3WAABN1sAATdcAAE3XQABN14AATdfAAE3YQABN2MAATdkAAE3ZQABN2cAATdoAAE3pwABN6kAATerAAE3rQABN7AAATexAAE3sgABN7MAATe0AAE3tgABN7gAATe5AAE3ugABN7wAATe9AAE3/AABN/4AATgBAAE4AwABOAYAATgHAAE4CAABOAkAATgKAAE4DAABOA4AATgPAAE4EAABOBIAATgTAAE4IAABOCEAATgiAAE4JAABOGMAAThlAAE4ZwABOGkAAThsAAE4bQABOG4AAThvAAE4cAABOHIAATh0AAE4dQABOHYAATh4AAE4eQABOLgAATi6AAE4vAABOL4AATjBAAE4wgABOMMAATjEAAE4xQABOMcAATjJAAE4ygABOMsAATjNAAE4zgABOQ0AATkPAAE5EQABORMAATkWAAE5FwABORgAATkZAAE5GgABORwAATkeAAE5HwABOSAAATkiAAE5IwABOWIAATlkAAE5ZgABOWgAATlrAAE5bAABOW0AATluAAE5bwABOXEAATlzAAE5dAABOXUAATl3AAE5eAABObcAATm5AAE5uwABOb0AATnAAAE5wQABOcIAATnDAAE5xAABOcYAATnIAAE5yQABOcoAATnMAAE5zQABOfIAAToWAAE6PQABOmEAATpkAAE6ZgABOmgAATpqAAE6bAABOm4AATpvAAE6cgABOn8AATqOAAE6kAABOpIAATqUAAE6lgABOpgAATqaAAE6nAABOqsAATquAAE6sQABOrQAATq3AAE6ugABOr0AATrAAAE6wgABOwEAATsDAAE7BQABOwcAATsKAAE7CwABOwwAATsNAAE7DgABOxAAATsSAAE7EwABOxQAATsWAAE7FwABO1YAATtYAAE7WgABO1wAATtfAAE7YAABO2EAATtiAAE7YwABO2UAATtnAAE7aAABO2kAATtrAAE7bAABO6sAATutAAE7rwABO7EAATu0AAE7tQABO7YAATu3AAE7uAABO7oAATu8AAE7vQABO74AATvAAAE7wQABPAAAATwCAAE8BQABPAcAATwKAAE8CwABPAwAATwNAAE8DgABPBAAATwSAAE8EwABPBQAATwWAAE8FwABPFYAATxYAAE8WgABPFwAATxfAAE8YAABPGEAATxiAAE8YwABPGUAATxnAAE8aAABPGkAATxrAAE8bAABPKsAATytAAE8rwABPLEAATy0AAE8tQABPLYAATy3AAE8uAABPLoAATy8AAE8vQABPL4AATzAAAE8wQABPQAAAT0CAAE9BAABPQYAAT0JAAE9CgABPQsAAT0MAAE9DQABPQ8AAT0RAAE9EgABPRMAAT0VAAE9FgABPWEAAT2EAAE9pAABPcQAAT3GAAE9yAABPcoAAT3MAAE9zwABPdAAAT3RAAE91AABPdUAAT3XAAE92AABPdsAAT3eAAE93wABPeAAAT3jAAE95AABPekAAT32AAE9+wABPf0AAT3/AAE+BAABPgcAAT4KAAE+DAABPjEAAT5VAAE+fAABPqAAAT6jAAE+pQABPqcAAT6pAAE+qwABPq0AAT6uAAE+sQABPr4AAT7PAAE+0QABPtMAAT7VAAE+1wABPtkAAT7bAAE+3QABPt8AAT7wAAE+8wABPvYAAT75AAE+/AABPv8AAT8CAAE/BQABPwgAAT8KAAE/SQABP0sAAT9NAAE/TwABP1IAAT9TAAE/VAABP1UAAT9WAAE/WAABP1oAAT9bAAE/XAABP14AAT9fAAE/ngABP6AAAT+iAAE/pAABP6cAAT+oAAE/qQABP6oAAT+rAAE/rQABP68AAT+wAAE/sQABP7M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AAVAHAAFQCQABUC4AAVBSAAFQeQABUJ0AAVCgAAFQogABUKQAAVCmAAFQqAABUKoAAVCrAAFQrgABULsAAVDMAAFQzgABUNAAAVDSAAFQ1AABUNYAAVDYAAFQ2gABUNwAAVDtAAFQ8AABUPMAAVD2AAFQ+QABUPwAAVD/AAFRAgABUQUAAVEHAAFRRgABUUgAAVFKAAFRTAABUU8AAVFQAAFRUQABUVIAAVFTAAFRVQABUVcAAVFYAAFRWQABUVsAAVFcAAFRmwABUZ0AAVGfAAFRoQABUaQAAVGlAAFRpgABUacAAVGoAAFRqgABUawAAVGtAAFRrgABUbAAAVGxAAFR8AABUfIAAVH1AAFR9wABUfoAAVH7AAFR/AABUf0AAVH+AAFSAAABUgIAAVIDAAFSBAABUgYAAVIHAAFSFAABUhUAAVIWAAFSGAABUlcAAVJZAAFSWwABUl0AAVJgAAFSYQABUmIAAVJjAAFSZAABUmYAAVJoAAFSaQABUmoAAVJsAAFSbQABUqwAAVKuAAFSsAABUrIAAVK1AAFStgABUrcAAVK4AAFSuQABUrsAAVK9AAFSvgABUr8AAVLBAAFSwgABUwEAAVMDAAFTBQABUwcAAVMKAAFTCwABUwwAAVMNAAFTDgABUxAAAVMSAAFTEwABUxQAAVMWAAFTFwABU1YAAVNYAAFTWgABU1wAAVNfAAFTYAABU2EAAVNiAAFTYwABU2UAAVNnAAFTaAABU2kAAVNrAAFTbAABU6sAAVOtAAFTrwABU7EAAVO0AAFTtQABU7YAAVO3AAFTuAABU7oAAVO8AAFTvQABU74AAVPAAAFTwQABU+YAAVQKAAFUMQABVFUAAVRYAAFUWgABVFwAAVReAAFUYAABVGIAAVRjAAFUZgABVHMAAVSCAAFUhAABVIYAAVSIAAFUigABVIwAAVSOAAFUkAABVJ8AAVSiAAFUpQABVKgAAVSrAAFUrgABVLEAAVS0AAFUtgABVPUAAVT3AAFU+QABVPsAAVT+AAFU/wABVQAAAVUBAAFVAgABVQQAAVUGAAFVBwABVQgAAVUKAAFVCwABVUoAAVVMAAFVTgABVVAAAVVTAAFVVAABVVUAAVVWAAFVVwABVVkAAVVbAAFVXAABVV0AAVVfAAFVYAABVZ8AAVWhAAFVowABVaUAAVWoAAFVqQABVaoAAVWrAAFVrAABVa4AAVWwAAFVsQABVbIAAVW0AAFVtQABVfQAAVX2AAFV+AABVfoAAVX9AAFV/gABVf8AAVYAAAFWAQABVgMAAVYFAAFWBgABVgcAAVYJAAFWCgABVkkAAVZLAAFWTQABVk8AAVZSAAFWUwABVlQAAVZVAAFWVgABVlgAAVZaAAFWWwABVlwAAVZeAAFWXwABVp4AAVagAAFWogABVqQAAVanAAFWqAABVqkAAVaqAAFWqwABVq0AAVavAAFWsAABVrEAAVazAAFWtAABVvMAAVb1AAFW9wABVvkAAVb8AAFW/QABVv4AAVb/AAFXAAABVwIAAVcEAAFXBQABVwYAAVcIAAFXCQABVxIAAVcTAAFXFQABV1gAAVd8AAFXoAABV8MAAVfqAAFYCgABWDEAAVhYAAFYeAABWJwAAVjAAAFYwgABWMUAAVjHAAFYyQABWMsAAVjOAAFY0QABWNMAAVjVAAFY2AABWNoAAVjcAAFY3wABWOIAAVjjAAFY6AABWPUAAVj4AAFY+gABWP0AAVkAAAFZAgABWScAAVlLAAFZcgABWZYAAVmZAAFZmwABWZ0AAVmfAAFZoQABWaMAAVmkAAFZpwABWbQAAVnHAAFZyQABWcsAAVnNAAFZzwABWdEAAVnTAAFZ1QABWdcAAVnZAAFZ7AABWe8AAVnyAAFZ9QABWfgAAVn7AAFZ/gABWgEAAVoEAAFaBwABWgkAAVpIAAFaSgABWk0AAVpPAAFaUgABWlMAAVpUAAFaVQABWlYAAVpYAAFaWgABWlsAAVpcAAFaXgABWl8AAVpoAAFaaQABWmsAAVqqAAFarAABWq4AAVqwAAFaswABWrQAAVq1AAFatgABWrcAAVq5AAFauwABWrwAAVq9AAFavwABWsAAAVr/AAFbAQABWwQAAVsGAAFbCQABWwoAAVsLAAFbDAABWw0AAVsPAAFbEQABWxIAAVsTAAFbFQABWxYAAVsfAAFbIAABWyIAAVthAAFbYwABW2UAAVtnAAFbagABW2sAAVtsAAFbbQABW24AAVtwAAFbcgABW3MAAVt0AAFbdgABW3cAAVu2AAFbuAABW7sAAVu9AAFbwAABW8EAAVvCAAFbwwABW8QAAVvGAAFbyAABW8kAAVvKAAFbzAABW80AAVvWAAFb1wABW9kAAVwYAAFcGgABXBwAAVweAAFcIQABXCIAAVwjAAFcJAABXCUAAVwnAAFcKQABXCoAAVwrAAFcLQABXC4AAVxtAAFcbwABXHIAAVx0AAFcdwABXHgAAVx5AAFcegABXHsAAVx9AAFcfwABXIAAAVyBAAFcgwABXIQAAVyRAAFckgABXJMAAVyVAAFc1AABXNYAAVzYAAFc2gABXN0AAVzeAAFc3wABXOAAAVzhAAFc4wABXOUAAVzmAAFc5wABXOkAAVzqAAFdKQABXSsAAV0uAAFdMAABXTMAAV00AAFdNQABXTYAAV03AAFdOQABXTsAAV08AAFdPQABXT8AAV1AAAFdVAABXWEAAV1mAAFdaAABXWsAAV1wAAFdcwABXXYAAV14AAFdfAABXccAAV3qAAFeCgABXioAAV4sAAFeLgABXjAAAV4yAAFeNQABXjYAAV43AAFeOgABXjsAAV49AAFePgABXkAAAV5CAAFeQwABXkQAAV5HAAFeSAABXk0AAV5aAAFeXwABXmEAAV5jAAFeaAABXmsAAV5uAAFecAABXpUAAV65AAFe4AABXwQAAV8HAAFfCQABXwsAAV8NAAFfDwABXxEAAV8SAAFfFQABXyIAAV8zAAFfNQABXzcAAV85AAFfOwABXz0AAV8/AAFfQQABX0MAAV9UAAFfVwABX1oAAV9dAAFfYAABX2MAAV9mAAFfaQABX2wAAV9uAAFfrQABX68AAV+xAAFfswABX7YAAV+3AAFfuAABX7kAAV+6AAFfvAABX74AAV+/AAFfwAABX8IAAV/DAAFgAgABYAQAAWAGAAFgCAABYAsAAWAMAAFgDQABYA4AAWAPAAFgEQABYBMAAWAUAAFgFQABYBcAAWAYAAFgVwABYFkAAWBcAAFgXgABYGEAAWBiAAFgYwABYGQAAWBlAAFgZwABYGkAAWBqAAFgawABYG0AAWBuAAFgewABYHwAAWB9AAFgfwABYL4AAWDAAAFgwgABYMQAAWDHAAFgyAABYMkAAWDKAAFgywABYM0AAWDPAAFg0AABYNEAAWDTAAFg1AABYRMAAWEVAAFhFwABYRkAAWEcAAFhHQABYR4AAWEfAAFhIAABYSIAAWEkAAFhJQABYSYAAWEoAAFhKQABYWgAAWFqAAFhbAABYW4AAWFxAAFhcgABYXMAAWF0AAFhdQABYXcAAWF5AAFhegABYXsAAWF9AAFhfgABYb0AAWG/AAFhwQABYcMAAWHGAAFhxwABYcgAAWHJAAFhygABYcwAAWHOAAFhzwABYdAAAWHSAAFh0wABYhIAAWIUAAFiFgABYhgAAWIbAAFiHAABYh0AAWIeAAFiHwABYiEAAWIjAAFiJAABYiUAAWInAAFiKAABYk0AAWJxAAFimAABYrwAAWK/AAFiwQABYsMAAWLFAAFixwABYskAAWLKAAFizQABYtoAAWLpAAFi6wABYu0AAWLvAAFi8QABYvMAAWL1AAFi9wABYwYAAWMJAAFjDAABYw8AAWMSAAFjFQABYxgAAWMbAAFjHQABY1wAAWNeAAFjYAABY2IAAWNlAAFjZgABY2cAAWNoAAFjaQABY2sAAWNtAAFjbgABY28AAWNxAAFjcgABY7EAAWOzAAFjtQABY7cAAWO6AAFjuwABY7wAAWO9AAFjvgABY8AAAWPCAAFjwwABY8QAAWPGAAFjxwABZAYAAWQIAAFkCgABZAwAAWQPAAFkEAABZBEAAWQSAAFkEwABZBUAAWQXAAFkGAABZBkAAWQbAAFkHAABZFsAAWRdAAFkXwABZGEAAWRkAAFkZQABZGYAAWRnAAFkaAABZGoAAWRsAAFkbQABZG4AAWRwAAFkcQABZLAAAWSyAAFktAABZLYAAWS5AAFkugABZLsAAWS8AAFkvQABZL8AAWTBAAFkwgABZMMAAWTFAAFkxgABZQUAAWUHAAFlCQABZQsAAWUOAAFlDwABZRAAAWURAAFlEgABZRQAAWUWAAFlFwABZRgAAWUaAAFlGwABZVoAAWVcAAFlXgABZWAAAWVjAAFlZAABZWUAAWVmAAFlZwABZWkAAWVrAAFlbAABZW0AAWVvAAFlcAABZbsAAWXeAAFl/gABZh4AAWYgAAFmIgABZiQAAWYmAAFmKQABZioAAWYrAAFmLgABZi8AAWYxAAFmMgABZjQAAWY3AAFmOAABZjkAAWY8AAFmPQABZkYAAWZTAAFmWAABZloAAWZcAAFmYQABZmQAAWZnAAFmaQABZo4AAWayAAFm2QABZv0AAWcAAAFnAgABZwQAAWcGAAFnCAABZwoAAWcLAAFnDgABZxsAAWcsAAFnLgABZzAAAWcyAAFnNAABZzYAAWc4AAFnOgABZzwAAWdNAAFnUAABZ1MAAWdWAAFnWQABZ1wAAWdfAAFnYgABZ2UAAWdnAAFnpgABZ6gAAWeqAAFnrAABZ68AAWewAAFnsQABZ7IAAWezAAFntQABZ7cAAWe4AAFnuQABZ7sAAWe8AAFn+wABZ/0AAWf/AAFoAQABaAQAAWgFAAFoBgABaAcAAWgIAAFoCgABaAwAAWgNAAFoDgABaBAAAWgRAAFoUAABaFIAAWhVAAFoVwABaFoAAWhbAAFoXAABaF0AAWheAAFoYAABaGIAAWhjAAFoZAABaGYAAWhnAAFodAABaHUAAWh2AAFoeAABaLcAAWi5AAFouwABaL0AAWjAAAFowQABaMIAAWjDAAFoxAABaMYAAWjIAAFoyQABaMoAAWjMAAFozQABaQwAAWkOAAFpEAABaRIAAWkVAAFpFgABaRcAAWkYAAFpGQABaRsAAWkdAAFpHgABaR8AAWkhAAFpIgABaWEAAWljAAFpZQABaWcAAWlqAAFpawABaWwAAWltAAFpbgABaXAAAWlyAAFpcwABaXQAAWl2AAFpdwABabYAAWm4AAFpugABabwAAWm/AAFpwAABacEAAWnCAAFpwwABacUAAWnHAAFpyAABackAAWnLAAFpzAABagsAAWoNAAFqDwABahEAAWoUAAFqFQABahYAAWoXAAFqGAABahoAAWocAAFqHQABah4AAWogAAFqIQABakYAAWpqAAFqkQABarUAAWq4AAFqugABarwAAWq+AAFqwAABasIAAWrDAAFqxgABatMAAWriAAFq5AABauYAAWroAAFq6gABauwAAWruAAFq8AABav8AAWsCAAFrBQABawgAAWsLAAFrDgABaxEAAWsUAAFrFgABa1UAAWtXAAFrWQABa1sAAWteAAFrXwABa2AAAWthAAFrYgABa2QAAWtmAAFrZwABa2gAAWtqAAFrawABa6oAAWusAAFrrgABa7AAAWuzAAFrtAABa7UAAWu2AAFrtwABa7kAAWu7AAFrvAABa70AAWu/AAFrwAABa/8AAWwBAAFsAwABbAUAAWwIAAFsCQABbAoAAWwLAAFsDAABbA4AAWwQAAFsEQABbBIAAWwUAAFsFQABbFQAAWxWAAFsWQABbFsAAWxeAAFsXwABbGAAAWxhAAFsYgABbGQAAWxmAAFsZwABbGgAAWxqAAFsawABbG4AAWytAAFsrwABbLEAAWyzAAFstgABbLcAAWy4AAFsuQABbLoAAWy8AAFsvgABbL8AAWzAAAFswgABbMMAAW0CAAFtBAABbQYAAW0IAAFtCwABbQwAAW0NAAFtDgABbQ8AAW0RAAFtEwABbRQAAW0VAAFtFwABbRgAAW1XAAFtWQABbVsAAW1dAAFtYAABbWEAAW1iAAFtYwABbWQAAW1mAAFtaAABbWkAAW1qAAFtbAABbW0AAW12AAFtdwABbXkAAW28AAFt4AABbgQAAW4nAAFuTgABbm4AAW6VAAFuvAABbtwAAW8AAAFvJAABbyYAAW8pAAFvKwABby0AAW8vAAFvMgABbzUAAW83AAFvOQABbzwAAW8+AAFvQAABb0MAAW9GAAFvRwABb0wAAW9ZAAFvXAABb14AAW9hAAFvZAABb2YAAW+LAAFvrwABb9YAAW/6AAFv/QABb/8AAXABAAFwAwABcAUAAXAHAAFwCAABcAsAAXAYAAFwKwABcC0AAXAvAAFwMQABcDMAAXA1AAFwNwABcDkAAXA7AAFwPQABcFAAAXBTAAFwVgABcFkAAXBcAAFwXwABcGIAAXBlAAFwaAABcGsAAXBtAAFwrAABcK4AAXCxAAFwswABcLYAAXC3AAFwuAABcLkAAXC6AAFwvAABcL4AAXC/AAFwwAABcMIAAXDDAAFwzAABcM0AAXDPAAFxDgABcRAAAXESAAFxFAABcRcAAXEYAAFxGQABcRoAAXEbAAFxHQABcR8AAXEgAAFxIQABcSMAAXEkAAFxYwABcWUAAXFoAAFxagABcW0AAXFuAAFxbwABcXAAAXFxAAFxcwABcXUAAXF2AAFxdwABcXkAAXF6AAFxgwABcYQAAXGGAAFxxQABcccAAXHJAAFxywABcc4AAXHPAAFx0AABcdEAAXHSAAFx1AABcdYAAXHXAAFx2AABcdoAAXHbAAFyGgABchwAAXIfAAFyIQABciQAAXIlAAFyJgABcicAAXIoAAFyKgABciwAAXItAAFyLgABcjAAAXIxAAFyOgABcjsAAXI9AAFyfAABcn4AAXKAAAFyggABcoUAAXKGAAFyhwABcogAAXKJAAFyiwABco0AAXKOAAFyjwABcpEAAXKSAAFy0QABctMAAXLWAAFy2AABctsAAXLcAAFy3QABct4AAXLfAAFy4QABcuMAAXLkAAFy5QABcucAAXLoAAFy9QABcvYAAXL3AAFy+QABczgAAXM6AAFzPAABcz4AAXNBAAFzQgABc0MAAXNEAAFzRQABc0cAAXNJAAFzSgABc0sAAXNNAAFzTgABc40AAXOPAAFzkgABc5QAAXOXAAFzmAABc5kAAXOaAAFzmwABc50AAXOfAAFzoAABc6EAAXOjAAFzpAABc7IAAXO/AAFzxAABc8cAAXPKAAFzzwABc9IAAXPVAAFz1wABc9wAAXPnAAF0MgABdFUAAXR1AAF0lQABdJcAAXSZAAF0mwABdJ0AAXSgAAF0oQABdKIAAXSlAAF0pgABdKgAAXSpAAF0qwABdK4AAXSvAAF0sAABdLMAAXS0AAF0vQABdMoAAXTPAAF00QABdNMAAXTYAAF02wABdN4AAXTgAAF1BQABdSkAAXVQAAF1dAABdXcAAXV5AAF1ewABdX0AAXV/AAF1gQABdYIAAXWFAAF1kgABdaMAAXWlAAF1pwABdakAAXWrAAF1rQABda8AAXWxAAF1swABdcQAAXXHAAF1ygABdc0AAXXQAAF10wABddYAAXXZAAF13AABdd4AAXYdAAF2HwABdiEAAXYjAAF2JgABdicAAXYoAAF2KQABdioAAXYsAAF2LgABdi8AAXYwAAF2MgABdjMAAXZyAAF2dAABdnYAAXZ4AAF2ewABdnwAAXZ9AAF2fgABdn8AAXaBAAF2gwABdoQAAXaFAAF2hwABdogAAXbHAAF2yQABdswAAXbOAAF20QABdtIAAXbTAAF21AABdtUAAXbXAAF22QABdtoAAXbbAAF23QABdt4AAXbrAAF27AABdu0AAXbvAAF3LgABdzAAAXcyAAF3NAABdzcAAXc4AAF3OQABdzoAAXc7AAF3PQABdz8AAXdAAAF3QQABd0MAAXdEAAF3gwABd4UAAXeHAAF3iQABd4wAAXeNAAF3jgABd48AAXeQAAF3kgABd5QAAXeVAAF3lgABd5gAAXeZAAF32AABd9oAAXfcAAF33gABd+EAAXfiAAF34wABd+QAAXflAAF35wABd+kAAXfqAAF36wABd+0AAXfuAAF4LQABeC8AAXgxAAF4MwABeDYAAXg3AAF4OAABeDkAAXg6AAF4PAABeD4AAXg/AAF4QAABeEIAAXhDAAF4ggABeIQAAXiGAAF4iAABeIsAAXiMAAF4jQABeI4AAXiPAAF4kQABeJMAAXiUAAF4lQABeJcAAXiYAAF4vQABeOEAAXkIAAF5LAABeS8AAXkxAAF5MwABeTUAAXk3AAF5OQABeToAAXk9AAF5SgABeVkAAXlbAAF5XQABeV8AAXlhAAF5YwABeWUAAXlnAAF5dgABeXkAAXl8AAF5fwABeYIAAXmFAAF5iAABeYsAAXmNAAF5zAABec4AAXnQAAF50gABedUAAXnWAAF51wABedgAAXnZAAF52wABed0AAXneAAF53wABeeEAAXniAAF6IQABeiMAAXolAAF6JwABeioAAXorAAF6LAABei0AAXouAAF6MAABejIAAXozAAF6NAABejYAAXo3AAF6dgABengAAXp6AAF6fAABen8AAXqAAAF6gQABeoIAAXqDAAF6hQABeocAAXqIAAF6iQABeosAAXqMAAF6ywABes0AAXrQAAF60gABetUAAXrWAAF61wABetgAAXrZAAF62wABet0AAXreAAF63wABeuEAAXriAAF7IQABeyMAAXslAAF7JwABeyoAAXsrAAF7LAABey0AAXsuAAF7MAABezIAAXszAAF7NAABezYAAXs3AAF7dgABe3gAAXt6AAF7fAABe38AAXuAAAF7gQABe4IAAXuDAAF7hQABe4cAAXuIAAF7iQABe4sAAXuMAAF7ywABe80AAXvPAAF70QABe9QAAXvVAAF71gABe9cAAXvYAAF72gABe9wAAXvdAAF73gABe+AAAXvhAAF8LAABfE8AAXxvAAF8jwABfJEAAXyTAAF8lQABfJcAAXyaAAF8mwABfJwAAXyfAAF8oAABfKIAAXyjAAF8pQABfKgAAXypAAF8qgABfK0AAXyuAAF8swABfMAAAXzFAAF8xwABfMkAAXzOAAF80QABfNQAAXzWAAF8+wABfR8AAX1GAAF9agABfW0AAX1vAAF9cQABfXMAAX11AAF9dwABfXgAAX17AAF9iAABfZkAAX2bAAF9nQABfZ8AAX2hAAF9owABfaUAAX2nAAF9qQABfboAAX29AAF9wAABfcMAAX3GAAF9yQABfcwAAX3PAAF90gABfdQAAX4TAAF+FQABfhcAAX4ZAAF+HAABfh0AAX4eAAF+HwABfiAAAX4iAAF+JAABfiUAAX4mAAF+KAABfikAAX5oAAF+agABfmwAAX5uAAF+cQABfnIAAX5zAAF+dAABfnUAAX53AAF+eQABfnoAAX57AAF+fQABfn4AAX69AAF+vwABfsIAAX7EAAF+xwABfsgAAX7JAAF+ygABfssAAX7NAAF+zwABftAAAX7RAAF+0wABftQAAX7hAAF+4gABfuMAAX7lAAF/JAABfyYAAX8oAAF/KgABfy0AAX8uAAF/LwABfzAAAX8xAAF/MwABfzUAAX82AAF/NwABfzkAAX86AAF/eQABf3sAAX99AAF/fwABf4IAAX+DAAF/hAABf4UAAX+GAAF/iAABf4oAAX+LAAF/jAABf44AAX+PAAF/zgABf9AAAX/SAAF/1AABf9cAAX/YAAF/2QABf9oAAX/bAAF/3QABf98AAX/gAAF/4QABf+MAAX/kAAGAIwABgCUAAYAnAAGAKQABgCwAAYAtAAGALgABgC8AAYAwAAGAMgABgDQAAYA1AAGANgABgDgAAYA5AAGAeAABgHoAAYB8AAGAfgABgIEAAYCCAAGAgwABgIQAAYCFAAGAhwABgIkAAYCKAAGAiwABgI0AAYCOAAGAswABgNcAAYD+AAGBIgABgSUAAYEnAAGBKQABgSsAAYEtAAGBLwABgTAAAYEzAAGBQAABgU8AAYFRAAGBUwABgVUAAYFXAAGBWQABgVsAAYFdAAGBbAABgW8AAYFyAAGBdQABgXgAAYF7AAGBfgABgYEAAYGDAAGBwgABgcQAAYHGAAGByAABgcsAAYHMAAGBzQABgc4AAYHPAAGB0QABgdMAAYHUAAGB1QABgdcAAYHYAAGCFwABghkAAYIbAAGCHQABgiAAAYIhAAGCIgABgiMAAYIkAAGCJgABgigAAYIpAAGCKgABgiwAAYItAAGCbAABgm4AAYJwAAGCcgABgnUAAYJ2AAGCdwABgngAAYJ5AAGCewABgn0AAYJ+AAGCfwABgoEAAYKCAAGCwQABgsMAAYLFAAGCxwABgsoAAYLLAAGCzAABgs0AAYLOAAGC0AABgtIAAYLTAAGC1AABgtYAAYLXAAGDFgABgxgAAYMaAAGDHAABgx8AAYMgAAGDIQABgyIAAYMjAAGDJQABgycAAYMoAAGDKQABgysAAYMsAAGDawABg20AAYNvAAGDcQABg3QAAYN1AAGDdgABg3cAAYN4AAGDegABg3wAAYN9AAGDfgABg4AAAYOBAAGDwAABg8IAAYPEAAGDxgABg8kAAYPKAAGDywABg8wAAYPNAAGDzwABg9EAAYPSAAGD0wABg9UAAYPWAAGD3wABg+AAAYPiAAGEJQABhEkAAYRtAAGEkAABhLcAAYTXAAGE/gABhSUAAYVFAAGFaQABhY0AAYWPAAGFkgABhZQAAYWWAAGFmAABhZsAAYWeAAGFoAABhaIAAYWlAAGFpwABhakAAYWsAAGFrwABhbAAAYW5AAGFxgABhckAAYXLAAGFzgABhdEAAYXTAAGF+AABhhwAAYZDAAGGZwABhmoAAYZsAAGGbgABhnAAAYZyAAGGdAABhnUAAYZ4AAGGhQABhpgAAYaaAAGGnAABhp4AAYagAAGGogABhqQAAYamAAGGqAABhqoAAYa9AAGGwAABhsMAAYbGAAGGyQABhswAAYbPAAGG0gABhtUAAYbYAAGG2gABhxkAAYcbAAGHHgABhyAAAYcjAAGHJAABhyUAAYcmAAGHJwABhykAAYcrAAGHLAABhy0AAYcvAAGHMAABhzkAAYc6AAGHPAABh3sAAYd9AAGHfwABh4EAAYeEAAGHhQABh4YAAYeHAAGHiAABh4oAAYeMAAGHjQABh44AAYeQAAGHkQABh9AAAYfSAAGH1QABh9cAAYfaAAGH2wABh9wAAYfdAAGH3gABh+AAAYfiAAGH4wABh+QAAYfmAAGH5wABh/AAAYfxAAGH8wABiDIAAYg0AAGINgABiDgAAYg7AAGIPAABiD0AAYg+AAGIPwABiEEAAYhDAAGIRAABiEUAAYhHAAGISAABiIcAAYiJAAGIjAABiI4AAYiRAAGIkgABiJMAAYiUAAGIlQABiJcAAYiZAAGImgABiJsAAYidAAGIngABiKcAAYioAAGIqgABiOkAAYjrAAGI7QABiO8AAYjyAAGI8wABiPQAAYj1AAGI9gABiPgAAYj6AAGI+wABiPwAAYj+AAGI/wABiT4AAYlAAAGJQwABiUUAAYlIAAGJSQABiUoAAYlLAAGJTAABiU4AAYlQAAGJUQABiVIAAYlUAAGJVQABiWIAAYljAAGJZAABiWYAAYmlAAGJpwABiakAAYmrAAGJrgABia8AAYmwAAGJsQABibIAAYm0AAGJtgABibcAAYm4AAGJugABibsAAYn6AAGJ/AABif8AAYoBAAGKBAABigUAAYoGAAGKBwABiggAAYoKAAGKDAABig0AAYoOAAGKEAABihEAAYojAAGKMAABijcAAYo6AAGKPQABikAAAYpHAAGKSgABik0AAYpQAAGKUgABil8AAYpqAAGKtQABitgAAYr4AAGLGAABixoAAYscAAGLHgABiyAAAYsjAAGLJAABiyUAAYsoAAGLKQABiysAAYssAAGLLgABizEAAYsyAAGLMwABizYAAYs3AAGLPAABi0kAAYtOAAGLUAABi1IAAYtXAAGLWgABi10AAYtfAAGLhAABi6gAAYvPAAGL8wABi/YAAYv4AAGL+gABi/wAAYv+AAGMAAABjAEAAYwEAAGMEQABjCIAAYwkAAGMJgABjCgAAYwqAAGMLAABjC4AAYwwAAGMMgABjEMAAYxGAAGMSQABjEwAAYxPAAGMUgABjFUAAYxYAAGMWwABjF0AAYycAAGMngABjKAAAYyiAAGMpQABjKYAAYynAAGMqAABjKkAAYyrAAGMrQABjK4AAYyvAAGMsQABjLIAAYzxAAGM8wABjPUAAYz3AAGM+gABjPsAAYz8AAGM/QABjP4AAY0AAAGNAgABjQMAAY0EAAGNBgABjQcAAY1GAAGNSAABjUsAAY1NAAGNUAABjVEAAY1SAAGNUwABjVQAAY1WAAGNWAABjVkAAY1aAAGNXAABjV0AAY1qAAGNawABjWwAAY1uAAGNrQABja8AAY2xAAGNswABjbYAAY23AAGNuAABjbkAAY26AAGNvAABjb4AAY2/AAGNwAABjcIAAY3DAAGOAgABjgQAAY4GAAGOCAABjgsAAY4MAAGODQABjg4AAY4PAAGOEQABjhMAAY4UAAGOFQABjhcAAY4YAAGOVwABjlkAAY5bAAGOXQABjmAAAY5hAAGOYgABjmMAAY5kAAGOZgABjmgAAY5pAAGOagABjmwAAY5tAAGOrAABjq4AAY6wAAGOsgABjrUAAY62AAGOtwABjrgAAY65AAGOuwABjr0AAY6+AAGOvwABjsEAAY7CAAGPAQABjwMAAY8FAAGPBwABjwoAAY8LAAGPDAABjw0AAY8OAAGPEAABjxIAAY8TAAGPFAABjxYAAY8XAAGPPAABj2AAAY+HAAGPqwABj64AAY+wAAGPsgABj7QAAY+2AAGPuAABj7kAAY+8AAGPyQABj9gAAY/aAAGP3AABj94AAY/gAAGP4gABj+QAAY/mAAGP9QABj/gAAY/7AAGP/gABkAEAAZAEAAGQBwABkAoAAZAMAAGQSwABkE0AAZBQAAGQUgABkFUAAZBWAAGQVwABkFgAAZBZAAGQWwABkF0AAZBeAAGQXwABkGEAAZBiAAGQZgABkKUAAZCnAAGQqQABkKsAAZCuAAGQrwABkLAAAZCxAAGQsgABkLQAAZC2AAGQtwABkLgAAZC6AAGQuwABkPoAAZD8AAGQ/gABkQAAAZEDAAGRBAABkQUAAZEGAAGRBwABkQkAAZELAAGRDAABkQ0AAZEPAAGREAABkU8AAZFRAAGRUwABkVUAAZFYAAGRWQABkVoAAZFbAAGRXAABkV4AAZFgAAGRYQABkWIAAZFkAAGRZQABkaQAAZGmAAGRqAABkaoAAZGtAAGRrgABka8AAZGwAAGRsQABkbMAAZG1AAGRtgABkbcAAZG5AAGRugABkfkAAZH7AAGR/QABkf8AAZICAAGSAwABkgQAAZIFAAGSBgABkggAAZIKAAGSCwABkgwAAZIOAAGSDwABkk4AAZJQAAGSUgABklQAAZJXAAGSWAABklkAAZJaAAGSWwABkl0AAZJfAAGSYAABkmEAAZJjAAGSZAABkq8AAZLSAAGS8gABkxIAAZMUAAGTFgABkxgAAZMaAAGTHQABkx4AAZMfAAGTIgABkyMAAZMlAAGTJgABkygAAZMrAAGTLAABky0AAZMwAAGTMQABkzYAAZNDAAGTSAABk0oAAZNMAAGTUQABk1QAAZNXAAGTWQABk34AAZOiAAGTyQABk+0AAZPwAAGT8gABk/QAAZP2AAGT+AABk/oAAZP7AAGT/gABlAsAAZQcAAGUHgABlCAAAZQiAAGUJAABlCYAAZQoAAGUKgABlCwAAZQ9AAGUQAABlEMAAZRGAAGUSQABlEwAAZRPAAGUUgABlFUAAZRXAAGUlgABlJgAAZSaAAGUnAABlJ8AAZSgAAGUoQABlKIAAZSjAAGUpQABlKcAAZSoAAGUqQABlKsAAZSsAAGU6wABlO0AAZTvAAGU8QABlPQAAZT1AAGU9gABlPcAAZT4AAGU+gABlPwAAZT9AAGU/gABlQAAAZUBAAGVQAABlUIAAZVFAAGVRwABlUoAAZVLAAGVTAABlU0AAZVOAAGVUAABlVIAAZVTAAGVVAABlVYAAZVXAAGVZAABlWUAAZVmAAGVaAABlacAAZWpAAGVqwABla0AAZWwAAGVsQABlbIAAZWzAAGVtAABlbYAAZW4AAGVuQABlboAAZW8AAGVvQABlfwAAZX+AAGWAAABlgIAAZYFAAGWBgABlgcAAZYIAAGWCQABlgsAAZYNAAGWDgABlg8AAZYRAAGWEgABllEAAZZTAAGWVQABllcAAZZaAAGWWwABllwAAZZdAAGWXgABlmAAAZZiAAGWYwABlmQAAZZmAAGWZwABlqYAAZaoAAGWqgABlqwAAZavAAGWsAABlrEAAZayAAGWswABlrUAAZa3AAGWuAABlrkAAZa7AAGWvAABlvsAAZb9AAGW/wABlwEAAZcEAAGXBQABlwYAAZcHAAGXCAABlwoAAZcMAAGXDQABlw4AAZcQAAGXEQABlzYAAZdaAAGXgQABl6UAAZeoAAGXqgABl6wAAZeuAAGXsAABl7IAAZezAAGXtgABl8MAAZfSAAGX1AABl9YAAZfYAAGX2gABl9wAAZfeAAGX4AABl+8AAZfyAAGX9QABl/gAAZf7AAGX/gABmAEAAZgEAAGYBgABmEUAAZhHAAGYSQABmEsAAZhOAAGYTwABmFAAAZhRAAGYUgABmFQAAZhWAAGYVwABmFgAAZhaAAGYWwABmJoAAZicAAGYngABmKAAAZijAAGYpAABmKUAAZimAAGYpwABmKkAAZirAAGYrAABmK0AAZivAAGYsAABmO8AAZjxAAGY8wABmPUAAZj4AAGY+QABmPoAAZj7AAGY/AABmP4AAZkAAAGZAQABmQIAAZkEAAGZBQABmUQAAZlGAAGZSAABmUoAAZlNAAGZTgABmU8AAZlQAAGZUQABmVMAAZlVAAGZVgABmVcAAZlZAAGZWgABmZkAAZmbAAGZnQABmZ8AAZmiAAGZowABmaQAAZmlAAGZpgABmagAAZmqAAGZqwABmawAAZmuAAGZrwABme4AAZnwAAGZ8gABmfQAAZn3AAGZ+AABmfkAAZn6AAGZ+wABmf0AAZn/AAGaAAABmgEAAZoDAAGaBAABmkMAAZpFAAGaRwABmkkAAZpMAAGaTQABmk4AAZpPAAGaUAABmlIAAZpUAAGaVQABmlYAAZpYAAGaWQABmqQAAZrHAAGa5wABmwcAAZsJAAGbCwABmw0AAZsPAAGbEgABmxMAAZsUAAGbFwABmxgAAZsaAAGbGwABmx0AAZsgAAGbIQABmyIAAZslAAGbJgABmysAAZs4AAGbPQABmz8AAZtBAAGbRgABm0kAAZtMAAGbTgABm3MAAZuXAAGbvgABm+IAAZvlAAGb5wABm+kAAZvrAAGb7QABm+8AAZvwAAGb8wABnAAAAZwRAAGcEwABnBUAAZwXAAGcGQABnBsAAZwdAAGcHwABnCEAAZwyAAGcNQABnDgAAZw7AAGcPgABnEEAAZxEAAGcRwABnEoAAZxMAAGciwABnI0AAZyPAAGckQABnJQAAZyVAAGclgABnJcAAZyYAAGcmgABnJwAAZydAAGcngABnKAAAZyhAAGc4AABnOIAAZzkAAGc5gABnOkAAZzqAAGc6wABnOwAAZztAAGc7wABnPEAAZzyAAGc8wABnPUAAZz2AAGdNQABnTcAAZ06AAGdPAABnT8AAZ1AAAGdQQABnUIAAZ1DAAGdRQABnUcAAZ1IAAGdSQABnUsAAZ1MAAGdWQABnVoAAZ1bAAGdXQABnZwAAZ2eAAGdoAABnaIAAZ2lAAGdpgABnacAAZ2oAAGdqQABnasAAZ2tAAGdrgABna8AAZ2xAAGdsgABnfEAAZ3zAAGd9QABnfcAAZ36AAGd+wABnfwAAZ39AAGd/gABngAAAZ4CAAGeAwABngQAAZ4GAAGeBwABnkYAAZ5IAAGeSgABnkwAAZ5PAAGeUAABnlEAAZ5SAAGeUwABnlUAAZ5XAAGeWAABnlkAAZ5bAAGeXAABnpsAAZ6dAAGenwABnqEAAZ6kAAGepQABnqYAAZ6nAAGeqAABnqoAAZ6sAAGerQABnq4AAZ6wAAGesQABnvAAAZ7yAAGe9AABnvYAAZ75AAGe+gABnvsAAZ78AAGe/QABnv8AAZ8BAAGfAgABnwMAAZ8FAAGfBgABnysAAZ9PAAGfdgABn5oAAZ+dAAGfnwABn6EAAZ+jAAGfpQABn6cAAZ+oAAGfqwABn7gAAZ/HAAGfyQABn8sAAZ/NAAGfzwABn9EAAZ/TAAGf1QABn+QAAZ/nAAGf6gABn+0AAZ/wAAGf8wABn/YAAZ/5AAGf+wABoDoAAaA8AAGgPgABoEAAAaBDAAGgRAABoEUAAaBGAAGgRwABoEkAAaBLAAGgTAABoE0AAaBPAAGgUAABoI8AAaCRAAGgkwABoJUAAaCYAAGgmQABoJoAAaCbAAGgnAABoJ4AAaCgAAGgoQABoKIAAaCkAAGgpQABoOQAAaDmAAGg6AABoOoAAaDtAAGg7gABoO8AAaDwAAGg8QABoPMAAaD1AAGg9gABoPcAAaD5AAGg+gABoTkAAaE7AAGhPQABoT8AAaFCAAGhQwABoUQAAaFFAAGhRgABoUgAAaFKAAGhSwABoUwAAaFOAAGhTwABoY4AAaGQAAGhkgABoZQAAaGXAAGhmAABoZkAAaGaAAGhmwABoZ0AAaGfAAGhoAABoaEAAaGjAAGhpAABoeMAAaHlAAGh5wABoekAAaHsAAGh7QABoe4AAaHvAAGh8AABofIAAaH0AAGh9QABofYAAaH4AAGh+QABojgAAaI6AAGiPAABoj4AAaJBAAGiQgABokMAAaJEAAGiRQABokcAAaJJAAGiSgABoksAAaJNAAGiTgABolcAAaJYAAGiWgABomcAAaJoAAGiaQABomsAAaJ4AAGieQABonoAAaJ8AAGiiQABoooAAaKLAAGijQABopYAAaKlAAGisgABosEAAaLTAAGi5wABov4AAaMQAAGjGQABoxoAAaMcAAGjKQABoyoAAaMrAAGjLQABoy4AAaM3AAGjQQABo0gAAAAAAAAEAgAAAAAAAD6qAAAAAAAAAAAAAAAAAAGjUA== + + + + + CDCurrency + Undefined + 7 + CDCurrency + 1 + + + + + \ No newline at end of file diff --git a/fearless/Common/Storage/SelectedWalletSettings.swift b/fearless/Common/Storage/SelectedWalletSettings.swift index 2c954486ca..e97a5ab8da 100644 --- a/fearless/Common/Storage/SelectedWalletSettings.swift +++ b/fearless/Common/Storage/SelectedWalletSettings.swift @@ -1,5 +1,7 @@ import Foundation import RobinHood +import SSFModels +import SSFAccountManagmentStorage final class SelectedWalletSettings: PersistentValueSettings { static let shared = SelectedWalletSettings( diff --git a/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents index 17cd20c837..d8cb5b55a2 100644 --- a/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents +++ b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents @@ -3,7 +3,6 @@ - @@ -26,6 +25,7 @@ + @@ -47,7 +47,7 @@ - + @@ -123,7 +123,7 @@ - + @@ -148,6 +148,26 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/fearless/Common/Storage/UserDataStorageFacade.swift b/fearless/Common/Storage/UserDataStorageFacade.swift index 877361bfaa..5e26125a52 100644 --- a/fearless/Common/Storage/UserDataStorageFacade.swift +++ b/fearless/Common/Storage/UserDataStorageFacade.swift @@ -3,7 +3,7 @@ import RobinHood import CoreData enum UserStorageParams { - static let modelVersion: UserStorageVersion = .version12 + static let modelVersion: UserStorageVersion = .version13 static let modelDirectory: String = "Modules_SSFAccountManagmentStorage.bundle//UserDataModel.momd" static let databaseName = "UserDataModel.sqlite" diff --git a/fearless/Common/Substrate/CallFactory/SubstrateCallFactoryDefault.swift b/fearless/Common/Substrate/CallFactory/SubstrateCallFactoryDefault.swift index 111f9ebafc..cce48320bd 100644 --- a/fearless/Common/Substrate/CallFactory/SubstrateCallFactoryDefault.swift +++ b/fearless/Common/Substrate/CallFactory/SubstrateCallFactoryDefault.swift @@ -4,6 +4,7 @@ import IrohaCrypto import BigInt import SSFModels import SSFRuntimeCodingService +import SSFCrypto enum SubstrateCallFactoryError: Error { case metadataUnavailable @@ -116,10 +117,11 @@ class SubstrateCallFactoryDefault: SubstrateCallFactoryProtocol { func poolNominate( poolId: UInt32, - targets: [SelectedValidatorInfo] + targets: [SelectedValidatorInfo], + chainFormat: ChainFormat ) throws -> any RuntimeCallable { let addresses: [AccountId] = try targets.map { info in - try info.address.toAccountId() + try info.address.toAccountId(using: chainFormat) } let args = PoolNominateCall(pool_id: "\(poolId)", validators: addresses) @@ -146,7 +148,7 @@ class SubstrateCallFactoryDefault: SubstrateCallFactoryProtocol { amount: BigUInt, chainAsset: ChainAsset ) -> any RuntimeCallable { - switch chainAsset.chainAssetType { + switch chainAsset.chainAssetType.substrateAssetType { case .normal, .none: if chainAsset.chain.isSora { return ormlAssetTransfer( diff --git a/fearless/Common/Substrate/CallFactory/SubstrateCallFactoryProtocol.swift b/fearless/Common/Substrate/CallFactory/SubstrateCallFactoryProtocol.swift index 7fb5de179d..06e47c63f5 100644 --- a/fearless/Common/Substrate/CallFactory/SubstrateCallFactoryProtocol.swift +++ b/fearless/Common/Substrate/CallFactory/SubstrateCallFactoryProtocol.swift @@ -27,7 +27,8 @@ protocol SubstrateCallFactoryProtocol { func nominate(targets: [SelectedValidatorInfo], chainAsset: ChainAsset) throws -> any RuntimeCallable func poolNominate( poolId: UInt32, - targets: [SelectedValidatorInfo] + targets: [SelectedValidatorInfo], + chainFormat: ChainFormat ) throws -> any RuntimeCallable func payout(validatorId: Data, era: EraIndex) throws -> any RuntimeCallable func setPayee(for destination: RewardDestinationArg) -> any RuntimeCallable diff --git a/fearless/Common/Substrate/Types/AccountInfo.swift b/fearless/Common/Substrate/Types/AccountInfo.swift index c122bd0b0f..1b010825bf 100644 --- a/fearless/Common/Substrate/Types/AccountInfo.swift +++ b/fearless/Common/Substrate/Types/AccountInfo.swift @@ -17,11 +17,11 @@ struct AccountInfo: Codable, Equatable { @StringCodable var providers: UInt32 let data: AccountData - init(ethBalance: BigUInt) { + init(balance: BigUInt) { nonce = 0 consumers = 0 providers = 0 - data = AccountData(ethBalance: ethBalance) + data = AccountData(ethBalance: balance) } init(nonce: UInt32, consumers: UInt32, providers: UInt32, data: AccountData) { diff --git a/fearless/Common/Substrate/Types/EraRewardPoints.swift b/fearless/Common/Substrate/Types/EraRewardPoints.swift index 18f74c984d..8ce2042dd6 100644 --- a/fearless/Common/Substrate/Types/EraRewardPoints.swift +++ b/fearless/Common/Substrate/Types/EraRewardPoints.swift @@ -1,4 +1,5 @@ import SSFUtils +import IrohaCrypto import Foundation typealias RewardPoint = UInt32 @@ -29,3 +30,13 @@ struct IndividualReward: Decodable { rewardPoint = rewardScaled.value } } + +private extension AccountAddress { + func toAccountId() throws -> AccountId { + if hasPrefix("0x") { + return try AccountId(hexStringSSF: self) + } else { + return try SS58AddressFactory().accountId(from: self) + } + } +} diff --git a/fearless/Common/URLHandling/TonConnectUrlHandling.swift b/fearless/Common/URLHandling/TonConnectUrlHandling.swift new file mode 100644 index 0000000000..80ae3e6143 --- /dev/null +++ b/fearless/Common/URLHandling/TonConnectUrlHandling.swift @@ -0,0 +1,24 @@ +import Foundation +import SSFQRService + +final class TonConnectUrlHandling: URLHandlingServiceProtocol { + private let coordinator = WalletConnectCoordinator.shared + private lazy var matcher = TonConnectMatcherImpl() + private lazy var tonConnectService = ServiceAssembly.shared.tonConnectService() + + func handle(url: URL) -> Bool { + guard let uri = matcher.match(code: url.absoluteString)?.uri else { + return false + } + + Task { + do { + try await tonConnectService.establishConnection(with: uri) + } catch { + Logger.shared.customError(error) + } + } + + return true + } +} diff --git a/fearless/Common/Validation/Validators/BaseDataValidatorFactory.swift b/fearless/Common/Validation/Validators/BaseDataValidatorFactory.swift index 175cd7d01d..15d13ef300 100644 --- a/fearless/Common/Validation/Validators/BaseDataValidatorFactory.swift +++ b/fearless/Common/Validation/Validators/BaseDataValidatorFactory.swift @@ -135,7 +135,7 @@ extension BaseDataValidatingFactoryProtocol { return true } - if case .ormlChain = chainAsset.chainAssetType { + if case .ormlChain = chainAsset.chainAssetType.substrateAssetType { return true } diff --git a/fearless/Common/View/GradientBorderedTriangularedView.swift b/fearless/Common/View/GradientBorderedTriangularedView.swift new file mode 100644 index 0000000000..9335bb130d --- /dev/null +++ b/fearless/Common/View/GradientBorderedTriangularedView.swift @@ -0,0 +1,31 @@ +import UIKit + +class GradientBorderedTriangularedView: TriangularedView { + lazy var gradientBorder: CAGradientLayer = { + let mask = CAShapeLayer() + mask.path = shapePath.cgPath + mask.fillColor = UIColor.clear.cgColor + mask.strokeColor = UIColor.white.cgColor + mask.lineWidth = 1 + + let borderLayer = CAGradientLayer() + borderLayer.frame = bounds + borderLayer.startPoint = gradientBorderStartPoint + borderLayer.endPoint = gradientBorderEndPoint + borderLayer.mask = mask + borderLayer.colors = UIColor.walletBorderGradientColors.map { $0.cgColor } + + return borderLayer + }() + + override func didMoveToWindow() { + super.didMoveToWindow() + layer.addSublayer(gradientBorder) + } + + override func layoutSubviews() { + super.layoutSubviews() + (gradientBorder.mask as? CAShapeLayer)?.path = shapePath.cgPath + gradientBorder.frame = bounds + } +} diff --git a/fearless/Common/View/SearchTriangularedView.swift b/fearless/Common/View/SearchTriangularedView.swift index fa71c4a956..846d7c223a 100644 --- a/fearless/Common/View/SearchTriangularedView.swift +++ b/fearless/Common/View/SearchTriangularedView.swift @@ -11,7 +11,17 @@ final class SearchTriangularedView: UIView { static let pasteButtonSize: CGFloat = 76 } - var isValid = false + var isValid: Bool? = false { + didSet { + guard let isValid else { + backgroundView.set(highlighted: false, animated: true) + return + } + let color = isValid ? .clear : R.color.colorRed()! + backgroundView.highlightedStrokeColor = color + backgroundView.set(highlighted: !isValid, animated: true) + } + } var onPasteTapped: (() -> Void)? private let withPasteButton: Bool @@ -27,7 +37,6 @@ final class SearchTriangularedView: UIView { view.fillColor = R.color.colorSemiBlack()! view.highlightedFillColor = R.color.colorSemiBlack()! view.strokeColor = R.color.colorWhite8()! - view.highlightedStrokeColor = R.color.colorPink()! view.strokeWidth = 0.5 view.shadowOpacity = 0 return view diff --git a/fearless/Common/View/SelectEcosystemBannerView.swift b/fearless/Common/View/SelectEcosystemBannerView.swift new file mode 100644 index 0000000000..24170ffe05 --- /dev/null +++ b/fearless/Common/View/SelectEcosystemBannerView.swift @@ -0,0 +1,79 @@ +import Foundation +import UIKit + +final class SelectEcosystemBannerView: UIView { + let titleLabel: UILabel = { + let label = UILabel() + label.textColor = R.color.colorWhite() + label.font = .h3Title + label.numberOfLines = 0 + return label + }() + + let imageView: UIImageView = { + let imageView = UIImageView() + imageView.contentMode = .scaleAspectFill + return imageView + }() + + let actionButton: TriangularedButton = { + let button = UIFactory.default.createMainActionButton() + button.triangularedView?.shadowOpacity = 0 + button.triangularedView?.fillColor = .clear + button.triangularedView?.highlightedFillColor = .clear + button.triangularedView?.strokeColor = R.color.colorWhite8()! + button.triangularedView?.highlightedStrokeColor = R.color.colorWhite8()! + button.triangularedView?.strokeWidth = 1 + + button.imageWithTitleView?.titleColor = R.color.colorWhite() + button.imageWithTitleView?.titleFont = .h6Title + return button + }() + + private let ecosystem: AccountCreateEcosystem + + init(ecosystem: AccountCreateEcosystem) { + self.ecosystem = ecosystem + super.init(frame: .zero) + backgroundColor = R.color.colorWhite8() + layer.cornerRadius = 15 + clipsToBounds = true + switch ecosystem { + case .regular: + imageView.image = R.image.regularBanner() + case .ton: + imageView.image = R.image.tonBanner() + } + setupLayout() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setupLayout() { + addSubview(imageView) + imageView.snp.makeConstraints { make in + make.height.equalTo(139) + make.edges.equalToSuperview() + } + + addSubview(titleLabel) + titleLabel.setContentHuggingPriority(.defaultHigh, for: .horizontal) + titleLabel.snp.makeConstraints { make in + make.top.equalToSuperview().offset(24) + make.leading.equalToSuperview().offset(24) + make.trailing.equalToSuperview().inset(24) + } + + addSubview(actionButton) + actionButton.snp.makeConstraints { make in + make.top.greaterThanOrEqualTo(titleLabel.snp.bottom).offset(UIConstants.defaultOffset) + make.leading.equalToSuperview().offset(24) + make.bottom.equalToSuperview().inset(24) + make.height.equalTo(32) + make.width.greaterThanOrEqualTo(62) + } + } +} diff --git a/fearless/Common/View/StackedTableView.swift b/fearless/Common/View/StackedTableView.swift index ec271cc899..9183289eae 100644 --- a/fearless/Common/View/StackedTableView.swift +++ b/fearless/Common/View/StackedTableView.swift @@ -1,4 +1,3 @@ - import UIKit final class StackedTableView: UIView { diff --git a/fearless/Common/View/SymbolView.swift b/fearless/Common/View/SymbolView.swift index 6101c1b923..49b2cc3b63 100644 --- a/fearless/Common/View/SymbolView.swift +++ b/fearless/Common/View/SymbolView.swift @@ -2,7 +2,7 @@ import Foundation import UIKit struct SymbolViewModel { - let symbolViewModel: RemoteImageViewModel? + let iconViewModel: RemoteImageViewModel? let shadowColor: CGColor? } @@ -33,7 +33,7 @@ final class SymbolView: UIView { } func bind(viewModel: SymbolViewModel) { - viewModel.symbolViewModel?.loadImage( + viewModel.iconViewModel?.loadImage( on: imageView, targetSize: Constants.imageViewSize, animated: true diff --git a/fearless/Common/View/TriangularedView/TriangularedView.swift b/fearless/Common/View/TriangularedView/TriangularedView.swift index 61f15800fe..eaafe87c08 100644 --- a/fearless/Common/View/TriangularedView/TriangularedView.swift +++ b/fearless/Common/View/TriangularedView/TriangularedView.swift @@ -5,8 +5,10 @@ public struct TriangularedCorners: OptionSet { public typealias RawValue = UInt8 static let none: TriangularedCorners = [] - static let topLeft = TriangularedCorners(rawValue: 1) - static let bottomRight = TriangularedCorners(rawValue: 2) + static let topLeft = TriangularedCorners(rawValue: 1 << 0) + static let bottomRight = TriangularedCorners(rawValue: 1 << 1) + static let topRight = TriangularedCorners(rawValue: 1 << 2) + static let bottomLeft = TriangularedCorners(rawValue: 1 << 3) public var rawValue: TriangularedCorners.RawValue @@ -35,6 +37,18 @@ open class TriangularedView: ShadowShapeView { } } + open var cornersRaduis: TriangularedCorners = [.topRight, .bottomLeft] { + didSet { + applyPath() + } + } + + open lazy var cornerRadius: CGFloat = sideLength { + didSet { + applyPath() + } + } + var gradientBorderColors: [UIColor] = [] var gradientBorderStartPoint = CGPoint(x: 0.0, y: 0.5) var gradientBorderEndPoint = CGPoint(x: 1.0, y: 0.5) @@ -48,41 +62,72 @@ open class TriangularedView: ShadowShapeView { if cornerCut.contains(.topLeft) { bezierPath.move(to: CGPoint(x: layerBounds.minX + sideLength, y: layerBounds.minY)) + } else if cornersRaduis.contains(.topLeft) { + bezierPath.move(to: CGPoint(x: layerBounds.minX, y: layerBounds.minY + cornerRadius)) + bezierPath.addQuadCurve( + to: CGPoint(x: layerBounds.minX + cornerRadius, y: layerBounds.minY), + controlPoint: CGPoint(x: layerBounds.minX, y: layerBounds.minY) + ) } else { - bezierPath.move(to: CGPoint(x: layerBounds.minX, y: layerBounds.minY + sideLength)) + bezierPath.move(to: CGPoint(x: layerBounds.minX, y: layerBounds.minY)) bezierPath.addQuadCurve( - to: CGPoint(x: layerBounds.minX + sideLength, y: layerBounds.minY), + to: CGPoint(x: layerBounds.minX, y: layerBounds.minY), controlPoint: CGPoint(x: layerBounds.minX, y: layerBounds.minY) ) } - bezierPath.addLine(to: CGPoint(x: layerBounds.maxX - sideLength, y: layerBounds.minY)) - bezierPath.addQuadCurve( - to: CGPoint(x: layerBounds.maxX, y: layerBounds.minY + sideLength), - controlPoint: CGPoint(x: layerBounds.maxX, y: layerBounds.minY) - ) + if cornersRaduis.contains(.topRight) { + bezierPath.addLine(to: CGPoint(x: layerBounds.maxX - cornerRadius, y: layerBounds.minY)) + bezierPath.addQuadCurve( + to: CGPoint(x: layerBounds.maxX, y: layerBounds.minY + cornerRadius), + controlPoint: CGPoint(x: layerBounds.maxX, y: layerBounds.minY) + ) + } else { + bezierPath.addLine(to: CGPoint(x: layerBounds.maxX, y: layerBounds.minY)) + bezierPath.addQuadCurve( + to: CGPoint(x: layerBounds.maxX, y: layerBounds.minY), + controlPoint: CGPoint(x: layerBounds.maxX, y: layerBounds.minY) + ) + } if cornerCut.contains(.bottomRight) { bezierPath.addLine(to: CGPoint(x: layerBounds.maxX, y: layerBounds.maxY - sideLength)) bezierPath.addLine(to: CGPoint(x: layerBounds.maxX - sideLength, y: layerBounds.maxY)) + } else if cornersRaduis.contains(.bottomRight) { + bezierPath.addLine(to: CGPoint(x: layerBounds.maxX, y: layerBounds.maxY - cornerRadius)) + bezierPath.addQuadCurve( + to: CGPoint(x: layerBounds.maxX - cornerRadius, y: layerBounds.maxY), + controlPoint: CGPoint(x: layerBounds.maxX, y: layerBounds.maxY) + ) } else { - bezierPath.addLine(to: CGPoint(x: layerBounds.maxX, y: layerBounds.maxY - sideLength)) + bezierPath.addLine(to: CGPoint(x: layerBounds.maxX, y: layerBounds.maxY)) bezierPath.addQuadCurve( - to: CGPoint(x: layerBounds.maxX - sideLength, y: layerBounds.maxY), + to: CGPoint(x: layerBounds.maxX, y: layerBounds.maxY), controlPoint: CGPoint(x: layerBounds.maxX, y: layerBounds.maxY) ) } - bezierPath.addLine(to: CGPoint(x: layerBounds.minX + sideLength, y: layerBounds.maxY)) - bezierPath.addQuadCurve( - to: CGPoint(x: layerBounds.minX, y: layerBounds.maxY - sideLength), - controlPoint: CGPoint(x: layerBounds.minX, y: layerBounds.maxY) - ) + if cornersRaduis.contains(.bottomLeft) { + bezierPath.addLine(to: CGPoint(x: layerBounds.minX + cornerRadius, y: layerBounds.maxY)) + bezierPath.addQuadCurve( + to: CGPoint(x: layerBounds.minX, y: layerBounds.maxY - sideLength), + controlPoint: CGPoint(x: layerBounds.minX, y: layerBounds.maxY) + ) + } else { + bezierPath.addLine(to: CGPoint(x: layerBounds.minX, y: layerBounds.maxY)) + bezierPath.addQuadCurve( + to: CGPoint(x: layerBounds.minX, y: layerBounds.maxY), + controlPoint: CGPoint(x: layerBounds.minX, y: layerBounds.maxY) + ) + } + if cornerCut.contains(.topLeft) { bezierPath.addLine(to: CGPoint(x: layerBounds.minX, y: layerBounds.minY + sideLength)) bezierPath.addLine(to: CGPoint(x: layerBounds.minX + sideLength, y: layerBounds.minY)) + } else if cornersRaduis.contains(.topLeft) { + bezierPath.addLine(to: CGPoint(x: layerBounds.minX, y: layerBounds.minY + cornerRadius)) } else { - bezierPath.addLine(to: CGPoint(x: layerBounds.minX, y: layerBounds.minY + sideLength)) + bezierPath.addLine(to: CGPoint(x: layerBounds.minX, y: layerBounds.minY)) } return bezierPath diff --git a/fearless/Configs/fearless.debug.xcconfig b/fearless/Configs/fearless.debug.xcconfig index 85e7843ae4..a40c821357 100644 --- a/fearless/Configs/fearless.debug.xcconfig +++ b/fearless/Configs/fearless.debug.xcconfig @@ -7,3 +7,5 @@ ICON_SUFFIX = Dev FEARLESS_GOOGLE_TOKEN = FEARLESS_GOOGLE_URL_SCHEME = + +ASSOCIATED_DOMAIN_APPLINKS = applinks:fearlesswallet.io diff --git a/fearless/Configs/fearless.dev.xcconfig b/fearless/Configs/fearless.dev.xcconfig index 5dc8b3d936..7ba8a48abd 100644 --- a/fearless/Configs/fearless.dev.xcconfig +++ b/fearless/Configs/fearless.dev.xcconfig @@ -7,3 +7,5 @@ ICON_SUFFIX = Dev FEARLESS_GOOGLE_TOKEN = FEARLESS_GOOGLE_URL_SCHEME = + +ASSOCIATED_DOMAIN_APPLINKS = applinks:fearlesswallet.io diff --git a/fearless/Configs/fearless.release.xcconfig b/fearless/Configs/fearless.release.xcconfig index c27dba3917..1c3102fa04 100644 --- a/fearless/Configs/fearless.release.xcconfig +++ b/fearless/Configs/fearless.release.xcconfig @@ -6,3 +6,5 @@ APP_NAME = Fearless FEARLESS_GOOGLE_TOKEN = FEARLESS_GOOGLE_URL_SCHEME = + +ASSOCIATED_DOMAIN_APPLINKS = applinks:fearlesswallet.io diff --git a/fearless/CoreLayer/CoreComponents/Repository/EthereumBalanceRepositoryCacheWrapper.swift b/fearless/CoreLayer/CoreComponents/Repository/BalanceRepositoryCacheWrapper.swift similarity index 59% rename from fearless/CoreLayer/CoreComponents/Repository/EthereumBalanceRepositoryCacheWrapper.swift rename to fearless/CoreLayer/CoreComponents/Repository/BalanceRepositoryCacheWrapper.swift index b8d406d263..8329635016 100644 --- a/fearless/CoreLayer/CoreComponents/Repository/EthereumBalanceRepositoryCacheWrapper.swift +++ b/fearless/CoreLayer/CoreComponents/Repository/BalanceRepositoryCacheWrapper.swift @@ -6,15 +6,19 @@ protocol RepositoryCacheWrapper: AnyObject { associatedtype T: Codable, Equatable func save(data: T?, identifier: String) throws + func save(map: [String: T?]) throws } -final class EthereumBalanceRepositoryCacheWrapper: RepositoryCacheWrapper { +final class BalanceRepositoryCacheWrapper: RepositoryCacheWrapper { typealias T = AccountInfo private let logger: LoggerProtocol private let repository: AnyDataProviderRepository private let operationManager: OperationManagerProtocol + private lazy var encoder = JSONEncoder() + private lazy var decoder = JSONDecoder() + private var cache: [String: T?] = [:] private let lock = ReaderWriterLock() @@ -35,19 +39,33 @@ final class EthereumBalanceRepositoryCacheWrapper: RepositoryCacheWrapper { } } - let encoded = try JSONEncoder().encode(data) + let encoded = try encoder.encode(data) let storageWrapper = AccountInfoStorageWrapper(identifier: identifier, data: encoded) + save([storageWrapper]) + } - let operation = repository.saveOperation { - [storageWrapper] - } _: { - [] + func save(map: [String: T?]) throws { + let wrappers = try map.map { identifier, data in + let encoded = try JSONEncoder().encode(data) + let storageWrapper = AccountInfoStorageWrapper(identifier: identifier, data: encoded) + return storageWrapper } + save(wrappers) + } + + private func save(_ wrappers: [AccountInfoStorageWrapper]) { + let operation = repository.saveOperation { + wrappers + } _: { [] } + operation.completionBlock = { [weak self] in self?.lock.exclusivelyWrite { - self?.cache[identifier] = data + wrappers.forEach { wrapper in + let data = try? self?.decoder.decode(T.self, from: wrapper.data) + self?.cache[wrapper.identifier] = data + } } } diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/BlockscoutHistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/BlockscoutHistoryOperationFactory.swift index 6a225da968..ff732bbef2 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/BlockscoutHistoryOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/BlockscoutHistoryOperationFactory.swift @@ -17,7 +17,7 @@ final class BlockscoutHistoryOperationFactory { .appendingPathComponent("addresses") .appendingPathComponent(address) - if case .erc20 = chainAsset.asset.ethereumType { + if case .erc20 = chainAsset.asset.assetType.ethereumAssetType { let contract = chainAsset.asset.id url = url.appendingPathComponent("token-transfers") diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/EtherscanHistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/EtherscanHistoryOperationFactory.swift index 529a6b914d..e6d0da8481 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/EtherscanHistoryOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/EtherscanHistoryOperationFactory.swift @@ -12,12 +12,12 @@ final class EtherscanHistoryOperationFactory { url: URL, chainAsset: ChainAsset ) -> BaseOperation { - let action: String = chainAsset.asset.ethereumType == .normal ? "txlist" : "tokentx" + let action: String = chainAsset.asset.assetType.ethereumAssetType == .normal ? "txlist" : "tokentx" var urlComponents = URLComponents(string: url.absoluteString) var queryItems = [ URLQueryItem(name: "module", value: "account"), URLQueryItem(name: "action", value: action), - URLQueryItem(name: "address", value: address), + URLQueryItem(name: "address", value: address) ] if let apiKey = BlockExplorerApiKey(chainId: chainAsset.chain.chainId) { @@ -75,7 +75,7 @@ final class EtherscanHistoryOperationFactory { let remoteTransactions = try remoteOperation.extractNoCancellableResultData().result let transactions = remoteTransactions? - .filter { asset.ethereumType == .normal ? true : $0.contractAddress?.lowercased() == asset.id.lowercased() } + .filter { asset.assetType.ethereumAssetType == .normal ? true : $0.contractAddress?.lowercased() == asset.id.lowercased() } .sorted(by: { $0.timestampInSeconds > $1.timestampInSeconds }) .compactMap { AssetTransactionData.createTransaction(from: $0, address: address, chain: chain, asset: asset) diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/HistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/HistoryOperationFactory.swift index 6093aa1fa7..ff56fe0280 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/HistoryOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/HistoryOperationFactory.swift @@ -1,4 +1,3 @@ - import RobinHood import IrohaCrypto import SSFUtils @@ -40,6 +39,8 @@ final class HistoryOperationFactoriesAssembly { return ZChainHistoryOperationFactory() case .klaytn: return KaiaHistoryOperationFactory() + case .ton: + return TonHistoryOperationFactory() case .none: return nil } diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/OklinkHistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/OklinkHistoryOperationFactory.swift index 82c6c8ec82..0a21d8592d 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/OklinkHistoryOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/OklinkHistoryOperationFactory.swift @@ -17,7 +17,7 @@ final class OklinkHistoryOperationFactory { queryItems?.append(URLQueryItem(name: "address", value: address)) queryItems?.append(URLQueryItem(name: "symbol", value: chainAsset.asset.symbol)) - switch chainAsset.asset.ethereumType { + switch chainAsset.asset.assetType.ethereumAssetType { case .erc20: queryItems?.append(URLQueryItem(name: "protocolType", value: "token_20")) case .bep20, .normal, .none: @@ -83,7 +83,7 @@ final class OklinkHistoryOperationFactory { let remoteTransactions = try remoteOperation.extractNoCancellableResultData().data.first?.transactionLists let transactions = remoteTransactions? - .filter { asset.ethereumType == .normal ? true : $0.tokenContractAddress.lowercased() == asset.id.lowercased() } + .filter { asset.assetType.ethereumAssetType == .normal ? true : $0.tokenContractAddress.lowercased() == asset.id.lowercased() } .sorted(by: { $0.transactionTime > $1.transactionTime }) .compactMap { AssetTransactionData.createTransaction(from: $0, address: address, chain: chain, asset: asset) diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SubqueryHistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SubqueryHistoryOperationFactory.swift index f21954ff50..fd5bf18616 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SubqueryHistoryOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SubqueryHistoryOperationFactory.swift @@ -212,15 +212,15 @@ class SubqueryHistoryOperationFactory { assetId = extrinsic.assetId } - if chainAsset.chainAssetType != .normal, assetId == nil { + if chainAsset.chainAssetType.substrateAssetType != .normal, assetId == nil { return false } - if chainAsset.chainAssetType == .normal, assetId != nil { + if chainAsset.chainAssetType.substrateAssetType == .normal, assetId != nil { return false } - if chainAsset.chainAssetType == .normal, assetId == nil { + if chainAsset.chainAssetType.substrateAssetType == .normal, assetId == nil { return true } diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/TonHistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/TonHistoryOperationFactory.swift new file mode 100644 index 0000000000..1af443c5c5 --- /dev/null +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/TonHistoryOperationFactory.swift @@ -0,0 +1,197 @@ +import Foundation +import SSFChainConnection +import RobinHood +import SSFModels +import BigInt +import TonAPI +import TonSwift + +final class TonHistoryOperationFactory { + private lazy var tonAPIClient: TonAPI.Client? = { + try? ChainRegistryFacade.sharedRegistry.getTonApiAssembly().tonAPIClient() + }() + + private func createOperation( + address: String, + chainAsset: ChainAsset, + before_lt: Int64? + ) -> BaseOperation { + AwaitOperation { [weak self] in + guard let self else { + throw ConvenienceError(error: "Memory error") + } + let accountId = try TonSwift.Address.parse(address).toRaw() + switch chainAsset.asset.assetType.tonAssetType { + case .normal: + let events = try await self.fetchAccountEvents(address: accountId, before_lt: before_lt) + return events + case .jetton: + guard let jettonAddress = chainAsset.asset.currencyId else { + throw ConvenienceError(error: "Missing jetton address") + } + let events = try await self.fetchJettonsHistory( + accountAddress: accountId, + jettonAddress: jettonAddress, + before_lt: before_lt + ) + return events + case .none: + throw ConvenienceError(error: "Missing asset type") + } + } + } + + private func fetchAccountEvents( + address: String, + before_lt: Int64? + ) async throws -> TonAccountEvents { + guard let tonAPIClient else { + throw ConvenienceError(error: "Client not initialised") + } + let response = try await tonAPIClient.getAccountEvents( + path: .init(account_id: address), + query: .init( + before_lt: before_lt, + limit: 25, + start_date: nil, + end_date: nil + ) + ) + let entity = try response.ok.body.json + let events: [TonAccountEvent] = entity.events.compactMap { + guard let activityEvent = try? TonAccountEvent(accountEvent: $0) else { return nil } + return activityEvent + } + let remoteEvents = TonAccountEvents( + address: try TonSwift.Address.parse(address), + events: events, + startFrom: before_lt ?? 0, + nextFrom: entity.next_from + ) + + let tonEvents = filterTonEvents(events: remoteEvents) + return tonEvents + } + + private func fetchJettonsHistory( + accountAddress: String, + jettonAddress: String, + before_lt: Int64? + ) async throws -> TonAccountEvents { + guard let tonAPIClient else { + throw ConvenienceError(error: "Client not initialised") + } + let response = try await tonAPIClient.getAccountJettonHistoryByID( + path: .init( + account_id: accountAddress, + jetton_id: jettonAddress + ), + query: .init( + before_lt: before_lt, + limit: 25, + start_date: nil, + end_date: nil + ) + ) + let entity = try response.ok.body.json + let events: [TonAccountEvent] = entity.events.compactMap { + guard let activityEvent = try? TonAccountEvent(accountEvent: $0) else { return nil } + return activityEvent + } + return TonAccountEvents( + address: try TonSwift.Address.parse(accountAddress), + events: events, + startFrom: before_lt ?? 0, + nextFrom: entity.next_from + ) + } + + private func filterTonEvents(events: TonAccountEvents) -> TonAccountEvents { + let filteredEvents = events.events.compactMap { event -> TonAccountEvent? in + let filteredActions = event.actions.compactMap { action -> AccountEventAction? in + guard case .tonTransfer = action.type else { return nil } + return action + } + guard !filteredActions.isEmpty else { return nil } + return TonAccountEvent( + eventId: event.eventId, + timestamp: event.timestamp, + account: event.account, + isScam: event.isScam, + isInProgress: event.isInProgress, + fee: event.fee, + actions: filteredActions + ) + } + + return TonAccountEvents( + address: events.address, + events: filteredEvents, + startFrom: events.startFrom, + nextFrom: events.nextFrom + ) + } + + private func createMapOperation( + dependingOn remoteOperation: BaseOperation, + address: String, + asset: AssetModel, + chain: ChainModel, + filters: [WalletTransactionHistoryFilter] + ) -> BaseOperation { + ClosureOperation { + let events = try remoteOperation.extractNoCancellableResultData().events + + let transactions = events + .compactMap { event in + event.actions.compactMap { + AssetTransactionData.createTransaction( + event: event, + action: $0, + address: address, + chain: chain, + asset: asset, + filters: filters + ) + } + } + .reduce([], +) + .sorted(by: { $0.timestamp > $1.timestamp }) + + let context = try remoteOperation.extractNoCancellableResultData().toContext() + return AssetTransactionPageData(transactions: transactions, context: context) + } + } +} + +extension TonHistoryOperationFactory: HistoryOperationFactoryProtocol { + func fetchTransactionHistoryOperation( + asset: AssetModel, + chain: ChainModel, + address: String, + filters: [WalletTransactionHistoryFilter], + pagination: Pagination + ) -> CompoundOperationWrapper { + var before_lt: Int64? + if let before = pagination.context?["nextFrom"] { + before_lt = Int64(before) + } + let remoteOperation = createOperation( + address: address, + chainAsset: ChainAsset(chain: chain, asset: asset), + before_lt: before_lt + ) + + let mapOperation = createMapOperation( + dependingOn: remoteOperation, + address: address, + asset: asset, + chain: chain, + filters: filters + ) + + mapOperation.addDependency(remoteOperation) + + return CompoundOperationWrapper(targetOperation: mapOperation, dependencies: [remoteOperation]) + } +} diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Staking/ParachainHistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Staking/ParachainHistoryOperationFactory.swift index 39a77d23cd..5c4d66f686 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Staking/ParachainHistoryOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Staking/ParachainHistoryOperationFactory.swift @@ -22,7 +22,7 @@ enum ParachainHistoryOperationFactoryAssembly { return ParachainSubsquidHistoryOperationFactory(url: blockExplorer?.url) case .sora: return ParachainSubsquidHistoryOperationFactory(url: blockExplorer?.url) - case .alchemy, .etherscan, .oklink, .reef, .blockscout, .fire, .vicscan, .zchain, .klaytn: + case .alchemy, .etherscan, .oklink, .reef, .blockscout, .fire, .vicscan, .zchain, .klaytn, .ton: return nil } } diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/TonModels.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/TonModels.swift new file mode 100644 index 0000000000..2e3d6bee89 --- /dev/null +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/TonModels.swift @@ -0,0 +1,669 @@ +import Foundation +import TonSwift +import TonAPI +import BigInt +import SSFModels + +struct TonAccountEvents: Codable { + let address: TonSwift.Address + let events: [TonAccountEvent] + let startFrom: Int64 + let nextFrom: Int64 + + func toContext() -> [String: String]? { + var context: [String: String] = [:] + context["startFrom"] = String(startFrom) + context["nextFrom"] = String(nextFrom) + return context + } +} + +public struct TonAccountEvent: Codable { + public let eventId: String + public let timestamp: TimeInterval + public let account: WalletAccount + public let isScam: Bool + public let isInProgress: Bool + public let fee: Int64 + public let actions: [AccountEventAction] +} + +public struct WalletAccount: Equatable, Codable { + public let address: TonSwift.Address + public let name: String? + public let isScam: Bool + public let isWallet: Bool +} + +public struct AccountEventAction: Codable { + let type: ActionType + let status: AccountEventStatus + let preview: SimplePreview + + struct SimplePreview: Codable { + let name: String + let description: String + let image: URL? + let value: String? + let valueImage: URL? + let accounts: [WalletAccount] + } + + enum ActionType: Codable { + case tonTransfer(TonTransfer) + case contractDeploy(ContractDeploy) + case jettonTransfer(JettonTransfer) + case nftItemTransfer(NFTItemTransfer) + case subscribe(Subscription) + case unsubscribe(Unsubscription) + case auctionBid(AuctionBid) + case nftPurchase(NFTPurchase) + case depositStake(DepositStake) + case withdrawStake(WithdrawStake) + case withdrawStakeRequest(WithdrawStakeRequest) + case jettonSwap(JettonSwap) + case jettonMint(JettonMint) + case jettonBurn(JettonBurn) + case smartContractExec(SmartContractExec) + case domainRenew(DomainRenew) + case unknown + } + + struct TonTransfer: Codable { + let sender: WalletAccount + let recipient: WalletAccount + let amount: Int64 + let comment: String? + } + + struct ContractDeploy: Codable { + let address: TonSwift.Address + } + + struct JettonTransfer: Codable { + let sender: WalletAccount? + let recipient: WalletAccount? + let senderAddress: TonSwift.Address + let recipientAddress: TonSwift.Address + let amount: BigUInt + let jettonInfo: TonJettonInfo + let comment: String? + } + + struct NFTItemTransfer: Codable { + let sender: WalletAccount? + let recipient: WalletAccount? + let nftAddress: TonSwift.Address + let comment: String? + let payload: String? + } + + struct Subscription: Codable { + let subscriber: WalletAccount + let subscriptionAddress: TonSwift.Address + let beneficiary: WalletAccount + let amount: Int64 + let isInitial: Bool + } + + struct Unsubscription: Codable { + let subscriber: WalletAccount + let subscriptionAddress: TonSwift.Address + let beneficiary: WalletAccount + } + + struct AuctionBid: Codable { + let auctionType: String + let price: Price + let nft: TonNFT? + let bidder: WalletAccount + let auction: WalletAccount + } + + struct NFTPurchase: Codable { + let auctionType: String + let nft: TonNFT + let seller: WalletAccount + let buyer: WalletAccount + let price: BigUInt + } + + struct DepositStake: Codable { + let amount: Int64 + let staker: WalletAccount + let pool: WalletAccount + } + + struct WithdrawStake: Codable { + let amount: Int64 + let staker: WalletAccount + let pool: WalletAccount + } + + struct WithdrawStakeRequest: Codable { + let amount: Int64? + let staker: WalletAccount + let pool: WalletAccount + } + + struct RecoverStake: Codable { + let amount: Int64 + let staker: WalletAccount + } + + struct JettonSwap: Codable { + let dex: String + let amountIn: BigUInt + let amountOut: BigUInt + let tonIn: Int64? + let tonOut: Int64? + let user: WalletAccount + let router: WalletAccount + let jettonInfoIn: TonJettonInfo? + let jettonInfoOut: TonJettonInfo? + } + + struct JettonMint: Codable { + let recipient: WalletAccount + let recipientsWallet: TonSwift.Address + let amount: BigUInt + let jettonInfo: TonJettonInfo + } + + struct JettonBurn: Codable { + let sender: WalletAccount + let senderWallet: TonSwift.Address + let amount: BigUInt + let jettonInfo: TonJettonInfo + } + + struct SmartContractExec: Codable { + let executor: WalletAccount + let contract: WalletAccount + let tonAttached: Int64 + let operation: String + let payload: String? + } + + struct DomainRenew: Codable { + let domain: String + let contractAddress: String + let renewer: WalletAccount + } + + struct Price: Codable { + let amount: BigUInt + let tokenName: String + } +} + +enum AccountEventStatus: Codable { + case ok + case failed + case unknown(String) + + var rawValue: String? { + switch self { + case .ok: return nil + case .failed: return "Failed" + case let .unknown(value): + return value + } + } + + init(rawValue: String) { + switch rawValue { + case "ok": self = .ok + case "failed": self = .failed + default: self = .unknown(rawValue) + } + } +} + +public struct TonNFT: Codable { + public let address: TonSwift.Address + public let owner: WalletAccount? + public let name: String? + public let imageURL: URL? + public let preview: Preview + public let description: String? + public let attributes: [Attribute] + public let collection: TonNFTCollection? + public let dns: String? + public let sale: Sale? + public let isHidden: Bool + + public struct Marketplace { + public let name: String + public let url: URL? + } + + public struct Attribute: Codable { + public let key: String + public let value: String + } + + public enum Trust { + public struct Approval { + let name: String + } + + case approvedBy([Approval]) + } + + public struct Preview: Codable { + public let size5: URL? + public let size100: URL? + public let size500: URL? + public let size1500: URL? + } + + public struct Sale: Codable { + public let address: TonSwift.Address + public let market: WalletAccount + public let owner: WalletAccount? + } +} + +public struct TonNFTCollection: Codable { + public let address: TonSwift.Address + public let name: String? + public let description: String? +} + +// MARK: - Inits + +extension TonAccountEvent { + init(accountEvent: Components.Schemas.AccountEvent) throws { + eventId = accountEvent.event_id + timestamp = TimeInterval(accountEvent.timestamp) + account = try WalletAccount(accountAddress: accountEvent.account) + isScam = accountEvent.is_scam + isInProgress = accountEvent.in_progress + fee = accountEvent.extra + actions = accountEvent.actions.compactMap { action -> AccountEventAction? in + do { + let actionType: AccountEventAction.ActionType + if let tonTransfer = action.TonTransfer { + actionType = .tonTransfer(try .init(tonTransfer: tonTransfer)) + } else if let jettonTransfer = action.JettonTransfer { + actionType = .jettonTransfer(try .init(jettonTransfer: jettonTransfer)) + } else if let contractDeploy = action.ContractDeploy { + actionType = .contractDeploy(try .init(contractDeploy: contractDeploy)) + } else if let nftItemTransfer = action.NftItemTransfer { + actionType = .nftItemTransfer(try .init(nftItemTransfer: nftItemTransfer)) + } else if let subscribe = action.Subscribe { + actionType = .subscribe(try .init(subscription: subscribe)) + } else if let unsubscribe = action.UnSubscribe { + actionType = .unsubscribe(try .init(unsubscription: unsubscribe)) + } else if let auctionBid = action.AuctionBid { + actionType = .auctionBid(try .init(auctionBid: auctionBid)) + } else if let nftPurchase = action.NftPurchase { + actionType = .nftPurchase(try .init(nftPurchase: nftPurchase)) + } else if let depositStake = action.DepositStake { + actionType = .depositStake(try .init(depositStake: depositStake)) + } else if let withdrawStake = action.WithdrawStake { + actionType = .withdrawStake(try .init(withdrawStake: withdrawStake)) + } else if let withdrawStakeRequest = action.WithdrawStakeRequest { + actionType = .withdrawStakeRequest(try .init(withdrawStakeRequest: withdrawStakeRequest)) + } else if let jettonSwap = action.JettonSwap { + actionType = .jettonSwap(try .init(jettonSwap: jettonSwap)) + } else if let jettonMint = action.JettonMint { + actionType = .jettonMint(try .init(jettonMint: jettonMint)) + } else if let jettonBurn = action.JettonBurn { + actionType = .jettonBurn(try .init(jettonBurn: jettonBurn)) + } else if let smartContractExec = action.SmartContractExec { + actionType = .smartContractExec(try .init(smartContractExec: smartContractExec)) + } else if let domainRenew = action.DomainRenew { + actionType = .domainRenew(try .init(domainRenew: domainRenew)) + } else { + actionType = .unknown + } + + let status = AccountEventStatus(rawValue: action.status.rawValue) + return AccountEventAction(type: actionType, status: status, preview: try .init(simplePreview: action.simple_preview)) + } catch { + return nil + } + } + } +} + +extension WalletAccount { + init(accountAddress: Components.Schemas.AccountAddress) throws { + address = try TonSwift.Address.parse(accountAddress.address) + name = accountAddress.name + isScam = accountAddress.is_scam + isWallet = accountAddress.is_wallet + } +} + +extension AccountEventAction.SimplePreview { + init(simplePreview: Components.Schemas.ActionSimplePreview) throws { + name = simplePreview.name + description = simplePreview.description + value = simplePreview.value + + var image: URL? + if let actionImage = simplePreview.action_image { + image = URL(string: actionImage) + } + self.image = image + + var valueImage: URL? + if let valueImageString = simplePreview.value_image { + valueImage = URL(string: valueImageString) + } + self.valueImage = valueImage + + accounts = simplePreview.accounts.compactMap { account in + guard let walletAccount = try? WalletAccount(accountAddress: account) else { return nil } + return walletAccount + } + } +} + +extension AccountEventAction.TonTransfer { + init(tonTransfer: Components.Schemas.TonTransferAction) throws { + sender = try WalletAccount(accountAddress: tonTransfer.sender) + recipient = try WalletAccount(accountAddress: tonTransfer.recipient) + amount = tonTransfer.amount + comment = tonTransfer.comment + } +} + +extension AccountEventAction.JettonTransfer { + init(jettonTransfer: Components.Schemas.JettonTransferAction) throws { + var sender: WalletAccount? + var recipient: WalletAccount? + if let senderAccountAddress = jettonTransfer.sender { + sender = try? WalletAccount(accountAddress: senderAccountAddress) + } + if let recipientAccountAddress = jettonTransfer.recipient { + recipient = try? WalletAccount(accountAddress: recipientAccountAddress) + } + + self.sender = sender + self.recipient = recipient + senderAddress = try TonSwift.Address.parse(jettonTransfer.senders_wallet) + recipientAddress = try TonSwift.Address.parse(jettonTransfer.recipients_wallet) + amount = BigUInt(stringLiteral: jettonTransfer.amount) + jettonInfo = try TonJettonInfo(jettonPreview: jettonTransfer.jetton) + comment = jettonTransfer.comment + } +} + +extension AccountEventAction.ContractDeploy { + init(contractDeploy: Components.Schemas.ContractDeployAction) throws { + address = try TonSwift.Address.parse(contractDeploy.address) + } +} + +extension AccountEventAction.NFTItemTransfer { + init(nftItemTransfer: Components.Schemas.NftItemTransferAction) throws { + var sender: WalletAccount? + var recipient: WalletAccount? + if let senderAccountAddress = nftItemTransfer.sender { + sender = try? WalletAccount(accountAddress: senderAccountAddress) + } + if let recipientAccountAddress = nftItemTransfer.recipient { + recipient = try? WalletAccount(accountAddress: recipientAccountAddress) + } + + self.sender = sender + self.recipient = recipient + nftAddress = try TonSwift.Address.parse(nftItemTransfer.nft) + comment = nftItemTransfer.comment + payload = nftItemTransfer.payload + } +} + +extension AccountEventAction.Subscription { + init(subscription: Components.Schemas.SubscriptionAction) throws { + subscriber = try WalletAccount(accountAddress: subscription.subscriber) + subscriptionAddress = try TonSwift.Address.parse(subscription.subscription) + beneficiary = try WalletAccount(accountAddress: subscription.beneficiary) + amount = subscription.amount + isInitial = subscription.initial + } +} + +extension AccountEventAction.Unsubscription { + init(unsubscription: Components.Schemas.UnSubscriptionAction) throws { + subscriber = try WalletAccount(accountAddress: unsubscription.subscriber) + subscriptionAddress = try TonSwift.Address.parse(unsubscription.subscription) + beneficiary = try WalletAccount(accountAddress: unsubscription.beneficiary) + } +} + +extension AccountEventAction.AuctionBid { + init(auctionBid: Components.Schemas.AuctionBidAction) throws { + auctionType = auctionBid.auction_type + price = AccountEventAction.Price(price: auctionBid.amount) + bidder = try WalletAccount(accountAddress: auctionBid.bidder) + auction = try WalletAccount(accountAddress: auctionBid.auction) + + var nft: TonNFT? + if let auctionBidNft = auctionBid.nft { + nft = try TonNFT(nftItem: auctionBidNft) + } + self.nft = nft + } +} + +extension AccountEventAction.NFTPurchase { + init(nftPurchase: Components.Schemas.NftPurchaseAction) throws { + auctionType = nftPurchase.auction_type + nft = try TonNFT(nftItem: nftPurchase.nft) + seller = try WalletAccount(accountAddress: nftPurchase.seller) + buyer = try WalletAccount(accountAddress: nftPurchase.buyer) + price = BigUInt(stringLiteral: nftPurchase.amount.value) + } +} + +extension AccountEventAction.DepositStake { + init(depositStake: Components.Schemas.DepositStakeAction) throws { + amount = depositStake.amount + staker = try WalletAccount(accountAddress: depositStake.staker) + pool = try WalletAccount(accountAddress: depositStake.pool) + } +} + +extension AccountEventAction.WithdrawStake { + init(withdrawStake: Components.Schemas.WithdrawStakeAction) throws { + amount = withdrawStake.amount + staker = try WalletAccount(accountAddress: withdrawStake.staker) + pool = try WalletAccount(accountAddress: withdrawStake.pool) + } +} + +extension AccountEventAction.WithdrawStakeRequest { + init(withdrawStakeRequest: Components.Schemas.WithdrawStakeRequestAction) throws { + amount = withdrawStakeRequest.amount + staker = try WalletAccount(accountAddress: withdrawStakeRequest.staker) + pool = try WalletAccount(accountAddress: withdrawStakeRequest.pool) + } +} + +extension AccountEventAction.RecoverStake { + init(recoverStake: Components.Schemas.ElectionsRecoverStakeAction) throws { + amount = recoverStake.amount + staker = try WalletAccount(accountAddress: recoverStake.staker) + } +} + +extension AccountEventAction.JettonSwap { + init(jettonSwap: Components.Schemas.JettonSwapAction) throws { + dex = jettonSwap.dex + amountIn = BigUInt(stringLiteral: jettonSwap.amount_in) + amountOut = BigUInt(stringLiteral: jettonSwap.amount_out) + tonIn = jettonSwap.ton_in + tonOut = jettonSwap.ton_out + user = try WalletAccount(accountAddress: jettonSwap.user_wallet) + router = try WalletAccount(accountAddress: jettonSwap.router) + if let jettonMasterIn = jettonSwap.jetton_master_in { + jettonInfoIn = try TonJettonInfo(jettonPreview: jettonMasterIn) + } else { + jettonInfoIn = nil + } + if let jettonMasterOut = jettonSwap.jetton_master_out { + jettonInfoOut = try TonJettonInfo(jettonPreview: jettonMasterOut) + } else { + jettonInfoOut = nil + } + } +} + +extension AccountEventAction.JettonMint { + init(jettonMint: Components.Schemas.JettonMintAction) throws { + recipient = try WalletAccount(accountAddress: jettonMint.recipient) + recipientsWallet = try TonSwift.Address.parse(jettonMint.recipients_wallet) + amount = BigUInt(stringLiteral: jettonMint.amount) + jettonInfo = try TonJettonInfo(jettonPreview: jettonMint.jetton) + } +} + +extension AccountEventAction.JettonBurn { + init(jettonBurn: Components.Schemas.JettonBurnAction) throws { + sender = try WalletAccount(accountAddress: jettonBurn.sender) + senderWallet = try TonSwift.Address.parse(jettonBurn.senders_wallet) + amount = BigUInt(stringLiteral: jettonBurn.amount) + jettonInfo = try TonJettonInfo(jettonPreview: jettonBurn.jetton) + } +} + +extension AccountEventAction.SmartContractExec { + init(smartContractExec: Components.Schemas.SmartContractAction) throws { + executor = try WalletAccount(accountAddress: smartContractExec.executor) + contract = try WalletAccount(accountAddress: smartContractExec.contract) + tonAttached = smartContractExec.ton_attached + operation = smartContractExec.operation + payload = smartContractExec.payload + } +} + +extension AccountEventAction.DomainRenew { + init(domainRenew: Components.Schemas.DomainRenewAction) throws { + domain = domainRenew.domain + contractAddress = domainRenew.contract_address + renewer = try WalletAccount(accountAddress: domainRenew.renewer) + } +} + +extension AccountEventAction.Price { + init(price: Components.Schemas.Price) { + amount = BigUInt(stringLiteral: price.value) + tokenName = price.token_name + } +} + +extension TonNFT { + private enum PreviewSize: String { + case size5 = "5x5" + case size100 = "100x100" + case size500 = "500x500" + case size1500 = "1500x1500" + } + + init(nftItem: Components.Schemas.NftItem) throws { + let address = try TonSwift.Address.parse(nftItem.address) + var owner: WalletAccount? + var name: String? + var imageURL: URL? + var description: String? + var collection: TonNFTCollection? + var isHidden = false + + if let ownerAccountAddress = nftItem.owner, + let ownerWalletAccount = try? WalletAccount(accountAddress: ownerAccountAddress) { + owner = ownerWalletAccount + } + + let metadata = nftItem.metadata.additionalProperties.value as [String: AnyObject] + name = metadata["name"] as? String + imageURL = (metadata["image"] as? String).flatMap { URL(string: $0) } + description = metadata["description"] as? String + isHidden = (metadata["render_type"] as? String) == "hidden" + + var attributes = [Attribute]() + if let attributesValue = (metadata["attributes"] as? [AnyObject]) { + attributes = attributesValue + .compactMap { $0 as? [String: AnyObject] } + .compactMap { attributeObject -> Attribute? in + guard let key = attributeObject["trait_type"] as? String else { return nil } + let attributeValue: String + switch attributeObject["value"] { + case .none: return nil + case let .some(value): + switch value { + case let stringValue as String: + attributeValue = stringValue + case let intValue as Int: + attributeValue = String(intValue) + case let doubleValue as Int: + attributeValue = String(doubleValue) + default: + attributeValue = "-" + } + } + return Attribute(key: key, value: attributeValue) + } + } + + if let nftCollection = nftItem.collection, + let address = try? TonSwift.Address.parse(nftCollection.address) { + collection = TonNFTCollection(address: address, name: nftCollection.name, description: nftCollection.description) + } + + if imageURL == nil, + let previewURLString = nftItem.previews?[2].url, + let previewURL = URL(string: previewURLString) { + imageURL = previewURL + } + + var sale: Sale? + if let nftSale = nftItem.sale { + let address = try TonSwift.Address.parse(nftSale.address) + let market = try WalletAccount(accountAddress: nftSale.market) + var ownerWalletAccount: WalletAccount? + if let nftSaleOwner = nftItem.owner { + ownerWalletAccount = try WalletAccount(accountAddress: nftSaleOwner) + } + sale = Sale(address: address, market: market, owner: ownerWalletAccount) + } + + self.address = address + self.owner = owner + self.name = name + self.imageURL = imageURL + self.description = description + self.attributes = attributes + preview = Self.mapPreviews(nftItem.previews) + self.collection = collection + dns = nftItem.dns + self.sale = sale + self.isHidden = isHidden + } + + private static func mapPreviews(_ previews: [Components.Schemas.ImagePreview]?) -> Preview { + var size5: URL? + var size100: URL? + var size500: URL? + var size1500: URL? + + previews?.forEach { preview in + guard let previewSize = PreviewSize(rawValue: preview.resolution) else { return } + switch previewSize { + case .size5: + size5 = URL(string: preview.url) + case .size100: + size100 = URL(string: preview.url) + case .size500: + size500 = URL(string: preview.url) + case .size1500: + size1500 = URL(string: preview.url) + } + } + return Preview(size5: size5, size100: size100, size500: size500, size1500: size1500) + } +} diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/GiantsquidRewardOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/GiantsquidRewardOperationFactory.swift index adb1804817..4b5af6b804 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/GiantsquidRewardOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/GiantsquidRewardOperationFactory.swift @@ -3,6 +3,7 @@ import RobinHood import SSFUtils import SoraFoundation import SSFModels +import SSFCrypto enum GiantsquidRewardOperationFactoryError: Error { case urlMissing diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/ReefRewardOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/ReefRewardOperationFactory.swift index e35a66af94..7114b93625 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/ReefRewardOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/ReefRewardOperationFactory.swift @@ -3,6 +3,7 @@ import RobinHood import SSFUtils import SoraFoundation import SSFModels +import SSFCrypto enum ReefRewardOperationFactoryError: Error { case urlMissing diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/RewardOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/RewardOperationFactory.swift index daba6f1966..f5b67e1fc7 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/RewardOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/RewardOperationFactory.swift @@ -40,7 +40,7 @@ enum RewardOperationFactory { return SoraRewardOperationFactory(url: blockExplorer?.url, chain: chain) case .reef: return ReefRewardOperationFactory(url: blockExplorer?.url, chain: chain) - case .alchemy, .etherscan, .oklink, .blockscout, .fire, .vicscan, .zchain, .klaytn: + case .alchemy, .etherscan, .oklink, .blockscout, .fire, .vicscan, .zchain, .klaytn, .ton: return GiantsquidRewardOperationFactory(url: blockExplorer?.url, chain: chain) } } diff --git a/fearless/CoreLayer/OperationFactory/NFT/AlchemyNFTOperationFactory.swift b/fearless/CoreLayer/OperationFactory/NFT/AlchemyNFTOperationFactory.swift index f322ed646c..9b65cfc6b2 100644 --- a/fearless/CoreLayer/OperationFactory/NFT/AlchemyNFTOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/NFT/AlchemyNFTOperationFactory.swift @@ -288,7 +288,7 @@ final class AlchemyNFTOperationFactory { urlComponents?.queryItems = [ URLQueryItem(name: "contractAddress", value: address), URLQueryItem(name: "withMetadata", value: "true"), - URLQueryItem(name: "limit", value: "100"), + URLQueryItem(name: "limit", value: "100") ] if let nextId = nextId { @@ -343,7 +343,7 @@ final class AlchemyNFTOperationFactory { var urlComponents = URLComponents(string: endpointUrl.absoluteString) urlComponents?.queryItems = [ URLQueryItem(name: "contractAddress", value: address), - URLQueryItem(name: "tokenId", value: tokenId), + URLQueryItem(name: "tokenId", value: tokenId) ] guard let urlWithParameters = urlComponents?.url else { diff --git a/fearless/CoreLayer/TonComponents/TonAccount.swift b/fearless/CoreLayer/TonComponents/TonAccount.swift new file mode 100644 index 0000000000..6221c9a6cb --- /dev/null +++ b/fearless/CoreLayer/TonComponents/TonAccount.swift @@ -0,0 +1,23 @@ +import Foundation +import TonAPI +import TonSwift + +struct TonAccount { + let address: TonSwift.Address + let balance: Int64 + let status: String + let name: String? + let icon: String? + let isSuspended: Bool? + let isWallet: Bool + + init(account: Components.Schemas.Account) throws { + address = try TonSwift.Address.parse(account.address) + balance = account.balance + status = account.status + name = account.name + icon = account.icon + isSuspended = account.is_suspended + isWallet = account.is_wallet + } +} diff --git a/fearless/CoreLayer/TonComponents/TonAddress.swift b/fearless/CoreLayer/TonComponents/TonAddress.swift new file mode 100644 index 0000000000..e5bce80e0c --- /dev/null +++ b/fearless/CoreLayer/TonComponents/TonAddress.swift @@ -0,0 +1,18 @@ +import Foundation +import TonSwift + +extension TonSwift.Address { + static func random() -> TonSwift.Address { + TonSwift.Address.mock(workchain: 0, seed: "testResolvableAddressResolvedCoding") + } + + func asAccountId() throws -> AccountId { + try JSONEncoder().encode(self) + } +} + +extension AccountId { + func asTonAddress() throws -> TonSwift.Address { + try JSONDecoder().decode(TonSwift.Address.self, from: self) + } +} diff --git a/fearless/Modules/AccountConfirm/AccountConfirmInteractor.swift b/fearless/Modules/AccountConfirm/AccountConfirmInteractor.swift index 9914ad7dfe..c423ae53e2 100644 --- a/fearless/Modules/AccountConfirm/AccountConfirmInteractor.swift +++ b/fearless/Modules/AccountConfirm/AccountConfirmInteractor.swift @@ -2,6 +2,7 @@ import UIKit import SoraKeystore import IrohaCrypto import RobinHood +import SSFModels class AccountConfirmInteractor: BaseAccountConfirmInteractor { private(set) var settings: SelectedWalletSettings diff --git a/fearless/Modules/AccountConfirm/BaseAccountConfirmInteractor.swift b/fearless/Modules/AccountConfirm/BaseAccountConfirmInteractor.swift index c6d4c3976a..4344f9086a 100644 --- a/fearless/Modules/AccountConfirm/BaseAccountConfirmInteractor.swift +++ b/fearless/Modules/AccountConfirm/BaseAccountConfirmInteractor.swift @@ -2,6 +2,7 @@ import UIKit import SoraKeystore import IrohaCrypto import RobinHood +import SSFModels class BaseAccountConfirmInteractor { weak var presenter: AccountConfirmInteractorOutputProtocol! @@ -19,7 +20,7 @@ class BaseAccountConfirmInteractor { operationManager: OperationManagerProtocol ) { self.flow = flow - shuffledWords = flow?.mnemonic.allWords().shuffled() ?? [] + shuffledWords = flow?.mnemonicAllWordls.shuffled() ?? [] self.accountOperationFactory = accountOperationFactory self.accountRepository = accountRepository self.operationManager = operationManager @@ -36,7 +37,7 @@ extension BaseAccountConfirmInteractor: AccountConfirmInteractorInputProtocol { } func confirm(words: [String]) { - guard let confirmFlow = flow, words == confirmFlow.mnemonic.allWords() else { + guard let confirmFlow = flow, words == confirmFlow.mnemonicAllWordls else { presenter.didReceive( words: shuffledWords, afterConfirmationFail: true @@ -44,8 +45,8 @@ extension BaseAccountConfirmInteractor: AccountConfirmInteractorInputProtocol { return } switch confirmFlow { - case let .wallet(request): - createAccount(request, isBackuped: true) + case let .wallet(ecosystem): + createAccount(ecosystem: ecosystem, isBackuped: true) case let .chain(request): importUniqueChain(request) } @@ -57,7 +58,7 @@ extension BaseAccountConfirmInteractor: AccountConfirmInteractorInputProtocol { } switch confirmFlow { case let .wallet(request): - createAccount(request, isBackuped: false) + createAccount(ecosystem: request, isBackuped: false) case let .chain(request): importUniqueChain(request) } @@ -65,9 +66,15 @@ extension BaseAccountConfirmInteractor: AccountConfirmInteractorInputProtocol { } private extension BaseAccountConfirmInteractor { - func createAccount(_ request: MetaAccountImportMnemonicRequest, isBackuped: Bool) { - let operation = accountOperationFactory.newMetaAccountOperation(request: request, isBackuped: isBackuped) - createAccountUsingOperation(operation) + func createAccount(ecosystem: (AccountConfirmFlowWalletEcosystemRequest), isBackuped: Bool) { + switch ecosystem { + case .regular(let metaAccountImportMnemonicRequest): + let operation = accountOperationFactory.newMetaAccountOperation(request: metaAccountImportMnemonicRequest, isBackedUp: isBackuped) + createAccountUsingOperation(operation) + case .ton(let metaAccountImportTonMnemonicRequest): + let operation = accountOperationFactory.newTonMetaAccountOperation(request: metaAccountImportTonMnemonicRequest, isBackedUp: isBackuped) + createAccountUsingOperation(operation) + } } func importUniqueChain(_ request: ChainAccountImportMnemonicRequest) { diff --git a/fearless/Modules/AccountConfirm/Model/AccountConfirmFlow.swift b/fearless/Modules/AccountConfirm/Model/AccountConfirmFlow.swift index 684905c725..453e881518 100644 --- a/fearless/Modules/AccountConfirm/Model/AccountConfirmFlow.swift +++ b/fearless/Modules/AccountConfirm/Model/AccountConfirmFlow.swift @@ -1,15 +1,26 @@ import IrohaCrypto +import SSFAccountManagment + +enum AccountConfirmFlowWalletEcosystemRequest { + case regular(MetaAccountImportMnemonicRequest) + case ton(MetaAccountImportTonMnemonicRequest) +} enum AccountConfirmFlow { - case wallet(MetaAccountImportMnemonicRequest) + case wallet(AccountConfirmFlowWalletEcosystemRequest) case chain(ChainAccountImportMnemonicRequest) - var mnemonic: IRMnemonicProtocol { + var mnemonicAllWordls: [String] { switch self { - case let .wallet(request): - return request.mnemonic + case let .wallet(ecosystem): + switch ecosystem { + case .regular(let metaAccountImportMnemonicRequest): + return metaAccountImportMnemonicRequest.mnemonic.allWords() + case .ton(let metaAccountImportTonMnemonicRequest): + return metaAccountImportTonMnemonicRequest.mnemonic.components(separatedBy: " ") + } case let .chain(request): - return request.mnemonic + return request.mnemonic.allWords() } } } diff --git a/fearless/Modules/AccountCreate/AccountCreateInteractor.swift b/fearless/Modules/AccountCreate/AccountCreateInteractor.swift index 2ef50bd182..8407de0501 100644 --- a/fearless/Modules/AccountCreate/AccountCreateInteractor.swift +++ b/fearless/Modules/AccountCreate/AccountCreateInteractor.swift @@ -1,27 +1,38 @@ import UIKit import IrohaCrypto import RobinHood +import TonSwift +import SSFModels final class AccountCreateInteractor { weak var presenter: AccountCreateInteractorOutputProtocol! + let ecosystem: AccountCreateEcosystem let mnemonicCreator: IRMnemonicCreatorProtocol init( + ecosystem: AccountCreateEcosystem, mnemonicCreator: IRMnemonicCreatorProtocol ) { + self.ecosystem = ecosystem self.mnemonicCreator = mnemonicCreator } } extension AccountCreateInteractor: AccountCreateInteractorInputProtocol { func setup() { - do { - let mnemonic = try mnemonicCreator.randomMnemonic(.entropy128) - - presenter.didReceive(mnemonic: mnemonic.allWords()) - } catch { - presenter.didReceiveMnemonicGeneration(error: error) + switch ecosystem { + case .regular: + do { + let mnemonic = try mnemonicCreator.randomMnemonic(.entropy128) + let allWords = mnemonic.allWords() + presenter.didReceive(mnemonic: allWords) + } catch { + presenter.didReceiveMnemonicGeneration(error: error) + } + case .ton: + let allWords = TonSwift.Mnemonic.mnemonicNew(wordsCount: 24) + presenter.didReceive(mnemonic: allWords) } } diff --git a/fearless/Modules/AccountCreate/AccountCreatePresenter.swift b/fearless/Modules/AccountCreate/AccountCreatePresenter.swift index 7436a70a3d..6f6c0b8536 100644 --- a/fearless/Modules/AccountCreate/AccountCreatePresenter.swift +++ b/fearless/Modules/AccountCreate/AccountCreatePresenter.swift @@ -1,4 +1,5 @@ import UIKit +import SSFAccountManagment import IrohaCrypto import SoraFoundation import SSFUtils @@ -13,6 +14,7 @@ final class AccountCreatePresenter { let usernameSetup: UsernameSetupModel var flow: AccountCreateFlow + let ecosystem: AccountCreateEcosystem private var mnemonic: [String]? private var selectedCryptoType: CryptoType = .sr25519 @@ -20,11 +22,13 @@ final class AccountCreatePresenter { private var ethereumDerivationPathViewModel: InputViewModelProtocol? init( + ecosystem: AccountCreateEcosystem, usernameSetup: UsernameSetupModel, wireframe: AccountCreateWireframeProtocol, interactor: AccountCreateInteractorInputProtocol, flow: AccountCreateFlow ) { + self.ecosystem = ecosystem self.usernameSetup = usernameSetup self.wireframe = wireframe self.interactor = interactor @@ -147,7 +151,9 @@ extension AccountCreatePresenter: AccountCreatePresenterProtocol { case .wallet, .backup: view?.set(chainType: .both) case let .chain(model): - if let cryptoType = CryptoType(rawValue: model.meta.substrateCryptoType) { + if + let substrateCryptoType = model.meta.ecosystem.substrateCryptoType, + let cryptoType = CryptoType(rawValue: substrateCryptoType) { selectedCryptoType = cryptoType } view?.set(chainType: model.chain.isEthereumBased ? .ethereum : .substrate) @@ -228,10 +234,6 @@ extension AccountCreatePresenter: AccountCreatePresenterProtocol { else { return } - guard let mnemonic = interactor.createMnemonicFromString(mnemonic.joined(separator: " ")) else { - didReceiveMnemonicGeneration(error: AccountCreateError.invalidMnemonicFormat) - return - } guard substrateViewModel.inputHandler.completed else { view?.didValidateSubstrateDerivationPath(.invalid) @@ -249,30 +251,54 @@ extension AccountCreatePresenter: AccountCreatePresenterProtocol { let substrateDerivationPath = (substrateDerivationPathViewModel?.inputHandler.value).nonEmpty(or: "") switch unwrappedFlow { case .wallet: - let request = MetaAccountImportMnemonicRequest( - mnemonic: mnemonic, - username: usernameSetup.username, - substrateDerivationPath: substrateDerivationPath, - ethereumDerivationPath: ethereumDerivationPath, - cryptoType: selectedCryptoType, - defaultChainId: nil - ) - wireframe.confirm( - from: view, - flow: .wallet(request) - ) + switch ecosystem { + case .regular: + guard let mnemonic = interactor.createMnemonicFromString(mnemonic.joined(separator: " ")) else { + didReceiveMnemonicGeneration(error: AccountCreateError.invalidMnemonicFormat) + return + } + let request = MetaAccountImportMnemonicRequest( + mnemonic: mnemonic, + username: usernameSetup.username, + substrateDerivationPath: substrateDerivationPath, + ethereumDerivationPath: ethereumDerivationPath, + cryptoType: selectedCryptoType, + defaultChainId: nil + ) + wireframe.confirm( + from: view, + flow: .wallet(.regular(request)) + ) + case .ton: + let request = MetaAccountImportTonMnemonicRequest( + mnemonic: mnemonic.joined(separator: " "), + username: usernameSetup.username + ) + wireframe.confirm( + from: view, + flow: .wallet(.ton(request)) + ) + } case let .chain(model): + guard let mnemonic = interactor.createMnemonicFromString(mnemonic.joined(separator: " ")) else { + didReceiveMnemonicGeneration(error: AccountCreateError.invalidMnemonicFormat) + return + } let request = ChainAccountImportMnemonicRequest( mnemonic: mnemonic, username: usernameSetup.username, derivationPath: model.chain.isEthereumBased ? ethereumDerivationPath : substrateDerivationPath, cryptoType: model.chain.isEthereumBased ? .ecdsa : selectedCryptoType, - isEthereum: model.chain.isEthereumBased, + ecosystem: model.chain.ecosystem, meta: model.meta, chainId: model.chain.chainId ) wireframe.confirm(from: view, flow: .chain(request)) case .backup: + guard let mnemonic = interactor.createMnemonicFromString(mnemonic.joined(separator: " ")) else { + didReceiveMnemonicGeneration(error: AccountCreateError.invalidMnemonicFormat) + return + } let request = MetaAccountImportMnemonicRequest( mnemonic: mnemonic, username: usernameSetup.username, diff --git a/fearless/Modules/AccountCreate/AccountCreateProtocols.swift b/fearless/Modules/AccountCreate/AccountCreateProtocols.swift index e812453bfb..fead243805 100644 --- a/fearless/Modules/AccountCreate/AccountCreateProtocols.swift +++ b/fearless/Modules/AccountCreate/AccountCreateProtocols.swift @@ -58,13 +58,16 @@ protocol AccountCreateWireframeProtocol: SheetAlertPresentable, ErrorPresentable protocol AccountCreateViewFactoryProtocol: AnyObject { static func createViewForOnboarding( + ecosystem: AccountCreateEcosystem, model: UsernameSetupModel, flow: AccountCreateFlow ) -> AccountCreateViewProtocol? static func createViewForAdding( + ecosystem: AccountCreateEcosystem, model: UsernameSetupModel ) -> AccountCreateViewProtocol? static func createViewForSwitch( + ecosystem: AccountCreateEcosystem, model: UsernameSetupModel ) -> AccountCreateViewProtocol? } diff --git a/fearless/Modules/AccountCreate/AccountCreateViewController.swift b/fearless/Modules/AccountCreate/AccountCreateViewController.swift index e7f422042d..7e49d9b366 100644 --- a/fearless/Modules/AccountCreate/AccountCreateViewController.swift +++ b/fearless/Modules/AccountCreate/AccountCreateViewController.swift @@ -10,12 +10,14 @@ final class AccountCreateViewController: UIViewController, ViewHolder { private var substrateDerivationPathModel: InputViewModelProtocol? private var ethereumDerivationPathModel: InputViewModelProtocol? private var isFirstLayoutCompleted: Bool = false + private let ecosystem: AccountCreateEcosystem private lazy var locale: Locale = { localizationManager?.selectedLocale ?? Locale.current }() - init(presenter: AccountCreatePresenterProtocol) { + init(ecosystem: AccountCreateEcosystem, presenter: AccountCreatePresenterProtocol) { + self.ecosystem = ecosystem self.presenter = presenter super.init(nibName: nil, bundle: nil) } @@ -37,6 +39,15 @@ final class AccountCreateViewController: UIViewController, ViewHolder { setupActions() presenter.setup() + switch ecosystem { + case .regular: + break + case .ton: + // TODO: - Ton google backup + rootView.backupButton.isHidden = true + rootView.expandableControl.isHidden = true + rootView.expandableControlContainerView.isHidden = true + } } override func viewWillAppear(_ animated: Bool) { diff --git a/fearless/Modules/AccountCreate/AccountCreateViewFactory.swift b/fearless/Modules/AccountCreate/AccountCreateViewFactory.swift index 2d75f37716..3b8e616beb 100644 --- a/fearless/Modules/AccountCreate/AccountCreateViewFactory.swift +++ b/fearless/Modules/AccountCreate/AccountCreateViewFactory.swift @@ -2,15 +2,23 @@ import Foundation import IrohaCrypto import SoraFoundation import SoraKeystore +import SSFModels + +enum AccountCreateEcosystem { + case regular + case ton +} final class AccountCreateViewFactory: AccountCreateViewFactoryProtocol { static func createViewForOnboarding( + ecosystem: AccountCreateEcosystem, model: UsernameSetupModel, flow: AccountCreateFlow ) -> AccountCreateViewProtocol? { let wireframe = AccountCreateWireframe() return createViewForUsername( + ecosystem: ecosystem, model: model, flow: flow, wireframe: wireframe @@ -18,11 +26,13 @@ final class AccountCreateViewFactory: AccountCreateViewFactoryProtocol { } static func createViewForAdding( + ecosystem: AccountCreateEcosystem, model: UsernameSetupModel ) -> AccountCreateViewProtocol? { let wireframe = AddAccount.AccountCreateWireframe() return createViewForUsername( + ecosystem: ecosystem, model: model, flow: .wallet, wireframe: wireframe @@ -30,10 +40,12 @@ final class AccountCreateViewFactory: AccountCreateViewFactoryProtocol { } static func createViewForSwitch( + ecosystem: AccountCreateEcosystem, model: UsernameSetupModel ) -> AccountCreateViewProtocol? { let wireframe = SwitchAccount.AccountCreateWireframe() return createViewForUsername( + ecosystem: ecosystem, model: model, flow: .wallet, wireframe: wireframe @@ -41,18 +53,20 @@ final class AccountCreateViewFactory: AccountCreateViewFactoryProtocol { } static func createViewForUsername( + ecosystem: AccountCreateEcosystem, model: UsernameSetupModel, flow: AccountCreateFlow, wireframe: AccountCreateWireframeProtocol ) -> AccountCreateViewProtocol? { - let interactor = AccountCreateInteractor(mnemonicCreator: IRMnemonicCreator()) + let interactor = AccountCreateInteractor(ecosystem: ecosystem, mnemonicCreator: IRMnemonicCreator()) let presenter = AccountCreatePresenter( + ecosystem: ecosystem, usernameSetup: model, wireframe: wireframe, interactor: interactor, flow: flow ) - let view = AccountCreateViewController(presenter: presenter) + let view = AccountCreateViewController(ecosystem: ecosystem, presenter: presenter) presenter.view = view interactor.presenter = presenter diff --git a/fearless/Modules/AccountCreate/AccountCreateViewLayout.swift b/fearless/Modules/AccountCreate/AccountCreateViewLayout.swift index 7561c87e33..e7a215c421 100644 --- a/fearless/Modules/AccountCreate/AccountCreateViewLayout.swift +++ b/fearless/Modules/AccountCreate/AccountCreateViewLayout.swift @@ -138,7 +138,7 @@ final class AccountCreateViewLayout: UIView { return label }() - private let expandableControlContainerView: BorderedContainerView = { + let expandableControlContainerView: BorderedContainerView = { let view = UIFactory().createBorderedContainerView() view.backgroundColor = R.color.colorBlack19() view.borderType = .bottom @@ -147,7 +147,7 @@ final class AccountCreateViewLayout: UIView { return view }() - private let expandableControl: ExpandableActionControl = { + let expandableControl: ExpandableActionControl = { let view = UIFactory().createExpandableActionControl() view.backgroundColor = R.color.colorBlack19() view.translatesAutoresizingMaskIntoConstraints = false diff --git a/fearless/Modules/AccountCreate/Model/AccountCreateChainType.swift b/fearless/Modules/AccountCreate/Model/AccountCreateChainType.swift index 8336692a40..b30ee5ed8f 100644 --- a/fearless/Modules/AccountCreate/Model/AccountCreateChainType.swift +++ b/fearless/Modules/AccountCreate/Model/AccountCreateChainType.swift @@ -5,6 +5,7 @@ enum AccountCreateChainType { case substrate case ethereum case both + case ton } extension AccountCreateChainType { @@ -12,14 +13,14 @@ extension AccountCreateChainType { switch self { case .substrate, .both: return true - case .ethereum: + case .ethereum, .ton: return false } } var includeEthereum: Bool { switch self { - case .ethereum, .both: + case .ethereum, .both, .ton: return true case .substrate: return false @@ -28,6 +29,7 @@ extension AccountCreateChainType { } enum AccountCreationStep { + case ton case substrate case ethereum(data: SubstrateStepData) diff --git a/fearless/Modules/AccountImport/AccountImportInteractor.swift b/fearless/Modules/AccountImport/AccountImportInteractor.swift index 12b63d73dc..2466b83509 100644 --- a/fearless/Modules/AccountImport/AccountImportInteractor.swift +++ b/fearless/Modules/AccountImport/AccountImportInteractor.swift @@ -3,6 +3,7 @@ import IrohaCrypto import SSFUtils import RobinHood import SoraKeystore +import SSFModels final class AccountImportInteractor: BaseAccountImportInteractor { private(set) var settings: SelectedWalletSettings diff --git a/fearless/Modules/AccountImport/AccountImportPresenter.swift b/fearless/Modules/AccountImport/AccountImportPresenter.swift index 95815613dc..74783462b1 100644 --- a/fearless/Modules/AccountImport/AccountImportPresenter.swift +++ b/fearless/Modules/AccountImport/AccountImportPresenter.swift @@ -25,7 +25,7 @@ enum AccountImportFlow { return model.chain.isEthereumBased case let .wallet(step): switch step { - case .substrate: + case .substrate, .ton: return false case .ethereum: return true @@ -159,6 +159,8 @@ private extension AccountImportPresenter { case let .ethereum(data): selectedCryptoType = data.cryptoType view?.setSource(type: selectedSourceType, chainType: .ethereum, selectable: false) + case .ton: + view?.setSource(type: .tonMnemonic, chainType: .ton, selectable: false) } } @@ -170,7 +172,7 @@ private extension AccountImportPresenter { username = model.meta.name case let .wallet(step): switch step { - case .substrate: + case .substrate, .ton: username = preferredData?.username ?? "" case let .ethereum(data): username = data.username @@ -191,7 +193,7 @@ private extension AccountImportPresenter { let locale = localizationManager?.selectedLocale ?? Locale.current switch selectedSourceType { - case .mnemonic: + case .mnemonic, .tonMnemonic: let placeholder = R.string.localizable .importMnemonic(preferredLanguages: locale.rLanguages) let normalizer = MnemonicTextNormalizer() @@ -260,7 +262,7 @@ private extension AccountImportPresenter { } switch selectedSourceType { - case .mnemonic, .seed: + case .mnemonic, .seed, .tonMnemonic: passwordViewModel = nil case .keystore: let viewModel = InputViewModel(inputHandler: InputHandler(required: true)) @@ -278,7 +280,7 @@ private extension AccountImportPresenter { return } switch selectedSourceType { - case .mnemonic: + case .mnemonic, .tonMnemonic: applyCryptoTypeViewModel(cryptoType) switch flow { @@ -539,6 +541,15 @@ private extension AccountImportPresenter { defaultChainId: nil ) interactor.importMetaAccount(request: request) + case (.tonMnemonic, .ton): + let mnemonicString = data.source + let request = MetaAccountImportRequest( + source: .ton(mnemonic: mnemonicString), + username: data.username, + cryptoType: .ed25519, + defaultChainId: nil + ) + interactor.importMetaAccount(request: request) case (.seed, .substrate): askIfNeedAddEthereum { [weak self] in self?.showSecondStep(data: data) @@ -607,6 +618,7 @@ private extension AccountImportPresenter { defaultChainId: nil ) interactor.importMetaAccount(request: request) + default: break } } @@ -647,6 +659,8 @@ private extension AccountImportPresenter { password: data.password ) source = UniqueChainImportRequestSource.keystore(data: sourceData) + case .tonMnemonic: + return } let request = UniqueChainImportRequest( source: source, @@ -664,7 +678,7 @@ private extension AccountImportPresenter { } switch selectedSourceType { - case .mnemonic: + case .mnemonic, .tonMnemonic: return validateMnemonic(value: value) case .seed: return validateSeed(value: value) diff --git a/fearless/Modules/AccountImport/AccountImportViewController.swift b/fearless/Modules/AccountImport/AccountImportViewController.swift index f3cb56645d..bd99d1f521 100644 --- a/fearless/Modules/AccountImport/AccountImportViewController.swift +++ b/fearless/Modules/AccountImport/AccountImportViewController.swift @@ -233,13 +233,18 @@ extension AccountImportViewController: AccountImportViewProtocol { rootView.textViewContainer.isHidden = false + rootView.passwordContainerView.isHidden = true + rootView.uploadViewContainer.isHidden = true + case .tonMnemonic: + rootView.setAdvancedVisibility(false) + rootView.textViewContainer.isHidden = false rootView.passwordContainerView.isHidden = true rootView.uploadViewContainer.isHidden = true case .seed: switch chainType { case .substrate, .both: rootView.setAdvancedVisibility(true) - case .ethereum: + case .ethereum, .ton: rootView.setAdvancedVisibility(false) } rootView.textViewContainer.isHidden = false diff --git a/fearless/Modules/AccountImport/AccountImportViewLayout.swift b/fearless/Modules/AccountImport/AccountImportViewLayout.swift index f92bcb3a8e..b1919ab5ec 100644 --- a/fearless/Modules/AccountImport/AccountImportViewLayout.swift +++ b/fearless/Modules/AccountImport/AccountImportViewLayout.swift @@ -137,6 +137,7 @@ final class AccountImportViewLayout: UIView { view.autocapitalizationType = .none view.autocorrectionType = .no view.isScrollEnabled = false + view.backgroundColor = .clear return view }() diff --git a/fearless/Modules/AccountImport/BaseAccountImportInteractor.swift b/fearless/Modules/AccountImport/BaseAccountImportInteractor.swift index 70dcce9f0b..e00b8b93f3 100644 --- a/fearless/Modules/AccountImport/BaseAccountImportInteractor.swift +++ b/fearless/Modules/AccountImport/BaseAccountImportInteractor.swift @@ -1,4 +1,5 @@ import UIKit +import SSFAccountManagment import IrohaCrypto import SSFUtils import RobinHood @@ -86,7 +87,7 @@ extension BaseAccountImportInteractor: AccountImportInteractorInputProtocol { cryptoType: request.cryptoType, defaultChainId: request.defaultChainId ) - operation = accountOperationFactory.newMetaAccountOperation(request: request, isBackuped: true) + operation = accountOperationFactory.newMetaAccountOperation(request: request, isBackedUp: true) case let .seed(data): let request = MetaAccountImportSeedRequest( substrateSeed: data.substrateSeed, @@ -96,7 +97,7 @@ extension BaseAccountImportInteractor: AccountImportInteractorInputProtocol { ethereumDerivationPath: data.ethereumDerivationPath, cryptoType: request.cryptoType ) - operation = accountOperationFactory.newMetaAccountOperation(request: request, isBackuped: true) + operation = accountOperationFactory.newMetaAccountOperation(request: request, isBackedUp: true) case let .keystore(data): let request = MetaAccountImportKeystoreRequest( substrateKeystore: data.substrateKeystore, @@ -106,7 +107,16 @@ extension BaseAccountImportInteractor: AccountImportInteractorInputProtocol { username: request.username, cryptoType: request.cryptoType ) - operation = accountOperationFactory.newMetaAccountOperation(request: request, isBackuped: true) + operation = accountOperationFactory.newMetaAccountOperation(request: request, isBackedUp: true) + case let .ton(mnemonic): + let request = MetaAccountImportTonMnemonicRequest( + mnemonic: mnemonic, + username: request.username + ) + operation = accountOperationFactory.newTonMetaAccountOperation( + request: request, + isBackedUp: true + ) } importAccountUsingOperation(operation) } @@ -120,7 +130,7 @@ extension BaseAccountImportInteractor: AccountImportInteractorInputProtocol { username: request.username, derivationPath: data.derivationPath, cryptoType: request.cryptoType, - isEthereum: request.chain.isEthereumBased, + ecosystem: request.chain.ecosystem, meta: request.meta, chainId: request.chain.chainId ) @@ -131,7 +141,7 @@ extension BaseAccountImportInteractor: AccountImportInteractorInputProtocol { username: request.username, derivationPath: data.derivationPath, cryptoType: request.cryptoType, - isEthereum: request.chain.isEthereumBased, + ecosystem: request.chain.ecosystem, meta: request.meta, chainId: request.chain.chainId ) @@ -142,7 +152,7 @@ extension BaseAccountImportInteractor: AccountImportInteractorInputProtocol { password: data.password, username: request.username, cryptoType: request.cryptoType, - isEthereum: request.chain.isEthereumBased, + ecosystem: request.chain.ecosystem, meta: request.meta, chainId: request.chain.chainId ) diff --git a/fearless/Modules/AccountImport/Model/AccountImportRequest.swift b/fearless/Modules/AccountImport/Model/AccountImportRequest.swift index 1e74009f6d..69041bed4a 100644 --- a/fearless/Modules/AccountImport/Model/AccountImportRequest.swift +++ b/fearless/Modules/AccountImport/Model/AccountImportRequest.swift @@ -53,6 +53,7 @@ enum MetaAccountImportRequestSource { case mnemonic(data: MnemonicImportRequestData) case seed(data: SeedImportRequestData) case keystore(data: KeystoreImportRequestData) + case ton(mnemonic: String) } struct MetaAccountImportRequest { @@ -67,7 +68,7 @@ struct ChainAccountImportMnemonicRequest { let username: String let derivationPath: String let cryptoType: CryptoType - let isEthereum: Bool + let ecosystem: Ecosystem let meta: MetaAccountModel let chainId: ChainModel.Id } @@ -77,7 +78,7 @@ struct ChainAccountImportSeedRequest { let username: String let derivationPath: String let cryptoType: CryptoType - let isEthereum: Bool + let ecosystem: Ecosystem let meta: MetaAccountModel let chainId: ChainModel.Id } @@ -87,7 +88,7 @@ struct ChainAccountImportKeystoreRequest { let password: String let username: String let cryptoType: CryptoType - let isEthereum: Bool + let ecosystem: Ecosystem let meta: MetaAccountModel let chainId: ChainModel.Id } diff --git a/fearless/Modules/AddAccount/Interactors/AddAccount+AccountConfirmInteractor.swift b/fearless/Modules/AddAccount/Interactors/AddAccount+AccountConfirmInteractor.swift index 0bb8f1706c..787af58a8c 100644 --- a/fearless/Modules/AddAccount/Interactors/AddAccount+AccountConfirmInteractor.swift +++ b/fearless/Modules/AddAccount/Interactors/AddAccount+AccountConfirmInteractor.swift @@ -1,6 +1,7 @@ import UIKit import SoraKeystore import IrohaCrypto +import SSFModels import RobinHood // TODO: Check how to convert this to chain account import diff --git a/fearless/Modules/AddAccount/Interactors/AddAccount+AccountImportInteractor.swift b/fearless/Modules/AddAccount/Interactors/AddAccount+AccountImportInteractor.swift index 5a25ba0487..0c8c1820e6 100644 --- a/fearless/Modules/AddAccount/Interactors/AddAccount+AccountImportInteractor.swift +++ b/fearless/Modules/AddAccount/Interactors/AddAccount+AccountImportInteractor.swift @@ -3,6 +3,7 @@ import IrohaCrypto import SSFUtils import RobinHood import SoraKeystore +import SSFModels extension AddAccount { final class AccountImportInteractor: BaseAccountImportInteractor { diff --git a/fearless/Modules/AddAccount/Wireframes/AddAccount+OnboardingMainWireframe.swift b/fearless/Modules/AddAccount/Wireframes/AddAccount+OnboardingMainWireframe.swift index af1f038ee2..05cce3e993 100644 --- a/fearless/Modules/AddAccount/Wireframes/AddAccount+OnboardingMainWireframe.swift +++ b/fearless/Modules/AddAccount/Wireframes/AddAccount+OnboardingMainWireframe.swift @@ -34,8 +34,8 @@ extension AddAccount { view?.controller.navigationController?.pushViewController(controller, animated: true) } - func showSignup(from view: OnboardingMainViewProtocol?) { - guard let usernameSetup = UsernameSetupViewFactory.createViewForAdding() else { + func showSignup(from view: OnboardingMainViewProtocol?, ecosystem: AccountCreateEcosystem) { + guard let usernameSetup = UsernameSetupViewFactory.createViewForAdding(ecosystem: ecosystem) else { return } @@ -46,10 +46,11 @@ extension AddAccount { func showAccountRestore( defaultSource: AccountImportSource, + flow: AccountImportFlow, from view: OnboardingMainViewProtocol? ) { guard let restorationController = AccountImportViewFactory - .createViewForAdding(defaultSource: defaultSource)?.controller + .createViewForAdding(defaultSource: defaultSource, flow)?.controller else { return } @@ -64,7 +65,7 @@ extension AddAccount { let navigationController = view?.controller.navigationController, navigationController.topViewController == view?.controller, navigationController.presentedViewController == nil { - showAccountRestore(defaultSource: .mnemonic, from: view) + showAccountRestore(defaultSource: .mnemonic, flow: .wallet(step: .substrate), from: view) } } diff --git a/fearless/Modules/AddAccount/Wireframes/AddAccount+UsernameSetupWireframe.swift b/fearless/Modules/AddAccount/Wireframes/AddAccount+UsernameSetupWireframe.swift index a4d726af46..23a5bffc89 100644 --- a/fearless/Modules/AddAccount/Wireframes/AddAccount+UsernameSetupWireframe.swift +++ b/fearless/Modules/AddAccount/Wireframes/AddAccount+UsernameSetupWireframe.swift @@ -5,9 +5,10 @@ extension AddAccount { func proceed( from view: UsernameSetupViewProtocol?, flow _: AccountCreateFlow = .wallet, - model: UsernameSetupModel + model: UsernameSetupModel, + ecosystem: AccountCreateEcosystem ) { - guard let accountCreation = AccountCreateViewFactory.createViewForAdding(model: model) else { + guard let accountCreation = AccountCreateViewFactory.createViewForAdding(ecosystem: ecosystem, model: model) else { return } diff --git a/fearless/Modules/AllDone/AllDonePresenter.swift b/fearless/Modules/AllDone/AllDonePresenter.swift index 6afa3c5a2b..01412f3e52 100644 --- a/fearless/Modules/AllDone/AllDonePresenter.swift +++ b/fearless/Modules/AllDone/AllDonePresenter.swift @@ -5,6 +5,10 @@ import SSFModels final class AllDonePresenter { // MARK: Private properties + private lazy var wallet: MetaAccountModel? = { + SelectedWalletSettings.shared.value + }() + private weak var view: AllDoneViewInput? private let router: AllDoneRouterInput private let interactor: AllDoneInteractorInput @@ -61,6 +65,12 @@ final class AllDonePresenter { } private func prepareExplorer() { + if chainAsset?.chain.ecosystem == .ton { + let explorer = chainAsset?.chain.externalApi?.explorers?.first(where: { $0.types.contains(.tonAccount) }) + view?.didReceive(explorer: explorer) + self.explorer = explorer + return + } guard hashString != nil else { view?.didReceive(explorer: nil) return @@ -82,23 +92,46 @@ extension AllDonePresenter: AllDoneViewOutput { } func explorerButtonDidTapped() { - guard let explorer = self.explorer, - let hashString = hashString, - let explorerUrl = explorer.explorerUrl(for: hashString, type: explorer.transactionType) - else { + guard let url = prepareUrl() else { return } - router.presentSubscan(from: view, url: explorerUrl) + router.presentSubscan(from: view, url: url) } func shareButtonDidTapped() { - guard let explorer = self.explorer, - let hashString = hashString, - let explorerUrl = explorer.explorerUrl(for: hashString, type: explorer.transactionType) - else { + guard let url = prepareUrl() else { return } - router.share(sources: [explorerUrl], from: view, with: nil) + router.share(sources: [url], from: view, with: nil) + } + + private func prepareUrl() -> URL? { + guard let chainAsset else { + return nil + } + let url: URL + switch chainAsset.chain.ecosystem { + case .ethereumBased, .ethereum, .substrate: + guard + let explorer = self.explorer, + let hashString = hashString, + let explorerUrl = explorer.explorerUrl(for: hashString, type: explorer.transactionType) + else { + return nil + } + url = explorerUrl + case .ton: + guard + let wallet, + let explorer, + let address = try? wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId.asTonAddress().toRaw(), + let explorerUrl = explorer.explorerUrl(for: address, type: .tonAccount) + else { + return nil + } + url = explorerUrl + } + return url } func dismiss() { diff --git a/fearless/Modules/AssetListSearch/AssetListSearchAssembly.swift b/fearless/Modules/AssetListSearch/AssetListSearchAssembly.swift index 1dd4bb5222..c3741264e5 100644 --- a/fearless/Modules/AssetListSearch/AssetListSearchAssembly.swift +++ b/fearless/Modules/AssetListSearch/AssetListSearchAssembly.swift @@ -1,5 +1,6 @@ import UIKit import SoraFoundation +import SSFModels final class AssetListSearchAssembly { static func configureModule(wallet: MetaAccountModel) -> AssetListSearchModuleCreationResult? { diff --git a/fearless/Modules/AssetManagement/AssetManagementAssembly.swift b/fearless/Modules/AssetManagement/AssetManagementAssembly.swift index a7b27174f9..b51d4a036b 100644 --- a/fearless/Modules/AssetManagement/AssetManagementAssembly.swift +++ b/fearless/Modules/AssetManagement/AssetManagementAssembly.swift @@ -36,34 +36,8 @@ final class AssetManagementAssembly { assetBalanceFormatterFactory: AssetBalanceFormatterFactory() ) - let repository = SubstrateRepositoryFactory( - storageFacade: UserDataStorageFacade.shared - ).createAccountInfoStorageItemRepository() - let ethereumBalanceRepositoryWrapper = EthereumBalanceRepositoryCacheWrapper( - logger: Logger.shared, - repository: repository, - operationManager: OperationManagerFacade.sharedManager - ) - - let runtimeMetadataRepository: AsyncCoreDataRepositoryDefault = - SubstrateDataStorageFacade.shared.createAsyncRepository() - + let accountInfoRemote = ServiceAssembly.shared.accountInfoRemoteServiceDefault() let chainRegistry = ChainRegistryFacade.sharedRegistry - let ethereumRemoteBalanceFetching = EthereumRemoteBalanceFetching( - chainRegistry: chainRegistry, - repositoryWrapper: ethereumBalanceRepositoryWrapper - ) - - let storagePerformer = SSFStorageQueryKit.StorageRequestPerformerDefault( - chainRegistry: chainRegistry - ) - - let accountInfoRemote = AccountInfoRemoteServiceDefault( - runtimeItemRepository: AsyncAnyRepository(runtimeMetadataRepository), - ethereumRemoteBalanceFetching: ethereumRemoteBalanceFetching, - storagePerformer: storagePerformer - ) - let walletAssetsObserver = WalletAssetsObserverImpl( wallet: wallet, chainRegistry: chainRegistry, diff --git a/fearless/Modules/AssetManagement/AssetManagementProtocols.swift b/fearless/Modules/AssetManagement/AssetManagementProtocols.swift index 5d370ac3c0..1f1a5741c6 100644 --- a/fearless/Modules/AssetManagement/AssetManagementProtocols.swift +++ b/fearless/Modules/AssetManagement/AssetManagementProtocols.swift @@ -1,3 +1,5 @@ +import SSFModels + typealias AssetManagementModuleCreationResult = ( view: AssetManagementViewInput, input: AssetManagementModuleInput diff --git a/fearless/Modules/AssetManagement/AssetManagementRouter.swift b/fearless/Modules/AssetManagement/AssetManagementRouter.swift index dd004b3b9a..54ac744e04 100644 --- a/fearless/Modules/AssetManagement/AssetManagementRouter.swift +++ b/fearless/Modules/AssetManagement/AssetManagementRouter.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels final class AssetManagementRouter: AssetManagementRouterInput { func showSelectNetwork( diff --git a/fearless/Modules/AssetManagement/ViewModel/AssetManagementViewModelFactory.swift b/fearless/Modules/AssetManagement/ViewModel/AssetManagementViewModelFactory.swift index df10c37532..48001af0b9 100644 --- a/fearless/Modules/AssetManagement/ViewModel/AssetManagementViewModelFactory.swift +++ b/fearless/Modules/AssetManagement/ViewModel/AssetManagementViewModelFactory.swift @@ -222,7 +222,7 @@ final class AssetManagementViewModelFactoryDefault: AssetManagementViewModelFact amount: amount, price: price ) - let hidden = checkAssetIsHidden( + let isEnabled = checkAssetIsEnabled( wallet: wallet, chainAsset: chainAsset ) @@ -234,7 +234,7 @@ final class AssetManagementViewModelFactoryDefault: AssetManagementViewModelFact chainName: chainAsset.chain.name, balance: balance, decimalPrice: decimalPrice, - hidden: hidden, + hidden: !isEnabled, hasGroup: hasGroup, isLoadingBalance: isLoadingBalance ) @@ -273,14 +273,14 @@ final class AssetManagementViewModelFactoryDefault: AssetManagementViewModelFact } } - private func checkAssetIsHidden( + private func checkAssetIsEnabled( wallet: MetaAccountModel, chainAsset: ChainAsset ) -> Bool { - let isHidden = wallet.assetsVisibility.contains(where: { - $0.assetId == chainAsset.identifier && $0.hidden + let isEnabled = wallet.assetsVisibility.contains(where: { + $0.assetId == chainAsset.identifier && !$0.hidden }) - return isHidden + return isEnabled } private func createFilterButtonTitle( diff --git a/fearless/Modules/BackupCreatePassword/BackupCreatePasswordInteractor.swift b/fearless/Modules/BackupCreatePassword/BackupCreatePasswordInteractor.swift index 62b334f65a..40ae80a98b 100644 --- a/fearless/Modules/BackupCreatePassword/BackupCreatePasswordInteractor.swift +++ b/fearless/Modules/BackupCreatePassword/BackupCreatePasswordInteractor.swift @@ -4,6 +4,7 @@ import RobinHood import SoraKeystore import IrohaCrypto import SSFModels +import SSFCrypto protocol BackupCreatePasswordInteractorOutput: AnyObject { func didReceive(error: Error) @@ -47,7 +48,8 @@ final class BackupCreatePasswordInteractor: BaseAccountConfirmInteractor { var flow: AccountConfirmFlow? if let mnemonicRequest = createPasswordFlow.mnemonicRequest { - flow = .wallet(mnemonicRequest) + // TODO: - Ton google backup + flow = .wallet(.regular(mnemonicRequest)) } super.init( @@ -93,8 +95,14 @@ final class BackupCreatePasswordInteractor: BaseAccountConfirmInteractor { settings.setup() eventCenter.notify(with: SelectedAccountChanged(account: wallet)) switch flow { - case let .wallet(request): - saveBackupAccount(wallet: wallet, requestType: .mnemonic(request)) + case let .wallet(importEcosystem): + switch importEcosystem { + case let .regular(request): + saveBackupAccount(wallet: wallet, requestType: .mnemonic(request)) + case .ton: + // TODO: - Ton google backup + break + } default: break } @@ -128,7 +136,13 @@ final class BackupCreatePasswordInteractor: BaseAccountConfirmInteractor { seeds: [ExportSeedData], password: String ) { - let substrateRestoreSeed = seeds.first(where: { $0.chain.chainBaseType == .substrate }) + guard + let substrateCryptoType = wallet.ecosystem.substrateCryptoType, + let substratePublicKey = wallet.ecosystem.substratePublicKey + else { + return + } + let substrateRestoreSeed = seeds.first(where: { $0.chain.ecosystem == .substrate }) let ethereumRestoreSeed = seeds.first(where: { $0.chain.isEthereumBased }) let substrateSeed = substrateRestoreSeed?.seed.toHex(includePrefix: true) @@ -137,12 +151,12 @@ final class BackupCreatePasswordInteractor: BaseAccountConfirmInteractor { substrateSeed: substrateSeed, ethSeed: ethSeed ) - let cryptoType = CryptoType(rawValue: wallet.substrateCryptoType) - let address42 = try? wallet.substratePublicKey.toAddress(using: .substrate(42)) + let cryptoType = CryptoType(rawValue: substrateCryptoType) + let address42 = try? substratePublicKey.toAddress(using: .substrate(42)) let account = OpenBackupAccount( name: wallet.name, - address: address42 ?? wallet.substratePublicKey.toHex(), + address: address42 ?? substratePublicKey.toHex(), cryptoType: cryptoType?.stringValue.uppercased(), substrateDerivationPath: substrateRestoreSeed?.derivationPath, ethDerivationPath: ethereumRestoreSeed?.derivationPath, @@ -157,19 +171,25 @@ final class BackupCreatePasswordInteractor: BaseAccountConfirmInteractor { jsons: [RestoreJson], password: String ) { - let substrateRestoreJson = jsons.first(where: { $0.chain.chainBaseType == .substrate }) + guard + let substrateCryptoType = wallet.ecosystem.substrateCryptoType, + let substratePublicKey = wallet.ecosystem.substratePublicKey + else { + return + } + let substrateRestoreJson = jsons.first(where: { $0.chain.ecosystem == .substrate }) let ethereumRestoreJson = jsons.first(where: { $0.chain.isEthereumBased }) let json = OpenBackupAccount.Json( substrateJson: substrateRestoreJson?.data, ethJson: ethereumRestoreJson?.data ) - let cryptoType = CryptoType(rawValue: wallet.substrateCryptoType) - let address42 = try? wallet.substratePublicKey.toAddress(using: .substrate(42)) + let cryptoType = CryptoType(rawValue: substrateCryptoType) + let address42 = try? substratePublicKey.toAddress(using: .substrate(42)) let account = OpenBackupAccount( name: wallet.name, - address: address42 ?? wallet.substratePublicKey.toHex(), + address: address42 ?? substratePublicKey.toHex(), cryptoType: cryptoType?.stringValue.uppercased(), backupAccountType: [.json], json: json @@ -182,10 +202,13 @@ final class BackupCreatePasswordInteractor: BaseAccountConfirmInteractor { request: MetaAccountImportMnemonicRequest, password: String ) { - let address42 = try? wallet.substratePublicKey.toAddress(using: .substrate(42)) + guard let substratePublicKey = wallet.ecosystem.substratePublicKey else { + return + } + let address42 = try? substratePublicKey.toAddress(using: .substrate(42)) let account = OpenBackupAccount( name: request.username, - address: address42 ?? wallet.substratePublicKey.toHex(), + address: address42 ?? substratePublicKey.toHex(), passphrase: request.mnemonic.toString(), cryptoType: request.cryptoType.stringValue.uppercased(), substrateDerivationPath: request.substrateDerivationPath, @@ -365,7 +388,7 @@ extension BackupCreatePasswordInteractor: BackupCreatePasswordInteractorInput { switch flow { case let .multiple(wallet, accounts): let ethereum = accounts.first(where: { $0.chain.isEthereumBased }) - guard let substrate = accounts.first(where: { $0.chain.chainBaseType == .substrate }) else { + guard let substrate = accounts.first(where: { $0.chain.ecosystem == .substrate }) else { return } let accounts = [substrate, ethereum].compactMap { $0 } diff --git a/fearless/Modules/BackupPassword/BackupPasswordInteractor.swift b/fearless/Modules/BackupPassword/BackupPasswordInteractor.swift index 6494f9ef12..2d186100d7 100644 --- a/fearless/Modules/BackupPassword/BackupPasswordInteractor.swift +++ b/fearless/Modules/BackupPassword/BackupPasswordInteractor.swift @@ -1,6 +1,7 @@ import UIKit import RobinHood import SSFCloudStorage +import SSFModels protocol BackupPasswordInteractorOutput: AnyObject { func didReceiveBackup(result: Result) diff --git a/fearless/Modules/BackupRiskWarnings/BackupRiskWarningsRouter.swift b/fearless/Modules/BackupRiskWarnings/BackupRiskWarningsRouter.swift index dbdf3f49f0..ec218633c4 100644 --- a/fearless/Modules/BackupRiskWarnings/BackupRiskWarningsRouter.swift +++ b/fearless/Modules/BackupRiskWarnings/BackupRiskWarningsRouter.swift @@ -4,9 +4,8 @@ final class BackupRiskWarningsRouter: BackupRiskWarningsRouterInput { func showCreateAccount( usernameModel: UsernameSetupModel, from view: ControllerBackedProtocol? - ) { - guard let controller = AccountCreateViewFactory - .createViewForOnboarding(model: usernameModel, flow: .backup)?.controller else { + ) { // TODO: - Select ecosystem + guard let controller = AccountCreateViewFactory.createViewForOnboarding(ecosystem: .regular, model: usernameModel, flow: .backup)?.controller else { return } diff --git a/fearless/Modules/BackupWallet/BackupWalletAssembly.swift b/fearless/Modules/BackupWallet/BackupWalletAssembly.swift index ad47c62361..640f4aabec 100644 --- a/fearless/Modules/BackupWallet/BackupWalletAssembly.swift +++ b/fearless/Modules/BackupWallet/BackupWalletAssembly.swift @@ -4,6 +4,7 @@ import RobinHood import SoraKeystore import SSFCloudStorage import SSFNetwork +import SSFModels final class BackupWalletAssembly { static func configureModule( diff --git a/fearless/Modules/BackupWallet/BackupWalletInteractor.swift b/fearless/Modules/BackupWallet/BackupWalletInteractor.swift index d7e1f85c70..ab2b8e5c8c 100644 --- a/fearless/Modules/BackupWallet/BackupWalletInteractor.swift +++ b/fearless/Modules/BackupWallet/BackupWalletInteractor.swift @@ -107,20 +107,24 @@ extension BackupWalletInteractor: BackupWalletInteractorInput { } func removeBackupFromGoogle() { - let address42 = try? wallet.substratePublicKey.toAddress(using: .substrate(42)) - let account = OpenBackupAccount(address: address42 ?? wallet.substratePublicKey.toHex()) - - Task { - do { - try await cloudStorage?.deleteBackup(account: account) - await MainActor.run { - output?.didReceiveRemove(result: .success(())) - } - } catch { - await MainActor.run { - output?.didReceiveRemove(result: .failure(error)) + switch wallet.ecosystem { + case .regular(let regular): + Task { + do { + let address42 = try? regular.substratePublicKey.toAddress(using: .substrate(42)) + let account = OpenBackupAccount(address: address42 ?? regular.substratePublicKey.toHex()) + try await cloudStorage?.deleteBackup(account: account) + await MainActor.run { + output?.didReceiveRemove(result: .success(())) + } + } catch { + await MainActor.run { + output?.didReceiveRemove(result: .failure(error)) + } } } + case .ton: + break } } diff --git a/fearless/Modules/BackupWallet/BackupWalletPresenter.swift b/fearless/Modules/BackupWallet/BackupWalletPresenter.swift index 1a85093ce4..661d6fbef1 100644 --- a/fearless/Modules/BackupWallet/BackupWalletPresenter.swift +++ b/fearless/Modules/BackupWallet/BackupWalletPresenter.swift @@ -78,7 +78,7 @@ final class BackupWalletPresenter { case .json: router.showKeystoreExport(flow: flow, from: view) case .backupGoogle, .removeGoogle: - let address42 = try? wallet.substratePublicKey.toAddress(using: .substrate(42)) + let address42 = try? wallet.ecosystem.substratePublicKey?.toAddress(using: .substrate(42)) if backupAccounts.or([]).contains(where: { $0.address == address42 }) { removeBackupFromGoogle() } else { @@ -252,8 +252,14 @@ extension BackupWalletPresenter: BackupWalletViewOutput { guard !googleAuthorized else { return } - view?.didStartLoading() - interactor.viewDidAppear() + // TODO: Ton google backup + switch wallet.ecosystem { + case .regular: + view?.didStartLoading() + interactor.viewDidAppear() + case .ton: + break + } } func backButtonDidTapped() { @@ -291,7 +297,7 @@ extension BackupWalletPresenter: BackupWalletInteractorOutput { .commonDone(preferredLanguages: selectedLocale.rLanguages) router.presentSuccessNotification(text, from: view) - let address42 = try? wallet.substratePublicKey.toAddress(using: .substrate(42)) + let address42 = try? wallet.ecosystem.substratePublicKey?.toAddress(using: .substrate(42)) backupAccounts?.removeAll(where: { $0.address == address42 }) provideViewModel() case let .failure(failure): diff --git a/fearless/Modules/BackupWallet/BackupWalletProtocols.swift b/fearless/Modules/BackupWallet/BackupWalletProtocols.swift index 9c7b3dc0db..acaa2a9fbb 100644 --- a/fearless/Modules/BackupWallet/BackupWalletProtocols.swift +++ b/fearless/Modules/BackupWallet/BackupWalletProtocols.swift @@ -1,3 +1,5 @@ +import SSFModels + typealias BackupWalletModuleCreationResult = ( view: BackupWalletViewInput, input: BackupWalletModuleInput diff --git a/fearless/Modules/BackupWallet/BackupWalletRouter.swift b/fearless/Modules/BackupWallet/BackupWalletRouter.swift index a9f282461f..a59c179daa 100644 --- a/fearless/Modules/BackupWallet/BackupWalletRouter.swift +++ b/fearless/Modules/BackupWallet/BackupWalletRouter.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels final class BackupWalletRouter: BackupWalletRouterInput { func showMnemonicExport( @@ -96,7 +97,7 @@ final class BackupWalletRouter: BackupWalletRouterInput { from view: ControllerBackedProtocol? ) { let module = WalletDetailsViewFactory - .createView(flow: .normal(wallet: wallet)) + .createView(flow: .normal(wallet: wallet), chains: nil) view?.controller.navigationController?.pushViewController(module.controller, animated: true) } } diff --git a/fearless/Modules/BackupWallet/BackupWalletViewModelFactory.swift b/fearless/Modules/BackupWallet/BackupWalletViewModelFactory.swift index 305507a951..00df9bbc59 100644 --- a/fearless/Modules/BackupWallet/BackupWalletViewModelFactory.swift +++ b/fearless/Modules/BackupWallet/BackupWalletViewModelFactory.swift @@ -3,6 +3,7 @@ import SoraFoundation import SSFCloudStorage import SSFModels import SoraKeystore +import SSFCrypto protocol BackupWalletViewModelFactoryProtocol { func createViewModel( @@ -63,6 +64,7 @@ final class BackupWalletViewModelFactory: BackupWalletViewModelFactoryProtocol { ) let logoutViewModel = createLogoutViewModel(locale: locale) return ProfileViewModel( + wallet: wallet, profileUserViewModel: profileUserViewModel, profileOptionViewModel: profileOptionViewModel, logoutViewModel: logoutViewModel @@ -77,14 +79,19 @@ final class BackupWalletViewModelFactory: BackupWalletViewModelFactoryProtocol { backupAccounts: [OpenBackupAccount]?, locale: Locale ) -> [ProfileOptionViewModelProtocol] { - let publicKey = wallet.substratePublicKey - let address = try? AddressFactory.address(for: publicKey, chainFormat: .substrate(42)) - var backupOptions: [BackupWalletOptions] = exportOptions.map { BackupWalletOptions(exportOptions: $0) } - if backupAccounts?.contains(where: { $0.address == address }) == true { - backupOptions.append(.removeGoogle) - } else if let backupAccounts = backupAccounts, !backupAccounts.contains(where: { $0.address == address }) { - backupOptions.append(.backupGoogle) + switch wallet.ecosystem { + case .regular(let regular): + let publicKey = regular.substratePublicKey + let address = try? AddressFactory.address(for: publicKey, chainFormat: .substrate(42)) + + if backupAccounts?.contains(where: { $0.address == address }) == true { + backupOptions.append(.removeGoogle) + } else if let backupAccounts = backupAccounts, !backupAccounts.contains(where: { $0.address == address }) { + backupOptions.append(.backupGoogle) + } + case .ton: + break } let optionViewModels = backupOptions.compactMap { (option) -> ProfileOptionViewModel? in @@ -155,7 +162,7 @@ final class BackupWalletViewModelFactory: BackupWalletViewModelFactoryProtocol { balance: WalletBalanceInfo?, locale: Locale ) -> WalletsManagmentCellViewModel { - let address = wallet.ethereumAddress?.toHex(includePrefix: true) + let address = wallet.ecosystem.ethereumAddress?.toHex(includePrefix: true) let accountScoreViewModel = AccountScoreViewModel(fetcher: accountScoreFetcher, address: address, chain: nil, settings: settings, eventCenter: EventCenter.shared, logger: Logger.shared) var fiatBalance: String = "" @@ -174,9 +181,11 @@ final class BackupWalletViewModelFactory: BackupWalletViewModelFactoryProtocol { return WalletsManagmentCellViewModel( isSelected: false, walletName: wallet.name, + icon: wallet.icon(), fiatBalance: fiatBalance, dayChange: dayChange, - accountScoreViewModel: accountScoreViewModel + accountScoreViewModel: accountScoreViewModel, + optionsAvailable: wallet.ecosystem.isRegular ) } diff --git a/fearless/Modules/BackupWalletName/WalletNameAssembly.swift b/fearless/Modules/BackupWalletName/WalletNameAssembly.swift index fa445c4757..6d0bded6ea 100644 --- a/fearless/Modules/BackupWalletName/WalletNameAssembly.swift +++ b/fearless/Modules/BackupWalletName/WalletNameAssembly.swift @@ -1,5 +1,6 @@ import UIKit import SoraFoundation +import SSFModels final class WalletNameAssembly { static func configureModule(with wallet: MetaAccountModel?) -> WalletNameModuleCreationResult? { diff --git a/fearless/Modules/BackupWalletName/WalletNameInteractor.swift b/fearless/Modules/BackupWalletName/WalletNameInteractor.swift index ebec45e3a9..8527af80d7 100644 --- a/fearless/Modules/BackupWalletName/WalletNameInteractor.swift +++ b/fearless/Modules/BackupWalletName/WalletNameInteractor.swift @@ -1,5 +1,6 @@ import UIKit import RobinHood +import SSFModels protocol WalletNameInteractorOutput: AnyObject { func didReceiveSaveOperation(result: Result) diff --git a/fearless/Modules/BackupWalletName/WalletNamePresenter.swift b/fearless/Modules/BackupWalletName/WalletNamePresenter.swift index c05c880239..7ce80eb48c 100644 --- a/fearless/Modules/BackupWalletName/WalletNamePresenter.swift +++ b/fearless/Modules/BackupWalletName/WalletNamePresenter.swift @@ -1,5 +1,6 @@ import Foundation import SoraFoundation +import SSFModels protocol WalletNameViewInput: ControllerBackedProtocol, HiddableBarWhenPushed, LoadableViewProtocol { func setInputViewModel(_ viewModel: InputViewModelProtocol) diff --git a/fearless/Modules/BalanceInfo/BalanceInfoDependencyContainer.swift b/fearless/Modules/BalanceInfo/BalanceInfoDependencyContainer.swift index 739c9d5e3a..ef72a61c79 100644 --- a/fearless/Modules/BalanceInfo/BalanceInfoDependencyContainer.swift +++ b/fearless/Modules/BalanceInfo/BalanceInfoDependencyContainer.swift @@ -20,8 +20,7 @@ final class BalanceInfoDepencyContainer { let operationManager = OperationManagerFacade.sharedManager let existentialDepositService = ExistentialDepositService( operationManager: operationManager, - chainRegistry: chainRegistry, - chainId: chainAsset.chain.chainId + chainRegistry: chainRegistry ) let balanceLocksFetcher = BalanceLocksFetchingFactory.buildBalanceLocksFetcher(for: chainAsset) diff --git a/fearless/Modules/BalanceLocksDetail/BalanceLocksDetailInteractor.swift b/fearless/Modules/BalanceLocksDetail/BalanceLocksDetailInteractor.swift index dcfbeb476d..b845fd47e2 100644 --- a/fearless/Modules/BalanceLocksDetail/BalanceLocksDetailInteractor.swift +++ b/fearless/Modules/BalanceLocksDetail/BalanceLocksDetailInteractor.swift @@ -1,5 +1,6 @@ import UIKit import SSFModels +import SSFAccountManagment final class BalanceLocksDetailInteractor { // MARK: - Private properties diff --git a/fearless/Modules/Banners/BannerCollectionViewCell.swift b/fearless/Modules/Banners/BannerCollectionViewCell.swift index 57fc8d210c..2e45f0a8b5 100644 --- a/fearless/Modules/Banners/BannerCollectionViewCell.swift +++ b/fearless/Modules/Banners/BannerCollectionViewCell.swift @@ -24,6 +24,7 @@ final class BannerCollectionViewCell: UICollectionViewCell { let label = UILabel() label.textColor = R.color.colorWhite() label.font = .h3Title + label.numberOfLines = 0 return label }() @@ -141,7 +142,7 @@ final class BannerCollectionViewCell: UICollectionViewCell { titleLabel.snp.makeConstraints { make in make.top.equalToSuperview().offset(16) make.leading.equalToSuperview().offset(UIConstants.bigOffset) - make.trailing.equalTo(closeButton.snp.leading).inset(16) + make.trailing.equalTo(closeButton.snp.leading).offset(16) } addSubview(subtitleLabel) @@ -152,7 +153,7 @@ final class BannerCollectionViewCell: UICollectionViewCell { } addSubview(actionButton) - actionButton.snp.makeConstraints { make in + actionButton.snp.remakeConstraints { make in make.top.greaterThanOrEqualTo(subtitleLabel.snp.bottom).offset(UIConstants.defaultOffset) make.leading.equalToSuperview().offset(UIConstants.bigOffset) make.bottom.equalToSuperview().inset(UIConstants.defaultOffset) diff --git a/fearless/Modules/Banners/BannersAssembly.swift b/fearless/Modules/Banners/BannersAssembly.swift index 90be3884a7..28b6113c78 100644 --- a/fearless/Modules/Banners/BannersAssembly.swift +++ b/fearless/Modules/Banners/BannersAssembly.swift @@ -1,6 +1,7 @@ import UIKit import SoraFoundation import RobinHood +import SSFModels final class BannersAssembly { static func configureModule( @@ -12,14 +13,15 @@ final class BannersAssembly { let walletProvider = UserDataStorageFacade.shared .createStreamableProvider( - filter: NSPredicate.selectedMetaAccount(), + filter: nil, sortDescriptors: [], mapper: AnyCoreDataMapper(ManagedMetaAccountMapper()) ) let interactor = BannersInteractor( walletProvider: walletProvider, - eventCenter: EventCenter.shared + eventCenter: EventCenter.shared, + userDefaults: ServiceAssembly.shared.userDefaults ) let router = BannersRouter() diff --git a/fearless/Modules/Banners/BannersInteractor.swift b/fearless/Modules/Banners/BannersInteractor.swift index 11864bd8f3..73f48eb68b 100644 --- a/fearless/Modules/Banners/BannersInteractor.swift +++ b/fearless/Modules/Banners/BannersInteractor.swift @@ -1,5 +1,7 @@ import UIKit +import SoraKeystore import RobinHood +import SSFModels protocol BannersInteractorOutput: AnyObject { func didReceive(error: Error) @@ -13,13 +15,16 @@ final class BannersInteractor { private let walletProvider: StreamableProvider private let eventCenter: EventCenterProtocol + private let userDefaults: SettingsManagerProtocol init( walletProvider: StreamableProvider, - eventCenter: EventCenterProtocol + eventCenter: EventCenterProtocol, + userDefaults: SettingsManagerProtocol ) { self.walletProvider = walletProvider self.eventCenter = eventCenter + self.userDefaults = userDefaults } // MARK: - Private methods @@ -28,6 +33,15 @@ final class BannersInteractor { // MARK: - BannersInteractorInput extension BannersInteractor: BannersInteractorInput { + var shouldShowAddWalletBanner: Bool { + get { + userDefaults.shouldShowAddWalletBanner + } + set { + userDefaults.shouldShowAddWalletBanner = newValue + } + } + func setup(with output: BannersInteractorOutput) { self.output = output } @@ -51,12 +65,20 @@ extension BannersInteractor: BannersInteractorInput { func subscribeToWallet() { let updateClosure: ([DataProviderChange]) -> Void = { [weak self] changes in - guard let selectedWallet = changes.firstToLastChange(filter: { wallet in - wallet.isSelected - }) else { + guard let wallet = changes.reduceToLastChange() else { return } - self?.output?.didReceive(wallet: selectedWallet.info) + self?.output?.didReceive(wallet: wallet.info) + changes.forEach { change in + switch change { + case .insert(newItem: let newItem): + self?.output?.didReceive(wallet: newItem.info) + case .update(newItem: let newItem): + self?.output?.didReceive(wallet: newItem.info) + case .delete(deletedIdentifier: let deletedIdentifier): + break + } + } } let failureClosure: (Error) -> Void = { [weak self] error in diff --git a/fearless/Modules/Banners/BannersPresenter.swift b/fearless/Modules/Banners/BannersPresenter.swift index 828ca7f5bc..2535d4bdb9 100644 --- a/fearless/Modules/Banners/BannersPresenter.swift +++ b/fearless/Modules/Banners/BannersPresenter.swift @@ -12,6 +12,7 @@ protocol BannersViewInput: ControllerBackedProtocol { } protocol BannersInteractorInput: AnyObject { + var shouldShowAddWalletBanner: Bool { get set } func setup(with output: BannersInteractorOutput) func markWalletAsBackedUp(_ wallet: MetaAccountModel) func subscribeToWallet() @@ -31,7 +32,7 @@ final class BannersPresenter { BannersViewModelFactory() }() - private var wallet: MetaAccountModel? + private var wallets: [MetaAccountModel] = [] // MARK: - Constructors @@ -49,7 +50,9 @@ final class BannersPresenter { self.interactor = interactor self.router = router self.type = type - self.wallet = wallet + if let wallet { + self.wallets.append(wallet) + } self.localizationManager = localizationManager } @@ -57,14 +60,16 @@ final class BannersPresenter { // MARK: - Private methods private func provideViewModel() { - guard let wallet = wallet else { - return - } - let viewModel = viewModelFactory.createViewModel(wallet: wallet, locale: selectedLocale) + let viewModel = viewModelFactory.createViewModel( + wallets: wallets, + locale: selectedLocale, + shouldShowAddWalletBanner: interactor.shouldShowAddWalletBanner + ) DispatchQueue.main.async { self.view?.didReceive(viewModel: viewModel) } - moduleOutput?.reloadBannersView() + + moduleOutput?.reloadBannersView(bannersCount: viewModel.banners.count) } private func showNotBackedUpAlert(wallet: MetaAccountModel) { @@ -102,7 +107,7 @@ final class BannersPresenter { extension BannersPresenter: BannersViewOutput { func didTapOnBanner(_ banner: Banners) { - guard let wallet = wallet else { + guard let wallet = SelectedWalletSettings.shared.value else { return } @@ -115,21 +120,31 @@ extension BannersPresenter: BannersViewOutput { router.presentLiquidityPools(on: view, wallet: wallet, chainId: Chain.soraMain.genesisHash) case .liquidityPoolsTest: router.presentLiquidityPools(on: view, wallet: wallet, chainId: Chain.soraTest.genesisHash) + case .addRegularWallet: + router.showCreateNewWallet(ecosystem: .regular, from: view) + case .addTonWallet: + router.showCreateNewWallet(ecosystem: .ton, from: view) } } func didCloseBanner(_ banner: Banners) { - guard let wallet = wallet else { - return - } - switch banner { case .backup: + guard let wallet = SelectedWalletSettings.shared.value else { + return + } showNotBackedUpAlert(wallet: wallet) case .buyXor: break case .liquidityPools, .liquidityPoolsTest: moduleOutput?.didTapCloseBanners() + case .addRegularWallet: + interactor.shouldShowAddWalletBanner = false + provideViewModel() + case .addTonWallet: + interactor.shouldShowAddWalletBanner = false + provideViewModel() + } } @@ -151,7 +166,8 @@ extension BannersPresenter: BannersInteractorOutput { } func didReceive(wallet: MetaAccountModel) { - self.wallet = wallet + self.wallets = self.wallets.filter { $0.metaId != wallet.metaId } + self.wallets.append(wallet) provideViewModel() } } @@ -164,12 +180,18 @@ extension BannersPresenter: Localizable { extension BannersPresenter: BannersModuleInput { func reload(with wallet: MetaAccountModel) { - self.wallet = wallet + self.wallets = self.wallets.filter { $0.metaId != wallet.metaId } + self.wallets.append(wallet) provideViewModel() } func update(banners: [Banners]) { let viewModel = viewModelFactory.createViewModel(banners: banners, locale: selectedLocale) + view?.didReceive(viewModel: viewModel) } + + func reload() { + provideViewModel() + } } diff --git a/fearless/Modules/Banners/BannersProtocols.swift b/fearless/Modules/Banners/BannersProtocols.swift index e28bddd444..398a928f3a 100644 --- a/fearless/Modules/Banners/BannersProtocols.swift +++ b/fearless/Modules/Banners/BannersProtocols.swift @@ -5,7 +5,7 @@ typealias BannersModuleCreationResult = ( input: BannersModuleInput ) -protocol BannersRouterInput: AnyObject, SheetAlertPresentable { +protocol BannersRouterInput: AnyObject, SheetAlertPresentable, AccountManagementPresentable { func showWalletBackupScreen( for wallet: MetaAccountModel, from view: ControllerBackedProtocol? @@ -21,9 +21,10 @@ protocol BannersRouterInput: AnyObject, SheetAlertPresentable { protocol BannersModuleInput: AnyObject { func reload(with wallet: MetaAccountModel) func update(banners: [Banners]) + func reload() } protocol BannersModuleOutput: AnyObject { - func reloadBannersView() + func reloadBannersView(bannersCount: Int) func didTapCloseBanners() } diff --git a/fearless/Modules/Banners/BannersViewModelFactory.swift b/fearless/Modules/Banners/BannersViewModelFactory.swift index a879911be5..c98850a10a 100644 --- a/fearless/Modules/Banners/BannersViewModelFactory.swift +++ b/fearless/Modules/Banners/BannersViewModelFactory.swift @@ -10,12 +10,15 @@ enum Banners: Int { case buyXor case liquidityPools case liquidityPoolsTest + case addRegularWallet + case addTonWallet } protocol BannersViewModelFactoryProtocol { func createViewModel( - wallet: MetaAccountModel, - locale: Locale + wallets: [MetaAccountModel], + locale: Locale, + shouldShowAddWalletBanner: Bool ) -> BannersViewModel func createViewModel(banners: [Banners], locale: Locale) -> BannersViewModel @@ -86,6 +89,26 @@ final class BannersViewModelFactory: BannersViewModelFactoryProtocol { fullsizeImage: true, bannerType: .liquidityPoolsTest ) + case .addRegularWallet: + return BannerCellViewModel( + title: R.string.localizable.bannerAddwalletRegularTitle(preferredLanguages: locale.rLanguages), + subtitle: R.string.localizable.bannerAddwalletRegularSubtitle(preferredLanguages: locale.rLanguages), + buttonTitle: R.string.localizable.bannerAddwalletRegularButtonTitle(preferredLanguages: locale.rLanguages), + image: R.image.regularBanner()!, + dismissable: true, + fullsizeImage: true, + bannerType: $0 + ) + case .addTonWallet: + return BannerCellViewModel( + title: R.string.localizable.bannerAddwalletTonTitle(preferredLanguages: locale.rLanguages), + subtitle: "", + buttonTitle: R.string.localizable.bannerAddwalletTonButtonTitle(preferredLanguages: locale.rLanguages), + image: R.image.tonBanner()!, + dismissable: true, + fullsizeImage: true, + bannerType: $0 + ) } } @@ -93,14 +116,24 @@ final class BannersViewModelFactory: BannersViewModelFactoryProtocol { } func createViewModel( - wallet: MetaAccountModel, - locale: Locale + wallets: [MetaAccountModel], + locale: Locale, + shouldShowAddWalletBanner: Bool ) -> BannersViewModel { var banners: [Banners] = [] - if !wallet.hasBackup { + if let wallet = SelectedWalletSettings.shared.value, !wallet.hasBackup { banners.insert(.backup, at: 0) } + if shouldShowAddWalletBanner { + let divided = wallets.divide(predicate: { $0.ecosystem.isRegular }) + if divided.slice.isEmpty { + banners.append(.addRegularWallet) + } else if divided.remainder.isEmpty { + banners.append(.addTonWallet) + } + } + return createViewModel(banners: banners, locale: locale) } } diff --git a/fearless/Modules/ClaimCrowdloanRewards/ClaimCrowdloanRewardsInteractor.swift b/fearless/Modules/ClaimCrowdloanRewards/ClaimCrowdloanRewardsInteractor.swift index 80b367d871..472644f490 100644 --- a/fearless/Modules/ClaimCrowdloanRewards/ClaimCrowdloanRewardsInteractor.swift +++ b/fearless/Modules/ClaimCrowdloanRewards/ClaimCrowdloanRewardsInteractor.swift @@ -3,6 +3,7 @@ import SSFUtils import SSFModels import RobinHood import SSFSigner +import SSFAccountManagment final class ClaimCrowdloanRewardsInteractor { // MARK: - Private properties diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsAssembly.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsAssembly.swift new file mode 100644 index 0000000000..2910386fe5 --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsAssembly.swift @@ -0,0 +1,44 @@ +import UIKit +import SoraFoundation +import SSFNetwork +import SoraKeystore + +final class ConnectedAccountsAssembly { + static func configureModule() -> ConnectedAccountsModuleCreationResult? { + guard let wallet = SelectedWalletSettings.shared.value else { + return nil + } + let localizationManager = LocalizationManager.shared + + let interactor = ConnectedAccountsInteractor( + wallet: wallet, + chainRepository: ServiceAssembly.shared.asyncChainModelRepository(), + walletBalanceSubscriptionAdapter: ServiceAssembly.shared.walletBalanceSubscriptionAdapter + ) + let router = ConnectedAccountsRouter() + + let accountScoreFetcher = NomisAccountStatisticsFetcher( + networkWorker: NetworkWorkerImpl(), + signer: NomisRequestSigner() + ) + let viewModelFactory = ConnectedAccountsViewModelFactoryImpl( + accountScoreFetcher: accountScoreFetcher, + settings: SettingsManager.shared + ) + + let presenter = ConnectedAccountsPresenter( + wallet: wallet, + viewModelFactory: viewModelFactory, + interactor: interactor, + router: router, + localizationManager: localizationManager + ) + + let view = ConnectedAccountsViewController( + output: presenter, + localizationManager: localizationManager + ) + + return (view, presenter) + } +} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsInteractor.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsInteractor.swift new file mode 100644 index 0000000000..150bc27c32 --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsInteractor.swift @@ -0,0 +1,61 @@ +import UIKit +import SSFModels +import RobinHood + +protocol ConnectedAccountsInteractorOutput: AnyObject { + func didReceiveWalletBalances(_ balances: Result<[MetaAccountId: WalletBalanceInfo], Error>) +} + +final class ConnectedAccountsInteractor { + // MARK: - Private properties + private weak var output: ConnectedAccountsInteractorOutput? + + private let wallet: MetaAccountModel + private let walletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterProtocol + private let chainRepository: AsyncAnyRepository + + init( + wallet: MetaAccountModel, + chainRepository: AsyncAnyRepository, + walletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterProtocol + ) { + self.wallet = wallet + self.chainRepository = chainRepository + self.walletBalanceSubscriptionAdapter = walletBalanceSubscriptionAdapter + } + + // MARK: - Private methods + + private func fetchBalances() { + walletBalanceSubscriptionAdapter.subscribeWalletBalance( + wallet: wallet, + listener: self + ) + } +} + +// MARK: - ConnectedAccountsInteractorInput +extension ConnectedAccountsInteractor: ConnectedAccountsInteractorInput { + var chains: [ChainModel] { + get async throws { + try await chainRepository.fetchAll() + } + } + + func setup(with output: ConnectedAccountsInteractorOutput) { + self.output = output + fetchBalances() + } +} + +// MARK: - WalletBalanceSubscriptionListener + +extension ConnectedAccountsInteractor: WalletBalanceSubscriptionListener { + var type: WalletBalanceListenerType { + .wallet(wallet: wallet) + } + + func handle(result: WalletBalancesResult) { + output?.didReceiveWalletBalances(result) + } +} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsPresenter.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsPresenter.swift new file mode 100644 index 0000000000..c2ba86c202 --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsPresenter.swift @@ -0,0 +1,151 @@ +import Foundation +import SSFModels +import SoraFoundation + +@MainActor +protocol ConnectedAccountsViewInput: ControllerBackedProtocol { + func didReceive(viewModels: [ConnectedAccountsViewModel]) +} + +protocol ConnectedAccountsInteractorInput: AnyObject { + func setup(with output: ConnectedAccountsInteractorOutput) + var chains: [ChainModel] { get async throws } +} + +final class ConnectedAccountsPresenter { + // MARK: Private properties + private weak var view: ConnectedAccountsViewInput? + private let router: ConnectedAccountsRouterInput + private let interactor: ConnectedAccountsInteractorInput + private let viewModelFactory: ConnectedAccountsViewModelFactory + private let wallet: MetaAccountModel + private lazy var logger: LoggerProtocol = Logger.shared + + private var balance: WalletBalanceInfo? + + // MARK: - Constructors + init( + wallet: MetaAccountModel, + viewModelFactory: ConnectedAccountsViewModelFactory, + interactor: ConnectedAccountsInteractorInput, + router: ConnectedAccountsRouterInput, + localizationManager: LocalizationManagerProtocol + ) { + self.wallet = wallet + self.viewModelFactory = viewModelFactory + self.interactor = interactor + self.router = router + self.localizationManager = localizationManager + } + + // MARK: - Private methods + + private func provideViewModel() { + Task { + let viewModel = viewModelFactory.buildViewModel( + wallet: wallet, + balance: balance, + chains: try await interactor.chains, + locale: selectedLocale + ) + await view?.didReceive(viewModels: viewModel) + } + } +} + +// MARK: - ConnectedAccountsViewOutput +extension ConnectedAccountsPresenter: ConnectedAccountsViewOutput { + func activateAccountDetails() { + switch wallet.ecosystem { + case .regular: + router.showAccountDetails(from: view, metaAccount: wallet) + case .ton: + break + } + } + + func didTapAccountScore(address: String?) { + router.presentAccountScore(address: address, from: view) + + } + + func didSelect(viewModel: ConnectedAccountsViewModel.Accounts) { + guard viewModel.count > 0 else { + // TODO: - Show Add account flow + return + } + router.showOptions( + from: view, + ecosystem: viewModel.ecosystem, + wallet: wallet, + chains: viewModel.chains, + moduleOutput: self + ) + } + + func dismiss() { + router.dismiss(view: view) + } + + func pop() { + router.dismiss(view: view) + } + + func didLoad(view: ConnectedAccountsViewInput) { + self.view = view + interactor.setup(with: self) + provideViewModel() + } +} + +// MARK: - ConnectedAccountsInteractorOutput +extension ConnectedAccountsPresenter: ConnectedAccountsInteractorOutput { + func didReceiveWalletBalances(_ balances: Result<[MetaAccountId: WalletBalanceInfo], any Error>) { + switch balances { + case let .success(balances): + balance = balances[wallet.metaId] + provideViewModel() + case let .failure(error): + logger.error("WalletsManagmentPresenter error: \(error.localizedDescription)") + } + } +} + +// MARK: - Localizable +extension ConnectedAccountsPresenter: Localizable { + func applyLocalization() {} +} + +extension ConnectedAccountsPresenter: ConnectedAccountsModuleInput {} + +// MARK: - EcosystemOptionsModuleOutput +extension ConnectedAccountsPresenter: EcosystemOptionsModuleOutput { + func showMnemonicExport(flow: ExportFlow) { + router.showMnemonicExport( + flow: flow, + from: view + ) + } + + func showKeystoreExport(flow: ExportFlow) { + router.showKeystoreExport( + flow: flow, + from: view + ) + } + + func showSeedExport(flow: ExportFlow) { + router.showSeedExport( + flow: flow, + from: view + ) + } + + func showWalletDetails(chains: [ChainModel]?) { + router.showWalletDetails( + view: view, + wallet: wallet, + chains: chains + ) + } +} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsProtocols.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsProtocols.swift new file mode 100644 index 0000000000..e06ee8ec33 --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsProtocols.swift @@ -0,0 +1,42 @@ +import SSFModels + +typealias ConnectedAccountsModuleCreationResult = ( + view: ConnectedAccountsViewInput, + input: ConnectedAccountsModuleInput +) + +protocol ConnectedAccountsRouterInput: AnyDismissable, AuthorizationPresentable, AccountScorePresentable { + func showAccountDetails( + from view: ControllerBackedProtocol?, + metaAccount: MetaAccountModel + ) + + func showOptions( + from view: ControllerBackedProtocol?, + ecosystem: Ecosystem, + wallet: MetaAccountModel, + chains: [ChainModel], + moduleOutput: EcosystemOptionsModuleOutput? + ) + func showWalletDetails( + view: ControllerBackedProtocol?, + wallet: MetaAccountModel, + chains: [ChainModel]? + ) + func showMnemonicExport( + flow: ExportFlow, + from view: ControllerBackedProtocol? + ) + func showKeystoreExport( + flow: ExportFlow, + from view: ControllerBackedProtocol? + ) + func showSeedExport( + flow: ExportFlow, + from view: ControllerBackedProtocol? + ) +} + +protocol ConnectedAccountsModuleInput: AnyObject {} + +protocol ConnectedAccountsModuleOutput: AnyObject {} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsRouter.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsRouter.swift new file mode 100644 index 0000000000..538c593470 --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsRouter.swift @@ -0,0 +1,110 @@ +import Foundation +import SSFModels + +final class ConnectedAccountsRouter: ConnectedAccountsRouterInput { + func showAccountDetails( + from view: ControllerBackedProtocol?, + metaAccount: MetaAccountModel + ) { + guard + let walletOptionsController = WalletOptionAssembly.configureModule( + with: metaAccount, + delegate: nil + )?.view.controller + else { + return + } + + view?.controller.present(walletOptionsController, animated: true) + } + + func showOptions( + from view: ControllerBackedProtocol?, + ecosystem: Ecosystem, + wallet: MetaAccountModel, + chains: [ChainModel], + moduleOutput: EcosystemOptionsModuleOutput? + ) { + guard let module = EcosystemOptionsAssembly.configureModule( + ecosystem: ecosystem, + wallet: wallet, + chains: chains, + moduleOutput: moduleOutput + ) else { + return + } + + view?.controller.present(module.view.controller, animated: true) + } + + func showWalletDetails( + view: ControllerBackedProtocol?, + wallet: MetaAccountModel, + chains: [ChainModel]? + ) { + let module = WalletDetailsViewFactory.createView(flow: .normal(wallet: wallet), chains: chains) + + view?.controller.navigationController?.pushViewController(module.controller, animated: true) + } + + func showMnemonicExport( + flow: ExportFlow, + from view: ControllerBackedProtocol? + ) { + authorize( + animated: true, + cancellable: true, + from: view + ) { isAuthorized in + guard + isAuthorized, + let mnemonicView = ExportMnemonicViewFactory.createViewForAddress( + flow: flow + ) else { + return + } + + view?.controller.navigationController?.pushViewController(mnemonicView.controller, animated: true) + } + } + + func showKeystoreExport( + flow: ExportFlow, + from view: ControllerBackedProtocol? + ) { + authorize( + animated: true, + cancellable: true, + from: view + ) { isAuthorized in + guard + isAuthorized, + let passwordView = AccountExportPasswordViewFactory.createView( + flow: flow + ) else { + return + } + + view?.controller.navigationController?.pushViewController(passwordView.controller, animated: true) + } + } + + func showSeedExport( + flow: ExportFlow, + from view: ControllerBackedProtocol? + ) { + authorize( + animated: true, + cancellable: true, + from: view + ) { isAuthorized in + guard + isAuthorized, + let seedView = ExportSeedViewFactory.createViewForAddress(flow: flow) else { + return + } + + view?.controller.navigationController?.pushViewController(seedView.controller, animated: true) + } + } +} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsTableCell.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsTableCell.swift new file mode 100644 index 0000000000..3ed86e2f44 --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsTableCell.swift @@ -0,0 +1,111 @@ +import UIKit +import SoraUI + +final class ConnectedAccountsTableCell: UITableViewCell { + enum Position { + case top + case middle + case bottom + case list + } + + let containerView: TriangularedView = { + let containerView = TriangularedView() + containerView.fillColor = R.color.colorWhite4()! + containerView.highlightedFillColor = R.color.colorWhite4()! + containerView.shadowOpacity = 0 + return containerView + }() + + let titleLabel: UILabel = { + let label = UILabel() + label.font = .p1Paragraph + return label + }() + + let countLabel: UILabel = { + let label = UILabel() + label.font = .p2Paragraph + label.textColor = R.color.colorWhite50() + label.numberOfLines = 2 + return label + }() + + private let optionsButton: UIButton = { + let button = UIButton() + button.clipsToBounds = true + button.isUserInteractionEnabled = false + return button + }() + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + setup() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func configure( + model: ConnectedAccountsViewModel.Accounts, + position: Position + ) { + titleLabel.text = model.title + if model.count > 0 { + countLabel.text = "\(model.count)" + optionsButton.setImage(R.image.iconHorMore(), for: .normal) + } else { + countLabel.text = nil + optionsButton.setImage(R.image.iconWarning(), for: .normal) + } + + switch position { + case .top, .middle: + containerView.cornerCut = .none + containerView.cornersRaduis = .none + case .bottom: + containerView.cornerCut = .bottomRight + containerView.cornersRaduis = .bottomLeft + case .list: + containerView.cornerCut = .none + containerView.cornersRaduis = .none + containerView.fillColor = R.color.colorBlack19()! + containerView.fillColor = R.color.colorBlack19()! + containerView.snp.remakeConstraints { make in + make.top.bottom.equalToSuperview() + make.leading.trailing.equalToSuperview().inset(4) + } + } + } + + func setup() { + selectionStyle = .none + backgroundColor = .clear + contentView.backgroundColor = .clear + contentView.addSubview(containerView) + + let hStackView = UIFactory.default.createHorizontalStackView() + containerView.addSubview(hStackView) + hStackView.addArrangedSubview(titleLabel) + hStackView.addArrangedSubview(countLabel) + hStackView.addArrangedSubview(optionsButton) + + containerView.snp.makeConstraints { make in + make.top.bottom.equalToSuperview() + make.leading.trailing.equalToSuperview().inset(16) + } + hStackView.snp.makeConstraints { make in + make.top.bottom.greaterThanOrEqualToSuperview().priority(.low) + make.leading.equalToSuperview().inset(12) + make.trailing.equalToSuperview() + make.centerY.equalToSuperview() + } + optionsButton.snp.makeConstraints { make in + make.size.equalTo(44) + } + titleLabel.setContentHuggingPriority(.defaultLow, for: .horizontal) + countLabel.setContentHuggingPriority(.defaultHigh, for: .horizontal) + } +} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsTableHeaderView.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsTableHeaderView.swift new file mode 100644 index 0000000000..3abcff4fb5 --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsTableHeaderView.swift @@ -0,0 +1,59 @@ +import UIKit +import SoraUI + +final class ConnectedAccountsTableHeaderView: UITableViewHeaderFooterView { + + let containerView: TriangularedView = { + let containerView = TriangularedView() + containerView.fillColor = R.color.colorWhite4()! + containerView.highlightedFillColor = R.color.colorWhite4()! + containerView.shadowOpacity = 0 + containerView.cornerCut = .topLeft + containerView.cornersRaduis = .topRight + return containerView + }() + + let titleLabel: UILabel = { + let label = UILabel() + label.font = .h5Title + label.textColor = .white + return label + }() + + override init(reuseIdentifier: String?) { + super.init(reuseIdentifier: reuseIdentifier) + setup() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override var intrinsicContentSize: CGSize { + CGSize(width: UIView.noIntrinsicMetric, height: 44) + } + + // MARK: - Private methods + + private func setup() { + let separator = UIFactory.default.createSeparatorView() + contentView.addSubview(containerView) + containerView.addSubview(titleLabel) + containerView.addSubview(separator) + + containerView.snp.makeConstraints { make in + make.top.bottom.equalToSuperview() + make.leading.trailing.equalToSuperview().inset(16) + } + titleLabel.snp.makeConstraints { make in + make.centerY.equalToSuperview() + make.leading.trailing.equalToSuperview().inset(12) + } + separator.snp.makeConstraints { make in + make.top.equalTo(titleLabel.snp.bottom).offset(8) + make.leading.trailing.equalToSuperview().inset(12) + make.height.equalTo(1.0 / UIScreen.main.scale) + } + } +} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewController.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewController.swift new file mode 100644 index 0000000000..164217ca62 --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewController.swift @@ -0,0 +1,190 @@ +import UIKit +import SSFModels +import SoraFoundation + +protocol ConnectedAccountsViewOutput: AnyObject { + func didLoad(view: ConnectedAccountsViewInput) + func didSelect(viewModel: ConnectedAccountsViewModel.Accounts) + func dismiss() + func pop() + func activateAccountDetails() + func didTapAccountScore(address: String?) +} + +enum ConnectedAccountsViewModel { + case wallet(WalletsManagmentCellViewModel) + case accounts([Accounts]) + + struct Accounts { + let title: String + let count: Int + let ecosystem: Ecosystem + let chains: [ChainModel] + } +} + +final class ConnectedAccountsViewController: UIViewController, ViewHolder, HiddableBarWhenPushed { + typealias RootViewType = ConnectedAccountsViewLayout + + // MARK: Private properties + private let output: ConnectedAccountsViewOutput + + private var viewModels: [ConnectedAccountsViewModel] = [] + + // MARK: - Constructor + init( + output: ConnectedAccountsViewOutput, + localizationManager: LocalizationManagerProtocol? + ) { + self.output = output + super.init(nibName: nil, bundle: nil) + self.localizationManager = localizationManager + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Life cycle + override func loadView() { + view = ConnectedAccountsViewLayout() + } + + override func viewDidLoad() { + super.viewDidLoad() + output.didLoad(view: self) + setupTableView() + bindActions() + } + + // MARK: - Private methods + + private func setupTableView() { + rootView.tableView.delegate = self + rootView.tableView.dataSource = self + rootView.tableView.registerClassForCell(WalletsManagmentTableCell.self) + rootView.tableView.registerClassForCell(ConnectedAccountsTableCell.self) + rootView.tableView.separatorStyle = .none + } + + private func bindActions() { + rootView.closeButton.addAction { [weak self] in + self?.output.dismiss() + } + rootView.navigationBar.backButton.addAction { [weak self] in + self?.output.pop() + } + } +} + +// MARK: - ConnectedAccountsViewInput +extension ConnectedAccountsViewController: ConnectedAccountsViewInput { + func didReceive(viewModels: [ConnectedAccountsViewModel]) { + self.viewModels = viewModels + rootView.tableView.reloadData() + } +} + +// MARK: - Localizable +extension ConnectedAccountsViewController: Localizable { + func applyLocalization() { + rootView.locale = selectedLocale + } +} + +// MARK: - UITableViewDataSource + +extension ConnectedAccountsViewController: UITableViewDataSource { + func numberOfSections(in _: UITableView) -> Int { + viewModels.count + } + + func tableView(_: UITableView, numberOfRowsInSection section: Int) -> Int { + switch viewModels[section] { + case .wallet: + return 1 + case let .accounts(accounts): + return accounts.count + } + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + switch viewModels[indexPath.section] { + case let .wallet(viewModel): + guard let cell = tableView.dequeueReusableCellWithType(WalletsManagmentTableCell.self) else { + return UITableViewCell() + } + cell.bind(to: viewModel) + cell.hideScore() + cell.delegate = self + return cell + case let .accounts(viewModels): + let cell = tableView.dequeueReusableCellWithType(ConnectedAccountsTableCell.self, forIndexPath: indexPath) + + var position: ConnectedAccountsTableCell.Position = .middle + if indexPath.row == 0, tableView.numberOfRows(inSection: indexPath.section) > 1 { + position = .top + } else if indexPath.row == tableView.numberOfRows(inSection: indexPath.section) - 1 { + position = .bottom + } + let viewModel = viewModels[indexPath.row] + cell.configure(model: viewModel, position: position) + return cell + } + } +} + +// MARK: - UITableViewDelegate + +extension ConnectedAccountsViewController: UITableViewDelegate { + func tableView(_: UITableView, viewForHeaderInSection section: Int) -> UIView? { + switch viewModels[section] { + case .wallet: + return nil + case .accounts: + let view = ConnectedAccountsTableHeaderView() + view.titleLabel.text = R.string.localizable.connectedAccountsCommon(preferredLanguages: selectedLocale.rLanguages) + return view + } + } + + func tableView(_: UITableView, heightForHeaderInSection section: Int) -> CGFloat { + switch viewModels[section] { + case .wallet: + return 0 + case .accounts: + return 44 + } + } + + func tableView(_: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + switch viewModels[indexPath.section] { + case .wallet: + return 86 + case .accounts: + return 48 + } + } + + func tableView(_: UITableView, didSelectRowAt indexPath: IndexPath) { + guard + let section = viewModels[safe: indexPath.section], + case let .accounts(accountsModel) = section, + let viewModel = accountsModel[safe: indexPath.row] + else { + return + } + output.didSelect(viewModel: viewModel) + } +} + +extension ConnectedAccountsViewController: WalletsManagmentTableCellDelegate { + func didTapOptionsCell(with _: IndexPath?) { + output.activateAccountDetails() + } + + func didTapAccountScore(address: String?) { + output.didTapAccountScore(address: address) + } +} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewLayout.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewLayout.swift new file mode 100644 index 0000000000..1d4fbeeec1 --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewLayout.swift @@ -0,0 +1,74 @@ +import UIKit + +final class ConnectedAccountsViewLayout: UIView { + + var locale: Locale = .current { + didSet { + applyLocalization() + } + } + + let navigationBar: BaseNavigationBar = { + let bar = BaseNavigationBar() + bar.set(.push) + bar.backButton.backgroundColor = R.color.colorWhite8() + bar.backgroundColor = R.color.colorBlack19() + return bar + }() + + let closeButton: UIButton = { + let button = UIButton() + button.setImage(R.image.iconClose(), for: .normal) + button.layer.masksToBounds = true + button.backgroundColor = R.color.colorWhite8() + return button + }() + + let tableView: UITableView = { + let view = UITableView(frame: .zero, style: .grouped) + view.separatorStyle = .none + view.contentInset = .zero + view.backgroundColor = R.color.colorBlack19() + return view + }() + + override init(frame: CGRect) { + super.init(frame: frame) + setupLayout() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func layoutSubviews() { + super.layoutSubviews() + navigationBar.backButton.rounded() + closeButton.rounded() + } + + // MARK: - Private methods + + private func setupLayout() { + backgroundColor = R.color.colorBlack19() + navigationBar.setRightViews([closeButton]) + closeButton.snp.makeConstraints { make in + make.size.equalTo(32) + } + + addSubview(navigationBar) + navigationBar.snp.makeConstraints { make in + make.top.leading.trailing.equalToSuperview() + } + + addSubview(tableView) + tableView.snp.makeConstraints { make in + make.top.equalTo(navigationBar.snp.bottom) + make.leading.trailing.equalToSuperview() + make.bottom.equalTo(safeAreaLayoutGuide) + } + } + + private func applyLocalization() {} +} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift new file mode 100644 index 0000000000..81f16d8942 --- /dev/null +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsViewModelFactory.swift @@ -0,0 +1,179 @@ +import Foundation +import SoraFoundation +import SSFModels +import SoraKeystore + +protocol ConnectedAccountsViewModelFactory { + func buildViewModel( + wallet: MetaAccountModel, + balance: WalletBalanceInfo?, + chains: [ChainModel], + locale: Locale + ) -> [ConnectedAccountsViewModel] +} + +final class ConnectedAccountsViewModelFactoryImpl: ConnectedAccountsViewModelFactory { + + private lazy var assetBalanceFormatterFactory = AssetBalanceFormatterFactory() + private let accountScoreFetcher: AccountStatisticsFetching + private let settings: SettingsManagerProtocol + + init( + accountScoreFetcher: AccountStatisticsFetching, + settings: SettingsManagerProtocol + ) { + self.accountScoreFetcher = accountScoreFetcher + self.settings = settings + } + + func buildViewModel( + wallet: MetaAccountModel, + balance: WalletBalanceInfo?, + chains: [ChainModel], + locale: Locale + ) -> [ConnectedAccountsViewModel] { + let walletViewModel = createUserViewModel( + from: wallet, + balance: balance, + locale: locale + ) + + let accountsViewModel = createAccountsViewModel( + chains: chains, + wallet: wallet, + locale: locale + ) + + let viewModel: [ConnectedAccountsViewModel] = [ + .wallet(walletViewModel), + .accounts(accountsViewModel) + ] + return viewModel + } + + // MARK: - Private methods + + private func createUserViewModel( + from wallet: MetaAccountModel, + balance: WalletBalanceInfo?, + locale: Locale + ) -> WalletsManagmentCellViewModel { + var fiatBalance: String = "" + var dayChange: NSAttributedString? + if let balance = balance { + let formatter = tokenFormatter(for: balance.currency, locale: locale) + fiatBalance = formatter.stringFromDecimal(balance.totalFiatValue) ?? "" + dayChange = getDayChangeAttributedString( + currency: balance.currency, + dayChange: balance.dayChangePercent, + dayChangeValue: balance.dayChangeValue, + locale: locale + ) + } + + return WalletsManagmentCellViewModel( + isSelected: false, + walletName: wallet.name, + icon: wallet.icon(), + fiatBalance: fiatBalance, + dayChange: dayChange, + accountScoreViewModel: nil, + optionsAvailable: wallet.ecosystem.isRegular + ) + } + + private func createAccountsViewModel( + chains: [ChainModel], + wallet: MetaAccountModel, + locale: Locale + ) -> [ConnectedAccountsViewModel.Accounts] { + var accountsViewModel: [ConnectedAccountsViewModel.Accounts] = [] + + let mapped = chains.reduce([Ecosystem: [ChainModel]]()) { partialResult, chain in + var part = partialResult + switch chain.ecosystem { + case .substrate, .ethereum: + var possibleValues = partialResult[chain.ecosystem] ?? [] + possibleValues.append(chain) + part[chain.ecosystem] = possibleValues + case .ethereumBased: + var possibleValues = partialResult[.ethereum] ?? [] + possibleValues.append(chain) + part[.ethereum] = possibleValues + case .ton: + break + } + return part + } + + mapped.forEach { ecosystem, chains in + let title: String + var count: Int + switch ecosystem { + case .substrate: + title = R.string.localizable.connectedAccountsSubstrateTitle(preferredLanguages: locale.rLanguages) + count = chains.map { wallet.fetch(for: $0.accountRequest())?.accountId }.filter { $0 != nil }.count + case .ethereum, .ethereumBased: + title = R.string.localizable.connectedAccountsEthereumTitle(preferredLanguages: locale.rLanguages) + count = chains.map { wallet.fetch(for: $0.accountRequest())?.accountId }.filter { $0 != nil }.count + case .ton: + title = R.string.localizable.connectedAccountsTonTitle(preferredLanguages: locale.rLanguages) + count = chains.map { wallet.fetch(for: $0.accountRequest())?.accountId }.filter { $0 != nil }.count + } + let accounts = ConnectedAccountsViewModel.Accounts( + title: title, + count: count, + ecosystem: ecosystem, + chains: chains + ) + accountsViewModel.append(accounts) + } + + return accountsViewModel.sorted(by: { $0.count > $1.count }) + } + + private func tokenFormatter(for currency: Currency, locale: Locale) -> TokenFormatter { + let balanceDisplayInfo = AssetBalanceDisplayInfo.forCurrency(currency) + let balanceTokenFormatter = assetBalanceFormatterFactory.createTokenFormatter(for: balanceDisplayInfo, usageCase: .detailsCrypto) + let balanceTokenFormatterValue = balanceTokenFormatter.value(for: locale) + return balanceTokenFormatterValue + } + + private func getDayChangeAttributedString( + currency: Currency, + dayChange: Decimal, + dayChangeValue: Decimal, + locale: Locale + ) -> NSAttributedString? { + let balanceTokenFormatterValue = tokenFormatter(for: currency, locale: locale) + let dayChangePercent = dayChange.percentString(locale: locale) ?? "" + + var dayChangeValue: String = balanceTokenFormatterValue.stringFromDecimal(abs(dayChangeValue)) ?? "" + dayChangeValue = "(\(dayChangeValue))" + let priceWithChangeString = [dayChangePercent, dayChangeValue].joined(separator: " ") + let priceWithChangeAttributed = NSMutableAttributedString(string: priceWithChangeString) + + let color = dayChange > 0 + ? R.color.colorGreen() + : R.color.colorRed() + + if let color = color, let colorLightGray = R.color.colorStrokeGray() { + priceWithChangeAttributed.addAttributes( + [NSAttributedString.Key.foregroundColor: color], + range: NSRange( + location: 0, + length: dayChangePercent.count + ) + ) + priceWithChangeAttributed.addAttributes( + [NSAttributedString.Key.foregroundColor: colorLightGray], + range: NSRange( + location: dayChangePercent.count + 1, + length: dayChangeValue.count + ) + ) + } + + return priceWithChangeAttributed + } +} diff --git a/fearless/Modules/Coordinators/WalletConnectCoordinator.swift b/fearless/Modules/Coordinators/WalletConnectCoordinator.swift index 08276ac03c..5b6c888893 100644 --- a/fearless/Modules/Coordinators/WalletConnectCoordinator.swift +++ b/fearless/Modules/Coordinators/WalletConnectCoordinator.swift @@ -2,11 +2,17 @@ import Foundation import SoraFoundation import WalletConnectSign import UIKit +import SSFNetwork +import SSFModels final class WalletConnectCoordinator: DefaultCoordinator { + static let shared = WalletConnectCoordinator() + // MARK: - Private properties private let walletConnect: WalletConnectService = WalletConnectServiceImpl.shared + private let tonConnect: TonConnectService = ServiceAssembly.shared.tonConnectService() + private lazy var router: WalletConnectCoordinatorRouter = { WalletConnectCoordinatorRouterImpl() }() @@ -15,9 +21,10 @@ final class WalletConnectCoordinator: DefaultCoordinator { ApplicationHandler() }() - override init() { + override private init() { super.init() walletConnect.set(listener: self) + Task { await tonConnect.set(listener: self) } applicationHandler.delegate = self } @@ -52,7 +59,10 @@ final class WalletConnectCoordinator: DefaultCoordinator { extension WalletConnectCoordinator: WalletConnectServiceDelegate { func sign(request: Request, session: Session?) { - let coordinator = WalletConnectSessionCoordinator(router: router, request: request, session: session) + let coordinator = WalletConnectSessionCoordinator( + router: router, + variant: .walletConnect(request: request, session: session) + ) coordinator.finishFlow = { [weak self, weak coordinator] in self?.removeChildCoordinator(coordinator) self?.router.dismiss { [weak self] in @@ -63,7 +73,10 @@ extension WalletConnectCoordinator: WalletConnectServiceDelegate { } func session(proposal: Session.Proposal) { - let coordinator = WalletConnectProposalCoordinator(router: router, proposal: proposal) + let coordinator = WalletConnectProposalCoordinator( + router: router, + proposal: .walletConnect(proposal) + ) coordinator.finishFlow = { [weak self, weak coordinator] in self?.removeChildCoordinator(coordinator) self?.router.dismiss { [weak self] in @@ -74,6 +87,95 @@ extension WalletConnectCoordinator: WalletConnectServiceDelegate { } } +extension WalletConnectCoordinator: TonConnectServiceDelegate { + func send( + request: TonConnect.AppRequest, + walletId: SSFModels.MetaAccountId, + app: TonConnectApp + ) { + let coordinator = WalletConnectSessionCoordinator( + router: router, + variant: .tonConnect( + request: request, + walletId: walletId, + app: app + ) + ) + coordinator.finishFlow = { [weak self, weak coordinator] in + self?.removeChildCoordinator(coordinator) + self?.router.dismiss { [weak self] in + self?.presentNextIfPossible() + } + } + Task { @MainActor in + startIfPossible(with: coordinator) + } + } + + func send( + request: TonConnect.AppRequest, + invocationId: String, + wallet: MetaAccountModel, + dapp: TonDapp, + delegate: (any WalletConnectSessionModuleOutput)? + ) { + let coordinator = WalletConnectSessionCoordinator( + router: router, + variant: .tonJsBridge( + invocationId: invocationId, + wallet: wallet, + dapp: dapp, + request: request, + delegate: delegate + ) + ) + coordinator.finishFlow = { [weak self, weak coordinator] in + self?.removeChildCoordinator(coordinator) + self?.router.dismiss { [weak self] in + self?.presentNextIfPossible() + } + } + Task { @MainActor in + startIfPossible(with: coordinator) + } + } + + func suggestConnect( + manifest: TonConnectManifest, + requestPayload: TonConnectParameters, + invocationId: String?, + delegate: (any WalletConnectProposalModuleOutput)? + ) { + let proposal: ConnectProposal + if let invocationId, let delegate { + proposal = .tonJsBridge( + manifest: manifest, + requestPayload: requestPayload, + invocationId: invocationId, + delegate: delegate + ) + } else { + proposal = .tonConnect( + manifest: manifest, + requestPayload: requestPayload + ) + } + let coordinator = WalletConnectProposalCoordinator( + router: router, + proposal: proposal + ) + coordinator.finishFlow = { [weak self, weak coordinator] in + self?.removeChildCoordinator(coordinator) + self?.router.dismiss { [weak self] in + self?.presentNextIfPossible() + } + } + Task { @MainActor in + startIfPossible(with: coordinator) + } + } +} + // MARK: - ApplicationHandlerDelegate extension WalletConnectCoordinator: ApplicationHandlerDelegate { diff --git a/fearless/Modules/Coordinators/WalletConnectProposalCoordinator.swift b/fearless/Modules/Coordinators/WalletConnectProposalCoordinator.swift index 305ce67960..1230242933 100644 --- a/fearless/Modules/Coordinators/WalletConnectProposalCoordinator.swift +++ b/fearless/Modules/Coordinators/WalletConnectProposalCoordinator.swift @@ -1,13 +1,45 @@ import Foundation import WalletConnectSign +enum ConnectProposal { + case walletConnect(Session.Proposal) + case tonJsBridge( + manifest: TonConnectManifest, + requestPayload: TonConnectParameters, + invocationId: String, + delegate: (any WalletConnectProposalModuleOutput)? + ) + case tonConnect( + manifest: TonConnectManifest, + requestPayload: TonConnectParameters + ) + + var walletConnectProposal: Session.Proposal? { + switch self { + case let .walletConnect(proposal): return proposal + case .tonJsBridge, .tonConnect: return nil + } + } + + var tonConnectManifest: TonConnectManifest? { + switch self { + case .walletConnect, .tonConnect: return nil + case let .tonJsBridge(manifest, _, _, _): return manifest + } + } +} + +enum ActionConnect { + case walletConnect(Session) +} + final class WalletConnectProposalCoordinator: DefaultCoordinator, CoordinatorFinishOutput { private let router: WalletConnectCoordinatorRouter - private let proposal: Session.Proposal + private let proposal: ConnectProposal init( router: WalletConnectCoordinatorRouter, - proposal: Session.Proposal + proposal: ConnectProposal ) { self.router = router self.proposal = proposal @@ -26,7 +58,29 @@ final class WalletConnectProposalCoordinator: DefaultCoordinator, CoordinatorFin // MARK: - Private methods private func runFlow() { - let module = WalletConnectProposalAssembly.configureModule(status: .proposal(proposal)) + let module: WalletConnectProposalModuleCreationResult? + switch proposal { + case let .walletConnect(proposal): + module = WalletConnectProposalAssembly.configureModule( + status: .proposal(.walletConnect(proposal)) + ) + case let .tonJsBridge(manifest, requestPayload, invocationId, delegate): + module = WalletConnectProposalAssembly.configureModule( + status: .proposal(.tonJsBridge( + manifest: manifest, + requestPayload: requestPayload, + invocationId: invocationId, + delegate: delegate + )) + ) + case let .tonConnect(manifest, requestPayload): + module = WalletConnectProposalAssembly.configureModule( + status: .proposal(.tonConnect( + manifest: manifest, + requestPayload: requestPayload + )) + ) + } guard let controller = module?.view.controller else { return } diff --git a/fearless/Modules/Coordinators/WalletConnectSessionCoordinator.swift b/fearless/Modules/Coordinators/WalletConnectSessionCoordinator.swift index ca9ce28782..05f902fa45 100644 --- a/fearless/Modules/Coordinators/WalletConnectSessionCoordinator.swift +++ b/fearless/Modules/Coordinators/WalletConnectSessionCoordinator.swift @@ -3,17 +3,14 @@ import WalletConnectSign final class WalletConnectSessionCoordinator: DefaultCoordinator, CoordinatorFinishOutput { private let router: WalletConnectCoordinatorRouter - private let request: Request - private let session: Session? + private let variant: ConnectRequestVariant init( router: WalletConnectCoordinatorRouter, - request: Request, - session: Session? + variant: ConnectRequestVariant ) { self.router = router - self.request = request - self.session = session + self.variant = variant } // MARK: - CoordinatorFinishOutput @@ -29,7 +26,7 @@ final class WalletConnectSessionCoordinator: DefaultCoordinator, CoordinatorFini // MARK: - Private methods private func runFlow() { - let module = WalletConnectSessionAssembly.configureModule(request: request, session: session) { [weak self] inputData in + let module = WalletConnectSessionAssembly.configureModule(variant: variant) { [weak self] inputData in self?.presentConfirmation(inputData: inputData) } guard let controller = module?.view.controller else { diff --git a/fearless/Modules/CreateContact/CreateContactInteractor.swift b/fearless/Modules/CreateContact/CreateContactInteractor.swift index af23a825b9..00464fece5 100644 --- a/fearless/Modules/CreateContact/CreateContactInteractor.swift +++ b/fearless/Modules/CreateContact/CreateContactInteractor.swift @@ -1,5 +1,6 @@ import UIKit import SSFModels +import SSFCrypto final class CreateContactInteractor { // MARK: - Private properties diff --git a/fearless/Modules/CrossChain/CrossChainAssembly.swift b/fearless/Modules/CrossChain/CrossChainAssembly.swift index de917264a2..4bb44850ec 100644 --- a/fearless/Modules/CrossChain/CrossChainAssembly.swift +++ b/fearless/Modules/CrossChain/CrossChainAssembly.swift @@ -42,8 +42,7 @@ final class CrossChainAssembly { let existentialDepositService = ExistentialDepositService( operationManager: OperationManagerFacade.sharedManager, - chainRegistry: chainRegistry, - chainId: chainAsset.chain.chainId + chainRegistry: chainRegistry ) let runtimeService = chainRegistry.getRuntimeProvider(for: chainAsset.chain.chainId) let storageRequestPerformer: StorageRequestPerformer? = runtimeService.flatMap { diff --git a/fearless/Modules/CrossChain/CrossChainInteractor.swift b/fearless/Modules/CrossChain/CrossChainInteractor.swift index 383b992095..d43c880f44 100644 --- a/fearless/Modules/CrossChain/CrossChainInteractor.swift +++ b/fearless/Modules/CrossChain/CrossChainInteractor.swift @@ -4,6 +4,7 @@ import RobinHood import BigInt import SSFExtrinsicKit import SSFModels +import SSFCrypto protocol CrossChainInteractorOutput: AnyObject { func didReceiveAccountInfo( diff --git a/fearless/Modules/CrossChain/CrossChainPresenter.swift b/fearless/Modules/CrossChain/CrossChainPresenter.swift index cd3959a42d..d022010f76 100644 --- a/fearless/Modules/CrossChain/CrossChainPresenter.swift +++ b/fearless/Modules/CrossChain/CrossChainPresenter.swift @@ -6,6 +6,7 @@ import SSFExtrinsicKit import SSFUtils import SSFModels import SSFQRService +import SSFCrypto protocol CrossChainViewInput: ControllerBackedProtocol, LoadableViewProtocol { func didReceive(assetBalanceViewModel: AssetBalanceViewModelProtocol?) diff --git a/fearless/Modules/CrossChain/CrossChainViewController.swift b/fearless/Modules/CrossChain/CrossChainViewController.swift index ece2e86f75..7897b7048d 100644 --- a/fearless/Modules/CrossChain/CrossChainViewController.swift +++ b/fearless/Modules/CrossChain/CrossChainViewController.swift @@ -112,7 +112,7 @@ final class CrossChainViewController: UIViewController, ViewHolder, HiddableBarW } private func updatePreviewButton() { - let isEnabled = amountInputViewModel?.isValid == true && rootView.searchView.textField.text.or("").isNotEmpty && rootView.searchView.isValid + let isEnabled = amountInputViewModel?.isValid == true && rootView.searchView.textField.text.or("").isNotEmpty && (rootView.searchView.isValid != nil) rootView.actionButton.set(enabled: isEnabled, changeStyle: true) } } diff --git a/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationInteractor.swift b/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationInteractor.swift index 892ca4db56..3c46725143 100644 --- a/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationInteractor.swift +++ b/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationInteractor.swift @@ -3,6 +3,7 @@ import SSFXCM import RobinHood import BigInt import SSFModels +import SSFCrypto protocol CrossChainConfirmationInteractorOutput: AnyObject { func didTransfer(result: Result) diff --git a/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationProtocols.swift b/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationProtocols.swift index 2d9fbc36c7..a65bb7bf05 100644 --- a/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationProtocols.swift +++ b/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationProtocols.swift @@ -1,4 +1,3 @@ - import SSFModels typealias CrossChainConfirmationModuleCreationResult = ( view: CrossChainConfirmationViewInput, @@ -10,8 +9,7 @@ protocol CrossChainConfirmationRouterInput: ErrorPresentable, BaseErrorPresentable, ModalAlertPresenting, - SheetAlertPresentable -{ + SheetAlertPresentable { func complete( on view: ControllerBackedProtocol?, title: String, diff --git a/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationViewModelFactory.swift b/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationViewModelFactory.swift index a6e636d87d..8b92e671ed 100644 --- a/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationViewModelFactory.swift +++ b/fearless/Modules/CrossChainConfirmation/CrossChainConfirmationViewModelFactory.swift @@ -10,7 +10,7 @@ final class CrossChainConfirmationViewModelFactory: CrossChainConfirmationViewMo hex: data.originChainAsset.asset.color )?.cgColor let originSymbolViewModel = SymbolViewModel( - symbolViewModel: data.originChainAsset.chain.icon.map { RemoteImageViewModel(url: $0) }, + iconViewModel: data.originChainAsset.chain.icon.map { RemoteImageViewModel(url: $0) }, shadowColor: originShadowColor ) @@ -18,13 +18,13 @@ final class CrossChainConfirmationViewModelFactory: CrossChainConfirmationViewMo hex: data.originChainAsset.asset.color )?.cgColor let destSymbolViewModel = SymbolViewModel( - symbolViewModel: data.destChainModel.icon.map { RemoteImageViewModel(url: $0) }, + iconViewModel: data.destChainModel.icon.map { RemoteImageViewModel(url: $0) }, shadowColor: destShadowColor ) let doubleImageViewViewModel = PolkaswapDoubleSymbolViewModel( - leftViewModel: originSymbolViewModel.symbolViewModel, - rightViewModel: destSymbolViewModel.symbolViewModel, + leftViewModel: originSymbolViewModel.iconViewModel, + rightViewModel: destSymbolViewModel.iconViewModel, leftShadowColor: originShadowColor, rightShadowColor: destShadowColor ) diff --git a/fearless/Modules/CrossChainConfirmation/CrossChainDepsContainer.swift b/fearless/Modules/CrossChainConfirmation/CrossChainDepsContainer.swift index 1e9c2d76db..a2baeac5bb 100644 --- a/fearless/Modules/CrossChainConfirmation/CrossChainDepsContainer.swift +++ b/fearless/Modules/CrossChainConfirmation/CrossChainDepsContainer.swift @@ -41,13 +41,10 @@ final class CrossChainDepsContainer { originalChainAsset: originalChainAsset, originalRuntimeMetadataItem: originalRuntimeMetadataItem ) - let existentialDepositService = (destChainModel?.chainId).map { - ExistentialDepositService( - operationManager: OperationManagerFacade.sharedManager, - chainRegistry: chainRegistry, - chainId: $0 - ) - } + let existentialDepositService = ExistentialDepositService( + operationManager: OperationManagerFacade.sharedManager, + chainRegistry: chainRegistry + ) let storageRequestPerformer: StorageRequestPerformer? = (destChainModel?.chainId).flatMap { guard let runtimeService = chainRegistry.getRuntimeProvider(for: $0), @@ -99,12 +96,11 @@ final class CrossChainDepsContainer { cryptoType: cryptoType, chainMetadata: originalRuntimeMetadataItem, accountId: accountId, - signingWrapperData: signingWrapperData, - chainType: originalChainAsset.chain.chainBaseType + signingWrapperData: signingWrapperData ) let sourceConfig = ApplicationConfig.shared - let services = XcmAssembly.createExtrincisServices( + let services = try XcmAssembly.createExtrincisServices( fromChainData: fromChainData, sourceConfig: sourceConfig, chainRegistry: ChainRegistryFacade.sharedRegistry @@ -119,9 +115,7 @@ final class CrossChainDepsContainer { accountResponse: ChainAccountResponse ) throws -> Data { let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil - let tag: String = chain.isEthereumBased - ? KeystoreTagV2.ethereumSecretKeyTagForMetaId(metaId, accountId: accountId) - : KeystoreTagV2.substrateSecretKeyTagForMetaId(metaId, accountId: accountId) + let tag: String = KeystoreTagV2.secretKeyTag(for: chain.ecosystem, metaId: metaId, accountId: accountId) let keystore = Keychain() let secretKey = try keystore.fetchKey(for: tag) diff --git a/fearless/Modules/Crowdloan/CrowdloanContribution/CrowdloanContributionInteractor.swift b/fearless/Modules/Crowdloan/CrowdloanContribution/CrowdloanContributionInteractor.swift index 58d83c28f9..a5b864d12e 100644 --- a/fearless/Modules/Crowdloan/CrowdloanContribution/CrowdloanContributionInteractor.swift +++ b/fearless/Modules/Crowdloan/CrowdloanContribution/CrowdloanContributionInteractor.swift @@ -3,6 +3,7 @@ import RobinHood import BigInt import SSFModels import SSFRuntimeCodingService +import SSFAccountManagment class CrowdloanContributionInteractor: CrowdloanContributionInteractorInputProtocol, RuntimeConstantFetching { weak var presenter: CrowdloanContributionInteractorOutputProtocol! diff --git a/fearless/Modules/Crowdloan/CrowdloanContribution/Model/CrowdloanContributionConfirmData.swift b/fearless/Modules/Crowdloan/CrowdloanContribution/Model/CrowdloanContributionConfirmData.swift index c31f3d9d79..baf9d9c5df 100644 --- a/fearless/Modules/Crowdloan/CrowdloanContribution/Model/CrowdloanContributionConfirmData.swift +++ b/fearless/Modules/Crowdloan/CrowdloanContribution/Model/CrowdloanContributionConfirmData.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels struct CrowdloanContributionConfirmData { let contribution: Decimal diff --git a/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmInteractor.swift b/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmInteractor.swift index 6f42c41f38..44d3cd0f54 100644 --- a/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmInteractor.swift +++ b/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmInteractor.swift @@ -3,6 +3,7 @@ import RobinHood import BigInt import SSFModels import SSFRuntimeCodingService +import SSFAccountManagment final class CrowdloanContributionConfirmInteractor: CrowdloanContributionInteractor, AccountFetching { var confirmPresenter: CrowdloanContributionConfirmInteractorOutputProtocol? { diff --git a/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmProtocols.swift b/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmProtocols.swift index 2eecfc1c88..b425faef29 100644 --- a/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmProtocols.swift +++ b/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmProtocols.swift @@ -1,5 +1,6 @@ import SoraFoundation import BigInt +import SSFModels protocol CrowdloanContributionConfirmViewProtocol: ControllerBackedProtocol, Localizable, LoadableViewProtocol { func didReceiveAsset(viewModel: AssetBalanceViewModelProtocol) diff --git a/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmViewFactory.swift b/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmViewFactory.swift index 45c02f6133..907bca40db 100644 --- a/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmViewFactory.swift +++ b/fearless/Modules/Crowdloan/CrowdloanContributionConfirm/CrowdloanContributionConfirmViewFactory.swift @@ -116,8 +116,7 @@ struct CrowdloanContributionConfirmViewFactory { let existentialDepositService = ExistentialDepositService( operationManager: operationManager, - chainRegistry: chainRegistry, - chainId: chainAsset.chain.chainId + chainRegistry: chainRegistry ) let callFactory = SubstrateCallFactoryDefault(runtimeService: runtimeService) diff --git a/fearless/Modules/Crowdloan/CrowdloanContributionSetup/CrowdloanContributionSetupViewFactory.swift b/fearless/Modules/Crowdloan/CrowdloanContributionSetup/CrowdloanContributionSetupViewFactory.swift index 6a8c413b2f..4fea8f0bd0 100644 --- a/fearless/Modules/Crowdloan/CrowdloanContributionSetup/CrowdloanContributionSetupViewFactory.swift +++ b/fearless/Modules/Crowdloan/CrowdloanContributionSetup/CrowdloanContributionSetupViewFactory.swift @@ -107,8 +107,7 @@ struct CrowdloanContributionSetupViewFactory { let existentialDepositService = ExistentialDepositService( operationManager: operationManager, - chainRegistry: chainRegistry, - chainId: chainAsset.chain.chainId + chainRegistry: chainRegistry ) let callFactory = SubstrateCallFactoryDefault(runtimeService: runtimeService) diff --git a/fearless/Modules/Crowdloan/CrowdloanList/CrowdloanListInteractor.swift b/fearless/Modules/Crowdloan/CrowdloanList/CrowdloanListInteractor.swift index e9a5ebb28e..053376bd06 100644 --- a/fearless/Modules/Crowdloan/CrowdloanList/CrowdloanListInteractor.swift +++ b/fearless/Modules/Crowdloan/CrowdloanList/CrowdloanListInteractor.swift @@ -2,6 +2,7 @@ import UIKit import RobinHood import SSFModels import SSFRuntimeCodingService +import SSFAccountManagment final class CrowdloanListInteractor: RuntimeConstantFetching { weak var presenter: CrowdloanListInteractorOutputProtocol! diff --git a/fearless/Modules/Crowdloan/CrowdloanList/CrowdloansListInteractor+Protocols.swift b/fearless/Modules/Crowdloan/CrowdloanList/CrowdloansListInteractor+Protocols.swift index ac2cc908f7..681241754e 100644 --- a/fearless/Modules/Crowdloan/CrowdloanList/CrowdloansListInteractor+Protocols.swift +++ b/fearless/Modules/Crowdloan/CrowdloanList/CrowdloansListInteractor+Protocols.swift @@ -1,6 +1,7 @@ import Foundation import RobinHood import SSFModels +import SSFAccountManagment extension CrowdloanListInteractor: CrowdloanListInteractorInputProtocol { func setup() { diff --git a/fearless/Modules/DappBrowser/Cells/BrowserExploreFeaturedCell.swift b/fearless/Modules/DappBrowser/Cells/BrowserExploreFeaturedCell.swift new file mode 100644 index 0000000000..89740a33eb --- /dev/null +++ b/fearless/Modules/DappBrowser/Cells/BrowserExploreFeaturedCell.swift @@ -0,0 +1,91 @@ +import UIKit + +final class DappBrowserFeaturedCell: UICollectionViewCell { + let posterImageView: UIImageView = { + let imageView = UIImageView() + imageView.contentMode = .scaleAspectFill + imageView.clipsToBounds = true + return imageView + }() + let iconViewImage: UIImageView = { + let imageView = UIImageView() + imageView.clipsToBounds = true + return imageView + }() + + let titleLabel: UILabel = { + let label = UILabel() + label.font = .h5Title + return label + }() + + let descriptionLabel: UILabel = { + let label = UILabel() + label.font = .p2Paragraph + label.textColor = R.color.colorWhite50() + label.numberOfLines = 2 + return label + }() + + override init(frame: CGRect) { + super.init(frame: frame) + setup() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func layoutSubviews() { + super.layoutSubviews() + iconViewImage.layer.cornerRadius = 8 + posterImageView.layer.cornerRadius = 15 + } + + override func prepareForReuse() { + super.prepareForReuse() + posterImageView.kf.cancelDownloadTask() + posterImageView.image = nil + } + + func configure(model: DappBrowserFeaturedViewModel) { + model.poster.loadImage( + on: posterImageView, + placholder: R.image.featuredBanner(), + targetSize: bounds.size, + animated: true + ) + model.icon.loadImage( + on: iconViewImage, + placholder: R.image.iconFearlessSmall(), + targetSize: CGSize(width: 40, height: 40), + animated: true + ) + titleLabel.text = model.dappName + descriptionLabel.text = model.dappDescription + } + + private func setup() { + contentView.addSubview(posterImageView) + posterImageView.addSubview(iconViewImage) + let vStackView = UIFactory.default.createVerticalStackView(spacing: 8) + posterImageView.addSubview(vStackView) + vStackView.addArrangedSubview(titleLabel) + vStackView.addArrangedSubview(descriptionLabel) + + posterImageView.snp.makeConstraints { make in + make.top.bottom.equalToSuperview() + make.leading.trailing.equalToSuperview().inset(16) + } + iconViewImage.snp.makeConstraints { make in + make.leading.bottom.equalToSuperview().inset(16) + make.size.equalTo(40) + } + vStackView.snp.makeConstraints { make in + make.leading.equalTo(iconViewImage.snp.trailing).offset(8) + make.trailing.equalToSuperview().inset(8) + make.centerY.equalTo(iconViewImage.snp.centerY) + } + } +} diff --git a/fearless/Modules/DappBrowser/Cells/DappBrowserListCell.swift b/fearless/Modules/DappBrowser/Cells/DappBrowserListCell.swift new file mode 100644 index 0000000000..4aec9f7801 --- /dev/null +++ b/fearless/Modules/DappBrowser/Cells/DappBrowserListCell.swift @@ -0,0 +1,122 @@ +import UIKit +import SoraUI + +struct DappBrowserListCellViewModel { + let icon: ImageViewModelProtocol + let iconUrl: URL + let name: String + let description: String? + let dapp: TonDapp +} + +final class DappBrowserListCell: UITableViewCell { + enum Position { + case top + case middle + case bottom + case list + } + + let containerView: TriangularedView = { + let containerView = TriangularedView() + containerView.fillColor = R.color.colorWhite4()! + containerView.highlightedFillColor = R.color.colorWhite4()! + containerView.shadowOpacity = 0 + return containerView + }() + + let iconViewImage: UIImageView = { + let imageView = UIImageView() + imageView.clipsToBounds = true + return imageView + }() + + let titleLabel: UILabel = { + let label = UILabel() + label.font = .h5Title + return label + }() + + let descriptionLabel: UILabel = { + let label = UILabel() + label.font = .p2Paragraph + label.textColor = R.color.colorWhite50() + label.numberOfLines = 2 + return label + }() + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + setup() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func prepareForReuse() { + super.prepareForReuse() + iconViewImage.kf.cancelDownloadTask() + } + + override func layoutSubviews() { + super.layoutSubviews() + iconViewImage.layer.cornerRadius = 8 + } + + func configure( + model: DappBrowserListCellViewModel, + position: Position + ) { + titleLabel.text = model.name + descriptionLabel.text = model.description + iconViewImage.kf.setImage(with: model.iconUrl) + + switch position { + case .top, .middle: + containerView.cornerCut = .none + containerView.cornersRaduis = .none + case .bottom: + containerView.cornerCut = .bottomRight + containerView.cornersRaduis = .bottomLeft + case .list: + containerView.cornerCut = .none + containerView.cornersRaduis = .none + containerView.fillColor = R.color.colorBlack19()! + containerView.fillColor = R.color.colorBlack19()! + containerView.snp.remakeConstraints { make in + make.top.bottom.equalToSuperview() + make.leading.trailing.equalToSuperview().inset(4) + } + } + } + + func setup() { + selectionStyle = .none + backgroundColor = .clear + contentView.backgroundColor = .clear + contentView.addSubview(containerView) + containerView.addSubview(iconViewImage) + let vStackView = UIFactory.default.createVerticalStackView(spacing: 0) + containerView.addSubview(vStackView) + vStackView.addArrangedSubview(titleLabel) + vStackView.addArrangedSubview(descriptionLabel) + + containerView.snp.makeConstraints { make in + make.top.bottom.equalToSuperview() + make.leading.trailing.equalToSuperview().inset(16) + } + iconViewImage.snp.makeConstraints { make in + make.size.equalTo(40) + make.leading.equalToSuperview().offset(12) + make.centerY.equalToSuperview() + } + vStackView.snp.makeConstraints { make in + make.top.bottom.greaterThanOrEqualToSuperview().priority(.low) + make.leading.equalTo(iconViewImage.snp.trailing).offset(8) + make.trailing.equalToSuperview().inset(8) + make.centerY.equalToSuperview() + } + } +} diff --git a/fearless/Modules/DappBrowser/DappBrowserAssembly.swift b/fearless/Modules/DappBrowser/DappBrowserAssembly.swift new file mode 100644 index 0000000000..5d711cde5c --- /dev/null +++ b/fearless/Modules/DappBrowser/DappBrowserAssembly.swift @@ -0,0 +1,53 @@ +import UIKit +import SoraFoundation +import RobinHood +import SSFSingleValueCache +import SSFModels + +final class DappBrowserAssembly { + static func configureModule( + wallet: MetaAccountModel + ) -> DappBrowserModuleCreationResult? { + let localizationManager = LocalizationManager.shared + + let interactor = DappBrowserInteractor( + dappProvider: createProvider(), + appRepository: ServiceAssembly.shared.tonConnectAppAsyncRepository(), + chainsRepository: ServiceAssembly.shared.asyncChainModelRepository(sortDescriptors: []), + filterStorage: ServiceAssembly.shared.userDefaults, + eventCenter: ServiceAssembly.shared.eventCenter + ) + let router = DappBrowserRouter() + + let presenter = DappBrowserPresenter( + interactor: interactor, + router: router, + localizationManager: localizationManager, + logger: ServiceAssembly.shared.logger, + viewModelFactory: DappBrowserViewModelFactoryImpl(), + wallet: wallet + ) + + let view = DappBrowserViewController( + output: presenter, + localizationManager: localizationManager + ) + + return (view, presenter) + } + + private static func createProvider() -> AnySingleValueProvider<[DappCategory]> { + let repository: CoreDataRepository = SingleValueCacheRepositoryFactoryDefault().createSingleValueCacheRepository() + let source = DappDataSource() + let trigger: DataProviderEventTrigger = [.onFetchPage, .onAll] + let provider = SingleValueProvider( + targetIdentifier: "dapp.remote.target.identifier", + source: AnySingleValueProviderSource(source), + repository: AnyDataProviderRepository(repository), + updateTrigger: trigger, + executionQueue: OperationManagerFacade.sharedDefaultQueue + ) + + return AnySingleValueProvider(provider) + } +} diff --git a/fearless/Modules/DappBrowser/DappBrowserInteractor.swift b/fearless/Modules/DappBrowser/DappBrowserInteractor.swift new file mode 100644 index 0000000000..09d332d3b7 --- /dev/null +++ b/fearless/Modules/DappBrowser/DappBrowserInteractor.swift @@ -0,0 +1,97 @@ +import UIKit +import SoraKeystore +import RobinHood +import SSFModels + +protocol DappBrowserInteractorOutput: AnyObject { + func didReceive(dapps: Result<[DappCategory], Error>) + func didUpdate(wallet: MetaAccountModel) +} + +final class DappBrowserInteractor { + // MARK: - Private properties + + private enum Constants { + static let filterKey = "jp.co.soramitsu.fearless.dapp.browser.filter" + } + + private weak var output: DappBrowserInteractorOutput? + private let dappProvider: AnySingleValueProvider<[DappCategory]> + private let appRepository: AsyncAnyRepository + private let chainsRepository: AsyncAnyRepository + private let filterStorage: SettingsManagerProtocol + private let eventCenter: EventCenterProtocol + + init( + dappProvider: AnySingleValueProvider<[DappCategory]>, + appRepository: AsyncAnyRepository, + chainsRepository: AsyncAnyRepository, + filterStorage: SettingsManagerProtocol, + eventCenter: EventCenterProtocol + ) { + self.dappProvider = dappProvider + self.appRepository = appRepository + self.chainsRepository = chainsRepository + self.filterStorage = filterStorage + self.eventCenter = eventCenter + eventCenter.add(observer: self) + } + + private func setupDappProvider() { + let updateClosure = { [weak self] (changes: [DataProviderChange<[DappCategory]>]) in + guard let dapps = changes.reduceToLastChange() else { + return + } + self?.output?.didReceive(dapps: .success(dapps)) + } + + let failureClosure: (any Error) -> Void = { [weak self] (error: Error) in + self?.output?.didReceive(dapps: .failure(error)) + } + + dappProvider.addObserver( + self, + deliverOn: nil, + executing: updateClosure, + failing: failureClosure, + options: DataProviderObserverOptions() + ) + } +} + +// MARK: - DappBrowserInteractorInput + +extension DappBrowserInteractor: DappBrowserInteractorInput { + var connectedApps: [TonConnectApp] { + get async throws { + try await appRepository.fetchAll() + } + } + + var chains: [ChainModel] { + get async throws { + try await chainsRepository.fetchAll() + } + } + + var filter: NetworkManagmentFilter { + get { + let id = filterStorage.string(for: Constants.filterKey) + return NetworkManagmentFilter(identifier: id) + } + set { + filterStorage.set(value: newValue.identifier, for: Constants.filterKey) + } + } + + func setup(with output: DappBrowserInteractorOutput) { + self.output = output + setupDappProvider() + } +} + +extension DappBrowserInteractor: EventVisitorProtocol { + func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { + output?.didUpdate(wallet: event.account) + } +} diff --git a/fearless/Modules/DappBrowser/DappBrowserPresenter.swift b/fearless/Modules/DappBrowser/DappBrowserPresenter.swift new file mode 100644 index 0000000000..78e8f15c31 --- /dev/null +++ b/fearless/Modules/DappBrowser/DappBrowserPresenter.swift @@ -0,0 +1,248 @@ +import Foundation +import SSFModels +import SoraFoundation + +protocol DappBrowserViewInput: ControllerBackedProtocol { + func didReceive(viewModel: [DappBrowserViewModel]) + func didReceive(walletName: String) + func didReceive(viewModel: DappBrowsetNetworkFilterViewModel?) +} + +protocol DappBrowserInteractorInput: AnyObject { + var connectedApps: [TonConnectApp] { get async throws } + var chains: [ChainModel] { get async throws } + var filter: NetworkManagmentFilter { get set } + func setup(with output: DappBrowserInteractorOutput) +} + +final class DappBrowserPresenter { + // MARK: Private properties + + private weak var view: DappBrowserViewInput? + private let router: DappBrowserRouterInput + private let interactor: DappBrowserInteractorInput + private let logger: LoggerProtocol + private let viewModelFactory: DappBrowserViewModelFactory + private var wallet: MetaAccountModel + + private var dapps: [DappCategory]? + private var page: DappBrowserViewControllerPage = .dapps + + // MARK: - Constructors + + init( + interactor: DappBrowserInteractorInput, + router: DappBrowserRouterInput, + localizationManager: LocalizationManagerProtocol, + logger: LoggerProtocol, + viewModelFactory: DappBrowserViewModelFactory, + wallet: MetaAccountModel + ) { + self.interactor = interactor + self.router = router + self.logger = logger + self.viewModelFactory = viewModelFactory + self.wallet = wallet + + self.localizationManager = localizationManager + } + + // MARK: - Private methods + + private func provideTableViewModel() { + guard let dapps else { + return + } + Task { + let viewModel = viewModelFactory.buildViewModel( + dapps: dapps, + connected: try await interactor.connectedApps, + chains: try await interactor.chains, + networkFilter: interactor.filter, + locale: selectedLocale, + wallet: wallet, + page: page + ) + Task { @MainActor in + view?.didReceive(viewModel: viewModel) + } + } + } + + private func provideWalletViewModel() { + Task { @MainActor in + view?.didReceive(walletName: wallet.name) + } + } + + private func provideNetworkViewModel() { + Task { + let viewModel = viewModelFactory.buildNetworkFilterViewModel( + chains: try await interactor.chains, + filter: interactor.filter, + locale: selectedLocale + ) + Task { @MainActor in + view?.didReceive(viewModel: viewModel) + } + } + } + + private func observTonConnect() { + Task { + await ServiceAssembly.shared.tonConnectService().set(listener: self) + } + } +} + +// MARK: - DappBrowserViewOutput + +extension DappBrowserPresenter: DappBrowserViewOutput { + func didTapSearchButton() { + Task { + var appsForSearch: [TonDapp] = dapps.or([]) + .map { $0.apps } + .reduce([], +) + .uniq(predicate: { $0 }) + switch page { + case .dapps: + break + case .connected: + let connectedApps = try await interactor.connectedApps + appsForSearch = appsForSearch.filter { app in + connectedApps.contains(where: { $0.appUrl.host == app.url.host }) + } + } + Task { @MainActor [appsForSearch] in + let title = R.string.localizable.commonSearch(preferredLanguages: selectedLocale.rLanguages) + router.showList( + from: view, + dapps: appsForSearch, + title: title, + wallet: wallet + ) + } + } + } + + func didSelect(page: DappBrowserViewControllerPage) { + self.page = page + provideTableViewModel() + } + + func didSelect(dapp: TonDapp) { + router.showDapp(from: view, dapp: dapp, wallet: wallet, moduleOutput: self) + } + + func didTapOnWalletSelectButton() { + router.showWalletManagment( + from: view, + moduleOutput: self + ) + } + + func didTapOnNetworkSelectButton() { + Task { + let allChains = try await interactor.chains + let hasDappChains = allChains.filter { chainModel in + dapps.or([]).contains { dappCat in + dappCat.apps.contains { dapp in + dapp.chains.contains(chainModel.chainId) + } + } + } + Task { @MainActor in + router.showSelectNetwork( + from: view, + wallet: wallet, + chains: hasDappChains, + delegate: self, + initialFilter: interactor.filter + ) + } + } + } + + func didTapOnSection(with dapps: [TonDapp], title: String) { + let all = R.string.localizable.stakingAnalyticsPeriodAll( + preferredLanguages: selectedLocale.rLanguages + ) + router.showList( + from: view, + dapps: dapps, + title: [all, title].joined(separator: " "), + wallet: wallet + ) + } + + func didLoad(view: DappBrowserViewInput) { + self.view = view + interactor.setup(with: self) + provideWalletViewModel() + provideNetworkViewModel() + observTonConnect() + } +} + +// MARK: - DappBrowserInteractorOutput + +extension DappBrowserPresenter: DappBrowserInteractorOutput { + func didReceive(dapps: Result<[DappCategory], any Error>) { + switch dapps { + case let .success(dapps): + self.dapps = dapps + provideTableViewModel() + provideNetworkViewModel() + case let .failure(error): + logger.customError(error) + } + } + + func didUpdate(wallet: MetaAccountModel) { + self.wallet = wallet + provideWalletViewModel() + } +} + +// MARK: - Localizable + +extension DappBrowserPresenter: Localizable { + func applyLocalization() {} +} + +extension DappBrowserPresenter: DappBrowserModuleInput {} + +// MARK: - WalletsManagmentModuleOutput + +extension DappBrowserPresenter: WalletsManagmentModuleOutput { + func selectedWallet(_ wallet: MetaAccountModel, for contextTag: Int) { + self.wallet = wallet + provideWalletViewModel() + } +} + +// MARK: - NetworkManagmentModuleOutput + +extension DappBrowserPresenter: NetworkManagmentModuleOutput { + func did(select: NetworkManagmentFilter, contextTag: Int?) { + interactor.filter = select + provideTableViewModel() + provideNetworkViewModel() + } +} + +// MARK: - TonWebBridgeModuleOutput + +extension DappBrowserPresenter: TonWebBridgeModuleOutput { + func didDisconnect() { + provideTableViewModel() + } +} + +// MARK: - TonConnectServiceDelegate + +extension DappBrowserPresenter: TonConnectServiceDelegate { + func didDisconnectedApp() { + provideTableViewModel() + } +} diff --git a/fearless/Modules/DappBrowser/DappBrowserProtocols.swift b/fearless/Modules/DappBrowser/DappBrowserProtocols.swift new file mode 100644 index 0000000000..d3f43f1a4c --- /dev/null +++ b/fearless/Modules/DappBrowser/DappBrowserProtocols.swift @@ -0,0 +1,36 @@ +import SSFModels + +typealias DappBrowserModuleCreationResult = ( + view: DappBrowserViewInput, + input: DappBrowserModuleInput +) + +protocol DappBrowserRouterInput: AnyObject { + func showWalletManagment( + from view: ControllerBackedProtocol?, + moduleOutput: WalletsManagmentModuleOutput? + ) + func showSelectNetwork( + from view: ControllerBackedProtocol?, + wallet: MetaAccountModel, + chains: [ChainModel], + delegate: NetworkManagmentModuleOutput?, + initialFilter: NetworkManagmentFilter + ) + func showDapp( + from view: ControllerBackedProtocol?, + dapp: TonDapp, + wallet: MetaAccountModel, + moduleOutput: TonWebBridgeModuleOutput? + ) + func showList( + from view: ControllerBackedProtocol?, + dapps: [TonDapp], + title: String, + wallet: MetaAccountModel + ) +} + +protocol DappBrowserModuleInput: AnyObject {} + +protocol DappBrowserModuleOutput: AnyObject {} diff --git a/fearless/Modules/DappBrowser/DappBrowserRouter.swift b/fearless/Modules/DappBrowser/DappBrowserRouter.swift new file mode 100644 index 0000000000..5e880cb3d4 --- /dev/null +++ b/fearless/Modules/DappBrowser/DappBrowserRouter.swift @@ -0,0 +1,68 @@ +import Foundation +import SSFModels + +final class DappBrowserRouter: DappBrowserRouterInput { + func showWalletManagment( + from view: ControllerBackedProtocol?, + moduleOutput: WalletsManagmentModuleOutput? + ) { + guard + let module = WalletsManagmentAssembly.configureModule( + shouldSaveSelected: true, + moduleOutput: moduleOutput + ) + else { + return + } + + view?.controller.present(module.view.controller, animated: true) + } + + func showSelectNetwork( + from view: ControllerBackedProtocol?, + wallet: MetaAccountModel, + chains: [ChainModel], + delegate: NetworkManagmentModuleOutput?, + initialFilter: NetworkManagmentFilter + ) { + guard + let module = NetworkManagmentAssembly.configureModule( + initialFilter: initialFilter, + wallet: wallet, + chains: chains, + contextTag: nil, + moduleOutput: delegate + ) + else { + return + } + + view?.controller.present(module.view.controller, animated: true) + } + + func showDapp( + from view: ControllerBackedProtocol?, + dapp: TonDapp, + wallet: MetaAccountModel, + moduleOutput: TonWebBridgeModuleOutput? + ) { + guard let module = TonWebBridgeAssembly.configureModule(for: dapp, wallet: wallet, moduleOutput: moduleOutput) else { + return + } + + view?.controller.present(module.view.controller, animated: true) + } + + func showList( + from view: ControllerBackedProtocol?, + dapps: [TonDapp], + title: String, + wallet: MetaAccountModel + ) { + guard let module = DappBrowserListAssembly.configureModule(title: title, dapps: dapps, wallet: wallet) else { + return + } + + view?.controller.present(module.view.controller, animated: true) + } +} diff --git a/fearless/Modules/DappBrowser/DappBrowserViewController.swift b/fearless/Modules/DappBrowser/DappBrowserViewController.swift new file mode 100644 index 0000000000..ea15090602 --- /dev/null +++ b/fearless/Modules/DappBrowser/DappBrowserViewController.swift @@ -0,0 +1,290 @@ +import UIKit +import SoraUI +import SoraFoundation + +protocol DappBrowserViewOutput: AnyObject { + func didLoad(view: DappBrowserViewInput) + func didSelect(dapp: TonDapp) + func didTapOnWalletSelectButton() + func didTapOnNetworkSelectButton() + func didTapOnSection(with dapps: [TonDapp], title: String) + func didTapSearchButton() + func didSelect(page: DappBrowserViewControllerPage) +} + +final class DappBrowserViewController: UIViewController, ViewHolder, HiddableBarWhenPushed { + typealias RootViewType = DappBrowserViewLayout + + // MARK: Private properties + + private let output: DappBrowserViewOutput + + private var viewModel: [DappBrowserViewModel] = [] + + // MARK: - Constructor + + init( + output: DappBrowserViewOutput, + localizationManager: LocalizationManagerProtocol? + ) { + self.output = output + super.init(nibName: nil, bundle: nil) + self.localizationManager = localizationManager + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Life cycle + + override func loadView() { + view = DappBrowserViewLayout() + } + + override func viewDidLoad() { + super.viewDidLoad() + output.didLoad(view: self) + setupTableView() + bindActions() + rootView.segmentedControl.delegate = self + } + + // MARK: - Private methods + + private func setupTableView() { + rootView.tableView.delegate = self + rootView.tableView.dataSource = self + rootView.tableView.registerClassForCell(DappBrowserListCell.self) + rootView.tableView.separatorStyle = .none + } + + private func bindActions() { + rootView.featuredView.didSelectApp = { [weak self] index in + guard + case let .featured(models) = self?.viewModel[safe: 0], + let dapp = models[safe: index]?.dapp + else { + return + } + self?.output.didSelect(dapp: dapp) + } + rootView.switchWalletButton.addAction { [weak self] in + self?.output.didTapOnWalletSelectButton() + } + rootView.selectNetworkButton.addAction { [weak self] in + self?.output.didTapOnNetworkSelectButton() + } + rootView.searchButton.addAction { [weak self] in + self?.output.didTapSearchButton() + } + } + + private func didTapOnSeeAll(for section: Int) { + guard + let section = viewModel[safe: section], + case let .section(sectionViewModel) = section + else { + return + } + output.didTapOnSection(with: sectionViewModel.dapps, title: sectionViewModel.header.title) + } +} + +// MARK: - DappBrowserViewInput + +extension DappBrowserViewController: DappBrowserViewInput { + func didReceive(viewModel: [DappBrowserViewModel]) { + self.viewModel = viewModel + rootView.tableView.reloadData() + if let dataSource = viewModel.first(where: { $0.featured != nil })?.featured { + rootView.featuredView.set(dataSource: dataSource) + } + let sections = IndexSet(integersIn: 0.. Int { + viewModel.count + } + + func tableView(_: UITableView, numberOfRowsInSection section: Int) -> Int { + switch viewModel[section] { + case .featured: + return 1 + case let .section(sectionList): + return sectionList.list.count + } + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + switch viewModel[indexPath.section] { + case .featured: + let cell = UITableViewCell() + cell.contentView.addSubview(rootView.featuredView) + cell.selectionStyle = .none + cell.backgroundColor = .clear + rootView.featuredView.snp.makeConstraints { make in + make.top.bottom.equalToSuperview() + make.leading.trailing.equalToSuperview() + } + return cell + case let .section(sectionList): + let cell = tableView.dequeueReusableCellWithType(DappBrowserListCell.self, forIndexPath: indexPath) + + var position: DappBrowserListCell.Position = .middle + if indexPath.row == 0, tableView.numberOfRows(inSection: indexPath.section) > 1 { + position = .top + } else if indexPath.row == tableView.numberOfRows(inSection: indexPath.section) - 1 { + position = .bottom + } + let viewModel = sectionList.list[indexPath.row] + cell.configure(model: viewModel, position: position) + return cell + } + } +} + +// MARK: - UITableViewDelegate + +extension DappBrowserViewController: UITableViewDelegate { + func tableView(_: UITableView, viewForHeaderInSection section: Int) -> UIView? { + switch viewModel[section] { + case .featured: + return nil + case let .section(sectionList): + let view = DappBrowserSectionHeaderView() + view.allTapAction = { [weak self] in + self?.didTapOnSeeAll(for: section) + } + view.locale = selectedLocale + let viewModel = sectionList.header + view.configure(model: viewModel) + return view + } + } + + func tableView(_: UITableView, heightForHeaderInSection section: Int) -> CGFloat { + switch viewModel[section] { + case .featured: + return 0 + case .section: + return 42 + } + } + + func tableView(_: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + switch viewModel[indexPath.section] { + case .featured: + return 170 + case .section: + return 64 + } + } + + func tableView(_: UITableView, didSelectRowAt indexPath: IndexPath) { + guard + let section = viewModel[safe: indexPath.section], + case let .section(sectionListViewModel) = section, + let dapp = sectionListViewModel.dapps[safe: indexPath.row] + else { + return + } + output.didSelect(dapp: dapp) + } +} + +// MARK: - FWSegmentedControlDelegate + +enum DappBrowserViewControllerPage: Int { + case dapps + case connected +} + +extension DappBrowserViewController: FWSegmentedControlDelegate { + func didSelect(_ segmentIndex: Int) { + guard let page = DappBrowserViewControllerPage(rawValue: segmentIndex) else { + return + } + output.didSelect(page: page) + } +} + +// MARK: - EmptyStateViewOwnerProtocol + +extension DappBrowserViewController: EmptyStateViewOwnerProtocol { + var emptyStateDelegate: EmptyStateDelegate { self } + var emptyStateDataSource: EmptyStateDataSource { self } +} + +// MARK: - EmptyStateDataSource + +extension DappBrowserViewController: EmptyStateDataSource { + var viewForEmptyState: UIView? { + let emptyView = EmptyView() + emptyView.image = R.image.iconWarning() + emptyView.title = R.string.localizable.emptyViewTitle(preferredLanguages: selectedLocale.rLanguages) + let page = DappBrowserViewControllerPage(rawValue: rootView.segmentedControl.selectedSegmentIndex) + switch page { + case .dapps: + emptyView.text = R.string.localizable.dappNotFoundTitle(preferredLanguages: selectedLocale.rLanguages) + case .connected: + emptyView.text = R.string.localizable.dappNoConnectedDappsTitle(preferredLanguages: selectedLocale.rLanguages) + case nil: + break + } + emptyView.iconMode = .bigFilledShadow + return emptyView + } + + var contentViewForEmptyState: UIView { + rootView.tableContainer + } +} + +// MARK: - EmptyStateDelegate + +extension DappBrowserViewController: EmptyStateDelegate { + var shouldDisplayEmptyState: Bool { + viewModel.compactMap { $0.section }.first == nil + } +} diff --git a/fearless/Modules/DappBrowser/DappBrowserViewModel.swift b/fearless/Modules/DappBrowser/DappBrowserViewModel.swift new file mode 100644 index 0000000000..683e887075 --- /dev/null +++ b/fearless/Modules/DappBrowser/DappBrowserViewModel.swift @@ -0,0 +1,30 @@ +import Foundation + +enum DappBrowserViewModel { + case featured([DappBrowserFeaturedViewModel]) + case section(ListSection) + + struct ListSection { + let header: DappBrowserSectionHeaderViewViewModel + let list: [DappBrowserListCellViewModel] + let dapps: [TonDapp] + } + + var featured: [DappBrowserFeaturedViewModel]? { + switch self { + case let .featured(featured): + return featured + case .section: + return nil + } + } + + var section: ListSection? { + switch self { + case .featured: + return nil + case let .section(list): + return list + } + } +} diff --git a/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift b/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift new file mode 100644 index 0000000000..64ec8b2455 --- /dev/null +++ b/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift @@ -0,0 +1,255 @@ +import Foundation +import SoraFoundation +import SSFModels + +struct DappBrowsetNetworkFilterViewModel { + let networkName: String + let image: ImageViewModelProtocol? +} + +protocol DappBrowserViewModelFactory { + func buildViewModel( + dapps: [DappCategory], + connected: [TonConnectApp], + chains: [ChainModel], + networkFilter: NetworkManagmentFilter, + locale: Locale, + wallet: MetaAccountModel, + page: DappBrowserViewControllerPage + ) -> [DappBrowserViewModel] + + func buildNetworkFilterViewModel( + chains: [ChainModel], + filter: NetworkManagmentFilter, + locale: Locale + ) -> DappBrowsetNetworkFilterViewModel? +} + +final class DappBrowserViewModelFactoryImpl: DappBrowserViewModelFactory { + func buildViewModel( + dapps: [DappCategory], + connected: [TonConnectApp], + chains: [ChainModel], + networkFilter: NetworkManagmentFilter, + locale: Locale, + wallet: MetaAccountModel, + page: DappBrowserViewControllerPage + ) -> [DappBrowserViewModel] { + switch page { + case .dapps: + return buildDappsPageViewModel( + dapps: dapps, + chains: chains, + networkFilter: networkFilter, + locale: locale, + wallet: wallet + ) + case .connected: + return buildConnectedPageViewModel( + connected: connected, + locale: locale + ) + } + } + + func buildNetworkFilterViewModel( + chains: [ChainModel], + filter: NetworkManagmentFilter, + locale: Locale + ) -> DappBrowsetNetworkFilterViewModel? { + let selectedFilterName: String + let selectedFilterImage: ImageViewModelProtocol? + switch filter { + case let .chain(id): + let selectedChain = chains.first(where: { $0.chainId == id }) + selectedFilterName = selectedChain?.name ?? "" + selectedFilterImage = selectedChain?.icon.map { RemoteImageViewModel(url: $0) } + case .all: + selectedFilterName = R.string.localizable.chainSelectionAllNetworks( + preferredLanguages: locale.rLanguages + ) + selectedFilterImage = filter.filterImage + case .popular: + selectedFilterName = R.string.localizable.networkManagementPopular(preferredLanguages: locale.rLanguages) + selectedFilterImage = filter.filterImage + case .favourite: + selectedFilterName = R.string.localizable.networkManagmentFavourite(preferredLanguages: locale.rLanguages) + selectedFilterImage = filter.filterImage + } + return DappBrowsetNetworkFilterViewModel( + networkName: selectedFilterName, + image: selectedFilterImage + ) + } + + // MARK: - Private methods + + private func buildDappsPageViewModel( + dapps: [DappCategory], + chains: [ChainModel], + networkFilter: NetworkManagmentFilter, + locale: Locale, + wallet: MetaAccountModel + ) -> [DappBrowserViewModel] { + var viewModel: [DappBrowserViewModel] = [] + + if let top = dapps.first(where: { $0.type == .top }) { + let topViewModel = buildFeaturedViewModel(dapps: top.apps) + viewModel.append(topViewModel) + } + + switch networkFilter { + case .all: + let sections = dapps.compactMap { buildSectionViewModel(category: $0, locale: locale, maxInSection: 3) } + viewModel.append(contentsOf: sections) + case let .chain(chain): + let chainApps = dapps.filter { dapp in + dapp.apps.contains(where: { $0.chains.contains(chain) }) + } + let sections = chainApps.compactMap { buildSectionViewModel(category: $0, locale: locale, maxInSection: 3)} + viewModel.append(contentsOf: sections) + case .popular: + let popularChains = chains + .filter { $0.rank != nil } + .map { $0.chainId } + let sections = buildSection( + dapps: dapps, + chains: popularChains, + locale: locale, + maxInSection: 3 + ) + viewModel.append(contentsOf: sections) + case .favourite: + let favourite = chains + .filter { wallet.favouriteChainIds.contains($0.chainId) == true } + .map { $0.chainId } + let sections = buildSection( + dapps: dapps, + chains: favourite, + locale: locale, + maxInSection: 3 + ) + viewModel.append(contentsOf: sections) + } + + return viewModel + } + + private func buildConnectedPageViewModel( + connected: [TonConnectApp], + locale: Locale + ) -> [DappBrowserViewModel] { + var viewModel: [DappBrowserViewModel] = [] + + if connected.isNotEmpty { + let apps = connected.map { + TonDapp( + identifier: $0.identifier, + chains: ["\(TonConstants.tonChainId)", "\(TonConstants.testnetChainId)"], + name: $0.name, + description: nil, + icon: $0.iconUrl ?? TonConstants.tonIcon, + poster: nil, + url: $0.appUrl + ) + } + let connectedViewModel = buildSectionViewModel( + category: .init( + type: .connected, + apps: apps + ), + locale: locale, + maxInSection: .max + ) + if let connectedViewModel { + viewModel.append(connectedViewModel) + } + } + return viewModel + } + + private func buildSection( + dapps: [DappCategory], + chains: [ChainModel.Id], + locale: Locale, + maxInSection: Int + ) -> [DappBrowserViewModel] { + let apps = dapps.filter { dappCat in + dappCat.apps.contains { dapp in + dapp.chains.contains { chainId in + chains.contains(chainId) + } + } + } + let sections = apps.map { buildSectionViewModel(category: $0, locale: locale, maxInSection: maxInSection)} + return sections.compactMap { $0 } + } + + private func buildFeaturedViewModel( + dapps: [TonDapp] + ) -> DappBrowserViewModel { + let featured = dapps.map { + DappBrowserFeaturedViewModel( + poster: RemoteImageViewModel(url: $0.poster) ?? BundleImageViewModel(image: R.image.featuredBanner()), + icon: RemoteImageViewModel(url: $0.icon), + dappName: $0.name, + dappDescription: $0.description ?? "", + dapp: $0 + ) + } + let viewModel = DappBrowserViewModel.featured(featured) + return viewModel + } + + private func buildSectionViewModel( + category: DappCategory, + locale: Locale, + maxInSection: Int + ) -> DappBrowserViewModel? { + guard let title = getTitle(for: category.type, locale: locale) else { + return nil + } + let header = DappBrowserSectionHeaderViewViewModel( + title: title, + isAllHidden: category.apps.count <= maxInSection + ) + let list = category.apps.prefix(maxInSection).map { + DappBrowserListCellViewModel( + icon: RemoteImageViewModel(url: $0.icon), + iconUrl: $0.icon, + name: $0.name, + description: $0.description, + dapp: $0 + ) + } + let listSection = DappBrowserViewModel.ListSection( + header: header, + list: list, + dapps: category.apps + ) + let viewModel = DappBrowserViewModel.section(listSection) + return viewModel + } + + private func getTitle( + for category: DappCategoryType, + locale: Locale + ) -> String? { + switch category { + case .connected: + return R.string.localizable.dappConnectedTitle(preferredLanguages: locale.rLanguages) + case .featured: + return R.string.localizable.dappCategoryFeaturedTitle(preferredLanguages: locale.rLanguages) + case .utilities: + return R.string.localizable.dappCategoryUtilitiesTitle(preferredLanguages: locale.rLanguages) + case .nft: + return R.string.localizable.dappCategoryNftTitle(preferredLanguages: locale.rLanguages) + case .defi: + return R.string.localizable.dappCategoryDefiTitle(preferredLanguages: locale.rLanguages) + case .top: + return nil + case .explorers: + return "Explorers" + } + } +} diff --git a/fearless/Modules/DappBrowser/View/DappBrowserFeaturedView.swift b/fearless/Modules/DappBrowser/View/DappBrowserFeaturedView.swift new file mode 100644 index 0000000000..f3690cc2b3 --- /dev/null +++ b/fearless/Modules/DappBrowser/View/DappBrowserFeaturedView.swift @@ -0,0 +1,265 @@ +import UIKit + +struct DappBrowserFeaturedViewModel { + let poster: ImageViewModelProtocol + let icon: ImageViewModelProtocol + let dappName: String + let dappDescription: String + let dapp: TonDapp +} + +final class DappBrowserFeaturedView: UIView { + private enum Constants { + static let numberOfAdditionalItems = 5 + } + + var didSelectApp: ((Int) -> Void)? + + private var dataSource = [DappBrowserFeaturedViewModel]() + + private lazy var collectionView = CollectionView( + frame: .zero, + collectionViewLayout: createLayout() + ) + + private var indexOfCellBeforeDragging = 0 + private var slideshowTask: Task? + + override init(frame: CGRect) { + super.init(frame: frame) + setup() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func layoutSubviews() { + super.layoutSubviews() + collectionView.frame = bounds + } + + override func didMoveToSuperview() { + guard superview != nil else { + stopSlideShow() + return + } + startSlideShow() + } + + func set(dataSource: [DappBrowserFeaturedViewModel]) { + let dataSource = (0 ..< Constants.numberOfAdditionalItems) + .reduce(into: [DappBrowserFeaturedViewModel]()) { partialResult, _ in + partialResult = partialResult + dataSource + } + self.dataSource = dataSource + + collectionView.alpha = 0 + collectionView.reloadData() + collectionView.layoutIfNeeded() + guard !dataSource.isEmpty else { return } + DispatchQueue.main.async { + self.collectionView.scrollToItem( + at: IndexPath( + item: 0, + section: 0 + ), + at: .centeredHorizontally, + animated: false + ) + UIView.animate(withDuration: 0.2) { + self.collectionView.alpha = 1.0 + } + self.startSlideShowTask() + } + } + + // MARK: - Private methods + + private func setup() { + collectionView.contentInsetAdjustmentBehavior = .never + collectionView.backgroundColor = .clear + collectionView.showsHorizontalScrollIndicator = false + collectionView.decelerationRate = .fast + collectionView.dataSource = self + collectionView.delegate = self + collectionView.registerClassForCell(DappBrowserFeaturedCell.self) + + addSubview(collectionView) + } + + private func createLayout() -> UICollectionViewLayout { + let configuration = UICollectionViewCompositionalLayoutConfiguration() + configuration.scrollDirection = .horizontal + + let layout = UICollectionViewCompositionalLayout(sectionProvider: { _, environment -> NSCollectionLayoutSection? in + let itemSize = NSCollectionLayoutSize( + widthDimension: .fractionalWidth(1.0), + heightDimension: .absolute(environment.container.effectiveContentSize.height) + ) + let item = NSCollectionLayoutItem(layoutSize: itemSize) + + let groupSize = NSCollectionLayoutSize( + widthDimension: .absolute(environment.container.effectiveContentSize.width), + heightDimension: .absolute(environment.container.effectiveContentSize.height) + ) + + let group = NSCollectionLayoutGroup.vertical(layoutSize: groupSize, subitems: [item]) + + let section = NSCollectionLayoutSection(group: group) + return section + + }, configuration: configuration) + return layout + } + + private func startSlideShow() { + startSlideShowTask() + } + + private func stopSlideShow() { + slideshowTask?.cancel() + slideshowTask = nil + } + + private func indexOfMostVisibleCell() -> Int { + let proportionalOffset = collectionView.contentOffset.x / collectionView.bounds.width + guard !proportionalOffset.isNaN else { + return 0 + } + let index = Int(round(proportionalOffset)) + let numberOfItems = collectionView.numberOfItems(inSection: 0) + let safeIndex = max(0, min(numberOfItems - 1, index)) + return safeIndex + } + + private func startSlideShowTask() { + slideshowTask?.cancel() + slideshowTask = Task { + try? await Task.sleep(nanoseconds: 4_000_000_000) + guard !Task.isCancelled else { return } + await MainActor.run { + resetCarouselIfNeeded() + self.collectionView.isScrollEnabled = false + UIView.animate(withDuration: 0.5) { + self.collectionView.scrollToItem( + at: IndexPath(item: self.indexOfMostVisibleCell() + 1, section: 0), + at: .centeredHorizontally, + animated: true + ) + } completion: { _ in + self.collectionView.isScrollEnabled = true + self.startSlideShowTask() + } + } + } + } + + private func resetCarouselIfNeeded() { + let indexOfLeftSignificantCell = Constants.numberOfAdditionalItems / 2 * dataSource.count / Constants.numberOfAdditionalItems + let indexOfRightSignificantCell = indexOfLeftSignificantCell + (dataSource.count - 1) / Constants.numberOfAdditionalItems + + if indexOfMostVisibleCell() == indexOfLeftSignificantCell - 1 { + collectionView.scrollToItem( + at: IndexPath( + item: indexOfRightSignificantCell, + section: 0 + ), + at: .centeredHorizontally, + animated: false + ) + } + + if indexOfMostVisibleCell() == indexOfRightSignificantCell + 1 { + collectionView.scrollToItem( + at: IndexPath( + item: indexOfLeftSignificantCell, + section: 0 + ), + at: .centeredHorizontally, + animated: false + ) + } + } +} + +extension DappBrowserFeaturedView: UICollectionViewDataSource { + func collectionView(_: UICollectionView, numberOfItemsInSection _: Int) -> Int { + dataSource.count + } + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + let cell = collectionView.dequeueReusableCell( + withReuseIdentifier: DappBrowserFeaturedCell.reuseIdentifier, + for: indexPath + ) + + (cell as? DappBrowserFeaturedCell)?.configure(model: dataSource[indexPath.item]) + + return cell + } +} + +extension DappBrowserFeaturedView: UICollectionViewDelegate { + func collectionView( + _: UICollectionView, + didSelectItemAt indexPath: IndexPath + ) { + let dAppsCount = dataSource.count / Constants.numberOfAdditionalItems + let index = indexPath.item - ((indexPath.item / dAppsCount) * dAppsCount) + didSelectApp?(index) + } + + func scrollViewWillBeginDragging(_: UIScrollView) { + indexOfCellBeforeDragging = indexOfMostVisibleCell() + slideshowTask?.cancel() + } + + func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer) { + targetContentOffset.pointee = scrollView.contentOffset + + let indexOfMostVisibleCell = self.indexOfMostVisibleCell() + let numberOfItems = collectionView.numberOfItems(inSection: 0) + let swipeVelocityThreshold: CGFloat = 0.5 + let hasEnoughVelocityToSlideToTheNextCell = indexOfCellBeforeDragging + 1 < numberOfItems && velocity.x > swipeVelocityThreshold + let hasEnoughVelocityToSlideToThePreviousCell = indexOfCellBeforeDragging - 1 >= 0 && velocity.x < -swipeVelocityThreshold + let majorCellIsTheCellBeforeDragging = indexOfMostVisibleCell == indexOfCellBeforeDragging + let didUseSwipeToSkipCell = majorCellIsTheCellBeforeDragging && (hasEnoughVelocityToSlideToTheNextCell || hasEnoughVelocityToSlideToThePreviousCell) + + if didUseSwipeToSkipCell { + let snapToIndex = indexOfCellBeforeDragging + (hasEnoughVelocityToSlideToTheNextCell ? 1 : -1) + let toValue = collectionView.bounds.width * CGFloat(snapToIndex) + + UIView.animate( + withDuration: 0.5, + delay: 0, + usingSpringWithDamping: 1, + initialSpringVelocity: velocity.x, + options: .allowUserInteraction, + animations: { + scrollView.contentOffset = CGPoint(x: toValue, y: 0) + scrollView.layoutIfNeeded() + }, + completion: nil + ) + + } else { + let indexPath = IndexPath(row: indexOfMostVisibleCell, section: 0) + collectionView.scrollToItem(at: indexPath, at: .centeredHorizontally, animated: true) + } + } + + func scrollViewDidEndDecelerating(_: UIScrollView) { + resetCarouselIfNeeded() + startSlideShowTask() + } +} + +private class CollectionView: UICollectionView { + private var _safeAreaInsets: UIEdgeInsets? + override var safeAreaInsets: UIEdgeInsets { + get { _safeAreaInsets ?? super.safeAreaInsets } + set { _safeAreaInsets = newValue } + } +} diff --git a/fearless/Modules/DappBrowser/View/DappBrowserSectionHeaderView.swift b/fearless/Modules/DappBrowser/View/DappBrowserSectionHeaderView.swift new file mode 100644 index 0000000000..7b88229139 --- /dev/null +++ b/fearless/Modules/DappBrowser/View/DappBrowserSectionHeaderView.swift @@ -0,0 +1,114 @@ +import UIKit +import SoraUI + +struct DappBrowserSectionHeaderViewViewModel { + let title: String + let isAllHidden: Bool +} + +final class DappBrowserSectionHeaderView: UITableViewHeaderFooterView { + var locale: Locale = .current { + didSet { + setupLocalization() + } + } + + let containerView: TriangularedView = { + let containerView = TriangularedView() + containerView.fillColor = R.color.colorWhite4()! + containerView.highlightedFillColor = R.color.colorWhite4()! + containerView.shadowOpacity = 0 + containerView.cornerCut = .topLeft + containerView.cornersRaduis = .topRight + return containerView + }() + + let titleLabel: UILabel = { + let label = UILabel() + label.font = .h5Title + label.textColor = .white + return label + }() + + let moreButton: UIButton = { + let button = UIButton(type: .custom) + button.titleLabel?.font = .capsTitle + button.setTitleColor(.white, for: .normal) + button.setImage(R.image.iconChevronRight(), for: .normal) + button.semanticContentAttribute = .forceRightToLeft + button.backgroundColor = R.color.colorWhite8() + return button + }() + + var allTapAction: (() -> Void)? + + override init(reuseIdentifier: String?) { + super.init(reuseIdentifier: reuseIdentifier) + setup() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override var intrinsicContentSize: CGSize { + CGSize(width: UIView.noIntrinsicMetric, height: 42) + } + + override func layoutSubviews() { + super.layoutSubviews() + moreButton.rounded() + } + + func configure(model: DappBrowserSectionHeaderViewViewModel) { + titleLabel.text = model.title + moreButton.isHidden = model.isAllHidden + } + + // MARK: - Private methods + + private func setup() { + moreButton.addAction { [weak self] in + self?.allButtonAction() + } + + let separator = UIFactory.default.createSeparatorView() + contentView.addSubview(containerView) + containerView.addSubview(titleLabel) + containerView.addSubview(moreButton) + containerView.addSubview(separator) + + containerView.snp.makeConstraints { make in + make.top.bottom.equalToSuperview() + make.leading.trailing.equalToSuperview().inset(16) + } + moreButton.snp.makeConstraints { make in + make.width.greaterThanOrEqualTo(61) + make.height.equalTo(24) + make.trailing.equalToSuperview().inset(16) + make.centerY.equalToSuperview() + } + titleLabel.snp.makeConstraints { make in + make.centerY.equalToSuperview() + make.trailing.greaterThanOrEqualTo(moreButton.snp.leading).inset(16) + make.leading.equalToSuperview().offset(16) + } + separator.snp.makeConstraints { make in + make.top.equalTo(moreButton.snp.bottom).offset(8) + make.leading.trailing.equalToSuperview().inset(16) + make.height.equalTo(1.0 / UIScreen.main.scale) + } + + moreButton.setContentHuggingPriority(.required, for: .horizontal) + titleLabel.setContentHuggingPriority(.defaultLow, for: .horizontal) + } + + private func allButtonAction() { + allTapAction?() + } + + private func setupLocalization() { + moreButton.setTitle(R.string.localizable.commonSeeAll(preferredLanguages: locale.rLanguages), for: .normal) + } +} diff --git a/fearless/Modules/DappBrowser/View/DappBrowserViewLayout.swift b/fearless/Modules/DappBrowser/View/DappBrowserViewLayout.swift new file mode 100644 index 0000000000..8e3925c636 --- /dev/null +++ b/fearless/Modules/DappBrowser/View/DappBrowserViewLayout.swift @@ -0,0 +1,147 @@ +import UIKit + +final class DappBrowserViewLayout: UIView { + var locale: Locale = .current { + didSet { + applyLocalization() + } + } + + private let backgroundImageView: UIImageView = { + let imageView = UIImageView() + imageView.contentMode = .scaleAspectFill + imageView.image = R.image.backgroundImage() + return imageView + }() + + private let navigationContainerView = UIView() + + let switchWalletButton: UIButton = { + let button = UIButton() + button.setImage(R.image.iconFearlessRounded(), for: .normal) + return button + }() + + let walletNameTitle: UILabel = { + let label = UILabel() + label.font = .h4Title + label.textAlignment = .center + return label + }() + + let searchButton: UIButton = { + let button = UIButton() + button.backgroundColor = R.color.colorWhite8() + button.setImage(R.image.iconSearchWhite(), for: .normal) + button.clipsToBounds = true + return button + }() + + let selectNetworkButton = SelectedNetworkButton() + let segmentedControl = FWSegmentedControl() + + lazy var featuredView = DappBrowserFeaturedView() + + let tableContainer = UIView() + let tableView: UITableView = { + let view = UITableView(frame: .zero, style: .grouped) + view.separatorStyle = .none + view.contentInset = .zero + view.backgroundColor = .clear + view.contentInset = UIEdgeInsets( + top: 0, + left: 0, + bottom: UIConstants.actionHeight, + right: 0 + ) + return view + }() + + override init(frame: CGRect) { + super.init(frame: frame) + setup() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func layoutSubviews() { + super.layoutSubviews() + searchButton.rounded() + } + + private func setup() { + let walletInfoVStackView = UIFactory.default.createVerticalStackView(spacing: 6) + walletInfoVStackView.alignment = .center + walletInfoVStackView.distribution = .fill + + addSubview(backgroundImageView) + addSubview(navigationContainerView) + addSubview(tableContainer) + tableContainer.addSubview(tableView) + navigationContainerView.addSubview(switchWalletButton) + navigationContainerView.addSubview(walletInfoVStackView) + navigationContainerView.addSubview(searchButton) + walletInfoVStackView.addArrangedSubview(walletNameTitle) + walletInfoVStackView.addArrangedSubview(selectNetworkButton) + + backgroundImageView.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + navigationContainerView.snp.makeConstraints { make in + make.top.equalTo(safeAreaLayoutGuide) + make.leading.trailing.equalToSuperview() + } + switchWalletButton.snp.makeConstraints { make in + make.centerY.equalToSuperview() + make.leading.equalToSuperview().offset(16) + make.size.equalTo(40) + } + walletInfoVStackView.snp.makeConstraints { make in + make.centerX.equalToSuperview() + make.top.bottom.equalToSuperview().inset(16) + make.leading.greaterThanOrEqualTo(switchWalletButton.snp.trailing) + } + selectNetworkButton.snp.makeConstraints { make in + make.height.equalTo(22) + } + walletNameTitle.snp.makeConstraints { make in + make.leading.trailing.equalToSuperview().inset(UIConstants.minimalOffset) + } + searchButton.snp.makeConstraints { make in + make.size.equalTo(32) + make.centerY.equalToSuperview() + make.trailing.equalToSuperview().inset(16) + } + let segmentContainer = UIView() + addSubview(segmentContainer) + segmentContainer.addSubview(segmentedControl) + segmentedControl.snp.makeConstraints { make in + make.height.equalTo(32) + make.width.equalTo(segmentContainer.snp.width) + make.edges.equalToSuperview() + } + segmentContainer.snp.makeConstraints { make in + make.top.equalTo(navigationContainerView.snp.bottom) + make.leading.trailing.equalToSuperview().inset(16) + } + tableContainer.snp.makeConstraints { make in + make.top.equalTo(segmentContainer.snp.bottom).offset(16) + make.leading.trailing.equalToSuperview() + make.bottom.equalToSuperview() + } + tableView.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + } + + private func applyLocalization() { + let localizedItems = [ + R.string.localizable.dappDiscoverTitle(preferredLanguages: locale.rLanguages), + R.string.localizable.dappConnectedTitle(preferredLanguages: locale.rLanguages) + ] + segmentedControl.setSegmentItems(localizedItems) + } +} diff --git a/fearless/Modules/DappBrowserList/DappBrowserListAssembly.swift b/fearless/Modules/DappBrowserList/DappBrowserListAssembly.swift new file mode 100644 index 0000000000..1b20988178 --- /dev/null +++ b/fearless/Modules/DappBrowserList/DappBrowserListAssembly.swift @@ -0,0 +1,32 @@ +import UIKit +import SoraFoundation +import SSFModels + +final class DappBrowserListAssembly { + static func configureModule( + title: String, + dapps: [TonDapp], + wallet: MetaAccountModel + ) -> DappBrowserListModuleCreationResult? { + let localizationManager = LocalizationManager.shared + + let interactor = DappBrowserListInteractor() + let router = DappBrowserListRouter() + + let presenter = DappBrowserListPresenter( + wallet: wallet, + dapps: dapps, + interactor: interactor, + router: router, + localizationManager: localizationManager + ) + + let view = DappBrowserListViewController( + title: title, + output: presenter, + localizationManager: localizationManager + ) + + return (view, presenter) + } +} diff --git a/fearless/Modules/DappBrowserList/DappBrowserListInteractor.swift b/fearless/Modules/DappBrowserList/DappBrowserListInteractor.swift new file mode 100644 index 0000000000..fe64455067 --- /dev/null +++ b/fearless/Modules/DappBrowserList/DappBrowserListInteractor.swift @@ -0,0 +1,15 @@ +import UIKit + +protocol DappBrowserListInteractorOutput: AnyObject {} + +final class DappBrowserListInteractor { + // MARK: - Private properties + private weak var output: DappBrowserListInteractorOutput? +} + +// MARK: - DappBrowserListInteractorInput +extension DappBrowserListInteractor: DappBrowserListInteractorInput { + func setup(with output: DappBrowserListInteractorOutput) { + self.output = output + } +} diff --git a/fearless/Modules/DappBrowserList/DappBrowserListPresenter.swift b/fearless/Modules/DappBrowserList/DappBrowserListPresenter.swift new file mode 100644 index 0000000000..f1ddaff6ea --- /dev/null +++ b/fearless/Modules/DappBrowserList/DappBrowserListPresenter.swift @@ -0,0 +1,91 @@ +import Foundation +import SSFModels +import SoraFoundation + +protocol DappBrowserListViewInput: ControllerBackedProtocol { + func didReceive(viewModels: [DappBrowserListCellViewModel]) +} + +protocol DappBrowserListInteractorInput: AnyObject { + func setup(with output: DappBrowserListInteractorOutput) +} + +final class DappBrowserListPresenter { + // MARK: Private properties + private weak var view: DappBrowserListViewInput? + private let router: DappBrowserListRouterInput + private let interactor: DappBrowserListInteractorInput + + private let wallet: MetaAccountModel + private let dapps: [TonDapp] + + // MARK: - Constructors + init( + wallet: MetaAccountModel, + dapps: [TonDapp], + interactor: DappBrowserListInteractorInput, + router: DappBrowserListRouterInput, + localizationManager: LocalizationManagerProtocol + ) { + self.wallet = wallet + self.dapps = dapps + self.interactor = interactor + self.router = router + self.localizationManager = localizationManager + } + + // MARK: - Private methods + + private func provideViewModel(search: String?) { + var apps = dapps + if let search, search.isNotEmpty { + apps = dapps.filter { $0.name.lowercased().contains(search.lowercased()) } + } + let viewModels = apps + .map { + DappBrowserListCellViewModel( + icon: RemoteImageViewModel(url: $0.url), + iconUrl: $0.icon, + name: $0.name, + description: $0.description, + dapp: $0 + ) + } + view?.didReceive(viewModels: viewModels) + } +} + +// MARK: - DappBrowserListViewOutput +extension DappBrowserListPresenter: DappBrowserListViewOutput { + func didSelect(dapp: TonDapp) { + router.showDapp( + from: view, + dapp: dapp, + wallet: wallet + ) + } + + func searchTextDidChanged(_ text: String?) { + provideViewModel(search: text) + } + + func didTapBackButton() { + router.dismiss(view: view) + } + + func didLoad(view: DappBrowserListViewInput) { + self.view = view + interactor.setup(with: self) + provideViewModel(search: nil) + } +} + +// MARK: - DappBrowserListInteractorOutput +extension DappBrowserListPresenter: DappBrowserListInteractorOutput {} + +// MARK: - Localizable +extension DappBrowserListPresenter: Localizable { + func applyLocalization() {} +} + +extension DappBrowserListPresenter: DappBrowserListModuleInput {} diff --git a/fearless/Modules/DappBrowserList/DappBrowserListProtocols.swift b/fearless/Modules/DappBrowserList/DappBrowserListProtocols.swift new file mode 100644 index 0000000000..c6967f18cd --- /dev/null +++ b/fearless/Modules/DappBrowserList/DappBrowserListProtocols.swift @@ -0,0 +1,18 @@ +import SSFModels + +typealias DappBrowserListModuleCreationResult = ( + view: DappBrowserListViewInput, + input: DappBrowserListModuleInput +) + +protocol DappBrowserListRouterInput: PresentDismissable { + func showDapp( + from view: ControllerBackedProtocol?, + dapp: TonDapp, + wallet: MetaAccountModel + ) +} + +protocol DappBrowserListModuleInput: AnyObject {} + +protocol DappBrowserListModuleOutput: AnyObject {} diff --git a/fearless/Modules/DappBrowserList/DappBrowserListRouter.swift b/fearless/Modules/DappBrowserList/DappBrowserListRouter.swift new file mode 100644 index 0000000000..8dab02327d --- /dev/null +++ b/fearless/Modules/DappBrowserList/DappBrowserListRouter.swift @@ -0,0 +1,16 @@ +import Foundation +import SSFModels + +final class DappBrowserListRouter: DappBrowserListRouterInput { + func showDapp( + from view: ControllerBackedProtocol?, + dapp: TonDapp, + wallet: MetaAccountModel + ) { + guard let module = TonWebBridgeAssembly.configureModule(for: dapp, wallet: wallet, moduleOutput: nil) else { + return + } + + view?.controller.present(module.view.controller, animated: true) + } +} diff --git a/fearless/Modules/DappBrowserList/DappBrowserListViewController.swift b/fearless/Modules/DappBrowserList/DappBrowserListViewController.swift new file mode 100644 index 0000000000..4b9afac82f --- /dev/null +++ b/fearless/Modules/DappBrowserList/DappBrowserListViewController.swift @@ -0,0 +1,170 @@ +import UIKit +import SoraUI +import SnapKit +import SoraFoundation + +protocol DappBrowserListViewOutput: AnyObject { + func didLoad(view: DappBrowserListViewInput) + func searchTextDidChanged(_ text: String?) + func didTapBackButton() + func didSelect(dapp: TonDapp) +} + +final class DappBrowserListViewController: UIViewController, ViewHolder, HiddableBarWhenPushed { + typealias RootViewType = DappBrowserListViewLayout + var keyboardHandler: FearlessKeyboardHandler? + + // MARK: Private properties + private let output: DappBrowserListViewOutput + + var viewModels: [DappBrowserListCellViewModel] = [] + + // MARK: - Constructor + init( + title: String, + output: DappBrowserListViewOutput, + localizationManager: LocalizationManagerProtocol? + ) { + self.output = output + super.init(nibName: nil, bundle: nil) + rootView.navigationBar.setTitle(title) + self.localizationManager = localizationManager + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Life cycle + override func loadView() { + view = DappBrowserListViewLayout() + } + + override func viewDidLoad() { + super.viewDidLoad() + output.didLoad(view: self) + bindActions() + configureTableView() + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + if keyboardHandler == nil { + setupKeyboardHandler() + } + } + + override func viewDidDisappear(_ animated: Bool) { + super.viewDidDisappear(animated) + clearKeyboardHandler() + } + + // MARK: - Private methods + + private func bindActions() { + rootView.navigationBar.backButton.addAction { [weak self] in + self?.output.didTapBackButton() + } + rootView.searchTextField.onTextDidChanged = { [weak self] text in + self?.output.searchTextDidChanged(text) + } + } + + private func configureTableView() { + rootView.tableView.separatorStyle = .none + rootView.tableView.registerClassForCell(DappBrowserListCell.self) + rootView.tableView.delegate = self + rootView.tableView.dataSource = self + rootView.tableView.rowHeight = 64 + } +} + +// MARK: - DappBrowserListViewInput +extension DappBrowserListViewController: DappBrowserListViewInput { + func didReceive(viewModels: [DappBrowserListCellViewModel]) { + self.viewModels = viewModels + rootView.tableView.reloadData() + reloadEmptyState(animated: true) + } +} + +// MARK: - Localizable +extension DappBrowserListViewController: Localizable { + func applyLocalization() { + rootView.locale = selectedLocale + } +} + +// MARK: - KeyboardViewAdoptable + +extension DappBrowserListViewController: KeyboardViewAdoptable { + var target: Constraint? { rootView.keyboardAdoptableConstraint } + + func offsetFromKeyboardWithInset(_: CGFloat) -> CGFloat { 0 } + func updateWhileKeyboardFrameChanging(_: CGRect) {} +} + +// MARK: - UITableViewDataSource + +extension DappBrowserListViewController: UITableViewDataSource { + func tableView(_: UITableView, numberOfRowsInSection _: Int) -> Int { + viewModels.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + guard + let viewModel = viewModels[safe: indexPath.row], + let cell = tableView.dequeueReusableCellWithType(DappBrowserListCell.self) + else { + return UITableViewCell() + } + cell.configure(model: viewModel, position: .list) + return cell + } +} + +// MARK: - UITableViewDelegate + +extension DappBrowserListViewController: UITableViewDelegate { + func tableView(_: UITableView, didSelectRowAt indexPath: IndexPath) { + guard let viewModel = viewModels[safe: indexPath.row] else { + return + } + let dapp = viewModel.dapp + output.didSelect(dapp: dapp) + } +} + +// MARK: - EmptyStateViewOwnerProtocol + +extension DappBrowserListViewController: EmptyStateViewOwnerProtocol { + var emptyStateDelegate: EmptyStateDelegate { self } + var emptyStateDataSource: EmptyStateDataSource { self } +} + +// MARK: - EmptyStateDataSource + +extension DappBrowserListViewController: EmptyStateDataSource { + var viewForEmptyState: UIView? { + let emptyView = EmptyView() + emptyView.image = R.image.iconWarning() + emptyView.title = R.string.localizable + .emptyViewTitle(preferredLanguages: selectedLocale.rLanguages) + emptyView.text = R.string.localizable.dappNotFoundTitle(preferredLanguages: selectedLocale.rLanguages) + emptyView.iconMode = .bigFilledShadow + return emptyView + } + + var contentViewForEmptyState: UIView { + rootView.container + } +} + +// MARK: - EmptyStateDelegate + +extension DappBrowserListViewController: EmptyStateDelegate { + var shouldDisplayEmptyState: Bool { + viewModels.isEmpty + } +} diff --git a/fearless/Modules/DappBrowserList/DappBrowserListViewLayout.swift b/fearless/Modules/DappBrowserList/DappBrowserListViewLayout.swift new file mode 100644 index 0000000000..eb558423d0 --- /dev/null +++ b/fearless/Modules/DappBrowserList/DappBrowserListViewLayout.swift @@ -0,0 +1,85 @@ +import UIKit +import SnapKit + +final class DappBrowserListViewLayout: UIView { + + var locale: Locale = .current { + didSet { + applyLocalization() + } + } + + var keyboardAdoptableConstraint: Constraint? + + let navigationBar: BaseNavigationBar = { + let view = BaseNavigationBar() + view.set(.present) + view.backgroundColor = R.color.colorBlack19() + return view + }() + + let searchTextField: SearchTextField = { + let searchTextField = SearchTextField() + searchTextField.triangularedView?.cornerCut = [.bottomRight, .topLeft] + searchTextField.triangularedView?.strokeWidth = 1 + searchTextField.triangularedView?.strokeColor = R.color.colorWhite8()! + searchTextField.triangularedView?.fillColor = R.color.colorBlack50()! + searchTextField.triangularedView?.highlightedFillColor = R.color.colorBlack50()! + searchTextField.triangularedView?.shadowOpacity = 0 + searchTextField.textField.backgroundColor = R.color.colorBlack50() + searchTextField.textField.tintColor = R.color.colorWhite50() + return searchTextField + }() + + let container = UIView() + let tableView: UITableView = { + let tableView = UITableView() + tableView.backgroundColor = R.color.colorBlack19() + return tableView + }() + + override init(frame: CGRect) { + super.init(frame: frame) + setupLayout() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Private methods + + private func setupLayout() { + backgroundColor = R.color.colorBlack19() + addSubview(navigationBar) + addSubview(searchTextField) + addSubview(container) + container.addSubview(tableView) + + navigationBar.snp.makeConstraints { make in + make.top.equalToSuperview() + make.leading.trailing.equalToSuperview() + make.height.equalTo(56) + } + + searchTextField.snp.makeConstraints { make in + make.top.equalTo(navigationBar.snp.bottom) + make.leading.trailing.equalToSuperview().inset(UIConstants.bigOffset) + } + + container.snp.makeConstraints { make in + make.top.equalTo(searchTextField.snp.bottom).offset(UIConstants.offset12) + make.leading.trailing.equalToSuperview() + keyboardAdoptableConstraint = make.bottom.equalTo(safeAreaLayoutGuide).constraint + } + + tableView.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + } + + private func applyLocalization() { + searchTextField.textField.placeholder = R.string.localizable.commonSearch(preferredLanguages: locale.rLanguages) + } +} diff --git a/fearless/Modules/EcosystemOptions/EcosystemOptionsAssembly.swift b/fearless/Modules/EcosystemOptions/EcosystemOptionsAssembly.swift new file mode 100644 index 0000000000..353510c7e2 --- /dev/null +++ b/fearless/Modules/EcosystemOptions/EcosystemOptionsAssembly.swift @@ -0,0 +1,45 @@ +import UIKit +import SoraUI +import SSFModels +import SoraFoundation + +final class EcosystemOptionsAssembly { + static func configureModule( + ecosystem: Ecosystem, + wallet: MetaAccountModel, + chains: [ChainModel], + moduleOutput: EcosystemOptionsModuleOutput? + ) -> EcosystemOptionsModuleCreationResult? { + let localizationManager = LocalizationManager.shared + + let interactor = EcosystemOptionsInteractor( + wallet: wallet, + keystore: ServiceAssembly.shared.keystore, + availableExportOptionsProvider: AvailableExportOptionsProvider() + ) + let router = EcosystemOptionsRouter() + + let presenter = EcosystemOptionsPresenter( + ecosystem: ecosystem, + wallet: wallet, + chains: chains, + moduleOutput: moduleOutput, + interactor: interactor, + router: router, + localizationManager: localizationManager + ) + + let view = EcosystemOptionsViewController( + output: presenter, + localizationManager: localizationManager + ) + view.modalPresentationStyle = .custom + + let factory = ModalSheetBlurPresentationFactory( + configuration: ModalSheetPresentationConfiguration.fearlessBlur + ) + view.modalTransitioningFactory = factory + + return (view, presenter) + } +} diff --git a/fearless/Modules/EcosystemOptions/EcosystemOptionsInteractor.swift b/fearless/Modules/EcosystemOptions/EcosystemOptionsInteractor.swift new file mode 100644 index 0000000000..5972f90f77 --- /dev/null +++ b/fearless/Modules/EcosystemOptions/EcosystemOptionsInteractor.swift @@ -0,0 +1,40 @@ +import UIKit +import SoraKeystore +import SSFModels + +protocol EcosystemOptionsInteractorOutput: AnyObject {} + +final class EcosystemOptionsInteractor { + // MARK: - Private properties + private weak var output: EcosystemOptionsInteractorOutput? + + private let wallet: MetaAccountModel + private let keystore: KeystoreProtocol + private let availableExportOptionsProvider: AvailableExportOptionsProviderProtocol + + init( + wallet: MetaAccountModel, + keystore: KeystoreProtocol, + availableExportOptionsProvider: AvailableExportOptionsProviderProtocol + ) { + self.wallet = wallet + self.keystore = keystore + self.availableExportOptionsProvider = availableExportOptionsProvider + } +} + +// MARK: - EcosystemOptionsInteractorInput +extension EcosystemOptionsInteractor: EcosystemOptionsInteractorInput { + func setup(with output: EcosystemOptionsInteractorOutput) { + self.output = output + } + + func getAvailableExportOptions(for ecosystem: Ecosystem) -> [ExportOption] { + let options = availableExportOptionsProvider.getAvailableExportOptions( + for: wallet, + accountId: nil, + ecosystem: ecosystem + ) + return options + } +} diff --git a/fearless/Modules/EcosystemOptions/EcosystemOptionsPresenter.swift b/fearless/Modules/EcosystemOptions/EcosystemOptionsPresenter.swift new file mode 100644 index 0000000000..7af5a158bd --- /dev/null +++ b/fearless/Modules/EcosystemOptions/EcosystemOptionsPresenter.swift @@ -0,0 +1,94 @@ +import Foundation +import SSFModels +import SoraFoundation + +protocol EcosystemOptionsViewInput: ControllerBackedProtocol {} + +protocol EcosystemOptionsInteractorInput: AnyObject { + func setup(with output: EcosystemOptionsInteractorOutput) + func getAvailableExportOptions(for ecosystem: Ecosystem) -> [ExportOption] +} + +final class EcosystemOptionsPresenter { + // MARK: Private properties + private weak var moduleOutput: EcosystemOptionsModuleOutput? + private weak var view: EcosystemOptionsViewInput? + private let router: EcosystemOptionsRouterInput + private let interactor: EcosystemOptionsInteractorInput + + private let wallet: MetaAccountModel + private let chains: [ChainModel] + private let ecosystem: Ecosystem + + // MARK: - Constructors + init( + ecosystem: Ecosystem, + wallet: MetaAccountModel, + chains: [ChainModel], + moduleOutput: EcosystemOptionsModuleOutput?, + interactor: EcosystemOptionsInteractorInput, + router: EcosystemOptionsRouterInput, + localizationManager: LocalizationManagerProtocol + ) { + self.ecosystem = ecosystem + self.wallet = wallet + self.chains = chains + self.moduleOutput = moduleOutput + self.interactor = interactor + self.router = router + self.localizationManager = localizationManager + } + + // MARK: - Private methods + + private func prepareChainAccountInfos() -> [ChainAccountInfo] { + let chainAccountsInfo = chains.compactMap { chain -> ChainAccountInfo? in + guard let accountResponse = wallet.fetch(for: chain.accountRequest()), !accountResponse.isChainAccount else { + return nil + } + return ChainAccountInfo( + chain: chain, + account: accountResponse + ) + }.compactMap { $0 } + return chainAccountsInfo + } +} + +// MARK: - EcosystemOptionsViewOutput +extension EcosystemOptionsPresenter: EcosystemOptionsViewOutput { + func didTapOnBackup() { + let options = interactor.getAvailableExportOptions(for: ecosystem) + let accounts = prepareChainAccountInfos() + let flow: ExportFlow = .multiple(wallet: wallet, accounts: accounts) + + router.dismiss(view: view) + if options.contains(.mnemonic) { + moduleOutput?.showMnemonicExport(flow: flow) + } else if options.contains(.seed) { + moduleOutput?.showSeedExport(flow: flow) + } else { + moduleOutput?.showKeystoreExport(flow: flow) + } + } + + func didTapOnAccounts() { + router.dismiss(view: view) + moduleOutput?.showWalletDetails(chains: chains) + } + + func didLoad(view: EcosystemOptionsViewInput) { + self.view = view + interactor.setup(with: self) + } +} + +// MARK: - EcosystemOptionsInteractorOutput +extension EcosystemOptionsPresenter: EcosystemOptionsInteractorOutput {} + +// MARK: - Localizable +extension EcosystemOptionsPresenter: Localizable { + func applyLocalization() {} +} + +extension EcosystemOptionsPresenter: EcosystemOptionsModuleInput {} diff --git a/fearless/Modules/EcosystemOptions/EcosystemOptionsProtocols.swift b/fearless/Modules/EcosystemOptions/EcosystemOptionsProtocols.swift new file mode 100644 index 0000000000..0fbedbf4eb --- /dev/null +++ b/fearless/Modules/EcosystemOptions/EcosystemOptionsProtocols.swift @@ -0,0 +1,17 @@ +import SSFModels + +typealias EcosystemOptionsModuleCreationResult = ( + view: EcosystemOptionsViewInput, + input: EcosystemOptionsModuleInput +) + +protocol EcosystemOptionsRouterInput: AnyDismissable {} + +protocol EcosystemOptionsModuleInput: AnyObject {} + +protocol EcosystemOptionsModuleOutput: AnyObject { + func showMnemonicExport(flow: ExportFlow) + func showKeystoreExport(flow: ExportFlow) + func showSeedExport(flow: ExportFlow) + func showWalletDetails(chains: [ChainModel]?) +} diff --git a/fearless/Modules/EcosystemOptions/EcosystemOptionsRouter.swift b/fearless/Modules/EcosystemOptions/EcosystemOptionsRouter.swift new file mode 100644 index 0000000000..5f68e2b456 --- /dev/null +++ b/fearless/Modules/EcosystemOptions/EcosystemOptionsRouter.swift @@ -0,0 +1,4 @@ +import Foundation +import SSFModels + +final class EcosystemOptionsRouter: EcosystemOptionsRouterInput {} diff --git a/fearless/Modules/EcosystemOptions/EcosystemOptionsViewController.swift b/fearless/Modules/EcosystemOptions/EcosystemOptionsViewController.swift new file mode 100644 index 0000000000..dd4403cdf2 --- /dev/null +++ b/fearless/Modules/EcosystemOptions/EcosystemOptionsViewController.swift @@ -0,0 +1,62 @@ +import UIKit +import SoraFoundation + +protocol EcosystemOptionsViewOutput: AnyObject { + func didLoad(view: EcosystemOptionsViewInput) + func didTapOnBackup() + func didTapOnAccounts() +} + +final class EcosystemOptionsViewController: UIViewController, ViewHolder { + typealias RootViewType = EcosystemOptionsViewLayout + + // MARK: Private properties + private let output: EcosystemOptionsViewOutput + + // MARK: - Constructor + init( + output: EcosystemOptionsViewOutput, + localizationManager: LocalizationManagerProtocol? + ) { + self.output = output + super.init(nibName: nil, bundle: nil) + self.localizationManager = localizationManager + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Life cycle + override func loadView() { + view = EcosystemOptionsViewLayout() + } + + override func viewDidLoad() { + super.viewDidLoad() + output.didLoad(view: self) + bindActions() + } + + // MARK: - Private methods + + private func bindActions() { + rootView.backupWalletButton.addAction { [weak self] in + self?.output.didTapOnBackup() + } + rootView.accountsDetailsButton.addAction { [weak self] in + self?.output.didTapOnAccounts() + } + } +} + +// MARK: - EcosystemOptionsViewInput +extension EcosystemOptionsViewController: EcosystemOptionsViewInput {} + +// MARK: - Localizable +extension EcosystemOptionsViewController: Localizable { + func applyLocalization() { + rootView.locale = selectedLocale + } +} diff --git a/fearless/Modules/EcosystemOptions/EcosystemOptionsViewLayout.swift b/fearless/Modules/EcosystemOptions/EcosystemOptionsViewLayout.swift new file mode 100644 index 0000000000..aa10ce2da9 --- /dev/null +++ b/fearless/Modules/EcosystemOptions/EcosystemOptionsViewLayout.swift @@ -0,0 +1,107 @@ +import UIKit + +final class EcosystemOptionsViewLayout: UIView { + private enum Constants { + static let headerHeight: CGFloat = 56.0 + static let cornerRadius: CGFloat = 20.0 + } + + let titleLabel: UILabel = { + let titleLabel = UILabel() + titleLabel.font = .h3Title + return titleLabel + }() + + let backupWalletButton: TriangularedButton = { + let button = TriangularedButton() + button.triangularedView?.fillColor = R.color.colorBlack1()! + button.triangularedView?.shadowOpacity = 0 + button.imageWithTitleView?.titleFont = .h4Title + return button + }() + + let accountsDetailsButton: TriangularedButton = { + let button = TriangularedButton() + button.triangularedView?.fillColor = R.color.colorBlack1()! + button.triangularedView?.shadowOpacity = 0 + button.imageWithTitleView?.titleFont = .h4Title + return button + }() + + var locale: Locale = .current { + didSet { + applyLocale() + } + } + + private lazy var buttons: [TriangularedButton] = { + [ + backupWalletButton, + accountsDetailsButton + ] + }() + + override init(frame: CGRect) { + super.init(frame: frame) + setupLayout() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Private methods + + private func applyLocale() { + titleLabel.text = R.string.localizable.ecosystemOptionsTitle(preferredLanguages: locale.rLanguages) + backupWalletButton.imageWithTitleView?.title = R.string.localizable.ecosystemOptionsBackupTitle(preferredLanguages: locale.rLanguages) + accountsDetailsButton.imageWithTitleView?.title = R.string.localizable.ecosystemOptionsDetailsTitle(preferredLanguages: locale.rLanguages) + } + + private func setupLayout() { + backgroundColor = R.color.colorAlmostBlack()! + layer.cornerRadius = Constants.cornerRadius + clipsToBounds = true + + let navView = UIView() + addSubview(navView) + navView.snp.makeConstraints { make in + make.top.leading.trailing.equalToSuperview() + make.height.equalTo(Constants.headerHeight) + } + + navView.addSubview(titleLabel) + titleLabel.snp.makeConstraints { make in + make.center.equalToSuperview() + } + + let indicator = UIFactory.default.createIndicatorView() + + navView.addSubview(indicator) + indicator.snp.makeConstraints { make in + make.size.equalTo(UIConstants.indicatorSize) + make.top.equalTo(navView.snp.top) + make.centerX.equalTo(navView.snp.centerX) + } + + buttons.forEach { + $0.snp.makeConstraints { make in + make.height.equalTo(UIConstants.actionHeight) + } + } + + let vStackView = UIFactory.default.createVerticalStackView(spacing: UIConstants.accessoryItemsSpacing) + vStackView.backgroundColor = .clear + addSubview(vStackView) + vStackView.snp.makeConstraints { make in + make.top.equalTo(navView.snp.bottom).offset(UIConstants.accessoryItemsSpacing) + make.leading.trailing.equalToSuperview().inset(UIConstants.bigOffset) + make.bottom.equalTo(safeAreaLayoutGuide.snp.bottom).inset(UIConstants.accessoryItemsSpacing) + } + + buttons.forEach { + vStackView.addArrangedSubview($0) + } + } +} diff --git a/fearless/Modules/Export/AccountExportPassword/AccountExportPasswordInteractor.swift b/fearless/Modules/Export/AccountExportPassword/AccountExportPasswordInteractor.swift index c2525e6c47..5ae855efe6 100644 --- a/fearless/Modules/Export/AccountExportPassword/AccountExportPasswordInteractor.swift +++ b/fearless/Modules/Export/AccountExportPassword/AccountExportPasswordInteractor.swift @@ -2,6 +2,7 @@ import UIKit import RobinHood import IrohaCrypto import SSFModels +import SSFCrypto enum AccountExportPasswordInteractorError: Error { case missingAccount @@ -43,7 +44,15 @@ extension AccountExportPasswordInteractor: AccountExportPasswordInteractorInputP ) { var jsons: [RestoreJson] = [] - for chainAccount in accounts { + let substrateAndEthereumAccounts = accounts.filter { + switch $0.account.ecosystem { + case .substrate, .ethereumBased, .ethereum: + return true + case .ton: + return false + } + } + for chainAccount in substrateAndEthereumAccounts { if let data = try? exportJsonWrapper.export( chainAccount: chainAccount.account, password: password, diff --git a/fearless/Modules/Export/ExportFlow.swift b/fearless/Modules/Export/ExportFlow.swift index a844e529ad..b72db22687 100644 --- a/fearless/Modules/Export/ExportFlow.swift +++ b/fearless/Modules/Export/ExportFlow.swift @@ -11,18 +11,24 @@ enum ExportFlow { } var accountsToExport: [ChainAccountInfo] = [] - accounts.forEach { chainAccountInfo in - if !chainAccountInfo.account.isChainAccount { - if chainAccountInfo.account.isEthereumBased, accountsToExport.first(where: { $0.account.isEthereumBased && !$0.account.isChainAccount }) == nil { - accountsToExport.append(chainAccountInfo) - } - - if !chainAccountInfo.account.isEthereumBased, accountsToExport.first(where: { !$0.account.isEthereumBased && !$0.account.isChainAccount }) == nil { - accountsToExport.append(chainAccountInfo) - } - } else { + if chainAccountInfo.account.isChainAccount { accountsToExport.append(chainAccountInfo) + } else { + switch chainAccountInfo.account.ecosystem { + case .substrate: + if accountsToExport.first(where: { $0.account.ecosystem.isSubstrate }) == nil { + accountsToExport.append(chainAccountInfo) + } + case .ethereumBased, .ethereum: + if accountsToExport.first(where: { $0.account.ecosystem.isEthereum || $0.account.ecosystem.isEthereumBased }) == nil { + accountsToExport.append(chainAccountInfo) + } + case .ton: + if accountsToExport.first(where: { $0.account.ecosystem.isTon }) == nil { + accountsToExport.append(chainAccountInfo) + } + } } } diff --git a/fearless/Modules/Export/ExportGenericView/ExportGenericViewController.swift b/fearless/Modules/Export/ExportGenericView/ExportGenericViewController.swift index 9738a50ff6..68ced83020 100644 --- a/fearless/Modules/Export/ExportGenericView/ExportGenericViewController.swift +++ b/fearless/Modules/Export/ExportGenericView/ExportGenericViewController.swift @@ -45,7 +45,15 @@ final class ExportGenericViewController: UIViewController, ImportantViewProtocol return true } switch (option, flow) { - case (.mnemonic, _): + case let (.mnemonic, flow): + if case let .multiple(wallet, _) = flow { + switch flow.wallet.ecosystem { + case .regular: + return true + case .ton: + return false + } + } return true case let (.seed, flow): if case let .single(chain, _, _) = flow, chain.isEthereumBased { @@ -164,7 +172,7 @@ final class ExportGenericViewController: UIViewController, ImportantViewProtocol view.removeFromSuperview() } - sourceTypeView.subtitle = viewModel.option.titleForLocale(locale, ethereumBased: nil) + sourceTypeView.subtitle = viewModel.option.titleForLocale(locale, ecosystem: nil) var views: [UIView] = [] viewModel.viewModels.forEach { exportViewModel in if let view = setupExportDataView(exportViewModel) { @@ -172,10 +180,13 @@ final class ExportGenericViewController: UIViewController, ImportantViewProtocol } if viewModel.option == .keystore { - if exportViewModel.ethereumBased { - setupExportEthereumButton() - } else { + switch exportViewModel.ecosystem { + case .substrate: setupExportSubstrateButton() + case .ethereumBased, .ethereum: + setupExportEthereumButton() + case .ton: + break } } else if mainOptionTitle != nil { setupMainActionButton() @@ -490,23 +501,23 @@ extension ExportGenericViewController { var subviews: [UIView] = [] - if let cryptoType = exportViewModel.cryptoType { - let cryptoTypeView = setupCryptoTypeView( - cryptoType: cryptoType, - advancedContainerView: containerView, - locale: locale, - isEthereum: exportViewModel.ethereumBased - ) + if let cryptoType = exportViewModel.cryptoType, + let cryptoTypeView = setupCryptoTypeView( + cryptoType: cryptoType, + advancedContainerView: containerView, + locale: locale, + ecosystem: exportViewModel.ecosystem + ) { subviews.append(cryptoTypeView) } - if let derivationPath = exportViewModel.derivationPath { - let derivationPathView = setupDerivationView( - derivationPath, - advancedContainerView: containerView, - locale: locale, - isEthereum: exportViewModel.ethereumBased - ) + if let derivationPath = exportViewModel.derivationPath, + let derivationPathView = setupDerivationView( + derivationPath, + advancedContainerView: containerView, + locale: locale, + ecosystem: exportViewModel.ecosystem + ) { subviews.append(derivationPathView) } @@ -527,15 +538,20 @@ extension ExportGenericViewController { cryptoType: CryptoType, advancedContainerView: UIStackView, locale: Locale, - isEthereum: Bool - ) -> UIView { + ecosystem: Ecosystem + ) -> UIView? { let cryptoView = uiFactory.createDetailsView(with: .largeIconTitleSubtitle, filled: true) cryptoView.translatesAutoresizingMaskIntoConstraints = false advancedContainerView.addArrangedSubview(cryptoView) - cryptoView.title = isEthereum - ? R.string.localizable.ethereumCryptoType(preferredLanguages: locale.rLanguages) - : R.string.localizable.substrateCryptoType(preferredLanguages: locale.rLanguages) + switch ecosystem { + case .substrate: + cryptoView.title = R.string.localizable.substrateCryptoType(preferredLanguages: locale.rLanguages) + case .ethereumBased, .ethereum: + cryptoView.title = R.string.localizable.ethereumCryptoType(preferredLanguages: locale.rLanguages) + case .ton: + return nil + } cryptoView.subtitle = cryptoType.titleForLocale(locale) + " | " + cryptoType.subtitleForLocale(locale) @@ -546,15 +562,20 @@ extension ExportGenericViewController { _ path: String, advancedContainerView: UIStackView, locale: Locale, - isEthereum: Bool - ) -> UIView { + ecosystem: Ecosystem + ) -> UIView? { let derivationPathView = uiFactory.createDetailsView(with: .largeIconTitleSubtitle, filled: true) derivationPathView.translatesAutoresizingMaskIntoConstraints = false advancedContainerView.addArrangedSubview(derivationPathView) - derivationPathView.title = isEthereum - ? R.string.localizable.ethereumSecretDerivationPath(preferredLanguages: locale.rLanguages) - : R.string.localizable.substrateSecretDerivationPath(preferredLanguages: locale.rLanguages) + switch ecosystem { + case .substrate: + derivationPathView.title = R.string.localizable.substrateSecretDerivationPath(preferredLanguages: locale.rLanguages) + case .ethereumBased, .ethereum: + derivationPathView.title = R.string.localizable.ethereumSecretDerivationPath(preferredLanguages: locale.rLanguages) + case .ton: + return nil + } derivationPathView.subtitle = path return derivationPathView diff --git a/fearless/Modules/Export/ExportGenericView/ExportGenericViewModel.swift b/fearless/Modules/Export/ExportGenericView/ExportGenericViewModel.swift index edc5c36f53..a8462f1d6b 100644 --- a/fearless/Modules/Export/ExportGenericView/ExportGenericViewModel.swift +++ b/fearless/Modules/Export/ExportGenericView/ExportGenericViewModel.swift @@ -17,7 +17,7 @@ protocol ExportGenericViewModelProtocol { var chain: ChainModel? { get } var cryptoType: CryptoType? { get } var derivationPath: String? { get } - var ethereumBased: Bool { get } + var ecosystem: Ecosystem { get } func accept(binder: ExportGenericViewModelBinding, locale: Locale) -> UIView } @@ -30,16 +30,11 @@ struct MultiExportViewModel: MultipleExportGenericViewModelProtocol { struct ExportStringViewModel: ExportGenericViewModelProtocol { let option: ExportOption - let chain: ChainModel? - let cryptoType: CryptoType? - let derivationPath: String? - let data: String - - let ethereumBased: Bool + let ecosystem: Ecosystem func accept(binder: ExportGenericViewModelBinding, locale: Locale) -> UIView { if option == .seed { @@ -52,16 +47,11 @@ struct ExportStringViewModel: ExportGenericViewModelProtocol { struct ExportMnemonicViewModel: ExportGenericViewModelProtocol { let option: ExportOption - let chain: ChainModel? - let cryptoType: CryptoType? - let derivationPath: String? - let mnemonic: [String] - - let ethereumBased: Bool + let ecosystem: Ecosystem func accept(binder: ExportGenericViewModelBinding, locale: Locale) -> UIView { binder.bind(mnemonicViewModel: self, locale: locale) diff --git a/fearless/Modules/Export/ExportGenericView/ExportGenericViewModelBinder.swift b/fearless/Modules/Export/ExportGenericView/ExportGenericViewModelBinder.swift index e2cf3194cf..f517d88ca7 100644 --- a/fearless/Modules/Export/ExportGenericView/ExportGenericViewModelBinder.swift +++ b/fearless/Modules/Export/ExportGenericView/ExportGenericViewModelBinder.swift @@ -15,7 +15,7 @@ final class ExportGenericViewModelBinder: ExportGenericViewModelBinding { .constraint(equalToConstant: UIConstants.triangularedViewHeight).isActive = true detailsView.subtitleLabel?.lineBreakMode = .byTruncatingMiddle - detailsView.title = stringViewModel.option.titleForLocale(locale, ethereumBased: stringViewModel.ethereumBased) + detailsView.title = stringViewModel.option.titleForLocale(locale, ecosystem: stringViewModel.ecosystem) detailsView.subtitle = stringViewModel.data return detailsView @@ -24,7 +24,7 @@ final class ExportGenericViewModelBinder: ExportGenericViewModelBinding { func bind(multilineViewModel: ExportStringViewModel, locale: Locale) -> UIView { let detailsView = uiFactory.createMultilinedTriangularedView() - detailsView.titleLabel.text = multilineViewModel.option.titleForLocale(locale, ethereumBased: multilineViewModel.ethereumBased) + detailsView.titleLabel.text = multilineViewModel.option.titleForLocale(locale, ecosystem: multilineViewModel.ecosystem) detailsView.subtitleLabel.text = multilineViewModel.data return detailsView diff --git a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicData.swift b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicData.swift index 230869caf2..0134ff7eaa 100644 --- a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicData.swift +++ b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicData.swift @@ -4,7 +4,7 @@ import SSFUtils import SSFModels struct ExportMnemonicData { - let mnemonic: IRMnemonicProtocol + let mnemonic: [String] let derivationPath: String? let cryptoType: CryptoType? let chain: ChainModel diff --git a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicInteractor.swift b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicInteractor.swift index 491bf2517c..3f431fd0c9 100644 --- a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicInteractor.swift +++ b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicInteractor.swift @@ -4,6 +4,7 @@ import RobinHood import IrohaCrypto import SSFUtils import SSFModels +import TonSwift enum ExportMnemonicInteractorError: Error { case missingAccount @@ -37,16 +38,28 @@ extension ExportMnemonicInteractor: ExportMnemonicInteractorInputProtocol { let entropyTag = KeystoreTagV2.entropyTagForMetaId(wallet.metaId, accountId: accountId) let entropy = try keystore.fetchKey(for: entropyTag) - let mnemonic = try IRMnemonicCreator().mnemonic(fromEntropy: entropy) + let allWords: [String] + switch wallet.ecosystem { + case .regular: + let mnemonic = try IRMnemonicCreator().mnemonic(fromEntropy: entropy) + allWords = mnemonic.allWords() + case .ton: + guard let mnemonic = String(data: entropy, encoding: .utf8) else { + return + } + allWords = mnemonic.components(separatedBy: " ") + } + let derivationPathTag = chainAccount.chain.isEthereumBased ? KeystoreTagV2.ethereumDerivationTagForMetaId(wallet.metaId, accountId: accountId) : KeystoreTagV2.substrateDerivationTagForMetaId(wallet.metaId, accountId: accountId) let derivationPath: String? = try keystore.fetchDeriviationForAddress(derivationPathTag) + let isEthereum = chainAccount.account.ecosystem.isEthereum || chainAccount.account.ecosystem.isEthereumBased let data = ExportMnemonicData( - mnemonic: mnemonic, + mnemonic: allWords, derivationPath: derivationPath, - cryptoType: chainAccount.account.isEthereumBased ? nil : chainAccount.account.cryptoType, + cryptoType: isEthereum ? nil : chainAccount.account.cryptoType, chain: chainAccount.chain ) @@ -71,6 +84,7 @@ extension ExportMnemonicInteractor: ExportMnemonicInteractorInputProtocol { return } self?.fetchExportData( + ecosystem: wallet.ecosystem, metaId: wallet.metaId, accountId: response.isChainAccount ? accountId : nil, cryptoType: response.cryptoType, @@ -83,6 +97,7 @@ extension ExportMnemonicInteractor: ExportMnemonicInteractorInputProtocol { } private func fetchExportData( + ecosystem: WalletEcosystem, metaId: String, accountId: AccountId?, cryptoType: CryptoType, @@ -94,14 +109,24 @@ extension ExportMnemonicInteractor: ExportMnemonicInteractorInputProtocol { throw ExportMnemonicInteractorError.missingEntropy } - let mnemonic = try IRMnemonicCreator().mnemonic(fromEntropy: entropy) + let allWords: [String] + switch ecosystem { + case .regular: + let mnemonic = try IRMnemonicCreator().mnemonic(fromEntropy: entropy) + allWords = mnemonic.allWords() + case .ton: + guard let mnemonic = String(data: entropy, encoding: .utf8) else { + throw ExportMnemonicInteractorError.missingEntropy + } + allWords = mnemonic.components(separatedBy: " ") + } let derivationPathTag = chain.isEthereumBased ? KeystoreTagV2.ethereumDerivationTagForMetaId(metaId, accountId: accountId) : KeystoreTagV2.substrateDerivationTagForMetaId(metaId, accountId: accountId) let derivationPath: String? = try self?.keystore.fetchDeriviationForAddress(derivationPathTag) return ExportMnemonicData( - mnemonic: mnemonic, + mnemonic: allWords, derivationPath: derivationPath, cryptoType: cryptoType, chain: chain diff --git a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicPresenter.swift b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicPresenter.swift index 8d0a46e9e7..65aad2ed8a 100644 --- a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicPresenter.swift +++ b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicPresenter.swift @@ -32,7 +32,7 @@ final class ExportMnemonicPresenter { text = R.string.localizable .exportMnemonicWithDpTemplate( exportData.chain.name, - exportData.mnemonic.toString(), + exportData.mnemonic.joined(separator: " "), derivationPath, preferredLanguages: locale.rLanguages ) @@ -40,7 +40,7 @@ final class ExportMnemonicPresenter { text = R.string.localizable .exportMnemonicWithoutDpTemplate( exportData.chain.name, - exportData.mnemonic.toString(), + exportData.mnemonic.joined(separator: " "), preferredLanguages: locale.rLanguages ) } @@ -108,8 +108,8 @@ extension ExportMnemonicPresenter: ExportMnemonicInteractorOutputProtocol { chain: exportData.chain, cryptoType: exportData.cryptoType, derivationPath: exportData.derivationPath, - mnemonic: exportData.mnemonic.allWords(), - ethereumBased: exportData.chain.isEthereumBased + mnemonic: exportData.mnemonic, + ecosystem: exportData.chain.ecosystem ) } diff --git a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicProtocols.swift b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicProtocols.swift index 0ff0b13abf..44305967c1 100644 --- a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicProtocols.swift +++ b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicProtocols.swift @@ -14,7 +14,7 @@ protocol ExportMnemonicInteractorOutputProtocol: AnyObject { protocol ExportMnemonicWireframeProtocol: ExportGenericWireframeProtocol { func close(view: ExportGenericViewProtocol?) func openConfirmationForMnemonic( - _ mnemonic: IRMnemonicProtocol, + _ mnemonic: [String], wallet: MetaAccountModel, from view: ExportGenericViewProtocol? ) diff --git a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicWireframe.swift b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicWireframe.swift index 3d36f468c8..57ef88b905 100644 --- a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicWireframe.swift +++ b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicWireframe.swift @@ -1,9 +1,10 @@ import Foundation import IrohaCrypto +import SSFModels final class ExportMnemonicWireframe: ExportMnemonicWireframeProtocol { func openConfirmationForMnemonic( - _ mnemonic: IRMnemonicProtocol, + _ mnemonic: [String], wallet: MetaAccountModel, from view: ExportGenericViewProtocol? ) { diff --git a/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmInteractor.swift b/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmInteractor.swift index f77d68b102..a6eef718dd 100644 --- a/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmInteractor.swift +++ b/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmInteractor.swift @@ -1,17 +1,18 @@ import UIKit import IrohaCrypto +import SSFModels final class ExportMnemonicConfirmInteractor { weak var presenter: AccountConfirmInteractorOutputProtocol! - private let mnemonic: IRMnemonicProtocol + private let mnemonic: [String] private let shuffledWords: [String] private let settings: SelectedWalletSettings private let wallet: MetaAccountModel private let eventCenter: EventCenterProtocol init( - mnemonic: IRMnemonicProtocol, + mnemonic: [String], settings: SelectedWalletSettings, wallet: MetaAccountModel, eventCenter: EventCenterProtocol @@ -20,7 +21,7 @@ final class ExportMnemonicConfirmInteractor { self.settings = settings self.wallet = wallet self.eventCenter = eventCenter - shuffledWords = mnemonic.allWords().shuffled() + shuffledWords = mnemonic.shuffled() } } @@ -34,7 +35,7 @@ extension ExportMnemonicConfirmInteractor: AccountConfirmInteractorInputProtocol } func confirm(words: [String]) { - guard words == mnemonic.allWords() else { + guard words == mnemonic else { presenter.didReceive( words: shuffledWords, afterConfirmationFail: true diff --git a/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmProtocols.swift b/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmProtocols.swift index c37f434434..897a1e2ebb 100644 --- a/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmProtocols.swift +++ b/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmProtocols.swift @@ -1,9 +1,10 @@ import Foundation import IrohaCrypto +import SSFModels protocol ExportMnemonicConfirmViewFactoryProtocol { static func createViewForMnemonic( - _ mnemonic: IRMnemonicProtocol, + _ mnemonic: [String], wallet: MetaAccountModel ) -> AccountConfirmViewProtocol? } diff --git a/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmViewFactory.swift b/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmViewFactory.swift index 00e5fd2b7b..b740e41b20 100644 --- a/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmViewFactory.swift +++ b/fearless/Modules/Export/ExportMnemonicConfirm/ExportMnemonicConfirmViewFactory.swift @@ -1,10 +1,11 @@ import Foundation import IrohaCrypto import SoraFoundation +import SSFModels final class ExportMnemonicConfirmViewFactory: ExportMnemonicConfirmViewFactoryProtocol { static func createViewForMnemonic( - _ mnemonic: IRMnemonicProtocol, + _ mnemonic: [String], wallet: MetaAccountModel ) -> AccountConfirmViewProtocol? { let view = AccountConfirmViewController(nib: R.nib.accountConfirmViewController) diff --git a/fearless/Modules/Export/ExportRestoreJson/ExportRestoreJsonInteractor.swift b/fearless/Modules/Export/ExportRestoreJson/ExportRestoreJsonInteractor.swift index be665ac7cf..e4d94a9cc6 100644 --- a/fearless/Modules/Export/ExportRestoreJson/ExportRestoreJsonInteractor.swift +++ b/fearless/Modules/Export/ExportRestoreJson/ExportRestoreJsonInteractor.swift @@ -1,6 +1,7 @@ import Foundation import UIKit import IrohaCrypto +import SSFModels final class ExportRestoreJsonInteractor { private let settings: SelectedWalletSettings diff --git a/fearless/Modules/Export/ExportRestoreJson/ExportRestoreJsonPresenter.swift b/fearless/Modules/Export/ExportRestoreJson/ExportRestoreJsonPresenter.swift index ecbd0dcd17..57d384ee71 100644 --- a/fearless/Modules/Export/ExportRestoreJson/ExportRestoreJsonPresenter.swift +++ b/fearless/Modules/Export/ExportRestoreJson/ExportRestoreJsonPresenter.swift @@ -84,7 +84,7 @@ extension ExportRestoreJsonPresenter: ExportGenericPresenterProtocol { cryptoType: model.cryptoType, derivationPath: nil, data: model.data, - ethereumBased: model.chain.isEthereumBased + ecosystem: model.chain.ecosystem ) } diff --git a/fearless/Modules/Export/ExportSeed/ExportSeedInteractor.swift b/fearless/Modules/Export/ExportSeed/ExportSeedInteractor.swift index 3b5cf3a75f..a5adf694f1 100644 --- a/fearless/Modules/Export/ExportSeed/ExportSeedInteractor.swift +++ b/fearless/Modules/Export/ExportSeed/ExportSeedInteractor.swift @@ -55,22 +55,24 @@ extension ExportSeedInteractor: ExportSeedInteractorInputProtocol { func fetchExportDataForWallet(_ wallet: MetaAccountModel, accounts: [ChainAccountInfo]) { var seeds: [ExportSeedData] = [] - for chainAccount in accounts { + let substrateAndEthereumAccounts = accounts.filter { + switch $0.account.ecosystem { + case .substrate, .ethereumBased, .ethereum: + return true + case .ton: + return false + } + } + for chainAccount in substrateAndEthereumAccounts { let chain = chainAccount.chain let account = chainAccount.account let accountId = account.isChainAccount ? account.accountId : nil do { - let seedTag = chain.isEthereumBased - ? KeystoreTagV2.ethereumSecretKeyTagForMetaId(wallet.metaId, accountId: accountId) - : KeystoreTagV2.substrateSeedTagForMetaId(wallet.metaId, accountId: accountId) - + let seedTag = KeystoreTagV2.seedKeyTag(for: chain.ecosystem, metaId: wallet.metaId, accountId: accountId) var optionalSeed: Data? = try keystore.fetchKey(for: seedTag) - let keyTag = chain.isEthereumBased - ? KeystoreTagV2.ethereumSecretKeyTagForMetaId(wallet.metaId, accountId: accountId) - : KeystoreTagV2.substrateSecretKeyTagForMetaId(wallet.metaId, accountId: accountId) - + let keyTag = KeystoreTagV2.secretKeyTag(for: chain.ecosystem, metaId: wallet.metaId, accountId: accountId) if optionalSeed == nil, account.cryptoType.supportsSeedFromSecretKey { optionalSeed = try keystore.fetchKey(for: keyTag) } diff --git a/fearless/Modules/Export/ExportSeed/ExportSeedPresenter.swift b/fearless/Modules/Export/ExportSeed/ExportSeedPresenter.swift index a9b7410273..05ae753df3 100644 --- a/fearless/Modules/Export/ExportSeed/ExportSeedPresenter.swift +++ b/fearless/Modules/Export/ExportSeed/ExportSeedPresenter.swift @@ -104,7 +104,7 @@ extension ExportSeedPresenter: ExportSeedInteractorOutputProtocol { cryptoType: seedData.chain.isEthereumBased ? nil : seedData.cryptoType, derivationPath: seedData.derivationPath, data: seedData.seed.toHex(includePrefix: true), - ethereumBased: seedData.chain.isEthereumBased + ecosystem: seedData.chain.ecosystem ) } diff --git a/fearless/Modules/Export/ExportSeed/ExportSeedProtocols.swift b/fearless/Modules/Export/ExportSeed/ExportSeedProtocols.swift index f1aff51f09..1ac6280ac2 100644 --- a/fearless/Modules/Export/ExportSeed/ExportSeedProtocols.swift +++ b/fearless/Modules/Export/ExportSeed/ExportSeedProtocols.swift @@ -1,4 +1,3 @@ - import SSFModels protocol ExportSeedInteractorInputProtocol: AnyObject { diff --git a/fearless/Modules/FeatureToggleList/FeatureToggleListAssembly.swift b/fearless/Modules/FeatureToggleList/FeatureToggleListAssembly.swift new file mode 100644 index 0000000000..2e9fa632d9 --- /dev/null +++ b/fearless/Modules/FeatureToggleList/FeatureToggleListAssembly.swift @@ -0,0 +1,24 @@ +import UIKit +import SoraFoundation + +final class FeatureToggleListAssembly { + static func configureModule() -> FeatureToggleListModuleCreationResult? { + let localizationManager = LocalizationManager.shared + + let interactor = FeatureToggleListInteractor() + let router = FeatureToggleListRouter() + + let presenter = FeatureToggleListPresenter( + interactor: interactor, + router: router, + localizationManager: localizationManager + ) + + let view = FeatureToggleListViewController( + output: presenter, + localizationManager: localizationManager + ) + + return (view, presenter) + } +} diff --git a/fearless/Modules/FeatureToggleList/FeatureToggleListInteractor.swift b/fearless/Modules/FeatureToggleList/FeatureToggleListInteractor.swift new file mode 100644 index 0000000000..9824eebb5e --- /dev/null +++ b/fearless/Modules/FeatureToggleList/FeatureToggleListInteractor.swift @@ -0,0 +1,30 @@ +import UIKit +import RobinHood + +protocol FeatureToggleListInteractorOutput: AnyObject {} + +final class FeatureToggleListInteractor { + // MARK: - Private properties + private weak var output: FeatureToggleListInteractorOutput? + + private lazy var storage: LocalToggleService = { + ServiceAssembly.shared.localToggle + }() +} + +// MARK: - FeatureToggleListInteractorInput +extension FeatureToggleListInteractor: FeatureToggleListInteractorInput { + var toggles: [LocalListToggle] { + get { + storage.list + } + } + + func set(toggle: LocalListToggle) { + storage.set(toggle: toggle) + } + + func setup(with output: FeatureToggleListInteractorOutput) { + self.output = output + } +} diff --git a/fearless/Modules/FeatureToggleList/FeatureToggleListPresenter.swift b/fearless/Modules/FeatureToggleList/FeatureToggleListPresenter.swift new file mode 100644 index 0000000000..2dd05de984 --- /dev/null +++ b/fearless/Modules/FeatureToggleList/FeatureToggleListPresenter.swift @@ -0,0 +1,78 @@ +import Foundation +import SoraFoundation + +protocol FeatureToggleListViewInput: ControllerBackedProtocol { + func didReceive(viewModels: [SelectableViewModel]) +} + +protocol FeatureToggleListInteractorInput: AnyObject { + var toggles: [LocalListToggle] { get } + func setup(with output: FeatureToggleListInteractorOutput) + func set(toggle: LocalListToggle) +} + +final class FeatureToggleListPresenter { + // MARK: Private properties + private weak var view: FeatureToggleListViewInput? + private let router: FeatureToggleListRouterInput + private let interactor: FeatureToggleListInteractorInput + + // MARK: - Constructors + init( + interactor: FeatureToggleListInteractorInput, + router: FeatureToggleListRouterInput, + localizationManager: LocalizationManagerProtocol + ) { + self.interactor = interactor + self.router = router + self.localizationManager = localizationManager + } + + // MARK: - Private methods + + private func provideToggles() { + Task { + let toggles = interactor.toggles + let viewModels = toggles.map { + let underlyingViewModel = TitleWithSubtitleViewModel( + title: $0.title, + subtitle: $0.description + ) + return SelectableViewModel( + underlyingViewModel: underlyingViewModel, + selectable: $0.storageValue + ) + } + Task { @MainActor in + view?.didReceive(viewModels: viewModels) + } + } + } +} + +// MARK: - FeatureToggleListViewOutput +extension FeatureToggleListPresenter: FeatureToggleListViewOutput { + func didSwitch(index: Int) { + guard var toggle = interactor.toggles[safe: index] else { + return + } + let updatedToggle = toggle.toggle() + interactor.set(toggle: updatedToggle) + } + + func didLoad(view: FeatureToggleListViewInput) { + self.view = view + interactor.setup(with: self) + provideToggles() + } +} + +// MARK: - FeatureToggleListInteractorOutput +extension FeatureToggleListPresenter: FeatureToggleListInteractorOutput {} + +// MARK: - Localizable +extension FeatureToggleListPresenter: Localizable { + func applyLocalization() {} +} + +extension FeatureToggleListPresenter: FeatureToggleListModuleInput {} diff --git a/fearless/Modules/FeatureToggleList/FeatureToggleListProtocols.swift b/fearless/Modules/FeatureToggleList/FeatureToggleListProtocols.swift new file mode 100644 index 0000000000..1f356a817e --- /dev/null +++ b/fearless/Modules/FeatureToggleList/FeatureToggleListProtocols.swift @@ -0,0 +1,10 @@ +typealias FeatureToggleListModuleCreationResult = ( + view: FeatureToggleListViewInput, + input: FeatureToggleListModuleInput +) + +protocol FeatureToggleListRouterInput: AnyObject {} + +protocol FeatureToggleListModuleInput: AnyObject {} + +protocol FeatureToggleListModuleOutput: AnyObject {} diff --git a/fearless/Modules/FeatureToggleList/FeatureToggleListRouter.swift b/fearless/Modules/FeatureToggleList/FeatureToggleListRouter.swift new file mode 100644 index 0000000000..7499d79e79 --- /dev/null +++ b/fearless/Modules/FeatureToggleList/FeatureToggleListRouter.swift @@ -0,0 +1,3 @@ +import Foundation + +final class FeatureToggleListRouter: FeatureToggleListRouterInput {} diff --git a/fearless/Modules/FeatureToggleList/FeatureToggleListViewController.swift b/fearless/Modules/FeatureToggleList/FeatureToggleListViewController.swift new file mode 100644 index 0000000000..33a708ed6f --- /dev/null +++ b/fearless/Modules/FeatureToggleList/FeatureToggleListViewController.swift @@ -0,0 +1,92 @@ +import UIKit +import SoraFoundation + +protocol FeatureToggleListViewOutput: AnyObject { + func didLoad(view: FeatureToggleListViewInput) + func didSwitch(index: Int) +} + +final class FeatureToggleListViewController: UIViewController, ViewHolder { + typealias RootViewType = FeatureToggleListViewLayout + + // MARK: Private properties + private let output: FeatureToggleListViewOutput + + private var viewModels: [SelectableViewModel] = [] + + // MARK: - Constructor + init( + output: FeatureToggleListViewOutput, + localizationManager: LocalizationManagerProtocol? + ) { + self.output = output + super.init(nibName: nil, bundle: nil) + self.localizationManager = localizationManager + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Life cycle + override func loadView() { + view = FeatureToggleListViewLayout() + } + + override func viewDidLoad() { + super.viewDidLoad() + output.didLoad(view: self) + title = "Toggle list" + setupTableView() + } + + // MARK: - Private methods + + private func setupTableView() { + rootView.tableView.registerClassForCell(TitleSubtitleSwitchTableViewCell.self) + rootView.tableView.dataSource = self + rootView.tableView.rowHeight = 44 + } +} + +// MARK: - FeatureToggleListViewInput +extension FeatureToggleListViewController: FeatureToggleListViewInput { + func didReceive(viewModels: [SelectableViewModel]) { + self.viewModels = viewModels + rootView.tableView.reloadData() + } +} + +// MARK: - Localizable +extension FeatureToggleListViewController: Localizable { + func applyLocalization() {} +} + +// MARK: - UITableViewDataSource + +extension FeatureToggleListViewController: UITableViewDataSource { + + func tableView(_: UITableView, numberOfRowsInSection section: Int) -> Int { + viewModels.count + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + guard let viewModel = viewModels[safe: indexPath.row] else { return UITableViewCell() } + + let cell = tableView.dequeueReusableCellWithType(TitleSubtitleSwitchTableViewCell.self)! + cell.delegate = self + cell.bind(viewModel: viewModel) + + return cell + } +} + +extension FeatureToggleListViewController: SwitchTableViewCellDelegate { + func didToggle(cell: SwitchTableViewCell) { + guard let indexPath = rootView.tableView.indexPath(for: cell) else { + return + } + output.didSwitch(index: indexPath.row) + } +} diff --git a/fearless/Modules/FeatureToggleList/FeatureToggleListViewLayout.swift b/fearless/Modules/FeatureToggleList/FeatureToggleListViewLayout.swift new file mode 100644 index 0000000000..4f5d696813 --- /dev/null +++ b/fearless/Modules/FeatureToggleList/FeatureToggleListViewLayout.swift @@ -0,0 +1,28 @@ +import UIKit + +final class FeatureToggleListViewLayout: UIView { + let tableView: UITableView = { + let view = UITableView() + view.backgroundColor = R.color.colorBlack19() + view.separatorStyle = .none + return view + }() + + override init(frame: CGRect) { + super.init(frame: frame) + backgroundColor = R.color.colorBlack19() + setupLayout() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setupLayout() { + addSubview(tableView) + tableView.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + } +} diff --git a/fearless/Modules/GetPreinstalledWallet/GetPreinstalledWalletInteractor.swift b/fearless/Modules/GetPreinstalledWallet/GetPreinstalledWalletInteractor.swift index 8d834bb137..5ddf9ea255 100644 --- a/fearless/Modules/GetPreinstalledWallet/GetPreinstalledWalletInteractor.swift +++ b/fearless/Modules/GetPreinstalledWallet/GetPreinstalledWalletInteractor.swift @@ -1,6 +1,7 @@ import UIKit import SSFQRService import RobinHood +import SSFModels final class GetPreinstalledWalletInteractor: BaseAccountImportInteractor { // MARK: - Private properties diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/LiquidityPoolDetailsInteractor.swift b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/LiquidityPoolDetailsInteractor.swift index de4790fe0e..d226b87b3e 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/LiquidityPoolDetailsInteractor.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/LiquidityPoolDetailsInteractor.swift @@ -3,6 +3,8 @@ import SSFModels import SSFPolkaswap import SSFPools import SSFStorageQueryKit +import SSFAccountManagment +import SSFCrypto protocol LiquidityPoolDetailsInteractorOutput: AnyObject { func didReceiveLiquidityPair(liquidityPair: LiquidityPair?) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/chains.json b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/chains.json index cee499f261..ab6cd50df8 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/chains.json +++ b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/chains.json @@ -1,41 +1,46 @@ -[{ +[ + { "disabled": false, "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "rank": 8, "name": "Polkadot", + "ecosystem": "substrate", + "identityChain": "67fa177a097bfa18f77ea95ab56e9bcdfeb0e5b8a40e46298bb93e16b6fc5008", "externalApi": { - "staking": { - "type": "subsquid", - "url": "https://squid.subsquid.io/fearless-polkadot/v/v3/graphql" - }, - "history": { - "type": "subsquid", - "url": "https://squid.subsquid.io/fearless-polkadot/v/v3/graphql" - }, - "crowdloans": { - "type": "github", - "url": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/crowdloan/polkadot.json" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://polkadot.subscan.io/{type}/{value}" + "staking": { + "type": "subsquid", + "url": "https://squid.subsquid.io/fearless-polkadot/v/v3/graphql" + }, + "history": { + "type": "subsquid", + "url": "https://squid.subsquid.io/fearless-polkadot/v/v3/graphql" + }, + "crowdloans": { + "type": "github", + "url": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/crowdloan/polkadot.json" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://polkadot.subscan.io/{type}/{value}" }, - { - "type": "polkascan", - "types": [ - "extrinsic", - "account", - "event" - ], - "url": "https://polkascan.io/polkadot/{type}/{value}" - } - ] + { + "type": "polkascan", + "types": [ + "extrinsic", + "account", + "event" + ], + "url": "https://polkascan.io/polkadot/{type}/{value}" + } + ] }, - "assets": [{ + "assets": [ + { "isUtility": true, "id": "887a17c7-1370-4de0-97dd-5422e294fa75", "name": "polkadot", @@ -46,8 +51,8 @@ "color": "FF0066", "staking": "relaychain", "purchaseProviders": [ - "moonpay", - "ramp" + "moonpay", + "ramp" ], "type": "normal", "priceProvider": { @@ -55,8437 +60,8697 @@ "id": "0xa6bc5baf2000424e90434ba7104ee399dee80dec", "precision": 8 } - }], + } + ], "xcm": { - "xcmVersion": "v3", - "availableAssets": [ + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + } + ], + "availableDestinations": [ + { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assets": [ { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" } - ], - "availableDestinations": [ - { - "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, - { - "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, - { - "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, + ] + }, + { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assets": [ { - "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + } + ] + }, + { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assets": [ { - "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT", - "minAmount": "11000000000" - } - - ], - "bridgeParachainId": "e92d165ad41e41e215d09713788173aecfdbe34d3bed29409d33a2ef03980738" + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" } - ] - }, - "nodes": [{ - "url": "wss://rpc.polkadot.io", - "name": "Parity node" + ] }, { - "url": "wss://polkadot-rpc.dwellir.com", - "name": "Dwellir node" + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + } + ] }, { - "url": "wss://polkadot.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", + "assets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT", + "minAmount": "11000000000" + } + ], + "bridgeParachainId": "e92d165ad41e41e215d09713788173aecfdbe34d3bed29409d33a2ef03980738" } + ] + }, + "nodes": [ + { + "url": "wss://api-polkadot.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.polkadot.io", + "name": "Parity node" + }, + { + "url": "wss://rpc-polkadot.luckyfriday.io", + "name": "LuckyFriday node" + }, + { + "url": "wss://polkadot.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + } ], "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polkadot.svg", "addressPrefix": 0, "options": [ - "crowdloans", - "poolStaking" + "crowdloans", + "poolStaking" ] -}, - { - "disabled": false, - "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "rank": 9, - "name": "Kusama", - "identityChain": "c1af4cb4eb3918e5db15086c0cc5ec17fb334f728b7c65dd44bfe1e174ff8b3f", - "externalApi": { - "staking": { - "type": "subsquid", - "url": "https://squid.subsquid.io/fearless-kusama-2/v/v3/graphql" - }, - "history": { - "type": "subsquid", - "url": "https://squid.subsquid.io/fearless-kusama-2/v/v3/graphql" - }, - "crowdloans": { - "type": "github", - "url": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/crowdloan/kusama.json" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://kusama.subscan.io/{type}/{value}" - }, - { - "type": "polkascan", - "types": [ - "extrinsic", - "account", - "event" - ], - "url": "https://polkascan.io/kusama/{type}/{value}" - } - ] - }, - "assets": [{ - "id": "1e0c2ec6-935f-49bd-a854-5e12ee6c9f1b", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "staking": "relaychain", - "purchaseProviders": [ - "ramp" - ], - "isUtility": true, - "type": "normal" - }], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ], - "availableDestinations": [ - { - "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM", - "minAmount": "50000000000" - } - - ], - "bridgeParachainId": "6d8d9f145c2177fa83512492cdd80a71e29f22473f4a8943a6292149ac319fb9" - } - ] + }, + { + "disabled": false, + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "rank": 9, + "name": "Kusama", + "ecosystem": "substrate", + "identityChain": "c1af4cb4eb3918e5db15086c0cc5ec17fb334f728b7c65dd44bfe1e174ff8b3f", + "externalApi": { + "staking": { + "type": "subsquid", + "url": "https://fearless-wallet.squids.live/fearless-kusama-2/v/v4/graphql" + }, + "history": { + "type": "subsquid", + "url": "https://fearless-wallet.squids.live/fearless-kusama-2/v/v4/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://kusama.subscan.io/{type}/{value}" }, - "nodes": [{ - "url": "wss://kusama-rpc.polkadot.io", - "name": "Parity node" - }, - { - "url": "wss://kusama-rpc.dwellir.com", - "name": "Dwellir node" - }, + { + "type": "polkascan", + "types": [ + "extrinsic", + "account", + "event" + ], + "url": "https://polkascan.io/kusama/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "1e0c2ec6-935f-49bd-a854-5e12ee6c9f1b", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "staking": "relaychain", + "purchaseProviders": [ + "ramp" + ], + "isUtility": true, + "type": "normal" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + } + ], + "availableDestinations": [ + { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "assets": [ { - "url": "wss://kusama.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kusama.svg", - "addressPrefix": 2, - "options": [ - "crowdloans", - "poolStaking" - ] - }, - { - "disabled": false, - "chainId": "e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e", - "rank": 108, - "name": "Westend", - "externalApi": { - "crowdloans": { - "type": "github", - "url": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/crowdloan/westend.json" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://westend.subscan.io/{type}/{value}" - }] + ] }, - "assets": [{ - "staking": "relaychain", - "isUtility": true, - "id": "a3868e1b-922e-42d4-b73e-b41712f0843c", - "name": "westend", - "symbol": "wnd", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/WND.svg", - "color": "FFFFFF", - "type": "normal" - }], - "nodes": [{ - "url": "wss://westend-rpc.polkadot.io", - "name": "Parity node" - }, - { - "url": "wss://westend-rpc.dwellir.com", - "name": "Dwellir node" - }, + { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assets": [ { - "url": "wss://westend.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Westend.svg", - "addressPrefix": 42, - "options": [ - "testnet", - "crowdloans", - "poolStaking" - ] - }, - { - "disabled": false, - "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "1000", - "name": "Kusama AssetHub", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-statemine/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://assethub-kusama.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "1e0c2ec6-935f-49bd-a854-5e12ee6c9f1b", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "purchaseProviders": [ - "ramp" - ], - "isUtility": true, - "type": "normal" + ] }, + { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assets": [ { - "id": "27768227-8a9a-4443-a57d-6013c24f85e9", - "type": "assets", - "name": "tether usd", - "symbol": "usdt", - "precision": 4, - "currencyId": "11", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - }, - { - "id": "3dd9d403-49d2-46c2-a84a-334b31a6a6b7", - "type": "assets", - "name": "rmrk", - "symbol": "rmrk", - "precision": 10, - "currencyId": "8", - "priceId": "rmrk", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", - "color": "392B73", - "inferred": true, - "confidence": 0 + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" } - ], - "xcm": { - "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - }, - { - "id": "043a5aba-075a-4b14-91ae-f5bffe640477", - "symbol": "USDt" - } - ], - "availableDestinations": [ - { - "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", - "assets": [ - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - } - ] - }, - { - "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", - "assets": [ - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - }, - { - "id": "043a5aba-075a-4b14-91ae-f5bffe640477", - "symbol": "USDt" - } - ] - }, - { - "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", - "assets": [ - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - }, - { - "id": "043a5aba-075a-4b14-91ae-f5bffe640477", - "symbol": "USDt" - } - ] - } - ] - }, - "nodes": [{ - "url": "wss://kusama-asset-hub-rpc.polkadot.io", - "name": "Parity node" - }, - { - "url": "wss://statemine-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://statemine.public.curie.radiumblock.co/ws", - "name": "RadiumBlock node" - }, - { - "url": "wss://rpc-asset-hub-kusama.luckyfriday.io", - "name": "LuckyFriday node" - }, - { - "url": "wss://ksm-rpc.stakeworld.io/assethub", - "name": "Stakeworld node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Assethub.svg", - "addressPrefix": 2, - "options": [ - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "1000", - "name": "Polkadot AssetHub", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-statemint/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://assethub-polkadot.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "isUtility": true, - "id": "887a17c7-1370-4de0-97dd-5422e294fa75", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "purchaseProviders": [ - "moonpay", - "ramp" - ], - "type": "normal" + ] }, + { + "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", + "assets": [ { - "id": "ea33432f-9bd9-4d42-93bc-cd45a0e8a44c", - "type": "assets", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "1984", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - }, - { - "id": "8f79aa5a-9f31-442c-ac96-01ff80b105e0", - "type": "assets", - "name": "dot is $ded", - "symbol": "ded", - "precision": 10, - "currencyId": "30", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DED.svg", - "color": "FE0186" - }, - { - "id": "44587704-7da8-45c3-9541-be7b81de76ee", - "type": "assets", - "name": "pink", - "symbol": "pink", - "precision": 10, - "currencyId": "23", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PINK.svg", - "color": "FF0066" + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM", + "minAmount": "50000000000" } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - }, - { - "id": "1c9cea4c-f369-4bfa-a8c4-3d3264d3d7c2", - "symbol": "USDt" - } - ], - "availableDestinations": [{ - "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, - { - "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", - "assets": [ - { - "id": "1c9cea4c-f369-4bfa-a8c4-3d3264d3d7c2", - "symbol": "USDt" - } - ] - }, - { - "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", - "assets": [ - { - "id": "1c9cea4c-f369-4bfa-a8c4-3d3264d3d7c2", - "symbol": "USDt" - } - ] - } - ] - }, - "nodes": [{ - "url": "wss://polkadot-asset-hub-rpc.polkadot.io", - "name": "Parity node" - }, - { - "url": "wss://statemint-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://statemint.public.curie.radiumblock.co/ws", - "name": "RadiumBlock node" + ], + "bridgeParachainId": "6d8d9f145c2177fa83512492cdd80a71e29f22473f4a8943a6292149ac319fb9" + } + ] }, - { - "url": "wss://rpc-asset-hub-polkadot.luckyfriday.io", - "name": "LuckyFriday node" + "nodes": [ + { + "url": "wss://api-kusama.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://kusama-rpc.polkadot.io", + "name": "Parity node" + }, + { + "url": "wss://rpc-kusama.luckyfriday.io", + "name": "LuckyFriday node" + }, + { + "url": "wss://kusama.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kusama.svg", + "addressPrefix": 2, + "options": [ + "poolStaking" + ] + }, + { + "disabled": false, + "chainId": "e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e", + "rank": 108, + "name": "Westend", + "ecosystem": "substrate", + "externalApi": { + "crowdloans": { + "type": "github", + "url": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/crowdloan/westend.json" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://westend.subscan.io/{type}/{value}" + } + ] }, - { - "url": "wss://dot-rpc.stakeworld.io/assethub", - "name": "Stakeworld node" + "assets": [ + { + "staking": "relaychain", + "isUtility": true, + "id": "a3868e1b-922e-42d4-b73e-b41712f0843c", + "name": "westend", + "symbol": "wnd", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/WND.svg", + "color": "FFFFFF", + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://westend-rpc.polkadot.io", + "name": "Parity node" + }, + { + "url": "wss://westend-rpc.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Westend.svg", + "addressPrefix": 42, + "options": [ + "testnet", + "crowdloans", + "poolStaking" + ] + }, + { + "disabled": false, + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "1000", + "name": "Kusama AssetHub", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-statemine-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://assethub-kusama.subscan.io/{type}/{value}" + } + ] }, - { - "url": "wss://statemint.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } + "assets": [ + { + "id": "1e0c2ec6-935f-49bd-a854-5e12ee6c9f1b", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "purchaseProviders": [ + "ramp" ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Assethub.svg", - "addressPrefix": 0, - "options": [ - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "name": "Acala", - "paraId": "2000", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-acala/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://acala.subscan.io/{type}/{value}" - }] + "isUtility": true, + "type": "normal" + }, + { + "id": "27768227-8a9a-4443-a57d-6013c24f85e9", + "type": "assets", + "name": "tether usd", + "symbol": "usdt", + "precision": 4, + "currencyId": "11", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + }, + { + "id": "3dd9d403-49d2-46c2-a84a-334b31a6a6b7", + "type": "assets", + "name": "rmrk", + "symbol": "rmrk", + "precision": 10, + "currencyId": "8", + "priceId": "rmrk", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", + "color": "392B73", + "inferred": true, + "confidence": 0 + } + ], + "xcm": { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" }, - "assets": [{ - "id": "c801d6c1-3edf-41a9-9aea-da705eab249b", - "name": "acala", - "symbol": "aca", - "precision": 12, - "priceId": "acala", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal", - "existentialDeposit": "100000000000" + { + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" }, + { + "id": "043a5aba-075a-4b14-91ae-f5bffe640477", + "symbol": "USDt" + } + ], + "availableDestinations": [ + { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assets": [ { - "id": "cfe26eae-f566-4b8d-a44c-bd4380c27bc5", - "name": "acala dollar", - "symbol": "ausd", - "currencyId": "kusd", - "precision": 12, - "priceId": "acala-dollar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", - "color": "E40C5B", - "type": "ormlAsset", - "isNative": true, - "existentialDeposit": "100000000000" - }, - { - "id": "70a69d25-a4ba-4c6b-a15d-09f3c2814ddf", - "name": "tapio dot", - "symbol": "tdot", - "precision": 10, - "currencyId": "0", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TDOT.svg", - "color": "FF0066", - "type": "stableAssetPoolToken", - "isNative": true, - "existentialDeposit": "100000000" - }, - { - "id": "fe07f6c5-2b90-4e1a-81e3-8ed85f5a80b9", - "name": "parallel finance", - "symbol": "para", - "precision": 12, - "currencyId": "1", - "priceId": "parallel-finance", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PARA.svg", - "color": "4C19E7", - "type": "foreignAsset", - "existentialDeposit": "100000000000" - }, - { - "id": "b6c22f93-be25-426b-b921-18bf19c49667", - "name": "moonbeam", - "symbol": "glmr", - "precision": 18, - "currencyId": "0", - "priceId": "moonbeam", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF", - "type": "foreignAsset", - "existentialDeposit": "100000000000000000" - }, - { - "id": "471bfcd1-9680-4ba9-a25d-3e9f777ee2c9", - "name": "liquid dot", - "symbol": "ldot", - "precision": 10, - "priceId": "liquid-staking-dot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LDOT.svg", - "color": "FF0066", - "type": "ormlAsset", - "isNative": true, - "existentialDeposit": "500000000" - }, - { - "id": "ffb814ea-c92c-4a1e-8e24-437c93ecd8ff", - "name": "taiga", - "symbol": "tai", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TAI.svg", - "color": "FFFFFF", - "priceId": "taiga", - "type": "ormlAsset", - "isNative": true - }, - { - "id": "ed98bee1-34ce-4aa2-896e-508380dea1c2", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "type": "ormlAsset", - "existentialDeposit": "100000000" - }, - { - "id": "a7b48fb1-5741-487a-98fd-c45f958dd4fd", - "name": "liquid crowdloan dot", - "symbol": "lcdot", - "precision": 10, - "currencyId": "13", - "priceId": "liquid-crowdloan-dot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LCDOT.svg", - "color": "FF0066", - "type": "liquidCrowdloan", - "isNative": true, - "existentialDeposit": "0" - }, - { - "id": "402c606d-691f-4889-a48d-a459a0e37c56", - "name": "inter btc", - "symbol": "ibtc", - "precision": 8, - "currencyId": "3", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", - "color": "F2AE7F", - "type": "foreignAsset" - }, - { - "id": "7fffd65a-d971-4bdc-a6bd-216674b83a97", - "name": "wrapped ether", - "symbol": "weth", - "precision": 18, - "currencyId": "6", - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color":"627EEA", - "type": "foreignAsset" - }, - { - "id": "184a1b21-d512-4de9-ab54-6c014e24f90c", - "name": "astar", - "symbol": "astr", - "precision": 18, - "currencyId": "2", - "priceId": "astar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", - "color": "0AE2FF", - "type": "foreignAsset" + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - }, - { - "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", - "symbol": "aUSD" - }, - { - "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", - "symbol": "ACA" - }, - { - "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", - "symbol": "GLMR" - }, - { - "id": "163a89b9-d140-44ca-b119-218a54e4235b", - "symbol": "lcDOT" - } - ], - "availableDestinations": [ - { - "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, - { - "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", - "assets": [ - { - "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", - "symbol": "aUSD" - }, - { - "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", - "symbol": "ACA" - }, - { - "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", - "symbol": "GLMR" - } - ] - }, - { - "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", - "assets": [ - { - "id": "163a89b9-d140-44ca-b119-218a54e4235b", - "symbol": "lcDOT" - }, - { - "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", - "symbol": "ACA" - } - ] - }, - { - "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", - "assets": [ - { - "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", - "symbol": "ACA", - "minAmount": "56000000000000" - } - - ], - "bridgeParachainId": "e92d165ad41e41e215d09713788173aecfdbe34d3bed29409d33a2ef03980738" - } - ] + ] }, - "nodes": [ - { - "url": "wss://acala-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://rpc-acala.luckyfriday.io", - "name": "LuckyFriday node" - }, - { - "url": "wss://acala-polkadot.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - }, - { - "url": "wss://acala-rpc-0.aca-api.network", - "name": "Acala Foundation node 0" - }, + { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assets": [ { - "url": "wss://acala-rpc-3.aca-api.network/ws", - "name": "Acala Foundation node 3" + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/acala.svg", - "addressPrefix": 10, - "options": [ - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "name": "Karura", - "paraId": "2000", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-karura/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://karura.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "e71b30a0-2a44-40ff-8b53-a166fadef6c5", - "name": "karura", - "symbol": "kar", - "precision": 12, - "priceId": "karura", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" + ] }, + { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assets": [ { - "id": "91a69026-0ab7-4db0-af53-8d571fd33ac4", - "name": "acala dollar", - "symbol": "ausd", - "currencyId": "kusd", - "precision": 12, - "priceId": "acala-dollar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", - "color": "E40C5B", - "type": "ormlAsset", - "isNative": true, - "existentialDeposit": "10000000000" - }, - { - "id": "223b0282-b5c9-48ed-87e3-5e9ef6714ac8", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "type": "ormlAsset", - "existentialDeposit": "100000000" - }, - { - "id": "e605149c-0f41-4ec9-960f-21c07e2d9361", - "name": "rmrk", - "symbol": "rmrk", - "currencyId": "0", - "precision": 10, - "priceId": "rmrk", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", - "color": "392B73", - "type": "foreignAsset", - "existentialDeposit": "100000000" - }, - { - "id": "10757cfa-b590-43c1-8524-efc28d798bcb", - "name": "bifrost native coin", - "symbol": "bnc", - "precision": 12, - "priceId": "bifrost-native-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", - "color": "FFFFFF", - "type": "ormlAsset", - "existentialDeposit": "8000000000" - }, - { - "id": "77562113-9e01-49b6-a39d-87a47bde24fe", - "name": "liquid ksm", - "symbol": "lksm", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LKSM.svg", - "color": "FFFFFF", - "type": "ormlAsset", - "isNative": true, - "existentialDeposit": "500000000" + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" }, { - "id": "c6fd5a1e-3052-4bdf-b0f3-ad1b7b9fbff0", - "name": "crust shadow", - "symbol": "csm", - "currencyId": "5", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CSM_Crust_Shadow.svg", - "color": "F3AD56", - "priceId": "crust-storage-market", - "type": "foreignAsset", - "existentialDeposit": "1000000000000" - }, + "id": "043a5aba-075a-4b14-91ae-f5bffe640477", + "symbol": "USDt" + } + ] + }, + { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assets": [ { - "id": "5e9c76a4-9f89-487d-80aa-db0588b60aa4", - "name": "taiga", - "symbol": "tai", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TAI.svg", - "color": "FFFFFF", - "priceId": "taiga", - "type": "ormlAsset", - "isNative": true, - "existentialDeposit": "1000000000000" + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" }, { - "id": "4b9f4cba-3b26-4f99-8666-3ee305683706", - "name": "polarisdao", - "symbol": "aris", - "currencyId": "1", - "precision": 8, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ARIS.svg", - "color": "423F47", - "priceId": "polarisdao", - "type": "foreignAsset", - "existentialDeposit": "1000000000000" - }, - { - "id": "3d32d7cb-4de5-427e-9668-a9763648a555", - "name": "quartz", - "symbol": "qtz", - "currencyId": "2", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/QTZ.svg", - "color": "EC5B6D", - "priceId": "quartz", - "type": "foreignAsset", - "existentialDeposit": "1000000000000000000" - }, - { - "id": "17142348-16f6-49f2-9006-098f5562bda0", - "name": "kintsugi ibtc", - "symbol": "kbtc", - "precision": 8, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", - "color": "FFFFFF", - "priceId": "kintsugi-btc", - "type": "ormlAsset", - "existentialDeposit": "66" - }, - { - "id": "6aa4622c-42b9-4976-9f7c-35447bb24128", - "name": "kintsugi", - "symbol": "kint", - "precision": 12, - "priceId": "kintsugi", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", - "color": "FFFFFF", - "type": "ormlAsset", - "existentialDeposit": "133330000" - }, - { - "id": "e27e5b58-3229-4656-b9ff-de309f49f17f", - "name": "phala", - "symbol": "pha", - "precision": 12, - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F", - "type": "ormlAsset", - "existentialDeposit": "40000000000" - }, - { - "id": "8e975c47-df51-48a8-a29e-a89ee0f4bf9e", - "name": "taiga ksm", - "symbol": "taiksm", - "currencyId": "0", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TAIKSM.svg", - "color": "FFFFFF", - "type": "stableAssetPoolToken", - "isNative": true, - "existentialDeposit": "100000000" - }, - { - "id": "536deaa6-49b0-4b54-adc7-9619e15c79b2", - "name": "voucher slot ksm", - "symbol": "vsksm", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VSKSM.svg", - "color": "FFFFFF", - "type": "ormlAsset", - "existentialDeposit": "100000000" - }, - { - "id": "f2257792-ffb9-4dff-95ae-5f98c1cb594b", - "name": "moonriver", - "symbol": "movr", - "currencyId": "3", - "precision": 18, - "priceId": "moonriver", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", - "color": "FFFFFF", - "type": "foreignAsset", - "existentialDeposit": "1000000000000000" - }, - { - "id": "54b7f751-ef62-45b2-ad65-837852de5af4", - "name": "heiko finance", - "symbol": "hko", - "currencyId": "4", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HKO.svg", - "color": "CC3474", - "type": "foreignAsset", - "existentialDeposit": "100000000000" - }, - { - "id": "bb3dc769-394f-40fb-b54f-4a0d0de7e49e", - "name": "kico", - "symbol": "kico", - "currencyId": "6", - "precision": 14, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KICO.svg", - "color": "FFFFFF", - "type": "foreignAsset", - "existentialDeposit": "100000000000000" - }, - { - "id": "5fd5f3ce-4a2c-4647-923e-6c29cc95a4f7", - "name": "tether usd", - "symbol": "usdt", - "currencyId": "7", - "precision": 6, - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "type": "foreignAsset", - "existentialDeposit": "10000" - }, - { - "id": "8cf27ed8-11bf-4b16-be22-5aa6bbc10736", - "name": "integritee", - "symbol": "teer", - "currencyId": "8", - "precision": 12, - "priceId": "integritee", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TEER.svg", - "color": "FFFFFF", - "type": "foreignAsset", - "existentialDeposit": "100000000000" - }, - { - "id": "805e945b-54a6-47ec-a62b-7bcbae46fb70", - "name": "metaverse.network pioneer", - "symbol": "neer", - "currencyId": "9", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NEER.svg", - "color": "B8FBFE", - "type": "foreignAsset", - "existentialDeposit": "100000000000000000" - }, - { - "id": "addd6fed-51af-4088-8d6d-05c73b48b8df", - "name": "calamari network", - "symbol": "kma", - "currencyId": "10", - "precision": 12, - "priceId": "calamari-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KMA.svg", - "color": "FFFFFF", - "type": "foreignAsset", - "existentialDeposit": "100000000000" - }, - { - "id": "f8d6e0db-e50b-46ea-b870-c2e97abb99d7", - "name": "basilisk", - "symbol": "bsx", - "currencyId": "11", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BSX.svg", - "color": "87FCB6", - "type": "foreignAsset", - "existentialDeposit": "1000000000000" - }, - { - "id": "4879d0ed-810b-4792-8e83-387180cc3a9c", - "name": "altair", - "symbol": "air", - "currencyId": "12", - "precision": 18, - "priceId": "altair", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AIR.svg", - "color": "FFFFFF", - "type": "foreignAsset", - "existentialDeposit": "100000000000000000" - }, - { - "id": "e0fe6aac-a52e-4e78-be60-defee1006569", - "name": "crab network", - "symbol": "crab", - "currencyId": "13", - "precision": 18, - "priceId": "darwinia-crab-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRAB.svg", - "color": "581BD1", - "type": "foreignAsset", - "existentialDeposit": "1000000000000000000" - }, - { - "id": "1d534f94-bc5a-41a5-a295-c84f9ee0d95c", - "name": "genshiro", - "symbol": "gens", - "currencyId": "14", - "precision": 9, - "priceId": "genshiro", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GENS.svg", - "color": "FFFFFF", - "type": "foreignAsset", - "existentialDeposit": "1000000000000" - }, - { - "id": "b8f7bcbc-fe2d-457d-903f-c8c126127231", - "name": "equilibrium dollar protocol", - "symbol": "eqd", - "currencyId": "15", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQD.svg", - "color": "4D8BED", - "type": "foreignAsset", - "existentialDeposit": "10000000000" - }, - { - "id": "2433813f-403f-40e1-9e00-688b037113d5", - "name": "turing token", - "symbol": "tur", - "currencyId": "16", - "precision": 10, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUR.svg", - "color": "5DCBD0", - "type": "foreignAsset", - "existentialDeposit": "40000000000" - }, - { - "id": "1a6e5327-80da-439a-8294-8b3dbeb8172c", - "name": "pichu token", - "symbol": "pchu", - "currencyId": "17", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PCHU.svg", - "color": "AE4071", - "type": "foreignAsset", - "existentialDeposit": "100000000000000000" + "id": "043a5aba-075a-4b14-91ae-f5bffe640477", + "symbol": "USDt" } + ] + } + ] + }, + "nodes": [ + { + "url": "wss://api-assethub-kusama.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://kusama-asset-hub-rpc.polkadot.io", + "name": "Parity node" + }, + { + "url": "wss://statemine.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + }, + { + "url": "wss://rpc-asset-hub-kusama.luckyfriday.io", + "name": "LuckyFriday node" + }, + { + "url": "wss://ksm-rpc.stakeworld.io/assethub", + "name": "Stakeworld node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Assethub.svg", + "addressPrefix": 2, + "options": [ + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "1000", + "name": "Polkadot AssetHub", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid.subsquid.io/gs-main-statemint/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://assethub-polkadot.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "isUtility": true, + "id": "887a17c7-1370-4de0-97dd-5422e294fa75", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "purchaseProviders": [ + "moonpay", + "ramp" ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", - "symbol": "BNC" - }, - { - "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", - "symbol": "AUSD" - }, - { - "id": "0fef7483-1f4c-4339-a12c-1b537e8e62ba", - "symbol": "KAR" - }, - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - }, - { - "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", - "symbol": "USDt" - }, - { - "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", - "symbol": "MOVR" - } - ], - "availableDestinations": [ - { - "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", - "assets": [ - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - }, - { - "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", - "symbol": "USDt" - } - ] - }, - { - "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", - "symbol": "BNC" - }, - { - "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", - "symbol": "AUSD" - }, - { - "id": "0fef7483-1f4c-4339-a12c-1b537e8e62ba", - "symbol": "KAR" - } - ] - }, - { - "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", - "symbol": "MOVR" - }, - { - "id": "0fef7483-1f4c-4339-a12c-1b537e8e62ba", - "symbol": "KAR" - }, - { - "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", - "symbol": "AUSD" - } - ] - } - ] + "type": "normal" + }, + { + "id": "ea33432f-9bd9-4d42-93bc-cd45a0e8a44c", + "type": "assets", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "1984", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + }, + { + "id": "951ca8aa-c390-4512-a35c-d3851440b580", + "type": "assets", + "name": "usd coin", + "symbol": "usdc", + "precision": 6, + "currencyId": "1337", + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4" + }, + { + "id": "8f79aa5a-9f31-442c-ac96-01ff80b105e0", + "type": "assets", + "name": "dot is $ded", + "symbol": "ded", + "precision": 10, + "currencyId": "30", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DED.svg", + "color": "FE0186" + }, + { + "id": "44587704-7da8-45c3-9541-be7b81de76ee", + "type": "assets", + "name": "pink", + "symbol": "pink", + "precision": 10, + "currencyId": "23", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PINK.svg", + "color": "FF0066" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" }, - "nodes": [{ - "url": "wss://karura-rpc-0.aca-api.network", - "name": "Acala Foundation node 0" - }, - { - "url": "wss://karura-rpc-2.aca-api.network/ws", - "name": "Acala Foundation node 2" - }, - { - "url": "wss://karura-rpc-3.aca-api.network/ws", - "name": "Acala Foundation node 3" - }, - { - "url": "wss://karura.polkawallet.io", - "name": "Polkawallet node" - }, - { - "url": "wss://karura-rpc.dwellir.com", - "name": "Dwellir node" - }, + { + "id": "1c9cea4c-f369-4bfa-a8c4-3d3264d3d7c2", + "symbol": "USDt" + } + ], + "availableDestinations": [ + { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assets": [ { - "url": "wss://karura.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Karura.svg", - "addressPrefix": 8, - "options": [ - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "rank": 11, - "name": "Moonriver", - "paraId": "2023", - "externalApi": { - "staking": { - "type": "subsquid", - "url": "https://squid.subsquid.io/fearless-moonriver-1/v/v2/graphql" - }, - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-moonriver/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://moonriver.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "35346815-009a-4cf9-a5ad-85a0167e594d", - "name": "moonriver", - "symbol": "movr", - "precision": 18, - "priceId": "moonriver", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", - "color": "FFFFFF", - "staking": "parachain", - "isUtility": true, - "type": "normal" + ] }, + { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assets": [ { - "id": "980af72c-d1b8-46c7-9793-fa87912652ec", - "name": "kusama", - "symbol": "xcksm", - "currencyId": "42259045809535163221576417993425387648", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "type": "assets" - }, - { - "id": "d1ebeaa2-e7ac-4645-8dce-e873ebdbb995", - "type": "assets", - "name": "acala dollar", - "symbol": "xcausd", - "currencyId": "214920334981412447805621250067209749032", - "precision": 12, - "priceId": "acala-dollar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", - "color": "E40C5B" - }, - { - "id": "8e45603e-91c4-4624-8457-9e9b24a98610", - "type": "assets", - "name": "xcrmrk", - "symbol": "xcrmrk", - "currencyId": "182365888117048807484804376330534607370", - "precision": 10, - "priceId": "rmrk", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", - "color": "392B73" - }, - { - "id": "4f9750bb-f3f5-45b3-a180-a0c734f52562", - "type": "assets", - "name": "kintsugi wrapped btc", - "symbol": "xckbtc", - "currencyId": "328179947973504579459046439826496046832", - "precision": 8, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", - "color": "FFFFFF", - "priceId": "kintsugi-btc" - }, - { - "id": "ff8fce18-260f-46c9-85bd-36157d1f756e", - "type": "assets", - "name": "phala token", - "symbol": "xcpha", - "currencyId": "189307976387032586987344677431204943363", - "precision": 12, - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F" - }, - { - "id": "88cfc7c3-6b8e-49a5-8620-e014840d4bf9", - "type": "assets", - "name": "robonomics native token", - "symbol": "xcxrt", - "currencyId": "108036400430056508975016746969135344601", - "precision": 9, - "priceId": "robonomics-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XRT.svg", - "color": "FFFFFF" - }, - { - "id": "db8fdbe6-26b0-4910-a267-d7a58c22c7ec", - "type": "assets", - "name": "kintsugi native token", - "symbol": "xckint", - "currencyId": "175400718394635817552109270754364440562", - "precision": 12, - "priceId": "kintsugi", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", - "color": "FFFFFF" - }, - { - "id": "1854feda-ca0c-4e82-9076-af2c7978f042", - "type": "assets", - "name": "karura", - "symbol": "xckar", - "currencyId": "10810581592933651521121702237638664357", - "precision": 12, - "priceId": "karura", - "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/KAR.svg", - "color": "FFFFFF" + "id": "1c9cea4c-f369-4bfa-a8c4-3d3264d3d7c2", + "symbol": "USDt" } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "5b1a0b8f-74c9-4073-b288-0d2ca16dfb77", - "symbol": "MOVR" - }, - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", - "symbol": "AUSD" - }, - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - } - ], - "availableDestinations": [ - { - "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", - "assets": [ - { - "id": "5b1a0b8f-74c9-4073-b288-0d2ca16dfb77", - "symbol": "MOVR" - }, - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", - "assets": [ - { - "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", - "symbol": "AUSD" - } - ] - }, - { - "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", - "assets": [ - { - "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", - "symbol": "RMRK" - } - ] - } - ] + ] }, - "nodes": [{ - "url": "wss://wss.moonriver.moonbeam.network", - "name": "PureStake node" - }, - { - "url": "wss://moonriver.unitedbloc.com", - "name": "UnitedBloc node" - }, - { - "url": "wss://wss.api.moonriver.moonbeam.network", - "name": "Moonbeam Foundation node" - }, + { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assets": [ { - "url": "wss://moonriver.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "1c9cea4c-f369-4bfa-a8c4-3d3264d3d7c2", + "symbol": "USDt" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Moonriver.svg", - "addressPrefix": 1285, - "options": [ - "ethereumBased" - ] + ] + } + ] }, - { - "disabled": false, - "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2007", - "name": "Shiden", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-shiden/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://shiden.subscan.io/{type}/{value}" - }] + "nodes": [ + { + "url": "wss://api-assethub-polkadot.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://polkadot-asset-hub-rpc.polkadot.io", + "name": "Parity node" + }, + { + "url": "wss://statemint.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + }, + { + "url": "wss://rpc-asset-hub-polkadot.luckyfriday.io", + "name": "LuckyFriday node" + }, + { + "url": "wss://dot-rpc.stakeworld.io/assethub", + "name": "Stakeworld node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Assethub.svg", + "addressPrefix": 0, + "options": [ + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "name": "Acala", + "ecosystem": "substrate", + "paraId": "2000", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-acala-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://acala.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "c801d6c1-3edf-41a9-9aea-da705eab249b", + "name": "acala", + "symbol": "aca", + "precision": 12, + "priceId": "acala", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal", + "existentialDeposit": "100000000000" + }, + { + "id": "cfe26eae-f566-4b8d-a44c-bd4380c27bc5", + "name": "acala dollar", + "symbol": "ausd", + "currencyId": "kusd", + "precision": 12, + "priceId": "acala-dollar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", + "color": "E40C5B", + "type": "ormlAsset", + "isNative": true, + "existentialDeposit": "100000000000" + }, + { + "id": "70a69d25-a4ba-4c6b-a15d-09f3c2814ddf", + "name": "tapio dot", + "symbol": "tdot", + "precision": 10, + "currencyId": "0", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TDOT.svg", + "color": "FF0066", + "type": "stableAssetPoolToken", + "isNative": true, + "existentialDeposit": "100000000" + }, + { + "id": "fe07f6c5-2b90-4e1a-81e3-8ed85f5a80b9", + "name": "parallel finance", + "symbol": "para", + "precision": 12, + "currencyId": "1", + "priceId": "parallel-finance", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PARA.svg", + "color": "4C19E7", + "type": "foreignAsset", + "existentialDeposit": "100000000000" + }, + { + "id": "b6c22f93-be25-426b-b921-18bf19c49667", + "name": "moonbeam", + "symbol": "glmr", + "precision": 18, + "currencyId": "0", + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF", + "type": "foreignAsset", + "existentialDeposit": "100000000000000000" + }, + { + "id": "471bfcd1-9680-4ba9-a25d-3e9f777ee2c9", + "name": "liquid dot", + "symbol": "ldot", + "precision": 10, + "priceId": "liquid-staking-dot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LDOT.svg", + "color": "FF0066", + "type": "ormlAsset", + "isNative": true, + "existentialDeposit": "500000000" + }, + { + "id": "ffb814ea-c92c-4a1e-8e24-437c93ecd8ff", + "name": "taiga", + "symbol": "tai", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TAI.svg", + "color": "FFFFFF", + "priceId": "taiga", + "type": "ormlAsset", + "isNative": true + }, + { + "id": "ed98bee1-34ce-4aa2-896e-508380dea1c2", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "type": "ormlAsset", + "existentialDeposit": "100000000" + }, + { + "id": "a7b48fb1-5741-487a-98fd-c45f958dd4fd", + "name": "liquid crowdloan dot", + "symbol": "lcdot", + "precision": 10, + "currencyId": "13", + "priceId": "liquid-crowdloan-dot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LCDOT.svg", + "color": "FF0066", + "type": "liquidCrowdloan", + "isNative": true, + "existentialDeposit": "0" + }, + { + "id": "402c606d-691f-4889-a48d-a459a0e37c56", + "name": "inter btc", + "symbol": "ibtc", + "precision": 8, + "currencyId": "3", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", + "color": "F2AE7F", + "type": "foreignAsset" + }, + { + "id": "7fffd65a-d971-4bdc-a6bd-216674b83a97", + "name": "wrapped ether", + "symbol": "weth", + "precision": 18, + "currencyId": "6", + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "627EEA", + "type": "foreignAsset" + }, + { + "id": "184a1b21-d512-4de9-ab54-6c014e24f90c", + "name": "astar", + "symbol": "astr", + "precision": 18, + "currencyId": "2", + "priceId": "astar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", + "color": "0AE2FF", + "type": "foreignAsset" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" }, - "assets": [{ - "id": "6dbb524b-a2d7-4c32-b0f9-6825b3e7d2c4", - "name": "shiden network", - "symbol": "sdn", - "precision": 18, - "priceId": "shiden", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/SDN.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" + { + "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", + "symbol": "aUSD" }, + { + "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", + "symbol": "ACA" + }, + { + "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", + "symbol": "GLMR" + }, + { + "id": "163a89b9-d140-44ca-b119-218a54e4235b", + "symbol": "lcDOT" + } + ], + "availableDestinations": [ + { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assets": [ { - "id": "52509327-116a-4365-bf7d-03cecf7868bc", - "type": "assets", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "340282366920938463463374607431768211455", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF" - }, - { - "id": "aa494fdc-3411-438c-b69b-a53e36f062a1", - "type": "assets", - "name": "phala token", - "symbol": "pha", - "precision": 12, - "currencyId": "18446744073709551623", - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F" + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" } - ], - "nodes": [{ - "url": "wss://rpc.shiden.astar.network", - "name": "StakeTechnologies node" - }, + ] + }, + { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assets": [ { - "url": "wss://shiden.public.blastapi.io", - "name": "Blast node" + "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", + "symbol": "aUSD" }, { - "url": "wss://shiden-rpc.dwellir.com", - "name": "Dwellir node" + "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", + "symbol": "ACA" }, { - "url": "wss://shiden.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", + "symbol": "GLMR" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Shiden.svg", - "addressPrefix": 5 - }, - { - "disabled": false, - "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2001", - "name": "Bifrost", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-Bifrost/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://bifrost-kusama.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "isUtility": true, - "id": "559e80d6-fb38-4dd5-bbd6-c0a7c2f600e1", - "name": "bifrost native coin", - "symbol": "bnc", - "precision": 12, - "priceId": "bifrost-native-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", - "color": "FFFFFF", - "type": "normal" + ] }, + { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assets": [ { - "id": "922c191c-4cb8-407e-8b81-2cfc52170c3b", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "existentialDeposit": "100000000", - "type": "ormlAsset" - }, - { - "id": "75206b90-456e-48ae-a118-0bf9ab861115", - "name": "rmrk", - "symbol": "rmrk", - "precision": 10, - "priceId": "rmrk", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", - "color": "392B73", - "existentialDeposit": "10000", - "type": "ormlAsset" - }, - { - "id": "5c31c8ae-c045-43f2-849a-88a17ee7b302", - "name": "karura", - "symbol": "kar", - "precision": 12, - "priceId": "karura", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", - "color": "FFFFFF", - "existentialDeposit": "100000000", - "type": "ormlAsset" - }, - { - "id": "07f2a7fc-9b0a-4583-9267-57b68ecd4350", - "name": "voucher ksm", - "symbol": "vksm", - "currencyId": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VKSM.svg", - "color": "FFFFFF", - "existentialDeposit": "100000000", - "isNative": true, - "type": "vToken" - }, - { - "id": "dd0efecb-51a1-481d-a949-80cb7663c105", - "name": "voucher slot ksm", - "symbol": "vsksm", - "currencyId": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VSKSM.svg", - "color": "FFFFFF", - "existentialDeposit": "100000000", - "type": "vsToken", - "isNative": true - }, - { - "id": "94d5e2d9-c2d7-40e6-8893-5832a784b2ea", - "name": "acala dollar", - "symbol": "ausd", - "currencyId": "kusd", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", - "color": "E40C5B", - "priceId": "acala-dollar", - "existentialDeposit": "100000000", - "type": "stable" - }, - { - "id": "2bd78b68-8bd7-4859-928a-1a7b8b57a734", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "priceId": "tether", - "existentialDeposit": "1000", - "type": "foreignAsset", - "currencyId": "0" - }, - { - "id": "e6f78e19-80c7-4e8c-8499-91e03df504a8", - "name": "moonriver", - "symbol": "movr", - "precision": 18, - "priceId": "moonriver", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", - "color": "FFFFFF", - "type": "ormlAsset", - "existentialDeposit": "1000000000000" - }, - { - "id": "fe2c5a55-aff7-4d00-af5c-e90082a5a11e", - "name": "zenlink network", - "symbol": "zlk", - "precision": 18, - "priceId": "zenlink-network-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZLK.svg", - "color": "FFFFFF", - "existentialDeposit": "1000000000000", - "type": "ormlAsset", - "isNative": true + "id": "163a89b9-d140-44ca-b119-218a54e4235b", + "symbol": "lcDOT" }, { - "id": "33746c72-6806-47d0-a1c4-7b433df862f1", - "name": "phala", - "symbol": "pha", - "precision": 12, - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F", - "type": "ormlAsset", - "existentialDeposit": "40000000000" + "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", + "symbol": "ACA" } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", - "symbol": "BNC" - }, - { - "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", - "symbol": "MOVR" - }, - { - "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", - "symbol": "AUSD" - }, - { - "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", - "symbol": "USDt" - } - ], - "availableDestinations": [ - { - "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - } - ] - }, - { - "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", - "assets": [ - { - "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", - "symbol": "USDt" - } - ] - }, - { - "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", - "symbol": "BNC" - }, - { - "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", - "symbol": "AUSD" - } - ] - }, - { - "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", - "assets": [ - { - "id": "0ceffe96-8090-404e-815c-91118ee5dd65", - "symbol": "KSM" - }, - { - "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", - "symbol": "BNC" - }, - { - "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", - "symbol": "MOVR" - } - ] - } - ] + ] }, - "nodes": [{ - "url": "wss://bifrost-rpc.liebi.com/ws", - "name": "Liebi node" - }, - { - "url": "wss://bifrost-rpc.dwellir.com", - "name": "Dwellir node" - }, + { + "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", + "assets": [ { - "url": "wss://bifrost-parachain.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", + "symbol": "ACA", + "minAmount": "56000000000000" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bifrost.svg", - "addressPrefix": 6, - "types": { - "url": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/type_registry/bifrost.json", - "overridesCommon": true + ], + "bridgeParachainId": "e92d165ad41e41e215d09713788173aecfdbe34d3bed29409d33a2ef03980738" } + ] }, - { - "disabled": false, - "chainId": "d43540ba6d3eb4897c28a77d48cb5b729fea37603cbbfc7a86a73b72adb3be8d", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2004", - "name": "Khala", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-khala/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://khala.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "3feb7de3-e881-4c04-a4de-1b9091dbc324", - "name": "phala", - "symbol": "pha", - "precision": 12, - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F", - "isUtility": true, - "type": "normal" + "nodes": [ + { + "url": "wss://api-acala.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc-acala.luckyfriday.io", + "name": "LuckyFriday node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/acala.svg", + "addressPrefix": 10, + "options": [ + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "name": "Karura", + "ecosystem": "substrate", + "paraId": "2000", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-karura-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://karura.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "e71b30a0-2a44-40ff-8b53-a166fadef6c5", + "name": "karura", + "symbol": "kar", + "precision": 12, + "priceId": "karura", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + }, + { + "id": "91a69026-0ab7-4db0-af53-8d571fd33ac4", + "name": "acala dollar", + "symbol": "ausd", + "currencyId": "kusd", + "precision": 12, + "priceId": "acala-dollar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", + "color": "E40C5B", + "type": "ormlAsset", + "isNative": true, + "existentialDeposit": "10000000000" + }, + { + "id": "223b0282-b5c9-48ed-87e3-5e9ef6714ac8", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "type": "ormlAsset", + "existentialDeposit": "100000000" + }, + { + "id": "e605149c-0f41-4ec9-960f-21c07e2d9361", + "name": "rmrk", + "symbol": "rmrk", + "currencyId": "0", + "precision": 10, + "priceId": "rmrk", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", + "color": "392B73", + "type": "foreignAsset", + "existentialDeposit": "100000000" + }, + { + "id": "10757cfa-b590-43c1-8524-efc28d798bcb", + "name": "bifrost native coin", + "symbol": "bnc", + "precision": 12, + "priceId": "bifrost-native-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", + "color": "FFFFFF", + "type": "ormlAsset", + "existentialDeposit": "8000000000" + }, + { + "id": "77562113-9e01-49b6-a39d-87a47bde24fe", + "name": "liquid ksm", + "symbol": "lksm", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LKSM.svg", + "color": "FFFFFF", + "type": "ormlAsset", + "isNative": true, + "existentialDeposit": "500000000" + }, + { + "id": "c6fd5a1e-3052-4bdf-b0f3-ad1b7b9fbff0", + "name": "crust shadow", + "symbol": "csm", + "currencyId": "5", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CSM_Crust_Shadow.svg", + "color": "F3AD56", + "priceId": "crust-storage-market", + "type": "foreignAsset", + "existentialDeposit": "1000000000000" + }, + { + "id": "5e9c76a4-9f89-487d-80aa-db0588b60aa4", + "name": "taiga", + "symbol": "tai", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TAI.svg", + "color": "FFFFFF", + "priceId": "taiga", + "type": "ormlAsset", + "isNative": true, + "existentialDeposit": "1000000000000" + }, + { + "id": "4b9f4cba-3b26-4f99-8666-3ee305683706", + "name": "polarisdao", + "symbol": "aris", + "currencyId": "1", + "precision": 8, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ARIS.svg", + "color": "423F47", + "priceId": "polarisdao", + "type": "foreignAsset", + "existentialDeposit": "1000000000000" + }, + { + "id": "3d32d7cb-4de5-427e-9668-a9763648a555", + "name": "quartz", + "symbol": "qtz", + "currencyId": "2", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/QTZ.svg", + "color": "EC5B6D", + "priceId": "quartz", + "type": "foreignAsset", + "existentialDeposit": "1000000000000000000" + }, + { + "id": "17142348-16f6-49f2-9006-098f5562bda0", + "name": "kintsugi ibtc", + "symbol": "kbtc", + "precision": 8, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", + "color": "FFFFFF", + "priceId": "kintsugi-btc", + "type": "ormlAsset", + "existentialDeposit": "66" + }, + { + "id": "6aa4622c-42b9-4976-9f7c-35447bb24128", + "name": "kintsugi", + "symbol": "kint", + "precision": 12, + "priceId": "kintsugi", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", + "color": "FFFFFF", + "type": "ormlAsset", + "existentialDeposit": "133330000" + }, + { + "id": "e27e5b58-3229-4656-b9ff-de309f49f17f", + "name": "phala", + "symbol": "pha", + "precision": 12, + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F", + "type": "ormlAsset", + "existentialDeposit": "40000000000" + }, + { + "id": "8e975c47-df51-48a8-a29e-a89ee0f4bf9e", + "name": "taiga ksm", + "symbol": "taiksm", + "currencyId": "0", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TAIKSM.svg", + "color": "FFFFFF", + "type": "stableAssetPoolToken", + "isNative": true, + "existentialDeposit": "100000000" + }, + { + "id": "536deaa6-49b0-4b54-adc7-9619e15c79b2", + "name": "voucher slot ksm", + "symbol": "vsksm", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VSKSM.svg", + "color": "FFFFFF", + "type": "ormlAsset", + "existentialDeposit": "100000000" + }, + { + "id": "f2257792-ffb9-4dff-95ae-5f98c1cb594b", + "name": "moonriver", + "symbol": "movr", + "currencyId": "3", + "precision": 18, + "priceId": "moonriver", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", + "color": "FFFFFF", + "type": "foreignAsset", + "existentialDeposit": "1000000000000000" + }, + { + "id": "54b7f751-ef62-45b2-ad65-837852de5af4", + "name": "heiko finance", + "symbol": "hko", + "currencyId": "4", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HKO.svg", + "color": "CC3474", + "type": "foreignAsset", + "existentialDeposit": "100000000000" + }, + { + "id": "bb3dc769-394f-40fb-b54f-4a0d0de7e49e", + "name": "kico", + "symbol": "kico", + "currencyId": "6", + "precision": 14, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KICO.svg", + "color": "FFFFFF", + "type": "foreignAsset", + "existentialDeposit": "100000000000000" + }, + { + "id": "5fd5f3ce-4a2c-4647-923e-6c29cc95a4f7", + "name": "tether usd", + "symbol": "usdt", + "currencyId": "7", + "precision": 6, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "type": "foreignAsset", + "existentialDeposit": "10000" + }, + { + "id": "8cf27ed8-11bf-4b16-be22-5aa6bbc10736", + "name": "integritee", + "symbol": "teer", + "currencyId": "8", + "precision": 12, + "priceId": "integritee", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TEER.svg", + "color": "FFFFFF", + "type": "foreignAsset", + "existentialDeposit": "100000000000" + }, + { + "id": "805e945b-54a6-47ec-a62b-7bcbae46fb70", + "name": "metaverse.network pioneer", + "symbol": "neer", + "currencyId": "9", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NEER.svg", + "color": "B8FBFE", + "type": "foreignAsset", + "existentialDeposit": "100000000000000000" + }, + { + "id": "addd6fed-51af-4088-8d6d-05c73b48b8df", + "name": "calamari network", + "symbol": "kma", + "currencyId": "10", + "precision": 12, + "priceId": "calamari-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KMA.svg", + "color": "FFFFFF", + "type": "foreignAsset", + "existentialDeposit": "100000000000" + }, + { + "id": "f8d6e0db-e50b-46ea-b870-c2e97abb99d7", + "name": "basilisk", + "symbol": "bsx", + "currencyId": "11", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BSX.svg", + "color": "87FCB6", + "type": "foreignAsset", + "existentialDeposit": "1000000000000" + }, + { + "id": "4879d0ed-810b-4792-8e83-387180cc3a9c", + "name": "altair", + "symbol": "air", + "currencyId": "12", + "precision": 18, + "priceId": "altair", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AIR.svg", + "color": "FFFFFF", + "type": "foreignAsset", + "existentialDeposit": "100000000000000000" + }, + { + "id": "e0fe6aac-a52e-4e78-be60-defee1006569", + "name": "crab network", + "symbol": "crab", + "currencyId": "13", + "precision": 18, + "priceId": "darwinia-crab-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRAB.svg", + "color": "581BD1", + "type": "foreignAsset", + "existentialDeposit": "1000000000000000000" + }, + { + "id": "1d534f94-bc5a-41a5-a295-c84f9ee0d95c", + "name": "genshiro", + "symbol": "gens", + "currencyId": "14", + "precision": 9, + "priceId": "genshiro", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GENS.svg", + "color": "FFFFFF", + "type": "foreignAsset", + "existentialDeposit": "1000000000000" + }, + { + "id": "b8f7bcbc-fe2d-457d-903f-c8c126127231", + "name": "equilibrium dollar protocol", + "symbol": "eqd", + "currencyId": "15", + "precision": 9, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQD.svg", + "color": "4D8BED", + "type": "foreignAsset", + "existentialDeposit": "10000000000" + }, + { + "id": "2433813f-403f-40e1-9e00-688b037113d5", + "name": "turing token", + "symbol": "tur", + "currencyId": "16", + "precision": 10, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUR.svg", + "color": "5DCBD0", + "type": "foreignAsset", + "existentialDeposit": "40000000000" + }, + { + "id": "1a6e5327-80da-439a-8294-8b3dbeb8172c", + "name": "pichu token", + "symbol": "pchu", + "currencyId": "17", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PCHU.svg", + "color": "AE4071", + "type": "foreignAsset", + "existentialDeposit": "100000000000000000" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" + }, + { + "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", + "symbol": "BNC" }, + { + "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", + "symbol": "AUSD" + }, + { + "id": "0fef7483-1f4c-4339-a12c-1b537e8e62ba", + "symbol": "KAR" + }, + { + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" + }, + { + "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", + "symbol": "USDt" + }, + { + "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", + "symbol": "MOVR" + } + ], + "availableDestinations": [ + { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assets": [ { - "id": "34d7fc9d-d616-4c3e-9398-060b18220a55", - "type": "assets", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "0", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF" + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" } - ], - "nodes": [{ - "url": "wss://khala-api.phala.network/ws", - "name": "Phala node" - }, + ] + }, + { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "assets": [ { - "url": "wss://khala-rpc.dwellir.com", - "name": "Dwellir node" + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" }, { - "url": "wss://khala.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", + "symbol": "USDt" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Khala.svg", - "addressPrefix": 30 - }, - { - "disabled": false, - "chainId": "411f057b9107718c9624d6aa4a3f23c1653898297f3d4d529d9bb6511a39dd21", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2086", - "name": "KILT Spiritnet", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://spiritnet.subscan.io/{type}/{value}" - }] + ] }, - "assets": [{ - "id": "f0d5cadc-4999-45f3-8160-15243f2909d3", - "name": "kilt protocol", - "symbol": "kilt", - "precision": 15, - "priceId": "kilt-protocol", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KILT.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://spiritnet.kilt.io/", - "name": "KILT Protocol node" - }, - { - "url": "wss://kilt-rpc.dwellir.com", - "name": "Dwellir node" - }, + { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assets": [ { - "url": "wss://spiritnet.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/kilt.svg", - "addressPrefix": 38 - }, - { - "disabled": false, - "chainId": "4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2084", - "name": "Calamari", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-calamari/graphql" + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://calamari.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "39d4080e-e2ab-43f3-bcc2-2fa281d9290c", - "name": "calamari network", - "symbol": "kma", - "precision": 12, - "priceId": "calamari-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KMA.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }, { - "id": "bd018ed9-069b-4d51-b5db-56b70bb5434c", - "type": "assets", - "name": "moonriver", - "symbol": "movr", - "precision": 18, - "currencyId": "11", - "priceId": "moonriver", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", - "color": "FFFFFF" + "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", + "symbol": "BNC" }, { - "id": "003bb609-cae4-4cf0-afad-4230ca17873b", - "type": "assets", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "12", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF" + "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", + "symbol": "AUSD" }, { - "id": "6094eb13-6084-4909-9232-31b6088ad4cc", - "type": "assets", - "name": "karura", - "symbol": "kar", - "precision": 12, - "currencyId": "8", - "priceId": "karura", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", - "color": "FFFFFF" - } - ], - "nodes": [{ - "url": "wss://calamari.systems", - "name": "Manta Network node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Calamari.svg", - "addressPrefix": 78 - }, - { - "disabled": false, - "chainId": "cd4d732201ebe5d6b014edda071c4203e16867305332301dc8d092044b28e554", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2095", - "name": "Quartz", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-quartz" + "id": "0fef7483-1f4c-4339-a12c-1b537e8e62ba", + "symbol": "KAR" } + ] }, - "assets": [{ - "id": "d0f2e718-99ee-4bc2-8dc2-1ce07f21c5ac", - "name": "quartz", - "symbol": "qtz", - "precision": 18, - "priceId": "quartz", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/QTZ.svg", - "color": "EC5B6D", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://eu-ws-quartz.unique.network", - "name": "Unique Europe node" - }, - { - "url": "wss://ws-quartz.unique.network", - "name": "Geo Load Balancer node" - }, + { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assets": [ { - "url": "wss://asia-ws-quartz.unique.network", - "name": "Unique Asia node" + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" }, { - "url": "wss://quartz.unique.network", - "name": "Unique node" + "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", + "symbol": "MOVR" }, { - "url": "wss://us-ws-quartz.unique.network", - "name": "Unique America node" + "id": "0fef7483-1f4c-4339-a12c-1b537e8e62ba", + "symbol": "KAR" }, { - "url": "wss://quartz.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", + "symbol": "AUSD" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/quartz.svg", - "addressPrefix": 255 + ] + } + ] }, - { - "disabled": false, - "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2085", - "name": "Parallel Heiko", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-parallel_heiko" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://parallel-heiko.subscan.io/{type}/{value}" - }] + "nodes": [ + { + "url": "wss://api-karura.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://karura.polkawallet.io", + "name": "Polkawallet node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Karura.svg", + "addressPrefix": 8, + "options": [ + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "rank": 11, + "name": "Moonriver", + "ecosystem": "ethereumBased", + "paraId": "2023", + "externalApi": { + "staking": { + "type": "subsquid", + "url": "https://squid.subsquid.io/fearless-moonriver-1/v/v2/graphql" + }, + "history": { + "type": "giantsquid", + "url": "https://squid-moonriver-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://moonriver.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "35346815-009a-4cf9-a5ad-85a0167e594d", + "name": "moonriver", + "symbol": "movr", + "precision": 18, + "priceId": "moonriver", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", + "color": "FFFFFF", + "staking": "parachain", + "isUtility": true, + "type": "normal" + }, + { + "id": "980af72c-d1b8-46c7-9793-fa87912652ec", + "name": "kusama", + "symbol": "xcksm", + "currencyId": "42259045809535163221576417993425387648", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "type": "assets" + }, + { + "id": "d1ebeaa2-e7ac-4645-8dce-e873ebdbb995", + "type": "assets", + "name": "acala dollar", + "symbol": "xcausd", + "currencyId": "214920334981412447805621250067209749032", + "precision": 12, + "priceId": "acala-dollar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", + "color": "E40C5B" + }, + { + "id": "8e45603e-91c4-4624-8457-9e9b24a98610", + "type": "assets", + "name": "xcrmrk", + "symbol": "xcrmrk", + "currencyId": "182365888117048807484804376330534607370", + "precision": 10, + "priceId": "rmrk", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", + "color": "392B73" + }, + { + "id": "4f9750bb-f3f5-45b3-a180-a0c734f52562", + "type": "assets", + "name": "kintsugi wrapped btc", + "symbol": "xckbtc", + "currencyId": "328179947973504579459046439826496046832", + "precision": 8, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", + "color": "FFFFFF", + "priceId": "kintsugi-btc" + }, + { + "id": "ff8fce18-260f-46c9-85bd-36157d1f756e", + "type": "assets", + "name": "phala token", + "symbol": "xcpha", + "currencyId": "189307976387032586987344677431204943363", + "precision": 12, + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F" + }, + { + "id": "88cfc7c3-6b8e-49a5-8620-e014840d4bf9", + "type": "assets", + "name": "robonomics native token", + "symbol": "xcxrt", + "currencyId": "108036400430056508975016746969135344601", + "precision": 9, + "priceId": "robonomics-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XRT.svg", + "color": "FFFFFF" + }, + { + "id": "db8fdbe6-26b0-4910-a267-d7a58c22c7ec", + "type": "assets", + "name": "kintsugi native token", + "symbol": "xckint", + "currencyId": "175400718394635817552109270754364440562", + "precision": 12, + "priceId": "kintsugi", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", + "color": "FFFFFF" + }, + { + "id": "1854feda-ca0c-4e82-9076-af2c7978f042", + "type": "assets", + "name": "karura", + "symbol": "xckar", + "currencyId": "10810581592933651521121702237638664357", + "precision": 12, + "priceId": "karura", + "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/KAR.svg", + "color": "FFFFFF" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "5b1a0b8f-74c9-4073-b288-0d2ca16dfb77", + "symbol": "MOVR" }, - "assets": [{ - "id": "02b54158-4f4f-4077-b6a7-7c9edd75a1ca", - "name": "heiko finance", - "symbol": "hko", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HKO.svg", - "color": "CC3474", - "isUtility": true, - "type": "normal" + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" }, + { + "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", + "symbol": "AUSD" + }, + { + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" + } + ], + "availableDestinations": [ + { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assets": [ { - "id": "382a7dd4-5444-4797-8cec-d921000144ed", - "type": "assets", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "100", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF" - }, - { - "id": "7bd1b0ca-a4a7-4b67-8f8b-cb19e2d3fab8", - "type": "assets", - "name": "moonriver", - "symbol": "movr", - "precision": 18, - "currencyId": "113", - "priceId": "moonriver", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", - "color": "FFFFFF" - }, - { - "id": "b48b21fb-eb3f-4296-9978-8dc42e42f384", - "type": "assets", - "name": "karura", - "symbol": "kar", - "precision": 12, - "currencyId": "107", - "priceId": "karura", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", - "color": "FFFFFF" - }, - { - "id": "535ab9cf-fa62-4e19-ab39-02e5584ef7af", - "type": "assets", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "102", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - }, - { - "id": "7a97a272-c767-4b45-b055-4c521168558c", - "type": "assets", - "name": "kintsugi native token", - "symbol": "kint", - "precision": 12, - "currencyId": "119", - "priceId": "kintsugi", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", - "color": "FFFFFF" - }, - { - "id": "5959efca-47b7-4ec4-a009-5870e2231d52", - "type": "assets", - "name": "kintsugi ibtc", - "symbol": "kbtc", - "precision": 8, - "currencyId": "121", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", - "color": "FFFFFF", - "priceId": "kintsugi-btc" - }, - { - "id": "d0262105-2c85-4167-bde0-50c7cdfe4942", - "type": "assets", - "name": "phala token", - "symbol": "pha", - "precision": 12, - "currencyId": "115", - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F" + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" } - ], - "nodes": [{ - "url": "wss://heiko-rpc.parallel.fi", - "name": "Parallel node" + ] + }, + { + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "assets": [ + { + "id": "5b1a0b8f-74c9-4073-b288-0d2ca16dfb77", + "symbol": "MOVR" }, { - "url": "wss://parallel-heiko.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/parallelfinance.svg", - "addressPrefix": 110 - }, - { - "disabled": false, - "chainId": "6811a339673c9daa897944dcdac99c6e2939cc88245ed21951a0a3c9a2be75bc", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2087", - "name": "Picasso", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-picasso" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://picasso.subscan.io/{type}/{value}" - }] + ] }, - "assets": [{ - "id": "d24959cd-72fb-4155-9880-86d42b1d1cbb", - "name": "picasso", - "symbol": "pica", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PICA.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://picasso-rpc.composable.finance", - "name": "Composable Finance node" - }, + { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assets": [ { - "url": "wss://rpc.composablenodes.tech", - "name": "Composable node" + "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", + "symbol": "AUSD" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/picasso.svg", - "addressPrefix": 49 - }, - { - "disabled": false, - "chainId": "aa3876c1dc8a1afcc2e9a685a49ff7704cfd36ad8c90bf2702b9d1b00cc40011", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2088", - "name": "Altair", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-altair" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://altair.subscan.io/{type}/{value}" - }] + ] }, - "assets": [{ - "id": "56c7f785-23d6-4199-accf-846be58011e6", - "name": "altair", - "symbol": "air", - "precision": 18, - "priceId": "altair", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AIR.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://fullnode.altair.centrifuge.io", - "name": "Centrifuge node" - }, + { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "assets": [ { - "url": "wss://altair.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Altair.svg", - "addressPrefix": 136 - }, - { - "disabled": false, - "chainId": "f22b7850cdd5a7657bbfd90ac86441275bbc57ace3d2698a740c7b0ec4de5ec3", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2096", - "name": "Bit.Country Pioneer", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-bit_country_pioneer" + "id": "c62c16f5-ac6b-410f-8804-4100dfb1bf33", + "symbol": "RMRK" } - }, - "assets": [{ - "id": "d3b93409-97b1-42e0-8dbc-99d3fb93fc10", - "name": "metaverse.network pioneer", - "symbol": "neer", - "precision": 18, - "priceId": "metaverse-network-pioneer", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NEER.svg", - "color": "B8FBFE", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://pioneer.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + ] } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/bitcountry.svg", - "addressPrefix": 268 + ] }, - { - "disabled": false, - "chainId": "5c7bd13edf349b33eb175ffae85210299e324d852916336027391536e686f267", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2002", - "name": "Clover", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-clover" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://clv.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "4b7ab596-bff4-4fd8-9c60-24ef1cbe9584", - "name": "clover finance", - "symbol": "clv", - "precision": 18, - "priceId": "clover-finance", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CLV.svg", - "color": "73D4FD", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc-para.clover.finance", - "name": "Clover node" - }, - { - "url": "wss://clover.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/clover.svg", - "addressPrefix": 128 + "nodes": [ + { + "url": "wss://api-moonriver.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://wss.moonriver.moonbeam.network", + "name": "PureStake node" + }, + { + "url": "wss://moonriver.unitedbloc.com", + "name": "UnitedBloc node" + }, + { + "url": "wss://wss.api.moonriver.moonbeam.network", + "name": "Moonbeam Foundation node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Moonriver.svg", + "addressPrefix": 1285, + "options": [ + "ethereumBased" + ] + }, + { + "disabled": false, + "chainId": "f1cf9022c7ebb34b162d5b5e34e705a5a740b2d0ecc1009fb89023e62a488108", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2007", + "name": "Shiden", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-shiden-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://shiden.subscan.io/{type}/{value}" + } + ] }, - { - "disabled": false, - "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2006", - "name": "Astar", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-astar/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://astar.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "5ab1e8d-81ed-4130-9d29-55b549cc6bab", - "name": "astar", - "symbol": "astr", - "precision": 18, - "priceId": "astar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", - "color": "0AE2FF", - "isUtility": true, - "type": "normal" - }, - { - "id": "d898014a-5c0f-49a1-b563-51017e9dce38", - "type": "assets", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "currencyId": "340282366920938463463374607431768211455", - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066" - }, - { - "id": "af1fc6a0-505c-43d7-b214-d64e4414e2e1", - "type": "assets", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "4294969280", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - }, - { - "id": "3e0a1785-2faa-43bf-8af6-d02c96d6b30e", - "type": "assets", - "name": "equilibrium", - "symbol": "eq", - "precision": 9, - "currencyId": "18446744073709551628", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQ.svg", - "color": "5176E6" - }, - { - "id": "39fb54c8-52c1-4cf7-8412-24ac38b63eb4", - "type": "assets", - "name": "phala token", - "symbol": "pha", - "precision": 12, - "currencyId": "18446744073709551622", - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F" - }, - { - "id": "ee6b0152-326f-4e15-a62f-ac02d357d840", - "type": "assets", - "name": "moonbeam", - "symbol": "glmr", - "precision": 18, - "currencyId": "18446744073709551619", - "priceId": "moonbeam", - "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF" - } - ], - "nodes": [{ - "url": "wss://rpc.astar.network", - "name": "Astar node" - }, - { - "url": "wss://astar.public.blastapi.io", - "name": "Blast node" - }, - { - "url": "wss://astar-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://astar.public.curie.radiumblock.co/ws", - "name": "RadiumBlock node" - }, - { - "url": "wss://astar.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/astar.svg", - "addressPrefix": 5, - "options": [ - "tipRequired" - ] + "assets": [ + { + "id": "6dbb524b-a2d7-4c32-b0f9-6825b3e7d2c4", + "name": "shiden network", + "symbol": "sdn", + "precision": 18, + "priceId": "shiden", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/SDN.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + }, + { + "id": "52509327-116a-4365-bf7d-03cecf7868bc", + "type": "assets", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "340282366920938463463374607431768211455", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + }, + { + "id": "aa494fdc-3411-438c-b69b-a53e36f062a1", + "type": "assets", + "name": "phala token", + "symbol": "pha", + "precision": 12, + "currencyId": "18446744073709551623", + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F" + } + ], + "nodes": [ + { + "url": "wss://api-shiden.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.shiden.astar.network", + "name": "StakeTechnologies node" + }, + { + "url": "wss://shiden.public.blastapi.io", + "name": "Blast node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Shiden.svg", + "addressPrefix": 5 + }, + { + "disabled": false, + "chainId": "9f28c6a68e0fc9646eff64935684f6eeeece527e37bbe1f213d22caa1d9d6bed", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2001", + "name": "Bifrost", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid.subsquid.io/gs-main-Bifrost/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://bifrost-kusama.subscan.io/{type}/{value}" + } + ] }, - { - "disabled": false, - "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2012", - "name": "Parallel", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-parallel" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://parallel.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "f78aa731-a33c-4d8d-a3bb-74835064366b", - "name": "parallel finance", - "symbol": "para", - "precision": 12, - "priceId": "parallel-finance", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PARA.svg", - "color": "4C19E7", - "isUtility": true, - "type": "normal" + "assets": [ + { + "isUtility": true, + "id": "559e80d6-fb38-4dd5-bbd6-c0a7c2f600e1", + "name": "bifrost native coin", + "symbol": "bnc", + "precision": 12, + "priceId": "bifrost-native-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", + "color": "FFFFFF", + "type": "normal" + }, + { + "id": "922c191c-4cb8-407e-8b81-2cfc52170c3b", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "existentialDeposit": "100000000", + "type": "ormlAsset" + }, + { + "id": "75206b90-456e-48ae-a118-0bf9ab861115", + "name": "rmrk", + "symbol": "rmrk", + "precision": 10, + "priceId": "rmrk", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", + "color": "392B73", + "existentialDeposit": "10000", + "type": "ormlAsset" + }, + { + "id": "5c31c8ae-c045-43f2-849a-88a17ee7b302", + "name": "karura", + "symbol": "kar", + "precision": 12, + "priceId": "karura", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", + "color": "FFFFFF", + "existentialDeposit": "100000000", + "type": "ormlAsset" + }, + { + "id": "07f2a7fc-9b0a-4583-9267-57b68ecd4350", + "name": "voucher ksm", + "symbol": "vksm", + "currencyId": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VKSM.svg", + "color": "FFFFFF", + "existentialDeposit": "100000000", + "isNative": true, + "type": "vToken" + }, + { + "id": "dd0efecb-51a1-481d-a949-80cb7663c105", + "name": "voucher slot ksm", + "symbol": "vsksm", + "currencyId": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VSKSM.svg", + "color": "FFFFFF", + "existentialDeposit": "100000000", + "type": "vsToken", + "isNative": true + }, + { + "id": "94d5e2d9-c2d7-40e6-8893-5832a784b2ea", + "name": "acala dollar", + "symbol": "ausd", + "currencyId": "kusd", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", + "color": "E40C5B", + "priceId": "acala-dollar", + "existentialDeposit": "100000000", + "type": "stable" + }, + { + "id": "2bd78b68-8bd7-4859-928a-1a7b8b57a734", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "priceId": "tether", + "existentialDeposit": "1000", + "type": "foreignAsset", + "currencyId": "0" + }, + { + "id": "e6f78e19-80c7-4e8c-8499-91e03df504a8", + "name": "moonriver", + "symbol": "movr", + "precision": 18, + "priceId": "moonriver", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", + "color": "FFFFFF", + "type": "ormlAsset", + "existentialDeposit": "1000000000000" + }, + { + "id": "fe2c5a55-aff7-4d00-af5c-e90082a5a11e", + "name": "zenlink network", + "symbol": "zlk", + "precision": 18, + "priceId": "zenlink-network-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZLK.svg", + "color": "FFFFFF", + "existentialDeposit": "1000000000000", + "type": "ormlAsset", + "isNative": true + }, + { + "id": "33746c72-6806-47d0-a1c4-7b433df862f1", + "name": "phala", + "symbol": "pha", + "precision": 12, + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F", + "type": "ormlAsset", + "existentialDeposit": "40000000000" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" }, - { - "id": "769ffb89-fd2f-4add-94a1-d2f9f716c143", - "type": "assets", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "currencyId": "101", - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066" - }, - { - "id": "1d850850-a2fb-4728-8dfc-13679c470017", - "type": "assets", - "name": "moonbeam", - "symbol": "glmr", - "precision": 18, - "currencyId": "114", - "priceId": "moonbeam", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF" - }, - { - "id": "5e745a28-9827-4d7f-9df9-e2cfbe4d11a5", - "type": "assets", - "name": "interlay", - "symbol": "intr", - "precision": 10, - "currencyId": "120", - "priceId": "interlay", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", - "color": "FFFFFF" - }, - { - "id": "ba44778d-f7a2-4adb-91f9-efd9a46468a7", - "type": "assets", - "name": "liquid crowdloan dot", - "symbol": "lcdot", - "precision": 10, - "currencyId": "106", - "priceId": "liquid-crowdloan-dot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LCDOT.svg", - "color": "FF0066" - }, - { - "id": "01adcd11-256d-4ac2-966e-9bb87ed5f769", - "type": "assets", - "name": "acala", - "symbol": "aca", - "precision": 12, - "currencyId": "108", - "priceId": "acala", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", - "color": "FFFFFF" - }, - { - "id": "bf70329b-421a-4b68-87eb-ef85e0d0044e", - "type": "assets", - "name": "liquid dot", - "symbol": "ldot", - "precision": 10, - "currencyId": "110", - "priceId": "liquid-staking-dot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LDOT.svg", - "color": "FF0066" - }, - { - "id": "b4dc02ce-3e71-4d92-8e1a-9599a75d20e4", - "type": "assets", - "name": "inter ibtc", - "symbol": "ibtc", - "precision": 8, - "currencyId": "122", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", - "color": "F2AE7F" - }, - { - "id": "c5453123-c85e-4226-b2a8-fbf0deb88e9f", - "type": "assets", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "102", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - }, - { - "id": "e52c5825-3076-4277-84e2-8b45f778d981", - "type": "assets", - "name": "cdot-6/13", - "symbol": "cdot-6/13", - "precision": 10, - "currencyId": "200060013", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/%D1%81DOT.svg", - "color": "FF0066" - }, - { - "id": "1236185c-fa70-481e-befa-deda855054df", - "type": "assets", - "name": "cdot-7/14", - "symbol": "cdot-7/14", - "precision": 10, - "currencyId": "200070014", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/%D1%81DOT.svg", - "color": "FF0066" - }, - { - "id": "afe2d55d-2fa7-4e7b-ab2c-c4c4aea15a87", - "type": "assets", - "name": "cdot-8/15", - "symbol": "cdot-8/15", - "precision": 10, - "currencyId": "200080015", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/%D1%81DOT.svg", - "color": "FF0066" - }, - { - "id": "d6d35753-a3dc-4987-8995-2afbe0a65606", - "type": "assets", - "name": "phala token", - "symbol": "pha", - "precision": 12, - "currencyId": "115", - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F" - } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - }, - { - "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", - "symbol": "GLMR" - }, - { - "id": "bc05b313-67f2-454d-bdfa-78a4feb82259", - "symbol": "lcDOT" - }, - { - "id": "0c7df36b-4ebd-4e66-a78b-77fa08b54c54", - "symbol": "ACA" - }, - { - "id": "a3ecbda6-80b6-492f-a656-5ab0bdcc9d1f", - "symbol": "LDOT" - }, - { - "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", - "symbol": "USDt" - } - ], - "availableDestinations": [ - { - "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, - { - "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", - "assets": [ - { - "id": "bc05b313-67f2-454d-bdfa-78a4feb82259", - "symbol": "lcDOT" - }, - { - "id": "0c7df36b-4ebd-4e66-a78b-77fa08b54c54", - "symbol": "ACA" - }, - { - "id": "a3ecbda6-80b6-492f-a656-5ab0bdcc9d1f", - "symbol": "LDOT" - } - ] - }, - { - "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", - "assets": [ - { - "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", - "symbol": "GLMR" - } - ] - }, - { - "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", - "assets": [ - { - "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", - "symbol": "USDt" - } - ] - } - - ] + { + "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", + "symbol": "BNC" }, - "nodes": [ - { - "url": "wss://parallel-rpc.dwellir.com", - "name": "Dwellir node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/parallelfinance.svg", - "addressPrefix": 172 - }, - { - "disabled": false, - "chainId": "a85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2090", - "name": "Basilisk", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-basilisk" - } + { + "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", + "symbol": "MOVR" }, - "assets": [{ - "id": "7dae28e2-9f5e-49ff-9140-aa750a9579ea", - "name": "basilisk", - "symbol": "bsx", - "precision": 12, - "priceId": "basilisk", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BSX.svg", - "color": "87FCB6", - "isUtility": true, - "type": "normal" + { + "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", + "symbol": "AUSD" }, + { + "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", + "symbol": "USDt" + } + ], + "availableDestinations": [ + { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assets": [ { - "id": "f7cafffc-c8d9-4441-8d52-84c17082e514", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "1", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "type": "assetId", - "existentialDeposit": "100000000" - }, - { - "id": "125a05b1-1e0b-411d-8628-ffd3b84ed4c8", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "14", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "type": "assetId", - "existentialDeposit": "10000" - } - ], - "nodes": [{ - "url": "wss://rpc.basilisk.cloud", - "name": "Basilisk node" - }, - { - "url": "wss://basilisk-rpc.dwellir.com", - "name": "Dwellir node" + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Basilisk.svg", - "addressPrefix": 10041 - }, - { - "disabled": false, - "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "rank": 12, - "paraId": "2004", - "name": "Moonbeam", - "externalApi": { - "staking": { - "type": "subsquid", - "url": "https://squid.subsquid.io/fearless-x-moonbeam/v/v2/graphql" - }, - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-moonbeam/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://moonbeam.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "e40c8161-9fc9-4749-a3b8-ed1c0ad16475", - "name": "moonbeam", - "symbol": "glmr", - "precision": 18, - "priceId": "moonbeam", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF", - "staking": "parachain", - "isUtility": true, - "type": "normal" + ] }, + { + "chainId": "48239ef607d7928874027a43a67689209727dfb3d3dc5e5b03a39bdc2eda771a", + "assets": [ { - "id": "7e4e064e-2b23-4eb5-96db-e6491c4031e5", - "type": "assets", - "name": "polkadot", - "symbol": "xcdot", - "precision": 10, - "currencyId": "42259045809535163221576417993425387648", - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066" - }, - { - "id": "311e3073-1bfb-40de-b601-20278e457577", - "type": "assets", - "name": "acala dollar", - "symbol": "xcausd", - "precision": 12, - "currencyId": "110021739665376159354538090254163045594", - "priceId": "acala-dollar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", - "color": "E40C5B" - }, - { - "id": "9539da0e-3610-406a-b1b9-c811b6508a17", - "type": "assets", - "name": "acala", - "symbol": "xcaca", - "precision": 12, - "currencyId": "224821240862170613278369189818311486111", - "priceId": "acala", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", - "color": "FFFFFF" - }, - { - "id": "1509c799-b30f-4fde-934e-791f1c88f3d1", - "type": "assets", - "name": "interlay", - "symbol": "xcintr", - "precision": 10, - "currencyId": "101170542313601871197860408087030232491", - "priceId": "interlay", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", - "color": "FFFFFF" - }, - { - "id": "9e738e1a-81be-4ac2-8de0-b56e565699ce", - "type": "assets", - "name": "astar", - "symbol": "xcastr", - "precision": 18, - "currencyId": "224077081838586484055667086558292981199", - "priceId": "astar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", - "color": "0AE2FF" - }, - { - "id": "5d4c759c-0f38-4c63-bdde-9359bdb0fa24", - "type": "assets", - "name": "tether usd", - "symbol": "xcusdt", - "precision": 6, - "currencyId": "311091173110107856861649819128533077277", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - }, - { - "id": "d69e3203-d914-4c70-8f38-ed66ea5d94ea", - "type": "assets", - "name": "equilibrium token", - "symbol": "xceq", - "precision": 9, - "currencyId": "190590555344745888270686124937537713878", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQ.svg", - "color": "5176E6" - }, - { - "id": "6cdc81d9-28a4-4b3c-8358-78a93f207ce7", - "type": "assets", - "name": "equilibrium dollar protocol", - "symbol": "xceqd", - "precision": 9, - "currencyId": "187224307232923873519830480073807488153", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQD.svg", - "color": "4D8BED" - }, - { - "id": "f68a9550-7d4c-4358-81bc-61c5ea233f20", - "type": "assets", - "name": "phala token", - "symbol": "xcpha", - "precision": 12, - "currencyId": "132685552157663328694213725410064821485", - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F" - }, - { - "id": "6fed1ff5-3aa5-4d94-b07a-22dfc0770fc0", - "type": "assets", - "name": "pink", - "symbol": "xcpink", - "precision": 10, - "currencyId": "64174511183114006009298114091987195453", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PINK.svg", - "color": "FF0066" + "id": "af3ac245-db18-4d40-aa1c-6b70e724fc5e", + "symbol": "USDt" } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - }, - { - "id": "31b03360-5c73-4733-a72d-65daf4600315", - "symbol": "GLMR" - }, - { - "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", - "symbol": "aUSD" - }, - { - "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", - "symbol": "ACA" - }, - { - "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", - "symbol": "USDt" - } - ], - "availableDestinations": [{ - "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "assets": [ - { - "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", - "symbol": "DOT" - } - ] - }, - { - "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", - "assets": [ - { - "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", - "symbol": "aUSD" - }, - { - "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", - "symbol": "ACA" - }, - { - "id": "31b03360-5c73-4733-a72d-65daf4600315", - "symbol": "GLMR" - } - ] - }, - { - "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", - "assets": [ - { - "id": "31b03360-5c73-4733-a72d-65daf4600315", - "symbol": "GLMR" - } - ] - }, - { - "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", - "assets": [ - { - "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", - "symbol": "USDt" - } - ] - } - ] + ] }, - "nodes": [{ - "url": "wss://wss.api.moonbeam.network", - "name": "Moonbeam Foundation node" - }, - { - "url": "wss://moonbeam.unitedbloc.com", - "name": "UnitedBloc node" - }, - { - "url": "wss://moonbeam.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - }, + { + "chainId": "baf5aabe40646d11f0ee8abbdc64f4a4b7674925cba08e4a05ff9ebed6e2126b", + "assets": [ { - "url": "wss://1rpc.io/glmr", - "name": "Automata 1RPC node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Moonbeam.svg", - "addressPrefix": 1284, - "options": [ - "ethereumBased" - ] - }, - { - "disabled": false, - "chainId": "91bc6e169807aaa54802737e1c504b2577d4fafedd5a02c10293b1cd60e39527", - "rank": 112, - "name": "Moonbase Alpha", - "externalApi": { - "staking": { - "type": "subsquid", - "url": "https://squid.subsquid.io/moonbase-x-fearless/v/v1/graphql" - }, - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-moonbase_alpha" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://moonbase.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "caf10b57-bb4d-437b-81be-d2e1a6acdcc5", - "name": "moonbase alpha", - "symbol": "dev", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF", - "staking": "parachain", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://wss.api.moonbase.moonbeam.network", - "name": "Moonbeam Network node" + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" }, { - "url": "wss://moonbase.unitedbloc.com", - "name": "UnitedBloc node" + "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", + "symbol": "BNC" }, { - "url": "wss://moonbeam-alpha.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Moonbeam.svg", - "addressPrefix": 1287, - "options": [ - "testnet", - "ethereumBased" - ] - }, - { - "disabled": false, - "chainId": "9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2092", - "name": "Kintsugi", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-kintsugi" + "id": "a7e923a9-41d6-4d08-a4e2-2cf3efbb1061", + "symbol": "AUSD" } + ] }, - "assets": [{ - "id": "f5d1db12-0a68-4897-903d-51a887daa1db", - "name": "kintsugi", - "symbol": "kint", - "precision": 12, - "priceId": "kintsugi", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", - "color": "FFFFFF", - "type": "ormlChain", - "isUtility": true - }, + { + "chainId": "401a1f9dca3da46f5c4091016c8a2f26dcea05865116b286f60f668207d1474b", + "assets": [ { - "id": "a6761186-60ba-4ea8-bec1-2db08a420301", - "type": "ormlChain", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF" + "id": "0ceffe96-8090-404e-815c-91118ee5dd65", + "symbol": "KSM" }, { - "id": "80662ad9-8920-43ae-859a-33d97e87f74e", - "type": "ormlChain", - "name": "kintsugi ibtc", - "symbol": "kbtc", - "precision": 8, - "priceId": "kintsugi-btc", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", - "color": "FFFFFF" - } - ], - "nodes": [{ - "url": "wss://api-kusama.interlay.io/parachain", - "name": "Kintsugi Labs node" + "id": "cf0019d7-bbf7-48ca-b818-47f644ad97f6", + "symbol": "BNC" }, { - "url": "wss://kintsugi.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "d5647f60-f838-4343-a33a-83c6e9fe1845", + "symbol": "MOVR" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/kintsugi.svg", - "addressPrefix": 2092, - "iosMinAppVersion": "2.0.7" - }, - { - "disabled": false, - "chainId": "9de765698374eb576968c8a764168893fb277e65ad3ddafcfe2c49593fc6d663", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2024", - "name": "Genshiro", - "assets": [{ - "id": "e207bcef-ab90-4df4-852f-566c309d778e", - "name": "genshiro", - "symbol": "gens", - "precision": 9, - "priceId": "genshiro", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GENS.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://node.ksm.genshiro.io", - "name": "Genshiro node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Genshiro.svg", - "addressPrefix": 67 + ] + } + ] }, - { - "disabled": false, - "chainId": "631ccc82a078481584041656af292834e1ae6daab61d2875b4dd0c14bb9b17bc", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2048", - "name": "Robonomics", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://robonomics.subscan.io/{type}/{value}" - }], - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-robonomics" - } - }, - "assets": [{ - "id": "ca39e03e-dde3-41ac-b1f4-a3d20202b79e", - "name": "robonomics network", - "symbol": "xrt", - "precision": 9, - "priceId": "robonomics-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XRT.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }, - { - "id": "b52b937a-f22b-4bab-a601-476aeeec4f2f", - "type": "assets", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "4294967295", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF" - } - ], - "nodes": [{ - "url": "wss://kusama.rpc.robonomics.network", - "name": "Airalab node" - }, - { - "url": "wss://robonomics.leemo.me", - "name": "Leemo node" - }, - { - "url": "wss://robonomics.0xsamsara.com", - "name": "Samsara node" - }, - { - "url": "wss://robonomics.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/robonomics.svg", - "addressPrefix": 32 + "nodes": [ + { + "url": "wss://api-bifrost-kusama.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://bifrost-rpc.liebi.com/ws", + "name": "Liebi node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bifrost.svg", + "addressPrefix": 6, + "types": { + "url": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/type_registry/bifrost.json", + "overridesCommon": true + } + }, + { + "disabled": false, + "chainId": "d43540ba6d3eb4897c28a77d48cb5b729fea37603cbbfc7a86a73b72adb3be8d", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2004", + "name": "Khala", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-khala-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://khala.subscan.io/{type}/{value}" + } + ] }, - { - "disabled": false, - "chainId": "4a12be580bb959937a1c7a61d5cf24428ed67fa571974b4007645d1886e7c89f", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2100", - "name": "Subsocial", - "assets": [{ - "id": "07f9e907-d099-4893-a67b-96cb2fe63049", - "name": "subsocial", - "symbol": "sub", - "precision": 10, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/SUB.svg", - "color": "AC2489", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://para.subsocial.network", - "name": "Dappforce node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/subsocial_new.svg", - "addressPrefix": 28 + "assets": [ + { + "id": "3feb7de3-e881-4c04-a4de-1b9091dbc324", + "name": "phala", + "symbol": "pha", + "precision": 12, + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F", + "isUtility": true, + "type": "normal" + }, + { + "id": "34d7fc9d-d616-4c3e-9398-060b18220a55", + "type": "assets", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "0", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + } + ], + "nodes": [ + { + "url": "wss://api-khala.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://khala-api.phala.network/ws", + "name": "Phala node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Khala.svg", + "addressPrefix": 30 + }, + { + "disabled": false, + "chainId": "411f057b9107718c9624d6aa4a3f23c1653898297f3d4d529d9bb6511a39dd21", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2086", + "name": "KILT Spiritnet", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-kilt-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://spiritnet.subscan.io/{type}/{value}" + } + ] }, - { - "disabled": false, - "chainId": "1bf2a2ecb4a868de66ea8610f2ce7c8c43706561b6476031315f6640fe38e060", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2101", - "name": "Zeitgeist", - "assets": [{ - "id": "2246fe14-4ec4-460c-8d92-e15bd337f8af", - "name": "zeitgeist", - "symbol": "ztg", - "precision": 10, - "priceId": "zeitgeist", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZTG.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://zeitgeist.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - }, - { - "url": "wss://zeitgeist-rpc.dwellir.com", - "name": "Dwellir node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/zeitgeist.svg", - "addressPrefix": 73 + "assets": [ + { + "id": "f0d5cadc-4999-45f3-8160-15243f2909d3", + "name": "kilt protocol", + "symbol": "kilt", + "precision": 15, + "priceId": "kilt-protocol", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KILT.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://spiritnet.kilt.io/", + "name": "KILT Protocol node" + }, + { + "url": "wss://kilt-rpc.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/kilt.svg", + "addressPrefix": 38 + }, + { + "disabled": false, + "chainId": "4ac80c99289841dd946ef92765bf659a307d39189b3ce374a92b5f0415ee17a1", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2084", + "name": "Calamari", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-calamari-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://calamari.subscan.io/{type}/{value}" + } + ] }, - { - "disabled": false, - "chainId": "335369975fced3fc22e23498da306a712f4fd964c957364d53c49cea9db8bc2f", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2021", - "name": "Efinity", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-efinity/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://efinity.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "80b7c347-161d-40a9-aed6-b2f202e3577e", - "name": "efinity", - "symbol": "efi", - "precision": 18, - "priceId": "efinity", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EFI.svg", - "color": "516CD4", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc.efinity.io", - "name": "Efinity node" - }, - { - "url": "wss://efinity-rpc.dwellir.com", - "name": "Dwellir node" - }, + "assets": [ + { + "id": "39d4080e-e2ab-43f3-bcc2-2fa281d9290c", + "name": "calamari network", + "symbol": "kma", + "precision": 12, + "priceId": "calamari-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KMA.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + }, + { + "id": "bd018ed9-069b-4d51-b5db-56b70bb5434c", + "type": "assets", + "name": "moonriver", + "symbol": "movr", + "precision": 18, + "currencyId": "11", + "priceId": "moonriver", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", + "color": "FFFFFF" + }, + { + "id": "003bb609-cae4-4cf0-afad-4230ca17873b", + "type": "assets", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "12", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + }, + { + "id": "6094eb13-6084-4909-9232-31b6088ad4cc", + "type": "assets", + "name": "karura", + "symbol": "kar", + "precision": 12, + "currencyId": "8", + "priceId": "karura", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", + "color": "FFFFFF" + } + ], + "nodes": [ + { + "url": "wss://calamari.systems", + "name": "Manta Network node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Calamari.svg", + "addressPrefix": 78 + }, + { + "disabled": false, + "chainId": "cd4d732201ebe5d6b014edda071c4203e16867305332301dc8d092044b28e554", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2095", + "name": "Quartz", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-quartz" + } + }, + "assets": [ + { + "id": "d0f2e718-99ee-4bc2-8dc2-1ce07f21c5ac", + "name": "quartz", + "symbol": "qtz", + "precision": 18, + "priceId": "quartz", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/QTZ.svg", + "color": "EC5B6D", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-quartz.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://eu-ws-quartz.unique.network", + "name": "Unique Europe node" + }, + { + "url": "wss://ws-quartz.unique.network", + "name": "Geo Load Balancer node" + }, + { + "url": "wss://asia-ws-quartz.unique.network", + "name": "Unique Asia node" + }, + { + "url": "wss://us-ws-quartz.unique.network", + "name": "Unique America node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/quartz.svg", + "addressPrefix": 255 + }, + { + "disabled": false, + "chainId": "64a1c658a48b2e70a7fb1ad4c39eea35022568c20fc44a6e2e3d0a57aee6053b", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2085", + "name": "Parallel Heiko", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-parallel_heiko" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://parallel-heiko.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "02b54158-4f4f-4077-b6a7-7c9edd75a1ca", + "name": "heiko finance", + "symbol": "hko", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HKO.svg", + "color": "CC3474", + "isUtility": true, + "type": "normal" + }, + { + "id": "382a7dd4-5444-4797-8cec-d921000144ed", + "type": "assets", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "100", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + }, + { + "id": "7bd1b0ca-a4a7-4b67-8f8b-cb19e2d3fab8", + "type": "assets", + "name": "moonriver", + "symbol": "movr", + "precision": 18, + "currencyId": "113", + "priceId": "moonriver", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MOVR.svg", + "color": "FFFFFF" + }, + { + "id": "b48b21fb-eb3f-4296-9978-8dc42e42f384", + "type": "assets", + "name": "karura", + "symbol": "kar", + "precision": 12, + "currencyId": "107", + "priceId": "karura", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAR.svg", + "color": "FFFFFF" + }, + { + "id": "535ab9cf-fa62-4e19-ab39-02e5584ef7af", + "type": "assets", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "102", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + }, + { + "id": "7a97a272-c767-4b45-b055-4c521168558c", + "type": "assets", + "name": "kintsugi native token", + "symbol": "kint", + "precision": 12, + "currencyId": "119", + "priceId": "kintsugi", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", + "color": "FFFFFF" + }, + { + "id": "5959efca-47b7-4ec4-a009-5870e2231d52", + "type": "assets", + "name": "kintsugi ibtc", + "symbol": "kbtc", + "precision": 8, + "currencyId": "121", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", + "color": "FFFFFF", + "priceId": "kintsugi-btc" + }, + { + "id": "d0262105-2c85-4167-bde0-50c7cdfe4942", + "type": "assets", + "name": "phala token", + "symbol": "pha", + "precision": 12, + "currencyId": "115", + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F" + } + ], + "nodes": [ + { + "url": "wss://heiko-rpc.parallel.fi", + "name": "Parallel node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/parallelfinance.svg", + "addressPrefix": 110 + }, + { + "disabled": false, + "chainId": "6811a339673c9daa897944dcdac99c6e2939cc88245ed21951a0a3c9a2be75bc", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2087", + "name": "Picasso", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-picasso-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://picasso.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "d24959cd-72fb-4155-9880-86d42b1d1cbb", + "name": "picasso", + "symbol": "pica", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PICA.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-picasso.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://picasso-rpc.composable.finance", + "name": "Composable Finance node" + }, + { + "url": "wss://rpc.composablenodes.tech", + "name": "Composable node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/picasso.svg", + "addressPrefix": 49 + }, + { + "disabled": false, + "chainId": "aa3876c1dc8a1afcc2e9a685a49ff7704cfd36ad8c90bf2702b9d1b00cc40011", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2088", + "name": "Altair", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-altair-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://altair.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "56c7f785-23d6-4199-accf-846be58011e6", + "name": "altair", + "symbol": "air", + "precision": 18, + "priceId": "altair", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AIR.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://fullnode.altair.centrifuge.io", + "name": "Centrifuge node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Altair.svg", + "addressPrefix": 136 + }, + { + "disabled": false, + "chainId": "f22b7850cdd5a7657bbfd90ac86441275bbc57ace3d2698a740c7b0ec4de5ec3", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2096", + "name": "Pioneer Network", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-bit_country_pioneer" + } + }, + "assets": [ + { + "id": "d3b93409-97b1-42e0-8dbc-99d3fb93fc10", + "name": "metaverse.network pioneer", + "symbol": "neer", + "precision": 18, + "priceId": "metaverse-network-pioneer", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NEER.svg", + "color": "B8FBFE", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://pioneer-rpc-3.bit.country/wss", + "name": "MetaverseNetwork node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/bitcountry.svg", + "addressPrefix": 268 + }, + { + "disabled": false, + "chainId": "5c7bd13edf349b33eb175ffae85210299e324d852916336027391536e686f267", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2002", + "name": "Clover", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-clover" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://clv.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "4b7ab596-bff4-4fd8-9c60-24ef1cbe9584", + "name": "clover finance", + "symbol": "clv", + "precision": 18, + "priceId": "clover-finance", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CLV.svg", + "color": "73D4FD", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc-para.clover.finance", + "name": "Clover node" + }, + { + "url": "wss://clover-rpc.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/clover.svg", + "addressPrefix": 128 + }, + { + "disabled": false, + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2006", + "name": "Astar", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-astar-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://astar.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "5ab1e8d-81ed-4130-9d29-55b549cc6bab", + "name": "astar", + "symbol": "astr", + "precision": 18, + "priceId": "astar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", + "color": "0AE2FF", + "isUtility": true, + "type": "normal" + }, + { + "id": "d898014a-5c0f-49a1-b563-51017e9dce38", + "type": "assets", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "currencyId": "340282366920938463463374607431768211455", + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066" + }, + { + "id": "af1fc6a0-505c-43d7-b214-d64e4414e2e1", + "type": "assets", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "4294969280", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + }, + { + "id": "3e0a1785-2faa-43bf-8af6-d02c96d6b30e", + "type": "assets", + "name": "equilibrium", + "symbol": "eq", + "precision": 9, + "currencyId": "18446744073709551628", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQ.svg", + "color": "5176E6" + }, + { + "id": "39fb54c8-52c1-4cf7-8412-24ac38b63eb4", + "type": "assets", + "name": "phala token", + "symbol": "pha", + "precision": 12, + "currencyId": "18446744073709551622", + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F" + }, + { + "id": "ee6b0152-326f-4e15-a62f-ac02d357d840", + "type": "assets", + "name": "moonbeam", + "symbol": "glmr", + "precision": 18, + "currencyId": "18446744073709551619", + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "5ab1e8d-81ed-4130-9d29-55b549cc6bab", + "symbol": "ASTR" + } + ], + "availableDestinations": [ + { + "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", + "assets": [ { - "url": "wss://efinity.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "5ab1e8d-81ed-4130-9d29-55b549cc6bab", + "symbol": "ASTR", + "minAmount": "73000000000000000000" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/efinity.svg", - "addressPrefix": 1110 + ], + "bridgeParachainId": "e92d165ad41e41e215d09713788173aecfdbe34d3bed29409d33a2ef03980738" + } + ] }, - { - "disabled": false, - "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2034", - "name": "HydraDX", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-hydradx/graphql" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://hydradx.subscan.io/{type}/{value}" - }] + "nodes": [ + { + "url": "wss://api-astar.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.astar.network", + "name": "Astar node" + }, + { + "url": "wss://astar.public.blastapi.io", + "name": "Blast node" + }, + { + "url": "wss://astar.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/astar.svg", + "addressPrefix": 5, + "options": [ + "tipRequired" + ] + }, + { + "disabled": false, + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2012", + "name": "Parallel", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-parallel-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://parallel.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "f78aa731-a33c-4d8d-a3bb-74835064366b", + "name": "parallel finance", + "symbol": "para", + "precision": 12, + "priceId": "parallel-finance", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PARA.svg", + "color": "4C19E7", + "isUtility": true, + "type": "normal" + }, + { + "id": "769ffb89-fd2f-4add-94a1-d2f9f716c143", + "type": "assets", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "currencyId": "101", + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066" + }, + { + "id": "1d850850-a2fb-4728-8dfc-13679c470017", + "type": "assets", + "name": "moonbeam", + "symbol": "glmr", + "precision": 18, + "currencyId": "114", + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF" + }, + { + "id": "5e745a28-9827-4d7f-9df9-e2cfbe4d11a5", + "type": "assets", + "name": "interlay", + "symbol": "intr", + "precision": 10, + "currencyId": "120", + "priceId": "interlay", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", + "color": "FFFFFF" + }, + { + "id": "ba44778d-f7a2-4adb-91f9-efd9a46468a7", + "type": "assets", + "name": "liquid crowdloan dot", + "symbol": "lcdot", + "precision": 10, + "currencyId": "106", + "priceId": "liquid-crowdloan-dot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LCDOT.svg", + "color": "FF0066" + }, + { + "id": "01adcd11-256d-4ac2-966e-9bb87ed5f769", + "type": "assets", + "name": "acala", + "symbol": "aca", + "precision": 12, + "currencyId": "108", + "priceId": "acala", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", + "color": "FFFFFF" + }, + { + "id": "bf70329b-421a-4b68-87eb-ef85e0d0044e", + "type": "assets", + "name": "liquid dot", + "symbol": "ldot", + "precision": 10, + "currencyId": "110", + "priceId": "liquid-staking-dot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LDOT.svg", + "color": "FF0066" + }, + { + "id": "b4dc02ce-3e71-4d92-8e1a-9599a75d20e4", + "type": "assets", + "name": "inter ibtc", + "symbol": "ibtc", + "precision": 8, + "currencyId": "122", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", + "color": "F2AE7F" + }, + { + "id": "c5453123-c85e-4226-b2a8-fbf0deb88e9f", + "type": "assets", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "102", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + }, + { + "id": "e52c5825-3076-4277-84e2-8b45f778d981", + "type": "assets", + "name": "cdot-6/13", + "symbol": "cdot-6/13", + "precision": 10, + "currencyId": "200060013", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/%D1%81DOT.svg", + "color": "FF0066" + }, + { + "id": "1236185c-fa70-481e-befa-deda855054df", + "type": "assets", + "name": "cdot-7/14", + "symbol": "cdot-7/14", + "precision": 10, + "currencyId": "200070014", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/%D1%81DOT.svg", + "color": "FF0066" + }, + { + "id": "afe2d55d-2fa7-4e7b-ab2c-c4c4aea15a87", + "type": "assets", + "name": "cdot-8/15", + "symbol": "cdot-8/15", + "precision": 10, + "currencyId": "200080015", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/%D1%81DOT.svg", + "color": "FF0066" + }, + { + "id": "d6d35753-a3dc-4987-8995-2afbe0a65606", + "type": "assets", + "name": "phala token", + "symbol": "pha", + "precision": 12, + "currencyId": "115", + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" }, - "assets": [{ - "id": "fce79b6c-e071-4271-837e-6ec87a719390", - "name": "hydradx", - "symbol": "hdx", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HDX.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" + { + "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", + "symbol": "GLMR" }, + { + "id": "bc05b313-67f2-454d-bdfa-78a4feb82259", + "symbol": "lcDOT" + }, + { + "id": "0c7df36b-4ebd-4e66-a78b-77fa08b54c54", + "symbol": "ACA" + }, + { + "id": "a3ecbda6-80b6-492f-a656-5ab0bdcc9d1f", + "symbol": "LDOT" + }, + { + "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", + "symbol": "USDt" + } + ], + "availableDestinations": [ + { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assets": [ { - "id": "4697396b-37c4-426f-a36a-fda1935f365a", - "type": "assetId", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "currencyId": "5", - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "existentialDeposit": "17540000" - }, - { - "id": "0de05a52-3686-486c-a80e-f7feb6e228d7", - "type": "assetId", - "name": "inter ibtc", - "symbol": "ibtc", - "precision": 8, - "currencyId": "11", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", - "color": "F2AE7F", - "existentialDeposit": "36" - }, - { - "id": "880664d6-71f6-473e-95ba-4cc697429578", - "type": "assetId", - "name": "moonbeam", - "symbol": "glmr", - "precision": 18, - "currencyId": "16", - "priceId": "moonbeam", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF", - "existentialDeposit": "34854864344868000" - }, - { - "id": "53bd7f6e-b8eb-468f-a2ec-2bf347e702a7", - "type": "assetId", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "10", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "existentialDeposit": "10000" + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" } - ], - "nodes": [{ - "url": "wss://rpc.hydradx.cloud", - "name": "Galactic Council node" - }, + ] + }, + { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assets": [ { - "url": "wss://hydradx-rpc.dwellir.com", - "name": "Dwellir node" + "id": "bc05b313-67f2-454d-bdfa-78a4feb82259", + "symbol": "lcDOT" }, { - "url": "wss://hydradx.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "0c7df36b-4ebd-4e66-a78b-77fa08b54c54", + "symbol": "ACA" }, { - "url": "wss://rpc-lb.data6.zp-labs.net:8443/hydradx/ws/?token=2ZGuGivPJJAxXiT1hR1Yg2MXGjMrhEBYFjgbdPi", - "name": "ZeePrime node" + "id": "a3ecbda6-80b6-492f-a656-5ab0bdcc9d1f", + "symbol": "LDOT" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/hydradx.svg", - "addressPrefix": 63 - }, - { - "disabled": false, - "chainId": "b3db41421702df9a7fcac62b53ffeac85f7853cc4e689e0b93aeb3db18c09d82", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2031", - "name": "Centrifuge", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-centrifuge" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://centrifuge.subscan.io//{type}/{value}" - }] + ] }, - "assets": [{ - "id": "7b1963a6-11f1-461c-a9f1-83d82a54b7ee", - "name": "centrifuge", - "symbol": "cfg", - "precision": 18, - "priceId": "centrifuge", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CFG.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://fullnode.parachain.centrifuge.io", - "name": "Centrufge node" - }, - { - "url": "wss://centrifuge-parachain.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/centrifuge.svg", - "addressPrefix": 36 - }, - { - "disabled": false, - "chainId": "97da7ede98d7bad4e36b4d734b6055425a3be036da2a332ea5a7037656427a21", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2026", - "name": "Nodle Parachain", - "assets": [{ - "id": "e0e1107-e323-43aa-bb93-d7618d2c8cf5", - "name": "nodle network", - "symbol": "nodl", - "precision": 11, - "priceId": "nodle-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NODL.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://nodle-rpc.dwellir.com", - "name": "Dwellir node" - }, + { + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "assets": [ { - "url": "wss://nodle-parachain.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "e9be3a4f-77c8-4861-8607-b7a76a690ac7", + "symbol": "GLMR" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/nodle.svg", - "addressPrefix": 37 - }, - { - "disabled": false, - "chainId": "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2032", - "name": "Interlay", - "assets": [{ - "id": "7a77b6b0-f015-4ccc-a5bb-3456e17775dd", - "name": "interlay", - "symbol": "intr", - "precision": 10, - "priceId": "interlay", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", - "color": "FFFFFF", - "type": "ormlChain", - "isUtility": true + ] }, + { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assets": [ { - "id": "2a45aeb9-f585-4f1b-9558-ee3aa186a809", - "type": "ormlChain", - "currencyId": "DOT", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066" - }, - { - "id": "fdb17d7c-ca72-4ed7-9fc8-728aa366c843", - "type": "ormlChain", - "name": "inter ibtc", - "symbol": "ibtc", - "precision": 8, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", - "color": "F2AE7F" - } - ], - "nodes": [{ - "url": "wss://api.interlay.io/parachain", - "name": "Kintsugi Labs node" - }, - { - "url": "wss://interlay.api.onfinality.io/ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", + "symbol": "USDt" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/interlay.svg", - "addressPrefix": 2032 - }, - { - "disabled": false, - "chainId": "da5831fbc8570e3c6336d0d72b8c08f8738beefec812df21ef2afc2982ede09c", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2106", - "name": "Litmus", - "assets": [{ - "id": "15076759-6a5b-4cd6-b84c-e64842f094e5", - "name": "litentry", - "symbol": "lit", - "precision": 12, - "priceId": "litentry", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LIT_KSM.svg", - "color": "6530F0", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc.litmus-parachain.litentry.io", - "name": "Litentry node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/litmus.svg", - "addressPrefix": 131 - }, - { - "disabled": false, - "chainId": "3920bcb4960a1eef5580cd5367ff3f430eef052774f78468852f7b9cb39f8a3c", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2040", - "name": "Polkadex Main Network", - "assets": [{ - "id": "5502c9cb-14f7-4de8-a35d-71263dc3f78f", - "name": "polkadex", - "symbol": "pdex", - "precision": 12, - "priceId": "polkadex", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PDEX.svg", - "color": "D32D79", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://mainnet.polkadex.trade", - "name": "Polkadex Team node" - }, - { - "url": "wss://polkadex.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "Onfinalty node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/polkadex.svg", - "addressPrefix": 88 - }, - { - "disabled": true, - "chainId": "577d331ca43646f547cdaa07ad0aa387a383a93416764480665103081f3eaf14", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2115", - "name": "Dorafactory Network", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/Dora-Factory-x-Fearless-Wallet" - } - }, - "assets": [{ - "id": "c0d1efac-597d-4c56-b5ad-b683b8214ada", - "name": "dora factory", - "symbol": "dora", - "precision": 12, - "priceId": "dora-factory", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DORA.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://kusama.dorafactory.org", - "name": "DORA node" + ] } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/DoraFactory.svg", - "addressPrefix": 128 + ] }, - { - "disabled": false, - "chainId": "e7e0962324a3b86c83404dbea483f25fb5dab4c224791c81b756cfc948006174", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2043", - "name": "OriginTrail Parachain", - "assets": [{ - "id": "af5bf9f0-0009-4cf8-98ed-b988268c94f1", - "name": "origitrail parachain", - "symbol": "otp", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OTP.svg", - "color": "6344DF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://parachain-rpc.origin-trail.network", - "name": "TraceLabs node" - } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/OriginTrail.svg", - "addressPrefix": 101 + "nodes": [ + { + "url": "wss://api-parallel.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.parallel.fi", + "name": "Parallel node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/parallelfinance.svg", + "addressPrefix": 172 + }, + { + "disabled": false, + "chainId": "a85cfb9b9fd4d622a5b28289a02347af987d8f73fa3108450e2b4a11c1ce5755", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2090", + "name": "Basilisk", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-basilisk-api.squid.tachi.soramitsu.co.jp/graphql" + } }, - { - "disabled": false, - "chainId": "84322d9cddbf35088f1e54e9a85c967a41a56a4f43445768125e61af166c7d31", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2037", - "name": "UNIQUE", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/Unique-x-Fearless-Wallet" - } - }, - "assets": [{ - "id": "57d05537-06a2-453b-ac87-d081aee65ec9", - "name": "unique network", - "symbol": "unq", - "precision": 18, - "priceId": "unique-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UNQ.svg", - "color": "65BAF9", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://ws.unique.network", - "name": "Geo Load Balancer node" - }, - { - "url": "wss://eu-ws.unique.network", - "name": "Unique Europe node" - }, - { - "url": "wss://asia-ws.unique.network", - "name": "Unique Asia node" - }, - { - "url": "wss://us-ws.unique.network", - "name": "Unique America node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/unique.svg", - "addressPrefix": 7391 + "assets": [ + { + "id": "7dae28e2-9f5e-49ff-9140-aa750a9579ea", + "name": "basilisk", + "symbol": "bsx", + "precision": 12, + "priceId": "basilisk", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BSX.svg", + "color": "87FCB6", + "isUtility": true, + "type": "normal" + }, + { + "id": "f7cafffc-c8d9-4441-8d52-84c17082e514", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "1", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "type": "assetId", + "existentialDeposit": "100000000" + }, + { + "id": "125a05b1-1e0b-411d-8628-ffd3b84ed4c8", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "14", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "type": "assetId", + "existentialDeposit": "10000" + } + ], + "nodes": [ + { + "url": "wss://api-basilisk.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.basilisk.cloud", + "name": "Basilisk node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Basilisk.svg", + "addressPrefix": 10041 + }, + { + "disabled": false, + "chainId": "fe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "rank": 12, + "paraId": "2004", + "name": "Moonbeam", + "ecosystem": "ethereumBased", + "externalApi": { + "staking": { + "type": "subsquid", + "url": "https://squid.subsquid.io/fearless-x-moonbeam/v/v2/graphql" + }, + "history": { + "type": "giantsquid", + "url": "https://squid-moonbeam-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://moonbeam.subscan.io/{type}/{value}" + } + ] }, - { - "disabled": false, - "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2030", - "name": "Bifrost Polkadot", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://bifrost.subscan.io/{type}/{value}" - }] + "assets": [ + { + "id": "e40c8161-9fc9-4749-a3b8-ed1c0ad16475", + "name": "moonbeam", + "symbol": "glmr", + "precision": 18, + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF", + "staking": "parachain", + "isUtility": true, + "type": "normal" + }, + { + "id": "7e4e064e-2b23-4eb5-96db-e6491c4031e5", + "type": "assets", + "name": "polkadot", + "symbol": "xcdot", + "precision": 10, + "currencyId": "42259045809535163221576417993425387648", + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066" + }, + { + "id": "311e3073-1bfb-40de-b601-20278e457577", + "type": "assets", + "name": "acala dollar", + "symbol": "xcausd", + "precision": 12, + "currencyId": "110021739665376159354538090254163045594", + "priceId": "acala-dollar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", + "color": "E40C5B" + }, + { + "id": "9539da0e-3610-406a-b1b9-c811b6508a17", + "type": "assets", + "name": "acala", + "symbol": "xcaca", + "precision": 12, + "currencyId": "224821240862170613278369189818311486111", + "priceId": "acala", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", + "color": "FFFFFF" + }, + { + "id": "1509c799-b30f-4fde-934e-791f1c88f3d1", + "type": "assets", + "name": "interlay", + "symbol": "xcintr", + "precision": 10, + "currencyId": "101170542313601871197860408087030232491", + "priceId": "interlay", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", + "color": "FFFFFF" + }, + { + "id": "9e738e1a-81be-4ac2-8de0-b56e565699ce", + "type": "assets", + "name": "astar", + "symbol": "xcastr", + "precision": 18, + "currencyId": "224077081838586484055667086558292981199", + "priceId": "astar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", + "color": "0AE2FF" + }, + { + "id": "5d4c759c-0f38-4c63-bdde-9359bdb0fa24", + "type": "assets", + "name": "tether usd", + "symbol": "xcusdt", + "precision": 6, + "currencyId": "311091173110107856861649819128533077277", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + }, + { + "id": "d69e3203-d914-4c70-8f38-ed66ea5d94ea", + "type": "assets", + "name": "equilibrium token", + "symbol": "xceq", + "precision": 9, + "currencyId": "190590555344745888270686124937537713878", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQ.svg", + "color": "5176E6" + }, + { + "id": "6cdc81d9-28a4-4b3c-8358-78a93f207ce7", + "type": "assets", + "name": "equilibrium dollar protocol", + "symbol": "xceqd", + "precision": 9, + "currencyId": "187224307232923873519830480073807488153", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQD.svg", + "color": "4D8BED" + }, + { + "id": "f68a9550-7d4c-4358-81bc-61c5ea233f20", + "type": "assets", + "name": "phala token", + "symbol": "xcpha", + "precision": 12, + "currencyId": "132685552157663328694213725410064821485", + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F" + }, + { + "id": "6fed1ff5-3aa5-4d94-b07a-22dfc0770fc0", + "type": "assets", + "name": "pink", + "symbol": "xcpink", + "precision": 10, + "currencyId": "64174511183114006009298114091987195453", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PINK.svg", + "color": "FF0066" + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" }, - "assets": [{ - "id": "dc9e23e8-f4bf-4864-9f2c-c2fbd4b03886", - "name": "bifrost native coin", - "symbol": "bnc", - "precision": 12, - "priceId": "bifrost-native-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" + { + "id": "31b03360-5c73-4733-a72d-65daf4600315", + "symbol": "GLMR" }, - { - "id": "fd62d09e-cfae-44f8-81a0-bf99732643fc", - "type": "token2", - "currencyId": "0", - "name": "polkadot", - "symbol": "dot", - "precision": 10, - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066" - }, - { - "id": "9ff3dbb1-5986-44b9-b247-db82ae3584a1", - "type": "token2", - "currencyId": "1", - "name": "moonbeam", - "symbol": "glmr", - "precision": 18, - "priceId": "moonbeam", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF" - }, - { - "id": "8dc39b21-04c9-4d1d-b9ec-8ea111052e77", - "type": "token2", - "currencyId": "2", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - } - ], - "nodes": [{ - "url": "wss://hk.p.bifrost-rpc.liebi.com/ws", - "name": "Liebi node" - }, - { - "url": "wss://bifrost-polkadot.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bifrost.svg", - "addressPrefix": 6 - }, - { - "disabled": false, - "chainId": "2fc8bb6ed7c0051bdcf4866c322ed32b6276572713607e3297ccf411b8f14aa9", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2013", - "name": "Litentry", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/Litentry-x-Fearless-Wallet" - } + { + "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", + "symbol": "aUSD" }, - "assets": [{ - "id": "10de552c-20cb-4a86-9bf8-cf5827ca2f71", - "name": "litentry", - "symbol": "lit", - "precision": 12, - "priceId": "litentry", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LIT_DOT.svg", - "color": "02C86A", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc.litentry-parachain.litentry.io", - "name": "Litentry node" - }, - { - "url": "wss://litentry-rpc.dwellir.com", - "name": "Dwellir node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Litentry.svg", - "addressPrefix": 31 - }, - { - "disabled": false, - "chainId": "1bb969d85965e4bb5a651abbedf21a54b6b31a21f66b5401cc3f1e286268d736", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2035", - "name": "Phala", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-phala/graphql" - } + { + "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", + "symbol": "ACA" }, - "assets": [{ - "id": "50add3d2-baa6-4bf3-9995-e6532ad51726", - "name": "phala", - "symbol": "pha", - "precision": 12, - "priceId": "pha", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", - "color": "DAFE6F", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://api.phala.network/ws", - "name": "Phala node" - }, - { - "url": "wss://phala-rpc.dwellir.com", - "name": "Dwellir node" - }, + { + "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", + "symbol": "USDt" + } + ], + "availableDestinations": [ + { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assets": [ { - "url": "wss://phala.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/phala.svg", - "addressPrefix": 30 - }, - { - "disabled": false, - "chainId": "daab8df776eb52ec604a5df5d388bb62a050a0aaec4556a64265b9d42755552d", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2019", - "name": "Composable Finance", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/Composable-Finance-X-Fearless-Wallet" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://composable.subscan.io/{type}/{value}" - }] + ] }, - "assets": [{ - "id": "7f429a3f-4666-40a2-a506-58bfe01504c4", - "name": "composable finance", - "symbol": "layr", - "precision": 12, - "priceId": "composable-finance-layr", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LAYR.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc.composable.finance", - "name": "Composable node" - }, + { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assets": [ { - "url": "wss://composable.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/composable.svg", - "addressPrefix": 49 - }, - { - "disabled": false, - "chainId": "35a06bfec2edf0ff4be89a6428ccd9ff5bd0167d618c5a0d4341f9600a458d14", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2119", - "name": "Bajun Kusama", - "assets": [{ - "id": "cbf84703-ba1d-4a39-ab5e-424756c91422", - "name": "bajun network", - "symbol": "baju", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BAJU.svg", - "color": "69A6DA", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc-parachain.bajun.network", - "name": "AjunaNetwork node" + "id": "91912dbb-65f3-48c1-8ec1-4bb584e5ff2e", + "symbol": "aUSD" }, { - "url": "wss://bajun.public.curie.radiumblock.co/ws", - "name": "RadiumBlock node" + "id": "7528bb5b-2aa9-4a70-a4ed-3476aec0f87d", + "symbol": "ACA" }, { - "url": "wss://bajun.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bajun.svg", - "addressPrefix": 1337 - }, - { - "disabled": false, - "chainId": "feb426ca713f0f46c96465b8f039890370cf6bfd687c9076ea2843f58a6ae8a7", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2113", - "name": "Kabocha", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/Kabocha-x-Fearless-Wallet" - } - }, - "assets": [{ - "id": "898eb0a1-ede6-437a-97b7-e92407db985f", - "name": "kabocha", - "symbol": "kab", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAB.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://kabocha.jelliedowl.com", - "name": "JelliedOwl node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kabocha.svg", - "addressPrefix": 27 - }, - { - "disabled": true, - "chainId": "52149c30c1eb11460dce6c08b73df8d53bb93b4a15d0a2e7fd5dafe86a73c0da", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2107", - "name": "KICO", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/KICO-x-Fearless-Wallet" + "id": "31b03360-5c73-4733-a72d-65daf4600315", + "symbol": "GLMR" } + ] }, - "assets": [{ - "id": "3a11badb-fe19-4cf4-9651-4b635a49bb7e", - "name": "kico", - "symbol": "kico", - "precision": 14, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KICO.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc.kico.dico.io", - "name": "DICO Foundation node" - }, + { + "chainId": "e61a41c53f5dcd0beb09df93b34402aada44cb05117b71059cce40a2723a4e97", + "assets": [ { - "url": "wss://rpc.api.kico.dico.io", - "name": "DICO Foundation 2 node" + "id": "31b03360-5c73-4733-a72d-65daf4600315", + "symbol": "GLMR" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/KICO.svg", - "addressPrefix": 42 - }, - { - "disabled": true, - "chainId": "d611f22d291c5b7b69f1e105cca03352984c344c4421977efaa4cbdd1834e2aa", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2110", - "name": "Mangata Kusama Mainnet", - "assets": [{ - "id": "27ccf12f-3ae0-4c5e-b337-ee43b7c23928", - "name": "mangata x", - "symbol": "mgx", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MGX.svg", - "color": "10C5C5", - "isUtility": true, - "type": "normal" + ] }, + { + "chainId": "68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f", + "assets": [ { - "id": "f63730eb-9fe2-41e9-9ec3-3cc4e6f02d0a", - "type": "ormlChain", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "4", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF" - }, - { - "id": "459f852b-665c-4743-8b2c-5bc5fc6abdda", - "type": "ormlChain", - "name": "bifrost native coin", - "symbol": "bnc", - "precision": 12, - "currencyId": "14", - "priceId": "bifrost-native-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", - "color": "FFFFFF" - }, - { - "id": "8ef9ca57-f2e4-4edb-9365-2805c7143537", - "type": "ormlChain", - "name": "voucher ksm", - "symbol": "vksm", - "precision": 12, - "currencyId": "15", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VKSM.svg", - "color": "FFFFFF" - }, - { - "id": "31aef057-d42a-419c-b0c4-cd61dc7e96c5", - "type": "ormlChain", - "name": "zenlink network", - "symbol": "zlk", - "precision": 18, - "currencyId": "26", - "priceId": "zenlink-network-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZLK.svg", - "color": "FFFFFF" - }, - { - "id": "3b46e22a-f819-4b2b-9dca-23dec1b66f82", - "type": "ormlChain", - "name": "rmrk", - "symbol": "rmrk", - "precision": 10, - "currencyId": "31", - "priceId": "rmrk", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", - "color": "392B73" - }, - { - "id": "2c28b884-dcbe-4653-91d2-934beefe4f2c", - "type": "ormlChain", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "30", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B" - }, - { - "id": "a4268819-dd67-45ba-a8f4-32277e3817b1", - "type": "ormlChain", - "name": "turing token", - "symbol": "tur", - "precision": 10, - "currencyId": "7", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUR.svg", - "color": "5DCBD0" - } - ], - "nodes": [{ - "url": "wss://prod-kusama-collator-01.mangatafinance.cloud", - "name": "Mangata node" - }, - { - "url": "wss://kusama-archive.mangata.online", - "name": "Mangata Archive node" - }, - { - "url": "wss://kusama-rpc.mangata.online", - "name": "Mangata RPC node" - }, - { - "url": "wss://mangata-x.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/MagnataX.svg", - "addressPrefix": 42 - }, - { - "disabled": true, - "chainId": "eacdd2d5b42de9769ccbb6e8d9013ab0d90ab105bf601d4aac53e874c145ec21", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2116", - "name": "DataHighway Tanganika", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/DataHighway-Tanganika-x-Fearless-Wallet" + "id": "886db77c-ce4a-430c-9e53-81c57ffa7d74", + "symbol": "USDt" } - }, - "assets": [{ - "id": "15df9971-2e6a-4619-a5ca-9ad571655287", - "name": "datahighway", - "symbol": "dhx", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DHX.svg", - "color": "6C179F", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://tanganika.datahighway.com", - "name": "DataHighway node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/DataHighway.svg", - "addressPrefix": 33 + ] + } + ] }, - { - "disabled": false, - "chainId": "89d3ec46d2fb43ef5a9713833373d5ea666b092fa8fd68fbc34596036571b907", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2011", - "name": "Equilibrium", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://equilibrium.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "47d1f5c5-c43d-4082-b577-ba0af91cb1a6", - "name": "equilibrium", - "symbol": "eq", - "currencyId": "25969", - "precision": 9, - "existentialDeposit": "1000000000", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQ.svg", - "color": "5176E6", - "isUtility": true, - "type": "equilibrium" - }, - { - "id": "50bb6d02-1aad-4a94-b41c-2a15b4aee0e8", - "name": "equilibrium dollar protocol", - "symbol": "eqd", - "currencyId": "6648164", - "precision": 9, - "existentialDeposit": "1000000000", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQD.svg", - "color": "4D8BED", - "type": "equilibrium" - }, - { - "id": "6b21d130-7475-4f61-b893-799061fc05bf", - "name": "acala", - "symbol": "aca", - "currencyId": "6382433", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", - "color": "FFFFFF", - "type": "equilibrium" - }, - { - "id": "9c67711c-7f0c-45fa-b7fc-66b655ba17e1", - "name": "bnb", - "symbol": "bnb", - "currencyId": "6450786", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", - "color": "F3BA2F", - "type": "equilibrium" - }, - { - "id": "b62f4a0a-883f-496f-a797-fd2b24abe01b", - "name": "polkadot", - "symbol": "dot", - "currencyId": "6582132", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "type": "equilibrium" - }, - { - "id": "665c8d3d-a035-45fb-9c9c-7cfaf7da96c6", - "name": "astar", - "symbol": "astr", - "currencyId": "1634956402", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", - "color": "0AE2FF", - "type": "equilibrium" - }, - { - "id": "c98efbda-a452-4329-8199-fef32dc9307e", - "name": "acala dollar", - "symbol": "ausd", - "currencyId": "1635087204", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", - "color": "E40C5B", - "type": "equilibrium" - }, - { - "id": "793fc038-c134-4d58-af6d-cb7c1be5a4ea", - "name": "binance usd", - "symbol": "busd", - "currencyId": "1651864420", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", - "color": "F3BA2F", - "type": "equilibrium" - }, - { - "id": "e8c17b03-a94c-4fd3-a599-189a1b5e8e32", - "name": "moonbeam", - "symbol": "glmr", - "currencyId": "1735159154", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", - "color": "FFFFFF", - "type": "equilibrium" - }, - { - "id": "a9d1b0b2-ad4e-4d86-88c5-72a8947099f0", - "name": "inter ibtc", - "symbol": "ibtc", - "currencyId": "1768060003", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", - "color": "F2AE7F", - "type": "equilibrium" - }, - { - "id": "502acf71-3c1f-4f1c-91d9-179fd2987a34", - "name": "interlay", - "symbol": "intr", - "currencyId": "1768846450", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", - "color": "FFFFFF", - "type": "equilibrium" - }, - { - "id": "f67bfaf7-e081-4355-abda-4f1faaeb3579", - "name": "parallel finance", - "symbol": "para", - "currencyId": "1885434465", - "precision": 9, - "priceId": "parallel-finance", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PARA.svg", - "color": "4C19E7", - "type": "equilibrium" - }, - { - "id": "c1ad2bb4-701a-4711-bacb-59259ff3d57d", - "name": "tether usd", - "symbol": "usdt", - "currencyId": "1970496628", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "type": "equilibrium" - }, - { - "id": "26a16776-71c9-450d-bfaf-df3a8cd6d277", - "name": "fluid xdot", - "symbol": "xdot", - "currencyId": "2019848052", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "type": "equilibrium" - }, - { - "id": "1eb9d66e-a92d-49c5-95fc-fd7a844fc66d", - "name": "equilibrium dot", - "symbol": "eqdot", - "currencyId": "435694104436", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/eqDOT.svg", - "color": "FFFFFF", - "type": "equilibrium" - } - ], - "nodes": [ - { - "url": "wss://equilibrium-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://node.pol.equilibrium.io", - "name": "Equilibrium node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/equilibrium.svg", - "addressPrefix": 68, - "options": [ - "utilityFeePayment" - ] + "nodes": [ + { + "url": "wss://api-moonbeam.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://wss.api.moonbeam.network", + "name": "Moonbeam Foundation node" + }, + { + "url": "wss://moonbeam.unitedbloc.com", + "name": "UnitedBloc node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Moonbeam.svg", + "addressPrefix": 1284, + "options": [ + "ethereumBased" + ] + }, + { + "disabled": true, + "chainId": "91bc6e169807aaa54802737e1c504b2577d4fafedd5a02c10293b1cd60e39527", + "rank": 111, + "name": "Moonbase Alpha", + "ecosystem": "ethereumBased", + "externalApi": { + "staking": { + "type": "subsquid", + "url": "https://squid.subsquid.io/moonbase-x-fearless/v/v1/graphql" + }, + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-moonbase_alpha" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://moonbase.subscan.io/{type}/{value}" + } + ] }, - { - "disabled": false, - "chainId": "724c168d8e86b78b831c641e2cc822b8d1bf99fa0b4b28fe59985cd6fd580215", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2039", - "name": "Integritee Shell", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-integritee" - } - }, - "assets": [{ - "id": "07c55d3a-b24e-410e-b9ca-7da0707fbd61", - "name": "integritee", - "symbol": "teer", - "precision": 12, - "priceId": "integritee", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TEER.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [ - { - "url": "wss://integritee-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://polkadot.api.integritee.network", - "name": "Integritee node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/integritee.svg", - "addressPrefix": 13 - }, - { - "disabled": false, - "chainId": "0f62b701fb12d02237a33b84818c11f621653d2b1614c777973babf4652b535d", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2114", - "name": "Turing Network", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-turing" - } - }, - "assets": [{ - "id": "148ce615-aea3-42fa-be45-5eb5606813b8", - "name": "turing token", - "symbol": "tur", - "precision": 10, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUR.svg", - "color": "5DCBD0", - "isUtility": true, - "type": "normal" - }, - { - "id": "e8774037-c4a5-42b5-87a4-cf946a60a406", - "type": "assetId", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "currencyId": "1", - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "existentialDeposit": "100000000" - } - ], - "nodes": [{ - "url": "wss://rpc.turing.oak.tech", - "name": "OAK node" - }, - { - "url": "wss://turing-rpc.dwellir.com", - "name": "Dwellir node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/OAK.svg", - "addressPrefix": 51 - }, - { - "disabled": false, - "chainId": "7dd99936c1e9e6d1ce7d90eb6f33bea8393b4bf87677d675aa63c9cb3e8c5b5b", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "1001", - "name": "Encointer on Kusama", - "assets": [{ - "id": "1e0c2ec6-935f-49bd-a854-5e12ee6c9f1b", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "purchaseProviders": [ - "ramp" - ], - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://kusama.api.encointer.org", - "name": "Encointer Association node" - }, - { - "url": "wss://sys.ibp.network/encointer-kusama", - "name": "IBP-GeoDNS1 node" - }, - { - "url": "wss://sys.dotters.network/encointer-kusama", - "name": "IBP-GeoDNS2 node" - }, - { - "url": "wss://encointer.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/encointer.svg", - "addressPrefix": 2 + "assets": [ + { + "id": "caf10b57-bb4d-437b-81be-d2e1a6acdcc5", + "name": "moonbase alpha", + "symbol": "dev", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF", + "staking": "parachain", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://wss.api.moonbase.moonbeam.network", + "name": "Moonbeam Network node" + }, + { + "url": "wss://moonbase.unitedbloc.com", + "name": "UnitedBloc node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Moonbeam.svg", + "addressPrefix": 1287, + "options": [ + "testnet", + "ethereumBased" + ] + }, + { + "disabled": false, + "chainId": "9af9a64e6e4da8e3073901c3ff0cc4c3aad9563786d89daf6ad820b6e14a0b8b", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2092", + "name": "Kintsugi", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-kintsugi" + } }, - { - "disabled": true, - "chainId": "0e06260459b4f9034aba0a75108c08ed73ea51d2763562749b1d3600986c4ea5", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2102", - "name": "Pichiu Network", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/Pichiu-x-Fearless-Wallet" - } - }, - "assets": [{ - "id": "5b196f7c-475a-493e-abbf-9f808d6fb863", - "name": "pichu token", - "symbol": "pchu", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PCHU.svg", - "color": "AE4071", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://kusama.kylin-node.co.uk", - "name": "Kylin Network node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/pichiu.svg", - "addressPrefix": 42 + "assets": [ + { + "id": "f5d1db12-0a68-4897-903d-51a887daa1db", + "name": "kintsugi", + "symbol": "kint", + "precision": 12, + "priceId": "kintsugi", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KINT.svg", + "color": "FFFFFF", + "type": "ormlChain", + "isUtility": true + }, + { + "id": "a6761186-60ba-4ea8-bec1-2db08a420301", + "type": "ormlChain", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + }, + { + "id": "80662ad9-8920-43ae-859a-33d97e87f74e", + "type": "ormlChain", + "name": "kintsugi ibtc", + "symbol": "kbtc", + "precision": 8, + "priceId": "kintsugi-btc", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KBTC.svg", + "color": "FFFFFF" + } + ], + "nodes": [ + { + "url": "wss://api-kintsugi.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://api-kusama.interlay.io/parachain", + "name": "Kintsugi Labs node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/kintsugi.svg", + "addressPrefix": 2092, + "iosMinAppVersion": "2.0.7" + }, + { + "disabled": true, + "chainId": "9de765698374eb576968c8a764168893fb277e65ad3ddafcfe2c49593fc6d663", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2024", + "name": "Genshiro", + "ecosystem": "substrate", + "assets": [ + { + "id": "e207bcef-ab90-4df4-852f-566c309d778e", + "name": "genshiro", + "symbol": "gens", + "currencyId": "1734700659", + "precision": 9, + "priceId": "genshiro", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GENS.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "equilibrium" + } + ], + "nodes": [ + { + "url": "wss://node.ksm.genshiro.io", + "name": "Genshiro node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Genshiro.svg", + "addressPrefix": 67 + }, + { + "disabled": false, + "chainId": "631ccc82a078481584041656af292834e1ae6daab61d2875b4dd0c14bb9b17bc", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2048", + "name": "Robonomics", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://robonomics.subscan.io/{type}/{value}" + } + ], + "history": { + "type": "giantsquid", + "url": "https://squid-robonomics-api.squid.tachi.soramitsu.co.jp/graphql" + } }, - { - "disabled": false, - "chainId": "d42e9606a995dfe433dc7955dc2a70f495f350f373daa200098ae84437816ad2", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2125", - "name": "InvArch Tinker Network", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/InvArch-Tinker-x-Fearless-Wallet" - } - }, - "assets": [{ - "id": "8b58d683-fdc9-477e-a1b2-2c95b663e4a5", - "name": "tinkernet parachain", - "symbol": "tnkr", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TNKR.svg", - "color": "AC2489", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://invarch-tinkernet.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Tinkernet.svg", - "addressPrefix": 117 + "assets": [ + { + "id": "ca39e03e-dde3-41ac-b1f4-a3d20202b79e", + "name": "robonomics network", + "symbol": "xrt", + "precision": 9, + "priceId": "robonomics-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XRT.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + }, + { + "id": "b52b937a-f22b-4bab-a601-476aeeec4f2f", + "type": "assets", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "4294967295", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + } + ], + "nodes": [ + { + "url": "wss://kusama.rpc.robonomics.network", + "name": "Airalab node" + }, + { + "url": "wss://robonomics.leemo.me", + "name": "Leemo node" + }, + { + "url": "wss://robonomics.0xsamsara.com", + "name": "Samsara node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/robonomics.svg", + "addressPrefix": 32 + }, + { + "disabled": false, + "chainId": "4a12be580bb959937a1c7a61d5cf24428ed67fa571974b4007645d1886e7c89f", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2101", + "name": "Subsocial", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-subsocial-api.squid.tachi.soramitsu.co.jp/graphql" + } }, - { - "disabled": false, - "chainId": "19a3733beb9cb8a970a308d835599e9005e02dc007a35440e461a451466776f8", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2123", - "name": "GM Parachain", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-gmordie/graphql" - } - }, - "assets": [{ - "id": "19763697-37d8-4643-b840-3fd8565f5d83", - "name": "gm parachain", - "symbol": "fren", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/FREN.svg", - "color": "F7D64D", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://leemo.gmordie.com", - "name": "leemo node" - }, - { - "url": "wss://ws.gm.bldnodes.org", - "name": "bLd Nodes node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/GM%20Parachain.svg", - "addressPrefix": 7013 + "assets": [ + { + "id": "07f9e907-d099-4893-a67b-96cb2fe63049", + "name": "subsocial", + "symbol": "sub", + "precision": 10, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/SUB.svg", + "color": "AC2489", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://para.subsocial.network", + "name": "Dappforce node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/subsocial_new.svg", + "addressPrefix": 28 + }, + { + "disabled": false, + "chainId": "1bf2a2ecb4a868de66ea8610f2ce7c8c43706561b6476031315f6640fe38e060", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2092", + "name": "Zeitgeist", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-zeitgeist-api.squid.tachi.soramitsu.co.jp/graphql" + } }, - { - "disabled": true, - "chainId": "ca93a37c913a25fa8fdb33c7f738afc39379cb71d37874a16d4c091a5aef9f89", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2121", - "name": "Imbue Kusama", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/Imbue-x-Fearless-Wallet" - } - }, - "assets": [{ - "id": "c01b37ab-eefa-427d-ba50-dd7a1cbe1798", - "name": "imbue network", - "symbol": "imbu", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/IMBU.svg", - "color": "C3FD51", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://imbue-kusama.imbue.network", - "name": "Imbue Network node node" + "assets": [ + { + "id": "2246fe14-4ec4-460c-8d92-e15bd337f8af", + "name": "zeitgeist", + "symbol": "ztg", + "precision": 10, + "priceId": "zeitgeist", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZTG.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-zeitgeist.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/zeitgeist.svg", + "addressPrefix": 73 + }, + { + "disabled": false, + "chainId": "afdc188f45c71dacbaa0b62e16a91f726c7b8699a9748cdf715459de6b7f366d", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2034", + "name": "HydraDX", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-hydradx-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://hydradx.subscan.io/{type}/{value}" } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Imbue.svg", - "addressPrefix": 42 - }, - { - "disabled": false, - "chainId": "cceae7f3b9947cdb67369c026ef78efa5f34a08fe5808d373c04421ecf4f1aaf", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2124", - "name": "Amplitude", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-amplitude/graphql" - } - }, - "assets": [{ - "id": "b2e6c029-ae73-46f9-9660-51d7034ddc53", - "name": "amplitude", - "symbol": "ampe", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AMPE.svg", - "color": "7CE2A0", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://amplitude-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://rpc-amplitude.pendulumchain.tech", - "name": "PendulumChain node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Amplitude.svg", - "addressPrefix": 57 + ] }, - { - "disabled": true, - "chainId": "f0b8924b12e8108550d28870bc03f7b45a947e1b2b9abf81bfb0b89ecb60570e", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2046", - "name": "Darwinia2", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://darwinia-parachain.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "b861f610-cf2c-43ad-a660-f6b809a05062", - "name": "darwinia", - "symbol": "ring", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RING.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc.darwinia.network", - "name": "Darwinia Network node" - }, - { - "url": "wss://darwinia-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://parachain-rpc.darwinia.network", - "name": "Darwinia Network 1 node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/darwinia.svg", - "addressPrefix": 18 + "assets": [ + { + "id": "fce79b6c-e071-4271-837e-6ec87a719390", + "name": "hydradx", + "symbol": "hdx", + "precision": 12, + "priceId": "hydradx", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HDX.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + }, + { + "id": "4697396b-37c4-426f-a36a-fda1935f365a", + "type": "assetId", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "currencyId": "5", + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "existentialDeposit": "17540000" + }, + { + "id": "0de05a52-3686-486c-a80e-f7feb6e228d7", + "type": "assetId", + "name": "inter ibtc", + "symbol": "ibtc", + "precision": 8, + "currencyId": "11", + "priceId": "interbtc", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", + "color": "F2AE7F", + "existentialDeposit": "36" + }, + { + "id": "880664d6-71f6-473e-95ba-4cc697429578", + "type": "assetId", + "name": "moonbeam", + "symbol": "glmr", + "precision": 18, + "currencyId": "16", + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF", + "existentialDeposit": "34854864344868000" + }, + { + "id": "53bd7f6e-b8eb-468f-a2ec-2bf347e702a7", + "type": "assetId", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "10", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "existentialDeposit": "10000" + } + ], + "nodes": [ + { + "url": "wss://api-hydradx.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.hydradx.cloud", + "name": "Galactic Council node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/hydradx.svg", + "addressPrefix": 63 + }, + { + "disabled": false, + "chainId": "b3db41421702df9a7fcac62b53ffeac85f7853cc4e689e0b93aeb3db18c09d82", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2031", + "name": "Centrifuge", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-centrifuge-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://centrifuge.subscan.io/{type}/{value}" + } + ] }, - { - "disabled": false, - "chainId": "f2584690455deda322214e97edfffaf4c1233b6e4625e39478496b3e2f5a44c5", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2052", - "name": "Kylin Network", - "assets": [{ - "id": "7512aeb7-7bdc-42dc-abe3-80ed764c80bd", - "name": "kylin network", - "symbol": "kyl", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KYL.svg", - "color": "AE4071", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://polkadot.kylin-node.co.uk", - "name": "Kylin Network node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kylin%20Network.svg", - "addressPrefix": 42 + "assets": [ + { + "id": "7b1963a6-11f1-461c-a9f1-83d82a54b7ee", + "name": "centrifuge", + "symbol": "cfg", + "precision": 18, + "priceId": "centrifuge", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CFG.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-centrifuge.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://fullnode.parachain.centrifuge.io", + "name": "Centrufge node" + }, + { + "url": "wss://rpc-centrifuge.luckyfriday.io", + "name": "LuckyFriday node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/centrifuge.svg", + "addressPrefix": 36 + }, + { + "disabled": false, + "chainId": "97da7ede98d7bad4e36b4d734b6055425a3be036da2a332ea5a7037656427a21", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2026", + "name": "Nodle Parachain", + "ecosystem": "substrate", + "assets": [ + { + "id": "e0e1107-e323-43aa-bb93-d7618d2c8cf5", + "name": "nodle network", + "symbol": "nodl", + "precision": 11, + "priceId": "nodle-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NODL.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-nodle.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/nodle.svg", + "addressPrefix": 37 + }, + { + "disabled": false, + "chainId": "bf88efe70e9e0e916416e8bed61f2b45717f517d7f3523e33c7b001e5ffcbc72", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2032", + "name": "Interlay", + "ecosystem": "substrate", + "assets": [ + { + "id": "7a77b6b0-f015-4ccc-a5bb-3456e17775dd", + "name": "interlay", + "symbol": "intr", + "precision": 10, + "priceId": "interlay", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", + "color": "FFFFFF", + "type": "ormlChain", + "isUtility": true + }, + { + "id": "2a45aeb9-f585-4f1b-9558-ee3aa186a809", + "type": "ormlChain", + "currencyId": "DOT", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066" + }, + { + "id": "fdb17d7c-ca72-4ed7-9fc8-728aa366c843", + "type": "ormlChain", + "name": "inter ibtc", + "symbol": "ibtc", + "precision": 8, + "priceId": "interbtc", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", + "color": "F2AE7F" + } + ], + "nodes": [ + { + "url": "wss://api-interlay.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://api.interlay.io/parachain", + "name": "Kintsugi Labs node" + }, + { + "url": "wss://rpc-interlay.luckyfriday.io", + "name": "LuckyFriday node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/interlay.svg", + "addressPrefix": 2032 + }, + { + "disabled": false, + "chainId": "da5831fbc8570e3c6336d0d72b8c08f8738beefec812df21ef2afc2982ede09c", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2106", + "name": "Litmus", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-litmus-api.squid.tachi.soramitsu.co.jp/graphql" + } }, - { - "disabled": false, - "chainId": "d4c0c08ca49dc7c680c3dac71a7c0703e5b222f4b6c03fe4c5219bb8f22c18dc", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "name": "Crust Shadow Parachain", - "paraId": "2012", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-crust_shadow_parachain" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://shadow.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "d1e3be8c-880e-46fe-97e3-761c0a58aed1", - "name": "crust shadow", - "symbol": "csm", - "precision": 12, - "priceId": "crust-storage-market", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CSM_Crust_Shadow.svg", - "color": "F3AD56", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc-shadow.crust.network", - "name": "Crust node" - } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/crustshadow.svg", - "addressPrefix": 66 + "assets": [ + { + "id": "15076759-6a5b-4cd6-b84c-e64842f094e5", + "name": "litentry", + "symbol": "lit", + "precision": 18, + "priceId": "litentry", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LIT_KSM.svg", + "color": "6530F0", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc.litmus-parachain.litentry.io", + "name": "Litentry node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/litmus.svg", + "addressPrefix": 131 + }, + { + "disabled": false, + "chainId": "3920bcb4960a1eef5580cd5367ff3f430eef052774f78468852f7b9cb39f8a3c", + "name": "Polkadex Main Network", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-polkadex-api.squid.tachi.soramitsu.co.jp/graphql" + } }, - { - "disabled": true, - "chainId": "6e938c4a786f8df6f38d0c06f00a8573f1f7aabeebf48aee5157a93cc5fe3271", - "name": "Kusama (test)", - "assets": [{ - "id": "03561957-3383-4f9f-8033-1b2c36d88db6", - "name": "kusama", - "symbol": "unit", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "staking": "relaychain", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://ws.relaychain-node-1.k1.tst.fearless.soramitsu.co.jp", - "name": "SORA Kusama Test node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kusama.svg", - "addressPrefix": 2, - "options": [ - "poolStaking" - ] + "assets": [ + { + "id": "5502c9cb-14f7-4de8-a35d-71263dc3f78f", + "name": "polkadex", + "symbol": "pdex", + "precision": 12, + "priceId": "polkadex", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PDEX.svg", + "color": "D32D79", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://mainnet.polkadex.trade", + "name": "Polkadex Team node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/polkadex.svg", + "addressPrefix": 88 + }, + { + "disabled": true, + "chainId": "577d331ca43646f547cdaa07ad0aa387a383a93416764480665103081f3eaf14", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2115", + "name": "Dorafactory Network", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/Dora-Factory-x-Fearless-Wallet" + } }, - { - "disabled": true, - "chainId": "fd4d46e9a51e16babf791b94d6dbf771ed1d7de8a11b310aa98c847890fa9ff3", - "name": "Polkadot (test)", - "assets": [{ - "id": "405e7e40-a2f1-45a3-a32f-7f271b2819d2", - "name": "polkadot", - "symbol": "unit", - "precision": 10, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "staking": "relaychain", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://ws.relaychain-node-2.p1.tst.fearless.soramitsu.co.jp/", - "name": "SORA Polkadot Test node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polkadot.svg", - "addressPrefix": 2, - "options": [ - "poolStaking" - ] + "assets": [ + { + "id": "c0d1efac-597d-4c56-b5ad-b683b8214ada", + "name": "dora factory", + "symbol": "dora", + "precision": 12, + "priceId": "dora-factory", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DORA.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kusama.dorafactory.org", + "name": "DORA node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/DoraFactory.svg", + "addressPrefix": 128 + }, + { + "disabled": false, + "chainId": "e7e0962324a3b86c83404dbea483f25fb5dab4c224791c81b756cfc948006174", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2043", + "name": "NeuroWeb Parachain", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-origintrail-api.squid.tachi.soramitsu.co.jp/graphql" + } }, - { - "disabled": true, - "chainId": "b34f6cd03a41f0fab38ba9fd5b11cce5f303633c46f39f0c6fdc7c3c602bafa9", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "name": "Snow Kusama", - "assets": [{ - "id": "e739d665-7af5-4e65-ab5f-93f54a5b70b3", - "name": "snow", - "symbol": "icz", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ICZ.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://snow-rpc.icenetwork.io", - "name": "Snow node" - } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SNOW.svg", - "addressPrefix": 2207 + "assets": [ + { + "id": "af5bf9f0-0009-4cf8-98ed-b988268c94f1", + "name": "neuro", + "symbol": "neuro", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Neuroweb.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-neuroweb.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://parachain-rpc.origin-trail.network", + "name": "TraceLabs node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Neuroweb.svg", + "addressPrefix": 101 + }, + { + "disabled": false, + "chainId": "84322d9cddbf35088f1e54e9a85c967a41a56a4f43445768125e61af166c7d31", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2037", + "name": "UNIQUE", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/Unique-x-Fearless-Wallet" + } }, - { - "disabled": false, - "chainId": "3266816be9fa51b32cfea58d3e33ca77246bc9618595a4300e44c8856a8d8a17", - "rank": 100, - "name": "SORA test", - "externalApi": { - "history": { - "type": "sora", - "url": "https://api.subquery.network/sq/sora-xor/sora-staging" - }, - "staking": { - "type": "sora", - "url": "https://squid.subsquid.io/sora-stage/v/v5/graphql" - }, - "pricing": { - "type": "sora", - "url": "https://api.subquery.network/sq/sora-xor/sora-test" - } - }, - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b1", - "symbol": "ROC" - } - ], - "availableDestinations": [ - { - "chainId": "6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e", - "assets": [ - { - "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b1", - "symbol": "ROC" - } - ] - } - ] - }, - "assets": [{ - "id": "b5a44630-920e-43ee-809f-61890d0888b0", - "name": "sora", - "symbol": "xor", - "currencyId": "0x0200000000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", - "color": "EE2233", - "isUtility": true, - "type": "soraAsset", - "staking": "relaychain", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200000000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "0ecacd48-ffd4-4a2e-87e3-c5f72f9a9877", - "name": "sora validator", - "symbol": "val", - "currencyId": "0x0200040000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora-validator-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VAL.svg", - "color": "F3B966", - "type": "soraAsset", - "isNative": true - }, - { - "id": "87ba5538-34db-4d53-9104-25f42b0bb55b", - "name": "polkaswap", - "symbol": "pswap", - "currencyId": "0x0200050000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "polkaswap", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PSWAP.svg", - "color": "FF0066", - "type": "soraAsset", - "isNative": true - }, - { - "id": "038a7045-af00-466d-b72b-95485c4674b7", - "name": "sora synthetics", - "symbol": "xst", - "currencyId": "0x0200090000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora-synthetics", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XST.svg", - "color": "EE2233", - "type": "soraAsset", - "isNative": true - }, - { - "id": "c96e012c-0786-4980-9750-bae61de0aa19", - "name": "sora synthetic usd", - "symbol": "xstusd", - "currencyId": "0x0200080000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora-synthetic-usd", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XSTUSD.svg", - "color": "EE2233", - "type": "soraAsset", - "isNative": true - }, - { - "id": "7bcc178d-1ebe-46b8-88fb-79649828f21d", - "name": "demeter", - "symbol": "deo", - "currencyId": "0x00f2f4fda40a4bf1fc3769d156fa695532eec31e265d75068524462c0b80f674", - "precision": 18, - "priceId": "demeter", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DEO.svg", - "color": "54B198", - "type": "soraAsset", - "isNative": true - }, - { - "id": "79ba9571-6ea4-4790-8fda-d20ddbad4f33", - "name": "ceres", - "symbol": "ceres", - "currencyId": "0x008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440", - "precision": 18, - "priceId": "ceres", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CERES.svg", - "color": "243579", - "type": "soraAsset", - "isNative": true - }, - { - "id": "38eae54b-723d-457c-8d45-4beab249612f", - "name": "noir token", - "symbol": "noir", - "currencyId": "0x0044aee0776cfb826434af8ef0f8e2c7e9e6644cfda0ae0f02c471b1eebc2483", - "precision": 18, - "priceId": "noir-phygital", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NOIR.svg", - "color": "A0A7FF", - "type": "soraAsset", - "isNative": true - }, - { - "id": "2565e418-d5bc-4318-99b5-53e893681518", - "name": "umitoken", - "symbol": "umi", - "currencyId": "0x003252667a82d2dd70fa046eea663eaec1f2e37c20879f113b880b04c5ebd805", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UMI.svg", - "color": "3C7EB2", - "type": "soraAsset", - "isNative": true - }, - { - "id": "9b040bf8-a852-4e10-aa14-d3793db27a95", - "name": "tether usd", - "symbol": "usdt", - "currencyId": "0x0083a6b3fbc6edae06f115c8953ddd7cbfba0b74579d6ea190f96853073b76f4", - "precision": 18, - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "type": "soraAsset" - }, - { - "id": "1b20dfcd-a40d-4850-a407-5a45f3bf4889", - "name": "binance usd", - "symbol": "busd", - "currencyId": "0x00567d096a736f33bf78cad7b01e33463923b9c933ee13ab7e3fb7b23f5f953a", - "precision": 18, - "priceId": "binance-usd", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", - "color": "F3BA2F", - "type": "soraAsset" - }, - { - "id": "5c017385-e702-47d2-8f3a-ac8146c2b9dd", - "name": "usd coin", - "symbol": "usdc", - "currencyId": "0x00ef6658f79d8b560f77b7b20a5d7822f5bc22539c7b4056128258e5829da517", - "precision": 18, - "priceId": "usd-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4", - "type": "soraAsset" - }, - { - "id": "db07f99c-0c76-483a-891f-86fbd028fdc5", - "name": "bokolo cash", - "symbol": "BCSI", - "currencyId": "0x00eacaea6599a04358fda986388ef0bb0c17a553ec819d5de2900c0af0862502", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BCSD.svg", - "color": "FFFFFF", - "type": "soraAsset" - }, - { - "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b1", - "name": "rococo", - "symbol": "roc", - "precision": 18, - "currencyId": "0x00dc9b4341fde46c9ac80b623d0d43afd9ac205baabdc087cadaa06f92b309c7", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "type": "soraAsset" - }, - { - "id": "ada3b18e-1912-4f96-ad3b-4d0e1b1d1d0a", - "symbol": "tbcd", - "name": "sora tbc dollar", - "currencyId": "0x02000a0000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/TBCD.svg", - "color":"6D8954", - "type": "soraAsset", - "isNative": true - }, - { - "id": "eface91d-b2a8-49d2-88e8-640586bda477", - "name": "polkadot", - "symbol": "dot", - "currencyId": "0x0003b1dbee890acfb1b3bc12d1bb3b4295f52755423f84d1751b2545cebf000b", - "precision": 18, - "priceId": "polkadot", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "type": "soraAsset" - }, - { - "id": "191c31de-62b1-41e4-aad3-15a5be1b4cd4", - "name": "dai", - "symbol": "dai", - "currencyId": "0x0200060000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "F9AF1A", - "type": "soraAsset" - }, - { - "id": "3ab2c884-6c6e-4f92-b87a-a013c80210af", - "name": "ethereum", - "symbol": "eth", - "currencyId": "0x0200070000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "627EEA", - "type": "soraAsset" - } - - ], - "nodes": [ - { - "url": "wss://ws.framenode-8.s5.stg1.sora2.soramitsu.co.jp", - "name": "Sora Stage #8" - }, - { - "url": "wss://ws.framenode-1.r0.dev.sora2.soramitsu.co.jp", - "name": "Sora Card Test Node #1" - }, - { - "url": "wss://ws.framenode-2.r0.dev.sora2.soramitsu.co.jp", - "name": "Sora Card Test Node #2" - }, - { - "url": "wss://ws.framenode-3.r0.dev.sora2.soramitsu.co.jp", - "name": "Sora Card Test Node #3" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", - "addressPrefix": 69, - "options": [ - "testnet", - "polkaswap" - ] - }, - { - "disabled": false, - "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", - "rank": 0, - "name": "SORA Mainnet", - "externalApi": { - "history": { - "type": "sora", - "url": "https://squid.subsquid.io/sora/v/v5/graphql" - }, - "staking": { - "type" : "sora", - "url": "https://squid.subsquid.io/sora/v/v5/graphql" - }, - "pricing": { - "type": "sora", - "url": "https://api.subquery.network/sq/sora-xor/sora-prod" - }, - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://sora.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "b774c386-5cce-454a-a845-1ec0381538ec", - "name": "sora", - "symbol": "xor", - "currencyId": "0x0200000000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", - "color": "EE2233", - "isUtility": true, - "type": "soraAsset", - "staking": "relaychain", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200000000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "24d0809e-0a4c-42ea-bdd8-dc7a518f389c", - "name": "sora validator", - "symbol": "val", - "currencyId": "0x0200040000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora-validator-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VAL.svg", - "color": "F3B966", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200040000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "37a999a2-5e90-4448-8b0e-98d06ac8f9d4", - "name": "polkaswap", - "symbol": "pswap", - "currencyId": "0x0200050000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "polkaswap", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PSWAP.svg", - "color": "FF0066", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200050000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "75a0bc9b-a1fb-446e-8781-621036bfd979", - "name": "sora synthetics", - "symbol": "xst", - "currencyId": "0x0200090000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora-synthetics", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XST.svg", - "color": "EE2233", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200090000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "217925d8-c529-4480-98e5-b8bf651129ef", - "name": "sora synthetic usd", - "symbol": "xstusd", - "currencyId": "0x0200080000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora-synthetic-usd", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XSTUSD.svg", - "color": "EE2233", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200080000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "5e3de486-789e-4e47-8f49-870852cfebb6", - "name": "demeter", - "symbol": "deo", - "currencyId": "0x00f2f4fda40a4bf1fc3769d156fa695532eec31e265d75068524462c0b80f674", - "precision": 18, - "priceId": "demeter", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DEO.svg", - "color": "54B198", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x00f2f4fda40a4bf1fc3769d156fa695532eec31e265d75068524462c0b80f674" - } - }, - { - "id": "8fe0cbf4-7ece-45f6-968b-5c1b77accff0", - "name": "ceres", - "symbol": "ceres", - "currencyId": "0x008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440", - "precision": 18, - "priceId": "ceres", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CERES.svg", - "color": "243579", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440" - } - }, - { - "id": "079f2a74-1440-440c-b826-6d85a7dd3a91", - "name": "noir token", - "symbol": "noir", - "currencyId": "0x0044aee0776cfb826434af8ef0f8e2c7e9e6644cfda0ae0f02c471b1eebc2483", - "precision": 18, - "priceId": "noir-phygital", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NOIR.svg", - "color": "A0A7FF", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x0044aee0776cfb826434af8ef0f8e2c7e9e6644cfda0ae0f02c471b1eebc2483" - } - }, - { - "id": "2de2b668-33cd-4e85-a501-4921481e618f", - "name": "umitoken", - "symbol": "umi", - "currencyId": "0x003252667a82d2dd70fa046eea663eaec1f2e37c20879f113b880b04c5ebd805", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UMI.svg", - "color": "3C7EB2", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x003252667a82d2dd70fa046eea663eaec1f2e37c20879f113b880b04c5ebd805" - } - }, - { - "id": "4c7b8da9-b297-4093-b8bc-28d477e7b5ad", - "name": "tether usd", - "symbol": "usdt", - "currencyId": "0x0083a6b3fbc6edae06f115c8953ddd7cbfba0b74579d6ea190f96853073b76f4", - "precision": 18, - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0083a6b3fbc6edae06f115c8953ddd7cbfba0b74579d6ea190f96853073b76f4" - } - }, - { - "id": "23c41bbb-2e1a-4d64-bbab-5080975ecc1c", - "name": "binance usd", - "symbol": "busd", - "currencyId": "0x00567d096a736f33bf78cad7b01e33463923b9c933ee13ab7e3fb7b23f5f953a", - "precision": 18, - "priceId": "binance-usd", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", - "color": "F3BA2F", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00567d096a736f33bf78cad7b01e33463923b9c933ee13ab7e3fb7b23f5f953a" - } - }, - { - "id": "c8ce20ed-8690-4b46-9b3d-872e325ae636", - "name": "usd coin", - "symbol": "usdc", - "currencyId": "0x00ef6658f79d8b560f77b7b20a5d7822f5bc22539c7b4056128258e5829da517", - "precision": 18, - "priceId": "usd-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00ef6658f79d8b560f77b7b20a5d7822f5bc22539c7b4056128258e5829da517" - } - }, - { - "id": "1e6f8ba3-5aeb-41d8-b80e-a44ce0f33716", - "name": "dai", - "symbol": "dai", - "currencyId": "0x0200060000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "F9AF1A", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200060000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "82f45df3-b6d8-43e7-a440-c0e73ab59785", - "name": "ethereum", - "symbol": "eth", - "currencyId": "0x0200070000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "627EEA", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200070000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "94e573f3-a9f3-4f7e-9244-8492288ca558", - "name": "soshiba", - "symbol": "soshiba", - "currencyId": "0x005aa73d7a4a3fdbe830c7d0ee26c09ba7f1db119da86d5b4dcb6609dac5ceb5", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/SHIB.svg", - "color": "FFA409", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x005aa73d7a4a3fdbe830c7d0ee26c09ba7f1db119da86d5b4dcb6609dac5ceb5" - } - }, - { - "id": "68a46965-94e8-4a03-af65-6237f83d482f", - "symbol": "tbcd", - "name": "sora tbc dollar", - "currencyId": "0x02000a0000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/TBCD.svg", - "color":"6D8954", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x02000a0000000000000000000000000000000000000000000000000000000000" - } - }, - { - "id": "61f864b5-9fe0-4ba5-b5b6-c338ceaeee91", - "name": "hermes dao", - "symbol": "hmx", - "currencyId": "0x002d4e9e03f192cc33b128319a049f353db98fbf4d98f717fd0b7f66a0462142", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/HMX.svg", - "color":"FFFFFF", - "type": "soraAsset", - "isNative": true, - "priceProvider": { - "type": "sorasubquery", - "id": "0x002d4e9e03f192cc33b128319a049f353db98fbf4d98f717fd0b7f66a0462142" - } - }, - { - "id": "a13169a1-32fa-4b44-aecb-c404c5f3cdbc", - "name": "bokolo cash", - "symbol": "BCSI", - "currencyId": "0x00eacaea6599a04358fda986388ef0bb0c17a553ec819d5de2900c0af0862502", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BCSD.svg", - "color": "FFFFFF", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00eacaea6599a04358fda986388ef0bb0c17a553ec819d5de2900c0af0862502" - } - }, - { - "id": "5416b261-a759-4ba6-bc83-ea79a83c5101", - "name": "kusama", - "symbol": "ksm", - "currencyId": "0x00117b0fa73c4672e03a7d9d774e3b3f91beb893e93d9a8d0430295f44225db8", - "precision": 18, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00117b0fa73c4672e03a7d9d774e3b3f91beb893e93d9a8d0430295f44225db8" - } - }, - { - "id": "cd092a5a-4eb6-4318-9f11-4bf8454d67a2", - "name": "polkadot", - "symbol": "dot", - "currencyId": "0x0003b1dbee890acfb1b3bc12d1bb3b4295f52755423f84d1751b2545cebf000b", - "precision": 18, - "priceId": "polkadot-sora", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", - "color": "FF0066", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0003b1dbee890acfb1b3bc12d1bb3b4295f52755423f84d1751b2545cebf000b" - } - }, - { - "id": "fb88fa55-b8c8-4ff1-afa8-f72a86a238a4", - "name": "acala", - "symbol": "aca", - "currencyId": "0x001ddbe1a880031da72f7ea421260bec635fa7d1aa72593d5412795408b6b2ba", - "precision": 18, - "priceId": "acala", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", - "color": "FFFFFF", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x001ddbe1a880031da72f7ea421260bec635fa7d1aa72593d5412795408b6b2ba" - } - }, - { - "id": "acc32ee0-8fdc-4743-91e1-f70cc4f3069b", - "name": "astar", - "symbol": "astr", - "currencyId": "0x009dd037fcb32f4fe17c513abd4641a2ece844d106e30788124f0c0acc6e748e", - "precision": 18, - "priceId": "astar", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", - "color": "0AE2FF", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x009dd037fcb32f4fe17c513abd4641a2ece844d106e30788124f0c0acc6e748e" - } - }, - { - "id": "0ef3afdc-cdd3-47cc-bd52-817c54ae65b5", - "name": "liberland merit", - "symbol": "llm", - "currencyId": "0x00073edd278e1bd6a7f9d0b27d4f3e93b73c8f0832b58a4df13c69611a99f156", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLM.svg", - "color": "EFB900", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00073edd278e1bd6a7f9d0b27d4f3e93b73c8f0832b58a4df13c69611a99f156" - } - }, - { - "id": "1c3b4fcb-5a5f-4319-9dce-d178006eb9bf", - "name": "liberland dollar", - "symbol": "lld", - "currencyId": "0x00513be65493a7fc3e2128d4230061a530acf40478a4affa20bbba27a310673e", - "precision": 18, - "priceId": "liberland-lld", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLD.svg", - "color": "00437F", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00513be65493a7fc3e2128d4230061a530acf40478a4affa20bbba27a310673e" - } - }, - { - "id": "a543b9a2-f85a-4974-92fc-435d6bc418e5", - "name": "toncoin", - "symbol": "toncoin", - "currencyId": "0x00e8c8923623335128807857dfa38f9212e9803394a2c976e97245d7063bbe10", - "precision": 18, - "priceId": "the-open-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg", - "color": "0098EA", - "type": "soraAsset", - "priceProvider": { - "type": "sorasubquery", - "id": "0x00e8c8923623335128807857dfa38f9212e9803394a2c976e97245d7063bbe10" - } - } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "5416b261-a759-4ba6-bc83-ea79a83c5101", - "symbol": "KSM" - }, - { - "id": "cd092a5a-4eb6-4318-9f11-4bf8454d67a2", - "symbol": "DOT" - }, - { - "id": "fb88fa55-b8c8-4ff1-afa8-f72a86a238a4", - "symbol": "ACA" - }, - { - "id": "a6b83d39-a488-4b34-8352-280705a792ea", - "symbol": "LLD" - }, - { - "id": "b774c386-5cce-454a-a845-1ec0381538ec", - "symbol": "XOR" - }, - { - "id": "0ef3afdc-cdd3-47cc-bd52-817c54ae65b5", - "symbol": "LLM" - }, - { - "id": "acc32ee0-8fdc-4743-91e1-f70cc4f3069b", - "symbol": "ASTAR" - } - ], - "availableDestinations": [ - { - "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "assets": [ - { - "id": "5416b261-a759-4ba6-bc83-ea79a83c5101", - "symbol": "KSM" - } - ] - }, - { - "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "assets": [ - { - "id": "cd092a5a-4eb6-4318-9f11-4bf8454d67a2", - "symbol": "DOT", - "minAmount": "1100000000000000000" - } - ] - }, - { - "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", - "assets": [ - { - "id": "fb88fa55-b8c8-4ff1-afa8-f72a86a238a4", - "symbol": "ACA", - "minAmount": "1000000000000000000" - } - ] - }, - { - "chainId": "6bd89e052d67a45bb60a9a23e8581053d5e0d619f15cb9865946937e690c42d6", - "assets": [ - { - "id": "a6b83d39-a488-4b34-8352-280705a792ea", - "symbol": "LLD", - "minAmount": "1000000000000000000" - }, - { - "id": "b774c386-5cce-454a-a845-1ec0381538ec", - "symbol": "XOR" - }, - { - "id": "0ef3afdc-cdd3-47cc-bd52-817c54ae65b5", - "symbol": "LLM" - } - ] - }, - { - "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", - "assets": [ - { - "id": "acc32ee0-8fdc-4743-91e1-f70cc4f3069b", - "symbol": "ASTAR" - } - ] - } - ] - }, - "nodes": [{ - "url": "wss://ws.mof.sora.org", - "name": "SORA Parliament Ministry of Finance Node" - }, - { - "url": "wss://mof2.sora.org", - "name": "SORA Parliament Ministry of Finance Node" - }, - { - "url": "wss://mof3.sora.org", - "name": "SORA Parliament Ministry of Finance Node" - }, - { - "url": "wss://sora.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", - "addressPrefix": 69, - "options": [ - "polkaswap", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "70255b4d28de0fc4e1a193d7e175ad1ccef431598211c55538f1018651a0344e", - "name": "Aleph Zero", - "assets": [{ - "id": "4ea52d6e-a433-4f11-a811-4634068c79a2", - "name": "aleph zero", - "symbol": "azero", - "precision": 12, - "priceId": "aleph-zero", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AZERO.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://ws.azero.dev", - "name": "Aleph Zero Foundation node" + "assets": [ + { + "id": "57d05537-06a2-453b-ac87-d081aee65ec9", + "name": "unique network", + "symbol": "unq", + "precision": 18, + "priceId": "unique-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UNQ.svg", + "color": "65BAF9", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-unique.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://ws.unique.network", + "name": "Geo Load Balancer node" + }, + { + "url": "wss://eu-ws.unique.network", + "name": "Unique Europe node" + }, + { + "url": "wss://asia-ws.unique.network", + "name": "Unique Asia node" + }, + { + "url": "wss://us-ws.unique.network", + "name": "Unique America node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/unique.svg", + "addressPrefix": 7391 + }, + { + "disabled": false, + "chainId": "262e1b2ad728475fd6fe88e62d34c200abe6fd693931ddad144059b1eb884e5b", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2030", + "name": "Bifrost Polkadot", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-bifrostpolkadot-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://bifrost.subscan.io/{type}/{value}" } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/white/Aleph%20Zero.svg", - "addressPrefix": 42 - }, - { - "disabled": false, - "chainId": "00dcb981df86429de8bbacf9803401f09485366c44efbf53af9ecfab03adc7e5", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "1002", - "name": "Kusama BridgeHub", - "assets": [{ - "id": "f0f8e709-20f3-44e6-a6c3-89e9e82f78ed", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://kusama-bridge-hub-rpc.polkadot.io", - "name": "Parity node" - }, - { - "url": "wss://sys.ibp.network/bridgehub-kusama", - "name": "IBP-GeoDNS1 node" - }, - { - "url": "wss://sys.dotters.network/bridgehub-kusama", - "name": "IBP-GeoDNS2 node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bridgehub.svg", - "addressPrefix": 2 + ] }, - { - "disabled": false, - "chainId": "6f0f071506de39058fe9a95bbca983ac0e9c5da3443909574e95d52eb078d348", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2222", - "name": "Ipci", - "assets": [{ - "id": "b20185e9-2f5c-4c3d-bd5a-c751cd76d439", - "name": "dao ipci", - "symbol": "mito", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MITO.svg", - "color": "0BF0A6", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://kusama.rpc.ipci.io", - "name": "Airalab node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/DAOIPCI.svg", - "addressPrefix": 32 - }, - { - "disabled": false, - "chainId": "cdedc8eadbfa209d3f207bba541e57c3c58a667b05a2e1d1e86353c9000758da", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2015", - "name": "Integritee Network (Kusama)", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://integritee.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "c8b67e07-8b3b-4b92-b23d-23b5bb1f8f42", - "name": "integritee", - "symbol": "teer", - "precision": 12, - "priceId": "integritee", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TEER.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://kusama.api.integritee.network", - "name": "Integritee node" - }, - { - "url": "wss://integritee-kusama.api.onfinality.io/public-ws?apikey=313214ec-15ef-4834-a896-1cf39911f94b", - "name": "OnFinality node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/integritee.svg", - "addressPrefix": 13 - }, - { - "disabled": false, - "chainId": "2991d4125ac465d64c4c0b915fedd7168b5961b7676480636e3747f1ad64cfb9", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2236", - "name": "Subzero", - "assets": [{ - "id": "3a1cc15e-903b-4102-9384-364c00e67283", - "name": "zero", - "symbol": "zero", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZERO.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc-1.kusama.node.zero.io", - "name": "ZeroNetwork node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Subzero.svg", - "addressPrefix": 25 - }, - { - "disabled": false, - "chainId": "e358eb1d11b31255a286c12e44fe6780b7edb171d657905a97e39f71d9c6c3ee", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2051", - "name": "Ajuna Polkadot", - "assets": [{ - "id": "b0afcb19-5d4c-442c-ac0f-53c64b1ea0ae", - "name": "ajuna network", - "symbol": "ajun", - "precision": 12, - "priceId": "ajuna-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BAJU.svg", - "color": "69A6DA", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc-parachain.ajuna.network", - "name": "AjunaNetwork node" - }, - { - "url": "wss://ajuna.public.curie.radiumblock.co/ws", - "name": "RadiumBlock node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bajun.svg", - "addressPrefix": 1328 + "assets": [ + { + "id": "dc9e23e8-f4bf-4864-9f2c-c2fbd4b03886", + "name": "bifrost native coin", + "symbol": "bnc", + "precision": 12, + "priceId": "bifrost-native-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + }, + { + "id": "fd62d09e-cfae-44f8-81a0-bf99732643fc", + "type": "token2", + "currencyId": "0", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066" + }, + { + "id": "9ff3dbb1-5986-44b9-b247-db82ae3584a1", + "type": "token2", + "currencyId": "1", + "name": "moonbeam", + "symbol": "glmr", + "precision": 18, + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF" + }, + { + "id": "8dc39b21-04c9-4d1d-b9ec-8ea111052e77", + "type": "token2", + "currencyId": "2", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + } + ], + "nodes": [ + { + "url": "wss://api-bifrost-polkadot.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://hk.p.bifrost-rpc.liebi.com/ws", + "name": "Liebi node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bifrost.svg", + "addressPrefix": 6 + }, + { + "disabled": false, + "chainId": "2fc8bb6ed7c0051bdcf4866c322ed32b6276572713607e3297ccf411b8f14aa9", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2013", + "name": "Litentry", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-litentry-api.squid.tachi.soramitsu.co.jp/graphql" + } }, - { - "disabled": false, - "chainId": "c14597baeccb232d662770d2d50ae832ca8c3192693d2b0814e6433f2888ddd6", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2048", - "name": "Bitgreen", - "assets": [{ - "id": "26c62511-6300-41ef-b760-c94dd6b0f8a5", - "name": "bitgreen", - "symbol": "bbb", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BBB.svg", - "color": "C0FF00", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://mainnet.bitgreen.org", - "name": "Bitgreen node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bitgreen.svg", - "addressPrefix": 42 + "assets": [ + { + "id": "10de552c-20cb-4a86-9bf8-cf5827ca2f71", + "name": "litentry", + "symbol": "lit", + "precision": 18, + "priceId": "litentry", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LIT_DOT.svg", + "color": "02C86A", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-litentry.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.litentry-parachain.litentry.io", + "name": "Litentry node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Litentry.svg", + "addressPrefix": 31 + }, + { + "disabled": false, + "chainId": "1bb969d85965e4bb5a651abbedf21a54b6b31a21f66b5401cc3f1e286268d736", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2035", + "name": "Phala", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-phala-api.squid.tachi.soramitsu.co.jp/graphql" + } }, - { - "disabled": false, - "chainId": "4319cc49ee79495b57a1fec4d2bd43f59052dcc690276de566c2691d6df4f7b8", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2008", - "name": "Crust", - "assets": [{ - "id": "07ad91ea-1cb6-47dd-bc57-0e884727c5bf", - "name": "crust network", - "symbol": "cru", - "precision": 12, - "priceId": "crust-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRU.svg", - "color": "FA8C16", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://crust-parachain.crustapps.net", - "name": "Crust node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Crust.svg", - "addressPrefix": 88 + "assets": [ + { + "id": "50add3d2-baa6-4bf3-9995-e6532ad51726", + "name": "phala", + "symbol": "pha", + "precision": 12, + "priceId": "pha", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PHA.svg", + "color": "DAFE6F", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-phala.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://api.phala.network/ws", + "name": "Phala node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/phala.svg", + "addressPrefix": 30 + }, + { + "disabled": false, + "chainId": "daab8df776eb52ec604a5df5d388bb62a050a0aaec4556a64265b9d42755552d", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2019", + "name": "Composable Finance", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-composable-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://composable.subscan.io/{type}/{value}" + } + ] }, - { - "disabled": false, - "chainId": "4a587bf17a404e3572747add7aab7bbe56e805a5479c6c436f07f36fcc8d3ae1", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2091", - "name": "Frequency", - "assets": [{ - "id": "598af8e7-c0ad-4785-80cf-669705c93dd9", - "name": "frequency", - "symbol": "frqcy", - "precision": 8, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/FRQCY.svg", - "color": "4473EC", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://0.rpc.frequency.xyz", - "name": "Frequency 0 node" - }, - { - "url": "wss://1.rpc.frequency.xyz", - "name": "Frequency 1 node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Frequency.svg", - "addressPrefix": 90 + "assets": [ + { + "id": "7f429a3f-4666-40a2-a506-58bfe01504c4", + "name": "composable finance", + "symbol": "layr", + "precision": 12, + "priceId": "composable-finance-layr", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LAYR.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-composable.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.composable.finance", + "name": "Composable node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/composable.svg", + "addressPrefix": 49 + }, + { + "disabled": false, + "chainId": "35a06bfec2edf0ff4be89a6428ccd9ff5bd0167d618c5a0d4341f9600a458d14", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2119", + "name": "Bajun Kusama", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-bajun-api.squid.tachi.soramitsu.co.jp/graphql" + } }, - { - "disabled": false, - "chainId": "7838c3c774e887c0a53bcba9e64f702361a1a852d5550b86b58cd73827fa1e1e", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2007", - "name": "Kapex", - "assets": [{ - "id": "a99dd750-0c15-49df-a86f-6caa577614bc", - "name": "kapex parachain", - "symbol": "kpx", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KPX.svg", - "color": "306EB6", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://kapex-rpc.dwellir.com", - "name": "Dwellir node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kapex%20(Totem).svg", - "addressPrefix": 2007 + "assets": [ + { + "id": "cbf84703-ba1d-4a39-ab5e-424756c91422", + "name": "bajun network", + "symbol": "baju", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BAJU.svg", + "color": "69A6DA", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc-parachain.bajun.network", + "name": "AjunaNetwork node" + }, + { + "url": "wss://bajun.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bajun.svg", + "addressPrefix": 1337 + }, + { + "disabled": false, + "chainId": "feb426ca713f0f46c96465b8f039890370cf6bfd687c9076ea2843f58a6ae8a7", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2113", + "name": "Kabocha", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-kabocha-api.squid.tachi.soramitsu.co.jp/graphql" + } }, - { - "disabled": false, - "chainId": "5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "rank": 10, - "paraId": "2094", - "name": "Pendulum", - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-pendulum/graphql" - } - }, - "assets": [ - { - "id": "ebf2822f-2dd4-4f59-aeb3-ae7defa53932", - "name": "pendulum", - "symbol": "pen", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PEN.svg", - "color": "8D809E", - "isUtility": true, - "type": "normal" - }, - { - "id": "bc55b3f0-2b34-4561-aeb6-bd4ca9c88b7e", - "type": "xcm", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "currencyId": "1", - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "existentialDeposit": "10000" - } - ], - "nodes": [{ - "url": "wss://rpc-pendulum.prd.pendulumchain.tech", - "name": "PendulumChain node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Pendulum.svg", - "addressPrefix": 56, - "options": [ - "utilityFeePayment" - ] + "assets": [ + { + "id": "898eb0a1-ede6-437a-97b7-e92407db985f", + "name": "kabocha", + "symbol": "kab", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAB.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kabocha.jelliedowl.com", + "name": "JelliedOwl node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kabocha.svg", + "addressPrefix": 27 + }, + { + "disabled": true, + "chainId": "52149c30c1eb11460dce6c08b73df8d53bb93b4a15d0a2e7fd5dafe86a73c0da", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2107", + "name": "KICO", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/KICO-x-Fearless-Wallet" + } }, - { - "disabled": false, - "chainId": "6859c81ca95ef624c9dfe4dc6e3381c33e5d6509e35e147092bfbc780f777c4e", - "name": "Ternoa Mainnet", - "assets": [{ - "id": "2e447cea-6fe1-4b08-8a97-94cc2ee622a6", - "name": "ternoa", - "symbol": "caps", - "precision": 18, - "priceId": "coin-capsule", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CAPS.svg", - "color": "FF002B", - "isUtility": true, - "type": "normal", - "staking": "relaychain" - }], - "externalApi": { - "history": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-ternoa/graphql" - }, - "staking": { - "type": "giantsquid", - "url": "https://squid.subsquid.io/gs-main-ternoa/graphql" - } - }, - "nodes": [{ - "url": "wss://mainnet.ternoa.network", - "name": "CapsuleCorp node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Ternoa.svg", - "addressPrefix": 42 + "assets": [ + { + "id": "3a11badb-fe19-4cf4-9651-4b635a49bb7e", + "name": "kico", + "symbol": "kico", + "precision": 14, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KICO.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc.kico.dico.io", + "name": "DICO Foundation node" + }, + { + "url": "wss://rpc.api.kico.dico.io", + "name": "DICO Foundation 2 node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/KICO.svg", + "addressPrefix": 42 + }, + { + "disabled": true, + "chainId": "d611f22d291c5b7b69f1e105cca03352984c344c4421977efaa4cbdd1834e2aa", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2110", + "name": "Mangata Kusama Mainnet", + "ecosystem": "substrate", + "assets": [ + { + "id": "27ccf12f-3ae0-4c5e-b337-ee43b7c23928", + "name": "mangata x", + "symbol": "mgx", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MGX.svg", + "color": "10C5C5", + "isUtility": true, + "type": "normal" + }, + { + "id": "f63730eb-9fe2-41e9-9ec3-3cc4e6f02d0a", + "type": "ormlChain", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "4", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + }, + { + "id": "459f852b-665c-4743-8b2c-5bc5fc6abdda", + "type": "ormlChain", + "name": "bifrost native coin", + "symbol": "bnc", + "precision": 12, + "currencyId": "14", + "priceId": "bifrost-native-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", + "color": "FFFFFF" + }, + { + "id": "8ef9ca57-f2e4-4edb-9365-2805c7143537", + "type": "ormlChain", + "name": "voucher ksm", + "symbol": "vksm", + "precision": 12, + "currencyId": "15", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VKSM.svg", + "color": "FFFFFF" + }, + { + "id": "31aef057-d42a-419c-b0c4-cd61dc7e96c5", + "type": "ormlChain", + "name": "zenlink network", + "symbol": "zlk", + "precision": 18, + "currencyId": "26", + "priceId": "zenlink-network-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZLK.svg", + "color": "FFFFFF" + }, + { + "id": "3b46e22a-f819-4b2b-9dca-23dec1b66f82", + "type": "ormlChain", + "name": "rmrk", + "symbol": "rmrk", + "precision": 10, + "currencyId": "31", + "priceId": "rmrk", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RMRK.svg", + "color": "392B73" + }, + { + "id": "2c28b884-dcbe-4653-91d2-934beefe4f2c", + "type": "ormlChain", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "30", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B" + }, + { + "id": "a4268819-dd67-45ba-a8f4-32277e3817b1", + "type": "ormlChain", + "name": "turing token", + "symbol": "tur", + "precision": 10, + "currencyId": "7", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUR.svg", + "color": "5DCBD0" + } + ], + "nodes": [ + { + "url": "wss://prod-kusama-collator-01.mangatafinance.cloud", + "name": "Mangata node" + }, + { + "url": "wss://kusama-archive.mangata.online", + "name": "Mangata Archive node" + }, + { + "url": "wss://kusama-rpc.mangata.online", + "name": "Mangata RPC node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/MagnataX.svg", + "addressPrefix": 42 + }, + { + "disabled": true, + "chainId": "eacdd2d5b42de9769ccbb6e8d9013ab0d90ab105bf601d4aac53e874c145ec21", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2116", + "name": "DataHighway Tanganika", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/DataHighway-Tanganika-x-Fearless-Wallet" + } }, - { - "disabled": false, - "chainId": "6d8d9f145c2177fa83512492cdd80a71e29f22473f4a8943a6292149ac319fb9", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "paraId": "2011", - "name": "SORA Kusama parachain", - "assets": [{ - "id": "2df458e8-c4a9-4026-986f-8962a36fe604", - "name": "sora", - "symbol": "xor", - "precision": 12, - "priceId": "sora", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", - "color": "EE2233", - "isUtility": true, - "type": "normal", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200000000000000000000000000000000000000000000000000000000000000" - } - }], - "nodes": [{ - "url": "wss://ws.parachain-collator-1.c1.sora2.soramitsu.co.jp", - "name": "Soramitsu node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", - "addressPrefix": 420 + "assets": [ + { + "id": "15df9971-2e6a-4619-a5ca-9ad571655287", + "name": "datahighway", + "symbol": "dhx", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DHX.svg", + "color": "6C179F", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://tanganika.datahighway.com", + "name": "DataHighway node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/DataHighway.svg", + "addressPrefix": 33 + }, + { + "disabled": true, + "chainId": "89d3ec46d2fb43ef5a9713833373d5ea666b092fa8fd68fbc34596036571b907", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "name": "Equilibrium", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://equilibrium.subscan.io/{type}/{value}" + } + ] }, - { - "disabled": false, - "chainId": "e92d165ad41e41e215d09713788173aecfdbe34d3bed29409d33a2ef03980738", - "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", - "paraId": "2025", - "name": "SORA Polkadot parachain", - "assets": [{ - "id": "a7c696d7-42ce-4ed6-a036-4f0f76386c49", - "name": "sora", - "symbol": "xor", - "precision": 18, - "priceId": "sora", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", - "color": "EE2233", - "isUtility": true, - "type": "normal", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200000000000000000000000000000000000000000000000000000000000000" - } - }], - "nodes": [{ - "url": "wss://ws.parachain-collator-1.pc1.sora2.soramitsu.co.jp", - "name": "Soramitsu node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", - "addressPrefix": 81 + "assets": [ + { + "id": "47d1f5c5-c43d-4082-b577-ba0af91cb1a6", + "name": "equilibrium", + "symbol": "eq", + "currencyId": "25969", + "precision": 9, + "existentialDeposit": "1000000000", + "priceId": "equilibrium-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQ.svg", + "color": "5176E6", + "isUtility": true, + "type": "equilibrium" + }, + { + "id": "50bb6d02-1aad-4a94-b41c-2a15b4aee0e8", + "name": "equilibrium dollar protocol", + "symbol": "eqd", + "currencyId": "6648164", + "precision": 9, + "existentialDeposit": "1000000000", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/EQD.svg", + "color": "4D8BED", + "type": "equilibrium" + }, + { + "id": "6b21d130-7475-4f61-b893-799061fc05bf", + "name": "acala", + "symbol": "aca", + "currencyId": "6382433", + "precision": 9, + "priceId": "acala", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", + "color": "FFFFFF", + "type": "equilibrium" + }, + { + "id": "9c67711c-7f0c-45fa-b7fc-66b655ba17e1", + "name": "bnb", + "symbol": "bnb", + "currencyId": "6450786", + "precision": 9, + "priceId": "binancecoin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", + "color": "F3BA2F", + "type": "equilibrium" + }, + { + "id": "b62f4a0a-883f-496f-a797-fd2b24abe01b", + "name": "polkadot", + "symbol": "dot", + "currencyId": "6582132", + "precision": 9, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "type": "equilibrium" + }, + { + "id": "665c8d3d-a035-45fb-9c9c-7cfaf7da96c6", + "name": "astar", + "symbol": "astr", + "currencyId": "1634956402", + "precision": 9, + "priceId": "astar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", + "color": "0AE2FF", + "type": "equilibrium" + }, + { + "id": "c98efbda-a452-4329-8199-fef32dc9307e", + "name": "acala dollar", + "symbol": "ausd", + "currencyId": "1635087204", + "precision": 9, + "priceId": "acala-dollar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AUSD.svg", + "color": "E40C5B", + "type": "equilibrium" + }, + { + "id": "793fc038-c134-4d58-af6d-cb7c1be5a4ea", + "name": "binance usd", + "symbol": "busd", + "currencyId": "1651864420", + "precision": 9, + "priceId": "binance-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", + "color": "F3BA2F", + "type": "equilibrium" + }, + { + "id": "e8c17b03-a94c-4fd3-a599-189a1b5e8e32", + "name": "moonbeam", + "symbol": "glmr", + "currencyId": "1735159154", + "precision": 9, + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF", + "type": "equilibrium" + }, + { + "id": "a9d1b0b2-ad4e-4d86-88c5-72a8947099f0", + "name": "inter ibtc", + "symbol": "ibtc", + "currencyId": "1768060003", + "precision": 9, + "priceId": "interbtc", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/iBTC.svg", + "color": "F2AE7F", + "type": "equilibrium" + }, + { + "id": "502acf71-3c1f-4f1c-91d9-179fd2987a34", + "name": "interlay", + "symbol": "intr", + "currencyId": "1768846450", + "precision": 9, + "priceId": "interlay", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INTR.svg", + "color": "FFFFFF", + "type": "equilibrium" + }, + { + "id": "f67bfaf7-e081-4355-abda-4f1faaeb3579", + "name": "parallel finance", + "symbol": "para", + "currencyId": "1885434465", + "precision": 9, + "priceId": "parallel-finance", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PARA.svg", + "color": "4C19E7", + "type": "equilibrium" + }, + { + "id": "c1ad2bb4-701a-4711-bacb-59259ff3d57d", + "name": "tether usd", + "symbol": "usdt", + "currencyId": "1970496628", + "precision": 9, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "type": "equilibrium" + }, + { + "id": "26a16776-71c9-450d-bfaf-df3a8cd6d277", + "name": "fluid xdot", + "symbol": "xdot", + "currencyId": "2019848052", + "precision": 9, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "type": "equilibrium" + }, + { + "id": "1eb9d66e-a92d-49c5-95fc-fd7a844fc66d", + "name": "equilibrium dot", + "symbol": "eqdot", + "currencyId": "435694104436", + "precision": 9, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/eqDOT.svg", + "color": "FFFFFF", + "type": "equilibrium" + } + ], + "nodes": [ + { + "url": "wss://api-equilibrium.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/equilibrium.svg", + "addressPrefix": 68, + "options": [ + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "724c168d8e86b78b831c641e2cc822b8d1bf99fa0b4b28fe59985cd6fd580215", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2039", + "name": "Integritee Shell", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-integritee" + } }, - { - "disabled": false, - "chainId": "1", - "rank": 1, - "name": "Ethereum", - "externalApi": { - "explorers": [{ - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://etherscan.io/{type}/{value}" - } - ], - "history": { - "type": "etherscan", - "url": "https://api.etherscan.io/api" - } - }, - "assets": [ - { - "isUtility": true, - "id": "c2a6c062-d511-4bde-9ce6-ea775d2a302c", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "normal", - "priceProvider": { - "type": "chainlink", - "id": "0x639fe6ab55c921f74e7fac1ee960c0b6293ba612", - "precision": 8 - } - }, - { - "isUtility": false, - "id": "0x6B175474E89094C44Da98b954EedeAC495271d0F", - "name": "dai stablecoin", - "symbol": "dai", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xdac17f958d2ee523a2206206994597c13d831ec7", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", - "name": "usd coin", - "symbol": "usdc", - "precision": 6, - "priceId": "usd-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9", - "name": "aave", - "symbol": "aave", - "precision": 18, - "priceId": "aave", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AAVE.svg", - "color": "B6509E", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xD533a949740bb3306d119CC777fa900bA034cd52", - "name": "curve dao", - "symbol": "crv", - "precision": 18, - "priceId": "curve-dao-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRV.svg", - "color": "B6509E", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984", - "name": "uniswap", - "symbol": "uni", - "precision": 18, - "priceId": "uniswap", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UNI.svg", - "color": "FF007A", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x514910771AF9Ca656af840dff83E8264EcF986CA", - "name": "chainlink", - "symbol": "link", - "precision": 18, - "priceId": "chainlink", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LINK.svg", - "color": "FFFFFF", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x111111111117dC0aa78b770fA6A738034120C302", - "name": "1inch", - "symbol": "1inch", - "precision": 18, - "priceId": "1inch", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/1INCH.svg", - "color": "FFFFFF", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xB8c77482e45F1F44dE1745F52C74426C631bDD52", - "name": "bnb", - "symbol": "bnb", - "precision": 18, - "priceId": "binancecoin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", - "color": "F3BA2F", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0", - "name": "polygon", - "symbol": "matic", - "precision": 18, - "priceId": "matic-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", - "color": "8247E5", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x40FD72257597aA14C7231A7B1aaa29Fce868F677", - "name": "sora", - "symbol": "xor", - "precision": 18, - "priceId": "sora", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", - "color": "EE2233", - "type": "normal", - "ethereumType": "erc20", - "priceProvider": { - "type": "sorasubquery", - "id": "0x0200000000000000000000000000000000000000000000000000000000000000" - } - }, - { - "isUtility": false, - "id": "0xe88f8313e61A97cEc1871EE37fBbe2a8bf3ed1E4", - "name": "sora validator", - "symbol": "val", - "precision": 18, - "priceId": "sora-validator-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VAL.svg", - "color": "F3B966", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x519C1001D550C0a1DaE7d1fC220f7d14c2A521BB", - "name": "polkaswap", - "symbol": "pswap", - "precision": 18, - "priceId": "polkaswap", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PSWAP.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x2e7B0d4F9B2EaF782eD3D160e3a0a4b1a7930aDA", - "name": "ceres", - "symbol": "ceres", - "precision": 18, - "priceId": "ceres", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CERES.svg", - "color": "243579", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x236501327e701692a281934230AF0b6BE8Df3353", - "name": "fluence", - "symbol": "flt", - "precision": 18, - "priceId": "fluence-2", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/FLT.svg", - "color": "FFFFFF", - "type": "normal", - "ethereumType": "erc20" - } - ], - "nodes": [ - { - "url": "https://eth-mainnet.blastapi.io/", - "name": "Blast https" - }, - { - "url": "wss://eth-mainnet.blastapi.io/", - "name": "Blast wss" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/ETH.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "nft", - "utilityFeePayment" - ] + "assets": [ + { + "id": "07c55d3a-b24e-410e-b9ca-7da0707fbd61", + "name": "integritee", + "symbol": "teer", + "precision": 12, + "priceId": "integritee", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TEER.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-integritee.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/integritee.svg", + "addressPrefix": 13 + }, + { + "disabled": false, + "chainId": "0f62b701fb12d02237a33b84818c11f621653d2b1614c777973babf4652b535d", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2114", + "name": "Turing Network", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-turing" + } }, - { - "disabled": false, - "chainId": "5", - "rank": 101, - "name": "Ethereum Goerli", - "externalApi": { - "explorers": [{ - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://goerli.etherscan.io/{type}/{value}" - } - ], - "history": { - "type": "etherscan", - "url": "https://api-goerli.etherscan.io/api" - } - }, - "assets": [ - { - "isUtility": true, - "id": "a31e35a9-5026-4816-9b8b-08029627b256", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0x11fE4B6AE13d2a6055C8D9cF65c55bac32B5d844", - "name": "dai stablecoin", - "symbol": "dai", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x07865c6e87b9f70255377e024ace6630c1eaa37f", - "name": "usdc stablecoin", - "symbol": "usdc", - "precision": 6, - "priceId": "usd-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4", - "type": "normal", - "ethereumType": "erc20" - } - ], - "nodes": [ - { - "url": "https://eth-goerli.blastapi.io/", - "name": "Blast https" - }, - { - "url": "wss://eth-goerli.blastapi.io/", - "name": "Blast wss" - } + "assets": [ + { + "id": "148ce615-aea3-42fa-be45-5eb5606813b8", + "name": "turing token", + "symbol": "tur", + "precision": 10, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUR.svg", + "color": "5DCBD0", + "isUtility": true, + "type": "normal" + }, + { + "id": "e8774037-c4a5-42b5-87a4-cf946a60a406", + "type": "assetId", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "1", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "existentialDeposit": "100000000" + } + ], + "nodes": [ + { + "url": "wss://api-turing.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.turing.oak.tech", + "name": "OAK node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/OAK.svg", + "addressPrefix": 51 + }, + { + "disabled": false, + "chainId": "7dd99936c1e9e6d1ce7d90eb6f33bea8393b4bf87677d675aa63c9cb3e8c5b5b", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "1001", + "name": "Encointer on Kusama", + "ecosystem": "substrate", + "assets": [ + { + "id": "1e0c2ec6-935f-49bd-a854-5e12ee6c9f1b", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "purchaseProviders": [ + "ramp" ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/ETH.svg", - "addressPrefix": 0, - "options": [ - "testnet", - "ethereum", - "utilityFeePayment" - ] + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kusama.api.encointer.org", + "name": "Encointer Association node" + }, + { + "url": "wss://sys.ibp.network/encointer-kusama", + "name": "IBP-GeoDNS1 node" + }, + { + "url": "wss://sys.dotters.network/encointer-kusama", + "name": "IBP-GeoDNS2 node" + }, + { + "url": "wss://ksm-rpc.stakeworld.io/encointer", + "name": "Stakeworld node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/encointer.svg", + "addressPrefix": 2 + }, + { + "disabled": true, + "chainId": "0e06260459b4f9034aba0a75108c08ed73ea51d2763562749b1d3600986c4ea5", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2102", + "name": "Pichiu Network", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/Pichiu-x-Fearless-Wallet" + } }, - { - "disabled": false, - "chainId": "56", - "rank": 2, - "name": "BNB Smart Chain", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://api.bscscan.com/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://bscscan.com/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "6e43f1b7-1ec3-48a7-8ecd-8d680578d2b8", - "name": "BNB", - "symbol": "BNB", - "precision": 18, - "priceId": "binancecoin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "normal", - "priceProvider": { - "type": "chainlink", - "id": "0x6970460aabF80C5BE983C6b74e5D06dEDCA95D4A", - "precision": 8 - } - }, - { - "isUtility": false, - "id": "0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3", - "name": "DAI", - "symbol": "DAI", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x2170Ed0880ac9A755fd29B2688956BD959F933F8", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "bep20" - }, + "assets": [ + { + "id": "5b196f7c-475a-493e-abbf-9f808d6fb863", + "name": "pichu token", + "symbol": "pchu", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PCHU.svg", + "color": "AE4071", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kusama.kylin-node.co.uk", + "name": "Kylin Network node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/pichiu.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "d42e9606a995dfe433dc7955dc2a70f495f350f373daa200098ae84437816ad2", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2125", + "name": "InvArch Tinker Network", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/InvArch-Tinker-x-Fearless-Wallet" + } + }, + "assets": [ + { + "id": "8b58d683-fdc9-477e-a1b2-2c95b663e4a5", + "name": "tinkernet parachain", + "symbol": "tnkr", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TNKR.svg", + "color": "AC2489", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-invarch.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Tinkernet.svg", + "addressPrefix": 117 + }, + { + "disabled": true, + "chainId": "19a3733beb9cb8a970a308d835599e9005e02dc007a35440e461a451466776f8", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2123", + "name": "GM Parachain", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid.subsquid.io/gs-main-gmordie/graphql" + } + }, + "assets": [ + { + "id": "19763697-37d8-4643-b840-3fd8565f5d83", + "name": "gm parachain", + "symbol": "fren", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/FREN.svg", + "color": "F7D64D", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://leemo.gmordie.com", + "name": "leemo node" + }, + { + "url": "wss://ws.gm.bldnodes.org", + "name": "bLd Nodes node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/GM%20Parachain.svg", + "addressPrefix": 7013 + }, + { + "disabled": true, + "chainId": "ca93a37c913a25fa8fdb33c7f738afc39379cb71d37874a16d4c091a5aef9f89", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2121", + "name": "Imbue Kusama", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/Imbue-x-Fearless-Wallet" + } + }, + "assets": [ + { + "id": "c01b37ab-eefa-427d-ba50-dd7a1cbe1798", + "name": "imbue network", + "symbol": "imbu", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/IMBU.svg", + "color": "C3FD51", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://imbue-kusama.imbue.network", + "name": "Imbue Network node node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Imbue.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "cceae7f3b9947cdb67369c026ef78efa5f34a08fe5808d373c04421ecf4f1aaf", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2124", + "name": "Amplitude", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-amplitude-api.squid.tachi.soramitsu.co.jp/graphql" + } + }, + "assets": [ + { + "id": "b2e6c029-ae73-46f9-9660-51d7034ddc53", + "name": "amplitude", + "symbol": "ampe", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AMPE.svg", + "color": "7CE2A0", + "isUtility": true, + "type": "normal" + }, + { + "id": "b2f80126-9b7f-4026-adc8-dd7fb39baf2c", + "type": "xcm", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "currencyId": "0", + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF" + }, + { + "id": "dc34cadc-d448-4bd8-a484-af6e602fe08d", + "type": "xcm", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "1", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "existentialDeposit": "10000" + }, + { + "id": "465b44c5-ab78-4283-960e-d3b834adb646", + "type": "xcm", + "name": "picasso", + "symbol": "pica", + "precision": 12, + "currencyId": "2", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PICA.svg", + "color": "FFFFFF" + } + ], + "nodes": [ + { + "url": "wss://api-amplitude.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc-amplitude.pendulumchain.tech", + "name": "PendulumChain node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Amplitude.svg", + "addressPrefix": 57 + }, + { + "disabled": true, + "chainId": "f0b8924b12e8108550d28870bc03f7b45a947e1b2b9abf81bfb0b89ecb60570e", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2046", + "name": "Darwinia2", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-darwinia-api.squid.tachi.soramitsu.co.jp/graphql" + }, + "explorers": [ { - "isUtility": false, - "id": "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d", - "name": "usd coin", - "symbol": "usdc", - "precision": 18, - "priceId": "usd-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4", - "type": "normal", - "ethereumType": "bep20" - }, + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://darwinia-parachain.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "b861f610-cf2c-43ad-a660-f6b809a05062", + "name": "darwinia", + "symbol": "ring", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RING.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc.darwinia.network", + "name": "Darwinia Network node" + }, + { + "url": "wss://darwinia-rpc.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://parachain-rpc.darwinia.network", + "name": "Darwinia Network 1 node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/darwinia.svg", + "addressPrefix": 18 + }, + { + "disabled": true, + "chainId": "f2584690455deda322214e97edfffaf4c1233b6e4625e39478496b3e2f5a44c5", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2052", + "name": "Kylin Network", + "ecosystem": "substrate", + "assets": [ + { + "id": "7512aeb7-7bdc-42dc-abe3-80ed764c80bd", + "name": "kylin network", + "symbol": "kyl", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KYL.svg", + "color": "AE4071", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://polkadot.kylin-node.co.uk", + "name": "Kylin Network node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kylin%20Network.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "d4c0c08ca49dc7c680c3dac71a7c0703e5b222f4b6c03fe4c5219bb8f22c18dc", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "name": "Crust Shadow Parachain", + "ecosystem": "substrate", + "paraId": "2012", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/fearless-wallet-crust_shadow_parachain" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://shadow.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "d1e3be8c-880e-46fe-97e3-761c0a58aed1", + "name": "crust shadow", + "symbol": "csm", + "precision": 12, + "priceId": "crust-storage-market", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CSM_Crust_Shadow.svg", + "color": "F3AD56", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc-shadow.crust.network", + "name": "Crust node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/crustshadow.svg", + "addressPrefix": 66 + }, + { + "disabled": true, + "chainId": "6e938c4a786f8df6f38d0c06f00a8573f1f7aabeebf48aee5157a93cc5fe3271", + "name": "Kusama (test)", + "ecosystem": "substrate", + "assets": [ + { + "id": "03561957-3383-4f9f-8033-1b2c36d88db6", + "name": "kusama", + "symbol": "unit", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "staking": "relaychain", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://ws.relaychain-node-1.k1.tst.fearless.soramitsu.co.jp", + "name": "SORA Kusama Test node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kusama.svg", + "addressPrefix": 2, + "options": [ + "poolStaking" + ] + }, + { + "disabled": true, + "chainId": "fd4d46e9a51e16babf791b94d6dbf771ed1d7de8a11b310aa98c847890fa9ff3", + "name": "Polkadot (test)", + "ecosystem": "substrate", + "assets": [ + { + "id": "405e7e40-a2f1-45a3-a32f-7f271b2819d2", + "name": "polkadot", + "symbol": "unit", + "precision": 10, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "staking": "relaychain", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://ws.relaychain-node-2.p1.tst.fearless.soramitsu.co.jp/", + "name": "SORA Polkadot Test node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polkadot.svg", + "addressPrefix": 2, + "options": [ + "poolStaking" + ] + }, + { + "disabled": true, + "chainId": "b34f6cd03a41f0fab38ba9fd5b11cce5f303633c46f39f0c6fdc7c3c602bafa9", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "name": "Snow Kusama", + "ecosystem": "substrate", + "assets": [ + { + "id": "e739d665-7af5-4e65-ab5f-93f54a5b70b3", + "name": "snow", + "symbol": "icz", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ICZ.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://snow-rpc.icenetwork.io", + "name": "Snow node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SNOW.svg", + "addressPrefix": 2207 + }, + { + "disabled": true, + "chainId": "3266816be9fa51b32cfea58d3e33ca77246bc9618595a4300e44c8856a8d8a17", + "rank": 100, + "name": "SORA test", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "sora", + "url": "https://api.subquery.network/sq/sora-xor/sora-staging" + }, + "staking": { + "type": "sora", + "url": "https://squid.subsquid.io/sora-stage/v/v5/graphql" + } + }, + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b1", + "symbol": "ROC" + } + ], + "availableDestinations": [ + { + "chainId": "6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e", + "assets": [ + { + "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b1", + "symbol": "ROC" + } + ] + } + ] + }, + "assets": [ + { + "id": "b5a44630-920e-43ee-809f-61890d0888b0", + "name": "sora", + "symbol": "xor", + "currencyId": "0x0200000000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", + "color": "EE2233", + "isUtility": true, + "type": "soraAsset", + "staking": "relaychain" + }, + { + "id": "0ecacd48-ffd4-4a2e-87e3-c5f72f9a9877", + "name": "sora validator", + "symbol": "val", + "currencyId": "0x0200040000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora-validator-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VAL.svg", + "color": "F3B966", + "type": "soraAsset", + "isNative": true + }, + { + "id": "87ba5538-34db-4d53-9104-25f42b0bb55b", + "name": "polkaswap", + "symbol": "pswap", + "currencyId": "0x0200050000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "polkaswap", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PSWAP.svg", + "color": "FF0066", + "type": "soraAsset", + "isNative": true + }, + { + "id": "038a7045-af00-466d-b72b-95485c4674b7", + "name": "sora synthetics", + "symbol": "xst", + "currencyId": "0x0200090000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora-synthetics", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XST.svg", + "color": "EE2233", + "type": "soraAsset", + "isNative": true + }, + { + "id": "c96e012c-0786-4980-9750-bae61de0aa19", + "name": "sora synthetic usd", + "symbol": "xstusd", + "currencyId": "0x0200080000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora-synthetic-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XSTUSD.svg", + "color": "EE2233", + "type": "soraAsset", + "isNative": true + }, + { + "id": "7bcc178d-1ebe-46b8-88fb-79649828f21d", + "name": "demeter", + "symbol": "deo", + "currencyId": "0x00f2f4fda40a4bf1fc3769d156fa695532eec31e265d75068524462c0b80f674", + "precision": 18, + "priceId": "demeter", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DEO.svg", + "color": "54B198", + "type": "soraAsset", + "isNative": true + }, + { + "id": "79ba9571-6ea4-4790-8fda-d20ddbad4f33", + "name": "ceres", + "symbol": "ceres", + "currencyId": "0x008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440", + "precision": 18, + "priceId": "ceres", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CERES.svg", + "color": "243579", + "type": "soraAsset", + "isNative": true + }, + { + "id": "38eae54b-723d-457c-8d45-4beab249612f", + "name": "noir token", + "symbol": "noir", + "currencyId": "0x0044aee0776cfb826434af8ef0f8e2c7e9e6644cfda0ae0f02c471b1eebc2483", + "precision": 18, + "priceId": "noir-phygital", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NOIR.svg", + "color": "A0A7FF", + "type": "soraAsset", + "isNative": true + }, + { + "id": "2565e418-d5bc-4318-99b5-53e893681518", + "name": "umitoken", + "symbol": "umi", + "currencyId": "0x003252667a82d2dd70fa046eea663eaec1f2e37c20879f113b880b04c5ebd805", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UMI.svg", + "color": "3C7EB2", + "type": "soraAsset", + "isNative": true + }, + { + "id": "9b040bf8-a852-4e10-aa14-d3793db27a95", + "name": "tether usd", + "symbol": "usdt", + "currencyId": "0x0083a6b3fbc6edae06f115c8953ddd7cbfba0b74579d6ea190f96853073b76f4", + "precision": 18, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "type": "soraAsset" + }, + { + "id": "1b20dfcd-a40d-4850-a407-5a45f3bf4889", + "name": "binance usd", + "symbol": "busd", + "currencyId": "0x00567d096a736f33bf78cad7b01e33463923b9c933ee13ab7e3fb7b23f5f953a", + "precision": 18, + "priceId": "binance-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", + "color": "F3BA2F", + "type": "soraAsset" + }, + { + "id": "5c017385-e702-47d2-8f3a-ac8146c2b9dd", + "name": "usd coin", + "symbol": "usdc", + "currencyId": "0x00ef6658f79d8b560f77b7b20a5d7822f5bc22539c7b4056128258e5829da517", + "precision": 18, + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4", + "type": "soraAsset" + }, + { + "id": "db07f99c-0c76-483a-891f-86fbd028fdc5", + "name": "bokolo cash", + "symbol": "BCSI", + "currencyId": "0x00eacaea6599a04358fda986388ef0bb0c17a553ec819d5de2900c0af0862502", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BCSD.svg", + "color": "FFFFFF", + "type": "soraAsset" + }, + { + "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b1", + "name": "rococo", + "symbol": "roc", + "precision": 18, + "currencyId": "0x00dc9b4341fde46c9ac80b623d0d43afd9ac205baabdc087cadaa06f92b309c7", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "type": "soraAsset" + }, + { + "id": "ada3b18e-1912-4f96-ad3b-4d0e1b1d1d0a", + "symbol": "tbcd", + "name": "sora tbc dollar", + "currencyId": "0x02000a0000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/TBCD.svg", + "color": "6D8954", + "type": "soraAsset", + "isNative": true + }, + { + "id": "eface91d-b2a8-49d2-88e8-640586bda477", + "name": "polkadot", + "symbol": "dot", + "currencyId": "0x0003b1dbee890acfb1b3bc12d1bb3b4295f52755423f84d1751b2545cebf000b", + "precision": 18, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "type": "soraAsset" + }, + { + "id": "191c31de-62b1-41e4-aad3-15a5be1b4cd4", + "name": "dai", + "symbol": "dai", + "currencyId": "0x0200060000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "dai", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", + "color": "F9AF1A", + "type": "soraAsset" + }, + { + "id": "3ab2c884-6c6e-4f92-b87a-a013c80210af", + "name": "ethereum", + "symbol": "eth", + "currencyId": "0x0200070000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "627EEA", + "type": "soraAsset" + } + ], + "nodes": [ + { + "url": "wss://ws.framenode-8.s5.stg1.sora2.soramitsu.co.jp", + "name": "Sora Stage #8" + }, + { + "url": "wss://ws.framenode-1.r0.dev.sora2.soramitsu.co.jp", + "name": "Sora Card Test Node #1" + }, + { + "url": "wss://ws.framenode-2.r0.dev.sora2.soramitsu.co.jp", + "name": "Sora Card Test Node #2" + }, + { + "url": "wss://ws.framenode-3.r0.dev.sora2.soramitsu.co.jp", + "name": "Sora Card Test Node #3" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", + "addressPrefix": 69, + "options": [ + "testnet", + "polkaswap", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", + "rank": 0, + "name": "SORA Mainnet", + "ecosystem": "substrate", + "externalApi": { + "staking": { + "type": "sora", + "url": "https://fearless-wallet.squids.live/sora-fw/v/v12/graphql" + }, + "history": { + "type": "sora", + "url": "https://fearless-wallet.squids.live/sora-fw/v/v12/graphql" + }, + "pricing": { + "type": "sora", + "url": "https://api.subquery.network/sq/sora-xor/sora-prod" + }, + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://sora.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "b774c386-5cce-454a-a845-1ec0381538ec", + "name": "sora", + "symbol": "xor", + "currencyId": "0x0200000000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", + "color": "EE2233", + "isUtility": true, + "type": "soraAsset", + "staking": "relaychain", + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200000000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "24d0809e-0a4c-42ea-bdd8-dc7a518f389c", + "name": "sora validator", + "symbol": "val", + "currencyId": "0x0200040000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora-validator-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VAL.svg", + "color": "F3B966", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200040000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "37a999a2-5e90-4448-8b0e-98d06ac8f9d4", + "name": "polkaswap", + "symbol": "pswap", + "currencyId": "0x0200050000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "polkaswap", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PSWAP.svg", + "color": "FF0066", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200050000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "75a0bc9b-a1fb-446e-8781-621036bfd979", + "name": "sora synthetics", + "symbol": "xst", + "currencyId": "0x0200090000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora-synthetics", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XST.svg", + "color": "EE2233", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200090000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "217925d8-c529-4480-98e5-b8bf651129ef", + "name": "sora synthetic usd", + "symbol": "xstusd", + "currencyId": "0x0200080000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "sora-synthetic-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XSTUSD.svg", + "color": "EE2233", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200080000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "5e3de486-789e-4e47-8f49-870852cfebb6", + "name": "demeter", + "symbol": "deo", + "currencyId": "0x00f2f4fda40a4bf1fc3769d156fa695532eec31e265d75068524462c0b80f674", + "precision": 18, + "priceId": "demeter", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DEO.svg", + "color": "54B198", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x00f2f4fda40a4bf1fc3769d156fa695532eec31e265d75068524462c0b80f674" + } + }, + { + "id": "8fe0cbf4-7ece-45f6-968b-5c1b77accff0", + "name": "ceres", + "symbol": "ceres", + "currencyId": "0x008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440", + "precision": 18, + "priceId": "ceres", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CERES.svg", + "color": "243579", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x008bcfd2387d3fc453333557eecb0efe59fcba128769b2feefdd306e98e66440" + } + }, + { + "id": "079f2a74-1440-440c-b826-6d85a7dd3a91", + "name": "noir token", + "symbol": "noir", + "currencyId": "0x0044aee0776cfb826434af8ef0f8e2c7e9e6644cfda0ae0f02c471b1eebc2483", + "precision": 18, + "priceId": "noir-phygital", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/NOIR.svg", + "color": "A0A7FF", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x0044aee0776cfb826434af8ef0f8e2c7e9e6644cfda0ae0f02c471b1eebc2483" + } + }, + { + "id": "2de2b668-33cd-4e85-a501-4921481e618f", + "name": "umitoken", + "symbol": "umi", + "currencyId": "0x003252667a82d2dd70fa046eea663eaec1f2e37c20879f113b880b04c5ebd805", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UMI.svg", + "color": "3C7EB2", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x003252667a82d2dd70fa046eea663eaec1f2e37c20879f113b880b04c5ebd805" + } + }, + { + "id": "4c7b8da9-b297-4093-b8bc-28d477e7b5ad", + "name": "tether usd", + "symbol": "usdt", + "currencyId": "0x0083a6b3fbc6edae06f115c8953ddd7cbfba0b74579d6ea190f96853073b76f4", + "precision": 18, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x0083a6b3fbc6edae06f115c8953ddd7cbfba0b74579d6ea190f96853073b76f4" + } + }, + { + "id": "23c41bbb-2e1a-4d64-bbab-5080975ecc1c", + "name": "binance usd", + "symbol": "busd", + "currencyId": "0x00567d096a736f33bf78cad7b01e33463923b9c933ee13ab7e3fb7b23f5f953a", + "precision": 18, + "priceId": "binance-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", + "color": "F3BA2F", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00567d096a736f33bf78cad7b01e33463923b9c933ee13ab7e3fb7b23f5f953a" + } + }, + { + "id": "c8ce20ed-8690-4b46-9b3d-872e325ae636", + "name": "usd coin", + "symbol": "usdc", + "currencyId": "0x00ef6658f79d8b560f77b7b20a5d7822f5bc22539c7b4056128258e5829da517", + "precision": 18, + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00ef6658f79d8b560f77b7b20a5d7822f5bc22539c7b4056128258e5829da517" + } + }, + { + "id": "1e6f8ba3-5aeb-41d8-b80e-a44ce0f33716", + "name": "dai", + "symbol": "dai", + "currencyId": "0x0200060000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "dai", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", + "color": "F9AF1A", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200060000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "82f45df3-b6d8-43e7-a440-c0e73ab59785", + "name": "ethereum", + "symbol": "eth", + "currencyId": "0x0200070000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "627EEA", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200070000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "94e573f3-a9f3-4f7e-9244-8492288ca558", + "name": "soshiba", + "symbol": "soshiba", + "currencyId": "0x005aa73d7a4a3fdbe830c7d0ee26c09ba7f1db119da86d5b4dcb6609dac5ceb5", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/SHIB.svg", + "color": "FFA409", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x005aa73d7a4a3fdbe830c7d0ee26c09ba7f1db119da86d5b4dcb6609dac5ceb5" + } + }, + { + "id": "68a46965-94e8-4a03-af65-6237f83d482f", + "symbol": "tbcd", + "name": "sora tbc dollar", + "currencyId": "0x02000a0000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/TBCD.svg", + "color": "6D8954", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x02000a0000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "61f864b5-9fe0-4ba5-b5b6-c338ceaeee91", + "name": "hermes dao", + "symbol": "hmx", + "currencyId": "0x002d4e9e03f192cc33b128319a049f353db98fbf4d98f717fd0b7f66a0462142", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/fearless-utils/master/icons/tokens/coloured/HMX.svg", + "priceId": "hermes-dao", + "color": "FFFFFF", + "type": "soraAsset", + "isNative": true, + "priceProvider": { + "type": "sorasubquery", + "id": "0x002d4e9e03f192cc33b128319a049f353db98fbf4d98f717fd0b7f66a0462142" + } + }, + { + "id": "a13169a1-32fa-4b44-aecb-c404c5f3cdbc", + "name": "bokolo cash", + "symbol": "BCSI", + "currencyId": "0x00eacaea6599a04358fda986388ef0bb0c17a553ec819d5de2900c0af0862502", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BCSD.svg", + "color": "FFFFFF", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00eacaea6599a04358fda986388ef0bb0c17a553ec819d5de2900c0af0862502" + } + }, + { + "id": "5416b261-a759-4ba6-bc83-ea79a83c5101", + "name": "kusama", + "symbol": "ksm", + "currencyId": "0x00117b0fa73c4672e03a7d9d774e3b3f91beb893e93d9a8d0430295f44225db8", + "precision": 18, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00117b0fa73c4672e03a7d9d774e3b3f91beb893e93d9a8d0430295f44225db8" + } + }, + { + "id": "cd092a5a-4eb6-4318-9f11-4bf8454d67a2", + "name": "polkadot", + "symbol": "dot", + "currencyId": "0x0003b1dbee890acfb1b3bc12d1bb3b4295f52755423f84d1751b2545cebf000b", + "precision": 18, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x0003b1dbee890acfb1b3bc12d1bb3b4295f52755423f84d1751b2545cebf000b" + } + }, + { + "id": "fb88fa55-b8c8-4ff1-afa8-f72a86a238a4", + "name": "acala", + "symbol": "aca", + "currencyId": "0x001ddbe1a880031da72f7ea421260bec635fa7d1aa72593d5412795408b6b2ba", + "precision": 18, + "priceId": "acala", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ACA.svg", + "color": "FFFFFF", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x001ddbe1a880031da72f7ea421260bec635fa7d1aa72593d5412795408b6b2ba" + } + }, + { + "id": "acc32ee0-8fdc-4743-91e1-f70cc4f3069b", + "name": "astar", + "symbol": "astr", + "currencyId": "0x009dd037fcb32f4fe17c513abd4641a2ece844d106e30788124f0c0acc6e748e", + "precision": 18, + "priceId": "astar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", + "color": "0AE2FF", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x009dd037fcb32f4fe17c513abd4641a2ece844d106e30788124f0c0acc6e748e" + } + }, + { + "id": "0ef3afdc-cdd3-47cc-bd52-817c54ae65b5", + "name": "liberland merit", + "symbol": "llm", + "currencyId": "0x00073edd278e1bd6a7f9d0b27d4f3e93b73c8f0832b58a4df13c69611a99f156", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLM.svg", + "color": "EFB900", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00073edd278e1bd6a7f9d0b27d4f3e93b73c8f0832b58a4df13c69611a99f156" + } + }, + { + "id": "1c3b4fcb-5a5f-4319-9dce-d178006eb9bf", + "name": "liberland dollar", + "symbol": "lld", + "currencyId": "0x00513be65493a7fc3e2128d4230061a530acf40478a4affa20bbba27a310673e", + "precision": 18, + "priceId": "liberland-lld", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLD.svg", + "color": "00437F", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00513be65493a7fc3e2128d4230061a530acf40478a4affa20bbba27a310673e" + } + }, + { + "id": "a543b9a2-f85a-4974-92fc-435d6bc418e5", + "name": "toncoin", + "symbol": "toncoin", + "currencyId": "0x00e8c8923623335128807857dfa38f9212e9803394a2c976e97245d7063bbe10", + "precision": 18, + "priceId": "the-open-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg", + "color": "0098EA", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00e8c8923623335128807857dfa38f9212e9803394a2c976e97245d7063bbe10" + } + }, + { + "id": "59a87850-0194-4040-b92e-b869ee3dd3fa", + "name": "kensetsu token", + "symbol": "ken", + "currencyId": "0x02000b0000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KEN.svg", + "color": "00004E", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x02000b0000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "ffc85c62-c970-4cb4-900c-f7d4831c3695", + "name": "kensetsu usd", + "symbol": "kusd", + "currencyId": "0x02000c0000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KUSD.svg", + "color": "BF0A30", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x02000c0000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "46e8a947-ade7-4c87-83b5-d724a35da919", + "name": "apollo", + "symbol": "apollo", + "currencyId": "0x00efe45135018136733be626b380a87ae663ccf6784a25fe9d9d2be64acecb9d", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/APOLLO.svg", + "color": "EB0EAD", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00efe45135018136733be626b380a87ae663ccf6784a25fe9d9d2be64acecb9d" + } + }, + { + "id": "1028531a-5e46-4759-9452-1c3c903b7cec", + "name": "kensetsu ounce of gold", + "symbol": "kgold", + "currencyId": "0x02000d0000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KGOLD.svg", + "color": "FAF49C", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x02000d0000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "b221dd6b-c34e-4ed0-b46c-70f7ed0758d9", + "name": "chameleon", + "symbol": "karma", + "currencyId": "0x02000f0000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KARMA.svg", + "color": "EE1122", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x02000f0000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "8ad4fe9d-1d1c-4708-88c4-1b96dc2615d0", + "name": "sora pussy", + "symbol": "pussy", + "currencyId": "0x00f40bff02811ad7bd4f84bfa8dc3c79a61e2a17cd55c8418d553e7ffaf596ac", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PUSSY.svg", + "color": "F54E48", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00f40bff02811ad7bd4f84bfa8dc3c79a61e2a17cd55c8418d553e7ffaf596ac" + } + }, + { + "id": "6ea1fc55-5154-4ebc-85d2-5ccc9a26d81c", + "name": "kensetsu xor", + "symbol": "kxor", + "currencyId": "0x02000e0000000000000000000000000000000000000000000000000000000000", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KXOR.svg", + "color": "EE1122", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x02000e0000000000000000000000000000000000000000000000000000000000" + } + }, + { + "id": "def9e74d-3e0f-43d3-9d30-798202b3bd18", + "name": "vested xor", + "symbol": "vxor", + "currencyId": "0x006a271832f44c93bd8692584d85415f0f3dccef9748fecd129442c8edcb4361", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VXOR.svg", + "color": "E3232C", + "type": "soraAsset", + "priceProvider": { + "type": "sorasubquery", + "id": "0x006a271832f44c93bd8692584d85415f0f3dccef9748fecd129442c8edcb4361" + } + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ + { + "id": "5416b261-a759-4ba6-bc83-ea79a83c5101", + "symbol": "KSM" + }, + { + "id": "cd092a5a-4eb6-4318-9f11-4bf8454d67a2", + "symbol": "DOT" + }, + { + "id": "fb88fa55-b8c8-4ff1-afa8-f72a86a238a4", + "symbol": "ACA" + }, + { + "id": "a6b83d39-a488-4b34-8352-280705a792ea", + "symbol": "LLD" + }, + { + "id": "b774c386-5cce-454a-a845-1ec0381538ec", + "symbol": "XOR" + }, + { + "id": "0ef3afdc-cdd3-47cc-bd52-817c54ae65b5", + "symbol": "LLM" + }, + { + "id": "acc32ee0-8fdc-4743-91e1-f70cc4f3069b", + "symbol": "ASTR" + } + ], + "availableDestinations": [ + { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "assets": [ + { + "id": "5416b261-a759-4ba6-bc83-ea79a83c5101", + "symbol": "KSM" + } + ] + }, + { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "assets": [ + { + "id": "99e66d4f-00cd-4d73-bd1b-3adadcacffb2", + "symbol": "DOT" + } + ] + }, + { + "chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c", + "assets": [ + { + "id": "fb88fa55-b8c8-4ff1-afa8-f72a86a238a4", + "symbol": "ACA", + "minAmount": "1000000000000000000" + } + ] + }, + { + "chainId": "6bd89e052d67a45bb60a9a23e8581053d5e0d619f15cb9865946937e690c42d6", + "assets": [ + { + "id": "a6b83d39-a488-4b34-8352-280705a792ea", + "symbol": "LLD", + "minAmount": "1000000000000000000" + }, + { + "id": "b774c386-5cce-454a-a845-1ec0381538ec", + "symbol": "XOR" + }, + { + "id": "0ef3afdc-cdd3-47cc-bd52-817c54ae65b5", + "symbol": "LLM" + } + ] + }, + { + "chainId": "9eb76c5184c4ab8679d2d5d819fdf90b9c001403e9e17da2e14b6d8aec4029c6", + "assets": [ + { + "id": "acc32ee0-8fdc-4743-91e1-f70cc4f3069b", + "symbol": "ASTR" + } + ] + } + ] + }, + "nodes": [ + { + "url": "wss://ws.mof.sora.org", + "name": "SORA Parliament Ministry of Finance Node" + }, + { + "url": "wss://mof2.sora.org", + "name": "SORA Parliament Ministry of Finance Node" + }, + { + "url": "wss://mof3.sora.org", + "name": "SORA Parliament Ministry of Finance Node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", + "addressPrefix": 69, + "options": [ + "polkaswap", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "70255b4d28de0fc4e1a193d7e175ad1ccef431598211c55538f1018651a0344e", + "name": "Aleph Zero", + "ecosystem": "substrate", + "externalApi": { + "history":{ + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-aleph-zero" + } + }, + "assets": [ + { + "id": "4ea52d6e-a433-4f11-a811-4634068c79a2", + "name": "aleph zero", + "symbol": "azero", + "precision": 12, + "priceId": "aleph-zero", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AZERO.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-aleph-zero-mainnet.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://ws.azero.dev", + "name": "Aleph Zero Foundation node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/white/Aleph%20Zero.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "00dcb981df86429de8bbacf9803401f09485366c44efbf53af9ecfab03adc7e5", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "1002", + "name": "Kusama BridgeHub", + "ecosystem": "substrate", + "externalApi":{ + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet---kusama-bridgehub" + } + }, + "assets": [ + { + "id": "f0f8e709-20f3-44e6-a6c3-89e9e82f78ed", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-kusama-bridge-hub.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://kusama-bridge-hub-rpc.polkadot.io", + "name": "Parity node" + }, + { + "url": "wss://sys.ibp.network/bridgehub-kusama", + "name": "IBP-GeoDNS1 node" + }, + { + "url": "wss://sys.dotters.network/bridgehub-kusama", + "name": "IBP-GeoDNS2 node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bridgehub.svg", + "addressPrefix": 2 + }, + { + "disabled": false, + "chainId": "6f0f071506de39058fe9a95bbca983ac0e9c5da3443909574e95d52eb078d348", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2222", + "name": "Ipci", + "ecosystem": "substrate", + "assets": [ + { + "id": "b20185e9-2f5c-4c3d-bd5a-c751cd76d439", + "name": "dao ipci", + "symbol": "mito", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MITO.svg", + "color": "0BF0A6", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kusama.rpc.ipci.io", + "name": "Airalab node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/DAOIPCI.svg", + "addressPrefix": 32 + }, + { + "disabled": false, + "chainId": "cdedc8eadbfa209d3f207bba541e57c3c58a667b05a2e1d1e86353c9000758da", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2015", + "name": "Integritee Network (Kusama)", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://integritee.subscan.io/{type}/{value}" + } + ], + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-integritee" + } + }, + "assets": [ + { + "id": "c8b67e07-8b3b-4b92-b23d-23b5bb1f8f42", + "name": "integritee", + "symbol": "teer", + "precision": 12, + "priceId": "integritee", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TEER.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kusama.api.integritee.network", + "name": "Integritee node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/integritee.svg", + "addressPrefix": 13 + }, + { + "disabled": false, + "chainId": "2991d4125ac465d64c4c0b915fedd7168b5961b7676480636e3747f1ad64cfb9", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2236", + "name": "Subzero", + "ecosystem": "substrate", + "assets": [ + { + "id": "3a1cc15e-903b-4102-9384-364c00e67283", + "name": "zero", + "symbol": "zero", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZERO.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc-1.kusama.node.zero.io", + "name": "ZeroNetwork node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Subzero.svg", + "addressPrefix": 25 + }, + { + "disabled": false, + "chainId": "e358eb1d11b31255a286c12e44fe6780b7edb171d657905a97e39f71d9c6c3ee", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2051", + "name": "Ajuna Polkadot", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://ajuna.subscan.io/{type}/{value}" + } + ], + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet---ajuna" + } + }, + "assets": [ + { + "id": "b0afcb19-5d4c-442c-ac0f-53c64b1ea0ae", + "name": "ajuna network", + "symbol": "ajun", + "precision": 12, + "priceId": "ajuna-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BAJU.svg", + "color": "69A6DA", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc-parachain.ajuna.network", + "name": "AjunaNetwork node" + }, + { + "url": "wss://ajuna.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bajun.svg", + "addressPrefix": 1328 + }, + { + "disabled": false, + "chainId": "c14597baeccb232d662770d2d50ae832ca8c3192693d2b0814e6433f2888ddd6", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2048", + "name": "Bitgreen", + "ecosystem": "substrate", + "assets": [ + { + "id": "26c62511-6300-41ef-b760-c94dd6b0f8a5", + "name": "bitgreen", + "symbol": "bbb", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BBB.svg", + "color": "C0FF00", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://mainnet.bitgreen.org", + "name": "Bitgreen node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Bitgreen.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "4319cc49ee79495b57a1fec4d2bd43f59052dcc690276de566c2691d6df4f7b8", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2008", + "name": "Crust", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://crust-parachain.subscan.io/{type}/{value}" + } + ], + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-crust" + } + }, + "assets": [ + { + "id": "07ad91ea-1cb6-47dd-bc57-0e884727c5bf", + "name": "crust network", + "symbol": "cru", + "precision": 12, + "priceId": "crust-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRU.svg", + "color": "FA8C16", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://crust-parachain.crustapps.net", + "name": "Crust node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Crust.svg", + "addressPrefix": 88 + }, + { + "disabled": false, + "chainId": "4a587bf17a404e3572747add7aab7bbe56e805a5479c6c436f07f36fcc8d3ae1", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2091", + "name": "Frequency", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/frequency" + } + }, + "assets": [ + { + "id": "598af8e7-c0ad-4785-80cf-669705c93dd9", + "name": "frequency", + "symbol": "frqcy", + "precision": 8, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/FRQCY.svg", + "color": "4473EC", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://api-frequency.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://0.rpc.frequency.xyz", + "name": "Frequency 0 node" + }, + { + "url": "wss://1.rpc.frequency.xyz", + "name": "Frequency 1 node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Frequency.svg", + "addressPrefix": 90 + }, + { + "disabled": true, + "chainId": "7838c3c774e887c0a53bcba9e64f702361a1a852d5550b86b58cd73827fa1e1e", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2007", + "name": "Kapex", + "ecosystem": "substrate", + "assets": [ + { + "id": "a99dd750-0c15-49df-a86f-6caa577614bc", + "name": "kapex parachain", + "symbol": "kpx", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KPX.svg", + "color": "306EB6", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kapex-rpc.dwellir.com", + "name": "Dwellir node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Kapex%20(Totem).svg", + "addressPrefix": 2007 + }, + { + "disabled": false, + "chainId": "5d3c298622d5634ed019bf61ea4b71655030015bde9beb0d6a24743714462c86", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "rank": 10, + "paraId": "2094", + "name": "Pendulum", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "giantsquid", + "url": "https://squid-pendulum-api.squid.tachi.soramitsu.co.jp/graphql" + } + }, + "assets": [ + { + "id": "ebf2822f-2dd4-4f59-aeb3-ae7defa53932", + "name": "pendulum", + "symbol": "pen", + "precision": 12, + "priceId": "pendulum-chain", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PEN.svg", + "color": "8D809E", + "isUtility": true, + "type": "normal" + }, + { + "id": "bc55b3f0-2b34-4561-aeb6-bd4ca9c88b7e", + "type": "xcm", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "currencyId": "1", + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "existentialDeposit": "10000" + }, + { + "id": "a54675c6-83de-4f11-84ee-b8cd1754e512", + "type": "xcm", + "name": "moonbeam", + "symbol": "glmr", + "precision": 18, + "currencyId": "6", + "priceId": "moonbeam", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/GLMR.svg", + "color": "FFFFFF" + }, + { + "id": "6578b36f-eed9-4e60-bbd9-def276266957", + "type": "xcm", + "name": "usd coin", + "symbol": "usdc", + "precision": 6, + "currencyId": "2", + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4" + }, + { + "id": "1463120c-42c8-499d-a16f-8fcb9f1ee58c", + "type": "xcm", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "currencyId": "0", + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066" + }, + { + "id": "1070de6d-0bb9-4159-8852-ced84ff7ad10", + "type": "xcm", + "name": "brazilian digital", + "symbol": "brz", + "precision": 18, + "currencyId": "4", + "priceId": "brz", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BRZ.svg", + "color": "14B23D" + }, + { + "id": "cdfd0d0e-f19a-4636-8823-3d3b4efcff03", + "type": "xcm", + "name": "pink", + "symbol": "pink", + "precision": 10, + "currencyId": "7", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PINK.svg", + "color": "FF0066" + }, + { + "id": "a1a2523b-e151-49ed-a42e-73c67e964067", + "type": "xcm", + "name": "hydradx", + "symbol": "hdx", + "precision": 12, + "currencyId": "8", + "priceId": "hydradx", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HDX.svg", + "color": "FFFFFF" + }, + { + "id": "b890fc17-a609-4d79-a45e-2bb6e59f82c0", + "type": "xcm", + "name": "voucher dot", + "symbol": "vdot", + "precision": 10, + "currencyId": "10", + "priceId": "voucher-dot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/vDOT.svg", + "color": "E6007A" + }, + { + "id": "3af48a15-5358-4616-bca5-14cca9c5b0dc", + "type": "xcm", + "name": "astar", + "symbol": "astr", + "precision": 18, + "currencyId": "9", + "priceId": "astar", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ASTR.svg", + "color": "0AE2FF" + }, + { + "id": "579b7f7f-330f-43a4-b2f0-c890bd97c92d", + "type": "xcm", + "name": "bifrost native coin", + "symbol": "bnc", + "precision": 12, + "currencyId": "11", + "priceId": "bifrost-native-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNC.svg", + "color": "FFFFFF" + }, + { + "id": "ce9aebd0-c1f6-4ddf-b3a0-65fce4c556e5", + "type": "xcm", + "name": "axelar bridged usdc", + "symbol": "usdc.axl", + "precision": 6, + "currencyId": "12", + "priceId": "axelar-bridged-usdc-cosmos", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC_AXL.svg", + "color": "3E73C4" + } + ], + "nodes": [ + { + "url": "wss://api-pendulum.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc-pendulum.prd.pendulumchain.tech", + "name": "PendulumChain node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Pendulum.svg", + "addressPrefix": 56, + "options": [ + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "6859c81ca95ef624c9dfe4dc6e3381c33e5d6509e35e147092bfbc780f777c4e", + "name": "Ternoa Mainnet", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-ternoa" + }, + "staking": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-ternoa" + } + }, + "assets": [ + { + "id": "2e447cea-6fe1-4b08-8a97-94cc2ee622a6", + "name": "ternoa", + "symbol": "caps", + "precision": 18, + "priceId": "coin-capsule", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CAPS.svg", + "color": "FF002B", + "isUtility": true, + "type": "normal", + "staking": "relaychain" + } + ], + "nodes": [ + { + "url": "wss://mainnet.ternoa.network", + "name": "CapsuleCorp node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Ternoa.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "6d8d9f145c2177fa83512492cdd80a71e29f22473f4a8943a6292149ac319fb9", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "2011", + "name": "SORA Kusama parachain", + "ecosystem": "substrate", + "assets": [ + { + "id": "2df458e8-c4a9-4026-986f-8962a36fe604", + "name": "sora", + "symbol": "xor", + "precision": 12, + "priceId": "sora", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", + "color": "EE2233", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://ws.parachain-collator-1.c1.sora2.soramitsu.co.jp", + "name": "Soramitsu node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", + "addressPrefix": 420 + }, + { + "disabled": false, + "chainId": "e92d165ad41e41e215d09713788173aecfdbe34d3bed29409d33a2ef03980738", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "2025", + "name": "SORA Polkadot parachain", + "ecosystem": "substrate", + "assets": [ + { + "id": "a7c696d7-42ce-4ed6-a036-4f0f76386c49", + "name": "sora", + "symbol": "xor", + "precision": 18, + "priceId": "sora", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", + "color": "EE2233", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://ws.parachain-collator-1.pc1.sora2.soramitsu.co.jp", + "name": "Soramitsu node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", + "addressPrefix": 81 + }, + { + "disabled": false, + "chainId": "1", + "rank": 1, + "name": "Ethereum", + "ecosystem": "ethereum", + "externalApi": { + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://etherscan.io/{type}/{value}" + } + ], + "history": { + "type": "etherscan", + "url": "https://api.etherscan.io/api" + } + }, + "assets": [ + { + "isUtility": true, + "id": "c2a6c062-d511-4bde-9ce6-ea775d2a302c", + "name": "ethereum", + "symbol": "eth", + "precision": 18, + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "FF0066", + "ethereumType": "normal", + "priceProvider": { + "type": "chainlink", + "id": "0x639fe6ab55c921f74e7fac1ee960c0b6293ba612", + "precision": 8 + } + }, + { + "isUtility": false, + "id": "0x6B175474E89094C44Da98b954EedeAC495271d0F", + "name": "dai stablecoin", + "symbol": "dai", + "precision": 18, + "priceId": "dai", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", + "color": "FF0066", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", + "name": "usd coin", + "symbol": "usdc", + "precision": 6, + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9", + "name": "aave", + "symbol": "aave", + "precision": 18, + "priceId": "aave", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AAVE.svg", + "color": "B6509E", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xD533a949740bb3306d119CC777fa900bA034cd52", + "name": "curve dao", + "symbol": "crv", + "precision": 18, + "priceId": "curve-dao-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRV.svg", + "color": "B6509E", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984", + "name": "uniswap", + "symbol": "uni", + "precision": 18, + "priceId": "uniswap", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UNI.svg", + "color": "FF007A", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x514910771AF9Ca656af840dff83E8264EcF986CA", + "name": "chainlink", + "symbol": "link", + "precision": 18, + "priceId": "chainlink", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LINK.svg", + "color": "FFFFFF", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x111111111117dC0aa78b770fA6A738034120C302", + "name": "1inch", + "symbol": "1inch", + "precision": 18, + "priceId": "1inch", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/1INCH.svg", + "color": "FFFFFF", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xB8c77482e45F1F44dE1745F52C74426C631bDD52", + "name": "bnb", + "symbol": "bnb", + "precision": 18, + "priceId": "binancecoin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", + "color": "F3BA2F", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x455e53CBB86018Ac2B8092FdCd39d8444aFFC3F6", + "name": "polygon ecosystem token", + "symbol": "pol", + "precision": 18, + "priceId": "polygon-ecosystem-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/POL.svg", + "color": "A229C5", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x40FD72257597aA14C7231A7B1aaa29Fce868F677", + "name": "sora", + "symbol": "xor", + "precision": 18, + "priceId": "sora", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", + "color": "EE2233", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xe88f8313e61A97cEc1871EE37fBbe2a8bf3ed1E4", + "name": "sora validator", + "symbol": "val", + "precision": 18, + "priceId": "sora-validator-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VAL.svg", + "color": "F3B966", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x519C1001D550C0a1DaE7d1fC220f7d14c2A521BB", + "name": "polkaswap", + "symbol": "pswap", + "precision": 18, + "priceId": "polkaswap", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/PSWAP.svg", + "color": "FF0066", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x2e7B0d4F9B2EaF782eD3D160e3a0a4b1a7930aDA", + "name": "ceres", + "symbol": "ceres", + "precision": 18, + "priceId": "ceres", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CERES.svg", + "color": "243579", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x32a7C02e79c4ea1008dD6564b35F131428673c41", + "name": "crust network", + "symbol": "cru", + "precision": 18, + "priceId": "crust-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRU.svg", + "color": "FA8C16", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x3845badAde8e6dFF049820680d1F14bD3903a5d0", + "name": "the sandbox", + "symbol": "sand", + "precision": 18, + "priceId": "sand", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/SAND.svg", + "color": "4AA4EB", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x236501327e701692a281934230AF0b6BE8Df3353", + "name": "fluence", + "symbol": "flt", + "precision": 18, + "priceId": "fluence-2", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/FLT.svg", + "color": "FFFFFF", + "ethereumType": "erc20" + } + ], + "nodes": [ + { + "url": "https://eth-mainnet.blastapi.io/", + "name": "Blast https" + }, + { + "url": "https://ethereum.publicnode.com", + "name": "Public https" + }, + { + "url": "https://nodes.mewapi.io/rpc/eth", + "name": "MEW https" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Ethereum.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "nft", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "56", + "rank": 2, + "name": "BNB Smart Chain", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "etherscan", + "url": "https://api.bscscan.com/api" + }, + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://bscscan.com/{type}/{value}" + } + ] + }, + "assets": [ + { + "isUtility": true, + "id": "6e43f1b7-1ec3-48a7-8ecd-8d680578d2b8", + "name": "BNB", + "symbol": "BNB", + "precision": 18, + "priceId": "binancecoin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", + "color": "FF0066", + "ethereumType": "normal", + "priceProvider": { + "type": "chainlink", + "id": "0x6970460aabF80C5BE983C6b74e5D06dEDCA95D4A", + "precision": 8 + } + }, + { + "isUtility": false, + "id": "0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3", + "name": "DAI", + "symbol": "DAI", + "precision": 18, + "priceId": "dai", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", + "color": "FF0066", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x2170Ed0880ac9A755fd29B2688956BD959F933F8", + "name": "ethereum", + "symbol": "eth", + "precision": 18, + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "FF0066", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d", + "name": "usd coin", + "symbol": "usdc", + "precision": 18, + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56", + "name": "binance usd", + "symbol": "busd", + "precision": 18, + "priceId": "binance-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", + "color": "F3BA2F", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0x40af3827F39D0EAcBF4A168f8D4ee67c121D11c9", + "name": "trueusd", + "symbol": "tusd", + "precision": 18, + "priceId": "true-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUSD.svg", + "color": "005ADD", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0xCC42724C6683B7E57334c4E856f4c9965ED682bD", + "name": "polygon", + "symbol": "matic", + "precision": 18, + "priceId": "matic-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", + "color": "8247E5", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82", + "name": "pancakeswap", + "symbol": "cake", + "precision": 18, + "priceId": "pancakeswap-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CAKE.svg", + "color": "D1884F", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0x965F527D9159dCe6288a2219DB51fc6Eef120dD1", + "name": "biswap", + "symbol": "bsw", + "precision": 18, + "priceId": "biswap", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BSW.svg", + "color": "E42648", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0xa260E12d2B924cb899AE80BB58123ac3fEE1E2F0", + "name": "hooked protocol", + "symbol": "hook", + "precision": 18, + "priceId": "hooked-protocol", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HOOK.svg", + "color": "048EC8", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0xcF6BB5389c92Bdda8a3747Ddb454cB7a64626C63", + "name": "venus", + "symbol": "xvs", + "precision": 18, + "priceId": "venus", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XVS.svg", + "color": "048EC8", + "ethereumType": "bep20" + }, + { + "isUtility": false, + "id": "0xF21768cCBC73Ea5B6fd3C687208a7c2def2d966e", + "name": "reef", + "symbol": "reef", + "precision": 18, + "priceId": "reef", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/REEF.svg", + "color": "C547CB", + "ethereumType": "bep20" + } + ], + "nodes": [ + { + "url": "https://bsc.publicnode.com", + "name": "Public https" + }, + { + "url": "wss://bsc.publicnode.com", + "name": "Public wss" + }, + { + "url": "https://bsc-mainnet.blastapi.io/", + "name": "Blast https" + }, + { + "url": "wss://bsc-mainnet.blastapi.io/", + "name": "Blast wss" + }, + { + "url": "https://bsc-dataseed1.ninicoin.io/", + "name": "Ninicoin" + }, + { + "url": "https://bsc.nodereal.io/", + "name": "Nodereal" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/bnbchain.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "137", + "rank": 3, + "name": "Polygon", + "ecosystem": "ethereum", + "externalApi": { + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://polygonscan.com/{type}/{value}" + } + ], + "history": { + "type": "etherscan", + "url": "https://api.polygonscan.com/api" + } + }, + "assets": [ + { + "isUtility": true, + "id": "0x0000000000000000000000000000000000001010", + "name": "polygon ecosystem token", + "symbol": "pol", + "precision": 18, + "priceId": "polygon-ecosystem-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/POL.svg", + "color": "A229C5", + "ethereumType": "normal", + "priceProvider": { + "type": "chainlink", + "id": "0x52099d4523531f678dfc568a7b1e5038aadce1d6", + "precision": 8 + } + }, + { + "isUtility": false, + "id": "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619", + "name": "weth", + "symbol": "weth", + "precision": 18, + "priceId": "weth", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/WETH.svg", + "color": "FFFFFF", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", + "name": "usd coin", + "symbol": "usdc", + "precision": 6, + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xc2132D05D31c914a87C6611C10748AEb04B58e8F", + "name": "tether usd", + "symbol": "usdt", + "precision": 6, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x3BA4c387f786bFEE076A58914F5Bd38d668B42c3", + "name": "bnb", + "symbol": "bnb", + "precision": 18, + "priceId": "binancecoin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", + "color": "F3BA2F", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xdAb529f40E671A1D4bF91361c21bf9f0C9712ab7", + "name": "binance usd", + "symbol": "busd", + "precision": 18, + "priceId": "binance-usd", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", + "color": "F3BA2F", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063", + "name": "dai", + "symbol": "dai", + "precision": 18, + "priceId": "dai", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", + "color": "F9AF1A", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xD6DF932A45C0f255f85145f286eA0b292B21C90B", + "name": "aave", + "symbol": "aave", + "precision": 18, + "priceId": "aave", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AAVE.svg", + "color": "B6509E", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x172370d5Cd63279eFa6d502DAB29171933a610AF", + "name": "curve dao", + "symbol": "crv", + "precision": 18, + "priceId": "curve-dao-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRV.svg", + "color": "B6509E", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xb33EaAd8d922B1083446DC23f610c2567fB5180f", + "name": "uniswap", + "symbol": "uni", + "precision": 18, + "priceId": "uniswap", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UNI.svg", + "color": "FF007A", + "ethereumType": "erc20" + } + ], + "nodes": [ + { + "url": "https://polygon-mainnet.blastapi.io/", + "name": "Blast https" + }, + { + "url": "wss://polygon-mainnet.blastapi.io/", + "name": "Blast wss" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polygon.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "nft", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "3af4ff48ec76d2efc8476730f423ac07e25ad48f5f4c9dc39c778b164d808615", + "parentId": "d8761d3c88f26dc12875c00d3165f7d67243d56fc85b4cf19937601a7916e5a9", + "name": "Enjin Matrixchain", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://matrix.subscan.io/{type}/{value}" + } + ], + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/enjin-matrixchain" + } + }, + "assets": [ + { + "id": "13c8d9cb-897b-4507-8ae7-ba2c219d270d", + "name": "enjin coin", + "symbol": "enj", + "precision": 18, + "priceId": "enjincoin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ENJ.svg", + "color": "5A27ED", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc.matrix.blockchain.enjin.io", + "name": "Enjin Foundation node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Enjin.svg", + "addressPrefix": 1110 + }, + { + "disabled": false, + "chainId": "a37725fd8943d2a524cb7ecc65da438f9fa644db78ba24dcd0003e2f95645e8f", + "name": "Canary Matrixchain", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://canary-matrix.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "85c17bd8-2565-4cf3-8e0f-14f38ff55eee", + "name": "enjin coin", + "symbol": "cenj", + "precision": 18, + "priceId": "enjincoin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ENJ.svg", + "color": "5A27ED", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc.matrix.canary.enjin.io", + "name": "Enjin Foundation node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Enjin.svg", + "addressPrefix": 9030, + "options": [ + "testnet" + ] + }, + { + "disabled": true, + "chainId": "d8761d3c88f26dc12875c00d3165f7d67243d56fc85b4cf19937601a7916e5a9", + "name": "Enjin Relaychain", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://enjin.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "43748d94-90ba-41b2-8732-326cd943a501", + "name": "enjin coin", + "symbol": "enj", + "precision": 18, + "priceId": "enjincoin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ENJ.svg", + "color": "5A27ED", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc.relay.blockchain.enjin.io", + "name": "Enjin Foundation node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Enjin.svg", + "addressPrefix": 2135 + }, + { + "disabled": false, + "chainId": "42161", + "rank": 4, + "name": "Arbitrum One", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "oklink", + "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=ARBITRUM" + }, + "explorers": [ + { + "type": "oklink", + "types": [ + "tx", + "address" + ], + "url": "https://www.okx.com/web3/explorer/arbitrum/{type}/{value}?channelID=flessw" + } + ] + }, + "assets": [ + { + "isUtility": true, + "id": "37b6375a-0708-4728-bec9-bf15b8680aff", + "name": "ethereum", + "symbol": "eth", + "precision": 18, + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "FF0066", + "ethereumType": "normal" + }, + { + "isUtility": false, + "id": "0x912CE59144191C1204E64559FE8253a0e49E6548", + "name": "arbitrum", + "symbol": "arb", + "precision": 18, + "priceId": "arbitrum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ARB.svg", + "color": "12AAFF", + "ethereumType": "erc20" + } + ], + "nodes": [ + { + "url": "https://arbitrum-one.publicnode.com/", + "name": "Public http node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Arbitrum.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "chainlinkProvider", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "10", + "rank": 5, + "name": "OP Mainnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "oklink", + "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=OP" + }, + "explorers": [ + { + "type": "oklink", + "types": [ + "tx", + "address" + ], + "url": "https://www.okx.com/web3/explorer/optimism/{type}/{value}?channelID=flessw" + } + ] + }, + "assets": [ + { + "isUtility": true, + "id": "08bb34b8-8027-4fea-948d-5243f5cbd6ba", + "name": "ethereum", + "symbol": "eth", + "precision": 18, + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "FF0066", + "ethereumType": "normal" + }, + { + "isUtility": false, + "id": "0x4200000000000000000000000000000000000042", + "name": "optimism", + "symbol": "op", + "precision": 18, + "priceId": "optimism", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OP.svg", + "color": "FF0420", + "ethereumType": "erc20" + } + ], + "nodes": [ + { + "url": "https://optimism-mainnet.blastapi.io/", + "name": "Blast https node" + }, + { + "url": "wss://optimism-mainnet.blastapi.io/", + "name": "Blast wss node" + }, + { + "url": "https://optimism.publicnode.com/", + "name": "Public http node" + }, + { + "url": "wss://optimism.publicnode.com/", + "name": "Public wss node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Optimism.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "43114", + "rank": 6, + "name": "Avalanche C-Chain", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "oklink", + "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=AVAXC" + }, + "explorers": [ { - "isUtility": false, - "id": "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56", - "name": "binance usd", - "symbol": "busd", - "precision": 18, - "priceId": "binance-usd", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", - "color": "F3BA2F", - "type": "normal", - "ethereumType": "bep20" - }, + "type": "oklink", + "types": [ + "tx", + "address" + ], + "url": "https://www.okx.com/web3/explorer/avax/{type}/{value}?channelID=flessw" + } + ] + }, + "assets": [ + { + "isUtility": true, + "id": "870f6877-c917-48bc-aa64-723416c94ebb", + "name": "avalanche", + "symbol": "avax", + "precision": 18, + "priceId": "avalanche-2", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AVAX.svg", + "color": "E84142", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://avalanche-c-chain.publicnode.com/", + "name": "Public https node" + }, + { + "url": "wss://avalanche-c-chain.publicnode.com/ext/bc/C/ws", + "name": "Public wss node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Avalanche.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "1101", + "rank": 7, + "name": "Polygon zkEVM", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "oklink", + "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=POLYGON_ZKEVM" + }, + "explorers": [ { - "isUtility": false, - "id": "0x40af3827F39D0EAcBF4A168f8D4ee67c121D11c9", - "name": "trueusd", - "symbol": "tusd", - "precision": 18, - "priceId": "true-usd", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TUSD.svg", - "color": "005ADD", - "type": "normal", - "ethereumType": "bep20" - }, + "type": "oklink", + "types": [ + "tx", + "address" + ], + "url": "https://www.okx.com/web3/explorer/polygon-zkevm/{type}/{value}?channelID=flessw" + } + ] + }, + "assets": [ + { + "isUtility": true, + "id": "8f85b561-18f5-4cf0-9077-305ebc84d015", + "name": "ethereum", + "symbol": "eth", + "precision": 18, + "priceId": "ethereum", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", + "color": "FF0066", + "ethereumType": "normal" + }, + { + "isUtility": false, + "id": "0xA8CE8aee21bC2A48a5EF670afCc9274C7bbbC035", + "name": "usd coin", + "symbol": "usdc", + "precision": 6, + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0xa2036f0538221a77A3937F1379699f44945018d0", + "name": "polygon", + "symbol": "matic", + "precision": 18, + "priceId": "matic-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", + "color": "8247E5", + "ethereumType": "erc20" + }, + { + "isUtility": false, + "id": "0x22b21beddef74fe62f031d2c5c8f7a9f8a4b304d", + "name": "polygon ecosystem token", + "symbol": "pol", + "precision": 18, + "priceId": "polygon-ecosystem-token", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/POL.svg", + "color": "A229C5", + "ethereumType": "erc20" + } + ], + "nodes": [ + { + "url": "https://zkevm-rpc.com", + "name": "Zkevm https node" + }, + { + "url": "https://polygon-zkevm-mainnet.public.blastapi.io", + "name": "Blast https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polygon.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "7001", + "name": "ZetaChain Testnet", + "ecosystem": "ethereum", + "assets": [ + { + "isUtility": true, + "id": "0f07791b-b091-49c1-81b7-9facba2b7db3", + "name": "zetachain", + "symbol": "zeta", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZETA.svg", + "color": "235643", + "ethereumType": "normal" + } + ], + "externalApi": { + "history": { + "type": "blockscout", + "url": "https://zetachain-athens-3.blockscout.com/api/v2/" + } + }, + "nodes": [ + { + "url": "https://rpc.ankr.com/zetachain_evm_athens_testnet", + "name": "Ankr https node" + }, + { + "url": "https://zetachain-athens-evm.blockpi.network/v1/rpc/public", + "name": "Blockpi https node" + }, + { + "url": "https://zetachain-testnet-evm.itrocket.net", + "name": "Itrocket https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Zetachain.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "7834781d38e4798d548e34ec947d19deea29df148a7bf32484b7b24dacf8d4b7", + "name": "Reef Mainnet", + "ecosystem": "substrate", + "assets": [ + { + "id": "55697eb0-ca77-47e3-a436-b05460ab1ead", + "name": "reef", + "symbol": "reef", + "precision": 18, + "priceId": "reef", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/REEF.svg", + "color": "C547CB", + "isUtility": true, + "type": "normal", + "staking": "relaychain" + } + ], + "externalApi": { + "history": { + "type": "reef", + "url": "https://squid.subsquid.io/reef-explorer/graphql" + }, + "staking": { + "type": "reef", + "url": "https://squid.subsquid.io/reef-explorer/graphql" + }, + "explorers": [ { - "isUtility": false, - "id": "0xCC42724C6683B7E57334c4E856f4c9965ED682bD", - "name": "polygon", - "symbol": "matic", - "precision": 18, - "priceId": "matic-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", - "color": "8247E5", - "type": "normal", - "ethereumType": "bep20" - }, + "type": "reef", + "types": [ + "transfer", + "extrinsic", + "account" + ], + "url": "https://reefscan.com/{type}/{value}" + } + ] + }, + "nodes": [ + { + "url": "wss://rpc.reefscan.com/ws", + "name": "Reef Community node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/reefchain.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "f3c7ad88f6a80f366c4be216691411ef0622e8b809b1046ea297ef106058d4eb", + "name": "Manta Parachain", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ { - "isUtility": false, - "id": "0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82", - "name": "pancakeswap", - "symbol": "cake", - "precision": 18, - "priceId": "pancakeswap-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CAKE.svg", - "color": "D1884F", - "type": "normal", - "ethereumType": "bep20" - }, + "type": "subscan", + "types": [ + "extrinsic", + "account" + ], + "url": "https://manta.subscan.io/{type}/{value}" + } + ], + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet---manta" + } + }, + "assets": [ + { + "id": "0c41f3da-3c42-413a-aca3-bfb19b717df7", + "name": "manta", + "symbol": "manta", + "precision": 18, + "priceId": "manta-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MANTA.svg", + "color": "29CCB9", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://ws.manta.systems", + "name": "Manta Community node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/mantachain.svg", + "addressPrefix": 77 + }, + { + "disabled": false, + "chainId": "6bd89e052d67a45bb60a9a23e8581053d5e0d619f15cb9865946937e690c42d6", + "name": "Liberland", + "ecosystem": "substrate", + "assets": [ + { + "id": "a6b83d39-a488-4b34-8352-280705a792ea", + "name": "liberland dollar", + "symbol": "lld", + "precision": 12, + "priceId": "liberland-lld", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLD.svg", + "color": "00437F", + "isUtility": true, + "type": "normal" + }, + { + "id": "30b43eb9-36b4-4b40-bf72-330d2e20ee86", + "name": "liberland merit", + "symbol": "llm", + "precision": 12, + "currencyId": "1", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLM.svg", + "color": "EFB900", + "type": "assets", + "priceProvider": { + "type": "sorasubquery", + "id": "0x00073edd278e1bd6a7f9d0b27d4f3e93b73c8f0832b58a4df13c69611a99f156" + } + }, + { + "id": "2e7179c9-4308-420e-a654-43c92d119717", + "name": "sora xor", + "symbol": "xor", + "priceId": "sora", + "precision": 18, + "currencyId": "774441749", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", + "color": "EE2233", + "type": "assets", + "priceProvider": { + "type": "sorasubquery", + "id": "0x0200000000000000000000000000000000000000000000000000000000000000" + } + } + ], + "xcm": { + "xcmVersion": "v3", + "availableAssets": [ { - "isUtility": false, - "id": "0x965F527D9159dCe6288a2219DB51fc6Eef120dD1", - "name": "biswap", - "symbol": "bsw", - "precision": 18, - "priceId": "biswap", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BSW.svg", - "color": "E42648", - "type": "normal", - "ethereumType": "bep20" + "id": "a6b83d39-a488-4b34-8352-280705a792e", + "symbol": "LLD" }, { - "isUtility": false, - "id": "0xa260E12d2B924cb899AE80BB58123ac3fEE1E2F0", - "name": "hooked protocol", - "symbol": "hook", - "precision": 18, - "priceId": "hooked-protocol", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/HOOK.svg", - "color": "048EC8", - "type": "normal", - "ethereumType": "bep20" + "id": "30b43eb9-36b4-4b40-bf72-330d2e20ee86", + "symbol": "LLM" }, { - "isUtility": false, - "id": "0xcF6BB5389c92Bdda8a3747Ddb454cB7a64626C63", - "name": "venus", - "symbol": "xvs", - "precision": 18, - "priceId": "venus", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XVS.svg", - "color": "048EC8", - "type": "normal", - "ethereumType": "bep20" + "id": "2e7179c9-4308-420e-a654-43c92d119717", + "symbol": "XOR" } - ], - "nodes": [ - { - "url": "https://bsc-mainnet.blastapi.io/", - "name": "Blast https" - }, - { - "url": "wss://bsc-mainnet.blastapi.io/", - "name": "Blast wss" - }, - { - "url": "https://bsc-dataseed1.ninicoin.io/", - "name": "Ninicoin" - }, - { - "url": "https://bsc.nodereal.io/", - "name": "Nodereal" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/bnbchain.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "97", - "rank": 102, - "name": "BNB Smart Chain Testnet", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://api-testnet.bscscan.com/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://testnet.bscscan.com/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "49e67f26-e01b-4aeb-b741-f0bd727c51e4", - "name": "tBNB", - "symbol": "tBNB", - "precision": 18, - "priceId": "binancecoin", - "color": "FF0066", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", - "type": "normal", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0xEC5dCb5Dbf4B114C9d0F65BcCAb49EC54F6A0867", - "name": "DAI", - "symbol": "DAI", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "bep20" - } - ], - "nodes": [ - { - "url": "https://bsc-testnet.blastapi.io/", - "name": "Blast https" - }, - { - "url": "wss://bsc-testnet.blastapi.io/", - "name": "Blast wss" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/bnbchain.svg", - "addressPrefix": 0, - "options": [ - "testnet", - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "11155111", - "name": "Sepolia", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://api-sepolia.etherscan.io/api" - }, - "explorers": [{ - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://sepolia.etherscan.io/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "c2a6c062-d511-4bde-9ce6-ea775d2a302s", - "name": "sepolia eth", - "symbol": "seth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0x7AF17A48a6336F7dc1beF9D485139f7B6f4FB5C8", - "name": "dai stablecoin", - "symbol": "dai", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "erc20" - } - ], - "nodes": [ - { - "url": "https://eth-sepolia.blastapi.io/", - "name": "Blast https" - }, - { - "url" : "wss://eth-sepolia.blastapi.io/", - "name": "Blast wss" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "addressPrefix": 0, - "options": [ - "testnet", - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "137", - "rank": 3, - "name": "Polygon", - "externalApi": { - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://polygonscan.com/{type}/{value}" - } - ], - "history": { - "type": "etherscan", - "url": "https://api.polygonscan.com/api" - } - }, + ], + "availableDestinations": [ + { + "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", "assets": [ - { - "isUtility": true, - "id": "0x0000000000000000000000000000000000001010", - "name": "polygon", - "symbol": "matic", - "precision": 18, - "priceId": "matic-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", - "color": "8247E5", - "type": "normal", - "ethereumType": "normal", - "priceProvider": { - "type": "chainlink", - "id": "0x52099d4523531f678dfc568a7b1e5038aadce1d6", - "precision": 8 - } - }, - { - "isUtility": false, - "id": "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619", - "name": "weth", - "symbol": "weth", - "precision": 18, - "priceId": "weth", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/WETH.svg", - "color": "FFFFFF", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", - "name": "usd coin", - "symbol": "usdc", - "precision": 6, - "priceId": "usd-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xc2132D05D31c914a87C6611C10748AEb04B58e8F", - "name": "tether usd", - "symbol": "usdt", - "precision": 6, - "priceId": "tether", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", - "color": "26A17B", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x3BA4c387f786bFEE076A58914F5Bd38d668B42c3", - "name": "bnb", - "symbol": "bnb", - "precision": 18, - "priceId": "binancecoin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BNB.svg", - "color": "F3BA2F", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0xdAb529f40E671A1D4bF91361c21bf9f0C9712ab7", - "name": "binance usd", - "symbol": "busd", - "precision": 18, - "priceId": "binance-usd", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/BUSD.svg", - "color": "F3BA2F", - "type": "normal", - "ethereumType": "erc20" - }, - { - "isUtility": false, - "id": "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063", - "name": "dai", - "symbol": "dai", - "precision": 18, - "priceId": "dai", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", - "color": "F9AF1A", - "type": "normal", - "ethereumType": "erc20" - }, { - "isUtility": false, - "id": "0xD6DF932A45C0f255f85145f286eA0b292B21C90B", - "name": "aave", - "symbol": "aave", - "precision": 18, - "priceId": "aave", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AAVE.svg", - "color": "B6509E", - "type": "normal", - "ethereumType": "erc20" + "id": "a6b83d39-a488-4b34-8352-280705a792e", + "symbol": "LLD", + "minAmount": "1000000000000" }, { - "isUtility": false, - "id": "0x172370d5Cd63279eFa6d502DAB29171933a610AF", - "name": "curve dao", - "symbol": "crv", - "precision": 18, - "priceId": "curve-dao-token", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CRV.svg", - "color": "B6509E", - "type": "normal", - "ethereumType": "erc20" + "id": "30b43eb9-36b4-4b40-bf72-330d2e20ee86", + "symbol": "LLM" }, { - "isUtility": false, - "id": "0xb33EaAd8d922B1083446DC23f610c2567fB5180f", - "name": "uniswap", - "symbol": "uni", - "precision": 18, - "priceId": "uniswap", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/UNI.svg", - "color": "FF007A", - "type": "normal", - "ethereumType": "erc20" + "id": "2e7179c9-4308-420e-a654-43c92d119717", + "symbol": "XOR" } + ] + } + ] + }, + "nodes": [ + { + "url": "wss://mainnet.liberland.org", + "name": "Liberland node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/liberland.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "248", + "name": "Oasys Mainnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "etherscan", + "url": "https://explorer.oasys.games/api" + }, + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://explorer.oasys.games/{type}/{value}" + } + ] + }, + "assets": [ + { + "isUtility": true, + "id": "11d2ece1-ecae-4596-aae4-ee9db83a5e2a", + "name": "oasys", + "symbol": "oas", + "precision": 18, + "priceId": "oasys", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", + "color": "00A84F", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://oasys.blockpi.network/v1/rpc/public/", + "name": "Blockpi https node" + }, + { + "url": "https://rpc.mainnet.oasys.games/", + "name": "Oasys https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/oasys.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "72778", + "name": "CAGA Ankara Testnet", + "ecosystem": "ethereum", + "assets": [ + { + "isUtility": true, + "id": "a9270ef5-379a-4228-8d72-e6efb2b5f7b4", + "name": "caga", + "symbol": "caga", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CAGA.svg", + "color": "FFFFFF", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "wss://wss.ankara-cagacrypto.com", + "name": "Caga wss node" + }, + { + "url": "https://www.ankara-cagacrypto.com", + "name": "Caga https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/cagachain.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "50dd5d206917bf10502c68fb4d18a59fc8aa31586f4e8856b493e43544aa82aa", + "name": "XX network", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-xx-network" + } + }, + "assets": [ + { + "id": "526dca29-63ff-4683-88d6-852d1455b17b", + "name": "xx network", + "symbol": "xx", + "precision": 9, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XX.svg", + "priceId": "xxcoin", + "color": "0AC1C7", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://xxnetwork-rpc.dwellir.com", + "name": "Dwellir node" + }, + { + "url": "wss://rpc.xx.network", + "name": "xx Foundation node #1" + }, + { + "url": "wss://rpc-hetzner.xx.network", + "name": "xx Foundation node #2" + }, + { + "url": "wss://rpc-do.xx.network", + "name": "xx Foundation node #3" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/xxnetwork.svg", + "addressPrefix": 55 + }, + { + "disabled": false, + "chainId": "d3d2f3a3495dc597434a99d7d449ebad6616db45e4e4f178f31cc6fa14378b70", + "name": "Avail Turing Testnet", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { + "type": "subscan", + "types": [ + "extrinsic", + "account" ], - "nodes": [ - { - "url": "https://polygon-mainnet.blastapi.io/", - "name": "Blast https" - }, - { - "url" : "wss://polygon-mainnet.blastapi.io/", - "name": "Blast wss" - } + "url": "https://avail-turing.subscan.io/{type}/{value}" + } + ] + }, + "assets": [ + { + "id": "72778e65-53b6-4cb4-bb4c-c029121eb494", + "name": "avail token", + "symbol": "avail", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Avail.svg", + "color": "56E5FF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://turing-testnet.avail-rpc.com", + "name": "Ankr node" + }, + { + "url": "wss://avail-turing.public.blastapi.io", + "name": "Blast node" + }, + { + "url": "wss://avail-turing-rpc.publicnode.com", + "name": "AllNode node" + }, + { + "url": "wss://turing.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + }, + { + "url": "wss://avail-turing.bountyblok.io", + "name": "Bountyblok node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Avail.svg", + "addressPrefix": 42, + "options": [ + "checkAppId", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "196", + "rank": 13, + "name": "X Layer Mainnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "oklink", + "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=XLAYER" + }, + "explorers": [ + { + "type": "oklink", + "types": [ + "tx", + "address" ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polygon.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "nft", - "utilityFeePayment" - ] + "url": "https://www.okx.com/explorer/xlayer-test/{type}/{value}" + } + ] + }, + "assets": [ + { + "isUtility": true, + "id": "dcf40e8d-f041-45b8-8cc8-e5b95bedb86e", + "name": "okb", + "symbol": "okb", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XLOKB.svg", + "color": "FFFFFF", + "priceId": "okb", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://rpc.xlayer.tech/", + "name": "X Layer Tech https node" + }, + { + "url": "wss://ws.xlayer.tech/", + "name": "X Layer Tech wss node" }, { - "disabled": false, - "chainId": "80001", - "rank": 103, - "name": "Polygon mumbai testnet", - "externalApi": { - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://mumbai.polygonscan.com/{type}/{value}" - } - ], - "history": { - "type": "etherscan", - "url": "https://api-testnet.polygonscan.com/api" - } - }, - "assets": [ - { - "isUtility": true, - "id": "0x0000000000000000000000000000000000001010", - "name": "polygon", - "symbol": "matic", - "precision": 18, - "priceId": "matic", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", - "color": "8247E5", - "type": "normal", - "ethereumType": "normal" - } - ], - "nodes": [ - { - "url": "https://polygon-testnet.blastapi.io/", - "name": "Blast https" - }, - { - "url" : "wss://polygon-testnet.blastapi.io/", - "name": "Blast wss" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polygon.svg", - "addressPrefix": 0, - "options": [ - "testnet", - "ethereum", - "nft", - "utilityFeePayment" - ] + "url": "https://xlayerrpc.okx.com/", + "name": "X Layer OKX https node" + }, + { + "url": "wss://xlayerws.okx.com/", + "name": "X Layer OKX wss node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/xlayerchain.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "0614f7b74a2e47f7c8d8e2a5335be84bdde9402a43f5decdec03200a87c8b943", + "rank": 14, + "name": "Analog Testnet", + "ecosystem": "substrate", + "externalApi": { + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/soramitsu/analog-testnet__c29yY" + } + }, + "assets": [ + { + "id": "9a8799db-a479-4a73-ae81-3b637c8624d8", + "name": "tanlog", + "symbol": "tanlog", + "precision": 12, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TANLOG.svg", + "color": "9A74F7", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://rpc.testnet.analog.one", + "name": "Analog Testnet node" + } + ], + "options": [ + "utilityFeePayment" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Analog.svg", + "addressPrefix": 12850 + }, + { + "disabled": false, + "chainId": "c1af4cb4eb3918e5db15086c0cc5ec17fb334f728b7c65dd44bfe1e174ff8b3f", + "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "paraId": "1004", + "name": "Kusama People", + "ecosystem": "substrate", + "assets": [ + { + "id": "b54f9075-6364-4ad9-8ac2-ed8a604491fd", + "name": "kusama", + "symbol": "ksm", + "precision": 12, + "priceId": "kusama", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", + "color": "FFFFFF", + "isUtility": true, + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://kusama-people-rpc.polkadot.io", + "name": "Parity node" + }, + { + "url": "wss://ksm-rpc.stakeworld.io/people", + "name": "Stakeworld node" + } + ], + "options": [ + "identityChain" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/People.svg", + "addressPrefix": 2 + }, + { + "disabled": false, + "chainId": "67fa177a097bfa18f77ea95ab56e9bcdfeb0e5b8a40e46298bb93e16b6fc5008", + "parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "paraId": "1004", + "name": "Polkadot People", + "ecosystem": "substrate", + "assets": [ + { + "isUtility": true, + "id": "bb56f037-6f96-45e6-9b3c-c9059bf0f731", + "name": "polkadot", + "symbol": "dot", + "precision": 10, + "priceId": "polkadot", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", + "color": "FF0066", + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://sys.ibp.network/people-polkadot", + "name": "IBP1 node" }, { - "disabled": false, - "chainId": "6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e", - "rank": 109, - "name": "Rococo", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://rococo.subscan.io/{type}/{value}" - }] - }, - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b2", - "symbol": "ROC" - } - ], - "availableDestinations": [ - { - "chainId": "3266816be9fa51b32cfea58d3e33ca77246bc9618595a4300e44c8856a8d8a17", - "assets": [ - { - "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b2", - "symbol": "ROC" - } - ], - "bridgeParachainId" : "8685a8d3e57fa8024b91b8ead6cc97acf953889c6fb0a355602826a1e2db198f" - } - ] - }, - "assets": [ - { - "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b2", - "name": "rococo", - "symbol": "roc", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ROC.svg", - "color": "FFFFFF", - "type": "normal", - "isUtility": true - }], - "nodes": [ - { - "url": "wss://rococo-rpc.polkadot.io", - "name": "Parity node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Rococo.svg", - "addressPrefix": 42, - "options": [ - "testnet" - ] + "url": "wss://sys.dotters.network/people-polkadot", + "name": "IBP2 node" }, { - "disabled": false, - "chainId": "8685a8d3e57fa8024b91b8ead6cc97acf953889c6fb0a355602826a1e2db198f", - "parentId": "6408de7737c59c238890533af25896a2c20608d8b380bb01029acb392781063e", - "paraId": "2011", - "name": "SORA Rococo parachain", - "assets": [{ - "id": "b5a44630-920e-43ee-809f-61890d0888b0123", - "name": "sora", - "symbol": "rxor", - "currencyId": "0x0200000000000000000000000000000000000000000000000000000000000000", - "precision": 18, - "priceId": "sora", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", - "color": "EE2233", - "isUtility": true, - "type": "soraAsset" - }, - { - "id": "4d6baa42-c8ba-4c47-9992-2af0d55123b2123", - "name": "rococo", - "symbol": "roc", - "precision": 18, - "currencyId": "0x00dc9b4341fde46c9ac80b623d0d43afd9ac205baabdc087cadaa06f92b309c7", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/WND.svg", - "color": "FFFFFF", - "type": "soraAsset" - }], - "nodes": [{ - "url": "wss://ws.parachain-collator-1.c1.stg1.sora2.soramitsu.co.jp", - "name": "Soramitsu node" - }], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/SORA.svg", - "addressPrefix": 420, - "options": [ - "testnet" - ] + "url": "wss://rpc-people-polkadot.luckyfriday.io", + "name": "LuckyFriday node" }, { - "disabled": false, - "chainId": "3af4ff48ec76d2efc8476730f423ac07e25ad48f5f4c9dc39c778b164d808615", - "name": "Enjin Matrixchain", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://enjin.subscan.io//{type}/{value}" - }] - }, - "assets": [{ - "id": "13c8d9cb-897b-4507-8ae7-ba2c219d270d", - "name": "enjin coin", - "symbol": "enj", - "precision": 18, - "priceId": "enjincoin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ENJ.svg", - "color": "5A27ED", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc.matrix.blockchain.enjin.io", - "name": "Enjin Foundation node" - } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Enjin.svg", - "addressPrefix": 1110 + "url": "wss://polkadot-people-rpc.polkadot.io", + "name": "Parity node" }, { - "disabled": false, - "chainId": "a37725fd8943d2a524cb7ecc65da438f9fa644db78ba24dcd0003e2f95645e8f", - "parentId": "3af4ff48ec76d2efc8476730f423ac07e25ad48f5f4c9dc39c778b164d808615", - "name": "Canary Matrixchain", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://matrix.subscan.io///{type}/{value}" - }] - }, - "assets": [{ - "id": "85c17bd8-2565-4cf3-8e0f-14f38ff55eee", - "name": "enjin coin", - "symbol": "cenj", - "precision": 18, - "priceId": "enjincoin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ENJ.svg", - "color": "5A27ED", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc.matrix.canary.enjin.io", - "name": "Enjin Foundation node" - } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Enjin.svg", - "addressPrefix": 9030, - "options": [ - "testnet" - ] - }, - { - "disabled": false, - "chainId": "42161", - "rank": 4, - "name": "Arbitrum One", - "externalApi": { - "history": { - "type": "oklink", - "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=ARBITRUM" - }, - "explorers": [ - { - "type": "oklink", - "types": [ - "tx", - "address" - ], - "url": "https://www.okx.com/web3/explorer/arbitrum/{type}/{value}?channelID=flessw" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "37b6375a-0708-4728-bec9-bf15b8680aff", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0x912CE59144191C1204E64559FE8253a0e49E6548", - "name": "arbitrum", - "symbol": "arb", - "precision": 18, - "priceId": "arbitrum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ARB.svg", - "color": "12AAFF", - "type": "normal", - "ethereumType": "erc20" - } - ], - "nodes": [ - { - "url": "https://arbitrum-one.publicnode.com/", - "name": "Public http node" - }, - { - "url": "wss://arbitrum-one.publicnode.com/", - "name": "Public wss node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Arbitrum.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "chainlinkProvider", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "10", - "rank": 5, - "name": "OP Mainnet", - "externalApi": { - "history": { - "type": "oklink", - "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=OP" - }, - "explorers": [ - { - "type": "oklink", - "types": [ - "tx", - "address" - ], - "url": "https://www.okx.com/web3/explorer/optimism/{type}/{value}?channelID=flessw" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "08bb34b8-8027-4fea-948d-5243f5cbd6ba", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0x4200000000000000000000000000000000000042", - "name": "optimism", - "symbol": "op", - "precision": 18, - "priceId": "optimism", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OP.svg", - "color": "FF0420", - "type": "normal", - "ethereumType": "erc20" - } - ], - "nodes": [ - { - "url": "https://optimism-mainnet.blastapi.io/", - "name": "Blast https node" - }, - { - "url": "wss://optimism-mainnet.blastapi.io/", - "name": "Blast wss node" - }, - { - "url": "https://optimism.publicnode.com/", - "name": "Public http node" - }, - { - "url": "wss://optimism.publicnode.com/", - "name": "Public wss node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Optimism.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "43114", - "rank": 6, - "name": "Avalanche C-Chain", - "externalApi": { - "history": { - "type": "oklink", - "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=AVAXC" - }, - "explorers": [ - { - "type": "oklink", - "types": [ - "tx", - "address" - ], - "url": "https://www.okx.com/web3/explorer/avax/{type}/{value}?channelID=flessw" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "870f6877-c917-48bc-aa64-723416c94ebb", - "name": "avalanche", - "symbol": "avax", - "precision": 18, - "priceId": "avalanche-2", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AVAX.svg", - "color": "E84142", - "type": "normal", - "ethereumType": "normal" - } - ], - "nodes": [ - { - "url": "https://avalanche-c-chain.publicnode.com/", - "name": "Public https node" - }, - { - "url": "wss://avalanche-c-chain.publicnode.com/ext/bc/C/ws", - "name": "Public wss node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Avalanche.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "195", - "rank": 130, - "name": "X Layer Testnet", - "externalApi": { - "history": { - "type": "oklink", - "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=XLAYER_TESTNET" - }, - "explorers": [ - { - "type": "oklink", - "types": [ - "tx", - "address" - ], - "url": "https://www.okx.com/explorer/xlayer-test/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "a61b1842-30c0-431d-9bbc-fc3370562455", - "name": "okb", - "symbol": "okb", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XLOKB.svg", - "color": "FFFFFF", - "type": "normal", - "ethereumType": "normal" - } - ], - "nodes": [ - { - "url": "https://testrpc.xlayer.tech/", - "name": "X Layer Test Tech https node" - }, - { - "url": "wss://testws.xlayer.tech", - "name": "X Layer Test Tech wss node" - }, - { - "url": "https://xlayertestrpc.okx.com/", - "name": "X Layer Test OKX https node" - }, - { - "url": "wss://xlayertestws.okx.com", - "name": "X Layer Test OKX wss node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/xlayerchain.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "196", - "rank": 13, - "name": "X Layer Mainnet", - "externalApi": { - "history": { - "type": "oklink", - "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=XLAYER" - }, - "explorers": [ - { - "type": "oklink", - "types": [ - "tx", - "address" - ], - "url": "https://www.okx.com/web3/explorer/xlayer-test/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "dcf40e8d-f041-45b8-8cc8-e5b95bedb86e", - "name": "okb", - "symbol": "okb", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XLOKB.svg", - "color": "FFFFFF", - "priceId": "okb", - "type": "normal", - "ethereumType": "normal" - } - ], - "nodes": [ - { - "url": "https://rpc.xlayer.tech/", - "name": "X Layer Tech https node" - }, - { - "url": "wss://ws.xlayer.tech/", - "name": "X Layer Tech wss node" - }, - { - "url": "https://xlayerrpc.okx.com/", - "name": "X Layer OKX https node" - }, - { - "url": "wss://xlayerws.okx.com/", - "name": "X Layer OKX wss node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/xlayerchain.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "1101", - "rank": 7, - "name": "Polygon zkEVM", - "externalApi": { - "history": { - "type": "oklink", - "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=POLYGON_ZKEVM" - }, - "explorers": [ - { - "type": "oklink", - "types": [ - "tx", - "address" - ], - "url": "https://www.okx.com/web3/explorer/polygon-zkevm/{type}/{value}?channelID=flessw" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "8f85b561-18f5-4cf0-9077-305ebc84d015", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color": "FF0066", - "type": "normal", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0xA8CE8aee21bC2A48a5EF670afCc9274C7bbbC035", - "name": "usd coin", - "symbol": "usdc", - "precision": 6, - "priceId": "usd-coin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", - "color": "3E73C4", - "type": "normal", - "ethereumType": "erc20" - }, + "url": "wss://people-polkadot.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + } + ], + "options": [ + "identityChain" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/People.svg", + "addressPrefix": 0 + }, + { + "disabled": false, + "chainId": "8217", + "name": "Kaia Mainnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "oklink", + "url": "https://www.oklink.com/api/v5/explorer/address/transaction-list?chainShortName=KAIA" + }, + "explorers": [ { - "isUtility": false, - "id": "0xa2036f0538221a77A3937F1379699f44945018d0", - "name": "polygon", - "symbol": "matic", - "precision": 18, - "priceId": "matic-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MATIC.svg", - "color": "8247E5", - "type": "normal", - "ethereumType": "erc20" - } - ], - "nodes": [ - { - "url": "https://zkevm-rpc.com", - "name": "Zkevm https node" - }, - { - "url": "https://polygon-zkevm-mainnet.public.blastapi.io", - "name": "Blast https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Polygon.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "7001", - "rank": 14, - "name": "ZetaChain Testnet", - "assets": [ - { - "isUtility": true, - "id": "0f07791b-b091-49c1-81b7-9facba2b7db3", - "name": "zetachain", - "symbol": "zeta", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZETA.svg", - "color": "235643", - "type": "normal", - "ethereumType": "normal" - } - ], - "externalApi": { - "history": { - "type": "zeta", - "url": "https://zetachain-athens-3.blockscout.com/api/v2/addresses/" - } - }, - "nodes": [ - { - "url": "https://rpc.ankr.com/zetachain_evm_athens_testnet", - "name": "Ankr https node" - }, - { - "url": "https://zetachain-athens-evm.blockpi.network/v1/rpc/public", - "name": "Blockpi https node" - }, - { - "url": "https://zetachain-testnet-evm.itrocket.net", - "name": "Itrocket https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Zetachain.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "7834781d38e4798d548e34ec947d19deea29df148a7bf32484b7b24dacf8d4b7", - "name": "Reef Mainnet", - "assets": [{ - "id": "55697eb0-ca77-47e3-a436-b05460ab1ead", - "name": "reef", - "symbol": "reef", - "precision": 18, - "priceId": "reef", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/REEF.svg", - "color": "C547CB", - "isUtility": true, - "type": "normal", - "staking": "relaychain" - }], - "externalApi": { - "history": { - "type": "reef", - "url": "https://squid.subsquid.io/reef-explorer/graphql" - }, - "staking": { - "type": "reef", - "url": "https://squid.subsquid.io/reef-explorer/graphql" - }, - "explorers": [{ - "type": "reef", - "types": [ - "transfer", - "extrinsic", - "account" - ], - "url": "https://reefscan.com/{type}/{value}" - }] - }, - "nodes": [{ - "url": "wss://rpc.reefscan.com/ws", - "name": "Reef Community node" + "type": "oklink", + "types": [ + "tx", + "address" + ], + "url": "https://www.okx.com/web3/explorer/kaia/{type}/{value}?channelID=flessw" } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/reefchain.svg", - "addressPrefix": 42 + ] + }, + "assets": [ + { + "isUtility": true, + "id": "dd80081e-7fc3-4a69-8218-57018d6e31c2", + "name": "kaia", + "symbol": "kaia", + "precision": 18, + "priceId": "kaia", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAIA.svg", + "color": "DE1E41", + "ethereumType": "normal" }, { - "disabled": false, - "chainId": "f3c7ad88f6a80f366c4be216691411ef0622e8b809b1046ea297ef106058d4eb", - "name": "Manta Parachain", - "assets": [{ - "id": "0c41f3da-3c42-413a-aca3-bfb19b717df7", - "name": "manta", - "symbol": "manta", - "precision": 18, - "priceId": "manta-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MANTA.svg", - "color": "29CCB9", - "isUtility": true, - "type": "normal" - }], - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://manta.subscan.io/{type}/{value}" - }] - }, - "nodes": [{ - "url": "wss://ws.manta.systems", - "name": "Manta Community node" - } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/mantachain.svg", - "addressPrefix": 77 + "isUtility": false, + "id": "0x6270b58be569a7c0b8f47594f191631ae5b2c86c", + "name": "usd coin", + "symbol": "usdc", + "precision": 6, + "priceId": "usd-coin", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDC.svg", + "color": "3E73C4", + "ethereumType": "erc20" }, { - "disabled": false, - "chainId": "169", - "name": "Manta Pacific Mainnet", - "assets": [ - { - "isUtility": true, - "id": "af44954d-2be1-4021-ae0b-f05d8180400a", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color":"627EEA", - "type": "normal", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0x95CeF13441Be50d20cA4558CC0a27B601aC544E5", - "name": "manta", - "symbol": "manta", - "precision": 18, - "priceId": "manta-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MANTA.svg", - "color": "8247E5", - "type": "normal", - "ethereumType": "erc20" - } - ], - "externalApi": { - "history": { - "type": "zeta", - "url": "https://pacific-explorer.manta.network/api/v2/addresses/" - } - }, - "nodes": [ - { - "url": "https://pacific-rpc.manta.network/http", - "name": "Manta https node" - }, - { - "url": "https://1rpc.io/manta", - "name": "1RPC https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/mantachain.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": true, - "chainId": "d8761d3c88f26dc12875c00d3165f7d67243d56fc85b4cf19937601a7916e5a9", - "name": "Enjin Relaychain", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://enjin.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "43748d94-90ba-41b2-8732-326cd943a501", - "name": "enjin coin", - "symbol": "enj", - "precision": 18, - "priceId": "enjincoin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ENJ.svg", - "color": "5A27ED", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc.relay.blockchain.enjin.io", - "name": "Enjin Foundation node" - } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Enjin.svg", - "addressPrefix": 2135 + "isUtility": false, + "id": "0xcee8faf64bb97a73bb51e115aa89c17ffa8dd167", + "name": "orbit bridge klaytn usd tether", + "symbol": "ousdt", + "precision": 6, + "priceId": "tether", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/USDT.svg", + "color": "26A17B", + "ethereumType": "erc20" }, { - "disabled": false, - "chainId": "6bd89e052d67a45bb60a9a23e8581053d5e0d619f15cb9865946937e690c42d6", - "name": "Liberland", - "assets": [ - { - "id": "a6b83d39-a488-4b34-8352-280705a792ea", - "name": "liberland dollar", - "symbol": "lld", - "precision": 12, - "priceId": "liberland-lld", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLD.svg", - "color": "00437F", - "isUtility": true, - "type": "normal" - }, - { - "id": "30b43eb9-36b4-4b40-bf72-330d2e20ee86", - "name": "liberland merit", - "symbol": "llm", - "precision": 12, - "currencyId": "1", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLM.svg", - "color": "EFB900", - "type": "assets" - }, + "isUtility": false, + "id": "0x078db7827a5531359f6cb63f62cfa20183c4f10c", + "name": "dai stablecoin", + "symbol": "dai", + "precision": 18, + "priceId": "dai", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DAI.svg", + "color": "FF0066", + "ethereumType": "erc20" + } + ], + "nodes": [ + { + "url": "https://public-en.node.kaia.io/", + "name": "Kaia Foundation https node" + }, + { + "url": "wss://public-en.node.kaia.io/ws", + "name": "Kaia Foundation wss node" + }, + { + "url": "https://alpha-hardworking-orb.kaia-mainnet.quiknode.pro/", + "name": "QuickNode https node" + }, + { + "url": "wss://alpha-hardworking-orb.kaia-mainnet.quiknode.pro/", + "name": "QuickNode wss node" + }, + { + "url": "https://kaia.blockpi.network/v1/rpc/public", + "name": "Blockpi https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/kaiachain.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "1001", + "name": "Kaia Kairos Testnet", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "klaytn", + "url": "https://api-baobab.klaytnscope.com/v2/" + }, + "explorers": [ { - "id": "2e7179c9-4308-420e-a654-43c92d119717", - "name": "sora xor", - "symbol": "xor", - "precision": 12, - "currencyId": "774441749", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XOR.svg", - "color": "EE2233", - "type": "assets" + "type": "klaytn", + "types": [ + "tx", + "account" + ], + "url": "https://baobab.klaytnscope.com/{type}/{value}" } - ], - "xcm": { - "xcmVersion": "v3", - "availableAssets": [ - { - "id": "a6b83d39-a488-4b34-8352-280705a792e", - "symbol": "LLD" - }, - { - "id": "30b43eb9-36b4-4b40-bf72-330d2e20ee86", - "symbol": "LLM" - }, - { - "id": "2e7179c9-4308-420e-a654-43c92d119717", - "symbol": "XOR" - } - ], - "availableDestinations": [ - { - "chainId": "7e4e32d0feafd4f9c9414b0be86373f9a1efa904809b683453a9af6856d38ad5", - "assets": [ - { - "id": "a6b83d39-a488-4b34-8352-280705a792e", - "symbol": "LLD", - "minAmount": "1000000000000" - }, - { - "id": "30b43eb9-36b4-4b40-bf72-330d2e20ee86", - "symbol": "LLM" - }, - { - "id": "2e7179c9-4308-420e-a654-43c92d119717", - "symbol": "XOR" - } - - ] - } - ] - }, - "nodes": [ - { - "url": "wss://mainnet.liberland.org", - "name": "Liberland node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/liberland.svg", - "addressPrefix": 42 + ] + }, + "assets": [ + { + "isUtility": true, + "id": "2ba4723a-74b4-4a6f-a888-e51937773807", + "name": "kaia", + "symbol": "kaia", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KAIA.svg", + "color": "FFFFFF", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://public-en.kairos.node.kaia.io", + "name": "Kairos https node" }, { - "disabled": false, - "chainId": "f3c7ad88f6a80f366c4be216691411ef0622e8b809b1046ea297ef106058d4eb", - "name": "Manta Parachain", - "assets": [{ - "id": "0c41f3da-3c42-413a-aca3-bfb19b717df7", - "name": "manta", - "symbol": "manta", - "precision": 18, - "priceId": "manta-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MANTA.svg", - "color": "29CCB9", - "isUtility": true, - "type": "normal" - }], - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://manta.subscan.io/{type}/{value}" - }] - }, - "nodes": [{ - "url": "wss://ws.manta.systems", - "name": "Manta Community node" + "url": "https://public-en-baobab.klaytn.net", + "name": "Klaytn Foundation https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/kaiachain.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment", + "testnet" + ] + }, + { + "disabled": false, + "chainId": "88", + "name": "Viction", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "vicscan", + "url": "https://www.vicscan.xyz/api/" + }, + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://www.vicscan.xyz/{type}/{value}" } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/mantachain.svg", - "addressPrefix": 77 + ] + }, + "assets": [ + { + "isUtility": true, + "id": "d7635547-bc3a-4410-944f-f8b851745c32", + "name": "viction", + "symbol": "vic", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/VIC.svg", + "color": "FFFFFF", + "priceId": "tomochain", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://viction.blockpi.network/v1/rpc/public", + "name": "Blockpi https node" }, { - "disabled": false, - "chainId": "169", - "name": "Manta Pacific Mainnet", - "assets": [ - { - "isUtility": true, - "id": "af44954d-2be1-4021-ae0b-f05d8180400a", - "name": "ethereum", - "symbol": "eth", - "precision": 18, - "priceId": "ethereum", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ETH.svg", - "color":"627EEA", - "type": "normal", - "ethereumType": "normal" - }, - { - "isUtility": false, - "id": "0x95CeF13441Be50d20cA4558CC0a27B601aC544E5", - "name": "manta", - "symbol": "manta", - "precision": 18, - "priceId": "manta-network", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/MANTA.svg", - "color": "8247E5", - "type": "normal", - "ethereumType": "erc20" + "url": "https://rpc.viction.xyz", + "name": "Viction https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/viction.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "995", + "name": "5ire", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "fire", + "url": "https://api.evm.scan.5ire.network/5ire/" + }, + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://5irescan.io/{type}/{value}" } - ], - "externalApi": { - "history": { - "type": "zeta", - "url": "https://pacific-explorer.manta.network/api/v2/addresses/" - } - }, - "nodes": [ - { - "url": "https://pacific-rpc.manta.network/http", - "name": "Manta https node" - }, - { - "url": "https://1rpc.io/manta", - "name": "1RPC https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/mantachain.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": true, - "chainId": "d8761d3c88f26dc12875c00d3165f7d67243d56fc85b4cf19937601a7916e5a9", - "name": "Enjin Relaychain", - "externalApi": { - "explorers": [{ + ] + }, + "assets": [ + { + "isUtility": true, + "id": "f9e1d5bb-2402-45c3-9147-e8166e3a7c75", + "name": "5ire", + "symbol": "5fire", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/5IRE.svg", + "color": "071941", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://rpc.5ire.network", + "name": "5ire https node" + }, + { + "url": "wss://rpc.5ire.network", + "name": "5ire wss node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/5irechain.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "b91746b45e0346cc2f815a520b9c6cb4d5c0902af848db0a80f85932d2e8276a", + "name": "Avail DA Mainnet", + "ecosystem": "substrate", + "externalApi": { + "explorers": [ + { "type": "subscan", "types": [ "extrinsic", "account" ], - "url": "https://enjin.subscan.io/{type}/{value}" - }] - }, - "assets": [{ - "id": "43748d94-90ba-41b2-8732-326cd943a501", - "name": "enjin coin", - "symbol": "enj", - "precision": 18, - "priceId": "enjincoin", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ENJ.svg", - "color": "5A27ED", - "isUtility": true, - "type": "normal" - }], - "nodes": [{ - "url": "wss://rpc.relay.blockchain.enjin.io", - "name": "Enjin Foundation node" - } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Enjin.svg", - "addressPrefix": 2135 - }, - { - "disabled": false, - "chainId": "6bd89e052d67a45bb60a9a23e8581053d5e0d619f15cb9865946937e690c42d6", - "name": "Liberland", - "assets": [ - { - "id": "a6b83d39-a488-4b34-8352-280705a792ea", - "name": "liberland lld", - "symbol": "lld", - "precision": 12, - "priceId": "liberland-lld", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LLD.svg", - "color": "00437F", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://mainnet.liberland.org", - "name": "Liberland node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/liberland.svg", - "addressPrefix": 42 - }, - { - "disabled": false, - "chainId": "248", - "rank": 15, - "name": "Oasys Mainnet", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.oasys.games/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://explorer.oasys.games/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "11d2ece1-ecae-4596-aae4-ee9db83a5e2a", - "name": "oasys", - "symbol": "oas", - "precision": 18, - "priceId": "oasys", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", - "color": "00A84F", - "type": "normal", - "ethereumType": "normal" - } - ], - "nodes": [ - { - "url": "https://oasys.blockpi.network/v1/rpc/public/", - "name": "Blockpi https node" - }, - { - "url": "https://rpc.mainnet.oasys.games/", - "name": "Oasys https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/oasys.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "29548", - "rank": 150, - "name": "MCH Verse Mainnet", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.oasys.mycryptoheroes.net/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://explorer.oasys.mycryptoheroes.net/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "dad38228-7e66-46cb-b8f8-bee5a738a18a", - "name": "oasys", - "symbol": "oas", - "precision": 18, - "priceId": "oasys", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", - "color": "00A84F", - "type": "normal", - "ethereumType": "normal" + "url": "https://avail.subscan.io/{type}/{value}" } ], - "nodes": [ - { - "url": "https://rpc.oasys.mycryptoheroes.net/", - "name": "MCH https node" - }, - { - "url": "wss://ws.oasys.mycryptoheroes.net/", - "name": "MCH wss node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/mchverse.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "2400", - "rank": 151, - "name": "TCG Verse Mainnet", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.tcgverse.xyz/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://explorer.tcgverse.xyz/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "e2661f7b-3916-464d-8ea2-5650b6c7de94", - "name": "oasys", - "symbol": "oas", - "precision": 18, - "priceId": "oasys", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", - "color": "00A84F", - "type": "normal", - "ethereumType": "normal" - } - ], - "nodes": [ - { - "url": "https://rpc.tcgverse.xyz/", - "name": "TCG https node" - }, - { - "url": "wss://ws-rpc.tcgverse.xyz/", - "name": "TCG wss node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/tcgverse.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "19011", - "rank": 152, - "name": "HOME Verse Mainnet", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.oasys.homeverse.games/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://explorer.oasys.homeverse.games/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "943d4fe9-76e5-48bd-9220-4fcda4e3b8e4", - "name": "oasys", - "symbol": "oas", - "precision": 18, - "priceId": "oasys", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", - "color": "00A84F", - "type": "normal", - "ethereumType": "normal" - } - ], - "nodes": [ - { - "url": "https://rpc.mainnet.oasys.homeverse.games/", - "name": "HOME https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/homeverse.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "5555", - "rank": 153, - "name": "Chain Verse Mainnet", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.chainverse.info/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://explorer.chainverse.info/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "f1eeb4f0-d87d-41ef-8e23-af5a535b793c", - "name": "oasys", - "symbol": "oas", - "precision": 18, - "priceId": "oasys", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", - "color": "00A84F", - "type": "normal", - "ethereumType": "normal" - } - ], - "nodes": [ - { - "url": "https://rpc.chainverse.info/", - "name": "Chain https node" + "history": { + "type": "subquery", + "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-avail" } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/chainverse.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "7225878", - "rank": 154, - "name": "Saakuru Verse Mainnet", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.saakuru.network/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://explorer.saakuru.network/{type}/{value}" - } - ] - }, - "assets": [ - { - "isUtility": true, - "id": "5e15fa7a-b398-49a6-8459-da4b4f660f32", - "name": "oasys", - "symbol": "oas", + }, + "assets": [ + { + "id": "c1f11fa8-7369-4456-a0f2-be66030715c2", + "name": "avail token", + "symbol": "avail", "precision": 18, - "priceId": "oasys", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", - "color": "00A84F", - "type": "normal", - "ethereumType": "normal" - } - ], - "nodes": [ - { - "url": "https://rpc.saakuru.network/", - "name": "Saakuru https node" - }, - { - "url": "wss://ws.saakuru.network/", - "name": "Saakuru wss node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/saakuruverse.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "50005", - "rank": 155, - "name": "Yooldo Verse Mainnet", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.yooldo-verse.xyz/api" - }, - "explorers": [ - { - "type": "etherscan", - "types": [ - "tx", - "address" - ], - "url": "https://explorer.yooldo-verse.xyz/{type}/{value}" - } - ] - }, - "assets": [ - { + "priceId": "avail", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Avail.svg", + "color": "56E5FF", "isUtility": true, - "id": "648d069c-c32f-4fbc-af23-14f77a9158aa", - "name": "oasys", - "symbol": "oas", - "precision": 18, - "priceId": "oasys", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/OAS.svg", - "color": "00A84F", - "type": "normal", - "ethereumType": "normal" - } - ], - "nodes": [ - { - "url": "https://rpc.yooldo-verse.xyz/", - "name": "Yooldo https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/yooldoverse.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "30", - "rank": 16, - "name": "Rootstock Mainnet", - "externalApi": { - "history": { - "type": "zeta", - "url": "https://rootstock.blockscout.com//api/v2/addresses/" - } + "type": "normal" + } + ], + "nodes": [ + { + "url": "wss://avail-mainnet.public.blastapi.io/", + "name": "Blastapi node" }, - "assets": [ - { - "isUtility": true, - "id": "defb1fb8-8cf1-49b1-8dd3-b8dac33394a4", - "name": "rootstock rsk rbtc", - "symbol": "rbtc", - "precision": 18, - "priceId": "rootstock", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/RBTC.svg", - "color": "", - "type": "normal", - "ethereumType": "normal" - } - ], - "nodes": [ - { - "url": "https://public-node.rsk.co/", - "name": "Public https node" - }, - { - "url": "https://mycrypto.rsk.co/", - "name": "Mycrypto https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/rootstock.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "50dd5d206917bf10502c68fb4d18a59fc8aa31586f4e8856b493e43544aa82aa", - "name": "XX network", - "externalApi": { - "history": { - "type": "subquery", - "url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-xx-network" - } + { + "url": "wss://mainnet.avail-rpc.com/", + "name": " Ankr node" }, - "assets": [{ - "id": "526dca29-63ff-4683-88d6-852d1455b17b", - "name": "xx network", - "symbol": "xx", - "precision": 9, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/XX.svg", - "priceId": "xxcoin", - "color": "0AC1C7", - "isUtility": true, - "type": "normal" - }], - "nodes": [ - { - "url": "wss://xxnetwork-rpc.dwellir.com", - "name": "Dwellir node" - }, - { - "url": "wss://rpc.xx.network", - "name": "xx Foundation node #1" - }, - { - "url": "wss://rpc-hetzner.xx.network", - "name": "xx Foundation node #2" - }, - { - "url": "wss://rpc-do.xx.network", - "name": "xx Foundation node #3" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/xxnetwork.svg", - "addressPrefix": 55 - }, - { - "disabled": false, - "chainId": "6660", - "name": "Latest Testnet", - "externalApi": { - "history": { - "type": "zeta", - "url": "https://testscan.latestchain.io/api/v2/addresses/" - } + { + "url": "wss://avail-rpc.rubynodes.io/", + "name": " Ruby node" }, - "assets": [ - { - "isUtility": true, - "id": "1a31227d-c6fe-4c78-a3d6-353be70e56a6", - "name": "latest", - "symbol": "latest", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LATEST.svg", - "color": "FC81EA", - "type": "normal", - "ethereumType": "normal" - } - - ], - "nodes": [ - { - "url": "https://testnet-rpc.latestchain.io", - "name": "Latest https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/latestchain.svg", - "addressPrefix": 0, - "options": [ - "testnet", - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "9630", - "name": "Latest Mainnet", - "externalApi": { - "history": { - "type": "zeta", - "url": "https://scan.latestchain.io/api/v2/addresses/" - } + { + "url": "wss://avail-us.brightlystake.com", + "name": " BrightlyStake node" }, - "assets": [ - { - "isUtility": true, - "id": "e7094e62-d86d-4c08-8497-9ebc4c9011ea", - "name": "latest", - "symbol": "latest", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/LATEST.svg", - "color": "FC81EA", - "type": "normal", - "ethereumType": "normal" - } - - ], - "nodes": [ - { - "url": "https://mainnet-rpc.latestchain.io", - "name": "Latest https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/latest.svg", - "addressPrefix": 0, - "options": [ - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "72778", - "name": "CAGA Ankara Testnet", - "externalApi": { - "history": { - "type": "etherscan", - "url": "https://explorer.ankara-cagacrypto.com/api" - } + { + "url": "wss://rpc-avail.globalstake.io", + "name": " GlobalStake node" }, - "assets": [ - { - "isUtility": true, - "id": "a9270ef5-379a-4228-8d72-e6efb2b5f7b4", - "name": "caga", - "symbol": "caga", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/CAGA.svg", - "color": "FFFFFF", - "type": "normal", - "ethereumType": "normal" - } - - ], - "nodes": [ - { - "url": "wss://wss.ankara-cagacrypto.com", - "name": "Caga wss node" - }, - { - "url": "https://www.ankara-cagacrypto.com", - "name": "Caga https node" - } - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/cagachain.svg", - "addressPrefix": 0, - "options": [ - "testnet", - "ethereum", - "utilityFeePayment" - ] - }, - { - "disabled": false, - "chainId": "6f09966420b2608d1947ccfb0f2a362450d1fc7fd902c29b67c906eaa965a7ae", - "name": "Avail Goldberg Testnet", - "externalApi": { - "explorers": [{ - "type": "subscan", - "types": [ - "extrinsic", - "account" - ], - "url": "https://avail-testnet.subscan.io/{type}/{value}" - }] + { + "url": "wss://avail.rpc.bountyblok.io", + "name": "Bountyblok node" }, - "assets": [ - { - "id": "72778e65-53b6-4cb4-bb4c-c029121eb494", - "name": "avail token", - "symbol": "avl", - "precision": 18, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/AVL.svg", - "color": "56E5FF", - "isUtility": true, - "type": "normal" + { + "url": "wss://avail.public.curie.radiumblock.co/ws", + "name": "RadiumBlock node" + }, + { + "url": "wss://avail-rpc.lgns.net/", + "name": "LugaNodes node" + }, + { + "url": "wss://rpc.avail.stakepool.dev.br/ws", + "name": "StakePool node" } ], - "nodes": [{ - "url": "wss://goldberg-testnet-rpc.avail.tools/ws", - "name": "Avail Goldberg Testnet node" - } - - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Avail.svg", - "addressPrefix": 42, - "options": [ - "checkAppId" - ] + "options": [ + "checkAppId" + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Avail.svg", + "addressPrefix": 42 + }, + { + "disabled": false, + "chainId": "2340", + "name": "Atleta Olympia", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "blockscout", + "url": "https://blockscout.atleta.network/api/v2/" + }, + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://blockscout.atleta.network/{type}/{value}" + } + ] }, - { - "disabled": false, - "chainId": "0614f7b74a2e47f7c8d8e2a5335be84bdde9402a43f5decdec03200a87c8b943", - "name": "Analog Testnet", - "assets": [ - { - "id": "9a8799db-a479-4a73-ae81-3b637c8624d8", - "name": "tanlog", - "symbol": "tanlog", - "precision": 12, - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TANLOG.svg", - "color": "9A74F7", - "isUtility": true, - "type": "normal" + "assets": [ + { + "isUtility": true, + "id": "e25d94ba-805d-4d82-9238-2c4d3e7d2ff5", + "name": "ATLA", + "symbol": "ATLA", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ATLA.svg", + "color": "FFFFFF", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://testnet-rpc.atleta.network:9944", + "name": "Atla https node" + }, + { + "url": "wss://testnet-rpc.atleta.network:9944", + "name": "Atla wss node" } ], - "nodes": [{ - "url": "wss://rpc.testnet.analog.one", - "name": "Analog Testnet node" - } - - ], - "options": [ - "testnet" - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Analog.svg", - "addressPrefix": 12850 + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/Atleta.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment", + "testnet" + ] + }, + { + "disabled": false, + "chainId": "168168", + "name": "ZChains", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "zchain", + "url": "https://mainnet-scan-api.zchains.com/api/v1/" + }, + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://scan.zchains.com/{type}/{value}" + } + ] }, - { - "disabled": false, - "chainId": "c1af4cb4eb3918e5db15086c0cc5ec17fb334f728b7c65dd44bfe1e174ff8b3f", - "parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", - "name": "Kusama People", - "assets": [ - { - "id": "b54f9075-6364-4ad9-8ac2-ed8a604491fd", - "name": "kusama", - "symbol": "ksm", - "precision": 12, - "priceId": "kusama", - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/KSM.svg", - "color": "FFFFFF", - "isUtility": true, - "type": "normal" - } - ], - "nodes": [ - { - "url": "wss://kusama-people-rpc.polkadot.io", - "name": "Parity node" - }, - { - "url": "wss://ksm-rpc.stakeworld.io/people", - "name": "Stakeworld node" - } - ], - "options": [ - "identityChain" - ], - "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/People.svg", - "addressPrefix": 2 - } + "assets": [ + { + "isUtility": true, + "id": "a8b3e303-ded2-4d79-8bb4-1592e0b1230a", + "name": "ZCD", + "symbol": "ZCD", + "precision": 18, + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/ZCD.svg", + "priceId": "zchains", + "color": "E10600", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://rpc.zchains.com", + "name": "ZChains https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/zchain.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "2525", + "name": "inEVM", + "ecosystem": "ethereum", + "externalApi": { + "history": { + "type": "blockscout", + "url": "https://explorer.inevm.com/api/v2/" + }, + "explorers": [ + { + "type": "etherscan", + "types": [ + "tx", + "address" + ], + "url": "https://explorer.inevm.com/{type}/{value}" + } + ] + }, + "assets": [ + { + "isUtility": true, + "id": "d23263f5-1167-4eef-9a8d-a42df86c2647", + "name": "Injective", + "symbol": "INJ", + "precision": 18, + "priceId": "injective-protocol", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/INJ.svg", + "color": "00F2FE", + "ethereumType": "normal" + } + ], + "nodes": [ + { + "url": "https://mainnet.rpc.inevm.com/http", + "name": "inEVM https node" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/chains/white/inevm.svg", + "addressPrefix": 0, + "options": [ + "ethereum", + "utilityFeePayment" + ] + }, + { + "disabled": false, + "chainId": "-239", + "name": "Ton Mainnet", + "ecosystem": "ton", + "iosMinAppVersion": "4.0.1", + "externalApi": { + "history": { + "type": "ton", + "url": "https://keeper.tonapi.io" + }, + "explorers": [ + { + "type": "tonviewer", + "types": [ + "tonAccount", + "tonTransaction" + ], + "url": "https://tonviewer.com/{type}/{value}" + } + ] + }, + "assets": [ + { + "isUtility": true, + "id": "2ba4723a-74b4-4a6f-a888-e51937773807-239", + "name": "toncoin", + "symbol": "ton", + "precision": 9, + "priceId": "the-open-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg", + "color": "0098EA", + "tonType": "normal" + } + ], + "nodes": [ + { + "url": "https://keeper.tonapi.io", + "name": "Keeper api" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg", + "addressPrefix": 0, + "options": ["remoteAssets"] + }, + { + "disabled": false, + "chainId": "-3", + "name": "Ton Testnet", + "ecosystem": "ton", + "iosMinAppVersion": "3.8.1", + "externalApi": { + "history": { + "type": "ton", + "url": "https://keeper.tonapi.io" + }, + "explorers": [ + { + "type": "tonviewer", + "types": [ + "tonAccount", + "tonTransaction" + ], + "url": "https://tonviewer.com/{type}/{value}" + } + ] + }, + "assets": [ + { + "isUtility": true, + "id": "2ba4723a-74b4-4a6f-a888-e51937773807-239", + "name": "toncoin", + "symbol": "ton", + "precision": 9, + "priceId": "the-open-network", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg", + "color": "0098EA", + "tonType": "normal" + } + ], + "nodes": [ + { + "url": "https://testnet.tonapi.io", + "name": "Keeper api testnet" + } + ], + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg", + "addressPrefix": 0, + "options": [ + "remoteAssets", + "testnet" + ] + } ] diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/dapps.json b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/dapps.json new file mode 100644 index 0000000000..f8cd7b269d --- /dev/null +++ b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/dapps.json @@ -0,0 +1,131 @@ +[ + { + "type": "top", + "apps": [ + { + "identifier": "ed88b393-2ac3-4749-b864-dbc141c4188d", + "chains": ["-239"], + "name": "FW dapp example", + "url": "https://ton-connect.example.fearless.soramitsu.co.jp", + "description": "FW dapp example", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/FW_icon_288.png" + } + ] + }, + { + "type": "featured", + "apps": [ + { + "identifier": "f745ab46-84fd-4669-940c-6cb4048a6372", + "chains": ["-239"], + "name": "Spinarium", + "url": "https://spintg.com/ru/games?category=popular", + "description": "Players' Choice 2024 - TON, Profitable and Safe casino!", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/spinarium.png" + } + ] + }, + { + "type": "utilities", + "apps": [ + { + "identifier": "aa592b75-9134-4708-8122-0b7d5519f593", + "chains": ["-239"], + "name": "Aqua Protocol", + "url": "https://app.aquaprotocol.xyz/mint", + "description": "Over-collaterized Stablecoin.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/aquaprotocol.png" + }, + { + "identifier": "c2301105-b592-45da-8039-a99552f05ccb", + "chains": ["-239"], + "name": "TON Fonates", + "url": "https://fonates.com/", + "description": "Send and accept donations on streams in TON.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/tonfonates.png" + }, + { + "identifier": "cd3357b7-7a79-4193-93b2-fe277eb18d8c", + "chains": ["-239"], + "name": "Tonnel Network", + "url": "https://www.tonnel.network/", + "description": "#1 Zero-Knowledge protocol on TON, Privacy for TON, JETTON, NFTs.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/tonnelnetwork.png" + } + ] + }, + { + "type": "nft", + "apps": [ + { + "identifier": "a2737106-e725-445a-8165-e3d128c51fcd", + "chains": ["-239"], + "name": "TON Diamonds", + "url": "https://ton.diamonds/", + "description": "Marketplace for digital artists and high-quality collections. The first NFT on TON.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/tondiamonds.png" + }, + { + "identifier": "327fcf07-18ed-4c84-a9d9-a0b3d8559540", + "chains": ["-239"], + "name": "Getgems.io", + "url": "https://getgems.io/", + "description": "The Home of NFT on The Open Network.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/getgems.jpg" + }, + { + "identifier": "8c4ecf28-417e-40bf-99c8-c243d539d628", + "chains": ["-239"], + "name": "DAOLama", + "url": "https://app.daolama.co", + "description": "Use your NFTs as collateral to instantly get TON Coin.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/daolama.png" + } + ] + }, + { + "type": "defi", + "apps": [ + { + "identifier": "ed88b393-2ac3-4749-b864-dbc141c4188d", + "chains": ["-239"], + "name": "STON.fi", + "url": "https://app.ston.fi/", + "description": "Cross-chain DEX built on TON.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/stonfi.png" + }, + { + "identifier": "d32532fa-7306-4927-9cfa-04e164a17419", + "chains": ["-239"], + "name": "DeDust.io", + "url": "https://dedust.io/swap", + "description": "AMM DEX for the TON blockchain.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/dedust.jpg" + }, + { + "identifier": "3e4b07d5-8272-4381-9f69-37f008b2f386", + "chains": ["-239"], + "name": "TON Diamonds DEX", + "url": "https://ton.diamonds/dex/swap", + "description": "Find top jetton rates and get $GLINT cashback.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/tondiamonds.png" + }, + { + "identifier": "bd485b34-7e10-45da-8e20-a58f5acccdc3", + "chains": ["-239"], + "name": "Storm Trade", + "url": "https://storm.tg/", + "description": "Perps DEX with ×100 leverage.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/stormtrade.png" + }, + { + "identifier": "e6563c0f-abf3-4506-86f1-d61e03c9b2b6", + "chains": ["-239"], + "name": "swap.coffee", + "url": "https://swap.coffee/dex", + "description": "The most effective DEX Aggregator on TON. Smart routing and transaction splitting.", + "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/develop-free/icons/dapps/swapcoffee.png" + } + ] + } +] diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidity/LiquidityPoolRemoveLiquidityAssembly.swift b/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidity/LiquidityPoolRemoveLiquidityAssembly.swift index 372f217635..aa7c9f7c93 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidity/LiquidityPoolRemoveLiquidityAssembly.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidity/LiquidityPoolRemoveLiquidityAssembly.swift @@ -30,7 +30,7 @@ final class LiquidityPoolRemoveLiquidityAssembly { guard let lpOperationService = try? PolkaswapLiquidityPoolServiceAssembly.buildOperationService( for: chain, - wallet: wallet.utilsModel, + wallet: wallet, chainRegistry: chainRegistry, signingWrapperData: signingWrapperData ) else { @@ -82,9 +82,7 @@ final class LiquidityPoolRemoveLiquidityAssembly { accountResponse: ChainAccountResponse ) throws -> Data { let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil - let tag: String = chain.isEthereumBased - ? KeystoreTagV2.ethereumSecretKeyTagForMetaId(metaId, accountId: accountId) - : KeystoreTagV2.substrateSecretKeyTagForMetaId(metaId, accountId: accountId) + let tag: String = KeystoreTagV2.secretKeyTag(for: chain.ecosystem, metaId: metaId, accountId: accountId) let keystore = Keychain() let secretKey = try keystore.fetchKey(for: tag) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidity/LiquidityPoolRemoveLiquidityInteractor.swift b/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidity/LiquidityPoolRemoveLiquidityInteractor.swift index 9d72c140e1..077b53789f 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidity/LiquidityPoolRemoveLiquidityInteractor.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidity/LiquidityPoolRemoveLiquidityInteractor.swift @@ -3,6 +3,7 @@ import SSFPools import SSFPolkaswap import SSFModels import BigInt +import SSFAccountManagment protocol LiquidityPoolRemoveLiquidityInteractorOutput: AnyObject { func didReceiveAccountInfo(result: Result, for chainAsset: ChainAsset) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidityConfirm/LiquidityPoolRemoveLiquidityConfirmAssembly.swift b/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidityConfirm/LiquidityPoolRemoveLiquidityConfirmAssembly.swift index 962c244e3e..3164b8e150 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidityConfirm/LiquidityPoolRemoveLiquidityConfirmAssembly.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolRemoveLiquidityConfirm/LiquidityPoolRemoveLiquidityConfirmAssembly.swift @@ -32,7 +32,7 @@ final class LiquidityPoolRemoveLiquidityConfirmAssembly { guard let lpOperationService = try? PolkaswapLiquidityPoolServiceAssembly.buildOperationService( for: chain, - wallet: wallet.utilsModel, + wallet: wallet, chainRegistry: chainRegistry, signingWrapperData: signingWrapperData ) else { @@ -82,9 +82,7 @@ final class LiquidityPoolRemoveLiquidityConfirmAssembly { accountResponse: ChainAccountResponse ) throws -> Data { let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil - let tag: String = chain.isEthereumBased - ? KeystoreTagV2.ethereumSecretKeyTagForMetaId(metaId, accountId: accountId) - : KeystoreTagV2.substrateSecretKeyTagForMetaId(metaId, accountId: accountId) + let tag: String = KeystoreTagV2.secretKeyTag(for: chain.ecosystem, metaId: metaId, accountId: accountId) let keystore = Keychain() let secretKey = try keystore.fetchKey(for: tag) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolSupply/LiquidityPoolSupplyAssembly.swift b/fearless/Modules/LiquidityPools/LiquidityPoolSupply/LiquidityPoolSupplyAssembly.swift index 4386c25f40..6f76140199 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolSupply/LiquidityPoolSupplyAssembly.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolSupply/LiquidityPoolSupplyAssembly.swift @@ -32,7 +32,7 @@ final class LiquidityPoolSupplyAssembly { guard let lpOperationService = try? PolkaswapLiquidityPoolServiceAssembly.buildOperationService( for: chain, - wallet: wallet.utilsModel, + wallet: wallet, chainRegistry: chainRegistry, signingWrapperData: signingWrapperData ) else { @@ -83,9 +83,7 @@ final class LiquidityPoolSupplyAssembly { accountResponse: ChainAccountResponse ) throws -> Data { let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil - let tag: String = chain.isEthereumBased - ? KeystoreTagV2.ethereumSecretKeyTagForMetaId(metaId, accountId: accountId) - : KeystoreTagV2.substrateSecretKeyTagForMetaId(metaId, accountId: accountId) + let tag: String = KeystoreTagV2.secretKeyTag(for: chain.ecosystem, metaId: metaId, accountId: accountId) let keystore = Keychain() let secretKey = try keystore.fetchKey(for: tag) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolSupply/LiquidityPoolSupplyInteractor.swift b/fearless/Modules/LiquidityPools/LiquidityPoolSupply/LiquidityPoolSupplyInteractor.swift index e92b5e10d2..117e3c3594 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolSupply/LiquidityPoolSupplyInteractor.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolSupply/LiquidityPoolSupplyInteractor.swift @@ -4,6 +4,7 @@ import SSFPolkaswap import SSFModels import BigInt import SSFStorageQueryKit +import SSFCrypto protocol LiquidityPoolSupplyInteractorOutput: AnyObject { func didReceiveFee(_ fee: BigUInt) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolSupplyConfirm/LiquidityPoolSupplyConfirmAssembly.swift b/fearless/Modules/LiquidityPools/LiquidityPoolSupplyConfirm/LiquidityPoolSupplyConfirmAssembly.swift index 11b76c7559..32ef80fd84 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolSupplyConfirm/LiquidityPoolSupplyConfirmAssembly.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolSupplyConfirm/LiquidityPoolSupplyConfirmAssembly.swift @@ -39,7 +39,7 @@ enum LiquidityPoolSupplyConfirmAssembly { guard let lpOperationService = try? PolkaswapLiquidityPoolServiceAssembly.buildOperationService( for: chain, - wallet: wallet.utilsModel, + wallet: wallet, chainRegistry: chainRegistry, signingWrapperData: signingWrapperData ) else { @@ -88,9 +88,7 @@ enum LiquidityPoolSupplyConfirmAssembly { accountResponse: ChainAccountResponse ) throws -> Data { let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil - let tag: String = chain.isEthereumBased - ? KeystoreTagV2.ethereumSecretKeyTagForMetaId(metaId, accountId: accountId) - : KeystoreTagV2.substrateSecretKeyTagForMetaId(metaId, accountId: accountId) + let tag: String = KeystoreTagV2.secretKeyTag(for: chain.ecosystem, metaId: metaId, accountId: accountId) let keystore = Keychain() let secretKey = try keystore.fetchKey(for: tag) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolSupplyConfirm/LiquidityPoolSupplyConfirmInteractor.swift b/fearless/Modules/LiquidityPools/LiquidityPoolSupplyConfirm/LiquidityPoolSupplyConfirmInteractor.swift index aa6bca8359..a461de7af6 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolSupplyConfirm/LiquidityPoolSupplyConfirmInteractor.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolSupplyConfirm/LiquidityPoolSupplyConfirmInteractor.swift @@ -3,6 +3,7 @@ import SSFModels import SSFPolkaswap import SSFPools import BigInt +import SSFCrypto protocol LiquidityPoolSupplyConfirmInteractorOutput: AnyObject { func didReceiveFee(_ fee: BigUInt) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListInteractor.swift b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListInteractor.swift index 8c4831a5e5..1c54fd856b 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListInteractor.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListInteractor.swift @@ -3,6 +3,7 @@ import SSFPools import SSFPolkaswap import SSFModels import SSFStorageQueryKit +import SSFCrypto protocol AvailableLiquidityPoolsListInteractorOutput: AnyObject { func didReceiveLiquidityPairs(pairs: [LiquidityPair]?) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListPresenter.swift b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListPresenter.swift index e738f10700..845bab6b52 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListPresenter.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListPresenter.swift @@ -4,6 +4,7 @@ import SSFPools import SSFModels import SoraFoundation import SSFStorageQueryKit +import SSFCrypto protocol AvailableLiquidityPoolsListInteractorInput { func setup(with output: AvailableLiquidityPoolsListInteractorOutput) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListViewModelFactory.swift b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListViewModelFactory.swift index 6f13b78897..bb1d4672eb 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListViewModelFactory.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListViewModelFactory.swift @@ -5,6 +5,7 @@ import SSFPolkaswap import SSFModels import BigInt import SSFStorageQueryKit +import SSFCrypto protocol AvailableLiquidityPoolsListViewModelFactory { func buildViewModel( diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListInteractor.swift b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListInteractor.swift index 48fab8076b..b91238f7a6 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListInteractor.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListInteractor.swift @@ -3,6 +3,8 @@ import SSFPools import SSFPolkaswap import SSFModels import SSFStorageQueryKit +import SSFAccountManagment +import SSFCrypto protocol UserLiquidityPoolsListInteractorOutput: AnyObject { func didReceiveLiquidityPairs(pools: [LiquidityPair]?) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListPresenter.swift b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListPresenter.swift index 829656feab..c7ddbfd9c1 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListPresenter.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListPresenter.swift @@ -4,6 +4,7 @@ import SSFPools import SSFModels import SoraFoundation import SSFStorageQueryKit +import SSFCrypto protocol UserLiquidityPoolsListInteractorInput { func setup(with output: UserLiquidityPoolsListInteractorOutput) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListViewModelFactory.swift b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListViewModelFactory.swift index e024dc2425..0c5cfe9d6a 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListViewModelFactory.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/UserPools/UserLiquidityPoolsListViewModelFactory.swift @@ -5,6 +5,7 @@ import SSFPolkaswap import SSFModels import BigInt import SSFStorageQueryKit +import SSFCrypto protocol UserLiquidityPoolsListViewModelFactory { func buildViewModel( diff --git a/fearless/Modules/MainTabBar/MainTabBarInteractor.swift b/fearless/Modules/MainTabBar/MainTabBarInteractor.swift index 426ad92666..a6dc757714 100644 --- a/fearless/Modules/MainTabBar/MainTabBarInteractor.swift +++ b/fearless/Modules/MainTabBar/MainTabBarInteractor.swift @@ -53,9 +53,6 @@ extension MainTabBarInteractor: MainTabBarInteractorInputProtocol { extension MainTabBarInteractor: EventVisitorProtocol { func processSelectedAccountChanged(event _: SelectedAccountChanged) { serviceCoordinator.updateOnAccountChange() - DispatchQueue.main.async { - self.presenter?.didReloadSelectedAccount() - } } } diff --git a/fearless/Modules/MainTabBar/MainTabBarPresenter.swift b/fearless/Modules/MainTabBar/MainTabBarPresenter.swift index fc4b93031b..1492e3ec42 100644 --- a/fearless/Modules/MainTabBar/MainTabBarPresenter.swift +++ b/fearless/Modules/MainTabBar/MainTabBarPresenter.swift @@ -10,6 +10,7 @@ final class MainTabBarPresenter { private let wireframe: MainTabBarWireframeProtocol private let appVersionObserver: AppVersionObserver private let applicationHandler: ApplicationHandler + private let eventCenter: EventCenterProtocol private let reachability: ReachabilityManager? private let networkStatusPresenter: NetworkAvailabilityLayerInteractorOutputProtocol @@ -25,7 +26,8 @@ final class MainTabBarPresenter { networkStatusPresenter: NetworkAvailabilityLayerInteractorOutputProtocol, reachability: ReachabilityManager?, walletConnectCoordinator: WalletConnectCoordinator, - localizationManager: LocalizationManagerProtocol + localizationManager: LocalizationManagerProtocol, + eventCenter: EventCenterProtocol ) { self.wireframe = wireframe self.interactor = interactor @@ -34,8 +36,9 @@ final class MainTabBarPresenter { self.networkStatusPresenter = networkStatusPresenter self.reachability = reachability self.walletConnectCoordinator = walletConnectCoordinator - self.localizationManager = localizationManager + self.eventCenter = eventCenter + self.localizationManager = localizationManager applicationHandler.delegate = self } } @@ -55,14 +58,12 @@ extension MainTabBarPresenter: MainTabBarPresenterProtocol { appVersionObserver.checkVersion(from: view, callback: nil) try? reachability?.add(listener: self) + + eventCenter.add(observer: self, dispatchIn: .main) } } extension MainTabBarPresenter: MainTabBarInteractorOutputProtocol { - func didReloadSelectedAccount() { - crowdloanListView = wireframe.showNewCrowdloan(on: view) as? UINavigationController - } - func didRequestImportAccount() { wireframe.presentAccountImport(on: view) } @@ -91,3 +92,13 @@ extension MainTabBarPresenter: StakingMainModuleOutput { wireframe.replaceStaking(on: view, type: type, moduleOutput: self) } } + +extension MainTabBarPresenter: EventVisitorProtocol { + func processSelectedAccountChanged(event: SelectedAccountChanged) { + guard event.account.ecosystem.isRegular else { + return + } + + wireframe.replaceStaking(on: view, type: .normal(chainAsset: nil), moduleOutput: self) + } +} diff --git a/fearless/Modules/MainTabBar/MainTabBarProtocol.swift b/fearless/Modules/MainTabBar/MainTabBarProtocol.swift index 9ce7dc6dbb..2de586fc08 100644 --- a/fearless/Modules/MainTabBar/MainTabBarProtocol.swift +++ b/fearless/Modules/MainTabBar/MainTabBarProtocol.swift @@ -1,9 +1,9 @@ import UIKit import WalletConnectSign +import SSFModels protocol MainTabBarViewProtocol: ControllerBackedProtocol { func didReplaceView(for newView: UIViewController, for index: Int) - func presentFailedMemoView() } protocol MainTabBarPresenterProtocol: AnyObject { @@ -16,12 +16,10 @@ protocol MainTabBarInteractorInputProtocol: AnyObject { } protocol MainTabBarInteractorOutputProtocol: AnyObject { - func didReloadSelectedAccount() func didRequestImportAccount() } protocol MainTabBarWireframeProtocol: SheetAlertPresentable, AuthorizationAccessible, WarningPresentable, AppUpdatePresentable, PresentDismissable { - func showNewCrowdloan(on view: MainTabBarViewProtocol?) -> UIViewController? func presentAccountImport(on view: MainTabBarViewProtocol?) func replaceStaking(on view: MainTabBarViewProtocol?, type: AssetSelectionStakingType, moduleOutput: StakingMainModuleOutput?) func presentPolkaswap(on view: ControllerBackedProtocol?, wallet: MetaAccountModel) @@ -29,8 +27,4 @@ protocol MainTabBarWireframeProtocol: SheetAlertPresentable, AuthorizationAccess protocol MainTabBarViewFactoryProtocol: AnyObject { static func createView() -> MainTabBarViewProtocol? - - static func reloadCrowdloanView( - on view: MainTabBarViewProtocol - ) -> UIViewController? } diff --git a/fearless/Modules/MainTabBar/MainTabBarViewController.swift b/fearless/Modules/MainTabBar/MainTabBarViewController.swift index df55da1da1..347d0d45d9 100644 --- a/fearless/Modules/MainTabBar/MainTabBarViewController.swift +++ b/fearless/Modules/MainTabBar/MainTabBarViewController.swift @@ -1,25 +1,26 @@ import UIKit import SoraFoundation +import SSFModels final class MainTabBarViewController: UITabBarController { - private lazy var failedMemoView: AttentionView = { - let view = AttentionView() - view.backgroundColor = .black.withAlphaComponent(0.9) - view.titleLabel.font = .h6Title - return view - }() - private var presenter: MainTabBarPresenterProtocol - + private var eventCenter: EventCenterProtocol private var viewAppeared: Bool = false + private var fullViewControllersList: [UIViewController] + private var wallet: MetaAccountModel init( viewControllers: [UIViewController], presenter: MainTabBarPresenterProtocol, - localizationManager: LocalizationManagerProtocol + localizationManager: LocalizationManagerProtocol, + eventCenter: EventCenterProtocol, + wallet: MetaAccountModel ) { self.presenter = presenter - + self.eventCenter = eventCenter + self.fullViewControllersList = viewControllers + self.wallet = wallet + super.init(nibName: nil, bundle: nil) self.viewControllers = viewControllers @@ -34,6 +35,8 @@ final class MainTabBarViewController: UITabBarController { override func viewDidLoad() { super.viewDidLoad() delegate = self + + eventCenter.add(observer: self, dispatchIn: .main) } override func viewDidAppear(_ animated: Bool) { @@ -51,11 +54,9 @@ final class MainTabBarViewController: UITabBarController { setValue(tabBar, forKey: "tabBar") applyLocalization() - } + + update(with: wallet) - @objc private func didTapFailedMemoView(_: UIGestureRecognizer) { - _ = openTab(vcClass: CrowdloanListViewController.self) - failedMemoView.removeFromSuperview() } private func openTab(vcClass _: T.Type) -> Bool { @@ -82,6 +83,20 @@ final class MainTabBarViewController: UITabBarController { private func wrappedSelectedViewController() -> UIViewController? { selectedViewController?.navigationRootViewController() } + + private func update(with wallet: MetaAccountModel) { + if let tabBar = self.tabBar as? TabBar { + tabBar.setup(for: wallet.ecosystem) + } + switch wallet.ecosystem { + case .regular: + setViewControllers(fullViewControllersList, animated: true) + case .ton: + let indexes: IndexSet = [0, 1, 4] + let tonViewControllers = indexes.map { fullViewControllersList[$0] } + setViewControllers(tonViewControllers, animated: true) + } + } } extension MainTabBarViewController: UITabBarControllerDelegate { @@ -89,11 +104,6 @@ extension MainTabBarViewController: UITabBarControllerDelegate { _: UITabBarController, shouldSelect viewController: UIViewController ) -> Bool { - if let wrappedSelectedViewController = viewController.navigationRootViewController(), - wrappedSelectedViewController.isKind(of: CrowdloanListViewController.self) { - failedMemoView.removeFromSuperview() - } - if viewController == viewControllers?[selectedIndex], let scrollableController = viewController as? ScrollsToTop { scrollableController.scrollToTop() @@ -113,43 +123,14 @@ extension MainTabBarViewController: MainTabBarViewProtocol { setViewControllers(newViewControllers, animated: false) } - - func presentFailedMemoView() { - guard let wrappedSelectedViewController = wrappedSelectedViewController(), - !wrappedSelectedViewController.isKind(of: CrowdloanListViewController.self) else { - return - } - - view.addSubview(failedMemoView) - failedMemoView.snp.makeConstraints { make in - make.bottom.equalTo(self.tabBar.snp.top) - make.centerX.equalToSuperview() - make.width.equalToSuperview() - make.height.equalTo(UIConstants.cellHeight) - } - - failedMemoView.iconView.snp.remakeConstraints { make in - make.leading.equalToSuperview().offset(UIConstants.defaultOffset) - make.size.equalTo(UIConstants.normalAddressIconSize.height) - make.centerY.equalToSuperview() - } - - failedMemoView.titleLabel.snp.remakeConstraints { make in - make.centerY.equalToSuperview() - make.leading.equalTo(failedMemoView.iconView.snp.trailing).offset(UIConstants.defaultOffset) - } - - applyLocalization() - - let tapGesture = UITapGestureRecognizer(target: self, action: #selector(didTapFailedMemoView(_:))) - tapGesture.isEnabled = true - failedMemoView.addGestureRecognizer(tapGesture) - } } extension MainTabBarViewController: Localizable { - func applyLocalization() { - failedMemoView.titleLabel.text = R.string.localizable - .tabbarCrowdloanAttention(preferredLanguages: selectedLocale.rLanguages) + func applyLocalization() {} +} + +extension MainTabBarViewController: EventVisitorProtocol { + func processSelectedAccountChanged(event: SelectedAccountChanged) { + update(with: event.account) } } diff --git a/fearless/Modules/MainTabBar/MainTabBarViewFactory.swift b/fearless/Modules/MainTabBar/MainTabBarViewFactory.swift index 322ab9cfd7..998563c7f9 100644 --- a/fearless/Modules/MainTabBar/MainTabBarViewFactory.swift +++ b/fearless/Modules/MainTabBar/MainTabBarViewFactory.swift @@ -1,7 +1,7 @@ import UIKit import SoraFoundation import SoraKeystore - +import SSFModels import SSFUtils final class MainTabBarViewFactory: MainTabBarViewFactoryProtocol { @@ -55,15 +55,22 @@ final class MainTabBarViewFactory: MainTabBarViewFactoryProtocol { applicationHandler: ApplicationHandler(), networkStatusPresenter: networkStatusPresenter, reachability: ReachabilityManager.shared, - walletConnectCoordinator: WalletConnectCoordinator(), - localizationManager: localizationManager + walletConnectCoordinator: WalletConnectCoordinator.shared, + localizationManager: localizationManager, + eventCenter: EventCenter.shared ) - let viewControllers = createViewControllers(stakingModuleOutput: presenter, walletConnect: walletConnect, wallet: wallet) + let viewControllers = createViewControllers( + stakingModuleOutput: presenter, + walletConnect: walletConnect, + wallet: wallet + ) let view = MainTabBarViewController( viewControllers: viewControllers, presenter: presenter, - localizationManager: localizationManager + localizationManager: localizationManager, + eventCenter: EventCenter.shared, + wallet: wallet ) return view @@ -78,7 +85,7 @@ final class MainTabBarViewFactory: MainTabBarViewFactoryProtocol { let walletController = createWalletController(walletConnect: walletConnect) viewControllers.append(walletController) - let crowdloanController = createCrowdloanController() + let crowdloanController = createBrowserController(wallet: wallet) viewControllers.append(crowdloanController) let polkaswapControoller = createPolkaswapController(wallet: wallet) @@ -93,16 +100,6 @@ final class MainTabBarViewFactory: MainTabBarViewFactoryProtocol { return viewControllers.compactMap { $0 } } - static func reloadCrowdloanView(on view: MainTabBarViewProtocol) -> UIViewController? { - guard let crowdloanController = createCrowdloanController() else { - return nil - } - - view.didReplaceView(for: crowdloanController, for: Self.crowdloanIndex) - - return crowdloanController - } - @discardableResult static func reloadStakingView( on view: MainTabBarViewProtocol, @@ -112,7 +109,9 @@ final class MainTabBarViewFactory: MainTabBarViewFactoryProtocol { switch stakingType { case .normal: let stakingViewController = createStakingController(moduleOutput: moduleOutput) - view.didReplaceView(for: stakingViewController, for: Self.stakingIndex) + if let stakingViewController = stakingViewController { + view.didReplaceView(for: stakingViewController, for: Self.stakingIndex) + } return stakingViewController case .pool: @@ -150,21 +149,28 @@ final class MainTabBarViewFactory: MainTabBarViewFactoryProtocol { static func createStakingController( moduleOutput: StakingMainModuleOutput? - ) -> UIViewController { - let viewController = StakingMainViewFactory.createView(moduleOutput: moduleOutput)?.controller ?? UIViewController() + ) -> UIViewController? { + let viewController = StakingMainViewFactory.createView(moduleOutput: moduleOutput)?.controller let icon = R.image.iconTabStaking() let normalIcon = icon?.tinted(with: R.color.colorGray()!)? .withRenderingMode(.alwaysOriginal) let selectedIcon = icon?.tinted(with: R.color.colorWhite()!)? .withRenderingMode(.alwaysOriginal) - viewController.tabBarItem = createTabBarItem( + + var navigationController: FearlessNavigationController + + if let viewController = viewController { + navigationController = FearlessNavigationController(rootViewController: viewController) + } else { + navigationController = FearlessNavigationController() + } + + navigationController.tabBarItem = createTabBarItem( normalImage: normalIcon, selectedImage: selectedIcon ) - - let navigationController = FearlessNavigationController(rootViewController: viewController) - + return navigationController } @@ -208,22 +214,14 @@ final class MainTabBarViewFactory: MainTabBarViewFactoryProtocol { return navigationController } - static func createCrowdloanController() -> UIViewController? { - let crowdloanState = CrowdloanSharedState() - crowdloanState.settings.setup() - - guard let selectedMetaAccount = SelectedWalletSettings.shared.value, - let crowloanView = CrowdloanListViewFactory.createView( - with: crowdloanState, - selectedMetaAccount: selectedMetaAccount - ) - else { + static func createBrowserController(wallet: MetaAccountModel) -> UIViewController? { + guard let controller = DappBrowserAssembly.configureModule(wallet: wallet)?.view.controller else { return nil } - let navigationController = FearlessNavigationController(rootViewController: crowloanView.controller) + let navigationController = FearlessNavigationController(rootViewController: controller) - let icon = R.image.iconTabCrowloan() + let icon = R.image.iconBrowser() let normalIcon = icon?.tinted(with: R.color.colorGray()!)? .withRenderingMode(.alwaysOriginal) let selectedIcon = icon?.tinted(with: R.color.colorWhite()!)? diff --git a/fearless/Modules/MainTabBar/MainTabBarWireframe.swift b/fearless/Modules/MainTabBar/MainTabBarWireframe.swift index 25f35201e3..f119b084fd 100644 --- a/fearless/Modules/MainTabBar/MainTabBarWireframe.swift +++ b/fearless/Modules/MainTabBar/MainTabBarWireframe.swift @@ -1,6 +1,7 @@ import Foundation import UIKit import WalletConnectSign +import SSFModels final class MainTabBarWireframe: MainTabBarWireframeProtocol { func presentPolkaswap(on view: ControllerBackedProtocol?, wallet: MetaAccountModel) { @@ -16,16 +17,6 @@ final class MainTabBarWireframe: MainTabBarWireframeProtocol { presentingController.present(navigationController, animated: true, completion: nil) } - func showNewCrowdloan(on view: MainTabBarViewProtocol?) -> UIViewController? { - if let view = view { - return MainTabBarViewFactory.reloadCrowdloanView( - on: view - ) - } - - return nil - } - func presentAccountImport(on view: MainTabBarViewProtocol?) { guard let tabBarController = view?.controller else { return diff --git a/fearless/Modules/MainTabBar/TabBar.swift b/fearless/Modules/MainTabBar/TabBar.swift index 5631625401..4a9e82052e 100644 --- a/fearless/Modules/MainTabBar/TabBar.swift +++ b/fearless/Modules/MainTabBar/TabBar.swift @@ -1,5 +1,6 @@ import Foundation import UIKit +import SSFModels final class TabBar: UITabBar { public var middleButton: UIButton = { @@ -13,11 +14,11 @@ final class TabBar: UITabBar { return middleButton }() - private lazy var bluredView: UIView = { + lazy var bluredView: UIView = { let blurEffect = UIBlurEffect(style: .dark) let bluredView = UIVisualEffectView(effect: blurEffect) bluredView.autoresizingMask = [.flexibleWidth, .flexibleHeight] - bluredView.layer.mask = createMaskLayer() + bluredView.layer.mask = createMaskLayer(withMiddleButtonPlace: true) bluredView.clipsToBounds = true return bluredView }() @@ -35,12 +36,19 @@ final class TabBar: UITabBar { override func layoutSubviews() { super.layoutSubviews() bluredView.frame = bounds - bluredView.layer.mask = createMaskLayer() +// bluredView.layer.mask = createMaskLayer(withMiddleButtonPlace: <#Bool#>) middleButton.rounded() } - - override public func draw(_ rect: CGRect) { - super.draw(rect) + + func setup(for ecosystem: WalletEcosystem) { + switch ecosystem { + case .regular: + bluredView.layer.mask = createMaskLayer(withMiddleButtonPlace: true) + middleButton.isHidden = false + case .ton: + bluredView.layer.mask = createMaskLayer(withMiddleButtonPlace: false) + middleButton.isHidden = true + } } private func setupLayout() { @@ -55,7 +63,7 @@ final class TabBar: UITabBar { } } - private func createMaskLayer() -> CAShapeLayer { + private func createMaskLayer(withMiddleButtonPlace: Bool) -> CAShapeLayer { let padding: CGFloat = 6.0 let centerButtonHeight: CGFloat = 56.0 let r = CGFloat(28) @@ -67,23 +75,25 @@ final class TabBar: UITabBar { let path = UIBezierPath() path.move(to: .zero) - path.addLine(to: CGPoint(x: halfW - f + padding, y: 0)) - path.addQuadCurve( - to: CGPoint(x: halfW - f, y: r / 2.0), - controlPoint: CGPoint(x: halfW - f, y: 0) - ) - path.addArc( - withCenter: CGPoint(x: halfW, y: r / 2.0), - radius: f, - startAngle: .pi, - endAngle: 0, - clockwise: false - ) - path.addQuadCurve( - to: CGPoint(x: halfW + f - padding, y: 0), - controlPoint: CGPoint(x: halfW + f, y: 0) - ) - + if withMiddleButtonPlace { + path.addLine(to: CGPoint(x: halfW - f + padding, y: 0)) + path.addQuadCurve( + to: CGPoint(x: halfW - f, y: r / 2.0), + controlPoint: CGPoint(x: halfW - f, y: 0) + ) + path.addArc( + withCenter: CGPoint(x: halfW, y: r / 2.0), + radius: f, + startAngle: .pi, + endAngle: 0, + clockwise: false + ) + path.addQuadCurve( + to: CGPoint(x: halfW + f - padding, y: 0), + controlPoint: CGPoint(x: halfW + f, y: 0) + ) + } + path.addLine(to: CGPoint(x: w, y: 0)) path.addLine(to: CGPoint(x: w, y: h)) path.addLine(to: CGPoint(x: 0.0, y: h)) diff --git a/fearless/Modules/NFT/MainNftContainer/MainNftContainerAssembly.swift b/fearless/Modules/NFT/MainNftContainer/MainNftContainerAssembly.swift index ccbb7d0eab..2a0c47952e 100644 --- a/fearless/Modules/NFT/MainNftContainer/MainNftContainerAssembly.swift +++ b/fearless/Modules/NFT/MainNftContainer/MainNftContainerAssembly.swift @@ -3,6 +3,7 @@ import SoraFoundation import RobinHood import SSFNetwork import SoraKeystore +import SSFModels final class MainNftContainerAssembly { static func configureModule(wallet: MetaAccountModel) -> MainNftContainerModuleCreationResult? { diff --git a/fearless/Modules/NFT/MainNftContainer/MainNftContainerRouter.swift b/fearless/Modules/NFT/MainNftContainer/MainNftContainerRouter.swift index 7b059187ff..209d00cc37 100644 --- a/fearless/Modules/NFT/MainNftContainer/MainNftContainerRouter.swift +++ b/fearless/Modules/NFT/MainNftContainer/MainNftContainerRouter.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels final class MainNftContainerRouter: MainNftContainerRouterInput { func showCollection( diff --git a/fearless/Modules/NFT/MainNftContainer/MainNftContainerViewController.swift b/fearless/Modules/NFT/MainNftContainer/MainNftContainerViewController.swift index 2b74dcf37d..878f2647f1 100644 --- a/fearless/Modules/NFT/MainNftContainer/MainNftContainerViewController.swift +++ b/fearless/Modules/NFT/MainNftContainer/MainNftContainerViewController.swift @@ -83,7 +83,9 @@ final class MainNftContainerViewController: UIViewController, ViewHolder { // MARK: - Private methods @objc private func actionRefresh() { - viewModels = nil + if viewModels?.isNotEmpty == true { + viewModels = nil + } rootView.tableView.reloadData() rootView.collectionView.reloadData() output.didPullToRefresh() diff --git a/fearless/Modules/NFT/NftCollection/NftCollectionProtocols.swift b/fearless/Modules/NFT/NftCollection/NftCollectionProtocols.swift index 75acb1ecac..18ebbacb90 100644 --- a/fearless/Modules/NFT/NftCollection/NftCollectionProtocols.swift +++ b/fearless/Modules/NFT/NftCollection/NftCollectionProtocols.swift @@ -1,3 +1,5 @@ +import SSFModels + typealias NftCollectionModuleCreationResult = (view: NftCollectionViewInput, input: NftCollectionModuleInput) protocol NftCollectionViewInput: ControllerBackedProtocol { diff --git a/fearless/Modules/NFT/NftCollection/NftCollectionRouter.swift b/fearless/Modules/NFT/NftCollection/NftCollectionRouter.swift index 59d9826543..89a320e4b2 100644 --- a/fearless/Modules/NFT/NftCollection/NftCollectionRouter.swift +++ b/fearless/Modules/NFT/NftCollection/NftCollectionRouter.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels final class NftCollectionRouter: NftCollectionRouterInput { func openNftDetails(nft: NFT, type: NftType, wallet: MetaAccountModel, address: String, from view: ControllerBackedProtocol?) { diff --git a/fearless/Modules/NFT/NftDetails/NftDetailsAssembly.swift b/fearless/Modules/NFT/NftDetails/NftDetailsAssembly.swift index 451e6f5fb7..e6ee79e5f6 100644 --- a/fearless/Modules/NFT/NftDetails/NftDetailsAssembly.swift +++ b/fearless/Modules/NFT/NftDetails/NftDetailsAssembly.swift @@ -1,6 +1,7 @@ import UIKit import SoraFoundation import RobinHood +import SSFModels final class NftDetailsAssembly { static func configureModule( diff --git a/fearless/Modules/NFT/NftDetails/NftDetailsPresenter.swift b/fearless/Modules/NFT/NftDetails/NftDetailsPresenter.swift index dc0c4f95f5..39d0196d02 100644 --- a/fearless/Modules/NFT/NftDetails/NftDetailsPresenter.swift +++ b/fearless/Modules/NFT/NftDetails/NftDetailsPresenter.swift @@ -1,6 +1,7 @@ import Foundation import SoraFoundation import Kingfisher +import SSFModels final class NftDetailsPresenter { // MARK: Private properties diff --git a/fearless/Modules/NFT/NftDetails/NftDetailsProtocols.swift b/fearless/Modules/NFT/NftDetails/NftDetailsProtocols.swift index ceab9a7eb6..b756a8382d 100644 --- a/fearless/Modules/NFT/NftDetails/NftDetailsProtocols.swift +++ b/fearless/Modules/NFT/NftDetails/NftDetailsProtocols.swift @@ -1,3 +1,5 @@ +import SSFModels + typealias NftDetailsModuleCreationResult = (view: NftDetailsViewInput, input: NftDetailsModuleInput) protocol NftDetailsViewInput: ControllerBackedProtocol { diff --git a/fearless/Modules/NFT/NftDetails/NftDetailsRouter.swift b/fearless/Modules/NFT/NftDetails/NftDetailsRouter.swift index bb949c492a..394356f030 100644 --- a/fearless/Modules/NFT/NftDetails/NftDetailsRouter.swift +++ b/fearless/Modules/NFT/NftDetails/NftDetailsRouter.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels final class NftDetailsRouter: NftDetailsRouterInput, SharingPresentable { func openSend(nft: NFT, wallet: MetaAccountModel, from view: ControllerBackedProtocol?) { diff --git a/fearless/Modules/NFT/NftSend/NftSendAssembly.swift b/fearless/Modules/NFT/NftSend/NftSendAssembly.swift index fa30620155..f56f406a08 100644 --- a/fearless/Modules/NFT/NftSend/NftSendAssembly.swift +++ b/fearless/Modules/NFT/NftSend/NftSendAssembly.swift @@ -1,4 +1,5 @@ import UIKit +import SSFAccountManagment import SoraFoundation import SSFModels import SoraKeystore @@ -9,6 +10,7 @@ import SSFNetwork enum NftSendAssemblyError: Error { case substrateNftNotImplemented + case tonNftNotImplemented } enum NftSendAssembly { @@ -71,11 +73,9 @@ enum NftSendAssembly { nft: nft, wallet: wallet, logger: Logger.shared, - viewModelFactory: - SendViewModelFactory( - iconGenerator: UniversalIconGenerator(), - accountScoreFetcher: accountStatisticsFetcher, - settings: SettingsManager.shared + viewModelFactory: SendViewModelFactory( + wallet: wallet, + iconGenerator: UniversalIconGenerator() ), dataValidatingFactory: dataValidatingFactory ) @@ -100,8 +100,8 @@ enum NftSendAssembly { } let keystore = Keychain() - switch chain.chainBaseType { - case .substrate: + switch chain.ecosystem { + case .substrate, .ethereumBased: throw NftSendAssemblyError.substrateNftNotImplemented case .ethereum: let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil @@ -123,6 +123,8 @@ enum NftSendAssembly { senderAddress: address, logger: Logger.shared ) + case .ton: + throw NftSendAssemblyError.substrateNftNotImplemented } } } diff --git a/fearless/Modules/NFT/NftSend/NftSendPresenter.swift b/fearless/Modules/NFT/NftSend/NftSendPresenter.swift index f08ce7e1d3..6c1192124f 100644 --- a/fearless/Modules/NFT/NftSend/NftSendPresenter.swift +++ b/fearless/Modules/NFT/NftSend/NftSendPresenter.swift @@ -3,6 +3,7 @@ import SoraFoundation import BigInt import SSFModels import SSFQRService +import SSFCrypto final class NftSendPresenter { // MARK: Private properties diff --git a/fearless/Modules/NFT/NftSend/NftSendViewController.swift b/fearless/Modules/NFT/NftSend/NftSendViewController.swift index 912a257d24..70674eefae 100644 --- a/fearless/Modules/NFT/NftSend/NftSendViewController.swift +++ b/fearless/Modules/NFT/NftSend/NftSendViewController.swift @@ -83,7 +83,7 @@ extension NftSendViewController: NftSendViewInput { func didReceive(viewModel: RecipientViewModel) { rootView.bind(viewModel: viewModel) - rootView.actionButton.set(enabled: viewModel.isValid) + rootView.actionButton.set(enabled: viewModel.isValid == true) } } diff --git a/fearless/Modules/NFT/NftSendConfirm/NftSendConfirmAssembly.swift b/fearless/Modules/NFT/NftSendConfirm/NftSendConfirmAssembly.swift index 8133a13edc..9609d82a43 100644 --- a/fearless/Modules/NFT/NftSendConfirm/NftSendConfirmAssembly.swift +++ b/fearless/Modules/NFT/NftSendConfirm/NftSendConfirmAssembly.swift @@ -4,6 +4,7 @@ import SSFUtils import SSFModels import SoraKeystore import Web3 +import SSFAccountManagment final class NftSendConfirmAssembly { static func configureModule( @@ -65,8 +66,8 @@ final class NftSendConfirmAssembly { } let keystore = Keychain() - switch chain.chainBaseType { - case .substrate: + switch chain.ecosystem { + case .substrate, .ethereumBased: throw NftSendAssemblyError.substrateNftNotImplemented case .ethereum: let accountId = accountResponse.isChainAccount ? accountResponse.accountId : nil @@ -88,6 +89,8 @@ final class NftSendConfirmAssembly { senderAddress: address, logger: Logger.shared ) + case .ton: + throw NftSendAssemblyError.tonNftNotImplemented } } } diff --git a/fearless/Modules/NFT/NftSendConfirm/NftSendConfirmPresenter.swift b/fearless/Modules/NFT/NftSendConfirm/NftSendConfirmPresenter.swift index 2f48c3c550..3af5883b3d 100644 --- a/fearless/Modules/NFT/NftSendConfirm/NftSendConfirmPresenter.swift +++ b/fearless/Modules/NFT/NftSendConfirm/NftSendConfirmPresenter.swift @@ -2,6 +2,7 @@ import Foundation import SoraFoundation import SSFModels import BigInt +import SSFCrypto final class NftSendConfirmPresenter { // MARK: Private properties diff --git a/fearless/Modules/NetworkIssuesNotification/NetworkIssuesNotificationAssembly.swift b/fearless/Modules/NetworkIssuesNotification/NetworkIssuesNotificationAssembly.swift index fdf3e14d61..ee8c18f3ea 100644 --- a/fearless/Modules/NetworkIssuesNotification/NetworkIssuesNotificationAssembly.swift +++ b/fearless/Modules/NetworkIssuesNotification/NetworkIssuesNotificationAssembly.swift @@ -1,6 +1,7 @@ import UIKit import SoraFoundation import RobinHood +import SSFModels final class NetworkIssuesNotificationAssembly { static func configureModule( diff --git a/fearless/Modules/NetworkIssuesNotification/NetworkIssuesNotificationRouter.swift b/fearless/Modules/NetworkIssuesNotification/NetworkIssuesNotificationRouter.swift index e530a4cba1..8510036863 100644 --- a/fearless/Modules/NetworkIssuesNotification/NetworkIssuesNotificationRouter.swift +++ b/fearless/Modules/NetworkIssuesNotification/NetworkIssuesNotificationRouter.swift @@ -64,7 +64,8 @@ final class NetworkIssuesNotificationRouter: NetworkIssuesNotificationRouterInpu private func showCreate(uniqueChainModel: UniqueChainModel, from view: ControllerBackedProtocol?) { guard let controller = UsernameSetupViewFactory.createViewForOnboarding( - flow: .chain(model: uniqueChainModel) + flow: .chain(model: uniqueChainModel), + ecosystem: .regular // TODO: - Select ecosystem )?.controller else { return } diff --git a/fearless/Modules/NetworkManagment/NetworkManagmentAssembly.swift b/fearless/Modules/NetworkManagment/NetworkManagmentAssembly.swift index e6cc8b2a8a..72d18b9843 100644 --- a/fearless/Modules/NetworkManagment/NetworkManagmentAssembly.swift +++ b/fearless/Modules/NetworkManagment/NetworkManagmentAssembly.swift @@ -5,6 +5,7 @@ import SSFModels final class NetworkManagmentAssembly { static func configureModule( + initialFilter: NetworkManagmentFilter? = nil, wallet: MetaAccountModel, chains: [ChainModel]?, contextTag: Int?, @@ -27,6 +28,7 @@ final class NetworkManagmentAssembly { let router = NetworkManagmentRouter() let presenter = NetworkManagmentPresenter( + initialFilter: initialFilter, wallet: wallet, interactor: interactor, router: router, diff --git a/fearless/Modules/NetworkManagment/NetworkManagmentPresenter.swift b/fearless/Modules/NetworkManagment/NetworkManagmentPresenter.swift index 778e336cb4..bf21a4184e 100644 --- a/fearless/Modules/NetworkManagment/NetworkManagmentPresenter.swift +++ b/fearless/Modules/NetworkManagment/NetworkManagmentPresenter.swift @@ -34,6 +34,7 @@ final class NetworkManagmentPresenter { // MARK: - Constructors init( + initialFilter: NetworkManagmentFilter?, wallet: MetaAccountModel, interactor: NetworkManagmentInteractorInput, router: NetworkManagmentRouterInput, @@ -51,7 +52,7 @@ final class NetworkManagmentPresenter { self.viewModelFactory = viewModelFactory self.contextTag = contextTag - initialFilter = NetworkManagmentFilter(identifier: wallet.networkManagmentFilter) + self.initialFilter = initialFilter ?? NetworkManagmentFilter(identifier: wallet.networkManagmentFilter) self.localizationManager = localizationManager } diff --git a/fearless/Modules/NewWallet/ChainAccount/ChainAccountInteractor.swift b/fearless/Modules/NewWallet/ChainAccount/ChainAccountInteractor.swift index 59d22c0ec5..fb41040d2b 100644 --- a/fearless/Modules/NewWallet/ChainAccount/ChainAccountInteractor.swift +++ b/fearless/Modules/NewWallet/ChainAccount/ChainAccountInteractor.swift @@ -24,7 +24,7 @@ final class ChainAccountInteractor { private let walletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterProtocol private let dependencyContainer = BalanceInfoDepencyContainer() private var currentDependencies: BalanceInfoDependencies? - private let ethRemoteBalanceFetching: EthereumRemoteBalanceFetching + private let accountInfoRemoteService: AccountInfoRemoteService private let chainRegistry: ChainRegistryProtocol private var remoteFetchTimer: Timer? @@ -39,7 +39,7 @@ final class ChainAccountInteractor { chainAssetFetching: ChainAssetFetchingProtocol, storageRequestFactory: StorageRequestFactoryProtocol, walletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterProtocol, - ethRemoteBalanceFetching: EthereumRemoteBalanceFetching, + accountInfoRemoteService: AccountInfoRemoteService, chainRegistry: ChainRegistryProtocol ) { self.wallet = wallet @@ -51,7 +51,7 @@ final class ChainAccountInteractor { self.chainAssetFetching = chainAssetFetching self.storageRequestFactory = storageRequestFactory self.walletBalanceSubscriptionAdapter = walletBalanceSubscriptionAdapter - self.ethRemoteBalanceFetching = ethRemoteBalanceFetching + self.accountInfoRemoteService = accountInfoRemoteService self.chainRegistry = chainRegistry } @@ -177,7 +177,7 @@ extension ChainAccountInteractor: ChainAccountInteractorInputProtocol { .getAvailableExportOptions( for: self.wallet, accountId: accountId, - isEthereum: response.isEthereumBased + ecosystem: response.ecosystem ) self.presenter?.didReceiveExportOptions(options: options) default: @@ -200,8 +200,7 @@ extension ChainAccountInteractor: ChainAccountInteractorInputProtocol { func updateData() { guard remoteFetchTimer == nil, - let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId, - chainAsset.chain.isEthereum + !chainAsset.chain.ecosystem.isSubstrate else { return } @@ -210,7 +209,13 @@ extension ChainAccountInteractor: ChainAccountInteractorInputProtocol { timer.invalidate() self?.remoteFetchTimer = nil }) - ethRemoteBalanceFetching.fetch(for: chainAsset, accountId: accountId, completionBlock: { _, _ in }) + Task { + do { + _ = try await accountInfoRemoteService.fetchAccountInfo(for: chainAsset, wallet: wallet) + } catch { + Logger.shared.customError(error) + } + } } func checkIsClaimAvailable() -> Bool { diff --git a/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift b/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift index d0895b57bb..0f20693349 100644 --- a/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift +++ b/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift @@ -283,7 +283,7 @@ extension ChainAccountPresenter: ChainAccountInteractorOutputProtocol { func didReceiveExportOptions(options: [ExportOption]) { var items: [ChainAction] = [] items.append(.export) - if !chainAsset.chain.isEthereum { items.append(.switchNode) } + if chainAsset.chain.ecosystem.isSubstrate || chainAsset.chain.ecosystem.isEthereumBased { items.append(.switchNode) } items.append(.replace) if interactor.checkIsClaimAvailable() { items.append(.claimCrowdloanRewards) } diff --git a/fearless/Modules/NewWallet/ChainAccount/ChainAccountViewFactory.swift b/fearless/Modules/NewWallet/ChainAccount/ChainAccountViewFactory.swift index e7ec9fb734..75c31cbdd2 100644 --- a/fearless/Modules/NewWallet/ChainAccount/ChainAccountViewFactory.swift +++ b/fearless/Modules/NewWallet/ChainAccount/ChainAccountViewFactory.swift @@ -47,15 +47,7 @@ enum ChainAccountViewFactory { let walletBalanceSubscriptionAdapter = WalletBalanceSubscriptionAdapter.shared - let ethereumBalanceRepositoryCacheWrapper = EthereumBalanceRepositoryCacheWrapper( - logger: Logger.shared, - repository: accountInfoRepository, - operationManager: OperationManagerFacade.sharedManager - ) - let ethereumRemoteBalanceFetching = EthereumRemoteBalanceFetching( - chainRegistry: chainRegistry, - repositoryWrapper: ethereumBalanceRepositoryCacheWrapper - ) + let accountInfoRemoteService = ServiceAssembly.shared.accountInfoRemoteServiceDefault() let interactor = ChainAccountInteractor( wallet: wallet, chainAsset: chainAsset, @@ -66,7 +58,7 @@ enum ChainAccountViewFactory { chainAssetFetching: chainAssetFetching, storageRequestFactory: storageRequestFactory, walletBalanceSubscriptionAdapter: walletBalanceSubscriptionAdapter, - ethRemoteBalanceFetching: ethereumRemoteBalanceFetching, + accountInfoRemoteService: accountInfoRemoteService, chainRegistry: chainRegistry ) diff --git a/fearless/Modules/NewWallet/ChainAccount/ChainAccountWireframe.swift b/fearless/Modules/NewWallet/ChainAccount/ChainAccountWireframe.swift index 4df0cde6ce..e01677c86e 100644 --- a/fearless/Modules/NewWallet/ChainAccount/ChainAccountWireframe.swift +++ b/fearless/Modules/NewWallet/ChainAccount/ChainAccountWireframe.swift @@ -24,12 +24,12 @@ final class ChainAccountWireframe: ChainAccountWireframeProtocol { ) } - func presentSendFlow( + @MainActor func presentSendFlow( from view: ControllerBackedProtocol?, chainAsset: ChainAsset, wallet: MetaAccountModel ) { - guard let controller = SendAssembly.configureModule( + guard let controller = TransferAssembly.configureModule( wallet: wallet, initialData: .chainAsset(chainAsset) )?.view.controller else { @@ -172,6 +172,7 @@ final class ChainAccountWireframe: ChainAccountWireframeProtocol { func showCreate(uniqueChainModel: UniqueChainModel, from view: ControllerBackedProtocol?) { guard let createController = AccountCreateViewFactory.createViewForOnboarding( + ecosystem: .regular, model: UsernameSetupModel(username: uniqueChainModel.meta.name), flow: .chain(model: uniqueChainModel) )?.controller else { diff --git a/fearless/Modules/NewWallet/ChainAccount/ViewModels/ChainAccountViewModelFactory.swift b/fearless/Modules/NewWallet/ChainAccount/ViewModels/ChainAccountViewModelFactory.swift index 3fc7e8a686..625c24447a 100644 --- a/fearless/Modules/NewWallet/ChainAccount/ViewModels/ChainAccountViewModelFactory.swift +++ b/fearless/Modules/NewWallet/ChainAccount/ViewModels/ChainAccountViewModelFactory.swift @@ -1,5 +1,6 @@ import Foundation import SSFModels +import SSFCrypto protocol ChainAccountViewModelFactoryProtocol { func buildChainAccountViewModel( @@ -24,7 +25,7 @@ class ChainAccountViewModelFactory: ChainAccountViewModelFactoryProtocol { var address: String? if let chainAccountResponse = wallet.fetch(for: chainAsset.chain.accountRequest()), - let address1 = try? AddressFactory.address(for: chainAccountResponse.accountId, chain: chainAsset.chain) { + let address1 = try? AddressFactory.address(for: chainAccountResponse.accountId, chainFormat: chainAsset.chain.chainFormat(bounceable: false)) { address = address1 } let allAssets = Array(chainAsset.chain.assets) diff --git a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListAssembly.swift b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListAssembly.swift index d0da0bca57..9c55ef0e73 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListAssembly.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListAssembly.swift @@ -3,6 +3,7 @@ import SoraFoundation import RobinHood import SoraKeystore import SSFStorageQueryKit +import SSFModels final class ChainAssetListAssembly { static func configureModule( @@ -26,15 +27,6 @@ final class ChainAssetListAssembly { let dependencyContainer = ChainAssetListDependencyContainer() - let ethereumBalanceRepositoryCacheWrapper = EthereumBalanceRepositoryCacheWrapper( - logger: Logger.shared, - repository: accountInfoRepository, - operationManager: OperationManagerFacade.sharedManager - ) - let ethereumRemoteBalanceFetching = EthereumRemoteBalanceFetching( - chainRegistry: chainRegistry, - repositoryWrapper: ethereumBalanceRepositoryCacheWrapper - ) let chainRepository = ChainRepositoryFactory().createRepository( for: NSPredicate.enabledCHain(), sortDescriptors: [NSSortDescriptor.chainsByAddressPrefix] @@ -59,22 +51,11 @@ final class ChainAssetListAssembly { missingAccountHelper: missingAccountHelper, accountInfoFetcher: accountInfoFetcher ) - let runtimeMetadataRepository: AsyncCoreDataRepositoryDefault = - SubstrateDataStorageFacade.shared.createAsyncRepository() + + let remoteBalanceService = ServiceAssembly.shared.accountInfoRemoteServiceDefault() let chainSettingsRepositoryFactory = ChainSettingsRepositoryFactory(storageFacade: UserDataStorageFacade.shared) let chainSettingsRepostiry = chainSettingsRepositoryFactory.createAsyncRepository() - let operationQueue = OperationManagerFacade.sharedDefaultQueue - let assetRepository = AssetRepositoryFactory().createRepository() let pricesService = PricesService.shared - let storagePerformer = SSFStorageQueryKit.StorageRequestPerformerDefault( - chainRegistry: chainRegistry - ) - - let accountInfoRemoteService = AccountInfoRemoteServiceDefault( - runtimeItemRepository: AsyncAnyRepository(runtimeMetadataRepository), - ethereumRemoteBalanceFetching: ethereumRemoteBalanceFetching, - storagePerformer: storagePerformer - ) let interactor = ChainAssetListInteractor( wallet: wallet, @@ -82,15 +63,14 @@ final class ChainAssetListAssembly { accountRepository: AnyDataProviderRepository(accountRepository), accountInfoFetchingProvider: accountInfoFetching, dependencyContainer: dependencyContainer, - ethRemoteBalanceFetching: ethereumRemoteBalanceFetching, + remoteBalanceService: remoteBalanceService, chainAssetFetching: chainAssetFetching, userDefaultsStorage: SettingsManager.shared, chainsIssuesCenter: chainsIssuesCenter, chainSettingsRepository: AsyncAnyRepository(chainSettingsRepostiry), chainRegistry: ChainRegistryFacade.sharedRegistry, - accountInfoRemoteService: accountInfoRemoteService, - pricesService: pricesService, - operationQueue: operationQueue + logger: ServiceAssembly.shared.logger, + pricesService: pricesService ) let router = ChainAssetListRouter() let viewModelFactory = ChainAssetListViewModelFactory( @@ -113,6 +93,8 @@ final class ChainAssetListAssembly { keyboardAdoptable: keyboardAdoptable, localizationManager: localizationManager ) + + presenter.bannersInput = bannersModule?.input return (view, presenter) } diff --git a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListDependencyContainer.swift b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListDependencyContainer.swift index 9bda654e1d..aec3dd043a 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListDependencyContainer.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListDependencyContainer.swift @@ -1,5 +1,6 @@ import Foundation import RobinHood +import SSFModels struct ChainAssetListDependencies { let chainAssetFetching: ChainAssetFetchingProtocol diff --git a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListInteractor.swift b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListInteractor.swift index d77d528331..be73d3e80f 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListInteractor.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListInteractor.swift @@ -19,7 +19,7 @@ final class ChainAssetListInteractor { private let accountRepository: AnyDataProviderRepository private let accountInfoFetchingProvider: AccountInfoFetching private let dependencyContainer: ChainAssetListDependencyContainer - private let ethRemoteBalanceFetching: EthereumRemoteBalanceFetching + private let remoteBalanceService: AccountInfoRemoteService private let chainAssetFetching: ChainAssetFetchingProtocol private var chainAssets: [ChainAsset]? private var filters: [ChainAssetsFetching.Filter] = [] @@ -28,9 +28,8 @@ final class ChainAssetListInteractor { private let chainsIssuesCenter: ChainsIssuesCenter private let chainSettingsRepository: AsyncAnyRepository private let chainRegistry: ChainRegistryProtocol - private let accountInfoRemoteService: AccountInfoRemoteService + private let logger: LoggerProtocol private let pricesService: PricesServiceProtocol - private let operationQueue: OperationQueue private let mutex = NSLock() private var remoteFetchTimer: Timer? @@ -47,30 +46,28 @@ final class ChainAssetListInteractor { accountRepository: AnyDataProviderRepository, accountInfoFetchingProvider: AccountInfoFetching, dependencyContainer: ChainAssetListDependencyContainer, - ethRemoteBalanceFetching: EthereumRemoteBalanceFetching, + remoteBalanceService: AccountInfoRemoteService, chainAssetFetching: ChainAssetFetchingProtocol, userDefaultsStorage: SettingsManagerProtocol, chainsIssuesCenter: ChainsIssuesCenter, chainSettingsRepository: AsyncAnyRepository, chainRegistry: ChainRegistryProtocol, - accountInfoRemoteService: AccountInfoRemoteService, - pricesService: PricesServiceProtocol, - operationQueue: OperationQueue + logger: LoggerProtocol, + pricesService: PricesServiceProtocol ) { self.wallet = wallet self.eventCenter = eventCenter self.accountRepository = accountRepository self.accountInfoFetchingProvider = accountInfoFetchingProvider self.dependencyContainer = dependencyContainer - self.ethRemoteBalanceFetching = ethRemoteBalanceFetching + self.remoteBalanceService = remoteBalanceService self.chainAssetFetching = chainAssetFetching self.userDefaultsStorage = userDefaultsStorage self.chainsIssuesCenter = chainsIssuesCenter self.chainSettingsRepository = chainSettingsRepository self.chainRegistry = chainRegistry - self.accountInfoRemoteService = accountInfoRemoteService + self.logger = logger self.pricesService = pricesService - self.operationQueue = operationQueue } // MARK: - Private methods @@ -105,8 +102,7 @@ final class ChainAssetListInteractor { accountInfoSubscriptionAdapter.subscribe( chainsAssets: chainAssets, handler: self, - deliveryOn: accountInfosDeliveryQueue, - notifyJustWhenUpdated: false + deliveryOn: accountInfosDeliveryQueue ) } @@ -128,6 +124,15 @@ final class ChainAssetListInteractor { self?.output?.didReceiveChainAssets(result: result) } } + + private func updateTonPricesIfNeeded() { + Task { + guard let tonAssets = chainAssets?.filter({ $0.chain.ecosystem == .ton }) else { + return + } + _ = try await remoteBalanceService.fetchAccountInfos(for: tonAssets, wallet: wallet) + } + } } // MARK: - ChainAssetListInteractorInput @@ -183,7 +188,13 @@ extension ChainAssetListInteractor: ChainAssetListInteractorInput { self?.output?.didReceiveChainAssets(result: .success(chainAssets)) self?.accountInfoFetchingProvider.fetch(for: chainAssets, wallet: strongSelf.wallet) { accountInfosByChainAssets in - self?.ethRemoteBalanceFetching.fetch(for: chainAssets, wallet: strongSelf.wallet) { _ in } + Task { + do { + _ = try await strongSelf.remoteBalanceService.fetchAccountInfos(for: chainAssets, wallet: strongSelf.wallet) + } catch { + strongSelf.logger.customError(error) + } + } self?.output?.didReceive(accountInfosByChainAssets: accountInfosByChainAssets) self?.subscribeToAccountInfo(for: chainAssets) } @@ -221,9 +232,14 @@ extension ChainAssetListInteractor: ChainAssetListInteractorInput { timer.invalidate() self?.remoteFetchTimer = nil }) - - ethRemoteBalanceFetching.fetch(for: chainAssets, wallet: wallet) { _ in } pricesService.updatePrices() + Task { + do { + _ = try await remoteBalanceService.fetchAccountInfos(for: chainAssets, wallet: wallet) + } catch { + logger.customError(error) + } + } } func getAvailableChainAssets(chainAsset: ChainAsset, completion: @escaping (([ChainAsset]) -> Void)) { @@ -279,14 +295,15 @@ extension ChainAssetListInteractor: EventVisitorProtocol { guard let chainAssets = chainAssets else { return } + updateTonPricesIfNeeded() } if wallet.assetsVisibility != event.account.assetsVisibility { - output?.updateViewModel(isInitSearchState: false) + updateChainAssets(using: filters, sorts: sorts, useCashe: false) } if wallet.unusedChainIds != event.account.unusedChainIds { - output?.updateViewModel(isInitSearchState: false) + output?.updateViewModel() } wallet = event.account diff --git a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListPresenter.swift b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListPresenter.swift index 9109fd54d8..089189a0b5 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListPresenter.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListPresenter.swift @@ -10,7 +10,7 @@ final class ChainAssetListPresenter { private weak var view: ChainAssetListViewInput? private let router: ChainAssetListRouterInput private let interactor: ChainAssetListInteractorInput - + var bannersInput: BannersModuleInput? private let viewModelFactory: ChainAssetListViewModelFactoryProtocol private var wallet: MetaAccountModel private var chainAssets: [ChainAsset]? @@ -35,6 +35,7 @@ final class ChainAssetListPresenter { self.router = router self.wallet = wallet self.viewModelFactory = viewModelFactory + self.localizationManager = localizationManager } @@ -64,6 +65,11 @@ final class ChainAssetListPresenter { DispatchQueue.main.async { self.view?.didReceive(viewModel: viewModel) + + DispatchQueue.global().async { + self.bannersInput?.reload() + } + } } } @@ -116,6 +122,10 @@ extension ChainAssetListPresenter: ChainAssetListViewOutput { self.view = view interactor.setup(with: self) } + + func didAppear(view: ChainAssetListViewInput) { + + } func didSelectViewModel(_ viewModel: ChainAccountBalanceCellViewModel) { if viewModel.chainAsset.chain.isSupported { @@ -194,7 +204,7 @@ extension ChainAssetListPresenter: ChainAssetListViewOutput { // MARK: - ChainAssetListInteractorOutput extension ChainAssetListPresenter: ChainAssetListInteractorOutput { - func updateViewModel(isInitSearchState _: Bool) { + func updateViewModel() { provideViewModel() } @@ -342,9 +352,9 @@ extension ChainAssetListPresenter: ChainAssetListModuleInput { extension ChainAssetListPresenter: BannersModuleOutput { func didTapCloseBanners() {} - func reloadBannersView() { + func reloadBannersView(bannersCount: Int) { DispatchQueue.main.async { - self.view?.reloadBanners() + self.view?.reloadBanners(shouldShowBanners: bannersCount > 0) } } } diff --git a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListProtocols.swift b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListProtocols.swift index cab98fdbd0..61f2a54f41 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListProtocols.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListProtocols.swift @@ -5,10 +5,11 @@ typealias ChainAssetListModuleCreationResult = (view: ChainAssetListViewInput, i protocol ChainAssetListViewInput: ControllerBackedProtocol { func didReceive(viewModel: ChainAssetListViewModel) - func reloadBanners() + func reloadBanners(shouldShowBanners: Bool) } protocol ChainAssetListViewOutput: AnyObject { + func didAppear(view: ChainAssetListViewInput) func didLoad(view: ChainAssetListViewInput) func didSelectViewModel(_ viewModel: ChainAccountBalanceCellViewModel) func didTapAction(actionType: SwipableCellButtonType, viewModel: ChainAccountBalanceCellViewModel) @@ -39,7 +40,7 @@ protocol ChainAssetListInteractorOutput: AnyObject { func didReceiveAccountInfo(result: Result, for chainAsset: ChainAsset) func didReceiveWallet(wallet: MetaAccountModel) func didReceiveChainsWithIssues(_ issues: [ChainIssue]) - func updateViewModel(isInitSearchState: Bool) + func updateViewModel() func didReceive(accountInfosByChainAssets: [ChainAsset: AccountInfo?]) func handleWalletChanged(wallet: MetaAccountModel) func didReceive(chainSettings: [ChainSettings]) diff --git a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListRouter.swift b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListRouter.swift index bf76a08797..8679d89195 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListRouter.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListRouter.swift @@ -34,12 +34,12 @@ final class ChainAssetListRouter: ChainAssetListRouterInput { ) } - func showSendFlow( + @MainActor func showSendFlow( from view: ControllerBackedProtocol?, chainAsset: ChainAsset, wallet: MetaAccountModel ) { - guard let controller = SendAssembly.configureModule( + guard let controller = TransferAssembly.configureModule( wallet: wallet, initialData: .chainAsset(chainAsset) )?.view.controller else { @@ -89,7 +89,8 @@ final class ChainAssetListRouter: ChainAssetListRouterInput { func showCreate(uniqueChainModel: UniqueChainModel, from view: ControllerBackedProtocol?) { guard let controller = UsernameSetupViewFactory.createViewForOnboarding( - flow: .chain(model: uniqueChainModel) + flow: .chain(model: uniqueChainModel), + ecosystem: .regular // TODO: - Select ecosystem )?.controller else { return } diff --git a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListViewController.swift b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListViewController.swift index 7c3113cee8..d41dc40ac6 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListViewController.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListViewController.swift @@ -63,6 +63,8 @@ final class ChainAssetListViewController: if keyboardHandler == nil, keyboardAdoptable { setupKeyboardHandler() } + + output.didAppear(view: self) } override func viewDidDisappear(_ animated: Bool) { @@ -146,11 +148,17 @@ private extension ChainAssetListViewController { // MARK: - ChainAssetListViewInput extension ChainAssetListViewController: ChainAssetListViewInput { - func reloadBanners() { - guard viewModel != nil else { + func reloadBanners(shouldShowBanners: Bool) { + guard shouldShowBanners else { + rootView.removeHeaderView() + return + } + + guard let viewModel else { return } - rootView.tableView.setAndLayoutTableHeaderView(header: rootView.headerViewContainer) + + didReceive(viewModel: viewModel) } func didReceive(viewModel: ChainAssetListViewModel) { @@ -162,21 +170,25 @@ extension ChainAssetListViewController: ChainAssetListViewInput { switch viewModel.displayState { case let .defaultList(_, withAnimate): - rootView.setHeaderView() rootView.setFooterView() + rootView.tableView.reloadData() + guard rootView.isAnimating == false else { + rootView.setHeaderView() + reloadEmptyState(animated: false) return } - rootView.tableView.reloadData() if withAnimate { rootView.runManageAssetAnimate(finish: { [weak self] in self?.output.didFinishManageAssetAnimate() - self?.rootView.tableView.reloadData() + self?.rootView.setHeaderView() }) + } else { + rootView.setHeaderView() } - case .chainHasNetworkIssue, .chainHasAccountIssue, .allIsHidden: + case .chainHasNetworkIssue, .chainHasAccountIssue: rootView.removeHeaderView() rootView.removeFooterView() rootView.tableView.reloadData() @@ -185,8 +197,11 @@ extension ChainAssetListViewController: ChainAssetListViewInput { isEmpty ? rootView.removeFooterView() : rootView.setFooterView() isEmpty ? rootView.removeHeaderView() : rootView.setHeaderView() rootView.tableView.reloadData() + case .allIsHidden: + rootView.setFooterView() + rootView.setHeaderView() + rootView.tableView.reloadData() } - reloadEmptyState(animated: false) } } @@ -278,7 +293,8 @@ extension ChainAssetListViewController: EmptyStateDataSource { extension ChainAssetListViewController: EmptyStateDelegate { var shouldDisplayEmptyState: Bool { - guard let viewModel = viewModel else { return false } - return viewModel.displayState.rows.isEmpty + return false +// guard let viewModel = viewModel else { return false } +// return viewModel.displayState.rows.isEmpty } } diff --git a/fearless/Modules/NewWallet/ChainAssetList/Views/ChainAssetListViewLayout.swift b/fearless/Modules/NewWallet/ChainAssetList/Views/ChainAssetListViewLayout.swift index a1d70b28c1..9336871f04 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/Views/ChainAssetListViewLayout.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/Views/ChainAssetListViewLayout.swift @@ -65,15 +65,12 @@ final class ChainAssetListViewLayout: UIView { func addBanners(view: UIView) { bannersView = view - bannersView?.isHidden = true - headerViewContainer.addArrangedSubview(view) - view.snp.makeConstraints { make in - make.width.equalToSuperview().inset(UIConstants.bigOffset) - } } func setHeaderView() { - tableView.setAndLayoutTableHeaderView(header: headerViewContainer) + if let bannersView = bannersView { + tableView.setAndLayoutTableHeaderView(header: bannersView) + } } func removeHeaderView() { @@ -111,10 +108,10 @@ final class ChainAssetListViewLayout: UIView { container.scrollBottomOffset = 116 container.addArrangedSubview(headerViewContainer) container.addArrangedSubview(emptyView) - container.addArrangedSubview(footerButton) + let footerContainer = UIView() + container.addArrangedSubview(footerContainer) headerViewContainer.snp.remakeConstraints { make in - make.leading.trailing.equalToSuperview() make.width.equalToSuperview() } @@ -124,7 +121,9 @@ final class ChainAssetListViewLayout: UIView { make.height.greaterThanOrEqualToSuperview() } + footerContainer.addSubview(footerButton) footerButton.snp.remakeConstraints { make in + make.top.bottom.equalToSuperview() make.leading.trailing.equalToSuperview().inset(16) make.height.equalTo(UIConstants.actionHeight) } @@ -133,17 +132,23 @@ final class ChainAssetListViewLayout: UIView { } func runManageAssetAnimate(finish: @escaping (() -> Void)) { - isAnimating = true + var visibleRect: CGRect = .zero + visibleRect.origin = self.tableView.contentOffset + visibleRect.size = self.tableView.bounds.size + let rect = self.tableView.convert( + self.footerButton.bounds, + from: self.tableView.tableFooterView + ) + + guard !visibleRect.intersects(rect) else { + finish() + return + } + + self.tableView.scrollRectToVisible(rect, animated: true) DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { - let rect = self.tableView.convert( - self.footerButton.bounds, - from: self.tableView.tableFooterView - ) - self.tableView.scrollRectToVisible( - rect, - animated: true - ) + self.isAnimating = true UIView.animate( withDuration: 0.6, @@ -152,13 +157,14 @@ final class ChainAssetListViewLayout: UIView { self.footerButton.transform = CGAffineTransform(scaleX: 1.2, y: 1.2) }, completion: { _ in - UIView.animate(withDuration: 0.6) { + UIView.animate(withDuration: 0.6, + animations: { self.footerButton.transform = CGAffineTransform.identity - finish() self.isAnimating = false - } - } - ) + }, completion: { _ in + finish() + }) + }) } } diff --git a/fearless/Modules/NewWallet/WalletSendConfirm/ViewModels/WalletSendConfirmViewModelFactory.swift b/fearless/Modules/NewWallet/WalletSendConfirm/ViewModels/WalletSendConfirmViewModelFactory.swift deleted file mode 100644 index 4fb1b4160f..0000000000 --- a/fearless/Modules/NewWallet/WalletSendConfirm/ViewModels/WalletSendConfirmViewModelFactory.swift +++ /dev/null @@ -1,71 +0,0 @@ -import Foundation -import SSFModels - -struct WalletSendConfirmViewModelFactoryParameters { - let amount: Decimal - let senderAccountViewModel: AccountViewModel? - let receiverAccountViewModel: AccountViewModel? - let assetBalanceViewModel: AssetBalanceViewModelProtocol? - let tipRequired: Bool - let tipViewModel: BalanceViewModelProtocol? - let feeViewModel: BalanceViewModelProtocol? - let wallet: MetaAccountModel - let locale: Locale - let scamInfo: ScamInfo? - let assetModel: AssetModel -} - -protocol WalletSendConfirmViewModelFactoryProtocol { - func buildViewModel( - parameters: WalletSendConfirmViewModelFactoryParameters - ) -> WalletSendConfirmViewModel -} - -class WalletSendConfirmViewModelFactory: WalletSendConfirmViewModelFactoryProtocol { - let amountFormatterFactory: AssetBalanceFormatterFactoryProtocol - let assetInfo: AssetBalanceDisplayInfo - - init(amountFormatterFactory: AssetBalanceFormatterFactoryProtocol, assetInfo: AssetBalanceDisplayInfo) { - self.amountFormatterFactory = amountFormatterFactory - self.assetInfo = assetInfo - } - - func buildViewModel( - parameters: WalletSendConfirmViewModelFactoryParameters - ) -> WalletSendConfirmViewModel { - let formatter = amountFormatterFactory.createTokenFormatter(for: assetInfo, usageCase: .detailsCrypto) - let inputAmount = formatter.value(for: parameters.locale).stringFromDecimal(parameters.amount) ?? "" - let amountString = R.string.localizable.sendConfirmAmountTitle( - inputAmount, - preferredLanguages: parameters.locale.rLanguages - ) - let amountAttributedString = NSMutableAttributedString(string: amountString) - amountAttributedString.addAttribute( - NSAttributedString.Key.foregroundColor, - value: R.color.colorWhite()!.cgColor, - range: (amountString as NSString).range(of: inputAmount) - ) - let shadowColor = HexColorConverter.hexStringToUIColor( - hex: parameters.assetModel.color - )?.cgColor - let symbolViewModel = SymbolViewModel( - symbolViewModel: parameters.assetModel.icon.map { RemoteImageViewModel(url: $0) }, - shadowColor: shadowColor - ) - return WalletSendConfirmViewModel( - amountAttributedString: amountAttributedString, - amountString: inputAmount, - senderNameString: parameters.wallet.name, - senderAddressString: parameters.senderAccountViewModel?.name ?? "", - receiverAddressString: parameters.receiverAccountViewModel?.name ?? "", - priceString: parameters.assetBalanceViewModel?.price ?? "", - feeAmountString: parameters.feeViewModel?.amount ?? "", - feePriceString: parameters.feeViewModel?.price ?? "", - tipRequired: parameters.tipRequired, - tipAmountString: parameters.tipViewModel?.amount ?? "", - tipPriceString: parameters.tipViewModel?.price ?? "", - showWarning: parameters.scamInfo != nil, - symbolViewModel: symbolViewModel - ) - } -} diff --git a/fearless/Modules/NewWallet/WalletSendConfirm/ViewModels/WalletSendConfirmViewState.swift b/fearless/Modules/NewWallet/WalletSendConfirm/ViewModels/WalletSendConfirmViewState.swift deleted file mode 100644 index b31303cb03..0000000000 --- a/fearless/Modules/NewWallet/WalletSendConfirm/ViewModels/WalletSendConfirmViewState.swift +++ /dev/null @@ -1,6 +0,0 @@ -import Foundation - -enum WalletSendConfirmViewState { - case loading - case loaded(WalletSendConfirmViewModel) -} diff --git a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmInteractor.swift b/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmInteractor.swift deleted file mode 100644 index 67f775ad66..0000000000 --- a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmInteractor.swift +++ /dev/null @@ -1,159 +0,0 @@ -import UIKit -import RobinHood -import Web3 -import IrohaCrypto -import SSFModels -import SSFCrypto -import SoraKeystore -import Web3PromiseKit - -final class WalletSendConfirmInteractor: RuntimeConstantFetching { - weak var presenter: WalletSendConfirmInteractorOutputProtocol? - - private let selectedMetaAccount: MetaAccountModel - private let accountInfoSubscriptionAdapter: AccountInfoSubscriptionAdapterProtocol - private let call: SendConfirmTransferCall - private let chainAsset: ChainAsset - private let wallet: MetaAccountModel - private var equilibriumTotalBalanceService: EquilibriumTotalBalanceServiceProtocol? - let dependencyContainer: SendDepencyContainer - private var balanceProvider: AnyDataProvider? - - init( - selectedMetaAccount: MetaAccountModel, - chainAsset: ChainAsset, - call: SendConfirmTransferCall, - accountInfoSubscriptionAdapter: AccountInfoSubscriptionAdapterProtocol, - dependencyContainer: SendDepencyContainer, - wallet: MetaAccountModel - ) { - self.selectedMetaAccount = selectedMetaAccount - self.chainAsset = chainAsset - self.accountInfoSubscriptionAdapter = accountInfoSubscriptionAdapter - self.call = call - self.dependencyContainer = dependencyContainer - self.wallet = wallet - } - - private func subscribeToAccountInfo() { - var chainsAssets = [chainAsset] - if !chainAsset.isUtility, - let utilityAsset = getFeePaymentChainAsset(for: chainAsset) { - chainsAssets.append(utilityAsset) - } - accountInfoSubscriptionAdapter.subscribe( - chainsAssets: chainsAssets, - handler: self, - deliveryOn: .main - ) - } - - private func subscribeToFee() { - switch call { - case let .transfer(transfer): - Task { - do { - let transferService = try await dependencyContainer.prepareDepencies(chainAsset: chainAsset).transferService - transferService.subscribeForFee(transfer: transfer, listener: self) - } catch { - await MainActor.run { - presenter?.didReceiveFee(result: .failure(error)) - } - } - } - case let .xorlessTransfer(xorlessTransfer): - break - } - } -} - -extension WalletSendConfirmInteractor: WalletSendConfirmInteractorInputProtocol { - func setup() { - subscribeToAccountInfo() - provideConstants() - subscribeToFee() - } - - func submitExtrinsic() { - Task { - do { - let transferService = try await dependencyContainer.prepareDepencies(chainAsset: chainAsset).transferService - - let txHash: String - switch call { - case let .transfer(transfer): - txHash = try await transferService.submit(transfer: transfer) - case let .xorlessTransfer(transfer): - txHash = try await transferService.submit(transfer: transfer) - } - - await MainActor.run { - presenter?.didTransfer(result: .success(txHash)) - } - } catch { - await MainActor.run { - presenter?.didTransfer(result: .failure(error)) - } - } - } - } - - func getFeePaymentChainAsset(for chainAsset: ChainAsset?) -> ChainAsset? { - guard let chainAsset = chainAsset else { return nil } - if let utilityAsset = chainAsset.chain.utilityAssets().first { - return ChainAsset(chain: chainAsset.chain, asset: utilityAsset) - } - return chainAsset - } - - func fetchEquilibriumTotalBalance(chainAsset: ChainAsset, amount: Decimal) { - if chainAsset.chain.isEquilibrium { - Task { - let service = try await dependencyContainer - .prepareDepencies(chainAsset: chainAsset) - .equilibruimTotalBalanceService - equilibriumTotalBalanceService = service - - let totalBalanceAfterTransfer = equilibriumTotalBalanceService? - .totalBalanceAfterTransfer(chainAsset: chainAsset, amount: amount) ?? .zero - presenter?.didReceive(eqTotalBalance: totalBalanceAfterTransfer) - } - } - } - - func provideConstants() { - Task { - let dependencies = try await dependencyContainer.prepareDepencies(chainAsset: chainAsset) - - dependencies.existentialDepositService.fetchExistentialDeposit( - chainAsset: chainAsset - ) { [weak self] result in - self?.presenter?.didReceiveMinimumBalance(result: result) - } - } - } -} - -extension WalletSendConfirmInteractor: AccountInfoSubscriptionAdapterHandler { - func handleAccountInfo( - result: Swift.Result, - accountId _: AccountId, - chainAsset: ChainAsset - ) { - presenter?.didReceiveAccountInfo(result: result, for: chainAsset) - } -} - -extension WalletSendConfirmInteractor: TransferFeeEstimationListener { - func didReceiveFee(fee: BigUInt) { - DispatchQueue.main.async { [weak self] in - self?.presenter?.didReceiveFee(result: .success(RuntimeDispatchInfo(feeValue: fee))) - } - } - - func didReceiveFeeError(feeError: Error) { - DispatchQueue.main.async { [weak self] in - self?.presenter?.didReceiveFee(result: .failure(feeError)) - } - } -} diff --git a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmPresenter.swift b/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmPresenter.swift deleted file mode 100644 index 9a0fcffb34..0000000000 --- a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmPresenter.swift +++ /dev/null @@ -1,378 +0,0 @@ -import Foundation -import Web3 -import BigInt -import SoraFoundation -import IrohaCrypto -import SwiftUI -import SSFModels - -struct SendLoadingCollector { - var feeReady: Bool = false - var balanceReady: Bool = false - var utilityBalanceReady: Bool = false - var edReady: Bool = false - - mutating func reset(isUtility: Bool) { - feeReady = false - balanceReady = false - utilityBalanceReady = !isUtility - edReady = false - } - - var isReady: Bool { - [ - feeReady, - balanceReady, - utilityBalanceReady, - edReady - ].allSatisfy { $0 } - } -} - -final class WalletSendConfirmPresenter { - weak var view: WalletSendConfirmViewProtocol? - private let wireframe: WalletSendConfirmWireframeProtocol - private let interactor: WalletSendConfirmInteractorInputProtocol - private let accountViewModelFactory: AccountViewModelFactoryProtocol - private let dataValidatingFactory: SendDataValidatingFactory - private let logger: LoggerProtocol? - private let chainAsset: ChainAsset - private let call: SendConfirmTransferCall - private let wallet: MetaAccountModel - private let walletSendConfirmViewModelFactory: WalletSendConfirmViewModelFactoryProtocol - private let scamInfo: ScamInfo? - private var feeViewModel: BalanceViewModelProtocol? - - private var balance: Decimal? - private var utilityBalance: Decimal? - private var fee: Decimal? - private var minimumBalance: BigUInt? - private var eqUilibriumTotalBalance: Decimal? - - private var loadingCollector = SendLoadingCollector() - private var priceData: PriceData? { - chainAsset.asset.getPrice(for: wallet.selectedCurrency) - } - - init( - interactor: WalletSendConfirmInteractorInputProtocol, - wireframe: WalletSendConfirmWireframeProtocol, - accountViewModelFactory: AccountViewModelFactoryProtocol, - dataValidatingFactory: SendDataValidatingFactory, - walletSendConfirmViewModelFactory: WalletSendConfirmViewModelFactoryProtocol, - logger: LoggerProtocol?, - chainAsset: ChainAsset, - wallet: MetaAccountModel, - call: SendConfirmTransferCall, - scamInfo: ScamInfo?, - feeViewModel: BalanceViewModelProtocol?, - localizationManager: LocalizationManagerProtocol - ) { - self.interactor = interactor - self.wireframe = wireframe - self.accountViewModelFactory = accountViewModelFactory - self.dataValidatingFactory = dataValidatingFactory - self.walletSendConfirmViewModelFactory = walletSendConfirmViewModelFactory - self.logger = logger - self.chainAsset = chainAsset - self.call = call - self.wallet = wallet - self.scamInfo = scamInfo - self.feeViewModel = feeViewModel - self.localizationManager = localizationManager - if let feeViewModel { - fee = Decimal(string: feeViewModel.amount) - } - loadingCollector.feeReady = feeViewModel != nil - } - - private func provideViewModel() { - Task { - let amount = Decimal.fromSubstrateAmount(call.amount, precision: Int16(chainAsset.asset.precision)) ?? .zero - let parameters = WalletSendConfirmViewModelFactoryParameters( - amount: amount, - senderAccountViewModel: provideSenderAccountViewModel(), - receiverAccountViewModel: provideReceiverAccountViewModel(), - assetBalanceViewModel: try await provideAssetVewModel(), - tipRequired: chainAsset.chain.isTipRequired, - tipViewModel: try await provideTipViewModel(), - feeViewModel: feeViewModel, - wallet: wallet, - locale: selectedLocale, - scamInfo: scamInfo, - assetModel: chainAsset.asset - ) - let viewModel = walletSendConfirmViewModelFactory.buildViewModel( - parameters: parameters - ) - - await MainActor.run { - self.view?.didReceive(state: .loaded(viewModel)) - } - } - } - - private func provideReceiverAccountViewModel() -> AccountViewModel? { - let title = R.string.localizable - .walletSendReceiverTitle(preferredLanguages: selectedLocale.rLanguages) - - return accountViewModelFactory.buildViewModel( - title: title, - address: call.receiverAddress, - locale: selectedLocale - ) - } - - private func provideSenderAccountViewModel() -> AccountViewModel? { - guard let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId, - let senderAddress = try? AddressFactory.address(for: accountId, chain: chainAsset.chain) - else { - return nil - } - - let title = R.string.localizable - .transactionDetailsFrom(preferredLanguages: selectedLocale.rLanguages) - - return accountViewModelFactory.buildViewModel( - title: title, - address: senderAddress, - locale: selectedLocale - ) - } - - private func provideAssetVewModel() async throws -> AssetBalanceViewModelProtocol? { - let balanceViewModelFactory = buildBalanceViewModelFactory(wallet: wallet, for: chainAsset) - let amount = Decimal.fromSubstrateAmount(call.amount, precision: Int16(chainAsset.asset.precision)) ?? .zero - return balanceViewModelFactory?.createAssetBalanceViewModel( - amount, - balance: balance, - priceData: priceData - ).value(for: selectedLocale) - } - - private func provideTipViewModel() async throws -> BalanceViewModelProtocol? { - guard - let utilityAsset = interactor.getFeePaymentChainAsset(for: chainAsset), - let balanceViewModelFactory = buildBalanceViewModelFactory(wallet: wallet, for: utilityAsset) - else { return nil } - - let tip = Decimal.fromSubstrateAmount(call.tip ?? .zero, precision: Int16(chainAsset.asset.precision)) - return tip - .map { balanceViewModelFactory.balanceFromPrice($0, priceData: priceData, usageCase: .detailsCrypto) }? - .value(for: selectedLocale) - } - - private func updateFeeViewModel() { - guard - let utilityAsset = interactor.getFeePaymentChainAsset(for: chainAsset), - let balanceViewModelFactory = buildBalanceViewModelFactory(wallet: wallet, for: utilityAsset) - else { - return - } - let utilityPriceData = utilityAsset.asset.getPrice(for: wallet.selectedCurrency) - - let viewModel = fee - .map { balanceViewModelFactory.balanceFromPrice($0, priceData: utilityPriceData, usageCase: .detailsCrypto) }? - .value(for: selectedLocale) - feeViewModel = viewModel - } - - private func buildBalanceViewModelFactory( - wallet: MetaAccountModel, - for chainAsset: ChainAsset? - ) -> BalanceViewModelFactoryProtocol? { - guard let chainAsset = chainAsset else { - return nil - } - let assetInfo = chainAsset.asset - .displayInfo(with: chainAsset.chain.icon) - let balanceViewModelFactory = BalanceViewModelFactory( - targetAssetInfo: assetInfo, - selectedMetaAccount: wallet - ) - return balanceViewModelFactory - } - - private func validateAndSubmitTransfer() { - let amount = Decimal.fromSubstrateAmount(call.amount, precision: Int16(chainAsset.asset.precision)) ?? .zero - let tipPaymentChainAsset = interactor.getFeePaymentChainAsset(for: chainAsset) - let tipPaymentPrecision = tipPaymentChainAsset?.asset.precision ?? chainAsset.asset.precision - let tip = Decimal.fromSubstrateAmount(call.tip ?? .zero, precision: Int16(tipPaymentPrecision)) ?? .zero - - let balanceType: BalanceType = !chainAsset.isUtility ? - .orml(balance: balance, utilityBalance: utilityBalance) : .utility(balance: balance) - - DataValidationRunner(validators: [ - dataValidatingFactory.canPayFeeAndAmount( - balanceType: balanceType, - feeAndTip: (fee ?? 0) + tip, - sendAmount: amount, - locale: selectedLocale - ) - ]).runValidation { [weak self] in - guard let strongSelf = self else { return } - strongSelf.view?.didStartLoading() - strongSelf.interactor.submitExtrinsic() - } - } - - private func submitXorlessTransfer() { - view?.didStartLoading() - interactor.submitExtrinsic() - } - - private func checkLoadingState() { - DispatchQueue.main.async { [unowned self] in - self.view?.didReceive(isLoading: !self.loadingCollector.isReady) - } - } -} - -extension WalletSendConfirmPresenter: WalletSendConfirmPresenterProtocol { - func didTapScamWarningButton() { - let title = R.string.localizable.scamWarningAlertTitle( - chainAsset.asset.symbol.uppercased(), - preferredLanguages: selectedLocale.rLanguages - ) - let message = R.string.localizable.scamWarningAlertSubtitle( - chainAsset.asset.symbolUppercased, - preferredLanguages: selectedLocale.rLanguages - ) - - let sheetViewModel = SheetAlertPresentableViewModel( - title: title, - message: message, - actions: [], - closeAction: R.string.localizable.commonClose(preferredLanguages: selectedLocale.rLanguages), - icon: R.image.iconWarningBig() - ) - wireframe.present( - viewModel: sheetViewModel, - from: view - ) - } - - func setup() { - interactor.setup() - provideViewModel() - loadingCollector.utilityBalanceReady = chainAsset.isUtility - } - - func didTapBackButton() { - wireframe.close(view: view) - } - - func didTapConfirmButton() { - switch call { - case .transfer: - validateAndSubmitTransfer() - case .xorlessTransfer: - submitXorlessTransfer() - } - } -} - -extension WalletSendConfirmPresenter: WalletSendConfirmInteractorOutputProtocol { - func didTransfer(result: Result) { - view?.didStopLoading() - - switch result { - case let .success(hash): - - wireframe.complete(on: view, title: hash, chainAsset: chainAsset) - case let .failure(error): - guard let view = view else { - return - } - - if let rpcError = error as? RPCResponse.Error, rpcError.code == -32000 { - wireframe.presentAmountTooHigh(from: view, locale: selectedLocale) - return - } - - if !wireframe.present(error: error, from: view, locale: selectedLocale) { - wireframe.presentExtrinsicFailed(from: view, locale: selectedLocale) - } - } - } - - func didReceiveAccountInfo(result: Result, for chainAsset: ChainAsset) { - switch result { - case let .success(accountInfo): - if chainAsset == self.chainAsset { - loadingCollector.balanceReady = true - checkLoadingState() - - balance = accountInfo.map { - Decimal.fromSubstrateAmount( - $0.data.sendAvailable, - precision: Int16(chainAsset.asset.precision) - ) - } ?? 0.0 - - provideViewModel() - } else if let utilityAsset = interactor.getFeePaymentChainAsset(for: chainAsset), - utilityAsset == chainAsset { - loadingCollector.utilityBalanceReady = true - checkLoadingState() - - utilityBalance = accountInfo.map { - Decimal.fromSubstrateAmount( - $0.data.sendAvailable, - precision: Int16(utilityAsset.asset.precision) - ) - } ?? 0 - } - case let .failure(error): - logger?.error("Did receive account info error: \(error)") - } - } - - func didReceiveMinimumBalance(result: Result) { - switch result { - case let .success(minimumBalance): - loadingCollector.edReady = true - checkLoadingState() - self.minimumBalance = minimumBalance - - provideViewModel() - case let .failure(error): - loadingCollector.edReady = true - checkLoadingState() - logger?.error("Did receive minimum balance error: \(error)") - } - } - - func didReceiveFee(result: Result) { - switch result { - case let .success(dispatchInfo): - guard let utilityAsset = interactor.getFeePaymentChainAsset(for: chainAsset) else { return } - fee = BigUInt(string: dispatchInfo.fee).map { - Decimal.fromSubstrateAmount($0, precision: Int16(utilityAsset.asset.precision)) - } ?? nil - updateFeeViewModel() - provideViewModel() - let amount = Decimal.fromSubstrateAmount(call.amount, precision: Int16(chainAsset.asset.precision)) ?? .zero - let tipPaymentChainAsset = interactor.getFeePaymentChainAsset(for: chainAsset) - let tipPaymentPrecision = tipPaymentChainAsset?.asset.precision ?? chainAsset.asset.precision - let tip = Decimal.fromSubstrateAmount(call.tip ?? .zero, precision: Int16(tipPaymentPrecision)) ?? .zero - - let fullAmount = amount + fee.or(.zero) + tip - interactor.fetchEquilibriumTotalBalance(chainAsset: chainAsset, amount: fullAmount) - loadingCollector.feeReady = true - checkLoadingState() - case let .failure(error): - logger?.error("Did receive fee error: \(error)") - } - } - - func didReceive(eqTotalBalance: Decimal) { - eqUilibriumTotalBalance = eqTotalBalance - loadingCollector.balanceReady = true - checkLoadingState() - } -} - -extension WalletSendConfirmPresenter: Localizable { - func applyLocalization() {} -} diff --git a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmProtocols.swift b/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmProtocols.swift deleted file mode 100644 index b0113d7dea..0000000000 --- a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmProtocols.swift +++ /dev/null @@ -1,47 +0,0 @@ -import BigInt -import Foundation -import SSFModels - -protocol WalletSendConfirmViewProtocol: ControllerBackedProtocol, LoadableViewProtocol { - func didReceive(state: WalletSendConfirmViewState) - func didReceive(isLoading: Bool) -} - -protocol WalletSendConfirmPresenterProtocol: AnyObject { - func setup() - func didTapConfirmButton() - func didTapBackButton() - func didTapScamWarningButton() -} - -protocol WalletSendConfirmInteractorInputProtocol: AnyObject { - var dependencyContainer: SendDepencyContainer { get } - - func setup() - func submitExtrinsic() - func getFeePaymentChainAsset(for chainAsset: ChainAsset?) -> ChainAsset? - func fetchEquilibriumTotalBalance(chainAsset: ChainAsset, amount: Decimal) - func provideConstants() -} - -protocol WalletSendConfirmInteractorOutputProtocol: AnyObject { - func didReceiveAccountInfo(result: Result, for chainAsset: ChainAsset) - func didReceiveMinimumBalance(result: Result) - func didReceiveFee(result: Result) - func didReceive(eqTotalBalance: Decimal) - func didTransfer(result: Result) -} - -protocol WalletSendConfirmWireframeProtocol: - ErrorPresentable, - BaseErrorPresentable, - ModalAlertPresenting, - SheetAlertPresentable { - func close(view: ControllerBackedProtocol?) - func finish(view: ControllerBackedProtocol?) - func complete( - on view: ControllerBackedProtocol?, - title: String, - chainAsset: ChainAsset - ) -} diff --git a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmViewController.swift b/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmViewController.swift deleted file mode 100644 index 076b66d738..0000000000 --- a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmViewController.swift +++ /dev/null @@ -1,81 +0,0 @@ -import UIKit -import SoraFoundation - -final class WalletSendConfirmViewController: UIViewController, ViewHolder, HiddableBarWhenPushed { - typealias RootViewType = WalletSendConfirmViewLayout - - let presenter: WalletSendConfirmPresenterProtocol - - private var state: WalletSendConfirmViewState = .loading - - init(presenter: WalletSendConfirmPresenterProtocol, localizationManager: LocalizationManagerProtocol) { - self.presenter = presenter - super.init(nibName: nil, bundle: nil) - self.localizationManager = localizationManager - } - - @available(*, unavailable) - required init?(coder _: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - override func loadView() { - view = WalletSendConfirmViewLayout() - } - - override func viewDidLoad() { - super.viewDidLoad() - - setupLocalization() - presenter.setup() - - rootView.navigationBar.backButton.addTarget(self, action: #selector(backButtonClicked), for: .touchUpInside) - rootView.receiverWarningButton.addTarget(self, action: #selector(handleScamWarningTapped), for: .touchUpInside) - rootView.confirmButton.addTarget(self, action: #selector(continueButtonClicked), for: .touchUpInside) - } - - private func setupLocalization() { - rootView.locale = selectedLocale - } - - private func applyState(_ state: WalletSendConfirmViewState) { - self.state = state - - switch state { - case .loading: - break - case let .loaded(model): - rootView.bind(confirmViewModel: model) - } - } - - @objc private func continueButtonClicked() { - presenter.didTapConfirmButton() - } - - @objc private func backButtonClicked() { - presenter.didTapBackButton() - } - - @objc private func handleScamWarningTapped() { - presenter.didTapScamWarningButton() - } -} - -extension WalletSendConfirmViewController: WalletSendConfirmViewProtocol { - func didReceive(state: WalletSendConfirmViewState) { - applyState(state) - } - - func didReceive(isLoading: Bool) { - rootView.confirmButton.set(loading: isLoading) - - if !isLoading { - rootView.confirmButton.set(enabled: true, changeStyle: true) - } - } -} - -extension WalletSendConfirmViewController: Localizable { - func applyLocalization() {} -} diff --git a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmViewFactory.swift b/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmViewFactory.swift deleted file mode 100644 index 45855dfedc..0000000000 --- a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmViewFactory.swift +++ /dev/null @@ -1,122 +0,0 @@ -import Foundation -import BigInt -import SSFUtils -import SoraFoundation -import SoraKeystore -import SSFModels -import RobinHood - -enum SendConfirmTransferCall { - case transfer(Transfer) - case xorlessTransfer(XorlessTransfer) - - var amount: BigUInt { - switch self { - case let .transfer(transfer): - return transfer.amount - case let .xorlessTransfer(xorlessTransfer): - return xorlessTransfer.amount - } - } - - var receiverAddress: String { - switch self { - case let .transfer(transfer): - return transfer.receiver - case let .xorlessTransfer(xorlessTransfer): - let bokoloId = String(data: xorlessTransfer.additionalData, encoding: .utf8) - if let bokoloAddress = bokoloId, bokoloAddress.isNotEmpty { - return bokoloAddress - } else if let receiver = try? AddressFactory.address(for: xorlessTransfer.receiver, chainFormat: .substrate(69)) { - return receiver - } - return "" - } - } - - var tip: BigUInt? { - switch self { - case let .transfer(transfer): - return transfer.tip - case .xorlessTransfer: - return nil - } - } -} - -enum WalletSendConfirmViewFactory { - static func createView( - wallet: MetaAccountModel, - chainAsset: ChainAsset, - call: SendConfirmTransferCall, - scamInfo: ScamInfo?, - feeViewModel: BalanceViewModelProtocol? - ) -> WalletSendConfirmViewProtocol? { - let interactor = createInteractor( - wallet: wallet, - chainAsset: chainAsset, - call: call - ) - - let wireframe = WalletSendConfirmWireframe() - - let accountViewModelFactory = AccountViewModelFactory(iconGenerator: UniversalIconGenerator()) - let assetInfo = chainAsset.asset.displayInfo(with: chainAsset.chain.icon) - - let dataValidatingFactory = SendDataValidatingFactory(presentable: wireframe) - - let viewModelFactory = WalletSendConfirmViewModelFactory( - amountFormatterFactory: AssetBalanceFormatterFactory(), - assetInfo: assetInfo - ) - - let presenter = WalletSendConfirmPresenter( - interactor: interactor, - wireframe: wireframe, - accountViewModelFactory: accountViewModelFactory, - dataValidatingFactory: dataValidatingFactory, - walletSendConfirmViewModelFactory: viewModelFactory, - logger: Logger.shared, - chainAsset: chainAsset, - wallet: wallet, - call: call, - scamInfo: scamInfo, - feeViewModel: feeViewModel, - localizationManager: LocalizationManager.shared - ) - - let view = WalletSendConfirmViewController( - presenter: presenter, - localizationManager: LocalizationManager.shared - ) - - dataValidatingFactory.view = view - presenter.view = view - interactor.presenter = presenter - - return view - } - - private static func createInteractor( - wallet: MetaAccountModel, - chainAsset: ChainAsset, - call: SendConfirmTransferCall - ) -> WalletSendConfirmInteractor { - let operationManager = OperationManagerFacade.sharedManager - let dependencyContainer = SendDepencyContainer( - wallet: wallet, - operationManager: operationManager - ) - return WalletSendConfirmInteractor( - selectedMetaAccount: wallet, - chainAsset: chainAsset, - call: call, - accountInfoSubscriptionAdapter: AccountInfoSubscriptionAdapter( - walletLocalSubscriptionFactory: WalletLocalSubscriptionFactory.shared, - selectedMetaAccount: wallet - ), - dependencyContainer: dependencyContainer, - wallet: wallet - ) - } -} diff --git a/fearless/Modules/NewWallet/WalletTransactionDetails/ViewModel/WalletTransactionDetailsViewModelFactory.swift b/fearless/Modules/NewWallet/WalletTransactionDetails/ViewModel/WalletTransactionDetailsViewModelFactory.swift index c03a0c17f7..f70cb971c5 100644 --- a/fearless/Modules/NewWallet/WalletTransactionDetails/ViewModel/WalletTransactionDetailsViewModelFactory.swift +++ b/fearless/Modules/NewWallet/WalletTransactionDetails/ViewModel/WalletTransactionDetailsViewModelFactory.swift @@ -1,5 +1,5 @@ import Foundation - +import TonSwift import SoraFoundation import SSFModels @@ -66,8 +66,17 @@ class WalletTransactionDetailsViewModelFactory: WalletTransactionDetailsViewMode switch transactionType { case .incoming, .outgoing: - let from = transactionType == .outgoing ? accountAddress : transaction.peerName - let to = transactionType == .incoming ? accountAddress : transaction.peerName + let from: String? + let to: String? + switch chain.ecosystem { + case .substrate, .ethereumBased, .ethereum: + from = transactionType == .outgoing ? accountAddress : transaction.peerName + to = transactionType == .incoming ? accountAddress : transaction.peerName + case .ton: + let tonAddress = try? TonSwift.Address.parse(accountAddress).toFriendly(bounceable: false).toString() + from = transactionType == .outgoing ? tonAddress : transaction.peerName + to = transactionType == .incoming ? tonAddress : transaction.peerName + } let amountString = tokenFormatter.stringFromDecimal(transaction.amount.decimalValue) let fee: Decimal = transaction.fees.map(\.amount.decimalValue).reduce(0, +) let feeString = feeFormatter?.stringFromDecimal(fee) diff --git a/fearless/Modules/NewWallet/WalletTransactionDetails/WalletTransactionDetailsProtocols.swift b/fearless/Modules/NewWallet/WalletTransactionDetails/WalletTransactionDetailsProtocols.swift index 4e323cb509..f05e410b8d 100644 --- a/fearless/Modules/NewWallet/WalletTransactionDetails/WalletTransactionDetailsProtocols.swift +++ b/fearless/Modules/NewWallet/WalletTransactionDetails/WalletTransactionDetailsProtocols.swift @@ -1,4 +1,3 @@ - protocol WalletTransactionDetailsViewProtocol: ControllerBackedProtocol { func didReceiveState(_ state: WalletTransactionDetailsViewState) } diff --git a/fearless/Modules/NewWallet/WalletTransactionHistory/Model/WalletTransactionHistoryDataState.swift b/fearless/Modules/NewWallet/WalletTransactionHistory/Model/WalletTransactionHistoryDataState.swift index 0b2be7706b..cea64a0ba6 100644 --- a/fearless/Modules/NewWallet/WalletTransactionHistory/Model/WalletTransactionHistoryDataState.swift +++ b/fearless/Modules/NewWallet/WalletTransactionHistory/Model/WalletTransactionHistoryDataState.swift @@ -1,5 +1,3 @@ - - enum WalletTransactionHistoryDataState { case waitingCached case loading(page: Pagination, previousPage: Pagination?) diff --git a/fearless/Modules/NewWallet/WalletTransactionHistory/ViewModel/WalletTransactionHistoryViewModelFactory.swift b/fearless/Modules/NewWallet/WalletTransactionHistory/ViewModel/WalletTransactionHistoryViewModelFactory.swift index a078ac4a88..4a767f9826 100644 --- a/fearless/Modules/NewWallet/WalletTransactionHistory/ViewModel/WalletTransactionHistoryViewModelFactory.swift +++ b/fearless/Modules/NewWallet/WalletTransactionHistory/ViewModel/WalletTransactionHistoryViewModelFactory.swift @@ -1,4 +1,3 @@ - import RobinHood import SSFUtils import UIKit @@ -198,6 +197,10 @@ final class WalletTransactionHistoryViewModelFactory: WalletTransactionHistoryVi size: CGSize(width: 50, height: 50), contentScale: UIScreen.main.scale ) + var imageViewModel: RemoteImageViewModel? + if let icon = data.context?["icon"] { + imageViewModel = RemoteImageViewModel(string: icon) + } let viewModel = WalletTransactionHistoryCellViewModel( transaction: data, address: address, @@ -208,7 +211,7 @@ final class WalletTransactionHistoryViewModelFactory: WalletTransactionHistoryVi statusIcon: statusIcon, status: data.status, incoming: incoming, - imageViewModel: nil + imageViewModel: imageViewModel ) return viewModel } diff --git a/fearless/Modules/NewWallet/WalletTransactionHistory/Views/WalletTransactionHistoryCell.swift b/fearless/Modules/NewWallet/WalletTransactionHistory/Views/WalletTransactionHistoryCell.swift index f847748981..b23c77de55 100644 --- a/fearless/Modules/NewWallet/WalletTransactionHistory/Views/WalletTransactionHistoryCell.swift +++ b/fearless/Modules/NewWallet/WalletTransactionHistory/Views/WalletTransactionHistoryCell.swift @@ -64,10 +64,6 @@ class WalletTransactionHistoryCell: UITableViewCell { setupLayout() } - override func prepareForReuse() { - super.prepareForReuse() - } - @available(*, unavailable) required init?(coder _: NSCoder) { fatalError("init(coder:) has not been implemented") @@ -128,15 +124,15 @@ class WalletTransactionHistoryCell: UITableViewCell { transactionStatusIconImageView.image = viewModel.statusIcon transactionStatusIconImageView.isHidden = viewModel.statusIcon == nil - if let icon = viewModel.icon { - accountIconImageView.image = icon - } else if let imageViewModel = viewModel.imageViewModel { + if let imageViewModel = viewModel.imageViewModel { imageViewModel.loadImage( on: accountIconImageView, targetSize: LayoutConstants.accountImageViewSize, animated: true, cornerRadius: 0 ) + } else if let icon = viewModel.icon { + accountIconImageView.image = icon } switch viewModel.status { diff --git a/fearless/Modules/NewWallet/WalletTransactionHistory/WalletTransactionHistoryInteractor.swift b/fearless/Modules/NewWallet/WalletTransactionHistory/WalletTransactionHistoryInteractor.swift index 19f282e4a0..ededa8d629 100644 --- a/fearless/Modules/NewWallet/WalletTransactionHistory/WalletTransactionHistoryInteractor.swift +++ b/fearless/Modules/NewWallet/WalletTransactionHistory/WalletTransactionHistoryInteractor.swift @@ -268,7 +268,7 @@ final class WalletTransactionHistoryInteractor { do { try dependencyContainer.createDependencies(for: chainAsset, selectedAccount: selectedAccount) - let changesBlock = { [weak self] (changes: [DataProviderChange]) -> Void in + let changesBlock = { [weak self] (changes: [DataProviderChange]) in if let change = changes.first { switch change { case let .insert(item), let .update(item): diff --git a/fearless/Modules/NewWallet/WalletTransactionHistory/WalletTransactionHistoryProtocols.swift b/fearless/Modules/NewWallet/WalletTransactionHistory/WalletTransactionHistoryProtocols.swift index f366cbe567..a86767f747 100644 --- a/fearless/Modules/NewWallet/WalletTransactionHistory/WalletTransactionHistoryProtocols.swift +++ b/fearless/Modules/NewWallet/WalletTransactionHistory/WalletTransactionHistoryProtocols.swift @@ -1,4 +1,3 @@ - import SSFModels protocol WalletTransactionHistoryViewProtocol: ControllerBackedProtocol, Draggable, LoadableViewProtocol { diff --git a/fearless/Modules/NodeSelection/Views/NodeSelectionTableCell.swift b/fearless/Modules/NodeSelection/Views/NodeSelectionTableCell.swift index 87642b9827..b0e0fd5625 100644 --- a/fearless/Modules/NodeSelection/Views/NodeSelectionTableCell.swift +++ b/fearless/Modules/NodeSelection/Views/NodeSelectionTableCell.swift @@ -54,10 +54,6 @@ class NodeSelectionTableCell: UITableViewCell { setupLayout() } - override func prepareForReuse() { - super.prepareForReuse() - } - @available(*, unavailable) required init?(coder _: NSCoder) { fatalError("init(coder:) has not been implemented") diff --git a/fearless/Modules/Onboarding/OnboardingViewLayout.swift b/fearless/Modules/Onboarding/OnboardingViewLayout.swift index 759bd04635..c2f12fa94e 100644 --- a/fearless/Modules/Onboarding/OnboardingViewLayout.swift +++ b/fearless/Modules/Onboarding/OnboardingViewLayout.swift @@ -27,8 +27,6 @@ final class OnboardingViewLayout: UIView { return view }() - let segmentedControl = FWSegmentedControl() - let nextButton: TriangularedButton = { let button = TriangularedButton() button.applyEnabledStyle() diff --git a/fearless/Modules/OnbordingMain/OnboardingMainPresenter.swift b/fearless/Modules/OnbordingMain/OnboardingMainPresenter.swift index 2d279ad1d1..e2ac99c5f0 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainPresenter.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainPresenter.swift @@ -9,6 +9,7 @@ final class OnboardingMainPresenter { private let legalData: LegalData private let locale: Locale + private var ecosystem: AccountCreateEcosystem? init( legalData: LegalData, @@ -52,6 +53,10 @@ final class OnboardingMainPresenter { } extension OnboardingMainPresenter: OnboardingMainPresenterProtocol { + func didSelect(ecosystem: AccountCreateEcosystem) { + self.ecosystem = ecosystem + } + func setup() { interactor.setup() @@ -79,72 +84,80 @@ extension OnboardingMainPresenter: OnboardingMainPresenterProtocol { } func activateSignup() { - wireframe.showSignup(from: view) + guard let ecosystem else { return } + wireframe.showSignup(from: view, ecosystem: ecosystem) } func activateAccountRestore() { - let preferredLanguages = locale.rLanguages - - let mnemonicTitle = R.string.localizable - .googleBackupChoiceMnemonic(preferredLanguages: preferredLanguages) - let mnemonicAction = SheetAlertPresentableAction( - title: mnemonicTitle, - button: UIFactory.default.createDisabledButton() - ) { [weak self] in - guard let self = self else { return } - self.wireframe.showAccountRestore(defaultSource: .mnemonic, from: self.view) - } - - let rawTitle = R.string.localizable - .googleBackupChoiceRaw(preferredLanguages: preferredLanguages) - let rawAction = SheetAlertPresentableAction( - title: rawTitle, - button: UIFactory.default.createDisabledButton() - ) { [weak self] in - guard let self = self else { return } - self.wireframe.showAccountRestore(defaultSource: .seed, from: self.view) - } + guard let ecosystem else { return } + switch ecosystem { + case .regular: + let preferredLanguages = locale.rLanguages + + let mnemonicTitle = R.string.localizable + .googleBackupChoiceMnemonic(preferredLanguages: preferredLanguages) + let mnemonicAction = SheetAlertPresentableAction( + title: mnemonicTitle, + button: UIFactory.default.createDisabledButton() + ) { [weak self] in + guard let self = self else { return } + self.wireframe.showAccountRestore(defaultSource: .mnemonic, flow: .wallet(step: .substrate), from: self.view) + } + + let rawTitle = R.string.localizable + .googleBackupChoiceRaw(preferredLanguages: preferredLanguages) + let rawAction = SheetAlertPresentableAction( + title: rawTitle, + button: UIFactory.default.createDisabledButton() + ) { [weak self] in + guard let self = self else { return } + self.wireframe.showAccountRestore(defaultSource: .seed, flow: .wallet(step: .substrate), from: self.view) + } + + let jsonTitle = R.string.localizable + .googleBackupChoiceJson(preferredLanguages: preferredLanguages) + let jsonAction = SheetAlertPresentableAction( + title: jsonTitle, + button: UIFactory.default.createDisabledButton() + ) { [weak self] in + guard let self = self else { return } + self.wireframe.showAccountRestore(defaultSource: .keystore, flow: .wallet(step: .substrate), from: self.view) + } + + let googleButton = TriangularedButton() + googleButton.imageWithTitleView?.iconImage = R.image.googleBackup() + googleButton.applyDisabledStyle() + let googleTitle = R.string.localizable + .googleBackupChoiceGoogle(preferredLanguages: preferredLanguages) + let googleAction = SheetAlertPresentableAction( + title: googleTitle, + button: googleButton + ) { [weak self] in + guard let self = self else { return } + self.activateGoogleBackup() + } + + let cancelTitle = R.string.localizable.commonCancel(preferredLanguages: preferredLanguages) + let cancelAction = SheetAlertPresentableAction( + title: cancelTitle, + style: .pinkBackgroundWhiteText + ) - let jsonTitle = R.string.localizable - .googleBackupChoiceJson(preferredLanguages: preferredLanguages) - let jsonAction = SheetAlertPresentableAction( - title: jsonTitle, - button: UIFactory.default.createDisabledButton() - ) { [weak self] in - guard let self = self else { return } - self.wireframe.showAccountRestore(defaultSource: .keystore, from: self.view) - } + let title = R.string.localizable + .googleBackupChoiceTitle(preferredLanguages: preferredLanguages) + let viewModel = SheetAlertPresentableViewModel( + title: title, + message: nil, + actions: [mnemonicAction, rawAction, jsonAction, googleAction, cancelAction], + closeAction: nil, + icon: nil + ) - let googleButton = TriangularedButton() - googleButton.imageWithTitleView?.iconImage = R.image.googleBackup() - googleButton.applyDisabledStyle() - let googleTitle = R.string.localizable - .googleBackupChoiceGoogle(preferredLanguages: preferredLanguages) - let googleAction = SheetAlertPresentableAction( - title: googleTitle, - button: googleButton - ) { [weak self] in - guard let self = self else { return } - self.activateGoogleBackup() + wireframe.present(viewModel: viewModel, from: view) + case .ton: + // TODO: - Ton google backup + wireframe.showAccountRestore(defaultSource: .tonMnemonic, flow: .wallet(step: .ton), from: self.view) } - - let cancelTitle = R.string.localizable.commonCancel(preferredLanguages: preferredLanguages) - let cancelAction = SheetAlertPresentableAction( - title: cancelTitle, - style: .pinkBackgroundWhiteText - ) - - let title = R.string.localizable - .googleBackupChoiceTitle(preferredLanguages: preferredLanguages) - let viewModel = SheetAlertPresentableViewModel( - title: title, - message: nil, - actions: [mnemonicAction, rawAction, jsonAction, googleAction, cancelAction], - closeAction: nil, - icon: nil - ) - - wireframe.present(viewModel: viewModel, from: view) } func didTapGetPreinstalled() { diff --git a/fearless/Modules/OnbordingMain/OnboardingMainProtocol.swift b/fearless/Modules/OnbordingMain/OnboardingMainProtocol.swift index 3584c13e6f..5415c5e0e7 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainProtocol.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainProtocol.swift @@ -12,12 +12,17 @@ protocol OnboardingMainPresenterProtocol: AnyObject { func activateTerms() func activatePrivacy() func didTapGetPreinstalled() + func didSelect(ecosystem: AccountCreateEcosystem) } protocol OnboardingMainWireframeProtocol: WebPresentable, ErrorPresentable, SheetAlertPresentable, WarningPresentable, PresentDismissable, AppUpdatePresentable { - func showSignup(from view: OnboardingMainViewProtocol?) + func showSignup( + from view: OnboardingMainViewProtocol?, + ecosystem: AccountCreateEcosystem + ) func showAccountRestore( defaultSource: AccountImportSource, + flow: AccountImportFlow, from view: OnboardingMainViewProtocol? ) func showKeystoreImport(from view: OnboardingMainViewProtocol?) @@ -42,6 +47,6 @@ protocol OnboardingMainInteractorOutputProtocol: AnyObject { protocol OnboardingMainViewFactoryProtocol { static func createViewForOnboarding() -> OnboardingMainViewProtocol? - static func createViewForAdding() -> OnboardingMainViewProtocol? + static func createViewForAdding(ecosystem: AccountCreateEcosystem?) -> OnboardingMainViewProtocol? static func createViewForAccountSwitch() -> OnboardingMainViewProtocol? } diff --git a/fearless/Modules/OnbordingMain/OnboardingMainViewController.swift b/fearless/Modules/OnbordingMain/OnboardingMainViewController.swift index 92fdf98db3..4b5da06c3e 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainViewController.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainViewController.swift @@ -2,93 +2,102 @@ import UIKit import SoraUI import SoraFoundation -final class OnboardingMainViewController: UIViewController, AdaptiveDesignable { - var presenter: OnboardingMainPresenterProtocol! - - @IBOutlet private var termsLabel: UILabel! - @IBOutlet private var signUpButton: TriangularedButton! - @IBOutlet private var restoreButton: TriangularedButton! - @IBOutlet private var logoView: UIImageView! - @IBOutlet var preInstalledButton: TriangularedButton! +final class OnboardingMainViewController: UIViewController, ViewHolder, HiddableBarWhenPushed { + typealias RootViewType = OnboardingMainViewLayout - @IBOutlet private var restoreBottomConstraint: NSLayoutConstraint! - @IBOutlet private var restoreWidthConstraint: NSLayoutConstraint! - @IBOutlet private var signupWidthConstraint: NSLayoutConstraint! - - @IBOutlet private var termsBottomConstraint: NSLayoutConstraint! + var presenter: OnboardingMainPresenterProtocol! - var localizationManager: LocalizationManagerProtocol? + private let ecosystem: AccountCreateEcosystem? + init(ecosystem: AccountCreateEcosystem?) { + self.ecosystem = ecosystem + super.init(nibName: nil, bundle: nil) + } - var termDecorator: AttributedStringDecoratorProtocol? + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } - // MARK: Appearance + override func loadView() { + view = OnboardingMainViewLayout() + } override func viewDidLoad() { super.viewDidLoad() - - setupLocalization() - configureLogoView() - configureTermsLabel() - adjustLayout() - presenter.setup() + rootView.preInstalledButton.isHidden = true + bindActions() + setupGestureRecognizer() - preInstalledButton.isHidden = true - } - - private func configureTermsLabel() { - if let attributedText = termsLabel.attributedText { - termsLabel.attributedText = termDecorator?.decorate(attributedString: attributedText) + if let ecosystem { + ecosystemHasBeenSelected() + presenter.didSelect(ecosystem: ecosystem) } } - private func configureLogoView() { - logoView.tintColor = R.color.colorWhite()! - } - - private func setupLocalization() { - signUpButton.imageWithTitleView?.title = R.string.localizable - .usernameSetupTitle20(preferredLanguages: localizationManager?.selectedLocale.rLanguages) - restoreButton.imageWithTitleView?.title = R.string.localizable - .onboardingRestoreWallet(preferredLanguages: localizationManager?.selectedLocale.rLanguages) - preInstalledButton.imageWithTitleView?.title = R.string.localizable.onboardingPreinstalledWalletButtonText(preferredLanguages: localizationManager?.selectedLocale.rLanguages) - preInstalledButton.imageWithTitleView?.iconImage = R.image.iconPreinstalledWallet() - let text = NSAttributedString(string: R.string.localizable - .onboardingTermsAndConditions1(preferredLanguages: localizationManager?.selectedLocale.rLanguages)) - termsLabel.attributedText = text - } - - private func adjustLayout() { - if isAdaptiveHeightDecreased { - restoreBottomConstraint.constant *= designScaleRatio.height - termsBottomConstraint.constant *= designScaleRatio.height + private func bindActions() { + rootView.selectRegularBannerView.actionButton.addAction { [weak self] in + guard let self else { return } + self.presenter.didSelect(ecosystem: .regular) + self.ecosystemHasBeenSelected() + } + rootView.selectTonBannerView.actionButton.addAction { [weak self] in + guard let self else { return } + self.presenter.didSelect(ecosystem: .ton) + self.ecosystemHasBeenSelected() } - if isAdaptiveWidthDecreased { - restoreWidthConstraint.constant *= designScaleRatio.width - signupWidthConstraint.constant *= designScaleRatio.width + rootView.signUpButton.addAction { [weak self] in + self?.presenter.activateSignup() + } + rootView.restoreButton.addAction { [weak self] in + self?.presenter.activateAccountRestore() + } + rootView.preInstalledButton.addAction { [weak self] in + self?.presenter.didTapGetPreinstalled() + } + rootView.backButton.addAction { [weak self] in + UIView.animate( + withDuration: 0.25, + delay: 0, + options: .curveLinear + ) { [weak self] in + self?.rootView.bannerContainer.isHidden = false + self?.rootView.buttonContainer.alpha = 0 + self?.rootView.bannerContainer.alpha = 1 + } completion: { [weak self] _ in + self?.rootView.buttonContainer.isHidden = true + self?.rootView.backButton.isHidden = true + } } } - // MARK: Action + private func setupGestureRecognizer() { + let gesture = UITapGestureRecognizer() + rootView.termsLabel.addGestureRecognizer(gesture) - @IBAction private func actionSignup(sender _: AnyObject) { - presenter.activateSignup() + gesture.addTarget(self, action: #selector(actionTerms(gestureRecognizer: ))) } - @IBAction private func actionRestoreAccess(sender _: AnyObject) { - presenter.activateAccountRestore() - } - - @IBAction func actionPreinstalled() { - presenter.didTapGetPreinstalled() + private func ecosystemHasBeenSelected() { + UIView.animate( + withDuration: 0.25, + delay: 0, + options: .curveLinear + ) { [weak self] in + self?.rootView.buttonContainer.isHidden = false + self?.rootView.buttonContainer.alpha = 1 + self?.rootView.bannerContainer.alpha = 0 + } completion: { [weak self] _ in + self?.rootView.bannerContainer.isHidden = true + self?.rootView.backButton.isHidden = false + } } - @IBAction private func actionTerms(gestureRecognizer: UITapGestureRecognizer) { + @objc private func actionTerms(gestureRecognizer: UITapGestureRecognizer) { if gestureRecognizer.state == .ended { - let location = gestureRecognizer.location(in: termsLabel.superview) + let location = gestureRecognizer.location(in: rootView.termsLabel.superview) - if location.x < termsLabel.center.x { + if location.x < rootView.termsLabel.center.x { presenter.activateTerms() } else { presenter.activatePrivacy() @@ -99,6 +108,13 @@ final class OnboardingMainViewController: UIViewController, AdaptiveDesignable { extension OnboardingMainViewController: OnboardingMainViewProtocol { func didReceive(preinstalledWalletEnabled: Bool) { - preInstalledButton.isHidden = !preinstalledWalletEnabled + rootView.preInstalledButton.isHidden = !preinstalledWalletEnabled + } +} + +// MARK: - Localizable +extension OnboardingMainViewController: Localizable { + func applyLocalization() { + rootView.locale = selectedLocale } } diff --git a/fearless/Modules/OnbordingMain/OnboardingMainViewFactory.swift b/fearless/Modules/OnbordingMain/OnboardingMainViewFactory.swift index f806265898..a4dcf17e92 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainViewFactory.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainViewFactory.swift @@ -7,21 +7,22 @@ import SSFNetwork final class OnboardingMainViewFactory: OnboardingMainViewFactoryProtocol { static func createViewForOnboarding() -> OnboardingMainViewProtocol? { let wireframe = OnboardingMainWireframe() - return createView(for: wireframe) + return createView(for: wireframe, ecosystem: nil) } - static func createViewForAdding() -> OnboardingMainViewProtocol? { + static func createViewForAdding(ecosystem: AccountCreateEcosystem?) -> OnboardingMainViewProtocol? { let wireframe = AddAccount.OnboardingMainWireframe() - return createView(for: wireframe) + return createView(for: wireframe, ecosystem: ecosystem) } static func createViewForAccountSwitch() -> OnboardingMainViewProtocol? { let wireframe = SwitchAccount.OnboardingMainWireframe() - return createView(for: wireframe) + return createView(for: wireframe, ecosystem: nil) } private static func createView( - for wireframe: OnboardingMainWireframeProtocol + for wireframe: OnboardingMainWireframeProtocol, + ecosystem: AccountCreateEcosystem? ) -> OnboardingMainViewProtocol? { guard let kestoreImportService: KeystoreImportServiceProtocol = URLHandlingService.shared.findService() @@ -41,9 +42,7 @@ final class OnboardingMainViewFactory: OnboardingMainViewFactoryProtocol { let localizationManager = LocalizationManager.shared - let view = OnboardingMainViewController(nib: R.nib.onbordingMain) - view.termDecorator = CompoundAttributedStringDecorator.legal(for: locale) - view.localizationManager = localizationManager + let view = OnboardingMainViewController(ecosystem: ecosystem) let appVersionObserver = AppVersionObserver( operationManager: OperationManagerFacade.sharedManager, @@ -80,6 +79,7 @@ final class OnboardingMainViewFactory: OnboardingMainViewFactoryProtocol { presenter.view = view interactor.presenter = presenter + view.localizationManager = localizationManager return view } diff --git a/fearless/Modules/OnbordingMain/OnboardingMainViewLayout.swift b/fearless/Modules/OnbordingMain/OnboardingMainViewLayout.swift new file mode 100644 index 0000000000..5539e1814a --- /dev/null +++ b/fearless/Modules/OnbordingMain/OnboardingMainViewLayout.swift @@ -0,0 +1,153 @@ +import Foundation +import UIKit + +final class OnboardingMainViewLayout: UIView { + + private let backgroundImageView: UIImageView = { + let imageView = UIImageView() + imageView.contentMode = .scaleAspectFill + imageView.image = R.image.backgroundImage() + return imageView + }() + + let backButton: UIButton = { + let button = UIButton() + button.setImage(R.image.iconBack(), for: .normal) + button.backgroundColor = .clear + button.isHidden = true + return button + }() + + let logoView: UIImageView = { + let imageView = UIImageView() + imageView.contentMode = .scaleAspectFill + imageView.image = R.image.logo() + imageView.tintColor = R.color.colorWhite() + return imageView + }() + + let termsLabel: UILabel = { + let label = UILabel() + label.numberOfLines = 0 + label.textAlignment = .center + label.isUserInteractionEnabled = true + return label + }() + + let buttonContainer = UIFactory.default.createVerticalStackView(spacing: 8) + + let signUpButton: TriangularedButton = { + let button = TriangularedButton() + button.applyEnabledStyle() + return button + }() + + let restoreButton: TriangularedButton = { + let button = TriangularedButton() + button.applyAccessoryStyle() + return button + }() + + let preInstalledButton: TriangularedButton = { + let button = TriangularedButton() + return button + }() + + let bannerContainer = UIFactory.default.createVerticalStackView(spacing: 12) + let selectRegularBannerView = SelectEcosystemBannerView(ecosystem: .regular) + let selectTonBannerView = SelectEcosystemBannerView(ecosystem: .ton) + + lazy var termDecorator = CompoundAttributedStringDecorator.legal(for: locale) + + var locale: Locale = .current { + didSet { + applyLocale() + } + } + + override init(frame: CGRect) { + super.init(frame: frame) + setupLayout() + buttonContainer.isHidden = true + buttonContainer.alpha = 0 + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Private methods + + private func configureTermsLabel() { + if let attributedText = termsLabel.attributedText { + termsLabel.attributedText = termDecorator.decorate(attributedString: attributedText) + } + } + + private func applyLocale() { + signUpButton.imageWithTitleView?.title = R.string.localizable + .usernameSetupTitle20(preferredLanguages: locale.rLanguages) + restoreButton.imageWithTitleView?.title = R.string.localizable + .onboardingRestoreWallet(preferredLanguages: locale.rLanguages) + preInstalledButton.imageWithTitleView?.title = R.string.localizable.onboardingPreinstalledWalletButtonText(preferredLanguages: locale.rLanguages) + preInstalledButton.imageWithTitleView?.iconImage = R.image.iconPreinstalledWallet() + let text = NSAttributedString(string: R.string.localizable + .onboardingTermsAndConditions1(preferredLanguages: locale.rLanguages)) + termsLabel.attributedText = text + + selectRegularBannerView.titleLabel.text = R.string.localizable.onboardingBannerRegularEcosystemTitle(preferredLanguages: locale.rLanguages) + selectRegularBannerView.actionButton.imageWithTitleView?.title = R.string.localizable.onboardingBannerRegularEcosystemButtonTitle(preferredLanguages: locale.rLanguages) + selectTonBannerView.titleLabel.text = R.string.localizable.onboardingBannerTonEcosystemTitle(preferredLanguages: locale.rLanguages) + selectTonBannerView.actionButton.imageWithTitleView?.title = R.string.localizable.onboardingBannerTonEcosystemButtonTitle(preferredLanguages: locale.rLanguages) + + configureTermsLabel() + } + + private func setupLayout() { + addSubview(backgroundImageView) + addSubview(backButton) + addSubview(logoView) + addSubview(termsLabel) + addSubview(buttonContainer) + addSubview(bannerContainer) + buttonContainer.addArrangedSubview(signUpButton) + buttonContainer.addArrangedSubview(restoreButton) + buttonContainer.addArrangedSubview(preInstalledButton) + bannerContainer.addArrangedSubview(selectRegularBannerView) + bannerContainer.addArrangedSubview(selectTonBannerView) + + backgroundImageView.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + backButton.snp.makeConstraints { make in + make.top.equalTo(safeAreaLayoutGuide).offset(10) + make.leading.equalToSuperview().offset(16) + make.size.equalTo(44) + } + logoView.snp.makeConstraints { make in + make.top.equalToSuperview().offset(149).priority(.low) + make.centerX.equalToSuperview() + } + buttonContainer.snp.makeConstraints { make in + make.leading.trailing.equalToSuperview().inset(16) + make.top.greaterThanOrEqualTo(logoView.snp.bottom) + } + bannerContainer.snp.makeConstraints { make in + make.leading.trailing.equalToSuperview().inset(16) + make.top.greaterThanOrEqualTo(logoView.snp.bottom) + } + termsLabel.snp.makeConstraints { make in + make.top.equalTo(bannerContainer.snp.bottom).offset(24) + make.top.equalTo(buttonContainer.snp.bottom).offset(24) + make.bottom.equalTo(safeAreaLayoutGuide.snp.bottom) + make.leading.trailing.equalToSuperview().inset(16) + } + + [signUpButton, restoreButton, preInstalledButton].forEach { view in + view.snp.makeConstraints { make in + make.height.equalTo(UIConstants.actionHeight) + } + } + } +} diff --git a/fearless/Modules/OnbordingMain/OnboardingMainWireframe.swift b/fearless/Modules/OnbordingMain/OnboardingMainWireframe.swift index af657359a0..e574d840d1 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainWireframe.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainWireframe.swift @@ -2,8 +2,8 @@ import Foundation import SSFCloudStorage final class OnboardingMainWireframe: OnboardingMainWireframeProtocol { - func showSignup(from view: OnboardingMainViewProtocol?) { - guard let usernameSetup = UsernameSetupViewFactory.createViewForOnboarding() else { + func showSignup(from view: OnboardingMainViewProtocol?, ecosystem: AccountCreateEcosystem) { + guard let usernameSetup = UsernameSetupViewFactory.createViewForOnboarding(ecosystem: ecosystem) else { return } @@ -14,10 +14,11 @@ final class OnboardingMainWireframe: OnboardingMainWireframeProtocol { func showAccountRestore( defaultSource: AccountImportSource, + flow: AccountImportFlow, from view: OnboardingMainViewProtocol? ) { guard let restorationController = AccountImportViewFactory - .createViewForOnboarding(defaultSource: defaultSource)?.controller + .createViewForOnboarding(defaultSource: defaultSource, flow: flow)?.controller else { return } @@ -32,7 +33,7 @@ final class OnboardingMainWireframe: OnboardingMainWireframeProtocol { let navigationController = view?.controller.navigationController, navigationController.viewControllers.count == 1, navigationController.presentedViewController == nil { - showAccountRestore(defaultSource: .keystore, from: view) + showAccountRestore(defaultSource: .keystore, flow: .wallet(step: .substrate), from: view) } } diff --git a/fearless/Modules/Pincode/ChangePincode/PinChangeInteractor.swift b/fearless/Modules/Pincode/ChangePincode/PinChangeInteractor.swift index 438ff2c76f..a488a37b76 100644 --- a/fearless/Modules/Pincode/ChangePincode/PinChangeInteractor.swift +++ b/fearless/Modules/Pincode/ChangePincode/PinChangeInteractor.swift @@ -17,7 +17,7 @@ extension PinChangeInteractor: PinSetupInteractorInputProtocol { pin, for: KeystoreTag.pincode.rawValue, completionQueue: DispatchQueue.main - ) { [weak self] (_) -> Void in + ) { [weak self] (_) in self?.presenter?.didSavePin() } } diff --git a/fearless/Modules/Pincode/CheckPincode/View/CheckPincodeViewController.swift b/fearless/Modules/Pincode/CheckPincode/View/CheckPincodeViewController.swift index 5cc6980843..f6702904ae 100644 --- a/fearless/Modules/Pincode/CheckPincode/View/CheckPincodeViewController.swift +++ b/fearless/Modules/Pincode/CheckPincode/View/CheckPincodeViewController.swift @@ -72,14 +72,14 @@ extension CheckPincodeViewController: PinSetupViewProtocol { let useAction = UIAlertAction( title: R.string.localizable.commonUse(preferredLanguages: languages), style: .default - ) { (_: UIAlertAction) -> Void in + ) { (_: UIAlertAction) in completionBlock(true) } let skipAction = UIAlertAction( title: R.string.localizable.commonSkip(preferredLanguages: languages), style: .cancel - ) { (_: UIAlertAction) -> Void in + ) { (_: UIAlertAction) in completionBlock(false) } diff --git a/fearless/Modules/Pincode/LocalAuthentification/LocalAuthInteractor.swift b/fearless/Modules/Pincode/LocalAuthentification/LocalAuthInteractor.swift index 33a1d00141..04d0e30ddb 100644 --- a/fearless/Modules/Pincode/LocalAuthentification/LocalAuthInteractor.swift +++ b/fearless/Modules/Pincode/LocalAuthentification/LocalAuthInteractor.swift @@ -58,7 +58,7 @@ class LocalAuthInteractor { biometryAuth.authenticate( localizedReason: R.string.localizable.askBiometryReason(preferredLanguages: locale.rLanguages), completionQueue: .global(qos: .userInteractive) - ) { [weak self] (result: Bool) -> Void in + ) { [weak self] (result: Bool) in self?.processBiometryAuth(result: result) } @@ -130,7 +130,7 @@ extension LocalAuthInteractor: LocalAuthInteractorInputProtocol { secretManager.loadSecret( for: KeystoreTag.pincode.rawValue, completionQueue: .global(qos: .userInteractive) - ) { [weak self] (secret: SecretDataRepresentable?) -> Void in + ) { [weak self] (secret: SecretDataRepresentable?) in self?.processStored(pin: secret?.toUTF8String()) } } diff --git a/fearless/Modules/Pincode/PinSetup/PinSetupInteractor.swift b/fearless/Modules/Pincode/PinSetup/PinSetupInteractor.swift index 97882f9eda..80c33b9c9d 100644 --- a/fearless/Modules/Pincode/PinSetup/PinSetupInteractor.swift +++ b/fearless/Modules/Pincode/PinSetup/PinSetupInteractor.swift @@ -48,7 +48,7 @@ class PinSetupInteractor { private func handleTouchId() { state = .waitingBiometrics - presenter?.didStartWaitingBiometryDecision(type: .touchId) { [weak self] (result: Bool) -> Void in + presenter?.didStartWaitingBiometryDecision(type: .touchId) { [weak self] (result: Bool) in self?.processResponseForBiometrics(result: result) } } @@ -80,7 +80,7 @@ class PinSetupInteractor { currentPincode, for: KeystoreTag.pincode.rawValue, completionQueue: DispatchQueue.main - ) { [weak self] _ -> Void in + ) { [weak self] _ in self?.completeSetup() } } diff --git a/fearless/Modules/Pincode/PinSetup/PinSetupViewController.swift b/fearless/Modules/Pincode/PinSetup/PinSetupViewController.swift index 6ea4855124..b21036bd19 100644 --- a/fearless/Modules/Pincode/PinSetup/PinSetupViewController.swift +++ b/fearless/Modules/Pincode/PinSetup/PinSetupViewController.swift @@ -222,14 +222,14 @@ extension PinSetupViewController: PinSetupViewProtocol { let useAction = UIAlertAction( title: R.string.localizable.commonUse(preferredLanguages: languages), style: .default - ) { (_: UIAlertAction) -> Void in + ) { (_: UIAlertAction) in completionBlock(true) } let skipAction = UIAlertAction( title: R.string.localizable.commonSkip(preferredLanguages: languages), style: .cancel - ) { (_: UIAlertAction) -> Void in + ) { (_: UIAlertAction) in completionBlock(false) } diff --git a/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentPresenter.swift b/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentPresenter.swift index ccec5c0670..9a12a333ee 100644 --- a/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentPresenter.swift +++ b/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentPresenter.swift @@ -958,7 +958,7 @@ extension PolkaswapAdjustmentPresenter: PolkaswapTransaktionSettingsModuleOutput // MARK: - BannersModuleOutput extension PolkaswapAdjustmentPresenter: BannersModuleOutput { - func reloadBannersView() {} + func reloadBannersView(bannersCount: Int) {} func didTapCloseBanners() { DispatchQueue.main.async { [weak self] in diff --git a/fearless/Modules/PolkaswapFlow/PolkaswapSwapConfirmation/PolkaswapSwapConfirmationProtocols.swift b/fearless/Modules/PolkaswapFlow/PolkaswapSwapConfirmation/PolkaswapSwapConfirmationProtocols.swift index 131620a675..21e1bb4362 100644 --- a/fearless/Modules/PolkaswapFlow/PolkaswapSwapConfirmation/PolkaswapSwapConfirmationProtocols.swift +++ b/fearless/Modules/PolkaswapFlow/PolkaswapSwapConfirmation/PolkaswapSwapConfirmationProtocols.swift @@ -1,4 +1,3 @@ - import SSFModels typealias PolkaswapSwapConfirmationModuleCreationResult = ( diff --git a/fearless/Modules/Profile/ProfileInteractor.swift b/fearless/Modules/Profile/ProfileInteractor.swift index e8f9d778e7..9c65275f26 100644 --- a/fearless/Modules/Profile/ProfileInteractor.swift +++ b/fearless/Modules/Profile/ProfileInteractor.swift @@ -21,6 +21,7 @@ final class ProfileInteractor { private let walletRepository: AnyDataProviderRepository private let chainsIssuesCenter: ChainsIssuesCenterProtocol private let walletConnectDisconnectService: WalletConnectDisconnectService + private let tonConnectService: TonConnectService private lazy var currentCurrency: Currency? = { selectedMetaAccount.selectedCurrency @@ -37,7 +38,8 @@ final class ProfileInteractor { walletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterProtocol, walletRepository: AnyDataProviderRepository, chainsIssuesCenter: ChainsIssuesCenterProtocol, - walletConnectDisconnectService: WalletConnectDisconnectService + walletConnectDisconnectService: WalletConnectDisconnectService, + tonConnectService: TonConnectService ) { self.selectedWalletSettings = selectedWalletSettings self.eventCenter = eventCenter @@ -48,6 +50,7 @@ final class ProfileInteractor { self.walletRepository = walletRepository self.chainsIssuesCenter = chainsIssuesCenter self.walletConnectDisconnectService = walletConnectDisconnectService + self.tonConnectService = tonConnectService } // MARK: - Private methods @@ -105,6 +108,9 @@ extension ProfileInteractor: ProfileInteractorInputProtocol { let operation = repository.deleteAllOperation() operation.completionBlock = { [weak self] in self?.walletConnectDisconnectService.disconnectAllSessions() + Task { [weak self] in + await self?.tonConnectService.disconnectAll() + } completion() } operationQueue.addOperation(operation) @@ -146,9 +152,10 @@ extension ProfileInteractor: ChainsIssuesCenterListener { func handleChainsIssues(_ issues: [ChainIssue]) { let missingAccountIssues = issues.filter { issue in switch issue { - case .missingAccount: - return true - default: return false + case let .missingAccount(chains): + return chains.filter { !$0.ecosystem.isTon }.count > 0 + default: + return false } } presenter?.didReceiveMissingAccount(issues: missingAccountIssues) diff --git a/fearless/Modules/Profile/ProfilePresenter.swift b/fearless/Modules/Profile/ProfilePresenter.swift index b50e4092ef..95a64ed4b1 100644 --- a/fearless/Modules/Profile/ProfilePresenter.swift +++ b/fearless/Modules/Profile/ProfilePresenter.swift @@ -63,6 +63,10 @@ final class ProfilePresenter { } extension ProfilePresenter: ProfilePresenterProtocol { + func openDebugMenu() { + wireframe.openDebugMenu(from: view) + } + func didLoad(view: ProfileViewProtocol) { self.view = view interactor.setup(with: self) @@ -72,7 +76,12 @@ extension ProfilePresenter: ProfilePresenterProtocol { guard let wallet = selectedWallet else { return } - wireframe.showAccountDetails(from: view, metaAccount: wallet) + switch wallet.ecosystem { + case .regular: + wireframe.showAccountDetails(from: view, metaAccount: wallet) + case .ton: + break + } } func activateOption(_ option: ProfileOption) { @@ -94,6 +103,8 @@ extension ProfilePresenter: ProfilePresenterProtocol { break case .walletConnect: wireframe.showWalletConnect(from: view) + case .crowdloans: + wireframe.showCrowdloan(from: view) } } diff --git a/fearless/Modules/Profile/ProfileProtocol.swift b/fearless/Modules/Profile/ProfileProtocol.swift index ab6697f93e..ad1e803902 100644 --- a/fearless/Modules/Profile/ProfileProtocol.swift +++ b/fearless/Modules/Profile/ProfileProtocol.swift @@ -12,6 +12,7 @@ protocol ProfilePresenterProtocol: AnyObject { func logout() func switcherValueChanged(isOn: Bool, index: Int) func didTapAccountScore(address: String?) + func openDebugMenu() } protocol ProfileInteractorInputProtocol: AnyObject { @@ -55,6 +56,8 @@ protocol ProfileWireframeProtocol: ErrorPresentable, func close(view: ControllerBackedProtocol?) func showPolkaswapDisclaimer(from view: ControllerBackedProtocol?) func showWalletConnect(from view: ControllerBackedProtocol?) + func openDebugMenu(from view: ControllerBackedProtocol?) + func showCrowdloan(from view: ControllerBackedProtocol?) } protocol ProfileViewFactoryProtocol: AnyObject { diff --git a/fearless/Modules/Profile/ProfileViewController.swift b/fearless/Modules/Profile/ProfileViewController.swift index f2a1d4f34d..ff963fb3c8 100644 --- a/fearless/Modules/Profile/ProfileViewController.swift +++ b/fearless/Modules/Profile/ProfileViewController.swift @@ -1,6 +1,7 @@ import UIKit import SoraFoundation import SSFUtils +import SSFModels final class ProfileViewController: UIViewController, ViewHolder { typealias RootViewType = ProfileViewLayout @@ -69,6 +70,10 @@ final class ProfileViewController: UIViewController, ViewHolder { presenter.switcherValueChanged(isOn: sender.isOn, index: sender.tag) } + @objc func debugMenu(tapGesture: UITapGestureRecognizer) { + presenter.openDebugMenu() + } + // MARK: - tableView private func prepareProfileSectionCell( @@ -81,7 +86,9 @@ final class ProfileViewController: UIViewController, ViewHolder { ) { let locale = localizationManager?.selectedLocale cell.titleLabel.text = R.string.localizable.profileTitle(preferredLanguages: locale?.rLanguages) - + let tap = UITapGestureRecognizer(target: self, action: #selector(debugMenu)) + tap.numberOfTapsRequired = 5 + cell.titleLabel.addGestureRecognizer(tap) return cell } else { assertionFailure("Profile section cell creation failed") @@ -91,11 +98,17 @@ final class ProfileViewController: UIViewController, ViewHolder { private func prepareProfileDetailsCell( _ tableView: UITableView, - with viewModel: WalletsManagmentCellViewModel + with viewModel: WalletsManagmentCellViewModel, + walletEcosystem: WalletEcosystem ) -> UITableViewCell { if let cell = tableView.dequeueReusableCellWithType(WalletsManagmentTableCell.self) { cell.bind(to: viewModel) - cell.delegate = self + switch walletEcosystem { + case .regular: + cell.delegate = self + case .ton: + break + } return cell } else { assertionFailure("Profile details cell creation failed") @@ -179,7 +192,7 @@ extension ProfileViewController: UITableViewDataSource { case 0: return prepareProfileSectionCell(tableView, indexPath: indexPath) case 1: - return prepareProfileDetailsCell(tableView, with: viewModel.profileUserViewModel) + return prepareProfileDetailsCell(tableView, with: viewModel.profileUserViewModel, walletEcosystem: viewModel.wallet.ecosystem) default: let optionViewModel = viewModel.profileOptionViewModel[indexPath.row - 2] return prepareProfileCell(tableView, indexPath: indexPath, with: optionViewModel) diff --git a/fearless/Modules/Profile/ProfileViewFactory.swift b/fearless/Modules/Profile/ProfileViewFactory.swift index 4529d1b0f1..665d6c5f54 100644 --- a/fearless/Modules/Profile/ProfileViewFactory.swift +++ b/fearless/Modules/Profile/ProfileViewFactory.swift @@ -84,7 +84,8 @@ final class ProfileViewFactory: ProfileViewFactoryProtocol { walletBalanceSubscriptionAdapter: walletBalanceSubscriptionAdapter, walletRepository: accountRepository, chainsIssuesCenter: chainsIssuesCenter, - walletConnectDisconnectService: walletConnectDisconnectService + walletConnectDisconnectService: walletConnectDisconnectService, + tonConnectService: ServiceAssembly.shared.tonConnectService() ) let presenter = ProfilePresenter( diff --git a/fearless/Modules/Profile/ProfileWireframe.swift b/fearless/Modules/Profile/ProfileWireframe.swift index 7e1f5121f5..bbe0ea0213 100644 --- a/fearless/Modules/Profile/ProfileWireframe.swift +++ b/fearless/Modules/Profile/ProfileWireframe.swift @@ -1,5 +1,6 @@ import Foundation import UIKit +import SSFModels final class ProfileWireframe: ProfileWireframeProtocol, AuthorizationPresentable { lazy var rootAnimator: RootControllerAnimationCoordinatorProtocol = RootControllerAnimationCoordinator() @@ -8,9 +9,11 @@ final class ProfileWireframe: ProfileWireframeProtocol, AuthorizationPresentable from view: ProfileViewProtocol?, metaAccount: MetaAccountModel ) { - let walletDetails = WalletDetailsViewFactory.createView(flow: .normal(wallet: metaAccount)) + guard let walletDetails = ConnectedAccountsAssembly.configureModule() else { + return + } let navigationController = FearlessNavigationController( - rootViewController: walletDetails.controller + rootViewController: walletDetails.view.controller ) view?.controller.present(navigationController, animated: true) } @@ -115,6 +118,32 @@ final class ProfileWireframe: ProfileWireframeProtocol, AuthorizationPresentable view?.controller.present(navigation, animated: true) } + func openDebugMenu(from view: (any ControllerBackedProtocol)?) { + let module = FeatureToggleListAssembly.configureModule() + guard let controller = module?.view.controller else { + return + } + let navigation = FearlessNavigationController(rootViewController: controller) + view?.controller.present(navigation, animated: true) + } + + func showCrowdloan(from view: ControllerBackedProtocol?) { + let crowdloanState = CrowdloanSharedState() + crowdloanState.settings.setup() + + guard let selectedMetaAccount = SelectedWalletSettings.shared.value, + let crowloanView = CrowdloanListViewFactory.createView( + with: crowdloanState, + selectedMetaAccount: selectedMetaAccount + ) + else { + return + } + + let navigationController = FearlessNavigationController(rootViewController: crowloanView.controller) + view?.controller.present(navigationController, animated: true) + } + // MARK: Private private func showPinSetup(from view: ProfileViewProtocol?) { diff --git a/fearless/Modules/Profile/View/ProfileSectionTableViewCell.xib b/fearless/Modules/Profile/View/ProfileSectionTableViewCell.xib index 84d2dce50f..516a6b407f 100644 --- a/fearless/Modules/Profile/View/ProfileSectionTableViewCell.xib +++ b/fearless/Modules/Profile/View/ProfileSectionTableViewCell.xib @@ -1,9 +1,9 @@ - + - + @@ -22,8 +22,8 @@ - { case restake diff --git a/fearless/Modules/Staking/Operations/IdentityOperationFactory.swift b/fearless/Modules/Staking/Operations/IdentityOperationFactory.swift index 1c1b9226f1..1578cd12e0 100644 --- a/fearless/Modules/Staking/Operations/IdentityOperationFactory.swift +++ b/fearless/Modules/Staking/Operations/IdentityOperationFactory.swift @@ -4,6 +4,7 @@ import RobinHood import IrohaCrypto import SSFModels import SSFRuntimeCodingService +import SSFCrypto protocol IdentityOperationFactoryProtocol { func createIdentityWrapper( diff --git a/fearless/Modules/Staking/Operations/SlashesOperationFactory.swift b/fearless/Modules/Staking/Operations/SlashesOperationFactory.swift index caa4f89807..a5688d259c 100644 --- a/fearless/Modules/Staking/Operations/SlashesOperationFactory.swift +++ b/fearless/Modules/Staking/Operations/SlashesOperationFactory.swift @@ -4,6 +4,7 @@ import IrohaCrypto import SSFUtils import SSFModels import SSFRuntimeCodingService +import SSFCrypto protocol SlashesOperationFactoryProtocol { func createSlashingSpansOperationForStash( diff --git a/fearless/Modules/Staking/Operations/ValidatorOperationFactory/ParachainCollatorOperationFactory.swift b/fearless/Modules/Staking/Operations/ValidatorOperationFactory/ParachainCollatorOperationFactory.swift index 72f604e62c..4ff237d243 100644 --- a/fearless/Modules/Staking/Operations/ValidatorOperationFactory/ParachainCollatorOperationFactory.swift +++ b/fearless/Modules/Staking/Operations/ValidatorOperationFactory/ParachainCollatorOperationFactory.swift @@ -1,9 +1,11 @@ import Foundation +import IrohaCrypto import SSFUtils import RobinHood import BigInt import SSFModels import SSFRuntimeCodingService +import SSFCrypto final class ParachainCollatorOperationFactory { private let asset: AssetModel @@ -818,3 +820,13 @@ extension ParachainCollatorOperationFactory { return CompoundOperationWrapper(targetOperation: mapOperation, dependencies: dependencies) } } + +private extension AccountAddress { + func toAccountId() throws -> AccountId { + if hasPrefix("0x") { + return try AccountId(hexStringSSF: self) + } else { + return try SS58AddressFactory().accountId(from: self) + } + } +} diff --git a/fearless/Modules/Staking/Operations/ValidatorOperationFactory/RelaychainValidatorOperationFactory.swift b/fearless/Modules/Staking/Operations/ValidatorOperationFactory/RelaychainValidatorOperationFactory.swift index 80642c6195..78c349d2a3 100644 --- a/fearless/Modules/Staking/Operations/ValidatorOperationFactory/RelaychainValidatorOperationFactory.swift +++ b/fearless/Modules/Staking/Operations/ValidatorOperationFactory/RelaychainValidatorOperationFactory.swift @@ -4,6 +4,7 @@ import IrohaCrypto import SSFUtils import SSFModels import SSFRuntimeCodingService +import SSFCrypto // swiftlint:disable type_body_length final class RelaychainValidatorOperationFactory { @@ -149,12 +150,6 @@ final class RelaychainValidatorOperationFactory { } let runtimeOperation = runtimeService.fetchCoderFactoryOperation() - - let oldArgumentExists = runtimeService.snapshot?.metadata.getConstant( - in: ConstantCodingPath.maxNominatorRewardedPerValidator.moduleName, - constantName: ConstantCodingPath.maxNominatorRewardedPerValidator.constantName - ) != nil - let maxNominatorsOperation: BaseOperation = createConstOperation( dependingOn: runtimeOperation, @@ -264,16 +259,8 @@ final class RelaychainValidatorOperationFactory { } let chainFormat = chain.chainFormat - let runtimeOperation = runtimeService.fetchCoderFactoryOperation() - - let hasNominatorsLimit = runtimeService.snapshot?.metadata.getConstant( - in: ConstantCodingPath.maxNominatorRewardedPerValidator.moduleName, - constantName: ConstantCodingPath.maxNominatorRewardedPerValidator.constantName - ) != nil - let rewardCalculatorOperation = rewardService.fetchCalculatorOperation() - let maxNominatorsOperation: BaseOperation = createConstOperation( dependingOn: runtimeOperation, path: .maxNominatorRewardedPerValidator @@ -346,16 +333,8 @@ final class RelaychainValidatorOperationFactory { let chain = chain let chainFormat = chain.chainFormat - let rewardCalculatorOperation = rewardService.fetchCalculatorOperation() - let runtimeOperation = runtimeService.fetchCoderFactoryOperation() - - let oldArgumentExists = runtimeService.snapshot?.metadata.getConstant( - in: ConstantCodingPath.maxNominatorRewardedPerValidator.moduleName, - constantName: ConstantCodingPath.maxNominatorRewardedPerValidator.constantName - ) != nil - let maxNominatorsOperation: BaseOperation = createConstOperation( dependingOn: runtimeOperation, path: .maxNominatorRewardedPerValidator @@ -687,10 +666,6 @@ extension RelaychainValidatorOperationFactory: ValidatorOperationFactoryProtocol } func fetchAllValidators() -> CompoundOperationWrapper<[ElectedValidatorInfo]> { - guard let connection = chainRegistry.getConnection(for: chain.chainId) else { - return CompoundOperationWrapper.createWithError(ChainRegistryError.connectionUnavailable) - } - guard let runtimeService = chainRegistry.getRuntimeProvider(for: chain.chainId) else { return CompoundOperationWrapper.createWithError(ChainRegistryError.runtimeMetadaUnavailable) } @@ -702,11 +677,6 @@ extension RelaychainValidatorOperationFactory: ValidatorOperationFactoryProtocol path: .slashDeferDuration ) - let oldArgumentExists = runtimeService.snapshot?.metadata.getConstant( - in: ConstantCodingPath.maxNominatorRewardedPerValidator.moduleName, - constantName: ConstantCodingPath.maxNominatorRewardedPerValidator.constantName - ) != nil - let maxNominatorsOperation: BaseOperation = createConstOperation( dependingOn: runtimeOperation, @@ -738,7 +708,7 @@ extension RelaychainValidatorOperationFactory: ValidatorOperationFactoryProtocol storagePath: .validatorPrefs, type: .accountId ) - accountId = try key.toAccountId() + accountId = try key.toAccountId(using: self.chain.chainFormat) } else { let extractor = StorageKeyDataExtractor(runtimeService: runtimeService) let key: AccountId = try await extractor.extractKey( @@ -807,7 +777,7 @@ extension RelaychainValidatorOperationFactory: ValidatorOperationFactoryProtocol slashDeferOperation, maxNominatorsOperation, rewardOperation, - eraValidatorsOperation, + eraValidatorsOperation ] let dependencies = baseOperations + [allValidatorPrefsOperation] + [allValidatorsOperation] + identityWrapper.allOperations + slashingsWrapper.allOperations @@ -817,10 +787,6 @@ extension RelaychainValidatorOperationFactory: ValidatorOperationFactoryProtocol // swiftlint:disable function_body_length func allElectedOperation() -> CompoundOperationWrapper<[ElectedValidatorInfo]> { - guard let connection = chainRegistry.getConnection(for: chain.chainId) else { - return CompoundOperationWrapper.createWithError(ChainRegistryError.connectionUnavailable) - } - guard let runtimeService = chainRegistry.getRuntimeProvider(for: chain.chainId) else { return CompoundOperationWrapper.createWithError(ChainRegistryError.runtimeMetadaUnavailable) } @@ -833,11 +799,6 @@ extension RelaychainValidatorOperationFactory: ValidatorOperationFactoryProtocol path: .slashDeferDuration ) - let oldArgumentExists = runtimeService.snapshot?.metadata.getConstant( - in: ConstantCodingPath.maxNominatorRewardedPerValidator.moduleName, - constantName: ConstantCodingPath.maxNominatorRewardedPerValidator.constantName - ) != nil - let maxNominatorsOperation: BaseOperation = createConstOperation( dependingOn: runtimeOperation, @@ -964,14 +925,6 @@ extension RelaychainValidatorOperationFactory: ValidatorOperationFactoryProtocol func activeValidatorsOperation( for nominatorAddress: AccountAddress ) -> CompoundOperationWrapper<[SelectedValidatorInfo]> { - guard let connection = chainRegistry.getConnection(for: chain.chainId) else { - return CompoundOperationWrapper.createWithError(ChainRegistryError.connectionUnavailable) - } - - guard let runtimeService = chainRegistry.getRuntimeProvider(for: chain.chainId) else { - return CompoundOperationWrapper.createWithError(ChainRegistryError.runtimeMetadaUnavailable) - } - let eraValidatorsOperation = eraValidatorService.fetchInfoOperation() let activeValidatorsStakeInfoWrapper = createActiveValidatorsStakeInfo( for: nominatorAddress, @@ -1028,14 +981,6 @@ extension RelaychainValidatorOperationFactory: ValidatorOperationFactoryProtocol func pendingValidatorsOperation( for accountIds: [AccountId] ) -> CompoundOperationWrapper<[SelectedValidatorInfo]> { - guard let connection = chainRegistry.getConnection(for: chain.chainId) else { - return CompoundOperationWrapper.createWithError(ChainRegistryError.connectionUnavailable) - } - - guard let runtimeService = chainRegistry.getRuntimeProvider(for: chain.chainId) else { - return CompoundOperationWrapper.createWithError(ChainRegistryError.runtimeMetadaUnavailable) - } - let eraValidatorsOperation = eraValidatorService.fetchInfoOperation() let validatorsStakeInfoWrapper = createValidatorsStakeInfoWrapper( for: accountIds, @@ -1081,10 +1026,6 @@ extension RelaychainValidatorOperationFactory: ValidatorOperationFactoryProtocol func wannabeValidatorsOperation( for accountIdList: [AccountId] ) -> CompoundOperationWrapper<[SelectedValidatorInfo]> { - guard let connection = chainRegistry.getConnection(for: chain.chainId) else { - return CompoundOperationWrapper.createWithError(ChainRegistryError.connectionUnavailable) - } - guard let runtimeService = chainRegistry.getRuntimeProvider(for: chain.chainId) else { return CompoundOperationWrapper.createWithError(ChainRegistryError.runtimeMetadaUnavailable) } diff --git a/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Flow/Parachain/SelectValidatorsConfirmParachainStrategy.swift b/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Flow/Parachain/SelectValidatorsConfirmParachainStrategy.swift index 2949c38d75..5f099913f3 100644 --- a/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Flow/Parachain/SelectValidatorsConfirmParachainStrategy.swift +++ b/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Flow/Parachain/SelectValidatorsConfirmParachainStrategy.swift @@ -2,6 +2,7 @@ import Foundation import RobinHood import SSFModels import SSFRuntimeCodingService +import SSFCrypto protocol SelectValidatorsConfirmParachainStrategyOutput: SelectValidatorsConfirmStrategyOutput { func didReceiveAtStake(snapshot: ParachainStakingCollatorSnapshot?) diff --git a/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Flow/PoolExisting/SelectValidatorsConfirmPoolViewModelState.swift b/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Flow/PoolExisting/SelectValidatorsConfirmPoolViewModelState.swift index c539e2904d..55b33698c3 100644 --- a/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Flow/PoolExisting/SelectValidatorsConfirmPoolViewModelState.swift +++ b/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Flow/PoolExisting/SelectValidatorsConfirmPoolViewModelState.swift @@ -94,7 +94,7 @@ final class SelectValidatorsConfirmPoolExistingViewModelState: SelectValidatorsC return builder } - let nominateCall = try strongSelf.callFactory.poolNominate(poolId: poolId, targets: targets) + let nominateCall = try strongSelf.callFactory.poolNominate(poolId: poolId, targets: targets, chainFormat: strongSelf.chainAsset.chain.chainFormat) return try builder .adding(call: nominateCall) diff --git a/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Flow/PoolInitiated/SelectValidatorsConfirmPoolInitiatedViewModelState.swift b/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Flow/PoolInitiated/SelectValidatorsConfirmPoolInitiatedViewModelState.swift index 5d211065cc..78f22d16cf 100644 --- a/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Flow/PoolInitiated/SelectValidatorsConfirmPoolInitiatedViewModelState.swift +++ b/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Flow/PoolInitiated/SelectValidatorsConfirmPoolInitiatedViewModelState.swift @@ -84,7 +84,7 @@ final class SelectValidatorsConfirmPoolInitiatedViewModelState: SelectValidators return builder } - let nominateCall = try strongSelf.callFactory.poolNominate(poolId: poolId, targets: targets) + let nominateCall = try strongSelf.callFactory.poolNominate(poolId: poolId, targets: targets, chainFormat: strongSelf.chainAsset.chain.chainFormat) return try builder .adding(call: nominateCall) diff --git a/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Model/SelectValidatorsConfirmationModel.swift b/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Model/SelectValidatorsConfirmationModel.swift index ea3b866541..f4bd3bbe49 100644 --- a/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Model/SelectValidatorsConfirmationModel.swift +++ b/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsConfirm/Model/SelectValidatorsConfirmationModel.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels struct SelectValidatorsConfirmRelaychainModel { let wallet: DisplayAddress diff --git a/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsStart/Flow/Parachain/SelectValidatorsStartParachainStrategy.swift b/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsStart/Flow/Parachain/SelectValidatorsStartParachainStrategy.swift index a4019ac30f..02fed9fde4 100644 --- a/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsStart/Flow/Parachain/SelectValidatorsStartParachainStrategy.swift +++ b/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsStart/Flow/Parachain/SelectValidatorsStartParachainStrategy.swift @@ -2,6 +2,7 @@ import Foundation import RobinHood import SSFModels import SSFRuntimeCodingService +import SSFCrypto protocol SelectValidatorsStartParachainStrategyOutput: AnyObject { func didReceiveMaxDelegations(result: Result) diff --git a/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsStart/SelectValidatorsStartPresenter.swift b/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsStart/SelectValidatorsStartPresenter.swift index 2ed1b03b7b..43f9315fed 100644 --- a/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsStart/SelectValidatorsStartPresenter.swift +++ b/fearless/Modules/Staking/SelectValidatorsFlow/SelectValidatorsStart/SelectValidatorsStartPresenter.swift @@ -105,8 +105,7 @@ extension SelectValidatorsStartPresenter: SelectValidatorsStartPresenterProtocol let locale = view?.localizationManager?.selectedLocale ?? Locale.current let action = SheetAlertPresentableAction( - title: R.string.localizable.commonContinue(preferredLanguages: locale.rLanguages)) - { [weak self] in + title: R.string.localizable.commonContinue(preferredLanguages: locale.rLanguages)) { [weak self] in self?.proceedToRecommendedValidators() } diff --git a/fearless/Modules/Staking/SelectValidatorsFlow/SelectedValidatorList/Wireframe/SelectedValidatorListWireframe.swift b/fearless/Modules/Staking/SelectValidatorsFlow/SelectedValidatorList/Wireframe/SelectedValidatorListWireframe.swift index a846ce5cf8..49c81589f7 100644 --- a/fearless/Modules/Staking/SelectValidatorsFlow/SelectedValidatorList/Wireframe/SelectedValidatorListWireframe.swift +++ b/fearless/Modules/Staking/SelectValidatorsFlow/SelectedValidatorList/Wireframe/SelectedValidatorListWireframe.swift @@ -1,4 +1,3 @@ - import SSFModels class SelectedValidatorListWireframe: SelectedValidatorListWireframeProtocol { func present( diff --git a/fearless/Modules/Staking/SelectValidatorsFlow/ValidatorInfo/Flow/Pool/ValidatorInfoPoolStrategy.swift b/fearless/Modules/Staking/SelectValidatorsFlow/ValidatorInfo/Flow/Pool/ValidatorInfoPoolStrategy.swift index 4601ce7205..d8c6b32aa2 100644 --- a/fearless/Modules/Staking/SelectValidatorsFlow/ValidatorInfo/Flow/Pool/ValidatorInfoPoolStrategy.swift +++ b/fearless/Modules/Staking/SelectValidatorsFlow/ValidatorInfo/Flow/Pool/ValidatorInfoPoolStrategy.swift @@ -1,6 +1,8 @@ import Foundation import RobinHood import SSFModels +import SSFAccountManagment +import SSFCrypto protocol ValidatorInfoPoolStrategyOutput: AnyObject { func didReceiveValidatorInfo(_ validatorInfo: ValidatorInfoProtocol) diff --git a/fearless/Modules/Staking/SelectValidatorsFlow/ValidatorInfo/Flow/Relaychain/ValidatorInfoRelaychainStrategy.swift b/fearless/Modules/Staking/SelectValidatorsFlow/ValidatorInfo/Flow/Relaychain/ValidatorInfoRelaychainStrategy.swift index 4bc00a523e..06e9d3842a 100644 --- a/fearless/Modules/Staking/SelectValidatorsFlow/ValidatorInfo/Flow/Relaychain/ValidatorInfoRelaychainStrategy.swift +++ b/fearless/Modules/Staking/SelectValidatorsFlow/ValidatorInfo/Flow/Relaychain/ValidatorInfoRelaychainStrategy.swift @@ -1,6 +1,8 @@ import Foundation import RobinHood import SSFModels +import SSFAccountManagment +import SSFCrypto protocol ValidatorInfoRelaychainStrategyOutput: AnyObject { func didReceiveValidatorInfo(_ validatorInfo: ValidatorInfoProtocol) diff --git a/fearless/Modules/Staking/SelectValidatorsFlow/ValidatorSearch/ValidatorSearchPresenter.swift b/fearless/Modules/Staking/SelectValidatorsFlow/ValidatorSearch/ValidatorSearchPresenter.swift index ae67f35dd1..f0a6b24b7d 100644 --- a/fearless/Modules/Staking/SelectValidatorsFlow/ValidatorSearch/ValidatorSearchPresenter.swift +++ b/fearless/Modules/Staking/SelectValidatorsFlow/ValidatorSearch/ValidatorSearchPresenter.swift @@ -1,6 +1,7 @@ import SoraFoundation import IrohaCrypto import SSFModels +import SSFCrypto final class ValidatorSearchPresenter { weak var view: ValidatorSearchViewProtocol? diff --git a/fearless/Modules/Staking/SelectValidatorsFlow/ValidatorSearch/ValidatorSearchWireframe.swift b/fearless/Modules/Staking/SelectValidatorsFlow/ValidatorSearch/ValidatorSearchWireframe.swift index 1bba892af0..ad516eb172 100644 --- a/fearless/Modules/Staking/SelectValidatorsFlow/ValidatorSearch/ValidatorSearchWireframe.swift +++ b/fearless/Modules/Staking/SelectValidatorsFlow/ValidatorSearch/ValidatorSearchWireframe.swift @@ -1,4 +1,3 @@ - import SSFModels final class ValidatorSearchWireframe: ValidatorSearchWireframeProtocol { func present( diff --git a/fearless/Modules/Staking/SelectValidatorsFlow/YourValidatorList/Flows/Relaychain/YourValidatorListRelaychainStrategy.swift b/fearless/Modules/Staking/SelectValidatorsFlow/YourValidatorList/Flows/Relaychain/YourValidatorListRelaychainStrategy.swift index b6263c49da..b999f052da 100644 --- a/fearless/Modules/Staking/SelectValidatorsFlow/YourValidatorList/Flows/Relaychain/YourValidatorListRelaychainStrategy.swift +++ b/fearless/Modules/Staking/SelectValidatorsFlow/YourValidatorList/Flows/Relaychain/YourValidatorListRelaychainStrategy.swift @@ -2,6 +2,7 @@ import Foundation import RobinHood import SSFModels import SSFRuntimeCodingService +import SSFCrypto protocol YourValidatorListRelaychainStrategyOutput { func didReceiveValidators(result: Result) diff --git a/fearless/Modules/Staking/Services/RewardCalculatorService/ParachainRewardCalculatorEngine.swift b/fearless/Modules/Staking/Services/RewardCalculatorService/ParachainRewardCalculatorEngine.swift index 8a5d52ff92..3ad692c46c 100644 --- a/fearless/Modules/Staking/Services/RewardCalculatorService/ParachainRewardCalculatorEngine.swift +++ b/fearless/Modules/Staking/Services/RewardCalculatorService/ParachainRewardCalculatorEngine.swift @@ -3,8 +3,6 @@ import RobinHood import BigInt import IrohaCrypto import SSFModels -import SSFModels - final class ParachainRewardCalculatorEngine: RewardCalculatorEngineProtocol { let rewardAssetRate: Decimal = RewardCalculatorConstants.defaultRewardAssetRate diff --git a/fearless/Modules/Staking/Services/RewardCalculatorService/PortionRewardCalculatorEngine.swift b/fearless/Modules/Staking/Services/RewardCalculatorService/PortionRewardCalculatorEngine.swift index 35192b6749..1fd92aff31 100644 --- a/fearless/Modules/Staking/Services/RewardCalculatorService/PortionRewardCalculatorEngine.swift +++ b/fearless/Modules/Staking/Services/RewardCalculatorService/PortionRewardCalculatorEngine.swift @@ -167,7 +167,7 @@ final class PortionRewardCalculatorEngine: RewardCalculatorEngineProtocol { return dailyReturn * Decimal(period.inDays) } case .avg: - let commission = validators.compactMap { Decimal.fromSubstratePerbill(value: $0.prefs.commission) ?? 0.0 }.reduce(0,+) / Decimal(validators.count) + let commission = validators.compactMap { Decimal.fromSubstratePerbill(value: $0.prefs.commission) ?? 0.0 }.reduce(0, +) / Decimal(validators.count) let eraReturn = calculateReturnForStake(averageStake, commission: commission) let dailyReturn = eraReturn * erasPerDay diff --git a/fearless/Modules/Staking/StakingAmount/Flow/StakingAmountFlow.swift b/fearless/Modules/Staking/StakingAmount/Flow/StakingAmountFlow.swift index 58b947a377..4c4336de04 100644 --- a/fearless/Modules/Staking/StakingAmount/Flow/StakingAmountFlow.swift +++ b/fearless/Modules/Staking/StakingAmount/Flow/StakingAmountFlow.swift @@ -1,4 +1,3 @@ - import Foundation import RobinHood import SoraFoundation diff --git a/fearless/Modules/Staking/StakingAmount/StakingAmountViewFactory.swift b/fearless/Modules/Staking/StakingAmount/StakingAmountViewFactory.swift index 7b781e9040..518605dec5 100644 --- a/fearless/Modules/Staking/StakingAmount/StakingAmountViewFactory.swift +++ b/fearless/Modules/Staking/StakingAmount/StakingAmountViewFactory.swift @@ -184,8 +184,7 @@ final class StakingAmountViewFactory: StakingAmountViewFactoryProtocol { let existentialDepositService = ExistentialDepositService( operationManager: operationManager, - chainRegistry: chainRegistry, - chainId: chainAsset.chain.chainId + chainRegistry: chainRegistry ) switch flow { diff --git a/fearless/Modules/Staking/StakingBalance/Flow/Relaychain/StakingBalanceRelaychainStrategy.swift b/fearless/Modules/Staking/StakingBalance/Flow/Relaychain/StakingBalanceRelaychainStrategy.swift index 8d990054e2..3564c2e710 100644 --- a/fearless/Modules/Staking/StakingBalance/Flow/Relaychain/StakingBalanceRelaychainStrategy.swift +++ b/fearless/Modules/Staking/StakingBalance/Flow/Relaychain/StakingBalanceRelaychainStrategy.swift @@ -3,6 +3,7 @@ import RobinHood import SSFUtils import SSFModels import SSFRuntimeCodingService +import SSFCrypto protocol StakingBalanceRelaychainStrategyOutput: AnyObject { func didReceive(ledgerResult: Result) diff --git a/fearless/Modules/Staking/StakingBalance/Flow/Relaychain/StakingBalanceRelaychainViewModelState.swift b/fearless/Modules/Staking/StakingBalance/Flow/Relaychain/StakingBalanceRelaychainViewModelState.swift index e51a1880af..0e5bbd765a 100644 --- a/fearless/Modules/Staking/StakingBalance/Flow/Relaychain/StakingBalanceRelaychainViewModelState.swift +++ b/fearless/Modules/Staking/StakingBalance/Flow/Relaychain/StakingBalanceRelaychainViewModelState.swift @@ -1,5 +1,6 @@ import Foundation import SoraFoundation +import SSFModels final class StakingBalanceRelaychainViewModelState { var stateListener: StakingBalanceModelStateListener? diff --git a/fearless/Modules/Staking/StakingBondMore/StakingBondMoreViewFactory.swift b/fearless/Modules/Staking/StakingBondMore/StakingBondMoreViewFactory.swift index 01ce1f0032..146c7c8825 100644 --- a/fearless/Modules/Staking/StakingBondMore/StakingBondMoreViewFactory.swift +++ b/fearless/Modules/Staking/StakingBondMore/StakingBondMoreViewFactory.swift @@ -102,8 +102,7 @@ struct StakingBondMoreViewFactory { let existentialDepositService = ExistentialDepositService( operationManager: operationManager, - chainRegistry: chainRegistry, - chainId: chainAsset.chain.chainId + chainRegistry: chainRegistry ) let feeProxy = ExtrinsicFeeProxy() diff --git a/fearless/Modules/Staking/StakingBondMoreConfirmation/Flow/Relaychain/StakingBondMoreConfirmationRelaychainStrategy.swift b/fearless/Modules/Staking/StakingBondMoreConfirmation/Flow/Relaychain/StakingBondMoreConfirmationRelaychainStrategy.swift index 71456eb925..9522142987 100644 --- a/fearless/Modules/Staking/StakingBondMoreConfirmation/Flow/Relaychain/StakingBondMoreConfirmationRelaychainStrategy.swift +++ b/fearless/Modules/Staking/StakingBondMoreConfirmation/Flow/Relaychain/StakingBondMoreConfirmationRelaychainStrategy.swift @@ -4,6 +4,7 @@ import SSFUtils import SoraKeystore import SSFModels import SSFRuntimeCodingService +import SSFCrypto protocol StakingBondMoreConfirmationRelaychainStrategyOutput: AnyObject { func didReceiveAccountInfo(result: Result) diff --git a/fearless/Modules/Staking/StakingMain/StakingMainInteractor+InputProtocol.swift b/fearless/Modules/Staking/StakingMain/StakingMainInteractor+InputProtocol.swift index f100dbb8c2..09ce7f4f69 100644 --- a/fearless/Modules/Staking/StakingMain/StakingMainInteractor+InputProtocol.swift +++ b/fearless/Modules/Staking/StakingMain/StakingMainInteractor+InputProtocol.swift @@ -2,6 +2,7 @@ import Foundation import SoraFoundation import RobinHood import SSFModels +import SSFCrypto extension StakingMainInteractor: StakingMainInteractorInputProtocol { func changeActiveState(_ isActive: Bool) { diff --git a/fearless/Modules/Staking/StakingMain/StakingMainInteractor+Subscription.swift b/fearless/Modules/Staking/StakingMain/StakingMainInteractor+Subscription.swift index 3cf69411ab..408f575b33 100644 --- a/fearless/Modules/Staking/StakingMain/StakingMainInteractor+Subscription.swift +++ b/fearless/Modules/Staking/StakingMain/StakingMainInteractor+Subscription.swift @@ -1,9 +1,10 @@ import Foundation import RobinHood import BigInt - +import SSFAccountManagment import SSFUtils import SSFModels +import SSFCrypto extension StakingMainInteractor { func handle(stashItem: StashItem?) { diff --git a/fearless/Modules/Staking/StakingMain/StakingMainProtocols.swift b/fearless/Modules/Staking/StakingMain/StakingMainProtocols.swift index 055237c208..0b2259d23e 100644 --- a/fearless/Modules/Staking/StakingMain/StakingMainProtocols.swift +++ b/fearless/Modules/Staking/StakingMain/StakingMainProtocols.swift @@ -212,7 +212,7 @@ protocol StakingMainWireframeProtocol: SheetAlertPresentable, ErrorPresentable, } protocol StakingMainViewFactoryProtocol: AnyObject { - static func createView(moduleOutput: StakingMainModuleOutput?) -> StakingMainViewProtocol? + static func createView(moduleOutput: StakingMainModuleOutput?) -> ControllerBackedProtocol? } protocol StakingMainModuleOutput: AnyObject { diff --git a/fearless/Modules/Staking/StakingMain/StakingMainViewFactory.swift b/fearless/Modules/Staking/StakingMain/StakingMainViewFactory.swift index 9f5a76693d..9a4cd84f12 100644 --- a/fearless/Modules/Staking/StakingMain/StakingMainViewFactory.swift +++ b/fearless/Modules/Staking/StakingMain/StakingMainViewFactory.swift @@ -7,7 +7,7 @@ import RobinHood // swiftlint:disable function_body_length final class StakingMainViewFactory: StakingMainViewFactoryProtocol { - static func createView(moduleOutput: StakingMainModuleOutput?) -> StakingMainViewProtocol? { + static func createView(moduleOutput: StakingMainModuleOutput?) -> ControllerBackedProtocol? { guard let selectedAccount = SelectedWalletSettings.shared.value else { return nil } diff --git a/fearless/Modules/Staking/StakingMain/StakingMainWireframe.swift b/fearless/Modules/Staking/StakingMain/StakingMainWireframe.swift index 709a4bab29..e849eb380b 100644 --- a/fearless/Modules/Staking/StakingMain/StakingMainWireframe.swift +++ b/fearless/Modules/Staking/StakingMain/StakingMainWireframe.swift @@ -190,7 +190,8 @@ final class StakingMainWireframe: StakingMainWireframeProtocol { guard let module = WalletsManagmentAssembly.configureModule( shouldSaveSelected: true, - moduleOutput: moduleOutput + moduleOutput: moduleOutput, + filter: NSPredicate.regularEcosystem() ) else { return diff --git a/fearless/Modules/Staking/StakingMain/StateMachine/States/NominatorState+Status.swift b/fearless/Modules/Staking/StakingMain/StateMachine/States/NominatorState+Status.swift index 27af28da1e..854453db1f 100644 --- a/fearless/Modules/Staking/StakingMain/StateMachine/States/NominatorState+Status.swift +++ b/fearless/Modules/Staking/StakingMain/StateMachine/States/NominatorState+Status.swift @@ -1,6 +1,7 @@ import Foundation import IrohaCrypto import BigInt +import SSFCrypto extension NominatorState { var status: NominationViewStatus { diff --git a/fearless/Modules/Staking/StakingMain/StateMachine/States/ValidatorState+Status.swift b/fearless/Modules/Staking/StakingMain/StateMachine/States/ValidatorState+Status.swift index bb018823bb..2c3cc021c9 100644 --- a/fearless/Modules/Staking/StakingMain/StateMachine/States/ValidatorState+Status.swift +++ b/fearless/Modules/Staking/StakingMain/StateMachine/States/ValidatorState+Status.swift @@ -2,6 +2,7 @@ import Foundation import IrohaCrypto import BigInt import SSFModels +import SSFCrypto extension ValidatorState { var status: ValidationViewStatus { diff --git a/fearless/Modules/Staking/StakingPayoutConfirmation/Floww/Pool/StakingPayoutConfirmationPoolViewModelFactory.swift b/fearless/Modules/Staking/StakingPayoutConfirmation/Floww/Pool/StakingPayoutConfirmationPoolViewModelFactory.swift index 981c3fc2e5..5382b6ab41 100644 --- a/fearless/Modules/Staking/StakingPayoutConfirmation/Floww/Pool/StakingPayoutConfirmationPoolViewModelFactory.swift +++ b/fearless/Modules/Staking/StakingPayoutConfirmation/Floww/Pool/StakingPayoutConfirmationPoolViewModelFactory.swift @@ -2,6 +2,7 @@ import Foundation import SSFUtils import SoraFoundation import SSFModels +import SSFCrypto final class StakingPayoutConfirmationPoolViewModelFactory { private let chainAsset: ChainAsset diff --git a/fearless/Modules/Staking/StakingPayoutConfirmation/Floww/Relaychain/StakingPayoutConfirmationViewModelFactory.swift b/fearless/Modules/Staking/StakingPayoutConfirmation/Floww/Relaychain/StakingPayoutConfirmationViewModelFactory.swift index 1fdbaf8194..e7bb07c630 100644 --- a/fearless/Modules/Staking/StakingPayoutConfirmation/Floww/Relaychain/StakingPayoutConfirmationViewModelFactory.swift +++ b/fearless/Modules/Staking/StakingPayoutConfirmation/Floww/Relaychain/StakingPayoutConfirmationViewModelFactory.swift @@ -2,6 +2,7 @@ import Foundation import SSFUtils import SoraFoundation import SSFModels +import SSFCrypto final class StakingPayoutConfirmationRelaychainViewModelFactory { private let chainAsset: ChainAsset diff --git a/fearless/Modules/Staking/StakingPayoutConfirmation/Floww/Relaychain/StakingPayoutConfirmationrelaychainStrategy.swift b/fearless/Modules/Staking/StakingPayoutConfirmation/Floww/Relaychain/StakingPayoutConfirmationrelaychainStrategy.swift index ad16814a34..8042bc8253 100644 --- a/fearless/Modules/Staking/StakingPayoutConfirmation/Floww/Relaychain/StakingPayoutConfirmationrelaychainStrategy.swift +++ b/fearless/Modules/Staking/StakingPayoutConfirmation/Floww/Relaychain/StakingPayoutConfirmationrelaychainStrategy.swift @@ -3,6 +3,7 @@ import RobinHood import BigInt import SSFModels import SSFRuntimeCodingService +import SSFCrypto protocol StakingPayoutConfirmationrelaychainStrategyOutput { func didRecieve(account: ChainAccountResponse, rewardAmount: Decimal) diff --git a/fearless/Modules/Staking/StakingRebondConfirmation/Flow/Parachain/StakingRebondConfirmationParachainViewModelFactory.swift b/fearless/Modules/Staking/StakingRebondConfirmation/Flow/Parachain/StakingRebondConfirmationParachainViewModelFactory.swift index 0f5f8c58bd..d14bc1ae8c 100644 --- a/fearless/Modules/Staking/StakingRebondConfirmation/Flow/Parachain/StakingRebondConfirmationParachainViewModelFactory.swift +++ b/fearless/Modules/Staking/StakingRebondConfirmation/Flow/Parachain/StakingRebondConfirmationParachainViewModelFactory.swift @@ -2,6 +2,7 @@ import Foundation import SoraFoundation import SSFUtils import SSFModels +import SSFCrypto final class StakingRebondConfirmationParachainViewModelFactory: StakingRebondConfirmationViewModelFactoryProtocol { private let balanceViewModelFactory: BalanceViewModelFactoryProtocol diff --git a/fearless/Modules/Staking/StakingRebondConfirmation/Flow/Relaychain/StakingRebondConfirmationRelaychainStrategy.swift b/fearless/Modules/Staking/StakingRebondConfirmation/Flow/Relaychain/StakingRebondConfirmationRelaychainStrategy.swift index 1715173ff8..967545f5ae 100644 --- a/fearless/Modules/Staking/StakingRebondConfirmation/Flow/Relaychain/StakingRebondConfirmationRelaychainStrategy.swift +++ b/fearless/Modules/Staking/StakingRebondConfirmation/Flow/Relaychain/StakingRebondConfirmationRelaychainStrategy.swift @@ -4,6 +4,7 @@ import SSFUtils import SoraKeystore import SSFModels import SSFRuntimeCodingService +import SSFCrypto protocol StakingRebondConfirmationRelaychainStrategyOutput: AnyObject { func didReceiveStakingLedger(result: Result) diff --git a/fearless/Modules/Staking/StakingRebondConfirmation/Flow/Relaychain/StakingRebondConfirmationRelaychainViewModelFactory.swift b/fearless/Modules/Staking/StakingRebondConfirmation/Flow/Relaychain/StakingRebondConfirmationRelaychainViewModelFactory.swift index ad3df202a7..6e70582743 100644 --- a/fearless/Modules/Staking/StakingRebondConfirmation/Flow/Relaychain/StakingRebondConfirmationRelaychainViewModelFactory.swift +++ b/fearless/Modules/Staking/StakingRebondConfirmation/Flow/Relaychain/StakingRebondConfirmationRelaychainViewModelFactory.swift @@ -2,6 +2,7 @@ import Foundation import SoraFoundation import SSFUtils import SSFModels +import SSFCrypto final class StakingRebondConfirmationRelaychainViewModelFactory: StakingRebondConfirmationViewModelFactoryProtocol { private let balanceViewModelFactory: BalanceViewModelFactoryProtocol diff --git a/fearless/Modules/Staking/StakingRedeem/Flow/Relaychain/StakingRedeemRelaychainStrategy.swift b/fearless/Modules/Staking/StakingRedeem/Flow/Relaychain/StakingRedeemRelaychainStrategy.swift index 56e80be60c..31686e0379 100644 --- a/fearless/Modules/Staking/StakingRedeem/Flow/Relaychain/StakingRedeemRelaychainStrategy.swift +++ b/fearless/Modules/Staking/StakingRedeem/Flow/Relaychain/StakingRedeemRelaychainStrategy.swift @@ -5,6 +5,7 @@ import SSFUtils import BigInt import SSFModels import SSFRuntimeCodingService +import SSFCrypto protocol StakingRedeemRelaychainStrategyOutput: AnyObject { func didReceiveStakingLedger(result: Result) diff --git a/fearless/Modules/Staking/StakingRedeemConfirmation/Flow/Relaychain/StakingRedeemConfirmationRelaychainStrategy.swift b/fearless/Modules/Staking/StakingRedeemConfirmation/Flow/Relaychain/StakingRedeemConfirmationRelaychainStrategy.swift index 629ee9dc7c..121a27a61a 100644 --- a/fearless/Modules/Staking/StakingRedeemConfirmation/Flow/Relaychain/StakingRedeemConfirmationRelaychainStrategy.swift +++ b/fearless/Modules/Staking/StakingRedeemConfirmation/Flow/Relaychain/StakingRedeemConfirmationRelaychainStrategy.swift @@ -5,6 +5,7 @@ import SSFUtils import BigInt import SSFModels import SSFRuntimeCodingService +import SSFCrypto protocol StakingRedeemConfirmationRelaychainStrategyOutput: AnyObject { func didReceiveStakingLedger(result: Result) diff --git a/fearless/Modules/Staking/StakingRewardDestConfirm/StakingRewardDestConfirmInteractor.swift b/fearless/Modules/Staking/StakingRewardDestConfirm/StakingRewardDestConfirmInteractor.swift index 415a087b10..cc0f5ad09d 100644 --- a/fearless/Modules/Staking/StakingRewardDestConfirm/StakingRewardDestConfirmInteractor.swift +++ b/fearless/Modules/Staking/StakingRewardDestConfirm/StakingRewardDestConfirmInteractor.swift @@ -5,6 +5,7 @@ import SoraKeystore import SSFUtils import SSFModels import SSFRuntimeCodingService +import SSFCrypto final class StakingRewardDestConfirmInteractor: AccountFetching { weak var presenter: StakingRewardDestConfirmInteractorOutputProtocol! diff --git a/fearless/Modules/Staking/StakingRewardDestConfirm/ViewModel/StakingRewardDestConfirmViewModelFactory.swift b/fearless/Modules/Staking/StakingRewardDestConfirm/ViewModel/StakingRewardDestConfirmViewModelFactory.swift index d172e354e0..8485c86922 100644 --- a/fearless/Modules/Staking/StakingRewardDestConfirm/ViewModel/StakingRewardDestConfirmViewModelFactory.swift +++ b/fearless/Modules/Staking/StakingRewardDestConfirm/ViewModel/StakingRewardDestConfirmViewModelFactory.swift @@ -1,5 +1,6 @@ import Foundation import SSFUtils +import SSFModels protocol StakingRewardDestConfirmVMFactoryProtocol { func createViewModel( diff --git a/fearless/Modules/Staking/StakingRewardDestinationSetup/StakingRewardDestSetupInteractor.swift b/fearless/Modules/Staking/StakingRewardDestinationSetup/StakingRewardDestSetupInteractor.swift index daa03812bf..42d2f6bf12 100644 --- a/fearless/Modules/Staking/StakingRewardDestinationSetup/StakingRewardDestSetupInteractor.swift +++ b/fearless/Modules/Staking/StakingRewardDestinationSetup/StakingRewardDestSetupInteractor.swift @@ -4,6 +4,7 @@ import IrohaCrypto import SSFUtils import SSFModels import SSFRuntimeCodingService +import SSFCrypto final class StakingRewardDestSetupInteractor: AccountFetching { weak var presenter: StakingRewardDestSetupInteractorOutputProtocol! diff --git a/fearless/Modules/Staking/StakingUnbondConfirm/Flow/Relaychain/StakingUnbondConfirmRelaychainStrategy.swift b/fearless/Modules/Staking/StakingUnbondConfirm/Flow/Relaychain/StakingUnbondConfirmRelaychainStrategy.swift index 2979c9e258..0bb9854f0e 100644 --- a/fearless/Modules/Staking/StakingUnbondConfirm/Flow/Relaychain/StakingUnbondConfirmRelaychainStrategy.swift +++ b/fearless/Modules/Staking/StakingUnbondConfirm/Flow/Relaychain/StakingUnbondConfirmRelaychainStrategy.swift @@ -5,6 +5,7 @@ import RobinHood import BigInt import SSFModels import SSFRuntimeCodingService +import SSFCrypto protocol StakingUnbondConfirmRelaychainStrategyOutput: AnyObject { func didReceiveStakingLedger(result: Result) diff --git a/fearless/Modules/StakingPool/Join/StakingPoolJoinConfig/StakingPoolJoinConfigAssembly.swift b/fearless/Modules/StakingPool/Join/StakingPoolJoinConfig/StakingPoolJoinConfigAssembly.swift index e0fc12f8c1..dfc08456e9 100644 --- a/fearless/Modules/StakingPool/Join/StakingPoolJoinConfig/StakingPoolJoinConfigAssembly.swift +++ b/fearless/Modules/StakingPool/Join/StakingPoolJoinConfig/StakingPoolJoinConfigAssembly.swift @@ -59,8 +59,7 @@ final class StakingPoolJoinConfigAssembly { let existentialDepositService = ExistentialDepositService( operationManager: operationManager, - chainRegistry: chainRegistry, - chainId: chainAsset.chain.chainId + chainRegistry: chainRegistry ) let callFactory = SubstrateCallFactoryDefault(runtimeService: runtimeService) diff --git a/fearless/Modules/StakingPool/PoolRolesConfirm/PoolRolesConfirmProtocols.swift b/fearless/Modules/StakingPool/PoolRolesConfirm/PoolRolesConfirmProtocols.swift index dcb9abd10c..4fc4aced2e 100644 --- a/fearless/Modules/StakingPool/PoolRolesConfirm/PoolRolesConfirmProtocols.swift +++ b/fearless/Modules/StakingPool/PoolRolesConfirm/PoolRolesConfirmProtocols.swift @@ -1,4 +1,3 @@ - import SSFModels typealias PoolRolesConfirmModuleCreationResult = (view: PoolRolesConfirmViewInput, input: PoolRolesConfirmModuleInput) diff --git a/fearless/Modules/StakingPool/StakingPoolCreate/StakingPoolCreateAssembly.swift b/fearless/Modules/StakingPool/StakingPoolCreate/StakingPoolCreateAssembly.swift index c486cccd6b..16a92d24e1 100644 --- a/fearless/Modules/StakingPool/StakingPoolCreate/StakingPoolCreateAssembly.swift +++ b/fearless/Modules/StakingPool/StakingPoolCreate/StakingPoolCreateAssembly.swift @@ -57,8 +57,7 @@ final class StakingPoolCreateAssembly { let existentialDepositService = ExistentialDepositService( operationManager: operationManager, - chainRegistry: chainRegistry, - chainId: chainAsset.chain.chainId + chainRegistry: chainRegistry ) let callFactory = SubstrateCallFactoryDefault(runtimeService: runtimeService) diff --git a/fearless/Modules/StakingPool/StakingPoolCreate/ViewModel/StakingPoolCreateViewModelFactory.swift b/fearless/Modules/StakingPool/StakingPoolCreate/ViewModel/StakingPoolCreateViewModelFactory.swift index 6def52903d..84da5381bf 100644 --- a/fearless/Modules/StakingPool/StakingPoolCreate/ViewModel/StakingPoolCreateViewModelFactory.swift +++ b/fearless/Modules/StakingPool/StakingPoolCreate/ViewModel/StakingPoolCreateViewModelFactory.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels protocol StakingPoolCreateViewModelFactoryProtocol { func buildViewModel( diff --git a/fearless/Modules/StakingPool/StakingPoolMain/StakingPoolMainAssembly.swift b/fearless/Modules/StakingPool/StakingPoolMain/StakingPoolMainAssembly.swift index 8b7bbdfac2..d42ecc1fe4 100644 --- a/fearless/Modules/StakingPool/StakingPoolMain/StakingPoolMainAssembly.swift +++ b/fearless/Modules/StakingPool/StakingPoolMain/StakingPoolMainAssembly.swift @@ -144,8 +144,7 @@ final class StakingPoolMainAssembly { let existentialDepositService = ExistentialDepositService( operationManager: operationManager, - chainRegistry: chainRegistry, - chainId: chainAsset.chain.chainId + chainRegistry: chainRegistry ) let storageOperationFactory = StorageRequestFactory( diff --git a/fearless/Modules/StakingPool/StakingPoolManagement/StakingPoolManagementAssembly.swift b/fearless/Modules/StakingPool/StakingPoolManagement/StakingPoolManagementAssembly.swift index 0ac114f2ef..e6b684b71c 100644 --- a/fearless/Modules/StakingPool/StakingPoolManagement/StakingPoolManagementAssembly.swift +++ b/fearless/Modules/StakingPool/StakingPoolManagement/StakingPoolManagementAssembly.swift @@ -100,8 +100,7 @@ final class StakingPoolManagementAssembly { let existentialDepositService = ExistentialDepositService( operationManager: operationManager, - chainRegistry: chainRegistry, - chainId: chainAsset.chain.chainId + chainRegistry: chainRegistry ) let rewardOperationFactory = RewardOperationFactory.factory(chain: chainAsset.chain) diff --git a/fearless/Modules/SwapTransactionDetail/viewModel/SwapTransactionViewModelFactory.swift b/fearless/Modules/SwapTransactionDetail/viewModel/SwapTransactionViewModelFactory.swift index 2859f95fad..67d2b5fcf9 100644 --- a/fearless/Modules/SwapTransactionDetail/viewModel/SwapTransactionViewModelFactory.swift +++ b/fearless/Modules/SwapTransactionDetail/viewModel/SwapTransactionViewModelFactory.swift @@ -1,6 +1,7 @@ import Foundation import UIKit import SSFModels +import SSFCrypto protocol SwapTransactionViewModelFactoryProtocol { func createViewModel( diff --git a/fearless/Modules/SwitchAccount/SwitchAccount+OnboardingMainWireframe.swift b/fearless/Modules/SwitchAccount/SwitchAccount+OnboardingMainWireframe.swift index 6334d58d87..346feb0dbc 100644 --- a/fearless/Modules/SwitchAccount/SwitchAccount+OnboardingMainWireframe.swift +++ b/fearless/Modules/SwitchAccount/SwitchAccount+OnboardingMainWireframe.swift @@ -13,8 +13,8 @@ extension SwitchAccount { view?.controller.navigationController?.pushViewController(controller, animated: true) } - func showSignup(from view: OnboardingMainViewProtocol?) { - guard let usernameSetup = UsernameSetupViewFactory.createViewForSwitch() else { + func showSignup(from view: OnboardingMainViewProtocol?, ecosystem: AccountCreateEcosystem) { + guard let usernameSetup = UsernameSetupViewFactory.createViewForSwitch(ecosystem: ecosystem) else { return } @@ -23,7 +23,7 @@ extension SwitchAccount { } } - func showAccountRestore(defaultSource _: AccountImportSource, from view: OnboardingMainViewProtocol?) { + func showAccountRestore(defaultSource _: AccountImportSource, flow: AccountImportFlow, from view: OnboardingMainViewProtocol?) { guard let restorationController = AccountImportViewFactory.createViewForSwitch()?.controller else { return } @@ -38,7 +38,7 @@ extension SwitchAccount { let navigationController = view?.controller.navigationController, navigationController.topViewController == view?.controller, navigationController.presentedViewController == nil { - showAccountRestore(defaultSource: .mnemonic, from: view) + showAccountRestore(defaultSource: .mnemonic, flow: .wallet(step: .substrate), from: view) } } diff --git a/fearless/Modules/SwitchAccount/SwitchAccount+UsernameSetupWireframe.swift b/fearless/Modules/SwitchAccount/SwitchAccount+UsernameSetupWireframe.swift index de17c3d959..5d6ae3e89f 100644 --- a/fearless/Modules/SwitchAccount/SwitchAccount+UsernameSetupWireframe.swift +++ b/fearless/Modules/SwitchAccount/SwitchAccount+UsernameSetupWireframe.swift @@ -5,9 +5,10 @@ extension SwitchAccount { func proceed( from view: UsernameSetupViewProtocol?, flow _: AccountCreateFlow = .wallet, - model: UsernameSetupModel + model: UsernameSetupModel, + ecosystem: AccountCreateEcosystem ) { - guard let accountCreation = AccountCreateViewFactory.createViewForSwitch(model: model) else { + guard let accountCreation = AccountCreateViewFactory.createViewForSwitch(ecosystem: ecosystem, model: model) else { return } diff --git a/fearless/Modules/TonWebBridge/Models/DappBridgeMessageType.swift b/fearless/Modules/TonWebBridge/Models/DappBridgeMessageType.swift new file mode 100644 index 0000000000..e50b523556 --- /dev/null +++ b/fearless/Modules/TonWebBridge/Models/DappBridgeMessageType.swift @@ -0,0 +1,7 @@ +import Foundation + +enum DappBridgeMessageType: String, Codable { + case invokeRnFunc + case functionResponse + case event +} diff --git a/fearless/Modules/TonWebBridge/Models/DappBridgeResponse.swift b/fearless/Modules/TonWebBridge/Models/DappBridgeResponse.swift new file mode 100644 index 0000000000..5975328900 --- /dev/null +++ b/fearless/Modules/TonWebBridge/Models/DappBridgeResponse.swift @@ -0,0 +1,38 @@ +import Foundation + +struct DappBridgeResponse { + enum Status: String { + case fulfilled + case rejected + } + + enum Data { + case data(String) + case error(Int) + } + + let invocationId: String + let status: Status + let data: Data + + var json: String? { + var dictionary: [String: Any] = [ + "invocationId": invocationId, + "status": status.rawValue, + "type": "functionResponse" + ] + switch data { + case let .data(data): + dictionary["data"] = data + case let .error(error): + dictionary["data"] = error + } + guard + let data = try? JSONSerialization.data(withJSONObject: dictionary), + let dataString = String(data: data, encoding: .utf8) + else { + return nil + } + return dataString + } +} diff --git a/fearless/Modules/TonWebBridge/Models/SendTransactionSignRequest.swift b/fearless/Modules/TonWebBridge/Models/SendTransactionSignRequest.swift new file mode 100644 index 0000000000..ea63b11c32 --- /dev/null +++ b/fearless/Modules/TonWebBridge/Models/SendTransactionSignRequest.swift @@ -0,0 +1,21 @@ +import Foundation +import TonSwift +import SSFModels + +struct SendTransactionSignRequest: Decodable { + let params: [SendTransactionParam] + + enum CodingKeys: String, CodingKey { + case params + } + + init(from decoder: Decoder) throws { + var container = try decoder.unkeyedContainer() + var params = [SendTransactionParam]() + while !container.isAtEnd { + let param = try container.decode(SendTransactionParam.self) + params.append(param) + } + self.params = params + } +} diff --git a/fearless/Modules/TonWebBridge/Models/TonConnect.swift b/fearless/Modules/TonWebBridge/Models/TonConnect.swift new file mode 100644 index 0000000000..41125094d6 --- /dev/null +++ b/fearless/Modules/TonWebBridge/Models/TonConnect.swift @@ -0,0 +1,209 @@ +import Foundation +import TonSwift + +struct Info: Encodable { + let isWalletBrowser: Bool + let deviceInfo: TonConnect.DeviceInfo + let protocolVersion: Int +} + +enum TonConnect {} + +extension TonConnect { + enum ConnectEvent: Encodable { + case success(ConnectEventSuccess) + case error(ConnectEventError) + } + + struct DeviceInfo: Encodable { + let platform = "iphone" + let appName = "Fearless" + let appVersion = AppVersion.stringValue + let maxProtocolVersion = 2 + let features = [ + FeatureCompatible.legacy(Feature()), + FeatureCompatible.feature(Feature()) + ] + + enum FeatureCompatible: Encodable { + case feature(Feature) + case legacy(Feature) + + func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + switch self { + case let .feature(feature): + try container.encode(feature) + case let .legacy(feature): + try container.encode(feature.name) + } + } + } + + struct Feature: Encodable { + let name = "SendTransaction" + let maxMessages = 4 + } + + init() {} + } + + struct ConnectEventSuccess: Encodable { + struct Payload: Encodable { + let items: [ConnectItemReply] + let device: DeviceInfo + } + + let event = "connect" + let id = Int(Date().timeIntervalSince1970) + let payload: Payload + } + + struct ConnectEventError: Encodable { + struct Payload: Encodable { + let code: Error + let message: String + } + + enum Error: Int, Encodable, Swift.Error { + case unknownError = 0 + case badRequest = 1 + case appManifestNotFound = 2 + case appManifestContentError = 3 + case unknownApp = 100 + case userDeclinedTheConnection = 300 + } + + let event = "connect_error" + let id = Int(Date().timeIntervalSince1970) + let payload: Payload + } + + enum ConnectItemReply: Encodable { + case tonAddress(TonAddressItemReply) + case tonProof(TonProofItemReply) + } + + struct TonAddressItemReply: Encodable { + let name = "ton_addr" + let address: TonSwift.Address + let network: Int16 + let publicKey: TonSwift.PublicKey + let walletStateInit: TonSwift.StateInit + } + + enum TonProofItemReply: Encodable { + case success(TonProofItemReplySuccess) + case error(TonProofItemReplyError) + } + + struct TonProofItemReplySuccess: Encodable { + struct Proof: Encodable { + let timestamp: UInt64 + let domain: Domain + let signature: Signature + let payload: String + let privateKey: PrivateKey + } + + struct Signature: Encodable { + let address: TonSwift.Address + let domain: Domain + let timestamp: UInt64 + let payload: String + } + + struct Domain: Encodable { + let lengthBytes: UInt32 + let value: String + } + + let name = "ton_proof" + let proof: Proof + } + + struct TonProofItemReplyError: Encodable { + struct Error: Encodable { + let message: String? + let code: ErrorCode + } + + enum ErrorCode: Int, Encodable { + case unknownError = 0 + case methodNotSupported = 400 + } + + let name = "ton_proof" + let error: Error + } +} + +extension TonConnect.TonProofItemReplySuccess { + init( + address: TonSwift.Address, + domain: String, + payload: String, + privateKey: PrivateKey + ) { + let timestamp = UInt64(Date().timeIntervalSince1970) + let domain = Domain(domain: domain) + let signature = Signature( + address: address, + domain: domain, + timestamp: timestamp, + payload: payload + ) + let proof = Proof( + timestamp: timestamp, + domain: domain, + signature: signature, + payload: payload, + privateKey: privateKey + ) + + self.init(proof: proof) + } +} + +extension TonConnect.TonProofItemReplySuccess.Domain { + init(domain: String) { + let domainLength = UInt32(domain.utf8.count) + value = domain + lengthBytes = domainLength + } +} + +extension TonConnect { + enum SendTransactionResponse { + case success(SendTransactionResponseSuccess) + case error(SendTransactionResponseError) + } + + struct SendTransactionResponseSuccess: Encodable { + let result: String + let id: String + } + + struct SendTransactionResponseError: Encodable { + struct Error: Encodable { + let code: ErrorCode + let message: String + } + + enum ErrorCode: Int, Encodable, Swift.Error { + case unknownError = 0 + case badRequest = 1 + case unknownApp = 10 + case userDeclinedTransaction = 300 + case methodNotSupported = 400 + } + + let id: String + let error: Error + + init(id: String, error: Error) { + self.id = id + self.error = error + } + } +} diff --git a/fearless/Modules/TonWebBridge/Models/TonConnectApp.swift b/fearless/Modules/TonWebBridge/Models/TonConnectApp.swift new file mode 100644 index 0000000000..a25ac58779 --- /dev/null +++ b/fearless/Modules/TonWebBridge/Models/TonConnectApp.swift @@ -0,0 +1,34 @@ +import Foundation +import TonSwift +import RobinHood + +struct TonConnectApp: Codable, Identifiable { + var identifier: String { + [walletId, appUrl.absoluteString].joined(separator: "-") + } + + let walletId: String + let clientId: String + let appUrl: URL + let name: String + let iconUrl: URL? + let publicKey: Data + let privateKey: Data + + enum CodingKeys: CodingKey { + case walletId + case clientId + case appUrl + case publicKey + case privateKey + case name + case iconUrl + } + + var keyPair: TonSwift.KeyPair { + TonSwift.KeyPair( + publicKey: PublicKey(data: publicKey), + privateKey: PrivateKey(data: privateKey) + ) + } +} diff --git a/fearless/Modules/TonWebBridge/Models/TonConnectAppRequest.swift b/fearless/Modules/TonWebBridge/Models/TonConnectAppRequest.swift new file mode 100644 index 0000000000..68d0de2ca4 --- /dev/null +++ b/fearless/Modules/TonWebBridge/Models/TonConnectAppRequest.swift @@ -0,0 +1,34 @@ +import Foundation +import TonSwift +import SSFModels + +extension TonConnect { + struct AppRequest: Codable { + enum Method: String, Codable { + case sendTransaction + case disconnect + } + + let method: Method + let params: [SendTransactionParam] + let id: String + + enum CodingKeys: String, CodingKey { + case method + case params + case id + } + + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + method = try container.decode(Method.self, forKey: .method) + id = try container.decode(String.self, forKey: .id) + let paramsArray = try container.decode([String].self, forKey: .params) + let jsonDecoder = JSONDecoder() + params = paramsArray.compactMap { + guard let data = $0.data(using: .utf8) else { return nil } + return try? jsonDecoder.decode(SendTransactionParam.self, from: data) + } + } + } +} diff --git a/fearless/Modules/TonWebBridge/Models/TonConnectDessision.swift b/fearless/Modules/TonWebBridge/Models/TonConnectDessision.swift new file mode 100644 index 0000000000..b18228d8a0 --- /dev/null +++ b/fearless/Modules/TonWebBridge/Models/TonConnectDessision.swift @@ -0,0 +1,10 @@ +import Foundation + +enum TonConnectDessision { + case approve( + manifest: TonConnectManifest, + params: TonConnectParameters, + invocationId: String + ) + case reject(invocationId: String) +} diff --git a/fearless/Modules/TonWebBridge/Models/TonConnectModels.swift b/fearless/Modules/TonWebBridge/Models/TonConnectModels.swift new file mode 100644 index 0000000000..2e10b971a7 --- /dev/null +++ b/fearless/Modules/TonWebBridge/Models/TonConnectModels.swift @@ -0,0 +1,14 @@ +import Foundation + +struct DappFunctionInvokeMessage { + let type: DappBridgeFunctionType + let invocationId: String + let args: [Any] +} + +enum DappBridgeFunctionType: String, Codable { + case send + case connect + case restoreConnection + case disconnect +} diff --git a/fearless/Modules/TonWebBridge/Models/TonConnectResponses+Encodable.swift b/fearless/Modules/TonWebBridge/Models/TonConnectResponses+Encodable.swift new file mode 100644 index 0000000000..964805c36c --- /dev/null +++ b/fearless/Modules/TonWebBridge/Models/TonConnectResponses+Encodable.swift @@ -0,0 +1,127 @@ +import Foundation +import TonSwift +import TweetNacl + +extension TonConnect.ConnectEvent { + func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + switch self { + case let .success(success): + try container.encode(success) + case let .error(error): + try container.encode(error) + } + } +} + +extension TonConnect.ConnectItemReply { + func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + switch self { + case let .tonAddress(address): + try container.encode(address) + case let .tonProof(proof): + try container.encode(proof) + } + } +} + +extension TonConnect.TonProofItemReply { + func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + switch self { + case let .success(success): + try container.encode(success) + case let .error(error): + try container.encode(error) + } + } +} + +extension TonConnect.TonAddressItemReply { + enum CodingKeys: String, CodingKey { + case name + case address + case network + case publicKey + case walletStateInit + } + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(name, forKey: .name) + try container.encode(address.toRaw(), forKey: .address) + try container.encode("\(network)", forKey: .network) + try container.encode(publicKey.hexString, forKey: .publicKey) + + let builder = Builder() + try walletStateInit.storeTo(builder: builder) + try container.encode( + builder.endCell().toBoc().base64EncodedString(), + forKey: .walletStateInit + ) + } +} + +extension TonConnect.TonProofItemReplySuccess.Signature { + func data() -> Data { + let string = "ton-proof-item-v2/".data(using: .utf8)! + let addressWorkchain = UInt32(bigEndian: UInt32(address.workchain)) + + let addressWorkchainData = withUnsafeBytes(of: addressWorkchain) { a in + Data(a) + } + let addressHash = address.hash + let domainLength = withUnsafeBytes(of: UInt32(littleEndian: domain.lengthBytes)) { a in + Data(a) + } + let domainValue = domain.value.data(using: .utf8)! + let timestamp = withUnsafeBytes(of: UInt64(littleEndian: timestamp)) { a in + Data(a) + } + let payload = payload.data(using: .utf8)! + + return string + addressWorkchainData + addressHash + domainLength + domainValue + timestamp + payload + } +} + +extension TonConnect.TonProofItemReplySuccess.Proof { + enum CodingKeys: String, CodingKey { + case timestamp + case domain + case signature + case payload + } + + func encode(to encoder: Encoder) throws { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(timestamp, forKey: .timestamp) + try container.encode(domain, forKey: .domain) + + let signatureMessageData = signature.data() + let signatureMessage = signatureMessageData.sha256() + guard let prefixData = Data(tonHex: "ffff"), + let tonConnectData = "ton-connect".data(using: .utf8) else { + return + } + let signatureData = (prefixData + tonConnectData + signatureMessage).sha256() + let signature = try TweetNacl.NaclSign.signDetached( + message: signatureData, + secretKey: privateKey.data + ) + try container.encode(signature, forKey: .signature) + try container.encode(payload, forKey: .payload) + } +} + +extension TonConnect.SendTransactionResponse: Encodable { + func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + switch self { + case let .success(success): + try container.encode(success) + case let .error(error): + try container.encode(error) + } + } +} diff --git a/fearless/Modules/TonWebBridge/Models/TonConnectSendDessision.swift b/fearless/Modules/TonWebBridge/Models/TonConnectSendDessision.swift new file mode 100644 index 0000000000..486fc8602a --- /dev/null +++ b/fearless/Modules/TonWebBridge/Models/TonConnectSendDessision.swift @@ -0,0 +1,15 @@ +import Foundation + +enum TonConnectSendDessision { + case sent( + invocationId: String, + response: TonConnect.SendTransactionResponse + ) + case error( + invocationId: String, + error: TonConnect.SendTransactionResponseError.ErrorCode + ) + case declined( + invocationId: String + ) +} diff --git a/fearless/Modules/TonWebBridge/Models/TonDapp.swift b/fearless/Modules/TonWebBridge/Models/TonDapp.swift new file mode 100644 index 0000000000..b2bf7148a0 --- /dev/null +++ b/fearless/Modules/TonWebBridge/Models/TonDapp.swift @@ -0,0 +1,22 @@ +import Foundation +import RobinHood + +struct TonDapp: Codable, Equatable, Identifiable { + let identifier: String + let chains: [String] + let name: String + let description: String? + let icon: URL + let poster: URL? + let url: URL + + enum CodingKeys: CodingKey { + case identifier + case chains + case name + case description + case icon + case poster + case url + } +} diff --git a/fearless/Modules/TonWebBridge/TonWebBridgeAssembly.swift b/fearless/Modules/TonWebBridge/TonWebBridgeAssembly.swift new file mode 100644 index 0000000000..5bebfb169f --- /dev/null +++ b/fearless/Modules/TonWebBridge/TonWebBridgeAssembly.swift @@ -0,0 +1,39 @@ +import UIKit +import SoraFoundation +import SSFModels + +final class TonWebBridgeAssembly { + static func configureModule( + for dapp: TonDapp, + wallet: MetaAccountModel, + moduleOutput: TonWebBridgeModuleOutput? + ) -> TonWebBridgeModuleCreationResult? { + let localizationManager = LocalizationManager.shared + + let interactor = TonWebBridgeInteractor( + tonConnectService: ServiceAssembly.shared.tonConnectService(), + chainRepository: ServiceAssembly.shared.asyncChainModelRepository() + ) + let router = TonWebBridgeRouter() + + let presenter = TonWebBridgePresenter( + dapp: dapp, + wallet: wallet, + messageBuilder: TonConnectMessageBuilderImpl(), + interactor: interactor, + router: router, + logger: ServiceAssembly.shared.logger, + moduleOutput: moduleOutput, + localizationManager: localizationManager + ) + + let view = TonWebBridgeViewController( + title: dapp.name, + initialUrl: dapp.url, + output: presenter, + localizationManager: localizationManager + ) + + return (view, presenter) + } +} diff --git a/fearless/Modules/TonWebBridge/TonWebBridgeHeaderView.swift b/fearless/Modules/TonWebBridge/TonWebBridgeHeaderView.swift new file mode 100644 index 0000000000..816a4ac2f3 --- /dev/null +++ b/fearless/Modules/TonWebBridge/TonWebBridgeHeaderView.swift @@ -0,0 +1,123 @@ +import UIKit + +final class TonWebBridgeHeaderView: UIView { + let titleLabel: UILabel = { + let label = UILabel() + label.font = .h3Title + label.textColor = R.color.colorWhite() + label.textAlignment = .center + return label + }() + + let subtitleLabel: UILabel = { + let label = UILabel() + label.font = .p2Paragraph + label.textColor = R.color.colorGray() + label.textAlignment = .center + return label + }() + + let contentView = UIView() + + let closeButton: UIButton = { + let button = UIButton() + button.setImage(R.image.iconClose(), for: .normal) + button.layer.masksToBounds = true + button.backgroundColor = R.color.colorWhite8() + return button + }() + + let backButton: UIButton = { + let button = UIButton() + button.setImage(R.image.iconBack(), for: .normal) + button.layer.masksToBounds = true + button.backgroundColor = R.color.colorWhite8() + return button + }() + + override init(frame: CGRect) { + super.init(frame: frame) + setup() + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func setTitle(_ title: String?) { + titleLabel.text = title + } + + func setSubtitle(_ title: String, isSecured: Bool) { + let subtitleResult = NSMutableAttributedString() + if isSecured, let lockImage = UIImage(systemName: "lock.fill") { + let attachment = NSTextAttachment(image: lockImage) + let attachmentString = NSMutableAttributedString(attachment: attachment) + let paragraphStyle = NSMutableParagraphStyle() + paragraphStyle.alignment = .center + attachmentString.addAttributes( + [ + .foregroundColor: R.color.colorGray()!, + .paragraphStyle: paragraphStyle + ], + range: NSRange( + location: 0, + length: attachmentString.length + ) + ) + subtitleResult.append(attachmentString) + subtitleResult.append(NSAttributedString(string: " ")) + } + + let attributtedTitle = NSAttributedString(string: title) + subtitleResult.append(attributtedTitle) + + subtitleLabel.attributedText = subtitleResult + } + + private func setup() { + addSubview(contentView) + contentView.addSubview(titleLabel) + contentView.addSubview(subtitleLabel) + contentView.addSubview(closeButton) + contentView.addSubview(backButton) + + setupConstraints() + } + + private func setupConstraints() { + backgroundColor = R.color.colorBlack19() + contentView.snp.makeConstraints { make in + make.top.equalTo(safeAreaLayoutGuide.snp.top) + make.left.right.bottom.equalTo(self) + make.height.equalTo(64) + } + + closeButton.snp.makeConstraints { make in + make.right.equalTo(contentView).offset(-8) + make.centerY.equalTo(contentView) + make.size.equalTo(32) + } + + backButton.snp.makeConstraints { make in + make.left.equalTo(contentView).offset(8) + make.centerY.equalTo(contentView) + make.size.equalTo(32) + } + + titleLabel.snp.makeConstraints { make in + make.bottom.equalTo(contentView.snp.centerY) + make.leading.equalTo(backButton.snp.trailing) + make.trailing.equalTo(closeButton.snp.leading) + make.width.lessThanOrEqualToSuperview() + } + + subtitleLabel.snp.makeConstraints { make in + make.top.equalTo(contentView.snp.centerY) + make.leading.equalTo(backButton.snp.trailing) + make.trailing.equalTo(closeButton.snp.leading) + make.width.lessThanOrEqualToSuperview() + } + } +} diff --git a/fearless/Modules/TonWebBridge/TonWebBridgeInteractor.swift b/fearless/Modules/TonWebBridge/TonWebBridgeInteractor.swift new file mode 100644 index 0000000000..4fe386cfc5 --- /dev/null +++ b/fearless/Modules/TonWebBridge/TonWebBridgeInteractor.swift @@ -0,0 +1,51 @@ +import UIKit +import SSFModels +import RobinHood + +protocol TonWebBridgeInteractorOutput: AnyObject {} + +final class TonWebBridgeInteractor { + // MARK: - Private properties + + private weak var output: TonWebBridgeInteractorOutput? + + private let tonConnectService: TonConnectService + private let chainRepository: AsyncAnyRepository + + init( + tonConnectService: TonConnectService, + chainRepository: AsyncAnyRepository + ) { + self.tonConnectService = tonConnectService + self.chainRepository = chainRepository + } +} + +// MARK: - TonWebBridgeInteractorInput + +extension TonWebBridgeInteractor: TonWebBridgeInteractorInput { + func getConnectedApp(for wallet: SSFModels.MetaAccountModel) async throws -> [TonConnectApp] { + try await tonConnectService.getConnectedApp(for: wallet) + } + + func connected(app: TonConnectApp) async { + await tonConnectService.saveConnected(app: app) + } + + func disconnected(app: TonConnectApp) async { + await tonConnectService.saveDisconnected(app: app) + } + + func getTonChain() async throws -> SSFModels.ChainModel? { + let network = LocalToggleService.shared.tonEnvListToggle.storageValue ? "-3" : "-239" + return try await chainRepository.fetch(by: network, options: RepositoryFetchOptions()) + } + + func fetchManifest(with url: URL) async throws -> TonConnectManifest { + try await tonConnectService.fetchManifest(with: url) + } + + func setup(with output: TonWebBridgeInteractorOutput) { + self.output = output + } +} diff --git a/fearless/Modules/TonWebBridge/TonWebBridgePresenter.swift b/fearless/Modules/TonWebBridge/TonWebBridgePresenter.swift new file mode 100644 index 0000000000..f6160cd554 --- /dev/null +++ b/fearless/Modules/TonWebBridge/TonWebBridgePresenter.swift @@ -0,0 +1,348 @@ +import Foundation +import WebKit +import SoraFoundation +import SSFModels +import TonSwift + +protocol TonWebBridgeViewInput: ControllerBackedProtocol { + func evaulateJavaScript(_ javaScript: String) async throws + func didReceive(configuration: WKWebViewConfiguration) +} + +protocol TonWebBridgeInteractorInput: AnyObject { + func setup(with output: TonWebBridgeInteractorOutput) + func fetchManifest(with url: URL) async throws -> TonConnectManifest + func getTonChain() async throws -> ChainModel? + func connected(app: TonConnectApp) async + func disconnected(app: TonConnectApp) async + func getConnectedApp(for wallet: MetaAccountModel) async throws -> [TonConnectApp] +} + +final class TonWebBridgePresenter: NSObject { + // MARK: Private properties + + private weak var view: TonWebBridgeViewInput? + private weak var moduleOutput: TonWebBridgeModuleOutput? + private let router: TonWebBridgeRouterInput + private let interactor: TonWebBridgeInteractorInput + private let logger: LoggerProtocol + private let coordinator = WalletConnectCoordinator.shared + + private var dapp: TonDapp + private let wallet: MetaAccountModel + private lazy var userContentController = WKUserContentController() + private let messageBuilder: TonConnectMessageBuilder + + // MARK: - Constructors + + init( + dapp: TonDapp, + wallet: MetaAccountModel, + messageBuilder: TonConnectMessageBuilder, + interactor: TonWebBridgeInteractorInput, + router: TonWebBridgeRouterInput, + logger: LoggerProtocol, + moduleOutput: TonWebBridgeModuleOutput?, + localizationManager: LocalizationManagerProtocol + ) { + self.dapp = dapp + self.wallet = wallet + self.messageBuilder = messageBuilder + self.interactor = interactor + self.router = router + self.logger = logger + self.moduleOutput = moduleOutput + super.init() + self.localizationManager = localizationManager + } + + // MARK: - Private methods + + private func provideWebViewConfiguration() { + let configuration = messageBuilder.getConfiguration( + userContentController: userContentController + ) + view?.didReceive(configuration: configuration) + } + + private func setBridgeMessage() { + userContentController.add(self, name: "dapp") + } + + // TODO: - Check is connected + private func reconnectToAppIfAlreadyConnected( + invocationId: String + ) async throws { + let apps = try await interactor.getConnectedApp(for: wallet) + guard apps.first(where: { $0.appUrl.host == dapp.url.host }) != nil else { + let error: TonConnect.ConnectEventError.Error = .unknownError + let response = DappBridgeResponse( + invocationId: invocationId, + status: .rejected, + data: .error(error.rawValue) + ) + try await sendResponse(response) + return + } + + let string = try messageBuilder.getConnectEventSuccess(wallet: wallet) + let response = DappBridgeResponse( + invocationId: invocationId, + status: .fulfilled, + data: .data(string) + ) + try await sendResponse(response) + } + + // MARK: Private handle methods + + private func handleMessage( + body: Any + ) async throws { + let invokeMessage = try messageBuilder.getDappFunctionInvokeMessage(from: body) + + switch invokeMessage.type { + case .send: + try await handleSend(message: invokeMessage) + case .connect: + try await handleConnect(message: invokeMessage) + case .restoreConnection: + try await reconnectToAppIfAlreadyConnected( + invocationId: invokeMessage.invocationId + ) + case .disconnect: + try await handleDisconnect() + } + } + + private func handleSend( + message: DappFunctionInvokeMessage + ) async throws { + let appRequest = try messageBuilder.getTonConnectAppRequest(from: message) + coordinator.send( + request: appRequest, + invocationId: message.invocationId, + wallet: wallet, + dapp: dapp, + delegate: self + ) + } + + private func handleConnect( + message: DappFunctionInvokeMessage + ) async throws { + let payload = try messageBuilder.getTonConnectRequestPayload(from: message) + let manifest = try await interactor.fetchManifest(with: payload.manifestUrl) + let parameters = TonConnectParameters( + version: .v2, + clientId: UUID().uuidString, + requestPayload: payload + ) + coordinator.suggestConnect( + manifest: manifest, + requestPayload: parameters, + invocationId: message.invocationId, + delegate: self + ) + } + + private func handleDisconnect() async throws { + let apps = try await interactor.getConnectedApp(for: wallet) + guard let connectedApp = apps.first(where: { $0.appUrl.host == dapp.url.host }) else { + logger.error("Connected app not found") + return + } + await interactor.disconnected(app: connectedApp) + moduleOutput?.didDisconnect() + } + + private func handleSendMessage( + result: TonConnect.SendTransactionResponse, + invocationId: String + ) async throws { + let responseData = try JSONEncoder().encode(result) + guard let string = String(data: responseData, encoding: .utf8) else { + throw ConvenienceError(error: "Response data encoding error") + } + + let response = DappBridgeResponse( + invocationId: invocationId, + status: .fulfilled, + data: .data(string) + ) + try await sendResponse(response) + } + + // MARK: - Private send actions + + private func sendResponse( + _ response: DappBridgeResponse + ) async throws { + guard let responseJson = response.json else { return } + let js = """ + (function() { + window.dispatchEvent(new MessageEvent('message', { + data: \(responseJson) + })); + })(); + """ + try await view?.evaulateJavaScript(js) + } + + private func sendApprove( + manifest: TonConnectManifest, + params: TonConnectParameters, + invocationId: String + ) async throws { + guard let tonChainModel = try await interactor.getTonChain() else { + throw ConvenienceError(error: "Missing Ton Chain Model") + } + let responseEvent = try messageBuilder.getConnectEventSuccessResponse( + requestPayloadItems: params.requestPayload.items, + wallet: wallet, + manifest: manifest, + tonChainModel: tonChainModel + ) + let responseString = try messageBuilder.getString(from: responseEvent) + + let response = DappBridgeResponse( + invocationId: invocationId, + status: .fulfilled, + data: .data(responseString) + ) + try await sendResponse(response) + + let sessionCrypto = try TonConnectSessionCrypto() + let connectedApp = TonConnectApp( + walletId: wallet.metaId, + clientId: params.clientId, + appUrl: manifest.url, + name: manifest.name, + iconUrl: manifest.iconUrl, + publicKey: sessionCrypto.keyPair.publicKey.data, + privateKey: sessionCrypto.keyPair.privateKey.data + ) + await interactor.connected(app: connectedApp) + } + + private func sendReject( + invocationId: String, + error: Int + ) async throws { + let response = DappBridgeResponse( + invocationId: invocationId, + status: .rejected, + data: .error(error) + ) + try await sendResponse(response) + } +} + +// MARK: - TonWebBridgeViewOutput + +extension TonWebBridgePresenter: TonWebBridgeViewOutput { + func didLoadInitialURL() { + Task { + do { + try await reconnectToAppIfAlreadyConnected(invocationId: "") + } catch { + logger.customError(error) + } + } + } + + func didLoad(view: TonWebBridgeViewInput) { + self.view = view + interactor.setup(with: self) + provideWebViewConfiguration() + setBridgeMessage() + } +} + +// MARK: - TonWebBridgeInteractorOutput + +extension TonWebBridgePresenter: TonWebBridgeInteractorOutput {} + +// MARK: - Localizable + +extension TonWebBridgePresenter: Localizable { + func applyLocalization() {} +} + +extension TonWebBridgePresenter: TonWebBridgeModuleInput {} + +// MARK: - WKScriptMessageHandler + +extension TonWebBridgePresenter: WKScriptMessageHandler { + public func userContentController( + _: WKUserContentController, + didReceive message: WKScriptMessage + ) { + Task { @MainActor in + do { + try await handleMessage(body: message.body) + } catch { + logger.customError(error) + } + } + } +} + +// MARK: - WalletConnectProposalModuleOutput + +extension TonWebBridgePresenter: WalletConnectProposalModuleOutput { + func tonConnect(dessision: TonConnectDessision) { + Task { + do { + switch dessision { + case let .approve(manifest, params, invocationId): + try await sendApprove( + manifest: manifest, + params: params, + invocationId: invocationId + ) + case let .reject(invocationId): + let error: TonConnect.ConnectEventError.Error = .unknownApp + try await sendReject( + invocationId: invocationId, + error: error.rawValue + ) + try await handleDisconnect() + } + } catch { + logger.customError(error) + } + } + } +} + +// MARK: - WalletConnectSessionModuleOutput + +extension TonWebBridgePresenter: WalletConnectSessionModuleOutput { + func tonConnectSend(dessision: TonConnectSendDessision) { + Task { + do { + switch dessision { + case let .sent(invocationId, sendTransactionResponse): + try await handleSendMessage( + result: sendTransactionResponse, + invocationId: invocationId + ) + case let .declined(invocationId): + let declineError: TonConnect.SendTransactionResponseError.ErrorCode = .userDeclinedTransaction + try await sendReject( + invocationId: invocationId, + error: declineError.rawValue + ) + case let .error(invocationId, errorCode): + try await sendReject( + invocationId: invocationId, + error: errorCode.rawValue + ) + } + } catch { + logger.customError(error) + } + } + } +} diff --git a/fearless/Modules/TonWebBridge/TonWebBridgeProtocols.swift b/fearless/Modules/TonWebBridge/TonWebBridgeProtocols.swift new file mode 100644 index 0000000000..b6d6e77dbb --- /dev/null +++ b/fearless/Modules/TonWebBridge/TonWebBridgeProtocols.swift @@ -0,0 +1,12 @@ +typealias TonWebBridgeModuleCreationResult = ( + view: TonWebBridgeViewInput, + input: TonWebBridgeModuleInput +) + +protocol TonWebBridgeRouterInput: AnyObject {} + +protocol TonWebBridgeModuleInput: AnyObject {} + +protocol TonWebBridgeModuleOutput: AnyObject { + func didDisconnect() +} diff --git a/fearless/Modules/TonWebBridge/TonWebBridgeRouter.swift b/fearless/Modules/TonWebBridge/TonWebBridgeRouter.swift new file mode 100644 index 0000000000..16d9ad9c53 --- /dev/null +++ b/fearless/Modules/TonWebBridge/TonWebBridgeRouter.swift @@ -0,0 +1,3 @@ +import Foundation + +final class TonWebBridgeRouter: TonWebBridgeRouterInput {} diff --git a/fearless/Modules/TonWebBridge/TonWebBridgeViewController.swift b/fearless/Modules/TonWebBridge/TonWebBridgeViewController.swift new file mode 100644 index 0000000000..734c917410 --- /dev/null +++ b/fearless/Modules/TonWebBridge/TonWebBridgeViewController.swift @@ -0,0 +1,195 @@ +import UIKit +import WebKit +import SoraFoundation + +protocol TonWebBridgeViewOutput: AnyObject { + func didLoad(view: TonWebBridgeViewInput) + func didLoadInitialURL() +} + +final class TonWebBridgeViewController: UIViewController, ViewHolder, HiddableBarWhenPushed, LoadableViewProtocol { + typealias RootViewType = TonWebBridgeViewLayout + + var loadableContentView: UIView { + rootView.webView + } + + // MARK: Private properties + + private let output: TonWebBridgeViewOutput + + // MARK: - State + + private var url: URL { + didSet { + guard url.host != oldValue.host else { + return + } + didUpdateUrl() + } + } + + private var didLoadInitialURL = false { + didSet { + guard didLoadInitialURL else { return } + output.didLoadInitialURL() + didStopLoading() + } + } + + private var canGoBack: NSKeyValueObservation? + + // MARK: - Constructor + + init( + title: String, + initialUrl: URL, + output: TonWebBridgeViewOutput, + localizationManager: LocalizationManagerProtocol? + ) { + self.output = output + url = initialUrl + super.init(nibName: nil, bundle: nil) + self.title = title + self.localizationManager = localizationManager + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Life cycle + + override func loadView() { + view = TonWebBridgeViewLayout() + } + + override func viewDidLoad() { + super.viewDidLoad() + output.didLoad(view: self) + setupDelegate() + bindActions() + didUpdateUrl() + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + if !didLoadInitialURL { + didStartLoading() + } + } + + // MARK: - Private methods + + private func setupDelegate() { + rootView.webView.navigationDelegate = self + rootView.webView.uiDelegate = self + } + + private func bindActions() { + rootView.headerView.closeButton.addAction { [weak self] in + self?.rootView.webView.scrollView.layer.masksToBounds = true + self?.rootView.webView.layer.masksToBounds = true + self?.dismiss(animated: true) + } + rootView.headerView.backButton.addAction { [weak self] in + self?.rootView.webView.goBack() + } + + rootView.headerView.backButton.isHidden = true + canGoBack = rootView.webView.observe(\.canGoBack, options: .new) { [weak self] _, value in + guard let canGoBack = value.newValue else { return } + self?.rootView.headerView.backButton.isHidden = !canGoBack + } + } + + private func didUpdateUrl() { + rootView.headerView.setTitle(title) + if let serverTrust = rootView.webView.serverTrust { + SecTrustEvaluateAsyncWithError(serverTrust, .main) { _, isSecured, _ in + self.rootView.headerView.setSubtitle(self.url.host ?? "", isSecured: isSecured) + } + } else { + let components = URLComponents(string: url.absoluteString) + let isSecured = components?.scheme == "https" + rootView.headerView.setSubtitle(url.host ?? "", isSecured: isSecured) + } + } +} + +// MARK: - TonWebBridgeViewInput + +extension TonWebBridgeViewController: TonWebBridgeViewInput { + func didReceive(configuration: WKWebViewConfiguration) { + rootView.setupWebView(with: configuration) + setupDelegate() + + var urlRequest = URLRequest(url: url) + urlRequest.httpShouldHandleCookies = false + urlRequest.cachePolicy = .reloadIgnoringLocalAndRemoteCacheData + rootView.webView.load(urlRequest) + } + + func evaulateJavaScript(_ javaScript: String) async throws { + try await withCheckedThrowingContinuation { (continuation: CheckedContinuation) in + rootView.webView.evaluateJavaScript(javaScript) { _, error in + if let error { + continuation.resume(throwing: error) + } else { + continuation.resume() + } + } + } + } +} + +// MARK: - Localizable + +extension TonWebBridgeViewController: Localizable { + func applyLocalization() { + rootView.locale = selectedLocale + } +} + +// MARK: - WKNavigationDelegate + +extension TonWebBridgeViewController: WKNavigationDelegate { + public func webView( + _ webView: WKWebView, + didFinish _: WKNavigation! + ) { + guard let url = webView.url else { return } + if !didLoadInitialURL { + didLoadInitialURL = true + } + self.url = url + } + + public func webView( + _: WKWebView, + decidePolicyFor navigationAction: WKNavigationAction + ) async -> WKNavigationActionPolicy { + if let url = navigationAction.request.url, let host = url.host, host.contains("t.me") { + UIApplication.shared.open(url, options: [:], completionHandler: nil) + return .cancel + } + return .allow + } +} + +// MARK: - WKUIDelegate + +extension TonWebBridgeViewController: WKUIDelegate { + public func webView( + _ webView: WKWebView, + createWebViewWith _: WKWebViewConfiguration, + for navigationAction: WKNavigationAction, + windowFeatures _: WKWindowFeatures + ) -> WKWebView? { + if navigationAction.targetFrame == nil { + webView.load(navigationAction.request) + } + return nil + } +} diff --git a/fearless/Modules/TonWebBridge/TonWebBridgeViewLayout.swift b/fearless/Modules/TonWebBridge/TonWebBridgeViewLayout.swift new file mode 100644 index 0000000000..ea0e4926a9 --- /dev/null +++ b/fearless/Modules/TonWebBridge/TonWebBridgeViewLayout.swift @@ -0,0 +1,59 @@ +import UIKit +import WebKit + +final class TonWebBridgeViewLayout: UIView { + var locale: Locale = .current { + didSet { + applyLocalization() + } + } + + lazy var headerView = TonWebBridgeHeaderView() + lazy var webView = WKWebView(frame: .zero) + + override init(frame: CGRect) { + super.init(frame: frame) + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func layoutSubviews() { + super.layoutSubviews() + headerView.closeButton.rounded() + headerView.backButton.rounded() + } + + func setupWebView(with configuration: WKWebViewConfiguration) { + webView = WKWebView(frame: .zero, configuration: configuration) + webView.backgroundColor = R.color.colorBlack19() + webView.scrollView.backgroundColor = R.color.colorBlack19() + webView.isOpaque = false + webView.scrollView.layer.masksToBounds = false + webView.layer.masksToBounds = false + webView.scrollView.contentInsetAdjustmentBehavior = .never + setupLayout() + } + + // MARK: - Private methods + + private func setupLayout() { + backgroundColor = R.color.colorBlack19() + addSubview(webView) + addSubview(headerView) + + headerView.snp.makeConstraints { make in + make.top.equalTo(safeAreaLayoutGuide.snp.top) + make.leading.trailing.equalToSuperview() + } + webView.snp.makeConstraints { make in + make.top.equalTo(headerView.snp.bottom) + make.leading.trailing.equalToSuperview() + make.bottom.equalTo(safeAreaLayoutGuide.snp.bottom) + } + } + + private func applyLocalization() {} +} diff --git a/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferAssembly.swift b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferAssembly.swift new file mode 100644 index 0000000000..cb7a5de431 --- /dev/null +++ b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferAssembly.swift @@ -0,0 +1,49 @@ +import UIKit +import SSFModels +import SoraFoundation + +final class ConfirmTransferAssembly { + @MainActor + static func configureModule( + wallet: MetaAccountModel, + chainAsset: ChainAsset, + useCase: TransferFlowUseCase, + sendFlow: SendFlowInitialData, + scamInfo: ScamInfo? + ) -> ConfirmTransferModuleCreationResult? { + let localizationManager = LocalizationManager.shared + + let deps = TransferDepsContainer(wallet: wallet) + let interactor = TransferInteractor( + deps: deps, + chainAssetFetching: ServiceAssembly.shared.chainAssetFetching(qualityOfService: .default), + scamRepository: ServiceAssembly.shared.scamInfoAsyncRepository() + ) + let router = ConfirmTransferRouter() + + let assetInfo = chainAsset.asset.displayInfo(with: chainAsset.chain.icon) + let viewModelFactory = WalletSendConfirmViewModelFactory( + wallet: wallet, + amountFormatterFactory: AssetBalanceFormatterFactory(), + assetInfo: assetInfo + ) + + let presenter = ConfirmTransferPresenter( + interactor: interactor, + router: router, + viewModelFactory: viewModelFactory, + useCase: useCase, + sendFlow: sendFlow, + scamInfo: scamInfo, + logger: ServiceAssembly.shared.logger, + localizationManager: localizationManager + ) + + let view = ConfirmTransferViewController( + output: presenter, + localizationManager: localizationManager + ) + + return (view, presenter) + } +} diff --git a/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferPresenter.swift b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferPresenter.swift new file mode 100644 index 0000000000..3c17e61c8d --- /dev/null +++ b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferPresenter.swift @@ -0,0 +1,181 @@ +import Foundation +import Web3 +import SoraFoundation +import SSFModels + +@MainActor +protocol ConfirmTransferViewInput: ControllerBackedProtocol { + func didReceive(viewModel: WalletSendConfirmViewModel) + func didReceiveContinueButton(isReady: Bool) + func didStopLoading() +} + +protocol ConfirmTransferInteractorInput: AnyObject { + func setup(with output: TransferInteractorOutput) +} + +final class ConfirmTransferPresenter { + // MARK: Private properties + + private weak var view: ConfirmTransferViewInput? + private let router: ConfirmTransferRouterInput + private let interactor: TransferInteractorInput + private let viewModelFactory: WalletSendConfirmViewModelFactoryProtocol + private let logger: LoggerProtocol + private let useCase: TransferFlowUseCase + private let scamInfo: ScamInfo? + + // MARK: - Constructors + + init( + interactor: TransferInteractorInput, + router: ConfirmTransferRouterInput, + viewModelFactory: WalletSendConfirmViewModelFactoryProtocol, + useCase: TransferFlowUseCase, + sendFlow: SendFlowInitialData, + scamInfo: ScamInfo?, + logger: LoggerProtocol, + localizationManager: LocalizationManagerProtocol + ) { + self.interactor = interactor + self.router = router + self.viewModelFactory = viewModelFactory + self.useCase = useCase + self.scamInfo = scamInfo + self.logger = logger + self.localizationManager = localizationManager + setupBindings() + } + + // MARK: - Private methods + + private func provideViewModel() async { + do { + let viewModel = try viewModelFactory.buildViewModel( + useCase: useCase, + scamInfo: scamInfo, + locale: selectedLocale + ) + + await view?.didReceive(viewModel: viewModel) + } catch { + logger.customError(error) + } + } + + private func provideIsReady() async { + let isReady = useCase.isReadyToContinue() + await view?.didReceiveContinueButton(isReady: isReady) + } + + private func setupBindings() { + useCase.provideFeeViewModel = { [weak self] in + Task { [weak self] in + await self?.provideViewModel() + await self?.provideIsReady() + } + } + } + + private func submit() { + Task { + do { + guard + let transfer = useCase.transfer, + let chainAsset = useCase.selectedChainAsset + else { + throw ConvenienceError(error: "Missing required params") + } + let hash = try await interactor.submit(transfer: transfer, chainAsset: chainAsset) + + await view?.didStopLoading() + Task { @MainActor in + router.complete(on: view, title: hash, chainAsset: chainAsset) + } + } catch { + guard let view else { return } + await view.didStopLoading() + Task { @MainActor in + if let rpcError = error as? RPCResponse.Error, rpcError.code == -32000 { + router.presentAmountTooHigh(from: view, locale: selectedLocale) + return + } + + if !router.present(error: error, from: view, locale: selectedLocale) { + router.presentExtrinsicFailed(from: view, locale: selectedLocale) + } + logger.customError(error) + } + } + } + } +} + +// MARK: - ConfirmTransferViewOutput + +extension ConfirmTransferPresenter: ConfirmTransferViewOutput { + func didTapConfirmButton() { + do { + let validators = try useCase.getValidators(validationCase: .all, locale: selectedLocale) + DataValidationRunner(validators: validators).runValidation { [weak self] in + guard let self else { return } + self.submit() + } + } catch { + logger.customError(error) + } + } + + @MainActor + func didTapBackButton() { + router.close(view: view) + } + + @MainActor + func didTapScamWarningButton() { + guard let chainAsset = useCase.selectedChainAsset else { + return + } + let title = R.string.localizable.scamWarningAlertTitle( + chainAsset.asset.symbol.uppercased(), + preferredLanguages: selectedLocale.rLanguages + ) + let message = R.string.localizable.scamWarningAlertSubtitle( + chainAsset.asset.symbolUppercased, + preferredLanguages: selectedLocale.rLanguages + ) + + let sheetViewModel = SheetAlertPresentableViewModel( + title: title, + message: message, + actions: [], + closeAction: R.string.localizable.commonClose(preferredLanguages: selectedLocale.rLanguages), + icon: R.image.iconWarningBig() + ) + router.present( + viewModel: sheetViewModel, + from: view + ) + } + + func didLoad(view: ConfirmTransferViewInput) { + self.view = view + Task { + await interactor.setup(with: self) + await provideIsReady() + await provideViewModel() + } + } +} + +// MARK: - ConfirmTransferInteractorOutput + +extension ConfirmTransferPresenter: TransferInteractorOutput {} + +// MARK: - Localizable + +extension ConfirmTransferPresenter: Localizable { + func applyLocalization() {} +} + +extension ConfirmTransferPresenter: ConfirmTransferModuleInput {} diff --git a/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferProtocols.swift b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferProtocols.swift new file mode 100644 index 0000000000..5411bc1760 --- /dev/null +++ b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferProtocols.swift @@ -0,0 +1,25 @@ +import SSFModels + +typealias ConfirmTransferModuleCreationResult = ( + view: ConfirmTransferViewInput, + input: ConfirmTransferModuleInput +) + +@MainActor +protocol ConfirmTransferRouterInput: + ErrorPresentable, + BaseErrorPresentable, + ModalAlertPresenting, + SheetAlertPresentable { + func close(view: ControllerBackedProtocol?) + func finish(view: ControllerBackedProtocol?) + func complete( + on view: ControllerBackedProtocol?, + title: String?, + chainAsset: ChainAsset + ) +} + +protocol ConfirmTransferModuleInput: AnyObject {} + +protocol ConfirmTransferModuleOutput: AnyObject {} diff --git a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmWireframe.swift b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferRouter.swift similarity index 91% rename from fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmWireframe.swift rename to fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferRouter.swift index 01ab05b577..b04c3eb1e0 100644 --- a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmWireframe.swift +++ b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferRouter.swift @@ -1,9 +1,8 @@ import Foundation -import UIKit import SoraUI import SSFModels -final class WalletSendConfirmWireframe: WalletSendConfirmWireframeProtocol { +final class ConfirmTransferRouter: ConfirmTransferRouterInput { func finish(view: ControllerBackedProtocol?) { view?.controller.navigationController?.dismiss( animated: true, @@ -17,7 +16,7 @@ final class WalletSendConfirmWireframe: WalletSendConfirmWireframeProtocol { func complete( on view: ControllerBackedProtocol?, - title: String, + title: String?, chainAsset: ChainAsset ) { let presenter = view?.controller.navigationController?.presentingViewController diff --git a/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferViewController.swift b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferViewController.swift new file mode 100644 index 0000000000..e334a97942 --- /dev/null +++ b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferViewController.swift @@ -0,0 +1,89 @@ +import UIKit +import SoraFoundation + +protocol ConfirmTransferViewOutput: AnyObject { + func didLoad(view: ConfirmTransferViewInput) + func didTapConfirmButton() + func didTapBackButton() + func didTapScamWarningButton() +} + +final class ConfirmTransferViewController: UIViewController, ViewHolder, HiddableBarWhenPushed, LoadableViewProtocol { + typealias RootViewType = WalletSendConfirmViewLayout + var loadableContentView: UIView { + rootView.contentView + } + + // MARK: Private properties + + private let output: ConfirmTransferViewOutput + + // MARK: - Constructor + + init( + output: ConfirmTransferViewOutput, + localizationManager: LocalizationManagerProtocol? + ) { + self.output = output + super.init(nibName: nil, bundle: nil) + self.localizationManager = localizationManager + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Life cycle + + override func loadView() { + view = WalletSendConfirmViewLayout() + } + + override func viewDidLoad() { + super.viewDidLoad() + output.didLoad(view: self) + setupActions() + } + + // MARK: - Private methods + + private func setupActions() { + rootView.navigationBar.backButton.addTarget(self, action: #selector(backButtonClicked), for: .touchUpInside) + rootView.receiverWarningButton.addTarget(self, action: #selector(handleScamWarningTapped), for: .touchUpInside) + rootView.confirmButton.addTarget(self, action: #selector(continueButtonClicked), for: .touchUpInside) + } + + @objc private func continueButtonClicked() { + didStartLoading() + output.didTapConfirmButton() + } + + @objc private func backButtonClicked() { + output.didTapBackButton() + } + + @objc private func handleScamWarningTapped() { + output.didTapScamWarningButton() + } +} + +// MARK: - ConfirmTransferViewInput + +extension ConfirmTransferViewController: ConfirmTransferViewInput { + func didReceiveContinueButton(isReady: Bool) { + rootView.confirmButton.set(enabled: isReady) + } + + func didReceive(viewModel: WalletSendConfirmViewModel) { + rootView.bind(confirmViewModel: viewModel) + } +} + +// MARK: - Localizable + +extension ConfirmTransferViewController: Localizable { + func applyLocalization() { + rootView.locale = selectedLocale + } +} diff --git a/fearless/Modules/NewWallet/WalletSendConfirm/ViewModels/WalletSendConfirmViewModel.swift b/fearless/Modules/Transfer/ConfirmTransfer/Models/WalletSendConfirmViewModel.swift similarity index 100% rename from fearless/Modules/NewWallet/WalletSendConfirm/ViewModels/WalletSendConfirmViewModel.swift rename to fearless/Modules/Transfer/ConfirmTransfer/Models/WalletSendConfirmViewModel.swift diff --git a/fearless/Modules/Transfer/ConfirmTransfer/Models/WalletSendConfirmViewModelFactory.swift b/fearless/Modules/Transfer/ConfirmTransfer/Models/WalletSendConfirmViewModelFactory.swift new file mode 100644 index 0000000000..36f60ddf47 --- /dev/null +++ b/fearless/Modules/Transfer/ConfirmTransfer/Models/WalletSendConfirmViewModelFactory.swift @@ -0,0 +1,178 @@ +import Foundation +import SSFModels +import SSFCrypto + +struct WalletSendConfirmViewModelFactoryParameters { + let amount: Decimal + let senderAccountViewModel: AccountViewModel? + let receiverAccountViewModel: AccountViewModel? + let assetBalanceViewModel: AssetBalanceViewModelProtocol? + let tipRequired: Bool + let tipViewModel: BalanceViewModelProtocol? + let feeViewModel: BalanceViewModelProtocol? + let wallet: MetaAccountModel + let locale: Locale + let scamInfo: ScamInfo? + let assetModel: AssetModel +} + +protocol WalletSendConfirmViewModelFactoryProtocol { + func buildViewModel( + useCase: TransferFlowUseCase, + scamInfo: ScamInfo?, + locale: Locale + ) throws -> WalletSendConfirmViewModel +} + +final class WalletSendConfirmViewModelFactory: WalletSendConfirmViewModelFactoryProtocol { + private let amountFormatterFactory: AssetBalanceFormatterFactoryProtocol + private let assetInfo: AssetBalanceDisplayInfo + private let wallet: MetaAccountModel + + init( + wallet: MetaAccountModel, + amountFormatterFactory: AssetBalanceFormatterFactoryProtocol, + assetInfo: AssetBalanceDisplayInfo + ) { + self.wallet = wallet + self.amountFormatterFactory = amountFormatterFactory + self.assetInfo = assetInfo + } + + func buildViewModel( + useCase: TransferFlowUseCase, + scamInfo: ScamInfo?, + locale: Locale + ) throws -> WalletSendConfirmViewModel { + let formatter = amountFormatterFactory.createTokenFormatter(for: assetInfo, usageCase: .detailsCrypto) + guard + let amount = useCase.amount(), + let selectedChainAsset = useCase.selectedChainAsset, + let utilityChainAsset = useCase.utilityChainAsset, + let balanceViewModelFactory = buildBalanceViewModelFactory(wallet: wallet, for: selectedChainAsset), + let utilityBalanceViewModelFactory = buildBalanceViewModelFactory(wallet: wallet, for: utilityChainAsset), + let accountId = wallet.fetch(for: selectedChainAsset.chain.accountRequest())?.accountId, + let senderAddress = try? AddressFactory.address(for: accountId, chain: selectedChainAsset.chain), + let receiverAddressString = useCase.recipientAddress + else { + throw ConvenienceError(error: "Missing requared params") + } + + let inputAmount = formatter.value(for: locale).stringFromDecimal(amount) ?? "" + let amountString = R.string.localizable.sendConfirmAmountTitle( + inputAmount, + preferredLanguages: locale.rLanguages + ) + let amountAttributedString = NSMutableAttributedString(string: amountString) + amountAttributedString.addAttribute( + NSAttributedString.Key.foregroundColor, + value: R.color.colorWhite()!.cgColor, + range: (amountString as NSString).range(of: inputAmount) + ) + + let shadowColor = HexColorConverter.hexStringToUIColor( + hex: selectedChainAsset.asset.color + )?.cgColor + let iconViewModel = selectedChainAsset.asset.icon.map { RemoteImageViewModel(url: $0) } + let symbolViewModel = SymbolViewModel( + iconViewModel: iconViewModel, + shadowColor: shadowColor + ) + + let priceString = buildPriceString( + useCase: useCase, + locale: locale, + balanceViewModelFactory: balanceViewModelFactory + ) + + let feeViewModel = buildBalanceViewModel( + amount: useCase.fee, + chainAsset: utilityChainAsset, + balanceViewModelFactory: utilityBalanceViewModelFactory, + locale: locale + ) + + let tipViewModel = buildBalanceViewModel( + amount: useCase.tip, + chainAsset: utilityChainAsset, + balanceViewModelFactory: utilityBalanceViewModelFactory, + locale: locale + ) + + return WalletSendConfirmViewModel( + amountAttributedString: amountAttributedString, + amountString: inputAmount, + senderNameString: wallet.name, + senderAddressString: senderAddress, + receiverAddressString: receiverAddressString, + priceString: priceString ?? "", + feeAmountString: feeViewModel?.amount ?? "", + feePriceString: feeViewModel?.price ?? "", + tipRequired: useCase.tip != nil, + tipAmountString: tipViewModel?.amount ?? "", + tipPriceString: tipViewModel?.price ?? "", + showWarning: scamInfo != nil, + symbolViewModel: symbolViewModel + ) + } + + // MARK: - Private methods + + private func buildPriceString( + useCase: TransferFlowUseCase, + locale: Locale, + balanceViewModelFactory: BalanceViewModelFactoryProtocol + ) -> String? { + guard + let chainAsset = useCase.selectedChainAsset, + let amount = useCase.amount(), + let balance = useCase.availableBalance + else { + return nil + } + + let priceData = chainAsset.asset.getPrice(for: wallet.selectedCurrency) + + let viewModel = balanceViewModelFactory.createAssetBalanceViewModel( + amount, + balance: balance, + priceData: priceData + ).value(for: locale) + + return viewModel.price + } + + private func buildBalanceViewModel( + amount: Decimal?, + chainAsset: ChainAsset, + balanceViewModelFactory: BalanceViewModelFactoryProtocol, + locale: Locale + ) -> BalanceViewModelProtocol? { + guard let amount else { + return nil + } + let priceData = chainAsset.asset.getPrice(for: wallet.selectedCurrency) + let viewModel = balanceViewModelFactory.balanceFromPrice( + amount, + priceData: priceData, + usageCase: .detailsCrypto + ).value(for: locale) + return viewModel + } + + private func buildBalanceViewModelFactory( + wallet: MetaAccountModel, + for chainAsset: ChainAsset? + ) -> BalanceViewModelFactoryProtocol? { + guard let chainAsset = chainAsset else { + return nil + } + let assetInfo = chainAsset.asset + .displayInfo(with: chainAsset.chain.icon) + let balanceViewModelFactory = BalanceViewModelFactory( + targetAssetInfo: assetInfo, + selectedMetaAccount: wallet + ) + return balanceViewModelFactory + } +} diff --git a/fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmViewLayout.swift b/fearless/Modules/Transfer/ConfirmTransfer/WalletSendConfirmViewLayout.swift similarity index 100% rename from fearless/Modules/NewWallet/WalletSendConfirm/WalletSendConfirmViewLayout.swift rename to fearless/Modules/Transfer/ConfirmTransfer/WalletSendConfirmViewLayout.swift diff --git a/fearless/Modules/Transfer/Transfer/BokoloTransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/BokoloTransferFlowUseCase.swift new file mode 100644 index 0000000000..04d1401f6a --- /dev/null +++ b/fearless/Modules/Transfer/Transfer/BokoloTransferFlowUseCase.swift @@ -0,0 +1,316 @@ +import Foundation +import SSFModels +import SSFQRService +import BigInt +import SSFTransferService +import SSFUtils +import SSFCrypto + +final class BokoloTransferFlowUseCase: TransferFlowUseCase { + private let wallet: MetaAccountModel + private let dataValidatingFactory: SendDataValidatingFactory + private let logger: LoggerProtocol + + let interactor: TransferInteractorInput + let implType: TransferFlowDirectionImpl = .bokoloCash + var transfer: TransferType? + + var selectedChainAsset: ChainAsset? + var utilityChainAsset: ChainAsset? + var comment: String? + var inputResult: AmountInputResult? { + didSet { + refreshFee() + } + } + + var recipientAddress: String? { + didSet { + refreshFee() + } + } + + var availableInputBalance: Decimal? + var availableBalance: Decimal? + var utilityBalance: Decimal? + + var fee: Decimal? + var tip: Decimal? + var ed: Decimal? + + var sendAllEnabled: Bool? + var isUserInteractiveAmount: Bool = true + var isValidRecipient: Bool? = true + var canEditRecipient: Bool = false + var canSelectAsset: Bool = false + var isSwitchEnableSendAllVisibility: Bool = false + + var provideRecipientViewModel: (() -> Void)? + var provideAssetViewModel: (() -> Void)? + var provideInputViewModel: (() -> Void)? + var provideNetworkViewModel: (() -> Void)? + var provideTipViewModel: (() -> Void)? + var provideFeeViewModel: (() -> Void)? + + private var bokoloCashId: Data? + private var bokoloSwapValues: SwapValues? + + init( + wallet: MetaAccountModel, + dataValidatingFactory: SendDataValidatingFactory, + interactor: TransferInteractorInput, + logger: LoggerProtocol + ) { + self.interactor = interactor + self.dataValidatingFactory = dataValidatingFactory + self.wallet = wallet + self.logger = logger + } + + func handle(initialData: SendFlowInitialData) async throws { + guard case let .bokoloCash(qrInfo) = initialData else { + throw TransferFlowUseCaseError.wrongType + } + + let possibleChains = await interactor + .getPossibleChains( + for: BokoloConstants.bokoloCasheBridgeAddress + ) + + #if F_DEV + let chainAsset = possibleChains + .first(where: { chain in + switch chain.knownChainEquivalent { + case .soraTest: return true + default: return false + } + })? + .chainAssets + .first(where: { $0.asset.currencyId == BokoloConstants.bokoloCashAssetCurrencyId }) + + #else + let chainAsset = possibleChains + .first(where: { chain in + switch chain.knownChainEquivalent { + case .soraMain: return true + default: return false + } + })? + .chainAssets + .first(where: { $0.asset.currencyId == BokoloConstants.bokoloCashAssetCurrencyId }) + #endif + + guard + let qrChainAsset = chainAsset, + let bokoloCashId = qrInfo.address.data(using: .utf8) + else { + throw TransferFlowUseCaseError.unsupportedAsset + } + + self.bokoloCashId = bokoloCashId + recipientAddress = qrInfo.address + provideNetworkViewModel?() + + selectedChainAsset = qrChainAsset + utilityChainAsset = qrChainAsset.chain.utilityChainAssets().first + provideAssetViewModel?() + provideRecipientViewModel?() + + if var qrAmount = Decimal(string: qrInfo.transactionAmount ?? ""), qrAmount != .zero { + var drounded = Decimal() + NSDecimalRound(&drounded, &qrAmount, 2, .plain) + inputResult = .absolute(qrAmount) + isUserInteractiveAmount = false + } + + provideInputViewModel?() + + try await fetchRequiredInfo(for: qrChainAsset) + transfer = try buildTransfer() + refreshFee() + } + + func getValidators( + validationCase: TransferValidationCase, + locale: Locale + ) throws -> [any DataValidating] { + switch validationCase { + case .validateED: + return [] + case .all: + guard + let utilityBalance, + let availableBalance + else { + throw TransferFlowUseCaseError.getValidatorsError + } + + var sendAmountDecimal = inputResult?.absoluteValue(from: availableBalance) + var balanceType: BalanceType + var feeAndTip: Decimal + var feeForValidation: Decimal? + if let xorFee = fee, utilityBalance > xorFee { + balanceType = .orml(balance: availableBalance, utilityBalance: utilityBalance) + feeAndTip = xorFee + feeForValidation = fee + } else { + balanceType = .utility(balance: availableBalance) + feeAndTip = fee ?? .zero + sendAmountDecimal = (sendAmountDecimal ?? .zero) - (fee ?? .zero) + feeForValidation = fee + } + + let validators = [ + dataValidatingFactory.has(fee: feeForValidation, locale: locale, onError: { [weak self] in + self?.refreshFee(for: self?.transfer) + }), + dataValidatingFactory.canPayFeeAndAmount( + balanceType: balanceType, + feeAndTip: feeAndTip, + sendAmount: sendAmountDecimal, + locale: locale + ) + ] + + return validators + } + } + + // MARK: - Private methods + + private func refreshFee() { + guard + let transfer, + let selectedChainAsset + else { + return + } + Task { [weak self] in + guard let self else { return } + let stream = await self.interactor.estimateFee( + transfer: transfer, + chainAsset: selectedChainAsset + ) + for try await fee in stream { + let precision = Int16(selectedChainAsset.asset.precision) + self.fee = Decimal.fromSubstrateAmount(fee, precision: precision) + try await self.checkXorFeePaymentPossibles() + } + } + } + + private func checkXorFeePaymentPossibles() async throws { + guard + let xorBalance = utilityBalance, + let xorFee = fee + else { + provideFeeViewModel?() + return + } + + if xorBalance > xorFee { + provideFeeViewModel?() + } else { + guard + let bokoloChainAsset = selectedChainAsset, + let xorChainAsset = utilityChainAsset, + let feeValue = xorFee.toSubstrateAmount(precision: Int16(xorChainAsset.asset.precision)) + else { + return + } + guard let bokoloSwap = try await interactor.convert( + chainAsset: xorChainAsset, + toChainAsset: bokoloChainAsset, + amount: feeValue + ) else { + return + } + let bokoloAmount = BigUInt(bokoloSwap.amount) ?? .zero + let bokoloFee = Decimal.fromSubstrateAmount( + bokoloAmount, + precision: Int16(bokoloChainAsset.asset.precision) + ) + + bokoloSwapValues = bokoloSwap + fee = bokoloFee + utilityChainAsset = bokoloChainAsset + + provideFeeViewModel?() + } + } + + private func buildTransfer() throws -> TransferType? { + guard + let availableInputBalance, + let selectedChainAsset, + let inputAmount = inputResult?.absoluteValue(from: availableInputBalance), + let amount = inputAmount.toSubstrateAmount(precision: Int16(selectedChainAsset.asset.precision)) + else { + return nil + } + + let address = BokoloConstants.bokoloCasheBridgeAddress + let receiver = try AddressFactory.accountId( + from: address, + chain: selectedChainAsset.chain + ) + + let fee = fee?.toSubstrateAmount(precision: Int16(selectedChainAsset.asset.precision)) ?? .zero + let feeReserve = BigUInt(10_000_000_000_000_000) + + let maxAmountIn = ((self.fee ?? .zero) * 1.5).toSubstrateAmount( + precision: Int16(selectedChainAsset.asset.precision) + ) + let filter: PolkaswapLiquidityFilterMode = .disabled + let filterMode = SSFTransferService.PolkaswapCallFilterModeType( + wrappedName: filter.code, + wrappedValue: nil + ) + + let dexId = String(bokoloSwapValues?.dexId ?? 0) + let soraAssetId = SSFUtils.SoraAssetId( + wrappedValue: BokoloConstants.bokoloCashAssetCurrencyId + ) + let xorless = SSFTransferService.XorlessTransfer( + dexId: dexId, + assetId: soraAssetId, + receiver: receiver, + amount: amount, + desiredXorAmount: fee + feeReserve, + maxAmountIn: maxAmountIn ?? .zero, + selectedSourceTypes: [], + filterMode: filterMode, + additionalData: bokoloCashId ?? Data() + ) + let transfer = TransferType.xorless(xorless) + return transfer + } + + private func fetchRequiredInfo(for chainAsset: ChainAsset) async throws { + guard let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId else { + throw TransferFlowUseCaseError.missingAccount + } + + async let balancesTask = try await interactor.fetchAccountInfos(for: chainAsset) + + let chainAssetBalance = await balance( + for: chainAsset, + accountId: accountId, + accountInfos: try await balancesTask + ) + availableBalance = chainAssetBalance + + if let utilityChainAsset { + let utilityChainAssetBalance = await balance( + for: utilityChainAsset, + accountId: accountId, + accountInfos: try await balancesTask + ) + utilityBalance = utilityChainAssetBalance + } + + await calcAvailableInputBalance() + provideInputViewModel?() + provideAssetViewModel?() + } +} diff --git a/fearless/Modules/Transfer/Transfer/EthereumTransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/EthereumTransferFlowUseCase.swift new file mode 100644 index 0000000000..fd46d6de9f --- /dev/null +++ b/fearless/Modules/Transfer/Transfer/EthereumTransferFlowUseCase.swift @@ -0,0 +1,178 @@ +import Foundation +import SSFModels +import BigInt +import SSFTransferService + +final class EthereumTransferFlowUseCase: TransferFlowUseCase { + private let wallet: MetaAccountModel + private let dataValidatingFactory: SendDataValidatingFactory + private let logger: LoggerProtocol + + let interactor: TransferInteractorInput + let implType: TransferFlowDirectionImpl = .ethereum + var transfer: TransferType? + + var selectedChainAsset: ChainAsset? + var utilityChainAsset: ChainAsset? + var comment: String? + var inputResult: AmountInputResult? { + didSet { + calcFee() + } + } + + var recipientAddress: String? { + didSet { + calcFee() + } + } + + var availableInputBalance: Decimal? + var availableBalance: Decimal? + var utilityBalance: Decimal? + + var fee: Decimal? + var tip: Decimal? + var ed: Decimal? + + var sendAllEnabled: Bool? + var isUserInteractiveAmount: Bool = true + var isValidRecipient: Bool? = false + var canEditRecipient: Bool = true + var canSelectAsset: Bool = true + var isSwitchEnableSendAllVisibility: Bool = false + + var provideRecipientViewModel: (() -> Void)? + var provideAssetViewModel: (() -> Void)? + var provideInputViewModel: (() -> Void)? + var provideNetworkViewModel: (() -> Void)? + var provideTipViewModel: (() -> Void)? + var provideFeeViewModel: (() -> Void)? + + init( + wallet: MetaAccountModel, + dataValidatingFactory: SendDataValidatingFactory, + interactor: TransferInteractorInput, + logger: LoggerProtocol + ) { + self.interactor = interactor + self.dataValidatingFactory = dataValidatingFactory + self.wallet = wallet + self.logger = logger + } + + func handle(initialData: SendFlowInitialData) async throws { + guard case let .chainAsset(chainAsset) = initialData else { + throw TransferFlowUseCaseError.wrongType + } + provideRecipientViewModel?() + + selectedChainAsset = chainAsset + utilityChainAsset = chainAsset.chain.utilityChainAssets().first + + provideNetworkViewModel?() + + try await fetchRequiredInfo(for: chainAsset) + calcFee() + } + + func getValidators( + validationCase: TransferValidationCase, + locale: Locale + ) throws -> [any DataValidating] { + switch validationCase { + case .validateED: + return [] + case .all: + guard + let selectedChainAsset, + let availableInputBalance + else { + throw TransferFlowUseCaseError.getValidatorsError + } + + let balanceType: BalanceType = selectedChainAsset.isUtility + ? .utility(balance: utilityBalance) + : .orml(balance: availableBalance, utilityBalance: utilityBalance) + + let sendAmount = inputResult?.absoluteValue(from: availableInputBalance) + + let validators = [ + dataValidatingFactory.has( + fee: fee, + locale: locale + ) { [weak self] in + guard let transfer = self?.transfer else { + return + } + self?.refreshFee(for: transfer) + }, + dataValidatingFactory.canPayFeeAndAmount( + balanceType: balanceType, + feeAndTip: fee.or(.zero) + tip.or(.zero), + sendAmount: sendAmount, + locale: locale + ) + ] + return validators + } + } + + // MARK: - Private methods + + private func calcFee() { + guard let transfer = buildEthereumTransfer() else { + return + } + refreshFee(for: transfer) + } + + private func buildEthereumTransfer() -> TransferType? { + guard + let availableInputBalance, + let selectedChainAsset, + let recipientAddress, + let inputAmount = inputResult?.absoluteValue(from: availableInputBalance), + let amount = inputAmount.toSubstrateAmount(precision: Int16(selectedChainAsset.asset.precision)) + else { + transfer = nil + return nil + } + + let ethereumTransfer = EthereumTransfer( + amount: amount, + receiver: recipientAddress + ) + let transfer = TransferType.ethereum(ethereumTransfer) + self.transfer = transfer + return transfer + } + + private func fetchRequiredInfo(for chainAsset: ChainAsset) async throws { + guard let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId else { + throw TransferFlowUseCaseError.missingAccount + } + + async let balancesTask = try await interactor.fetchAccountInfos(for: chainAsset) + + let chainAssetBalance = await balance( + for: chainAsset, + accountId: accountId, + accountInfos: try await balancesTask + ) + availableBalance = chainAssetBalance + + if let utilityChainAsset { + let utilityChainAssetBalance = await balance( + for: utilityChainAsset, + accountId: accountId, + accountInfos: try await balancesTask + ) + utilityBalance = utilityChainAssetBalance + } + + await calcAvailableInputBalance() + provideInputViewModel?() + provideAssetViewModel?() + } +} diff --git a/fearless/Modules/Send/ViewModel/RecipientViewModel.swift b/fearless/Modules/Transfer/Transfer/Models/RecipientViewModel.swift similarity index 84% rename from fearless/Modules/Send/ViewModel/RecipientViewModel.swift rename to fearless/Modules/Transfer/Transfer/Models/RecipientViewModel.swift index 47e40ca7b8..f578f9c170 100644 --- a/fearless/Modules/Send/ViewModel/RecipientViewModel.swift +++ b/fearless/Modules/Transfer/Transfer/Models/RecipientViewModel.swift @@ -3,6 +3,6 @@ import SSFUtils struct RecipientViewModel { let address: String let icon: DrawableIcon? - let isValid: Bool + let isValid: Bool? let canEditing: Bool } diff --git a/fearless/Modules/Send/ViewModel/SelectNetworkViewModel.swift b/fearless/Modules/Transfer/Transfer/Models/SelectNetworkViewModel.swift similarity index 100% rename from fearless/Modules/Send/ViewModel/SelectNetworkViewModel.swift rename to fearless/Modules/Transfer/Transfer/Models/SelectNetworkViewModel.swift diff --git a/fearless/Modules/Send/SendFlow.swift b/fearless/Modules/Transfer/Transfer/Models/SendFlow.swift similarity index 69% rename from fearless/Modules/Send/SendFlow.swift rename to fearless/Modules/Transfer/Transfer/Models/SendFlow.swift index 2791933e10..305c4e4b84 100644 --- a/fearless/Modules/Send/SendFlow.swift +++ b/fearless/Modules/Transfer/Transfer/Models/SendFlow.swift @@ -1,11 +1,6 @@ import SSFModels import SSFQRService -enum SendFlowType { - case token - case nft -} - enum SendFlowInitialData { case chainAsset(ChainAsset) case address(String) @@ -26,6 +21,21 @@ enum SendFlowInitialData { } } + var address: String? { + switch self { + case .chainAsset: + return nil + case let .address(address): + return address + case let .soraMainnet(qrInfo: qrInfo): + return qrInfo.address + case let .bokoloCash(qrInfo: qrInfo): + return qrInfo.address + case let .desiredCryptocurrency(qrInfo: qrInfo): + return qrInfo.address + } + } + var selectableAsset: Bool { switch self { case .chainAsset, .address, .desiredCryptocurrency: diff --git a/fearless/Modules/Transfer/Transfer/Models/SendViewModelFactory.swift b/fearless/Modules/Transfer/Transfer/Models/SendViewModelFactory.swift new file mode 100644 index 0000000000..2ad920977e --- /dev/null +++ b/fearless/Modules/Transfer/Transfer/Models/SendViewModelFactory.swift @@ -0,0 +1,126 @@ +import SSFUtils +import SSFModels +import Foundation + +protocol SendViewModelFactoryProtocol { + func buildRecipientViewModel( + address: String, + isValid: Bool?, + canEditing: Bool + ) -> RecipientViewModel + func buildNetworkViewModel( + chain: ChainModel + ) -> SelectNetworkViewModel + func createAssetBalanceViewModel( + inputAmount: Decimal?, + availableBalance: Decimal?, + chainAsset: ChainAsset, + canSelectAsset: Bool, + locale: Locale + ) -> AssetBalanceViewModelProtocol + func createBalanceInputViewModel( + inputAmount: Decimal?, + chainAsset: ChainAsset, + locale: Locale + ) -> IAmountInputViewModel + func balanceFromPrice( + chainAsset: ChainAsset, + balance: Decimal, + locale: Locale + ) -> BalanceViewModelProtocol +} + +final class SendViewModelFactory: SendViewModelFactoryProtocol { + private let wallet: MetaAccountModel + private let iconGenerator: IconGenerating + + init( + wallet: MetaAccountModel, + iconGenerator: IconGenerating + ) { + self.wallet = wallet + self.iconGenerator = iconGenerator + } + + func buildRecipientViewModel( + address: String, + isValid: Bool?, + canEditing: Bool + ) -> RecipientViewModel { + RecipientViewModel( + address: address, + icon: try? iconGenerator.generateFromAddress(address), + isValid: isValid, + canEditing: canEditing + ) + } + + func buildNetworkViewModel(chain: ChainModel) -> SelectNetworkViewModel { + let iconViewModel = chain.icon.map { RemoteImageViewModel(url: $0) } + return SelectNetworkViewModel( + chainName: chain.name, + iconViewModel: iconViewModel, + canEdit: false + ) + } + + func createAssetBalanceViewModel( + inputAmount: Decimal?, + availableBalance: Decimal?, + chainAsset: ChainAsset, + canSelectAsset: Bool, + locale: Locale + ) -> AssetBalanceViewModelProtocol { + let balanceViewModelFactory = buildBalanceViewModelFactory(for: chainAsset) + let priceData = chainAsset.asset.getPrice(for: wallet.selectedCurrency) + let viewModel = balanceViewModelFactory.createAssetBalanceViewModel( + inputAmount, + balance: availableBalance, + priceData: priceData, + selectable: canSelectAsset + ).value(for: locale) + return viewModel + } + + func createBalanceInputViewModel( + inputAmount: Decimal?, + chainAsset: ChainAsset, + locale: Locale + ) -> IAmountInputViewModel { + let balanceViewModelFactory = buildBalanceViewModelFactory(for: chainAsset) + let viewModel = balanceViewModelFactory + .createBalanceInputViewModel(inputAmount) + .value(for: locale) + return viewModel + } + + func balanceFromPrice( + chainAsset: ChainAsset, + balance: Decimal, + locale: Locale + ) -> BalanceViewModelProtocol { + let balanceViewModelFactory = buildBalanceViewModelFactory(for: chainAsset) + let priceData = chainAsset.asset.getPrice(for: wallet.selectedCurrency) + let viewModel = balanceViewModelFactory.balanceFromPrice( + balance, + priceData: priceData, + usageCase: .detailsCrypto + ).value(for: locale) + return viewModel + } + + // MARK: - Private methods + + private func buildBalanceViewModelFactory( + for chainAsset: ChainAsset + ) -> BalanceViewModelFactoryProtocol { + let assetInfo = chainAsset.asset + .displayInfo(with: chainAsset.chain.icon) + let balanceViewModelFactory = BalanceViewModelFactory( + targetAssetInfo: assetInfo, + selectedMetaAccount: wallet + ) + + return balanceViewModelFactory + } +} diff --git a/fearless/Modules/Send/ViewModel/TipViewModel.swift b/fearless/Modules/Transfer/Transfer/Models/TipViewModel.swift similarity index 100% rename from fearless/Modules/Send/ViewModel/TipViewModel.swift rename to fearless/Modules/Transfer/Transfer/Models/TipViewModel.swift diff --git a/fearless/Modules/Send/SendViewLayout.swift b/fearless/Modules/Transfer/Transfer/SendViewLayout.swift similarity index 88% rename from fearless/Modules/Send/SendViewLayout.swift rename to fearless/Modules/Transfer/Transfer/SendViewLayout.swift index 07e403d6d2..165760279a 100644 --- a/fearless/Modules/Send/SendViewLayout.swift +++ b/fearless/Modules/Transfer/Transfer/SendViewLayout.swift @@ -33,7 +33,7 @@ final class SendViewLayout: UIView { }() let amountView = SelectableAmountInputView(type: .send) - let selectNetworkView = UIFactory.default.createNetworkView(selectable: true) + let selectNetworkView = UIFactory.default.createNetworkView(selectable: false) let scamWarningView: ScamWarningExpandableView = { let view = ScamWarningExpandableView() view.isHidden = true @@ -43,6 +43,7 @@ final class SendViewLayout: UIView { let feeView: NetworkFeeView = { let view = UIFactory.default.createNetworkFeeView() view.borderView.isHidden = true + view.isHidden = true return view }() @@ -111,6 +112,19 @@ final class SendViewLayout: UIView { return switchView }() + let commentTextField: CommonInputView = { + let inputView = CommonInputView() + inputView.defaultSetup() + inputView.backgroundView.fillColor = R.color.colorSemiBlack()! + inputView.backgroundView.highlightedFillColor = R.color.colorSemiBlack()! + inputView.backgroundView.strokeColor = R.color.colorWhite8()! + inputView.backgroundView.highlightedStrokeColor = R.color.colorPink()! + inputView.backgroundView.strokeWidth = 1 + inputView.backgroundView.shadowOpacity = 0 + inputView.animatedInputField.placeholderColor = R.color.colorLightGray()! + return inputView + }() + var locale = Locale.current { didSet { if locale != oldValue { @@ -149,6 +163,7 @@ final class SendViewLayout: UIView { } func bind(feeViewModel: BalanceViewModelProtocol?) { + feeView.isHidden = false feeView.bind(viewModel: feeViewModel) } @@ -168,13 +183,10 @@ final class SendViewLayout: UIView { scamWarningView.bind(scamInfo: scamInfo, assetName: amountView.symbol ?? "") } - func bind(accountScoreViewModel: AccountScoreViewModel?) { - searchView.bind(accountScoreViewModel: accountScoreViewModel) - } - - func bind(viewModel: RecipientViewModel) { - searchView.textField.text = viewModel.address - searchView.updateState(icon: viewModel.icon, clearButtonIsHidden: !viewModel.canEditing) + func bind(viewModel: RecipientViewModel?) { + searchView.textField.text = viewModel?.address + searchView.updateState(icon: viewModel?.icon, clearButtonIsHidden: !(viewModel?.canEditing == true)) + searchView.isValid = viewModel?.isValid } func switchEnableSendAllVisibility(isVisible: Bool) { @@ -219,6 +231,12 @@ private extension SendViewLayout { make.height.equalTo(LayoutConstants.stackSubviewHeight) } + contentView.stackView.addArrangedSubview(commentTextField) + commentTextField.snp.makeConstraints { make in + make.width.equalTo(self).offset(viewOffset) + make.height.equalTo(LayoutConstants.stackSubviewHeight) + } + contentView.stackView.addArrangedSubview(scamWarningView) scamWarningView.snp.makeConstraints { make in make.width.equalTo(self).offset(viewOffset) @@ -313,5 +331,7 @@ private extension SendViewLayout { selectNetworkView.title = R.string.localizable.commonNetwork(preferredLanguages: locale.rLanguages) sendAllLabel.text = R.string.localizable.sendAllTitle(preferredLanguages: locale.rLanguages) + + commentTextField.title = R.string.localizable.commonMessage(preferredLanguages: locale.rLanguages) } } diff --git a/fearless/Modules/Transfer/Transfer/SoraQrTransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/SoraQrTransferFlowUseCase.swift new file mode 100644 index 0000000000..d603b451c5 --- /dev/null +++ b/fearless/Modules/Transfer/Transfer/SoraQrTransferFlowUseCase.swift @@ -0,0 +1,174 @@ +import Foundation +import SSFModels +import SSFQRService +import BigInt +import SSFTransferService + +final class SoraQrTransferFlowUseCase: TransferFlowUseCase { + private let wallet: MetaAccountModel + private let dataValidatingFactory: SendDataValidatingFactory + private let logger: LoggerProtocol + + let interactor: TransferInteractorInput + let implType: TransferFlowDirectionImpl = .soraMainnetQr + var transfer: TransferType? + + var selectedChainAsset: ChainAsset? + var utilityChainAsset: ChainAsset? + var comment: String? + var inputResult: AmountInputResult? { + didSet { + calcFee() + } + } + + var recipientAddress: String? { + didSet { + calcFee() + } + } + + var availableInputBalance: Decimal? + var availableBalance: Decimal? + var utilityBalance: Decimal? + + var fee: Decimal? + var tip: Decimal? + var ed: Decimal? + + var sendAllEnabled: Bool? + var isUserInteractiveAmount: Bool = true + var canSelectAsset: Bool = false + var isValidRecipient: Bool? = true + var canEditRecipient: Bool = false + var isSwitchEnableSendAllVisibility: Bool = false + + var provideRecipientViewModel: (() -> Void)? + var provideAssetViewModel: (() -> Void)? + var provideInputViewModel: (() -> Void)? + var provideNetworkViewModel: (() -> Void)? + var provideTipViewModel: (() -> Void)? + var provideFeeViewModel: (() -> Void)? + + init( + wallet: MetaAccountModel, + dataValidatingFactory: SendDataValidatingFactory, + interactor: TransferInteractorInput, + logger: LoggerProtocol + ) { + self.interactor = interactor + self.dataValidatingFactory = dataValidatingFactory + self.wallet = wallet + self.logger = logger + } + + func handle(initialData: SendFlowInitialData) async throws { + guard case let .soraMainnet(qrInfo) = initialData else { + throw TransferFlowUseCaseError.wrongType + } + let possibleChains = await interactor.getPossibleChains(for: qrInfo.address) + let chainAsset = possibleChains + .first(where: { $0.isSora })?.chainAssets + .first(where: { $0.asset.currencyId == qrInfo.assetId }) + + guard let qrChainAsset = chainAsset else { + throw TransferFlowUseCaseError.unsupportedAsset + } + + selectedChainAsset = qrChainAsset + utilityChainAsset = qrChainAsset.chain.utilityChainAssets().first + + if let qrAmount = Decimal(string: qrInfo.amount ?? "") { + inputResult = .absolute(qrAmount) + isUserInteractiveAmount = false + provideInputViewModel?() + } + + recipientAddress = qrInfo.address + provideRecipientViewModel?() + provideNetworkViewModel?() + provideAssetViewModel?() + + try await fetchRequaredInfo(for: qrChainAsset) + calcFee() + } + + func getValidators( + validationCase: TransferValidationCase, + locale: Locale + ) throws -> [DataValidating] { + switch validationCase { + case .validateED: + return [] + case .all: + guard + let selectedChainAsset, + let availableInputBalance + else { + throw TransferFlowUseCaseError.getValidatorsError + } + + let balanceType: BalanceType = selectedChainAsset.isUtility + ? .utility(balance: utilityBalance) + : .orml(balance: availableBalance, utilityBalance: utilityBalance) + + let sendAmount = inputResult?.absoluteValue(from: availableInputBalance) + + let validators = [ + dataValidatingFactory.has( + fee: fee, + locale: locale + ) { [weak self] in + guard let transfer = self?.transfer else { + return + } + self?.refreshFee(for: transfer) + }, + dataValidatingFactory.canPayFeeAndAmount( + balanceType: balanceType, + feeAndTip: fee.or(.zero) + tip.or(.zero), + sendAmount: sendAmount, + locale: locale + ) + ] + return validators + } + } + + // MARK: - Private methods + + private func calcFee() { + guard let transfer = buildSubstrateTransfer() else { + return + } + refreshFee(for: transfer) + } + + private func fetchRequaredInfo(for chainAsset: ChainAsset) async throws { + guard let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId else { + throw TransferFlowUseCaseError.missingAccount + } + + async let balancesTask = try await interactor.fetchAccountInfos(for: chainAsset) + + let chainAssetBalance = await balance( + for: chainAsset, + accountId: accountId, + accountInfos: try await balancesTask + ) + availableBalance = chainAssetBalance + + if let utilityChainAsset { + let utilityChainAssetBalance = await balance( + for: utilityChainAsset, + accountId: accountId, + accountInfos: try await balancesTask + ) + utilityBalance = utilityChainAssetBalance + } + + await calcAvailableInputBalance() + provideInputViewModel?() + provideAssetViewModel?() + } +} diff --git a/fearless/Modules/Transfer/Transfer/SubstrateTransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/SubstrateTransferFlowUseCase.swift new file mode 100644 index 0000000000..848e4df9c0 --- /dev/null +++ b/fearless/Modules/Transfer/Transfer/SubstrateTransferFlowUseCase.swift @@ -0,0 +1,217 @@ +import Foundation +import SSFModels +import SSFQRService +import BigInt +import SSFTransferService + +final class SubstrateTransferFlowUseCase: TransferFlowUseCase { + private let wallet: MetaAccountModel + private let dataValidatingFactory: SendDataValidatingFactory + private let logger: LoggerProtocol + + let interactor: TransferInteractorInput + let implType: TransferFlowDirectionImpl = .substrate + var transfer: TransferType? + + var selectedChainAsset: ChainAsset? + var utilityChainAsset: ChainAsset? + var comment: String? + var inputResult: AmountInputResult? { + didSet { + calcFee() + } + } + + var recipientAddress: String? { + didSet { + calcFee() + } + } + + var availableInputBalance: Decimal? + var availableBalance: Decimal? + var utilityBalance: Decimal? + + var fee: Decimal? + var tip: Decimal? + var ed: Decimal? + + var sendAllEnabled: Bool? = false + var isUserInteractiveAmount: Bool = true + var isValidRecipient: Bool? = false + var canEditRecipient: Bool = true + var canSelectAsset: Bool = true + var isSwitchEnableSendAllVisibility: Bool = false + + var provideRecipientViewModel: (() -> Void)? + var provideAssetViewModel: (() -> Void)? + var provideInputViewModel: (() -> Void)? + var provideNetworkViewModel: (() -> Void)? + var provideTipViewModel: (() -> Void)? + var provideFeeViewModel: (() -> Void)? + + init( + wallet: MetaAccountModel, + dataValidatingFactory: SendDataValidatingFactory, + interactor: TransferInteractorInput, + logger: LoggerProtocol + ) { + self.dataValidatingFactory = dataValidatingFactory + self.interactor = interactor + self.wallet = wallet + self.logger = logger + } + + func handle(initialData: SendFlowInitialData) async throws { + guard case let .chainAsset(chainAsset) = initialData else { + throw TransferFlowUseCaseError.wrongType + } + provideRecipientViewModel?() + + selectedChainAsset = chainAsset + utilityChainAsset = chainAsset.chain.utilityChainAssets().first + + provideNetworkViewModel?() + + try await fetchRequaredInfo(for: chainAsset) + calcFee() + } + + func getValidators( + validationCase: TransferValidationCase, + locale: Locale + ) throws -> [any DataValidating] { + guard + let selectedChainAsset, + let availableInputBalance, + let inputResult, + let utilityBalance + else { + throw TransferFlowUseCaseError.getValidatorsError + } + let sendAmount = inputResult.absoluteValue(from: availableInputBalance) + + let spending: Decimal + if selectedChainAsset.isUtility { + spending = sendAmount + fee.or(.zero) + tip.or(.zero) + } else { + spending = fee.or(.zero) + tip.or(.zero) + } + let exsitentialDepositIsNotViolated = dataValidatingFactory.exsitentialDepositIsNotViolated( + spending: spending, + balance: utilityBalance, + minimumBalance: ed.or(.zero), + chainAsset: selectedChainAsset, + locale: locale, + sendAllEnabled: sendAllEnabled ?? false, + proceedAction: { [weak self] in + self?.sendAllEnabled = true + self?.provideAssetViewModel?() + }, + setMaxAction: { [weak self] in + self?.sendAllEnabled = true + self?.inputResult = .rate(1.0) + self?.provideAssetViewModel?() + self?.provideInputViewModel?() + self?.refreshFee(for: self?.transfer) + }, + cancelAction: { [weak self] in + self?.sendAllEnabled = false + self?.inputResult = .rate(0.0) + self?.provideAssetViewModel?() + self?.provideInputViewModel?() + } + ) + switch validationCase { + case .validateED: + return [exsitentialDepositIsNotViolated] + case .all: + let balanceType: BalanceType = selectedChainAsset.isUtility + ? .utility(balance: utilityBalance) + : .orml(balance: availableBalance, utilityBalance: utilityBalance) + + return [ + exsitentialDepositIsNotViolated, + dataValidatingFactory.has( + fee: fee, + locale: locale, + onError: { [weak self] in + self?.refreshFee(for: self?.transfer) + } + ), + dataValidatingFactory.canPayFeeAndAmount( + balanceType: balanceType, + feeAndTip: (fee ?? 0) + (tip ?? 0), + sendAmount: sendAmount, + locale: locale + ) + ] + } + } + + // MARK: - Private methods + + private func calcFee() { + guard let transfer = buildSubstrateTransfer() else { + return + } + refreshFee(for: transfer) + } + + private func fetchRequaredInfo(for chainAsset: ChainAsset) async throws { + guard let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId else { + throw TransferFlowUseCaseError.missingAccount + } + + async let balancesTask = try await interactor.fetchAccountInfos(for: chainAsset) + async let tipTask = await interactor.fetchTip(for: chainAsset) + async let edTask = await interactor.fetchExistentialDeposit(for: chainAsset) + + let chainAssetBalance = await balance( + for: chainAsset, + accountId: accountId, + accountInfos: try await balancesTask + ) + availableBalance = chainAssetBalance + + if let utilityChainAsset { + let utilityChainAssetBalance = await balance( + for: utilityChainAsset, + accountId: accountId, + accountInfos: try await balancesTask + ) + utilityBalance = utilityChainAssetBalance + + do { + let tip = try await Decimal.fromSubstrateAmount( + tipTask, + precision: Int16(utilityChainAsset.asset.precision) + ) + self.tip = tip + provideTipViewModel?() + } catch { + logger.customError(error) + } + + do { + let ed = try await Decimal.fromSubstrateAmount( + edTask, + precision: Int16(utilityChainAsset.asset.precision) + ) + self.ed = ed + } catch { + logger.customError(error) + } + + isSwitchEnableSendAllVisibility = await [ + try? edTask > .zero, + availableBalance.or(.zero) > .zero, + selectedChainAsset?.isUtility == true + ].compactMap { $0 }.allSatisfy { $0 } + } + + await calcAvailableInputBalance() + provideInputViewModel?() + provideAssetViewModel?() + } +} diff --git a/fearless/Modules/Transfer/Transfer/TonTransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/TonTransferFlowUseCase.swift new file mode 100644 index 0000000000..8e057c00e1 --- /dev/null +++ b/fearless/Modules/Transfer/Transfer/TonTransferFlowUseCase.swift @@ -0,0 +1,236 @@ +import Foundation +import SSFModels +import BigInt +import SSFTransferService +import TonSwift + +final class TonTransferFlowUseCase: TransferFlowUseCase { + private let wallet: MetaAccountModel + private let dataValidatingFactory: SendDataValidatingFactory + private let logger: LoggerProtocol + + let interactor: TransferInteractorInput + let implType: TransferFlowDirectionImpl = .ton + var transfer: TransferType? + + var selectedChainAsset: ChainAsset? + var utilityChainAsset: ChainAsset? + var comment: String? + var inputResult: AmountInputResult? { + didSet { + calcFee() + } + } + + var recipientAddress: String? { + didSet { + calcFee() + } + } + + var availableInputBalance: Decimal? + var availableBalance: Decimal? + var utilityBalance: Decimal? + + var fee: Decimal? + var tip: Decimal? + var ed: Decimal? + + var sendAllEnabled: Bool? + var isUserInteractiveAmount: Bool = true + var isValidRecipient: Bool? = false + var canEditRecipient: Bool = true + var canSelectAsset: Bool = true + var isSwitchEnableSendAllVisibility: Bool = false + + var provideRecipientViewModel: (() -> Void)? + var provideAssetViewModel: (() -> Void)? + var provideInputViewModel: (() -> Void)? + var provideNetworkViewModel: (() -> Void)? + var provideTipViewModel: (() -> Void)? + var provideFeeViewModel: (() -> Void)? + + init( + wallet: MetaAccountModel, + dataValidatingFactory: SendDataValidatingFactory, + interactor: TransferInteractorInput, + logger: LoggerProtocol + ) { + self.interactor = interactor + self.dataValidatingFactory = dataValidatingFactory + self.wallet = wallet + self.logger = logger + } + + func handle(initialData: SendFlowInitialData) async throws { + guard case let .chainAsset(chainAsset) = initialData else { + throw TransferFlowUseCaseError.wrongType + } + + selectedChainAsset = chainAsset + utilityChainAsset = chainAsset.chain.utilityChainAssets().first + + provideRecipientViewModel?() + provideNetworkViewModel?() + + try await fetchRequaredInfo(for: chainAsset) + calcFee() + } + + func getValidators( + validationCase: TransferValidationCase, + locale: Locale + ) throws -> [any DataValidating] { + switch validationCase { + case .validateED: + return [] + case .all: + guard + let selectedChainAsset, + let availableInputBalance + else { + throw TransferFlowUseCaseError.getValidatorsError + } + + let balanceType: BalanceType = selectedChainAsset.isUtility + ? .utility(balance: utilityBalance) + : .orml(balance: availableBalance, utilityBalance: utilityBalance) + + let sendAmount = inputResult?.absoluteValue(from: availableInputBalance) + + let validators = [ + dataValidatingFactory.has( + fee: fee, + locale: locale + ) { [weak self] in + guard let transfer = self?.transfer else { + return + } + self?.refreshFee(for: transfer) + }, + dataValidatingFactory.canPayFeeAndAmount( + balanceType: balanceType, + feeAndTip: .zero, + sendAmount: sendAmount, + locale: locale + ) + ] + return validators + } + } + + // MARK: - Private methods + + private func calcFee() { + guard + let transfer = buildTonTransfer(), + let selectedChainAsset, + let utilityChainAsset + else { + return + } + provideFeeViewModel?() + Task { [weak self] in + guard let self else { return } + let stream = await self.interactor.estimateFee( + transfer: transfer, + chainAsset: selectedChainAsset + ) + let precision = Int16(utilityChainAsset.asset.precision) + do { + for try await fee in stream { + self.fee = Decimal.fromSubstrateAmount(fee, precision: precision) + self.provideFeeViewModel?() + } + } catch { + logger.customError(error) + } + } + } + + private func buildTonTransfer() -> TransferType? { + guard + let availableInputBalance, + let selectedChainAsset, + let inputAmount = inputResult?.absoluteValue(from: availableInputBalance), + let amount = inputAmount.toSubstrateAmount(precision: Int16(selectedChainAsset.asset.precision)), + let address = try? wallet.fetch(for: selectedChainAsset.chain.accountRequest())?.accountId.asTonAddress(), + let recipientAddress = getRecipientAddress(), + let contract = wallet.ecosystem.tonWalletContract() + else { + transfer = nil + return nil + } + + let isMax = availableBalance == inputAmount + + let token: Token + switch selectedChainAsset.asset.assetType.tonAssetType { + case .normal: + token = .ton + case .jetton: + guard let jettonWalletAddress = try? TonSwift.Address.parse(selectedChainAsset.asset.id) else { + return nil + } + token = .jetton(jettonWalletAddress: jettonWalletAddress) + case .none: + return nil + } + + let tonTransfer = TonTransfer( + amount: amount, + token: token, + isMax: isMax, + contract: contract, + sender: address, + recipientAddress: recipientAddress, + comment: comment + ) + let transfer = TransferType.ton(tonTransfer) + self.transfer = transfer + return transfer + } + + private func getRecipientAddress() -> RecipientAddress? { + guard let recipientAddress else { + return nil + } + let recipient: RecipientAddress + if let friendly = try? FriendlyAddress(string: recipientAddress) { + recipient = .friendly(friendly) + } else if let raw = try? TonSwift.Address.parse(recipientAddress) { + recipient = .raw(raw) + } else { + return nil + } + return recipient + } + + private func fetchRequaredInfo(for chainAsset: ChainAsset) async throws { + guard let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId else { + throw TransferFlowUseCaseError.missingAccount + } + + async let balancesTask = try await interactor.fetchAccountInfos(for: chainAsset) + + let chainAssetBalance = await balance( + for: chainAsset, + accountId: accountId, + accountInfos: try await balancesTask + ) + availableBalance = chainAssetBalance + provideInputViewModel?() + + if let utilityChainAsset { + let utilityChainAssetBalance = await balance( + for: utilityChainAsset, + accountId: accountId, + accountInfos: try await balancesTask + ) + utilityBalance = utilityChainAssetBalance + } + + availableInputBalance = availableBalance + provideAssetViewModel?() + } +} diff --git a/fearless/Modules/Transfer/Transfer/TransferAssembly.swift b/fearless/Modules/Transfer/Transfer/TransferAssembly.swift new file mode 100644 index 0000000000..88396bcac9 --- /dev/null +++ b/fearless/Modules/Transfer/Transfer/TransferAssembly.swift @@ -0,0 +1,86 @@ +import UIKit +import SSFUtils +import SoraFoundation +import SSFModels + +final class TransferAssembly { + @MainActor static func configureModule( + wallet: MetaAccountModel, + initialData: SendFlowInitialData + ) -> TransferModuleCreationResult? { + let localizationManager = LocalizationManager.shared + + let deps = TransferDepsContainer(wallet: wallet) + let interactor = TransferInteractor( + deps: deps, + chainAssetFetching: ServiceAssembly.shared.chainAssetFetching(qualityOfService: .default), + scamRepository: ServiceAssembly.shared.scamInfoAsyncRepository() + ) + let router = TransferRouter() + let dataValidatingFactory = SendDataValidatingFactory(presentable: router) + let possibleFlows = Self.createFlows( + wallet: wallet, + interactor: interactor, + dataValidatingFactory: dataValidatingFactory + ) + let viewModelFactory = SendViewModelFactory(wallet: wallet, iconGenerator: UniversalIconGenerator()) + let presenter = TransferPresenter( + wallet: wallet, + initialData: initialData, + viewModelFactory: viewModelFactory, + possibleFlows: possibleFlows, + interactor: interactor, + router: router, + logger: ServiceAssembly.shared.logger, + localizationManager: localizationManager + ) + + let view = TransferViewController( + initialData: initialData, + output: presenter, + localizationManager: localizationManager + ) + dataValidatingFactory.view = view + + return (view, presenter) + } + + private static func createFlows( + wallet: MetaAccountModel, + interactor: TransferInteractorInput, + dataValidatingFactory: SendDataValidatingFactory + ) -> [TransferFlowUseCase] { + [ + SoraQrTransferFlowUseCase( + wallet: wallet, + dataValidatingFactory: dataValidatingFactory, + interactor: interactor, + logger: ServiceAssembly.shared.logger + ), + BokoloTransferFlowUseCase( + wallet: wallet, + dataValidatingFactory: dataValidatingFactory, + interactor: interactor, + logger: ServiceAssembly.shared.logger + ), + SubstrateTransferFlowUseCase( + wallet: wallet, + dataValidatingFactory: dataValidatingFactory, + interactor: interactor, + logger: ServiceAssembly.shared.logger + ), + EthereumTransferFlowUseCase( + wallet: wallet, + dataValidatingFactory: dataValidatingFactory, + interactor: interactor, + logger: ServiceAssembly.shared.logger + ), + TonTransferFlowUseCase( + wallet: wallet, + dataValidatingFactory: dataValidatingFactory, + interactor: interactor, + logger: ServiceAssembly.shared.logger + ) + ] + } +} diff --git a/fearless/Modules/Transfer/Transfer/TransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/TransferFlowUseCase.swift new file mode 100644 index 0000000000..406c813ead --- /dev/null +++ b/fearless/Modules/Transfer/Transfer/TransferFlowUseCase.swift @@ -0,0 +1,205 @@ +import Foundation +import SSFModels +import SSFQRService +import SSFTransferService + +enum TransferFlowUseCaseError: Error { + case wrongType + case unsupportedAsset + case missingAccount + case getValidatorsError +} + +enum TransferFlowDirectionImpl { + case substrate + case ethereum + case soraMainnetQr + case bokoloCash + case ton +} + +enum TransferValidationCase { + case validateED + case all +} + +protocol TransferFlowUseCase: AnyObject { + var interactor: TransferInteractorInput { get } + var implType: TransferFlowDirectionImpl { get } + var transfer: TransferType? { get set } + + var selectedChainAsset: ChainAsset? { get set } + var utilityChainAsset: ChainAsset? { get set } + var inputResult: AmountInputResult? { get set } + var recipientAddress: String? { get set } + var comment: String? { get set } + + var availableInputBalance: Decimal? { get set } + var availableBalance: Decimal? { get set } + var utilityBalance: Decimal? { get set } + + var fee: Decimal? { get set } + var tip: Decimal? { get set } + var ed: Decimal? { get set } + + var isUserInteractiveAmount: Bool { get set } + var canSelectAsset: Bool { get } + var isValidRecipient: Bool? { get set } + var canEditRecipient: Bool { get set } + var isSwitchEnableSendAllVisibility: Bool { get } + var sendAllEnabled: Bool? { get set } + + var provideRecipientViewModel: (() -> Void)? { get set } + var provideNetworkViewModel: (() -> Void)? { get set } + var provideAssetViewModel: (() -> Void)? { get set } + var provideInputViewModel: (() -> Void)? { get set } + var provideTipViewModel: (() -> Void)? { get set } + var provideFeeViewModel: (() -> Void)? { get set } + + func handle(initialData: SendFlowInitialData) async throws + func reset() async + func handleRecipient(address: String) async + func isReadyToContinue() -> Bool + func getValidators( + validationCase: TransferValidationCase, + locale: Locale + ) throws -> [DataValidating] +} + +extension TransferFlowUseCase { + func amount() -> Decimal? { + guard let availableInputBalance else { + return nil + } + let amount = inputResult?.absoluteValue(from: availableInputBalance) + return amount + } + + func reset() async { + transfer = nil + selectedChainAsset = nil + utilityChainAsset = nil + inputResult = nil + recipientAddress = nil + availableInputBalance = nil + availableBalance = nil + utilityBalance = nil + fee = nil + tip = nil + ed = nil + isValidRecipient = nil + comment = nil + } + + func handleRecipient(address: String) async { + recipientAddress = address + guard address.isNotEmpty else { + isValidRecipient = nil + recipientAddress = nil + provideRecipientViewModel?() + return + } + + guard let selectedChainAsset else { + return + } + + let isValid = await interactor.validate(address: address, for: selectedChainAsset.chain).isValid + isValidRecipient = isValid + provideRecipientViewModel?() + } + + func isReadyToContinue() -> Bool { + guard + let availableInputBalance, + let inputAmount = inputResult?.absoluteValue(from: availableInputBalance) + else { + return false + } + + let allSatisfy = [ + recipientAddress != nil, + inputAmount > 0 + ].allSatisfy { $0 } + return allSatisfy + } + + func balance( + for chainAsset: ChainAsset, + accountId: AccountId, + accountInfos: [ChainAssetKey: AccountInfo?] + ) async -> Decimal? { + let key = chainAsset.uniqueKey(accountId: accountId) + let chainAssetAccountInfo = accountInfos[key] ?? nil + let chainAssetBalance = chainAssetAccountInfo.map { + Decimal.fromSubstrateAmount( + $0.data.sendAvailable, + precision: Int16(chainAsset.asset.precision) + ) + } ?? .zero + return chainAssetBalance + } + + /// Before use this method make sure what calcAvailableInputBalance() suit for you case + func refreshFee(for transfer: TransferType?) { + guard + let selectedChainAsset, + let transfer, + let utilityChainAsset + else { + return + } + provideFeeViewModel?() + Task { [weak self] in + guard let self else { return } + let stream = await self.interactor.estimateFee( + transfer: transfer, + chainAsset: selectedChainAsset + ) + for try await fee in stream { + let precision = Int16(utilityChainAsset.asset.precision) + self.fee = Decimal.fromSubstrateAmount(fee, precision: precision) + self.provideFeeViewModel?() + await calcAvailableInputBalance() + } + } + } + + func buildSubstrateTransfer() -> TransferType? { + guard + let availableInputBalance, + let selectedChainAsset, + let recipientAddress, + let inputAmount = inputResult?.absoluteValue(from: availableInputBalance), + let amount = inputAmount.toSubstrateAmount(precision: Int16(selectedChainAsset.asset.precision)) + else { + transfer = nil + return nil + } + let tip = tip?.toSubstrateAmount(precision: Int16(selectedChainAsset.asset.precision)) + let subtrateTransfer = SubstrateTransfer( + amount: amount, + receiver: recipientAddress, + tip: tip + ) + let transfer = TransferType.substrate(subtrateTransfer) + self.transfer = transfer + return transfer + } + + func calcAvailableInputBalance() async { + guard + let selectedChainAsset, + let utilityChainAsset + else { + return + } + + if selectedChainAsset.chainAssetId == utilityChainAsset.chainAssetId { + availableInputBalance = availableBalance.or(.zero) - fee.or(.zero) - tip.or(.zero) + } else { + availableInputBalance = availableBalance + } + provideInputViewModel?() + } +} diff --git a/fearless/Modules/Transfer/Transfer/TransferInteractor.swift b/fearless/Modules/Transfer/Transfer/TransferInteractor.swift new file mode 100644 index 0000000000..fd3867045a --- /dev/null +++ b/fearless/Modules/Transfer/Transfer/TransferInteractor.swift @@ -0,0 +1,217 @@ +import UIKit +import SSFModels +import SSFTransferService +import SSFStorageQueryKit +import BigInt +import RobinHood + +protocol TransferInteractorOutput: AnyObject {} + +struct TransferDepsContainer { + let wallet: MetaAccountModel + + init(wallet: MetaAccountModel) { + self.wallet = wallet + } + + lazy var chainRegistry: ChainRegistryProtocol = { + ServiceAssembly.shared.chainRegistry + }() + + lazy var operationManager: OperationManagerProtocol = { + ServiceAssembly.shared.operationManager + }() + + lazy var existentialDepositService: ExistentialDepositServiceProtocol = { + ServiceAssembly.shared.existentialDepositService() + }() + + lazy var transferService: TransferService = { + ServiceAssembly.shared.transferService(for: wallet) + }() + + lazy var polkaswapService: PolkaswapService = { + ServiceAssembly.shared.polkaswapService() + }() + + lazy var storageRequestPerformer: SSFStorageQueryKit.StorageRequestPerformer = { + SSFStorageQueryKit.StorageRequestPerformerDefault( + chainRegistry: ServiceAssembly.shared.chainRegistry + ) + }() + + lazy var accountInfoRemoteService: AccountInfoRemoteService = { + ServiceAssembly.shared.accountInfoRemoteServiceDefault() + }() + + lazy var addressChainDefiner: AddressChainDefiner = { + ServiceAssembly.shared.addressChainDefiner(wallet: wallet) + }() +} + +actor TransferInteractor: RuntimeConstantFetching { + // MARK: - Private properties + + private weak var output: TransferInteractorOutput? + + private var deps: TransferDepsContainer + private let chainAssetFetching: ChainAssetFetchingProtocol + private let scamRepository: AsyncAnyRepository + + init( + deps: TransferDepsContainer, + chainAssetFetching: ChainAssetFetchingProtocol, + scamRepository: AsyncAnyRepository + ) { + self.deps = deps + self.chainAssetFetching = chainAssetFetching + self.scamRepository = scamRepository + } + + // MARK: - Private methods + + private func getChainAssets(for chainAsset: ChainAsset) -> [ChainAsset] { + [chainAsset, chainAsset.chain.utilityChainAssets().first] + .compactMap { $0 } + .uniq(predicate: { $0.chainAssetId }) + } +} + +// MARK: - TransferInteractorInput + +extension TransferInteractor: TransferInteractorInput { + func getScamInfo(for address: String) async throws -> ScamInfo? { + try await scamRepository.fetch(by: address, options: RepositoryFetchOptions()) + } + + func setup(with output: TransferInteractorOutput) async { + self.output = output + } + + func validate(address: String?, for chain: SSFModels.ChainModel) -> AddressValidationResult { + deps.addressChainDefiner.validate(address: address, for: chain) + } + + func getPossibleChains(for address: String) async -> [ChainModel] { + await deps.addressChainDefiner.getPossibleChains(for: address).or([]) + } + + func fetchTokenStatus(for chainAsset: ChainAsset) async throws -> AssetAccountInfo? { + guard + let currencyId = chainAsset.currencyId, + let accountId = deps.wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId + else { + return nil + } + + let accountIdVariant = try AccountIdVariant.build(raw: accountId, chain: chainAsset.chain) + let request = AssetsAccountRequest1(accountId: accountIdVariant, currencyId: currencyId) + let assetAccountInfo: AssetAccountInfo? = try await deps + .storageRequestPerformer + .performSingle(request, chain: chainAsset.chain) + + return assetAccountInfo + } + + func fetchAccountInfos(for chainAsset: ChainAsset) async throws -> [ChainAssetKey: AccountInfo?] { + let chainAssets = getChainAssets(for: chainAsset) + let accountInfos = try await deps + .accountInfoRemoteService + .fetchAccountInfos(for: chainAssets, wallet: deps.wallet) + return accountInfos + } + + func fetchExistentialDeposit(for chainAsset: ChainAsset) async throws -> BigUInt { + try await deps + .existentialDepositService + .fetchExistentialDeposit(chainAsset: chainAsset) + } + + func fetchTip(for chainAsset: ChainAsset) async throws -> BigUInt { + guard let runtimeCodingService = deps + .chainRegistry + .getRuntimeProvider(for: chainAsset.chain.chainId) + else { + throw RuntimeProviderError.providerUnavailable + } + + let tip: BigUInt = try await fetchConstant( + for: .defaultTip, + runtimeCodingService: runtimeCodingService, + operationManager: deps.operationManager + ) + + return tip + } + + func convert( + chainAsset: ChainAsset, + toChainAsset: ChainAsset, + amount: BigUInt + ) async throws -> SwapValues? { + try await deps + .polkaswapService + .fetchQuotes( + amount: amount, + fromChainAsset: chainAsset, + toChainAsset: toChainAsset + ) + } + + func defineAvailableChains( + for asset: AssetModel, + wallet: MetaAccountModel + ) async throws -> [ChainModel]? { + let chainAssets = try await chainAssetFetching.fetchAwait( + shouldUseCache: true, + filters: [.enabled(wallet: wallet) ], + sortDescriptors: [] + ) + let chains = chainAssets.filter { $0.asset.symbolUppercased == asset.symbolUppercased }.map { $0.chain } + return chains + } + + func estimateFee( + transfer: TransferType, + chainAsset: ChainAsset + ) async -> AsyncThrowingStream { + await deps.transferService.estimateFee( + transfer, + for: chainAsset + ) + } + + func submit( + transfer: TransferType, + chainAsset: ChainAsset + ) async throws -> String? { + try await deps.transferService.submit( + transfer, + for: chainAsset + ) + } +} + +struct AssetsAccountRequest1: SSFStorageQueryKit.StorageRequest { + let accountId: AccountIdVariant + let currencyId: CurrencyId + + var parametersType: SSFStorageQueryKit.StorageRequestParametersType { + switch accountId { + case let .accountId(accountId): + return .nMap(params: [ + [NMapKeyParam(value: currencyId)], + [NMapKeyParam(value: accountId)] + ]) + case let .address(address): + return .nMap(params: [ + [NMapKeyParam(value: currencyId)], + [NMapKeyParam(value: address)] + ]) + } + } + + var storagePath: any StorageCodingPathProtocol { + StorageCodingPath.assetsAccount + } +} diff --git a/fearless/Modules/Transfer/Transfer/TransferPresenter.swift b/fearless/Modules/Transfer/Transfer/TransferPresenter.swift new file mode 100644 index 0000000000..06a470d7e1 --- /dev/null +++ b/fearless/Modules/Transfer/Transfer/TransferPresenter.swift @@ -0,0 +1,836 @@ +import Foundation +import SSFQRService +import SoraFoundation +import SSFModels +import BigInt +import SSFTransferService + +@MainActor +protocol TransferViewInput: ControllerBackedProtocol { + func didReceive(recipientViewModel: RecipientViewModel?) + func didReceive(assetBalanceViewModel: AssetBalanceViewModelProtocol?) + func didReceive(amountInputViewModel: IAmountInputViewModel?) + func didReceive(selectNetworkViewModel: SelectNetworkViewModel) + func didReceive(feeViewModel: BalanceViewModelProtocol?) + func didReceive(tipViewModel: TipViewModel?) + func setHistoryButton(isVisible: Bool) + func switchEnableSendAllVisibility(isVisible: Bool) + func didBlockUserInteractive(isUserInteractiveAmount: Bool) + func setInputAccessoryView(visible: Bool) + func didReceiveContinueButton(isReady: Bool) + func didReceive(scamInfo: ScamInfo?) + func setCommentInput(isVisible: Bool) + func setCommentViewModel(_ viewModel: InputViewModelProtocol?) +} + +protocol TransferInteractorInput: AnyObject { + func setup(with output: TransferInteractorOutput) async + func getPossibleChains(for address: String) async -> [ChainModel] + func validate(address: String?, for chain: ChainModel) async -> AddressValidationResult + func fetchTokenStatus(for chainAsset: ChainAsset) async throws -> AssetAccountInfo? + func fetchAccountInfos(for chainAsset: ChainAsset) async throws -> [ChainAssetKey: AccountInfo?] + func fetchExistentialDeposit(for chainAsset: ChainAsset) async throws -> BigUInt + func fetchTip(for chainAsset: ChainAsset) async throws -> BigUInt + func convert( + chainAsset: ChainAsset, + toChainAsset: ChainAsset, + amount: BigUInt + ) async throws -> SwapValues? + func defineAvailableChains( + for asset: AssetModel, + wallet: MetaAccountModel + ) async throws -> [ChainModel]? + func estimateFee( + transfer: TransferType, + chainAsset: ChainAsset + ) async -> AsyncThrowingStream + func submit( + transfer: TransferType, + chainAsset: ChainAsset + ) async throws -> String? + func getScamInfo(for address: String) async throws -> ScamInfo? +} + +final class TransferPresenter { + // MARK: Private properties + + private weak var view: TransferViewInput? + private let router: TransferRouterInput + private let interactor: TransferInteractorInput + private let viewModelFactory: SendViewModelFactoryProtocol + private let logger: LoggerProtocol + + private let wallet: MetaAccountModel + private let possibleFlows: [TransferFlowUseCase] + + // MARK: - Common state + + private var currentFlowUseCase: TransferFlowUseCase? + private var sendFlow: SendFlowInitialData + private var scamInfo: ScamInfo? + + // MARK: - Constructors + + init( + wallet: MetaAccountModel, + initialData: SendFlowInitialData, + viewModelFactory: SendViewModelFactoryProtocol, + possibleFlows: [TransferFlowUseCase], + interactor: TransferInteractorInput, + router: TransferRouterInput, + logger: LoggerProtocol, + localizationManager: LocalizationManagerProtocol + ) { + self.wallet = wallet + sendFlow = initialData + self.viewModelFactory = viewModelFactory + self.possibleFlows = possibleFlows + self.interactor = interactor + self.router = router + self.logger = logger + self.localizationManager = localizationManager + } + + // MARK: - Private provides methids + + private func provideRecipientViewModel() async { + guard + let currentFlowUseCase, + let address = currentFlowUseCase.recipientAddress + else { + await view?.didReceive(recipientViewModel: nil) + return + } + let viewModel = viewModelFactory.buildRecipientViewModel( + address: address, + isValid: currentFlowUseCase.isValidRecipient, + canEditing: currentFlowUseCase.canEditRecipient + ) + await view?.didReceive(recipientViewModel: viewModel) + await provideScamInfo() + } + + private func provideScamInfo() async { + guard let address = currentFlowUseCase?.recipientAddress else { + return + } + do { + let scamInfo = try await interactor.getScamInfo(for: address) + await view?.didReceive(scamInfo: scamInfo) + self.scamInfo = scamInfo + } catch { + logger.customError(error) + } + } + + private func provideAssetVewModel() async { + guard + let currentFlowUseCase, + let selectedChainAsset = currentFlowUseCase.selectedChainAsset + else { + return + } + + let availableInputBalance = currentFlowUseCase.availableInputBalance ?? .zero + let canSelectAsset = currentFlowUseCase.canSelectAsset + let inputAmount = currentFlowUseCase.inputResult?.absoluteValue(from: availableInputBalance) + let availableBalance = currentFlowUseCase.availableBalance + + let viewModel = viewModelFactory.createAssetBalanceViewModel( + inputAmount: inputAmount, + availableBalance: availableBalance, + chainAsset: selectedChainAsset, + canSelectAsset: canSelectAsset, + locale: selectedLocale + ) + await view?.didReceive(assetBalanceViewModel: viewModel) + + let isVisible = currentFlowUseCase.isSwitchEnableSendAllVisibility + await view?.switchEnableSendAllVisibility(isVisible: isVisible) + } + + private func provideInputViewModel() async { + guard + let currentFlowUseCase, + let chainAsset = currentFlowUseCase.selectedChainAsset + else { + await view?.didReceive(amountInputViewModel: nil) + return + } + + let availableInputBalance = currentFlowUseCase.availableInputBalance ?? .zero + let inputAmount = currentFlowUseCase.inputResult?.absoluteValue(from: availableInputBalance) + + let inputViewModel = viewModelFactory.createBalanceInputViewModel( + inputAmount: inputAmount, + chainAsset: chainAsset, + locale: selectedLocale + ) + + let isVisible = chainAsset.chain.externalApi?.history != nil + await view?.setHistoryButton(isVisible: isVisible) + await view?.didReceive(amountInputViewModel: inputViewModel) + + let isUserInteractiveAmount = currentFlowUseCase.isUserInteractiveAmount + await view?.didBlockUserInteractive(isUserInteractiveAmount: isUserInteractiveAmount) + } + + private func provideNetworkViewModel() async { + guard let currentFlowUseCase else { + return + } + + switch currentFlowUseCase.implType { + case .substrate, .ethereum, .soraMainnetQr, .ton: + guard let chain = currentFlowUseCase.selectedChainAsset?.chain else { + return + } + let viewModel = viewModelFactory.buildNetworkViewModel( + chain: chain + ) + await view?.didReceive(selectNetworkViewModel: viewModel) + case .bokoloCash: + let networkViewModel = SelectNetworkViewModel( + chainName: "Bokolo cash", + iconViewModel: BundleImageViewModel(image: R.image.bokolocash()) + ) + await view?.didReceive(selectNetworkViewModel: networkViewModel) + } + + let isVisibleComment = currentFlowUseCase.implType == .ton + await view?.setCommentInput(isVisible: isVisibleComment) + await provideCommentInputViewModel() + } + + private func provideCommentInputViewModel() async { + guard (currentFlowUseCase?.implType == .ton) == true else { + await view?.setCommentViewModel(nil) + return + } + + let comment = currentFlowUseCase?.comment ?? "" + let viewModel = InputViewModel(inputHandler: InputHandler(value: comment)) + await view?.setCommentViewModel(viewModel) + } + + private func provideFeeViewModel() async { + guard + let currentFlowUseCase, + let chainAsset = currentFlowUseCase.utilityChainAsset, + let fee = currentFlowUseCase.fee + else { + await view?.didReceive(feeViewModel: nil) + return + } + + let viewModel = viewModelFactory.balanceFromPrice( + chainAsset: chainAsset, + balance: fee, + locale: selectedLocale + ) + + await view?.didReceive(feeViewModel: viewModel) + } + + private func provideTipViewModel() async { + guard + let currentFlowUseCase, + let chainAsset = currentFlowUseCase.utilityChainAsset, + let tip = currentFlowUseCase.tip + else { + await view?.didReceive(tipViewModel: nil) + return + } + + let balanceViewModel = viewModelFactory.balanceFromPrice( + chainAsset: chainAsset, + balance: tip, + locale: selectedLocale + ) + + let tipViewModel = TipViewModel( + balanceViewModel: balanceViewModel, + tipRequired: chainAsset.chain.isTipRequired + ) + + await view?.didReceive(tipViewModel: tipViewModel) + } + + private func provideIsReady() async { + let isReady = currentFlowUseCase?.isReadyToContinue() == true + await view?.didReceiveContinueButton(isReady: isReady) + } + + private func provideInputAccessoryView() async { + guard let selectedChainAsset = currentFlowUseCase?.selectedChainAsset else { + return + } + let isVisibleInputAccessory = selectedChainAsset.isBokolo == false + await view?.setInputAccessoryView(visible: isVisibleInputAccessory) + } + + // MARK: - Private methods + + private func handleSendFlow(address: String?) async { + await possibleFlows.asyncForEach { await $0.reset() } + + do { + switch sendFlow { + case let .chainAsset(chainAsset): + await setCurrentFlow(for: chainAsset.chain.ecosystem) + currentFlowUseCase?.recipientAddress = address + try await currentFlowUseCase?.handle(initialData: sendFlow) + case let .address(address): + let possibleChains = await interactor.getPossibleChains(for: address) + guard possibleChains.isNotEmpty else { + await showIncorrectAddressAlert() + return + } + await handle(possibleChains: possibleChains) + case .soraMainnet: + setCurrentFlow(for: .soraMainnetQr) + try await currentFlowUseCase?.handle(initialData: sendFlow) + case .bokoloCash: + setCurrentFlow(for: .bokoloCash) + try await currentFlowUseCase?.handle(initialData: sendFlow) + case let .desiredCryptocurrency(qrInfo: qrInfo): + try await handleDesiredCrypto(qrInfo: qrInfo) + } + } catch { + if let error = error as? TransferFlowUseCaseError { + switch error { + case .unsupportedAsset: + await showUnsupportedAssetAlert() + default: + logger.customError(error) + } + } else { + logger.customError(error) + } + } + + await provideInputAccessoryView() + } + + private func setCurrentFlow(for ecosystem: Ecosystem) async { + switch ecosystem { + case .substrate, .ethereumBased: + guard let flow = possibleFlows.first(where: { $0.implType == .substrate }) else { + return + } + currentFlowUseCase = flow + case .ethereum: + guard let flow = possibleFlows.first(where: { $0.implType == .ethereum }) else { + return + } + currentFlowUseCase = flow + case .ton: + guard let flow = possibleFlows.first(where: { $0.implType == .ton }) else { + return + } + currentFlowUseCase = flow + } + setupBindings() + } + + private func setCurrentFlow(for implType: TransferFlowDirectionImpl) { + guard let flow = possibleFlows.first(where: { $0.implType == implType }) else { + return + } + currentFlowUseCase = flow + setupBindings() + } + + private func handle(possibleChains: [ChainModel]) async { + guard possibleChains.isNotEmpty else { + await router.showSelectAsset( + from: view, + wallet: wallet, + selectedAssetId: nil, + chainAssets: nil, + output: self + ) + return + } + if possibleChains.count == 1, let selectedChain = possibleChains.first { + await defineOrSelectAsset(for: selectedChain) + } else { + await router.showSelectNetwork( + from: view, + wallet: wallet, + selectedChainId: nil, + chainModels: possibleChains, + delegate: self + ) + } + } + + private func defineOrSelectAsset(for chain: ChainModel) async { + await setCurrentFlow(for: chain.ecosystem) + let chainAssets = enabled( + chainAssets: chain.chainAssets, + for: wallet + ) + if chainAssets.count == 1, + let selectedChainAsset = chainAssets.first { + let address = sendFlow.address + sendFlow = .chainAsset(selectedChainAsset) + await handleSendFlow(address: address) + } else { + await router.showSelectAsset( + from: view, + wallet: wallet, + selectedAssetId: nil, + chainAssets: chainAssets, + output: self + ) + } + } + + private func enabled( + chainAssets: [ChainAsset], + for wallet: MetaAccountModel + ) -> [ChainAsset] { + let enabledAssetIds: [String] = wallet.assetsVisibility + .filter { !$0.hidden } + .map { $0.assetId } + let enabled = chainAssets.filter { + enabledAssetIds.contains($0.identifier) + } + return enabled + } + + private func setupBindings() { + currentFlowUseCase?.provideRecipientViewModel = { [weak self] in + Task { [weak self] in + await self?.provideRecipientViewModel() + await self?.provideIsReady() + } + } + currentFlowUseCase?.provideAssetViewModel = { [weak self] in + Task { [weak self] in + await self?.provideAssetVewModel() + await self?.provideIsReady() + } + } + currentFlowUseCase?.provideInputViewModel = { [weak self] in + Task { [weak self] in + await self?.provideInputViewModel() + await self?.provideIsReady() + } + } + currentFlowUseCase?.provideNetworkViewModel = { [weak self] in + Task { [weak self] in + await self?.provideNetworkViewModel() + } + } + currentFlowUseCase?.provideTipViewModel = { [weak self] in + Task { [weak self] in + await self?.provideTipViewModel() + } + } + currentFlowUseCase?.provideFeeViewModel = { [weak self] in + Task { [weak self] in + await self?.provideFeeViewModel() + } + } + } + + private func validateInputData() async { + guard + let currentFlowUseCase, + let selectedChainAsset = currentFlowUseCase.selectedChainAsset + else { + return + } + await validateAddress(with: selectedChainAsset) { [weak self] in + guard let self else { return } + do { + let validators = try currentFlowUseCase.getValidators( + validationCase: .all, + locale: self.selectedLocale + ) + Task { @MainActor in + DataValidationRunner(validators: validators).runValidation { [weak self] in + self?.showConfirm() + } + } + } catch { + logger.customError(error) + } + } + } + + private func validateAddress( + with chainAsset: ChainAsset, + successCompletion: @escaping () -> Void + ) async { + switch currentFlowUseCase?.implType { + case .bokoloCash: + successCompletion() + default: + guard let recipientAddress = currentFlowUseCase?.recipientAddress else { + return + } + let validationResult = await interactor.validate(address: recipientAddress, for: chainAsset.chain) + switch validationResult { + case .valid: + successCompletion() + case let .invalid(address): + guard let address = address else { + await showInvalidAddressAlert() + return + } + let possibleChains = await interactor.getPossibleChains(for: address) + guard possibleChains.isNotEmpty else { + await showInvalidAddressAlert() + return + } + + await showPossibleChainsAlert(possibleChains) + case .sameAddress: + await showSameAddressAlert(successCompletion: successCompletion) + } + } + } + + private func showConfirm() { + Task { @MainActor in + guard + let useCase = currentFlowUseCase, + let chainAsset = useCase.selectedChainAsset + else { + return + } + router.presentConfirm( + from: view, + wallet: wallet, + chainAsset: chainAsset, + useCase: useCase, + sendFlow: sendFlow, + scamInfo: scamInfo + ) + } + } + + // MARK: - Alerts + + @MainActor + private func showSameAddressAlert(successCompletion: @escaping () -> Void) { + let action = SheetAlertPresentableAction( + title: R.string.localizable.commonProceed(preferredLanguages: selectedLocale.rLanguages) + ) { + successCompletion() + } + router.present( + message: R.string.localizable + .sameAddressTransferWarningMessage(preferredLanguages: selectedLocale.rLanguages), + title: R.string.localizable.commonWarning(preferredLanguages: selectedLocale.rLanguages), + closeAction: R.string.localizable.commonCancel(preferredLanguages: selectedLocale.rLanguages), + from: view, + actions: [action] + ) + } + + @MainActor + private func showInvalidAddressAlert() { + router.present( + message: R.string.localizable.errorInvalidAddress(preferredLanguages: selectedLocale.rLanguages), + title: R.string.localizable.commonWarning(preferredLanguages: selectedLocale.rLanguages), + closeAction: R.string.localizable.commonClose(preferredLanguages: selectedLocale.rLanguages), + from: view + ) + } + + @MainActor + private func showPossibleChainsAlert(_ possibleChains: [ChainModel]) async { + let action = SheetAlertPresentableAction( + title: R.string.localizable.commonSelectNetwork(preferredLanguages: selectedLocale.rLanguages) + ) { [weak self] in + guard let self else { return } + Task { @MainActor in + self.router.showSelectNetwork( + from: self.view, + wallet: self.wallet, + selectedChainId: nil, + chainModels: possibleChains, + delegate: self + ) + } + } + router.present( + message: R.string.localizable.errorInvalidAddress(preferredLanguages: selectedLocale.rLanguages), + title: R.string.localizable.commonWarning(preferredLanguages: selectedLocale.rLanguages), + closeAction: R.string.localizable.commonClose(preferredLanguages: selectedLocale.rLanguages), + from: view, + actions: [action] + ) + } + + @MainActor + private func showIncorrectAddressAlert() async { + let dissmissAction = SheetAlertPresentableAction( + title: R.string.localizable.commonClose(preferredLanguages: selectedLocale.rLanguages) + ) { [weak self, view] in + self?.router.dismiss(view: view) + } + let alertViewModel = SheetAlertPresentableViewModel( + title: R.string.localizable.commonWarning(preferredLanguages: selectedLocale.rLanguages), + message: R.string.localizable.errorInvalidAddress(preferredLanguages: selectedLocale.rLanguages), + actions: [dissmissAction], + closeAction: nil, + dismissCompletion: { [weak self, view] in + self?.router.dismiss(view: view) + } + ) + await MainActor.run { [view] in + router.present(viewModel: alertViewModel, from: view) + } + } + + @MainActor + private func showUnsupportedAssetAlert() async { + let dissmissAction = SheetAlertPresentableAction( + title: R.string.localizable.commonClose(preferredLanguages: selectedLocale.rLanguages) + ) { [weak self] in + self?.router.dismiss(view: self?.view) + } + let assetManagementAction = SheetAlertPresentableAction( + title: R.string.localizable.walletManageAssets(preferredLanguages: selectedLocale.rLanguages), + style: .pinkBackgroundWhiteText + ) { [weak self] in + guard let self else { return } + Task { @MainActor in + self.router.showManageAsset(from: self.view, wallet: self.wallet) + } + } + let alertViewModel = SheetAlertPresentableViewModel( + title: R.string.localizable.commonActionReceive(preferredLanguages: selectedLocale.rLanguages), + message: R.string.localizable.errorScanQrDisabledAsset(preferredLanguages: selectedLocale.rLanguages), + actions: [assetManagementAction, dissmissAction], + closeAction: nil, + dismissCompletion: { [weak self] in + self?.router.dismiss(view: self?.view) + } + ) + router.present(viewModel: alertViewModel, from: view) + } +} + +// MARK: - TransferViewOutput + +extension TransferPresenter: TransferViewOutput { + func updateComment(_ text: String?) { + currentFlowUseCase?.comment = text + Task { await provideCommentInputViewModel() } + } + + func didTapBackButton() { + router.dismiss(view: view) + } + + func didTapContinueButton() { + Task { await validateInputData() } + } + + @MainActor + func didTapScanButton() { + router.presentScan(from: view, moduleOutput: self) + } + + @MainActor + func didTapHistoryButton() { + guard let chainAsset = currentFlowUseCase?.selectedChainAsset else { return } + router.presentHistory(from: view, wallet: wallet, chainAsset: chainAsset, moduleOutput: self) + } + + func didTapPasteButton() { + Task { + if let address = UIPasteboard.general.string { + await currentFlowUseCase?.handleRecipient(address: address) + } + } + } + + @MainActor + func didTapSelectAsset() { + let selectedAssetId = currentFlowUseCase?.selectedChainAsset?.asset.id + router.showSelectAsset( + from: view, + wallet: wallet, + selectedAssetId: selectedAssetId, + chainAssets: nil, + output: self + ) + } + + func searchTextDidChanged(_ text: String) { + Task { + await currentFlowUseCase?.handleRecipient(address: text) + } + } + + func selectAmountPercentage(_ percentage: Float, validate: Bool = true) { + currentFlowUseCase?.inputResult = .rate(Decimal(Double(percentage))) + + if validate { + do { + let validators = try currentFlowUseCase?.getValidators( + validationCase: .validateED, + locale: selectedLocale + ) ?? [] + DataValidationRunner(validators: validators).runValidation { + Task { [weak self] in + self?.currentFlowUseCase?.inputResult = .rate(Decimal(Double(percentage))) + await self?.provideAssetVewModel() + await self?.provideInputViewModel() + } + } + } catch { + logger.customError(error) + } + } else { + Task { + await provideAssetVewModel() + await provideInputViewModel() + } + } + + Task { await provideIsReady() } + + guard let transfer = currentFlowUseCase?.transfer else { + return + } + currentFlowUseCase?.refreshFee(for: transfer) + } + + func updateAmount(_ newValue: Decimal) { + currentFlowUseCase?.inputResult = .absolute(newValue) + + do { + let validators = try currentFlowUseCase?.getValidators( + validationCase: .validateED, + locale: selectedLocale + ) ?? [] + DataValidationRunner(validators: validators).runValidation { + Task { [weak self] in + await self?.provideAssetVewModel() + } + } + } catch { + logger.customError(error) + } + + Task { + await provideIsReady() + } + + guard let transfer = currentFlowUseCase?.transfer else { + return + } + currentFlowUseCase?.refreshFee(for: transfer) + } + + func didSwitchSendAll(_ enabled: Bool) { + currentFlowUseCase?.sendAllEnabled = enabled + selectAmountPercentage(Float(enabled.intValue), validate: false) + } + + func didLoad(view: TransferViewInput) { + self.view = view + Task { + await interactor.setup(with: self) + await handleSendFlow(address: nil) + } + } + + private func handleDesiredCrypto(qrInfo: DesiredCryptocurrencyQRInfo) async throws { + let possibleChains = await interactor.getPossibleChains(for: qrInfo.address) + let chainAsset = possibleChains + .first(where: { $0.name.lowercased() == qrInfo.assetName.lowercased() })? + .chainAssets + .first(where: { $0.asset.isUtility }) + + guard let chainAsset else { + await showUnsupportedAssetAlert() + return + } + + await setCurrentFlow(for: chainAsset.chain.ecosystem) + currentFlowUseCase?.recipientAddress = qrInfo.address + currentFlowUseCase?.isValidRecipient = true + currentFlowUseCase?.canEditRecipient = false + + if let qrAmount = Decimal(string: qrInfo.amount ?? "") { + currentFlowUseCase?.inputResult = .absolute(qrAmount) + currentFlowUseCase?.isUserInteractiveAmount = false + } + + try await currentFlowUseCase?.handle(initialData: .chainAsset(chainAsset /* , address: qrInfo.address */ )) + } +} + +// MARK: - TransferInteractorOutput + +extension TransferPresenter: TransferInteractorOutput {} + +// MARK: - TransferModuleInput + +extension TransferPresenter: TransferModuleInput {} + +// MARK: - SelectAssetModuleOutput + +extension TransferPresenter: SelectAssetModuleOutput { + nonisolated func assetSelection( + didCompleteWith chainAsset: ChainAsset?, + contextTag _: Int? + ) { + guard let chainAsset else { + return + } + let address = sendFlow.address + sendFlow = .chainAsset(chainAsset) + Task { await handleSendFlow(address: address) } + } +} + +// MARK: - SelectNetworkDelegate + +extension TransferPresenter: SelectNetworkDelegate { + nonisolated func chainSelection( + view _: any SelectNetworkViewInput, + didCompleteWith chain: ChainModel?, + contextTag _: Int? + ) { + Task { + await handle(possibleChains: [chain].compactMap { $0 }) + } + } +} + +// MARK: - ScanQRModuleOutput + +extension TransferPresenter: ScanQRModuleOutput { + func didFinishWith(scanType: QRMatcherType) { + guard let qrInfo = scanType.qrInfo else { + return + } + + sendFlow = SendFlowInitialData(qrInfoType: qrInfo) + Task { await handleSendFlow(address: nil) } + } +} + +// MARK: - ContactsModuleOutput + +extension TransferPresenter: ContactsModuleOutput { + func didSelect(address: String) { + searchTextDidChanged(address) + } +} + +// MARK: - Localizable + +extension TransferPresenter: Localizable { + nonisolated func applyLocalization() {} +} diff --git a/fearless/Modules/Transfer/Transfer/TransferProtocols.swift b/fearless/Modules/Transfer/Transfer/TransferProtocols.swift new file mode 100644 index 0000000000..855fb5aa5b --- /dev/null +++ b/fearless/Modules/Transfer/Transfer/TransferProtocols.swift @@ -0,0 +1,53 @@ +import SSFModels + +typealias TransferModuleCreationResult = ( + view: TransferViewInput, + input: TransferModuleInput +) + +@MainActor +protocol TransferRouterInput: SheetAlertPresentable, ErrorPresentable, BaseErrorPresentable, PresentDismissable { + func presentScan( + from view: ControllerBackedProtocol?, + moduleOutput: ScanQRModuleOutput + ) + + func presentHistory( + from view: ControllerBackedProtocol?, + wallet: MetaAccountModel, + chainAsset: ChainAsset, + moduleOutput: ContactsModuleOutput + ) + + func showSelectNetwork( + from view: ControllerBackedProtocol?, + wallet: MetaAccountModel, + selectedChainId: ChainModel.Id?, + chainModels: [ChainModel]?, + delegate: SelectNetworkDelegate? + ) + + func showSelectAsset( + from view: ControllerBackedProtocol?, + wallet: MetaAccountModel, + selectedAssetId: AssetModel.Id?, + chainAssets: [ChainAsset]?, + output: SelectAssetModuleOutput + ) + func showManageAsset( + from view: ControllerBackedProtocol?, + wallet: MetaAccountModel + ) + func presentConfirm( + from view: ControllerBackedProtocol?, + wallet: MetaAccountModel, + chainAsset: ChainAsset, + useCase: TransferFlowUseCase, + sendFlow: SendFlowInitialData, + scamInfo: ScamInfo? + ) +} + +protocol TransferModuleInput: AnyObject {} + +protocol TransferModuleOutput: AnyObject {} diff --git a/fearless/Modules/Send/SendRouter.swift b/fearless/Modules/Transfer/Transfer/TransferRouter.swift similarity index 89% rename from fearless/Modules/Send/SendRouter.swift rename to fearless/Modules/Transfer/Transfer/TransferRouter.swift index 6c09574ee0..0c198f0831 100644 --- a/fearless/Modules/Send/SendRouter.swift +++ b/fearless/Modules/Transfer/Transfer/TransferRouter.swift @@ -1,32 +1,8 @@ import Foundation -import SSFQRService import SSFModels +import SSFQRService -final class SendRouter: SendRouterInput { - func presentConfirm( - from view: ControllerBackedProtocol?, - wallet: MetaAccountModel, - chainAsset: ChainAsset, - call: SendConfirmTransferCall, - scamInfo: ScamInfo?, - feeViewModel: BalanceViewModelProtocol? - ) { - guard let controller = WalletSendConfirmViewFactory.createView( - wallet: wallet, - chainAsset: chainAsset, - call: call, - scamInfo: scamInfo, - feeViewModel: feeViewModel - )?.controller else { - return - } - - view?.controller.navigationController?.pushViewController( - controller, - animated: true - ) - } - +final class TransferRouter: TransferRouterInput { func presentScan( from view: ControllerBackedProtocol?, moduleOutput: ScanQRModuleOutput @@ -112,4 +88,30 @@ final class SendRouter: SendRouterInput { view?.controller.present(controller, animated: true) } + + func presentConfirm( + from view: ControllerBackedProtocol?, + wallet: MetaAccountModel, + chainAsset: ChainAsset, + useCase: TransferFlowUseCase, + sendFlow: SendFlowInitialData, + scamInfo: ScamInfo? + ) { + let module = ConfirmTransferAssembly.configureModule( + wallet: wallet, + chainAsset: chainAsset, + useCase: useCase, + sendFlow: sendFlow, + scamInfo: scamInfo + ) + + guard let controller = module?.view.controller else { + return + } + + view?.controller.navigationController?.pushViewController( + controller, + animated: true + ) + } } diff --git a/fearless/Modules/Send/SendViewController.swift b/fearless/Modules/Transfer/Transfer/TransferViewController.swift similarity index 68% rename from fearless/Modules/Send/SendViewController.swift rename to fearless/Modules/Transfer/Transfer/TransferViewController.swift index 965f642be5..105b38c78d 100644 --- a/fearless/Modules/Send/SendViewController.swift +++ b/fearless/Modules/Transfer/Transfer/TransferViewController.swift @@ -1,23 +1,39 @@ import UIKit +import SoraUI import SoraFoundation - import SnapKit -final class SendViewController: UIViewController, ViewHolder { +protocol TransferViewOutput: AnyObject { + func didLoad(view: TransferViewInput) + func didTapBackButton() + func didTapContinueButton() + func didTapScanButton() + func didTapHistoryButton() + func didTapPasteButton() + func didTapSelectAsset() + func searchTextDidChanged(_ text: String) + func selectAmountPercentage(_ percentage: Float, validate: Bool) + func updateAmount(_ newValue: Decimal) + func didSwitchSendAll(_ enabled: Bool) + func updateComment(_ text: String?) +} + +final class TransferViewController: UIViewController, ViewHolder { typealias RootViewType = SendViewLayout // MARK: Private properties - private let output: SendViewOutput + private let output: TransferViewOutput private let initialData: SendFlowInitialData private var amountInputViewModel: IAmountInputViewModel? + private var commentInputViewModel: InputViewModelProtocol? // MARK: - Constructor init( initialData: SendFlowInitialData, - output: SendViewOutput, + output: TransferViewOutput, localizationManager: LocalizationManagerProtocol? ) { self.initialData = initialData @@ -42,6 +58,7 @@ final class SendViewController: UIViewController, ViewHolder { output.didLoad(view: self) setupLocalization() configure() + addEndEditingTapGesture(for: rootView) } override func viewWillAppear(_ animated: Bool) { @@ -63,6 +80,12 @@ final class SendViewController: UIViewController, ViewHolder { private func configure() { rootView.searchView.textField.delegate = self rootView.amountView.textField.delegate = self + rootView.commentTextField.animatedInputField.delegate = self + rootView.commentTextField.animatedInputField.addTarget( + self, + action: #selector(actionInputChange), + for: .editingChanged + ) rootView.actionButton.addTarget( self, @@ -88,9 +111,6 @@ final class SendViewController: UIViewController, ViewHolder { self?.output.didTapPasteButton() } - let tapGesture = UITapGestureRecognizer(target: self, action: #selector(selectNetworkClicked)) - rootView.selectNetworkView.addGestureRecognizer(tapGesture) - rootView.amountView.selectHandler = { [weak self] in self?.output.didTapSelectAsset() } @@ -98,11 +118,6 @@ final class SendViewController: UIViewController, ViewHolder { rootView.sendAllSwitch.addTarget(self, action: #selector(sendAllToggleSwitched), for: .valueChanged) } - private func updateActionButton() { - let isEnabled = (amountInputViewModel?.isValid == true) && rootView.searchView.textField.text?.isNotEmpty == true - rootView.actionButton.set(enabled: isEnabled) - } - @objc private func continueButtonClicked() { output.didTapContinueButton() } @@ -119,18 +134,26 @@ final class SendViewController: UIViewController, ViewHolder { output.didTapHistoryButton() } - @objc private func selectNetworkClicked() { - output.didTapSelectNetwork() - } - @objc private func sendAllToggleSwitched() { output.didSwitchSendAll(rootView.sendAllSwitch.isOn) } + + @objc private func actionInputChange() { + if commentInputViewModel?.inputHandler.value != rootView.commentTextField.text { + rootView.commentTextField.text = commentInputViewModel?.inputHandler.value + } + } } -// MARK: - SendViewInput +extension TransferViewController: TransferViewInput { + func setCommentInput(isVisible: Bool) { + rootView.commentTextField.isHidden = !isVisible + } + + func didReceiveContinueButton(isReady: Bool) { + rootView.actionButton.set(enabled: isReady) + } -extension SendViewController: SendViewInput { func setInputAccessoryView(visible: Bool) { rootView.amountView.textField.resignFirstResponder() if visible { @@ -142,13 +165,16 @@ extension SendViewController: SendViewInput { } func didBlockUserInteractive(isUserInteractiveAmount: Bool) { - rootView.searchView.isUserInteractionEnabled = false - rootView.selectNetworkView.isUserInteractionEnabled = false - rootView.amountView.selectHandler = nil + rootView.searchView.isUserInteractionEnabled = isUserInteractiveAmount + rootView.selectNetworkView.isUserInteractionEnabled = isUserInteractiveAmount rootView.amountView.textField.isUserInteractionEnabled = isUserInteractiveAmount - rootView.optionsStackView.isHidden = true + rootView.optionsStackView.isHidden = !isUserInteractiveAmount if isUserInteractiveAmount { - rootView.amountView.textField.becomeFirstResponder() + rootView.amountView.selectHandler = { [weak self] in + self?.output.didTapSelectAsset() + } + } else { + rootView.amountView.selectHandler = nil } } @@ -167,6 +193,11 @@ extension SendViewController: SendViewInput { } } + func setCommentViewModel(_ viewModel: InputViewModelProtocol?) { + commentInputViewModel = viewModel + rootView.commentTextField.animatedInputField.text = viewModel?.inputHandler.value + } + func didReceive(selectNetworkViewModel: SelectNetworkViewModel) { rootView.bind(selectNetworkviewModel: selectNetworkViewModel) } @@ -187,21 +218,12 @@ extension SendViewController: SendViewInput { rootView.actionButton.set(loading: true) } - func didStopFeeCalculation() { - rootView.actionButton.set(loading: false) - updateActionButton() - } - - func didStopTipCalculation() { - updateActionButton() - } - - func didReceive(viewModel: RecipientViewModel) { + func didReceive(recipientViewModel viewModel: RecipientViewModel?) { rootView.bind(viewModel: viewModel) } func didReceive(accountScoreViewModel: AccountScoreViewModel?) { - rootView.bind(accountScoreViewModel: accountScoreViewModel) + rootView.accountScoreView.bind(viewModel: accountScoreViewModel) } func didStartLoading() { @@ -210,7 +232,6 @@ extension SendViewController: SendViewInput { func didStopLoading() { rootView.actionButton.set(loading: false) - updateActionButton() } func setHistoryButton(isVisible: Bool) { @@ -226,9 +247,9 @@ extension SendViewController: SendViewInput { } } -extension SendViewController: HiddableBarWhenPushed {} +extension TransferViewController: HiddableBarWhenPushed {} -extension SendViewController: UITextFieldDelegate { +extension TransferViewController: UITextFieldDelegate { func textField( _ textField: UITextField, shouldChangeCharactersIn range: NSRange, @@ -285,7 +306,7 @@ extension SendViewController: UITextFieldDelegate { } } -extension SendViewController: AmountInputAccessoryViewDelegate { +extension TransferViewController: AmountInputAccessoryViewDelegate { func didSelect(on _: AmountInputAccessoryView, percentage: Float) { rootView.amountView.textField.resignFirstResponder() @@ -297,7 +318,7 @@ extension SendViewController: AmountInputAccessoryViewDelegate { } } -extension SendViewController: AmountInputViewModelObserver { +extension TransferViewController: AmountInputViewModelObserver { func amountInputDidChange() { rootView.amountView.inputFieldText = amountInputViewModel?.displayAmount @@ -317,11 +338,11 @@ extension SendViewController: AmountInputViewModelObserver { // MARK: - Localizable -extension SendViewController: Localizable { +extension TransferViewController: Localizable { func applyLocalization() {} } -extension SendViewController: KeyboardViewAdoptable { +extension TransferViewController: KeyboardViewAdoptable { var target: Constraint? { rootView.keyboardAdoptableConstraint } func offsetFromKeyboardWithInset(_: CGFloat) -> CGFloat { @@ -330,3 +351,43 @@ extension SendViewController: KeyboardViewAdoptable { func updateWhileKeyboardFrameChanging(_: CGRect) {} } + +// MARK: - AnimatedTextFieldDelegate + +extension TransferViewController: AnimatedTextFieldDelegate { + func animatedTextFieldShouldReturn(_ textField: SoraUI.AnimatedTextField) -> Bool { + textField.resignFirstResponder() + rootView.commentTextField.backgroundView.set(highlighted: false, animated: true) + return false + } + + func animatedTextField( + _ textField: SoraUI.AnimatedTextField, + shouldChangeCharactersIn range: NSRange, + replacementString string: String + ) -> Bool { + guard let currentViewModel = commentInputViewModel else { + return true + } + + let shouldApply = currentViewModel.inputHandler.didReceiveReplacement(string, for: range) + + if !shouldApply, textField.text != currentViewModel.inputHandler.value { + textField.text = currentViewModel.inputHandler.value + } + + NSObject.cancelPreviousPerformRequests( + withTarget: self, + selector: #selector(updateAmount), + object: nil + ) + perform(#selector(updateComment), with: nil, afterDelay: 0.45) + + return shouldApply + } + + @objc private func updateComment() { + let comment = commentInputViewModel?.inputHandler.normalizedValue + output.updateComment(comment) + } +} diff --git a/fearless/Modules/Transfer/Transfer/TransferViewLayout.swift b/fearless/Modules/Transfer/Transfer/TransferViewLayout.swift new file mode 100644 index 0000000000..fc0a142b16 --- /dev/null +++ b/fearless/Modules/Transfer/Transfer/TransferViewLayout.swift @@ -0,0 +1,22 @@ +import UIKit + +final class TransferViewLayout: UIView { + var locale: Locale = .current { + didSet { + applyLocalization() + } + } + + override init(frame: CGRect) { + super.init(frame: frame) + } + + @available(*, unavailable) + required init?(coder _: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Private methods + + private func applyLocalization() {} +} diff --git a/fearless/Modules/Send/Validators/SendDataValidatingFactory.swift b/fearless/Modules/Transfer/Validators/SendDataValidatingFactory.swift similarity index 86% rename from fearless/Modules/Send/Validators/SendDataValidatingFactory.swift rename to fearless/Modules/Transfer/Validators/SendDataValidatingFactory.swift index 65371f6b5a..540eb33218 100644 --- a/fearless/Modules/Send/Validators/SendDataValidatingFactory.swift +++ b/fearless/Modules/Transfer/Validators/SendDataValidatingFactory.swift @@ -42,7 +42,7 @@ class SendDataValidatingFactory: NSObject { case let .utility(balance): if let balance = balance, let feeAndTip = feeAndTip { - return amount + feeAndTip <= balance + return amount + feeAndTip <= balance && amount > 0 } else { return false } @@ -108,9 +108,6 @@ class SendDataValidatingFactory: NSObject { locale: locale ) }, preservesCondition: { - guard !chainAsset.chain.isEthereum else { - return true - } if sendAllEnabled, canProceedIfViolated { return true } @@ -121,8 +118,7 @@ class SendDataValidatingFactory: NSObject { func destinationExistentialDepositIsNotViolated( willReceived: Decimal, minimumBalance: Decimal, - locale: Locale, - chainAsset: ChainAsset + locale: Locale ) -> DataValidating { WarningConditionViolation(onWarning: { [weak self] _ in guard let view = self?.view else { @@ -132,11 +128,7 @@ class SendDataValidatingFactory: NSObject { self?.basePresentable.presentDestinationExistentialDepositError(from: view, locale: locale) }, preservesCondition: { - guard !chainAsset.chain.isEthereum else { - return true - } - - return willReceived >= minimumBalance + willReceived >= minimumBalance }) } @@ -220,29 +212,4 @@ class SendDataValidatingFactory: NSObject { } } } - - private func minAssetAmount( - originCHainId: ChainModel.Id, - destChainId: ChainModel.Id - ) -> String { - let originKnownChain = Chain(chainId: originCHainId) - let destKnownChain = Chain(chainId: destChainId) - - switch (originKnownChain, destKnownChain) { - case (.kusama, .soraMain): - return "0.05 KSM" - case (.polkadot, .soraMain), (.soraMain, .polkadot): - return "1.1 DOT" - case (.liberland, .soraMain): - return "1.0 LLD" - case (.soraMain, .liberland): - return "1.0 LLD" - case (.soraMain, .acala): - return "1.0 ACA" - case (.acala, .soraMain): - return "56.0 ACA" - default: - return "" - } - } } diff --git a/fearless/Modules/UsernameSetup/UsernameSetupPresenter.swift b/fearless/Modules/UsernameSetup/UsernameSetupPresenter.swift index b366a105e6..65de38ad92 100644 --- a/fearless/Modules/UsernameSetup/UsernameSetupPresenter.swift +++ b/fearless/Modules/UsernameSetup/UsernameSetupPresenter.swift @@ -5,16 +5,19 @@ final class UsernameSetupPresenter { private weak var view: UsernameSetupViewProtocol? private var wireframe: UsernameSetupWireframeProtocol private let flow: AccountCreateFlow + private let ecosystem: AccountCreateEcosystem private var viewModel: InputViewModelProtocol init( wireframe: UsernameSetupWireframeProtocol, flow: AccountCreateFlow, + ecosystem: AccountCreateEcosystem, localizationManager: LocalizationManagerProtocol ) { self.wireframe = wireframe self.flow = flow + self.ecosystem = ecosystem let inputHandling = InputHandler( value: flow.predefinedUsername, @@ -60,7 +63,7 @@ extension UsernameSetupPresenter: UsernameSetupPresenterProtocol { let action = SheetAlertPresentableAction(title: actionTitle) { [weak self] in guard let self = self else { return } let model = UsernameSetupModel(username: username) - self.wireframe.proceed(from: self.view, flow: self.flow, model: model) + self.wireframe.proceed(from: self.view, flow: self.flow, model: model, ecosystem: ecosystem) } let title = R.string.localizable.commonNoScreenshotTitle(preferredLanguages: rLanguages) diff --git a/fearless/Modules/UsernameSetup/UsernameSetupProtocols.swift b/fearless/Modules/UsernameSetup/UsernameSetupProtocols.swift index 38bc03202b..4bd9a891a4 100644 --- a/fearless/Modules/UsernameSetup/UsernameSetupProtocols.swift +++ b/fearless/Modules/UsernameSetup/UsernameSetupProtocols.swift @@ -11,17 +11,22 @@ protocol UsernameSetupPresenterProtocol: AnyObject { } protocol UsernameSetupWireframeProtocol: SheetAlertPresentable { - func proceed(from view: UsernameSetupViewProtocol?, flow: AccountCreateFlow, model: UsernameSetupModel) + func proceed( + from view: UsernameSetupViewProtocol?, + flow: AccountCreateFlow, + model: UsernameSetupModel, + ecosystem: AccountCreateEcosystem + ) } protocol UsernameSetupViewFactoryProtocol: AnyObject { - static func createViewForOnboarding(flow: AccountCreateFlow) -> UsernameSetupViewProtocol? - static func createViewForAdding() -> UsernameSetupViewProtocol? - static func createViewForSwitch() -> UsernameSetupViewProtocol? + static func createViewForOnboarding(flow: AccountCreateFlow, ecosystem: AccountCreateEcosystem) -> UsernameSetupViewProtocol? + static func createViewForAdding(ecosystem: AccountCreateEcosystem) -> UsernameSetupViewProtocol? + static func createViewForSwitch(ecosystem: AccountCreateEcosystem) -> UsernameSetupViewProtocol? } extension UsernameSetupViewFactoryProtocol { - static func createViewForOnboarding() -> UsernameSetupViewProtocol? { - Self.createViewForOnboarding(flow: .wallet) + static func createViewForOnboarding(ecosystem: AccountCreateEcosystem) -> UsernameSetupViewProtocol? { + Self.createViewForOnboarding(flow: .wallet, ecosystem: ecosystem) } } diff --git a/fearless/Modules/UsernameSetup/UsernameSetupViewController.swift b/fearless/Modules/UsernameSetup/UsernameSetupViewController.swift index 331ba04a70..c00fc1570d 100644 --- a/fearless/Modules/UsernameSetup/UsernameSetupViewController.swift +++ b/fearless/Modules/UsernameSetup/UsernameSetupViewController.swift @@ -51,10 +51,6 @@ final class UsernameSetupViewController: UIViewController, ViewHolder { setupKeyboardHandler() } - override func viewDidAppear(_ animated: Bool) { - super.viewDidAppear(animated) - } - override func viewDidDisappear(_ animated: Bool) { super.viewDidDisappear(animated) clearKeyboardHandler() diff --git a/fearless/Modules/UsernameSetup/UsernameSetupViewFactory.swift b/fearless/Modules/UsernameSetup/UsernameSetupViewFactory.swift index 3c78c9bb09..5fa8a282e3 100644 --- a/fearless/Modules/UsernameSetup/UsernameSetupViewFactory.swift +++ b/fearless/Modules/UsernameSetup/UsernameSetupViewFactory.swift @@ -3,29 +3,38 @@ import SoraFoundation import SoraKeystore final class UsernameSetupViewFactory: UsernameSetupViewFactoryProtocol { - static func createViewForOnboarding(flow: AccountCreateFlow = .wallet) -> UsernameSetupViewProtocol? { + static func createViewForOnboarding( + flow: AccountCreateFlow = .wallet, + ecosystem: AccountCreateEcosystem + ) -> UsernameSetupViewProtocol? { let wireframe = UsernameSetupWireframe() - return createView(for: wireframe, flow: flow) + return createView(for: wireframe, flow: flow, ecosystem: ecosystem) } - static func createViewForAdding() -> UsernameSetupViewProtocol? { + static func createViewForAdding( + ecosystem: AccountCreateEcosystem + ) -> UsernameSetupViewProtocol? { let wireframe = AddAccount.UsernameSetupWireframe() - return createView(for: wireframe) + return createView(for: wireframe, ecosystem: ecosystem) } - static func createViewForSwitch() -> UsernameSetupViewProtocol? { + static func createViewForSwitch( + ecosystem: AccountCreateEcosystem + ) -> UsernameSetupViewProtocol? { let wireframe = SwitchAccount.UsernameSetupWireframe() - return createView(for: wireframe) + return createView(for: wireframe, ecosystem: ecosystem) } private static func createView( for wireframe: UsernameSetupWireframeProtocol, - flow: AccountCreateFlow = .wallet + flow: AccountCreateFlow = .wallet, + ecosystem: AccountCreateEcosystem ) -> UsernameSetupViewProtocol? { let presenter = UsernameSetupPresenter( wireframe: wireframe, flow: flow, + ecosystem: ecosystem, localizationManager: LocalizationManager.shared ) let view = UsernameSetupViewController(presenter: presenter, localizationManager: LocalizationManager.shared) diff --git a/fearless/Modules/UsernameSetup/UsernameSetupWireframe.swift b/fearless/Modules/UsernameSetup/UsernameSetupWireframe.swift index f5f5e980f2..0b65e0bd4e 100644 --- a/fearless/Modules/UsernameSetup/UsernameSetupWireframe.swift +++ b/fearless/Modules/UsernameSetup/UsernameSetupWireframe.swift @@ -4,9 +4,11 @@ final class UsernameSetupWireframe: UsernameSetupWireframeProtocol { func proceed( from view: UsernameSetupViewProtocol?, flow: AccountCreateFlow, - model: UsernameSetupModel + model: UsernameSetupModel, + ecosystem: AccountCreateEcosystem ) { guard let accountCreation = AccountCreateViewFactory.createViewForOnboarding( + ecosystem: ecosystem, model: model, flow: flow ) else { diff --git a/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsRouter.swift b/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsRouter.swift index b283b0e263..042c8d5463 100644 --- a/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsRouter.swift +++ b/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsRouter.swift @@ -6,7 +6,7 @@ final class WalletConnectActiveSessionsRouter: WalletConnectActiveSessionsRouter _ session: Session, view: ControllerBackedProtocol? ) { - let module = WalletConnectProposalAssembly.configureModule(status: .active(session)) + let module = WalletConnectProposalAssembly.configureModule(status: .active(.walletConnect(session))) guard let controller = module?.view.controller else { return } @@ -17,7 +17,13 @@ final class WalletConnectActiveSessionsRouter: WalletConnectActiveSessionsRouter output: ScanQRModuleOutput, view: ControllerBackedProtocol? ) { - let module = ScanQRAssembly.configureModule(moduleOutput: output, matchers: [ScanQRAssembly.wcSchemeMatcher]) + let module = ScanQRAssembly.configureModule( + moduleOutput: output, + matchers: [ + ScanQRAssembly.wcSchemeMatcher, + ScanQRAssembly.tonConnectMatcher + ] + ) guard let controller = module?.view.controller else { return } diff --git a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationAssembly.swift b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationAssembly.swift index c8d3185b32..6c474efed1 100644 --- a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationAssembly.swift +++ b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationAssembly.swift @@ -7,10 +7,20 @@ final class WalletConnectConfirmationAssembly { ) -> WalletConnectConfirmationModuleCreationResult? { let localizationManager = LocalizationManager.shared + guard + let accountResponse = inputData.wallet.fetch(for: inputData.chain.accountRequest()), + let bocFactory = try? ServiceAssembly.shared.tonBocFactory( + metaId: inputData.wallet.metaId, + accountResponse: accountResponse + ) + else { + return nil + } let interactor = WalletConnectConfirmationInteractor( walletConnect: WalletConnectServiceImpl.shared, inputData: inputData, - signer: WalletConnectSignerImpl(wallet: inputData.wallet) + signer: WalletConnectSignerImpl(wallet: inputData.wallet), + tonConnectService: ServiceAssembly.shared.tonConnectService() ) let router = WalletConnectConfirmationRouter() diff --git a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationInputData.swift b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationInputData.swift index 7fc9d8053b..ad8a1a1232 100644 --- a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationInputData.swift +++ b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationInputData.swift @@ -3,10 +3,33 @@ import SSFModels import WalletConnectSign struct WalletConnectConfirmationInputData { + enum Variant { + case walletConnect( + resuest: Request, + session: Session, + method: WalletConnectMethod + ) + case tonJsBridge( + invocationId: String, + dapp: TonDapp, + request: TonConnect.AppRequest, + moduleOutput: WalletConnectSessionModuleOutput? + ) + case tonConnect( + request: TonConnect.AppRequest, + app: TonConnectApp + ) + } + let wallet: MetaAccountModel let chain: ChainModel - let resuest: Request - let session: Session - let method: WalletConnectMethod + let variant: Variant let payload: WalletConnectPayload + + var moduleOutput: WalletConnectSessionModuleOutput? { + switch variant { + case .walletConnect, .tonConnect: return nil + case let .tonJsBridge(_, _, _, moduleOutput): return moduleOutput + } + } } diff --git a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationInteractor.swift b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationInteractor.swift index 06fcc52cc5..5753c4de05 100644 --- a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationInteractor.swift +++ b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationInteractor.swift @@ -1,4 +1,6 @@ import UIKit +import WalletConnectSign +import SSFTransferService protocol WalletConnectConfirmationInteractorOutput: AnyObject {} @@ -10,41 +12,101 @@ final class WalletConnectConfirmationInteractor { private let walletConnect: WalletConnectService private let inputData: WalletConnectConfirmationInputData private let signer: WalletConnectSigner + private let tonConnectService: TonConnectService init( walletConnect: WalletConnectService, inputData: WalletConnectConfirmationInputData, - signer: WalletConnectSigner + signer: WalletConnectSigner, + tonConnectService: TonConnectService ) { self.walletConnect = walletConnect self.inputData = inputData self.signer = signer + self.tonConnectService = tonConnectService } -} - -// MARK: - WalletConnectConfirmationInteractorInput -extension WalletConnectConfirmationInteractor: WalletConnectConfirmationInteractorInput { - func reject() async throws { - let signDecision: WalletConnectSignDecision = .rejected(request: inputData.resuest, error: .userRejected) - try await walletConnect.submit(signDecision: signDecision) - } + // MARK: - Private methods - func approve() async throws -> String? { + private func approveWalletConnect( + resuest: Request, + method: WalletConnectMethod + ) async throws -> String? { let signature = try await signer.sign( params: inputData.payload.payload, chain: inputData.chain, - method: inputData.method + method: method + ) + let signDecision: WalletConnectSignDecision = .signed( + request: resuest, + signature: signature ) - let signDecision: WalletConnectSignDecision = .signed(request: inputData.resuest, signature: signature) try await walletConnect.submit(signDecision: signDecision) - guard case .ethereumSendTransaction = inputData.method else { + guard case .ethereumSendTransaction = method else { return nil } return try? signature.get(String.self) } + private func approveTonTonJsBridge( + request: TonConnect.AppRequest + ) async throws -> String { + guard let parameter = request.params.first else { + throw ConvenienceError(error: "Missing Ton params") + } + let boc = try await tonConnectService.approveTonJsBridgeSend( + wallet: inputData.wallet, + parameter: parameter + ) + return boc + } + + private func confirmTonConnect( + request: TonConnect.AppRequest, + app: TonConnectApp + ) async throws { + guard let parameter = request.params.first else { + throw ConvenienceError(error: "Missing Ton params") + } + + try await tonConnectService.confirmTonConnectRequest( + wallet: inputData.wallet, + appRequest: request, + app: app, + parameter: parameter + ) + } +} + +// MARK: - WalletConnectConfirmationInteractorInput + +extension WalletConnectConfirmationInteractor: WalletConnectConfirmationInteractorInput { + func approve() async throws -> String? { + switch inputData.variant { + case let .walletConnect(request, _, method): + return try await approveWalletConnect( + resuest: request, + method: method + ) + case let .tonJsBridge(_, _, request, _): + return try await approveTonTonJsBridge(request: request) + case let .tonConnect(request: request, app: app): + try await confirmTonConnect(request: request, app: app) + return nil + } + } + + func cancelTonConnect( + appRequest: TonConnect.AppRequest, + app: TonConnectApp + ) async throws { + try await tonConnectService.cancelRequest( + appRequest: appRequest, + app: app + ) + } + func setup(with output: WalletConnectConfirmationInteractorOutput) { self.output = output } diff --git a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationPresenter.swift b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationPresenter.swift index 674c6c8e3f..81fb0b414b 100644 --- a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationPresenter.swift +++ b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationPresenter.swift @@ -7,13 +7,17 @@ protocol WalletConnectConfirmationViewInput: ControllerBackedProtocol, LoadableV protocol WalletConnectConfirmationInteractorInput: AnyObject { func setup(with output: WalletConnectConfirmationInteractorOutput) - func reject() async throws func approve() async throws -> String? + func cancelTonConnect( + appRequest: TonConnect.AppRequest, + app: TonConnectApp + ) async throws } final class WalletConnectConfirmationPresenter { // MARK: Private properties + private weak var moduleOutput: WalletConnectSessionModuleOutput? private weak var view: WalletConnectConfirmationViewInput? private let router: WalletConnectConfirmationRouterInput private let interactor: WalletConnectConfirmationInteractorInput @@ -30,6 +34,7 @@ final class WalletConnectConfirmationPresenter { router: WalletConnectConfirmationRouterInput, localizationManager: LocalizationManagerProtocol ) { + moduleOutput = inputData.moduleOutput self.inputData = inputData self.viewModelFactory = viewModelFactory self.interactor = interactor @@ -66,6 +71,84 @@ final class WalletConnectConfirmationPresenter { locale: selectedLocale ) } + + private func approveWalletConnect() async throws { + let hash = try await interactor.approve() + Task { @MainActor in + showAllDone(hash: hash) + view?.didStopLoading() + } + } + + private func approveTonJsBridge( + requestId: String, + invocationId: String + ) async throws { + guard let boc = try await interactor.approve() else { + throw ConvenienceError(error: "Send boc ton connect error") + } + let response: TonConnect.SendTransactionResponse = .success( + TonConnect.SendTransactionResponseSuccess( + result: boc, + id: requestId + ) + ) + moduleOutput?.tonConnectSend( + dessision: .sent( + invocationId: invocationId, + response: response + ) + ) + Task { @MainActor in + router.dismiss(view: view) + view?.controller.onInteractionDismiss() + } + } + + private func approveTonConnect() async throws { + _ = try await interactor.approve() + Task { @MainActor in + router.dismiss(view: view) + view?.controller.onInteractionDismiss() + } + } + + private func handleWalletConnect(error: Error) { + Task { @MainActor in + view?.didStopLoading() + show(error: error) + } + } + + private func handleTonJsBridge( + error: Error, + invocationId: String + ) { + moduleOutput?.tonConnectSend( + dessision: .error( + invocationId: invocationId, + error: .unknownError + ) + ) + Task { @MainActor in + view?.didStopLoading() + show(error: error) + } + } + + private func cancelTonConnect( + appRequest: TonConnect.AppRequest, + app: TonConnectApp + ) async { + do { + try await interactor.cancelTonConnect( + appRequest: appRequest, + app: app + ) + } catch { + show(error: error) + } + } } // MARK: - WalletConnectConfirmationViewOutput @@ -83,15 +166,26 @@ extension WalletConnectConfirmationPresenter: WalletConnectConfirmationViewOutpu view?.didStartLoading() Task { do { - let hash = try await interactor.approve() - await MainActor.run { - showAllDone(hash: hash) - view?.didStopLoading() + switch inputData.variant { + case .walletConnect: + try await approveWalletConnect() + case let .tonJsBridge(invocationId, _, request, _): + try await approveTonJsBridge(requestId: request.id, invocationId: invocationId) + case let .tonConnect(request: request, app: app): + try await approveTonConnect() } } catch { - await MainActor.run { - view?.didStopLoading() - show(error: error) + switch inputData.variant { + case .walletConnect: + handleWalletConnect(error: error) + case let .tonJsBridge(invocationId, _, _, _): + handleTonJsBridge( + error: error, + invocationId: invocationId + ) + case let .tonConnect(request: request, app: app): + handleWalletConnect(error: error) + await cancelTonConnect(appRequest: request, app: app) } } } diff --git a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationViewModelFactory.swift b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationViewModelFactory.swift index 7f6c276030..9abe46d6b9 100644 --- a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationViewModelFactory.swift +++ b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationViewModelFactory.swift @@ -1,13 +1,6 @@ -// -// WalletConnectConfirmationViewModelFactory.swift -// fearless -// -// Created by Soramitsu on 01.09.2023. -// Copyright © 2023 Soramitsu. All rights reserved. -// - import Foundation import UIKit +import WalletConnectSign protocol WalletConnectConfirmationViewModelFactory { func buildViewModel() -> WalletConnectConfirmationViewModel @@ -27,30 +20,82 @@ final class WalletConnectConfirmationViewModelFactoryImpl: WalletConnectConfirma } func buildViewModel() -> WalletConnectConfirmationViewModel { + switch inputData.variant { + case let .walletConnect(request, session, method): + return buildWalletConnectViewModel( + resuest: request, + session: session, + method: method + ) + case let .tonJsBridge(_, dapp, request, moduleOutput): + return buildTonConnectViewModel( + appName: dapp.name, + appHost: dapp.url.host ?? "", + request: request + ) + case let .tonConnect(request: request, app: app): + return buildTonConnectViewModel( + appName: app.appUrl.absoluteString, + appHost: app.appUrl.host ?? "", + request: request + ) + } + } + + private func buildWalletConnectViewModel( + resuest _: Request, + session: Session, + method: WalletConnectMethod + ) -> WalletConnectConfirmationViewModel { let originShadowColor = HexColorConverter.hexStringToUIColor( hex: inputData.chain.utilityAssets().first?.color )?.cgColor let symbolViewModel = SymbolViewModel( - symbolViewModel: RemoteImageViewModel(url: inputData.chain.icon), + iconViewModel: RemoteImageViewModel(url: inputData.chain.icon), shadowColor: originShadowColor ) - let dAppUrlString = inputData.session.peer.url + let dAppUrlString = session.peer.url let dAppUrl = URL(string: dAppUrlString) let host = dAppUrl?.host ?? dAppUrlString return WalletConnectConfirmationViewModel( symbolViewModel: symbolViewModel, - method: inputData.method.rawValue, + method: method.rawValue, amount: nil, walletName: inputData.wallet.name, - dApp: inputData.session.peer.name, + dApp: session.peer.name, host: host, chain: inputData.chain.name, rawData: rawDataAttributed() ) } + private func buildTonConnectViewModel( + appName: String, + appHost: String, + request: TonConnect.AppRequest + ) -> WalletConnectConfirmationViewModel { + let originShadowColor = HexColorConverter.hexStringToUIColor( + hex: inputData.chain.utilityAssets().first?.color + )?.cgColor + let symbolViewModel = SymbolViewModel( + iconViewModel: RemoteImageViewModel(url: inputData.chain.icon), + shadowColor: originShadowColor + ) + + return WalletConnectConfirmationViewModel( + symbolViewModel: symbolViewModel, + method: request.method.rawValue, + amount: nil, + walletName: inputData.wallet.name, + dApp: appName, + host: appHost, + chain: inputData.chain.name, + rawData: rawDataAttributed() + ) + } + // MARK: - Private methods private func rawDataAttributed() -> NSAttributedString { diff --git a/fearless/Modules/WalletConnectProposal/Model/SessionStatus.swift b/fearless/Modules/WalletConnectProposal/Model/SessionStatus.swift new file mode 100644 index 0000000000..91b9e62d3c --- /dev/null +++ b/fearless/Modules/WalletConnectProposal/Model/SessionStatus.swift @@ -0,0 +1,63 @@ +import Foundation +import WalletConnectSign + +enum SessionStatus { + case proposal(ConnectProposal) + case active(ActionConnect) + + var proposal: Session.Proposal? { + switch self { + case let .proposal(proposal): + switch proposal { + case let .walletConnect(proposal): + return proposal + case .tonJsBridge, .tonConnect: + return nil + } + case .active: + return nil + } + } + + var tonManifest: TonConnectManifest? { + switch self { + case let .proposal(proposal): + switch proposal { + case .walletConnect: + return nil + case let .tonJsBridge(manifest, _, _, _): + return manifest + case let .tonConnect(manifest, _): + return manifest + } + case .active: + return nil + } + } + + var session: Session? { + switch self { + case .proposal: + return nil + case let .active(session): + switch session { + case let .walletConnect(session): + return session + } + } + } + + var moduleOutput: WalletConnectProposalModuleOutput? { + switch self { + case let .proposal(proposal): + switch proposal { + case .walletConnect, .tonConnect: + return nil + case let .tonJsBridge(_, _, _, delegate): + return delegate + } + case .active: + return nil + } + } +} diff --git a/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModel.swift b/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModel.swift index cef782f931..41f3f19954 100644 --- a/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModel.swift +++ b/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModel.swift @@ -56,6 +56,16 @@ enum WalletConnectProposalCellModel { self = .optionalExpandable(viewModel) } + func deselectWallet() -> Self { + switch self { + case let .wallet(walletViewModel): + var viewModel = walletViewModel + viewModel.isSelected = false + return .wallet(viewModel) + default: return self + } + } + struct DetailsViewModel { let title: String let subtitle: String @@ -64,26 +74,46 @@ enum WalletConnectProposalCellModel { struct ExpandableViewModel { let cellTitle: String - let chain: String - let methods: String - let events: String + + let title: String + + let title2: String? + let subtitle2: String? + + let title3: String? + let subtitle3: String? + let isExpanded: Bool func toggle() -> Self { ExpandableViewModel( cellTitle: cellTitle, - chain: chain, - methods: methods, - events: events, + title: title, + title2: title2, + subtitle2: subtitle2, + title3: title3, + subtitle3: subtitle3, isExpanded: !isExpanded ) } + + func isVisibleSection2() -> Bool { + [title2?.isNotEmpty, subtitle2?.isNotEmpty] + .compactMap { $0 } + .allSatisfy { $0 } + } + + func isVisibleSection3() -> Bool { + [title3?.isNotEmpty, subtitle3?.isNotEmpty] + .compactMap { $0 } + .allSatisfy { $0 } + } } struct WalletViewModel { let metaId: String let walletName: String - let isSelected: Bool + var isSelected: Bool func toggle() -> Self { WalletViewModel( diff --git a/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModelFactory.swift b/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModelFactory.swift index f29849ced2..0a0a7e1235 100644 --- a/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModelFactory.swift +++ b/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModelFactory.swift @@ -3,15 +3,7 @@ import WalletConnectSign import SSFModels protocol WalletConnectProposalViewModelFactory { - func buildProposalSessionViewModel( - proposal: Session.Proposal, - chains: [ChainModel], - wallets: [MetaAccountModel], - locale: Locale - ) throws -> WalletConnectProposalViewModel - - func buildActiveSessionViewModel( - session: Session, + func buildViewModel( chains: [ChainModel], wallets: [MetaAccountModel], locale: Locale @@ -25,23 +17,139 @@ protocol WalletConnectProposalViewModelFactory { final class WalletConnectProposalViewModelFactoryImpl: WalletConnectProposalViewModelFactory { private let walletConnectModelFactory: WalletConnectModelFactory - private let status: WalletConnectProposalPresenter.SessionStatus + private let status: SessionStatus init( - status: WalletConnectProposalPresenter.SessionStatus, + status: SessionStatus, walletConnectModelFactory: WalletConnectModelFactory ) { self.status = status self.walletConnectModelFactory = walletConnectModelFactory } - func buildProposalSessionViewModel( - proposal: Session.Proposal, + func buildViewModel( chains: [ChainModel], wallets: [MetaAccountModel], locale: Locale ) throws -> WalletConnectProposalViewModel { - let dApp = createDAppViewModel(from: proposal) + switch status { + case let .proposal(connectProposal): + switch connectProposal { + case .walletConnect: + return try buildWalletConenctProposalSessionViewModel( + chains: chains, + wallets: wallets, + locale: locale + ) + case .tonJsBridge, .tonConnect: + return try buildTonConenctProposalSessionViewModel( + chains: chains, + wallets: wallets, + locale: locale + ) + } + case let .active(actionConnect): + switch actionConnect { + case .walletConnect: + return try buildWalletConnectActiveSessionViewModel( + chains: chains, + wallets: wallets, + locale: locale + ) + } + } + } + + func didTapOn( + _ indexPath: IndexPath, + cells: [WalletConnectProposalCellModel] + ) -> WalletConnectProposalViewModel? { + guard let viewModel = cells[safe: indexPath.row] else { + return nil + } + + var updatedCells = cells + switch viewModel { + case .dAppInfo, .requiredNetworks, .optionalNetworks: + return nil + case let .requiredExpandable(viewModel): + let toggledViewModel = viewModel.toggle() + updatedCells[indexPath.row] = .requiredExpandable(toggledViewModel) + case let .optionalExpandable(viewModel): + let toggledViewModel = viewModel.toggle() + updatedCells[indexPath.row] = .optionalExpandable(toggledViewModel) + case let .wallet(viewModel): + switch status { + case let .proposal(connectProposal): + switch connectProposal { + case .walletConnect: + let toggledViewModel = viewModel.toggle() + updatedCells[indexPath.row] = .wallet(toggledViewModel) + case .tonJsBridge, .tonConnect: + updatedCells = cells.map { $0.deselectWallet() } + let toggledViewModel = viewModel.toggle() + updatedCells[indexPath.row] = .wallet(toggledViewModel) + } + case .active: + break + } + } + + return WalletConnectProposalViewModel( + indexPath: indexPath, + cells: updatedCells, + expiryDate: nil + ) + } + + // MARK: - Private methods + + private func createDAppViewModel() -> WalletConnectProposalCellModel.DetailsViewModel { + switch status { + case let .proposal(proposal): + switch proposal { + case let .walletConnect(proposal): + return WalletConnectProposalCellModel.DetailsViewModel( + title: proposal.proposer.name, + subtitle: URL(string: proposal.proposer.url)?.host ?? proposal.proposer.url, + icon: RemoteImageViewModel(string: proposal.proposer.icons.first) + ) + case let .tonJsBridge(manifest, _, _, _): + return WalletConnectProposalCellModel.DetailsViewModel( + title: manifest.name, + subtitle: manifest.host, + icon: RemoteImageViewModel(url: manifest.iconUrl) + ) + case let .tonConnect(manifest, _): + return WalletConnectProposalCellModel.DetailsViewModel( + title: manifest.name, + subtitle: manifest.host, + icon: RemoteImageViewModel(url: manifest.iconUrl) + ) + } + case let .active(session): + switch session { + case let .walletConnect(session): + return WalletConnectProposalCellModel.DetailsViewModel( + title: session.peer.name, + subtitle: URL(string: session.peer.url)?.host ?? session.peer.url, + icon: RemoteImageViewModel(string: session.peer.url) + ) + } + } + } + + // MARK: - Private wallet connect methods + + func buildWalletConenctProposalSessionViewModel( + chains: [ChainModel], + wallets: [MetaAccountModel], + locale: Locale + ) throws -> WalletConnectProposalViewModel { + guard let proposal = status.proposal else { + throw ConvenienceError(error: "Missing wallet connect proposal") + } + let dApp = createDAppViewModel() let requiredNetworks = try createNetworksViewModel( from: proposal.requiredNamespaces, @@ -60,13 +168,15 @@ final class WalletConnectProposalViewModelFactoryImpl: WalletConnectProposalView let requiredExpandable = try createProposalPermissionsViewModel( from: proposal.requiredNamespaces, chains: chains, - cellTitle: R.string.localizable.reviewRequiredPermissions(preferredLanguages: locale.rLanguages) + cellTitle: R.string.localizable.reviewRequiredPermissions(preferredLanguages: locale.rLanguages), + locale: locale ) let optionalExpandable = try? createProposalPermissionsViewModel( from: proposal.optionalNamespaces, chains: chains, - cellTitle: R.string.localizable.reviewOptionalPermissions(preferredLanguages: locale.rLanguages) + cellTitle: R.string.localizable.reviewOptionalPermissions(preferredLanguages: locale.rLanguages), + locale: locale ) let walletCellViewModels = createWalletsCellModels(from: wallets, forActiveSession: false) @@ -88,22 +198,21 @@ final class WalletConnectProposalViewModelFactoryImpl: WalletConnectProposalView ) } - func buildActiveSessionViewModel( - session: Session, + func buildWalletConnectActiveSessionViewModel( chains: [ChainModel], wallets: [MetaAccountModel], locale: Locale ) throws -> WalletConnectProposalViewModel { - let dApp = WalletConnectProposalCellModel.DetailsViewModel( - title: session.peer.name, - subtitle: URL(string: session.peer.url)?.host ?? session.peer.url, - icon: RemoteImageViewModel(string: session.peer.url) - ) + guard let session = status.session else { + throw ConvenienceError(error: "Missing wallet connect session") + } + let dApp = createDAppViewModel() guard let requiredExpandable = try createSessionPermissionsViewModel( from: session.namespaces, chains: chains, - cellTitle: R.string.localizable.reviewPermissions(preferredLanguages: locale.rLanguages) + cellTitle: R.string.localizable.reviewPermissions(preferredLanguages: locale.rLanguages), + locale: locale ) else { throw AutoNamespacesError.requiredChainsNotSatisfied } @@ -133,51 +242,6 @@ final class WalletConnectProposalViewModelFactoryImpl: WalletConnectProposalView ) } - func didTapOn( - _ indexPath: IndexPath, - cells: [WalletConnectProposalCellModel] - ) -> WalletConnectProposalViewModel? { - guard let viewModel = cells[safe: indexPath.row] else { - return nil - } - - var updatedCells = cells - switch viewModel { - case .dAppInfo, .requiredNetworks, .optionalNetworks: - return nil - case let .requiredExpandable(viewModel): - let toggledViewModel = viewModel.toggle() - updatedCells[indexPath.row] = .requiredExpandable(toggledViewModel) - case let .optionalExpandable(viewModel): - let toggledViewModel = viewModel.toggle() - updatedCells[indexPath.row] = .optionalExpandable(toggledViewModel) - case let .wallet(viewModel): - guard case .proposal = status else { - return nil - } - let toggledViewModel = viewModel.toggle() - updatedCells[indexPath.row] = .wallet(toggledViewModel) - } - - return WalletConnectProposalViewModel( - indexPath: indexPath, - cells: updatedCells, - expiryDate: nil - ) - } - - // MARK: - Private methods - - private func createDAppViewModel( - from proposal: Session.Proposal - ) -> WalletConnectProposalCellModel.DetailsViewModel { - WalletConnectProposalCellModel.DetailsViewModel( - title: proposal.proposer.name, - subtitle: URL(string: proposal.proposer.url)?.host ?? proposal.proposer.url, - icon: RemoteImageViewModel(string: proposal.proposer.icons.first) - ) - } - private func createNetworksViewModel( from namespaces: [String: ProposalNamespace]?, chains: [ChainModel], @@ -212,7 +276,8 @@ final class WalletConnectProposalViewModelFactoryImpl: WalletConnectProposalView private func createProposalPermissionsViewModel( from namespaces: [String: ProposalNamespace]?, chains: [ChainModel], - cellTitle: String + cellTitle: String, + locale: Locale ) throws -> WalletConnectProposalCellModel.ExpandableViewModel? { guard let namespaces = namespaces else { return nil @@ -246,9 +311,11 @@ final class WalletConnectProposalViewModelFactoryImpl: WalletConnectProposalView return WalletConnectProposalCellModel.ExpandableViewModel( cellTitle: cellTitle, - chain: resolvedChains.map { $0.name }.joined(separator: ", "), - methods: methods, - events: events, + title: resolvedChains.map { $0.name }.joined(separator: ", "), + title2: R.string.localizable.commonMethods(preferredLanguages: locale.rLanguages), + subtitle2: methods, + title3: R.string.localizable.commonEvents(preferredLanguages: locale.rLanguages), + subtitle3: events, isExpanded: false ) } @@ -256,7 +323,8 @@ final class WalletConnectProposalViewModelFactoryImpl: WalletConnectProposalView private func createSessionPermissionsViewModel( from namespaces: [String: SessionNamespace], chains: [ChainModel], - cellTitle: String + cellTitle: String, + locale: Locale ) throws -> WalletConnectProposalCellModel.ExpandableViewModel? { let blockchains = namespaces .map { $0.value } @@ -283,9 +351,11 @@ final class WalletConnectProposalViewModelFactoryImpl: WalletConnectProposalView return WalletConnectProposalCellModel.ExpandableViewModel( cellTitle: cellTitle, - chain: resolvedChains.map { $0.name }.joined(separator: ", "), - methods: methods, - events: events, + title: resolvedChains.map { $0.name }.joined(separator: ", "), + title2: R.string.localizable.commonMethods(preferredLanguages: locale.rLanguages), + subtitle2: methods, + title3: R.string.localizable.commonEvents(preferredLanguages: locale.rLanguages), + subtitle3: events, isExpanded: false ) } @@ -324,4 +394,52 @@ final class WalletConnectProposalViewModelFactoryImpl: WalletConnectProposalView } return wallet } + + // MARK: - Private ton connect methods + + func buildTonConenctProposalSessionViewModel( + chains: [ChainModel], + wallets: [MetaAccountModel], + locale: Locale + ) throws -> WalletConnectProposalViewModel { + guard + let manifest = status.tonManifest, + let tonChain = chains.first(where: { $0.ecosystem == .ton }) + else { + throw ConvenienceError(error: "Missing wallet connect proposal") + } + let dApp = createDAppViewModel() + + let requiredNetworks = WalletConnectProposalCellModel.DetailsViewModel( + title: R.string.localizable.requiredNetworks(preferredLanguages: locale.rLanguages), + subtitle: tonChain.name, + icon: RemoteImageViewModel(url: tonChain.icon) + ) + + let walletCellViewModels = createWalletsCellModels(from: wallets, forActiveSession: false) + + let requiredExpandableViewModel = WalletConnectProposalCellModel.ExpandableViewModel( + cellTitle: R.string.localizable.tonConnectAlertTitle(preferredLanguages: locale.rLanguages), + title: R.string.localizable.tonConnectAlertSubtitle(preferredLanguages: locale.rLanguages), + title2: R.string.localizable.tonConnectAlertDescription(preferredLanguages: locale.rLanguages), + subtitle2: manifest.url.absoluteString, + title3: nil, + subtitle3: nil, + isExpanded: false + ) + + let infoCells = [ + WalletConnectProposalCellModel.dAppInfo(dApp), + WalletConnectProposalCellModel(requiredNetworksViewModel: requiredNetworks), + WalletConnectProposalCellModel(requiredExpandableViewModel: requiredExpandableViewModel) + ].compactMap { $0 } + + let cells = [infoCells, walletCellViewModels].reduce([], +) + + return WalletConnectProposalViewModel( + indexPath: nil, + cells: cells, + expiryDate: nil + ) + } } diff --git a/fearless/Modules/WalletConnectProposal/WalletConnectProposalAssembly.swift b/fearless/Modules/WalletConnectProposal/WalletConnectProposalAssembly.swift index f24eac613d..b2d686ac74 100644 --- a/fearless/Modules/WalletConnectProposal/WalletConnectProposalAssembly.swift +++ b/fearless/Modules/WalletConnectProposal/WalletConnectProposalAssembly.swift @@ -5,7 +5,7 @@ import RobinHood final class WalletConnectProposalAssembly { static func configureModule( - status: WalletConnectProposalPresenter.SessionStatus + status: SessionStatus ) -> WalletConnectProposalModuleCreationResult? { let localizationManager = LocalizationManager.shared @@ -20,7 +20,8 @@ final class WalletConnectProposalAssembly { walletConnect: WalletConnectServiceImpl.shared, walletRepository: AnyDataProviderRepository(accountRepository), chainRepository: AnyDataProviderRepository(chainRepository), - operationQueue: OperationManagerFacade.sharedDefaultQueue + operationQueue: OperationManagerFacade.sharedDefaultQueue, + tonConnectService: ServiceAssembly.shared.tonConnectService() ) let router = WalletConnectProposalRouter() diff --git a/fearless/Modules/WalletConnectProposal/WalletConnectProposalExpandableTableCell.swift b/fearless/Modules/WalletConnectProposal/WalletConnectProposalExpandableTableCell.swift index 6037ef2652..838b72810d 100644 --- a/fearless/Modules/WalletConnectProposal/WalletConnectProposalExpandableTableCell.swift +++ b/fearless/Modules/WalletConnectProposal/WalletConnectProposalExpandableTableCell.swift @@ -57,6 +57,7 @@ final class WalletConnectProposalExpandableTableCell: UITableViewCell { let label = UILabel() label.font = .h4Title label.textColor = R.color.colorStrokeGray() + label.numberOfLines = 0 return label }() @@ -88,12 +89,6 @@ final class WalletConnectProposalExpandableTableCell: UITableViewCell { return label }() - var locale: Locale = .current { - didSet { - applyLocalization() - } - } - override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) backgroundColor = R.color.colorBlack19() @@ -109,12 +104,17 @@ final class WalletConnectProposalExpandableTableCell: UITableViewCell { func bind(viewModel: WalletConnectProposalCellModel.ExpandableViewModel) { visibleTitle.text = viewModel.cellTitle - chainNameLabel.text = viewModel.chain - methodsLabel.text = viewModel.methods - eventsLabel.text = viewModel.events + chainNameLabel.text = viewModel.title - eventsTitleLabel.isHidden = viewModel.events.isEmpty - eventsLabel.isHidden = viewModel.events.isEmpty + methodsTitleLabel.text = viewModel.title2 + methodsLabel.text = viewModel.subtitle2 + methodsTitleLabel.isHidden = !viewModel.isVisibleSection2() + methodsLabel.isHidden = !viewModel.isVisibleSection3() + + eventsTitleLabel.text = viewModel.title3 + eventsLabel.text = viewModel.subtitle3 + eventsTitleLabel.isHidden = !viewModel.isVisibleSection3() + eventsLabel.isHidden = !viewModel.isVisibleSection3() expandableBackground.isHidden = !viewModel.isExpanded expandableAccesoryImageView.image = viewModel.isExpanded ? R.image.basicMinus() : R.image.basicPlus() @@ -163,9 +163,4 @@ final class WalletConnectProposalExpandableTableCell: UITableViewCell { expandableContentStack.setCustomSpacing(UIConstants.bigOffset, after: methodsLabel) expandableContentStack.setCustomSpacing(UIConstants.minimalOffset, after: eventsTitleLabel) } - - private func applyLocalization() { - methodsTitleLabel.text = R.string.localizable.commonMethods(preferredLanguages: locale.rLanguages) - eventsTitleLabel.text = R.string.localizable.commonEvents(preferredLanguages: locale.rLanguages) - } } diff --git a/fearless/Modules/WalletConnectProposal/WalletConnectProposalInteractor.swift b/fearless/Modules/WalletConnectProposal/WalletConnectProposalInteractor.swift index 32c56d754b..eb53efd536 100644 --- a/fearless/Modules/WalletConnectProposal/WalletConnectProposalInteractor.swift +++ b/fearless/Modules/WalletConnectProposal/WalletConnectProposalInteractor.swift @@ -17,17 +17,20 @@ final class WalletConnectProposalInteractor { private let walletRepository: AnyDataProviderRepository private let chainRepository: AnyDataProviderRepository private let operationQueue: OperationQueue + private let tonConnectService: TonConnectService init( walletConnect: WalletConnectService, walletRepository: AnyDataProviderRepository, chainRepository: AnyDataProviderRepository, - operationQueue: OperationQueue + operationQueue: OperationQueue, + tonConnectService: TonConnectService ) { self.walletConnect = walletConnect self.walletRepository = walletRepository self.chainRepository = chainRepository self.operationQueue = operationQueue + self.tonConnectService = tonConnectService } // MARK: - Private methods @@ -75,4 +78,18 @@ extension WalletConnectProposalInteractor: WalletConnectProposalInteractorInput func submitDisconnect(topic: String) async throws { try await walletConnect.disconnect(topic: topic) } + + func confirmConnectionRequest( + wallet: MetaAccountModel, + tonChainModel: ChainModel, + params: TonConnectParameters, + manifest: TonConnectManifest + ) async throws { + try await tonConnectService.confirmConnectionRequest( + wallet: wallet, + tonChainModel: tonChainModel, + params: params, + manifest: manifest + ) + } } diff --git a/fearless/Modules/WalletConnectProposal/WalletConnectProposalPresenter.swift b/fearless/Modules/WalletConnectProposal/WalletConnectProposalPresenter.swift index 9266c920eb..d04ebb1111 100644 --- a/fearless/Modules/WalletConnectProposal/WalletConnectProposalPresenter.swift +++ b/fearless/Modules/WalletConnectProposal/WalletConnectProposalPresenter.swift @@ -11,12 +11,19 @@ protocol WalletConnectProposalInteractorInput: AnyObject { func setup(with output: WalletConnectProposalInteractorOutput) func submit(proposalDecision: WalletConnectProposalDecision) async throws func submitDisconnect(topic: String) async throws + func confirmConnectionRequest( + wallet: MetaAccountModel, + tonChainModel: ChainModel, + params: TonConnectParameters, + manifest: TonConnectManifest + ) async throws } final class WalletConnectProposalPresenter { // MARK: Private properties private weak var view: WalletConnectProposalViewInput? + private weak var moduleOutput: WalletConnectProposalModuleOutput? private let router: WalletConnectProposalRouterInput private let interactor: WalletConnectProposalInteractorInput @@ -43,6 +50,7 @@ final class WalletConnectProposalPresenter { router: WalletConnectProposalRouterInput, localizationManager: LocalizationManagerProtocol ) { + moduleOutput = status.moduleOutput self.status = status self.walletConnectModelFactory = walletConnectModelFactory self.viewModelFactory = viewModelFactory @@ -57,42 +65,20 @@ final class WalletConnectProposalPresenter { private func provideViewModel() { switch status { - case let .proposal(proposal): - provideProposalSessionViewModel(proposal: proposal) + case .proposal: + buildViewModel() setOptionalChains() - case let .active(session): - provideActiveSessionViewModel(session: session) + case .active: + buildViewModel() } } - private func provideProposalSessionViewModel(proposal: Session.Proposal) { + private func buildViewModel() { guard chains.isNotEmpty, wallets.isNotEmpty else { return } do { - let viewModel = try viewModelFactory.buildProposalSessionViewModel( - proposal: proposal, - chains: chains, - wallets: wallets, - locale: selectedLocale - ) - DispatchQueue.main.async { - self.view?.didReceive(viewModel: viewModel) - } - self.viewModel = viewModel - } catch { - logger.customError(error) - handle(error: error) - } - } - - private func provideActiveSessionViewModel(session: Session) { - guard chains.isNotEmpty, wallets.isNotEmpty else { - return - } - do { - let viewModel = try viewModelFactory.buildActiveSessionViewModel( - session: session, + let viewModel = try viewModelFactory.buildViewModel( chains: chains, wallets: wallets, locale: selectedLocale @@ -132,7 +118,7 @@ final class WalletConnectProposalPresenter { } } - private func submitApprove() { + private func submitWalletConnectApprove() { guard let proposal = status.proposal else { return } let selectedWallets = wallets.filter { wallet in viewModel?.selectedWalletIds?.contains(wallet.metaId) == true @@ -250,6 +236,90 @@ final class WalletConnectProposalPresenter { let optionalChains = walletConnectModelFactory.resolveChains(for: Set(optionalBlockchains), chains: chains) optionalChainsIds = optionalChains.map { $0.chainId } } + + private func setLocalWalletsIfNeeded(wallets: [MetaAccountModel]) { + switch status { + case let .proposal(proposalVariant): + switch proposalVariant { + case .walletConnect: + self.wallets = wallets + case .tonConnect: + self.wallets = wallets.filter { $0.ecosystem.tonAddress != nil } + if self.wallets.isEmpty { + showMissingAccountAlert() + return + } + case .tonJsBridge: + self.wallets = [SelectedWalletSettings.shared.value].compactMap { $0 } + } + case .active: + self.wallets = wallets + } + provideViewModel() + } + + private func submitTonJsBridgeApprove( + manifest: TonConnectManifest, + params: TonConnectParameters, + invocationId: String + ) { + let dessision: TonConnectDessision = .approve( + manifest: manifest, + params: params, + invocationId: invocationId + ) + moduleOutput?.tonConnect(dessision: dessision) + Task { @MainActor in + router.dismiss(view: view) + } + } + + private func confirmTonConnectionRequest( + manifest: TonConnectManifest, + params: TonConnectParameters + ) { + Task { + do { + guard + let tonChainModel = self.chains.first(where: { $0.ecosystem == .ton }), + let selectedWallet = wallets.filter({ wallet in + viewModel?.selectedWalletIds?.contains(wallet.metaId) == true + }).first + else { + throw ConvenienceError(error: "Missing ton chain model") + } + try await interactor.confirmConnectionRequest( + wallet: selectedWallet, + tonChainModel: tonChainModel, + params: params, + manifest: manifest + ) + Task { @MainActor in + router.dismiss(view: view) + } + } catch { + logger.customError(error) + } + } + } + + private func showMissingAccountAlert() { + Task { @MainActor in + let title = R.string.localizable.accountNeededTitle(preferredLanguages: selectedLocale.rLanguages) + let message = R.string.localizable.accountNeededMessage(preferredLanguages: selectedLocale.rLanguages) + let closeActionTitle = R.string.localizable.commonClose(preferredLanguages: selectedLocale.rLanguages) + let closeAction = SheetAlertPresentableAction(title: closeActionTitle) { [weak self] in + self?.router.dismiss(view: self?.view) + } + router.present( + message: message, + title: title, + closeAction: nil, + from: view, + actions: [closeAction] + ) + } + } } // MARK: - WalletConnectProposalViewOutput @@ -269,16 +339,49 @@ extension WalletConnectProposalPresenter: WalletConnectProposalViewOutput { func mainActionButtonDidTapped() { switch status { - case .proposal: - submitApprove() - case let .active(session): - view?.didStartLoading() - submitDisconnect(topic: session.topic, name: session.peer.name) + case let .proposal(connect): + switch connect { + case .walletConnect: + submitWalletConnectApprove() + case let .tonJsBridge(manifest, payload, invocationId, _): + submitTonJsBridgeApprove( + manifest: manifest, + params: payload, + invocationId: invocationId + ) + case let .tonConnect(manifest: manifest, requestPayload: requestPayload): + confirmTonConnectionRequest( + manifest: manifest, + params: requestPayload + ) + } + case let .active(active): + switch active { + case let .walletConnect(session): + view?.didStartLoading() + submitDisconnect(topic: session.topic, name: session.peer.name) + } } } func rejectButtonDidTapped() { - submitReject() + switch status { + case let .proposal(connect): + switch connect { + case .walletConnect: + submitReject() + case let .tonJsBridge(_, _, invocationId, _): + moduleOutput?.tonConnect(dessision: .reject(invocationId: invocationId)) + router.dismiss(view: view) + case .tonConnect: + router.dismiss(view: view) + } + case let .active(active): + switch active { + case .walletConnect: + submitReject() + } + } } func didSelectRowAt(_ indexPath: IndexPath) { @@ -310,8 +413,7 @@ extension WalletConnectProposalPresenter: WalletConnectProposalInteractorOutput func didReceive(walletsResult: Result<[MetaAccountModel], Error>) { switch walletsResult { case let .success(wallets): - self.wallets = wallets - provideViewModel() + setLocalWalletsIfNeeded(wallets: wallets) case let .failure(failure): logger.customError(failure) } @@ -343,28 +445,3 @@ extension WalletConnectProposalPresenter: MultiSelectNetworksModuleOutput { optionalChainsIds = ids } } - -extension WalletConnectProposalPresenter { - enum SessionStatus { - case proposal(Session.Proposal) - case active(Session) - - var proposal: Session.Proposal? { - switch self { - case let .proposal(proposal): - return proposal - case .active: - return nil - } - } - - var session: Session? { - switch self { - case .proposal: - return nil - case let .active(session): - return session - } - } - } -} diff --git a/fearless/Modules/WalletConnectProposal/WalletConnectProposalProtocols.swift b/fearless/Modules/WalletConnectProposal/WalletConnectProposalProtocols.swift index 61707b9701..621a1f33e5 100644 --- a/fearless/Modules/WalletConnectProposal/WalletConnectProposalProtocols.swift +++ b/fearless/Modules/WalletConnectProposal/WalletConnectProposalProtocols.swift @@ -23,4 +23,6 @@ protocol WalletConnectProposalRouterInput: PresentDismissable, ErrorPresentable, protocol WalletConnectProposalModuleInput: AnyObject {} -protocol WalletConnectProposalModuleOutput: AnyObject {} +protocol WalletConnectProposalModuleOutput: AnyObject { + func tonConnect(dessision: TonConnectDessision) +} diff --git a/fearless/Modules/WalletConnectProposal/WalletConnectProposalViewController.swift b/fearless/Modules/WalletConnectProposal/WalletConnectProposalViewController.swift index a203e3a2d4..e6480cfa1a 100644 --- a/fearless/Modules/WalletConnectProposal/WalletConnectProposalViewController.swift +++ b/fearless/Modules/WalletConnectProposal/WalletConnectProposalViewController.swift @@ -16,14 +16,14 @@ final class WalletConnectProposalViewController: UIViewController, ViewHolder { // MARK: Private properties private let output: WalletConnectProposalViewOutput - private let status: WalletConnectProposalPresenter.SessionStatus + private let status: SessionStatus private var viewModel: WalletConnectProposalViewModel? // MARK: - Constructor init( - status: WalletConnectProposalPresenter.SessionStatus, + status: SessionStatus, output: WalletConnectProposalViewOutput, localizationManager: LocalizationManagerProtocol? ) { @@ -99,7 +99,20 @@ extension WalletConnectProposalViewController: WalletConnectProposalViewInput { func didReceive(viewModel: WalletConnectProposalViewModel) { self.viewModel = viewModel if let indexPath = viewModel.indexPath { - rootView.tableView.reloadRows(at: [indexPath], with: .automatic) + let visibleWalletCells: [WalletConnectProposalWalletsTableCell] = rootView.tableView.visibleCells.compactMap { + guard let cell = $0 as? WalletConnectProposalWalletsTableCell else { + return nil + } + return cell + } + let visibleWalletCellIndexPaths = visibleWalletCells.compactMap { + rootView.tableView.indexPath(for: $0) + } + if visibleWalletCellIndexPaths.contains(indexPath) { + rootView.tableView.reloadRows(at: visibleWalletCellIndexPaths, with: .automatic) + } else { + rootView.tableView.reloadRows(at: [indexPath], with: .automatic) + } } else { rootView.tableView.reloadData() } @@ -149,13 +162,11 @@ extension WalletConnectProposalViewController: UITableViewDataSource { guard let cell = cell as? WalletConnectProposalExpandableTableCell else { return UITableViewCell() } - cell.locale = selectedLocale cell.bind(viewModel: viewModel) case let .optionalExpandable(viewModel): guard let cell = cell as? WalletConnectProposalExpandableTableCell else { return UITableViewCell() } - cell.locale = selectedLocale cell.bind(viewModel: viewModel) case .wallet: break diff --git a/fearless/Modules/WalletConnectProposal/WalletConnectProposalViewLayout.swift b/fearless/Modules/WalletConnectProposal/WalletConnectProposalViewLayout.swift index 4b9fda6ccd..b96bf62740 100644 --- a/fearless/Modules/WalletConnectProposal/WalletConnectProposalViewLayout.swift +++ b/fearless/Modules/WalletConnectProposal/WalletConnectProposalViewLayout.swift @@ -1,7 +1,7 @@ import UIKit final class WalletConnectProposalViewLayout: UIView { - private let status: WalletConnectProposalPresenter.SessionStatus + private let status: SessionStatus var locale: Locale = .current { didSet { @@ -44,7 +44,7 @@ final class WalletConnectProposalViewLayout: UIView { return view }() - init(status: WalletConnectProposalPresenter.SessionStatus) { + init(status: SessionStatus) { self.status = status super.init(frame: .zero) backgroundColor = R.color.colorBlack19()! diff --git a/fearless/Modules/WalletConnectSession/ConnectRequestVariant.swift b/fearless/Modules/WalletConnectSession/ConnectRequestVariant.swift new file mode 100644 index 0000000000..e29999955f --- /dev/null +++ b/fearless/Modules/WalletConnectSession/ConnectRequestVariant.swift @@ -0,0 +1,30 @@ +import Foundation +import WalletConnectSign +import SSFModels + +enum ConnectRequestVariant { + case walletConnect( + request: Request, + session: Session? + ) + case tonJsBridge( + invocationId: String, + wallet: MetaAccountModel, + dapp: TonDapp, + request: TonConnect.AppRequest, + delegate: WalletConnectSessionModuleOutput? + ) + case tonConnect( + request: TonConnect.AppRequest, + walletId: SSFModels.MetaAccountId, + app: TonConnectApp + ) + + var moduleOutput: WalletConnectSessionModuleOutput? { + switch self { + case .walletConnect: return nil + case .tonConnect: return nil + case let .tonJsBridge(_, _, _, _, delegate): return delegate + } + } +} diff --git a/fearless/Modules/WalletConnectSession/WalletConnectSessionAssembly.swift b/fearless/Modules/WalletConnectSession/WalletConnectSessionAssembly.swift index d0aa039c59..a215526438 100644 --- a/fearless/Modules/WalletConnectSession/WalletConnectSessionAssembly.swift +++ b/fearless/Modules/WalletConnectSession/WalletConnectSessionAssembly.swift @@ -8,8 +8,7 @@ import SoraKeystore enum WalletConnectSessionAssembly { static func configureModule( - request: Request, - session: Session?, + variant: ConnectRequestVariant, onGoToConfirmation: ((WalletConnectConfirmationInputData) -> Void)? ) -> WalletConnectSessionModuleCreationResult? { let localizationManager = LocalizationManager.shared @@ -30,15 +29,15 @@ enum WalletConnectSessionAssembly { walletBalanceSubscriptionAdapter: walletBalanceSubscriptionAdapter, walletRepository: AnyDataProviderRepository(accountRepository), chainRepository: AnyDataProviderRepository(chainRepository), - operationQueue: OperationManagerFacade.sharedDefaultQueue + operationQueue: OperationManagerFacade.sharedDefaultQueue, + tonConnectService: ServiceAssembly.shared.tonConnectService() ) let router = WalletConnectSessionRouter(onGoToConfirmation: onGoToConfirmation) let walletConnectModelFactory = WalletConnectModelFactoryImpl() let walletConnectPayloaFactory = WalletConnectPayloadFactoryImpl() let viewModelFactory = WalletConnectSessionViewModelFactoryImpl( - request: request, - session: session, + variant: variant, walletConnectModelFactory: walletConnectModelFactory, walletConnectPayloaFactory: walletConnectPayloaFactory, assetBalanceFormatterFactory: AssetBalanceFormatterFactory(), @@ -46,8 +45,7 @@ enum WalletConnectSessionAssembly { settings: SettingsManager.shared ) let presenter = WalletConnectSessionPresenter( - request: request, - session: session, + variant: variant, viewModelFactory: viewModelFactory, walletConnectModelFactory: walletConnectModelFactory, logger: logger, diff --git a/fearless/Modules/WalletConnectSession/WalletConnectSessionInteractor.swift b/fearless/Modules/WalletConnectSession/WalletConnectSessionInteractor.swift index b655c10ca9..b6f15f8f99 100644 --- a/fearless/Modules/WalletConnectSession/WalletConnectSessionInteractor.swift +++ b/fearless/Modules/WalletConnectSession/WalletConnectSessionInteractor.swift @@ -18,19 +18,22 @@ final class WalletConnectSessionInteractor { private let walletRepository: AnyDataProviderRepository private let chainRepository: AnyDataProviderRepository private let operationQueue: OperationQueue + private let tonConnectService: TonConnectService init( walletConnect: WalletConnectService, walletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterProtocol, walletRepository: AnyDataProviderRepository, chainRepository: AnyDataProviderRepository, - operationQueue: OperationQueue + operationQueue: OperationQueue, + tonConnectService: TonConnectService ) { self.walletConnect = walletConnect self.walletBalanceSubscriptionAdapter = walletBalanceSubscriptionAdapter self.walletRepository = walletRepository self.chainRepository = chainRepository self.operationQueue = operationQueue + self.tonConnectService = tonConnectService } // MARK: - Private methods @@ -71,6 +74,10 @@ final class WalletConnectSessionInteractor { // MARK: - WalletConnectSessionInteractorInput extension WalletConnectSessionInteractor: WalletConnectSessionInteractorInput { + func cancelTonConnect(appRequest: TonConnect.AppRequest, app: TonConnectApp) async throws { + try await tonConnectService.cancelRequest(appRequest: appRequest, app: app) + } + func submit(signDecision: WalletConnectSignDecision) async throws { try await walletConnect.submit(signDecision: signDecision) } diff --git a/fearless/Modules/WalletConnectSession/WalletConnectSessionPresenter.swift b/fearless/Modules/WalletConnectSession/WalletConnectSessionPresenter.swift index 362f203788..4823dd2b6c 100644 --- a/fearless/Modules/WalletConnectSession/WalletConnectSessionPresenter.swift +++ b/fearless/Modules/WalletConnectSession/WalletConnectSessionPresenter.swift @@ -11,18 +11,22 @@ protocol WalletConnectSessionInteractorInput: AnyObject { func setup(with output: WalletConnectSessionInteractorOutput) func submit(proposalDecision: WalletConnectProposalDecision) async throws func submit(signDecision: WalletConnectSignDecision) async throws + func cancelTonConnect( + appRequest: TonConnect.AppRequest, + app: TonConnectApp + ) async throws } final class WalletConnectSessionPresenter { // MARK: Private properties private weak var view: WalletConnectSessionViewInput? + private weak var moduleOutput: WalletConnectSessionModuleOutput? private let router: WalletConnectSessionRouterInput private let interactor: WalletConnectSessionInteractorInput private let logger: LoggerProtocol - private let request: Request - private let session: Session? + private let variant: ConnectRequestVariant private let viewModelFactory: WalletConnectSessionViewModelFactory private let walletConnectModelFactory: WalletConnectModelFactory @@ -34,8 +38,7 @@ final class WalletConnectSessionPresenter { // MARK: - Constructors init( - request: Request, - session: Session?, + variant: ConnectRequestVariant, viewModelFactory: WalletConnectSessionViewModelFactory, walletConnectModelFactory: WalletConnectModelFactory, logger: LoggerProtocol, @@ -43,8 +46,8 @@ final class WalletConnectSessionPresenter { router: WalletConnectSessionRouterInput, localizationManager: LocalizationManagerProtocol ) { - self.request = request - self.session = session + moduleOutput = variant.moduleOutput + self.variant = variant self.viewModelFactory = viewModelFactory self.walletConnectModelFactory = walletConnectModelFactory self.interactor = interactor @@ -75,7 +78,12 @@ final class WalletConnectSessionPresenter { } catch { await MainActor.run(body: { - handle(error: error, request: request) + switch variant { + case let .walletConnect(request, _): + handle(error: error, request: request) + case .tonJsBridge, .tonConnect: + logger.customError(error) + } }) } } @@ -93,28 +101,114 @@ final class WalletConnectSessionPresenter { private func prepareConfirmationData() { do { - let chain = try walletConnectModelFactory.resolveChain(for: request.chainId, chains: chainModels) - let method = try walletConnectModelFactory.parseMethod(from: request) - guard - let session = session, - let viewModel = viewModel - else { - throw JSONRPCError.invalidRequest + switch variant { + case let .walletConnect(request, session): + try prepereWalletConnectConfirmData( + request: request, + session: session + ) + case let .tonJsBridge(invocationId, wallet, dapp, request, delegate): + try prepareTonJsBridgConfirmData( + invocationId: invocationId, + wallet: wallet, + dapp: dapp, + request: request + ) + case let .tonConnect(request: request, walletId: walletId, app: app): + try prepareTonConnectConfirmData( + request: request, + walletId: walletId, + app: app + ) } + } catch { + switch variant { + case let .walletConnect(request, _): + handle(error: error, request: request) + case .tonJsBridge, .tonConnect: + logger.customError(error) + } + } + } + + private func prepereWalletConnectConfirmData( + request: Request, + session: Session? + ) throws { + let chain = try walletConnectModelFactory.resolveChain(for: request.chainId, chains: chainModels) + let method = try walletConnectModelFactory.parseMethod(from: request) + guard + let session = session, + let viewModel = viewModel + else { + throw JSONRPCError.invalidRequest + } - let inputData = WalletConnectConfirmationInputData( - wallet: viewModel.wallet, - chain: chain, + let inputData = WalletConnectConfirmationInputData( + wallet: viewModel.wallet, + chain: chain, + variant: .walletConnect( resuest: request, session: session, - method: method, - payload: viewModel.payload - ) - view?.didStopLoading() - router.showConfirmation(inputData: inputData) - } catch { - handle(error: error, request: request) + method: method + ), + payload: viewModel.payload + ) + view?.didStopLoading() + router.showConfirmation(inputData: inputData) + } + + private func prepareTonJsBridgConfirmData( + invocationId: String, + wallet: MetaAccountModel, + dapp: TonDapp, + request: TonConnect.AppRequest + ) throws { + guard let chain = chainModels.first(where: { $0.ecosystem == .ton }) else { + throw ConvenienceError(error: "Missing Ton ChainModel") + } + guard let payload = viewModel?.payload else { + return } + let inputData = WalletConnectConfirmationInputData( + wallet: wallet, + chain: chain, + variant: .tonJsBridge( + invocationId: invocationId, + dapp: dapp, + request: request, + moduleOutput: moduleOutput + ), + payload: payload + ) + view?.didStopLoading() + router.showConfirmation(inputData: inputData) + } + + private func prepareTonConnectConfirmData( + request: TonConnect.AppRequest, + walletId: SSFModels.MetaAccountId, + app: TonConnectApp + ) throws { + guard + let wallet = wallets.first(where: { $0.metaId == walletId }), + let chain = chainModels.first(where: { $0.ecosystem == .ton }), + let payload = viewModel?.payload + else { + throw ConvenienceError(error: "Missing wallet or chain") + } + + let inputData = WalletConnectConfirmationInputData( + wallet: wallet, + chain: chain, + variant: .tonConnect( + request: request, + app: app + ), + payload: payload + ) + view?.didStopLoading() + router.showConfirmation(inputData: inputData) } private func handle(error: Error, request: Request?) { @@ -151,7 +245,23 @@ final class WalletConnectSessionPresenter { extension WalletConnectSessionPresenter: WalletConnectSessionViewOutput { func viewDidDisappear() { view?.controller.onInteractionDismiss() - sumbitReject(request: request, error: JSONRPCError.userRejected) + switch variant { + case let .walletConnect(request, _): + sumbitReject(request: request, error: JSONRPCError.userRejected) + case let .tonJsBridge(invocationId, _, _, _, _): + moduleOutput?.tonConnectSend( + dessision: .declined( + invocationId: invocationId + ) + ) + case let .tonConnect(request: request, walletId: walletId, app: app): + Task { + try await interactor.cancelTonConnect( + appRequest: request, + app: app + ) + } + } } func closeButtonDidTapped() { diff --git a/fearless/Modules/WalletConnectSession/WalletConnectSessionProtocols.swift b/fearless/Modules/WalletConnectSession/WalletConnectSessionProtocols.swift index 3b1a6c12b8..eb86a2ad53 100644 --- a/fearless/Modules/WalletConnectSession/WalletConnectSessionProtocols.swift +++ b/fearless/Modules/WalletConnectSession/WalletConnectSessionProtocols.swift @@ -9,4 +9,6 @@ protocol WalletConnectSessionRouterInput: PresentDismissable, SheetAlertPresenta protocol WalletConnectSessionModuleInput: AnyObject {} -protocol WalletConnectSessionModuleOutput: AnyObject {} +protocol WalletConnectSessionModuleOutput: AnyObject { + func tonConnectSend(dessision: TonConnectSendDessision) +} diff --git a/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModel.swift b/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModel.swift index ea0a29d036..e90fc1d8a2 100644 --- a/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModel.swift +++ b/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModel.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels struct WalletConnectSessionViewModel { let dApp: String? diff --git a/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModelFactory.swift b/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModelFactory.swift index 20095f160f..8a14f8b7a0 100644 --- a/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModelFactory.swift +++ b/fearless/Modules/WalletConnectSession/WalletConnectSessionViewModelFactory.swift @@ -15,8 +15,7 @@ protocol WalletConnectSessionViewModelFactory { } final class WalletConnectSessionViewModelFactoryImpl: WalletConnectSessionViewModelFactory { - private let request: Request - private let session: Session? + private let variant: ConnectRequestVariant private let walletConnectModelFactory: WalletConnectModelFactory private let walletConnectPayloaFactory: WalletConnectPayloadFactory private let assetBalanceFormatterFactory: AssetBalanceFormatterFactoryProtocol @@ -24,16 +23,14 @@ final class WalletConnectSessionViewModelFactoryImpl: WalletConnectSessionViewMo private let settings: SettingsManagerProtocol init( - request: Request, - session: Session?, + variant: ConnectRequestVariant, walletConnectModelFactory: WalletConnectModelFactory, walletConnectPayloaFactory: WalletConnectPayloadFactory, assetBalanceFormatterFactory: AssetBalanceFormatterFactoryProtocol, accountScoreFetcher: AccountStatisticsFetching, settings: SettingsManagerProtocol ) { - self.request = request - self.session = session + self.variant = variant self.walletConnectModelFactory = walletConnectModelFactory self.walletConnectPayloaFactory = walletConnectPayloaFactory self.assetBalanceFormatterFactory = assetBalanceFormatterFactory @@ -46,14 +43,56 @@ final class WalletConnectSessionViewModelFactoryImpl: WalletConnectSessionViewMo chains: [ChainModel], balanceInfo: WalletBalanceInfos?, locale: Locale + ) async throws -> WalletConnectSessionViewModel { + switch variant { + case let .walletConnect(request, session): + return try await buildWalletConnectViewModel( + request: request, + session: session, + wallets: wallets, + chains: chains, + balanceInfo: balanceInfo, + locale: locale + ) + case let .tonJsBridge(_, wallet, dapp, request, _): + return try buildTonViewModel( + wallet: wallet, + app: dapp.url.host, + request: request, + balanceInfo: balanceInfo, + locale: locale + ) + case let .tonConnect(request: request, walletId: walletId, app: app): + guard let wallet = wallets.first(where: { $0.metaId == walletId }) else { + throw ConvenienceError(error: "Wallet not found") + } + return try buildTonViewModel( + wallet: wallet, + app: app.appUrl.host, + request: request, + balanceInfo: balanceInfo, + locale: locale + ) + } + } + + // MARK: - Private methods + + private func buildWalletConnectViewModel( + request: Request, + session: Session?, + wallets: [MetaAccountModel], + chains: [ChainModel], + balanceInfo: WalletBalanceInfos?, + locale: Locale ) async throws -> WalletConnectSessionViewModel { var dApp: String? if let session = session { dApp = URL(string: session.peer.url)?.host } - let payload = try await prepareSignPayload(chains: chains) - let wallet = try findWallet(for: payload.address, wallets: wallets, chains: chains) + let payload = try await prepareSignPayload(chains: chains, request: request) + let wallet = try findWallet(for: payload.address, wallets: wallets, chains: chains, request: request) let walletViewModel = createWalletViewModel( wallet: wallet, balanceInfo: balanceInfo, @@ -69,10 +108,38 @@ final class WalletConnectSessionViewModelFactoryImpl: WalletConnectSessionViewMo ) } - // MARK: - Private methods + private func buildTonViewModel( + wallet: MetaAccountModel, + app: String?, + request: TonConnect.AppRequest, + balanceInfo: WalletBalanceInfos?, + locale: Locale + ) throws -> WalletConnectSessionViewModel { + let walletViewModel = createWalletViewModel( + wallet: wallet, + balanceInfo: balanceInfo, + locale: locale + ) + + let payload = WalletConnectPayload( + address: nil, + payload: AnyCodable(any: ""), + stringRepresentation: request.method.rawValue, + txDetails: try request.toScaleCompatibleJSON() + ) + + return WalletConnectSessionViewModel( + dApp: app, + warning: createWarning(locale: locale), + walletViewModel: walletViewModel, + payload: payload, + wallet: wallet + ) + } private func prepareSignPayload( - chains: [ChainModel] + chains: [ChainModel], + request: Request ) async throws -> WalletConnectPayload { let method = try walletConnectModelFactory.parseMethod(from: request) let chain = try walletConnectModelFactory.resolveChain(for: request.chainId, chains: chains) @@ -88,7 +155,8 @@ final class WalletConnectSessionViewModelFactoryImpl: WalletConnectSessionViewMo private func findWallet( for address: String?, wallets: [MetaAccountModel], - chains: [ChainModel] + chains: [ChainModel], + request: Request ) throws -> MetaAccountModel { let blockchain = request.chainId let chain = try walletConnectModelFactory.resolveChain(for: blockchain, chains: chains) @@ -109,7 +177,7 @@ final class WalletConnectSessionViewModelFactoryImpl: WalletConnectSessionViewMo balanceInfo: WalletBalanceInfos?, locale: Locale ) -> WalletsManagmentCellViewModel { - let address = wallet.ethereumAddress?.toHex(includePrefix: true) + let address = wallet.ecosystem.ethereumAddress?.toHex(includePrefix: true) let accountScoreViewModel = AccountScoreViewModel( fetcher: accountScoreFetcher, address: address, @@ -123,9 +191,11 @@ final class WalletConnectSessionViewModelFactoryImpl: WalletConnectSessionViewMo return WalletsManagmentCellViewModel( isSelected: false, walletName: wallet.name, + icon: wallet.icon(), fiatBalance: nil, dayChange: nil, - accountScoreViewModel: accountScoreViewModel + accountScoreViewModel: accountScoreViewModel, + optionsAvailable: wallet.ecosystem.isRegular ) } let balanceTokenFormatterValue = tokenFormatter( @@ -146,9 +216,11 @@ final class WalletConnectSessionViewModelFactoryImpl: WalletConnectSessionViewMo let viewModel = WalletsManagmentCellViewModel( isSelected: false, walletName: wallet.name, + icon: wallet.icon(), fiatBalance: totalFiatValue, dayChange: dayChange, - accountScoreViewModel: accountScoreViewModel + accountScoreViewModel: accountScoreViewModel, + optionsAvailable: wallet.ecosystem.isRegular ) return viewModel diff --git a/fearless/Modules/WalletDetails/ViewModels/WalletDetailsFlow.swift b/fearless/Modules/WalletDetails/ViewModels/WalletDetailsFlow.swift index 2b24d4039e..8097de6384 100644 --- a/fearless/Modules/WalletDetails/ViewModels/WalletDetailsFlow.swift +++ b/fearless/Modules/WalletDetails/ViewModels/WalletDetailsFlow.swift @@ -1,4 +1,5 @@ import Foundation +import SSFModels enum WalletDetailsFlow { case normal(wallet: MetaAccountModel) diff --git a/fearless/Modules/WalletDetails/WalletDetailsInteractor.swift b/fearless/Modules/WalletDetails/WalletDetailsInteractor.swift index 9ddfe63252..930bcfd003 100644 --- a/fearless/Modules/WalletDetails/WalletDetailsInteractor.swift +++ b/fearless/Modules/WalletDetails/WalletDetailsInteractor.swift @@ -1,6 +1,7 @@ import RobinHood import SSFModels import Foundation +import SSFAccountManagment final class WalletDetailsInteractor { weak var presenter: WalletDetailsInteractorOutputProtocol! @@ -101,7 +102,7 @@ extension WalletDetailsInteractor: WalletDetailsInteractorInputProtocol { .getAvailableExportOptions( for: self.flow.wallet, accountId: accountId, - isEthereum: response.isEthereumBased + ecosystem: response.ecosystem ) self.presenter?.didReceiveExportOptions(options: options, for: chainAccount) default: diff --git a/fearless/Modules/WalletDetails/WalletDetailsPresenter.swift b/fearless/Modules/WalletDetails/WalletDetailsPresenter.swift index a4425159f1..8ea3af139a 100644 --- a/fearless/Modules/WalletDetails/WalletDetailsPresenter.swift +++ b/fearless/Modules/WalletDetails/WalletDetailsPresenter.swift @@ -15,12 +15,16 @@ final class WalletDetailsPresenter { private var searchText: String? init( + chains: [ChainModel]?, interactor: WalletDetailsInteractorInputProtocol, wireframe: WalletDetailsWireframeProtocol, viewModelFactory: WalletDetailsViewModelFactoryProtocol, flow: WalletDetailsFlow, localizationManager: LocalizationManagerProtocol ) { + if let chains { + self.chains = chains + } self.interactor = interactor self.wireframe = wireframe self.viewModelFactory = viewModelFactory @@ -138,6 +142,8 @@ extension WalletDetailsPresenter: WalletDetailsInteractorOutputProtocol { self.wireframe.present(from: view, url: url) case let .reefscan(url): self.wireframe.present(from: view, url: url) + case let .tonviewer(url): + self.wireframe.present(from: view, url: url) case .replace: let model = UniqueChainModel(meta: self.flow.wallet, chain: chainAccount.chain) let options: [ReplaceChainOption] = ReplaceChainOption.allCases @@ -167,6 +173,10 @@ extension WalletDetailsPresenter: WalletDetailsInteractorOutputProtocol { } func didReceive(chains: [ChainModel]) { + guard self.chains.isEmpty else { + provideViewModel(chains: self.chains) + return + } self.chains = chains provideViewModel(chains: chains) } @@ -226,6 +236,10 @@ private extension WalletDetailsPresenter { if $0.types.contains(.account), let url = $0.explorerUrl(for: address, type: .account) { return .oklink(url: url) } + case .tonviewer: + if $0.types.contains(.tonAccount), let url = $0.explorerUrl(for: address, type: .tonAccount) { + return .tonviewer(url: url) + } } return nil } diff --git a/fearless/Modules/WalletDetails/WalletDetailsViewFactory.swift b/fearless/Modules/WalletDetails/WalletDetailsViewFactory.swift index 18ef260319..55ca967773 100644 --- a/fearless/Modules/WalletDetails/WalletDetailsViewFactory.swift +++ b/fearless/Modules/WalletDetails/WalletDetailsViewFactory.swift @@ -1,10 +1,12 @@ import Foundation import RobinHood import SoraFoundation +import SSFModels final class WalletDetailsViewFactory { static func createView( - flow: WalletDetailsFlow + flow: WalletDetailsFlow, + chains: [ChainModel]? ) -> WalletDetailsViewProtocol { let chainsRepository = ChainRepositoryFactory().createRepository( for: NSPredicate.enabledCHain(), @@ -24,6 +26,7 @@ final class WalletDetailsViewFactory { let localizationManager = LocalizationManager.shared let presenter = WalletDetailsPresenter( + chains: chains, interactor: interactor, wireframe: wireframe, viewModelFactory: WalletDetailsViewModelFactory(), diff --git a/fearless/Modules/WalletDetails/WalletDetailsWireframe.swift b/fearless/Modules/WalletDetails/WalletDetailsWireframe.swift index f4a1294932..8aa430d7f4 100644 --- a/fearless/Modules/WalletDetails/WalletDetailsWireframe.swift +++ b/fearless/Modules/WalletDetails/WalletDetailsWireframe.swift @@ -79,7 +79,8 @@ final class WalletDetailsWireframe: WalletDetailsWireframeProtocol { func showCreate(uniqueChainModel: UniqueChainModel, from view: ControllerBackedProtocol?) { guard let controller = UsernameSetupViewFactory.createViewForOnboarding( - flow: .chain(model: uniqueChainModel) + flow: .chain(model: uniqueChainModel), + ecosystem: .regular )?.controller else { return } diff --git a/fearless/Modules/WalletMainContainer/ViewModel/WalletMainContainerViewModelFactory.swift b/fearless/Modules/WalletMainContainer/ViewModel/WalletMainContainerViewModelFactory.swift index c5d744400f..e99a66dd8d 100644 --- a/fearless/Modules/WalletMainContainer/ViewModel/WalletMainContainerViewModelFactory.swift +++ b/fearless/Modules/WalletMainContainer/ViewModel/WalletMainContainerViewModelFactory.swift @@ -1,6 +1,7 @@ import Foundation import SSFModels import SoraKeystore +import SSFCrypto protocol WalletMainContainerViewModelFactoryProtocol { func buildViewModel( @@ -47,15 +48,18 @@ final class WalletMainContainerViewModelFactory: WalletMainContainerViewModelFac selectedFilterImage = selectedFilter.filterImage } - var address: String? + var chainAddress: String? if let selectedChain = selectedChain, let chainAccountResponse = selectedMetaAccount.fetch(for: selectedChain.accountRequest()), - let address1 = try? AddressFactory.address(for: chainAccountResponse.accountId, chain: selectedChain) { - address = address1 + let address = try? AddressFactory.address( + for: chainAccountResponse.accountId, + chainFormat: selectedChain.chainFormat(bounceable: false) + ) { + chainAddress = address } - let ethAddress = selectedMetaAccount.ethereumAddress?.toHex(includePrefix: true) + let ethAddress = selectedMetaAccount.ecosystem.ethereumAddress?.toHex(includePrefix: true) let accountScoreViewModel = AccountScoreViewModel( fetcher: accountScoreFetcher, address: ethAddress, @@ -69,7 +73,7 @@ final class WalletMainContainerViewModelFactory: WalletMainContainerViewModelFac walletName: selectedMetaAccount.name, selectedFilter: selectedFilterName, selectedFilterImage: selectedFilterImage, - address: address, + address: chainAddress, accountScoreViewModel: accountScoreViewModel ) } diff --git a/fearless/Modules/WalletMainContainer/WalletMainContainerAssembly.swift b/fearless/Modules/WalletMainContainer/WalletMainContainerAssembly.swift index e16758ac2a..03a9f4f24c 100644 --- a/fearless/Modules/WalletMainContainer/WalletMainContainerAssembly.swift +++ b/fearless/Modules/WalletMainContainer/WalletMainContainerAssembly.swift @@ -4,6 +4,7 @@ import RobinHood import SSFUtils import SSFNetwork import SoraKeystore +import SSFModels final class WalletMainContainerAssembly { static func configureModule( @@ -20,6 +21,10 @@ final class WalletMainContainerAssembly { sortDescriptors: [] ) + let userRepositoryFactory = SubstrateRepositoryFactory( + storageFacade: UserDataStorageFacade.shared + ) + let storageOperationFactory = StorageRequestFactory( remoteFactory: StorageKeyFactory(), operationManager: OperationManagerFacade.sharedManager @@ -54,7 +59,8 @@ final class WalletMainContainerAssembly { deprecatedAccountsCheckService: deprecatedAccountsCheckService, applicationHandler: ApplicationHandler(), walletConnectService: walletConnect, - featureToggleService: featureToggleProvider + featureToggleService: featureToggleProvider, + tonConnectService: ServiceAssembly.shared.tonConnectService() ) let router = WalletMainContainerRouter() diff --git a/fearless/Modules/WalletMainContainer/WalletMainContainerInteractor.swift b/fearless/Modules/WalletMainContainer/WalletMainContainerInteractor.swift index 8dcc7c899a..de6ab1e4e0 100644 --- a/fearless/Modules/WalletMainContainer/WalletMainContainerInteractor.swift +++ b/fearless/Modules/WalletMainContainer/WalletMainContainerInteractor.swift @@ -17,6 +17,7 @@ final class WalletMainContainerInteractor { private let applicationHandler: ApplicationHandler private let walletConnectService: WalletConnectService private let featureToggleService: FeatureToggleProviderProtocol + private let tonConnectService: TonConnectService // MARK: - Constructor @@ -29,7 +30,8 @@ final class WalletMainContainerInteractor { deprecatedAccountsCheckService: DeprecatedControllerStashAccountCheckServiceProtocol, applicationHandler: ApplicationHandler, walletConnectService: WalletConnectService, - featureToggleService: FeatureToggleProviderProtocol + featureToggleService: FeatureToggleProviderProtocol, + tonConnectService: TonConnectService ) { self.wallet = wallet self.chainRepository = chainRepository @@ -40,6 +42,7 @@ final class WalletMainContainerInteractor { self.applicationHandler = applicationHandler self.walletConnectService = walletConnectService self.featureToggleService = featureToggleService + self.tonConnectService = tonConnectService applicationHandler.delegate = self } @@ -116,6 +119,10 @@ extension WalletMainContainerInteractor: WalletMainContainerInteractorInput { func walletConnect(uri: String) async throws { try await walletConnectService.connect(uri: uri) } + + func tonConnect(uri: String) async throws { + try await tonConnectService.establishConnection(with: uri) + } } // MARK: - EventVisitorProtocol diff --git a/fearless/Modules/WalletMainContainer/WalletMainContainerPresenter.swift b/fearless/Modules/WalletMainContainer/WalletMainContainerPresenter.swift index ed18f05a8b..120b181a43 100644 --- a/fearless/Modules/WalletMainContainer/WalletMainContainerPresenter.swift +++ b/fearless/Modules/WalletMainContainer/WalletMainContainerPresenter.swift @@ -64,9 +64,19 @@ final class WalletMainContainerPresenter { do { try await interactor.walletConnect(uri: uri) } catch { - _ = await MainActor.run(body: { + Task { @MainActor in router.present(error: error, from: view, locale: selectedLocale) - }) + } + } + } + } + + private func tonConnect(with uri: String) { + Task { + do { + try await interactor.tonConnect(uri: uri) + } catch { + Logger.shared.customError(error) } } } @@ -116,7 +126,7 @@ extension WalletMainContainerPresenter: WalletMainContainerViewOutput { } func didTapAccountScore() { - let address = wallet.ethereumAddress?.toHex(includePrefix: true) + let address = wallet.ecosystem.ethereumAddress?.toHex(includePrefix: true) router.presentAccountScore(address: address, from: view) } } @@ -270,6 +280,8 @@ extension WalletMainContainerPresenter: ScanQRModuleOutput { ) case let .walletConnect(uri): walletConnect(with: uri) + case let .tonConnect(uri): + tonConnect(with: uri) case .preinstalledWallet: break } diff --git a/fearless/Modules/WalletMainContainer/WalletMainContainerProtocols.swift b/fearless/Modules/WalletMainContainer/WalletMainContainerProtocols.swift index e3d537bbc8..78a4f384ac 100644 --- a/fearless/Modules/WalletMainContainer/WalletMainContainerProtocols.swift +++ b/fearless/Modules/WalletMainContainer/WalletMainContainerProtocols.swift @@ -24,6 +24,7 @@ protocol WalletMainContainerViewOutput: AnyObject { protocol WalletMainContainerInteractorInput: AnyObject { func setup(with output: WalletMainContainerInteractorOutput) func walletConnect(uri: String) async throws + func tonConnect(uri: String) async throws } protocol WalletMainContainerInteractorOutput: AnyObject { diff --git a/fearless/Modules/WalletMainContainer/WalletMainContainerRouter.swift b/fearless/Modules/WalletMainContainer/WalletMainContainerRouter.swift index 8dc62929c0..7457814f9f 100644 --- a/fearless/Modules/WalletMainContainer/WalletMainContainerRouter.swift +++ b/fearless/Modules/WalletMainContainer/WalletMainContainerRouter.swift @@ -76,12 +76,27 @@ final class WalletMainContainerRouter: WalletMainContainerRouterInput { view?.controller.navigationController?.present(module.view.controller, animated: true) } - func showSendFlow( + func showIssueNotification( + from view: WalletMainContainerViewInput?, + issues: [ChainIssue], + wallet: MetaAccountModel + ) { + guard let module = NetworkIssuesNotificationAssembly.configureModule( + wallet: wallet, + issues: issues + ) else { + return + } + + view?.controller.present(module.view.controller, animated: true) + } + + @MainActor func showSendFlow( from view: ControllerBackedProtocol?, wallet: MetaAccountModel, initialData: SendFlowInitialData ) { - let sendModule = SendAssembly.configureModule(wallet: wallet, initialData: initialData) + let sendModule = TransferAssembly.configureModule(wallet: wallet, initialData: initialData) guard let controller = sendModule?.view.controller else { return } diff --git a/fearless/Modules/WalletOption/WalletOptionAssembly.swift b/fearless/Modules/WalletOption/WalletOptionAssembly.swift index 355e65865d..67706c73e1 100644 --- a/fearless/Modules/WalletOption/WalletOptionAssembly.swift +++ b/fearless/Modules/WalletOption/WalletOptionAssembly.swift @@ -2,10 +2,11 @@ import UIKit import SoraFoundation import SoraUI import RobinHood +import SSFModels final class WalletOptionAssembly { static func configureModule( - with wallet: ManagedMetaAccountModel, + with wallet: MetaAccountModel, delegate: WalletOptionModuleOutput? ) -> WalletOptionModuleCreationResult? { let localizationManager = LocalizationManager.shared diff --git a/fearless/Modules/WalletOption/WalletOptionInteractor.swift b/fearless/Modules/WalletOption/WalletOptionInteractor.swift index 080345d952..631d8945bb 100644 --- a/fearless/Modules/WalletOption/WalletOptionInteractor.swift +++ b/fearless/Modules/WalletOption/WalletOptionInteractor.swift @@ -1,5 +1,6 @@ import UIKit import RobinHood +import SSFModels final class WalletOptionInteractor { // MARK: - Private properties @@ -7,13 +8,13 @@ final class WalletOptionInteractor { private weak var output: WalletOptionInteractorOutput? private weak var moduleOutput: WalletOptionModuleOutput? - private let wallet: ManagedMetaAccountModel + private let wallet: MetaAccountModel private let metaAccountRepository: AnyDataProviderRepository private let operationQueue: OperationQueue private let walletConnectDisconnectService: WalletConnectDisconnectService init( - wallet: ManagedMetaAccountModel, + wallet: MetaAccountModel, metaAccountRepository: AnyDataProviderRepository, operationQueue: OperationQueue, moduleOutput: WalletOptionModuleOutput?, @@ -34,7 +35,7 @@ final class WalletOptionInteractor { return } - if selectedWallet.identifier == wallet.identifier { + if selectedWallet.identifier == wallet.metaId { output?.setDeleteButtonIsVisible(false) } } @@ -54,7 +55,7 @@ extension WalletOptionInteractor: WalletOptionInteractorInput { operation.completionBlock = { [weak self, wallet] in Task { [weak self] in - try await self?.walletConnectDisconnectService.disconnect(wallet: wallet.info) + try await self?.walletConnectDisconnectService.disconnect(wallet: wallet) } self?.moduleOutput?.walletWasRemoved() self?.output?.walletRemoved() diff --git a/fearless/Modules/WalletOption/WalletOptionPresenter.swift b/fearless/Modules/WalletOption/WalletOptionPresenter.swift index f14dc4da26..fe5edc27a9 100644 --- a/fearless/Modules/WalletOption/WalletOptionPresenter.swift +++ b/fearless/Modules/WalletOption/WalletOptionPresenter.swift @@ -1,5 +1,6 @@ import Foundation import SoraFoundation +import SSFModels final class WalletOptionPresenter { // MARK: Private properties @@ -8,12 +9,12 @@ final class WalletOptionPresenter { private let router: WalletOptionRouterInput private let interactor: WalletOptionInteractorInput - private let wallet: ManagedMetaAccountModel + private let wallet: MetaAccountModel // MARK: - Constructors init( - wallet: ManagedMetaAccountModel, + wallet: MetaAccountModel, interactor: WalletOptionInteractorInput, router: WalletOptionRouterInput, localizationManager: LocalizationManagerProtocol @@ -62,11 +63,11 @@ final class WalletOptionPresenter { extension WalletOptionPresenter: WalletOptionViewOutput { func changeWalletNameDidTap() { - router.showChangeWalletName(from: view, for: wallet.info) + router.showChangeWalletName(from: view, for: wallet) } func walletDetailsDidTap() { - router.showWalletDetails(from: view, for: wallet.info) + router.showWalletDetails(from: view, for: wallet) } func exportWalletDidTap() { @@ -78,13 +79,14 @@ extension WalletOptionPresenter: WalletOptionViewOutput { } func accountScoreDidTap() { - let address = wallet.info.ethereumAddress?.toHex(includePrefix: true) + let address = wallet.ecosystem.ethereumAddress?.toHex(includePrefix: true) router.presentAccountScore(address: address, from: view) } func didLoad(view: WalletOptionViewInput) { self.view = view interactor.setup(with: self) + view.walletDetailsButton(isVisible: wallet.ecosystem.isRegular) } } diff --git a/fearless/Modules/WalletOption/WalletOptionProtocols.swift b/fearless/Modules/WalletOption/WalletOptionProtocols.swift index 2f415bf613..222eda5e8c 100644 --- a/fearless/Modules/WalletOption/WalletOptionProtocols.swift +++ b/fearless/Modules/WalletOption/WalletOptionProtocols.swift @@ -1,7 +1,10 @@ +import SSFModels + typealias WalletOptionModuleCreationResult = (view: WalletOptionViewInput, input: WalletOptionModuleInput) protocol WalletOptionViewInput: ControllerBackedProtocol { func setDeleteButtonIsVisible(_ isVisible: Bool) + func walletDetailsButton(isVisible: Bool) } protocol WalletOptionViewOutput: AnyObject { @@ -30,7 +33,7 @@ protocol WalletOptionRouterInput: SheetAlertPresentable, AnyDismissable, Account ) func showExportWallet( from view: ControllerBackedProtocol?, - wallet: ManagedMetaAccountModel + wallet: MetaAccountModel ) func showChangeWalletName( from view: ControllerBackedProtocol?, diff --git a/fearless/Modules/WalletOption/WalletOptionRouter.swift b/fearless/Modules/WalletOption/WalletOptionRouter.swift index ff04acd173..cd55d42493 100644 --- a/fearless/Modules/WalletOption/WalletOptionRouter.swift +++ b/fearless/Modules/WalletOption/WalletOptionRouter.swift @@ -1,8 +1,9 @@ import Foundation +import SSFModels final class WalletOptionRouter: WalletOptionRouterInput { - func showExportWallet(from view: ControllerBackedProtocol?, wallet: ManagedMetaAccountModel) { - guard let module = BackupWalletAssembly.configureModule(wallet: wallet.info) else { + func showExportWallet(from view: ControllerBackedProtocol?, wallet: MetaAccountModel) { + guard let module = BackupWalletAssembly.configureModule(wallet: wallet) else { return } let navigationController = FearlessNavigationController( @@ -13,9 +14,11 @@ final class WalletOptionRouter: WalletOptionRouterInput { } func showWalletDetails(from view: ControllerBackedProtocol?, for wallet: MetaAccountModel) { - let module = WalletDetailsViewFactory.createView(flow: .normal(wallet: wallet)) + guard let module = ConnectedAccountsAssembly.configureModule() else { + return + } let navigationController = FearlessNavigationController( - rootViewController: module.controller + rootViewController: module.view.controller ) view?.controller.present(navigationController, animated: true) diff --git a/fearless/Modules/WalletOption/WalletOptionViewController.swift b/fearless/Modules/WalletOption/WalletOptionViewController.swift index 27c051ce5d..042b6d17c4 100644 --- a/fearless/Modules/WalletOption/WalletOptionViewController.swift +++ b/fearless/Modules/WalletOption/WalletOptionViewController.swift @@ -63,6 +63,11 @@ extension WalletOptionViewController: WalletOptionViewInput { func setDeleteButtonIsVisible(_ isVisible: Bool) { rootView.deleteWalletButton.isHidden = !isVisible } + + func walletDetailsButton(isVisible: Bool) { + rootView.walletDetailsButton.isHidden = !isVisible + rootView.accountScoreButton.isHidden = !isVisible + } } // MARK: - Localizable diff --git a/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentCellViewModel.swift b/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentCellViewModel.swift index 7f4ebc64ac..fbdcecd169 100644 --- a/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentCellViewModel.swift +++ b/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentCellViewModel.swift @@ -1,9 +1,12 @@ import Foundation +import UIKit struct WalletsManagmentCellViewModel { let isSelected: Bool let walletName: String + let icon: UIImage let fiatBalance: String? let dayChange: NSAttributedString? let accountScoreViewModel: AccountScoreViewModel? + let optionsAvailable: Bool } diff --git a/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentViewModelFactory.swift b/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentViewModelFactory.swift index 86f4472e24..4482adb09e 100644 --- a/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentViewModelFactory.swift +++ b/fearless/Modules/WalletsManagment/ViewModel/WalletsManagmentViewModelFactory.swift @@ -41,7 +41,7 @@ final class WalletsManagmentViewModelFactory: WalletsManagmentViewModelFactoryPr isSelected = selectedWalletId == nil ? false : managedMetaAccount.info.metaId == selectedWalletId } - let address = managedMetaAccount.info.ethereumAddress?.toHex(includePrefix: true) + let address = managedMetaAccount.info.ecosystem.ethereumAddress?.toHex(includePrefix: true) let accountScoreViewModel = AccountScoreViewModel( fetcher: accountScoreFetcher, address: address, @@ -55,9 +55,11 @@ final class WalletsManagmentViewModelFactory: WalletsManagmentViewModelFactoryPr return WalletsManagmentCellViewModel( isSelected: isSelected, walletName: managedMetaAccount.info.name, + icon: managedMetaAccount.info.icon(), fiatBalance: nil, dayChange: nil, - accountScoreViewModel: accountScoreViewModel + accountScoreViewModel: accountScoreViewModel, + optionsAvailable: managedMetaAccount.info.ecosystem.isRegular ) } @@ -74,9 +76,11 @@ final class WalletsManagmentViewModelFactory: WalletsManagmentViewModelFactoryPr return WalletsManagmentCellViewModel( isSelected: isSelected, walletName: managedMetaAccount.info.name, + icon: managedMetaAccount.info.icon(), fiatBalance: fiatBalance, dayChange: nil, - accountScoreViewModel: accountScoreViewModel + accountScoreViewModel: accountScoreViewModel, + optionsAvailable: managedMetaAccount.info.ecosystem.isRegular ) } @@ -90,9 +94,11 @@ final class WalletsManagmentViewModelFactory: WalletsManagmentViewModelFactoryPr let viewModel = WalletsManagmentCellViewModel( isSelected: isSelected, walletName: managedMetaAccount.info.name, + icon: managedMetaAccount.info.icon(), fiatBalance: totalFiatValue, dayChange: dayChange, - accountScoreViewModel: accountScoreViewModel + accountScoreViewModel: accountScoreViewModel, + optionsAvailable: managedMetaAccount.info.ecosystem.isRegular ) return viewModel } diff --git a/fearless/Modules/WalletsManagment/WalletsManagmentAssembly.swift b/fearless/Modules/WalletsManagment/WalletsManagmentAssembly.swift index 7c0446fd8f..b8aedd79cc 100644 --- a/fearless/Modules/WalletsManagment/WalletsManagmentAssembly.swift +++ b/fearless/Modules/WalletsManagment/WalletsManagmentAssembly.swift @@ -9,7 +9,8 @@ final class WalletsManagmentAssembly { viewType: WalletsManagmentType = .wallets, shouldSaveSelected: Bool, contextTag: Int = 0, - moduleOutput: WalletsManagmentModuleOutput? + moduleOutput: WalletsManagmentModuleOutput?, + filter: NSPredicate? = nil ) -> WalletsManagmentModuleCreationResult? { let sharedDefaultQueue = OperationManagerFacade.sharedDefaultQueue let localizationManager = LocalizationManager.shared @@ -18,7 +19,7 @@ final class WalletsManagmentAssembly { let accountRepositoryFactory = AccountRepositoryFactory(storageFacade: UserDataStorageFacade.shared) let managedMetaAccountRepository = accountRepositoryFactory.createManagedMetaAccountRepository( - for: nil, + for: filter, sortDescriptors: [] ) diff --git a/fearless/Modules/WalletsManagment/WalletsManagmentPresenter.swift b/fearless/Modules/WalletsManagment/WalletsManagmentPresenter.swift index 4525bb4bf7..f1bf173435 100644 --- a/fearless/Modules/WalletsManagment/WalletsManagmentPresenter.swift +++ b/fearless/Modules/WalletsManagment/WalletsManagmentPresenter.swift @@ -1,5 +1,6 @@ import Foundation import SoraFoundation +import SSFModels final class WalletsManagmentPresenter { // MARK: Private properties @@ -55,94 +56,6 @@ final class WalletsManagmentPresenter { self?.view?.didReceiveViewModels(viewModels) } } - - private func showImport() { - let preferredLanguages = selectedLocale.rLanguages - - let mnemonicTitle = R.string.localizable - .googleBackupChoiceMnemonic(preferredLanguages: preferredLanguages) - let mnemonicAction = SheetAlertPresentableAction( - title: mnemonicTitle, - button: UIFactory.default.createDisabledButton() - ) { [weak self] in - self?.router.dissmis(view: self?.view) { [weak self] in - self?.moduleOutput?.showImportWallet(defaultSource: .mnemonic) - } - } - - let rawTitle = R.string.localizable - .googleBackupChoiceRaw(preferredLanguages: preferredLanguages) - let rawAction = SheetAlertPresentableAction( - title: rawTitle, - button: UIFactory.default.createDisabledButton() - ) { [weak self] in - self?.router.dissmis(view: self?.view) { [weak self] in - self?.moduleOutput?.showImportWallet(defaultSource: .seed) - } - } - - let jsonTitle = R.string.localizable - .googleBackupChoiceJson(preferredLanguages: preferredLanguages) - let jsonAction = SheetAlertPresentableAction( - title: jsonTitle, - button: UIFactory.default.createDisabledButton() - ) { [weak self] in - self?.router.dissmis(view: self?.view) { [weak self] in - self?.moduleOutput?.showImportWallet(defaultSource: .keystore) - } - } - - let googleButton = TriangularedButton() - googleButton.imageWithTitleView?.iconImage = R.image.googleBackup() - googleButton.applyDisabledStyle() - let googleTitle = R.string.localizable - .googleBackupChoiceGoogle(preferredLanguages: preferredLanguages) - let googleAction = SheetAlertPresentableAction( - title: googleTitle, - button: googleButton - ) { [weak self] in - self?.router.dissmis(view: self?.view) { [weak self] in - self?.moduleOutput?.showImportGoogle() - } - } - - let preinstalledButton = TriangularedButton() - preinstalledButton.imageWithTitleView?.iconImage = R.image.iconPreinstalledWallet() - preinstalledButton.applyDisabledStyle() - let preinstalledTitle = R.string.localizable - .onboardingPreinstalledWalletButtonText(preferredLanguages: preferredLanguages) - let preinstalledAction = SheetAlertPresentableAction( - title: preinstalledTitle, - button: preinstalledButton - ) { [weak self] in - self?.router.dissmis(view: self?.view) { [weak self] in - self?.moduleOutput?.showGetPreinstalledWallet() - } - } - - let cancelTitle = R.string.localizable.commonCancel(preferredLanguages: preferredLanguages) - let cancelAction = SheetAlertPresentableAction( - title: cancelTitle, - style: .pinkBackgroundWhiteText - ) - - var actions = [mnemonicAction, rawAction, jsonAction, googleAction] - if featureToggleConfig.pendulumCaseEnabled == true { - actions.append(preinstalledAction) - } - actions.append(cancelAction) - let title = R.string.localizable - .googleBackupChoiceTitle(preferredLanguages: preferredLanguages) - let viewModel = SheetAlertPresentableViewModel( - title: title, - message: nil, - actions: actions, - closeAction: nil, - icon: nil - ) - - router.present(viewModel: viewModel, from: view) - } } // MARK: - WalletsManagmentViewOutput @@ -165,7 +78,7 @@ extension WalletsManagmentPresenter: WalletsManagmentViewOutput { guard let wallet = wallets[safe: indexPath.row] else { return } - router.showOptions(from: view, metaAccount: wallet, delegate: self) + router.showOptions(from: view, metaAccount: wallet.info, delegate: self) } func didTapNewWallet() { @@ -174,10 +87,6 @@ extension WalletsManagmentPresenter: WalletsManagmentViewOutput { } } - func didTapImportWallet() { - showImport() - } - func didLoad(view: WalletsManagmentViewInput) { self.view = view interactor.setup(with: self) @@ -214,8 +123,10 @@ extension WalletsManagmentPresenter: WalletsManagmentInteractorOutput { func didReceiveWalletBalances(_ balances: Result<[MetaAccountId: WalletBalanceInfo], Error>) { switch balances { case let .success(balances): - self.balances = balances - provideViewModel() + if self.balances != balances { + self.balances = balances + provideViewModel() + } case let .failure(error): logger.error("WalletsManagmentPresenter error: \(error.localizedDescription)") } @@ -234,9 +145,7 @@ extension WalletsManagmentPresenter: WalletsManagmentInteractorOutput { // MARK: - Localizable extension WalletsManagmentPresenter: Localizable { - func applyLocalization() { - provideViewModel() - } + func applyLocalization() {} } extension WalletsManagmentPresenter: WalletsManagmentModuleInput {} diff --git a/fearless/Modules/WalletsManagment/WalletsManagmentProtocols.swift b/fearless/Modules/WalletsManagment/WalletsManagmentProtocols.swift index 0a0af6418d..aecb578c12 100644 --- a/fearless/Modules/WalletsManagment/WalletsManagmentProtocols.swift +++ b/fearless/Modules/WalletsManagment/WalletsManagmentProtocols.swift @@ -1,4 +1,6 @@ import Foundation +import SSFModels + typealias WalletsManagmentModuleCreationResult = (view: WalletsManagmentViewInput, input: WalletsManagmentModuleInput) protocol WalletsManagmentViewInput: ControllerBackedProtocol { @@ -8,7 +10,6 @@ protocol WalletsManagmentViewInput: ControllerBackedProtocol { protocol WalletsManagmentViewOutput: AnyObject { func didLoad(view: WalletsManagmentViewInput) func didTapNewWallet() - func didTapImportWallet() func didTapOptions(for indexPath: IndexPath) func didTapClose() func didTap(on indexPath: IndexPath) @@ -32,7 +33,7 @@ protocol WalletsManagmentInteractorOutput: AnyObject { protocol WalletsManagmentRouterInput: SheetAlertPresentable, ErrorPresentable, AccountScorePresentable { func showOptions( from view: WalletsManagmentViewInput?, - metaAccount: ManagedMetaAccountModel, + metaAccount: MetaAccountModel, delegate: WalletOptionModuleOutput? ) func dissmis( diff --git a/fearless/Modules/WalletsManagment/WalletsManagmentRouter.swift b/fearless/Modules/WalletsManagment/WalletsManagmentRouter.swift index a279ed9c73..b2de8db3e1 100644 --- a/fearless/Modules/WalletsManagment/WalletsManagmentRouter.swift +++ b/fearless/Modules/WalletsManagment/WalletsManagmentRouter.swift @@ -1,9 +1,10 @@ import Foundation +import SSFModels final class WalletsManagmentRouter: WalletsManagmentRouterInput { func showOptions( from view: WalletsManagmentViewInput?, - metaAccount: ManagedMetaAccountModel, + metaAccount: MetaAccountModel, delegate: WalletOptionModuleOutput? ) { guard diff --git a/fearless/Modules/WalletsManagment/WalletsManagmentTableCell.swift b/fearless/Modules/WalletsManagment/WalletsManagmentTableCell.swift index 5cdabe2d5b..d96a719777 100644 --- a/fearless/Modules/WalletsManagment/WalletsManagmentTableCell.swift +++ b/fearless/Modules/WalletsManagment/WalletsManagmentTableCell.swift @@ -16,8 +16,8 @@ final class WalletsManagmentTableCell: UITableViewCell { static let optionsButtonSize = CGSize(width: 44, height: 44) } - private let backgroundTriangularedView: TriangularedView = { - let view = TriangularedView() + private let backgroundTriangularedView: GradientBorderedTriangularedView = { + let view = GradientBorderedTriangularedView() view.fillColor = R.color.colorSemiBlack()! view.highlightedFillColor = R.color.colorSemiBlack()! view.strokeColor = .clear @@ -83,17 +83,18 @@ final class WalletsManagmentTableCell: UITableViewCell { override func prepareForReuse() { super.prepareForReuse() - backgroundTriangularedView.setGradientBorder(highlighted: false, animated: false) } func bind(to viewModel: WalletsManagmentCellViewModel) { - iconImageView.image = R.image.iconBirdGreen() + iconImageView.image = viewModel.icon walletNameLabel.text = viewModel.walletName dayChangeLabel.attributedText = viewModel.dayChange - backgroundTriangularedView.setGradientBorder(highlighted: viewModel.isSelected, animated: false) - + + optionsButton.isHidden = !viewModel.optionsAvailable fiatBalanceLabel.text = viewModel.fiatBalance - + + backgroundTriangularedView.gradientBorder.isHidden = !viewModel.isSelected + if viewModel.fiatBalance == nil { startLoadingIfNeeded() } else { @@ -107,6 +108,10 @@ final class WalletsManagmentTableCell: UITableViewCell { } } + func hideScore() { + accountScoreView.isHidden = true + } + private func configure() { optionsButton.addTarget(self, action: #selector(optionsDidTap), for: .touchUpInside) } @@ -209,7 +214,7 @@ extension WalletsManagmentTableCell: SkeletonLoadable { } private func setupSkeleton() { - let spaceSize = CGSizeMake(frame.width - Constants.optionsButtonSize.width, frame.height) + let spaceSize = CGSize(width: frame.width - Constants.optionsButtonSize.width, height: frame.height) guard spaceSize != .zero else { self.skeletonView = Skrull(size: .zero, decorations: [], skeletons: []).build() diff --git a/fearless/Modules/WalletsManagment/WalletsManagmentViewController.swift b/fearless/Modules/WalletsManagment/WalletsManagmentViewController.swift index 8aa905499f..48b078dab4 100644 --- a/fearless/Modules/WalletsManagment/WalletsManagmentViewController.swift +++ b/fearless/Modules/WalletsManagment/WalletsManagmentViewController.swift @@ -58,7 +58,6 @@ final class WalletsManagmentViewController: UIViewController, ViewHolder { private func configure() { rootView.addNewWalletButton.addTarget(self, action: #selector(addNewWalletTapped), for: .touchUpInside) - rootView.importWalletButton.addTarget(self, action: #selector(importWalletTapped), for: .touchUpInside) rootView.backButton.addTarget(self, action: #selector(closeDidTapped), for: .touchUpInside) } @@ -68,10 +67,6 @@ final class WalletsManagmentViewController: UIViewController, ViewHolder { output.didTapNewWallet() } - @objc private func importWalletTapped() { - output.didTapImportWallet() - } - @objc private func closeDidTapped() { output.didTapClose() } diff --git a/fearless/Modules/WalletsManagment/WalletsManagmentViewLayout.swift b/fearless/Modules/WalletsManagment/WalletsManagmentViewLayout.swift index 4f1de3ba78..f7bf00955c 100644 --- a/fearless/Modules/WalletsManagment/WalletsManagmentViewLayout.swift +++ b/fearless/Modules/WalletsManagment/WalletsManagmentViewLayout.swift @@ -1,5 +1,6 @@ import UIKit import SoraUI +import SSFModels enum WalletsManagmentType { case wallets @@ -42,13 +43,6 @@ final class WalletsManagmentViewLayout: UIView { return button }() - let importWalletButton: TriangularedButton = { - let button = TriangularedButton() - button.triangularedView?.fillColor = R.color.colorBlack1()! - button.imageWithTitleView?.titleFont = .h4Title - return button - }() - var locale: Locale = .current { didSet { applyLocale() @@ -75,9 +69,6 @@ final class WalletsManagmentViewLayout: UIView { case .selectYourWallet: titleLabel.text = R.string.localizable.walletManagmentSelectWalletTitle(preferredLanguages: locale.rLanguages) } - importWalletButton.imageWithTitleView?.title = R.string.localizable.importWallet( - preferredLanguages: locale.rLanguages - ) addNewWalletButton.imageWithTitleView?.title = R.string.localizable.walletsManagmentAddNewWallet( preferredLanguages: locale.rLanguages ) @@ -118,12 +109,7 @@ final class WalletsManagmentViewLayout: UIView { make.height.equalTo(UIConstants.actionHeight) } - importWalletButton.snp.makeConstraints { make in - make.height.equalTo(UIConstants.actionHeight) - } - buttonsVStackView.addArrangedSubview(addNewWalletButton) - buttonsVStackView.addArrangedSubview(importWalletButton) addSubview(tableView) tableView.snp.makeConstraints { make in diff --git a/fearless/en.lproj/Localizable.strings b/fearless/en.lproj/Localizable.strings index d8aadf0489..2c9dff8693 100644 --- a/fearless/en.lproj/Localizable.strings +++ b/fearless/en.lproj/Localizable.strings @@ -1,7 +1,7 @@ "NSCameraUsageDescription" = "The camera is used to capture QR codes"; "NSFaceIDUsageDescription" = "Fearless uses Face ID to restrict unauthorized users from accessing the app. Face ID is used to authorize within the application"; "NSPhotoLibraryAddUsageDescription" = "Save transfer request as a QR code"; -"NSPhotoLibraryUsageDescription" = "Load photos from library"; +"NSPhotoLibraryUsageDescription" = "Access to the library is needed to select existing images of QR codes"; "about.announcement" = "Receive Announcements"; "about.ask.for.support" = "Ask for Support"; "about.contact.email" = "Contact Email"; @@ -66,6 +66,7 @@ "account.option" = "Account option"; "account.stats.avg.transaction.time.title" = "Avg. transaction time"; "account.stats.description.text" = "Your Multichain Score is based on your onchain journey through 3 ecosystems: Ethereum, Polygon and Binance Smart Chain"; +"account.stats.error.message" = "Unable to retrieve account score information. Please try again later."; "account.stats.hold.tokens.usd.title" = "Hold tokens USD"; "account.stats.max.transaction.time.title" = "Max transaction time"; "account.stats.min.transactions.time.title" = "Min transaction time"; @@ -73,8 +74,10 @@ "account.stats.rejected.transactions.title" = "Rejected transactions"; "account.stats.title" = "Your score"; "account.stats.total.transactions.title" = "Total transactions"; +"account.stats.unavailable.text" = "You don't have an EVM compatible account. If you want to see the score - add it via \"Import wallet\" option."; "account.stats.updated.title" = "Updated"; "account.stats.wallet.age.title" = "Wallet age"; +"account.stats.wallet.option.title" = "Show wallet score"; "account.template" = "%s account"; "account.unique.secret" = "Accounts with unique secrets"; "accounts.add.account" = "Add an account"; @@ -136,7 +139,7 @@ "backup.mnemonic.description" = "Remember to record your words in the same order as they appear below. Use a non-digital way to backup."; "backup.mnemonic.title" = "Write down your mnemonic"; "backup.not.backed.up.confirm" = "I will risk it"; -"backup.not.backed.up.message" = "If your device gets lost or stolen, you will loose your wallet and all your funds forever"; +"backup.not.backed.up.message" = "If your device gets lost or stolen, you will lose your wallet and all your funds forever"; "backup.not.backed.up.title" = "Not backed up!"; "backup.password.description" = "Enter backup password for the selected wallet to import"; "backup.password.password.field.title" = "Enter password"; @@ -172,6 +175,11 @@ "balance.locks.liquidity.pools.row.title" = "Liquidity Pools"; "balance.locks.nomination.pools.row.title" = "Nomination Pools"; "balance.locks.screen.title" = "Locked details"; +"banner.addwallet.regular.button.title" = "Сreate or import"; +"banner.addwallet.regular.subtitle" = "Join the ecosystems with more than 90+ chains and fascinating features"; +"banner.addwallet.regular.title" = "EVM/Substrate accounts"; +"banner.addwallet.ton.button.title" = "Join now"; +"banner.addwallet.ton.title" = "Join the fastest growing ecosystem ever"; "banners.view.factory.backup.action.title" = "Backup now"; "banners.view.factory.backup.subtitle" = "Protect yourself from losing access to your funds"; "banners.view.factory.backup.title" = "Wallet backup"; @@ -270,6 +278,7 @@ Euro cash"; "common.name" = "Name"; "common.network" = "Network"; "common.network.fee" = "Network fee"; +"common.network.hash" = "%@ Hash"; "common.network.management" = "Network management"; "common.next" = "Next"; "common.no" = "No"; @@ -286,6 +295,7 @@ Euro cash"; "common.privacy.policy" = "Privacy Policy"; "common.proceed" = "Proceed"; "common.referral.code.title" = "Referral code"; +"common.refund" = "Refund"; "common.reject" = "Reject"; "common.rejected" = "Rejected"; "common.request" = "Request"; @@ -297,6 +307,8 @@ Euro cash"; "common.search.results.number" = "Search results: %d"; "common.search.start.title" = "Search results will appear here"; "common.secret.derivation.path" = "Secret derivation path"; +"common.see.all" = "See all"; +"common.see.all" = "See all"; "common.select" = "Select"; "common.select" = "Select"; "common.select.all" = "Select all"; @@ -334,6 +346,10 @@ Euro cash"; "confirm.mnemonic.mismatch.error.title" = "Invalid mnemonic"; "confirmation.skip.action" = "Skip process"; "connect.details" = "Connect details"; +"connected.accounts.common" = "Connected Accounts"; +"connected.accounts.ethereum.title" = "EVM chain accounts"; +"connected.accounts.substrate.title" = "Substrate chain accounts"; +"connected.accounts.ton.title" = "TON chain accounts"; "connection.add.already.exists.error" = "The node has been added previously. Please try another node."; "connection.add.invalid.error" = "Can't establish connection with the node. Please try another one."; "connection.add.unsupported.error" = "Unfortunately, the network is unsupported. Please try one of the following: %@."; @@ -362,6 +378,14 @@ Euro cash"; "create.new.account" = "Create a new account"; "create.new.connection" = "Create new connection"; "create.new.pincode" = "Create a new pin code"; +"cross.chain.tx.status.destination.fail.description" = "Transaction failed on the %@. Your funds in the current transaction will be returned to your wallet."; +"cross.chain.tx.status.destination.fail.title" = "Transaction refund"; +"cross.chain.tx.status.done.description" = "Transaction has been successfully completed."; +"cross.chain.tx.status.done.title" = "All done"; +"cross.chain.tx.status.pending.description" = "Transaction is in progress. Please wait while %@ asset cross the bridge from the %@ to the %@ network."; +"cross.chain.tx.status.pending.title" = "Transaction pending"; +"cross.chain.tx.status.source.fail.description" = "Transaction failed on the %@ network. Please, try again."; +"cross.chain.tx.status.source.fail.title" = "Transaction failed"; "crowdloan.active.section.format" = "Active (%@)"; "crowdloan.app.bonus.format" = "Fearless Wallet bonus (%@)"; "crowdloan.astar.referral.code.invalid" = "Invalid referral address, only Polkadot addresses are accepted, please try again "; @@ -402,10 +426,22 @@ Euro cash"; "custom.collators.text" = "You should trust your collators to act competently and honestly; basing your decision purely on their current profitability could lead to reduced profits or even loss of funds."; "custom.collators.title" = "Stake with known collators"; "custom.validators.empty.message" = "No validators found.\nPlease try to change filters"; +"dapp.category.connected.title" = "Connected"; +"dapp.category.defi.title" = "DeFi"; +"dapp.category.featured.title" = "Featured"; +"dapp.category.nft.title" = "NFT"; +"dapp.category.utilities.title" = "Utilities"; +"dapp.connected.title" = "Connected"; +"dapp.discover.title" = "Discover dApp"; +"dapp.no.connected.dapps.title" = "No connected dApps"; +"dapp.not.found.title" = "No dApps were found"; "default.account.shared.secret" = "Accounts with a shared secret"; "delete.custom.node.title" = "Delete custom node?"; "ecdsa.selection.subtitle" = "(BTC/ETH compatible)"; "ecdsa.selection.title" = "ECDSA"; +"ecosystem.options.backup.title" = "Backup chain accounts"; +"ecosystem.options.details.title" = "Chain accounts"; +"ecosystem.options.title" = "Account options"; "ed25519.selection.subtitle" = "ed25519 (alternative)"; "ed25519.selection.title" = "Edwards"; "empty.state.message" = "Nothing found for your request"; @@ -488,6 +524,7 @@ Seed: %@"; "lp.banner.text" = "Invest your funds in Liquidity\npools and receive rewards"; "lp.confirm.liquidity.screen.title" = "Confirm Liquidity"; "lp.confirm.liquidity.warning.text" = "Output is estimated. If the price changes more than 0.5% your transaction will revert."; +"lp.liquidity.add.complete.text" = "Your supply to Liquidity pools has been successfully completed"; "lp.network.fee.alert.text" = "Network fee is used to ensure SORA system’s growth and stable performance."; "lp.network.fee.alert.title" = "Network fee"; "lp.pool.details.title" = "Pool details"; @@ -495,12 +532,12 @@ Seed: %@"; "lp.pool.remove.warning.title" = "NOTE"; "lp.remove.button.title" = "Remove Liquidity"; "lp.remove.liquidity.screen.title" = "Remove Liquidity"; -"lp.reward.token.text" = "Earn %@"; +"lp.reward.token.text" = "Earn %s"; "lp.reward.token.title" = "Rewards Payout In"; "lp.slippage.title" = "Slippage"; "lp.supply.button.title" = "Supply Liquidity"; "lp.supply.liquidity.screen.title" = "Supply Liquidity"; -"lp.token.pooled.text" = "Your %@ Pooled"; +"lp.token.pooled.text" = "Your %s Pooled"; "lp.user.pools.title" = "User pools"; "manage.assets.account.missing.text" = "Add an account..."; "manage.assets.search.hint" = "Search by asset"; @@ -538,7 +575,7 @@ This is your transaction hash:"; "network.issues.hide.action.title" = "Don’t show me again"; "network.issues.resolve.option.title" = "Resolve Option"; "network.management.popular" = "Popular"; -"network.managment.favourite" = "Favourite"; +"network.managment.favourite" = "Favorite"; "network.status.connected" = "Connected"; "network.status.connecting" = "Connecting…"; "network.url.address" = "URL address"; @@ -565,6 +602,10 @@ This is your transaction hash:"; "no.email.bound.error.message" = "Please make sure that the mail application is installed in the device."; "node" = "Node"; "node.selection.delete.node.title" = "Delete custom node?"; +"onboarding.banner.regular.ecosystem.button.title" = "Join EVM or Substrate"; +"onboarding.banner.regular.ecosystem.title" = "Create or import Substrate or EVM accounts"; +"onboarding.banner.ton.ecosystem.button.title" = "Join TON"; +"onboarding.banner.ton.ecosystem.title" = "Connect to the fastest growing ecosystem ever"; "onboarding.create.account" = "Create an account"; "onboarding.create.wallet" = "Create a wallet"; "onboarding.preinstalled.wallet.button.text" = "Get a pre-installed wallet"; @@ -705,6 +746,7 @@ Terms and Conditions and Privacy Policy"; "pools.limit.has.reached.error.message" = "The limit of pools in this network has been reached"; "pools.limit.has.reached.error.title" = "You cannot create more pools"; "profile.about.title" = "About"; +"profile.account.score.title" = "Nomis multichain score"; "profile.accounts.title" = "Accounts"; "profile.language.title" = "Language"; "profile.logout.description" = "This action will result in deleting all accounts from this device. Make sure you have backed up your passphrase before proceeding."; @@ -732,8 +774,12 @@ Terms and Conditions and Privacy Policy"; "scam.additional.stub" = "Additional:"; "scam.description.donation.stub" = "This address has been flagged as suspicious. We strongly recommend that you don't send %s to this account."; "scam.description.exchange.stub" = "This address is marked as an exchange, be careful as the deposit and withdrawal addresses may different."; +"scam.description.lowscore.text" = "The address you are about to transfer to has low onchain activity, which may indicate a potential scammer or sybil attacker"; "scam.description.sanctions.stub" = "This address has been flagged due to an entity related to a country under sanctions. We strongly recommend that you don't send %s to this account."; "scam.description.scam.stub" = "This address has been flagged due to evidence of a scam. We strongly recommend that you don't send {asset} to this account."; +"scam.info.nomis.name" = "Nomis multi-chain score"; +"scam.info.nomis.reason.text" = "Low network activity"; +"scam.info.nomis.subtype.text" = "Proceed with caution"; "scam.name.stub" = "Name:"; "scam.reason.stub" = "Reason:"; "scam.warning.alert.subtitle" = "We strongly recommend that you don't send %s to this account."; @@ -1071,6 +1117,10 @@ Remember to make a backup of your key and keep it in a safe and private place (e "terms.and.conditions.sora.community.alert.main" = "SORA community does not collect any of your personal data, "; "terms.and.conditions.sora.community.alert.secondary" = "but to get the SORA Card and IBAN account you need to go through KYC process with a card issuer."; "terms.and.conditions.title" = "Terms & Conditions"; +"ton.connect.alert.description" = "Service address"; +"ton.connect.alert.subtitle" = "Be sure to check the service address before connecting the wallet"; +"ton.connect.alert.title" = "Review dApp info"; +"ton.tonviewer.action.title" = "View in Tonviewer"; "tranaction.history.others.tab.title" = "Others"; "transaction.detail.date" = "Date"; "transaction.detail.status" = "Status"; @@ -1096,7 +1146,7 @@ Remember to make a backup of your key and keep it in a safe and private place (e "username.setup.hint.2.0" = "Example: Savings, Investments, Crowdloans, Staking. This nickname will only be displayed to you and stored locally on your mobile device."; "username.setup.title" = "Create an account"; "username.setup.title.2.0" = "Create a new wallet"; -"validator.info.comission.title" = "Comission"; +"validator.info.comission.title" = "commission"; "validator.info.min.stake.alert.text" = "Minimum stake among active nominators is %s. To get rewards you have to stake more."; "validator.info.min.stake.among.active.nominators.text" = "Minimum stake among active nominators"; "validators.list.empty.message" = "No validators found"; @@ -1203,10 +1253,4 @@ belongs to the right network"; "your.validators.change.validators.title" = "Change validators"; "your.validators.stop.nominating.title" = "Stop nominating"; "your.validators.validator.total.stake" = "Total staked: %@"; -"сurrencies.stub.text" = "Currencies"; -"account.stats.wallet.option.title" = "Show wallet score"; -"scam.description.lowscore.text" = "The address you are about to transfer to has low onchain activity, which may indicate a potential scammer or sybil attacker"; -"account.stats.error.message" = "Unable to retrieve account score information. Please try again later."; -"profile.account.score.title" = "Nomis multichain score"; -"scam.info.nomis.name" = "Nomis multi-chain score"; -"scam.info.nomis.subtype.text" = "Proceed with caution"; +"сurrencies.stub.text" = "Currencies"; \ No newline at end of file diff --git a/fearless/fearless.entitlements b/fearless/fearless.entitlements new file mode 100644 index 0000000000..24790b4a94 --- /dev/null +++ b/fearless/fearless.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.developer.associated-domains + + $(ASSOCIATED_DOMAIN_APPLINKS) + + + diff --git a/fearless/id.lproj/Localizable.strings b/fearless/id.lproj/Localizable.strings index faf06dc9b5..0d94308619 100644 --- a/fearless/id.lproj/Localizable.strings +++ b/fearless/id.lproj/Localizable.strings @@ -66,6 +66,7 @@ "account.option" = "Opsi akun"; "account.stats.avg.transaction.time.title" = "Avg. transaction time"; "account.stats.description.text" = "Your Multichain Score is based on your onchain journey through 3 ecosystems: Ethereum, Polygon and Binance Smart Chain"; +"account.stats.error.message" = "Unable to retrieve account score information. Please try again later."; "account.stats.hold.tokens.usd.title" = "Hold tokens USD"; "account.stats.max.transaction.time.title" = "Max transaction time"; "account.stats.min.transactions.time.title" = "Min transaction time"; @@ -73,8 +74,10 @@ "account.stats.rejected.transactions.title" = "Rejected transactions"; "account.stats.title" = "Your score"; "account.stats.total.transactions.title" = "Total transactions"; +"account.stats.unavailable.text" = "You don't have an EVM compatible account. If you want to see the score - add it via \"Import wallet\" option."; "account.stats.updated.title" = "Updated"; "account.stats.wallet.age.title" = "Wallet age"; +"account.stats.wallet.option.title" = "Show wallet score"; "account.template" = "%s Akun"; "account.unique.secret" = "Akun dengan rahasia unik"; "accounts.add.account" = "Tambah akun"; @@ -172,6 +175,11 @@ "balance.locks.liquidity.pools.row.title" = "Kumpulan Likuiditas"; "balance.locks.nomination.pools.row.title" = "Kumpulan Nominasi"; "balance.locks.screen.title" = "Detail terkunci"; +"banner.addwallet.regular.button.title" = "Сreate or import"; +"banner.addwallet.regular.subtitle" = "Join the ecosystems with more than 90+ chains and fascinating features"; +"banner.addwallet.regular.title" = "EVM/Substrate accounts"; +"banner.addwallet.ton.button.title" = "Join now"; +"banner.addwallet.ton.title" = "Join the fastest growing ecosystem ever"; "banners.view.factory.backup.action.title" = "Cadangkan sekarang"; "banners.view.factory.backup.subtitle" = "Lindungi diri Anda dari kehilangan akses ke dana Anda"; "banners.view.factory.backup.title" = "Dompet cadangan"; @@ -269,6 +277,7 @@ "common.name" = "Nama"; "common.network" = "Jaringan"; "common.network.fee" = "Biaya jaringan"; +"common.network.hash" = "%@ Hash"; "common.network.management" = "Manajemen jaringan"; "common.next" = "Berikutnya"; "common.no" = "Tidak"; @@ -285,6 +294,7 @@ "common.privacy.policy" = "Kebijakan pribadi"; "common.proceed" = "Memproses"; "common.referral.code.title" = "Kode referensi"; +"common.refund" = "Refund"; "common.reject" = "Tolak"; "common.rejected" = "Ditolak"; "common.request" = "Permintaan"; @@ -296,6 +306,8 @@ "common.search.results.number" = "Hasil pencarian: %d"; "common.search.start.title" = "Hasil pencarian akan muncul di sini"; "common.secret.derivation.path" = "Secret derivation path"; +"common.see.all" = "See all"; +"common.see.all" = "See all"; "common.select" = "Pilih"; "common.select" = "Pilih"; "common.select.all" = "Pilih semuanya"; @@ -333,6 +345,10 @@ "confirm.mnemonic.mismatch.error.title" = "Mnemonik tidak valid"; "confirmation.skip.action" = "Lewati proses"; "connect.details" = "Detail terhubung"; +"connected.accounts.common" = "Connected Accounts"; +"connected.accounts.ethereum.title" = "EVM chain accounts"; +"connected.accounts.substrate.title" = "Substrate chain accounts"; +"connected.accounts.ton.title" = "TON chain accounts"; "connection.add.already.exists.error" = "Node sudah ditambahkan sebelumnya. Silakan, coba node lain."; "connection.add.invalid.error" = "Tidak dapat membuat koneksi dengan node. Silakan, coba yang lain."; "connection.add.unsupported.error" = "Sayangnya, jaringan tersebut tidak didukung. Silakan, coba salah satu hal berikut ini: %@."; @@ -361,6 +377,14 @@ "create.new.account" = "Buat akun baru"; "create.new.connection" = "Buat koneksi baru"; "create.new.pincode" = "Buat kode pin baru"; +"cross.chain.tx.status.destination.fail.description" = "Transaction failed on the %@. Your funds in the current transaction will be returned to your wallet."; +"cross.chain.tx.status.destination.fail.title" = "Transaction refund"; +"cross.chain.tx.status.done.description" = "Transaction has been successfully completed."; +"cross.chain.tx.status.done.title" = "All done"; +"cross.chain.tx.status.pending.description" = "Transaction is in progress. Please wait while %@ asset cross the bridge from the %@ to the %@ network."; +"cross.chain.tx.status.pending.title" = "Transaction pending"; +"cross.chain.tx.status.source.fail.description" = "Transaction failed on the %@ network. Please, try again."; +"cross.chain.tx.status.source.fail.title" = "Transaction failed"; "crowdloan.active.section.format" = "Aktif ( %@ )"; "crowdloan.app.bonus.format" = "Bonus Dompet Fearless (%@)"; "crowdloan.astar.referral.code.invalid" = "Alamat referral tidak valid, hanya alamat Polkadot yang diterima, silakan coba lagi"; @@ -401,10 +425,22 @@ "custom.collators.text" = "Anda harus memercayai kolaborator Anda untuk bertindak secara kompeten dan jujur; mendasarkan keputusan Anda semata-mata pada profitabilitas mereka saat ini dapat menyebabkan berkurangnya keuntungan atau bahkan hilangnya dana."; "custom.collators.title" = "Taruhan dengan collator yang dikenal"; "custom.validators.empty.message" = "Validator tidak ditemukan.\nSilakan coba ubah filter"; +"dapp.category.connected.title" = "Connected"; +"dapp.category.defi.title" = "DeFi"; +"dapp.category.featured.title" = "Featured"; +"dapp.category.nft.title" = "NFT"; +"dapp.category.utilities.title" = "Utilities"; +"dapp.connected.title" = "Connected"; +"dapp.discover.title" = "Discover dApp"; +"dapp.no.connected.dapps.title" = "No connected dApps"; +"dapp.not.found.title" = "No dApps were found"; "default.account.shared.secret" = "Akun dengan rahasia bersama"; "delete.custom.node.title" = "Hapus node khusus?"; "ecdsa.selection.subtitle" = "(Kompatibel dengan BTC / ETH)"; "ecdsa.selection.title" = "ECDSA"; +"ecosystem.options.backup.title" = "Backup chain accounts"; +"ecosystem.options.details.title" = "Chain accounts"; +"ecosystem.options.title" = "Account options"; "ed25519.selection.subtitle" = "ed25519 (alternatif)"; "ed25519.selection.title" = "Edwards"; "empty.state.message" = "Tidak ada yang ditemukan untuk permintaan Anda"; @@ -487,6 +523,7 @@ Seed: %@"; "lp.banner.text" = "Invest your funds in Liquidity\npools and receive rewards"; "lp.confirm.liquidity.screen.title" = "Confirm Liquidity"; "lp.confirm.liquidity.warning.text" = "Output is estimated. If the price changes more than 0.5% your transaction will revert."; +"lp.liquidity.add.complete.text" = "Your supply to Liquidity pools has been successfully completed"; "lp.network.fee.alert.text" = "Network fee is used to ensure SORA system’s growth and stable performance."; "lp.network.fee.alert.title" = "Network fee"; "lp.pool.details.title" = "Pool details"; @@ -494,12 +531,12 @@ Seed: %@"; "lp.pool.remove.warning.title" = "NOTE"; "lp.remove.button.title" = "Remove Liquidity"; "lp.remove.liquidity.screen.title" = "Remove Liquidity"; -"lp.reward.token.text" = "Earn %@"; +"lp.reward.token.text" = "Earn %s"; "lp.reward.token.title" = "Rewards Payout In"; "lp.slippage.title" = "Slippage"; "lp.supply.button.title" = "Supply Liquidity"; "lp.supply.liquidity.screen.title" = "Supply Liquidity"; -"lp.token.pooled.text" = "Your %@ Pooled"; +"lp.token.pooled.text" = "Your %s Pooled"; "lp.user.pools.title" = "User pools"; "manage.assets.account.missing.text" = "Tambahkan akun..."; "manage.assets.search.hint" = "Cari berdasarkan aset"; @@ -558,6 +595,10 @@ Seed: %@"; "no.email.bound.error.message" = "Harap pastikan bahwa aplikasi mail telah terinstal pada perangkat."; "node" = "Node"; "node.selection.delete.node.title" = "Hapus node khusus?"; +"onboarding.banner.regular.ecosystem.button.title" = "Join EVM or Substrate"; +"onboarding.banner.regular.ecosystem.title" = "Create or import Substrate or EVM accounts"; +"onboarding.banner.ton.ecosystem.button.title" = "Join TON"; +"onboarding.banner.ton.ecosystem.title" = "Connect to the fastest growing ecosystem ever"; "onboarding.create.account" = "Buat Akun"; "onboarding.create.wallet" = "Buat dompet"; "onboarding.preinstalled.wallet.button.text" = "Dapatkan dompet pra-instal"; @@ -698,6 +739,7 @@ Syarat dan Ketentuan serta Kebijakan Privasi"; "pools.limit.has.reached.error.message" = "Batas kumpulan di jaringan ini telah tercapai"; "pools.limit.has.reached.error.title" = "Anda tidak dapat membuat kumpulan lagi"; "profile.about.title" = "Tentang"; +"profile.account.score.title" = "Nomis multichain score"; "profile.accounts.title" = "Akun"; "profile.language.title" = "Bahasa"; "profile.logout.description" = "Tindakan ini akan mengakibatkan penghapusan semua akun dari perangkat ini. Pastikan Anda telah membuat cadangan frasa sandi Anda sebelum melanjutkan."; @@ -725,8 +767,12 @@ Syarat dan Ketentuan serta Kebijakan Privasi"; "scam.additional.stub" = "Tambahan:"; "scam.description.donation.stub" = "Alamat ini telah ditandai sebagai mencurigakan. Kami sangat menyarankan agar Anda tidak mengirimkan %s ke akun ini."; "scam.description.exchange.stub" = "Alamat ini ditandai sebagai bursa, hati-hati karena alamat penyetoran dan penarikan mungkin berbeda."; +"scam.description.lowscore.text" = "The address you are about to transfer to has low onchain activity, which may indicate a potential scammer or sybil attacker"; "scam.description.sanctions.stub" = "Alamat ini ditandai karena ada entitas yang terkait dengan negara yang terkena sanksi. Kami sangat menyarankan agar Anda tidak mengirimkan %s ke akun ini."; "scam.description.scam.stub" = "Alamat ini telah ditandai karena ada bukti penipuan. Kami sangat menyarankan agar Anda tidak mengirim %s ke akun ini."; +"scam.info.nomis.name" = "Nomis multi-chain score"; +"scam.info.nomis.reason.text" = "Low network activity"; +"scam.info.nomis.subtype.text" = "Proceed with caution"; "scam.name.stub" = "Nama:"; "scam.reason.stub" = "Alasan:"; "scam.warning.alert.subtitle" = "Kami sangat menyarankan agar Anda tidak mengirim %s ke akun ini."; @@ -1059,6 +1105,10 @@ Syarat dan Ketentuan serta Kebijakan Privasi"; "terms.and.conditions.sora.community.alert.main" = "Komunitas SORA tidak mengumpulkan data pribadi Anda,"; "terms.and.conditions.sora.community.alert.secondary" = "namun untuk mendapatkan Kartu SORA dan akun IBAN Anda harus melalui proses KYC dengan penerbit kartu."; "terms.and.conditions.title" = "Syarat dan ketentuan"; +"ton.connect.alert.description" = "Service address"; +"ton.connect.alert.subtitle" = "Be sure to check the service address before connecting the wallet"; +"ton.connect.alert.title" = "Review dApp info"; +"ton.tonviewer.action.title" = "View in Tonviewer"; "tranaction.history.others.tab.title" = "Lainnya"; "transaction.detail.date" = "Tanggal"; "transaction.detail.status" = "Status"; @@ -1187,10 +1237,4 @@ akan muncul di sini"; "your.validators.change.validators.title" = "Ubah validator"; "your.validators.stop.nominating.title" = "berhenti mencalonkan diri"; "your.validators.validator.total.stake" = "Total ditaruhkan: %@"; -"сurrencies.stub.text" = "Mata uang"; -"account.stats.wallet.option.title" = "Show wallet score"; -"scam.description.lowscore.text" = "The address you are about to transfer to has low onchain activity, which may indicate a potential scammer or sybil attacker"; -"account.stats.error.message" = "Unable to retrieve account score information. Please try again later."; -"profile.account.score.title" = "Nomis multichain score"; -"scam.info.nomis.name" = "Nomis multi-chain score"; -"scam.info.nomis.subtype.text" = "Proceed with caution"; +"сurrencies.stub.text" = "Mata uang"; \ No newline at end of file diff --git a/fearless/ja.lproj/Localizable.strings b/fearless/ja.lproj/Localizable.strings index 964bb6e5bd..a6c92670fc 100644 --- a/fearless/ja.lproj/Localizable.strings +++ b/fearless/ja.lproj/Localizable.strings @@ -64,17 +64,20 @@ "account.needed.message" = "このネットワークのアカウントがありません。アカウントを作成またはインポートできます"; "account.needed.title" = "アカウントが必要"; "account.option" = "アカウントオプション"; -"account.stats.avg.transaction.time.title" = "Avg. transaction time"; -"account.stats.description.text" = "Your Multichain Score is based on your onchain journey through 3 ecosystems: Ethereum, Polygon and Binance Smart Chain"; -"account.stats.hold.tokens.usd.title" = "Hold tokens USD"; -"account.stats.max.transaction.time.title" = "Max transaction time"; -"account.stats.min.transactions.time.title" = "Min transaction time"; -"account.stats.native.balance.usd.title" = "Native balance USD"; -"account.stats.rejected.transactions.title" = "Rejected transactions"; -"account.stats.title" = "Your score"; -"account.stats.total.transactions.title" = "Total transactions"; -"account.stats.updated.title" = "Updated"; -"account.stats.wallet.age.title" = "Wallet age"; +"account.stats.avg.transaction.time.title" = "平均取引時間"; +"account.stats.description.text" = "あなたのマルチチェーンスコアは、Ethereum、Polygon、Binance Smart Chainの3つのエコシステムを通じたオンチェーン活動に基づいています。"; +"account.stats.error.message" = "アカウントスコア情報を取得できません。後でもう一度お試しください。"; +"account.stats.hold.tokens.usd.title" = "保有トークン(USD)"; +"account.stats.max.transaction.time.title" = "最大取引時間"; +"account.stats.min.transactions.time.title" = "最小取引時間"; +"account.stats.native.balance.usd.title" = "ネイティブバランス(USD)"; +"account.stats.rejected.transactions.title" = "拒否された取引"; +"account.stats.title" = "あなたのスコア"; +"account.stats.total.transactions.title" = "合計取引数"; +"account.stats.unavailable.text" = "EVM互換のアカウントがありません。スコアを確認するには、「ウォレットをインポート」オプションでアカウントを追加してください。"; +"account.stats.updated.title" = "更新済み"; +"account.stats.wallet.age.title" = "ウォレットの年齢"; +"account.stats.wallet.option.title" = "ウォレットスコアを表示"; "account.template" = "%sアカウント"; "account.unique.secret" = "一意のシークレットを持つアカウント"; "accounts.add.account" = "アカウントを追加"; @@ -167,11 +170,16 @@ "backup.wallet.replace.several.alert" = "あなたは現在、メインのキー・ペアを置き換えて追加した複数のチェーンアカウントを持っており、それぞれに特定のキー・ペアを所有しています。しかし、現在のウォレットのバックアップ(エクスポート)機能は、複数のキー・ペアの保存をサポートしていないのでご注意ください。現状、保存できるのはメインのキー・ペアのみとなります。 \n \n チェーンアカウントの安全性を確保するため、現在のフローを進める前に、まず別個にバックアップすることをお勧めします。置き換えたチェーンアカウントのバックアップに成功したら、何の心配もなくフローを進むことができます。"; "backup.wallet.seed" = "シードを表示"; "backup.wallet.title" = "ウォレットのバックアップ"; -"balance.locks.blocked.row.title" = "Blocked"; -"balance.locks.governance.row.title" = "Governance"; -"balance.locks.liquidity.pools.row.title" = "Liquidity Pools"; -"balance.locks.nomination.pools.row.title" = "Nomination Pools"; -"balance.locks.screen.title" = "Locked details"; +"balance.locks.blocked.row.title" = "ブロック済み"; +"balance.locks.governance.row.title" = "ガバナンス"; +"balance.locks.liquidity.pools.row.title" = "流動性プール"; +"balance.locks.nomination.pools.row.title" = "ノミネーションプール"; +"balance.locks.screen.title" = "ロックされた詳細"; +"banner.addwallet.regular.button.title" = "Сreate or import"; +"banner.addwallet.regular.subtitle" = "Join the ecosystems with more than 90+ chains and fascinating features"; +"banner.addwallet.regular.title" = "EVM/Substrate accounts"; +"banner.addwallet.ton.button.title" = "Join now"; +"banner.addwallet.ton.title" = "Join the fastest growing ecosystem ever"; "banners.view.factory.backup.action.title" = "今すぐバックアップ"; "banners.view.factory.backup.subtitle" = "デバイスを失くすと、永久に資金も失います"; "banners.view.factory.backup.title" = "ウォレットのバックアップ"; @@ -191,11 +199,11 @@ "common.action.receive" = "受け取る"; "common.action.send" = "送る"; "common.action.teleport" = "テレポート"; -"common.activation.required" = "Activation Required"; +"common.activation.required" = "有効化が必要です"; "common.add" = "追加"; "common.address" = "アドレス"; "common.advanced" = "高度な"; -"common.and.others.placeholder" = "%s & others"; +"common.and.others.placeholder" = "%sおよびその他"; "common.applied" = "適用されました"; "common.apply" = "適用する"; "common.approve" = "承認"; @@ -215,14 +223,14 @@ "common.choose.action" = "アクションを選択"; "common.choose.network" = "ネットワークを選択"; "common.close" = "閉じる"; -"common.commission" = "Commission"; +"common.commission" = "手数料"; "common.confirm" = "確認"; "common.confirm.password" = "パスワードの確認"; "common.confirm.title" = "確認"; "common.confirmation.title" = "本当によいですか?"; "common.confirmed" = "確認済み"; "common.connections" = "接続"; -"common.contacts" = "Contacts"; +"common.contacts" = "連絡先"; "common.continue" = "続行"; "common.copied" = "クリップボードにコピーしました"; "common.copy" = "コピー"; @@ -243,7 +251,7 @@ "common.error.password.mismatch" = "パスワードが一致しません"; "common.events" = "イベント"; "common.existential.error.message" = "このトランザクションにより、アカウント存続預金を下回るため(%@)、「刈り取られる」ことになります(スペースを節約するためにブロックチェーンの状態からアカウントは消去されます)。"; -"common.existential.warning.max.amount" = "Set max amount"; +"common.existential.warning.max.amount" = "最大額を設定"; "common.existential.warning.message" = "このトランザクションにより、アカウント存続預金を下回るため (%@)、「刈り取られる」ことになります(スペースを節約するためにブロックチェーンの状態からアカウントは消去されます)。継続を選択した場合、ネットワークによって設定された存続預金額を下回る資金を失うことになります。詳細な情報については、ネットワークの公式ドキュメント(例:Polkadot Wiki)を参照してください。フィアレス・ウォレットは完全な非管理的なアプリであり、ネットワークでのあなたの行動については一切判らないし制御もできません。あなたが、その意味を理解して完全に同意した場合のみ、続行してください"; "common.existential.warning.title" = "操作によりアカウントが削除されます"; "common.expiry" = "有効期限"; @@ -261,14 +269,15 @@ "common.keep.editing.action" = "操作に戻る"; "common.learn.more" = "もっと詳しく知る"; "common.max" = "最大"; -"common.message" = "Message"; +"common.message" = "メッセージ"; "common.methods" = "メソッド"; "common.module" = "モジュール"; -"common.more" = "More"; +"common.more" = "さらに"; "common.my.networks" = "私のネットワーク"; "common.name" = "名前"; "common.network" = "ネットワーク"; "common.network.fee" = "ネットワーク手数料"; +"common.network.hash" = "%@ Hash"; "common.network.management" = "ネットワーク管理"; "common.next" = "次へ"; "common.no" = "いいえ"; @@ -285,6 +294,7 @@ "common.privacy.policy" = "個人情報保護方針"; "common.proceed" = "続行"; "common.referral.code.title" = "紹介コード"; +"common.refund" = "Refund"; "common.reject" = "拒否"; "common.rejected" = "拒否されました"; "common.request" = "リクエスト"; @@ -296,6 +306,8 @@ "common.search.results.number" = "検索結果: %d"; "common.search.start.title" = "検索結果はここに表示されます"; "common.secret.derivation.path" = "秘密の派生パス(Derivation Path)"; +"common.see.all" = "すべて見る"; +"common.see.all" = "See all"; "common.select" = "選択"; "common.select" = "選択"; "common.select.all" = "全て選択"; @@ -308,7 +320,7 @@ "common.sign" = "署名"; "common.skip" = "スキップ"; "common.staking" = "ステーキング"; -"common.start" = "Start"; +"common.start" = "開始"; "common.terms.and.conditions" = "利用規約"; "common.till.date" = "%sまで"; "common.time.left" = "残り時間"; @@ -333,6 +345,10 @@ "confirm.mnemonic.mismatch.error.title" = "無効なニーモニック"; "confirmation.skip.action" = "プロセスをスキップ"; "connect.details" = "接続の詳細"; +"connected.accounts.common" = "Connected Accounts"; +"connected.accounts.ethereum.title" = "EVM chain accounts"; +"connected.accounts.substrate.title" = "Substrate chain accounts"; +"connected.accounts.ton.title" = "TON chain accounts"; "connection.add.already.exists.error" = "ノードは既に追加されています。別のノードを試してください"; "connection.add.invalid.error" = "ノードとの接続を確立できません。別のものを試してください"; "connection.add.unsupported.error" = "残念ながら、ネットワークはサポートされていません。次のいずれかを試してください: %@"; @@ -349,7 +365,7 @@ "contacts.contact.address" = "連絡先住所"; "contacts.contact.name" = "連絡先"; "contacts.create.contact" = "連絡先を作成"; -"contacts.empty.message" = "No contacts found"; +"contacts.empty.message" = "連絡先が見つかりません"; "contacts.recent" = "最近"; "contacts.scan" = "QRコードをスキャン"; "contacts.undefined" = "未定義"; @@ -361,6 +377,14 @@ "create.new.account" = "新しいアカウントの作成"; "create.new.connection" = "新しい接続の作成"; "create.new.pincode" = "新しいPINコードを作成"; +"cross.chain.tx.status.destination.fail.description" = "Transaction failed on the %@. Your funds in the current transaction will be returned to your wallet."; +"cross.chain.tx.status.destination.fail.title" = "Transaction refund"; +"cross.chain.tx.status.done.description" = "Transaction has been successfully completed."; +"cross.chain.tx.status.done.title" = "All done"; +"cross.chain.tx.status.pending.description" = "Transaction is in progress. Please wait while %@ asset cross the bridge from the %@ to the %@ network."; +"cross.chain.tx.status.pending.title" = "Transaction pending"; +"cross.chain.tx.status.source.fail.description" = "Transaction failed on the %@ network. Please, try again."; +"cross.chain.tx.status.source.fail.title" = "Transaction failed"; "crowdloan.active.section.format" = "アクティブ( %@ )"; "crowdloan.app.bonus.format" = "フィアレス・ウォレットのボーナス ( %@ )"; "crowdloan.astar.referral.code.invalid" = "紹介アドレスが無効です。ポルカドット・アドレスのみ受け付けます。もう一度お試しください"; @@ -401,10 +425,22 @@ "custom.collators.text" = "コレーターが有能かつ誠実に行動することを信頼すべきです。現在の収益性だけで判断すると、利益の減少や資金喪失につながる可能性があります"; "custom.collators.title" = "既知のコレーターとステーク"; "custom.validators.empty.message" = "バリデーターが見つかりません。\nフィルターを変更してみてください"; +"dapp.category.connected.title" = "Connected"; +"dapp.category.defi.title" = "DeFi"; +"dapp.category.featured.title" = "Featured"; +"dapp.category.nft.title" = "NFT"; +"dapp.category.utilities.title" = "Utilities"; +"dapp.connected.title" = "Connected"; +"dapp.discover.title" = "Discover dApp"; +"dapp.no.connected.dapps.title" = "No connected dApps"; +"dapp.not.found.title" = "No dApps were found"; "default.account.shared.secret" = "共有シークレットを持つデフォルトのアカウント"; "delete.custom.node.title" = "カスタムノードを削除しますか?"; "ecdsa.selection.subtitle" = "(BTC / ETH互換)"; "ecdsa.selection.title" = "ECDSA"; +"ecosystem.options.backup.title" = "Backup chain accounts"; +"ecosystem.options.details.title" = "Chain accounts"; +"ecosystem.options.title" = "Account options"; "ed25519.selection.subtitle" = "ed25519(代替)"; "ed25519.selection.title" = "Edwards"; "empty.state.message" = "リクエストに該当するものが見つかりませんでした"; @@ -413,7 +449,7 @@ "error.invalid.address" = "選択したチェーンのアドレスが無効です"; "error.message.enter.the.name" = "名前を入力してください…"; "error.message.enter.the.url.address" = "URLアドレスを入力してください…"; -"error.scan.qr.disabled.asset" = "The asset you want to transfer is either unsupported or turned off. Go to Asset Management, activate the asset, and then scan the QR code again."; +"error.scan.qr.disabled.asset" = "送信しようとしている資産はサポートされていないか、無効になっています。資産管理に移動して資産を有効にし、もう一度QRコードをスキャンしてください。"; "error.unsupported.asset" = "現在アプリでサポートされていないアセットを送信しようとしています。別のアセットを選択するか、別のQRコードをリクエストしてください"; "ethereum.crypto.type" = "イーサリアム(Ethereum)キー・ペアの暗号方式"; "ethereum.secret.derivation.path" = "イーサリアム(Ethereum)の秘密の派生パス(Derivation Path)"; @@ -483,10 +519,11 @@ "lp.apy.alert.title" = "戦略的ボーナス年利"; "lp.apy.title" = "戦略的ボーナス年利"; "lp.available.pools.title" = "利用可能なプール"; -"lp.banner.action.details.title" = "Show details"; -"lp.banner.text" = "Invest your funds in Liquidity\npools and receive rewards"; +"lp.banner.action.details.title" = "詳細を表示"; +"lp.banner.text" = "資金をLiquidity\npoolsに投資して報酬を得る"; "lp.confirm.liquidity.screen.title" = "流動性を確認"; "lp.confirm.liquidity.warning.text" = "出力は推定です。価格が0.5%以上変動した場合、取引は元に戻されます。"; +"lp.liquidity.add.complete.text" = "流動性プールへの供給が正常に完了しました"; "lp.network.fee.alert.text" = "ネットワーク手数料はSORAシステムの成長と安定したパフォーマンスを確保するために使用されます。"; "lp.network.fee.alert.title" = "ネットワーク手数料"; "lp.pool.details.title" = "プールの詳細"; @@ -494,12 +531,12 @@ "lp.pool.remove.warning.title" = "注"; "lp.remove.button.title" = "流動性を削除"; "lp.remove.liquidity.screen.title" = "流動性を削除"; -"lp.reward.token.text" = "%@ を獲得"; +"lp.reward.token.text" = "%s を獲得"; "lp.reward.token.title" = "報酬の支払い先"; "lp.slippage.title" = "スリッページ"; "lp.supply.button.title" = "流動性を供給"; "lp.supply.liquidity.screen.title" = "流動性を供給"; -"lp.token.pooled.text" = " %@ プール済み"; +"lp.token.pooled.text" = " %s プール済み"; "lp.user.pools.title" = "ユーザープール"; "manage.assets.account.missing.text" = "アカウントを追加..."; "manage.assets.search.hint" = "トークンまたはネットワークで検索"; @@ -527,7 +564,7 @@ "network.info.address" = "ノードアドレス"; "network.info.name" = "ノード名"; "network.info.title" = "ノード情報"; -"network.issue.main" = "Connection Error: Unable to connect to the network. Please try again."; +"network.issue.main" = "接続エラー: ネットワークに接続できません。再度お試しください。"; "network.issue.network.unavailible" = "ネットワークは利用できません"; "network.issue.node.unavailable" = "ノードは利用できません"; "network.issue.notofication" = "お知らせ"; @@ -541,29 +578,33 @@ "network.status.connected" = "接続済み"; "network.status.connecting" = "接続しています..."; "network.url.address" = "URLアドレス"; -"nft.choose.recipient.title" = "Choose recipient"; +"nft.choose.recipient.title" = "受信者を選択"; "nft.collection.available.nfts" = "%sコレクションで利用可能なNFT"; "nft.collection.my.nfts" = "私のNFT"; "nft.collection.title" = "コレクション"; "nft.creator.title" = "作成者"; -"nft.list.empty.message" = "There aren't any NFTs yet. Buy or mint NFTs to see them here."; -"nft.load.error" = "Failed to load NFTs"; +"nft.list.empty.message" = "まだNFTがありません。ここでNFTを購入またはミントしてください。"; +"nft.load.error" = "NFTの読み込みに失敗しました"; "nft.owner.title" = "所有"; "nft.share.address" = "受信するパブリック・アドレス: %s"; -"nft.spam.warning" = "Beware of a scam/spam NFT collection – verify authenticity before engaging. Stay safe!"; +"nft.spam.warning" = "詐欺/スパムNFTコレクションに注意してください - 関与する前に信頼性を確認してください。安全を確保しましょう!"; "nft.stub.text" = "NFTがもうすぐ登場します"; "nft.stub.title" = "失礼しました"; "nft.tokenid.title" = "トークンID"; "nfts.collection.count" = "数量: %d/%d"; "nfts.filters.airdrop" = "AirDrop"; -"nfts.filters.spam" = "SPAM"; -"nfts.filters.title" = "Hide NFTs"; +"nfts.filters.spam" = "スパム"; +"nfts.filters.title" = "NFTを非表示にする"; "nfts.stub" = "NFT"; "no.access.to.google" = "Googleにアクセスできません"; "no.account.found" = "アカウントが見つかりません"; "no.email.bound.error.message" = "メールのアプリがデバイスにインストールされていることを確認してください"; "node" = "ノード"; "node.selection.delete.node.title" = "カスタムノードを削除しますか?"; +"onboarding.banner.regular.ecosystem.button.title" = "Join EVM or Substrate"; +"onboarding.banner.regular.ecosystem.title" = "Create or import Substrate or EVM accounts"; +"onboarding.banner.ton.ecosystem.button.title" = "Join TON"; +"onboarding.banner.ton.ecosystem.title" = "Connect to the fastest growing ecosystem ever"; "onboarding.create.account" = "アカウントを作成する"; "onboarding.create.wallet" = "ウォレットを作成"; "onboarding.preinstalled.wallet.button.text" = "プリインストールされたウォレットを取得"; @@ -703,6 +744,7 @@ "pools.limit.has.reached.error.message" = "このネットワーク内のプールの制限に達しました"; "pools.limit.has.reached.error.title" = "これ以上プールを作成できません"; "profile.about.title" = "情報"; +"profile.account.score.title" = "Nomisマルチチェーンスコア"; "profile.accounts.title" = "アカウント"; "profile.language.title" = "言語"; "profile.logout.description" = "このアクションを行うと、このデバイスから全アカウントが削除されます。続行する前に、パスフレーズのバックアップを取ったことを必ず確認してください"; @@ -730,8 +772,12 @@ "scam.additional.stub" = "追加:"; "scam.description.donation.stub" = "このアドレスは、疑わしいアドレスだと喚起されています。このアカウントに %s を送信しないことを強くお勧めします"; "scam.description.exchange.stub" = "このアドレスは取引所としてマークされていますが、入金アドレスと出金アドレスが異なる場合があるので注意してください"; +"scam.description.lowscore.text" = "送金しようとしているアドレスはオンチェーン活動が少なく、詐欺師やSybil攻撃者の可能性があります。"; "scam.description.sanctions.stub" = "このアドレスは、制裁下にある国に関連するエンティティだと喚起されています。このアカウントに %s を送信しないことを強くお勧めします"; "scam.description.scam.stub" = "このアドレスは、詐欺の証拠があると喚起されています。このアカウントに %s を送信しないことを強くお勧めします"; +"scam.info.nomis.name" = "Nomisマルチチェーンスコア"; +"scam.info.nomis.reason.text" = "ネットワークの活動が低い"; +"scam.info.nomis.subtype.text" = "注意して進めてください"; "scam.name.stub" = "名前:"; "scam.reason.stub" = "理由:"; "scam.warning.alert.subtitle" = "このアカウントに %s を送信しないことを強くお勧めします"; @@ -750,15 +796,15 @@ "select.save.type" = "保存形式を選択"; "select.suggested.validators.warning" = "アルゴリズム・バリデーターの提案は、金融に関する相談や助言に該当するものではありません。ステーキングはハイリスクな活動であり、アルゴリズムによるバリデーターの提案は、必ずしもこのリスクを軽減するものではありません。アルゴリズムによって提案されたバリデーターは、候補から外れる可能性があります。アルゴリズムによって提案されたバリデーターは、提案および/または選択された後、いつでもパラメーター(例:手数料率など)を変更することができます。これらの理由や他の理由で報酬を失う可能性があります。関連するリスクを注意して慎重に検討した上で、ご自身の判断でトークンをステークし、バリデーターの提案を使用するようにしてください"; "select.validators.disclaimer" = "免責事項:アルゴリズム・バリデーターの提案は、金融に関する相談や助言に該当するものではありません。ステーキングはハイリスクな活動であり、アルゴリズムによるバリデーターの提案は、必ずしもこのリスクを軽減するものではありません。アルゴリズムによって提案されたバリデーターは、切り取られる可能性があります。アルゴリズムによって提案されたバリデーターは、提案および/または選択された後、いつでもパラメーター(例:手数料率など)を変更することができます。これらの理由や他の理由でトークンや報酬を失う可能性があります。関連するリスクを注意して慎重に検討した上で、ご自身の判断でトークンをステークし、バリデーターの提案を使用するようにしてください"; -"send.all.title" = "Send all tokens and reap the account"; +"send.all.title" = "すべてのトークンを送信してアカウントを解約する"; "send.confirm.amount.title" = "送信中\n%@"; "send.fund.title" = "資金を送る"; "settings.add.wallet" = "ウォレットを追加"; "settings.hide.zero.balances" = "残高ゼロを隠す"; "share.referral.code" = "紹介コードを共有"; "sign.this.message" = "メッセージに署名しますか?"; -"sora.bridge.amount.less.fee" = "The amount you're trying to transfer is insufficient to cover the transaction fees on the %s network. Although the transaction won't process, you'll still be charged the fees on the Sora network."; -"sora.bridge.low.amaunt.polkadot.alert" = "Currently, there's a min. amount 1.1 DOT for bridging to ensure the stability and security. We appreciate your understanding."; +"sora.bridge.amount.less.fee" = "転送しようとしている金額は、%s ネットワーク上の取引手数料をカバーするには不十分です。トランザクションは処理されませんが、それでも Sora ネットワークの手数料が請求されます。"; +"sora.bridge.low.amaunt.polkadot.alert" = "現在、安定性と安全性を確保するために、ブリッジングには最低限の1.1 DOTが必要です。ご理解のほどよろしくお願いします。"; "sora.bridge.low.amount.alert" = "現在、SORAネットワークの安定性と安全性を確保するため、ブリッジングには最低0.05 KSMが設定されています。ご理解のほどよろしくお願いいたします。"; "sora.card.status.failure.text" = "本人確認(KYC)処理が終了したか、そうでなければ失敗しました"; "sora.card.status.failure.title" = "検証失敗"; @@ -1066,7 +1112,11 @@ "terms.and.conditions.sora.community.alert.main" = "SORAコミュニティはあなたの個人データを収集しません"; "terms.and.conditions.sora.community.alert.secondary" = "ただし、SORAカードと IBANアカウントを取得するには、カード発行会社との本人確認(KYC)の処理を通過する必要があります"; "terms.and.conditions.title" = "規約と条件"; -"tranaction.history.others.tab.title" = "Others"; +"ton.connect.alert.description" = "Service address"; +"ton.connect.alert.subtitle" = "Be sure to check the service address before connecting the wallet"; +"ton.connect.alert.title" = "Review dApp info"; +"ton.tonviewer.action.title" = "View in Tonviewer"; +"tranaction.history.others.tab.title" = "その他"; "transaction.detail.date" = "日付"; "transaction.detail.status" = "状態"; "transaction.details.copy.hash" = "ハッシュをコピーする"; @@ -1074,9 +1124,9 @@ "transaction.details.from" = "から"; "transaction.details.hash.title" = "外形的ハッシュ"; "transaction.details.view.etherscan" = "イーサスキャン(Etherscan)で見る"; -"transaction.details.view.oklink" = "View in OKX explorer"; +"transaction.details.view.oklink" = "OKXエクスプローラーで表示"; "transaction.details.view.polkascan" = "ポルカスキャン(Polkascan)で見る"; -"transaction.details.view.reefscan" = "View in Reefscan"; +"transaction.details.view.reefscan" = "Reefscanで表示"; "transaction.details.view.subscan" = "サブスキャン(Subscan)で見る"; "transaction.list.header" = "全てのトランザクション"; "transaction.status.completed" = "完了"; @@ -1092,13 +1142,13 @@ "username.setup.title" = "アカウントを作成する"; "username.setup.title.2.0" = "新しいウォレットを作成"; "validator.info.comission.title" = "コミッション"; -"validator.info.min.stake.alert.text" = "Minimum stake among active nominators is %s. To get rewards you have to stake more."; -"validator.info.min.stake.among.active.nominators.text" = "Minimum stake among active nominators"; +"validator.info.min.stake.alert.text" = "アクティブな指名者の中での最低ステークは%sです。報酬を得るには、もっとステークする必要があります。"; +"validator.info.min.stake.among.active.nominators.text" = "アクティブな指名者の中での最低ステーク"; "validators.list.empty.message" = "バリデーターが見つかりません"; -"verify.phone.number.title" = "Verify your phone number"; -"vesting.claim.disclaimer.text" = "Due to the unique vesting schedules of each parachain, our app is unable to display the quantity of locked tokens eligible for claiming. Please be advised that initiating a claim may be impractical if the prospective amount is marginal and comparable to the transaction fee involved. For comprehensive insights into your locked balances, consult the Subscan blockexplorer. We urge you to assess the information carefully and proceed at your own discretion."; -"vesting.claim.disclaimer.title" = "Important Notice Regarding Token Claims:"; -"vesting.locked.title" = "Vesting Locked"; +"verify.phone.number.title" = "電話番号を確認してください"; +"vesting.claim.disclaimer.text" = "各パラチェーンのユニークなベスティングスケジュールにより、アプリはクレーム対象のロックされたトークンの数量を表示できません。見込まれる金額が僅少で、取引手数料と同等の場合、クレームの開始は実用的でない可能性があります。ロックされた残高の詳細については、Subscanブロックエクスプローラーをご参照ください。情報を慎重に評価し、ご自身の裁量で進めてください。"; +"vesting.claim.disclaimer.title" = "トークンクレームに関する重要なお知らせ:"; +"vesting.locked.title" = "ベスティングロック"; "view.in" = "%sで見る"; "view.wallet" = "ウォレットを見る"; "wallet.account.locks.democracy" = "民主主義"; @@ -1160,7 +1210,7 @@ "wallet.send.balance.total.after.transfer" = "送信後の合計"; "wallet.send.confirm.title" = "送信を確認"; "wallet.send.dead.recipient.message" = "宛先アカウントの最終金額が既存の預金より少ないため、送信は失敗します。量を増やしてみてください"; -"wallet.send.dead.recipient.message.v2" = "Your transfer will fail since the final amount (%1$s) on the destination account will be less than the minimal balance (%2$s). Please increase the amount by %3$s"; +"wallet.send.dead.recipient.message.v2" = "送金先の最終額(%1$s)が最低残高(%2$s)を下回るため、送金が失敗します。金額を%3$s増やしてください。"; "wallet.send.dead.recipient.title" = "金額が少なすぎる"; "wallet.send.eth.dead.recipient.message" = "受信者のアカウントのイーサリアム(Ethereum)残高が不十分な場合、ERC20トークン転送が完了しません。受信者が転送を続行するのに十分なイーサリアムを持っていることを確認してください"; "wallet.send.existential.warning" = "送信すると、残高が最少預金よりも少なくなるため、ブロックストアからアカウントが削除されます"; @@ -1185,7 +1235,7 @@ "xcm.cross.chain.invalid.address.title" = "ネットワーク・アドレスではありません"; "xcm.destination.network.fee.title" = "宛先ネットワーク手数料"; "xcm.destination.network.title" = "宛先ネットワーク"; -"xcm.low.amaunt.assetSymbol.alert" = "Currently, there's a min. amount %@ for bridging to ensure the stability and security. We appreciate your understanding."; +"xcm.low.amaunt.assetSymbol.alert" = "現在、安定性と安全性を確保するために、ブリッジングには最低限の額%@が必要です。ご理解のほどよろしくお願いします。"; "xcm.mywallets.button.title" = "私のウォレット"; "xcm.origin.network.fee.title" = "元ネットワーク手数料"; "xcm.origin.network.title" = "元ネットワーク"; @@ -1193,10 +1243,4 @@ "your.validators.change.validators.title" = "バリデーターの変更"; "your.validators.stop.nominating.title" = "ノミネートを中止"; "your.validators.validator.total.stake" = "総ステーク:%@"; -"сurrencies.stub.text" = "通貨"; -"account.stats.wallet.option.title" = "Show wallet score"; -"scam.description.lowscore.text" = "The address you are about to transfer to has low onchain activity, which may indicate a potential scammer or sybil attacker"; -"account.stats.error.message" = "Unable to retrieve account score information. Please try again later."; -"profile.account.score.title" = "Nomis multichain score"; -"scam.info.nomis.name" = "Nomis multi-chain score"; -"scam.info.nomis.subtype.text" = "Proceed with caution"; +"сurrencies.stub.text" = "通貨"; \ No newline at end of file diff --git a/fearless/pt.lproj/Localizable.strings b/fearless/pt.lproj/Localizable.strings index 41d5bd73f9..700d65ec48 100644 --- a/fearless/pt.lproj/Localizable.strings +++ b/fearless/pt.lproj/Localizable.strings @@ -74,6 +74,7 @@ "account.stats.rejected.transactions.title" = "Rejected transactions"; "account.stats.title" = "Your score"; "account.stats.total.transactions.title" = "Total transactions"; +"account.stats.unavailable.text" = "You don't have an EVM compatible account. If you want to see the score - add it via \"Import wallet\" option."; "account.stats.updated.title" = "Updated"; "account.stats.wallet.age.title" = "Wallet age"; "account.stats.wallet.option.title" = "Show wallet score"; @@ -174,6 +175,11 @@ "balance.locks.liquidity.pools.row.title" = "Liquidity Pools"; "balance.locks.nomination.pools.row.title" = "Nomination Pools"; "balance.locks.screen.title" = "Locked details"; +"banner.addwallet.regular.button.title" = "Сreate or import"; +"banner.addwallet.regular.subtitle" = "Join the ecosystems with more than 90+ chains and fascinating features"; +"banner.addwallet.regular.title" = "EVM/Substrate accounts"; +"banner.addwallet.ton.button.title" = "Join now"; +"banner.addwallet.ton.title" = "Join the fastest growing ecosystem ever"; "banners.view.factory.backup.action.title" = "Faça backup agora"; "banners.view.factory.backup.subtitle" = "Se você perder seu dispositivo, seus fundos serão perdidos para sempre"; "banners.view.factory.backup.title" = "Faça backup da sua carteira"; @@ -271,6 +277,7 @@ "common.name" = "Nome"; "common.network" = "Rede"; "common.network.fee" = "Taxa de rede"; +"common.network.hash" = "%@ Hash"; "common.network.management" = "Gerência de rede"; "common.next" = "Próximo"; "common.no" = "Não"; @@ -287,6 +294,7 @@ "common.privacy.policy" = "Política de Privacidade"; "common.proceed" = "Proceder"; "common.referral.code.title" = "Código de referência"; +"common.refund" = "Refund"; "common.reject" = "Rejeitar"; "common.rejected" = "Rejeitado"; "common.request" = "Solicitar"; @@ -298,6 +306,8 @@ "common.search.results.number" = "Resultados da pesquisa: %d"; "common.search.start.title" = "Os resultados da pesquisa aparecerão aqui"; "common.secret.derivation.path" = "Caminho de derivação secreto"; +"common.see.all" = "See all"; +"common.see.all" = "See all"; "common.select" = "Selecione"; "common.select" = "Selecione"; "common.select.all" = "Selecionar tudo"; @@ -335,6 +345,10 @@ "confirm.mnemonic.mismatch.error.title" = "Mnemónica inválida"; "confirmation.skip.action" = "Saltar processo"; "connect.details" = "Detalhes da conexão"; +"connected.accounts.common" = "Connected Accounts"; +"connected.accounts.ethereum.title" = "EVM chain accounts"; +"connected.accounts.substrate.title" = "Substrate chain accounts"; +"connected.accounts.ton.title" = "TON chain accounts"; "connection.add.already.exists.error" = "O node já foi adicionado anteriormente. Por favor, tente outro node."; "connection.add.invalid.error" = "Não se consegue estabelecer ligação com o node. Por favor, tente outro."; "connection.add.unsupported.error" = "Infelizmente, a rede não é suportada. Por favor, tente uma dos seguintes: %@ ."; @@ -363,6 +377,14 @@ "create.new.account" = "Criar uma nova conta"; "create.new.connection" = "Criar nova conexão"; "create.new.pincode" = "Criar novo código PIN"; +"cross.chain.tx.status.destination.fail.description" = "Transaction failed on the %@. Your funds in the current transaction will be returned to your wallet."; +"cross.chain.tx.status.destination.fail.title" = "Transaction refund"; +"cross.chain.tx.status.done.description" = "Transaction has been successfully completed."; +"cross.chain.tx.status.done.title" = "All done"; +"cross.chain.tx.status.pending.description" = "Transaction is in progress. Please wait while %@ asset cross the bridge from the %@ to the %@ network."; +"cross.chain.tx.status.pending.title" = "Transaction pending"; +"cross.chain.tx.status.source.fail.description" = "Transaction failed on the %@ network. Please, try again."; +"cross.chain.tx.status.source.fail.title" = "Transaction failed"; "crowdloan.active.section.format" = "Ativo (%@)"; "crowdloan.app.bonus.format" = "Bónus da Fearless Wallet (%@)"; "crowdloan.astar.referral.code.invalid" = "Endereço de referência inválido, apenas endereços da Polkadot são aceites, por favor tente novamente"; @@ -403,10 +425,22 @@ "custom.collators.text" = "Você deve confiar que seus coletores agirão com competência e honestidade; basear sua decisão puramente na lucratividade atual pode levar à redução dos lucros ou até mesmo à perda de fundos."; "custom.collators.title" = "Stake com coletores conhecidos"; "custom.validators.empty.message" = "Nenhum validador encontrado. Por favor, tente alterar os filtros"; +"dapp.category.connected.title" = "Connected"; +"dapp.category.defi.title" = "DeFi"; +"dapp.category.featured.title" = "Featured"; +"dapp.category.nft.title" = "NFT"; +"dapp.category.utilities.title" = "Utilities"; +"dapp.connected.title" = "Connected"; +"dapp.discover.title" = "Discover dApp"; +"dapp.no.connected.dapps.title" = "No connected dApps"; +"dapp.not.found.title" = "No dApps were found"; "default.account.shared.secret" = "Contas padrão com um segredo partilhado"; "delete.custom.node.title" = "Eliminar o node personalizado?"; "ecdsa.selection.subtitle" = "(compatível com BTC/ETH)"; "ecdsa.selection.title" = "ECDSA"; +"ecosystem.options.backup.title" = "Backup chain accounts"; +"ecosystem.options.details.title" = "Chain accounts"; +"ecosystem.options.title" = "Account options"; "ed25519.selection.subtitle" = "ed25519 (alternativa)"; "ed25519.selection.title" = "Edwards"; "empty.state.message" = "Nada encontrado para sua solicitação"; @@ -489,6 +523,7 @@ Seed: %@"; "lp.banner.text" = "Invest your funds in Liquidity\npools and receive rewards"; "lp.confirm.liquidity.screen.title" = "Confirm Liquidity"; "lp.confirm.liquidity.warning.text" = "Output is estimated. If the price changes more than 0.5% your transaction will revert."; +"lp.liquidity.add.complete.text" = "Your supply to Liquidity pools has been successfully completed"; "lp.network.fee.alert.text" = "Network fee is used to ensure SORA system’s growth and stable performance."; "lp.network.fee.alert.title" = "Network fee"; "lp.pool.details.title" = "Pool details"; @@ -496,12 +531,12 @@ Seed: %@"; "lp.pool.remove.warning.title" = "NOTE"; "lp.remove.button.title" = "Remove Liquidity"; "lp.remove.liquidity.screen.title" = "Remove Liquidity"; -"lp.reward.token.text" = "Earn %@"; +"lp.reward.token.text" = "Earn %s"; "lp.reward.token.title" = "Rewards Payout In"; "lp.slippage.title" = "Slippage"; "lp.supply.button.title" = "Supply Liquidity"; "lp.supply.liquidity.screen.title" = "Supply Liquidity"; -"lp.token.pooled.text" = "Your %@ Pooled"; +"lp.token.pooled.text" = "Your %s Pooled"; "lp.user.pools.title" = "User pools"; "manage.assets.account.missing.text" = "Acrescentar uma conta..."; "manage.assets.search.hint" = "Pesquisa por token ou rede"; @@ -566,6 +601,10 @@ Este é o hash da sua transação:"; "no.email.bound.error.message" = "Por favor, certifique-se de que uma aplicação de e-mail está instalada no dispositivo."; "node" = "Node"; "node.selection.delete.node.title" = "Eliminar o node personalizado?"; +"onboarding.banner.regular.ecosystem.button.title" = "Join EVM or Substrate"; +"onboarding.banner.regular.ecosystem.title" = "Create or import Substrate or EVM accounts"; +"onboarding.banner.ton.ecosystem.button.title" = "Join TON"; +"onboarding.banner.ton.ecosystem.title" = "Connect to the fastest growing ecosystem ever"; "onboarding.create.account" = "Criar conta"; "onboarding.create.wallet" = "Criar carteira"; "onboarding.preinstalled.wallet.button.text" = "Obtenha uma carteira pré-instalada"; @@ -744,6 +783,7 @@ Estes documentos são cruciais para uma experiência segura e positiva do utiliz "scam.description.sanctions.stub" = "Este endereço foi sinalizado devido a uma entidade relacionada a um país sob sanções. Recomendamos fortemente que você não envie %s para esta conta."; "scam.description.scam.stub" = "Este endereço foi sinalizado devido a evidências de fraude. Recomendamos fortemente que você não envie %s para esta conta."; "scam.info.nomis.name" = "Nomis multi-chain score"; +"scam.info.nomis.reason.text" = "Low network activity"; "scam.info.nomis.subtype.text" = "Proceed with caution"; "scam.name.stub" = "Nome:"; "scam.reason.stub" = "Motivo:"; @@ -1082,6 +1122,10 @@ Lembre-se de fazer uma cópia de segurança da sua chave e guardá-la num local "terms.and.conditions.sora.community.alert.main" = "A comunidade SORA não coleta nenhum dos seus dados pessoais,"; "terms.and.conditions.sora.community.alert.secondary" = "mas para obter o cartão SORA e a conta IBAN você precisa passar pelo processo KYC com um emissor do cartão."; "terms.and.conditions.title" = "Termos e Condições"; +"ton.connect.alert.description" = "Service address"; +"ton.connect.alert.subtitle" = "Be sure to check the service address before connecting the wallet"; +"ton.connect.alert.title" = "Review dApp info"; +"ton.tonviewer.action.title" = "View in Tonviewer"; "tranaction.history.others.tab.title" = "Others"; "transaction.detail.date" = "Data"; "transaction.detail.status" = "Status"; diff --git a/fearless/ru.lproj/Localizable.strings b/fearless/ru.lproj/Localizable.strings index f1fe5dbf96..ea33ef073a 100644 --- a/fearless/ru.lproj/Localizable.strings +++ b/fearless/ru.lproj/Localizable.strings @@ -63,33 +63,34 @@ "account.info.title" = "Аккаунт"; "account.needed.message" = "У вас нет учетной записи в этой сети, вы можете создать или импортировать учетную запись."; "account.needed.title" = "Необходим аккаунт"; -"account.option" = "Account option"; -"account.stats.avg.transaction.time.title" = "Avg. transaction time"; -"account.stats.description.text" = "Your Multichain Score is based on your onchain journey through 3 ecosystems: Ethereum, Polygon and Binance Smart Chain"; -"account.stats.error.message" = "Unable to retrieve account score information. Please try again later."; -"account.stats.hold.tokens.usd.title" = "Hold tokens USD"; -"account.stats.max.transaction.time.title" = "Max transaction time"; -"account.stats.min.transactions.time.title" = "Min transaction time"; -"account.stats.native.balance.usd.title" = "Native balance USD"; -"account.stats.rejected.transactions.title" = "Rejected transactions"; -"account.stats.title" = "Your score"; -"account.stats.total.transactions.title" = "Total transactions"; -"account.stats.updated.title" = "Updated"; -"account.stats.wallet.age.title" = "Wallet age"; -"account.stats.wallet.option.title" = "Show wallet score"; +"account.option" = "Опция учетной записи"; +"account.stats.avg.transaction.time.title" = "Среднее время транзакции"; +"account.stats.description.text" = "Ваш мультицепной счет основан на вашем пути в блокчейне через три экосистемы: Ethereum, Polygon и Binance Smart Chain."; +"account.stats.error.message" = "Не удалось получить информацию о счете аккаунта. Пожалуйста, попробуйте позже."; +"account.stats.hold.tokens.usd.title" = "Удерживать токены USD"; +"account.stats.max.transaction.time.title" = "Максимальное время транзакции"; +"account.stats.min.transactions.time.title" = "Минимальное время транзакции"; +"account.stats.native.balance.usd.title" = "Основной баланс в USD"; +"account.stats.rejected.transactions.title" = "Отклоненные транзакции"; +"account.stats.title" = "Ваш счет"; +"account.stats.total.transactions.title" = "Всего транзакций"; +"account.stats.unavailable.text" = "У вас нет совместимого с EVM аккаунта. Если вы хотите увидеть счет, добавьте его через опцию \"Импортировать кошелек\""; +"account.stats.updated.title" = "Обновлено"; +"account.stats.wallet.age.title" = "Возраст кошелька"; +"account.stats.wallet.option.title" = "Показать счет кошелька"; "account.template" = "%s аккаунт"; "account.unique.secret" = "Аккаунты с измененным ключом"; "accounts.add.account" = "Добавить аккаунт"; "accounts.for.export" = "Аккаунты для экспорта"; "accounts.with.changed.key" = "Аккаунты с измененным ключом"; "accounts.with.one.key" = "Аккаунты с одним ключом"; -"accounts.with.shared.secret" = "Account with shared secret"; +"accounts.with.shared.secret" = "Аккаунт с общим секретом"; "add.node.button.title" = "Добавить ноду"; "alert.add.ethereum.message" = "Добавить аккаунты Moonbeam и Moonriver?"; "alert.add.ethereum.title" = "ETH аккаунты"; "alert.pool.created.text" = "Пул создан. Теперь Вам нужно выбрать валидаторов для пула"; "all.done.alert.all.done.stub" = "Всё готово"; -"all.done.alert.description.stub" = "You can return to the app"; +"all.done.alert.description.stub" = "Вы можете вернуться в приложение"; "all.done.alert.hash.stub" = "Хэш"; "all.done.alert.result.stub" = "Результат"; "all.done.alert.success.stub" = "Успешно"; @@ -126,20 +127,20 @@ "assetdetails.balance.transferable" = "Доступно"; "astar.bonus" = "Ваш бонус"; "astar.friend.bonus" = "Бонус для вашего друга"; -"backup.chain.account" = "Backup chain account"; -"backup.create.password.confirm.field.title" = "Confirm password"; -"backup.create.password.continue.button" = "Set backup password"; -"backup.create.password.description" = "Setting a password will encrypt your Google backup. You’ll need to enter this when restoring your wallet"; -"backup.create.password.matched" = "Password matched"; -"backup.create.password.not.matched" = "Password doesn’t matched"; -"backup.create.password.password.field.title" = "Set password"; +"backup.chain.account" = "Создать резервную копию учетной записи цепочки"; +"backup.create.password.confirm.field.title" = "Подтвердить пароль"; +"backup.create.password.continue.button" = "Установить резервный пароль"; +"backup.create.password.description" = "Установка пароля приведет к шифрованию вашей резервной копии Google. Вам нужно будет ввести его при восстановлении вашего кошелька"; +"backup.create.password.matched" = "Пароль совпал"; +"backup.create.password.not.matched" = "Пароль не совпадает"; +"backup.create.password.password.field.title" = "Установить пароль"; "backup.create.password.screen.title" = "Создать резервный пароль"; -"backup.create.password.warning" = "I understand that if I forget my password there is no way to retrieve it"; +"backup.create.password.warning" = "Я понимаю, что если я забуду свой пароль, то восстановить его будет невозможно"; "backup.mnemonic.description" = "Не забудьте записать слова в том порядке, в котором они указаны ниже. Используйте нецифровой способ резервного копирования."; "backup.mnemonic.title" = "Запишите мнемоническую фразу"; -"backup.not.backed.up.confirm" = "I will risk it"; -"backup.not.backed.up.message" = "If your device gets lost or stolen, you will loose your wallet and all your funds forever"; -"backup.not.backed.up.title" = "Not backed up!"; +"backup.not.backed.up.confirm" = "Я рискну"; +"backup.not.backed.up.message" = "Если ваше устройство будет потеряно или украдено, вы навсегда потеряете свой кошелек и все свои средства."; +"backup.not.backed.up.title" = "Нет резервной копии"; "backup.password.description" = "Введите резервный пароль для выбранного кошелька для импорта"; "backup.password.password.field.title" = "Введите пароль"; "backup.password.title" = "Ввести резервный пароль"; @@ -149,38 +150,42 @@ "backup.risks.warnings.continue.button" = "Показать мнемоническую фразу"; "backup.risks.warnings.description" = "Ваша мнемоническая фраза - это ключ к вашему кошельку. Создайте резервную копию, чтобы вы могли восстановить свой кошелек, если потеряете или повредите свое устройство."; "backup.risks.warnings.title" = "Создайте резервную копию"; -"backup.select.wallet.create.button" = "Create new account"; +"backup.select.wallet.create.button" = "Создать новый счёт"; "backup.select.wallet.title" = "Выбрать кошелёк для импорта"; "backup.wallet.backup.google" = "Сохранить кошелек в Google"; "backup.wallet.delete.google" = "Удалить кошелек из Google"; -"backup.wallet.delete.message" = "If you delete your Google backup, you’ll only be able to recover your wallet with a manual backup of your passphrase"; +"backup.wallet.delete.message" = "Если вы удалите свою резервную копию Google, вы сможете восстановить свой кошелек только с резервной копией вашей парольной фразы вручную."; "backup.wallet.footer.view.text" = "Если вы потеряете доступ к этому устройству, ваши средства будут потеряны, если вы не создадите резервную копию!"; -"backup.wallet.imported.description" = "You have successfully imported wallet"; +"backup.wallet.imported.description" = "Вы успешно импортировали кошелек"; "backup.wallet.imported.import.more" = "Добавить ещё"; "backup.wallet.imported.title" = "Кошелек импортирован"; "backup.wallet.json" = "Экспортировать JSON"; "backup.wallet.name.create.bottom.decription" = "Виден только вам и хранится локально"; "backup.wallet.name.create.description" = "Придумайте название для своего нового кошелька, чтобы вы могли легко его идентифицировать. Это необязательно и будет видно только вам"; "backup.wallet.name.create.title" = "Назовите свой кошелек"; -"backup.wallet.name.editing.description" = "Example: Savings, Investments, Crowdloans, Staking. This account name will be displayed only for you and stored locally on your mobile device"; -"backup.wallet.name.editing.title" = "Change wallet name"; -"backup.wallet.name.field.name.title" = "Wallet name"; -"backup.wallet.replace.accounts.alert" = "You currently have a %s chain account and address %s that has been added by replacing the main key pair, and it possesses a specific one. However, please note that our current wallet backup (export) flow does not support the storage of multiple key pairs. As a result, you can only save your main key pair. \n \n To ensure the safety of your replaced chain account, we recommend that you first back it up separately before proceeding with the current flow. Once you have successfully backed up your replaced chain account, you can proceed to the current flow without any concerns."; -"backup.wallet.replace.several.alert" = "You currently have several chain accounts that has been added by replacing the main key pair, and it possesses a specific one. However, please note that our current wallet backup (export) flow does not support the storage of multiple key pairs. As a result, you can only save your main key pair. \n \n To ensure the safety of your replaced chain account, we recommend that you first back it up separately before proceeding with the current flow. Once you have successfully backed up your replaced chain account, you can proceed to the current flow without any concerns."; -"backup.wallet.seed" = "Show Raw Seed"; -"backup.wallet.title" = "Backup wallet"; -"balance.locks.blocked.row.title" = "Blocked"; -"balance.locks.governance.row.title" = "Governance"; -"balance.locks.liquidity.pools.row.title" = "Liquidity Pools"; -"balance.locks.nomination.pools.row.title" = "Nomination Pools"; -"balance.locks.screen.title" = "Locked details"; -"banners.view.factory.backup.action.title" = "Backup now"; -"banners.view.factory.backup.subtitle" = "Protect yourself from losing access to your funds"; -"banners.view.factory.backup.title" = "Wallet backup"; -"banners.view.factory.xor.action.title" = "Buy XOR"; -"banners.view.factory.xor.subtitle" = "Buy or sell XOR token with\ -Euro cash"; -"banners.view.factory.xor.title" = "Buy XOR token"; +"backup.wallet.name.editing.description" = "Пример: сбережения, инвестиции, краудзаймы, стейкинг. Это имя учетной записи будет отображаться только для вас и храниться локально на вашем мобильном устройстве"; +"backup.wallet.name.editing.title" = "Изменить название кошелька"; +"backup.wallet.name.field.name.title" = "Название кошелька"; +"backup.wallet.replace.accounts.alert" = "В настоящее время у вас есть %s Учетная запись и адрес сети %s Он был добавлен путем замены основной ключевой пары, и обладает специфическим ключом. Однако обратите внимание, что наш текущий процесс резервного копирования (экспорта) кошелька не поддерживает хранение нескольких пар ключей. В результате вы можете сохранить только свою основную ключевую пару. \n \n Чтобы обеспечить безопасность замененной учетной записи цепочки, мы рекомендуем сначала создать отдельную резервную копию учетной записи, прежде чем продолжить текущий процесс. После успешного резервного копирования замененной учетной записи цепочки вы можете без каких-либо проблем перейти к текущему процессу."; +"backup.wallet.replace.several.alert" = "В настоящее время у вас есть несколько учетных записей в цепочке, которые были добавлены путем замены основной пары ключей, и они обладают определенной парой. Однако обратите внимание, что наш текущий процесс резервного копирования (экспорта) кошелька не поддерживает хранение нескольких пар ключей. В результате вы можете сохранить только свою основную ключевую пару. \n \n Чтобы обеспечить безопасность замененной учетной записи цепочки, мы рекомендуем сначала создать отдельную резервную копию учетной записи, прежде чем приступать к текущему процессу. После успешного резервного копирования замененной учетной записи цепочки вы можете без каких-либо проблем перейти к текущему процессу."; +"backup.wallet.seed" = "Показать Raw Seed"; +"backup.wallet.title" = "Резервное копирование кошелька"; +"balance.locks.blocked.row.title" = "Заблокировано"; +"balance.locks.governance.row.title" = "Управление"; +"balance.locks.liquidity.pools.row.title" = "Пулы ликвидности"; +"balance.locks.nomination.pools.row.title" = "Пулы номинаций"; +"balance.locks.screen.title" = "Заблокированные детали"; +"banner.addwallet.regular.button.title" = "Сreate or import"; +"banner.addwallet.regular.subtitle" = "Join the ecosystems with more than 90+ chains and fascinating features"; +"banner.addwallet.regular.title" = "EVM/Substrate accounts"; +"banner.addwallet.ton.button.title" = "Join now"; +"banner.addwallet.ton.title" = "Join the fastest growing ecosystem ever"; +"banners.view.factory.backup.action.title" = "Резервное копирование сейчас"; +"banners.view.factory.backup.subtitle" = "Защитите себя от потери доступа к своим средствам"; +"banners.view.factory.backup.title" = "Резервное копирование кошелька"; +"banners.view.factory.xor.action.title" = "Купить XOR"; +"banners.view.factory.xor.subtitle" = "Купить или продать токен XOR за евро"; +"banners.view.factory.xor.title" = "Купить токен XOR"; "btn.backup.with.google" = "Сохранить в Google"; "buy.completed" = "Покупка совершена! Ожидайте до 60 минут. Вы можете отслеживать статус по электронной почте."; "chain.selection.all.networks" = "Все сети"; @@ -194,17 +199,17 @@ Euro cash"; "common.action.receive" = "Получить"; "common.action.send" = "Перевести"; "common.action.teleport" = "Телепорт"; -"common.activation.required" = "Activation Required"; +"common.activation.required" = "Требуется активация"; "common.add" = "Добавить"; "common.address" = "Адрес"; "common.advanced" = "Продвинутый"; -"common.and.others.placeholder" = "%s & others"; +"common.and.others.placeholder" = "%s и другие"; "common.applied" = "Применено"; "common.apply" = "Применить"; -"common.approve" = "Approve"; -"common.attention" = "Attention"; +"common.approve" = "Утвердить"; +"common.attention" = "Внимание"; "common.available.format" = "Доступно: %@"; -"common.available.networks" = "Available networks"; +"common.available.networks" = "Доступные сети"; "common.balance" = "Баланс"; "common.balance.format" = "Баланс: %@"; "common.bonus" = "Бонус"; @@ -224,8 +229,8 @@ Euro cash"; "common.confirm.title" = "Подтверждение"; "common.confirmation.title" = "Уверены ли вы?"; "common.confirmed" = "Подтверждено"; -"common.connections" = "Connections"; -"common.contacts" = "Contacts"; +"common.connections" = "Соединения"; +"common.contacts" = "Контакты"; "common.continue" = "Продолжить"; "common.copied" = "Скопировано в буфер обмена"; "common.copy" = "Скопировать"; @@ -244,12 +249,12 @@ Euro cash"; "common.error.network" = "Возникла ошибка при обмене данными с удаленным сервером"; "common.error.no.data.retrieved" = "Данные не получены."; "common.error.password.mismatch" = "Неверный пароль"; -"common.events" = "Events"; +"common.events" = "События"; "common.existential.error.message" = "Эта операция приведет к тому, что счет опустится ниже экзистенциального депозита %@, что приведет к его деактивации (счет будет стерт из состояния блокчейна для экономии места)."; -"common.existential.warning.max.amount" = "Set max amount"; +"common.existential.warning.max.amount" = "Установите максимальную сумму"; "common.existential.warning.message" = "Эта операция приведет к тому, что счет опустится ниже экзистенциального депозита %@, что приведет к его деактивации (счет будет стерт из состояния блокчейна для экономии места). Если вы решите продолжить, вы потеряете все средства, которые находятся ниже суммы экзистенциального депозита, установленного сетью. За подробной информацией обращайтесь к официальной документации сети (например, Polkadot Wiki). Fearless Wallet является полностью не опекунским приложением и не контролирует и не знает о любых ваших действиях в самой сети. ПРОДОЛЖАЙТЕ ТОЛЬКО В ТОМ СЛУЧАЕ, ЕСЛИ ВЫ ПОЛНОСТЬЮ СОГЛАСНЫ И ПОНИМАЕТЕ ПОСЛЕДСТВИЯ."; "common.existential.warning.title" = "Операция сделает аккаунт неактивным"; -"common.expiry" = "Expiry"; +"common.expiry" = "Истечение"; "common.export" = "Экспорт аккаунта"; "common.filter.sort.header" = "Сортировать по:"; "common.important" = "Важно"; @@ -264,61 +269,65 @@ Euro cash"; "common.keep.editing.action" = "Вернуться к операции"; "common.learn.more" = "Узнать больше"; "common.max" = "Все"; -"common.message" = "Message"; -"common.methods" = "Methods"; +"common.message" = "Сообщение"; +"common.methods" = "Методы"; "common.module" = "Модуль"; -"common.more" = "More"; -"common.my.networks" = "My networks"; +"common.more" = "Подробнее"; +"common.my.networks" = "Мои сети"; "common.name" = "Имя"; "common.network" = "Сеть"; "common.network.fee" = "Комиссия сети"; -"common.network.management" = "Network management"; +"common.network.hash" = "%@ Hash"; +"common.network.management" = "Управление сетью"; "common.next" = "Далее"; "common.no" = "Нет"; "common.no.screenshot.message" = "Не делайте скриншоты, которые могут быть собраны сторонними вредоносными программами"; "common.no.screenshot.title" = "Не делайте скриншоты"; -"common.not.available.short" = "N/A"; +"common.not.available.short" = "Н/Д"; "common.not.enough.balance.message" = "К сожалению, у вас недостаточно средств для совершения данной операции"; "common.not.enough.fee.message" = "К сожалению, у вас недостаточно средств для оплаты сетевого сбора."; "common.ok" = "OK"; "common.paste" = "Вставить"; "common.payout" = "Выплаты"; "common.preview" = "Предварительный просмотр"; -"common.price" = "Price"; +"common.price" = "Цена"; "common.privacy.policy" = "Политикой конфиденциальности"; "common.proceed" = "Продолжить"; "common.referral.code.title" = "Реферальный код"; -"common.reject" = "Reject"; -"common.rejected" = "Rejected"; -"common.request" = "Request"; +"common.refund" = "Refund"; +"common.reject" = "Отклонить"; +"common.rejected" = "Отклонено"; +"common.request" = "Запрос"; "common.reset" = "Сброс"; -"common.resolve" = "Resolve"; +"common.resolve" = "Исправить"; "common.retry" = "Повторить"; "common.save" = "Сохранить"; "common.search" = "Поиск"; "common.search.results.number" = "Результаты поиска: %li"; "common.search.start.title" = "Здесь появятся результаты поиска"; "common.secret.derivation.path" = "Последовательность для вывода секрета"; +"common.see.all" = "Посмотреть все"; +"common.see.all" = "See all"; "common.select" = "Выбрать"; "common.select" = "Выбрать"; -"common.select.all" = "Select all"; +"common.select.all" = "Выбрать все"; "common.select.asset" = "Выбор актива"; "common.select.network" = "Выбрать Сеть"; -"common.selected.count" = "Selected: %@"; +"common.selected.count" = "Выбрано: %@"; "common.set.password" = "Новый пароль"; "common.share" = "Поделиться"; "common.show" = "Показать"; -"common.sign" = "Sign"; +"common.sign" = "Подписать"; "common.skip" = "Пропустить"; "common.staking" = "Стейкинг"; -"common.start" = "Start"; +"common.start" = "Начать"; "common.terms.and.conditions" = "Условиями использования"; "common.till.date" = "до %s"; "common.time.left" = "Оставшееся время"; "common.time.left.format" = "%@ осталось"; "common.total" = "Всего"; "common.transaction.failed" = "Транзакция не прошла. Пожалуйста, попытайтесь снова"; -"common.transaction.raw.data" = "Transaction raw data"; +"common.transaction.raw.data" = "Исходные данные транзакции"; "common.transaction.submitted" = "Транзакция отправлена"; "common.undefined.error.message" = "Пожалуйста, попробуйте снова с другими входными данными. Если ошибка повторяется, то свяжитесь со службой поддержки."; "common.undefined.error.title" = "Неопределенная ошибка"; @@ -328,14 +337,18 @@ Euro cash"; "common.use" = "Использовать"; "common.wallet" = "Кошелёк"; "common.warning" = "Предупреждение"; -"common.warning.capitalized" = "WARNING:"; +"common.warning.capitalized" = "ПРЕДУПРЕЖДЕНИЕ:"; "common.watch" = "Смотреть"; "common.yes" = "Да"; "confirm.mnemonic.mismatch.error.message" = "Пожалуйста, проверьте порядок слов еще раз."; "confirm.mnemonic.mismatch.error.message.2.0" = "Неверная мнемоническая фраза, пожалуйста, проверьте еще раз порядок слов"; "confirm.mnemonic.mismatch.error.title" = "Неверная мнемоника"; "confirmation.skip.action" = "Пропустить"; -"connect.details" = "Connect details"; +"connect.details" = "Детали соединения"; +"connected.accounts.common" = "Connected Accounts"; +"connected.accounts.ethereum.title" = "EVM chain accounts"; +"connected.accounts.substrate.title" = "Substrate chain accounts"; +"connected.accounts.ton.title" = "TON chain accounts"; "connection.add.already.exists.error" = "Узел уже был добавлен ранее. Пожалуйста, попробуйте другой узел."; "connection.add.invalid.error" = "Не удается установить соединение с узлом. Пожалуйста, попробуйте другой узел."; "connection.add.unsupported.error" = "К сожалению, сеть не поддерживается. Пожалуйста, попробуйте одну из следующих: %@."; @@ -352,18 +365,26 @@ Euro cash"; "contacts.contact.address" = "Адрес контакта"; "contacts.contact.name" = "Имя контакта"; "contacts.create.contact" = "Создать контакт"; -"contacts.empty.message" = "No contacts found"; +"contacts.empty.message" = "Контакты не найдены"; "contacts.recent" = "Недавние"; "contacts.scan" = "Сканировать QR-код"; "contacts.undefined" = "Неизвестный"; "contribution.type.direct.dot" = "Direct DOT"; "contribution.type.lcdot" = "lcDOT"; -"controller.account.issue.action" = "Manage controller account"; -"controller.account.issue.message" = "Please note that the Controller account feature has been deprecated and as a result, you are required to set your Stash account as the Controller"; +"controller.account.issue.action" = "Управление учетной записью контроллера"; +"controller.account.issue.message" = "Обратите внимание, что функция учетной записи контроллера устарела, и в связи с этим вам необходимо установить свою учетную запись Stash в качестве контролера"; "copy.referral.code" = "Копировать реферальный код"; "create.new.account" = "Создать новый аккаунт"; -"create.new.connection" = "Create new connection"; +"create.new.connection" = "Создание нового подключения"; "create.new.pincode" = "Создайте новый PIN код"; +"cross.chain.tx.status.destination.fail.description" = "Transaction failed on the %@. Your funds in the current transaction will be returned to your wallet."; +"cross.chain.tx.status.destination.fail.title" = "Transaction refund"; +"cross.chain.tx.status.done.description" = "Transaction has been successfully completed."; +"cross.chain.tx.status.done.title" = "All done"; +"cross.chain.tx.status.pending.description" = "Transaction is in progress. Please wait while %@ asset cross the bridge from the %@ to the %@ network."; +"cross.chain.tx.status.pending.title" = "Transaction pending"; +"cross.chain.tx.status.source.fail.description" = "Transaction failed on the %@ network. Please, try again."; +"cross.chain.tx.status.source.fail.title" = "Transaction failed"; "crowdloan.active.section.format" = "Активные (%@)"; "crowdloan.app.bonus.format" = "Бонус Fearless Wallet (%@)"; "crowdloan.astar.referral.code.invalid" = "Недействительный реферальный адрес, допускается ввод только адреса сети Polkadot, попробуйте еще раз"; @@ -404,24 +425,36 @@ Euro cash"; "custom.collators.text" = "Вы должны доверять своим коллаторам действовать компетентно и честно; Основывая свое решение исключительно на их текущей прибыльности, вы можете привести к снижению прибыли или даже потере средств."; "custom.collators.title" = "Стейк с известными коллаторами"; "custom.validators.empty.message" = "Валидаторы не найдены.\nПожалуйста, попробуйте изменить фильтры"; +"dapp.category.connected.title" = "Connected"; +"dapp.category.defi.title" = "DeFi"; +"dapp.category.featured.title" = "Featured"; +"dapp.category.nft.title" = "NFT"; +"dapp.category.utilities.title" = "Utilities"; +"dapp.connected.title" = "Connected"; +"dapp.discover.title" = "Discover dApp"; +"dapp.no.connected.dapps.title" = "No connected dApps"; +"dapp.not.found.title" = "No dApps were found"; "default.account.shared.secret" = "Аккаунты с одним ключом"; "delete.custom.node.title" = "Удалить выбранную ноду?"; "ecdsa.selection.subtitle" = "(BTC/ETH совместимый)"; "ecdsa.selection.title" = "ECDSA"; +"ecosystem.options.backup.title" = "Backup chain accounts"; +"ecosystem.options.details.title" = "Chain accounts"; +"ecosystem.options.title" = "Account options"; "ed25519.selection.subtitle" = "ed25519 (альтернативный)"; "ed25519.selection.title" = "Edwards"; -"empty.state.message" = "Nothing found for your request"; +"empty.state.message" = "Ничего не найдено по вашему запросу"; "empty.view.description" = "Не найдено ни одной сети или ассета :("; "empty.view.title" = "Извините!"; "error.invalid.address" = "Неверный адрес для выбранной сети"; "error.message.enter.the.name" = "Введите имя…"; "error.message.enter.the.url.address" = "Введите URL-адрес…"; -"error.scan.qr.disabled.asset" = "The asset you want to transfer is either unsupported or turned off. Go to Asset Management, activate the asset, and then scan the QR code again."; -"error.unsupported.asset" = "You're trying to make a transfer of the asset which isn't currently supported on the App. Please choose another asset or request another QR code."; +"error.scan.qr.disabled.asset" = "Актив, который вы хотите передать, либо не поддерживается, либо отключен. Перейдите в Управление Активами, активируйте актив, а затем снова отсканируйте QR-код."; +"error.unsupported.asset" = "Вы пытаетесь перевести актив, который в настоящее время не поддерживается приложением. Пожалуйста, выберите другой актив или запросите другой QR-код."; "ethereum.crypto.type" = "Тип криптографической пары ключей Ethereum"; "ethereum.secret.derivation.path" = "Путь деривации секрета Ethereum"; "example" = "Пример: %s"; -"existential.deposit.received.error" = "Existential Deposit not received"; +"existential.deposit.received.error" = "Экзистенциальный депозит не получен"; "export.ethereum.title" = "Экспорт Ethereum"; "export.mnemonic.hint" = "Используйте нецифровой способ резервного копирования, например, записав последовательность мнемонических слов и путь их образования (если он установлен) на бумаге."; "export.mnemonic.with.dp.template" = "Сеть: %@\ @@ -439,12 +472,12 @@ Euro cash"; "export.wallet.chains.count" = "+%d ДРУГИХ"; "fee.not.yet.loaded.message" = "Подождите, пока будет рассчитана комиссия"; "fee.not.yet.loaded.title" = "Расчет комиссии в процессе"; -"google.backup.button.title" = "Connect with Google"; +"google.backup.button.title" = "Подключиться через Google"; "google.backup.choice.google" = "Импорт из Google"; "google.backup.choice.json" = "JSON"; -"google.backup.choice.mnemonic" = "Mnemonic phrase"; +"google.backup.choice.mnemonic" = "Мнемоническая фраза"; "google.backup.choice.raw" = "Raw Seed"; -"google.backup.choice.title" = "Select source for import"; +"google.backup.choice.title" = "Выберите источник для импорта"; "help.support.title" = "Fearless поддержка"; "hidden.assets" = "Скрытые активы"; "history.empty.description" = "У вас нет транзакций здесь"; @@ -459,11 +492,11 @@ Euro cash"; "import.empty.derivation.cancel" = "Оставить как есть"; "import.empty.derivation.confirm" = "Пустой"; "import.empty.derivation.message" = "Вы можете задать нулевой путь (//00//00//0/0/0) или оставить путь деривации пустым. Пустой путь не позволит вам экспортировать аккаунт. Пожалуйста, выберите, какой путь вы хотите задать"; -"import.eth.json.invalid.import.type.message" = "Your JSON file isn't valid. You're trying to import Substrate based chain accounts instead of ETH ones. Please use a proper JSON file to import ETH chain accounts."; +"import.eth.json.invalid.import.type.message" = "Ваш файл JSON недействителен. Вы пытаетесь импортировать учетные записи цепочки на основе Substrate вместо ETH. Пожалуйста, используйте правильный файл JSON для импорта учетных записей цепочки ETH."; "import.ethereum.recovery.json" = "JSON для восстановления ETH аккаунтов"; "import.json.invalid.format.message" = "Пожалуйста, удостоверьтесь, что данные соответствуют json формату."; "import.json.invalid.format.title" = "JSON для восстановления недействителен"; -"import.json.invalid.import.type.message" = "Your JSON file isn't valid. You're trying to import ETH based chain accounts instead of Substrate ones. Please use a proper JSON file to import Substrate chain accounts at first."; +"import.json.invalid.import.type.message" = "Ваш файл JSON недействителен. Вы пытаетесь импортировать учетные записи на основе ETH вместо учетных записей Substrate. Пожалуйста, сначала используйте правильный файл JSON для импорта учетных записей цепочки Substrate."; "import.mnemonic" = "Мнемоническая фраза"; "import.mnemonic.invalid.title" = "Ваша мнемоника недействительна"; "import.raw.seed" = "Сид"; @@ -473,7 +506,7 @@ Euro cash"; "import.source.picker.title" = "Тип источника"; "import.substrate.recovery.json" = "JSON для восстановления Substrate аккаунтов"; "import.wallet" = "Импорт кошелька"; -"import.wallets.not.found" = "No import wallets were found :("; +"import.wallets.not.found" = "Импортированных кошельков не обнаружено :("; "index.common" = "Индекс"; "json.export.file.title" = "Экспорт в файл"; "json.export.text.title" = "Экспортировать как текст"; @@ -486,10 +519,11 @@ Euro cash"; "lp.apy.alert.title" = "Стратегический бонус APY"; "lp.apy.title" = "Стратегический бонус APY"; "lp.available.pools.title" = "Доступные пулы"; -"lp.banner.action.details.title" = "Show details"; -"lp.banner.text" = "Invest your funds in Liquidity\npools and receive rewards"; +"lp.banner.action.details.title" = "Показать подробности"; +"lp.banner.text" = "Инвестируйте свои средства в пулы\nликвидности и получайте награды."; "lp.confirm.liquidity.screen.title" = "Подтвердите ликвидность"; "lp.confirm.liquidity.warning.text" = "Оценка результата. Если цена изменится более чем на 0.5%, ваша транзакция будет отменена"; +"lp.liquidity.add.complete.text" = "Ваш вклад в пул ликвидности успешно завершен"; "lp.network.fee.alert.text" = "Комиссия сети используется для обеспечения роста и стабильной работы системы SORA."; "lp.network.fee.alert.title" = "Комиссия сети"; "lp.pool.details.title" = "Детали пула ликвидности"; @@ -497,12 +531,12 @@ Euro cash"; "lp.pool.remove.warning.title" = "ПРИМЕЧАНИЕ"; "lp.remove.button.title" = "Убрать ликвидность"; "lp.remove.liquidity.screen.title" = "Убрать ликвидность"; -"lp.reward.token.text" = "Заработать %@"; +"lp.reward.token.text" = "Заработать %s"; "lp.reward.token.title" = "Выплата вознаграждений в"; "lp.slippage.title" = "Проскальзывание"; "lp.supply.button.title" = "Добавить ликвидность"; "lp.supply.liquidity.screen.title" = "Добавить ликвидность"; -"lp.token.pooled.text" = "Ваши %@ добавлены в пул"; +"lp.token.pooled.text" = "Ваши %s добавлены в пул"; "lp.user.pools.title" = "Пулы пользователя"; "manage.assets.account.missing.text" = "Добавить аккаунт..."; "manage.assets.search.hint" = "Поиск по токену"; @@ -527,54 +561,58 @@ Euro cash"; "network.info.address" = "Адрес ноды"; "network.info.name" = "Имя ноды"; "network.info.title" = "Информация ноды"; -"network.issue.main" = "Connection Error: Unable to connect to the network. Please try again."; +"network.issue.main" = "Ошибка подключения: Не удается подключиться к сети. Пожалуйста, повторите попытку."; "network.issue.network.unavailible" = "Сеть не доступа"; "network.issue.node.unavailable" = "Нода не доступна"; "network.issue.notofication" = "Уведомления"; "network.issue.stub" = "Проблемы с сетью"; "network.issue.unavailable" = "Сеть недоступна, вы можете подождать или задать вопрос сообществу"; -"network.issues.empty.state.title" = "No network issues"; +"network.issues.empty.state.title" = "Нет проблем с сетью"; "network.issues.hide.action.title" = "Не показывать снова"; -"network.issues.resolve.option.title" = "Resolve Option"; -"network.management.popular" = "Popular"; -"network.managment.favourite" = "Favourite"; +"network.issues.resolve.option.title" = "Вариант решения"; +"network.management.popular" = "Популярные"; +"network.managment.favourite" = "Избранное"; "network.status.connected" = "Подключено"; "network.status.connecting" = "Подключение…"; "network.url.address" = "URL-адрес"; -"nft.choose.recipient.title" = "Choose recipient"; -"nft.collection.available.nfts" = "Available NFTs in the %s collection"; -"nft.collection.my.nfts" = "My NFTs"; -"nft.collection.title" = "Collection"; -"nft.creator.title" = "Creator"; -"nft.list.empty.message" = "There aren't any NFTs yet. Buy or mint NFTs to see them here."; -"nft.load.error" = "Failed to load NFTs"; -"nft.owner.title" = "Owned"; -"nft.share.address" = "My public address to receive: %s"; -"nft.spam.warning" = "Beware of a scam/spam NFT collection – verify authenticity before engaging. Stay safe!"; +"nft.choose.recipient.title" = "Выберите получателя"; +"nft.collection.available.nfts" = "Доступные NFT в коллекции %s"; +"nft.collection.my.nfts" = "Мои NFT"; +"nft.collection.title" = "Коллекция"; +"nft.creator.title" = "Создатель"; +"nft.list.empty.message" = "NFT пока нет. Покупайте или чеканите NFT, чтобы увидеть их здесь."; +"nft.load.error" = "Не удалось загрузить NFT"; +"nft.owner.title" = "Принадлежит"; +"nft.share.address" = "Мой публичный адрес для получения: %s"; +"nft.spam.warning" = "Остерегайтесь мошенничества/спама в сфере сбора NFT - проверяйте подлинность, прежде чем вступать в контакт. Будьте осторожны!"; "nft.stub.text" = "NFTs скоро будут здесь"; "nft.stub.title" = "Извините!"; -"nft.tokenid.title" = "Token ID"; -"nfts.collection.count" = "Quantity: %d/%d"; +"nft.tokenid.title" = "Идентификатор токена"; +"nfts.collection.count" = "Количество: %d/%d"; "nfts.filters.airdrop" = "AirDrop"; -"nfts.filters.spam" = "SPAM"; -"nfts.filters.title" = "Hide NFTs"; +"nfts.filters.spam" = "Спам"; +"nfts.filters.title" = "Скрыть NFT"; "nfts.stub" = "NFTs"; -"no.access.to.google" = "No access to Google"; +"no.access.to.google" = "Нет доступа к Google"; "no.account.found" = "Аккаунт не найден"; "no.email.bound.error.message" = "Пожалуйста, убедитесь, что на устройстве установлено почтовое приложение."; "node" = "Нода"; "node.selection.delete.node.title" = "Удалить выбранную ноду?"; +"onboarding.banner.regular.ecosystem.button.title" = "Join EVM or Substrate"; +"onboarding.banner.regular.ecosystem.title" = "Create or import Substrate or EVM accounts"; +"onboarding.banner.ton.ecosystem.button.title" = "Join TON"; +"onboarding.banner.ton.ecosystem.title" = "Connect to the fastest growing ecosystem ever"; "onboarding.create.account" = "Создать аккаунт"; "onboarding.create.wallet" = "Создать кошелёк"; -"onboarding.preinstalled.wallet.button.text" = "Get a pre-installed wallet"; +"onboarding.preinstalled.wallet.button.text" = "Получите предустановленный кошелек"; "onboarding.restore.account" = "Восстановить"; "onboarding.restore.wallet" = "У меня уже есть кошелек"; -"onboarding.start.title" = "The DeFi Wallet For The Future"; +"onboarding.start.title" = "DeFi-кошелек будущего"; "onboarding.terms.and.conditions.1" = "Я подтверждаю, что прочитал и согласен с \ Условиями использования и Политикой конфиденциальности"; "operation.error.message" = "Пожалуйста, попробуйте позже"; "operation.error.title" = "Ошибка операции"; -"optional.networks" = "Optional networks"; +"optional.networks" = "Дополнительные сети"; "options.common" = "Опции"; "parachain.crowdloans" = "Краудлоуны парачейнов"; "parachain.staking.collator" = "Коллатор"; @@ -596,15 +634,16 @@ Euro cash"; "parachain.staking.reward.info.max" = "Максимальный APR"; "parachain.staking.self.bonded" = "Самозарезервированный"; "parachain.staking.stake.less" = "Уменьшить стейк"; -"parachain.staking.story.collator.page.1" = "Collators maintain parachains by collecting parachain transactions from users and producing state transition proofs for Relay Chain validators. In other words, collators aggregate parachain transactions into parachain block candidates and produce state transition proofs for validators based on those blocks."; -"parachain.staking.story.collator.page.2" = "A collator runs a blockchain node 24/7 and is required to have enough stake locked (both owned and provided by delegators) to be elected by the network. Collators should maintain their nodes\' performance and reliability to be rewarded. Being a collator is almost a full-time job.\nEveryone can be a collator and run a blockchain node, but doing so requires a certain level of technical skills and responsibility."; -"parachain.staking.story.collator.title" = "Who’s a collator?"; -"parachain.staking.story.delegator.page.1" = "Delegators are token holders who stake tokens, vouching for specific collator candidates. Any user that holds a minimum amount of tokens as free balance can become a delegator."; -"parachain.staking.story.delegator.page.2" = "Delegators should check their stake states regularly. It is possible that staking balance falls below the minimum required amount to receive rewards or even be a delegator. In the worst-case scenario, your staking slot may be replaced by another delegator with a higher stake and your stake could be pushed out and immediately returned to your balance."; -"parachain.staking.story.delegator.title" = "Who’s a delegator?"; -"parachain.staking.story.rewards.page.1" = "Reward pool - a portion of the annual inflation that is set aside for collators and delegators.\nRewards for collators and their delegators are calculated at the start of every round for their work prior to the reward payout delay.\nThe calculated rewards are then paid out on a block-by-block basis. For every block, one collator will be chosen to receive their entire reward payout from the prior round, along with their delegators, until all of the rewards have been paid for that round."; -"parachain.staking.story.rewards.page.2" = "Delegators get rewards after a reward payout delay. Payout delays are a certain amount of rounds which must pass before staking rewards are distributed automatically to the free balance.\nReward distribution to some delegators may be stopped because of two possible reasons; A collator hasn\'t been chosen by the network for creating blocks, or decided to leave the candidate pool. Another reason is having a stake amount lower than the minimum collator bond."; -"parachain.staking.story.rewards.title" = "Rewards?"; +"parachain.staking.story.collator.page.1" = "Коллаторы поддерживают парачейн, собирая транзакции парачейна от пользователей и создавая доказательства перехода состояния для валидаторов Relay Chain. Другими словами, коллаторы объединяют транзакции парачейна в кандидаты на блок парачейна и создают доказательства перехода состояния для валидаторов на основе этих блоков."; +"parachain.staking.story.collator.page.2" = "Коллатор управляет узлом блокчейна 24/7 и должен иметь достаточно заблокированных ставок (как принадлежащих, так и предоставленных делегаторами), чтобы быть избранным сетью. Коллаторы должны поддерживать производительность и надежность своих узлов, чтобы получить вознаграждение. Быть коллатором — это почти полноценная работа.\ +Каждый может быть коллатором и управлять узлом блокчейна, но для этого требуется определенный уровень технических навыков и ответственности."; +"parachain.staking.story.collator.title" = "Кто такой коллатор?"; +"parachain.staking.story.delegator.page.1" = "Делегаторы — это держатели токенов, которые стейкают токены, ручаясь за определенных кандидатов-коллаторов. Любой пользователь, который держит минимальное количество токенов в качестве свободного баланса, может стать делегатом."; +"parachain.staking.story.delegator.page.2" = "Делегаторы должны регулярно проверять состояние своих ставок. Возможно, что баланс ставок опустится ниже минимально необходимой суммы для получения вознаграждений или даже для делегирования. В худшем случае ваш слот ставок может быть заменен другим делегатором с более высокой ставкой, и ваша ставка может быть вытеснена и немедленно возвращена на ваш баланс."; +"parachain.staking.story.delegator.title" = "Кто такой делегатор?"; +"parachain.staking.story.rewards.page.1" = "Пул вознаграждений — часть годовой инфляции, которая откладывается для коллаторов и делегаторов. Вознаграждения для коллаторов и их делегаторов рассчитываются в начале каждого раунда за их работу до задержки выплаты вознаграждения. Затем рассчитанные вознаграждения выплачиваются поблочно. Для каждого блока будет выбран один коллатор, который получит всю выплату вознаграждения за предыдущий раунд вместе со своими делегаторами, пока все вознаграждения за этот раунд не будут выплачены."; +"parachain.staking.story.rewards.page.2" = "Делегаторы получают вознаграждения после задержки выплаты вознаграждения. Задержки выплат — это определенное количество раундов, которые должны пройти, прежде чем вознаграждения за стейкинг будут автоматически распределены на свободный баланс. Распределение вознаграждений некоторым делегатам может быть остановлено по двум возможным причинам: коллатор не был выбран сетью для создания блоков или решил покинуть пул кандидатов. Другая причина — сумма ставки ниже минимальной гарантии коллатора."; +"parachain.staking.story.rewards.title" = "Награды?"; "parachain.staking.unlock" = "Разблокировать"; "pincode.confirm.pin.code" = "Подтвердите пин-код"; "pincode.confirm.your.pin.code" = "Подтвердите свой PIN-код"; @@ -613,53 +652,53 @@ Euro cash"; "pincode.set.your.pin.code" = "Установите свой PIN-код"; "pincode.setup.top.title" = "Установить пин-код"; "polkadot.js.plus.action.title" = "Polkadot.js Plus"; -"polkaswap.add.more.amount.message" = "Sorry, you don't have enough funds to pay the network fee. We can't charge. The fee neither from your current balance nor from the swap results. Please add more tokens or adjust the transaction amount to proceed"; -"polkaswap.confirmation.price.impact.stub" = "Price impact "; -"polkaswap.confirmation.route.stub" = "Route"; +"polkaswap.add.more.amount.message" = "К сожалению, у вас недостаточно средств для оплаты комиссии. Мы не можем взимать комиссию ни с вашего текущего баланса, ни с результатов свопа. Пожалуйста, добавьте больше токенов или измените сумму транзакции, чтобы продолжить."; +"polkaswap.confirmation.price.impact.stub" = "Влияние на цену"; +"polkaswap.confirmation.route.stub" = "Маршрут"; "polkaswap.confirmation.swap.stub" = "Обменять"; "polkaswap.confirmation.swapped.stub" = "Swapped"; "polkaswap.dex.alert.message" = "К сожалению, такой пары нет. Но вы можете выбрать другую"; -"polkaswap.dex.alert.title" = "Token Pair Isn’t Created"; -"polkaswap.disclaimer.important" = "IMPORTANT: I confirm that I have read all of the documents mentioned and pressing Сontinue I accept them."; -"polkaswap.disclaimer.number.1" = "Your sole responsibility for compliance with all laws that may apply to your particular use of Polkaswap in your legal jurisdiction;"; -"polkaswap.disclaimer.number.2" = "Your understanding that the current version of Polkaswap is an alpha version: it has not been fully tested, and some functions may not perform as designed;"; -"polkaswap.disclaimer.number.3" = "Your understanding and voluntary acceptance of the risks involved in using Polkaswap, including, but not limited to, the risk of losing tokens."; -"polkaswap.disclaimer.paragraph.1" = "Polkaswap is maintained by the SORA community. Before continuing to use Polkaswap, please review the %%Polkaswap FAQ%% and documentation, which includes a detailed explanation on how Polkaswap works, as well as the %%Polkaswap Memorandum and Terms of Services%%, and %%Privacy Policy%%."; -"polkaswap.disclaimer.paragraph.2" = "These documents are crucial to a secure and positive user experience. By using Polkaswap, you acknowledge that you have read and understand these documents."; -"polkaswap.disclaimer.paragraph.3" = "You also acknowledge the following:"; -"polkaswap.disclaimer.paragraph.4" = "Once more, please do not continue without reading the %%Polkaswap FAQ%%, %%Polkaswap Memorandum and Terms of Services%%, and %%Privacy Policy%%!"; -"polkaswap.disclaimer.read.before" = "Please read before continuing to use Polkaswap"; -"polkaswap.disclaimer.settings" = "Polkaswap disclamer"; -"polkaswap.disclaimer.stub" = "DISCLAIMER"; -"polkaswap.disclaimer.stub.read" = "Read"; -"polkaswap.disclaimer.title" = "Disclaimer"; -"polkaswap.liqudity.fee.info" = "A portion of each trade (0.3%) goes to liquidity providers as a protocol incentive."; +"polkaswap.dex.alert.title" = "Пара токенов не создана"; +"polkaswap.disclaimer.important" = "ВАЖНО: Я подтверждаю, что прочитал все указанные документы и, нажимая «Продолжить», я принимаю их."; +"polkaswap.disclaimer.number.1" = "Вашу личную ответственность за соблюдение законов, которые могут применяться к использованию Polkaswap в вашей юрисдикции;"; +"polkaswap.disclaimer.number.2" = "Понимание что текущая версия Polkaswap является альфа версией: она не была полностью протестирована, и некоторые функции могут работать не так, как задумано;"; +"polkaswap.disclaimer.number.3" = "Понимание и добровольное принятие рисков, связанных с использованием Polkaswap, включая, но не ограничиваясь, риском потери токенов."; +"polkaswap.disclaimer.paragraph.1" = "Polkaswap поддерживается сообществом SORA. Прежде чем продолжить использование Polkaswap, пожалуйста, ознакомьтесь с %%Polkaswap FAQ%% и документацией, которая содержит подробное объяснение того, как работает Polkaswap, а также с %%Polkaswap Memorandum и Terms of Services%%, и %%Privacy Policy%%."; +"polkaswap.disclaimer.paragraph.2" = "Эти документы имеют решающее значение для обеспечения безопасности и положительного опыта пользователей. Используя Polkaswap, вы подтверждаете, что прочитали и поняли эти документы."; +"polkaswap.disclaimer.paragraph.3" = "Вы также признаете следующее:"; +"polkaswap.disclaimer.paragraph.4" = "Не продолжайте, пока не ознакомитесь с %%Polkaswap FAQ%%, %%Polkaswap Меморандумом и Условиями и положениями%%, и %%Политикой конфиденциальности%%!"; +"polkaswap.disclaimer.read.before" = "Пожалуйста, прочитайте перед использованием Polkaswap"; +"polkaswap.disclaimer.settings" = "Отказ от ответственности Polkaswap"; +"polkaswap.disclaimer.stub" = "ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ"; +"polkaswap.disclaimer.stub.read" = "Читать"; +"polkaswap.disclaimer.title" = "Отказ от ответственности"; +"polkaswap.liqudity.fee.info" = "Часть каждой сделки (0,3%) является награждением для поставщиков ликвидности."; "polkaswap.liquidity.provider.fee" = "Комиссия поставщика ликвидности"; -"polkaswap.liquidity.provider.fee" = "Liquidity Provider Fee "; -"polkaswap.market.alert.choose.action" = "Choose asset"; -"polkaswap.market.alert.message" = "You haven't completed the swap adjustments. One or both assets haven't been chosen, so the market selection isn't available."; -"polkaswap.market.alert.title" = "Market selection isn't available"; -"polkaswap.market.algorithm.title" = "Market algorithm"; -"polkaswap.market.smart.description" = "SMART liquidity routing ensures the best price for any transaction by combining only the best price options from all available markets. When available, Token Bonding Curve (TBC) will be used for liquidity as long as the asset price is more affordable than from other sources, upon which the XYK pool is utilized."; +"polkaswap.liquidity.provider.fee" = "Комиссия поставщика ликвидности "; +"polkaswap.market.alert.choose.action" = "Выбрать актив"; +"polkaswap.market.alert.message" = "Вы не завершили настройку свапа. Один или оба актива не выбраны, поэтому выбор рынка недоступен."; +"polkaswap.market.alert.title" = "Выбор рынка недоступен"; +"polkaswap.market.algorithm.title" = "Рыночный алгоритм"; +"polkaswap.market.smart.description" = "Маршрутизация ликвидности SMART обеспечивает лучшую цену для любой транзакции, комбинируя только лучшие варианты цены со всех доступных рынков. При наличии TBC будет использоваться для обеспечения ликвидности до тех пор, пока цена актива будет более доступной, чем из других источников, на которых используется пул XYK."; "polkaswap.market.stub" = "Рынок:"; -"polkaswap.market.stub" = "Market"; -"polkaswap.market.tbc.description" = "TBC — buying only from the Token Bonding Curve (Primary Market). There is a possibility that the price can become unfavorable compared to the XYK pool (Secondary Market), but the value received from the vested rewards might turn out to be much more favorable over time."; -"polkaswap.market.xyk.description" = "XYK — buying only from the XYK pool (Secondary Market). Traditional XYK pool swap where anyone can buy or sell assets by shifting the market maker’s position on the x*y=k curve."; -"polkaswap.max.received" = "Maximums sold "; -"polkaswap.maximum.sold.info" = "Your transaction will revert if there is a large, unfavorable price movement before it is confirmed."; +"polkaswap.market.stub" = "Рынок"; +"polkaswap.market.tbc.description" = "TBC(Token Bonding Curve) — покупка только по кривой связывания токенов (первичный рынок). Есть вероятность того, что цена может стать невыгодной по сравнению с пулом XYK (вторичный рынок), но ценность, полученная от закрепленных вознаграждений, со временем может оказаться гораздо более выгодной."; +"polkaswap.market.xyk.description" = "XYK — покупка только из пула XYK (вторичный рынок). Традиционный обмен/свап пула XYK, когда любой может покупать или продавать активы, меняя позицию маркет-мейкера на кривой x*y=k."; +"polkaswap.max.received" = "Максимальная продажа"; +"polkaswap.maximum.sold.info" = "Ваша транзакция будет отменена, если до ее подтверждения произойдет значительное неблагоприятное изменение цены."; "polkaswap.min.received" = "Будет получено минимум"; -"polkaswap.min.received" = "Min received "; -"polkaswap.minimum.received.info" = "Your transaction will revert if there is a large, unfavorable price movement before it is confirmed."; -"polkaswap.network.fee" = "Network fee "; -"polkaswap.network.fee.info" = "Network fee is used to ensure SORA system's growth and stable performance."; -"polkaswap.price.impact.info" = "The difference between the market price and estimated price due to trade size."; -"polkaswap.quotes.not.available" = "Quotes not available"; -"polkaswap.settings.reset" = "Reset to default"; -"polkaswap.settings.slippadge.fail" = " - Your transaction may fail"; -"polkaswap.settings.slippadge.frontrun" = " - Your transaction may be frontrun"; -"polkaswap.settings.slippage.stub" = "Your transactions will revert if the price changes unfavorably by more than this percentage"; -"polkaswap.settings.slippage.title" = "Slippage Tolerance"; -"polkaswap.settings.title" = "Transaction Settings"; +"polkaswap.min.received" = "Мин. получено"; +"polkaswap.minimum.received.info" = "Ваша транзакция будет отменена, если до ее подтверждения произойдет значительное неблагоприятное изменение цены."; +"polkaswap.network.fee" = "Комиссия сети"; +"polkaswap.network.fee.info" = "Сетевая комиссия используется для обеспечения роста и стабильной работы системы SORA."; +"polkaswap.price.impact.info" = "Разница между рыночной ценой и расчетной ценой, обусловленная размером сделки."; +"polkaswap.quotes.not.available" = "Котировки недоступны"; +"polkaswap.settings.reset" = "Сбросить"; +"polkaswap.settings.slippadge.fail" = " - Ваша транзакция может завершиться неудачей"; +"polkaswap.settings.slippadge.frontrun" = " - Ваша транзакция может быть проведена заранее"; +"polkaswap.settings.slippage.stub" = "Ваши транзакции будут отменены, если цена изменится неблагоприятно более чем на этот процент."; +"polkaswap.settings.slippage.title" = "Допустимое проскальзывание"; +"polkaswap.settings.title" = "Настройки транзакции"; "pool.claimable.title" = "Заработано"; "pool.common" = "пул"; "pool.join.no.validators.message" = "Пул еще не выбрал ни одного валидатора. Если вы присоединитесь к нему, вы не получите никаких вознаграждений, пока не будут выбраны валидаторы."; @@ -682,11 +721,11 @@ Euro cash"; "pool.staking.main.min.create.title" = "Минимум чтобы создать пул"; "pool.staking.main.min.join.title" = "Минимум, чтобы присоединиться"; "pool.staking.main.possible.pools.title" = "Возможные пулы"; -"pool.staking.management.claim.button.title" = "Claim"; +"pool.staking.management.claim.button.title" = "Получить"; "pool.staking.management.claim.title" = "Получить награды"; -"pool.staking.management.option.nominees" = "Nominees"; +"pool.staking.management.option.nominees" = "Номинанты"; "pool.staking.management.redeem.title" = "Забрать токены"; -"pool.staking.nominator" = "Nominator"; +"pool.staking.nominator" = "Номинатор"; "pool.staking.pool.id" = "Id пула"; "pool.staking.pool.name" = "Имя пула"; "pool.staking.redeem.amount.title" = "Забрать:\n%@"; @@ -696,7 +735,7 @@ Euro cash"; "pool.staking.stake.more.amount.title" = "Застейкать ещё:\n%@"; "pool.staking.start.about.title" = "Что такое стейкинг и как он работает, смотрите инструкцию"; "pool.staking.start.confirm.amount.title" = "Присоединение к пулу\n%@"; -"pool.staking.title" = "Pool staking"; +"pool.staking.title" = "Пул стейкинга"; "pool.staking.total.stake.amount.title" = "Всего застейкано: \n%@"; "pool.staking.unstake.amount.title" = "Вывод из стейка:\n%@"; "pool.update.roles.title" = "Редактировать пул"; @@ -704,74 +743,75 @@ Euro cash"; "pools.limit.has.reached.error.message" = "Достигнут лимит пулов в этой сети"; "pools.limit.has.reached.error.title" = "Вы не можете создать больше пулов"; "profile.about.title" = "О приложении"; -"profile.account.score.title" = "Nomis multichain score"; +"profile.account.score.title" = "Мультичейн счет Nomis"; "profile.accounts.title" = "Аккаунты"; "profile.language.title" = "Язык"; "profile.logout.description" = "Это действие приведет к удалению всех учетных записей с этого устройства. Прежде чем продолжить, убедитесь, что вы сделали резервную копию своей парольной фразы."; "profile.logout.title" = "Выйти"; "profile.network.title" = "Сеть"; "profile.pincode.change.title" = "Изменить PIN-код"; -"profile.soracard.title" = "SORA Card"; +"profile.soracard.title" = "Карта SORA"; "profile.title" = "Настройки"; "profile.wallets.title" = "Кошельки"; "receive.note.text" = "Примечание: Это Polkadot&Kusama кошелек. Пожалуйста, отправляйте только токены Polkadot&Kusama экосистемы"; "recover.json.hint" = "Вставьте json строку или загрузите файл…"; -"remove.backup.extension.error.message" = "The backup's been created by the Fearless Wallet browser extension. The mobile application can't remove it because of lack of credentials"; +"remove.backup.extension.error.message" = "Резервная копия была создана расширением для браузера Fearless Wallet. Мобильное приложение не может удалить ее из-за отсутствия учетных данных"; "replace.account" = "Заменить аккаунт"; "replace.account.template" = "Заменить %s аккаунт"; -"required.accounts.not.satisfied" = "Cannot proceed: Your wallet does not have the necessary accounts. Please make sure you have the required accounts set up before continuing"; -"required.chains.not.satisfied" = "Unable to connect to wallet: The requested blockchain network is not supported or available"; -"required.events.not.satisfied" = "Missing event notifications: the App does not support the necessary event notifications"; -"required.methods.not.satisfied" = "Certain methods requested by Wallet Connect are not currently supported by the App. Although the connection can be established, certain functionalities of the dApp may not be available."; -"required.networks" = "Required networks"; -"review.optional.permissions" = "Review optional permissions"; -"review.permissions" = "Review permissions"; -"review.required.permissions" = "Review required permissions"; +"required.accounts.not.satisfied" = "Невозможно продолжить: На вашем кошельке нет необходимых учетных записей. Пожалуйста, убедитесь, что у вас настроены необходимые учетные записи, прежде чем продолжить"; +"required.chains.not.satisfied" = "Невозможно подключиться к кошельку: запрошенная сеть блокчейна не поддерживается или недоступна"; +"required.events.not.satisfied" = "Отсутствуют уведомления о событиях: приложение не поддерживает необходимые уведомления о событиях."; +"required.methods.not.satisfied" = "Некоторые методы, запрашиваемые Wallet Connect, в настоящее время не поддерживаются приложением. Хотя соединение может быть установлено, некоторые функции dApp могут быть недоступны."; +"required.networks" = "Необходимые сети"; +"review.optional.permissions" = "Просмотр необязательных разрешений"; +"review.permissions" = "Просмотр разрешений"; +"review.required.permissions" = "Просмотр необходимых разрешений"; "roles.common" = "Роли"; "same.address.transfer.warning.message" = "Вы пытаетесь сделать трансфер на свой адрес. За операцию будет списана комиссия и это не несет никакого смысла."; "scam.additional.stub" = "Дополнительно:"; "scam.description.donation.stub" = "Этот адрес подозрителен. Мы настоятельно рекомендуем вам не отправлять %s на этот аккаунт."; -"scam.description.exchange.stub" = "This address is marked as an exchange, be careful as the deposit and withdrawal addresses may different."; -"scam.description.lowscore.text" = "The address you are about to transfer to has low onchain activity, which may indicate a potential scammer or sybil attacker"; -"scam.description.sanctions.stub" = "This address has been flagged due to an entity related to a country under sanctions. We strongly recommend that you don't send %s to this account."; +"scam.description.exchange.stub" = "Данный адрес идентифицирован как принадлежащий бирже, будьте внимательны, так как адреса ввода и вывода средств могут отличаться."; +"scam.description.lowscore.text" = "Адрес, на который вы собираетесь перевести средства, имеет низкую активность в блокчейне, что может указывать на потенциального мошенника или на атаку Сивиллы."; +"scam.description.sanctions.stub" = "Этот адрес был отмечен как связанный со страной, находящейся под санкциями. Мы настоятельно рекомендуем вам не отправлять %s на этот счет."; "scam.description.scam.stub" = "Этот адрес был помечен в связи с доказательствами мошенничества. Мы настоятельно рекомендуем вам не отправлять %s на этот аккаунт."; -"scam.info.nomis.name" = "Nomis multi-chain score"; -"scam.info.nomis.subtype.text" = "Proceed with caution"; +"scam.info.nomis.name" = "Мультичейн счет Nomis"; +"scam.info.nomis.reason.text" = "Низкая активность сети"; +"scam.info.nomis.subtype.text" = "Действуйте с осторожностью"; "scam.name.stub" = "Имя:"; "scam.reason.stub" = "Причина:"; "scam.warning.alert.subtitle" = "Мы настоятельно рекомендуем не отправлять %s на это аккаунт."; -"scam.warning.alert.title" = "This address has been flagged due to an entity related to a country under sanctions. We strongly recommend that you don't send %@ to this account."; +"scam.warning.alert.title" = "Этот адрес был отмечен как связанный со страной, находящейся под санкциями. Мы настоятельно рекомендуем вам не отправлять %@ на этот счет."; "scan.qr.subtitle" = "Поднесите QR код получателя"; "scan.qr.title" = "QR Код"; "scan.qr.upload.button.title" = "Из галереи"; -"search.by.connection" = "Search by connection"; +"search.by.connection" = "Поиск по подключению"; "search.textfield.placeholder" = " Публичный адрес"; "search.view.title" = "Получатель"; "select.asset.search.empty.subtitle" = "Ассеты не найдены :("; "select.asset.search.placeholder" = "Поиск по токену"; -"select.collators.warning" = "DISCLAIMER: Algorithmic сollator suggestions do not constitute financial consultation or advice. Staking is a high-risk activity, and algorithmic сollator suggestions do not necessarily mitigate this risk. A сollator suggested by the algorithm could still leave the pool of candidates. A сollator suggested by the algorithm could also change their parameters (e.g.,commission rates, etc.) at any time after having been suggested and/or selected. You could lose rewards for these or other reasons. Only stake tokens and use сollator suggestions at your own discretion, after conducting due diligence and carefully considering the risks involved."; +"select.collators.warning" = "ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Предложения алгоритмических коллаторов не являются финансовыми консультациями или советами. Стекинг — это высокорискованная деятельность, и предложения по алгоритмических коллаторов не обязательно снижают этот риск. Коллектор, предложенный алгоритмом, все равно может покинуть пул кандидатов. Коллектор, предложенный алгоритмом, также может изменить свои параметры (например, ставки комиссии и т. д.) в любое время после того, как был предложен и/или выбран. Вы можете потерять вознаграждение по этим или другим причинам. Делайте ставки на токены и используйте предложения по коллатору только по своему усмотрению, проведя должную осмотрительность и тщательно взвесив все сопутствующие риски."; "select.network.search.empty.subtitle" = "Сети не найдены :("; "select.network.search.placeholder" = "Поиск по сети"; "select.save.type" = "Выберите тип сохранения"; "select.suggested.validators.warning" = "DISCLAIMER: Предложения алгоритмических валидаторов не являются финансовыми консультациями или советами. Стейкинг - это деятельность с высоким риском, и предложения алгоритмических валидаторов не обязательно снижают этот риск. Валидатор, предложенный алгоритмом, все равно может быть слэширован. Валидатор, предложенный алгоритмом, также может изменить свои параметры (например, размер комиссии и т.д.) в любое время после того, как он был предложен и/или выбран. Вы можете потерять токены или вознаграждения по этим или другим причинам. Ставьте токены и используйте предложения валидаторов только по своему усмотрению, после проведения должной проверки и тщательного рассмотрения сопутствующих рисков."; "select.validators.disclaimer" = "DISCLAIMER: Предложения алгоритмических валидаторов не являются финансовыми консультациями или советами. Стейкинг - это деятельность с высоким риском, и предложения алгоритмических валидаторов не обязательно снижают этот риск. Валидатор, предложенный алгоритмом, все равно может быть слэширован. Валидатор, предложенный алгоритмом, также может изменить свои параметры (например, размер комиссии и т.д.) в любое время после того, как он был предложен и/или выбран. Вы можете потерять токены или вознаграждения по этим или другим причинам. Ставьте токены и используйте предложения валидаторов только по своему усмотрению, после проведения должной проверки и тщательного рассмотрения сопутствующих рисков."; -"send.all.title" = "Send all tokens and reap the account"; +"send.all.title" = "Выведите все токены и удалите аккаунт"; "send.confirm.amount.title" = "Отправка\n%@"; "send.fund.title" = "Отправить средства"; "settings.add.wallet" = "Добавить кошелёк"; "settings.hide.zero.balances" = "Скрыть нулевые балансы"; "share.referral.code" = "Поделиться реферальным кодом"; -"sign.this.message" = "Sign this message?"; -"sora.bridge.amount.less.fee" = "The amount you're trying to transfer is insufficient to cover the transaction fees on the %s network. Although the transaction won't process, you'll still be charged the fees on the Sora network."; -"sora.bridge.low.amaunt.polkadot.alert" = "Currently, there's a min. amount 1.1 DOT for bridging to ensure the stability and security. We appreciate your understanding."; -"sora.bridge.low.amount.alert" = "Currently, there's a min. amount 0.05 KSM for bridging to ensure the stability and security of the SORA Network. We appreciate your understanding."; -"sora.card.status.failure.text" = "The KYC was terminated or it failed otherwise."; -"sora.card.status.failure.title" = "Verification failed"; -"sora.card.status.pending.title" = "Verification in progress"; -"sora.card.status.rejected.text" = "Your application has failed. To read more about the reason of the failure, please read the following additional description."; -"sora.card.status.rejected.title" = "Verification rejected"; -"sora.card.status.success.text" = "Your KYC verification is successful and we are already preparing to send you the SORA card!"; -"sora.card.status.success.title" = "Verification successful!"; +"sign.this.message" = "Подписать это сообщение?"; +"sora.bridge.amount.less.fee" = "Сумма, которую вы пытаетесь перевести, недостаточна для покрытия комиссии за транзакцию в сети %s. Хотя транзакция не будет выполнена, с вас все равно снимут комиссию в сети Sora."; +"sora.bridge.low.amaunt.polkadot.alert" = "В настоящее время существует минимальная сумма 1.1 DOT для мостов, чтобы обеспечить стабильность и безопасность. Мы ценим ваше понимание."; +"sora.bridge.low.amount.alert" = "В настоящее время существует минимальная сумма 0.05 KSM для моста, чтобы обеспечить стабильность и безопасность сети SORA. Мы ценим ваше понимание."; +"sora.card.status.failure.text" = "Процедура KYC была прекращена или не удалась по какой-либо причине."; +"sora.card.status.failure.title" = "Проверка не удалась"; +"sora.card.status.pending.title" = "Выполняется верификация"; +"sora.card.status.rejected.text" = "Ваша заявка не прошла. Чтобы узнать больше о причине неудачи, прочтите следующее дополнительное описание."; +"sora.card.status.rejected.title" = "Проверка отклонена"; +"sora.card.status.success.text" = "Ваша проверка KYC прошла успешно и мы уже готовимся отправить вам SORA Card!"; +"sora.card.status.success.title" = "Верификация прошла успешно!"; "sr25519.selection.subtitle" = "sr25519 (рекомендованный)"; "sr25519.selection.title" = "Schnorrkel"; "stacking.stash.account" = "Стэш аккаунт"; @@ -811,9 +851,9 @@ Euro cash"; "staking.bonded.inactive" = "Вы не номинируете и не валидируете"; "staking.change.your.validators" = "Смените своих валидаторов."; "staking.collator.info.title" = "Информация о коллаторе"; -"staking.collator.my.oversubscribed.message" = "Oversubscribed. You will not receive rewards from the collator in this era."; +"staking.collator.my.oversubscribed.message" = "Превышен лимит. В этой эре вы не получите награду от этого коллатора."; "staking.collator.other.oversubscribed.message" = "Переполнен. Вознаграждение выплачивается только делегаторам с самыми высокими стейками."; -"staking.collators" = "Collators"; +"staking.collators" = "Коллаторы"; "staking.common.era" = "Эра"; "staking.common.event.id" = "Событие"; "staking.common.rewards.apy" = "Вознаграждение (APY)"; @@ -821,7 +861,7 @@ Euro cash"; "staking.controller.account.title" = "Контроллер аккаунт"; "staking.controller.account.zero.balance" = "Мы обнаружили, что на этом аккаунте нет свободных токенов. Вы уверены, что хотите сменить контроллер?"; "staking.controller.can.hint" = "Контроллер аккаунт может вывести из стейка, забрать, вернуть в стейк, сменить назначение вознаграждений и валидаторов."; -"staking.controller.deprecated.description" = "Please note that in the %s network the Controller account feature has been deprecated, and as a result, you are required to set your Stash account as the Controller."; +"staking.controller.deprecated.description" = "Обратите внимание, что в разделе %s network, функция учетной записи Контроллера была устаревшей, в связи с чем вам необходимо установить свою учетную запись Stash в качестве Контроллера."; "staking.custom.blocked.warning" = "Этот валидатор не принимает номинации в данный момент. Пожалуйста, попробуйте снова в следующую эру."; "staking.custom.clear.button.title" = "Очистить фильтры"; "staking.custom.collators.title" = "Выберите коллатора"; @@ -870,7 +910,7 @@ Euro cash"; "staking.nominator.status.alert.waiting.message" = "Ваш стейкинг начнётся со следующий эры."; "staking.nominator.status.idle" = "Неработающий"; "staking.nominator.status.inactive" = "Неактивен"; -"staking.nominator.status.leaving" = "Leaving"; +"staking.nominator.status.leaving" = "Выходящий"; "staking.nominator.status.waiting" = "Ожидание следующей Эры"; "staking.payout.expired" = "Срок выплаты истёк"; "staking.payout.sent" = "Транзакция на выплату отправлена"; @@ -878,14 +918,14 @@ Euro cash"; "staking.pending.rewards.explanation.message" = "Валидаторы выплачивают вознаграждения каждые 2–5 дней. Однако, вы можете инициировать выплату самостоятельно, особенно, если срок вознаграждения истекает. В этом случае придётся заплатить комиссию."; "staking.pool.create.creating.pool" = "Создать пул\n%@"; "staking.pool.create.depositor" = "Вкладчик"; -"staking.pool.create.management.account" = "Pool management account"; +"staking.pool.create.management.account" = "Учетная запись для управления пулом"; "staking.pool.create.missing.name.description" = "Имя пула пропущено"; "staking.pool.create.missing.name.title" = "Невозможно создать пул"; "staking.pool.create.missing.pool.name" = "Нельзя создать пул"; -"staking.pool.create.nominator" = "Nominator"; +"staking.pool.create.nominator" = "Номинатор"; "staking.pool.create.poolId" = "Id пула"; -"staking.pool.create.root" = "Root"; -"staking.pool.create.stateToggler" = "State toggler"; +"staking.pool.create.root" = "Базовый"; +"staking.pool.create.stateToggler" = "Переключатель состояния"; "staking.pool.create.title" = "Создать пул"; "staking.pool.create.title" = "Создать пул"; "staking.pool.info.title" = "Информация о пуле"; @@ -948,7 +988,7 @@ Euro cash"; "staking.rewards.learn.more" = "Подробнее о вознаграждениях"; "staking.rewards.title" = "Вознаграждения"; "staking.round.title" = "раунд #%@"; -"staking.select.suggested" = "Select suggested"; +"staking.select.suggested" = "Выберите предложенное"; "staking.select.validators.confirm.title" = "Выбор валидаторов"; "staking.select.validators.confirm.title" = "Выбор валидаторов"; "staking.select.validators.custom.button.title" = "Выбрать самому"; @@ -972,9 +1012,9 @@ Euro cash"; "staking.stake" = "Стейкинг"; "staking.stake.less.hint" = "Примечание: вы все еще можете отменить этот запрос на инициацию. По истечении периода задержки выхода (28 раундов в Moonbeam - это 7 дней), вы можете вернуться на панель управления стейкингом и выполнить запрос, после чего вы увидите свободные средства на своем свободном балансе."; "staking.stake.with.selected.title" = "Застейкать с выбранным"; -"staking.start.change.collators.custom.title" = "Stake with your collators"; -"staking.start.change.collators.suggested.subtitle" = "The Fearless algorithm has made a list of suggested collators based on the following criteria:"; -"staking.start.change.collators.suggested.title" = "Stake with collators suggested by the algorithm"; +"staking.start.change.collators.custom.title" = "Стейкинг с вашими коллаторами"; +"staking.start.change.collators.suggested.subtitle" = "Алгоритм Fearless составил список предлагаемых коллаторов, основываясь на следующих критериях:"; +"staking.start.change.collators.suggested.title" = "Стейкинг с коллаторами, предложенными алгоритмом"; "staking.start.title" = "Начать стейкинг"; "staking.stash.can.hint" = "С помощью стэш аккаунта можно застейкать больше и установить контроллер аккаунт"; "staking.stash.missing.message" = "Стэш аккаунт %@ недоступен для обновления настроек стейкинга"; @@ -993,7 +1033,7 @@ Euro cash"; "staking.story.validator.page.1" = "Валидатор обеспечивает работу ноды блокчейна 24/7 и обязан иметь необходимое количество стейка (общий стейк самого валидатора и его номинаторов), чтобы быть избранным сетью. Валидаторы должны поддерживать производительность и надежность своих нод, за что они получают вознаграждения. Валидатор — это полноценная работа, существуют профильные компании, которые специализируются на валидировании в блокчейн сетях."; "staking.story.validator.page.2" = "Любой может стать валидатором и запустить ноду блокчейна, однако это требует определённых технических знаний и ответственности. Сети Polkadot и Kusama запустили программу Thousand Validators Programme (Программа Тысячи Валидаторов), чтобы помочь начинающим. Более того, сеть всегда будет стремиться вознаграждать тех валидаторов, чей суммарный стейк меньше (но достаточен чтобы быть избранным в сети), для поддержки децентрализации."; "staking.story.validator.title" = "Кто такой валидатор?"; -"staking.suggested.collators.title" = "Suggested collators"; +"staking.suggested.collators.title" = "Предлагаемые коллаторы"; "staking.switch.account.to.stash" = "Для установки контроллер аккаунта смените аккаунт на стэш."; "staking.total.rewards_v1.9.0" = "Заработано"; "staking.unbond.payee.reset.message" = "Назначение вознаграждений будет изменено на ваш аккаунт, чтобы избежать остатка в стейке, поскольку стейкинг будет остановлен."; @@ -1037,8 +1077,8 @@ Euro cash"; "staking.your.validator.title" = "Ваш валидатор"; "staking.your.validators.changing.title" = "Ваши валидаторы поменяются в следующую эру"; "staking.your.validators.title" = "Ваши валидаторы"; -"stash.account.issue.action" = "Import stash account"; -"stash.account.issue.message" = "Stash account %s isn't available. Please, import the Stash account by following the necessary steps"; +"stash.account.issue.action" = "Импортируйте стэш аккаунт"; +"stash.account.issue.message" = "Стэш аккаунт %s не доступен. Пожалуйста импортируйте стэш аккаунт при помощи следующих шагов"; "state.common" = "Состояние"; "stories.bottom.close.button" = "Отличные новости!"; "stories.version2.slide1.subtitle" = "Теперь Fearless Wallet поддерживает больше сетей и токенов: Polkadot (DOT), Kusama (KSM), Moonriver (MOVR), Karura (KAR), Shiden (SDN), SORA (XOR), Bifrost (BNC), KILT (KILT) и другие..."; @@ -1068,14 +1108,18 @@ Euro cash"; "tabbar.crowdloan.title" = "Краудлоуны"; "tabbar.crowdloan.title_v1.9.0" = "Краудлоуны"; "tabbar.settings.title" = "Настройки"; -"terms.and.conditions.accept.and.continue" = "Accept & Continue"; -"terms.and.conditions.description" = "We want you to know exactly how SORA Card services work, who and why needs your details. Reviewing these policies will help you continue using the app with peace of mind."; -"terms.and.conditions.general.terms" = "General Terms of Use"; +"terms.and.conditions.accept.and.continue" = "Принять и продолжить"; +"terms.and.conditions.description" = "Мы хотим, чтобы вы точно знали, как работают услуги SORA Card, кому и зачем нужны ваши данные. Ознакомление с этими правилами поможет вам спокойно продолжать пользоваться приложением."; +"terms.and.conditions.general.terms" = "Общие условия использования"; "terms.and.conditions.privacy.policy" = "Политикой конфиденциальности"; -"terms.and.conditions.sora.community.alert.main" = "SORA community does not collect any of your personal data, "; -"terms.and.conditions.sora.community.alert.secondary" = "but to get the SORA Card and IBAN account you need to go through KYC process with a card issuer."; -"terms.and.conditions.title" = "Terms & Conditions"; -"tranaction.history.others.tab.title" = "Others"; +"terms.and.conditions.sora.community.alert.main" = "Сообщество SORA не собирает никакие ваши персональные данные, "; +"terms.and.conditions.sora.community.alert.secondary" = "Но чтобы получить карту SORA и счет IBAN, вам необходимо пройти процедуру KYC у эмитента карты."; +"terms.and.conditions.title" = "Условия и положения"; +"ton.connect.alert.description" = "Service address"; +"ton.connect.alert.subtitle" = "Be sure to check the service address before connecting the wallet"; +"ton.connect.alert.title" = "Review dApp info"; +"ton.tonviewer.action.title" = "View in Tonviewer"; +"tranaction.history.others.tab.title" = "Другие"; "transaction.detail.date" = "Дата"; "transaction.detail.status" = "Статус"; "transaction.details.copy.hash" = "Копировать хеш"; @@ -1083,9 +1127,9 @@ Euro cash"; "transaction.details.from" = "От"; "transaction.details.hash.title" = "Хеш транзакции"; "transaction.details.view.etherscan" = "Посмотреть в Etherscan"; -"transaction.details.view.oklink" = "View in OKX explorer"; +"transaction.details.view.oklink" = "Просмотреть в обозревателе OKX"; "transaction.details.view.polkascan" = "Посмотреть в Polkascan"; -"transaction.details.view.reefscan" = "View in Reefscan"; +"transaction.details.view.reefscan" = "Посмотреть в Reefscan"; "transaction.details.view.subscan" = "Просмотреть в Subscan"; "transaction.list.header" = "Все транзакции"; "transaction.status.completed" = "Успешно"; @@ -1093,26 +1137,26 @@ Euro cash"; "transaction.status.pending" = "В ожидании"; "transaction.successful" = "Транзакция успешна!"; "transfer.title" = "Перевод"; -"try.again" = "Try again"; +"try.again" = "Повторить"; "update.needed.text" = "Требуется обновление"; "username.setup.choose.title" = "Псевдоним кошелька"; "username.setup.hint" = "Данное имя будет отображаться только для вас и храниться только на вашем мобильном устройстве."; "username.setup.hint.2.0" = "Пример: Сбережения, инвестиции, краудлоуны, стейкинг. Данное имя будет отображаться только для вас и храниться только на вашем мобильном устройстве."; "username.setup.title" = "Создать аккаунт"; "username.setup.title.2.0" = "Создать новый кошелек"; -"validator.info.comission.title" = "Comission"; -"validator.info.min.stake.alert.text" = "Minimum stake among active nominators is %s. To get rewards you have to stake more."; -"validator.info.min.stake.among.active.nominators.text" = "Minimum stake among active nominators"; +"validator.info.comission.title" = "Комиссия"; +"validator.info.min.stake.alert.text" = "Минимальная ставка среди активных номинаторов составляет %s . Чтобы получить награды, вам нужно поставить больше."; +"validator.info.min.stake.among.active.nominators.text" = "Минимальная ставка среди активных номинаторов"; "validators.list.empty.message" = "Валидаторы не найдены"; -"verify.phone.number.title" = "Verify your phone number"; -"vesting.claim.disclaimer.text" = "Due to the unique vesting schedules of each parachain, our app is unable to display the quantity of locked tokens eligible for claiming. Please be advised that initiating a claim may be impractical if the prospective amount is marginal and comparable to the transaction fee involved. For comprehensive insights into your locked balances, consult the Subscan blockexplorer. We urge you to assess the information carefully and proceed at your own discretion."; -"vesting.claim.disclaimer.title" = "Important Notice Regarding Token Claims:"; -"vesting.locked.title" = "Vesting Locked"; +"verify.phone.number.title" = "Подтвердите свой номер телефона"; +"vesting.claim.disclaimer.text" = "Из-за уникальных графиков вестинга каждого парачейна, наше приложение не может отображать количество заблокированных токенов, доступных для получения. Обратите внимание, что получение токенов может быть нецелесообразным, если предполагаемая сумма незначительна и сопоставима с комиссией за транзакцию. Для полного обзора ваших заблокированных балансов обратитесь к обозревателю Subscan. Пожалуйста, тщательно изучите информацию и действуйте на своё усмотрение."; +"vesting.claim.disclaimer.title" = "Важное уведомление относительно получения токенов:"; +"vesting.locked.title" = "Заблокировано в вестинге"; "view.in" = "Посмотреть в %s"; "view.wallet" = "Посмотреть кошелек"; "wallet.account.locks.democracy" = "Демократия"; "wallet.account.locks.vesting" = "Вестинг"; -"wallet.all.assets.hidden" = "You have hidden all assets"; +"wallet.all.assets.hidden" = "Все активы скрыты"; "wallet.asset.buy" = "Купить"; "wallet.asset.buy.with" = "Купить %s с"; "wallet.asset.receive" = "Получить"; @@ -1127,11 +1171,11 @@ Euro cash"; "wallet.balance.redeemable" = "Можно забрать"; "wallet.balance.reserved" = "Зарезервировано"; "wallet.balance.unbonding_v1.9.0" = "В процессе вывода"; -"wallet.connect.connection.complete" = "Connection from %@ has been successfully completed"; -"wallet.connect.connection.dissconnected" = "Disconnection from %@ has been successfully completed"; -"wallet.connect.invalid.url.message" = "Our App only supports Wallet Connect SDK v2 and does not support the deprecated SDK v1. Please use the appropriate version for a successful connection."; -"wallet.connect.invalid.url.title" = "Warning: Wallet Connect SDK v1 Not Supported"; -"wallet.connect.sign.warning.message" = "Signing this message can have dangerous side effect. Only sign message from sites you fully trust with your entire account."; +"wallet.connect.connection.complete" = "Подключение от %@ успешно завершено"; +"wallet.connect.connection.dissconnected" = "Отключение от %@ успешно завершено"; +"wallet.connect.invalid.url.message" = "Наше приложение поддерживает только Wallet Connect SDK v2 и не поддерживает устаревший SDK v1. Пожалуйста, используйте соответствующую версию для успешного подключения."; +"wallet.connect.invalid.url.title" = "Предупреждение: Wallet Connect SDK v1 не поддерживается"; +"wallet.connect.sign.warning.message" = "Подписание этого сообщения может иметь опасный побочный эффект. Подписывайте сообщения только с сайтов, которым вы полностью доверяете всю свою учетную запись."; "wallet.contacts.empty.title" = "Здесь появятся ваши аккаунты и контакты, которым вы отправляли переводы"; "wallet.contacts.empty.title_v1.10" = "Здесь появятся ваши\ аккаунты и контакты, которым\ @@ -1149,7 +1193,7 @@ Euro cash"; "wallet.filters.transfers" = "Переводы"; "wallet.history.title_v1.9.0" = "История"; "wallet.manage.assets" = "Управление активами"; -"wallet.managment.select.wallet.title" = "Select your wallet"; +"wallet.managment.select.wallet.title" = "Выберите кошелек"; "wallet.options.delete" = "Удалить кошелек"; "wallet.options.details" = "Детали кошелька"; "wallet.options.export" = "Экспортировать кошелек"; @@ -1174,9 +1218,9 @@ Euro cash"; "wallet.send.balance.total.after.transfer" = "Общий после перевода"; "wallet.send.confirm.title" = "Подтвердить"; "wallet.send.dead.recipient.message" = "Ваш перевод не состоится, так как окончательная сумма на целевом счете будет меньше, чем минимальный баланс. Пожалуйста, попробуйте увеличить сумму."; -"wallet.send.dead.recipient.message.v2" = "Your transfer will fail since the final amount (%1$s) on the destination account will be less than the minimal balance (%2$s). Please increase the amount by %3$s"; +"wallet.send.dead.recipient.message.v2" = "Ваш перевод не будет выполнен, так как окончательная сумма ( %1$s ) на целевом счете будет меньше минимального баланса ( %2$s ). Пожалуйста, увеличьте сумму на %3$s"; "wallet.send.dead.recipient.title" = "Сумма слишком мала"; -"wallet.send.eth.dead.recipient.message" = "Insufficient Ethereum balance in the recipient's account prevents the completion of ERC20 token transfer. Please ensure the receiver has enough Ethereum to proceed with the transfer."; +"wallet.send.eth.dead.recipient.message" = "Недостаточный баланс Ethereum на счету получателя препятствует завершению перевода токенов ERC20. Пожалуйста, убедитесь, что у получателя достаточно Ethereum для продолжения перевода."; "wallet.send.existential.warning" = "Ваш перевод удалит аккаунт, так как общий баланс станет ниже минимального."; "wallet.send.fee.title" = "Комиссия"; "wallet.send.navigation.title" = "Перевести %s"; @@ -1193,18 +1237,18 @@ Euro cash"; "wallet.transaction.history.unsupported.message" = "История транзакций для этой сети еще не поддерживается"; "wallets.managment.add.new.wallet" = "Добавить новый кошелек"; "what.accounts.for.export" = "Какие аккаунты в кошельке вы хотите экспортировать?"; -"xcm.cross.chain.button.title" = "Cross Chain"; -"xcm.cross.chain.invalid.address.message" = "According to the address provided you're trying to make a transfer on the wrong network."; -"xcm.cross.chain.invalid.address.message" = "According to the address provided you're trying to make a transfer on the wrong network."; -"xcm.cross.chain.invalid.address.title" = "Is not network address"; -"xcm.destination.network.fee.title" = "Destination Network Fee"; -"xcm.destination.network.title" = "Destination network"; -"xcm.low.amaunt.assetSymbol.alert" = "Currently, there's a min. amount %@ for bridging to ensure the stability and security. We appreciate your understanding."; -"xcm.mywallets.button.title" = "My wallets"; -"xcm.origin.network.fee.title" = "Origin Network Fee"; -"xcm.origin.network.title" = "Origin network"; +"xcm.cross.chain.button.title" = "Cross-chain"; +"xcm.cross.chain.invalid.address.message" = "Судя по указанному адресу, вы пытаетесь осуществить перевод не в той сети."; +"xcm.cross.chain.invalid.address.message" = "Судя по указанному адресу, вы пытаетесь осуществить перевод не в той сети."; +"xcm.cross.chain.invalid.address.title" = "Не является адресом сети"; +"xcm.destination.network.fee.title" = "Комиссия сети назначения"; +"xcm.destination.network.title" = "Сеть назначения"; +"xcm.low.amaunt.assetSymbol.alert" = "В настоящее время существует мин. сумма %@ для моста, чтобы обеспечить стабильность и безопасность. Мы ценим ваше понимание."; +"xcm.mywallets.button.title" = "Мои счета"; +"xcm.origin.network.fee.title" = "Комиссия исходной сети"; +"xcm.origin.network.title" = "Исходная сеть"; "xcm.title" = "Cross-chain"; "your.validators.change.validators.title" = "Изменить валидаторов"; -"your.validators.stop.nominating.title" = "Stop nominating"; +"your.validators.stop.nominating.title" = "Прекратить номинирование"; "your.validators.validator.total.stake" = "Всего в стейкинге: %@"; "сurrencies.stub.text" = "Токены"; \ No newline at end of file diff --git a/fearless/tr.lproj/Localizable.strings b/fearless/tr.lproj/Localizable.strings index 9b74a74474..82078be787 100644 --- a/fearless/tr.lproj/Localizable.strings +++ b/fearless/tr.lproj/Localizable.strings @@ -64,19 +64,20 @@ "account.needed.message" = "Bu ağ için hesabınız yok, hesap oluşturabilir veya içe aktarabilirsiniz"; "account.needed.title" = "Hesap gerekli"; "account.option" = "Hesap seçeneği"; -"account.stats.avg.transaction.time.title" = "Avg. transaction time"; -"account.stats.description.text" = "Your Multichain Score is based on your onchain journey through 3 ecosystems: Ethereum, Polygon and Binance Smart Chain"; -"account.stats.error.message" = "Unable to retrieve account score information. Please try again later."; -"account.stats.hold.tokens.usd.title" = "Hold tokens USD"; -"account.stats.max.transaction.time.title" = "Max transaction time"; -"account.stats.min.transactions.time.title" = "Min transaction time"; -"account.stats.native.balance.usd.title" = "Native balance USD"; -"account.stats.rejected.transactions.title" = "Rejected transactions"; -"account.stats.title" = "Your score"; -"account.stats.total.transactions.title" = "Total transactions"; -"account.stats.updated.title" = "Updated"; -"account.stats.wallet.age.title" = "Wallet age"; -"account.stats.wallet.option.title" = "Show wallet score"; +"account.stats.avg.transaction.time.title" = "Ortalama işlem süresi"; +"account.stats.description.text" = "Çoklu Zincir Puanınız 3 ekosistemdeki zincir içi yolculuğunuza dayanmaktadır: Ethereum, Polygon ve Binance Smart Chain"; +"account.stats.error.message" = "Hesap puanı bilgisi alınamıyor. Lütfen daha sonra tekrar deneyin."; +"account.stats.hold.tokens.usd.title" = "USD jetonlarını tutun"; +"account.stats.max.transaction.time.title" = "Maksimum işlem süresi"; +"account.stats.min.transactions.time.title" = "Minimum işlem süresi"; +"account.stats.native.balance.usd.title" = "Yerel bakiye USD"; +"account.stats.rejected.transactions.title" = "Reddedilen işlemler"; +"account.stats.title" = "Puanınız"; +"account.stats.total.transactions.title" = "Toplam işlemler"; +"account.stats.unavailable.text" = "EVM uyumlu bir hesabınız yok. Puanı görmek istiyorsanız \"Cüzdanı içe aktar\" seçeneğini kullanarak ekleyin."; +"account.stats.updated.title" = "Güncellendi"; +"account.stats.wallet.age.title" = "Cüzdan yaşı"; +"account.stats.wallet.option.title" = "Cüzdan puanını göster"; "account.template" = "%s hesabı"; "account.unique.secret" = "Eşsiz gizli bilgili hesaplar"; "accounts.add.account" = "Hesap ekle"; @@ -174,11 +175,16 @@ Yolu olmadığını biliyorum"; "backup.wallet.replace.several.alert" = "Şu anda ana anahtar çiftinin değiştirilmesiyle eklenen birkaç zincir hesabınız var ve bu hesapta belirli bir anahtar çifti bulunuyor. Ancak mevcut cüzdan yedekleme (dışa aktarma) akışımızın birden fazla anahtar çiftinin depolanmasını desteklemediğini lütfen unutmayın. Sonuç olarak yalnızca ana anahtar çiftinizi kaydedebilirsiniz. \n \n Değiştirdiğiniz zincir hesabınızın güvenliğini sağlamak için mevcut akışa geçmeden önce öncelikle hesabınızı ayrı olarak yedeklemenizi öneririz. Değiştirdiğiniz zincir hesabınızı başarıyla yedekledikten sonra herhangi bir endişe yaşamadan mevcut akışa geçebilirsiniz."; "backup.wallet.seed" = "Ham Tohumu Göster"; "backup.wallet.title" = "Yedekleme cüzdanı"; -"balance.locks.blocked.row.title" = "Blocked"; +"balance.locks.blocked.row.title" = "Engellendi"; "balance.locks.governance.row.title" = "Yönetim"; "balance.locks.liquidity.pools.row.title" = "Likidite Havuzları"; "balance.locks.nomination.pools.row.title" = "Adaylık havuzları"; "balance.locks.screen.title" = "Kilitli ayrıntılar"; +"banner.addwallet.regular.button.title" = "Сreate or import"; +"banner.addwallet.regular.subtitle" = "Join the ecosystems with more than 90+ chains and fascinating features"; +"banner.addwallet.regular.title" = "EVM/Substrate accounts"; +"banner.addwallet.ton.button.title" = "Join now"; +"banner.addwallet.ton.title" = "Join the fastest growing ecosystem ever"; "banners.view.factory.backup.action.title" = "Şimdi yedekle"; "banners.view.factory.backup.subtitle" = "Fonlarınıza erişiminizi kaybetmekten kendinizi koruyun"; "banners.view.factory.backup.title" = "Cüzdan yedekleme"; @@ -198,11 +204,11 @@ Yolu olmadığını biliyorum"; "common.action.receive" = "Almak"; "common.action.send" = "Gönder"; "common.action.teleport" = "Işınlanma"; -"common.activation.required" = "Activation Required"; +"common.activation.required" = "Etkinleştirme Gerekli"; "common.add" = "Ekle"; "common.address" = "Adres"; "common.advanced" = "Gelişmiş"; -"common.and.others.placeholder" = "%s & others"; +"common.and.others.placeholder" = "%s ve diğerleri"; "common.applied" = "Uygulandı"; "common.apply" = "Uygulamak"; "common.approve" = "Onaylamak"; @@ -229,7 +235,7 @@ Yolu olmadığını biliyorum"; "common.confirmation.title" = "Emin misiniz?"; "common.confirmed" = "Onaylandı"; "common.connections" = "Bağlantılar"; -"common.contacts" = "Contacts"; +"common.contacts" = "Kişiler"; "common.continue" = "Devam etmek"; "common.copied" = "Panoya kopyalandı"; "common.copy" = "Kopyala"; @@ -271,11 +277,12 @@ Yolu olmadığını biliyorum"; "common.message" = "İleti"; "common.methods" = "Yöntemler"; "common.module" = "Modül"; -"common.more" = "More"; +"common.more" = "Daha Fazla"; "common.my.networks" = "Ağlarım"; "common.name" = "İsim"; "common.network" = "Ağ"; "common.network.fee" = "Ağ ücreti"; +"common.network.hash" = "%@ Hash"; "common.network.management" = "Ağ yönetimi"; "common.next" = "Sonraki"; "common.no" = "Hayır"; @@ -292,6 +299,7 @@ Yolu olmadığını biliyorum"; "common.privacy.policy" = "Gizlilik Politikası"; "common.proceed" = "İlerle"; "common.referral.code.title" = "Referans Kodu."; +"common.refund" = "Refund"; "common.reject" = "Reddetmek"; "common.rejected" = "Reddedilmiş"; "common.request" = "Rica etmek"; @@ -303,6 +311,8 @@ Yolu olmadığını biliyorum"; "common.search.results.number" = "Arama sonuçları: %d"; "common.search.start.title" = "Arama sonuçları burada görünecek."; "common.secret.derivation.path" = "Özel anahtar türetme yolu"; +"common.see.all" = "Tümünü gör"; +"common.see.all" = "See all"; "common.select" = "Seçmek"; "common.select" = "Seçme"; "common.select.all" = "Hepsini seç"; @@ -315,7 +325,7 @@ Yolu olmadığını biliyorum"; "common.sign" = "İmza"; "common.skip" = "Atla"; "common.staking" = "Stake etmek"; -"common.start" = "Start"; +"common.start" = "Başlat"; "common.terms.and.conditions" = "Şartlar ve koşullar"; "common.till.date" = "%s tarihine kadar"; "common.time.left" = "Kalan zaman"; @@ -340,6 +350,10 @@ Yolu olmadığını biliyorum"; "confirm.mnemonic.mismatch.error.title" = "Geçersiz anımsatıcı"; "confirmation.skip.action" = "İşlemi atla"; "connect.details" = "Ayrıntıları bağlayın"; +"connected.accounts.common" = "Connected Accounts"; +"connected.accounts.ethereum.title" = "EVM chain accounts"; +"connected.accounts.substrate.title" = "Substrate chain accounts"; +"connected.accounts.ton.title" = "TON chain accounts"; "connection.add.already.exists.error" = "Node önceden zaten eklenmiş. Lütfen başka bir Nod deneyin."; "connection.add.invalid.error" = "Node ile bağlantı kurulamıyor. Lütfen başka bir tane deneyin"; "connection.add.unsupported.error" = "Maalesef bu ağ desteklenmiyor. Lütfen şunlardan birini deneyin: %@"; @@ -356,7 +370,7 @@ Yolu olmadığını biliyorum"; "contacts.contact.address" = "İletişim Adresi"; "contacts.contact.name" = "Kişi adı"; "contacts.create.contact" = "Temas kurmak"; -"contacts.empty.message" = "No contacts found"; +"contacts.empty.message" = "Kişi bulunamadı"; "contacts.recent" = "Son"; "contacts.scan" = "QR kodunu tarayın"; "contacts.undefined" = "Tanımsız"; @@ -368,6 +382,14 @@ Yolu olmadığını biliyorum"; "create.new.account" = "Yeni bir hesap oluştur"; "create.new.connection" = "Yeni bağlantı oluştur"; "create.new.pincode" = "Yeni bir pin kodu oluştur"; +"cross.chain.tx.status.destination.fail.description" = "Transaction failed on the %@. Your funds in the current transaction will be returned to your wallet."; +"cross.chain.tx.status.destination.fail.title" = "Transaction refund"; +"cross.chain.tx.status.done.description" = "Transaction has been successfully completed."; +"cross.chain.tx.status.done.title" = "All done"; +"cross.chain.tx.status.pending.description" = "Transaction is in progress. Please wait while %@ asset cross the bridge from the %@ to the %@ network."; +"cross.chain.tx.status.pending.title" = "Transaction pending"; +"cross.chain.tx.status.source.fail.description" = "Transaction failed on the %@ network. Please, try again."; +"cross.chain.tx.status.source.fail.title" = "Transaction failed"; "crowdloan.active.section.format" = "Etkin ( %@ )"; "crowdloan.app.bonus.format" = "Fearless Cüzdan bonusu ( %@ )"; "crowdloan.astar.referral.code.invalid" = "Geçersiz yönlendirme adresi, yalnızca Polkadot adresleri kabul ediliyor, lütfen tekrar deneyin"; @@ -408,10 +430,22 @@ Yolu olmadığını biliyorum"; "custom.collators.text" = "İşbirliği yaptığınız kişilerin yetkin ve dürüst davranacaklarına güvenmelisiniz; Kararınızı yalnızca mevcut kârlılıklarına göre vermek, kârın azalmasına ve hatta fon kaybına yol açabilir."; "custom.collators.title" = "Bilinen derleyicilerden hisse alın"; "custom.validators.empty.message" = "Doğrulayıcı bulunamadı. \n Lütfen filtreleri değiştirmeyi deneyin"; +"dapp.category.connected.title" = "Connected"; +"dapp.category.defi.title" = "DeFi"; +"dapp.category.featured.title" = "Featured"; +"dapp.category.nft.title" = "NFT"; +"dapp.category.utilities.title" = "Utilities"; +"dapp.connected.title" = "Connected"; +"dapp.discover.title" = "Discover dApp"; +"dapp.no.connected.dapps.title" = "No connected dApps"; +"dapp.not.found.title" = "No dApps were found"; "default.account.shared.secret" = "Mevcut paylaşılmış gizli bilgili hesaplar."; "delete.custom.node.title" = "Özel düğüm silinsin mi?"; "ecdsa.selection.subtitle" = "(BTC / ETH uyumlu)"; "ecdsa.selection.title" = "ECDSA"; +"ecosystem.options.backup.title" = "Backup chain accounts"; +"ecosystem.options.details.title" = "Chain accounts"; +"ecosystem.options.title" = "Account options"; "ed25519.selection.subtitle" = "ed25519 (alternatif)"; "ed25519.selection.title" = "Edwards"; "empty.state.message" = "İsteğinize uygun hiçbir şey bulunamadı"; @@ -420,7 +454,7 @@ Yolu olmadığını biliyorum"; "error.invalid.address" = "Seçilen zincir için geçersiz adres"; "error.message.enter.the.name" = "İsmi girin…"; "error.message.enter.the.url.address" = "URL bağlantısını girin..."; -"error.scan.qr.disabled.asset" = "The asset you want to transfer is either unsupported or turned off. Go to Asset Management, activate the asset, and then scan the QR code again."; +"error.scan.qr.disabled.asset" = "Aktarmak istediğiniz varlık ya desteklenmiyor ya da kapalı. Varlık Yönetimi'ne gidin, varlığı etkinleştirin ve ardından QR kodunu tekrar tarayın."; "error.unsupported.asset" = "Şu anda Uygulamada desteklenmeyen bir varlığın aktarımını yapmaya çalışıyorsunuz. Lütfen başka bir varlık seçin veya başka bir QR kodu isteyin."; "ethereum.crypto.type" = "Ethereum anahtar çifti türü"; "ethereum.secret.derivation.path" = "Ethereum gizli türetme yolu"; @@ -490,10 +524,11 @@ Kaynak: %@"; "lp.apy.alert.title" = "Stratejik Bonus APY"; "lp.apy.title" = "Stratejik Bonus APY"; "lp.available.pools.title" = "Mevcut havuzlar"; -"lp.banner.action.details.title" = "Show details"; -"lp.banner.text" = "Invest your funds in Liquidity\npools and receive rewards"; +"lp.banner.action.details.title" = "Ayrıntıları göster"; +"lp.banner.text" = "Paranızı Likidite\havuzlarına yatırın ve ödüller kazanın"; "lp.confirm.liquidity.screen.title" = "Likiditeyi Doğrula"; "lp.confirm.liquidity.warning.text" = "Çıktı tahminidir. Fiyatın %0,5'ten fazla değişmesi durumunda işleminiz geri alınacaktır."; +"lp.liquidity.add.complete.text" = "Likidite havuzlarına arzınız başarıyla tamamlandı"; "lp.network.fee.alert.text" = "Ağ ücreti, SORA sisteminin büyümesini ve istikrarlı performansını sağlamak için kullanılır."; "lp.network.fee.alert.title" = "Şebeke ücreti"; "lp.pool.details.title" = "Havuz detayları"; @@ -501,12 +536,12 @@ Kaynak: %@"; "lp.pool.remove.warning.title" = "NOT"; "lp.remove.button.title" = "Likiditeyi Kaldır"; "lp.remove.liquidity.screen.title" = "Likiditeyi Kaldır"; -"lp.reward.token.text" = "%@ Kazanın"; +"lp.reward.token.text" = "%s Kazanın"; "lp.reward.token.title" = "Ödül Ödemesi"; "lp.slippage.title" = "Kayma"; "lp.supply.button.title" = "Arz Likiditesinin"; "lp.supply.liquidity.screen.title" = "Arz Likiditesinin"; -"lp.token.pooled.text" = "%@ Havuzunuz"; +"lp.token.pooled.text" = "%s Havuzunuz"; "lp.user.pools.title" = "Kullanıcı havuzları"; "manage.assets.account.missing.text" = "Bir hesap ekle"; "manage.assets.search.hint" = "Tokene veya ağa göre ara"; @@ -528,7 +563,7 @@ Kaynak: %@"; "network.info.address" = "Node adresi"; "network.info.name" = "Node adı"; "network.info.title" = "Node Bilgisi"; -"network.issue.main" = "Connection Error: Unable to connect to the network. Please try again."; +"network.issue.main" = "Bağlantı Hatası: Ağa bağlanılamıyor. Lütfen tekrar deneyin."; "network.issue.network.unavailible" = "Ağ kullanılamıyor"; "network.issue.node.unavailable" = "Düğüm kullanılamıyor"; "network.issue.notofication" = "Bildiri"; @@ -549,10 +584,10 @@ Kaynak: %@"; "nft.creator.title" = "Yaratıcı"; "nft.list.empty.message" = "Henüz NFT yok\ burada görmek için NFT'leri satın alın veya bastırın"; -"nft.load.error" = "Failed to load NFTs"; +"nft.load.error" = "NFT'ler yüklenemedi"; "nft.owner.title" = "Sahip olunan."; "nft.share.address" = "Alacağım genel adresim:%s"; -"nft.spam.warning" = "Beware of a scam/spam NFT collection – verify authenticity before engaging. Stay safe!"; +"nft.spam.warning" = "Dolandırıcılık/spam NFT koleksiyonuna karşı dikkatli olun; etkileşime geçmeden önce orijinalliğini doğrulayın. Güvende kalın!"; "nft.stub.text" = "NFT'ler yakında geliyor"; "nft.stub.title" = "Sumimasen!"; "nft.tokenid.title" = "Jeton kimliği"; @@ -566,6 +601,10 @@ burada görmek için NFT'leri satın alın veya bastırın"; "no.email.bound.error.message" = "Lütfen e-posta uygulamasının cihazınıza kurulu olduğundan emin olun"; "node" = "Düğüm"; "node.selection.delete.node.title" = "Özel düğüm silinsin mi?"; +"onboarding.banner.regular.ecosystem.button.title" = "Join EVM or Substrate"; +"onboarding.banner.regular.ecosystem.title" = "Create or import Substrate or EVM accounts"; +"onboarding.banner.ton.ecosystem.button.title" = "Join TON"; +"onboarding.banner.ton.ecosystem.title" = "Connect to the fastest growing ecosystem ever"; "onboarding.create.account" = "Hesap oluştur"; "onboarding.create.wallet" = "Cüzdan oluştur"; "onboarding.preinstalled.wallet.button.text" = "Önceden yüklenmiş bir cüzdan edinin."; @@ -705,7 +744,7 @@ burada görmek için NFT'leri satın alın veya bastırın"; "pools.limit.has.reached.error.message" = "Bu ağdaki havuz sınırına ulaşıldı"; "pools.limit.has.reached.error.title" = "Daha fazla havuz oluşturamazsınız"; "profile.about.title" = "Hakkında"; -"profile.account.score.title" = "Nomis multichain score"; +"profile.account.score.title" = "Nomis çoklu zincir skoru"; "profile.accounts.title" = "Hesaplar"; "profile.language.title" = "Dil"; "profile.logout.description" = "Bu işlem ,cihazdaki tüm hesapların silinmesine neden olacak. Devam etmeden önce anahtar kelimelerinizi yedeklediğinizden emin olun."; @@ -733,11 +772,12 @@ burada görmek için NFT'leri satın alın veya bastırın"; "scam.additional.stub" = "Ek olarak:"; "scam.description.donation.stub" = "Bu adres şüpheli olarak işaretlendi. göndermemenizi şiddetle tavsiye ederiz.%sbu hesaba."; "scam.description.exchange.stub" = "Bu adres bir borsa olarak işaretlenmiştir, para yatırma ve çekme adresleri farklı olabileceğinden dikkatli olun."; -"scam.description.lowscore.text" = "The address you are about to transfer to has low onchain activity, which may indicate a potential scammer or sybil attacker"; +"scam.description.lowscore.text" = "Aktarmak üzere olduğunuz adresin zincir içi etkinliği düşük, bu da potansiyel bir dolandırıcı veya sybil saldırganının işareti olabilir"; "scam.description.sanctions.stub" = "Bu adres, yaptırım altındaki bir ülkeyle bağlantılı bir kuruluş nedeniyle işaretlendi. göndermemenizi şiddetle tavsiye ederiz.%sbu hesaba."; "scam.description.scam.stub" = "Bu adres dolandırıcılık kanıtı nedeniyle işaretlendi. göndermemenizi şiddetle tavsiye ederiz.%sbu hesaba."; -"scam.info.nomis.name" = "Nomis multi-chain score"; -"scam.info.nomis.subtype.text" = "Proceed with caution"; +"scam.info.nomis.name" = "Nomis çoklu zincir skoru"; +"scam.info.nomis.reason.text" = "Düşük ağ etkinliği"; +"scam.info.nomis.subtype.text" = "Dikkatli ilerleyin"; "scam.name.stub" = "İsim:"; "scam.reason.stub" = "Sebep:"; "scam.warning.alert.subtitle" = "göndermemenizi şiddetle tavsiye ederiz.%sbu hesaba."; @@ -756,7 +796,7 @@ burada görmek için NFT'leri satın alın veya bastırın"; "select.save.type" = "Kayıt türü seçin"; "select.suggested.validators.warning" = "Algoritmik doğrulayıcı önerileri finansal danışmanlık veya tavsiye teşkil etmez. Staking yüksek riskli bir faaliyettir ve algoritmik doğrulayıcı önerileri bu riski mutlaka azaltmaz. Algoritmanın önerdiği bir doğrulayıcı yine de aday havuzundan çıkabilir. Algoritma tarafından önerilen bir doğrulayıcı, önerildikten ve/veya seçildikten sonra herhangi bir zamanda parametrelerini (örn. komisyon oranları vb.) değiştirebilir. Bu veya başka nedenlerden dolayı ödüllerinizi kaybedebilirsiniz. Durum tespiti yaptıktan ve ilgili riskleri dikkatlice değerlendirdikten sonra, yalnızca kendi takdirinize bağlı olarak tokenları stake edin ve doğrulayıcı önerilerini kullanın."; "select.validators.disclaimer" = "SORUMLULUK REDDİ: Algoritmanın validatör tavsiyeleri finansal danışmanlık veya tavsiye teşkil etmez. Stake yapmak yüksek riskli bir faaliyettir ve algoritmanın validatör tavsiyeleri bu riski azaltmaz. Algoritma tarafından önerilen bir validatör yine de durabilir. Algoritma tarafından önerilen bir validatör, önerildikten ve/veya seçildikten sonra herhangi bir zamanda parametrelerini (örneğin komisyon oranlarını vb.) değiştirebilir. Bu veya başka nedenlerle tokenlerinizi veya ödüllerinizi kaybedebilirsiniz. Durum tespiti yapıldıktan sonra ve ilgili riskleri dikkatlice değerlendirdikten sonra, yalnızca kendi takdirinize bağlı olarak tokenlerinizi stake edin ve validatör tavsiyelerini kullanın."; -"send.all.title" = "Send all tokens and reap the account"; +"send.all.title" = "Tüm tokenleri gönderin ve hesabı alın"; "send.confirm.amount.title" = "gönderiliyor\n%@"; "send.fund.title" = "Fon gönder"; "settings.add.wallet" = "Cüzdan ekle"; @@ -890,7 +930,7 @@ hiç ödül alınmadı"; "staking.pool.info.title" = "Havuz Bilgisi"; "staking.pool.management.select.validators.subtitle" = "Devam etmek için \n doğrulayıcıları seçmelisiniz"; "staking.pool.management.select.validators.subtitle" = "Devam etmek için \n doğrulayıcıları seçmelisiniz"; -"staking.pool.management.select.validators.title" = "Select pool validators"; +"staking.pool.management.select.validators.title" = "Havuz doğrulayıcılarını seçin"; "staking.pool.management.select.validators.title" = "Havuz doğrulayıcılarını seçin"; "staking.pool.rewards.delay.text" = "İstediğiniz zaman bahis yapın. Sonrasında faiz kazanmaya başlayacaksınız%s"; "staking.pool.select.validators.manual" = "Manuel olarak seç"; @@ -1073,6 +1113,10 @@ Anahtarınızın yedeğini almayı ve onu güvenli ve gizli bir yerde (ö.o., bi "terms.and.conditions.sora.community.alert.main" = "SORA topluluğu hiçbir kişisel verinizi toplamaz,"; "terms.and.conditions.sora.community.alert.secondary" = "ancak SORA Kartını ve IBAN hesabını almak için kartı veren kuruluşla KYC sürecinden geçmeniz gerekir."; "terms.and.conditions.title" = "Şartlar ve koşullar"; +"ton.connect.alert.description" = "Service address"; +"ton.connect.alert.subtitle" = "Be sure to check the service address before connecting the wallet"; +"ton.connect.alert.title" = "Review dApp info"; +"ton.tonviewer.action.title" = "View in Tonviewer"; "tranaction.history.others.tab.title" = "Diğerleri"; "transaction.detail.date" = "Tarih"; "transaction.detail.status" = "Durum"; @@ -1081,7 +1125,7 @@ Anahtarınızın yedeğini almayı ve onu güvenli ve gizli bir yerde (ö.o., bi "transaction.details.from" = "Gönderen"; "transaction.details.hash.title" = "Harici Hash"; "transaction.details.view.etherscan" = "Etherscan'da görüntüle"; -"transaction.details.view.oklink" = "View in OKX explorer"; +"transaction.details.view.oklink" = "OKX Explorer'da görüntüle"; "transaction.details.view.polkascan" = "Polkascan'de görüntüle"; "transaction.details.view.reefscan" = "Reefscan'da görüntüle"; "transaction.details.view.subscan" = "Subscan'da Görüntüle"; @@ -1099,10 +1143,10 @@ Anahtarınızın yedeğini almayı ve onu güvenli ve gizli bir yerde (ö.o., bi "username.setup.title" = "Hesap oluştur"; "username.setup.title.2.0" = "Yeni bir cüzdan oluştur"; "validator.info.comission.title" = "Komisyon"; -"validator.info.min.stake.alert.text" = "Minimum stake among active nominators is %s. To get rewards you have to stake more."; -"validator.info.min.stake.among.active.nominators.text" = "Minimum stake among active nominators"; +"validator.info.min.stake.alert.text" = "Aktif aday göstericiler arasında minimum bahis %s. Ödül almak için daha fazla bahis yapmanız gerekir."; +"validator.info.min.stake.among.active.nominators.text" = "Aktif aday gösterenler arasında minimum hisse"; "validators.list.empty.message" = "Doğrulayıcı bulunamadı"; -"verify.phone.number.title" = "Verify your phone number"; +"verify.phone.number.title" = "Telefon numaranızı doğrulayın"; "vesting.claim.disclaimer.text" = "Her parachain'in benzersiz hak kazanma programları nedeniyle, uygulamamız talep edilmeye uygun kilitli tokenlerin miktarını görüntüleyemiyor. Olası tutarın marjinal olması ve söz konusu işlem ücretiyle karşılaştırılabilir olması durumunda, hak talebinde bulunmanın pratik olmayabileceğini lütfen unutmayın. Kilitli bakiyelerinize ilişkin kapsamlı bilgiler için Subscan blok araştırmacısına başvurun. Bilgileri dikkatlice değerlendirmenizi ve kendi takdirinize göre ilerlemenizi öneririz."; "vesting.claim.disclaimer.title" = "Token Taleplerine İlişkin Önemli Uyarı:"; "vesting.locked.title" = "Vesting Kilitli"; @@ -1170,7 +1214,7 @@ ait olduğundan emin olun."; "wallet.send.balance.total.after.transfer" = "Transfer sonrası toplamı"; "wallet.send.confirm.title" = "Transferi onaylayın"; "wallet.send.dead.recipient.message" = "Hedef hesaptaki son tutar, yaratılış bakiyesinden daha az olacağından dolayı transferiniz başarısız olacak. Lütfen miktarı arttırın."; -"wallet.send.dead.recipient.message.v2" = "Your transfer will fail since the final amount (%1$s) on the destination account will be less than the minimal balance (%2$s). Please increase the amount by %3$s"; +"wallet.send.dead.recipient.message.v2" = "Hedef hesaptaki son tutar (%1$s) minimum bakiyeden (%2$s) az olacağından transferiniz başarısız olacak. Lütfen tutarı %3$s artırın"; "wallet.send.dead.recipient.title" = "Miktar çok düşük"; "wallet.send.eth.dead.recipient.message" = "Alıcının hesabındaki yetersiz Ethereum bakiyesi, ERC20 token transferinin tamamlanmasını engeller. Lütfen alıcının aktarıma devam etmek için yeterli Ethereum'a sahip olduğundan emin olun."; "wallet.send.existential.warning" = "Transferiniz, toplam bakiyeyi yaratılış bakiyesinden daha düşük yapacağı için hesabı blockstore'dan kaldıracaktır"; @@ -1197,7 +1241,7 @@ ait olduğundan emin olun."; "xcm.cross.chain.invalid.address.title" = "Ağ adresi değil"; "xcm.destination.network.fee.title" = "Hedef Ağ ücreti"; "xcm.destination.network.title" = "Hedef ağ"; -"xcm.low.amaunt.assetSymbol.alert" = "Currently, there's a min. amount %@ for bridging to ensure the stability and security. We appreciate your understanding."; +"xcm.low.amaunt.assetSymbol.alert" = "Şu anda, istikrar ve güvenliği sağlamak için köprüleme için minimum bir miktar %@ bulunmaktadır. Anlayışınız için teşekkür ederiz."; "xcm.mywallets.button.title" = "Cüzdanlarım"; "xcm.origin.network.fee.title" = "Menşe ağ ücreti"; "xcm.origin.network.title" = "Köken ağı"; diff --git a/fearless/vi.lproj/Localizable.strings b/fearless/vi.lproj/Localizable.strings index 6477046c60..dd1d8d3007 100644 --- a/fearless/vi.lproj/Localizable.strings +++ b/fearless/vi.lproj/Localizable.strings @@ -1,7 +1,7 @@ "NSCameraUsageDescription" = "Máy ảnh được sử dụng để chụp mã QR"; "NSFaceIDUsageDescription" = "Fearless sử dụng Face ID để hạn chế người dùng trái phép truy cập vào ứng dụng. Face ID được sử dụng để xác thực truy cập ứng dụng"; "NSPhotoLibraryAddUsageDescription" = "Lưu yêu cầu chuyển dưới dạng mã QR"; -"NSPhotoLibraryUsageDescription" = "Tải ảnh từ thư viện"; +"NSPhotoLibraryUsageDescription" = "Cần quyền truy cập vào thư viện để chọn hình ảnh mã QR hiện có"; "about.announcement" = "Nhận thông báo"; "about.ask.for.support" = "Yêu cầu hỗ trợ"; "about.contact.email" = "Email liên hệ"; @@ -64,19 +64,20 @@ "account.needed.message" = "Bạn không có tài khoản cho mạng (network) này, bạn có thể tạo hoặc nhập tài khoản."; "account.needed.title" = "Tài khoản cần thiết"; "account.option" = "Tùy chọn tài khoản"; -"account.stats.avg.transaction.time.title" = "Avg. transaction time"; -"account.stats.description.text" = "Your Multichain Score is based on your onchain journey through 3 ecosystems: Ethereum, Polygon and Binance Smart Chain"; -"account.stats.error.message" = "Unable to retrieve account score information. Please try again later."; -"account.stats.hold.tokens.usd.title" = "Hold tokens USD"; -"account.stats.max.transaction.time.title" = "Max transaction time"; -"account.stats.min.transactions.time.title" = "Min transaction time"; -"account.stats.native.balance.usd.title" = "Native balance USD"; -"account.stats.rejected.transactions.title" = "Rejected transactions"; -"account.stats.title" = "Your score"; -"account.stats.total.transactions.title" = "Total transactions"; -"account.stats.updated.title" = "Updated"; -"account.stats.wallet.age.title" = "Wallet age"; -"account.stats.wallet.option.title" = "Show wallet score"; +"account.stats.avg.transaction.time.title" = "Trung bình thời gian giao dịch"; +"account.stats.description.text" = "Điểm Multichain của bạn dựa trên hành trình onchain của bạn thông qua 3 hệ sinh thái: Ethereum, Polygon và Binance Smart Chain"; +"account.stats.error.message" = "Không thể truy xuất thông tin điểm tài khoản. Vui lòng thử lại sau."; +"account.stats.hold.tokens.usd.title" = "Token USD nắm giữ"; +"account.stats.max.transaction.time.title" = "Thời gian giao dịch tối đa"; +"account.stats.min.transactions.time.title" = "Thời gian giao dịch tối thiểu"; +"account.stats.native.balance.usd.title" = "Số dư gốc USD"; +"account.stats.rejected.transactions.title" = "Giao dịch bị từ chối"; +"account.stats.title" = "Số điểm của bạn"; +"account.stats.total.transactions.title" = "Tổng số giao dịch"; +"account.stats.unavailable.text" = "Bạn không có tài khoản tương thích EVM. Nếu bạn muốn xem điểm - hãy thêm điểm thông qua tùy chọn \"Nhập ví\"."; +"account.stats.updated.title" = "Đã cập nhật"; +"account.stats.wallet.age.title" = "Tuổi ví"; +"account.stats.wallet.option.title" = "Hiển thị điểm ví"; "account.template" = "tài khoản %s"; "account.unique.secret" = "Tài khoản có khóa bí mật duy nhất"; "accounts.add.account" = "Thêm tài khoản"; @@ -138,7 +139,7 @@ "backup.mnemonic.description" = "Hãy nhớ ghi lại các từ của bạn theo thứ tự như chúng xuất hiện bên dưới. Sử dụng một cách phi kỹ thuật số để sao lưu."; "backup.mnemonic.title" = "Viết ra cụm từ ghi nhớ của bạn"; "backup.not.backed.up.confirm" = "Tôi sẽ mạo hiểm"; -"backup.not.backed.up.message" = "Nếu thiết bị của bạn bị mất hoặc bị đánh cắp, bạn sẽ mất ví và tất cả số tiền của mình mãi mãi"; +"backup.not.backed.up.message" = "Nếu thiết bị của bạn bị mất hoặc bị đánh cắp, bạn sẽ mất ví và toàn bộ tiền của mình mãi mãi"; "backup.not.backed.up.title" = "Chưa sao lưu!"; "backup.password.description" = "Nhập mật khẩu dự phòng cho ví đã chọn để nhập"; "backup.password.password.field.title" = "Nhập mật khẩu"; @@ -174,6 +175,11 @@ "balance.locks.liquidity.pools.row.title" = "Pool thanh khoản"; "balance.locks.nomination.pools.row.title" = "Nhóm Nomination"; "balance.locks.screen.title" = "Chi tiết đã khóa"; +"banner.addwallet.regular.button.title" = "Сreate or import"; +"banner.addwallet.regular.subtitle" = "Join the ecosystems with more than 90+ chains and fascinating features"; +"banner.addwallet.regular.title" = "EVM/Substrate accounts"; +"banner.addwallet.ton.button.title" = "Join now"; +"banner.addwallet.ton.title" = "Join the fastest growing ecosystem ever"; "banners.view.factory.backup.action.title" = "Sao lưu ngay"; "banners.view.factory.backup.subtitle" = "Nếu bạn làm mất thiết bị của mình, bạn\ sẽ mất tiền của bạn mãi mãi"; @@ -273,6 +279,7 @@ tiền Euro"; "common.name" = "Tên"; "common.network" = "Mạng"; "common.network.fee" = "Phí mạng"; +"common.network.hash" = "%@ Hash"; "common.network.management" = "Quản lý mạng"; "common.next" = "Kế tiếp"; "common.no" = "Không"; @@ -289,6 +296,7 @@ tiền Euro"; "common.privacy.policy" = "Chính sách bảo mật"; "common.proceed" = "Tiến hành"; "common.referral.code.title" = "Mã giới thiệu"; +"common.refund" = "Refund"; "common.reject" = "Từ chối"; "common.rejected" = "Bị từ chối"; "common.request" = "Yêu cầu"; @@ -300,6 +308,8 @@ tiền Euro"; "common.search.results.number" = "Kết quả tìm kiếm: %d"; "common.search.start.title" = "Kết quả tìm kiếm sẽ xuất hiện tại đây"; "common.secret.derivation.path" = "Đường dẫn khôi phục ví bí mật (derivation path)"; +"common.see.all" = "Xem tất cả"; +"common.see.all" = "See all"; "common.select" = "Chọn"; "common.select" = "Chọn"; "common.select.all" = "Chọn tất cả"; @@ -337,6 +347,10 @@ tiền Euro"; "confirm.mnemonic.mismatch.error.title" = "Cụm từ ghi nhớ (Mnemonic) không hợp lệ"; "confirmation.skip.action" = "Bỏ qua quá trình"; "connect.details" = "Chi tiết kết nối"; +"connected.accounts.common" = "Connected Accounts"; +"connected.accounts.ethereum.title" = "EVM chain accounts"; +"connected.accounts.substrate.title" = "Substrate chain accounts"; +"connected.accounts.ton.title" = "TON chain accounts"; "connection.add.already.exists.error" = "Node này đã được thêm rồi. Vui lòng thử một node khác."; "connection.add.invalid.error" = "Không thể thiết lập kết nối với node. Vui lòng thử một cái khác."; "connection.add.unsupported.error" = "Rất tiếc, mạng (network) không được hỗ trợ. Vui lòng thử một trong các cách sau: %@."; @@ -365,6 +379,14 @@ tiền Euro"; "create.new.account" = "Tạo tài khoản mới"; "create.new.connection" = "Tạo kết nối mới"; "create.new.pincode" = "Tạo mã pin mới"; +"cross.chain.tx.status.destination.fail.description" = "Transaction failed on the %@. Your funds in the current transaction will be returned to your wallet."; +"cross.chain.tx.status.destination.fail.title" = "Transaction refund"; +"cross.chain.tx.status.done.description" = "Transaction has been successfully completed."; +"cross.chain.tx.status.done.title" = "All done"; +"cross.chain.tx.status.pending.description" = "Transaction is in progress. Please wait while %@ asset cross the bridge from the %@ to the %@ network."; +"cross.chain.tx.status.pending.title" = "Transaction pending"; +"cross.chain.tx.status.source.fail.description" = "Transaction failed on the %@ network. Please, try again."; +"cross.chain.tx.status.source.fail.title" = "Transaction failed"; "crowdloan.active.section.format" = "Hoạt động (%@)"; "crowdloan.app.bonus.format" = "Phần thưởng Fearless Wallet (%@)"; "crowdloan.astar.referral.code.invalid" = "Địa chỉ giới thiệu không hợp lệ, chỉ chấp nhận địa chỉ Polkadot, vui lòng thử lại"; @@ -405,10 +427,22 @@ tiền Euro"; "custom.collators.text" = "Bạn nên tin tưởng những collator của bạn sẽ hành động một cách thành thạo và trung thực; Việc dựa trên quyết định của bạn hoàn toàn dựa trên lợi nhuận hiện tại của họ có thể dẫn đến giảm lợi nhuận hoặc thậm chí mất tiền."; "custom.collators.title" = "Cổ phần với những collators đã biết"; "custom.validators.empty.message" = "Không tìm thấy validator nào.\nVui lòng thử thay đổi bộ lọc"; +"dapp.category.connected.title" = "Connected"; +"dapp.category.defi.title" = "DeFi"; +"dapp.category.featured.title" = "Featured"; +"dapp.category.nft.title" = "NFT"; +"dapp.category.utilities.title" = "Utilities"; +"dapp.connected.title" = "Connected"; +"dapp.discover.title" = "Discover dApp"; +"dapp.no.connected.dapps.title" = "No connected dApps"; +"dapp.not.found.title" = "No dApps were found"; "default.account.shared.secret" = "Tài khoản với khóa bí mật chia sẻ"; "delete.custom.node.title" = "Xóa node tùy chỉnh?"; "ecdsa.selection.subtitle" = "(Tương thích BTC/ETH)"; "ecdsa.selection.title" = "ECDSA"; +"ecosystem.options.backup.title" = "Backup chain accounts"; +"ecosystem.options.details.title" = "Chain accounts"; +"ecosystem.options.title" = "Account options"; "ed25519.selection.subtitle" = "ed25519 (thay thế)"; "ed25519.selection.title" = "Edwards"; "empty.state.message" = "Không tìm thấy gì cho yêu cầu của bạn"; @@ -491,6 +525,7 @@ Seed: %@"; "lp.banner.text" = "Đầu tư tiền của bạn vào Pool\nthanh khoản và nhận phần thưởng"; "lp.confirm.liquidity.screen.title" = "Xác nhận thanh khoản"; "lp.confirm.liquidity.warning.text" = "Kết quả được ước tính. Nếu giá thay đổi hơn 0,5% thì giao dịch của bạn sẽ hoàn trả."; +"lp.liquidity.add.complete.text" = "Bạn đã cung cấp thanh khoản thành công"; "lp.network.fee.alert.text" = "Phí mạng được sử dụng để đảm bảo sự tăng trưởng và hiệu suất ổn định của hệ thống SORA."; "lp.network.fee.alert.title" = "Phí mạng"; "lp.pool.details.title" = "Chi tiết Pool"; @@ -498,12 +533,12 @@ Seed: %@"; "lp.pool.remove.warning.title" = "GHI CHÚ"; "lp.remove.button.title" = "Rút Thanh Khoản"; "lp.remove.liquidity.screen.title" = "Rút Thanh Khoản"; -"lp.reward.token.text" = "Kiếm được % @"; +"lp.reward.token.text" = "Kiếm được %s"; "lp.reward.token.title" = "Thanh toán phần thưởng"; "lp.slippage.title" = "Trượt giá"; "lp.supply.button.title" = "Nguồnn cung thanh khoản"; "lp.supply.liquidity.screen.title" = "Nguồnn cung thanh khoản"; -"lp.token.pooled.text" = "%@ của bạn đã đóng góp"; +"lp.token.pooled.text" = "%s của bạn đã đóng góp"; "lp.user.pools.title" = "Pool người dùng"; "manage.assets.account.missing.text" = "Thêm một tài khoản..."; "manage.assets.search.hint" = "Tìm kiếm theo tài sản"; @@ -550,7 +585,7 @@ Xin lưu ý rằng việc ký giao dịch này sẽ phải chịu phí giao dị "nft.collection.title" = "Bộ sưu tập"; "nft.creator.title" = "Người sáng tạo"; "nft.list.empty.message" = "Chưa có bất kỳ NFT nào. Mua hoặc đúc NFT để xem chúng tại đây."; -"nft.load.error" = "Failed to load NFTs"; +"nft.load.error" = "Không thể tải NFT"; "nft.owner.title" = "Sở hữu"; "nft.share.address" = "Địa chỉ công khai của tôi để nhận: %s"; "nft.spam.warning" = "Cảnh giác với hoạt động thu thập NFT lừa đảo/spam – hãy xác minh tính xác thực trước khi tham gia. Giữ an toàn!"; @@ -567,6 +602,10 @@ Xin lưu ý rằng việc ký giao dịch này sẽ phải chịu phí giao dị "no.email.bound.error.message" = "Vui lòng kiểm tra ứng dụng mail đã được cài đặt trên thiết bị."; "node" = "Node"; "node.selection.delete.node.title" = "Xóa node tùy chỉnh?"; +"onboarding.banner.regular.ecosystem.button.title" = "Join EVM or Substrate"; +"onboarding.banner.regular.ecosystem.title" = "Create or import Substrate or EVM accounts"; +"onboarding.banner.ton.ecosystem.button.title" = "Join TON"; +"onboarding.banner.ton.ecosystem.title" = "Connect to the fastest growing ecosystem ever"; "onboarding.create.account" = "Tạo tài khoản"; "onboarding.create.wallet" = "Tạo ví"; "onboarding.preinstalled.wallet.button.text" = "Nhận ví được cài đặt sẵn"; @@ -707,7 +746,7 @@ Xin lưu ý rằng việc ký giao dịch này sẽ phải chịu phí giao dị "pools.limit.has.reached.error.message" = "Đã đạt đến giới hạn pool trong mạng này"; "pools.limit.has.reached.error.title" = "Bạn không thể tạo thêm pool"; "profile.about.title" = "Giới thiệu"; -"profile.account.score.title" = "Nomis multichain score"; +"profile.account.score.title" = "Điểm nomis đa chuỗi"; "profile.accounts.title" = "Tài khoản"; "profile.language.title" = "Ngôn ngữ"; "profile.logout.description" = "Hành động này sẽ dẫn đến việc xóa tất cả các tài khoản khỏi thiết bị này. Hãy đảm bảo rằng bạn đã sao lưu cụm mật khẩu của mình trước khi tiếp tục."; @@ -735,11 +774,12 @@ Xin lưu ý rằng việc ký giao dịch này sẽ phải chịu phí giao dị "scam.additional.stub" = "Bổ sung:"; "scam.description.donation.stub" = "Địa chỉ này đã được gắn cờ là đáng ngờ. Chúng tôi thực sự khuyên bạn không nên gửi %s tới tài khoản này."; "scam.description.exchange.stub" = "Địa chỉ này được đánh dấu là một sàn giao dịch, hãy cẩn thận, địa chỉ gửi tiền và địa chỉ rút tiền có thể khác nhau."; -"scam.description.lowscore.text" = "The address you are about to transfer to has low onchain activity, which may indicate a potential scammer or sybil attacker"; +"scam.description.lowscore.text" = "Địa chỉ bạn sắp chuyển đến có hoạt động onchain thấp, điều này có thể chỉ ra kẻ lừa đảo hoặc kẻ tấn công sybil tiềm ẩn"; "scam.description.sanctions.stub" = "Địa chỉ này đã bị gắn cờ do có liên quan đến một quốc gia đang bị trừng phạt. Chúng tôi thực sự khuyên bạn không nên gửi %s vào tài khoản này."; "scam.description.scam.stub" = "Địa chỉ này đã bị gắn cờ do có bằng chứng lừa đảo. Chúng tôi thực sự khuyên bạn không nên gửi {asset} tới tài khoản này."; -"scam.info.nomis.name" = "Nomis multi-chain score"; -"scam.info.nomis.subtype.text" = "Proceed with caution"; +"scam.info.nomis.name" = "Điểm nomis đa chuỗi"; +"scam.info.nomis.reason.text" = "Mạng ít hoạt động"; +"scam.info.nomis.subtype.text" = "Tiến hành thận trọng"; "scam.name.stub" = "Tên:"; "scam.reason.stub" = "Lý do:"; "scam.warning.alert.subtitle" = "Chúng tôi thực sự khuyên bạn không nên gửi %s vào tài khoản này."; @@ -1077,6 +1117,10 @@ vào tài khoản của bạn để phân biệt với lượng stake còn lại "terms.and.conditions.sora.community.alert.main" = "Cộng đồng SORA không thu thập bất kỳ dữ liệu cá nhân nào của bạn,"; "terms.and.conditions.sora.community.alert.secondary" = "nhưng để có được Thẻ SORA và tài khoản IBAN, bạn cần thực hiện quy trình KYC với nhà phát hành thẻ."; "terms.and.conditions.title" = "Điều khoản & Điều kiện"; +"ton.connect.alert.description" = "Service address"; +"ton.connect.alert.subtitle" = "Be sure to check the service address before connecting the wallet"; +"ton.connect.alert.title" = "Review dApp info"; +"ton.tonviewer.action.title" = "View in Tonviewer"; "tranaction.history.others.tab.title" = "Khác"; "transaction.detail.date" = "Ngày"; "transaction.detail.status" = "Trạng thái"; @@ -1102,7 +1146,7 @@ vào tài khoản của bạn để phân biệt với lượng stake còn lại "username.setup.hint.2.0" = "Ví dụ: Tiết kiệm, Đầu tư, Crowdloans, Staking. Biệt danh (nickname) này sẽ chỉ được hiển thị cho bạn và được lưu trữ cục bộ trên thiết bị di động của bạn."; "username.setup.title" = "Tạo tài khoản"; "username.setup.title.2.0" = "Tạo một ví mới"; -"validator.info.comission.title" = "Sứ mệnh"; +"validator.info.comission.title" = "nhiệm vụ"; "validator.info.min.stake.alert.text" = "Lượng token tối thiểu để stake ở nominator này là %s . Để nhận được phần thưởng, bạn phải stake nhiều hơn."; "validator.info.min.stake.among.active.nominators.text" = "Lượng token tối thiểu để stake với những nominator đang hoạt động"; "validators.list.empty.message" = "Không tìm thấy validator nào"; diff --git a/fearless/zh-Hans.lproj/Localizable.strings b/fearless/zh-Hans.lproj/Localizable.strings index 4459f99d22..1f9126e057 100644 --- a/fearless/zh-Hans.lproj/Localizable.strings +++ b/fearless/zh-Hans.lproj/Localizable.strings @@ -64,19 +64,20 @@ "account.needed.message" = "您还没有此网络的账户,您可以创建或导入一个账户。"; "account.needed.title" = "所需账户"; "account.option" = "账户选项"; -"account.stats.avg.transaction.time.title" = "Avg. transaction time"; -"account.stats.description.text" = "Your Multichain Score is based on your onchain journey through 3 ecosystems: Ethereum, Polygon and Binance Smart Chain"; -"account.stats.error.message" = "Unable to retrieve account score information. Please try again later."; -"account.stats.hold.tokens.usd.title" = "Hold tokens USD"; -"account.stats.max.transaction.time.title" = "Max transaction time"; -"account.stats.min.transactions.time.title" = "Min transaction time"; -"account.stats.native.balance.usd.title" = "Native balance USD"; -"account.stats.rejected.transactions.title" = "Rejected transactions"; -"account.stats.title" = "Your score"; -"account.stats.total.transactions.title" = "Total transactions"; -"account.stats.updated.title" = "Updated"; -"account.stats.wallet.age.title" = "Wallet age"; -"account.stats.wallet.option.title" = "Show wallet score"; +"account.stats.avg.transaction.time.title" = "平均交易时间"; +"account.stats.description.text" = "您的多链评分基于您在三个生态系统中的链上旅程:以太坊、Polygon 和币安智能链。"; +"account.stats.error.message" = "无法获取账户评分信息。请稍后再试。"; +"account.stats.hold.tokens.usd.title" = "持有代币 USD"; +"account.stats.max.transaction.time.title" = "最长交易时间"; +"account.stats.min.transactions.time.title" = "最短交易时间"; +"account.stats.native.balance.usd.title" = "本地余额 USD"; +"account.stats.rejected.transactions.title" = "被拒绝的交易"; +"account.stats.title" = "你的分数"; +"account.stats.total.transactions.title" = "总交易量"; +"account.stats.unavailable.text" = "您没有与EVM兼容的账户。如果您想查看分数,请通过“导入钱包”选项添加。"; +"account.stats.updated.title" = "已更新"; +"account.stats.wallet.age.title" = "钱包年龄"; +"account.stats.wallet.option.title" = "显示钱包评分"; "account.template" = "%s账户"; "account.unique.secret" = "拥有独特密钥的账户"; "accounts.add.account" = "添加一个账户"; @@ -176,6 +177,11 @@ "balance.locks.liquidity.pools.row.title" = "流动性池"; "balance.locks.nomination.pools.row.title" = "提名池"; "balance.locks.screen.title" = "锁定的详细信息"; +"banner.addwallet.regular.button.title" = "Сreate or import"; +"banner.addwallet.regular.subtitle" = "Join the ecosystems with more than 90+ chains and fascinating features"; +"banner.addwallet.regular.title" = "EVM/Substrate accounts"; +"banner.addwallet.ton.button.title" = "Join now"; +"banner.addwallet.ton.title" = "Join the fastest growing ecosystem ever"; "banners.view.factory.backup.action.title" = "立即备份"; "banners.view.factory.backup.subtitle" = "保护自己避免失去对资金的访问权限。"; "banners.view.factory.backup.title" = "钱包备份"; @@ -268,11 +274,12 @@ "common.message" = "消息"; "common.methods" = "方法"; "common.module" = "模块"; -"common.more" = "More"; +"common.more" = "更多"; "common.my.networks" = "我的网络"; "common.name" = "名字"; "common.network" = "网络"; "common.network.fee" = "网络费用"; +"common.network.hash" = "%@ Hash"; "common.network.management" = "网络管理"; "common.next" = "下一个"; "common.no" = "否"; @@ -289,6 +296,7 @@ "common.privacy.policy" = "隐私政策"; "common.proceed" = "继续"; "common.referral.code.title" = "推荐码"; +"common.refund" = "Refund"; "common.reject" = "拒绝"; "common.rejected" = "拒绝"; "common.request" = "请求"; @@ -300,6 +308,8 @@ "common.search.results.number" = "搜索结果:%d"; "common.search.start.title" = "搜索结果将会在这里显示"; "common.secret.derivation.path" = "秘密派生路径"; +"common.see.all" = "查看全部"; +"common.see.all" = "See all"; "common.select" = "选择"; "common.select" = "选择"; "common.select.all" = "全选"; @@ -337,6 +347,10 @@ "confirm.mnemonic.mismatch.error.title" = "无效的助记词"; "confirmation.skip.action" = "跳过流程"; "connect.details" = "连接详情"; +"connected.accounts.common" = "Connected Accounts"; +"connected.accounts.ethereum.title" = "EVM chain accounts"; +"connected.accounts.substrate.title" = "Substrate chain accounts"; +"connected.accounts.ton.title" = "TON chain accounts"; "connection.add.already.exists.error" = "该节点已经被添加过了,请尝试其他节点。"; "connection.add.invalid.error" = "无法与节点建立连接。请尝试另一个节点。"; "connection.add.unsupported.error" = "很抱歉,网络不支持。请尝试以下方法之一:%@。"; @@ -365,6 +379,14 @@ "create.new.account" = "创建一个新账户"; "create.new.connection" = "创建新连接"; "create.new.pincode" = "创建一个新的PIN码"; +"cross.chain.tx.status.destination.fail.description" = "Transaction failed on the %@. Your funds in the current transaction will be returned to your wallet."; +"cross.chain.tx.status.destination.fail.title" = "Transaction refund"; +"cross.chain.tx.status.done.description" = "Transaction has been successfully completed."; +"cross.chain.tx.status.done.title" = "All done"; +"cross.chain.tx.status.pending.description" = "Transaction is in progress. Please wait while %@ asset cross the bridge from the %@ to the %@ network."; +"cross.chain.tx.status.pending.title" = "Transaction pending"; +"cross.chain.tx.status.source.fail.description" = "Transaction failed on the %@ network. Please, try again."; +"cross.chain.tx.status.source.fail.title" = "Transaction failed"; "crowdloan.active.section.format" = "活跃的( %@ )"; "crowdloan.app.bonus.format" = "Fearless 钱包奖励 ( %@ )"; "crowdloan.astar.referral.code.invalid" = "无效的推荐地址,只接受 Polkadot 地址,请重新尝试。"; @@ -405,10 +427,22 @@ "custom.collators.text" = "你应该相信你的收集人能够胜任并诚实地行事;仅凭他们目前的盈利能力来做决策可能会导致利润减少甚至资金损失。"; "custom.collators.title" = "与已知的收集人进行质押"; "custom.validators.empty.message" = "没有找到验证人。\n请尝试更改筛选条件。"; +"dapp.category.connected.title" = "Connected"; +"dapp.category.defi.title" = "DeFi"; +"dapp.category.featured.title" = "Featured"; +"dapp.category.nft.title" = "NFT"; +"dapp.category.utilities.title" = "Utilities"; +"dapp.connected.title" = "Connected"; +"dapp.discover.title" = "Discover dApp"; +"dapp.no.connected.dapps.title" = "No connected dApps"; +"dapp.not.found.title" = "No dApps were found"; "default.account.shared.secret" = "具有共享密钥的账户"; "delete.custom.node.title" = "删除自定义节点?"; "ecdsa.selection.subtitle" = "(兼容BTC/ETH)"; "ecdsa.selection.title" = "ECDSA"; +"ecosystem.options.backup.title" = "Backup chain accounts"; +"ecosystem.options.details.title" = "Chain accounts"; +"ecosystem.options.title" = "Account options"; "ed25519.selection.subtitle" = "ed25519(替代)"; "ed25519.selection.title" = "爱德华兹"; "empty.state.message" = "未找到符合您要求的内容"; @@ -487,10 +521,11 @@ "lp.apy.alert.title" = "战略奖励APY"; "lp.apy.title" = "战略奖励APY"; "lp.available.pools.title" = "可用的流动池"; -"lp.banner.action.details.title" = "Show details"; -"lp.banner.text" = "Invest your funds in Liquidity\npools and receive rewards"; +"lp.banner.action.details.title" = "显示详细信息"; +"lp.banner.text" = "将您的资金投资于流动性池,并获得奖励。"; "lp.confirm.liquidity.screen.title" = "确认流动性"; "lp.confirm.liquidity.warning.text" = "输出是估计的。如果价格变动超过0.5%,您的交易将会回滚。"; +"lp.liquidity.add.complete.text" = "您对流动性池的供给已成功完成。"; "lp.network.fee.alert.text" = "网络费用用于确保 SORA 系统的增长和稳定性能。"; "lp.network.fee.alert.title" = "网络费用"; "lp.pool.details.title" = "流动池详情"; @@ -498,12 +533,12 @@ "lp.pool.remove.warning.title" = "注意"; "lp.remove.button.title" = "移除流动性"; "lp.remove.liquidity.screen.title" = "移除流动性"; -"lp.reward.token.text" = "赚取%@"; +"lp.reward.token.text" = "赚取%s"; "lp.reward.token.title" = "奖励支付以"; "lp.slippage.title" = "滑点"; "lp.supply.button.title" = "供应流动性"; "lp.supply.liquidity.screen.title" = "供应流动性"; -"lp.token.pooled.text" = "你提供流动性的%@"; +"lp.token.pooled.text" = "你提供流动性的%s"; "lp.user.pools.title" = "用户流动池"; "manage.assets.account.missing.text" = "添加一个账户..."; "manage.assets.search.hint" = "按资产搜索"; @@ -550,7 +585,7 @@ "nft.collection.title" = "收藏品"; "nft.creator.title" = "创作者"; "nft.list.empty.message" = "目前还没有任何NFT。购买或铸造NFT以在此处查看。"; -"nft.load.error" = "Failed to load NFTs"; +"nft.load.error" = "无法加载NFTs"; "nft.owner.title" = "拥有"; "nft.share.address" = "我要接收的公共地址:%s"; "nft.spam.warning" = "小心某些 NFT 收藏品可能是骗局或垃圾邮件,在参与之前请先验证其真实性。保持安全!"; @@ -567,6 +602,10 @@ "no.email.bound.error.message" = "请确保设备上已安装邮件应用程序。"; "node" = "节点"; "node.selection.delete.node.title" = "删除自定义节点?"; +"onboarding.banner.regular.ecosystem.button.title" = "Join EVM or Substrate"; +"onboarding.banner.regular.ecosystem.title" = "Create or import Substrate or EVM accounts"; +"onboarding.banner.ton.ecosystem.button.title" = "Join TON"; +"onboarding.banner.ton.ecosystem.title" = "Connect to the fastest growing ecosystem ever"; "onboarding.create.account" = "创建一个账户"; "onboarding.create.wallet" = "创建一个钱包"; "onboarding.preinstalled.wallet.button.text" = "获取预装钱包"; @@ -707,7 +746,7 @@ "pools.limit.has.reached.error.message" = "这个网络的池子数量已经达到了上限"; "pools.limit.has.reached.error.title" = "你不能创建更多的池子"; "profile.about.title" = "关于"; -"profile.account.score.title" = "Nomis multichain score"; +"profile.account.score.title" = "Nomis 多链评分"; "profile.accounts.title" = "账户"; "profile.language.title" = "语言"; "profile.logout.description" = "此操作将导致删除该设备上的所有账户。在继续之前,请确保已备份您的密码短语。"; @@ -735,11 +774,12 @@ "scam.additional.stub" = "附加:"; "scam.description.donation.stub" = "此地址已被标记为可疑。我们强烈建议您不要向该账户发送%s。"; "scam.description.exchange.stub" = "这个地址被标记为交易所,请注意存款和提款地址可能不同。"; -"scam.description.lowscore.text" = "The address you are about to transfer to has low onchain activity, which may indicate a potential scammer or sybil attacker"; +"scam.description.lowscore.text" = "您即将转账的地址在链上活动较少,这可能表明该地址存在潜在的诈骗者或女巫攻击者。"; "scam.description.sanctions.stub" = "由于与受制裁国家相关的实体,此地址已被标记。我们强烈建议您不要向此账户发送%s。"; "scam.description.scam.stub" = "此地址已被标记存在诈骗嫌疑。我们强烈建议您不要将{asset}发送到此账户。"; -"scam.info.nomis.name" = "Nomis multi-chain score"; -"scam.info.nomis.subtype.text" = "Proceed with caution"; +"scam.info.nomis.name" = "Nomis 多链评分"; +"scam.info.nomis.reason.text" = "网络活动低"; +"scam.info.nomis.subtype.text" = "请谨慎行事"; "scam.name.stub" = "姓名:"; "scam.reason.stub" = "原因:"; "scam.warning.alert.subtitle" = "我们强烈建议您不要向此账户发送%s。"; @@ -1075,6 +1115,10 @@ "terms.and.conditions.sora.community.alert.main" = "SORA社区不会收集您的任何个人数据,"; "terms.and.conditions.sora.community.alert.secondary" = "但是要获得SORA卡和IBAN账户,您需要通过一家发卡机构进行KYC验证。"; "terms.and.conditions.title" = "条款与条件"; +"ton.connect.alert.description" = "Service address"; +"ton.connect.alert.subtitle" = "Be sure to check the service address before connecting the wallet"; +"ton.connect.alert.title" = "Review dApp info"; +"ton.tonviewer.action.title" = "View in Tonviewer"; "tranaction.history.others.tab.title" = "其他"; "transaction.detail.date" = "日期"; "transaction.detail.status" = "状态"; diff --git a/fearlessTests/Modules/ConfirmTransfer/ConfirmTransferTests.swift b/fearlessTests/Modules/ConfirmTransfer/ConfirmTransferTests.swift new file mode 100644 index 0000000000..5782ed2436 --- /dev/null +++ b/fearlessTests/Modules/ConfirmTransfer/ConfirmTransferTests.swift @@ -0,0 +1,16 @@ +import XCTest + +class ConfirmTransferTests: XCTestCase { + + override func setUp() { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() { + XCTFail("Did you forget to add tests?") + } +} diff --git a/fearlessTests/Modules/Transfer/TransferTests.swift b/fearlessTests/Modules/Transfer/TransferTests.swift new file mode 100644 index 0000000000..2eff88b2bf --- /dev/null +++ b/fearlessTests/Modules/Transfer/TransferTests.swift @@ -0,0 +1,16 @@ +import XCTest + +class TransferTests: XCTestCase { + + override func setUp() { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() { + XCTFail("Did you forget to add tests?") + } +} From 075c7cbfe687f1404b1cca84daf90a449c81fc11 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Wed, 13 Nov 2024 11:43:11 +0500 Subject: [PATCH 070/156] [#FLW-5050] There is not "You have hidden all assets" warning on the main screen --- .../ChainAssetListViewController.swift | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListViewController.swift b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListViewController.swift index d41dc40ac6..961dbf9e87 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListViewController.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListViewController.swift @@ -63,7 +63,7 @@ final class ChainAssetListViewController: if keyboardHandler == nil, keyboardAdoptable { setupKeyboardHandler() } - + output.didAppear(view: self) } @@ -153,11 +153,11 @@ extension ChainAssetListViewController: ChainAssetListViewInput { rootView.removeHeaderView() return } - + guard let viewModel else { return } - + didReceive(viewModel: viewModel) } @@ -179,7 +179,6 @@ extension ChainAssetListViewController: ChainAssetListViewInput { return } - if withAnimate { rootView.runManageAssetAnimate(finish: { [weak self] in self?.output.didFinishManageAssetAnimate() @@ -202,6 +201,7 @@ extension ChainAssetListViewController: ChainAssetListViewInput { rootView.setHeaderView() rootView.tableView.reloadData() } + reloadEmptyState(animated: false) } } @@ -293,8 +293,7 @@ extension ChainAssetListViewController: EmptyStateDataSource { extension ChainAssetListViewController: EmptyStateDelegate { var shouldDisplayEmptyState: Bool { - return false -// guard let viewModel = viewModel else { return false } -// return viewModel.displayState.rows.isEmpty + guard let viewModel = viewModel else { return false } + return viewModel.displayState.rows.isEmpty } } From f62c6d1ed1853ceb3c50f852af6560981976d521 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Wed, 13 Nov 2024 12:01:56 +0500 Subject: [PATCH 071/156] [#FLW-5044] Wallet icon consistency --- .../Staking/StakingMain/StakingMainViewController.swift | 2 +- .../Modules/Staking/StakingMain/StakingMainViewModel.swift | 1 + .../StakingMain/ViewModel/NetworkInfoViewModelFactory.swift | 3 ++- .../ViewModel/WalletMainContainerViewModel.swift | 2 ++ .../ViewModel/WalletMainContainerViewModelFactory.swift | 3 ++- .../WalletMainContainer/WalletMainContainerViewLayout.swift | 2 +- 6 files changed, 9 insertions(+), 4 deletions(-) diff --git a/fearless/Modules/Staking/StakingMain/StakingMainViewController.swift b/fearless/Modules/Staking/StakingMain/StakingMainViewController.swift index 9587c4051b..19cf5e5169 100644 --- a/fearless/Modules/Staking/StakingMain/StakingMainViewController.swift +++ b/fearless/Modules/Staking/StakingMain/StakingMainViewController.swift @@ -478,7 +478,7 @@ extension StakingMainViewController: StakingMainViewProtocol { assetIconViewModel = viewModel.assetIcon balanceViewModel = viewModel.balanceViewModel - iconButton.imageWithTitleView?.iconImage = R.image.iconFearlessRounded() + iconButton.imageWithTitleView?.iconImage = viewModel.walletIcon iconButton.invalidateLayout() networkInfoView?.bind(chainName: viewModel.chainName) diff --git a/fearless/Modules/Staking/StakingMain/StakingMainViewModel.swift b/fearless/Modules/Staking/StakingMain/StakingMainViewModel.swift index a499f30cf4..b4436407ed 100644 --- a/fearless/Modules/Staking/StakingMain/StakingMainViewModel.swift +++ b/fearless/Modules/Staking/StakingMain/StakingMainViewModel.swift @@ -7,4 +7,5 @@ struct StakingMainViewModel { let assetName: String let assetIcon: ImageViewModelProtocol? let balanceViewModel: LocalizableResource? + let walletIcon: UIImage } diff --git a/fearless/Modules/Staking/StakingMain/ViewModel/NetworkInfoViewModelFactory.swift b/fearless/Modules/Staking/StakingMain/ViewModel/NetworkInfoViewModelFactory.swift index e7f19b344a..426f27738c 100644 --- a/fearless/Modules/Staking/StakingMain/ViewModel/NetworkInfoViewModelFactory.swift +++ b/fearless/Modules/Staking/StakingMain/ViewModel/NetworkInfoViewModelFactory.swift @@ -165,7 +165,8 @@ extension NetworkInfoViewModelFactory: NetworkInfoViewModelFactoryProtocol { chainName: chainAsset.chain.name, assetName: chainAsset.chain.name, assetIcon: imageViewModel, - balanceViewModel: balanceViewModel + balanceViewModel: balanceViewModel, + walletIcon: selectedMetaAccount.icon() ) } diff --git a/fearless/Modules/WalletMainContainer/ViewModel/WalletMainContainerViewModel.swift b/fearless/Modules/WalletMainContainer/ViewModel/WalletMainContainerViewModel.swift index 7cdf361f0d..c95343726c 100644 --- a/fearless/Modules/WalletMainContainer/ViewModel/WalletMainContainerViewModel.swift +++ b/fearless/Modules/WalletMainContainer/ViewModel/WalletMainContainerViewModel.swift @@ -1,4 +1,5 @@ import Foundation +import UIKit struct WalletMainContainerViewModel { let walletName: String @@ -6,4 +7,5 @@ struct WalletMainContainerViewModel { let selectedFilterImage: ImageViewModelProtocol? let address: String? let accountScoreViewModel: AccountScoreViewModel? + let walletIcon: UIImage } diff --git a/fearless/Modules/WalletMainContainer/ViewModel/WalletMainContainerViewModelFactory.swift b/fearless/Modules/WalletMainContainer/ViewModel/WalletMainContainerViewModelFactory.swift index e99a66dd8d..ec8bf05e5f 100644 --- a/fearless/Modules/WalletMainContainer/ViewModel/WalletMainContainerViewModelFactory.swift +++ b/fearless/Modules/WalletMainContainer/ViewModel/WalletMainContainerViewModelFactory.swift @@ -74,7 +74,8 @@ final class WalletMainContainerViewModelFactory: WalletMainContainerViewModelFac selectedFilter: selectedFilterName, selectedFilterImage: selectedFilterImage, address: chainAddress, - accountScoreViewModel: accountScoreViewModel + accountScoreViewModel: accountScoreViewModel, + walletIcon: selectedMetaAccount.icon() ) } } diff --git a/fearless/Modules/WalletMainContainer/WalletMainContainerViewLayout.swift b/fearless/Modules/WalletMainContainer/WalletMainContainerViewLayout.swift index afbc2b088b..80d67482a3 100644 --- a/fearless/Modules/WalletMainContainer/WalletMainContainerViewLayout.swift +++ b/fearless/Modules/WalletMainContainer/WalletMainContainerViewLayout.swift @@ -31,7 +31,6 @@ final class WalletMainContainerViewLayout: UIView { let switchWalletButton: UIButton = { let button = UIButton() - button.setImage(R.image.iconFearlessRounded(), for: .normal) return button }() @@ -115,6 +114,7 @@ final class WalletMainContainerViewLayout: UIView { } accountScoreView.bind(viewModel: viewModel.accountScoreViewModel) + switchWalletButton.setImage(viewModel.walletIcon, for: .normal) } func addBalance(_ view: UIView) { From c270c8d4c3c975ee06112a48bb3747e24120096e Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Wed, 13 Nov 2024 12:31:06 +0500 Subject: [PATCH 072/156] [#FLW-5049] Wrong back flow after transferring to new Sub/Evm accounts --- fearless/Modules/OnbordingMain/OnboardingMainPresenter.swift | 4 ++++ fearless/Modules/OnbordingMain/OnboardingMainProtocol.swift | 1 + .../Modules/OnbordingMain/OnboardingMainViewController.swift | 5 +++++ 3 files changed, 10 insertions(+) diff --git a/fearless/Modules/OnbordingMain/OnboardingMainPresenter.swift b/fearless/Modules/OnbordingMain/OnboardingMainPresenter.swift index e2ac99c5f0..5fc9a62d53 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainPresenter.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainPresenter.swift @@ -53,6 +53,10 @@ final class OnboardingMainPresenter { } extension OnboardingMainPresenter: OnboardingMainPresenterProtocol { + func dismiss() { + wireframe.dismiss(view: view) + } + func didSelect(ecosystem: AccountCreateEcosystem) { self.ecosystem = ecosystem } diff --git a/fearless/Modules/OnbordingMain/OnboardingMainProtocol.swift b/fearless/Modules/OnbordingMain/OnboardingMainProtocol.swift index 5415c5e0e7..d45cf7e8f3 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainProtocol.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainProtocol.swift @@ -13,6 +13,7 @@ protocol OnboardingMainPresenterProtocol: AnyObject { func activatePrivacy() func didTapGetPreinstalled() func didSelect(ecosystem: AccountCreateEcosystem) + func dismiss() } protocol OnboardingMainWireframeProtocol: WebPresentable, ErrorPresentable, SheetAlertPresentable, WarningPresentable, PresentDismissable, AppUpdatePresentable { diff --git a/fearless/Modules/OnbordingMain/OnboardingMainViewController.swift b/fearless/Modules/OnbordingMain/OnboardingMainViewController.swift index 4b5da06c3e..7cbb52f9a2 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainViewController.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainViewController.swift @@ -8,8 +8,10 @@ final class OnboardingMainViewController: UIViewController, ViewHolder, Hiddable var presenter: OnboardingMainPresenterProtocol! private let ecosystem: AccountCreateEcosystem? + private var shouldDismiss: Bool init(ecosystem: AccountCreateEcosystem?) { self.ecosystem = ecosystem + self.shouldDismiss = ecosystem != nil super.init(nibName: nil, bundle: nil) } @@ -56,6 +58,9 @@ final class OnboardingMainViewController: UIViewController, ViewHolder, Hiddable self?.presenter.didTapGetPreinstalled() } rootView.backButton.addAction { [weak self] in + if self?.shouldDismiss == true { + self?.presenter.dismiss() + } UIView.animate( withDuration: 0.25, delay: 0, From 8c2743b50b693353d0305f016f9c06f423c5f609 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Wed, 13 Nov 2024 12:44:49 +0500 Subject: [PATCH 073/156] [#FLW-5009] We should block All network buttons for TON wallet --- fearless/Common/View/SelectedNetworkButton.swift | 1 + .../NewWallet/ChainAccount/ChainAccountViewLayout.swift | 2 -- .../ViewModel/WalletMainContainerViewModel.swift | 1 + .../ViewModel/WalletMainContainerViewModelFactory.swift | 3 ++- .../WalletMainContainer/WalletMainContainerViewLayout.swift | 1 + 5 files changed, 5 insertions(+), 3 deletions(-) diff --git a/fearless/Common/View/SelectedNetworkButton.swift b/fearless/Common/View/SelectedNetworkButton.swift index 6037cee566..1245952992 100644 --- a/fearless/Common/View/SelectedNetworkButton.swift +++ b/fearless/Common/View/SelectedNetworkButton.swift @@ -51,6 +51,7 @@ final class SelectedNetworkButton: UIControl { } func applySelectableStyle(_ selectable: Bool) { + isUserInteractionEnabled = selectable dropTraingleImageView.isHidden = !selectable } diff --git a/fearless/Modules/NewWallet/ChainAccount/ChainAccountViewLayout.swift b/fearless/Modules/NewWallet/ChainAccount/ChainAccountViewLayout.swift index ffdb5ea156..3f9dac7bc3 100644 --- a/fearless/Modules/NewWallet/ChainAccount/ChainAccountViewLayout.swift +++ b/fearless/Modules/NewWallet/ChainAccount/ChainAccountViewLayout.swift @@ -281,8 +281,6 @@ private extension ChainAccountViewLayout { } func setupNavigationViewLayout() { - selectNetworkButton.isUserInteractionEnabled = false - navigationBar.addSubview(backButton) backButton.snp.makeConstraints { make in make.centerY.equalToSuperview() diff --git a/fearless/Modules/WalletMainContainer/ViewModel/WalletMainContainerViewModel.swift b/fearless/Modules/WalletMainContainer/ViewModel/WalletMainContainerViewModel.swift index c95343726c..38d9c94838 100644 --- a/fearless/Modules/WalletMainContainer/ViewModel/WalletMainContainerViewModel.swift +++ b/fearless/Modules/WalletMainContainer/ViewModel/WalletMainContainerViewModel.swift @@ -8,4 +8,5 @@ struct WalletMainContainerViewModel { let address: String? let accountScoreViewModel: AccountScoreViewModel? let walletIcon: UIImage + let isSelectableNetwork: Bool } diff --git a/fearless/Modules/WalletMainContainer/ViewModel/WalletMainContainerViewModelFactory.swift b/fearless/Modules/WalletMainContainer/ViewModel/WalletMainContainerViewModelFactory.swift index ec8bf05e5f..0ea58747c0 100644 --- a/fearless/Modules/WalletMainContainer/ViewModel/WalletMainContainerViewModelFactory.swift +++ b/fearless/Modules/WalletMainContainer/ViewModel/WalletMainContainerViewModelFactory.swift @@ -75,7 +75,8 @@ final class WalletMainContainerViewModelFactory: WalletMainContainerViewModelFac selectedFilterImage: selectedFilterImage, address: chainAddress, accountScoreViewModel: accountScoreViewModel, - walletIcon: selectedMetaAccount.icon() + walletIcon: selectedMetaAccount.icon(), + isSelectableNetwork: selectedMetaAccount.ecosystem.isRegular ) } } diff --git a/fearless/Modules/WalletMainContainer/WalletMainContainerViewLayout.swift b/fearless/Modules/WalletMainContainer/WalletMainContainerViewLayout.swift index 80d67482a3..63bd475b4d 100644 --- a/fearless/Modules/WalletMainContainer/WalletMainContainerViewLayout.swift +++ b/fearless/Modules/WalletMainContainer/WalletMainContainerViewLayout.swift @@ -115,6 +115,7 @@ final class WalletMainContainerViewLayout: UIView { accountScoreView.bind(viewModel: viewModel.accountScoreViewModel) switchWalletButton.setImage(viewModel.walletIcon, for: .normal) + selectNetworkButton.applySelectableStyle(viewModel.isSelectableNetwork) } func addBalance(_ view: UIView) { From bd914de9b34186e95d9fe98653cd3c74d1896e6f Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Wed, 13 Nov 2024 13:56:00 +0500 Subject: [PATCH 074/156] [#FLW-5048] Similar and consistent asset icons. They should be round --- .../AmountInputView/SelectableAmountInputView.swift | 2 +- .../TableViews/AssetManagementTableCell.swift | 11 ++++++++++- .../Views/ChainAccountBalanceTableCell.swift | 3 ++- .../Views/WalletTransactionHistoryCell.swift | 8 +++++++- .../ViewModel/AssetBalanceViewModel.swift | 8 ++++++++ 5 files changed, 28 insertions(+), 4 deletions(-) diff --git a/fearless/Common/View/AmountInputView/SelectableAmountInputView.swift b/fearless/Common/View/AmountInputView/SelectableAmountInputView.swift index 44546085f7..e6d34b90c4 100644 --- a/fearless/Common/View/AmountInputView/SelectableAmountInputView.swift +++ b/fearless/Common/View/AmountInputView/SelectableAmountInputView.swift @@ -144,7 +144,7 @@ final class SelectableAmountInputView: UIView { symbolLabel.text = viewModel.symbol.uppercased() - viewModel.iconViewModel?.loadAmountInputIcon(on: iconView, animated: true) + viewModel.iconViewModel?.loadAmountInputIcon(on: iconView, animated: true, cornerRadius: LayoutConstants.iconSize / 2) iconSelect.isHidden = !viewModel.selectable } diff --git a/fearless/Modules/AssetManagement/TableViews/AssetManagementTableCell.swift b/fearless/Modules/AssetManagement/TableViews/AssetManagementTableCell.swift index fd2f5ac225..e3e2b54f08 100644 --- a/fearless/Modules/AssetManagement/TableViews/AssetManagementTableCell.swift +++ b/fearless/Modules/AssetManagement/TableViews/AssetManagementTableCell.swift @@ -2,7 +2,11 @@ import UIKit import SoraUI final class AssetManagementTableCell: UITableViewCell { - let iconImageView = UIImageView() + let iconImageView: UIImageView = { + let iconImageView = UIImageView() + iconImageView.layer.masksToBounds = true + return iconImageView + }() let symbolLabel: UILabel = { let label = UILabel() @@ -67,6 +71,11 @@ final class AssetManagementTableCell: UITableViewCell { fatalError("init(coder:) has not been implemented") } + override func layoutSubviews() { + super.layoutSubviews() + iconImageView.rounded() + } + func bind(viewModel: AssetManagementTableCellViewModel) { self.viewModel = viewModel viewModel.assetImage?.loadImage( diff --git a/fearless/Modules/NewWallet/ChainAssetList/Views/ChainAccountBalanceTableCell.swift b/fearless/Modules/NewWallet/ChainAssetList/Views/ChainAccountBalanceTableCell.swift index fb5058d65a..82507076e2 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/Views/ChainAccountBalanceTableCell.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/Views/ChainAccountBalanceTableCell.swift @@ -117,7 +117,8 @@ final class ChainAccountBalanceTableCell: SwipableTableViewCell { viewModel.imageViewModel?.loadBalanceListIcon( on: assetIconImageView, - animated: false + animated: true, + cornerRadius: LayoutConstants.iconSize / 2 ) if let options = viewModel.options { diff --git a/fearless/Modules/NewWallet/WalletTransactionHistory/Views/WalletTransactionHistoryCell.swift b/fearless/Modules/NewWallet/WalletTransactionHistory/Views/WalletTransactionHistoryCell.swift index b23c77de55..2d037ea21c 100644 --- a/fearless/Modules/NewWallet/WalletTransactionHistory/Views/WalletTransactionHistoryCell.swift +++ b/fearless/Modules/NewWallet/WalletTransactionHistory/Views/WalletTransactionHistoryCell.swift @@ -12,6 +12,7 @@ class WalletTransactionHistoryCell: UITableViewCell { let accountIconImageView: UIImageView = { let iconView = UIImageView() iconView.backgroundColor = .clear + iconView.layer.masksToBounds = true return iconView }() @@ -69,6 +70,11 @@ class WalletTransactionHistoryCell: UITableViewCell { fatalError("init(coder:) has not been implemented") } + override func layoutSubviews() { + super.layoutSubviews() + accountIconImageView.layer.cornerRadius = LayoutConstants.accountImageViewSize.height / 2 + } + private func configure() { backgroundColor = .clear @@ -129,7 +135,7 @@ class WalletTransactionHistoryCell: UITableViewCell { on: accountIconImageView, targetSize: LayoutConstants.accountImageViewSize, animated: true, - cornerRadius: 0 + cornerRadius: LayoutConstants.accountImageViewSize.height / 2 ) } else if let icon = viewModel.icon { accountIconImageView.image = icon diff --git a/fearless/Modules/Staking/StakingAmount/ViewModel/AssetBalanceViewModel.swift b/fearless/Modules/Staking/StakingAmount/ViewModel/AssetBalanceViewModel.swift index 2c54367fb8..3c6d963cf0 100644 --- a/fearless/Modules/Staking/StakingAmount/ViewModel/AssetBalanceViewModel.swift +++ b/fearless/Modules/Staking/StakingAmount/ViewModel/AssetBalanceViewModel.swift @@ -28,6 +28,10 @@ extension ImageViewModelProtocol { loadImage(on: imageView, targetSize: CGSize(width: 24.0, height: 24.0), animated: true, cornerRadius: 0) } + func loadAmountInputIcon(on imageView: UIImageView, animated: Bool, cornerRadius: CGFloat) { + loadImage(on: imageView, targetSize: CGSize(width: 24.0, height: 24.0), animated: animated, cornerRadius: cornerRadius) + } + func loadAssetInfoIcon(on imageView: UIImageView, animated _: Bool) { loadImage(on: imageView, targetSize: CGSize(width: 32.0, height: 32.0), animated: true, cornerRadius: 0) } @@ -35,4 +39,8 @@ extension ImageViewModelProtocol { func loadBalanceListIcon(on imageView: UIImageView, animated _: Bool) { loadImage(on: imageView, targetSize: CGSize(width: 48.0, height: 48.0), animated: true, cornerRadius: 0) } + + func loadBalanceListIcon(on imageView: UIImageView, animated: Bool, cornerRadius: CGFloat) { + loadImage(on: imageView, targetSize: CGSize(width: 48.0, height: 48.0), animated: animated, cornerRadius: cornerRadius) + } } From 5a3430560bb61ce3788c39856107ab9bbc368eaa Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Wed, 13 Nov 2024 14:23:54 +0500 Subject: [PATCH 075/156] [#FLW-5045] Tappable area --- fearless/Common/Extension/UIKit/UIView.swift | 45 +++++++++++++++++++ .../OnboardingMainViewController.swift | 10 +++++ 2 files changed, 55 insertions(+) diff --git a/fearless/Common/Extension/UIKit/UIView.swift b/fearless/Common/Extension/UIKit/UIView.swift index 50aab54aeb..b6716165b5 100644 --- a/fearless/Common/Extension/UIKit/UIView.swift +++ b/fearless/Common/Extension/UIKit/UIView.swift @@ -17,3 +17,48 @@ extension UIView { layer.cornerRadius = frame.size.height / 2 } } + +extension UIView { + + // In order to create computed properties for extensions, we need a key to + // store and access the stored property + fileprivate struct AssociatedObjectKeys { + static var tapGestureRecognizer = "MediaViewerAssociatedObjectKey_mediaViewer" + } + + fileprivate typealias Action = (() -> Void)? + + // Set our computed property type to a closure + fileprivate var tapGestureRecognizerAction: Action? { + set { + if let newValue = newValue { + // Computed properties get stored as associated objects + objc_setAssociatedObject(self, &AssociatedObjectKeys.tapGestureRecognizer, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN) + } + } + get { + let tapGestureRecognizerActionInstance = objc_getAssociatedObject(self, &AssociatedObjectKeys.tapGestureRecognizer) as? Action + return tapGestureRecognizerActionInstance + } + } + + // This is the meat of the sauce, here we create the tap gesture recognizer and + // store the closure the user passed to us in the associated object we declared above + public func addTapGestureRecognizer(action: (() -> Void)?) { + self.isUserInteractionEnabled = true + self.tapGestureRecognizerAction = action + let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTapGesture)) + self.addGestureRecognizer(tapGestureRecognizer) + } + + // Every time the user taps on the UIImageView, this function gets called, + // which triggers the closure we stored + @objc fileprivate func handleTapGesture(sender: UITapGestureRecognizer) { + if let action = self.tapGestureRecognizerAction { + action?() + } else { + Logger.shared.error("No Action") + } + } + +} diff --git a/fearless/Modules/OnbordingMain/OnboardingMainViewController.swift b/fearless/Modules/OnbordingMain/OnboardingMainViewController.swift index 7cbb52f9a2..a2328b5836 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainViewController.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainViewController.swift @@ -42,11 +42,21 @@ final class OnboardingMainViewController: UIViewController, ViewHolder, Hiddable self.presenter.didSelect(ecosystem: .regular) self.ecosystemHasBeenSelected() } + rootView.selectRegularBannerView.addTapGestureRecognizer { [weak self] in + guard let self else { return } + self.presenter.didSelect(ecosystem: .regular) + self.ecosystemHasBeenSelected() + } rootView.selectTonBannerView.actionButton.addAction { [weak self] in guard let self else { return } self.presenter.didSelect(ecosystem: .ton) self.ecosystemHasBeenSelected() } + rootView.selectTonBannerView.addTapGestureRecognizer { [weak self] in + guard let self else { return } + self.presenter.didSelect(ecosystem: .ton) + self.ecosystemHasBeenSelected() + } rootView.signUpButton.addAction { [weak self] in self?.presenter.activateSignup() From 1a26017328c0db9b3bccb18b962db5877ca99a4c Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Wed, 13 Nov 2024 15:14:15 +0500 Subject: [PATCH 076/156] FLW-5047 TonQrCode flow --- fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 46530cb07a..599bf00d5b 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -123,8 +123,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/ashleymills/Reachability.swift", "state" : { - "revision" : "7cbd73f46a7dfaeca079e18df7324c6de6d1834a", - "version" : "5.2.3" + "revision" : "21d1dc412cfecbe6e34f1f4c4eb88d3f912654a6", + "version" : "5.2.4" } }, { @@ -142,7 +142,7 @@ "location" : "https://github.com/soramitsu/shared-features-spm.git", "state" : { "branch" : "FW-new-ecosystem", - "revision" : "c3de9e1a7f9b8043da8b8638282aa6a40776208f" + "revision" : "4a54a916ef2aa87d52e32341cd519b1c791f66e6" } }, { From bb90c06db66d323f94c0a94cb99b8c7773599328 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Wed, 13 Nov 2024 15:21:39 +0500 Subject: [PATCH 077/156] =?UTF-8?q?Unnecessary=20button=20=E2=80=9CClose?= =?UTF-8?q?=E2=80=9D=20on=20the=20Success=20bottom=20sheet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fearless/Modules/AllDone/AllDoneViewLayout.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/fearless/Modules/AllDone/AllDoneViewLayout.swift b/fearless/Modules/AllDone/AllDoneViewLayout.swift index 11934a54c3..67871226a7 100644 --- a/fearless/Modules/AllDone/AllDoneViewLayout.swift +++ b/fearless/Modules/AllDone/AllDoneViewLayout.swift @@ -186,6 +186,7 @@ final class AllDoneViewLayout: UIView { } private func setupLayout() { + mainCloseButton.isHidden = true backgroundColor = R.color.colorAlmostBlack()! layer.cornerRadius = Constants.cornerRadius clipsToBounds = true From 75a7e0e822b473cd5c6e69d3f35a399d9716a101 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Mon, 18 Nov 2024 10:56:51 +0500 Subject: [PATCH 078/156] [#FLW-5064] We do not showing fiat changing on the main screen --- .../Services/Balance/TonRemoteBalanceFetching.swift | 9 ++++++++- .../Common/Storage/EntityToModel/ChainModelMapper.swift | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift b/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift index 83ae148b71..9248d9473f 100644 --- a/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift +++ b/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift @@ -259,16 +259,23 @@ actor TonRemoteBalanceFetchingImpl: AccountInfoRemoteService { guard let price = rates?.prices?.additionalProperties.first?.value else { return [] } + let fiatDayChangeString = rates?.diff_24h?.additionalProperties.first?.value.replacingOccurrences(of: "%", with: "") + let fiatDayChangeStringU002D = fiatDayChangeString?.replacingOccurrences(of: "\u{2212}", with: "-") ?? "0" + let fiatDayChangeDecimal = Decimal(string: fiatDayChangeStringU002D) ?? .zero let priceData = PriceData( currencyId: currency.id, priceId: "", price: String(price), - fiatDayChange: .zero, + fiatDayChange: calculatePercentageValue(base: Decimal(price), percent: fiatDayChangeDecimal), coingeckoPriceId: nil ) return [priceData] } + private func calculatePercentageValue(base: Decimal, percent: Decimal) -> Decimal { + return base * percent / 100 + } + nonisolated private func cache( _ cache: [(ChainAsset, AccountInfo)], accountId: AccountId? diff --git a/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift b/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift index b0591d72b8..74a2873c1b 100644 --- a/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift +++ b/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift @@ -152,7 +152,7 @@ final class ChainModelMapper { entity.currencyId = priceData.currencyId entity.priceId = priceData.priceId entity.price = priceData.price - entity.fiatDayByChange = String("\(priceData.fiatDayChange)") + entity.fiatDayByChange = NSDecimalNumber(decimal: priceData.fiatDayChange ?? .zero).stringValue entity.coingeckoPriceId = priceData.coingeckoPriceId return entity } From 57551b6e3b73724df7bc124b043844e2cbc951c4 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Mon, 18 Nov 2024 13:38:12 +0500 Subject: [PATCH 079/156] [#FLW-5053] We should Change bird icon on the browser --- fearless/Modules/DappBrowser/View/DappBrowserViewLayout.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fearless/Modules/DappBrowser/View/DappBrowserViewLayout.swift b/fearless/Modules/DappBrowser/View/DappBrowserViewLayout.swift index 8e3925c636..0ff38f569c 100644 --- a/fearless/Modules/DappBrowser/View/DappBrowserViewLayout.swift +++ b/fearless/Modules/DappBrowser/View/DappBrowserViewLayout.swift @@ -18,7 +18,7 @@ final class DappBrowserViewLayout: UIView { let switchWalletButton: UIButton = { let button = UIButton() - button.setImage(R.image.iconFearlessRounded(), for: .normal) + button.setImage(R.image.tonIcon(), for: .normal) return button }() From 477681cb4a060ab706aa8e95e396218cf318be46 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Mon, 18 Nov 2024 14:10:16 +0500 Subject: [PATCH 080/156] [#FLW-5066] After taping change PIN code we can see Main screen but no Change pin code screen --- fearless/Modules/MainTabBar/MainTabBarViewController.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fearless/Modules/MainTabBar/MainTabBarViewController.swift b/fearless/Modules/MainTabBar/MainTabBarViewController.swift index cd819bf4d6..a749b9338f 100644 --- a/fearless/Modules/MainTabBar/MainTabBarViewController.swift +++ b/fearless/Modules/MainTabBar/MainTabBarViewController.swift @@ -43,20 +43,19 @@ final class MainTabBarViewController: UITabBarController { super.viewDidAppear(animated) if !viewAppeared { + update(with: wallet) viewAppeared = true presenter.didLoad(view: self) } let tabBar = TabBar(frame: tabBar.frame) + tabBar.setup(for: wallet.ecosystem) tabBar.middleButton.addAction { [weak self] in self?.presenter.presentPolkaswap() } setValue(tabBar, forKey: "tabBar") applyLocalization() - - update(with: wallet) - } private func openTab(vcClass _: T.Type) -> Bool { @@ -133,6 +132,7 @@ extension MainTabBarViewController: Localizable { extension MainTabBarViewController: EventVisitorProtocol { func processSelectedAccountChanged(event: SelectedAccountChanged) { + self.wallet = event.account update(with: event.account) } } From 8c7652ba5ae401852e5cc453607ff06d36da2adb Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Mon, 18 Nov 2024 14:49:18 +0500 Subject: [PATCH 081/156] [#FLW-5068] We should delete Replace for TON wallet --- .../NewWallet/ChainAccount/ChainAccountPresenter.swift | 6 ++++-- .../WalletMainContainer/WalletMainContainerPresenter.swift | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift b/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift index 0f20693349..cad2f10eca 100644 --- a/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift +++ b/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift @@ -283,8 +283,10 @@ extension ChainAccountPresenter: ChainAccountInteractorOutputProtocol { func didReceiveExportOptions(options: [ExportOption]) { var items: [ChainAction] = [] items.append(.export) - if chainAsset.chain.ecosystem.isSubstrate || chainAsset.chain.ecosystem.isEthereumBased { items.append(.switchNode) } - items.append(.replace) + if chainAsset.chain.ecosystem.isSubstrate || chainAsset.chain.ecosystem.isEthereumBased { + items.append(.switchNode) + items.append(.replace) + } if interactor.checkIsClaimAvailable() { items.append(.claimCrowdloanRewards) } let selectionCallback: ModalPickerSelectionCallback = { [weak self] selectedIndex in diff --git a/fearless/Modules/WalletMainContainer/WalletMainContainerPresenter.swift b/fearless/Modules/WalletMainContainer/WalletMainContainerPresenter.swift index 120b181a43..63de01f820 100644 --- a/fearless/Modules/WalletMainContainer/WalletMainContainerPresenter.swift +++ b/fearless/Modules/WalletMainContainer/WalletMainContainerPresenter.swift @@ -54,8 +54,10 @@ final class WalletMainContainerPresenter { selectedMetaAccount: wallet, locale: selectedLocale ) - DispatchQueue.main.async { + DispatchQueue.main.async { [weak self] in + guard let self else { return } self.view?.didReceiveViewModel(viewModel) + self.view?.didReceiveNftAvailability(isNftAvailable: self.wallet.ecosystem.isRegular) } } From de03ee7c3e31895b9674883adcf734827ccf1928 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Tue, 19 Nov 2024 11:32:03 +0500 Subject: [PATCH 082/156] [FLW-4972] Remove the word invest from banner --- fearless/en.lproj/Localizable.strings | 4 ++-- fearless/id.lproj/Localizable.strings | 4 ++-- fearless/ru.lproj/Localizable.strings | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/fearless/en.lproj/Localizable.strings b/fearless/en.lproj/Localizable.strings index 2c9dff8693..e5dbc602fd 100644 --- a/fearless/en.lproj/Localizable.strings +++ b/fearless/en.lproj/Localizable.strings @@ -521,7 +521,7 @@ Seed: %@"; "lp.apy.title" = "Strategic Bonus APY"; "lp.available.pools.title" = "Available pools"; "lp.banner.action.details.title" = "Show details"; -"lp.banner.text" = "Invest your funds in Liquidity\npools and receive rewards"; +"lp.banner.text" = "Join Liquidity Pools and gain rewards"; "lp.confirm.liquidity.screen.title" = "Confirm Liquidity"; "lp.confirm.liquidity.warning.text" = "Output is estimated. If the price changes more than 0.5% your transaction will revert."; "lp.liquidity.add.complete.text" = "Your supply to Liquidity pools has been successfully completed"; @@ -1253,4 +1253,4 @@ belongs to the right network"; "your.validators.change.validators.title" = "Change validators"; "your.validators.stop.nominating.title" = "Stop nominating"; "your.validators.validator.total.stake" = "Total staked: %@"; -"сurrencies.stub.text" = "Currencies"; \ No newline at end of file +"сurrencies.stub.text" = "Currencies"; diff --git a/fearless/id.lproj/Localizable.strings b/fearless/id.lproj/Localizable.strings index 0d94308619..c5e3a8066c 100644 --- a/fearless/id.lproj/Localizable.strings +++ b/fearless/id.lproj/Localizable.strings @@ -520,7 +520,7 @@ Seed: %@"; "lp.apy.title" = "Strategic Bonus APY"; "lp.available.pools.title" = "Available pools"; "lp.banner.action.details.title" = "Show details"; -"lp.banner.text" = "Invest your funds in Liquidity\npools and receive rewards"; +"lp.banner.text" = "Join Liquidity Pools and gain rewards"; "lp.confirm.liquidity.screen.title" = "Confirm Liquidity"; "lp.confirm.liquidity.warning.text" = "Output is estimated. If the price changes more than 0.5% your transaction will revert."; "lp.liquidity.add.complete.text" = "Your supply to Liquidity pools has been successfully completed"; @@ -1237,4 +1237,4 @@ akan muncul di sini"; "your.validators.change.validators.title" = "Ubah validator"; "your.validators.stop.nominating.title" = "berhenti mencalonkan diri"; "your.validators.validator.total.stake" = "Total ditaruhkan: %@"; -"сurrencies.stub.text" = "Mata uang"; \ No newline at end of file +"сurrencies.stub.text" = "Mata uang"; diff --git a/fearless/ru.lproj/Localizable.strings b/fearless/ru.lproj/Localizable.strings index ea33ef073a..740ce279cd 100644 --- a/fearless/ru.lproj/Localizable.strings +++ b/fearless/ru.lproj/Localizable.strings @@ -520,7 +520,7 @@ "lp.apy.title" = "Стратегический бонус APY"; "lp.available.pools.title" = "Доступные пулы"; "lp.banner.action.details.title" = "Показать подробности"; -"lp.banner.text" = "Инвестируйте свои средства в пулы\nликвидности и получайте награды."; +"lp.banner.text" = "Присоединяйтесь к пулам ликвидности и получите вознаграждения"; "lp.confirm.liquidity.screen.title" = "Подтвердите ликвидность"; "lp.confirm.liquidity.warning.text" = "Оценка результата. Если цена изменится более чем на 0.5%, ваша транзакция будет отменена"; "lp.liquidity.add.complete.text" = "Ваш вклад в пул ликвидности успешно завершен"; @@ -1251,4 +1251,4 @@ "your.validators.change.validators.title" = "Изменить валидаторов"; "your.validators.stop.nominating.title" = "Прекратить номинирование"; "your.validators.validator.total.stake" = "Всего в стейкинге: %@"; -"сurrencies.stub.text" = "Токены"; \ No newline at end of file +"сurrencies.stub.text" = "Токены"; From cf48b5880a89fd1f4c8e8d36c5c163c181fb6701 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Tue, 19 Nov 2024 12:26:03 +0500 Subject: [PATCH 083/156] [#FLW-5071] Wrong asset's icon --- .../ChainAssetList/Views/ChainAccountBalanceTableCell.swift | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/fearless/Modules/NewWallet/ChainAssetList/Views/ChainAccountBalanceTableCell.swift b/fearless/Modules/NewWallet/ChainAssetList/Views/ChainAccountBalanceTableCell.swift index 82507076e2..367f434b44 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/Views/ChainAccountBalanceTableCell.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/Views/ChainAccountBalanceTableCell.swift @@ -25,6 +25,7 @@ final class ChainAccountBalanceTableCell: SwipableTableViewCell { private var assetIconImageView: UIImageView = { let imageView = UIImageView() imageView.contentMode = .scaleAspectFit + imageView.layer.masksToBounds = true return imageView }() @@ -106,6 +107,11 @@ final class ChainAccountBalanceTableCell: SwipableTableViewCell { } } + override func layoutSubviews() { + super.layoutSubviews() + assetIconImageView.rounded() + } + // MARK: - Public methods func bind(to viewModel: ChainAccountBalanceCellViewModel) { From 2c8bad6c2e31278533466e5338afeb26cf7c301e Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Tue, 19 Nov 2024 14:28:45 +0500 Subject: [PATCH 084/156] build version has been increased --- fearless.xcodeproj/project.pbxproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index efb6762cb8..87bae42ea1 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -20379,7 +20379,7 @@ CODE_SIGN_ENTITLEMENTS = fearless/fearless.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 13; DEVELOPMENT_TEAM = YLWWUD25VZ; ENABLE_BITCODE = NO; INFOPLIST_FILE = fearless/Info.plist; @@ -20408,7 +20408,7 @@ CODE_SIGN_ENTITLEMENTS = fearless/fearless.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 13; DEVELOPMENT_TEAM = YLWWUD25VZ; ENABLE_BITCODE = NO; INFOPLIST_FILE = fearless/Info.plist; @@ -20547,7 +20547,7 @@ CODE_SIGN_ENTITLEMENTS = fearless/fearless.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 13; DEVELOPMENT_TEAM = YLWWUD25VZ; ENABLE_BITCODE = NO; INFOPLIST_FILE = fearless/Info.plist; From 712377f39a4ec00ec9ce5e35944d12bd65cf39cb Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Wed, 20 Nov 2024 14:19:12 +0500 Subject: [PATCH 085/156] [#FLW-5046] Main screen asset balance visibility --- .../Balance/TonRemoteBalanceFetching.swift | 34 +++++++++++++++---- .../ChainAssetListInteractor.swift | 4 +++ 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift b/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift index 9248d9473f..991be7ab75 100644 --- a/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift +++ b/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift @@ -44,7 +44,6 @@ actor TonRemoteBalanceFetchingImpl: AccountInfoRemoteService { guard let normal = chainAssets.slice.first else { throw TonRemoteBalanceFetchingError.utilityNotFound } - let jettons = chainAssets.remainder let chainAccountInfos = try await getChainAccountInfos( address: address, @@ -55,7 +54,7 @@ actor TonRemoteBalanceFetchingImpl: AccountInfoRemoteService { let jettonsAccountInfos = createJettonsAccountInfos( jettonBalances: jettonBalances, - jettons: jettons + chain: chain ) let jettonsAccountInfoMap = Dictionary( uniqueKeysWithValues: jettonsAccountInfos.map { ($0.0.chainAssetId, $0.1) } @@ -135,7 +134,7 @@ actor TonRemoteBalanceFetchingImpl: AccountInfoRemoteService { let jettonsAccountInfos = createJettonsAccountInfos( jettonBalances: jettonBalances, - jettons: jettons + chain: normal.chain ) let jettonsAccountInfoMap = Dictionary( uniqueKeysWithValues: jettonsAccountInfos.map { ($0.0.uniqueKey(accountId: accountId), $0.1) } @@ -171,16 +170,37 @@ actor TonRemoteBalanceFetchingImpl: AccountInfoRemoteService { private func createJettonsAccountInfos( jettonBalances: [TonJettonBalance], - jettons: [ChainAsset] + chain: ChainModel ) -> [(ChainAsset, AccountInfo)] { - let jettonsAccountInfo: [(ChainAsset, AccountInfo)] = jettonBalances.compactMap { jetton in - let chainAsset = jettons.first(where: { $0.asset.id == jetton.item.walletAddress.toRaw() }) - guard let chainAsset else { return nil } + let jettonsAccountInfo: [(ChainAsset, AccountInfo)] = jettonBalances.map { jetton in + let asset = createAssetModel(from: jetton) + let chainAsset = ChainAsset(chain: chain, asset: asset) return (chainAsset, AccountInfo(balance: jetton.quantity)) } return jettonsAccountInfo } + private func createAssetModel(from balanceInfo: TonJettonBalance) -> AssetModel { + AssetModel( + id: balanceInfo.item.walletAddress.toRaw(), + name: balanceInfo.item.jettonInfo.name, + symbol: balanceInfo.item.jettonInfo.symbol ?? balanceInfo.item.jettonInfo.name, + precision: UInt16(balanceInfo.item.jettonInfo.fractionDigits), + icon: balanceInfo.item.jettonInfo.imageURL, + currencyId: balanceInfo.item.jettonInfo.address.toRaw(), + existentialDeposit: nil, + color: nil, + isUtility: false, + isNative: false, + staking: nil, + purchaseProviders: nil, + assetType: .ton(tonType: .jetton), + priceProvider: nil, + coingeckoPriceId: nil, + priceData: balanceInfo.priceData + ) + } + private func getChainAccountInfos( address: String, currency: Currency diff --git a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListInteractor.swift b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListInteractor.swift index be73d3e80f..a38b4e99d2 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListInteractor.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListInteractor.swift @@ -121,6 +121,10 @@ final class ChainAssetListInteractor { sortDescriptors: sorts ) { [weak self] result in guard let result = result else { return } + if let chainAsset = try? result.get() { + self?.chainAssets = chainAsset + self?.subscribeToAccountInfo(for: chainAsset) + } self?.output?.didReceiveChainAssets(result: result) } } From 10c646bc247110df54e1d912ee1f685d11c4b402 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Wed, 20 Nov 2024 15:11:35 +0500 Subject: [PATCH 086/156] [#FLW-5072] Substrate. Update the app. On the swap screen there are not icons --- .../PolkaswapAdjustmentAssembly.swift | 3 ++- .../PolkaswapAdjustmentInteractor.swift | 15 +++++++++++++-- .../PolkaswapAdjustmentPresenter.swift | 8 +++++++- .../PolkaswapAdjustmentProtocols.swift | 1 + 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentAssembly.swift b/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentAssembly.swift index 898657b251..64f23fa70d 100644 --- a/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentAssembly.swift +++ b/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentAssembly.swift @@ -77,7 +77,8 @@ final class PolkaswapAdjustmentAssembly { operationFactory: operationFactory, operationManager: operationManager, userDefaultsStorage: SettingsManager.shared, - callFactory: callFactory + callFactory: callFactory, + chainModelRepo: ServiceAssembly.shared.asyncChainModelRepository() ) let router = PolkaswapAdjustmentRouter() diff --git a/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentInteractor.swift b/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentInteractor.swift index d2d602afd6..36c01601f2 100644 --- a/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentInteractor.swift +++ b/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentInteractor.swift @@ -14,10 +14,11 @@ final class PolkaswapAdjustmentInteractor: RuntimeConstantFetching { private let subscriptionService: PolkaswapRemoteSubscriptionServiceProtocol private let settingsRepository: AnyDataProviderRepository private let operationManager: OperationManagerProtocol - private let xorChainAsset: ChainAsset + private var xorChainAsset: ChainAsset private let extrinsicService: ExtrinsicServiceProtocol private let userDefaultsStorage: SettingsManagerProtocol private let callFactory: SubstrateCallFactoryProtocol + private let chainModelRepo: AsyncAnyRepository private var dexIds: [UInt32] = [] private var swapValues: [SwapValues] = [] @@ -35,7 +36,8 @@ final class PolkaswapAdjustmentInteractor: RuntimeConstantFetching { operationFactory: PolkaswapOperationFactoryProtocol, operationManager: OperationManagerProtocol, userDefaultsStorage: SettingsManagerProtocol, - callFactory: SubstrateCallFactoryProtocol + callFactory: SubstrateCallFactoryProtocol, + chainModelRepo: AsyncAnyRepository ) { self.xorChainAsset = xorChainAsset self.subscriptionService = subscriptionService @@ -47,6 +49,7 @@ final class PolkaswapAdjustmentInteractor: RuntimeConstantFetching { self.operationManager = operationManager self.userDefaultsStorage = userDefaultsStorage self.callFactory = callFactory + self.chainModelRepo = chainModelRepo } // MARK: - Private methods @@ -140,6 +143,14 @@ extension PolkaswapAdjustmentInteractor: PolkaswapAdjustmentInteractorInput { feeProxy.delegate = self fetchPolkaswapSettings() fetchDisclaimerVisible() + Task { [weak self] in + guard let self else { return } + let xorChainModel = try await chainModelRepo.fetch(by: xorChainAsset.chain.chainId) + if let utilityChainAsset = xorChainModel?.utilityChainAssets().first { + self.xorChainAsset = utilityChainAsset + self.output?.didReceive(xorChainAsset: utilityChainAsset) + } + } } func didReceive(_ fromChainAsset: ChainAsset?, _ toChainAsset: ChainAsset?) { diff --git a/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentPresenter.swift b/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentPresenter.swift index 9a12a333ee..a3a9762793 100644 --- a/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentPresenter.swift +++ b/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentPresenter.swift @@ -29,7 +29,7 @@ final class PolkaswapAdjustmentPresenter { private let logger: LoggerProtocol private var polkaswapRemoteSettings: PolkaswapRemoteSettings? - private let xorChainAsset: ChainAsset + private var xorChainAsset: ChainAsset private var swapVariant: SwapVariant = .desiredInput private var swapFromChainAsset: ChainAsset? private var swapToChainAsset: ChainAsset? @@ -738,6 +738,12 @@ extension PolkaswapAdjustmentPresenter: PolkaswapAdjustmentViewOutput { // MARK: - PolkaswapAdjustmentInteractorOutput extension PolkaswapAdjustmentPresenter: PolkaswapAdjustmentInteractorOutput { + func didReceive(xorChainAsset: SSFModels.ChainAsset) { + self.xorChainAsset = xorChainAsset + provideFromAssetVewModel() + provideToAssetVewModel() + } + func didReceive(error: Error) { logger.error("\(error)") } diff --git a/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentProtocols.swift b/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentProtocols.swift index 9324791964..3d697ccabf 100644 --- a/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentProtocols.swift +++ b/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentProtocols.swift @@ -64,6 +64,7 @@ protocol PolkaswapAdjustmentInteractorOutput: AnyObject { func didReceiveSettings(settings: PolkaswapRemoteSettings?) func updateQuotes() func didReceiveDisclaimer(isRead: Bool) + func didReceive(xorChainAsset: ChainAsset) } protocol PolkaswapAdjustmentRouterInput: PresentDismissable, ErrorPresentable, SheetAlertPresentable, BaseErrorPresentable { From 095d1fc1af559dae4f1ee055e69cf7931f5d35b4 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Wed, 20 Nov 2024 17:17:20 +0500 Subject: [PATCH 087/156] [#FLW-5074] Hide 1 TON asset. All assets are automatically hidden --- fearless/Common/Helpers/WalletAssetsObserver.swift | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fearless/Common/Helpers/WalletAssetsObserver.swift b/fearless/Common/Helpers/WalletAssetsObserver.swift index d617b684ed..30fc7a060a 100644 --- a/fearless/Common/Helpers/WalletAssetsObserver.swift +++ b/fearless/Common/Helpers/WalletAssetsObserver.swift @@ -66,6 +66,9 @@ final class WalletAssetsObserverImpl: WalletAssetsObserver { // MARK: - ApplicationServiceProtocol func setup() { + guard wallet.ecosystem.isRegular else { + return + } eventCenter.add(observer: self) chainRegistry.chainsSubscribe( self, From 0c9459cbaf947783723a0f975817debf2c10d7c2 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Wed, 20 Nov 2024 18:12:47 +0500 Subject: [PATCH 088/156] =?UTF-8?q?[#FLW-5079]=20The=20swap=20doesn?= =?UTF-8?q?=E2=80=99t=20work?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PolkaswapAdjustment/PolkaswapAdjustmentPresenter.swift | 2 +- .../Transfer/Validators/SendDataValidatingFactory.swift | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentPresenter.swift b/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentPresenter.swift index a3a9762793..8e80d2ae7d 100644 --- a/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentPresenter.swift +++ b/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentPresenter.swift @@ -710,7 +710,7 @@ extension PolkaswapAdjustmentPresenter: PolkaswapAdjustmentViewOutput { dataValidatingFactory.canPayFeeAndAmount( balanceType: .utility(balance: xorBalance), feeAndTip: networkFee, - sendAmount: .zero, + sendAmount: nil, locale: selectedLocale ), dataValidatingFactory.canPayFeeAndAmount( diff --git a/fearless/Modules/Transfer/Validators/SendDataValidatingFactory.swift b/fearless/Modules/Transfer/Validators/SendDataValidatingFactory.swift index 540eb33218..29e283b8c8 100644 --- a/fearless/Modules/Transfer/Validators/SendDataValidatingFactory.swift +++ b/fearless/Modules/Transfer/Validators/SendDataValidatingFactory.swift @@ -37,12 +37,11 @@ class SendDataValidatingFactory: NSObject { self?.basePresentable.presentAmountTooHigh(from: view, locale: locale) }, preservesCondition: { - let amount = sendAmount ?? 0 switch balanceType { case let .utility(balance): if let balance = balance, let feeAndTip = feeAndTip { - return amount + feeAndTip <= balance && amount > 0 + return sendAmount.or(.zero) + feeAndTip <= balance && sendAmount.or(1) > 0 } else { return false } @@ -50,7 +49,7 @@ class SendDataValidatingFactory: NSObject { if let balance = balance, let feeAndTip = feeAndTip, let utilityBalance = utilityBalance { - return amount <= balance && feeAndTip <= utilityBalance + return sendAmount.or(.zero) <= balance && feeAndTip <= utilityBalance } else { return false } From 9f615ab102124399b5adba35c4872254a83bc05d Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Thu, 21 Nov 2024 12:06:23 +0500 Subject: [PATCH 089/156] dapp background has been fixed --- .../Extension/Storage/CDTonDapp+CoreDataDecodable.swift | 4 ++-- .../DappBrowser/Cells/BrowserExploreFeaturedCell.swift | 2 +- .../Modules/DappBrowser/DappBrowserViewModelFactory.swift | 4 ++-- fearless/Modules/TonWebBridge/Models/TonDapp.swift | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/fearless/Common/Extension/Storage/CDTonDapp+CoreDataDecodable.swift b/fearless/Common/Extension/Storage/CDTonDapp+CoreDataDecodable.swift index 1e1f8e57e3..be9fb1e092 100644 --- a/fearless/Common/Extension/Storage/CDTonDapp+CoreDataDecodable.swift +++ b/fearless/Common/Extension/Storage/CDTonDapp+CoreDataDecodable.swift @@ -11,7 +11,7 @@ extension CDTonDapp: CoreDataCodable { name = try container.decode(String.self, forKey: .name) appDescription = try container.decode(String?.self, forKey: .description) icon = try container.decode(URL?.self, forKey: .icon) - poster = try container.decode(URL?.self, forKey: .poster) + poster = try container.decode(URL?.self, forKey: .background) url = try container.decode(URL.self, forKey: .url) } @@ -23,7 +23,7 @@ extension CDTonDapp: CoreDataCodable { try container.encode(name, forKey: .name) try container.encodeIfPresent(appDescription, forKey: .description) try container.encodeIfPresent(icon, forKey: .icon) - try container.encodeIfPresent(poster, forKey: .poster) + try container.encodeIfPresent(poster, forKey: .background) try container.encode(url, forKey: .url) try container.encode(identifier, forKey: .identifier) } diff --git a/fearless/Modules/DappBrowser/Cells/BrowserExploreFeaturedCell.swift b/fearless/Modules/DappBrowser/Cells/BrowserExploreFeaturedCell.swift index 89740a33eb..c5f10fc716 100644 --- a/fearless/Modules/DappBrowser/Cells/BrowserExploreFeaturedCell.swift +++ b/fearless/Modules/DappBrowser/Cells/BrowserExploreFeaturedCell.swift @@ -3,7 +3,7 @@ import UIKit final class DappBrowserFeaturedCell: UICollectionViewCell { let posterImageView: UIImageView = { let imageView = UIImageView() - imageView.contentMode = .scaleAspectFill + imageView.contentMode = .scaleAspectFit imageView.clipsToBounds = true return imageView }() diff --git a/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift b/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift index 64ec8b2455..62f258c2d9 100644 --- a/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift +++ b/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift @@ -149,7 +149,7 @@ final class DappBrowserViewModelFactoryImpl: DappBrowserViewModelFactory { name: $0.name, description: nil, icon: $0.iconUrl ?? TonConstants.tonIcon, - poster: nil, + background: nil, url: $0.appUrl ) } @@ -190,7 +190,7 @@ final class DappBrowserViewModelFactoryImpl: DappBrowserViewModelFactory { ) -> DappBrowserViewModel { let featured = dapps.map { DappBrowserFeaturedViewModel( - poster: RemoteImageViewModel(url: $0.poster) ?? BundleImageViewModel(image: R.image.featuredBanner()), + poster: RemoteImageViewModel(url: $0.background) ?? BundleImageViewModel(image: R.image.featuredBanner()), icon: RemoteImageViewModel(url: $0.icon), dappName: $0.name, dappDescription: $0.description ?? "", diff --git a/fearless/Modules/TonWebBridge/Models/TonDapp.swift b/fearless/Modules/TonWebBridge/Models/TonDapp.swift index b2bf7148a0..8760ffc851 100644 --- a/fearless/Modules/TonWebBridge/Models/TonDapp.swift +++ b/fearless/Modules/TonWebBridge/Models/TonDapp.swift @@ -7,7 +7,7 @@ struct TonDapp: Codable, Equatable, Identifiable { let name: String let description: String? let icon: URL - let poster: URL? + let background: URL? let url: URL enum CodingKeys: CodingKey { @@ -16,7 +16,7 @@ struct TonDapp: Codable, Equatable, Identifiable { case name case description case icon - case poster + case background case url } } From a2f1703276f527429af9ded1e8c8b3f15325ff3f Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Thu, 21 Nov 2024 15:52:25 +0500 Subject: [PATCH 090/156] [#FLW-5082] If we have replaced account then there is possibility for creating TON account with 12 words --- .../ViewModels/WalletDetailsViewModelFactory.swift | 5 ++++- fearless/Modules/WalletOption/WalletOptionViewLayout.swift | 1 - 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/fearless/Modules/WalletDetails/ViewModels/WalletDetailsViewModelFactory.swift b/fearless/Modules/WalletDetails/ViewModels/WalletDetailsViewModelFactory.swift index 208a9f5d3d..0e1e501783 100644 --- a/fearless/Modules/WalletDetails/ViewModels/WalletDetailsViewModelFactory.swift +++ b/fearless/Modules/WalletDetails/ViewModels/WalletDetailsViewModelFactory.swift @@ -64,7 +64,10 @@ class WalletDetailsViewModelFactory { } let emptyAccounts = filteredChains.filter { - flow.wallet.fetch(for: $0.accountRequest()) == nil + guard !$0.ecosystem.isTon else { + return false + } + return flow.wallet.fetch(for: $0.accountRequest()) == nil && !(flow.wallet.unusedChainIds ?? []).contains($0.chainId) } let nativeAccounts = filteredChains.filter { diff --git a/fearless/Modules/WalletOption/WalletOptionViewLayout.swift b/fearless/Modules/WalletOption/WalletOptionViewLayout.swift index 712db25a55..d8ab020bac 100644 --- a/fearless/Modules/WalletOption/WalletOptionViewLayout.swift +++ b/fearless/Modules/WalletOption/WalletOptionViewLayout.swift @@ -63,7 +63,6 @@ final class WalletOptionViewLayout: UIView { private lazy var buttons: [TriangularedButton] = { [ backupWalletButton, - walletDetailsButton, changeWalletNameButton, accountScoreButton, deleteWalletButton From 8f6e3abe475536996cc5a055d38a65c8d009c0d5 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Fri, 22 Nov 2024 10:24:32 +0500 Subject: [PATCH 091/156] =?UTF-8?q?[#FLW-5081]=20Settings.=20Changing=20cu?= =?UTF-8?q?rrency=20doesn=E2=80=99t=20work?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fearless/Modules/Profile/ProfileInteractor.swift | 4 ++++ .../Modules/SelectCurrency/SelectCurrencyRouter.swift | 9 +-------- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/fearless/Modules/Profile/ProfileInteractor.swift b/fearless/Modules/Profile/ProfileInteractor.swift index 9c65275f26..d0dc3162ba 100644 --- a/fearless/Modules/Profile/ProfileInteractor.swift +++ b/fearless/Modules/Profile/ProfileInteractor.swift @@ -136,6 +136,10 @@ extension ProfileInteractor: EventVisitorProtocol { func processWalletNameChanged(event: WalletNameChanged) { updateWallet(event.wallet) } + + func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { + provideUserSettings() + } } extension ProfileInteractor: WalletBalanceSubscriptionListener { diff --git a/fearless/Modules/SelectCurrency/SelectCurrencyRouter.swift b/fearless/Modules/SelectCurrency/SelectCurrencyRouter.swift index a94c76e8dd..95cdc2ca26 100644 --- a/fearless/Modules/SelectCurrency/SelectCurrencyRouter.swift +++ b/fearless/Modules/SelectCurrency/SelectCurrencyRouter.swift @@ -11,14 +11,7 @@ final class SelectCurrencyRouter: SelectCurrencyRouterInput { if viewIsModal { view?.controller.dismiss(animated: true) } else { - guard let navigationController = view?.controller.navigationController else { - return - } - - MainTransitionHelper.transitToMainTabBarController( - closing: navigationController, - animated: true - ) + view?.controller.navigationController?.popViewController(animated: true) } } From 06954888379e4efc25ff89c73026408355aa0f6e Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Fri, 22 Nov 2024 14:05:39 +0500 Subject: [PATCH 092/156] [#FLW-5085] Wallet connect does not work --- .../WalletConnectConfirmationAssembly.swift | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationAssembly.swift b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationAssembly.swift index 6c474efed1..d707fecf60 100644 --- a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationAssembly.swift +++ b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationAssembly.swift @@ -7,13 +7,7 @@ final class WalletConnectConfirmationAssembly { ) -> WalletConnectConfirmationModuleCreationResult? { let localizationManager = LocalizationManager.shared - guard - let accountResponse = inputData.wallet.fetch(for: inputData.chain.accountRequest()), - let bocFactory = try? ServiceAssembly.shared.tonBocFactory( - metaId: inputData.wallet.metaId, - accountResponse: accountResponse - ) - else { + guard let accountResponse = inputData.wallet.fetch(for: inputData.chain.accountRequest()) else { return nil } let interactor = WalletConnectConfirmationInteractor( From b7281a1aa59d92e796a870291d6195d9144c50a1 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Mon, 25 Nov 2024 12:25:42 +0500 Subject: [PATCH 093/156] [#FLW-5086] DOT/KSM. XCM. We should delegate MAX button --- fearless/Common/View/UIFactory.swift | 26 ++++++++---- .../CrossChain/CrossChainViewController.swift | 41 ++++++++++++++++--- 2 files changed, 53 insertions(+), 14 deletions(-) diff --git a/fearless/Common/View/UIFactory.swift b/fearless/Common/View/UIFactory.swift index f10995c5e1..edb12f79ce 100644 --- a/fearless/Common/View/UIFactory.swift +++ b/fearless/Common/View/UIFactory.swift @@ -71,8 +71,9 @@ protocol UIFactoryProtocol { func createActionsAccessoryView( for actions: [ViewSelectorAction], doneAction: ViewSelectorAction, - target: Any?, - spacing: CGFloat + target: AmountInputAccessoryViewDelegate?, + spacing: CGFloat, + toolBar: UIToolbar ) -> UIToolbar func createCommonInputView() -> CommonInputView func createAmountInputView(filled: Bool) -> AmountInputView @@ -279,10 +280,11 @@ final class UIFactory: UIFactoryProtocol { } func createActionsAccessoryView( - for _: [ViewSelectorAction], - doneAction _: ViewSelectorAction, - target _: Any?, - spacing _: CGFloat + for actions: [ViewSelectorAction], + doneAction: ViewSelectorAction, + target: AmountInputAccessoryViewDelegate?, + spacing: CGFloat, + toolBar: UIToolbar ) -> UIToolbar { let frame = CGRect( x: 0.0, @@ -291,9 +293,15 @@ final class UIFactory: UIFactoryProtocol { height: UIConstants.accessoryBarHeight ) - let toolBar = UIToolbar(frame: frame) - - return toolBar + let toolBar = AmountInputAccessoryView(frame: frame) + toolBar.actionDelegate = target + return createActionsAccessoryView( + for: toolBar, + actions: actions, + doneAction: doneAction, + target: toolBar, + spacing: spacing + ) } func createAmountAccessoryView( diff --git a/fearless/Modules/CrossChain/CrossChainViewController.swift b/fearless/Modules/CrossChain/CrossChainViewController.swift index 7897b7048d..7a1fa1a907 100644 --- a/fearless/Modules/CrossChain/CrossChainViewController.swift +++ b/fearless/Modules/CrossChain/CrossChainViewController.swift @@ -58,6 +58,7 @@ final class CrossChainViewController: UIViewController, ViewHolder, HiddableBarW super.viewDidLoad() output.didLoad(view: self) configure() + configureInputAccessoryView() } override func viewWillAppear(_ animated: Bool) { @@ -101,11 +102,6 @@ final class CrossChainViewController: UIViewController, ViewHolder, HiddableBarW self?.output.didTapPasteButton() } - let locale = localizationManager?.selectedLocale ?? Locale.current - let accessoryView = UIFactory - .default - .createAmountAccessoryView(for: self, locale: locale) - rootView.amountView.textField.inputAccessoryView = accessoryView rootView.amountView.textField.delegate = self rootView.searchView.textField.delegate = self updatePreviewButton() @@ -115,6 +111,41 @@ final class CrossChainViewController: UIViewController, ViewHolder, HiddableBarW let isEnabled = amountInputViewModel?.isValid == true && rootView.searchView.textField.text.or("").isNotEmpty && (rootView.searchView.isValid != nil) rootView.actionButton.set(enabled: isEnabled, changeStyle: true) } + + private func configureInputAccessoryView() { + let locale = localizationManager?.selectedLocale ?? Locale.current + let frame = CGRect( + x: 0.0, + y: 0.0, + width: UIScreen.main.bounds.width, + height: UIConstants.accessoryBarHeight + ) + + let toolBar = AmountInputAccessoryView(frame: frame) + toolBar.actionDelegate = self + let actions: [ViewSelectorAction] = [ + ViewSelectorAction(title: "75%", selector: #selector(toolBar.actionSelect75)), + ViewSelectorAction(title: "50%", selector: #selector(toolBar.actionSelect50)), + ViewSelectorAction(title: "25%", selector: #selector(toolBar.actionSelect25)) + ] + + let doneTitle = R.string.localizable.commonDone(preferredLanguages: locale.rLanguages) + let doneAction = ViewSelectorAction( + title: doneTitle, + selector: #selector(toolBar.actionSelectDone) + ) + + let accessoryView = UIFactory + .default + .createActionsAccessoryView( + for: actions, + doneAction: doneAction, + target: self, + spacing: UIConstants.accessoryItemsSpacing, + toolBar: toolBar + ) + rootView.amountView.textField.inputAccessoryView = accessoryView + } } // MARK: - CrossChainViewInput From 6db5176adf27b148483d75f564021eccc938b3dc Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Mon, 25 Nov 2024 16:54:26 +0500 Subject: [PATCH 094/156] [#FLW-5088] Try to send All XOR using MAX button. the commission is charged, but the transaction does not occur --- .../ConfirmTransferPresenter.swift | 2 +- .../Transfer/BokoloTransferFlowUseCase.swift | 99 +++++++++---------- .../EthereumTransferFlowUseCase.swift | 25 +++-- .../Transfer/SoraQrTransferFlowUseCase.swift | 7 +- .../SubstrateTransferFlowUseCase.swift | 9 +- .../Transfer/TonTransferFlowUseCase.swift | 65 ++++++------ .../Transfer/TransferFlowUseCase.swift | 5 +- .../Transfer/Transfer/TransferPresenter.swift | 4 +- 8 files changed, 105 insertions(+), 111 deletions(-) diff --git a/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferPresenter.swift b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferPresenter.swift index 3c17e61c8d..adb1adf39b 100644 --- a/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferPresenter.swift +++ b/fearless/Modules/Transfer/ConfirmTransfer/ConfirmTransferPresenter.swift @@ -81,7 +81,7 @@ final class ConfirmTransferPresenter { Task { do { guard - let transfer = useCase.transfer, + let transfer = useCase.getTransfer(), let chainAsset = useCase.selectedChainAsset else { throw ConvenienceError(error: "Missing required params") diff --git a/fearless/Modules/Transfer/Transfer/BokoloTransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/BokoloTransferFlowUseCase.swift index 04d1401f6a..1cadac0507 100644 --- a/fearless/Modules/Transfer/Transfer/BokoloTransferFlowUseCase.swift +++ b/fearless/Modules/Transfer/Transfer/BokoloTransferFlowUseCase.swift @@ -13,7 +13,6 @@ final class BokoloTransferFlowUseCase: TransferFlowUseCase { let interactor: TransferInteractorInput let implType: TransferFlowDirectionImpl = .bokoloCash - var transfer: TransferType? var selectedChainAsset: ChainAsset? var utilityChainAsset: ChainAsset? @@ -126,7 +125,6 @@ final class BokoloTransferFlowUseCase: TransferFlowUseCase { provideInputViewModel?() try await fetchRequiredInfo(for: qrChainAsset) - transfer = try buildTransfer() refreshFee() } @@ -162,7 +160,7 @@ final class BokoloTransferFlowUseCase: TransferFlowUseCase { let validators = [ dataValidatingFactory.has(fee: feeForValidation, locale: locale, onError: { [weak self] in - self?.refreshFee(for: self?.transfer) + self?.refreshFee(for: self?.getTransfer()) }), dataValidatingFactory.canPayFeeAndAmount( balanceType: balanceType, @@ -176,11 +174,57 @@ final class BokoloTransferFlowUseCase: TransferFlowUseCase { } } + func getTransfer() -> TransferType? { + let address = BokoloConstants.bokoloCasheBridgeAddress + guard + let availableInputBalance, + let selectedChainAsset, + let inputAmount = inputResult?.absoluteValue(from: availableInputBalance), + let amount = inputAmount.toSubstrateAmount(precision: Int16(selectedChainAsset.asset.precision)), + let receiver = try? AddressFactory.accountId( + from: address, + chain: selectedChainAsset.chain + ) + else { + return nil + } + + let fee = fee?.toSubstrateAmount(precision: Int16(selectedChainAsset.asset.precision)) ?? .zero + let feeReserve = BigUInt(10_000_000_000_000_000) + + let maxAmountIn = ((self.fee ?? .zero) * 1.5).toSubstrateAmount( + precision: Int16(selectedChainAsset.asset.precision) + ) + let filter: PolkaswapLiquidityFilterMode = .disabled + let filterMode = SSFTransferService.PolkaswapCallFilterModeType( + wrappedName: filter.code, + wrappedValue: nil + ) + + let dexId = String(bokoloSwapValues?.dexId ?? 0) + let soraAssetId = SSFUtils.SoraAssetId( + wrappedValue: BokoloConstants.bokoloCashAssetCurrencyId + ) + let xorless = SSFTransferService.XorlessTransfer( + dexId: dexId, + assetId: soraAssetId, + receiver: receiver, + amount: amount, + desiredXorAmount: fee + feeReserve, + maxAmountIn: maxAmountIn ?? .zero, + selectedSourceTypes: [], + filterMode: filterMode, + additionalData: bokoloCashId ?? Data() + ) + let transfer = TransferType.xorless(xorless) + return transfer + } + // MARK: - Private methods private func refreshFee() { guard - let transfer, + let transfer = getTransfer(), let selectedChainAsset else { return @@ -239,53 +283,6 @@ final class BokoloTransferFlowUseCase: TransferFlowUseCase { } } - private func buildTransfer() throws -> TransferType? { - guard - let availableInputBalance, - let selectedChainAsset, - let inputAmount = inputResult?.absoluteValue(from: availableInputBalance), - let amount = inputAmount.toSubstrateAmount(precision: Int16(selectedChainAsset.asset.precision)) - else { - return nil - } - - let address = BokoloConstants.bokoloCasheBridgeAddress - let receiver = try AddressFactory.accountId( - from: address, - chain: selectedChainAsset.chain - ) - - let fee = fee?.toSubstrateAmount(precision: Int16(selectedChainAsset.asset.precision)) ?? .zero - let feeReserve = BigUInt(10_000_000_000_000_000) - - let maxAmountIn = ((self.fee ?? .zero) * 1.5).toSubstrateAmount( - precision: Int16(selectedChainAsset.asset.precision) - ) - let filter: PolkaswapLiquidityFilterMode = .disabled - let filterMode = SSFTransferService.PolkaswapCallFilterModeType( - wrappedName: filter.code, - wrappedValue: nil - ) - - let dexId = String(bokoloSwapValues?.dexId ?? 0) - let soraAssetId = SSFUtils.SoraAssetId( - wrappedValue: BokoloConstants.bokoloCashAssetCurrencyId - ) - let xorless = SSFTransferService.XorlessTransfer( - dexId: dexId, - assetId: soraAssetId, - receiver: receiver, - amount: amount, - desiredXorAmount: fee + feeReserve, - maxAmountIn: maxAmountIn ?? .zero, - selectedSourceTypes: [], - filterMode: filterMode, - additionalData: bokoloCashId ?? Data() - ) - let transfer = TransferType.xorless(xorless) - return transfer - } - private func fetchRequiredInfo(for chainAsset: ChainAsset) async throws { guard let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId else { throw TransferFlowUseCaseError.missingAccount diff --git a/fearless/Modules/Transfer/Transfer/EthereumTransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/EthereumTransferFlowUseCase.swift index fd46d6de9f..5b2f73e5f9 100644 --- a/fearless/Modules/Transfer/Transfer/EthereumTransferFlowUseCase.swift +++ b/fearless/Modules/Transfer/Transfer/EthereumTransferFlowUseCase.swift @@ -10,7 +10,6 @@ final class EthereumTransferFlowUseCase: TransferFlowUseCase { let interactor: TransferInteractorInput let implType: TransferFlowDirectionImpl = .ethereum - var transfer: TransferType? var selectedChainAsset: ChainAsset? var utilityChainAsset: ChainAsset? @@ -102,7 +101,7 @@ final class EthereumTransferFlowUseCase: TransferFlowUseCase { fee: fee, locale: locale ) { [weak self] in - guard let transfer = self?.transfer else { + guard let transfer = self?.getTransfer() else { return } self?.refreshFee(for: transfer) @@ -118,16 +117,7 @@ final class EthereumTransferFlowUseCase: TransferFlowUseCase { } } - // MARK: - Private methods - - private func calcFee() { - guard let transfer = buildEthereumTransfer() else { - return - } - refreshFee(for: transfer) - } - - private func buildEthereumTransfer() -> TransferType? { + func getTransfer() -> TransferType? { guard let availableInputBalance, let selectedChainAsset, @@ -135,7 +125,6 @@ final class EthereumTransferFlowUseCase: TransferFlowUseCase { let inputAmount = inputResult?.absoluteValue(from: availableInputBalance), let amount = inputAmount.toSubstrateAmount(precision: Int16(selectedChainAsset.asset.precision)) else { - transfer = nil return nil } @@ -144,10 +133,18 @@ final class EthereumTransferFlowUseCase: TransferFlowUseCase { receiver: recipientAddress ) let transfer = TransferType.ethereum(ethereumTransfer) - self.transfer = transfer return transfer } + // MARK: - Private methods + + private func calcFee() { + guard let transfer = getTransfer() else { + return + } + refreshFee(for: transfer) + } + private func fetchRequiredInfo(for chainAsset: ChainAsset) async throws { guard let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId else { throw TransferFlowUseCaseError.missingAccount diff --git a/fearless/Modules/Transfer/Transfer/SoraQrTransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/SoraQrTransferFlowUseCase.swift index d603b451c5..054681e596 100644 --- a/fearless/Modules/Transfer/Transfer/SoraQrTransferFlowUseCase.swift +++ b/fearless/Modules/Transfer/Transfer/SoraQrTransferFlowUseCase.swift @@ -11,7 +11,6 @@ final class SoraQrTransferFlowUseCase: TransferFlowUseCase { let interactor: TransferInteractorInput let implType: TransferFlowDirectionImpl = .soraMainnetQr - var transfer: TransferType? var selectedChainAsset: ChainAsset? var utilityChainAsset: ChainAsset? @@ -119,7 +118,7 @@ final class SoraQrTransferFlowUseCase: TransferFlowUseCase { fee: fee, locale: locale ) { [weak self] in - guard let transfer = self?.transfer else { + guard let transfer = self?.getTransfer() else { return } self?.refreshFee(for: transfer) @@ -135,6 +134,10 @@ final class SoraQrTransferFlowUseCase: TransferFlowUseCase { } } + func getTransfer() -> TransferType? { + buildSubstrateTransfer() + } + // MARK: - Private methods private func calcFee() { diff --git a/fearless/Modules/Transfer/Transfer/SubstrateTransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/SubstrateTransferFlowUseCase.swift index 848e4df9c0..59b7e8b841 100644 --- a/fearless/Modules/Transfer/Transfer/SubstrateTransferFlowUseCase.swift +++ b/fearless/Modules/Transfer/Transfer/SubstrateTransferFlowUseCase.swift @@ -11,7 +11,6 @@ final class SubstrateTransferFlowUseCase: TransferFlowUseCase { let interactor: TransferInteractorInput let implType: TransferFlowDirectionImpl = .substrate - var transfer: TransferType? var selectedChainAsset: ChainAsset? var utilityChainAsset: ChainAsset? @@ -113,7 +112,7 @@ final class SubstrateTransferFlowUseCase: TransferFlowUseCase { self?.inputResult = .rate(1.0) self?.provideAssetViewModel?() self?.provideInputViewModel?() - self?.refreshFee(for: self?.transfer) + self?.refreshFee(for: self?.getTransfer()) }, cancelAction: { [weak self] in self?.sendAllEnabled = false @@ -136,7 +135,7 @@ final class SubstrateTransferFlowUseCase: TransferFlowUseCase { fee: fee, locale: locale, onError: { [weak self] in - self?.refreshFee(for: self?.transfer) + self?.refreshFee(for: self?.getTransfer()) } ), dataValidatingFactory.canPayFeeAndAmount( @@ -149,6 +148,10 @@ final class SubstrateTransferFlowUseCase: TransferFlowUseCase { } } + func getTransfer() -> TransferType? { + buildSubstrateTransfer() + } + // MARK: - Private methods private func calcFee() { diff --git a/fearless/Modules/Transfer/Transfer/TonTransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/TonTransferFlowUseCase.swift index 8e057c00e1..abe24f6974 100644 --- a/fearless/Modules/Transfer/Transfer/TonTransferFlowUseCase.swift +++ b/fearless/Modules/Transfer/Transfer/TonTransferFlowUseCase.swift @@ -11,7 +11,6 @@ final class TonTransferFlowUseCase: TransferFlowUseCase { let interactor: TransferInteractorInput let implType: TransferFlowDirectionImpl = .ton - var transfer: TransferType? var selectedChainAsset: ChainAsset? var utilityChainAsset: ChainAsset? @@ -103,7 +102,7 @@ final class TonTransferFlowUseCase: TransferFlowUseCase { fee: fee, locale: locale ) { [weak self] in - guard let transfer = self?.transfer else { + guard let transfer = self?.getTransfer() else { return } self?.refreshFee(for: transfer) @@ -119,36 +118,7 @@ final class TonTransferFlowUseCase: TransferFlowUseCase { } } - // MARK: - Private methods - - private func calcFee() { - guard - let transfer = buildTonTransfer(), - let selectedChainAsset, - let utilityChainAsset - else { - return - } - provideFeeViewModel?() - Task { [weak self] in - guard let self else { return } - let stream = await self.interactor.estimateFee( - transfer: transfer, - chainAsset: selectedChainAsset - ) - let precision = Int16(utilityChainAsset.asset.precision) - do { - for try await fee in stream { - self.fee = Decimal.fromSubstrateAmount(fee, precision: precision) - self.provideFeeViewModel?() - } - } catch { - logger.customError(error) - } - } - } - - private func buildTonTransfer() -> TransferType? { + func getTransfer() -> TransferType? { guard let availableInputBalance, let selectedChainAsset, @@ -158,7 +128,6 @@ final class TonTransferFlowUseCase: TransferFlowUseCase { let recipientAddress = getRecipientAddress(), let contract = wallet.ecosystem.tonWalletContract() else { - transfer = nil return nil } @@ -187,10 +156,38 @@ final class TonTransferFlowUseCase: TransferFlowUseCase { comment: comment ) let transfer = TransferType.ton(tonTransfer) - self.transfer = transfer return transfer } + // MARK: - Private methods + + private func calcFee() { + guard + let transfer = getTransfer(), + let selectedChainAsset, + let utilityChainAsset + else { + return + } + provideFeeViewModel?() + Task { [weak self] in + guard let self else { return } + let stream = await self.interactor.estimateFee( + transfer: transfer, + chainAsset: selectedChainAsset + ) + let precision = Int16(utilityChainAsset.asset.precision) + do { + for try await fee in stream { + self.fee = Decimal.fromSubstrateAmount(fee, precision: precision) + self.provideFeeViewModel?() + } + } catch { + logger.customError(error) + } + } + } + private func getRecipientAddress() -> RecipientAddress? { guard let recipientAddress else { return nil diff --git a/fearless/Modules/Transfer/Transfer/TransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/TransferFlowUseCase.swift index 406c813ead..662c617864 100644 --- a/fearless/Modules/Transfer/Transfer/TransferFlowUseCase.swift +++ b/fearless/Modules/Transfer/Transfer/TransferFlowUseCase.swift @@ -26,7 +26,6 @@ enum TransferValidationCase { protocol TransferFlowUseCase: AnyObject { var interactor: TransferInteractorInput { get } var implType: TransferFlowDirectionImpl { get } - var transfer: TransferType? { get set } var selectedChainAsset: ChainAsset? { get set } var utilityChainAsset: ChainAsset? { get set } @@ -64,6 +63,7 @@ protocol TransferFlowUseCase: AnyObject { validationCase: TransferValidationCase, locale: Locale ) throws -> [DataValidating] + func getTransfer() -> TransferType? } extension TransferFlowUseCase { @@ -76,7 +76,6 @@ extension TransferFlowUseCase { } func reset() async { - transfer = nil selectedChainAsset = nil utilityChainAsset = nil inputResult = nil @@ -173,7 +172,6 @@ extension TransferFlowUseCase { let inputAmount = inputResult?.absoluteValue(from: availableInputBalance), let amount = inputAmount.toSubstrateAmount(precision: Int16(selectedChainAsset.asset.precision)) else { - transfer = nil return nil } let tip = tip?.toSubstrateAmount(precision: Int16(selectedChainAsset.asset.precision)) @@ -183,7 +181,6 @@ extension TransferFlowUseCase { tip: tip ) let transfer = TransferType.substrate(subtrateTransfer) - self.transfer = transfer return transfer } diff --git a/fearless/Modules/Transfer/Transfer/TransferPresenter.swift b/fearless/Modules/Transfer/Transfer/TransferPresenter.swift index 06a470d7e1..16d5db78c4 100644 --- a/fearless/Modules/Transfer/Transfer/TransferPresenter.swift +++ b/fearless/Modules/Transfer/Transfer/TransferPresenter.swift @@ -698,7 +698,7 @@ extension TransferPresenter: TransferViewOutput { Task { await provideIsReady() } - guard let transfer = currentFlowUseCase?.transfer else { + guard let transfer = currentFlowUseCase?.getTransfer() else { return } currentFlowUseCase?.refreshFee(for: transfer) @@ -725,7 +725,7 @@ extension TransferPresenter: TransferViewOutput { await provideIsReady() } - guard let transfer = currentFlowUseCase?.transfer else { + guard let transfer = currentFlowUseCase?.getTransfer() else { return } currentFlowUseCase?.refreshFee(for: transfer) From 7650aea820e063fcc123932ec92d4be394385647 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Tue, 26 Nov 2024 14:54:40 +0500 Subject: [PATCH 095/156] [#FLW-5080] Reef Staking. Try to change the validators. Eternal loader --- .../RelaychainValidatorOperationFactory.swift | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fearless/Modules/Staking/Operations/ValidatorOperationFactory/RelaychainValidatorOperationFactory.swift b/fearless/Modules/Staking/Operations/ValidatorOperationFactory/RelaychainValidatorOperationFactory.swift index 78c349d2a3..d014f7f851 100644 --- a/fearless/Modules/Staking/Operations/ValidatorOperationFactory/RelaychainValidatorOperationFactory.swift +++ b/fearless/Modules/Staking/Operations/ValidatorOperationFactory/RelaychainValidatorOperationFactory.swift @@ -708,7 +708,12 @@ extension RelaychainValidatorOperationFactory: ValidatorOperationFactoryProtocol storagePath: .validatorPrefs, type: .accountId ) - accountId = try key.toAccountId(using: self.chain.chainFormat) + + if key.hasPrefix("0x") { + accountId = try AccountId(hexStringSSF: key) + } else { + accountId = try SS58AddressFactory().accountId(from: key) + } } else { let extractor = StorageKeyDataExtractor(runtimeService: runtimeService) let key: AccountId = try await extractor.extractKey( From 957f4f141ba3e0c802a7cccadeadf9983c73e492 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Tue, 26 Nov 2024 15:42:01 +0500 Subject: [PATCH 096/156] [#FLW-5090] We should block the possibility selecting the networks on the browser --- .../DappBrowser/DappBrowserPresenter.swift | 3 +- .../DappBrowserViewController.swift | 1 + .../DappBrowserViewModelFactory.swift | 56 +++++++++++-------- 3 files changed, 36 insertions(+), 24 deletions(-) diff --git a/fearless/Modules/DappBrowser/DappBrowserPresenter.swift b/fearless/Modules/DappBrowser/DappBrowserPresenter.swift index f461693a18..debcffdf2c 100644 --- a/fearless/Modules/DappBrowser/DappBrowserPresenter.swift +++ b/fearless/Modules/DappBrowser/DappBrowserPresenter.swift @@ -80,7 +80,8 @@ final class DappBrowserPresenter { let viewModel = viewModelFactory.buildNetworkFilterViewModel( chains: try await interactor.chains, filter: interactor.filter, - locale: selectedLocale + locale: selectedLocale, + wallet: wallet ) Task { @MainActor in view?.didReceive(viewModel: viewModel) diff --git a/fearless/Modules/DappBrowser/DappBrowserViewController.swift b/fearless/Modules/DappBrowser/DappBrowserViewController.swift index ea15090602..c9cdf9ab00 100644 --- a/fearless/Modules/DappBrowser/DappBrowserViewController.swift +++ b/fearless/Modules/DappBrowser/DappBrowserViewController.swift @@ -121,6 +121,7 @@ extension DappBrowserViewController: DappBrowserViewInput { } func didReceive(viewModel: DappBrowsetNetworkFilterViewModel?) { + rootView.selectNetworkButton.applySelectableStyle(false) rootView.selectNetworkButton.isHidden = viewModel == nil guard let viewModel else { return diff --git a/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift b/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift index 62f258c2d9..3063c215c2 100644 --- a/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift +++ b/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift @@ -21,7 +21,8 @@ protocol DappBrowserViewModelFactory { func buildNetworkFilterViewModel( chains: [ChainModel], filter: NetworkManagmentFilter, - locale: Locale + locale: Locale, + wallet: MetaAccountModel ) -> DappBrowsetNetworkFilterViewModel? } @@ -55,31 +56,40 @@ final class DappBrowserViewModelFactoryImpl: DappBrowserViewModelFactory { func buildNetworkFilterViewModel( chains: [ChainModel], filter: NetworkManagmentFilter, - locale: Locale + locale: Locale, + wallet: MetaAccountModel ) -> DappBrowsetNetworkFilterViewModel? { - let selectedFilterName: String - let selectedFilterImage: ImageViewModelProtocol? - switch filter { - case let .chain(id): - let selectedChain = chains.first(where: { $0.chainId == id }) - selectedFilterName = selectedChain?.name ?? "" - selectedFilterImage = selectedChain?.icon.map { RemoteImageViewModel(url: $0) } - case .all: - selectedFilterName = R.string.localizable.chainSelectionAllNetworks( - preferredLanguages: locale.rLanguages + switch wallet.ecosystem { + case .regular: + let selectedFilterName: String + let selectedFilterImage: ImageViewModelProtocol? + switch filter { + case let .chain(id): + let selectedChain = chains.first(where: { $0.chainId == id }) + selectedFilterName = selectedChain?.name ?? "" + selectedFilterImage = selectedChain?.icon.map { RemoteImageViewModel(url: $0) } + case .all: + selectedFilterName = R.string.localizable.chainSelectionAllNetworks( + preferredLanguages: locale.rLanguages + ) + selectedFilterImage = filter.filterImage + case .popular: + selectedFilterName = R.string.localizable.networkManagementPopular(preferredLanguages: locale.rLanguages) + selectedFilterImage = filter.filterImage + case .favourite: + selectedFilterName = R.string.localizable.networkManagmentFavourite(preferredLanguages: locale.rLanguages) + selectedFilterImage = filter.filterImage + } + return DappBrowsetNetworkFilterViewModel( + networkName: selectedFilterName, + image: selectedFilterImage + ) + case .ton: + return DappBrowsetNetworkFilterViewModel( + networkName: "Ton Mainnet", + image: BundleImageViewModel(image: R.image.tonIcon()) ) - selectedFilterImage = filter.filterImage - case .popular: - selectedFilterName = R.string.localizable.networkManagementPopular(preferredLanguages: locale.rLanguages) - selectedFilterImage = filter.filterImage - case .favourite: - selectedFilterName = R.string.localizable.networkManagmentFavourite(preferredLanguages: locale.rLanguages) - selectedFilterImage = filter.filterImage } - return DappBrowsetNetworkFilterViewModel( - networkName: selectedFilterName, - image: selectedFilterImage - ) } // MARK: - Private methods From ac655b39f515cfd344116205114bede39513f106 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Wed, 27 Nov 2024 11:22:49 +0500 Subject: [PATCH 097/156] [#FLW-5057] Increasing clickable area of banner --- fearless/Modules/Banners/BannersViewController.swift | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/fearless/Modules/Banners/BannersViewController.swift b/fearless/Modules/Banners/BannersViewController.swift index 3330a4a738..97926da977 100644 --- a/fearless/Modules/Banners/BannersViewController.swift +++ b/fearless/Modules/Banners/BannersViewController.swift @@ -91,4 +91,11 @@ extension BannersViewController: UICollectionViewDelegate { rootView.pageControl.currentPage = Int(offSet + horizontalCenter) / Int(width) } + + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + guard let viewModel = dataSource?.data[safe: indexPath.row] else { + return + } + output.didTapOnBanner(viewModel.bannerType) + } } From ee510fd382f8e2559d8ab16d25ef29f4c253953b Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Wed, 27 Nov 2024 11:30:42 +0500 Subject: [PATCH 098/156] [#FLW-5070] Some times there are 3 testnet icons on WND --- .../Common/ViewModelFactory/ChainOptionsViewModelFactory.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fearless/Common/ViewModelFactory/ChainOptionsViewModelFactory.swift b/fearless/Common/ViewModelFactory/ChainOptionsViewModelFactory.swift index 06542f9da2..5233477941 100644 --- a/fearless/Common/ViewModelFactory/ChainOptionsViewModelFactory.swift +++ b/fearless/Common/ViewModelFactory/ChainOptionsViewModelFactory.swift @@ -7,7 +7,7 @@ protocol ChainOptionsViewModelFactoryProtocol { extension ChainOptionsViewModelFactoryProtocol { func buildChainOptionsViewModel(chainAsset: ChainAsset) -> [ChainOptionsViewModel]? { - let presentableOptions = [ChainOptions.testnet] + let presentableOptions: [ChainOptions] = [] var viewModels: [ChainOptionsViewModel] = [] From b4bf4fb4b823a078f1f74da46cb27e75fc830171 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Wed, 27 Nov 2024 11:54:15 +0500 Subject: [PATCH 099/156] [#FLW-5073] Export TON account. We should delete Advanced Field --- .../ExportGenericViewController.swift | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/fearless/Modules/Export/ExportGenericView/ExportGenericViewController.swift b/fearless/Modules/Export/ExportGenericView/ExportGenericViewController.swift index 68ced83020..2842badba1 100644 --- a/fearless/Modules/Export/ExportGenericView/ExportGenericViewController.swift +++ b/fearless/Modules/Export/ExportGenericView/ExportGenericViewController.swift @@ -46,15 +46,12 @@ final class ExportGenericViewController: UIViewController, ImportantViewProtocol } switch (option, flow) { case let (.mnemonic, flow): - if case let .multiple(wallet, _) = flow { - switch flow.wallet.ecosystem { - case .regular: - return true - case .ton: - return false - } + switch flow.wallet.ecosystem { + case .regular: + return true + case .ton: + return false } - return true case let (.seed, flow): if case let .single(chain, _, _) = flow, chain.isEthereumBased { return false From 8c14e93fa8423f837c6bde2aa20b5eec4f1aed07 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Wed, 27 Nov 2024 12:14:20 +0500 Subject: [PATCH 100/156] [#FLW-5078] TON wallet. There is no icons if we are scanning Substrate QR --- .../AddressChainDefiner.swift | 11 +++- .../Transfer/Transfer/TransferPresenter.swift | 50 +++++++++---------- 2 files changed, 35 insertions(+), 26 deletions(-) diff --git a/fearless/Common/AddressChainDefiner/AddressChainDefiner.swift b/fearless/Common/AddressChainDefiner/AddressChainDefiner.swift index eae991342e..bf548a9901 100644 --- a/fearless/Common/AddressChainDefiner/AddressChainDefiner.swift +++ b/fearless/Common/AddressChainDefiner/AddressChainDefiner.swift @@ -58,7 +58,7 @@ final class AddressChainDefiner { guard strongSelf.chainIsEnabled(chain: chain) else { return false } - return strongSelf.validate(address: address, for: chain).isValidOrSame + return strongSelf.validate(address: address, for: chain).isValidOrSame && strongSelf.validateEcosystem(for: chain) } continuation.resume(returning: posssibleChains) } @@ -75,6 +75,15 @@ final class AddressChainDefiner { return .valid(address) } + private func validateEcosystem(for chain: ChainModel) -> Bool { + switch wallet.ecosystem { + case .regular: + return !chain.ecosystem.isTon + case .ton: + return chain.ecosystem.isTon + } + } + private func chainIsEnabled(chain: ChainModel) -> Bool { let chainAssets = chain.chainAssets let enabledAssetIds: [String] = wallet.assetsVisibility diff --git a/fearless/Modules/Transfer/Transfer/TransferPresenter.swift b/fearless/Modules/Transfer/Transfer/TransferPresenter.swift index 16d5db78c4..6b2d13dc08 100644 --- a/fearless/Modules/Transfer/Transfer/TransferPresenter.swift +++ b/fearless/Modules/Transfer/Transfer/TransferPresenter.swift @@ -615,6 +615,31 @@ final class TransferPresenter { ) router.present(viewModel: alertViewModel, from: view) } + + private func handleDesiredCrypto(qrInfo: DesiredCryptocurrencyQRInfo) async throws { + let possibleChains = await interactor.getPossibleChains(for: qrInfo.address) + let chainAsset = possibleChains + .first(where: { $0.name.lowercased() == qrInfo.assetName.lowercased() })? + .chainAssets + .first(where: { $0.asset.isUtility }) + + guard let chainAsset else { + await showUnsupportedAssetAlert() + return + } + + await setCurrentFlow(for: chainAsset.chain.ecosystem) + currentFlowUseCase?.recipientAddress = qrInfo.address + currentFlowUseCase?.isValidRecipient = true + currentFlowUseCase?.canEditRecipient = false + + if let qrAmount = Decimal(string: qrInfo.amount ?? "") { + currentFlowUseCase?.inputResult = .absolute(qrAmount) + currentFlowUseCase?.isUserInteractiveAmount = false + } + + try await currentFlowUseCase?.handle(initialData: .chainAsset(chainAsset /* , address: qrInfo.address */ )) + } } // MARK: - TransferViewOutput @@ -743,31 +768,6 @@ extension TransferPresenter: TransferViewOutput { await handleSendFlow(address: nil) } } - - private func handleDesiredCrypto(qrInfo: DesiredCryptocurrencyQRInfo) async throws { - let possibleChains = await interactor.getPossibleChains(for: qrInfo.address) - let chainAsset = possibleChains - .first(where: { $0.name.lowercased() == qrInfo.assetName.lowercased() })? - .chainAssets - .first(where: { $0.asset.isUtility }) - - guard let chainAsset else { - await showUnsupportedAssetAlert() - return - } - - await setCurrentFlow(for: chainAsset.chain.ecosystem) - currentFlowUseCase?.recipientAddress = qrInfo.address - currentFlowUseCase?.isValidRecipient = true - currentFlowUseCase?.canEditRecipient = false - - if let qrAmount = Decimal(string: qrInfo.amount ?? "") { - currentFlowUseCase?.inputResult = .absolute(qrAmount) - currentFlowUseCase?.isUserInteractiveAmount = false - } - - try await currentFlowUseCase?.handle(initialData: .chainAsset(chainAsset /* , address: qrInfo.address */ )) - } } // MARK: - TransferInteractorOutput From 26c906feb29b54f37da788d389a8c12e10c36369 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Wed, 27 Nov 2024 12:23:03 +0500 Subject: [PATCH 101/156] [#FLW-5067] We can see multiple times warning screen on the Export --- .../Export/ExportMnemonic/ExportMnemonicPresenter.swift | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicPresenter.swift b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicPresenter.swift index 65aad2ed8a..5fd3ea1415 100644 --- a/fearless/Modules/Export/ExportMnemonic/ExportMnemonicPresenter.swift +++ b/fearless/Modules/Export/ExportMnemonic/ExportMnemonicPresenter.swift @@ -12,6 +12,7 @@ final class ExportMnemonicPresenter { let localizationManager: LocalizationManager private(set) var exportDatas: [ExportMnemonicData]? + private(set) var isShownAlert = false init(flow: ExportFlow, localizationManager: LocalizationManager) { self.flow = flow @@ -55,6 +56,9 @@ final class ExportMnemonicPresenter { extension ExportMnemonicPresenter: ExportGenericPresenterProtocol { func didLoadView() { + guard !isShownAlert else { + return + } let locale = localizationManager.selectedLocale let title = R.string.localizable.accountExportWarningTitle(preferredLanguages: locale.rLanguages) @@ -72,6 +76,9 @@ extension ExportMnemonicPresenter: ExportGenericPresenterProtocol { message: message, actions: [exportAction, cancelAction], closeAction: nil, + dismissCompletion: { [weak self] in + self?.isShownAlert = true + }, icon: R.image.iconWarningBig() ) From 730069aebb66f650e3b3b5ae969f69afccd547bc Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Wed, 27 Nov 2024 12:36:37 +0500 Subject: [PATCH 102/156] [#FLW-5089] We need to delete 3 dots button on the Export flow --- .../Modules/BackupWallet/BackupWalletViewModelFactory.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fearless/Modules/BackupWallet/BackupWalletViewModelFactory.swift b/fearless/Modules/BackupWallet/BackupWalletViewModelFactory.swift index 00df9bbc59..72eff87785 100644 --- a/fearless/Modules/BackupWallet/BackupWalletViewModelFactory.swift +++ b/fearless/Modules/BackupWallet/BackupWalletViewModelFactory.swift @@ -185,7 +185,7 @@ final class BackupWalletViewModelFactory: BackupWalletViewModelFactoryProtocol { fiatBalance: fiatBalance, dayChange: dayChange, accountScoreViewModel: accountScoreViewModel, - optionsAvailable: wallet.ecosystem.isRegular + optionsAvailable: false ) } From beaf90ebd12c41466cc17c7ff88a9c53f9ebd990 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Fri, 29 Nov 2024 16:51:55 +0500 Subject: [PATCH 103/156] [#FLW-5046] Main screen asset balance visibility --- .../WalletBalanceSubscriptionAdapter.swift | 122 +-- .../ChainSubstrateV8MigrationPolicy.swift | 25 + .../xcmapping.xml | 849 ++++++++++++++++++ 3 files changed, 946 insertions(+), 50 deletions(-) create mode 100644 fearless/Common/Storage/Migration/SubstrateStorage/ChainSubstrateV8MigrationPolicy.swift create mode 100644 fearless/Common/Storage/MigrationMappings/SubstrateV7toV8.xcmappingmodel/xcmapping.xml diff --git a/fearless/ApplicationLayer/Services/Balance/WalletBalanceSubscription/WalletBalanceSubscriptionAdapter.swift b/fearless/ApplicationLayer/Services/Balance/WalletBalanceSubscription/WalletBalanceSubscriptionAdapter.swift index 51e560e2fc..d90f8343d7 100644 --- a/fearless/ApplicationLayer/Services/Balance/WalletBalanceSubscription/WalletBalanceSubscriptionAdapter.swift +++ b/fearless/ApplicationLayer/Services/Balance/WalletBalanceSubscription/WalletBalanceSubscriptionAdapter.swift @@ -111,25 +111,33 @@ final class WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterPr wallet: MetaAccountModel, listener: WalletBalanceSubscriptionListener ) { - let weakListener = WeakWrapper(target: listener) - listenersLock.exclusivelyWrite { [weak self] in - self?.listeners.append(weakListener) - } - updateWalletsIfNeeded(with: wallet) - if let balances = buildBalance(for: [wallet], chainAssets: chainAssets) { - notify(listener: listener, result: .success(balances)) + Task { + try await updateLocalBalances(wallets: [wallet], chainAssets: chainAssets) + + let weakListener = WeakWrapper(target: listener) + listenersLock.exclusivelyWrite { [weak self] in + self?.listeners.append(weakListener) + } + updateWalletsIfNeeded(with: wallet) + if let balances = buildBalance(for: [wallet], chainAssets: chainAssets) { + notify(listener: listener, result: .success(balances)) + } } } func subscribeWalletsBalances( listener: WalletBalanceSubscriptionListener ) { - let weakListener = WeakWrapper(target: listener) - listenersLock.exclusivelyWrite { [weak self] in - self?.listeners.append(weakListener) - } - if let balances = buildBalance(for: wallets, chainAssets: chainAssets) { - notify(listener: listener, result: .success(balances)) + Task { + try await updateLocalBalances(wallets: wallets, chainAssets: chainAssets) + + let weakListener = WeakWrapper(target: listener) + listenersLock.exclusivelyWrite { [weak self] in + self?.listeners.append(weakListener) + } + if let balances = buildBalance(for: wallets, chainAssets: chainAssets) { + notify(listener: listener, result: .success(balances)) + } } } @@ -138,12 +146,16 @@ final class WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterPr chainAsset: ChainAsset, listener: WalletBalanceSubscriptionListener ) { - let weakListener = WeakWrapper(target: listener) - listenersLock.exclusivelyWrite { [weak self] in - self?.listeners.append(weakListener) - } - if let balances = buildBalance(for: [wallet], chainAssets: [chainAsset]) { - notify(listener: listener, result: .success(balances)) + Task { + try await updateLocalBalances(wallets: [wallet], chainAssets: [chainAsset]) + + let weakListener = WeakWrapper(target: listener) + listenersLock.exclusivelyWrite { [weak self] in + self?.listeners.append(weakListener) + } + if let balances = buildBalance(for: [wallet], chainAssets: [chainAsset]) { + notify(listener: listener, result: .success(balances)) + } } } @@ -152,13 +164,17 @@ final class WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterPr wallet: MetaAccountModel, listener: WalletBalanceSubscriptionListener ) { - let weakListener = WeakWrapper(target: listener) - listenersLock.exclusivelyWrite { [weak self] in - self?.listeners.append(weakListener) - } + Task { + try await updateLocalBalances(wallets: [wallet], chainAssets: chainAssets) + + let weakListener = WeakWrapper(target: listener) + listenersLock.exclusivelyWrite { [weak self] in + self?.listeners.append(weakListener) + } - if let balances = buildBalance(for: [wallet], chainAssets: chainAssets) { - notify(listener: listener, result: .success(balances)) + if let balances = buildBalance(for: [wallet], chainAssets: chainAssets) { + notify(listener: listener, result: .success(balances)) + } } } @@ -166,20 +182,24 @@ final class WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterPr wallet: MetaAccountModel, listener: WalletBalanceSubscriptionListener ) { - let weakListener = WeakWrapper(target: listener) - listenersLock.exclusivelyWrite { [weak self] in - self?.listeners.append(weakListener) - } - updateWalletsIfNeeded(with: wallet) - let selectedChainAssets = filterChainAssets( - with: NetworkManagmentFilter(identifier: wallet.networkManagmentFilter), - chainAssets: chainAssets, - wallet: wallet, - search: nil - ) + Task { + try await updateLocalBalances(wallets: [wallet], chainAssets: chainAssets) - if let balances = buildBalance(for: [wallet], chainAssets: selectedChainAssets) { - notify(listener: listener, result: .success(balances)) + let weakListener = WeakWrapper(target: listener) + listenersLock.exclusivelyWrite { [weak self] in + self?.listeners.append(weakListener) + } + updateWalletsIfNeeded(with: wallet) + let selectedChainAssets = filterChainAssets( + with: NetworkManagmentFilter(identifier: wallet.networkManagmentFilter), + chainAssets: chainAssets, + wallet: wallet, + search: nil + ) + + if let balances = buildBalance(for: [wallet], chainAssets: selectedChainAssets) { + notify(listener: listener, result: .success(balances)) + } } } @@ -200,6 +220,13 @@ final class WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterPr // MARK: - Private methods + private func updateLocalBalances(wallets: [MetaAccountModel], chainAssets: [ChainAsset]) async throws { + let accountInfos = try await fetchAccountInfos(wallets: wallets, chainAssets: chainAssets) + self.accountInfos = self.accountInfos.merging(accountInfos, uniquingKeysWith: { _, new in + new + }) + } + private func buildBalance(for wallets: [MetaAccountModel], chainAssets: [ChainAsset]) -> WalletBalanceInfos? { let walletBalances = walletBalanceBuilder.buildBalance( for: accountInfos, @@ -245,20 +272,15 @@ final class WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterPr wallets: [MetaAccountModel], chainAssets: [ChainAsset] ) async throws -> [ChainAssetKey: AccountInfo?] { - let accountInfos = try await withThrowingTaskGroup(of: [ChainAssetKey: AccountInfo?].self) { group in - wallets.forEach { wallet in - group.addTask { - try await self.accountInfoFetchingProvider.fetchByUniqKey(for: chainAssets, wallet: wallet) - } - } - - var result = [ChainAssetKey: AccountInfo?]() - for try await accountInfos in group { - result.merge(accountInfos) { _, new in new } + let accountInfos = try await wallets.concurrentMap { wallet in + do { + return try await self.accountInfoFetchingProvider.fetchByUniqKey(for: chainAssets, wallet: wallet) + } catch { + return [:] } - return result } - return accountInfos + let result = Dictionary(accountInfos.flatMap { $0 }, uniquingKeysWith: { _, last in last }) + return result } private func subscribeToAccountInfo( diff --git a/fearless/Common/Storage/Migration/SubstrateStorage/ChainSubstrateV8MigrationPolicy.swift b/fearless/Common/Storage/Migration/SubstrateStorage/ChainSubstrateV8MigrationPolicy.swift new file mode 100644 index 0000000000..3a5057c058 --- /dev/null +++ b/fearless/Common/Storage/Migration/SubstrateStorage/ChainSubstrateV8MigrationPolicy.swift @@ -0,0 +1,25 @@ +import Foundation +import CoreData + +class ChainSubstrateV8MigrationPolicy: NSEntityMigrationPolicy { + override func createRelationships( + forDestination chainModel: NSManagedObject, + in mapping: NSEntityMapping, + manager: NSMigrationManager + ) throws { + try super.createRelationships(forDestination: chainModel, in: mapping, manager: manager) + + guard let options = chainModel.value(forKey: "options") as? [String] else { + chainModel.setValue("substrate", forKey: "ecosystem") + return + } + + if options.contains("ethereum") { + chainModel.setValue("ethereum", forKey: "ecosystem") + } else if options.contains("ethereumBased") { + chainModel.setValue("ethereumBased", forKey: "ecosystem") + } else { + chainModel.setValue("substrate", forKey: "ecosystem") + } + } +} diff --git a/fearless/Common/Storage/MigrationMappings/SubstrateV7toV8.xcmappingmodel/xcmapping.xml b/fearless/Common/Storage/MigrationMappings/SubstrateV7toV8.xcmappingmodel/xcmapping.xml new file mode 100644 index 0000000000..bb45ff7ba2 --- /dev/null +++ b/fearless/Common/Storage/MigrationMappings/SubstrateV7toV8.xcmappingmodel/xcmapping.xml @@ -0,0 +1,849 @@ + + + + + + 134481920 + 2BD542A3-0359-40E5-840A-4C2BA58F46E0 + 263 + + + + NSPersistenceFrameworkVersion + 1344 + NSStoreModelVersionChecksumKey + bMpud663vz0bXQE24C6Rh4MvJ5jVnzsD2sI3njZkKbc= + NSStoreModelVersionHashes + + XDDevAttributeMapping + + 0plcXXRN7XHKl5CcF+fwriFmUpON3ZtcI/AfK748aWc= + + XDDevEntityMapping + + qeN1Ym3TkWN1G6dU9RfX6Kd2ccEvcDVWHpd3LpLgboI= + + XDDevMappingModel + + EqtMzvRnVZWkXwBHu4VeVGy8UyoOe+bi67KC79kphlQ= + + XDDevPropertyMapping + + XN33V44TTGY4JETlMoOB5yyTKxB+u4slvDIinv0rtGA= + + XDDevRelationshipMapping + + akYY9LhehVA/mCb4ATLWuI9XGLcjpm14wWL1oEBtIcs= + + + NSStoreModelVersionHashesDigest + +Hmc2uYZK6og+Pvx5GUJ7oW75UG4V/ksQanTjfTKUnxyGWJRMtB5tIRgVwGsrd7lz/QR57++wbvWsr6nxwyS0A== + NSStoreModelVersionHashesVersion + 3 + NSStoreModelVersionIdentifiers + + + + + + + + + crowdloansApiType + + + + ecosystem + + + + icon + + + + isTestnet + + + + options + + + + pricingApiUrl + + + + types + + + + 1 + explorers + + + + 1 + selectedNode + + + + destWeightIsPrimitive + + + + 1 + availableDestinations + + + + controller + + + + type + + + + call + + + + moduleName + + + + timestamp + + + + icon + + + + poster + + + + coingeckoPriceId + + + + priceId + + + + minAmount + + + + peerName + + + + 1 + priceData + + + + name + + + + 1 + chain + + + + iconUrl + + + + source + + + + 1 + assets + + + + currencyId + + + + chainId + + + + bridgeParachainId + + + + existentialDeposit + + + + id + + + + resolver + + + + txVersion + + + + icon + + + + Undefined + 21 + CDTonConnectedApp + 1 + + + + + + CDXcmAvailableAsset + Undefined + 9 + CDXcmAvailableAsset + 1 + + + + + + CDPolkaswapRemoteSettings + Undefined + 17 + CDPolkaswapRemoteSettings + 1 + + + + + + CDPriceProvider + Undefined + 4 + CDPriceProvider + 1 + + + + + + CDXcmAvailableDestination + Undefined + 13 + CDXcmAvailableDestination + 1 + + + + + + Undefined + 6 + CDTonDapp + 1 + + + + + + hasCrowdloans + + + + identityChain + + + + isTipRequired + + + + paraId + + + + rank + + + + typesOverrideCommon + + + + 1 + customNodes + + + + xcmVersion + + + + stash + + + + 1 + asset + + + + callName + + + + receiver + + + + txIndex + + + + identifier + + + + url + + + + currencyId + + + + 1 + asset + + + + symbol + + + + targetAddress + + + + chainId + + + + name + + + + name + + + + identifier + + + + apiKeyName + + + + 1 + priceProvider + + + + privateKey + + + + types + + + + publicKey + + + + isUtility + + + + assetId + + + + metadata + + + + version + + + + url + + + + subtype + + + + walletId + + + + Undefined + 8 + CDPriceData + 1 + + + + + + CDAsset + Undefined + 16 + CDAsset + 1 + + + + + + CDStashItem + Undefined + 3 + CDStashItem + 1 + + + + + + CDScamInfo + Undefined + 12 + CDScamInfo + 1 + + + + + + CDContact + Undefined + 20 + CDContact + 1 + + + + + + crowdloansApiUrl + + + + historyApiType + + + + isEthereumBased + + + + minimalAppVersion + + + + parentId + + + + stakingApiType + + + + 1 + nodes + + + + 1 + xcmConfig + + + + 1 + availableAssets + + + + 1 + chain + + + + id + + + + fee + + + + sender + + + + appDescription + + + + isConnected + + + + data + + + + fiatDayByChange + + + + identifier + + + + appUrl + + + + address + + + + availableSources + + + + clientId + + + + 1 + chain + + + + forceSmartIds + + + + xstusdId + + + + code + + + + 1 + chain + + + + type + + + + type + + + + precision + + + + priceId + + + + publicKey + + + + name + + + + fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v7.xcdatamodel + YnBsaXN0MDDUAAEAAgADAAQABQAGAAcAClgkdmVyc2lvblkkYXJjaGl2ZXJUJHRvcFgkb2JqZWN0 +cxIAAYagXxAPTlNLZXllZEFyY2hpdmVy0QAIAAlUcm9vdIABrxEMzgALAAwAGQA1ADYANwBhAGIAYwBkAGUAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAcgBzAI4AjwCQAJYAlwCjALkAugC7ALwAvQC+AL8AwADBAMIA2wDeAOUA6wD6AQkBDAEbASoBLQCNAT0BTAFQAVQBYwFpAWoBcgGBAYIBiwGXAZgBmQGaAZsBsAGxAbkBugG7AccB2wHcAd0B3gHfAeAB4QHiAeMB8gIBAhACFAIjAjICMwJCAlECYAJsAn4CfwKAAoECggKDAoQChQAvApQCowKkArMCwgLcAt0C4wLvAwUDFAMXAyYDNQM5Az0DPgNNA1wDXwNuA30DgQOQA58D4wPkA+UD5gPnA+gD6QPqA+sD7APtA+4D7wPwA/ED8gPzA/QD9QP2A/cD+AP5A/oD+wP8A/0D/gP/BAAEAQQWBBcEHwQgBCwEQARPBF4EbQRxBIAEjwSeBK0EvATIBNoE2wTcBN0E3gTfBOAE4QTwBP8FDgUdBR4FLQU8BUsFUwVoBWkFcQV9BZEFoAWvBb4FwgXRBeAF7wX+Bg0GGQYrBjoGSQZYBmcGdgaFBpQGnAaxBrIGugbGBtoG6Qb4BwcHCwcaBykHOAdHB1YHYgd0B4MHhAeTB6IHsQeyB8EH0AffB/QH9Qf9CAkIHQgsCDsISghOCF0IbAh7CIoImQilCLcIxgjVCOQI8wkCCREJIAk1CTYJPglKCV4JbQl8CYsJjwmeCa0JvAnLCdoJ5gn4CgcKFgolCjQKQwpSCmEKdgp3Cn8KiwqfCq4KvQrMCtAK3wruCv0LDAsbCycLOQtIC1cLZgt1C3YLhQuUC5ULpAu5C7oLwgvOC+IL8QwADA8MEwwiDDEMQAxPDF4Magx8DIsMmgypDLgMuQzIDNcM5gz7DPwNBA0QDSQNMw1CDVENVQ1kDXMNgg2RDaANrA2+Dc0Nzg3dDewN+w38DgsOGg4pDj4OPw5HDlMOZw52DoUOlA6YDqcOtg7FDtQO4w7vDwEPEA8fDy4PPQ9MD1sPag9/D4APiA+UD6gPtw/GD9UP2Q/oD/cQBhAVECQQMBBCEFEQYBBvEH4QjRCcEKsQwBDBEMkQ1RDpEPgRBxEWERoRKRE4EUcRVhFlEXERgxGSEaERsBG/Ec4R3RH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uWPFZAFkPWRJZIVkwWTNZQllRWVVZZFlzWXRZgFmBWYJZl1mYWaBZrFnAWc9Z3lntWfFaAFoPWh5aLVo8WkhaWlppWnhah1qWWqVatFrDWtha2VrhWu1bAVsQWx9bLlsyW0FbUFtfW25bfVuJW5lbqFu3W8Zb1VvkW/NcCFwJXBFcHVwxXEBcT1xeXGJccVyAXI9cnlytXLlcy1zaXOlc+F0HXRZdJV00XUldSl1SXV5dcl2BXZBdn12jXbJdwV3QXd9d7l36XgxeG14qXjleSF5XXmZedV54Xodell6lXqhet17GXtVe6l7rXvNe/18TXyJfMV9AX0RfU19iX3FfgF+PX5tfrV+8X8tf2l/pX/hgB2AWYCtgLGA0YEBgVGBjYHJggWCFYJRgo2CyYMFg0GDcYO5g/WEMYRthKmE5YUhhV2FsYW1hdWGBYZVhpGGzYcJhxmHVYeRh82ICYhFiHWItYjxiS2JaYmlieGKHYopimWKoYrdizGLNYtVi4WL1YwRjE2MiYyZjNWNEY1NjYmNxY31jj2OeY61jvGPLY9pj6WPqY/lkDmQPZBdkI2Q3ZEZkVWRkZGhkd2SGZJVkpGSzZL9k0WTgZO9k/mUNZRxlK2U6ZU9lUGVYZWRleGWHZZZlpWWpZbhlx2XWZeVl9GYAZhJmIWYwZj9mTmZdZmxme2Z+ZphmmWafZqtmwWbQZtNm4mbxZvRnA2cSZxVnJGczZzdnRmdVZ1ZnZGdlZ2ZnZ2doZ2lnfmd/Z4dnk2enZ7ZnxWfUZ9hn52f2aAVoFGgjaC9oQWhQaF9obmh9aIxom2iqaL9owGjIaNRo6Gj3aQZpFWkZaShpN2lGaVVpZGlwaYJpkWmgaa9pvmnNadxp62oAagFqCWoVailqOGpHalZqWmppanhqh2qWaqVqsWrDatJq4Wrwav9rAGsPax5rLWtCa0NrS2tXa2tremuJa5hrnGura7pryWvYa+dr82wFbBRsI2wybEFsUGxfbG5sg2yEbIxsmGysbLtsymzZbN1s7Gz7bQptGW0obTRtRm1VbWRtc22CbZFtoG2vbbJtzG3NbdNt3231bgRuB24WbiVuKG43bkZuSW5Ybmdua256boluim6Ybplumm6bbpxunW6ybrNuu27Hbttu6m75bwhvDG8bbypvOW9Ib1dvY291b4Rvk2+ib7FvwG/Pb9Bv32/0b/Vv/XAJcB1wLHA7cEpwTnBdcGxwe3CKcJlwpXC3cMZw1XDkcPNxAnERcRJxIXE2cTdxP3FLcV9xbnF9cYxxkHGfca5xvXHMcdtx53H5cghyF3ImcjVyRHJTcmJyd3J4coByjHKgcq9yvnLNctFy4HLvcv5zDXMccyhzOHNHc2FzYnNoc3RzinOZc5xzq3O6c71zzHPbc95z7XP8dAB0D3QedB90KXQqdCt0QHRBdEl0VXRpdHh0h3SWdJp0qXS4dMd01nTldPF1A3USdSF1MHU/dU51XXVsdYF1gnWKdZZ1qnW5dch113Xbdep1+XYIdhd2JnYydkR2U3ZidnF2gHaPdp52rXbCdsN2y3bXdut2+ncJdxh3HHcrdzp3SXdYd2d3c3eFd5R3o3eyd8F3wnfRd+B373fyeAF4EHgfeC54PXhSeFN4W3hneHt4iniZeKh4rHi7eMp42XjoePd5A3kVeSR5M3lCeVF5YHlveX55gXmbeZx5onmuecR503nWeeV59Hn3egZ6FXoYeid6Nno6ekl6WHpZemF6Ynpjenh6eXqBeo16oXqwer96znrSeuF68Hr/ew57HXspezt7SntZe2h7d3uGe5V7pHu5e7p7wnvOe+J78XwAfA98E3wifDF8QHxPfF58anx8fIt8mnypfLh8x3zWfOV86H0CfQN9CX0VfSt9On09fUx9W31efW19fH1/fY59nX2hfbB9v33Afc59z33QfdF95n3nfe99+34Pfh5+LX48fkB+T35efm1+fH6Lfpd+qX64fsd+1n7lfuZ+9X8EfxN/KH8pfzF/PX9Rf2B/b39+f4J/kX+gf69/vn/Nf9l/63/6gAmAGIAngDaARYBUgGmAaoBygH6AkoChgLCAv4DDgNKA4YDwgP+BDoEagSyBO4FKgVmBaIF3gYaBlYGqgauBs4G/gdOB4oHxggCCBIITgiKCMYJAgk+CW4JtgnyCi4KagqmCuILHgtaC64LsgvSDAIMUgyODMoNBg0WDVINjg3KDgYOQg5yDroO9g8yD24Pqg/mECIQXhBqENIQ1hDuER4RdhGyEb4R+hI2EkISfhK6EsYTAhM+E04TihPGE8oT+hP+FAIUVhRaFHoUqhT6FTYVchWuFb4V+hY2FnIWrhbqFxoXYheeF9oYFhhSGI4YyhkGGVoZXhl+Ga4Z/ho6GnYashrCGv4bOht2G7Ib7hweHGYcohzeHRodVh2SHc4eCh5eHmIegh6yHwIfPh96H7YfxiACID4geiC2IPIhIiFqIaYh4iIeIloiliLSIw4jYiNmI4YjtiQGJEIkfiS6JMolBiVCJX4luiX2JiYmbiaqJuYnIideJ5on1igSKB4ohiiKKKIo0ikqKWYpcimuKeop9ioyKm4qeiq2KvIrAis+K3orfivmK+or7ivyK/Yr+iv+LAIsBiwKLA4sYixmLIYsti0GLUItfi26LcouBi5CLn4uui72LyYvbi+qL+YwIjBeMJow1jESMWYxajGKMboyCjJGMoIyvjLOMwozRjOCM74z+jQqNHI0rjTqNSY1YjWeNdo2FjZqNm42jja+Nw43SjeGN8I30jgOOEo4hjjCOP45Ljl2ObI57joqOmY6ojreOxo7bjtyO5I7wjwSPE48ijzGPNY9Ej1OPYo9xj4CPjI+ej62PvI/Lj9qP6Y/4kAeQHJAdkCWQMZBFkFSQY5BykHaQhZCUkKOQspDBkM2Q35DukP2RDJEbkSqROZFIkV2RXpFmkXKRhpGVkaSRs5G3kcaR1ZHkkfOSApIOkiCSL5I+kk2SXJJrknqSiZKekp+Sp5KzkseS1pLlkvSS+JMHkxaTJZM0k0OTT5Nhk3CTf5OOk52TrJO7k8qT35Pgk+iT9JQIlBeUJpQ1lDmUSJRXlGaUdZSElJCUopSxlMCUz5TelO2U/JULlSCVIZUplTWVSZVYlWeVdpV6lYmVmJWnlbaVxZXRleOV8pYBlhCWH5Yulj2WTJZhlmKWapZ2loqWmZaolreWu5bKltmW6Jb3lwaXEpcklzOXQpdRl2CXb5d+l42Xopejl6uXt5fLl9qX6Zf4l/yYC5gamCmYOJhHmFOYZZh0mIOYkpihmLCYv5jOmNGY65jsmPKY/pkUmSOZJpk1mUSZR5lWmWWZaJl3mYaZipmZmaiZspnHmciZ0JncmfCZ/5oOmh2aIZowmj+aTppdmmyaeJqKmpmaqJq3msaa1ZrkmvObCJsJmxGbHZsxm0CbT5tem2KbcZuAm4+bnputm7mby5vam+mb+JwHnBacJZw0nEmcSpxSnF6ccpyBnJCcn5yjnLKcwZzQnN+c7pz6nQydG50qnTmdSJ1XnWaddZ14nZKdk52ZnaWdu53Knc2d3J3rne6d/Z4Mng+eHp4tnjGeQJ5PnlCeWp5bnlyecZ5ynnqehp6anqmeuJ7Hnsue2p7pnvifB58WnyKfNJ9Dn1KfYZ9wn3+fjp+dn7Kfs5+7n8ef25/qn/mgCKAMoBugKqA5oEigV6BjoHWghKCToKKgsaDAoM+g3qDzoPSg/KEIoRyhK6E6oUmhTaFcoWuheqGJoZihpKG2ocWh1KHjofKiAaIQoh+iIqI8oj2iQ6JPomWidKJ3ooailaKYoqeitqK5osii16Lbouqi+aL6owKjA6MYoxmjIaMto0GjUKNfo26jcqOBo5Cjn6Ouo72jyaPbo+qj+aQIpBekJqQ1pESkWaRapGKkbqSCpJGkoKSvpLOkwqTRpOCk76T+pQqlHKUrpTqlSaVYpWeldqWFpYiljKWQpZSlnKWfpaNVJG51bGzWAA0ADgAPABAAEQASABMAFAAVABYAFwAYXxAPX3hkX3Jvb3RQYWNrYWdlViRjbGFzc11feGRfbW9kZWxOYW1lXF94ZF9jb21tZW50c18QFV9jb25maWd1cmF0aW9uc0J5TmFtZV8QF19tb2RlbFZlcnNpb25JZGVudGlmaWVygAKBDM2AAIEMy4EMzIEFTN4AGgAbABwAHQAeAB8AIAAOACEAIgAjACQAJQAmACcAKAApAAkAJwAVAC0ALgAvADAAMQAnACcAFV8QHFhEQnVja2V0Rm9yQ2xhc3Nlc3dhc0VuY29kZWRfEBpYREJ1Y2tldEZvclBhY2thZ2Vzc3RvcmFnZV8QHFhEQnVja2V0Rm9ySW50ZXJmYWNlc3N0b3JhZ2VfEA9feGRfb3duaW5nTW9kZWxfEB1YREJ1Y2tldEZvclBhY2thZ2Vzd2FzRW5jb2RlZFZfb3duZXJfEBtYREJ1Y2tldEZvckRhdGFUeXBlc3N0b3JhZ2VbX3Zpc2liaWxpdHlfEBlYREJ1Y2tldEZvckNsYXNzZXNzdG9yYWdlVV9uYW1lXxAfWERCdWNrZXRGb3JJbnRlcmZhY2Vzd2FzRW5jb2RlZF8QHlhEQnVja2V0Rm9yRGF0YVR5cGVzd2FzRW5jb2RlZF8QEF91bmlxdWVFbGVtZW50SUSABIEMyYEMx4ABgASAAIEMyIEMyhAAgAWAA4AEgASAAFBTWUVT0wA4ADkADgA6AE0AYFdOUy5rZXlzWk5TLm9iamVjdHOvEBIAOwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEyABoAHgAiACYAKgAuADIANgA6AD4AQgBGAEoATgBSAFYAWgBevEBIATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF+AGIBrgQZigQIDgQf1gQiDgQYLgQlugQmzgQj0gQJ+gQo/gQT2gQqygQbtgQvOgQwngQyDgDZdQ0RFeHRlcm5hbEFwaVdDRENoYWluXxATQ0RYY21BdmFpbGFibGVBc3NldFdDREFzc2V0XUNEQ29udGFjdEl0ZW1fEBlDRFBvbGthc3dhcFJlbW90ZVNldHRpbmdzXxAQQ0RDaGFpblhjbUNvbmZpZ1tDRFN0YXNoSXRlbV8QFUNEUnVudGltZU1ldGFkYXRhSXRlbV5DRFBvbGthc3dhcERleF8QD0NEUHJpY2VQcm92aWRlclpDRFNjYW1JbmZvW0NEQ2hhaW5Ob2RlXxAYQ0RUcmFuc2FjdGlvbkhpc3RvcnlJdGVtXxAZQ0RYY21BdmFpbGFibGVEZXN0aW5hdGlvbllDRENvbnRhY3ReQ0RQaGlzaGluZ0l0ZW1fEBJDRENoYWluU3RvcmFnZUl0ZW3fEBAAdAB1AHYAdwAfAHgAeQAhAHoAewAOACMAfAB9ACYAfgB/AIAAJwAnABMAhACFAC8AJwB/AIgAOwB/AIsAjACNXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zZHVwbGljYXRlc18QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNzdG9yYWdlW19pc0Fic3RyYWN0gBqAPoAEgASAAoAbgQLvgASAGoEC8YAGgBqBB/SAGQgSl+5mZldvcmRlcmVk0wA4ADkADgCRAJMAYKEAkoAcoQCUgB2ANl5YRF9QU3RlcmVvdHlwZdkAHwAjAJgADgAmAJkAIQB+AJoATgCSAH8AngAVACcALwCNAKJfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WAGIAcgBqAPYAAgAQIgB7TADgAOQAOAKQArgBgqQClAKYApwCoAKkAqgCrAKwArYAfgCCAIYAigCOAJIAlgCaAJ6kArwCwALEAsgCzALQAtQC2ALeAKIAsgC2AL4AwgDKANIA3gDuANl8QE1hEUE1Db21wb3VuZEluZGV4ZXNfEBBYRF9QU0tfZWxlbWVudElEXxAZWERQTVVuaXF1ZW5lc3NDb25zdHJhaW50c18QGlhEX1BTS192ZXJzaW9uSGFzaE1vZGlmaWVyXxAZWERfUFNLX2ZldGNoUmVxdWVzdHNBcnJheV8QEVhEX1BTS19pc0Fic3RyYWN0XxAPWERfUFNLX3VzZXJJbmZvXxATWERfUFNLX2NsYXNzTWFwcGluZ18QFlhEX1BTS19lbnRpdHlDbGFzc05hbWXfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQDOABUAlACNAI0AjQAvAI0A1QClAI0AjQAVAI1VX3R5cGVYX2RlZmF1bHRcX2Fzc29jaWF0aW9uW19pc1JlYWRPbmx5WV9pc1N0YXRpY1lfaXNVbmlxdWVaX2lzRGVyaXZlZFpfaXNPcmRlcmVkXF9pc0NvbXBvc2l0ZVdfaXNMZWFmgACAKYAAgB0ICAgIgCuAHwgIgAAI0gA5AA4A3ADdoIAq0gDfAOAA4QDiWiRjbGFzc25hbWVYJGNsYXNzZXNeTlNNdXRhYmxlQXJyYXmjAOEA4wDkV05TQXJyYXlYTlNPYmplY3TSAN8A4ADmAOdfEBBYRFVNTFByb3BlcnR5SW1wpADoAOkA6gDkXxAQWERVTUxQcm9wZXJ0eUltcF8QFFhEVU1MTmFtZWRFbGVtZW50SW1wXxAPWERVTUxFbGV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jAMoAywAmAMwAFQBUABVMCgCNAI0AjQAvAI0A1QJxAI0AjQAVAI2AAIEGC4AAgQYFCAgICIArgGEICIAACN8QEE0DTQRNBU0GAB9NB00IACFNCU0KAA4AI00LTQwAJgB+AH9NDgAnACcAE00SAIUALwAnAH8AiABBAH9NGU0aAI1fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2VfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNkdXBsaWNhdGVzXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3N0b3JhZ2WAGoEGHoAEgASAAoEGDYEC74AEgBqBAvGADIAagQdigQYMCBMAAAABAoeHG9MAOAA5AA5NHk0gAGChAJKAHKFNIYEGDoA22QAfACNNJAAOACZNJQAhAH5NJgBUAJIAfwCeABUAJwAvAI1NLl8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEGC4AcgBqAPYAAgAQIgQYP0wA4ADkADk0wTToAYKkApQCmAKcAqACpAKoAqwCsAK2AH4AggCGAIoAjgCSAJYAmgCepTTtNPE09TT5NP01ATUFNQk1DgQYQgQYSgQYTgQYVgQYWgQYYgQYZgQYbgQYcgDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFU1HABVNIQCNAI0AjQAvAI0A1QClAI0AjQAVAI2AAIEGEYAAgQYOCAgICIArgB8ICIAACNIAOQAOTVUA3aCAKt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFU0hAI0AjQCNAC8AjQDVAKYAjQCNABUAjYAAgACAAIEGDggICAiAK4AgCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFU1oABVNIQCNAI0AjQAvAI0A1QCnAI0AjQAVAI2AAIEGFIAAgQYOCAgICIArgCEICIAACNIAOQAOTXYA3aCAKt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFU0hAI0AjQCNAC8AjQDVAKgAjQCNABUAjYAAgACAAIEGDggICAiAK4AiCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFU2JABVNIQCNAI0AjQAvAI0A1QCpAI0AjQAVAI2AAIEGF4AAgQYOCAgICIArgCMICIAACNIAOQAOTZcA3aCAKt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFU0hAI0AjQCNAC8AjQDVAKoAjQCNABUAjYAAgDOAAIEGDggICAiAK4AkCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFU2qABVNIQCNAI0AjQAvAI0A1QCrAI0AjQAVAI2AAIEGGoAAgQYOCAgICIArgCUICIAACNMAOAA5AA5NuE25AGCgoIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBVgAVTSEAjQCNAI0ALwCNANUArACNAI0AFQCNgACAOIAAgQYOCAgICIArgCYICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVTcwAFU0hAI0AjQCNAC8AjQDVAK0AjQCNABUAjYAAgQYdgACBBg4ICAgIgCuAJwgIgAAIXxAQQ0RDaGFpblhjbUNvbmZpZ9MAOAA5AA5N203hAGClTdwBjU3eTd9N4IEGH4A/gQYggQYhgQYipU3iTeNN5E3lTeaBBiOBBjqBBlGBBsKBBtmANl8QFWRlc3RXZWlnaHRJc1ByaW1pdGl2ZV8QD2F2YWlsYWJsZUFzc2V0c1p4Y21WZXJzaW9uXxAVYXZhaWxhYmxlRGVzdGluYXRpb25z3xASAMMAxADFTe0AHwDHAMhN7gAhAMZN7wDJAA4AIwDKAMsAJgDMABUAFQAVACcAVACNAI1N9wAvAI0AfwCNBBBN3ACNAI1N/wCNXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBBgsICIEGJQiAGgiAvoEGHwgIgQYkCBJ3TwTv0wA4ADkADk4DTgYAYKIBswQagEaAoaJOB04IgQYmgQYxgDbZAB8AI04LAA4AJk4MACEAfk4NTeIBswB/AJ4AFQAnAC8AjU4VXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQYjgEaAGoA9gACABAiBBifTADgAOQAOThdOIABgqAHJAcoBywHMAc0BzgHPAdCASoBLgEyATYBOgE+AUIBRqE4hTiJOI04kTiVOJk4nTiiBBiiBBimBBiqBBiyBBi2BBi6BBi+BBjCANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFU4HAI0AjQCNAC8AjQDVAckAjQCNABUAjYAAgDOAAIEGJggICAiAK4BKCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVOBwCNAI0AjQAvAI0A1QHKAI0AjQAVAI2AAIAAgACBBiYICAgIgCuASwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABVOSgAVTgcAjQCNAI0ALwCNANUBywCNAI0AFQCNgACBBiuAAIEGJggICAiAK4BMCAiAAAjTADgAOQAOTlhOWQBgoKCANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFU4HAI0AjQCNAC8AjQDVAcwAjQCNABUAjYAAgDOAAIEGJggICAiAK4BNCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQIlABVOBwCNAI0AjQAvAI0A1QHNAI0AjQAVAI2AAIBYgACBBiYICAgIgCuATggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVTgcAjQCNAI0ALwCNANUBzgCNAI0AFQCNgACAM4AAgQYmCAgICIArgE8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFU4HAI0AjQCNAC8AjQDVAc8AjQCNABUAjYAAgACAAIEGJggICAiAK4BQCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVOBwCNAI0AjQAvAI0A1QHQAI0AjQAVAI2AAIAzgACBBiYICAgIgCuAUQgIgAAI2QAfACNOpwAOACZOqAAhAH5OqU3iBBoAfwCeABUAJwAvAI1OsV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEGI4ChgBqAPYAAgAQIgQYy0wA4ADkADk6zTrsAYKcEygTLBMwEzQTOBM8E0ICvgLCAsYCygLOAtIC1p068Tr1Ovk6/TsBOwU7CgQYzgQY0gQY1gQY2gQY3gQY4gQY5gDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVOCACNAI0AjQAvAI0A1QTKAI0AjQAVAI2AAIAAgACBBjEICAgIgCuArwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVTggAjQCNAI0ALwCNANUEywCNAI0AFQCNgACAM4AAgQYxCAgICIArgLAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFU4IAI0AjQCNAC8AjQDVBMwAjQCNABUAjYAAgACAAIEGMQgICAiAK4CxCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQ3uABVOCACNAI0AjQAvAI0A1QTNAI0AjQAVAI2AAIEBZIAAgQYxCAgICIArgLIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFU4IAI0AjQCNAC8AjQDVBM4AjQCNABUAjYAAgACAAIEGMQgICAiAK4CzCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVOCACNAI0AjQAvAI0A1QTPAI0AjQAVAI2AAIAAgACBBjEICAgIgCuAtAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVTggAjQCNAI0ALwCNANUE0ACNAI0AFQCNgACAAIAAgQYxCAgICIArgLUICIAACN8QEgDDAMQAxU8uAB8AxwDITy8AIQDGTzAAyQAOACMAygDLACYAzAAVABUAFQAnAFQAjQCNTzgALwCNAH8AjQGqAY0AjQCNT0AAjV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQYLCAiBBjwIgBoIgNaAPwgIgQY7CBJMlkmQ0wA4ADkADk9ET0cAYKIBswG0gEaAR6JPSE9JgQY9gQZIgDbZAB8AI09MAA4AJk9NACEAfk9OTeMBswB/AJ4AFQAnAC8AjU9WXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQY6gEaAGoA9gACABAiBBj7TADgAOQAOT1hPYQBgqAHJAcoBywHMAc0BzgHPAdCASoBLgEyATYBOgE+AUIBRqE9iT2NPZE9lT2ZPZ09oT2mBBj+BBkCBBkGBBkOBBkSBBkWBBkaBBkeANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFU9IAI0AjQCNAC8AjQDVAckAjQCNABUAjYAAgDOAAIEGPQgICAiAK4BKCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVPSACNAI0AjQAvAI0A1QHKAI0AjQAVAI2AAIAAgACBBj0ICAgIgCuASwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABVPiwAVT0gAjQCNAI0ALwCNANUBywCNAI0AFQCNgACBBkKAAIEGPQgICAiAK4BMCAiAAAjTADgAOQAOT5lPmgBgoKCANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFU9IAI0AjQCNAC8AjQDVAcwAjQCNABUAjYAAgDOAAIEGPQgICAiAK4BNCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQIlABVPSACNAI0AjQAvAI0A1QHNAI0AjQAVAI2AAIBYgACBBj0ICAgIgCuATggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVT0gAjQCNAI0ALwCNANUBzgCNAI0AFQCNgACAM4AAgQY9CAgICIArgE8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFU9IAI0AjQCNAC8AjQDVAc8AjQCNABUAjYAAgACAAIEGPQgICAiAK4BQCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVPSACNAI0AjQAvAI0A1QHQAI0AjQAVAI2AAIAzgACBBj0ICAgIgCuAUQgIgAAI2QAfACNP6AAOACZP6QAhAH5P6k3jAbQAfwCeABUAJwAvAI1P8l8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEGOoBHgBqAPYAAgAQIgQZJ0wA4ADkADk/0T/wAYKcCbgJvAnACcQJyAnMCdIBegF+AYIBhgGKAY4Bkp0/9T/5P/1AAUAFQAlADgQZKgQZLgQZMgQZNgQZOgQZPgQZQgDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQKHABVPSQCNAI0AjQAvAI0A1QJuAI0AjQAVAI2AAIBmgACBBkgICAgIgCuAXggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUClgAVT0kAjQCNAI0ALwCNANUCbwCNAI0AFQCNgACAaIAAgQZICAgICIArgF8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVApYAFU9JAI0AjQCNAC8AjQDVAnAAjQCNABUAjYAAgGiAAIEGSAgICAiAK4BgCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQBPABVPSQCNAI0AjQAvAI0A1QJxAI0AjQAVAI2AAIBrgACBBkgICAgIgCuAYQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVT0kAjQCNAI0ALwCNANUCcgCNAI0AFQCNgACAM4AAgQZICAgICIArgGIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFU9JAI0AjQCNAC8AjQDVAnMAjQCNABUAjYAAgDOAAIEGSAgICAiAK4BjCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQPeABVPSQCNAI0AjQAvAI0A1QJ0AI0AjQAVAI2AAIEF94AAgQZICAgICIArgGQICIAACN8QEgDDAMQAxVBvAB8AxwDIUHAAIQDGUHEAyQAOACMAygDLACYAzAAVABUAFQAnAFQAjQCNUHkALwCNAH8AjQGqTd4AjQCNUIEAjV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQYLCAiBBlMIgBoIgNaBBiAICIEGUggSZdR6R9MAOAA5AA5QhVCIAGCiAbMBtIBGgEeiUIlQioEGVIEGX4A22QAfACNQjQAOACZQjgAhAH5Qj03kAbMAfwCeABUAJwAvAI1Ql18QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEGUYBGgBqAPYAAgAQIgQZV0wA4ADkADlCZUKIAYKgByQHKAcsBzAHNAc4BzwHQgEqAS4BMgE2AToBPgFCAUahQo1CkUKVQplCnUKhQqVCqgQZWgQZXgQZYgQZagQZbgQZcgQZdgQZegDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVQiQCNAI0AjQAvAI0A1QHJAI0AjQAVAI2AAIAzgACBBlQICAgIgCuASggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVUIkAjQCNAI0ALwCNANUBygCNAI0AFQCNgACAAIAAgQZUCAgICIArgEsICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVUMwAFVCJAI0AjQCNAC8AjQDVAcsAjQCNABUAjYAAgQZZgACBBlQICAgIgCuATAgIgAAI0wA4ADkADlDaUNsAYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVQiQCNAI0AjQAvAI0A1QHMAI0AjQAVAI2AAIAzgACBBlQICAgIgCuATQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUCJQAVUIkAjQCNAI0ALwCNANUBzQCNAI0AFQCNgACAWIAAgQZUCAgICIArgE4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFVCJAI0AjQCNAC8AjQDVAc4AjQCNABUAjYAAgDOAAIEGVAgICAiAK4BPCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVQiQCNAI0AjQAvAI0A1QHPAI0AjQAVAI2AAIAAgACBBlQICAgIgCuAUAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVUIkAjQCNAI0ALwCNANUB0ACNAI0AFQCNgACAM4AAgQZUCAgICIArgFEICIAACNkAHwAjUSkADgAmUSoAIQB+UStN5AG0AH8AngAVACcALwCNUTNfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBBlGAR4AagD2AAIAECIEGYNMAOAA5AA5RNVE8AGCmAnECcwJuAm8CcAJygGGAY4BegF+AYIBiplE9UT5RP1FAUUFRQoEGYYEGvYEGvoEGv4EGwIEGwYA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAUAAVUIoAjQCNAI0ALwCNANUCcQCNAI0AFQCNgACBBmKAAIEGXwgICAiAK4BhCAiAAAjfEBBRVFFVUVZRVwAfUVhRWQAhUVpRWwAOACNRXFFdACYAfgB/UV8AJwAnABNRYwCFAC8AJwB/AIgAPQB/UWpRawCNXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zZHVwbGljYXRlc18QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNzdG9yYWdlgBqBBnWABIAEgAKBBmSBAu+ABIAagQLxgAiAGoEGvIEGYwgTAAAAARtmJ1/TADgAOQAOUW9RcQBgoQCSgByhUXKBBmWANtkAHwAjUXUADgAmUXYAIQB+UXcAUACSAH8AngAVACcALwCNUX9fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBBmKAHIAagD2AAIAECIEGZtMAOAA5AA5RgVGLAGCpAKUApgCnAKgAqQCqAKsArACtgB+AIIA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bAAAgHQAAICwAACBRAAAgdQAAIJwAACDAAAAgwgAAIMQAACDGAAAgyAAAIMoAACDMAAAgzQAAIM8AACDcAAAg7wAAIPEAACDzAAAg9QAAIPcAACD5AAAg+wAAIP0AACD/AAAhAQAAIRQAACEWAAAhGAAAIRoAACEcAAAhHgAAISAAACEiAAAhJAAAISYAACEoAAAhPgAAIVEAACFtAAAhigAAIaYAACG6AAAhzAAAIeIAACH7AAAiOgAAIkAAACJJAAAiVgAAImIAACJsAAAidgAAIoEAACKMAAAimQAAIqEAACKjAAAipQAAIqcAACKpAAAiqgAAIqsAACKsAAAirQAAIq8AACKxAAAisgAAIrMAACK1AAAitgAAIr8AACLAAAAiwgAAIssAACLWAAAi3wAAIu4AACL1AAAi/QAAIwYAACMPAAAjIgAAIysAACM+AAAjVQAAI2cAACOmAAAjqAAAI6oAACOsAAAjrgAAI68AACOwAAAjsQAAI7IAACO0AAAjtgAAI7cAACO4AAAjugAAI7sAACP6AAAj/AAAI/4AACQAAAAkAgAAJAMAACQEAAAkBQAAJAYAACQIAAAkCgAAJAsAACQMAAAkDgAAJA8AACQYAAAkGQAAJBsAACRaAAAkXAAAJF4AACRgAAAkYgAAJGMAACRkAAAkZQAAJGYAACRoAAAkagAAJGsAACRsAAAkbgAAJG8AACSuAAAksAAAJLIAACS0AAAktgAAJLcAACS4AAAkuQAAJLoAACS8AAAkvgAAJL8AACTAAAAkwgAAJMMAACTMAAAkzQAAJM8AACUOAAAlEAAAJRIAACUUAAAlFgAAJRcAACUYAAAlGQAAJRoAACUcAAAlHgAAJR8AACUgAAAlIgAAJSMAACUkAAAlYwAAJWUAACVnAAAlaQAAJWsAACVsAAAlbQAAJW4AACVvAAAlcQAAJXMAACV0AAAldQAAJXcAACV4AAAlhQAAJYYAACWHAAAliQAAJZIAACWoAAAlrwAAJbwAACX7AAAl/QAAJf8AACYBAAAmAwAAJgQAACYFAAAmBgAAJgcAACYJAAAmCwAAJgwAACYNAAAmDwAAJhAAACYpAAAmKwAAJi0AACYvAAAmMAAAJjIAACZJAAAmUgAAJmAAACZtAAAmewAAJpAAACakAAAmuwAAJs0AACcMAAAnDgAAJxAAACcSAAAnFAAAJxUAACcWAAAnFwAAJxgAACcaAAAnHAAAJx0AACceAAAnIAAAJyEAACcvAAAnOAAAJ00AACdcAAAncQAAJ38AACeUAAAnqAAAJ78AACfRAAAn3gAAJ+cAACfpAAAn6wAAJ+0AACfvAAAn+AAAJ/oAACf9AAAoAAAAKAMAACgFAAAoCwAAKBEAACgWAAAoGgAAKGUAACiIAAAoqAAAKMgAACjKAAAozAAAKM4AACjQAAAo0gAAKNMAACjUAAAo1gAAKNcAACjZAAAo2gAAKNwAACjeAAAo3wAAKOAAACjiAAAo4wAAKOgAACj1AAAo+gAAKPwAACj+AAApAwAAKQUAACkHAAApCQAAKR4AACkxAAApVgAAKXoAACmhAAApxQAAKccAACnJAAApywAAKc0AACnPAAAp0QAAKdIAACnUAAAp4QAAKfIAACn0AAAp9gAAKfgAACn6AAAp/AAAKf4AACoAAAAqAgAAKhMAACoVAAAqFwAAKhkAACobAAAqHQAAKh8AACohAAAqIwAAKiUAACpDAAAqYQAAKnQAACqIAAAqnQAAKroAACrOAAAq5AAAKyMAACslAAArJwAAKykAACsrAAArLAAAKy0AACsuAAArLwAAKzEAACszAAArNAAAKzUAACs3AAArOAAAK3cAACt5AAArewAAK30AACt/AAArgAAAK4EAACuCAAArgwAAK4UAACuHAAAriAAAK4kAACuLAAArjAAAK8sAACvNAAArzwAAK9EAACvTAAAr1AAAK9UAACvWAAAr1wAAK9kAACvbAAAr3AAAK90AACvfAAAr4AAAK+0AACvuAAAr7wAAK/EAACwwAAAsMgAALDQAACw2AAAsOAAALDkAACw6AAAsOwAALDwAACw+AAAsQAAALEEAACxCAAAsRAAALEUAACyEAAAshgAALIgAACyKAAAsjAAALI0AACyOAAAsjwAALJAAACySAAAslAAALJUAACyWAAAsmAAALJkAACyaAAAs2QAALNsAACzdAAAs3wAALOEAACziAAAs4wAALOQAACzlAAAs5wAALOkAACzqAAAs6wAALO0AACzuAAAtLQAALS8AAC0xAAAtMwAALTUAAC02AAAtNwAALTgAAC05AAAtOwAALT0AAC0+AAAtPwAALUEAAC1CAAAtgQAALYMAAC2FAAAthwAALYkAAC2KAAAtiwAALYwAAC2NAAAtjwAALZEAAC2SAAAtkwAALZUAAC2WAAAtuwAALd8AAC4GAAAuKgAALiwAAC4uAAAuMAAALjIAAC40AAAuNgAALjcAAC45AAAuRgAALlUAAC5XAAAuWQAALlsAAC5dAAAuXwAALmEAAC5jAAAucgAALnQAAC52AAAueAAALnoAAC59AAAugAAALoMAAC6FAAAulwAALqsAAC69AAAu0gAALuQAAC7zAAAvEAAAL08AAC9RAAAvUwAAL1UAAC9XAAAvWAAAL1kAAC9aAAAvWwAAL10AAC9fAAAvYAAAL2EAAC9jAAAvZAAAL6MAAC+lAAAvpwAAL6kAAC+rAAAvrAAAL60AAC+uAAAvrwAAL7EAAC+zAAAvtAAAL7UAAC+3AAAvuAAAL7oAAC/5AAAv+wAAL/0AAC//AAAwAQAAMAIAADADAAAwBAAAMAUAADAHAAAwCQAAMAoAADALAAAwDQAAMA4AADBNAAAwTwAAMFEAADBTAAAwVQAAMFYAADBXAAAwWAAAMFkAADBbAAAwXQAAMF4AADBfAAAwYQAAMGIAADClAAAwyQAAMO0AADEQAAAxNwAAMVcAADF+AAAxpQAAMcUAADHpAAAyDQAAMg8AADIRAAAyEwAAMhUAADIXAAAyGQAAMhwAADIeAAAyIAAAMiMAADIlAAAyJwAAMioAADIsAAAyLQAAMjIAADI/AAAyQgAAMkQAADJHAAAySQAAMksAADJwAAAylAAAMrsAADLfAAAy4QAAMuMAADLlAAAy5wAAMukAADLrAAAy7AAAMu4AADL7AAAzDgAAMxAAADMSAAAzFAAAMxYAADMYAAAzGgAAMxwAADMeAAAzIAAAMzMAADM1AAAzNwAAMzkAADM7AAAzPQAAMz8AADNBAAAzQwAAM0UAADNHAAAzhgAAM4gAADOKAAAzjAAAM44AADOPAAAzkAAAM5EAADOSAAAzlAAAM5YAADOXAAAzmAAAM5oAADObAAAzpAAAM6UAADOnAAAz5gAAM+gAADPqAAAz7AAAM+4AADPvAAAz8AAAM/EAADPyAAAz9AAAM/YAADP3AAAz+AAAM/oAADP7AAA0OgAANDwAADQ+AAA0QAAANEIAADRDAAA0RAAANEUAADRGAAA0SAAANEoAADRLAAA0TAAANE4AADRPAAA0WAAANFsAADRdAAA0XwAANGgAADRrAAA0bQAANG8AADR3AAA0tgAANLgAADS6AAA0vAAANL4AADS/AAA0wAAANMEAADTCAAA0xAAANMYAADTHAAA0yAAANMoAADTLAAA1CgAANQwAADUOAAA1EAAANRIAADUTAAA1FAAANRUAADUWAAA1GAAANRoAADUbAAA1HAAANR4AADUfAAA1KAAANSkAADUrAAA1agAANWwAADVuAAA1cAAANXIAADVzAAA1dAAANXUAADV2AAA1eAAANXoAADV7AAA1fAAANX4AADV/AAA1vgAANcAAADXCAAA1xAAANcYAADXHAAA1yAAANckAADXKAAA1zAAANc4AADXPAAA10AAANdIAADXTAAA14AAANeEAADXiAAA15AAANiMAADYlAAA2JwAANikAADYrAAA2LAAANi0AADYuAAA2LwAANjEAADYzAAA2NAAANjUAADY3AAA2OAAANncAADZ5AAA2ewAANn0AADZ/AAA2gAAANoEAADaCAAA2gwAANoUAADaHAAA2iAAANokAADaLAAA2jAAANpkAADbcAAA23gAANuAAADbiAAA25AAANuYAADboAAA26gAANuwAADbuAAA28AAANvIAADb0AAA29gAANvgAADb6AAA2/AAANv4AADcAAAA3AgAANwQAADcGAAA3CAAANwoAADcMAAA3DgAANxAAADcSAAA3FAAANxYAADcYAAA3GgAANxwAADdfAAA3YQAAN2MAADdlAAA3ZwAAN2oAADdtAAA3cAAAN3MAADd2AAA3eQAAN3wAADd/AAA3ggAAN4UAADeIAAA3iwAAN44AADeRAAA3lAAAN5cAADeaAAA3nQAAN6AAADejAAA3pgAAN6kAADesAAA3rwAAN7IAADe1AAA3uAAAN7sAADe9AAA3wgAAN8wAADfaAAA36QAAN/EAADf/AAA4DQAAOBIAADghAAA4LwAAOD0AADhCAAA4VgAAOF0AADhkAAA4cgAAOHwAADiLAAA4oQAAOKoAADiwAAA4twAAOMAAADjNAAA44QAAOPQAADj+AAA5EAAAOR4AADkqAAA5dQAAOZgAADm4AAA52AAAOdoAADncAAA53gAAOeAAADniAAA54wAAOeQAADnmAAA55wAAOekAADnqAAA57AAAOe4AADnvAAA58AAAOfIAADnzAAA5+AAAOgUAADoKAAA6DAAAOg4AADoTAAA6FQAAOhcAADoZAAA6LgAAOlMAADp3AAA6ngAAOsIAADrEAAA6xgAAOsgAADrKAAA6zAAAOs4AADrPAAA60QAAOt4AADrvAAA68QAAOvMAADr1AAA69wAAOvkAADr7AAA6/QAAOv8AADsQAAA7EgAAOxQAADsWAAA7GAAAOxoAADscAAA7HgAAOyAAADsiAAA7YQAAO2MAADtlAAA7ZwAAO2kAADtqAAA7awAAO2wAADttAAA7bwAAO3EAADtyAAA7cwAAO3UAADt2AAA7tQAAO7cAADu5AAA7uwAAO70AADu+AAA7vwAAO8AAADvBAAA7wwAAO8UAADvGAAA7xwAAO8kAADvKAAA8CQAAPAsAADwNAAA8DwAAPBEAADwSAAA8EwAAPBQAADwVAAA8FwAAPBkAADwaAAA8GwAAPB0AADweAAA8KwAAPCwAADwtAAA8LwAAPG4AADxwAAA8cgAAPHQAADx2AAA8dwAAPHgAADx5AAA8egAAPHwAADx+AAA8fwAAPIAAADyCAAA8gwAAPMIAADzEAAA8xgAAPMgAADzKAAA8ywAAPMwAADzNAAA8zgAAPNAAADzSAAA80wAAPNQAADzWAAA81wAAPRYAAD0YAAA9GgAAPRwAAD0eAAA9HwAAPSAAAD0hAAA9IgAAPSQAAD0mAAA9JwAAPSgAAD0qAAA9KwAAPWoAAD1sAAA9bgAAPXAAAD1yAAA9cwAAPXQAAD11AAA9dgAAPXgAAD16AAA9ewAAPXwAAD1+AAA9fwAAPb4AAD3AAAA9wgAAPcQAAD3GAAA9xwAAPcgAAD3JAAA9ygAAPcwAAD3OAAA9zwAAPdAAAD3SAAA90wAAPfgAAD4cAAA+QwAAPmcAAD5pAAA+awAAPm0AAD5vAAA+cQAAPnMAAD50AAA+dgAAPoMAAD6SAAA+lAAAPpYAAD6YAAA+mgAAPpwAAD6eAAA+oAAAPq8AAD6xAAA+swAAPrUAAD63AAA+uQAAPrsAAD69AAA+vwAAPt8AAD8KAAA/JAAAPz0AAD9XAAA/dwAAP5oAAD/ZAAA/2wAAP90AAD/fAAA/4QAAP+IAAD/jAAA/5AAAP+UAAD/nAAA/6QAAP+oAAD/rAAA/7QAAP+4AAEAtAABALwAAQDEAAEAzAABANQAAQDYAAEA3AABAOAAAQDkAAEA7AABAPQAAQD4AAEA/AABAQQAAQEIAAECBAABAgwAAQIUAAECHAABAiQAAQIoAAECLAABAjAAAQI0AAECPAABAkQAAQJIAAECTAABAlQAAQJYAAEDVAABA1wAAQNkAAEDbAABA3QAAQN4AAEDfAABA4AAAQOEAAEDjAABA5QAAQOYAAEDnAABA6QAAQOoAAEDtAABBLAAAQS4AAEEwAABBMgAAQTQAAEE1AABBNgAAQTcAAEE4AABBOgAAQTwAAEE9AABBPgAAQUAAAEFBAABBgAAAQYIAAEGEAABBhgAAQYgAAEGJAABBigAAQYsAAEGMAABBjgAAQZAAAEGRAABBkgAAQZQAAEGVAABB1AAAQdYAAEHYAABB2gAAQdwAAEHdAABB3gAAQd8AAEHgAABB4gAAQeQAAEHlAABB5gAAQegAAEHpAABB8gAAQgAAAEINAABCGwAAQigAAEI7AABCUgAAQmQAAEKvAABC0gAAQvIAAEMSAABDFAAAQxYAAEMYAABDGgAAQxwAAEMdAABDHgAAQyAAAEMhAABDIwAAQyQAAEMmAABDKAAAQykAAEMqAABDLAAAQy0AAEMyAABDPwAAQ0QAAENGAABDSAAAQ00AAENPAABDUQAAQ1MAAEN4AABDnAAAQ8MAAEPnAABD6QAAQ+sAAEPtAABD7wAAQ/EAAEPzAABD9AAAQ/YAAEQDAABEFAAARBYAAEQYAABEGgAARBwAAEQeAABEIAAARCIAAEQkAABENQAARDcAAEQ5AABEOwAARD0AAEQ/AABEQQAAREMAAERFAABERwAARIYAAESIAABEigAARIwAAESOAABEjwAARJAAAESRAABEkgAARJQAAESWAABElwAARJgAAESaAABEmwAARNoAAETcAABE3gAAROAAAETiAABE4wAAROQAAETlAABE5gAAROgAAETqAABE6wAAROwAAETuAABE7wAARS4AAEUwAABFMgAARTQAAEU2AABFNwAARTgAAEU5AABFOgAARTwAAEU+AABFPwAARUAAAEVCAABFQwAARVAAAEVRAABFUgAARVQAAEWTAABFlQAARZcAAEWZAABFmwAARZwAAEWdAABFngAARZ8AAEWhAABFowAARaQAAEWlAABFpwAARagAAEXnAABF6QAAResAAEXtAABF7wAARfAAAEXxAABF8gAARfMAAEX1AABF9wAARfgAAEX5AABF+wAARfwAAEY7AABGPQAARj8AAEZBAABGQwAARkQAAEZFAABGRgAARkcAAEZJAABGSwAARkwAAEZNAABGTwAARlAAAEaPAABGkQAARpMAAEaVAABGlwAARpgAAEaZAABGmgAARpsAAEadAABGnwAARqAAAEahAABGowAARqQAAEbjAABG5QAARucAAEbpAABG6wAARuwAAEbtAABG7gAARu8AAEbxAABG8wAARvQAAEb1AABG9wAARvgAAEcdAABHQQAAR2gAAEeMAABHjgAAR5AAAEeSAABHlAAAR5YAAEeYAABHmQAAR5sAAEeoAABHtwAAR7kAAEe7AABHvQAAR78AAEfBAABHwwAAR8UAAEfUAABH1gAAR9gAAEfaAABH3AAAR94AAEfgAABH4gAAR+QAAEgjAABIJQAASCcAAEgpAABIKwAASCwAAEgtAABILgAASC8AAEgxAABIMwAASDQAAEg1AABINwAASDgAAEh3AABIeQAASHsAAEh9AABIfwAASIAAAEiBAABIggAASIMAAEiFAABIhwAASIgAAEiJAABIiwAASIwAAEjLAABIzQAASM8AAEjRAABI0wAASNQAAEjVAABI1gAASNcAAEjZAABI2wAASNwAAEjdAABI3wAASOAAAEkfAABJIQAASSMAAEklAABJJwAASSgAAEkpAABJKgAASSsAAEktAABJLwAASTAAAEkxAABJMwAASTQAAElzAABJdQAASXcAAEl5AABJewAASXwAAEl9AABJfgAASX8AAEmBAABJgwAASYQAAEmFAABJhwAASYgAAEnHAABJyQAAScsAAEnNAABJzwAASdAAAEnRAABJ0gAASdMAAEnVAABJ1wAASdgAAEnZAABJ2wAASdwAAEobAABKHQAASh8AAEohAABKIwAASiQAAEolAABKJgAASicAAEopAABKKwAASiwAAEotAABKLwAASjAAAEo5AABKTAAASlkAAEpsAABKeQAASowAAEqjAABKtQAASwAAAEsjAABLQwAAS2MAAEtlAABLZwAAS2kAAEtrAABLbQAAS24AAEtvAABLcQAAS3IAAEt0AABLdQAAS3cAAEt5AABLegAAS3sAAEt9AABLfgAAS4MAAEuQAABLlQAAS5cAAEuZAABLngAAS6AAAEuiAABLpAAAS8kAAEvtAABMFAAATDgAAEw6AABMPAAATD4AAExAAABMQgAATEQAAExFAABMRwAATFQAAExlAABMZwAATGkAAExrAABMbQAATG8AAExxAABMcwAATHUAAEyGAABMiAAATIoAAEyMAABMjgAATJAAAEySAABMlAAATJYAAEyYAABM1wAATNkAAEzbAABM3QAATN8AAEzgAABM4QAATOIAAEzjAABM5QAATOcAAEzoAABM6QAATOsAAEzsAABNKwAATS0AAE0vAABNMQAATTMAAE00AABNNQAATTYAAE03AABNOQAATTsAAE08AABNPQAATT8AAE1AAABNfwAATYEAAE2DAABNhQAATYcAAE2IAABNiQAATYoAAE2LAABNjQAATY8AAE2QAABNkQAATZMAAE2UAABNoQAATaIAAE2jAABNpQAATeQAAE3mAABN6AAATeoAAE3sAABN7QAATe4AAE3vAABN8AAATfIAAE30AABN9QAATfYAAE34AABN+QAATjgAAE46AABOPAAATj4AAE5AAABOQQAATkIAAE5DAABORAAATkYAAE5IAABOSQAATkoAAE5MAABOTQAATowAAE6OAABOkAAATpIAAE6UAABOlQAATpYAAE6XAABOmAAATpoAAE6cAABOnQAATp4AAE6gAABOoQAATuAAAE7iAABO5AAATuYAAE7oAABO6QAATuoAAE7rAABO7AAATu4AAE7wAABO8QAATvIAAE70AABO9QAATzQAAE82AABPOAAATzoAAE88AABPPQAATz4AAE8/AABPQAAAT0IAAE9EAABPRQAAT0YAAE9IAABPSQAAT24AAE+SAABPuQAAT90AAE/fAABP4QAAT+MAAE/lAABP5wAAT+kAAE/qAABP7AAAT/kAAFAIAABQCgAAUAwAAFAOAABQEAAAUBIAAFAUAABQFgAAUCUAAFAnAABQKQAAUCsAAFAtAABQLwAAUDEAAFAzAABQNQAAUHQAAFB2AABQeAAAUHoAAFB8AABQfQAAUH4AAFB/AABQgAAAUIIAAFCEAABQhQAAUIYAAFCIAABQiQAAUIsAAFDKAABQzAAAUM4AAFDQAABQ0gAAUNMAAFDUAABQ1QAAUNYAAFDYAABQ2gAAUNsAAFDcAABQ3gAAUN8AAFEeAABRIAAAUSIAAFEkAABRJgAAUScAAFEoAABRKQAAUSoAAFEsAABRLgAAUS8AAFEwAABRMgAAUTMAAFFyAABRdAAAUXYAAFF4AABRegAAUXsAAFF8AABRfQAAUX4AAFGAAABRggAAUYMAAFGEAABRhgAAUYcAAFGJAABRyAAAUcoAAFHMAABRzgAAUdAAAFHRAABR0gAAUdMAAFHUAABR1gAAUdgAAFHZAABR2gAAUdwAAFHdAABSHAAAUh4AAFIgAABSIgAAUiQAAFIlAABSJgAAUicAAFIoAABSKgAAUiwAAFItAABSLgAAUjAAAFIxAABScAAAUnIAAFJ0AABSdgAAUngAAFJ5AABSegAAUnsAAFJ8AABSfgAAUoAAAFKBAABSggAAUoQAAFKFAABS0AAAUvMAAFMTAABTMwAAUzUAAFM3AABTOQAAUzsAAFM9AABTPgAAUz8AAFNBAABTQgAAU0QAAFNFAABTRwAAU0kAAFNKAABTSwAAU00AAFNOAABTUwAAU2AAAFNlAABTZwAAU2kAAFNuAABTcAAAU3IAAFN0AABTmQAAU70AAFPkAABUCAAAVAoAAFQMAABUDgAAVBAAAFQSAABUFAAAVBUAAFQXAABUJAAAVDUAAFQ3AABUOQAAVDsAAFQ9AABUPwAAVEEAAFRDAABURQAAVFYAAFRYAABUWgAAVFwAAFReAABUYAAAVGIAAFRkAABUZgAAVGgAAFSnAABUqQAAVKsAAFStAABUrwAAVLAAAFSxAABUsgAAVLMAAFS1AABUtwAAVLgAAFS5AABUuwAAVLwAAFT7AABU/QAAVP8AAFUBAABVAwAAVQQAAFUFAABVBgAAVQcAAFUJAABVCwAAVQwAAFUNAABVDwAAVRAAAFVPAABVUQAAVVMAAFVVAABVVwAAVVgAAFVZAABVWgAAVVsAAFVdAABVXwAAVWAAAFVhAABVYwAAVWQAAFVxAABVcgAAVXMAAFV1AABVtAAAVbYAAFW4AABVugAAVbwAAFW9AABVvgAAVb8AAFXAAABVwgAAVcQAAFXFAABVxgAAVcgAAFXJAABWCAAAVgoAAFYMAABWDgAAVhAAAFYRAABWEgAAVhMAAFYUAABWFgAAVhgAAFYZAABWGgAAVhwAAFYdAABWXAAAVl4AAFZgAABWYgAAVmQAAFZlAABWZgAAVmcAAFZoAABWagAAVmwAAFZtAABWbgAAVnAAAFZxAABWsAAAVrIAAFa0AABWtgAAVrgAAFa5AABWugAAVrsAAFa8AABWvgAAVsAAAFbBAABWwgAAVsQAAFbFAABXBAAAVwYAAFcIAABXCgAAVwwAAFcNAABXDgAAVw8AAFcQAABXEgAAVxQAAFcVAABXFgAAVxgAAFcZAABXPgAAV2IAAFeJAABXrQAAV68AAFexAABXswAAV7UAAFe3AABXuQAAV7oAAFe8AABXyQAAV9gAAFfaAABX3AAAV94AAFfgAABX4gAAV+QAAFfmAABX9QAAV/gAAFf7AABX/gAAWAEAAFgEAABYBwAAWAoAAFgMAABYSwAAWE0AAFhPAABYUQAAWFMAAFhUAABYVQAAWFYAAFhXAABYWQAAWFsAAFhcAABYXQAAWF8AAFhgAABYnwAAWKEAAFijAABYpQAAWKcAAFioAABYqQAAWKoAAFirAABYrQAAWK8AAFiwAABYsQAAWLMAAFi0AABY8wAAWPUAAFj3AABY+QAAWPsAAFj8AABY/QAAWP4AAFj/AABZAQAAWQMAAFkEAABZBQAAWQcAAFkIAABZRwAAWUkAAFlLAABZTQAAWU8AAFlQAABZUQAAWVIAAFlTAABZVQAAWVcAAFlYAABZWQAAWVsAAFlcAABZmwAAWZ0AAFmfAABZoQAAWaMAAFmkAABZpQAAWaYAAFmnAABZqQAAWasAAFmsAABZrQAAWa8AAFmwAABZ7wAAWfEAAFnzAABZ9QAAWfcAAFn4AABZ+QAAWfoAAFn7AABZ/QAAWf8AAFoAAABaAQAAWgMAAFoEAABaQwAAWkUAAFpHAABaSQAAWksAAFpMAABaTQAAWk4AAFpPAABaUQAAWlMAAFpUAABaVQAAWlcAAFpYAABaowAAWsYAAFrmAABbBgAAWwgAAFsKAABbDAAAWw4AAFsQAABbEQAAWxIAAFsVAABbFgAAWxgAAFsZAABbGwAAWx0AAFseAABbHwAAWyIAAFsjAABbKAAAWzUAAFs6AABbPAAAWz4AAFtDAABbRgAAW0kAAFtLAABbcAAAW5QAAFu7AABb3wAAW+IAAFvkAABb5gAAW+gAAFvqAABb7AAAW+0AAFvwAABb/QAAXA4AAFwQAABcEgAAXBQAAFwWAABcGAAAXBoAAFwcAABcHgAAXC8AAFwyAABcNQAAXDgAAFw7AABcPgAAXEEAAFxEAABcRwAAXEkAAFyIAABcigAAXIwAAFyOAABckQAAXJIAAFyTAABclAAAXJUAAFyXAABcmQAAXJoAAFybAABcnQAAXJ4AAFzdAABc3wAAXOEAAFzjAABc5gAAXOcAAFzoAABc6QAAXOoAAFzsAABc7gAAXO8AAFzwAABc8gAAXPMAAF0yAABdNAAAXTcAAF05AABdPAAAXT0AAF0+AABdPwAAXUAAAF1CAABdRAAAXUUAAF1GAABdSAAAXUkAAF1WAABdVwAAXVgAAF1aAABdmQAAXZsAAF2dAABdnwAAXaIAAF2jAABdpAAAXaUAAF2mAABdqAAAXaoAAF2rAABdrAAAXa4AAF2vAABd7gAAXfAAAF3yAABd9AAAXfcAAF34AABd+QAAXfoAAF37AABd/QAAXf8AAF4AAABeAQAAXgMAAF4EAABeQwAAXkUAAF5HAABeSQAAXkwAAF5NAABeTgAAXk8AAF5QAABeUgAAXlQAAF5VAABeVgAAXlgAAF5ZAABemAAAXpoAAF6cAABengAAXqEAAF6iAABeowAAXqQAAF6lAABepwAAXqkAAF6qAABeqwAAXq0AAF6uAABe7QAAXu8AAF7xAABe8wAAXvYAAF73AABe+AAAXvkAAF76AABe/AAAXv4AAF7/AABfAAAAXwIAAF8DAABfKAAAX0wAAF9zAABflwAAX5oAAF+cAABfngAAX6AAAF+iAABfpAAAX6UAAF+oAABftQAAX8QAAF/GAABfyAAAX8oAAF/MAABfzgAAX9AAAF/SAABf4QAAX+QAAF/nAABf6gAAX+0AAF/wAABf8wAAX/YAAF/4AABgNwAAYDkAAGA7AABgPQAAYEAAAGBBAABgQgAAYEMAAGBEAABgRgAAYEgAAGBJAABgSgAAYEwAAGBNAABgjAAAYI4AAGCQAABgkgAAYJUAAGCWAABglwAAYJgAAGCZAABgmwAAYJ0AAGCeAABgnwAAYKEAAGCiAABg4QAAYOMAAGDlAABg5wAAYOoAAGDrAABg7AAAYO0AAGDuAABg8AAAYPIAAGDzAABg9AAAYPYAAGD3AABhNgAAYTgAAGE6AABhPAAAYT8AAGFAAABhQQAAYUIAAGFDAABhRQAAYUcAAGFIAABhSQAAYUsAAGFMAABhiwAAYY0AAGGPAABhkQAAYZQAAGGVAABhlgAAYZcAAGGYAABhmgAAYZwAAGGdAABhngAAYaAAAGGhAABh4AAAYeIAAGHkAABh5gAAYekAAGHqAABh6wAAYewAAGHtAABh7wAAYfEAAGHyAABh8wAAYfUAAGH2AABiNQAAYjcAAGI5AABiOwAAYj4AAGI/AABiQAAAYkEAAGJCAABiRAAAYkYAAGJHAABiSAAAYkoAAGJLAABilgAAYrkAAGLZAABi+QAAYvsAAGL9AABi/wAAYwEAAGMDAABjBAAAYwUAAGMIAABjCQAAYwsAAGMMAABjDgAAYxAAAGMRAABjEgAAYxUAAGMWAABjGwAAYygAAGMtAABjLwAAYzEAAGM2AABjOQAAYzwAAGM+AABjYwAAY4cAAGOuAABj0gAAY9UAAGPXAABj2QAAY9sAAGPdAABj3wAAY+AAAGPjAABj8AAAZAEAAGQDAABkBQAAZAcAAGQJAABkCwAAZA0AAGQPAABkEQAAZCIAAGQlAABkKAAAZCsAAGQuAABkMQAAZDQAAGQ3AABkOgAAZDwAAGR7AABkfQAAZH8AAGSBAABkhAAAZIUAAGSGAABkhwAAZIgAAGSKAABkjAAAZI0AAGSOAABkkAAAZJEAAGTQAABk0gAAZNQAAGTWAABk2QAAZNoAAGTbAABk3AAAZN0AAGTfAABk4QAAZOIAAGTjAABk5QAAZOYAAGUlAABlJwAAZSoAAGUsAABlLwAAZTAAAGUxAABlMgAAZTMAAGU1AABlNwAAZTgAAGU5AABlOwAAZTwAAGVJAABlSgAAZUsAAGVNAABljAAAZY4AAGWQAABlkgAAZZUAAGWWAABllwAAZZgAAGWZAABlmwAAZZ0AAGWeAABlnwAAZaEAAGWiAABl4QAAZeMAAGXlAABl5wAAZeoAAGXrAABl7AAAZe0AAGXuAABl8AAAZfIAAGXzAABl9AAAZfYAAGX3AABmNgAAZjgAAGY6AABmPAAAZj8AAGZAAABmQQAAZkIAAGZDAABmRQAAZkcAAGZIAABmSQAAZksAAGZMAABmiwAAZo0AAGaPAABmkQAAZpQAAGaVAABmlgAAZpcAAGaYAABmmgAAZpwAAGadAABmngAAZqAAAGahAABm4AAAZuIAAGbkAABm5gAAZukAAGbqAABm6wAAZuwAAGbtAABm7wAAZvEAAGbyAABm8wAAZvUAAGb2AABnGwAAZz8AAGdmAABnigAAZ40AAGePAABnkQAAZ5MAAGeVAABnlwAAZ5gAAGebAABnqAAAZ7cAAGe5AABnuwAAZ70AAGe/AABnwQAAZ8MAAGfFAABn1AAAZ9cAAGfaAABn3QAAZ+AAAGfjAABn5gAAZ+kAAGfrAABoKgAAaCwAAGguAABoMAAAaDMAAGg0AABoNQAAaDYAAGg3AABoOQAAaDsAAGg8AABoPQAAaD8AAGhAAABofwAAaIEAAGiDAABohQAAaIgAAGiJAABoigAAaIsAAGiMAABojgAAaJAAAGiRAABokgAAaJQAAGiVAABo1AAAaNYAAGjYAABo2gAAaN0AAGjeAABo3wAAaOAAAGjhAABo4wAAaOUAAGjmAABo5wAAaOkAAGjqAABpKQAAaSsAAGkuAABpMAAAaTMAAGk0AABpNQAAaTYAAGk3AABpOQAAaTsAAGk8AABpPQAAaT8AAGlAAABpQwAAaYIAAGmEAABphgAAaYgAAGmLAABpjAAAaY0AAGmOAABpjwAAaZEAAGmTAABplAAAaZUAAGmXAABpmAAAadcAAGnZAABp3AAAad4AAGnhAABp4gAAaeMAAGnkAABp5QAAaecAAGnpAABp6gAAaesAAGntAABp7gAAahUAAGpUAABqVgAAalgAAGpaAABqXQAAal4AAGpfAABqYAAAamEAAGpjAABqZQAAamYAAGpnAABqaQAAamoAAGq1AABq2AAAavgAAGsYAABrGgAAaxwAAGseAABrIAAAayIAAGsjAABrJAAAaycAAGsoAABrKgAAaysAAGstAABrLwAAazAAAGsxAABrNAAAazUAAGs6AABrRwAAa0wAAGtOAABrUAAAa1UAAGtYAABrWwAAa10AAGuCAABrpgAAa80AAGvxAABr9AAAa/YAAGv4AABr+gAAa/wAAGv+AABr/wAAbAIAAGwPAABsIAAAbCIAAGwkAABsJgAAbCgAAGwqAABsLAAAbC4AAGwwAABsQQAAbEQAAGxHAABsSgAAbE0AAGxQAABsUwAAbFYAAGxZAABsWwAAbJoAAGycAABsngAAbKAAAGyjAABspAAAbKUAAGymAABspwAAbKkAAGyrAABsrAAAbK0AAGyvAABssAAAbO8AAGzxAABs8wAAbPUAAGz4AABs+QAAbPoAAGz7AABs/AAAbP4AAG0AAABtAQAAbQIAAG0EAABtBQAAbUQAAG1GAABtSQAAbUsAAG1OAABtTwAAbVAAAG1RAABtUgAAbVQAAG1WAABtVwAAbVgAAG1aAABtWwAAbWgAAG1pAABtagAAbWwAAG2rAABtrQAAba8AAG2xAABttAAAbbUAAG22AABttwAAbbgAAG26AABtvAAAbb0AAG2+AABtwAAAbcEAAG4AAABuAgAAbgQAAG4GAABuCQAAbgoAAG4LAABuDAAAbg0AAG4PAABuEQAAbhIAAG4TAABuFQAAbhYAAG5VAABuVwAAblkAAG5bAABuXgAAbl8AAG5gAABuYQAAbmIAAG5kAABuZgAAbmcAAG5oAABuagAAbmsAAG6qAABurAAAbq4AAG6wAABuswAAbrQAAG61AAButgAAbrcAAG65AABuuwAAbrwAAG69AABuvwAAbsAAAG7/AABvAQAAbwMAAG8FAABvCAAAbwkAAG8KAABvCwAAbwwAAG8OAABvEAAAbxEAAG8SAABvFAAAbxUAAG86AABvXgAAb4UAAG+pAABvrAAAb64AAG+wAABvsgAAb7QAAG+2AABvtwAAb7oAAG/HAABv1gAAb9gAAG/aAABv3AAAb94AAG/gAABv4gAAb+QAAG/zAABv9gAAb/kAAG/8AABv/wAAcAIAAHAFAABwCAAAcAoAAHBJAABwSwAAcE0AAHBPAABwUgAAcFMAAHBUAABwVQAAcFYAAHBYAABwWgAAcFsAAHBcAABwXgAAcF8AAHCeAABwoAAAcKIAAHCkAABwpwAAcKgAAHCpAABwqgAAcKsAAHCtAABwrwAAcLAAAHCxAABwswAAcLQAAHDzAABw9QAAcPcAAHD5AABw/AAAcP0AAHD+AABw/wAAcQAAAHECAABxBAAAcQUAAHEGAABxCAAAcQkAAHFIAABxSgAAcU0AAHFPAABxUgAAcVMAAHFUAABxVQAAcVYAAHFYAABxWgAAcVsAAHFcAABxXgAAcV8AAHFiAABxoQAAcaMAAHGlAABxpwAAcaoAAHGrAABxrAAAca0AAHGuAABxsAAAcbIAAHGzAABxtAAAcbYAAHG3AABx9gAAcfgAAHH6AABx/AAAcf8AAHIAAAByAQAAcgIAAHIDAAByBQAAcgcAAHIIAAByCQAAcgsAAHIMAABySwAAck0AAHJPAAByUQAAclQAAHJVAAByVgAAclcAAHJYAAByWgAAclwAAHJ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mAACUKAAAlGcAAJRpAACUawAAlG0AAJRwAACUcQAAlHIAAJRzAACUdAAAlHYAAJR4AACUeQAAlHoAAJR8AACUfQAAlLwAAJS+AACUwAAAlMIAAJTFAACUxgAAlMcAAJTIAACUyQAAlMsAAJTNAACUzgAAlM8AAJTRAACU0gAAlREAAJUTAACVFgAAlRgAAJUbAACVHAAAlR0AAJUeAACVHwAAlSEAAJUjAACVJAAAlSUAAJUnAACVKAAAlTUAAJU2AACVNwAAlTkAAJV4AACVegAAlXwAAJV+AACVgQAAlYIAAJWDAACVhAAAlYUAAJWHAACViQAAlYoAAJWLAACVjQAAlY4AAJXNAACVzwAAldEAAJXTAACV1gAAldcAAJXYAACV2QAAldoAAJXcAACV3gAAld8AAJXgAACV4gAAleMAAJYiAACWJAAAliYAAJYoAACWKwAAliwAAJYtAACWLgAAli8AAJYxAACWMwAAljQAAJY1AACWNwAAljgAAJZ3AACWeQAAlnsAAJZ9AACWgAAAloEAAJaCAACWgwAAloQAAJaGAACWiAAAlokAAJaKAACWjAAAlo0AAJbMAACWzgAAltAAAJbSAACW1QAAltYAAJbXAACW2AAAltkAAJbbAACW3QAAlt4AAJbfAACW4QAAluIAAJcHAACXKwAAl1IAAJd2AACXeQAAl3sAAJd9AACXfwAAl4EAAJeDAACXhAAAl4cAAJeUAACXowAAl6UAAJenAACXqQAAl6sAAJetAACXrwAAl7EAAJfAAACXwwAAl8YAAJfJAACXzAAAl88AAJfSAACX1QAAl9cAAJgWAACYGAAAmBoAAJgcAACYHwAAmCAAAJghAACYIgAAmCMAAJglAACYJwAAmCgAAJgpAACYKwAAmCwAAJhrAACYbQAAmG8AAJhxAACYdAAAmHUAAJh2AACYdwAAmHgAAJh6AACYfAAAmH0AAJh+AACYgAAAmIEAAJjAAACYwgAAmMQAAJjGAACYyQAAmMoAAJjLAACYzAAAmM0AAJjPAACY0QAAmNIAAJjTAACY1QAAmNYAAJkVAACZFwAAmRoAAJkcAACZHwAAmSAAAJkhAACZIgAAmSMAAJklAACZJwAAmSgAAJkpAACZKwAAmSwAAJlrAACZbQAAmW8AAJlxAACZdAAAmXUAAJl2AACZdwAAmXgAAJl6AACZfAAAmX0AAJl+AACZgAAAmYEAAJnAAACZwgAAmcQAAJnGAACZyQAAmcoAAJnLAACZzAAAmc0AAJnPAACZ0QAAmdIAAJnTAACZ1QAAmdYAAJoVAACaFwAAmhkAAJobAACaHgAAmh8AAJogAACaIQAAmiIAAJokAACaJgAAmicAAJooAACaKgAAmisAAJp2AACamQAAmrkAAJrZAACa2wAAmt0AAJrfAACa4QAAmuMAAJrkAACa5QAAmugAAJrpAACa6wAAmuwAAJruAACa8AAAmvEAAJryAACa9QAAmvYAAJr7AACbCAAAmw0AAJsPAACbEQAAmxYAAJsZAACbHAAAmx4AAJtDAACbZwAAm44AAJuyAACbtQAAm7cAAJu5AACbuwAAm70AAJu/AACbwAAAm8MAAJvQAACb4QAAm+MAAJvlAACb5wAAm+kAAJvrAACb7QAAm+8AAJvxAACcAgAAnAUAAJwIAACcCwAAnA4AAJwRAACcFAAAnBcAAJwaAACcHAAAnFsAAJxdAACcXwAAnGEAAJxkAACcZQAAnGYAAJxnAACcaAAAnGoAAJxsAACcbQAAnG4AAJxwAACccQAAnLAAAJyyAACctAAAnLYAAJy5AACcugAAnLsAAJy8AACcvQAAnL8AAJzBAACcwgAAnMMAAJzFAACcxgAAnQUAAJ0HAACdCgAAnQwAAJ0PAACdEAAAnREAAJ0SAACdEwAAnRUAAJ0XAACdGAAAnRkAAJ0bAACdHAAAnSkAAJ0qAACdKwAAnS0AAJ1sAACdbgAAnXAAAJ1yAACddQAAnXYAAJ13AACdeAAAnXkAAJ17AACdfQAAnX4AAJ1/AACdgQAAnYIAAJ3BAACdwwAAncUAAJ3HAACdygAAncsAAJ3MAACdzQAAnc4AAJ3QAACd0gAAndMAAJ3UAACd1gAAndcAAJ4WAACeGAAAnhoAAJ4cAACeHwAAniAAAJ4hAACeIgAAniMAAJ4lAACeJwAAnigAAJ4pAACeKwAAniwAAJ5rAACebQAAnm8AAJ5xAACedAAAnnUAAJ52AACedwAAnngAAJ56AACefAAAnn0AAJ5+AACegAAAnoEAAJ7AAACewgAAnsQAAJ7GAACeyQAAnsoAAJ7LAACezAAAns0AAJ7PAACe0QAAntIAAJ7TAACe1QAAntYAAJ77AACfHwAAn0YAAJ9qAACfbQAAn28AAJ9xAACfcwAAn3UAAJ93AACfeAAAn3sAAJ+IAACflwAAn5kAAJ+bAACfnQAAn58AAJ+hAACfowAAn6UAAJ+0AACftwAAn7oAAJ+9AACfwAAAn8MAAJ/GAACfyQAAn8sAAKAKAACgDAAAoA4AAKAQAACgEwAAoBQAAKAVAACgFgAAoBcAAKAZAACgGwAAoBwAAKAdAACgHwAAoCAAAKBfAACgYQAAoGMAAKBlAACgaAAAoGkAAKBqAACgawAAoGwAAKBuAACgcAAAoHEAAKByAACgdAAAoHUAAKC0AACgtgAAoLgAAKC6AACgvQAAoL4AAKC/AACgwAAAoMEAAKDDAACgxQAAoMYAAKDHAACgyQAAoMoAAKEJAAChCwAAoQ0AAKEPAAChEgAAoRMAAKEUAAChFQAAoRYAAKEYAAChGgAAoRsAAKEcAAChHgAAoR8AAKFeAAChYAAAoWIAAKFkAAChZwAAoWgAAKFpAAChagAAoWsAAKFtAAChbwAAoXAAAKFxAAChcwAAoXQAAKGzAAChtQAAobcAAKG5AAChvAAAob0AAKG+AAChvwAAocAAAKHCAAChxAAAocUAAKHGAAChyAAAockAAKIIAACiCgAAogwAAKIOAACiEQAAohIAAKITAACiFAAAohUAAKIXAACiGQAAohoAAKIbAACiHQAAoh4AAKJpAACijAAAoqwAAKLMAACizgAAotAAAKLSAACi1AAAotYAAKLXAACi2AAAotsAAKLcAACi3gAAot8AAKLhAACi4wAAouQAAKLlAACi6AAAoukAAKLuAACi+wAAowAAAKMCAACjBAAAowkAAKMMAACjDwAAoxEAAKM2AACjWgAAo4EAAKOlAACjqAAAo6oAAKOsAACjrgAAo7AAAKOyAACjswAAo7YAAKPDAACj1AAAo9YAAKPYAACj2gAAo9wAAKPeAACj4AAAo+IAAKPkAACj9QAAo/gAAKP7AACj/gAApAEAAKQEAACkBwAApAoAAKQNAACkDwAApE4AAKRQAACkUgAApFQAAKRXAACkWAAApFkAAKRaAACkWwAApF0AAKRfAACkYAAApGEAAKRjAACkZAAApKMAAKSlAACkpwAApKkAAKSsAACkrQAApK4AAKSvAACksAAApLIAAKS0AACktQAApLYAAKS4AACkuQAApPgAAKT6AACk/QAApP8AAKUCAAClAwAApQQAAKUFAAClBgAApQgAAKUKAAClCwAApQwAAKUOAAClDwAApRwAAKUdAAClHgAApSAAAKVfAAClYQAApWMAAKVlAAClaAAApWkAAKVqAAClawAApWwAAKVuAAClcAAApXEAAKVyAACldAAApXUAAKW0AACltgAApbgAAKW6AAClvQAApb4AAKW/AAClwAAApcEAAKXDAAClxQAApcYAAKXHAAClyQAApcoAAKYJAACmCwAApg0AAKYPAACmEgAAphMAAKYUAACmFQAAphYAAKYYAACmGgAAphsAAKYcAACmHgAAph8AAKZeAACmYAAApmIAAKZkAACmZwAApmgAAKZpAACmagAApmsAAKZtAACmbwAApnAAAKZxAACmcwAApnQAAKazAACmtQAAprcAAKa5AACmvAAApr0AAKa+AACmvwAApsAAAKbCAACmxAAApsUAAKbGAACmyAAApskAAKbuAACnEgAApzkAAKddAACnYAAAp2IAAKdkAACnZgAAp2gAAKdqAACnawAAp24AAKd7AACnigAAp4wAAKeOAACnkAAAp5IAAKeUAACnlgAAp5gAAKenAACnqgAAp60AAKewAACnswAAp7YAAKe5AACnvAAAp74AAKf9AACn/wAAqAEAAKgDAACoBgAAqAcAAKgIAACoCQAAqAoAAKgMAACoDgAAqA8AAKgQAACoEgAAqBMAAKhSAACoVAAAqFYAAKhYAACoWwAAqFwAAKhdAACoXgAAqF8AAKhhAACoYwAAqGQAAKhlAACoZwAAqGgAAKinAACoqQAAqKsAAKitAACosAAAqLEAAKiyAACoswAAqLQAAKi2AACouAAAqLkAAKi6AACovAAAqL0AAKj8AACo/gAAqQAAAKkCAACpBQAAqQYAAKkHAACpCAAAqQkAAKkLAACpDQAAqQ4AAKkPAACpEQAAqRIAAKlRAACpUwAAqVUAAKlXAACpWgAAqVsAAKlcAACpXQAAqV4AAKlgAACpYgAAqWMAAKlkAACpZgAAqWcAAKmmAACpqAAAqaoAAKmsAACprwAAqbAAAKmxAACpsgAAqbMAAKm1AACptwAAqbgAAKm5AACpuwAAqbwAAKn7AACp/QAAqf8AAKoBAACqBAAAqgUAAKoGAACqBwAAqggAAKoKAACqDAAAqg0AAKoOAACqEAAAqhEAAKpcAACqfwAAqp8AAKq/AACqwQAAqsMAAKrFAACqxwAAqskAAKrKAACqywAAqs4AAKrPAACq0QAAqtIAAKrUAACq1gAAqtcAAKrYAACq2wAAqtwAAKrhAACq7gAAqvMAAKr1AACq9wAAqvwAAKr/AACrAgAAqwQAAKspAACrTQAAq3QAAKuYAACrmwAAq50AAKufAACroQAAq6MAAKulAACrpgAAq6kAAKu2AACrxwAAq8kAAKvLAACrzQAAq88AAKvRAACr0wAAq9UAAKvXAACr6AAAq+sAAKvuAACr8QAAq/QAAKv3AACr+gAAq/0AAKwAAACsAgAArEEAAKxDAACsRQAArEcAAKxKAACsSwAArEwAAKxNAACsTgAArFAAAKxSAACsUwAArFQAAKxWAACsVwAArJYAAKyYAACsmgAArJwAAKyfAACsoAAArKEAAKyiAACsowAArKUAAKynAACsqAAArKkAAKyrAACsrAAArOsAAKztAACs8AAArPIAAKz1AACs9gAArPcAAKz4AACs+QAArPsAAKz9AACs/gAArP8AAK0BAACtAgAArQ8AAK0QAACtEQAArRMAAK1SAACtVAAArVYAAK1YAACtWwAArVwAAK1dAACtXgAArV8AAK1hAACtYwAArWQAAK1lAACtZwAArWgAAK2nAACtqQAArasAAK2tAACtsAAArbEAAK2yAACtswAArbQAAK22AACtuAAArbkAAK26AACtvAAArb0AAK38AACt/gAArgAAAK4CAACuBQAArgYAAK4HAACuCAAArgkAAK4LAACuDQAArg4AAK4PAACuEQAArhIAAK5RAACuUwAArlUAAK5XAACuWgAArlsAAK5cAACuXQAArl4AAK5gAACuYgAArmMAAK5kAACuZgAArmcAAK6mAACuqAAArqoAAK6sAACurwAArrAAAK6xAACusgAArrMAAK61AACutwAArrgAAK65AACuuwAArrwAAK7hAACvBQAArywAAK9QAACvUwAAr1UAAK9XAACvWQAAr1sAAK9dAACvXgAAr2EAAK9uAACvewAAr30AAK9/AACvgQAAr4MAAK+FAACvhwAAr5QAAK+XAACvmgAAr50AAK+gAACvowAAr6YAAK+oAACv5wAAr+kAAK/sAACv7gAAr/EAAK/yAACv8wAAr/QAAK/1AACv9wAAr/kAAK/6AACv+wAAr/0AAK/+AACwQQAAsGUAALCJAACwrAAAsNMAALDzAACxGgAAsUEAALFhAACxhQAAsakAALGrAACxrgAAsbAAALGyAACxtAAAsbcAALG6AACxvAAAsb4AALHBAACxwwAAscUAALHIAACxywAAscwAALHRAACx3gAAseEAALHjAACx5gAAsekAALHrAACyEAAAsjQAALJbAACyfwAAsoIAALKEAACyhgAAsogAALKKAACyjAAAso0AALKQAACynQAAsrAAALKyAACytAAAsrYAALK4AACyugAAsrwAALK+AACywAAAssIAALLVAACy2AAAstsAALLeAACy4QAAsuQAALLnAACy6gAAsu0AALLwAACy8gAAszEAALMzAACzNgAAszgAALM7AACzPAAAsz0AALM+AACzPwAAs0EAALNDAACzRAAAs0UAALNHAACzSAAAs1EAALNSAACzVAAAs5MAALOVAACzlwAAs5kAALOcAACznQAAs54AALOfAACzoAAAs6IAALOkAACzpQAAs6YAALOoAACzqQAAs+gAALPqAACz7QAAs+8AALPyAACz8wAAs/QAALP1AACz9gAAs/gAALP6AACz+wAAs/wAALP+AACz/wAAtAgAALQJAAC0CwAAtEoAALRMAAC0TgAAtFAAALRTAAC0VAAAtFUAALRWAAC0VwAAtFkAALRbAAC0XAAAtF0AALRfAAC0YAAAtJ8AALShAAC0pAAAtKYAALSpAAC0qgAAtKsAALSsAAC0rQAAtK8AALSxAAC0sgAAtLMAALS1AAC0tgAAtL8AALTAAAC0wgAAtQEAALUDAAC1BQAAtQcAALUKAAC1CwAAtQwAALUNAAC1DgAAtRAAALUSAAC1EwAAtRQAALUWAAC1FwAAtVYAALVYAAC1WwAAtV0AALVgAAC1YQAAtWIAALVjAAC1ZAAAtWYAALVoAAC1aQAAtWoAALVsAAC1bQAAtXoAALV7AAC1fAAAtX4AALW9AAC1vwAAtcEAALXDAAC1xgAAtccAALXIAAC1yQAAtcoAALXMAAC1zgAAtc8AALXQAAC10gAAtdMAALYSAAC2FAAAthYAALYYAAC2GwAAthwAALYdAAC2HgAAth8AALYhAAC2IwAAtiQAALYlAAC2JwAAtigAALY1AAC2XAAAtl8AALZiAAC2ZAAAtmcAALZqAAC2bQAAtnAAALZzAAC2dgAAtnkAALZ8AAC2fwAAtoEAALaEAAC2hwAAtooAALaMAAC2jwAAtrYAALa5AAC2vAAAtr8AALbCAAC2xQAAtsgAALbLAAC2zgAAttEAALbUAAC21wAAttoAALbdAAC24AAAtuMAALbmAAC26QAAtuwAALbuAAC28QAAtvkAALcHAAC3DgAAtxwAALciAAC3KAAAtzAAALc7AAC3RQAAt04AALdbAAC3cAAAt3oAALeOAAC32QAAt/wAALgcAAC4PAAAuD4AALhAAAC4QgAAuEQAALhHAAC4SAAAuEkAALhMAAC4TQAAuE8AALhQAAC4UgAAuFUAALhWAAC4VwAAuFoAALhbAAC4YAAAuG0AALhyAAC4dAAAuHYAALh7AAC4fgAAuIEAALiDAAC4qAAAuMwAALjzAAC5FwAAuRoAALkcAAC5HgAAuSAAALkiAAC5JAAAuSUAALkoAAC5NQAAuUYAALlIAAC5SgAAuUwAALlOAAC5UAAAuVIAALlUAAC5VgAAuWcAALlqAAC5bQAAuXAAALlzAAC5dgAAuXkAALl8AAC5fwAAuYEAALnAAAC5wgAAucQAALnGAAC5yQAAucoAALnLAAC5zAAAuc0AALnPAAC50QAAudIAALnTAAC51QAAudYAALoVAAC6FwAAuhkAALobAAC6HgAAuh8AALogAAC6IQAAuiIAALokAAC6JgAAuicAALooAAC6KgAAuisAALpqAAC6bAAAum8AALpxAAC6dAAAunUAALp2AAC6dwAAungAALp6AAC6fAAAun0AALp+AAC6gAAAuoEAALqOAAC6jwAAupAAALqSAAC60QAAutMAALrVAAC61wAAutoAALrbAAC63AAAut0AALreAAC64AAAuuIAALrjAAC65AAAuuYAALrnAAC7JgAAuygAALsqAAC7LAAAuy8AALswAAC7MQAAuzIAALszAAC7NQAAuzcAALs4AAC7OQAAuzsAALs8AAC7ewAAu30AALt/AAC7gQAAu4QAALuFAAC7hgAAu4cAALuIAAC7igAAu4wAALuNAAC7jgAAu5AAALuRAAC70AAAu9IAALvUAAC71gAAu9kAALvaAAC72wAAu9wAALvdAAC73wAAu+EAALviAAC74wAAu+UAALvmAAC8JQAAvCcAALw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3AADNBgAAzQkAAM0MAADNDwAAzRIAAM0VAADNGAAAzRsAAM0dAADNXAAAzV4AAM1gAADNYgAAzWUAAM1mAADNZwAAzWgAAM1pAADNawAAzW0AAM1uAADNbwAAzXEAAM1yAADNsQAAzbMAAM21AADNtwAAzboAAM27AADNvAAAzb0AAM2+AADNwAAAzcIAAM3DAADNxAAAzcYAAM3HAADOBgAAzggAAM4KAADODAAAzg8AAM4QAADOEQAAzhIAAM4TAADOFQAAzhcAAM4YAADOGQAAzhsAAM4cAADOWwAAzl0AAM5fAADOYQAAzmQAAM5lAADOZgAAzmcAAM5oAADOagAAzmwAAM5tAADObgAAznAAAM5xAADOsAAAzrIAAM60AADOtgAAzrkAAM66AADOuwAAzrwAAM69AADOvwAAzsEAAM7CAADOwwAAzsUAAM7GAADPBQAAzwcAAM8JAADPCwAAzw4AAM8PAADPEAAAzxEAAM8SAADPFAAAzxYAAM8XAADPGAAAzxoAAM8bAADPWgAAz1wAAM9eAADPYAAAz2MAAM9kAADPZQAAz2YAAM9nAADPaQAAz2sAAM9sAADPbQAAz28AAM9wAADPuwAAz94AAM/+AADQHgAA0CAAANAiAADQJAAA0CYAANApAADQKgAA0CsAANAuAADQLwAA0DEAANAyAADQNAAA0DcAANA4AADQOQAA0DwAANA9AADQRgAA0FMAANBYAADQWgAA0FwAANBhAADQZAAA0GcAANBpAADQjgAA0LIAANDZAADQ/QAA0QAAANECAADRBAAA0QYAANEIAADRCgAA0QsAANEOAADRGwAA0SwAANEuAADRMAAA0TIAANE0AADRNgAA0TgAANE6AADRPAAA0U0AANFQAADRUwAA0VYAANFZAADRXAAA0V8AANFiAADRZQAA0WcAANGmAADRqAAA0aoAANGsAADRrwAA0bAAANGxAADRsgAA0bMAANG1AADRtwAA0bgAANG5AADRuwAA0bwAANH7AADR/QAA0f8AANIBAADSBAAA0gUAANIGAADSBwAA0ggAANIKAADSDAAA0g0AANIOAADSEAAA0hEAANJQAADSUgAA0lUAANJXAADSWgAA0lsAANJcAADSXQAA0l4AANJgAADSYgAA0mMAANJkAADSZgAA0mcAANJ0AADSdQAA0nYAANJ4AADStwAA0rkAANK7AADSvQAA0sAAANLBAADSwgAA0sMAANLEAADSxgAA0sgAANLJAADSygAA0swAANLNAADTDAAA0w4AANMQAADTEgAA0xUAANMWAADTFwAA0xgAANMZAADTGwAA0x0AANMeAADTHwAA0yEAANMiAADTYQAA02MAANNlAADTZwAA02oAANNrAADTbAAA020AANNuAADTcAAA03IAANNzAADTdAAA03YAANN3AADTtgAA07gAANO6AADTvAAA078AANPAAADTwQAA08IAANPDAADTxQAA08cAANPIAADTyQAA08sAANPMAADUCwAA1A0AANQPAADUEQAA1BQAANQVAADUFgAA1BcAANQYAADUGgAA1BwAANQdAADUHgAA1CAAANQhAADURgAA1GoAANSRAADUtQAA1LgAANS6AADUvAAA1L4AANTAAADUwgAA1MMAANTGAADU0wAA1OIAANTkAADU5gAA1OgAANTqAADU7AAA1O4AANTwAADU/wAA1QIAANUFAADVCAAA1QsAANUOAADVEQAA1RQAANUWAADVVQAA1VcAANVZAADVWwAA1V4AANVfAADVYAAA1WEAANViAADVZAAA1WYAANVnAADVaAAA1WoAANVrAADVqgAA1awAANWuAADVsAAA1bMAANW0AADVtQAA1bYAANW3AADVuQAA1bsAANW8AADVvQAA1b8AANXAAADV/wAA1gEAANYDAADWBQAA1ggAANYJAADWCgAA1gsAANYMAADWDgAA1hAAANYRAADWEgAA1hQAANYVAADWVAAA1lYAANZZAADWWwAA1l4AANZfAADWYAAA1mEAANZiAADWZAAA1mYAANZnAADWaAAA1moAANZrAADWrgAA1tIAANb2AADXGQAA10AAANdgAADXhwAA164AANfOAADX8gAA2BYAANgYAADYGwAA2B0AANgfAADYIQAA2CQAANgnAADYKQAA2CsAANguAADYMAAA2DIAANg1AADYOAAA2DkAANhCAADYTwAA2FIAANhUAADYVwAA2FoAANhcAADYgQAA2KUAANjMAADY8AAA2PMAANj1AADY9wAA2PkAANj7AADY/QAA2P4AANkBAADZDgAA2SEAANkjAADZJQAA2ScAANkpAADZKwAA2S0AANkvAADZMQAA2TMAANlGAADZSQAA2UwAANlPAADZUgAA2VUAANlYAADZWwAA2V4AANlhAADZYwAA2aIAANmkAADZpwAA2akAANmsAADZrQAA2a4AANmvAADZsAAA2bIAANm0AADZtQAA2bYAANm4AADZuQAA2cIAANnDAADZxQAA2gQAANoGAADaCAAA2goAANoNAADaDgAA2g8AANoQAADaEQAA2hMAANoVAADaFgAA2hcAANoZAADaGgAA2lkAANpbAADaXgAA2mAAANpjAADaZAAA2mUAANpmAADaZwAA2mkAANprAADabAAA2m0AANpvAADacAAA2nkAANp6AADafAAA2rsAANq9AADavwAA2sEAANrEAADaxQAA2sYAANrHAADayAAA2soAANrMAADazQAA2s4AANrQAADa0QAA2xAAANsSAADbFQAA2xcAANsaAADbGwAA2xwAANsdAADbHgAA2yAAANsiAADbIwAA2yQAANsmAADbJwAA2zAAANsxAADbMwAA23IAANt0AADbdgAA23gAANt7AADbfAAA230AANt+AADbfwAA24EAANuDAADbhAAA24UAANuHAADbiAAA28cAANvJAADbzAAA284AANvRAADb0gAA29MAANvUAADb1QAA29cAANvZAADb2gAA29sAANvdAADb3gAA2+sAANvsAADb7QAA2+8AANwuAADcMAAA3DIAANw0AADcNwAA3DgAANw5AADcOgAA3DsAANw9AADcPwAA3EAAANxBAADcQwAA3EQAANyDAADchQAA3IgAANyKAADcjQAA3I4AANyPAADckAAA3JEAANyTAADclQAA3JYAANyXAADcmQAA3JoAANysAADcuQAA3MIAANzFAADcyAAA3MoAANzNAADc1gAA3NkAANzcAADc3wAA3OIAANzkAADc6gAA3TUAAN1YAADdeAAA3ZgAAN2aAADdnAAA3Z4AAN2gAADdowAA3aQAAN2lAADdqAAA3akAAN2rAADdrAAA3a4AAN2xAADdsgAA3bMAAN22AADdtwAA3bwAAN3JAADdzgAA3dAAAN3SAADd1wAA3doAAN3dAADd3wAA3gQAAN4oAADeTwAA3nMAAN52AADeeAAA3noAAN58AADefgAA3oAAAN6BAADehAAA3pEAAN6iAADepAAA3qYAAN6oAADeqgAA3qwAAN6uAADesAAA3rIAAN7DAADexgAA3skAAN7MAADezwAA3tIAAN7VAADe2AAA3tsAAN7dAADfHAAA3x4AAN8gAADfIgAA3yUAAN8mAADfJwAA3ygAAN8pAADfKwAA3y0AAN8uAADfLwAA3zEAAN8yAADfcQAA33MAAN91AADfdwAA33oAAN97AADffAAA330AAN9+AADfgAAA34IAAN+DAADfhAAA34YAAN+HAADfxgAA38gAAN/LAADfzQAA39AAAN/RAADf0gAA39MAAN/UAADf1gAA39gAAN/ZAADf2gAA39wAAN/dAADf6gAA3+sAAN/sAADf7gAA4C0AAOAvAADgMQAA4DMAAOA2AADgNwAA4DgAAOA5AADgOgAA4DwAAOA+AADgPwAA4EAAAOBCAADgQwAA4IIAAOCEAADghgAA4IgAAOCLAADgjAAA4I0AAOCOAADgjwAA4JEAAOCTAADglAAA4JUAAOCXAADgmAAA4NcAAODZAADg2wAA4N0AAODgAADg4QAA4OIAAODjAADg5AAA4OYAAODoAADg6QAA4OoAAODsAADg7QAA4SwAAOEuAADhMAAA4TIAAOE1AADhNgAA4TcAAOE4AADhOQAA4TsAAOE9AADhPgAA4T8AAOFBAADhQgAA4YEAAOGDAADhhQAA4YcAAOGKAADhiwAA4YwAAOGNAADhjgAA4ZAAAOGSAADhkwAA4ZQAAOGWAADhlwAA4bwAAOHgAADiBwAA4isAAOIuAADiMAAA4jIAAOI0AADiNgAA4jgAAOI5AADiPAAA4kkAAOJYAADiWgAA4lwAAOJeAADiYAAA4mIAAOJkAADiZgAA4nUAAOJ4AADiewAA4n4AAOKBAADihAAA4ocAAOKKAADijAAA4ssAAOLNAADizwAA4tEAAOLUAADi1QAA4tYAAOLXAADi2AAA4toAAOLcAADi3QAA4t4AAOLgAADi4QAA4yAAAOMiAADjJAAA4yYAAOMpAADjKgAA4ysAAOMsAADjLQAA4y8AAOMxAADjMgAA4zMAAOM1AADjNgAA43UAAON3AADjeQAA43sAAON+AADjfwAA44AAAOOBAADjggAA44QAAOOGAADjhwAA44gAAOOKAADjiwAA48oAAOPMAADjzgAA49AAAOPTAADj1AAA49UAAOPWAADj1wAA49kAAOPbAADj3AAA490AAOPfAADj4AAA5B8AAOQhAADkIwAA5CUAAOQoAADkKQAA5CoAAOQrAADkLAAA5C4AAOQwAADkMQAA5DIAAOQ0AADkNQAA5HQAAOR2AADkeAAA5HoAAOR9AADkfgAA5H8AAOSAAADkgQAA5IMAAOSFAADkhgAA5IcAAOSJAADkigAA5MkAAOTLAADkzQAA5M8AAOTSAADk0wAA5NQAAOTVAADk1gAA5NgAAOTaAADk2wAA5NwAAOTeAADk3wAA5SoAAOVNAADlbQAA5Y0AAOWPAADlkQAA5ZMAAOWVAADlmAAA5ZkAAOWaAADlnQAA5Z4AAOWgAADloQAA5aMAAOWmAADlpwAA5agAAOWrAADlrAAA5bEAAOW+AADlwwAA5cUAAOXHAADlzAAA5c8AAOXSAADl1AAA5fkAAOYdAADmRAAA5mgAAOZrAADmbQAA5m8AAOZxAADmcwAA5nUAAOZ2AADmeQAA5oYAAOaXAADmmQAA5psAAOadAADmnwAA5qEAAOajAADmpQAA5qcAAOa4AADmuwAA5r4AAObBAADmxAAA5scAAObKAADmzQAA5tAAAObSAADnEQAA5xMAAOcVAADnFwAA5xoAAOcbAADnHAAA5x0AAOceAADnIAAA5yIAAOcjAADnJAAA5yYAAOcnAADnZgAA52gAAOdqAADnbAAA528AAOdwAADncQAA53IAAOdzAADndQAA53cAAOd4AADneQAA53sAAOd8AADnuwAA570AAOfAAADnwgAA58UAAOfGAADnxwAA58gAAOfJAADnywAA580AAOfOAADnzwAA59EAAOfSAADn3wAA5+AAAOfhAADn4wAA6CIAAOgkAADoJgAA6CgAAOgrAADoLAAA6C0AAOguAADoLwAA6DEAAOgzAADoNAAA6DUAAOg3AADoOAAA6HcAAOh5AADoewAA6H0AAOiAAADogQAA6IIAAOiDAADohAAA6IYAAOiIAADoiQAA6IoAAOiMAADojQAA6MwAAOjOAADo0AAA6NIAAOjVAADo1gAA6NcAAOjYAADo2QAA6NsAAOjdAADo3gAA6N8AAOjhAADo4gAA6SEAAOkjAADpJQAA6ScAAOkqAADpKwAA6SwAAOktAADpLgAA6TAAAOkyAADpMwAA6TQAAOk2AADpNwAA6XYAAOl4AADpegAA6XwAAOl/AADpgAAA6YEAAOmCAADpgwAA6YUAAOmHAADpiAAA6YkAAOmLAADpjAAA6bEAAOnVAADp/AAA6iAAAOojAADqJQAA6icAAOopAADqKwAA6i0AAOouAADqMQAA6j4AAOpNAADqTwAA6lEAAOpTAADqVQAA6lcAAOpZAADqWwAA6moAAOptAADqcAAA6nMAAOp2AADqeQAA6nwAAOp/AADqgQAA6sAAAOrCAADqxAAA6sYAAOrJAADqygAA6ssAAOrMAADqzQAA6s8AAOrRAADq0gAA6tMAAOrVAADq1gAA6xUAAOsXAADrGQAA6xsAAOseAADrHwAA6yAAAOshAADrIgAA6yQAAOsmAADrJwAA6ygAAOsqAADrKwAA62oAAOtsAADrbgAA63AAAOtzAADrdAAA63UAAOt2AADrdwAA63kAAOt7AADrfAAA630AAOt/AADrgAAA678AAOvBAADrwwAA68UAAOvIAADryQAA68oAAOvLAADrzAAA684AAOvQAADr0QAA69IAAOvUAADr1QAA7BQAAOwWAADsGAAA7BoAAOwdAADsHgAA7B8AAOwgAADsIQAA7CMAAOwlAADsJgAA7CcAAOwpAADsKgAA7GkAAOxrAADsbQAA7G8AAOxyAADscwAA7HQAAOx1AADsdgAA7HgAAOx6AADsewAA7HwAAOx+AADsfwAA7L4AAOzAAADswgAA7MQAAOzHAADsyAAA7MkAAOzKAADsywAA7M0AAOzPAADs0AAA7NEAAOzTAADs1AAA7R8AAO1CAADtYgAA7YIAAO2EAADthgAA7YgAAO2KAADtjQAA7Y4AAO2PAADtkgAA7ZMAAO2VAADtlgAA7ZgAAO2aAADtmwAA7ZwAAO2fAADtoAAA7aUAAO2yAADttwAA7bkAAO27AADtwAAA7cMAAO3GAADtyAAA7e0AAO4RAADuOAAA7lwAAO5fAADuYQAA7mMAAO5lAADuZwAA7mkAAO5qAADubQAA7noAAO6LAADujQAA7o8AAO6RAADukwAA7pUAAO6XAADumQAA7psAAO6sAADurwAA7rIAAO61AADuuAAA7rsAAO6+AADuwQAA7sQAAO7GAADvBQAA7wcAAO8JAADvCwAA7w4AAO8PAADvEAAA7xEAAO8SAADvFAAA7xYAAO8XAADvGAAA7xoAAO8bAADvWgAA71wAAO9eAADvYAAA72MAAO9kAADvZQAA72YAAO9nAADvaQAA72sAAO9sAADvbQAA728AAO9wAADvrwAA77EAAO+0AADvtgAA77kAAO+6AADvuwAA77wAAO+9AADvvwAA78EAAO/CAADvwwAA78UAAO/GAADv0wAA79QAAO/VAADv1wAA8BYAAPAYAADwGgAA8BwAAPAfAADwIAAA8CEAAPAiAADwIwAA8CUAAPAnAADwKAAA8CkAAPArAADwLAAA8GsAAPBtAADwbwAA8HEAAPB0AADwdQAA8HYAAPB3AADweAAA8HoAAPB8AADwfQAA8H4AAPCAAADwgQAA8MAAAPDCAADwxAAA8MYAAPDJAADwygAA8MsAAPDMAADwzQAA8M8AAPDRAADw0gAA8NMAAPDVAADw1gAA8RUAAPEXAADxGQAA8RsAAPEeAADxHwAA8SAAAPEhAADxIgAA8SQAAPEmAADxJwAA8SgAAPEqAADxKwAA8WoAAPFsAADxbgAA8XAAAPFzAADxdAAA8XUAAPF2AADxdwAA8XkAAPF7AADxfAAA8X0AAPF/AADxgAAA8aUAAPHJAADx8AAA8hQAAPIXAADyGQAA8hsAAPIdAADyHwAA8iEAAPIiAADyJQAA8jIAAPJBAADyQwAA8kUAAPJHAADySQAA8ksAAPJNAADyTwAA8l4AAPJhAADyZAAA8mcAAPJqAADybQAA8nAAAPJzAADydQAA8rQAAPK2AADyuAAA8roAAPK9AADyvgAA8r8AAPLAAADywQAA8sMAAPLFAADyxgAA8scAAPLJAADyygAA8wkAAPMLAADzDQAA8w8AAPMSAADzEwAA8xQAAPMVAADzFgAA8xgAAPMaAADzGwAA8xwAAPMeAADzHwAA814AAPNgAADzYgAA82QAAPNnAADzaAAA82kAAPNqAADzawAA820AAPNvAADzcAAA83EAAPNzAADzdAAA87MAAPO1AADztwAA87kAAPO8AADzvQAA874AAPO/AADzwAAA88IAAPPEAADzxQAA88YAAPPIAADzyQAA9AgAAPQKAAD0DAAA9A4AAPQRAAD0EgAA9BMAAPQUAAD0FQAA9BcAAPQZAAD0GgAA9BsAAPQdAAD0HgAA9F0AAPRfAAD0YQAA9GMAAPRmAAD0ZwAA9GgAAPRpAAD0agAA9GwAAPRuAAD0bwAA9HAAAPRyAAD0cwAA9LIAAPS0AAD0tgAA9LgAAPS7AAD0vAAA9L0AAPS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cAAEAngABAKAAAQCjAAEApAABAKUAAQCmAAEApwABAKkAAQCrAAEArAABAK0AAQCvAAEAsAABAO8AAQDxAAEA8wABAPUAAQD4AAEA+QABAPoAAQD7AAEA/AABAP4AAQEAAAEBAQABAQIAAQEEAAEBBQABAUQAAQFGAAEBSQABAUsAAQFOAAEBTwABAVAAAQFRAAEBUgABAVQAAQFWAAEBVwABAVgAAQFaAAEBWwABAWgAAQFpAAEBagABAWwAAQGrAAEBrQABAa8AAQGxAAEBtAABAbUAAQG2AAEBtwABAbgAAQG6AAEBvAABAb0AAQG+AAEBwAABAcEAAQIAAAECAgABAgQAAQIGAAECCQABAgoAAQILAAECDAABAg0AAQIPAAECEQABAhIAAQITAAECFQABAhYAAQJVAAECVwABAlkAAQJbAAECXgABAl8AAQJgAAECYQABAmIAAQJkAAECZgABAmcAAQJoAAECagABAmsAAQKqAAECrAABAq4AAQKwAAECswABArQAAQK1AAECtgABArcAAQK5AAECuwABArwAAQK9AAECvwABAsAAAQL/AAEDAQABAwMAAQMFAAEDCAABAwkAAQMKAAEDCwABAwwAAQMOAAEDEAABAxEAAQMSAAEDFAABAxUAAQM6AAEDXgABA4UAAQOpAAEDrAABA64AAQOwAAEDsgABA7QAAQO2AAEDtwABA7oAAQPHAAED1gABA9gAAQPaAAED3AABA94AAQPgAAED4gABA+QAAQPzAAED9gABA/kAAQP8AAED/wABBAIAAQQFAAEECAABBAoAAQRJAAEESwABBE0AAQRPAAEEUgABBFMAAQRUAAEEVQABBFYAAQRYAAEEWgABBFsAAQRcAAEEXgABBF8AAQSeAAEEoAABBKIAAQSkAAEEpwABBKgAAQSpAAEEqgABBKsAAQStAAEErwABBLAAAQSxAAEEswABBLQAAQTzAAEE9QABBPcAAQT5AAEE/AABBP0AAQT+AAEE/wABBQAAAQUCAAEFBAABBQUAAQUGAAEFCAABBQkAAQVIAAEFSgABBUwAAQVOAAEFUQABBVIAAQVTAAEFVAABBVUAAQVXAAEFWQABBVoAAQVbAAEFXQABBV4AAQWdAAEFnwABBaEAAQWjAAEFpgABBacAAQWoAAEFqQABBaoAAQWsAAEFrgABBa8AAQW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8AAERPgABEUEAARFCAAERQwABEUQAARFFAAERRwABEUkAARFKAAERSwABEU0AARFOAAERWwABEVwAARFdAAERXwABEZ4AARGgAAERogABEaQAARGnAAERqAABEakAARGqAAERqwABEa0AARGvAAERsAABEbEAARGzAAERtAABEfMAARH1AAER9wABEfkAARH8AAER/QABEf4AARH/AAESAAABEgIAARIEAAESBQABEgYAARIIAAESCQABEkgAARJKAAESTAABEk4AARJRAAESUgABElMAARJUAAESVQABElcAARJZAAESWgABElsAARJdAAESXgABEp0AARKfAAESoQABEqMAARKmAAESpwABEqgAARKpAAESqgABEqwAARKuAAESrwABErAAARKyAAESswABEvIAARL0AAES9gABEvgAARL7AAES/AABEv0AARL+AAES/wABEwEAARMDAAETBAABEwUAARMHAAETCAABEy0AARNRAAETeAABE5wAAROfAAEToQABE6MAAROlAAETpwABE6kAAROqAAETrQABE7oAARPJAAETywABE80AARPPAAET0QABE9MAARPVAAET1wABE+YAARPpAAET7AABE+8AARPyAAET9QABE/gAARP7AAET/QABFDwAARQ+AAEUQAABFEIAARRFAAEURgABFEcAARRIAAEUSQABFEsAARRNAAEUTgABFE8AARRRAAEUUgABFJEAARSTAAEUlQABFJcAARSaAAEUmwABFJwAARSdAAEUngABFKAAARSiAAEUowABFKQAARSmAAEUpwABFOYAARToAAEU6gABFOwAARTvAAEU8AABFPEAARTyAAEU8wABFPUAART3AAEU+AABFPkAART7AAEU/AABFTsAARU9AAEVPwABFUEAARVEAAEVRQABFUYAARVHAAEVSAABFUoAARVMAAEVTQABFU4AARVQAAEVUQABFZAAARWSAAEVlAABFZYAARWZAAEVmgABFZsAARWcAAEVnQABFZ8AARWhAAEVogABFaMAARWlAAEVpgABFeUAARXnAAEV6QABFesAARXuAAEV7wABFfAAARXxAAEV8gABFfQAARX2AAEV9wABFfgAARX6AAEV+wABFjoAARY8AAEWPgABFkAAARZDAAEWRAABFkUAARZGAAEWRwABFkkAARZLAAEWTAABFk0AARZPAAEWUAABFpsAARa+AAEW3gABFv4AARcAAAEXAgABFwQAARcGAAEXCQABFwoAARcLAAEXDgABFw8AARcRAAEXEgABFxQAARcXAAEXGAABFxkAARccAAEXHQABFyYAARczAAEXOAABFzoAARc8AAEXQQABF0QAARdHAAEXSQABF24AAReSAAEXuQABF90AARfgAAEX4gABF+QAARfmAAEX6AABF+oAARfrAAEX7gABF/sAARgMAAEYDgABGBAAARgSAAEYFAABGBYAARgYAAEYGgABGBwAARgtAAEYMAABGDMAARg2AAEYOQABGDwAARg/AAEYQgABGEUAARhHAAEYhgABGIgAARiKAAEYjAABGI8AARiQAAEYkQABGJIAARiTAAEYlQABGJcAARiYAAEYmQABGJsAARicAAEY2wABGN0AARjfAAEY4QABGOQAARjlAAEY5gABGOcAARjoAAEY6gABGOwAARjtAAEY7gABGPAAARjxAAEZMAABGTIAARk1AAEZNwABGToAARk7AAEZPAABGT0AARk+AAEZQAABGUIAARlDAAEZRAABGUYAARlHAAEZVAABGVUAARlWAAEZWAABGZcAARmZAAEZmwABGZ0AARmgAAEZoQABGaIAARmjAAEZpAABGaYAARmoAAEZqQABGaoAARmsAAEZrQABGewAARnuAAEZ8AABGfIAARn1AAEZ9gABGfcAARn4AAEZ+QABGfsAARn9AAEZ/gABGf8AARoBAAEaAgABGkEAARpDAAEaRQABGkcAARpKAAEaSwABGkwAARpNAAEaTgABGlAAARpSAAEaUwABGlQAARpWAAEaVwABGpYAARqYAAEamgABGpwAARqfAAEaoAABGqEAARqiAAEaowABGqUAARqnAAEaqAABGqkAARqrAAEarAABGusAARrtAAEa7wABGvEAARr0AAEa9QABGvYAARr3AAEa+AABGvoAARr8AAEa/QABGv4AARsAAAEbAQABGyYAARtKAAEbcQABG5UAARuYAAEbmgABG5wAARueAAEboAABG6IAARujAAEbpgABG7MAARvCAAEbxAABG8YAARvIAAEbygABG8wAARvOAAEb0AABG98AARviAAEb5QABG+gAARvrAAEb7gABG/EAARv0AAEb9gABHDUAARw3AAEcOgABHDwAARw/AAEcQAABHEEAARxCAAEcQwABHEUAARxHAAEcSAABHEkAARxLAAEcTAABHIsAARyNAAEcjwABHJEAARyUAAEclQABHJYAARyXAAEcmAABHJoAARycAAEcnQABHJ4AARygAAEcoQABHOAAARziAAEc5AABHOYAARzpAAEc6gABHOsAARzsAAEc7QABHO8AARzxAAEc8gABHPMAARz1AAEc9gABHTUAAR03AAEdOgABHTwAAR0/AAEdQAABHUEAAR1CAAEdQwABHUUAAR1HAAEdSAABHUkAAR1LAAEdTAABHYsAAR2NAAEdjwABHZEAAR2UAAEdlQABHZYAAR2XAAEdmAABHZoAAR2cAAEdnQABHZ4AAR2gAAEdoQABHeAAAR3iAAEd5AABHeYAAR3pAAEd6gABHesAAR3sAAEd7QABHe8AAR3xAAEd8gABHfMAAR31AAEd9gABHjUAAR43AAEeOQABHjsAAR4+AAEePwABHkAAAR5BAAEeQgABHkQAAR5GAAEeRwABHkgAAR5KAAEeSwABHpYAAR65AAEe2QABHvkAAR77AAEe/QABHv8AAR8BAAEfBAABHwUAAR8GAAEfCQABHwoAAR8MAAEfDQABHw8AAR8SAAEfEwABHxQAAR8XAAEfGAABHx0AAR8qAAEfLwABHzEAAR8zAAEfOAABHzsAAR8+AAEfQAABH2UAAR+JAAEfsAABH9QAAR/XAAEf2QABH9sAAR/dAAEf3wABH+EAAR/iAAEf5QABH/IAASADAAEgBQABIAcAASAJAAEgCwABIA0AASAPAAEgEQABIBMAASAkAAEgJwABICoAASAtAAEgMAABIDMAASA2AAEgOQABIDwAASA+AAEgfQABIH8AASCBAAEggwABIIYAASCHAAEgiAABIIkAASCKAAEgjAABII4AASCPAAEgkAABIJIAASCTAAEg0gABINQAASDWAAEg2AABINsAASDcAAEg3QABIN4AASDfAAEg4QABIOMAASDkAAEg5QABIOcAASDoAAEhJwABISkAASEsAAEhLgABITEAASEyAAEhMwABITQAASE1AAEhNwABITkAASE6AAEhOwABIT0AASE+AAEhSwABIUwAASFNAAEhTwABIY4AASGQAAEhkgABIZQAASGXAAEhmAABIZkAASGaAAEhmwABIZ0AASGfAAEhoAABIaEAASGjAAEhpAABIeMAASHlAAEh5wABIekAASHsAAEh7QABIe4AASHvAAEh8AABIfIAASH0AAEh9QABIfYAASH4AAEh+QABIjgAASI6AAEiPAABIj4AASJBAAEiQgABIkMAASJEAAEiRQABIkcAASJJAAEiSgABIksAASJNAAEiTgABIo0AASKPAAEikQABIpMAASKWAAEilwABIpgAASKZAAEimgABIpwAASKeAAEinwABIqAAASKiAAEiowABIuIAASLkAAEi5gABIugAASLrAAEi7AABIu0AASLuAAEi7wABIvEAASLzAAEi9AABIvUAASL3AAEi+AABIx0AASNBAAEjaAABI4wAASOPAAEjkQABI5MAASOVAAEjlwABI5kAASOaAAEjnQABI6oAASO5AAEjuwABI70AASO/AAEjwQABI8MAASPFAAEjxwABI9YAASPZAAEj3AABI98AASPiAAEj5QABI+gAASPrAAEj7QABJCwAASQuAAEkMAABJDIAASQ1AAEkNgABJDcAASQ4AAEkOQABJDsAASQ9AAEkPgABJD8AASRBAAEkQgABJIEAASSDAAEkhQABJIcAASSKAAEkiwABJIwAASSNAAEkjgABJJAAASSSAAEkkwABJJQAASSWAAEklwABJNYAASTYAAEk2gABJNwAASTfAAEk4AABJOEAASTiAAEk4wABJOUAASTnAAEk6AABJOkAASTrAAEk7AABJSsAASUtAAElLwABJTEAASU0AAElNQABJTYAASU3AAElOAABJToAASU8AAElPQABJT4AASVAAAElQQABJYAAASWCAAElhAABJYYAASWJAAEligABJYsAASWMAAEljQABJY8AASWRAAElkgABJZMAASWVAAEllgABJdUAASXXAAEl2QABJdsAASXeAAEl3wABJeAAASXhAAEl4gABJeQAASXmAAEl5wABJegAASXqAAEl6wABJioAASYsAAEmLgABJjAAASYzAAEmNAABJjUAASY2AAEmNwABJjkAASY7AAEmPAABJj0AASY/AAEmQAABJosAASauAAEmzgABJu4AASbwAAEm8gABJvQAASb2AAEm+QABJvoAASb7AAEm/gABJv8AAScBAAEnAgABJwQAAScHAAEnCAABJwkAAScMAAEnDQABJxIAAScfAAEnJAABJyYAAScoAAEnLQABJzAAASczAAEnNQABJ1oAASd+AAEnpQABJ8kAASfMAAEnzgABJ9AAASfSAAEn1AABJ9YAASfXAAEn2gABJ+cAASf4AAEn+gABJ/wAASf+AAEoAAABKAIAASgEAAEoBgABKAgAASgZAAEoHAABKB8AASgiAAEoJQABKCgAASgrAAEoLgABKDEAASgzAAEocgABKHQAASh2AAEoeAABKHsAASh8AAEofQABKH4AASh/AAEogQABKIMAASiEAAEohQABKIcAASiIAAEoxwABKMkAASjLAAEozQABKNAAASjRAAEo0gABKNMAASjUAAEo1gABKNgAASjZAAEo2gABKNwAASjdAAEpHAABKR4AASkhAAEpIwABKSYAASknAAEpKAABKSkAASkqAAEpLAABKS4AASkvAAEpMAABKTIAASkzAAEpQAABKUEAASlCAAEpRAABKYMAASmFAAEphwABKYkAASmMAAEpjQABKY4AASmPAAEpkAABKZIAASmUAAEplQABKZYAASmYAAEpmQABKdgAASnaAAEp3AABKd4AASnhAAEp4gABKeMAASnkAAEp5QABKecAASnpAAEp6gABKesAASntAAEp7gABKi0AASovAAEqMQABKjMAASo2AAEqNwABKjgAASo5AAEqOgABKjwAASo+AAEqPwABKkAAASpCAAEqQwABKoIAASqEAAEqhgABKogAASqLAAEqjAABKo0AASqOAAEqjwABKpEAASqTAAEqlAABKpUAASqXAAEqmAABKtcAASrZAAEq2wABKt0AASrgAAEq4QABKuIAASrjAAEq5AABKuYAASroAAEq6QABKuoAASrsAAEq7QABKxIAASs2AAErXQABK4EAASuEAAErhgABK4gAASuKAAErjAABK44AASuPAAErkgABK58AASuuAAErsAABK7IAASu0AAErtgABK7gAASu6AAErvAABK8sAASvOAAEr0QABK9QAASvXAAEr2gABK90AASvgAAEr4gABLCEAASwjAAEsJQABLCcAASwqAAEsKwABLCwAASwtAAEsLgABLDAAASwyAAEsMwABLDQAASw2AAEsNwABLHYAASx4AAEsegABLHwAASx/AAEsgAABLIEAASyCAAEsgwABLIUAASyHAAEsiAABLIkAASyLAAEsjAABLMsAASzNAAEszwABLNEAASzUAAEs1QABLNYAASzXAAEs2AABLNoAASzcAAEs3QABLN4AASzgAAEs4QABLSAAAS0iAAEtJAABLSYAAS0pAAEtKgABLSsAAS0sAAEtLQABLS8AAS0xAAEtMgABLTMAAS01AAEtNgABLXUAAS13AAEteQABLXsAAS1+AAEtfwABLYAAAS2BAAEtggABLYQAAS2GAAEthwABLYgAAS2KAAEtiwABLcoAAS3MAAEtzgABLdAAAS3TAAEt1AABLdUAAS3WAAEt1wABLdkAAS3bAAEt3AABLd0AAS3fAAEt4AABLh8AAS4hAAEuIwABLiUAAS4oAAEuKQABLioAAS4rAAEuLAABLi4AAS4wAAEuMQABLjIAAS40AAEuNQABLoAAAS6jAAEuwwABLuMAAS7lAAEu5wABLukAAS7rAAEu7gABLu8AAS7wAAEu8wABLvQAAS72AAEu9wABLvkAAS78AAEu/QABLv4AAS8BAAEvAgABLwcAAS8UAAEvGQABLxsAAS8dAAEvIgABLyUAAS8oAAEvKgABL08AAS9zAAEvmgABL74AAS/BAAEvwwABL8UAAS/HAAEvyQABL8sAAS/MAAEvzwABL9wAAS/tAAEv7wABL/EAAS/zAAEv9QABL/cAAS/5AAEv+wABL/0AATAOAAEwEQABMBQAATAXAAEwGgABMB0AATAgAAEwIwABMCYAATAoAAEwZwABMGkAATBrAAEwbQABMHAAATBxAAEwcgABMHMAATB0AAEwdgABMHgAATB5AAEwegABMHwAATB9AAEwvAABML4AATDAAAEwwgABMMUAATDGAAEwxwABMMgAATDJAAEwywABMM0AATDOAAEwzwABMNEAATDSAAExEQABMRMAATEWAAExGAABMRsAATEcAAExHQABMR4AATEfAAExIQABMSMAATEkAAExJQABMScAATEoAAExNQABMTYAATE3AAExOQABMXgAATF6AAExfAABMX4AATGBAAExggABMYMAATGEAAExhQABMYcAATGJAAExigABMYsAATGNAAExjgABMc0AATHPAAEx0QABMdMAATHWAAEx1wABMdgAATHZAAEx2gABMdwAATHeAAEx3wABMeAAATHiAAEx4wABMiIAATIkAAEyJgABMigAATIrAAEyLAABMi0AATIuAAEyLwABMjEAATIzAAEyNAABMjUAATI3AAEyOAABMncAATJ5AAEyewABMn0AATKAAAEygQABMoIAATKDAAEyhAABMoYAATKIAAEyiQABMooAATKMAAEyjQABMswAATLOAAEy0AABMtIAATLVAAEy1gABMtcAATLYAAEy2QABMtsAATLdAAEy3gABMt8AATLhAAEy4gABMwcAATMrAAEzUgABM3YAATN5AAEzewABM30AATN/AAEzgQABM4MAATOEAAEzhwABM5QAATOjAAEzpQABM6cAATOpAAEzqwABM60AATOvAAEzsQABM8AAATPDAAEzxgABM8kAATPMAAEzzwABM9IAATPVAAEz1wABNBYAATQYAAE0GgABNBwAATQfAAE0IAABNCEAATQiAAE0IwABNCUAATQnAAE0KAABNCkAATQrAAE0LAABNGsAATRtAAE0bwABNHEAATR0AAE0dQABNHYAATR3AAE0eAABNHoAATR8AAE0fQABNH4AATSAAAE0gQABNMAAATTCAAE0xAABNMYAATTJAAE0ygABNMsAATTMAAE0zQABNM8AATTRAAE00gABNNMAATTVAAE01gABNRUAATUXAAE1GQABNRsAATUeAAE1HwABNSAAATUhAAE1IgABNSQAATUmAAE1JwABNSgAATUqAAE1KwABNWoAATVsAAE1bgABNXAAATVzAAE1dAABNXUAATV2AAE1dwABNXkAATV7AAE1fAABNX0AATV/AAE1gAABNb8AATXBAAE1wwABNcUAATXIAAE1yQABNcoAATXLAAE1zAABNc4AATXQAAE10QABNdIAATXUAAE11QABNhQAATYWAAE2GAABNhoAATYdAAE2HgABNh8AATYgAAE2IQABNiMAATYlAAE2JgABNicAATYpAAE2KgABNnUAATaYAAE2uAABNtgAATbaAAE23AABNt4AATbgAAE24wABNuQAATblAAE26AABNukAATbrAAE27AABNu4AATbxAAE28gABNvMAATb2AAE29wABNvwAATcJAAE3DgABNxAAATcSAAE3FwABNxoAATcdAAE3HwABN0QAATdoAAE3jwABN7MAATe2AAE3uAABN7oAATe8AAE3vgABN8AAATfBAAE3xAABN9EAATfiAAE35AABN+YAATfoAAE36gABN+wAATfuAAE38AABN/IAATgDAAE4BgABOAkAATgMAAE4DwABOBIAATgVAAE4GAABOBsAATgdAAE4XAABOF4AAThgAAE4YgABOGUAAThmAAE4ZwABOGgAAThpAAE4awABOG0AAThuAAE4bwABOHEAAThyAAE4sQABOLMAATi1AAE4twABOLoAATi7AAE4vAABOL0AATi+AAE4wAABOMIAATjDAAE4xAABOMYAATjHAAE5BgABOQgAATkLAAE5DQABORAAATkRAAE5EgABORMAATkUAAE5FgABORgAATkZAAE5GgABORwAATkdAAE5KgABOSsAATksAAE5LgABOW0AATlvAAE5cQABOXMAATl2AAE5dwABOXgAATl5AAE5egABOXwAATl+AAE5fwABOYAAATmCAAE5gwABOcIAATnEAAE5xgABOcgAATnLAAE5zAABOc0AATnOAAE5zwABOdEAATnTAAE51AABOdUAATnXAAE52AABOhcAAToZAAE6GwABOh0AATogAAE6IQABOiIAATojAAE6JAABOiYAATooAAE6KQABOioAATosAAE6LQABOmwAATpuAAE6cAABOnIAATp1AAE6dgABOncAATp4AAE6eQABOnsAATp9AAE6fgABOn8AATqBAAE6ggABOsEAATrDAAE6xQABOscAATrKAAE6ywABOswAATrNAAE6zgABOtAAATrSAAE60wABOtQAATrWAAE61wABOvwAATsgAAE7RwABO2sAATtuAAE7cAABO3IAATt0AAE7dgABO3gAATt5AAE7fAABO4kAATuYAAE7mgABO5wAATueAAE7oAABO6IAATukAAE7pgABO7UAATu4AAE7uwABO74AATvBAAE7xAABO8cAATvKAAE7zAABPAsAATwNAAE8DwABPBEAATwUAAE8FQABPBYAATwXAAE8GAABPBoAATwcAAE8HQABPB4AATwgAAE8IQABPGAAATxiAAE8ZAABPGYAATxpAAE8agABPGsAATxsAAE8bQABPG8AATxxAAE8cgABPHMAATx1AAE8dgABPLUAATy3AAE8uQABPLsAATy+AAE8vwABPMAAATzBAAE8wgABPMQAATzGAAE8xwABPMgAATzKAAE8ywABPQoAAT0MAAE9DwABPREAAT0UAAE9FQABPRYAAT0XAAE9GAABPRoAAT0cAAE9HQABPR4AAT0gAAE9IQABPWAAAT1iAAE9ZAABPWYAAT1pAAE9agABPWsAAT1sAAE9bQABPW8AAT1xAAE9cgABPXMAAT1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8AAFT/QABU/4AAVQAAAFUAQABVEAAAVRCAAFURAABVEYAAVRJAAFUSgABVEsAAVRMAAFUTQABVE8AAVRRAAFUUgABVFMAAVRVAAFUVgABVJUAAVSXAAFUmQABVJsAAVSeAAFUnwABVKAAAVShAAFUogABVKQAAVSmAAFUpwABVKgAAVSqAAFUqwABVOoAAVTsAAFU7gABVPAAAVTzAAFU9AABVPUAAVT2AAFU9wABVPkAAVT7AAFU/AABVP0AAVT/AAFVAAABVT8AAVVBAAFVQwABVUUAAVVIAAFVSQABVUoAAVVLAAFVTAABVU4AAVVQAAFVUQABVVIAAVVUAAFVVQABVZQAAVWWAAFVmAABVZoAAVWdAAFVngABVZ8AAVWgAAFVoQABVaMAAVWlAAFVpgABVacAAVWpAAFVqgABVekAAVXrAAFV7QABVe8AAVXyAAFV8wABVfQAAVX1AAFV9gABVfgAAVX6AAFV+wABVfwAAVX+AAFV/wABVkoAAVZtAAFWjQABVq0AAVavAAFWsQABVrMAAVa1AAFWuAABVrkAAVa6AAFWvQABVr4AAVbAAAFWwQABVsMAAVbGAAFWxwABVsgAAVbLAAFWzAABVtEAAVbeAAFW4wABVuUAAVbnAAFW7AABVu8AAVbyAAFW9AABVxkAAVc9AAFXZAABV4gAAVeLAAFXjQABV48AAVeRAAFXkwABV5UAAVeWAAFXmQABV6YAAVe3AAFXuQABV7sAAVe9AAFXvwABV8EAAVfDAAFXxQABV8cAAVfYAAFX2wABV94AAVfhAAFX5AABV+cAAVfqAAFX7QABV/AAAVfyAAFYMQABWDMAAVg1AAFYNwABWDoAAVg7AAFYPAABWD0AAVg+AAFYQAABWEIAAVhDAAFYRAABWEYAAVhHAAFYhgABWIgAAViKAAFYjAABWI8AAViQAAFYkQABWJIAAViTAAFYlQABWJcAAViYAAFYmQABWJsAAVicAAFY2wABWN0AAVjgAAFY4gABWOUAAVjmAAFY5wABWOgAAVjpAAFY6wABWO0AAVjuAAFY7wABWPEAAVjyAAFY/wABWQAAAVkBAAFZAwABWUIAAVlEAAFZRgABWUgAAVlLAAFZTAABWU0AAVlOAAFZTwABWVEAAVlTAAFZVAABWVUAAVlXAAFZWAABWZcAAVmZAAFZmwABWZ0AAVmgAAFZoQABWaIAAVmjAAFZpAABWaYAAVmoAAFZqQABWaoAAVmsAAFZrQABWewAAVnuAAFZ8AABWfIAAVn1AAFZ9gABWfcAAVn4AAFZ+QABWfsAAVn9AAFZ/gABWf8AAVoBAAFaAgABWkEAAVpDAAFaRQABWkcAAVpKAAFaSwABWkwAAVpNAAFaTgABWlAAAVpSAAFaUwABWlQAAVpWAAFaVwABWpYAAVqYAAFamgABWpwAAVqfAAFaoAABWqEAAVqiAAFaowABWqUAAVqnAAFaqAABWqkAAVqrAAFarAABWtEAAVr1AAFbHAABW0AAAVtDAAFbRQABW0cAAVtJAAFbSwABW00AAVtOAAFbUQABW14AAVttAAFbbwABW3EAAVtzAAFbdQABW3cAAVt5AAFbewABW4oAAVuNAAFbkAABW5MAAVuWAAFbmQABW5wAAVufAAFboQABW+AAAVviAAFb5AABW+YAAVvpAAFb6gABW+sAAVvsAAFb7QABW+8AAVvxAAFb8gABW/MAAVv1AAFb9gABXDUAAVw3AAFcOQABXDsAAVw+AAFcPwABXEAAAVxBAAFcQgABXEQAAVxGAAFcRwABXEgAAVxKAAFcSwABXIoAAVyMAAFcjgABXJAAAVyTAAFclAABXJUAAVyWAAFclwABXJkAAVybAAFcnAABXJ0AAVyfAAFcoAABXN8AAVzhAAFc5AABXOYAAVzpAAFc6gABXOsAAVzsAAFc7QABXO8AAVzxAAFc8gABXPMAAVz1AAFc9gABXTUAAV03AAFdOQABXTsAAV0+AAFdPwABXUAAAV1BAAFdQgABXUQAAV1GAAFdRwABXUgAAV1KAAFdSwABXYoAAV2MAAFdjgABXZAAAV2TAAFdlAABXZUAAV2WAAFdlwABXZkAAV2bAAFdnAABXZ0AAV2fAAFdoAABXd8AAV3hAAFd4wABXeUAAV3oAAFd6QABXeoAAV3rAAFd7AABXe4AAV3wAAFd8QABXfIAAV30AAFd9QABXkAAAV5jAAFegwABXqMAAV6lAAFepwABXqkAAV6rAAFergABXq8AAV6wAAFeswABXrQAAV62AAFetwABXrkAAV67AAFevAABXr0AAV7AAAFewQABXsYAAV7TAAFe2AABXtoAAV7cAAFe4QABXuQAAV7nAAFe6QABXw4AAV8yAAFfWQABX30AAV+AAAFfggABX4QAAV+GAAFfiAABX4oAAV+LAAFfjgABX5sAAV+sAAFfrgABX7AAAV+yAAFftAABX7YAAV+4AAFfugABX7wAAV/NAAFf0AABX9MAAV/WAAFf2QABX9wAAV/fAAFf4gABX+UAAV/nAAFgJgABYCgAAWAqAAFgLAABYC8AAWAwAAFgMQABYDIAAWAzAAFgNQABYDcAAWA4AAFgOQABYDsAAWA8AAFgewABYH0AAWB/AAFggQABYIQAAWCFAAFghgABYIcAAWCIAAFgigABYIwAAWCNAAFgjgABYJAAAWCRAAFg0AABYNIAAWDVAAFg1wABYNoAAWDbAAFg3AABYN0AAWDeAAFg4AABYOIAAWDjAAFg5AABYOYAAWDnAAFg9AABYPUAAWD2AAFg+AABYTcAAWE5AAFhOwABYT0AAWFAAAFhQQABYUIAAWFDAAFhRAABYUYAAWFIAAFhSQABYUoAAWFMAAFhTQABYYwAAWGOAAFhkAABYZIAAWGVAAFhlgABYZcAAWGYAAFhmQABYZsAAWGdAAFhngABYZ8AAWGhAAFhogABYeEAAWHjAAFh5QABYecAAWHqAAFh6wABYewAAWHtAAFh7gABYfAAAWHyAAFh8wABYfQAAWH2AAFh9wABYjYAAWI4AAFiOgABYjwAAWI/AAFiQAABYkEAAWJCAAFiQwABYkUAAWJHAAFiSAABYkkAAWJLAAFiTAABYosAAWKNAAFijwABYpEAAWKUAAFilQABYpYAAWKXAAFimAABYpoAAWKcAAFinQABYp4AAWKgAAFioQABYsYAAWLqAAFjEQABYzUAAWM4AAFjOgABYzwAAWM+AAFjQAABY0IAAWNDAAFjRgABY1MAAWNiAAFjZAABY2YAAWNoAAFjagABY2wAAWNuAAFjcAABY38AAWOCAAFjhQABY4gAAWOLAAFjjgABY5EAAWOUAAFjlgABY9UAAWPXAAFj2QABY9sAAWPeAAFj3wABY+AAAWPhAAFj4gABY+QAAWPmAAFj5wABY+gAAWPqAAFj6wABZCoAAWQsAAFkLgABZDAAAWQzAAFkNAABZDUAAWQ2AAFkNwABZDkAAWQ7AAFkPAABZD0AAWQ/AAFkQAABZH8AAWSBAAFkgwABZIUAAWSIAAFkiQABZIoAAWSLAAFkjAABZI4AAWSQAAFkkQABZJIAAWSUAAFklQABZNQAAWTWAAFk2AABZNoAAWTdAAFk3gABZN8AAWTgAAFk4QABZOMAAWTlAAFk5gABZOcAAWTpAAFk6gABZSkAAWUrAAFlLQABZS8AAWUyAAFlMwABZTQAAWU1AAFlNgABZTgAAWU6AAFlOwABZTwAAWU+AAFlPwABZX4AAWWAAAFlggABZYQAAWWHAAFliAABZYkAAWWKAAFliwABZY0AAWWPAAFlkAABZZEAAWWTAAFllAABZdMAAWXVAAFl1wABZdkAAWXcAAFl3QABZd4AAWXfAAFl4AABZeIAAWXkAAFl5QABZeYAAWXoAAFl6QABZjQAAWZXAAFmdwABZpcAAWaZAAFmmwABZp0AAWafAAFmogABZqMAAWakAAFmpwABZqgAAWaqAAFmqwABZq0AAWawAAFmsQABZrIAAWa1AAFmtgABZrsAAWbIAAFmzQABZs8AAWbRAAFm1gABZtkAAWbcAAFm3gABZwMAAWcnAAFnTgABZ3IAAWd1AAFndwABZ3kAAWd7AAFnfQABZ38AAWeAAAFngwABZ5AAAWehAAFnowABZ6UAAWenAAFnqQABZ6sAAWetAAFnrwABZ7EAAWfCAAFnxQABZ8gAAWfLAAFnzgABZ9EAAWfUAAFn1wABZ9oAAWfcAAFoGwABaB0AAWgfAAFoIQABaCQAAWglAAFoJgABaCcAAWgoAAFoKgABaCwAAWgtAAFoLgABaDAAAWgxAAFocAABaHIAAWh0AAFodgABaHkAAWh6AAFoewABaHwAAWh9AAFofwABaIEAAWiCAAFogwABaIUAAWiGAAFoxQABaMcAAWjKAAFozAABaM8AAWjQAAFo0QABaNIAAWjTAAFo1QABaNcAAWjYAAFo2QABaNsAAWjcAAFo6QABaOoAAWjrAAFo7QABaSwAAWkuAAFpMAABaTIAAWk1AAFpNgABaTcAAWk4AAFpOQABaTsAAWk9AAFpPgABaT8AAWlBAAFpQgABaYEAAWmDAAFphQABaYcAAWmKAAFpiwABaYwAAWmNAAFpjgABaZAAAWmSAAFpkwABaZQAAWmWAAFplwABadYAAWnYAAFp2gABadwAAWnfAAFp4AABaeEAAWniAAFp4wABaeUAAWnnAAFp6AABaekAAWnrAAFp7AABaisAAWotAAFqLwABajEAAWo0AAFqNQABajYAAWo3AAFqOAABajoAAWo8AAFqPQABaj4AAWpAAAFqQQABaoAAAWqCAAFqhAABaoYAAWqJAAFqigABaosAAWqMAAFqjQABao8AAWqRAAFqkgABapMAAWqVAAFqlgABarsAAWrfAAFrBgABayoAAWstAAFrLwABazEAAWszAAFrNQABazcAAWs4AAFrOwABa0gAAWtXAAFrWQABa1sAAWtdAAFrXwABa2EAAWtjAAFrZQABa3QAAWt3AAFregABa30AAWuAAAFrgwABa4YAAWuJAAFriwABa8oAAWvMAAFrzgABa9AAAWvTAAFr1AABa9UAAWvWAAFr1wABa9kAAWvbAAFr3AABa90AAWvfAAFr4AABbB8AAWwhAAFsIwABbCUAAWwoAAFsKQABbCoAAWwrAAFsLAABbC4AAWwwAAFsMQABbDIAAWw0AAFsNQABbHQAAWx2AAFseAABbHoAAWx9AAFsfgABbH8AAWyAAAFsgQABbIMAAWyFAAFshgABbIcAAWyJAAFsigABbMkAAWzLAAFszgABbNAAAWzTAAFs1AABbNUAAWzWAAFs1wABbNkAAWzbAAFs3AABbN0AAWzfAAFs4AABbR8AAW0hAAFtIwABbSUAAW0oAAFtKQABbSoAAW0rAAFtLAABbS4AAW0wAAFtMQABbTIAAW00AAFtNQABbXQAAW12AAFteQABbXsAAW1+AAFtfwABbYAAAW2BAAFtggABbYQAAW2GAAFthwABbYgAAW2KAAFtiwABbbIAAW3xAAFt8wABbfUAAW33AAFt+gABbfsAAW38AAFt/QABbf4AAW4AAAFuAgABbgMAAW4EAAFuBgABbgcAAW4QAAFuEQABbhMAAW5SAAFuVAABblYAAW5YAAFuWwABblwAAW5dAAFuXgABbl8AAW5hAAFuYwABbmQAAW5lAAFuZwABbmgAAW6nAAFuqQABbqsAAW6tAAFusAABbrEAAW6yAAFuswABbrQAAW62AAFuuAABbrkAAW66AAFuvAABbr0AAW78AAFu/gABbwAAAW8CAAFvBQABbwYAAW8HAAFvCAABbwkAAW8LAAFvDQABbw4AAW8PAAFvEQABbxIAAW9RAAFvUwABb1UAAW9XAAFvWgABb1sAAW9cAAFvXQABb14AAW9gAAFvYgABb2MAAW9kAAFvZgABb2cAAW+mAAFvqAABb6oAAW+sAAFvrwABb7AAAW+xAAFvsgABb7MAAW+1AAFvtwABb7gAAW+5AAFvuwABb7wAAXAHAAFwKgABcEoAAXBqAAFwbAABcG4AAXBwAAFwcgABcHQAAXB1AAFwdgABcHkAAXB6AAFwfAABcH0AAXB/AAFwgQABcIIAAXCDAAFwhgABcIcAAXCQAAFwnQABcKIAAXCkAAFwpgABcKsAAXCuAAFwsQABcLMAAXDYAAFw/AABcSMAAXFHAAFxSgABcUwAAXFOAAFxUAABcVIAAXFUAAFxVQABcVgAAXFlAAFxdgABcXgAAXF6AAFxfAABcX4AAXGAAAFxggABcYQAAXGGAAFxlwABcZoAAXGdAAFxoAABcaMAAXGmAAFxqQABcawAAXGvAAFxsQABcfAAAXHyAAFx9AABcfYAAXH5AAFx+gABcfsAAXH8AAFx/QABcf8AAXIBAAFyAgABcgMAAXIFAAFyBgABckUAAXJHAAFySQABcksAAXJOAAFyTwABclAAAXJRAAFyUgABclQAAXJWAAFyVwABclgAAXJaAAFyWwABcpoAAXKcAAFynwABcqEAAXKkAAFypQABcqYAAXKnAAFyqAABcqoAAXKsAAFyrQABcq4AAXKwAAFysQABcr4AAXK/AAFywAABcsIAAXMBAAFzAwABcwUAAXMHAAFzCgABcwsAAXMMAAFzDQABcw4AAXMQAAFzEgABcxMAAXMUAAFzFgABcxcAAXNWAAFzWAABc1oAAXNcAAFzXwABc2AAAXNhAAFzYgABc2MAAXNlAAFzZwABc2gAAXNpAAFzawABc2wAAXOrAAFzrQABc68AAXOxAAFztAABc7UAAXO2AAFztwABc7gAAXO6AAFzvAABc70AAXO+AAFzwAABc8EAAXQAAAF0AgABdAQAAXQGAAF0CQABdAoAAXQLAAF0DAABdA0AAXQPAAF0EQABdBIAAXQTAAF0FQABdBYAAXRVAAF0VwABdFkAAXRbAAF0XgABdF8AAXRgAAF0YQABdGIAAXRkAAF0ZgABdGcAAXRoAAF0agABdGsAAXSQAAF0tAABdNsAAXT/AAF1AgABdQQAAXUGAAF1CAABdQoAAXUMAAF1DQABdRAAAXUdAAF1LAABdS4AAXUwAAF1MgABdTQAAXU2AAF1OAABdToAAXVJAAF1TAABdU8AAXVSAAF1VQABdVgAAXVbAAF1XgABdWAAAXWfAAF1oQABdaMAAXWlAAF1qAABdakAAXWqAAF1qwABdawAAXWuAAF1sAABdbEAAXWyAAF1tAABdbUAAXX0AAF19gABdfgAAXX6AAF1/QABdf4AAXX/AAF2AAABdgEAAXYDAAF2BQABdgYAAXYHAAF2CQABdgoAAXZJAAF2SwABdk0AAXZPAAF2UgABdlMAAXZUAAF2VQABdlYAAXZYAAF2WgABdlsAAXZcAAF2XgABdl8AAXaeAAF2oAABdqMAAXalAAF2qAABdqkAAXaqAAF2qwABdqwAAXauAAF2sAABdrEAAXayAAF2tAABdrUAAXb0AAF29gABdvgAAXb6AAF2/QABdv4AAXb/AAF3AAABdwEAAXcDAAF3BQABdwYAAXcHAAF3CQABdwoAAXdJAAF3SwABd00AAXdPAAF3UgABd1MAAXdUAAF3VQABd1YAAXdYAAF3WgABd1sAAXdcAAF3XgABd18AAXeeAAF3oAABd6IAAXekAAF3pwABd6gAAXepAAF3qgABd6sAAXetAAF3rwABd7AAAXexAAF3swABd7QAAXf/AAF4IgABeEIAAXhiAAF4ZAABeGYAAXhoAAF4agABeGwAAXhtAAF4bgABeHEAAXhyAAF4dAABeHUAAXh3AAF4eQABeHoAAXh7AAF4fgABeH8AAXiIAAF4lQABeJoAAXicAAF4ngABeKMAAXimAAF4qQABeKsAAXjQAAF49AABeRsAAXk/AAF5QgABeUQAAXlGAAF5SAABeUoAAXlMAAF5TQABeVAAAXldAAF5bgABeXAAAXlyAAF5dAABeXYAAXl4AAF5egABeXwAAXl+AAF5jwABeZIAAXmVAAF5mAABeZsAAXmeAAF5oQABeaQAAXmnAAF5qQABeegAAXnqAAF57AABee4AAXnxAAF58gABefMAAXn0AAF59QABefcAAXn5AAF5+gABefsAAXn9AAF5/gABej0AAXo/AAF6QQABekMAAXpGAAF6RwABekgAAXpJAAF6SgABekwAAXpOAAF6TwABelAAAXpSAAF6UwABepIAAXqUAAF6lwABepkAAXqcAAF6nQABep4AAXqfAAF6oAABeqIAAXqkAAF6pQABeqYAAXqoAAF6qQABerYAAXq3AAF6uAABeroAAXr5AAF6+wABev0AAXr/AAF7AgABewMAAXs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0AAGGNgABhjgAAYY6AAGGPQABhj4AAYY/AAGGQAABhkEAAYZDAAGGRQABhkYAAYZHAAGGSQABhkoAAYaJAAGGiwABho0AAYaPAAGGkgABhpMAAYaUAAGGlQABhpYAAYaYAAGGmgABhpsAAYacAAGGngABhp8AAYbeAAGG4AABhuIAAYbkAAGG5wABhugAAYbpAAGG6gABhusAAYbtAAGG7wABhvAAAYbxAAGG8wABhvQAAYczAAGHNQABhzcAAYc5AAGHPAABhz0AAYc+AAGHPwABh0AAAYdCAAGHRAABh0UAAYdGAAGHSAABh0kAAYeIAAGHigABh4wAAYeOAAGHkQABh5IAAYeTAAGHlAABh5UAAYeXAAGHmQABh5oAAYebAAGHnQABh54AAYfpAAGIDAABiCwAAYhMAAGITgABiFAAAYhSAAGIVAABiFYAAYhXAAGIWAABiFsAAYhcAAGIXgABiF8AAYhhAAGIYwABiGQAAYhlAAGIaAABiGkAAYhuAAGIewABiIAAAYiCAAGIhAABiIkAAYiMAAGIjwABiJEAAYi2AAGI2gABiQEAAYklAAGJKAABiSoAAYksAAGJLgABiTAAAYkyAAGJMwABiTYAAYlDAAGJVAABiVYAAYlYAAGJWgABiVwAAYleAAGJYAABiWIAAYlkAAGJdQABiXgAAYl7AAGJfgABiYEAAYmEAAGJhwABiYoAAYmNAAGJjwABic4AAYnQAAGJ0gABidQAAYnXAAGJ2AABidkAAYnaAAGJ2wABid0AAYnfAAGJ4AABieEAAYnjAAGJ5AABiiMAAYolAAGKJwABiikAAYosAAGKLQABii4AAYovAAGKMAABijIAAYo0AAGKNQABijYAAYo4AAGKOQABingAAYp6AAGKfQABin8AAYqCAAGKgwABioQAAYqFAAGKhgABiogAAYqKAAGKiwABiowAAYqOAAGKjwABipwAAYqdAAGKngABiqAAAYrfAAGK4QABiuMAAYrlAAGK6AABiukAAYrqAAGK6wABiuwAAYruAAGK8AABivEAAYryAAGK9AABivUAAYs0AAGLNgABizgAAYs6AAGLPQABiz4AAYs/AAGLQAABi0EAAYtDAAGLRQABi0YAAYtHAAGLSQABi0oAAYuJAAGLiwABi40AAYuPAAGLkgABi5MAAYuUAAGLlQABi5YAAYu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MAAGWzwABltAAAZbRAAGW0gABltMAAZbVAAGW1wABltgAAZbZAAGW2wABltwAAZcbAAGXHQABlx8AAZchAAGXJAABlyUAAZcmAAGXJwABlygAAZcqAAGXLAABly0AAZcuAAGXMAABlzEAAZdwAAGXcgABl3QAAZd2AAGXeQABl3oAAZd7AAGXfAABl30AAZd/AAGXgQABl4IAAZeDAAGXhQABl4YAAZfRAAGX9AABmBQAAZg0AAGYNgABmDgAAZg6AAGYPAABmD4AAZg/AAGYQAABmEMAAZhEAAGYRgABmEcAAZhJAAGYSwABmEwAAZhNAAGYUAABmFEAAZhWAAGYYwABmGgAAZhqAAGYbAABmHEAAZh0AAGYdwABmHkAAZieAAGYwgABmOkAAZkNAAGZEAABmRIAAZkUAAGZFgABmRgAAZkaAAGZGwABmR4AAZkrAAGZPAABmT4AAZlAAAGZQgABmUQAAZlGAAGZSAABmUoAAZlMAAGZXQABmWAAAZljAAGZZgABmWkAAZlsAAGZbwABmXIAAZl1AAGZdwABmbYAAZm4AAGZugABmbwAAZm/AAGZwAABmcEAAZnCAAGZwwABmcUAAZnHAAGZyAABmckAAZnLAAGZzAABmgsAAZoNAAGaDwABmhEAAZoUAAGaFQABmhYAAZoXAAGaGAABmhoAAZocAAGaHQABmh4AAZogAAGaIQABmmAAAZpiAAGaZQABmmcAAZpqAAGaawABmmwAAZptAAGabgABmnAAAZpyAAGacwABmnQAAZp2AAGadwABmoQAAZqFAAGahgABmogAAZrHAAGayQABmssAAZrNAAGa0AABmtEAAZrSAAGa0wABmtQAAZrWAAGa2AABmtkAAZraAAGa3AABmt0AAZscAAGbHgABmyAAAZsiAAGbJQABmyYAAZsnAAGbKAABmykAAZsrAAGbLQABmy4AAZsvAAGbMQABmzIAAZtxAAGbcwABm3UAAZt3AAGbegABm3sAAZt8AAGbfQABm34AAZuAAAGbggABm4MAAZuEAAGbhgABm4cAAZvGAAGbyAABm8oAAZvMAAGbzwABm9AAAZvRAAGb0gABm9MAAZvVAAGb1wABm9gAAZvZAAGb2wABm9wAAZwbAAGcHQABnB8AAZwhAAGcJAABnCUAAZwmAAGcJwABnCgAAZwqAAGcLAABnC0AAZwuAAGcMAABnDEAAZxWAAGcegABnKEAAZzFAAGcyAABnMoAAZzMAAGczgABnNAAAZzSAAGc0wABnNYAAZzjAAGc8gABnPQAAZz2AAGc+AABnPoAAZz8AAGc/gABnQAAAZ0PAAGdEgABnRUAAZ0YAAGdGwABnR4AAZ0hAAGdJAABnSYAAZ1lAAGdZwABnWkAAZ1rAAGdbgABnW8AAZ1wAAGdcQABnXIAAZ10AAGddgABnXcAAZ14AAGdegABnXsAAZ26AAGdvAABnb4AAZ3AAAGdwwABncQAAZ3FAAGdxgABnccAAZ3JAAGdywABncwAAZ3NAAGdzwABndAAAZ4PAAGeEQABnhMAAZ4VAAGeGAABnhkAAZ4aAAGeGwABnhwAAZ4eAAGeIAABniEAAZ4iAAGeJAABniUAAZ5kAAGeZgABnmkAAZ5rAAGebgABnm8AAZ5wAAGecQABnnIAAZ50AAGedgABnncAAZ54AAGeegABnnsAAZ66AAGevAABnr4AAZ7AAAGewwABnsQAAZ7FAAGexgABnscAAZ7JAAGeywABnswAAZ7NAAGezwABntAAAZ8PAAGfEQABnxMAAZ8VAAGfGAABnxkAAZ8aAAGfGwABnxwAAZ8eAAGfIAABnyEAAZ8iAAGfJAABnyUAAZ9kAAGfZgABn2gAAZ9qAAGfbQABn24AAZ9vAAGfcAABn3EAAZ9zAAGfdQABn3YAAZ93AAGfeQABn3oAAZ/FAAGf6AABoAgAAaAoAAGgKgABoCwAAaAuAAGgMAABoDIAAaAzAAGgNAABoDcAAaA4AAGgOgABoDsAAaA9AAGgPwABoEAAAaBBAAGgRAABoEUAAaBOAAGgWwABoGAAAaBiAAGgZAABoGkAAaBsAAGgbwABoHEAAaCWAAGgugABoOEAAaEFAAGhCAABoQoAAaEMAAGhDgABoRAAAaESAAGhEwABoRYAAaEjAAGhNAABoTYAAaE4AAGhOgABoTwAAaE+AAGhQAABoUIAAaFEAAGhVQABoVgAAaFbAAGhXgABoWEAAaFkAAGhZwABoWoAAaFtAAGhbwABoa4AAaGwAAGhsgABobQAAaG3AAGhuAABobkAAaG6AAGhuwABob0AAaG/AAGhwAABocEAAaHDAAGhxAABogMAAaIFAAGiBwABogkAAaIMAAGiDQABog4AAaIPAAGiEAABohIAAaIUAAGiFQABohYAAaIYAAGiGQABolgAAaJaAAGiXQABol8AAaJiAAGiYwABomQAAaJlAAGiZgABomgAAaJqAAGiawABomwAAaJuAAGibwABonwAAaJ9AAGifgABooAAAaK/AAGiwQABosMAAaLFAAGiyAABoskAAaLKAAGiywABoswAAaLOAAGi0AABotEAAaLSAAGi1AABotUAAaMUAAGjFgABoxgAAaMaAAGjHQABox4AAaMfAAGjIAABoyEAAaMjAAGjJQABoyYAAaMnAAGjKQABoyoAAaNpAAGjawABo20AAaNvAAGjcgABo3MAAaN0AAGjdQABo3YAAaN4AAGjegABo3sAAaN8AAGjfgABo38AAaO+AAGjwAABo8IAAaPEAAGjxwABo8gAAaPJAAGjygABo8sAAaPNAAGjzwABo9AAAaPRAAGj0wABo9QAAaQTAAGkFQABpBcAAaQZAAGkHAABpB0AAaQeAAGkHwABpCAAAaQiAAGkJAABpCUAAaQmAAGkKAABpCkAAaROAAGkcgABpJkAAaS9AAGkwAABpMIAAaTEAAGkxgABpMgAAaTKAAGkywABpM4AAaTbAAGk6gABpOwAAaTuAAGk8AABpPIAAaT0AAGk9gABpPgAAaUHAAGlCgABpQ0AAaUQAAGlEwABpRYAAaUZAAGlHAABpR4AAaVdAAGlXwABpWEAAaVjAAGlZgABpWcAAaVoAAGlaQABpWoAAaVsAAGlbgABpW8AAaVwAAGlcgABpXMAAaWyAAGltAABpbYAAaW4AAGluwABpbwAAaW9AAGlvgABpb8AAaXBAAGlwwABpcQAAaXFAAGlxwABpcgAAaYHAAGmCQABpgsAAaYNAAGmEAABphEAAaYSAAGmEwABphQAAaYWAAGmGAABphkAAaYaAAGmHAABph0AAaZcAAGmXgABpmAAAaZiAAGmZQABpmYAAaZnAAGmaAABpmkAAaZrAAGmbQABpm4AAaZvAAGmcQABpnIAAaaxAAGmswABprUAAaa3AAGmugABprsAAaa8AAGmvQABpr4AAabAAAGmwgABpsMAAabEAAGmxgABpscAAacGAAGnCAABpwoAAacMAAGnDwABpxAAAacRAAGnEgABpxMAAacVAAGnFwABpxgAAacZAAGnGwABpxwAAadbAAGnXQABp18AAadhAAGnZAABp2UAAadmAAGnZwABp2gAAadqAAGnbAABp20AAaduAAGncAABp3EAAae8AAGn3wABp/8AAagfAAGoIQABqCMAAaglAAGoJwABqCkAAagqAAGoKwABqC4AAagvAAGoMQABqDIAAag0AAGoNgABqDcAAag4AAGoOwABqDwAAahBAAGoTgABqFMAAahVAAGoVwABqFwAAahfAAGoYgABqGQAAaiJAAGorQABqNQAAaj4AAGo+wABqP0AAaj/AAGpAQABqQMAAakFAAGpBgABqQkAAakWAAGpJwABqSkAAakrAAGpLQABqS8AAakxAAGpMwABqTUAAak3AAGpSAABqUsAAalOAAGpUQABqVQAAalXAAGpWgABqV0AAalgAAGpYgABqaEAAamjAAGppQABqacAAamqAAGpqwABqawAAamtAAGprgABqbAAAamyAAGpswABqbQAAam2AAGptwABqfYAAan4AAGp+gABqfwAAan/AAGqAAABqgEAAaoCAAGqAwABqgUAAaoHAAGqCAABqgkAAaoLAAGqDAABqksAAapNAAGqUAABqlIAAapVAAGqVgABqlcAAapYAAGqWQABqlsAAapdAAGqXgABql8AAaphAAGqYgABqm8AAapwAAGqcQABqnMAAaqyAAGqtAABqrYAAaq4AAGquwABqrwAAaq9AAGqvgABqr8AAarBAAGqwwABqsQAAarFAAGqxwABqsgAAasHAAGrCQABqwsAAasNAAGrEAABqxEAAasSAAGrEwABqxQAAasWAAGrGAABqxkAAasaAAGrHAABqx0AAatcAAGrXgABq2AAAatiAAGrZQABq2YAAatnAAGraAABq2kAAatrAAGrbQABq24AAatvAAGrcQABq3IAAauxAAGrswABq7UAAau3AAGrugABq7sAAau8AAGrvQABq74AAavAAAGrwgABq8MAAavEAAGrxgABq8cAAawGAAGsCAABrAoAAawMAAGsDwABrBAAAawRAAGsEgABrBMAAawVAAGsFwABrBgAAawZAAGsGwABrBwAAaxBAAGsZQABrIwAAaywAAGsswABrLUAAay3AAGsuQABrLsAAay9AAGsvgABrMEAAazOAAGs3QABrN8AAazhAAGs4wABrOUAAaznAAGs6QABrOsAAaz6AAGs/QABrQAAAa0DAAGtBgABrQkAAa0MAAGtDwABrREAAa1QAAGtUgABrVQAAa1WAAGtWQABrVoAAa1bAAGtXAABrV0AAa1fAAGtYQABrWIAAa1jAAGtZQABrWYAAa2lAAGtpwABraoAAa2sAAGtrwABrbAAAa2xAAGtsgABrbMAAa21AAGttwABrbgAAa25AAGtuwABrbwAAa2+AAGt/QABrf8AAa4BAAGuAwABrgYAAa4HAAGuCAABrgkAAa4KAAGuDAABrg4AAa4PAAGuEAABrhIAAa4TAAGuUgABrlQAAa5XAAGuWQABrlwAAa5dAAGuXgABrl8AAa5gAAGuYgABrmQAAa5lAAGuZgABrmgAAa5pAAGurAABrtAAAa70AAGvFwABrz4AAa9eAAGvhQABr6wAAa/MAAGv8AABsBQAAbAWAAGwGQABsBsAAbAdAAGwHwABsCIAAbAlAAGwJwABsCkAAbAsAAGwLgABsDAAAbAzAAGwNgABsDcAAbA8AAGwSQABsEwAAbBOAAGwUQABsFQAAbBWAAGwewABsJ8AAbDGAAGw6gABsO0AAbDvAAGw8QABsPMAAbD1AAGw9wABsPgAAbD7AAGxCAABsRsAAbEdAAGxHwABsSEAAbEjAAGxJQABsScAAbEpAAGxKwABsS0AAbFAAAGxQwABsUYAAbFJAAGxTAABsU8AAbFSAAGxVQABsVgAAbFbAAGxXQABsZwAAbGeAAGxoQABsaMAAbGmAAGxpwABsagAAbGpAAGxqgABsawAAbGuAAGxrwABsbAAAbGyAAGxswABsbwAAbG9AAGxvwABsf4AAbIAAAGyAgABsgQAAbIHAAGyCAABsgkAAbIKAAGyCwABsg0AAbIPAAGyEAABshEAAbITAAGyFAABslMAAbJVAAGyWAABsloAAbJdAAGyXgABsl8AAbJgAAGyYQABsmMAAbJlAAGyZgABsmcAAbJpAAGyagABsnMAAbJ2AAGyeQABsnsAAbKEAAGyhwABsokAAbKLAAGyygABsswAAbLOAAGy0AABstMAAbLUAAGy1QABstYAAbLXAAGy2QABstsAAbLcAAGy3QABst8AAbLgAAGzHwABsyEAAbMkAAGzJgABsykAAbMqAAGzKwABsywAAbMtAAGzLwABszEAAbMyAAGzMwABszUAAbM2AAGzPwABs0AAAbNCAAGzgQABs4MAAbOFAAGzhwABs4oAAbOLAAGzjAABs40AAbOOAAGzkAABs5IAAbOTAAGzlAABs5YAAbOXAAGz1gABs9gAAbPbAAGz3QABs+AAAbPhAAGz4gABs+MAAbPkAAGz5gABs+gAAbPpAAGz6gABs+wAAbPtAAGz+gABs/sAAbP8AAGz/gABtD0AAbQ/AAG0QQABtEMAAbRGAAG0RwABtEgAAbRJAAG0SgABtEwAAbROAAG0TwABtFAAAbRSAAG0UwABtJIAAbSUAAG0lwABtJkAAbScAAG0nQABtJ4AAbSfAAG0oAABtKIAAbSkAAG0pQABtKYAAbSoAAG0qQABtLUAAbTCAAG0zQABtM8AAbTRAAG00wABtNYAAbTZAAG05AABtOcAAbTqAAG07QABtPAAAbTzAAG09QABtQAAAbUNAAG1WAABtXsAAbWbAAG1uwABtb0AAbW/AAG1wQABtcMAAbXGAAG1xwABtcgAAbXLAAG1zAABtc4AAbXPAAG10QABtdMAAbXUAAG11QABtdgAAbXZAAG13gABtesAAbXwAAG18gABtfQAAbX5AAG1/AABtf8AAbYBAAG2JgABtkoAAbZxAAG2lQABtpgAAbaaAAG2nAABtp4AAbagAAG2ogABtqMAAbamAAG2swABtsQAAbbGAAG2yAABtsoAAbbMAAG2zgABttAAAbbSAAG21AABtuUAAbboAAG26wABtu4AAbbxAAG29AABtvcAAbb6AAG2/QABtv8AAbc+AAG3QAABt0IAAbdEAAG3RwABt0gAAbdJAAG3SgABt0sAAbdNAAG3TwABt1AAAbdRAAG3UwABt1QAAbeTAAG3lQABt5cAAbeZAAG3nAABt50AAbeeAAG3nwABt6AAAbeiAAG3pAABt6UAAbemAAG3qAABt6kAAbfoAAG36gABt+0AAbfvAAG38gABt/MAAbf0AAG39QABt/YAAbf4AAG3+gABt/sAAbf8AAG3/gABt/8AAbgMAAG4DQABuA4AAbgQAAG4TwABuFEAAbhTAAG4VQABuFgAAbhZAAG4WgABuFsAAbhcAAG4XgABuGAAAbhhAAG4YgABuGQAAbhlAAG4pAABuKYAAbioAAG4qgABuK0AAbiuAAG4rwABuLAAAbixAAG4swABuLUAAbi2AAG4twABuLkAAbi6AAG4+QABuPsAAbj9AAG4/wABuQIAAbkDAAG5BAABuQUAAbkGAAG5CAABuQoAAbkLAAG5DAABuQ4AAbkPAAG5TgABuVAAAblSAAG5VAABuVcAAblYAAG5WQABuVoAAblbAAG5XQABuV8AAblgAAG5YQABuWMAAblkAAG5owABuaUAAbmnAAG5qQABuawAAbmtAAG5rgABua8AAbmwAAG5sgABubQAAbm1AAG5tgABubgAAbm5AAG53gABugIAAbopAAG6TQABulAAAbpSAAG6VAABulYAAbpYAAG6WgABulsAAbpeAAG6awABunoAAbp8AAG6fgABuoAAAbqCAAG6hAABuoYAAbqIAAG6lwABupoAAbqdAAG6oAABuqMAAbqmAAG6qQABuqwAAbquAAG67QABuu8AAbrxAAG68wABuvYAAbr3AAG6+AABuvkAAbr6AAG6/AABuv4AAbr/AAG7AAABuwIAAbsDAAG7QgABu0QAAbtGAAG7SAABu0sAAbtMAAG7TQABu04AAbtPAAG7UQABu1MAAbtUAAG7VQABu1cAAbtYAAG7lwABu5kAAbubAAG7nQABu6AAAbuhAAG7ogABu6MAAbukAAG7pgABu6gAAbupAAG7qgABu6wAAbutAAG77AABu+4AAbvxAAG78wABu/YAAbv3AAG7+AABu/kAAbv6AAG7/AABu/4AAbv/AAG8AAABvAIAAbwDAAG8QgABvEQAAbxGAAG8SAABvEsAAbxMAAG8TQABvE4AAbxPAAG8UQABvFMAAbxUAAG8VQABvFcAAbxYAAG8lwABvJkAAbybAAG8nQABvKAAAbyhAAG8ogABvKMAAbykAAG8pgABvKgAAbypAAG8qgABvKwAAbytAAG87AABvO4AAbzwAAG88gABvPUAAbz2AAG89wABvPgAAbz5AAG8+wABvP0AAbz+AAG8/wABvQEAAb0CAAG9TQABvXAAAb2QAAG9sAABvbIAAb20AAG9tgABvbgAAb27AAG9vAABvb0AAb3AAAG9wQABvcMAAb3EAAG9xgABvcgAAb3JAAG9ygABvc0AAb3OAAG90wABveAAAb3lAAG95wABvekAAb3uAAG98QABvfQAAb32AAG+GwABvj8AAb5mAAG+igABvo0AAb6PAAG+kQABvpMAAb6VAAG+lwABvpgAAb6bAAG+qAABvrkAAb67AAG+vQABvr8AAb7BAAG+wwABvsUAAb7HAAG+yQABvtoAAb7dAAG+4AABvuMAAb7mAAG+6QABvuwAAb7vAAG+8gABvvQAAb8zAAG/NQABvzcAAb85AAG/PAABvz0AAb8+AAG/PwABv0AAAb9CAAG/RAABv0UAAb9GAAG/SAABv0kAAb+IAAG/igABv4wAAb+OAAG/kQABv5IAAb+TAAG/lAABv5UAAb+XAAG/mQABv5oAAb+bAAG/nQABv54AAb/dAAG/3wABv+IAAb/kAAG/5wABv+gAAb/pAAG/6gABv+sAAb/tAAG/7wABv/AAAb/xAAG/8wABv/QAAcABAAHAAgABwAMAAcAFAAHARAABwEYAAcBIAAHASgABwE0AAcBOAAHATwABwFAAAcBRAAHAUwABwFUAAcBWAAHAVwABwFkAAcBaAAHAmQABwJsAAcCdAAHAnwABwKIAAcCjAAHApAABwKUAAcCmAAHAqAABwKoAAcCrAAHArAABwK4AAcCvAAHA7gABwPAAAcDyAAHA9AABwPcAAcD4AAHA+QABwPoAAcD7AAHA/QABwP8AAcEAAAHBAQABwQMAAcEEAAHBQwABwUUAAcFHAAHBSQABwUwAAcFNAAHBTgABwU8AAcFQAAHBUgABwVQAAcFVAAHBVgABwVgAAcFZAAHBmAABwZoAAcGcAAHBngABwaEAAcGiAAHBowABwaQAAcGlAAHBpwABwakAAcGqAAHBqwABwa0AAcGuAAHB0wABwfcAAcIeAAHCQgABwkUAAcJHAAHCSQABwksAAcJNAAHCTwABwlAAAcJTAAHCYAABwm8AAcJxAAHCcwABwnUAAcJ3AAHCeQABwnsAAcJ9AAHCjAABwo8AAcKSAAHClQABwpgAAcKbAAHCngABwqEAAcKjAAHC4gABwuQAAcLmAAHC6AABwusAAcLsAAHC7QABwu4AAcLvAAHC8QABwvMAAcL0AAHC9QABwvcAAcL4AAHDNwABwzkAAcM7AAHDPQABw0AAAcNBAAHDQgABw0MAAcNEAAHDRgABw0gAAcNJAAHDSgABw0wAAcNNAAHDjAABw44AAcOQAAHDkgABw5UAAcOWAAHDlwABw5gAAcOZAAHDmwABw50AAcOeAAHDnwABw6EAAcOiAAHD4QABw+MAAcPlAAHD5wABw+oAAcPrAAHD7AABw+0AAcPuAAHD8AABw/IAAcPzAAHD9AABw/YAAcP3AAHENgABxDgAAcQ6AAHEPAABxD8AAcRAAAHEQQABxEIAAcRDAAHERQABxEcAAcRIAAHESQABxEsAAcRMAAHEiwABxI0AAcSPAAHEkQABxJQAAcSVAAHElgABxJcAAcSYAAHEmgABxJwAAcSdAAHEngABxKAAAcShAAHE4AABxOIAAcTlAAHE5wABxOoAAcTrAAHE7AABxO0AAcTuAAHE8AABxPIAAcTzAAHE9AABxPYAAcT3AAHFQgABxWUAAcWFAAHFpQABxacAAcWpAAHFqwABxa0AAcWwAAHFsQABxbIAAcW1AAHFtgABxbgAAcW5AAHFuwABxb0AAcW+AAHFvwABxcIAAcXDAAHFyAABxdUAAcXaAAHF3AABxd4AAcXjAAHF5gABxekAAcXrAAHGEAABxjQAAcZbAAHGfwABxoIAAcaEAAHGhgABxogAAcaKAAHGjAABxo0AAcaQAAHGnQABxq4AAcawAAHGsgABxrQAAca2AAHGuAABxroAAca8AAHGvgABxs8AAcbSAAHG1QABxtgAAcbbAAHG3gABxuEAAcbkAAHG5wABxukAAccoAAHHKgABxywAAccuAAHHMQABxzIAAcczAAHHNAABxzUAAcc3AAHHOQABxzoAAcc7AAHHPQABxz4AAcd9AAHHfwABx4EAAceDAAHHhgABx4cAAceIAAHHiQABx4oAAceMAAHHjgABx48AAceQAAHHkgABx5MAAcfSAAHH1AABx9cAAcfZAAHH3AABx90AAcfeAAHH3wABx+AAAcfiAAHH5AABx+UAAcfmAAHH6AABx+kAAcf2AAHH9wABx/gAAcf6AAHIOQAByDsAAcg9AAHIPwAByEIAAchDAAHIRAAByEUAAchGAAHISAAByEoAAchLAAHITAAByE4AAchPAAHIjgAByJAAAciSAAHIlAAByJcAAciYAAHImQAByJoAAcibAAHInQAByJ8AAcigAAHIoQAByKMAAcikAAHI4wAByOUAAcjnAAHI6QAByOwAAcjtAAHI7gAByO8AAcjwAAHI8gAByPQAAcj1AAHI9gAByPgAAcj5AAHJOAAByToAAck8AAHJPgAByUEAAclCAAHJQwAByUQAAclFAAHJRwAByUkAAclKAAHJSwAByU0AAclOAAHJjQAByY8AAcmRAAHJkwAByZYAAcmXAAHJmAAByZkAAcmaAAHJnAAByZ4AAcmfAAHJoAAByaIAAcmjAAHJyAAByewAAcoTAAHKNwAByjoAAco8AAHKPgABykAAAcpCAAHKRAABykUAAcpIAAHKVQABymQAAcpmAAHKaAABymoAAcpsAAHKbgABynAAAcpyAAHKgQAByoQAAcqHAAHKigAByo0AAcqQAAHKkwABypYAAcqYAAHK1wABytkAAcrcAAHK3gAByuEAAcriAAHK4wAByuQAAcrlAAHK5wAByukAAcrqAAHK6wAByu0AAcruAAHK7wAByy4AAcswAAHLMgAByzQAAcs3AAHLOAAByzkAAcs6AAHLOwAByz0AAcs/AAHLQAABy0EAActDAAHLRAABy4MAAcuFAAHLhwABy4kAAcuMAAHLjQABy44AAcuPAAHLkAABy5IAAcuUAAHLlQABy5YAAcuYAAHLmQABy9gAAcvaAAHL3AABy94AAcvhAAHL4gABy+MAAcvkAAHL5QABy+cAAcvpAAHL6gABy+sAAcvtAAHL7gABzC0AAcwvAAHMMQABzDMAAcw2AAHMNwABzDgAAcw5AAHMOgABzDwAAcw+AAHMPwABzEAAAcxCAAHMQwABzIIAAcyEAAHMhgABzIgAAcyLAAHMjAABzI0AAcyOAAHMjwABzJEAAcyTAAHMlAABzJUAAcyXAAHMmAABzNcAAczZAAHM2wABzN0AAczgAAHM4QABzOIAAczjAAHM5AABzOYAAczoAAHM6QABzOoAAczsAAHM7QABzTgAAc1bAAHNewABzZsAAc2dAAHNnwABzaEAAc2jAAHNpgABzacAAc2oAAHNqwABzawAAc2uAAHNrwABzbEAAc20AAHNtQABzbYAAc25AAHNugABzcMAAc3QAAHN1QABzdcAAc3ZAAHN3gABzeEAAc3kAAHN5gABzgsAAc4vAAHOVgABznoAAc59AAHOfwABzoEAAc6DAAHOhQABzocAAc6IAAHOiwABzpgAAc6pAAHOqwABzq0AAc6vAAHOsQABzrMAAc61AAHOtwABzrkAAc7KAAHOzQABztAAAc7TAAHO1gABztkAAc7cAAHO3wABzuIAAc7kAAHPIwABzyUAAc8nAAHPKQABzywAAc8tAAHPLgABzy8AAc8wAAHPMgABzzQAAc81AAHPNgABzzgAAc85AAHPeAABz3oAAc98AAHPfgABz4EAAc+CAAHPgwABz4QAAc+FAAHPhwABz4kAAc+KAAHPiwABz40AAc+OAAHPzQABz88AAc/SAAHP1AABz9cAAc/YAAHP2QABz9oAAc/bAAHP3QABz98AAc/gAAHP4QABz+MAAc/kAAHP8QABz/IAAc/zAAHP9QAB0DQAAdA2AAHQOAAB0DoAAdA9AAHQPgAB0D8AAdBAAAHQQQAB0EMAAdBFAAHQRgAB0EcAAdBJAAHQSgAB0IkAAdCLAAHQjQAB0I8AAdCSAAHQkwAB0JQAAdCVAAHQlgAB0JgAAdCaAAHQmwAB0JwAAdCeAAHQnwAB0N4AAdDgAAHQ4gAB0OQAAdDnAAHQ6AAB0OkAAdDqAAHQ6wAB0O0AAdDvAAHQ8AAB0PEAAdDzAAHQ9AAB0TMAAdE1AAHRNwAB0TkAAdE8AAHRPQAB0T4AAdE/AAHRQAAB0UIAAdFEAAHRRQAB0UYAAdFIAAHRSQAB0YgAAdGKAAHRjAAB0Y4AAdGRAAHRkgAB0ZMAAdGUAAHRlQAB0ZcAAdGZAAHRmgAB0ZsAAdGdAAHRngAB0cMAAdHnAAHSDgAB0jIAAdI1AAHSNwAB0jkAAdI7AAHSPQAB0j8AAdJAAAHSQwAB0lAAAdJfAAHSYQAB0mMAAdJlAAHSZwAB0mkAAdJrAAHSbQAB0nwAAdJ/AAHSggAB0oUAAdKIAAHSiwAB0o4AAdKRAAHSkwAB0tIAAdLUAAHS1gAB0tgAAdLbAAHS3AAB0t0AAdLeAAHS3wAB0uEAAdLjAAHS5AAB0uUAAdLnAAHS6AAB0ycAAdMpAAHTKwAB0y0AAdMwAAHTMQAB0zIAAdMzAAHTNAAB0zYAAdM4AAHTOQAB0zoAAdM8AAHTPQAB03wAAdN+AAHTgAAB04IAAdOFAAHThgAB04cAAdOIAAHTiQAB04sAAdONAAHTjgAB048AAdORAAHTkgAB09EAAdPTAAHT1QAB09cAAdPaAAHT2wAB09wAAdPdAAHT3gAB0+AAAdPiAAHT4wAB0+QAAdPmAAHT5wAB1CYAAdQoAAHUKgAB1CwAAdQvAAHUMAAB1DEAAdQyAAHUMwAB1DUAAdQ3AAHUOAAB1DkAAdQ7AAHUPAAB1HsAAdR9AAHUfwAB1IEAAdSEAAHUhQAB1IYAAdSHAAHUiAAB1IoAAdSMAAHUjQAB1I4AAdSQAAHUkQAB1NAAAdTSAAHU1AAB1NYAAdTZAAHU2gAB1NsAAdTcAAHU3QAB1N8AAdThAAHU4gAB1OMAAdTlAAHU5gAB1TEAAdVUAAHVdAAB1ZQAAdWWAAHVmAAB1ZoAAdWcAAHVnwAB1aAAAdWhAAHVpAAB1aUAAdWnAAHVqAAB1aoAAdWtAAHVrgAB1a8AAdWyAAHVswAB1bwAAdXJAAHVzgAB1dAAAdXSAAHV1wAB1doAAdXdAAHV3wAB1gQAAdYoAAHWTwAB1nMAAdZ2AAHWeAAB1noAAdZ8AAHWfgAB1oAAAdaBAAHWhAAB1pEAAdaiAAHWpAAB1qYAAdaoAAHWqgAB1qwAAdauAAHWsAAB1rIAAdbDAAHWxgAB1skAAdbMAAHWzwAB1tIAAdbVAAHW2AAB1tsAAdbdAAHXHAAB1x4AAdcgAAHXIgAB1yUAAdcmAAHXJwAB1ygAAdcpAAHXKwAB1y0AAdcuAAHXLwAB1zEAAdcyAAHXcQAB13MAAdd1AAHXdwAB13oAAdd7AAHXfAAB130AAdd+AAHXgAAB14IAAdeDAAHXhAAB14YAAdeHAAHXxgAB18gAAdfLAAHXzQAB19AAAdfRAAHX0gAB19MAAdfUAAHX1gAB19gAAdfZAAHX2gAB19wAAdfdAAHX6gAB1+sAAdfsAAHX7gAB2C0AAdgvAAHYMQAB2DMAAdg2AAHYNwAB2DgAAdg5AAHYOgAB2DwAAdg+AAHYPwAB2EAAAdhCAAHYQwAB2IIAAdiEAAHYhgAB2IgAAdiLAAHYjAAB2I0AAdiOAAHYjwAB2JEAAdiTAAHYlAAB2JUAAdiXAAHYmAAB2NcAAdjZAAHY2wAB2N0AAdjgAAHY4QAB2OIAAdjjAAHY5AAB2OYAAdjoAAHY6QAB2OoAAdjsAAHY7QAB2SwAAdkuAAHZMAAB2TIAAdk1AAHZNgAB2TcAAdk4AAHZOQAB2TsAAdk9AAHZPgAB2T8AAdlBAAHZQgAB2YEAAdmDAAHZhQAB2YcAAdmKAAHZiwAB2YwAAdmNAAHZjgAB2ZAAAdmSAAHZkwAB2ZQAAdmWAAHZlwAB2bwAAdngAAHaBwAB2isAAdouAAHaMAAB2jIAAdo0AAHaNgAB2jgAAdo5AAHaPAAB2kkAAdpYAAHaWgAB2lwAAdpeAAHaYAAB2mIAAdpkAAHaZgAB2nUAAdp4AAHaewAB2n4AAdqBAAHahAAB2ocAAdqKAAHajAAB2ssAAdrNAAHazwAB2tEAAdrUAAHa1QAB2tYAAdrXAAHa2AAB2toAAdrcAAHa3QAB2t4AAdrgAAHa4QAB2yAAAdsiAAHbJAAB2yYAAdspAAHbKgAB2ysAAdssAAHbLQAB2y8AAdsxAAHbMgAB2zMAAds1AAHbNgAB23UAAdt3AAHbeQAB23sAAdt+AAHbfwAB24AAAduBAAHbggAB24QAAduGAAHbhwAB24gAAduKAAHbiwAB28oAAdvMAAHbzgAB29AAAdvTAAHb1AAB29UAAdvWAAHb1wAB29kAAdvbAAHb3AAB290AAdvfAAHb4AAB3B8AAdwhAAHcIwAB3CUAAdwoAAHcKQAB3CoAAdwrAAHcLAAB3C4AAdwwAAHcMQAB3DIAAdw0AAHcNQAB3HQAAdx2AAHceAAB3HoAAdx9AAHcfgAB3H8AAdyAAAHcgQAB3IMAAdyFAAHchgAB3IcAAdyJAAHcigAB3MkAAdzLAAHczQAB3M8AAdzSAAHc0wAB3NQAAdzVAAHc1gAB3NgAAdzaAAHc2wAB3NwAAdzeAAHc3wAB3OgAAdzpAAHc6wAB3SoAAd0sAAHdLgAB3TAAAd0zAAHdNAAB3TUAAd02AAHdNwAB3TkAAd07AAHdPAAB3T0AAd0/AAHdQAAB3X8AAd2BAAHdgwAB3YUAAd2IAAHdiQAB3YoAAd2LAAHdjAAB3Y4AAd2QAAHdkQAB3ZIAAd2UAAHdlQAB3dQAAd3WAAHd2QAB3dsAAd3eAAHd3wAB3eAAAd3hAAHd4gAB3eQAAd3mAAHd5wAB3egAAd3qAAHd6wAB3jYAAd5ZAAHeeQAB3pkAAd6bAAHenQAB3p8AAd6hAAHeowAB3qQAAd6lAAHeqAAB3qkAAd6rAAHerAAB3q4AAd6wAAHesQAB3rIAAd61AAHetgAB3rsAAd7IAAHezQAB3s8AAd7RAAHe1gAB3tkAAd7cAAHe3gAB3wMAAd8nAAHfTgAB33IAAd91AAHfdwAB33kAAd97AAHffQAB338AAd+AAAHfgwAB35AAAd+hAAHfowAB36UAAd+nAAHfqQAB36sAAd+tAAHfrwAB37EAAd/CAAHfxQAB38gAAd/LAAHfzgAB39EAAd/UAAHf1wAB39oAAd/cAAHgGwAB4B0AAeAfAAHgIQAB4CQAAeAlAAHgJgAB4CcAAeAoAAHgKgAB4CwAAeAtAAHgLgAB4DAAAeAxAAHgcAAB4HIAAeB0AAHgdgAB4HkAAeB6AAHgewAB4HwAAeB9AAHgfwAB4IEAAeCCAAHggwAB4IUAAeCGAAHgxQAB4McAAeDKAAHgzAAB4M8AAeDQAAHg0QAB4NIAAeDTAAHg1QAB4NcAAeDYAAHg2QAB4NsAAeDcAAHg6QAB4OoAAeDrAAHg7QAB4SwAAeEuAAHhMAAB4TIAAeE1AAHhNgAB4TcAAeE4AAHhOQAB4TsAAeE9AAHhPgAB4T8AAeFBAAHhQgAB4YEAAeGDAAHhhQAB4YcAAeGKAAHhiwAB4YwAAeGNAAHhjgAB4ZAAAeGSAAHhkwAB4ZQAAeGWAAHhlwAB4dYAAeHYAAHh2gAB4dwAAeHfAAHh4AAB4eEAAeHiAAHh4wAB4eUAAeHnAAHh6AAB4ekAAeHrAAHh7AAB4isAAeItAAHiLwAB4jEAAeI0AAHiNQAB4jYAAeI3AAHiOAAB4joAAeI8AAHiPQAB4j4AAeJAAAHiQQAB4oAAAeKCAAHihAAB4oYAAeKJAAHiigAB4osAAeKMAAHijQAB4o8AAeKRAAHikgAB4pMAAeKVAAHilgAB4rsAAeLfAAHjBgAB4yoAAeMtAAHjLwAB4zEAAeMzAAHjNQAB4zcAAeM4AAHjOwAB40gAAeNXAAHjWQAB41sAAeNdAAHjXwAB42EAAeNjAAHjZQAB43QAAeN3AAHjegAB430AAeOAAAHjgwAB44YAAeOJAAHjiwAB48oAAePMAAHjzwAB49EAAePUAAHj1QAB49YAAePXAAHj2AAB49oAAePcAAHj3QAB494AAePgAAHj4QAB5CAAAeQiAAHkJAAB5CYAAeQpAAHkKgAB5CsAAeQsAAHkLQAB5C8AAeQxAAHkMgAB5DMAAeQ1AAHkNgAB5HUAAeR3AAHkeQAB5HsAAeR+AAHkfwAB5IAAAeSBAAHkggAB5IQAAeSGAAHkhwAB5IgAAeSKAAHkiwAB5MoAAeTMAAHkzwAB5NEAAeTUAAHk1QAB5NYAAeTXAAHk2AAB5NoAAeTcAAHk3QAB5N4AAeTgAAHk4QAB5SAAAeUiAAHlJAAB5SYAAeUpAAHlKgAB5SsAAeUsAAHlLQAB5S8AAeUxAAHlMgAB5TMAAeU1AAHlNgAB5XUAAeV3AAHleQAB5XsAAeV+AAHlfwAB5YAAAeWBAAHlggAB5YQAAeWGAAHlhwAB5YgAAeWKAAHliwAB5coAAeXMAAHlzgAB5dAAAeXTAAHl1AAB5dUAAeXWAAHl1wAB5dkAAeXbAAHl3AAB5d0AAeXfAAHl4AAB5isAAeZOAAHmbgAB5o4AAeaQAAHmkgAB5pQAAeaWAAHmmAAB5pkAAeaaAAHmnQAB5p4AAeagAAHmoQAB5qMAAealAAHmpgAB5qcAAeaqAAHmqwAB5rAAAea9AAHmwgAB5sQAAebGAAHmywAB5s4AAebRAAHm0wAB5vgAAeccAAHnQwAB52cAAedqAAHnbAAB524AAedwAAHncgAB53QAAed1AAHneAAB54UAAeeWAAHnmAAB55oAAeecAAHnngAB56AAAeeiAAHnpAAB56YAAee3AAHnugAB570AAefAAAHnwwAB58YAAefJAAHnzAAB588AAefRAAHoEAAB6BIAAegUAAHoFgAB6BkAAegaAAHoGwAB6BwAAegdAAHoHwAB6CEAAegiAAHoIwAB6CUAAegmAAHoZQAB6GcAAehpAAHoawAB6G4AAehvAAHocAAB6HEAAehyAAHodAAB6HYAAeh3AAHoeAAB6HoAAeh7AAHougAB6LwAAei/AAHowQAB6MQAAejFAAHoxgAB6McAAejIAAHoygAB6MwAAejNAAHozgAB6NAAAejRAAHo3gAB6N8AAejgAAHo4gAB6SEAAekjAAHpJQAB6ScAAekqAAHpKwAB6SwAAektAAHpLgAB6TAAAekyAAHpMwAB6TQAAek2AAHpNwAB6XYAAel4AAHpegAB6XwAAel/AAHpgAAB6YEAAemCAAHpgwAB6YUAAemHAAHpiAAB6YkAAemLAAHpjAAB6csAAenNAAHpzwAB6dEAAenUAAHp1QAB6dYAAenXAAHp2AAB6doAAencAAHp3QAB6d4AAengAAHp4QAB6iAAAeoiAAHqJAAB6iYAAeopAAHqKgAB6isAAeosAAHqLQAB6i8AAeoxAAHqMgAB6jMAAeo1AAHqNgAB6nUAAep3AAHqeQAB6nsAAep+AAHqfwAB6oAAAeqBAAHqggAB6oQAAeqGAAHqhwAB6ogAAeqKAAHqiwAB6rAAAerUAAHq+wAB6x8AAesiAAHrJAAB6yYAAesoAAHrKgAB6ywAAestAAHrMAAB6z0AAetMAAHrTgAB61AAAetSAAHrVAAB61YAAetYAAHrWgAB62kAAetsAAHrbwAB63IAAet1AAHreAAB63sAAet+AAHrgAAB678AAevBAAHrwwAB68UAAevIAAHryQAB68oAAevLAAHrzAAB684AAevQAAHr0QAB69IAAevUAAHr1QAB7BQAAewWAAHsGAAB7BoAAewdAAHsHgAB7B8AAewgAAHsIQAB7CMAAewlAAHsJgAB7CcAAewpAAHsKgAB7GkAAexrAAHsbQAB7G8AAexyAAHscwAB7HQAAex1AAHsdgAB7HgAAex6AAHsewAB7HwAAex+AAHsfwAB7L4AAezAAAHswwAB7MUAAezIAAHsyQAB7MoAAezLAAHszAAB7M4AAezQAAHs0QAB7NIAAezUAAHs1QAB7RQAAe0WAAHtGAAB7RoAAe0dAAHtHgAB7R8AAe0gAAHtIQAB7SMAAe0lAAHtJgAB7ScAAe0pAAHtKgAB7WkAAe1rAAHtbQAB7W8AAe1yAAHtcwAB7XQAAe11AAHtdgAB7XgAAe16AAHtewAB7XwAAe1+AAHtfwAB7b4AAe3AAAHtwgAB7cQAAe3HAAHtyAAB7ckAAe3KAAHtywAB7c0AAe3PAAHt0AAB7dEAAe3TAAHt1AAB7h8AAe5CAAHuYgAB7oIAAe6EAAHuhgAB7ogAAe6KAAHujAAB7o0AAe6OAAHukQAB7pIAAe6UAAHulQAB7pcAAe6ZAAHumgAB7psAAe6eAAHunwAB7qQAAe6xAAHutgAB7rgAAe66AAHuvwAB7sIAAe7FAAHuxwAB7uwAAe8QAAHvNwAB71sAAe9eAAHvYAAB72IAAe9kAAHvZgAB72gAAe9pAAHvbAAB73kAAe+KAAHvjAAB744AAe+QAAHvkgAB75QAAe+WAAHvmAAB75oAAe+rAAHvrgAB77EAAe+0AAHvtwAB77oAAe+9AAHvwAAB78MAAe/FAAHwBAAB8AYAAfAIAAHwCgAB8A0AAfAOAAHwDwAB8BAAAfARAAHwEwAB8BUAAfAWAAHwFwAB8BkAAfAaAAHwWQAB8FsAAfBdAAHwXwAB8GIAAfBjAAHwZAAB8GUAAfBmAAHwaAAB8GoAAfBrAAHwbAAB8G4AAfBvAAHwrgAB8LAAAfCzAAHwtQAB8LgAAfC5AAHwugAB8LsAAfC8AAHwvgAB8MAAAfDBAAHwwgAB8MQAAfD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EAAIHRgACB4UAAgeHAAIHiQACB4sAAgeOAAIHjwACB5AAAgeRAAIHkgACB5QAAgeWAAIHlwACB5gAAgeaAAIHmwACB9oAAgfcAAIH3gACB+AAAgfjAAIH5AACB+UAAgfmAAIH5wACB+kAAgfrAAIH7AACB+0AAgfvAAIH8AACCC8AAggxAAIINAACCDYAAgg5AAIIOgACCDsAAgg8AAIIPQACCD8AAghBAAIIQgACCEMAAghFAAIIRgACCFMAAghUAAIIVQACCFcAAgiWAAIImAACCJoAAgicAAIInwACCKAAAgihAAIIogACCKMAAgilAAIIpwACCKgAAgipAAIIqwACCKwAAgjrAAII7QACCO8AAgjxAAII9AACCPUAAgj2AAII9wACCPgAAgj6AAII/AACCP0AAgj+AAIJAAACCQEAAglAAAIJQgACCUQAAglGAAIJSQACCUoAAglLAAIJTAACCU0AAglPAAIJUQACCVIAAglTAAIJVQACCVYAAgmVAAIJlwACCZkAAgmbAAIJngACCZ8AAgmgAAIJoQACCaIAAgmkAAIJpgACCacAAgmoAAIJqgACCasAAgnqAAIJ7AACCe4AAgnwAAIJ8wACCfQAAgn1AAIJ9gACCfcAAgn5AAIJ+wACCfwAAgn9AAIJ/wACCgAAAgolAAIKSQACCnAAAgqUAAIKlwACCpkAAgqbAAIKnQACCp8AAgqhAAIKogACCqUAAgqyAAIKwQACCsMAAgrFAAIKxwACCskAAgrLAAIKzQACCs8AAgreAAIK4QACCuQAAgrnAAIK6gACCu0AAgrwAAIK8wACCvUAAgs0AAILNgACCzgAAgs6AAILPQACCz4AAgs/AAILQAACC0EAAgtDAAILRQACC0YAAgtHAAILSQACC0oAAguJAAILiwACC40AAguPAAILkgACC5MAAguUAAILlQACC5YAAguYAAILmgACC5sAAgucAAILngACC58AAgveAAIL4AACC+IAAgvkAAIL5wACC+gAAgvpAAIL6gACC+sAAgvtAAIL7wACC/AAAgvxAAIL8wACC/QAAgwzAAIMNQACDDgAAgw6AAIMPQACDD4AAgw/AAIMQAACDEEAAgxDAAIMRQACDEYAAgxHAAIMSQACDEoAAgyNAAIMsQACDNUAAgz4AAINHwACDT8AAg1mAAINjQACDa0AAg3RAAIN9QACDfcAAg36AAIN/AACDf4AAg4AAAIOAwACDgYAAg4IAAIOCgACDg0AAg4PAAIOEQACDhQAAg4XAAIOGAACDiEAAg4uAAIOMQACDjMAAg42AAIOOQACDjsAAg5gAAIOhAACDqsAAg7PAAIO0gACDtQAAg7WAAIO2AACDtoAAg7cAAIO3QACDuAAAg7tAAIPAAACDwIAAg8EAAIPBgACDwgAAg8KAAIPDAACDw4AAg8QAAIPEgACDyUAAg8oAAIPKwACDy4AAg8xAAIPNAACDzcAAg86AAIPPQACD0AAAg9CAAIPgQACD4MAAg+GAAIPiAACD4sAAg+MAAIPjQACD44AAg+PAAIPkQACD5MAAg+UAAIPlQACD5cAAg+YAAIPoQACD6IAAg+kAAIP4wACD+UAAg/nAAIP6QACD+wAAg/tAAIP7gACD+8AAg/wAAIP8gACD/QAAg/1AAIP9gACD/gAAg/5AAIQOAACEDoAAhA9AAIQPwACEEIAAhBDAAIQRAACEEUAAhBGAAIQSAACEEoAAhBLAAIQTAACEE4AAhBPAAIQWAACEFkAAhBbAAIQmgACEJwAAhCeAAIQoAACEKMAAhCkAAIQpQACEKYAAhCnAAIQqQACEKsAAhCsAAIQrQACEK8AAhCwAAIQ7wACEPEAAhD0AAIQ9gACEPkAAhD6AAIQ+wACEPwAAhD9AAIQ/wACEQEAAhECAAIRAwACEQUAAhEGAAIRDwACERAAAhESAAIRUQACEVMAAhFVAAIRVwACEVoAAhFbAAIRXAACEV0AAhFeAAIRYAACEWIAAhFjAAIRZAACEWYAAhFnAAIRpgACEagAAhGrAAIRrQACEbAAAhGxAAIRsgACEbMAAhG0AAIRtgACEbgAAhG5AAIRugACEbwAAhG9AAIRygACEcsAAhHMAAIRzgACEg0AAhIPAAISEQACEhMAAhIWAAISFwACEhgAAhIZAAISGgACEhwAAhIeAAISHwACEiAAAhIiAAISIwACEmIAAhJkAAISZwACEmkAAhJsAAISbQACEm4AAhJvAAIScAACEnIAAhJ0AAISdQACEnYAAhJ4AAISeQACEowAAhKZAAISpAACEqcAAhKpAAISrAACEq8AAhKyAAISvQACEsAAAhLDAAISxgACEskAAhLMAAISzgACEuYAAhL4AAITAwACExsAAhNmAAITiQACE6kAAhPJAAITywACE80AAhPPAAIT0QACE9QAAhPVAAIT1gACE9kAAhPaAAIT3AACE90AAhPfAAIT4gACE+MAAhPkAAIT5wACE+gAAhPtAAIT+gACE/8AAhQBAAIUAwACFAgAAhQLAAIUDgACFBAAAhQ1AAIUWQACFIAAAhSkAAIUpwACFKkAAhSrAAIUrQACFK8AAhSxAAIUsgACFLUAAhTCAAIU0wACFNUAAhTXAAIU2QACFNsAAhTdAAIU3wACFOEAAhTjAAIU9AACFPcAAhT6AAIU/QACFQAAAhUDAAIVBgACFQkAAhUMAAIVDgACFU0AAhVPAAIVUQACFVMAAhVWAAIVVwACFVgAAhVZAAIVWgACFVwAAhVeAAIVXwACFWAAAhViAAIVYwACFaIAAhWkAAIVpgACFagAAhWrAAIVrAACFa0AAhWuAAIVrwACFbEAAhWzAAIVtAACFbUAAhW3AAIVuAACFfcAAhX5AAIV/AACFf4AAhYBAAIWAgACFgMAAhYEAAIWBQACFgcAAhYJAAIWCgACFgsAAhYNAAIWDgACFhsAAhYcAAIWHQACFh8AAhZeAAIWYAACFmIAAhZkAAIWZwACFmgAAhZpAAIWagACFmsAAhZtAAIWbwACFnAAAhZxAAIWcwACFnQAAhazAAIWtQACFrcAAha5AAIWvAACFr0AAha+AAIWvwACFsAAAhbCAAIWxAACFsUAAhbGAAIWyAACFskAAhcIAAIXCgACFwwAAhcOAAIXEQACFxIAAhcTAAIXFAACFxUAAhcXAAIXGQACFxoAAhcbAAIXHQACFx4AAhddAAIXXwACF2EAAhdjAAIXZgACF2cAAhdoAAIXaQACF2oAAhdsAAIXbgACF28AAhdwAAIXcgACF3MAAheyAAIXtAACF7YAAhe4AAIXuwACF7wAAhe9AAIXvgACF78AAhfBAAIXwwACF8QAAhfFAAIXxwACF8gAAhftAAIYEQACGDgAAhhcAAIYXwACGGEAAhhjAAIYZQACGGcAAhhpAAIYagACGG0AAhh6AAIYiQACGIsAAhiNAAIYjwACGJEAAhiTAAIYlQACGJcAAhimAAIYqQACGKwAAhivAAIYsgACGLUAAhi4AAIYuwACGL0AAhj8AAIY/gACGQAAAhkCAAIZBQACGQYAAhkHAAIZCAACGQkAAhkLAAIZDQACGQ4AAhkPAAIZEQACGRIAAhlRAAIZUwACGVUAAhlXAAIZWgACGVsAAhlcAAIZXQACGV4AAhlgAAIZYgACGWMAAhlkAAIZZgACGWcAAhmmAAIZqAACGaoAAhmsAAIZrwACGbAAAhmxAAIZsgACGbMAAhm1AAIZtwACGbgAAhm5AAIZuwACGbwAAhn7AAIZ/QACGgAAAhoCAAIaBQACGgYAAhoHAAIaCAACGgkAAhoLAAIaDQACGg4AAhoPAAIaEQACGhIAAhpRAAIaUwACGlUAAhpXAAIaWgACGlsAAhpcAAIaXQACGl4AAhpgAAIaYgACGmMAAhpkAAIaZgACGmcAAhqmAAIaqAACGqoAAhqsAAIarwACGrAAAhqxAAIasgACGrMAAhq1AAIatwACGrgAAhq5AAIauwACGrwAAhr7AAIa/QACGv8AAhsBAAIbBAACGwUAAhsGAAIbBwACGwgAAhsKAAIbDAACGw0AAhsOAAIbEAACGxEAAhtcAAIbfwACG58AAhu/AAIbwQACG8MAAhvFAAIbxwACG8oAAhvLAAIbzAACG88AAhvQAAIb0gACG9MAAhvVAAIb1wACG9gAAhvZAAIb3AACG90AAhviAAIb7wACG/QAAhv2AAIb+AACG/0AAhwAAAIcAwACHAUAAhwqAAIcTgACHHUAAhyZAAIcnAACHJ4AAhygAAIcogACHKQAAhymAAIcpwACHKoAAhy3AAIcyAACHMoAAhzMAAIczgACHNAAAhzSAAIc1AACHNYAAhzYAAIc6QACHOwAAhzvAAIc8gACHPUAAhz4AAIc+wACHP4AAh0BAAIdAwACHUIAAh1EAAIdRgACHUgAAh1LAAIdTAACHU0AAh1OAAIdTwACHVEAAh1TAAIdVAACHVUAAh1XAAIdWAACHZcAAh2ZAAIdmwACHZ0AAh2gAAIdoQACHaIAAh2jAAIdpAACHaYAAh2oAAIdqQACHaoAAh2sAAIdrQACHewAAh3uAAId8QACHfMAAh32AAId9wACHfgAAh35AAId+gACHfwAAh3+AAId/wACHgAAAh4CAAIeAwACHhAAAh4RAAIeEgACHhQAAh5TAAIeVQACHlcAAh5ZAAIeXAACHl0AAh5eAAIeXwACHmAAAh5iAAIeZAACHmUAAh5mAAIeaAACHmkAAh6oAAIeqgACHqwAAh6uAAIesQACHrIAAh6zAAIetAACHrUAAh63AAIeuQACHroAAh67AAIevQACHr4AAh79AAIe/wACHwEAAh8DAAIfBgACHwcAAh8IAAIfCQACHwoAAh8MAAIfDgACHw8AAh8QAAIfEgACHxMAAh9SAAIfVAACH1YAAh9YAAIfWwACH1wAAh9dAAIfXgACH18AAh9hAAIfYwACH2QAAh9lAAIfZwACH2gAAh+nAAIfqQACH6sAAh+tAAIfsAACH7EAAh+yAAIfswACH7QAAh+2AAIfuAACH7kAAh+6AAIfvAACH70AAh/iAAIgBgACIC0AAiBRAAIgVAACIFYAAiBYAAIgWgACIFwAAiBeAAIgXwACIGIAAiBvAAIgfgACIIAAAiCCAAIghAACIIYAAiCIAAIgigACIIwAAiCbAAIgngACIKEAAiCkAAIgpwACIKoAAiCtAAIgsAACILIAAiDxAAIg8wACIPUAAiD3AAIg+gACIPsAAiD8AAIg/QACIP4AAiEAAAIhAgACIQMAAiEEAAIhBgACIQcAAiFGAAIhSAACIUoAAiFMAAIhTwACIVAAAiFRAAIhUgACIVMAAiFVAAIhVwACIVgAAiFZAAIhWwACIVwAAiGbAAIhnQACIZ8AAiGhAAIhpAACIaUAAiGmAAIhpwACIagAAiGqAAIhrAACIa0AAiGuAAIhsAACIbEAAiHwAAIh8gACIfQAAiH2AAIh+QACIfoAAiH7AAIh/AACIf0AAiH/AAIiAQACIgIAAiIDAAIiBQACIgYAAiJFAAIiRwACIkkAAiJLAAIiTgACIk8AAiJQAAIiUQACIlIAAiJUAAIiVgACIlcAAiJYAAIiWgACIlsAAiKaAAIinAACIp4AAiKgAAIiowACIqQAAiKlAAIipgACIqcAAiKpAAIiqwACIqwAAiKtAAIirwACIrAAAiLvAAIi8QACIvQAAiL2AAIi+QACIvoAAiL7AAIi/AACIv0AAiL/AAIjAQACIwIAAiMDAAIjBQACIwYAAiNRAAIjdAACI5QAAiO0AAIjtgACI7gAAiO6AAIjvAACI78AAiPAAAIjwQACI8QAAiPFAAIjxwACI8gAAiPKAAIjzQACI84AAiPPAAIj0gACI9MAAiPYAAIj5QACI+oAAiPsAAIj7gACI/MAAiP2AAIj+QACI/sAAiQgAAIkRAACJGsAAiSPAAIkkgACJJQAAiSWAAIkmAACJJoAAiScAAIknQACJKAAAiStAAIkvgACJMAAAiTCAAIkxAACJMYAAiTIAAIkygACJMwAAiTOAAIk3wACJOIAAiTlAAIk6AACJOsAAiTuAAIk8QACJPQAAiT3AAIk+QACJTgAAiU6AAIlPAACJT4AAiVBAAIlQgACJUMAAiVEAAIlRQACJUcAAiVJAAIlSgACJUsAAiVNAAIlTgACJY0AAiWPAAIlkQACJZMAAiWWAAIllwACJZgAAiWZAAIlmgACJZwAAiWeAAIlnwACJaAAAiWiAAIlowACJeIAAiXkAAIl5wACJekAAiXsAAIl7QACJe4AAiXvAAIl8AACJfIAAiX0AAIl9QACJfYAAiX4AAIl+QACJgYAAiYHAAImCAACJgoAAiZJAAImSwACJk0AAiZPAAImUgACJlMAAiZUAAImVQACJlYAAiZYAAImWgACJlsAAiZcAAImXgACJl8AAiaeAAImoAACJqIAAiakAAImpwACJqgAAiapAAImqgACJqsAAiatAAImrwACJrAAAiaxAAImswACJrQAAibzAAIm9QACJvcAAib5AAIm/AACJv0AAib+AAIm/wACJwAAAicCAAInBAACJwUAAicGAAInCAACJwkAAidIAAInSgACJ0wAAidOAAInUQACJ1IAAidTAAInVAACJ1UAAidXAAInWQACJ1oAAidbAAInXQACJ14AAiedAAInnwACJ6EAAiejAAInpgACJ6cAAieoAAInqQACJ6oAAiesAAInrgACJ68AAiewAAInsgACJ7MAAifYAAIn/AACKCMAAihHAAIoSgACKEwAAihOAAIoUAACKFIAAihUAAIoVQACKFgAAihlAAIocgACKHQAAih2AAIoeAACKHoAAih8AAIofgACKIsAAiiOAAIokQACKJQAAiiXAAIomgACKJ0AAiifAAIo3gACKOAAAijjAAIo5QACKOgAAijpAAIo6gACKOsAAijsAAIo7gACKPAAAijxAAIo8gACKPQAAij1AAIpOAACKVwAAimAAAIpowACKcoAAinqAAIqEQACKjgAAipYAAIqfAACKqAAAiqiAAIqpQACKqcAAiqpAAIqqwACKq4AAiqxAAIqswACKrUAAiq4AAIqugACKrwAAiq/AAIqwgACKsMAAirMAAIq2QACKtwAAireAAIq4QACKuQAAirmAAIrCwACKy8AAitWAAIregACK30AAit/AAIrgQACK4MAAiuFAAIrhwACK4gAAiuLAAIrmAACK6sAAiutAAIrrwACK7EAAiuzAAIrtQACK7cAAiu5AAIruwACK70AAivQAAIr0wACK9YAAivZAAIr3AACK98AAiviAAIr5QACK+gAAivrAAIr7QACLCwAAiwuAAIsMQACLDMAAiw2AAIsNwACLDgAAiw5AAIsOgACLDwAAiw+AAIsPwACLEAAAixCAAIsQwACLEwAAixNAAIsTwACLI4AAiyQAAIskgACLJQAAiyXAAIsmAACLJkAAiyaAAIsmwACLJ0AAiyfAAIsoAACLKEAAiyjAAIspAACLOMAAizlAAIs6AACLOoAAiztAAIs7gACLO8AAizwAAIs8QACLPMAAiz1AAIs9gACLPcAAiz5AAIs+gACLQMAAi0EAAItBgACLUUAAi1HAAItSQACLUsAAi1OAAItTwACLVAAAi1RAAItUgACLVQAAi1WAAItVwACLVgAAi1aAAItWwACLZoAAi2cAAItnwACLaEAAi2kAAItpQACLaYAAi2nAAItqAACLaoAAi2sAAItrQACLa4AAi2wAAItsQACLboAAi27AAItvQACLfwAAi3+AAIuAAACLgIAAi4FAAIuBgACLgcAAi4IAAIuCQACLgsAAi4NAAIuDgACLg8AAi4RAAIuEgACLlEAAi5TAAIuVgACLlgAAi5bAAIuXAACLl0AAi5eAAIuXwACLmEAAi5jAAIuZAACLmUAAi5nAAIuaAACLnUAAi52AAIudwACLnkAAi64AAIuugACLrwAAi6+AAIuwQACLsIAAi7DAAIuxAACLsUAAi7HAAIuyQACLsoAAi7LAAIuzQACLs4AAi8NAAIvDwACLxIAAi8UAAIvFwACLxgAAi8ZAAIvGgACLxsAAi8dAAIvHwACLyAAAi8hAAIvIwACLyQAAi86AAIvRwACL04AAi9RAAIvVAACL1cAAi9eAAIvYQACL2QAAi9nAAIvaQACL3MAAi++AAIv4QACMAEAAjAhAAIwIwACMCUAAjAnAAIwKQACMCwAAjAtAAIwLgACMDEAAjAyAAIwNAACMDUAAjA3AAIwOgACMDsAAjA8AAIwPwACMEAAAjBJAAIwVgACMFsAAjBdAAIwXwACMGQAAjBnAAIwagACMGwAAjCRAAIwtQACMNwAAjEAAAIxAwACMQUAAjEHAAIxCQACMQsAAjENAAIxDgACMREAAjEeAAIxLwACMTEAAjEzAAIxNQACMTcAAjE5AAIxOwACMT0AAjE/AAIxUAACMVMAAjFWAAIxWQACMVwAAjFfAAIxYgACMWUAAjFoAAIxagACMakAAjGrAAIxrQACMa8AAjGyAAIxswACMbQAAjG1AAIxtgACMbgAAjG6AAIxuwACMbwAAjG+AAIxvwACMf4AAjIAAAIyAgACMgQAAjIHAAIyCAACMgkAAjIKAAIyCwACMg0AAjIPAAIyEAACMhEAAjITAAIyFAACMlMAAjJVAAIyWAACMloAAjJdAAIyXgACMl8AAjJgAAIyYQACMmMAAjJlAAIyZgACMmcAAjJpAAIyagACMncAAjJ4AAIyeQACMnsAAjK6AAIyvAACMr4AAjLAAAIywwACMsQAAjLFAAIyxgACMscAAjLJAAIyywACMswAAjLNAAIyzwACMtAAAjMPAAIzEQACMxMAAjMVAAIzGAACMxkAAjMaAAIzGwACMxwAAjMeAAIzIAACMyEAAjMiAAIzJAACMyUAAjNkAAIzZgACM2gAAjNqAAIzbQACM24AAjNvAAIzcAACM3EAAjNzAAIzdQACM3YAAjN3AAIzeQACM3oAAjO5AAIzuwACM70AAjO/AAIzwgACM8MAAjPEAAIzxQACM8YAAjPIAAIzygACM8sAAjPMAAIzzgACM88AAjQOAAI0EAACNBIAAjQUAAI0FwACNBgAAjQZAAI0GgACNBsAAjQdAAI0HwACNCAAAjQhAAI0IwACNCQAAjRJAAI0bQACNJQAAjS4AAI0uwACNL0AAjS/AAI0wQACNMMAAjTFAAI0xgACNMkAAjTWAAI05QACNOcAAjTpAAI06wACNO0AAjTvAAI08QACNPMAAjUCAAI1BQACNQgAAjULAAI1DgACNREAAjUUAAI1FwACNRkAAjVYAAI1WgACNVwAAjVeAAI1YQACNWIAAjVjAAI1ZAACNWUAAjVnAAI1aQACNWoAAjVrAAI1bQACNW4AAjWtAAI1rwACNbEAAjWzAAI1tgACNbcAAjW4AAI1uQACNboAAjW8AAI1vgACNb8AAjXAAAI1wgACNcMAAjYCAAI2BAACNgYAAjYIAAI2CwACNgwAAjY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lAAJGpwACRqgAAkapAAJGqwACRqwAAkbrAAJG7QACRu8AAkbxAAJG9AACRvUAAkb2AAJG9wACRvgAAkb6AAJG/AACRv0AAkb+AAJHAAACRwEAAkdAAAJHQgACR0QAAkdGAAJHSQACR0oAAkdLAAJHTAACR00AAkdPAAJHUQACR1IAAkdTAAJHVQACR1YAAkdfAAJHYAACR2IAAkehAAJHowACR6UAAkenAAJHqgACR6sAAkesAAJHrQACR64AAkewAAJHsgACR7MAAke0AAJHtgACR7cAAkf2AAJH+AACR/oAAkf8AAJH/wACSAAAAkgBAAJIAgACSAMAAkgFAAJIBwACSAgAAkgJAAJICwACSAwAAkhLAAJITQACSE8AAkhRAAJIVAACSFUAAkhWAAJIVwACSFgAAkhaAAJIXAACSF0AAkheAAJIYAACSGEAAkigAAJIogACSKQAAkimAAJIqQACSKoAAkirAAJIrAACSK0AAkivAAJIsQACSLIAAkizAAJItQACSLYAAkj1AAJI9wACSPkAAkj7AAJI/gACSP8AAkkAAAJJAQACSQIAAkkEAAJJBgACSQcAAkkIAAJJCgACSQsAAklWAAJJeQACSZkAAkm5AAJJuwACSb0AAkm/AAJJwQACScQAAknFAAJJxgACSckAAknKAAJJzAACSc0AAknPAAJJ0gACSdMAAknUAAJJ1wACSdgAAkndAAJJ6gACSe8AAknxAAJJ8wACSfgAAkn7AAJJ/gACSgAAAkolAAJKSQACSnAAAkqUAAJKlwACSpkAAkqbAAJKnQACSp8AAkqhAAJKogACSqUAAkqyAAJKwwACSsUAAkrHAAJKyQACSssAAkrNAAJKzwACStEAAkrTAAJK5AACSucAAkrqAAJK7QACSvAAAkrzAAJK9gACSvkAAkr8AAJK/gACSz0AAks/AAJLQQACS0MAAktGAAJLRwACS0gAAktJAAJLSgACS0wAAktOAAJLTwACS1AAAktSAAJLUwACS5IAAkuUAAJLlgACS5gAAkubAAJLnAACS50AAkueAAJLnwACS6EAAkujAAJLpAACS6UAAkunAAJLqAACS+cAAkvpAAJL7AACS+4AAkvxAAJL8gACS/MAAkv0AAJL9QACS/cAAkv5AAJL+gACS/sAAkv9AAJL/gACTAsAAkwMAAJMDQACTA8AAkx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JAAJXSwACV0wAAldNAAJXTwACV1AAAlePAAJXkQACV5MAAleVAAJXmAACV5kAAleaAAJXmwACV5wAAleeAAJXoAACV6EAAleiAAJXpAACV6UAAlfkAAJX5gACV+kAAlfrAAJX7gACV+8AAlfwAAJX8QACV/IAAlf0AAJX9gACV/cAAlf4AAJX+gACV/sAAlg+AAJYYgACWIYAAlipAAJY0AACWPAAAlkXAAJZPgACWV4AAlmCAAJZpgACWagAAlmrAAJZrQACWa8AAlmxAAJZtAACWbcAAlm5AAJZuwACWb4AAlnAAAJZwgACWcUAAlnIAAJZyQACWc4AAlnbAAJZ3gACWeAAAlnjAAJZ5gACWegAAloNAAJaMQACWlgAAlp8AAJafwACWoEAAlqDAAJahQACWocAAlqJAAJaigACWo0AAlqaAAJarQACWq8AAlqxAAJaswACWrUAAlq3AAJauQACWrsAAlq9AAJavwACWtIAAlrVAAJa2AACWtsAAlreAAJa4QACWuQAAlrnAAJa6gACWu0AAlrvAAJbLgACWzAAAlszAAJbNQACWzgAAls5AAJbOgACWzsAAls8AAJbPgACW0AAAltBAAJbQgACW0QAAltFAAJbTgACW08AAltRAAJbkAACW5IAAluUAAJblgACW5kAAluaAAJbmwACW5wAAludAAJbnwACW6EAAluiAAJbowACW6UAAlumAAJb5QACW+cAAlvqAAJb7AACW+8AAlvwAAJb8QACW/IAAlvzAAJb9QACW/cAAlv4AAJb+QACW/sAAlv8AAJcBQACXAYAAlwIAAJcRwACXEkAAlxLAAJcTQACXFAAAlxRAAJcUgACXFMAAlxUAAJcVgACXFgAAlxZAAJcWgACXFwAAlxdAAJcnAACXJ4AAlyhAAJcowACXKYAAlynAAJcqAACXKkAAlyqAAJcrAACXK4AAlyvAAJcsAACXLIAAlyzAAJcvAACXL0AAly/AAJc/gACXQAAAl0CAAJdBAACXQcAAl0IAAJdCQACXQoAAl0LAAJdDQACXQ8AAl0QAAJdEQACXRMAAl0UAAJdUwACXVUAAl1YAAJdWgACXV0AAl1eAAJdXwACXWAAAl1hAAJdYwACXWUAAl1mAAJdZwACXWkAAl1qAAJddwACXXgAAl15AAJdewACXboAAl28AAJdvgACXcAAAl3DAAJdxAACXcUAAl3GAAJdxwACXckAAl3LAAJdzAACXc0AAl3PAAJd0AACXg8AAl4RAAJeFAACXhYAAl4ZAAJeGgACXhsAAl4cAAJeHQACXh8AAl4hAAJeIgACXiMAAl4lAAJeJgACXkIAAl5PAAJeWAACXloAAl5cAAJeXwACXmIAAl5rAAJebgACXnEAAl50AAJedwACXnkAAl6NAAJelAACXt8AAl8CAAJfIgACX0IAAl9EAAJfRgACX0gAAl9KAAJfTQACX04AAl9PAAJfUgACX1MAAl9VAAJfVgACX1gAAl9aAAJfWwACX1wAAl9fAAJfYAACX2UAAl9yAAJfdwACX3kAAl97AAJfgAACX4MAAl+GAAJfiAACX60AAl/RAAJf+AACYBwAAmAfAAJgIQACYCMAAmAlAAJgJwACYCkAAmAqAAJgLQACYDoAAmBLAAJgTQACYE8AAmBRAAJgUwACYFUAAmBXAAJgWQACYFsAAmBsAAJgbwACYHIAAmB1AAJgeAACYHsAAmB+AAJggQACYIQAAmCGAAJgxQACYMcAAmDJAAJgywACYM4AAmDPAAJg0AACYNEAAmDSAAJg1AACYNYAAmDXAAJg2AACYNoAAmDbAAJhGgACYRwAAmEeAAJhIAACYSMAAmEkAAJhJQACYSYAAmEnAAJhKQACYSsAAmEsAAJhLQACYS8AAmEwAAJhbwACYXEAAmF0AAJhdgACYXkAAmF6AAJhewACYXwAAmF9AAJhfwACYYEAAmGCAAJhgwACYYUAAmGGAAJhkwACYZQAAmGVAAJhlwACYdYAAmHYAAJh2gACYdwAAmHfAAJh4AACYeEAAmHiAAJh4wACYeUAAmHnAAJh6AACYekAAmHrAAJh7AACYisAAmItAAJiLwACYjEAAmI0AAJiNQACYjYAAmI3AAJiOAACYjoAAmI8AAJiPQACYj4AAmJAAAJiQQACYoAAAmKCAAJihAACYoYAAmKJAAJiigACYosAAmKMAAJijQACYo8AAmKRAAJikgACYpMAAmKVAAJilgACYtUAAmLXAAJi2QACYtsAAmLeAAJi3wACYuAAAmLhAAJi4gACYuQAAmLmAAJi5wACYugAAmLqAAJi6wACYyoAAmMsAAJjLgACYzAAAmMzAAJjNAACYzUAAmM2AAJjNwACYzkAAmM7AAJjPAACYz0AAmM/AAJjQAACY2UAAmOJAAJjsAACY9QAAmPXAAJj2QACY9sAAmPdAAJj3wACY+EAAmPiAAJj5QACY/IAAmQBAAJkAwACZAUAAmQHAAJkCQACZAsAAmQNAAJkDwACZB4AAmQhAAJkJAACZCcAAmQqAAJkLQACZDAAAmQzAAJkNQACZHQAAmR2AAJkeAACZHoAAmR9AAJkfgACZH8AAmSAAAJkgQACZIMAAmSFAAJkhgACZIcAAmSJAAJkigACZMkAAmTLAAJkzQACZM8AAmTSAAJk0wACZNQAAmTVAAJk1gACZNgAAmTaAAJk2wACZNwAAmTeAAJk3wACZR4AAmUgAAJlIgACZSQAAmUnAAJlKAACZSkAAmUqAAJlKwACZS0AAmUvAAJlMAACZTEAAmUzAAJlNAACZXMAAmV1AAJldwACZXkAAmV8AAJlfQACZX4AAmV/AAJlgAACZYIAAmWEAAJlhQACZYYAAmWIAAJliQACZcgAAmXKAAJlzAACZc4AAmXRAAJl0gACZdMAAmXUAAJl1QACZdcAAmXZAAJl2gACZdsAAmXdAAJl3gACZh0AAmYfAAJmIQACZiMAAmYmAAJmJwACZigAAmYpAAJmKgACZiwAAmYuAAJmLwACZjAAAmYyAAJmMwACZnIAAmZ0AAJmdgACZngAAmZ7AAJmfAACZn0AAmZ+AAJmfwACZoEAAmaDAAJmhAACZoUAAmaHAAJmiAACZtMAAmb2AAJnFgACZzYAAmc4AAJnOgACZzwAAmc+AAJnQQACZ0IAAmdDAAJnRgACZ0cAAmdJAAJnSgACZ0wAAmdOAAJnTwACZ1AAAmdTAAJnVAACZ1kAAmdmAAJnawACZ20AAmdvAAJndAACZ3cAAmd6AAJnfAACZ6EAAmfFAAJn7AACaBAAAmgTAAJoFQACaBcAAmgZAAJoGwACaB0AAmgeAAJoIQACaC4AAmg/AAJoQQACaEMAAmhFAAJoRwACaEkAAmhLAAJoTQACaE8AAmhgAAJoYwACaGYAAmhpAAJobAACaG8AAmhyAAJodQACaHgAAmh6AAJouQACaLsAAmi9AAJovwACaMIAAmjDAAJoxAACaMUAAmjGAAJoyAACaMoAAmjLAAJozAACaM4AAmjPAAJpDgACaRAAAmkSAAJpFAACaRcAAmkYAAJpGQACaRoAAmkbAAJpHQACaR8AAmkgAAJpIQACaSMAAmkkAAJpYwACaWUAAmloAAJpagACaW0AAmluAAJpbwACaXAAAmlxAAJpcwACaXUAAml2AAJpdwACaXkAAml6AAJphwACaYgAAmmJAAJpiwACacoAAmnMAAJpzgACadAAAmnTAAJp1AACadUAAmnWAAJp1wACadkAAmnbAAJp3AACad0AAmnfAAJp4AACah8AAmohAAJqIwACaiUAAmooAAJqKQACaioAAmorAAJqLAACai4AAmowAAJqMQACajIAAmo0AAJqNQACanQAAmp2AAJqeAACanoAAmp9AAJqfgACan8AAmqAAAJqgQACaoMAAmqFAAJqhgACaocAAmqJAAJqigACaskAAmrLAAJqzQACas8AAmrSAAJq0wACatQAAmrVAAJq1gACatgAAmraAAJq2wACatwAAmreAAJq3wACax4AAmsgAAJrIgACayQAAmsnAAJrKAACaykAAmsqAAJrKwACay0AAmsvAAJrMAACazEAAmszAAJrNAACa1kAAmt9AAJrpAACa8gAAmvLAAJrzQACa88AAmvRAAJr0wACa9UAAmvWAAJr2QACa+YAAmvzAAJr9QACa/cAAmv5AAJr+wACa/0AAmv/AAJsDAACbA8AAmwSAAJsFQACbBgAAmwbAAJsHgACbCAAAmxfAAJsYQACbGQAAmxmAAJsaQACbGoAAmxrAAJsbAACbG0AAmxvAAJscQACbHIAAmxzAAJsdQACbHYAAmy1AAJstwACbLkAAmy7AAJsvgACbL8AAmzAAAJswQACbMIAAmzEAAJsxgACbMcAAmzIAAJsygACbMsAAm0KAAJtDAACbQ4AAm0QAAJtEwACbRQAAm0VAAJtFgACbRcAAm0ZAAJtGwACbRwAAm0dAAJtHwACbSAAAm1fAAJtYQACbWMAAm1lAAJtaAACbWkAAm1qAAJtawACbWwAAm1uAAJtcAACbXEAAm1yAAJtdAACbXUAAm20AAJttgACbbgAAm26AAJtvQACbb4AAm2/AAJtwAACbcEAAm3DAAJtxQACbcYAAm3HAAJtyQACbcoAAm4JAAJuCwACbg0AAm4PAAJuEgACbhMAAm4UAAJuFQACbhYAAm4YAAJuGgACbhsAAm4cAAJuHgACbh8AAm5qAAJujQACbq0AAm7NAAJuzwACbtEAAm7TAAJu1QACbtgAAm7ZAAJu2gACbt0AAm7eAAJu4AACbuEAAm7jAAJu5gACbucAAm7oAAJu6wACbuwAAm7xAAJu/gACbwMAAm8FAAJvBwACbwwAAm8PAAJvEgACbxQAAm85AAJvXQACb4QAAm+oAAJvqwACb60AAm+vAAJvsQACb7MAAm+1AAJvtgACb7kAAm/GAAJv1wACb9kAAm/bAAJv3QACb98AAm/hAAJv4wACb+UAAm/nAAJv+AACb/sAAm/+AAJwAQACcAQAAnAHAAJwCgACcA0AAnAQAAJwEgACcFEAAnBTAAJwVQACcFcAAnBaAAJwWwACcFwAAnBdAAJwXgACcGAAAnBiAAJwYwACcGQAAnBmAAJwZwACcKYAAnCoAAJwqgACcKwAAnCvAAJwsAACcLEAAnCyAAJwswACcLUAAnC3AAJwuAACcLkAAnC7AAJwvAACcPsAAnD9AAJxAAACcQIAAnEFAAJxBgACcQcAAnEIAAJxCQACcQsAAnENAAJxDgACcQ8AAnERAAJxEgACcR8AAnEgAAJxIQACcSMAAnFiAAJxZAACcWYAAnFoAAJxawACcWwAAnFtAAJxbgACcW8AAnFxAAJxcwACcXQAAnF1AAJxdwACcXgAAnG3AAJxuQACcbsAAnG9AAJxwAACccEAAnHCAAJxwwACccQAAnHGAAJxyAACcckAAnHKAAJxzAACcc0AAnIMAAJyDgACchAAAnISAAJyFQACchYAAnIXAAJyGAACchkAAnIbAAJyHQACch4AAnIfAAJyIQACciIAAnJhAAJyYwACcmUAAnJnAAJyagACcmsAAnJsAAJybQACcm4AAnJwAAJycgACcnMAAnJ0AAJydgACcncAAnK2AAJyuAACcroAAnK8AAJyvwACcsAAAnLBAAJywgACcsMAAnLFAAJyxwACcsgAAnLJAAJyywACcswAAnLxAAJzFQACczwAAnNgAAJzYwACc2UAAnNnAAJzaQACc2sAAnNtAAJzbgACc3EAAnN+AAJzjQACc48AAnORAAJzkwACc5UAAnOXAAJzmQACc5sAAnOqAAJzrQACc7AAAnOzAAJztgACc7kAAnO8AAJzvwACc8EAAnQAAAJ0AgACdAQAAnQGAAJ0CQACdAoAAnQLAAJ0DAACdA0AAnQPAAJ0EQACdBIAAnQTAAJ0FQACdBYAAnRVAAJ0VwACdFkAAnRbAAJ0XgACdF8AAnRgAAJ0YQACdGIAAnRkAAJ0ZgACdGcAAnRoAAJ0agACdGsAAnSqAAJ0rAACdK4AAnSwAAJ0swACdLQAAnS1AAJ0tgACdLcAAnS5AAJ0uwACdLwAAnS9AAJ0vwACdMAAAnT/AAJ1AQACdQMAAnUFAAJ1CAACdQkAAnUKAAJ1CwACdQwAAnUOAAJ1EAACdREAAnUSAAJ1FAACdRUAAnVUAAJ1VgACdVgAAnVaAAJ1XQACdV4AAnVfAAJ1YAACdWEAAnVjAAJ1ZQACdWYAAnVnAAJ1aQACdWoAAnWpAAJ1qwACda0AAnWvAAJ1sgACdbMAAnW0AAJ1tQACdbYAAnW4AAJ1ugACdbsAAnW8AAJ1vgACdb8AAnX+AAJ2AAACdgIAAnYEAAJ2BwACdggAAnYJAAJ2CgACdgsAAnYNAAJ2DwACdhAAAnYRAAJ2EwACdhQAAnZfAAJ2ggACdqIAAnbCAAJ2xAACdsYAAnbIAAJ2ygACds0AAnbOAAJ2zwACdtIAAnbTAAJ21QACdtYAAnbYAAJ22wACdtwAAnbdAAJ24AACduEAAnbqAAJ29wACdvwAAnb+AAJ3AAACdwUAAncIAAJ3CwACdw0AAncyAAJ3VgACd30AAnehAAJ3pAACd6YAAneoAAJ3qgACd6wAAneuAAJ3rwACd7IAAne/AAJ30AACd9IAAnfUAAJ31gACd9gAAnfaAAJ33AACd94AAnfgAAJ38QACd/QAAnf3AAJ3+gACd/0AAngAAAJ4AwACeAYAAngJAAJ4CwACeEoAAnhMAAJ4TgACeFAAAnhTAAJ4VAACeFUAAnhWAAJ4VwACeFkAAnhbAAJ4XAACeF0AAnhfAAJ4YAACeJ8AAnihAAJ4owACeKUAAnioAAJ4qQACeKoAAnirAAJ4rAACeK4AAniwAAJ4sQACeLIAAni0AAJ4tQACePQAAnj2AAJ4+QACePsAAnj+AAJ4/wACeQAAAnkBAAJ5AgACeQQAAnkGAAJ5BwACeQgAAnkKAAJ5CwACeRgAAnkZAAJ5GgACeRwAAnlbAAJ5XQACeV8AAnlhAAJ5ZAACeWUAAnlmAAJ5ZwACeWgAAnlqAAJ5bAACeW0AAnluAAJ5cAACeXEAAnmwAAJ5sgACebQAAnm2AAJ5uQACeboAAnm7AAJ5vAACeb0AAnm/AAJ5wQACecIAAnnDAAJ5xQACecYAAnoFAAJ6BwACegkAAnoLAAJ6DgACeg8AAnoQAAJ6EQACehIAAnoUAAJ6FgACehcAAnoYAAJ6GgACehsAAnpaAAJ6XAACel4AAnpgAAJ6YwACemQAAnplAAJ6ZgACemcAAnppAAJ6awACemwAAnptAAJ6bwACenAAAnqvAAJ6sQACerMAAnq1AAJ6uAACerkAAnq6AAJ6uwACerwAAnq+AAJ6wAACesEAAnrCAAJ6xAACesUAAnrqAAJ7DgACezUAAntZAAJ7XAACe14AAntgAAJ7YgACe2QAAntmAAJ7ZwACe2oAAnt3AAJ7hgACe4gAAnuKAAJ7jAACe44AAnuQAAJ7kgACe5QAAnujAAJ7pgACe6kAAnusAAJ7rwACe7IAAnu1AAJ7uAACe7oAAnv5AAJ7+wACe/0AAnv/AAJ8AgACfAMAAnwEAAJ8BQACfAYAAnwIAAJ8CgACfAsAAnwMAAJ8DgACfA8AAnxOAAJ8UAACfFIAAnxUAAJ8VwACfFgAAnxZAAJ8WgACfFsAAnxdAAJ8XwACfGAAAnxhAAJ8YwACfGQAAnyjAAJ8pQACfKcAAnypAAJ8rAACfK0AAnyuAAJ8rwACfLAAAnyyAAJ8tAACfLUAAny2AAJ8uAACfLkAAnz4AAJ8+gACfP0AAnz/AAJ9AgACfQMAAn0EAAJ9BQACfQYAAn0IAAJ9CgACfQsAAn0MAAJ9DgACfQ8AAn1OAAJ9UAACfVIAAn1UAAJ9VwACfVgAAn1ZAAJ9WgACfVsAAn1dAAJ9XwACfWAAAn1hAAJ9YwACfWQAAn2jAAJ9pQACfacAAn2pAAJ9rAACfa0AAn2uAAJ9rwACfbAAAn2yAAJ9tAACfbUAAn22AAJ9uAACfbkAAn34AAJ9+gACff0AAn3/AAJ+AgACfgMAAn4EAAJ+BQACfgYAAn4IAAJ+CgACfgsAAn4MAAJ+DgACfg8AAn4YAAJ+GQACfhsAAn5aAAJ+XAACfl4AAn5gAAJ+YwACfmQAAn5lAAJ+ZgACfmcAAn5pAAJ+awACfmwAAn5tAAJ+bwACfnAAAn6vAAJ+sQACfrMAAn61AAJ+uAACfrkAAn66AAJ+uwACfrwAAn6+AAJ+wAACfsEAAn7CAAJ+xAACfsUAAn8EAAJ/BgACfwkAAn8LAAJ/DgACfw8AAn8QAAJ/EQACfxIAAn8UAAJ/FgACfxcAAn8YAAJ/GgACfxsAAn8kAAJ/JQACfycAAn9mAAJ/aAACf2oAAn9sAAJ/bwACf3AAAn9xAAJ/cgACf3MAAn91AAJ/dwACf3gAAn95AAJ/ewACf3wAAn+7AAJ/vQACf78AAn/BAAJ/xAACf8UAAn/GAAJ/xwACf8gAAn/KAAJ/zAACf80AAn/OAAJ/0AACf9EAAoAQAAKAEgACgBUAAoAXAAKAGgACgBsAAoAcAAKAHQACgB4AAoAgAAKAIgACgCMAAoAkAAKAJgACgCcAAoByAAKAlQACgLUAAoDVAAKA1wACgNkAAoDbAAKA3QACgN8AAoDgAAKA4QACgOQAAoDlAAKA5wACgOgAAoDqAAKA7AACgO0AAoDuAAKA8QACgPIAAoD7AAKBCAACgQ0AAoEPAAKBEQACgRYAAoEZAAKBHAACgR4AAoFDAAKBZwACgY4AAoGyAAKBtQACgbcAAoG5AAKBuwACgb0AAoG/AAKBwAACgcMAAoHQAAKB4QACgeMAAoHlAAKB5wACgekAAoHrAAKB7QACge8AAoHxAAKCAgACggUAAoIIAAKCCwACgg4AAoIRAAKCFAACghcAAoIaAAKCHAACglsAAoJdAAKCXwACgmEAAoJkAAKCZQACgmYAAoJnAAKCaAACgmoAAoJsAAKCbQACgm4AAoJwAAKCcQACgrAAAoKyAAKCtAACgrYAAoK5AAKCugACgrsAAoK8AAKCvQACgr8AAoLBAAKCwgACgsMAAoLFAAKCxgACgwUAAoMHAAKDCgACgwwAAoMPAAKDEAACgxEAAoMSAAKDEwACgxUAAoMXAAKDGAACgxkAAoMbAAKDHAACgykAAoMqAAKDKwACgy0AAoNsAAKDbgACg3AAAoNyAAKDdQACg3YAAoN3AAKDeAACg3kAAoN7AAKDfQACg34AAoN/AAKDgQACg4IAAoPBAAKDwwACg8UAAoPHAAKDygACg8sAAoPMAAKDzQACg84AAoPQAAKD0gACg9MAAoPUAAKD1gACg9cAAoQWAAKEGAAChBoAAoQcAAKEHwAChCAAAoQhAAKEIgAChCMAAoQlAAKEJwAChCgAAoQpAAKEKwAChCwAAoRrAAKEbQAChG8AAoRxAAKEdAAChHUAAoR2AAKEdwAChHgAAoR6AAKEfAAChH0AAoR+AAKEgAAChIEAAoTAAAKEwgAChMQAAoTGAAKEyQAChMoAAoTLAAKEzAAChM0AAoTPAAKE0QAChNIAAoTTAAKE1QAChNYAAoT7AAKFHwAChUYAAoVqAAKFbQAChW8AAoVxAAKFcwAChXUAAoV3AAKFeAAChXsAAoWIAAKFlwAChZkAAoWbAAKFnQAChZ8AAoWhAAKFowAChaUAAoW0AAKFtwAChboAAoW9AAKFwAAChcMAAoXGAAKFyQAChcsAAoYKAAKGDAAChg8AAoYRAAKGFAAChhUAAoYWAAKGFwAChhgAAoYaAAKGHAAChh0AAoYeAAKGIAAChiEAAoZgAAKGYgAChmQAAoZmAAKGaQAChmoAAoZrAAKGbAAChm0AAoZvAAKGcQAChnIAAoZzAAKGdQAChnYAAoa1AAKGtwAChrkAAoa7AAKGvgAChr8AAobAAAKGwQAChsIAAobEAAKGxgAChscAAobIAAKGygAChssAAocKAAKHDAAChw8AAocRAAKHFAAChxUAAocWAAKHFwAChxgAAocaAAKHHAAChx0AAoceAAKHIAAChyEAAodgAAKHYgACh2QAAodmAAKHaQACh2oAAodrAAKHbAACh20AAodvAAKHcQACh3IAAodzAAKHdQACh3YAAoe1AAKHtwACh7kAAoe7AAKHvgACh78AAofAAAKHwQACh8IAAofEAAKHxgACh8cAAofIAAKHygACh8sAAogKAAKIDAACiA4AAogQAAKIEwACiBQAAogVAAKIFgACiBcAAogZAAKIGwACiBwAAogdAAKIHwACiCAAAohrAAKIjgACiK4AAojOAAKI0AACiNIAAojUAAKI1gACiNgAAojZAAKI2gACiN0AAojeAAKI4AACiOEAAojjAAKI5QACiOYAAojnAAKI6gACiOsAAojwAAKI/QACiQIAAokEAAKJBgACiQsAAokOAAKJEQACiRMAAok4AAKJXAACiYMAAomnAAKJqgACiawAAomuAAKJsAACibIAAom0AAKJtQACibgAAonFAAKJ1gACidgAAonaAAKJ3AACid4AAongAAKJ4gACieQAAonmAAKJ9wACifoAAon9AAKKAAACigMAAooGAAKKCQACigwAAooPAAKKEQACilAAAopSAAKKVAACilYAAopZAAKKWgACilsAAopcAAKKXQACil8AAophAAKKYgACimMAAoplAAKKZgACiqUAAoqnAAKKqQACiqsAAoquAAKKrwACirAAAoqxAAKKsgACirQAAoq2AAKKtwACirgAAoq6AAKKuwACivoAAor8AAKK/wACiwEAAosEAAKLBQACiwYAAosHAAKLCAACiwoAAosMAAKLDQACiw4AAosQAAKLEQACix4AAosfAAKLIAACiyIAAothAAKLYwACi2UAAotnAAKLagACi2sAAotsAAKLbQACi24AAotwAAKLcgACi3MAAot0AAKLdgACi3cAAou2AAKLuAACi7oAAou8AAKLvwACi8AAAovBAAKLwgACi8MAAovFAAKLxwACi8gAAovJAAKLywACi8wAAowLAAKMDQACjA8AAowRAAKMFAACjBUAAowWAAKMFwACjBgAAowaAAKMHAACjB0AAoweAAKMIAACjCEAAoxgAAKMYgACjGQAAoxmAAKMaQACjGoAAoxrAAKMbAACjG0AAoxvAAKMcQACjHIAAoxzAAKMdQACjHYAAoy1AAKMtwACjLkAAoy7AAKMvgACjL8AAozAAAKMwQACjMIAAozEAAKMxgACjMcAAozIAAKMygACjMsAAozwAAKNFAACjTsAAo1fAAKNYgACjWQAAo1mAAKNaAACjWoAAo1sAAKNbQACjXAAAo19AAKNjAACjY4AAo2QAAKNkgACjZQAAo2WAAKNmAACjZoAAo2pAAKNrAACja8AAo2yAAKNtQACjbgAAo27AAKNvgACjcAAAo3/AAKOAQACjgMAAo4FAAKOCAACjgkAAo4KAAKOCwACjgwAAo4OAAKOEAACjhEAAo4SAAKOFAACjhUAAo5UAAKOVgACjlgAAo5aAAKOXQACjl4AAo5fAAKOYAACjmEAAo5jAAKOZQACjmYAAo5nAAKOaQACjmoAAo6pAAKOqwACjq0AAo6vAAKOsgACjrMAAo60AAKOtQACjrYAAo64AAKOugACjrsAAo68AAKOvgACjr8AAo7+AAKPAAACjwMAAo8FAAKPCAACjwkAAo8KAAKPCwACjwwAAo8OAAKPEAACjxEAAo8SAAKPFAACjxUAAo9UAAKPVgACj1gAAo9aAAKPXQACj14AAo9fAAKPYAACj2EAAo9jAAKPZQACj2YAAo9nAAKPaQACj2oAAo+pAAKPqwACj60AAo+vAAKPsgACj7MAAo+0AAKPtQACj7YAAo+4AAKPugACj7sAAo+8AAKPvgACj78AAo/+AAKQAAACkAIAApAEAAKQBwACkAgAApAJAAKQCgACkAsAApANAAKQDwACkBAAApARAAKQEwACkBQAApBfAAKQggACkKIAApDCAAKQxAACkMYAApDIAAKQygACkMwAApDNAAKQzgACkNEAApDSAAKQ1AACkNUAApDXAAKQ2QACkNoAApDbAAKQ3gACkN8AApDkAAKQ8QACkPYAApD4AAKQ+gACkP8AApECAAKRBQACkQcAApEsAAKRUAACkXcAApGbAAKRngACkaAAApGiAAKRpAACkaYAApGoAAKRqQACkawAApG5AAKRygACkcwAApHOAAKR0AACkdIAApHUAAKR1gACkdgAApHaAAKR6wACke4AApHxAAKR9AACkfcAApH6AAKR/QACkgAAApIDAAKSBQACkkQAApJGAAKSSAACkkoAApJNAAKSTgACkk8AApJQAAKSUQACklMAApJVAAKSVgACklcAApJZAAKSWgACkpkAApKbAAKSnQACkp8AApKiAAKSowACkqQAApKlAAKSpgACkqgAApKqAAKSqwACkqwAApKuAAKSrwACku4AApLwAAKS8wACkvUAApL4AAKS+QACkvoAApL7AAKS/AACkv4AApMAAAKTAQACkwIAApMEAAKTBQACkxIAApMTAAKTFAACkxYAApNVAAKTVwACk1kAApNbAAKTXgACk18AApNgAAKTYQACk2IAApNkAAKTZgACk2cAApNoAAKTagACk2sAApOqAAKTrAACk64AApOwAAKTswACk7QAApO1AAKTtgACk7cAApO5AAKTuwACk7wAApO9AAKTvwACk8AAApP/AAKUAQAClAMAApQFAAKUCAAClAkAApQKAAKUCwAClAwAApQOAAKUEAAClBEAApQSAAKUFAAClBUAApRUAAKUVgAClFgAApRaAAKUXQAClF4AApRfAAKUYAAClGEAApRjAAKUZQAClGYAApRnAAKUaQAClGoAApSpAAKUqwAClK0AApSvAAKUsgAClLMAApS0AAKUtQAClLYAApS4AAKUugAClLsAApS8AAKUvgAClL8AApTkAAKVCAAClS8AApVTAAKVVgAClVgAApVaAAKVXAAClV4AApVgAAKVYQAClWQAApVxAAKVfgAClYAAApWCAAKVhAAClYYAApWIAAKVigAClZcAApWaAAKVnQAClaAAApWjAAKVpgAClakAApWrAAKV6gAClewAApXvAAKV8QAClfQAApX1AAKV9gAClfcAApX4AAKV+gAClfwAApX9AAKV/gAClgAAApYBAAKWQAAClkIAApZEAAKWRgAClkkAApZKAAKWSwAClkwAApZNAAKWTwACllEAApZSAAKWUwACllUAApZWAAKWlQAClpcAApaZAAKWmwAClp4AApafAAKWoAAClqEAApaiAAKWpAAClqYAApanAAKWqAAClqoAAparAAKW6gACluwAApbvAAKW8QAClvQAApb1AAKW9gAClvcAApb4AAKW+gAClvwAApb9AAKW/gAClwAAApcBAAKXQAACl0IAApdEAAKXRgACl0kAApdKAAKXSwACl0wAApdNAAKXTwACl1EAApdSAAKXUwACl1UAApdWAAKXlQACl5cAApeZAAKXmwACl54AApefAAKXoAACl6EAApeiAAKXpAACl6YAApenAAKXqAACl6oAAperAAKXtAACl7UAApe3AAKX9gACl/gAApf6AAKX/AACl/4AApf/AAKYAAACmAEAApgCAAKYBAACmAYAApgHAAKYCAACmAoAApgLAAKYSgACmEwAAphOAAKYUAACmFIAAphTAAKYVAACmFUAAphWAAKYWAACmFoAAphbAAKYXAACmF4AAphfAAKYngACmKAAApiiAAKYpAACmKYAApinAAKYqAACmKkAApiqAAKYrAACmK4AApivAAKYsAACmLIAApizAAKY/gACmSEAAplBAAKZYQACmWMAApllAAKZZwACmWkAAplrAAKZbAACmW0AAplwAAKZcQACmXMAApl0AAKZdgACmXgAApl5AAKZegACmX0AApl+AAKZgwACmZAAApmVAAKZlwACmZkAApmeAAKZoQACmaQAApmmAAKZywACme8AApoWAAKaOgACmj0AApo/AAKaQQACmkMAAppFAAKaRwACmkgAAppLAAKaWAACmmkAApprAAKabQACmm8AAppxAAKacwACmnUAApp3AAKaeQACmooAApqNAAKakAACmpMAApqWAAKamQACmpwAApqfAAKaogACmqQAAprjAAKa5QACmucAAprpAAKa7AACmu0AApruAAKa7wACmvAAApryAAKa9AACmvUAApr2AAKa+AACmvkAAps4AAKbOgACmzwAAps+AAKbQQACm0IAAptDAAKbRAACm0UAAptHAAKbSQACm0oAAptLAAKbTQACm04AApuNAAKbjwACm5IAApuUAAKblwACm5gAApuZAAKbmgACm5sAApudAAKbnwACm6AAApuhAAKbowACm6QAApuxAAKbsgACm7MAApu1AAKb9AACm/YAApv4AAKb+gACm/0AApv+AAKb/wACnAAAApwBAAKcAwACnAUAApwGAAKcBwACnAkAApwKAAKcSQACnEsAApxNAAKcTwACnFIAApxTAAKcVAACnFUAApxWAAKcWAACnFoAApxbAAKcXAACnF4AApxfAAKcngACnKAAApyiAAKcpAACnKcAApyoAAKcqQACnKoAApyrAAKcrQACnK8AApywAAKcsQACnLMAApy0AAKc8wACnPUAApz3AAKc+QACnPwAApz9AAKc/gACnP8AAp0AAAKdAgACnQQAAp0FAAKdBgACnQgAAp0JAAKdSAACnUoAAp1MAAKdTgACnVEAAp1SAAKdUwACnVQAAp1VAAKdVwACnVkAAp1aAAKdWwACnV0AAp1eAAKdgwACnacAAp3OAAKd8gACnfUAAp33AAKd+QACnfsAAp39AAKd/wACngAAAp4DAAKeEAACnh8AAp4hAAKeIwACniUAAp4nAAKeKQACnisAAp4tAAKePAACnj8AAp5CAAKeRQACnkgAAp5LAAKeTgACnlEAAp5TAAKekgACnpQAAp6WAAKemAACnpsAAp6cAAKenQACnp4AAp6fAAKeoQACnqMAAp6kAAKepQACnqcAAp6oAAKe5wACnukAAp7rAAKe7QACnvAAAp7xAAKe8gACnvMAAp70AAKe9gACnvgAAp75AAKe+gACnvwAAp79AAKfPAACnz4AAp9AAAKfQgACn0UAAp9GAAKfRwACn0gAAp9JAAKfSwACn00AAp9OAAKfTwACn1EAAp9SAAKfkQACn5MAAp+WAAKfmAACn5sAAp+cAAKfnQACn54AAp+fAAKfoQACn6MAAp+kAAKfpQACn6cAAp+oAAKf5wACn+kAAp/rAAKf7QACn/AAAp/xAAKf8gACn/MAAp/0AAKf9gACn/gAAp/5AAKf+gACn/wAAp/9AAKgPAACoD4AAqBBAAKgQwACoEYAAqBHAAKgSAACoEkAAqBKAAKgTAACoE4AAqBPAAKgUAACoFIAAqBTAAKgbwACoK4AAqCwAAKgsgACoLQAAqC3AAKguAACoLkAAqC6AAKguwACoL0AAqC/AAKgwAACoMEAAqDDAAKgxAACoQ8AAqEyAAKhUgACoXIAAqF0AAKhdgACoXgAAqF6AAKhfAACoX0AAqF+AAKhgQACoYIAAqGEAAKhhQACoYcAAqGJAAKhigACoYsAAqGOAAKhjwACoZQAAqGhAAKhpgACoagAAqGqAAKhrwACobIAAqG1AAKhtwACodwAAqIAAAKiJwACoksAAqJOAAKiUAAColIAAqJUAAKiVgAColgAAqJZAAKiXAAComkAAqJ6AAKifAACon4AAqKAAAKiggACooQAAqKGAAKiiAACoooAAqKbAAKingACoqEAAqKkAAKipwACoqoAAqKtAAKisAACorMAAqK1AAKi9AACovYAAqL4AAKi+gACov0AAqL+AAKi/wACowAAAqMBAAKjAwACowUAAqMGAAKjBwACowkAAqMKAAKjSQACo0sAAqNNAAKjTwACo1IAAqNTAAKjVAACo1UAAqNWAAKjWAACo1oAAqNbAAKjXAACo14AAqNfAAKjngACo6AAAqOjAAKjpQACo6gAAqOpAAKjqgACo6sAAqOsAAKjrgACo7AAAqOxAAKjsgACo7QAAqO1AAKjwgACo8MAAqPEAAKjxgACpAUAAqQHAAKkCQACpAsAAqQOAAKkDwACpBAAAqQRAAKkEgACpBQAAqQWAAKkFwACpBgAAqQaAAKkGwACpFoAAqRcAAKkXgACpGAAAqRjAAKkZAACpGUAAqRmAAKkZwACpGkAAqRrAAKkbAACpG0AAqRvAAKkcAACpK8AAqSxAAKkswACpLUAAqS4AAKkuQACpLoAAqS7AAKkvAACpL4AAqTAAAKkwQACpMIAAqTEAAKkxQACpQQAAqUGAAKlCAACpQoAAqUNAAKlDgACpQ8AAqUQAAKlEQACpRMAAqUVAAKlFgACpRcAAqUZAAKlGgACpVkAAqVbAAKlXQACpV8AAqViAAKlYwACpWQAAqVlAAKlZgACpWgAAqVqAAKlawACpWwAAqVuAAKlbwACpZQAAqW4AAKl3wACpgMAAqYGAAKmCAACpgoAAqYMAAKmDgACphAAAqYRAAKmFAACpiEAAqYwAAKmMgACpjQAAqY2AAKmOAACpjoAAqY8AAKmPgACpk0AAqZQAAKmUwACplYAAqZZAAKmXAACpl8AAqZiAAKmZAACpqMAAqalAAKmpwACpqkAAqasAAKmrQACpq4AAqavAAKmsAACprIAAqa0AAKmtQACprYAAqa4AAKmuQACpvgAAqb6AAKm/AACpv4AAqcBAAKnAgACpwMAAqcEAAKnBQACpwcAAqcJAAKnCgACpwsAAqcNAAKnDgACp00AAqdPAAKnUQACp1MAAqdWAAKnVwACp1gAAqdZAAKnWgACp1wAAqdeAAKnXwACp2AAAqdiAAKnYwACp6IAAqekAAKnpgACp6gAAqerAAKnrAACp60AAqeuAAKnrwACp7EAAqezAAKntAACp7UAAqe3AAKnuAACp/cAAqf5AAKn+wACp/0AAqgAAAKoAQACqAIAAqgDAAKoBAACqAYAAqgIAAKoCQACqAoAAqgMAAKoDQACqEwAAqhOAAKoUAACqFIAAqhVAAKoVgACqFcAAqhYAAKoWQACqFsAAqhdAAKoXgACqF8AAqhhAAKoYgACqKEAAqijAAKopQACqKcAAqiqAAKoqwACqKwAAqitAAKorgACqLAAAqiyAAKoswACqLQAAqi2AAKotwACqQIAAqklAAKpRQACqWUAAqlnAAKpaQACqWsAAqltAAKpbwACqXAAAqlxAAKpdAACqXUAAql3AAKpeAACqXoAAql8AAKpfQACqX4AAqmBAAKpggACqYcAAqmUAAKpmQACqZsAAqmdAAKpogACqaUAAqmoAAKpqgACqc8AAqnzAAKqGgACqj4AAqpBAAKqQwACqkUAAqpHAAKqSQACqksAAqpMAAKqTwACqlwAAqptAAKqbwACqnEAAqpzAAKqdQACqncAAqp5AAKqewACqn0AAqqOAAKqkQACqpQAAqqXAAKqmgACqp0AAqqgAAKqowACqqYAAqqoAAKq5wACqukAAqrrAAKq7QACqvAAAqrxAAKq8gACqvMAAqr0AAKq9gACqvgAAqr5AAKq+gACqvwAAqr9AAKrPAACqz4AAqtAAAKrQgACq0UAAqtGAAKrRwACq0gAAqtJAAKrSwACq00AAqtOAAKrTwACq1EAAqtSAAKrkQACq5MAAquWAAKrmAACq5sAAqucAAKrnQACq54AAqufAAKroQACq6MAAqukAAKrpQACq6cAAquoAAKrtQACq7YAAqu3AAKruQACq/gAAqv6AAKr/AACq/4AAqwBAAKsAgACrAMAAqwEAAKsBQACrAcAAqwJAAKsCgACrAsAAqwNAAKsDgACrE0AAqxPAAKsUQACrFMAAqxWAAKsVwACrFgAAqxZAAKsWgACrFwAAqxeAAKsXwACrGAAAqxiAAKsYwACrKIAAqykAAKspgACrKgAAqyrAAKsrAACrK0AAqyuAAKsrwACrLEAAqyzAAKstAACrLUAAqy3AAKsuAACrPcAAqz5AAKs+wACrP0AAq0AAAKtAQACrQIAAq0DAAKtBAACrQYAAq0IAAKtCQACrQoAAq0MAAKtDQACrUwAAq1OAAKtUAACrVIAAq1VAAKtVgACrVcAAq1YAAKtWQACrVsAAq1dAAKtXgACrV8AAq1hAAKtYgACrYcAAq2rAAKt0gACrfYAAq35AAKt+wACrf0AAq3/AAKuAQACrgMAAq4EAAKuBwACrhQAAq4jAAKuJQACricAAq4pAAKuKwACri0AAq4vAAKuMQACrkAAAq5DAAKuRgACrkkAAq5MAAKuTwACrlIAAq5VAAKuVwACrpYAAq6YAAKumgACrpwAAq6fAAKuoAACrqEAAq6iAAKuowACrqUAAq6nAAKuqAACrqkAAq6rAAKurAACrusAAq7tAAKu7wACrvEAAq70AAKu9QACrvYAAq73AAKu+AACrvoAAq78AAKu/QACrv4AAq8AAAKvAQACr0AAAq9CAAKvRAACr0YAAq9JAAKvSgACr0sAAq9MAAKvTQACr08AAq9RAAKvUgACr1MAAq9VAAKvVgACr5UAAq+XAAKvmQACr5sAAq+eAAKvnwACr6AAAq+hAAKvogACr6QAAq+mAAKvpwACr6gAAq+qAAKvqwACr+oAAq/sAAKv7gACr/AAAq/zAAKv9AACr/UAAq/2AAKv9wACr/kAAq/7AAKv/AACr/0AAq//AAKwAAACsD8AArBBAAKwQwACsEUAArBIAAKwSQACsEoAArBLAAKwTAACsE4AArBQAAKwUQACsFIAArBUAAKwVQACsJQAArCWAAKwmAACsJoAArCdAAKwngACsJ8AArCgAAKwoQACsKMAArClAAKwpgACsKcAArCpAAKwqgACsLMAArC0AAKwtgACsPkAArEdAAKxQQACsWQAArGLAAKxqwACsdIAArH5AAKyGQACsj0AArJhAAKyYwACsmYAArJoAAKyagACsmwAArJvAAKycgACsnQAArJ2AAKyeQACsnsAArJ9AAKygAACsoMAArKEAAKyiQACspYAArKZAAKymwACsp4AArKhAAKyowACssgAArLsAAKzEwACszcAArM6AAKzPAACsz4AArNAAAKzQgACs0QAArNFAAKzSAACs1UAArNoAAKzagACs2wAArNuAAKzcAACs3IAArN0AAKzdgACs3gAArN6AAKzjQACs5AAArOTAAKzlgACs5kAArOcAAKznwACs6IAArOlAAKzqAACs6oAArPpAAKz6wACs+4AArPwAAKz8wACs/QAArP1AAKz9gACs/cAArP5AAKz+wACs/wAArP9AAKz/wACtAAAArQJAAK0CgACtAwAArRLAAK0TQACtE8AArRRAAK0VAACtFUAArRWAAK0VwACtFgAArRaAAK0XAACtF0AArReAAK0YAACtGEAArSgAAK0ogACtKUAArSnAAK0qgACtKsAArSsAAK0rQACtK4AArSwAAK0sgACtLMAArS0AAK0tgACtLcAArTAAAK0wQACtMMAArUCAAK1BAACtQYAArUIAAK1CwACtQwAArUNAAK1DgACtQ8AArURAAK1EwACtRQAArUVAAK1FwACtRgAArVXAAK1WQACtVwAArVeAAK1YQACtWIAArVjAAK1ZAACtWUAArVnAAK1aQACtWoAArVrAAK1bQACtW4AArV3AAK1eAACtXoAArW5AAK1uwACtb0AArW/AAK1wgACtcMAArXEAAK1xQACtcYAArXIAAK1ygACtcsAArXMAAK1zgACtc8AArYOAAK2EAACthMAArYVAAK2GAACthkAArYaAAK2GwACthwAArYeAAK2IAACtiEAArYiAAK2JAACtiUAArYyAAK2MwACtjQAArY2AAK2dQACtncAArZ5AAK2ewACtn4AArZ/AAK2gAACtoEAAraCAAK2hAACtoYAAraHAAK2iAACtooAAraLAAK2ygACtswAArbPAAK20QACttQAArbVAAK21gACttcAArbYAAK22gACttwAArbdAAK23gACtuAAArbhAAK27wACtvwAArcHAAK3CgACtw0AArcQAAK3EwACtxYAArchAAK3JAACtycAArcqAAK3LQACtzAAArcyAAK3PgACt0wAArdWAAK3YQACt2oAAre1AAK32AACt/gAArgYAAK4GgACuBwAArgeAAK4IAACuCMAArgkAAK4JQACuCgAArgpAAK4KwACuCwAArguAAK4MQACuDIAArgzAAK4NgACuDcAArg8AAK4SQACuE4AArhQAAK4UgACuFcAArhaAAK4XQACuF8AAriEAAK4qAACuM8AArjzAAK49gACuPgAArj6AAK4/AACuP4AArkAAAK5AQACuQQAArkRAAK5IgACuSQAArkmAAK5KAACuSoAArksAAK5LgACuTAAArkyAAK5QwACuUYAArlJAAK5TAACuU8AArlSAAK5VQACuVgAArlbAAK5XQACuZwAArmeAAK5oAACuaIAArmlAAK5pgACuacAArmoAAK5qQACuasAArmtAAK5rgACua8AArmxAAK5sgACufEAArnzAAK59QACufcAArn6AAK5+wACufwAArn9AAK5/gACugAAAroCAAK6AwACugQAAroGAAK6BwACukYAArpIAAK6SwACuk0AArpQAAK6UQACulIAArpTAAK6VAACulYAArpYAAK6WQACuloAArpcAAK6XQACumoAArprAAK6bAACum4AArqtAAK6rwACurEAArqzAAK6tgACurcAArq4AAK6uQACuroAArq8AAK6vgACur8AArrAAAK6wgACusMAArsCAAK7BAACuwYAArsIAAK7CwACuwwAArsNAAK7DgACuw8AArsRAAK7EwACuxQAArsVAAK7FwACuxgAArtXAAK7WQACu1sAArtdAAK7YAACu2EAArtiAAK7YwACu2QAArtmAAK7aAACu2kAArtqAAK7bAACu20AArusAAK7rgACu7AAAruyAAK7tQACu7YAAru3AAK7uAACu7kAAru7AAK7vQACu74AAru/AAK7wQACu8IAArwBAAK8AwACvAUAArwHAAK8CgACvAsAArwMAAK8DQACvA4AArwQAAK8EgACvBMAArwUAAK8FgACvBcAArw8AAK8YAACvIcAAryrAAK8rgACvLAAAryyAAK8tAACvLYAAry4AAK8uQACvLwAArzJAAK82AACvNoAArzcAAK83gACvOAAArziAAK85AACvOYAArz1AAK8+AACvPsAArz+AAK9AQACvQQAAr0HAAK9CgACvQwAAr1LAAK9TQACvU8AAr1RAAK9VAACvVUAAr1WAAK9VwACvVgAAr1aAAK9XAACvV0AAr1eAAK9YAACvWEAAr2gAAK9ogACvaQAAr2mAAK9qQACvaoAAr2rAAK9rAACva0AAr2vAAK9sQACvbIAAr2zAAK9tQACvbYAAr31AAK99wACvfkAAr37AAK9/gACvf8AAr4AAAK+AQACvgIAAr4EAAK+BgACvgcAAr4IAAK+CgACvgsAAr5KAAK+TAACvk4AAr5QAAK+UwACvlQAAr5VAAK+VgACvlcAAr5ZAAK+WwACvlwAAr5dAAK+XwACvmAAAr6fAAK+oQACvqMAAr6lAAK+qAACvqkAAr6qAAK+qwACvqwAAr6uAAK+sAACvrEAAr6yAAK+tAACvrUAAr70AAK+9gACvvgAAr76AAK+/QACvv4AAr7/AAK/AAACvwEAAr8DAAK/BQACvwYAAr8HAAK/CQACvwoAAr9JAAK/SwACv00AAr9PAAK/UgACv1MAAr9UAAK/VQACv1YAAr9YAAK/WgACv1sAAr9cAAK/XgACv18AAr+qAAK/zQACv+0AAsANAALADwACwBEAAsATAALAFQACwBgAAsAZAALAGgACwB0AAsAeAALAIAACwCEAAsAjAALAJgACwCcAAsAoAALAKwACwCwAAsAxAALAPgACwEMAAsBFAALARwACwEwAAsBPAALAUgACwFQAAsB5AALAnQACwMQAAsDoAALA6wACwO0AAsDvAALA8QACwPMAAsD1AALA9gACwPkAAsEGAALBFwACwRkAAsEbAALBHQACwR8AAsEhAALBIwACwSUAAsEnAALBOAACwTsAAsE+AALBQQACwUQAAsFHAALBSgACwU0AAsFQAALBUgACwZEAAsGTAALBlQACwZcAAsGaAALBmwACwZwAAsGdAALBngACwaAAAsGiAALBowACwaQAAsGmAALBpwACweYAAsHoAALB6gACwewAAsHvAALB8AACwfEAAsHyAALB8wACwfUAAsH3AALB+AACwfkAAsH7AALB/AACwjsAAsI9AALCQAACwkIAAsJFAALCRgACwkcAAsJIAALCSQACwksAAsJNAALCTgACwk8AAsJRAALCUgACwl8AAsJgAALCYQACwmMAAsKiAALCpAACwqYAAsKoAALCqwACwqwAAsKtAALCrgACwq8AAsKxAALCswACwrQAAsK1AALCtwACwrgAAsL3AALC+QACwvsAAsL9AALDAAACwwEAAsMCAALDAwACwwQAAsMGAALDCAACwwkAAsMKAALDDAACww0AAsNMAALDTgACw1AAAsNSAALDVQACw1YAAsNXAALDWAACw1kAAsNbAALDXQACw14AAsNfAALDYQACw2IAAsOhAALDowACw6UAAsOnAALDqgACw6sAAsOsAALDrQACw64AAsOwAALDsgACw7MAAsO0AALDtgACw7cAAsP2AALD+AACw/oAAsP8AALD/wACxAAAAsQBAALEAgACxAMAAsQFAALEBwACxAgAAsQJAALECwACxAwAAsQxAALEVQACxHwAAsSgAALEowACxKUAAsSnAALEqQACxKsAAsStAALErgACxLEAAsS+AALEzQACxM8AAsTRAALE0wACxNUAAsTXAALE2QACxNsAAsTqAALE7QACxPAAAsTzAALE9gACxPkAAsT8AALE/wACxQEAAsVAAALFQgACxUQAAsVGAALFSQACxUoAAsVLAALFTAACxU0AAsVPAALFUQACxVIAAsVTAALFVQACxVYAAsWVAALFlwACxZkAAsWbAALFngACxZ8AAsWgAALFoQACxaIAAsWkAALFpgACxacAAsWoAALFqgACxasAAsXqAALF7AACxe4AAsXwAALF8wACxfQAAsX1AALF9gACxfcAAsX5AALF+wACxfwAAsX9AALF/wACxgAAAsY/AALGQQACxkMAAsZFAALGSAACxkkAAsZKAALGSwACxkwAAsZOAALGUAACxlEAAsZSAALGVAACxlUAAsaUAALGlgACxpgAAsaaAALGnQACxp4AAsafAALGoAACxqEAAsajAALGpQACxqYAAsanAALGqQACxqoAAsbpAALG6wACxu0AAsbvAALG8gACxvMAAsb0AALG9QACxvYAAsb4AALG+gACxvsAAsb8AALG/gACxv8AAsc+AALHQAACx0IAAsdEAALHRwACx0gAAsdJAALHSgACx0sAAsdNAALHTwACx1AAAsdRAALHUwACx1QAAsefAALHwgACx+IAAsgCAALIBAACyAYAAsgIAALICgACyA0AAsgOAALIDwACyBIAAsgTAALIFQACyBYAAsgYAALIGwACyBwAAsgdAALIIAACyCEAAsgmAALIMwACyDgAAsg6AALIPAACyEEAAshEAALIRwACyEkAAshuAALIkgACyLkAAsjdAALI4AACyOIAAsjkAALI5gACyOgAAsjqAALI6wACyO4AAsj7AALJDAACyQ4AAskQAALJEgACyRQAAskWAALJGAACyRoAAskcAALJLQACyTAAAskzAALJNgACyTkAAsk8AALJPwACyUIAAslFAALJRwACyYYAAsmIAALJigACyYwAAsmPAALJkAACyZEAAsmSAALJkwACyZUAAsmXAALJmAACyZkAAsmbAALJnAACydsAAsndAALJ3wACyeEAAsnkAALJ5QACyeYAAsnnAALJ6AACyeoAAsnsAALJ7QACye4AAsnwAALJ8QACyjAAAsoyAALKNQACyjcAAso6AALKOwACyjwAAso9AALKPgACykAAAspCAALKQwACykQAAspGAALKRwACylQAAspVAALKVgACylgAAsqXAALKmQACypsAAsqdAALKoAACyqEAAsqiAALKowACyqQAAsqmAALKqAACyqkAAsqqAALKrAACyq0AAsrsAALK7gACyvAAAsryAALK9QACyvYAAsr3AALK+AACyvkAAsr7AALK/QACyv4AAsr/AALLAQACywIAAstBAALLQwACy0UAAstHAALLSgACy0sAAstMAALLTQACy04AAstQAALLUgACy1MAAstUAALLVgACy1cAAsuWAALLmAACy5oAAsucAALLnwACy6AAAsuhAALLogACy6MAAsulAALLpwACy6gAAsupAALLqwACy6wAAsvrAALL7QACy+8AAsvxAALL9AACy/UAAsv2AALL9wACy/gAAsv6AALL/AACy/0AAsv+AALMAAACzAEAAswmAALMSgACzHEAAsyVAALMmAACzJoAAsycAALMngACzKAAAsyiAALMowACzKYAAsyzAALMwgACzMQAAszGAALMyAACzMoAAszMAALMzgACzNAAAszfAALM4gACzOUAAszoAALM6wACzO4AAszxAALM9AACzPYAAs01AALNNwACzTkAAs07AALNPgACzT8AAs1AAALNQQACzUIAAs1EAALNRgACzUcAAs1IAALNSgACzUsAAs2KAALNjAACzY4AAs2QAALNkwACzZQAAs2VAALNlgACzZcAAs2ZAALNmwACzZwAAs2dAALNnwACzaAAAs3fAALN4QACzeMAAs3lAALN6AACzekAAs3qAALN6wACzewAAs3uAALN8AACzfEAAs3yAALN9AACzfUAAs40AALONgACzjkAAs47AALOPgACzj8AAs5AAALOQQACzkIAAs5EAALORgACzkcAAs5IAALOSgACzksAAs5OAALOjQACzo8AAs6RAALOkwACzpYAAs6XAALOmAACzpkAAs6aAALOnAACzp4AAs6fAALOoAACzqIAAs6jAALO4gACzuQAAs7mAALO6AACzusAAs7sAALO7QACzu4AAs7vAALO8QACzvMAAs70AALO9QACzvcAAs74AALPNwACzzkAAs87AALPPQACz0AAAs9BAALPQgACz0MAAs9EAALPRgACz0gAAs9JAALPSgACz0wAAs9NAALPmAACz7sAAs/bAALP+wACz/0AAs//AALQAQAC0AMAAtAGAALQBwAC0AgAAtALAALQDAAC0A4AAtAPAALQEQAC0BQAAtAVAALQFgAC0BkAAtAaAALQHwAC0CwAAtAxAALQMwAC0DUAAtA6AALQPQAC0EAAAtBCAALQZwAC0IsAAtCyAALQ1gAC0NkAAtDbAALQ3QAC0N8AAtDhAALQ4wAC0OQAAtDnAALQ9AAC0QUAAtEHAALRCQAC0QsAAtENAALRDwAC0REAAtETAALRFQAC0SYAAtEpAALRLAAC0S8AAtEyAALRNQAC0TgAAtE7AALRPgAC0UAAAtF/AALRgQAC0YMAAtGFAALRiAAC0YkAAtGKAALRiwAC0YwAAtGOAALRkAAC0ZEAAtGSAALRlAAC0ZUAAtHUAALR1gAC0dgAAtHaAALR3QAC0d4AAtHfAALR4AAC0eEAAtHjAALR5QAC0eYAAtHnAALR6QAC0eoAAtIpAALSKwAC0i4AAtIwAALSMwAC0jQAAtI1AALSNgAC0jcAAtI5AALSOwAC0jwAAtI9AALSPwAC0kAAAtJNAALSTgAC0k8AAtJRAALSkAAC0pIAAtKUAALSlgAC0pkAAtKaAALSmwAC0pwAAtKdAALSnwAC0qEAAtKiAALSowAC0qUAAtKmAALS5QAC0ucAAtLpAALS6wAC0u4AAtLvAALS8AAC0vEAAtLyAALS9AAC0vYAAtL3AALS+AAC0voAAtL7AALTOgAC0zwAAtM+AALTQAAC00MAAtNEAALTRQAC00YAAtNHAALTSQAC00sAAtNMAALTTQAC008AAtNQAALTjwAC05EAAtOTAALTlQAC05gAAtOZAALTmgAC05sAAtOcAALTngAC06AAAtOhAALTogAC06QAAtOlAALT5AAC0+YAAtPoAALT6gAC0+0AAtPuAALT7wAC0/AAAtPxAALT8wAC0/UAAtP2AALT9wAC0/kAAtP6AALUHwAC1EMAAtRqAALUjgAC1JEAAtSTAALUlQAC1JcAAtSZAALUmwAC1JwAAtSfAALUrAAC1LsAAtS9AALUvwAC1MEAAtTDAALUxQAC1McAAtTJAALU2AAC1NsAAtTeAALU4QAC1OQAAtTnAALU6gAC1O0AAtTvAALVLgAC1TAAAtUyAALVNAAC1TcAAtU4AALVOQAC1ToAAtU7AALVPQAC1T8AAtVAAALVQQAC1UMAAtVEAALVgwAC1YUAAtWHAALViQAC1YwAAtWNAALVjgAC1Y8AAtWQAALVkgAC1ZQAAtWVAALVlgAC1ZgAAtWZAALV2AAC1doAAtXcAALV3gAC1eEAAtXiAALV4wAC1eQAAtXlAALV5wAC1ekAAtXqAALV6wAC1e0AAtXuAALWLQAC1i8AAtYxAALWMwAC1jYAAtY3AALWOAAC1jkAAtY6AALWPAAC1j4AAtY/AALWQAAC1kIAAtZDAALWggAC1oQAAtaGAALWiAAC1osAAtaMAALWjQAC1o4AAtaPAALWkQAC1pMAAtaUAALWlQAC1pcAAtaYAALW1wAC1tkAAtbbAALW3QAC1uAAAtbhAALW4gAC1uMAAtbkAALW5gAC1ugAAtbpAALW6gAC1uwAAtbtAALXLAAC1y4AAtcwAALXMgAC1zUAAtc2AALXNwAC1zgAAtc5AALXOwAC1z0AAtc+AALXPwAC10EAAtdCAALXjQAC17AAAtfQAALX8AAC1/IAAtf0AALX9gAC1/gAAtf7AALX/AAC1/0AAtgAAALYAQAC2AMAAtgEAALYBgAC2AkAAtgKAALYCwAC2A4AAtgPAALYFAAC2CEAAtgmAALYKAAC2CoAAtgvAALYMgAC2DUAAtg3AALYXAAC2IAAAtinAALYywAC2M4AAtjQAALY0gAC2NQAAtjWAALY2AAC2NkAAtjcAALY6QAC2PoAAtj8AALY/gAC2QAAAtkCAALZBAAC2QYAAtkIAALZCgAC2RsAAtkeAALZIQAC2SQAAtknAALZKgAC2S0AAtkwAALZMwAC2TUAAtl0AALZdgAC2XgAAtl6AALZfQAC2X4AAtl/AALZgAAC2YEAAtmDAALZhQAC2YYAAtmHAALZiQAC2YoAAtnJAALZywAC2c0AAtnPAALZ0gAC2dMAAtnUAALZ1QAC2dYAAtnYAALZ2gAC2dsAAtncAALZ3gAC2d8AAtoeAALaIAAC2iMAAtolAALaKAAC2ikAAtoqAALaKwAC2iwAAtouAALaMAAC2jEAAtoyAALaNAAC2jUAAtpCAALaQwAC2kQAAtpGAALahQAC2ocAAtqJAALaiwAC2o4AAtqPAALakAAC2pEAAtqSAALalAAC2pYAAtqXAALamAAC2poAAtqbAALa2gAC2twAAtreAALa4AAC2uMAAtrkAALa5QAC2uYAAtrnAALa6QAC2usAAtrsAALa7QAC2u8AAtrwAALbLwAC2zEAAtszAALbNQAC2zgAAts5AALbOgAC2zsAAts8AALbPgAC20AAAttBAALbQgAC20QAAttFAALbhAAC24YAAtuIAALbigAC240AAtuOAALbjwAC25AAAtuRAALbkwAC25UAAtuWAALblwAC25kAAtuaAALb2QAC29sAAtvdAALb3wAC2+IAAtvjAALb5AAC2+UAAtvmAALb6AAC2+oAAtvrAALb7AAC2+4AAtvvAALcFAAC3DgAAtxfAALcgwAC3IYAAtyIAALcigAC3IwAAtyOAALckAAC3JEAAtyUAALcoQAC3LAAAtyyAALctAAC3LYAAty4AALcugAC3LwAAty+AALczQAC3NAAAtzTAALc1gAC3NkAAtzcAALc3wAC3OIAAtzkAALdIwAC3SUAAt0nAALdKQAC3SwAAt0tAALdLgAC3S8AAt0wAALdMgAC3TQAAt01AALdNgAC3TgAAt05AALdeAAC3XoAAt18AALdfgAC3YEAAt2CAALdgwAC3YQAAt2FAALdhwAC3YkAAt2KAALdiwAC3Y0AAt2OAALdzQAC3c8AAt3RAALd0wAC3dYAAt3XAALd2AAC3dkAAt3aAALd3AAC3d4AAt3fAALd4AAC3eIAAt3jAALeIgAC3iQAAt4mAALeKAAC3isAAt4sAALeLQAC3i4AAt4vAALeMQAC3jMAAt40AALeNQAC3jcAAt44AALedwAC3nkAAt57AALefQAC3oAAAt6BAALeggAC3oMAAt6EAALehgAC3ogAAt6JAALeigAC3owAAt6NAALezAAC3s4AAt7QAALe0gAC3tUAAt7WAALe1wAC3tgAAt7ZAALe2wAC3t0AAt7eAALe3wAC3uEAAt7iAALfIQAC3yMAAt8lAALfJwAC3yoAAt8rAALfLAAC3y0AAt8uAALfMAAC3zIAAt8zAALfNAAC3zYAAt83AALfQAAC30EAAt9DAALfhgAC36oAAt/OAALf8QAC4BgAAuA4AALgXwAC4IYAAuCmAALgygAC4O4AAuDwAALg8wAC4PUAAuD3AALg+QAC4PwAAuD/AALhAQAC4QMAAuEGAALhCAAC4QoAAuENAALhEAAC4REAAuEWAALhIwAC4SYAAuEoAALhKwAC4S4AAuEwAALhVQAC4XkAAuGgAALhxAAC4ccAAuHJAALhywAC4c0AAuHPAALh0QAC4dIAAuHVAALh4gAC4fUAAuH3AALh+QAC4fsAAuH9AALh/wAC4gEAAuIDAALiBQAC4gcAAuIaAALiHQAC4iAAAuIjAALiJgAC4ikAAuIsAALiLwAC4jIAAuI1AALiNwAC4nYAAuJ4AALiewAC4n0AAuKAAALigQAC4oIAAuKDAALihAAC4oYAAuKIAALiiQAC4ooAAuKMAALijQAC4pYAAuKXAALimQAC4tgAAuLaAALi3AAC4t4AAuLhAALi4gAC4uMAAuLkAALi5QAC4ucAAuLpAALi6gAC4usAAuLtAALi7gAC4y0AAuMvAALjMgAC4zQAAuM3AALjOAAC4zkAAuM6AALjOwAC4z0AAuM/AALjQAAC40EAAuNDAALjRAAC400AAuNOAALjUAAC448AAuORAALjkwAC45UAAuOYAALjmQAC45oAAuObAALjnAAC454AAuOgAALjoQAC46IAAuOkAALjpQAC4+QAAuPmAALj6QAC4+sAAuPuAALj7wAC4/AAAuPxAALj8gAC4/QAAuP2AALj9wAC4/gAAuP6AALj+wAC5AQAAuQFAALkBwAC5EYAAuRIAALkSgAC5EwAAuRPAALkUAAC5FEAAuRSAALkUwAC5FUAAuRXAALkWAAC5FkAAuRbAALkXAAC5JsAAuSdAALkoAAC5KIAAuSlAALkpgAC5KcAAuSoAALkqQAC5KsAAuStAALkrgAC5K8AAuSxAALksgAC5L8AAuTAAALkwQAC5MMAAuUCAALlBAAC5QYAAuUIAALlCwAC5QwAAuUNAALlDgAC5Q8AAuURAALlEwAC5RQAAuUVAALlFwAC5RgAAuVXAALlWQAC5VwAAuVeAALlYQAC5WIAAuVjAALlZAAC5WUAAuVnAALlaQAC5WoAAuVrAALlbQAC5W4AAuWKAALllwAC5aIAAuWlAALlqAAC5asAAuWuAALlsQAC5bwAAuW/AALlwgAC5cUAAuXIAALlywAC5c0AAuXgAALl7gAC5fcAAuYJAALmEQAC5lwAAuZ/AALmnwAC5r8AAubBAALmwwAC5sUAAubHAALmygAC5ssAAubMAALmzwAC5tAAAubSAALm0wAC5tUAAubYAALm2QAC5toAAubdAALm3gAC5ucAAub0AALm+QAC5vsAAub9AALnAgAC5wUAAucIAALnCgAC5y8AAudTAALnegAC554AAuehAALnowAC56UAAuenAALnqQAC56sAAuesAALnrwAC57wAAufNAALnzwAC59EAAufTAALn1QAC59cAAufZAALn2wAC590AAufuAALn8QAC5/QAAuf3AALn+gAC5/0AAugAAALoAwAC6AYAAugIAALoRwAC6EkAAuhLAALoTQAC6FAAAuhRAALoUgAC6FMAAuhUAALoVgAC6FgAAuhZAALoWgAC6FwAAuhdAALonAAC6J4AAuigAALoogAC6KUAAuimAALopwAC6KgAAuipAALoqwAC6K0AAuiuAALorwAC6LEAAuiyAALo8QAC6PMAAuj2AALo+AAC6PsAAuj8AALo/QAC6P4AAuj/AALpAQAC6QMAAukEAALpBQAC6QcAAukIAALpFQAC6RYAAukXAALpGQAC6VgAAulaAALpXAAC6V4AAulhAALpYgAC6WMAAulkAALpZQAC6WcAAulpAALpagAC6WsAAultAALpbgAC6a0AAumvAALpsQAC6bMAAum2AALptwAC6bgAAum5AALpugAC6bwAAum+AALpvwAC6cAAAunCAALpwwAC6gIAAuoEAALqBgAC6ggAAuoLAALqDAAC6g0AAuoOAALqDwAC6hEAAuoTAALqFAAC6hUAAuoXAALqGAAC6lcAAupZAALqWwAC6l0AAupgAALqYQAC6mIAAupjAALqZAAC6mYAAupoAALqaQAC6moAAupsAALqbQAC6qwAAuquAALqsAAC6rIAAuq1AALqtgAC6rcAAuq4AALquQAC6rsAAuq9AALqvgAC6r8AAurBAALqwgAC6ucAAusLAALrMgAC61YAAutZAALrWwAC610AAutfAALrYQAC62MAAutkAALrZwAC63QAAuuDAALrhQAC64cAAuuJAALriwAC640AAuuPAALrkQAC66AAAuujAALrpgAC66kAAuusAALrrwAC67IAAuu1AALrtwAC6/YAAuv4AALr+gAC6/wAAuv/AALsAAAC7AEAAuwCAALsAwAC7AUAAuwHAALsCAAC7AkAAuwLAALsDAAC7EsAAuxNAALsTwAC7FEAAuxUAALsVQAC7FYAAuxXAALsWAAC7FoAAuxcAALsXQAC7F4AAuxgAALsYQAC7KAAAuyiAALspAAC7KYAAuypAALsqgAC7KsAAuysAALsrQAC7K8AAuyxAALssgAC7LMAAuy1AALstgAC7PUAAuz3AALs+gAC7PwAAuz/AALtAAAC7QEAAu0CAALtAwAC7QUAAu0HAALtCAAC7QkAAu0LAALtDAAC7UsAAu1NAALtTwAC7VEAAu1UAALtVQAC7VYAAu1XAALtWAAC7VoAAu1cAALtXQAC7V4AAu1gAALtYQAC7aAAAu2iAALtpQAC7acAAu2qAALtqwAC7awAAu2tAALtrgAC7bAAAu2yAALtswAC7bQAAu22AALttwAC7d4AAu4dAALuHwAC7iEAAu4jAALuJgAC7icAAu4oAALuKQAC7ioAAu4sAALuLgAC7i8AAu4wAALuMgAC7jMAAu5+AALuoQAC7sEAAu7hAALu4wAC7uUAAu7nAALu6QAC7uwAAu7tAALu7gAC7vEAAu7yAALu9AAC7vUAAu73AALu+gAC7vsAAu78AALu/wAC7wAAAu8JAALvFgAC7xsAAu8dAALvHwAC7yQAAu8nAALvKgAC7ywAAu9RAALvdQAC75wAAu/AAALvwwAC78UAAu/HAALvyQAC78sAAu/NAALvzgAC79EAAu/eAALv7wAC7/EAAu/zAALv9QAC7/cAAu/5AALv+wAC7/0AAu//AALwEAAC8BMAAvAWAALwGQAC8BwAAvAfAALwIgAC8CUAAvAoAALwKgAC8GkAAvBrAALwbQAC8G8AAvByAALwcwAC8HQAAvB1AALwdgAC8HgAAvB6AALwewAC8HwAAvB+AALwfwAC8L4AAvDAAALwwgAC8MQAAvDHAALwyAAC8MkAAvDKAALwywAC8M0AAvDPAALw0AAC8NEAAvDTAALw1AAC8RMAAvEVAALxGAAC8RoAAvEdAALxHgAC8R8AAvEgAALxIQAC8SMAAvElAALxJgAC8ScAAvEpAALxKgAC8TcAAvE4AALxOQAC8TsAAvF6AALxfAAC8X4AAvGAAALxgwAC8YQAAvGFAALxhgAC8YcAAvGJAALxiwAC8YwAAvGNAALxjwAC8ZAAAvHPAALx0QAC8dMAAvHVAALx2AAC8dkAAvHaAALx2wAC8dwAAvHeAALx4AAC8eEAAvHiAALx5AAC8eUAAvIkAALyJgAC8igAAvIqAALyLQAC8i4AAvIvAALyMAAC8jEAAvIzAALyNQAC8jYAAvI3AALyOQAC8joAAvJ5AALyewAC8n0AAvJ/AALyggAC8oMAAvKEAALyhQAC8oYAAvKIAALyigAC8osAAvKMAALyjgAC8o8AAvLOAALy0AAC8tIAAvLUAALy1wAC8tgAAvLZAALy2gAC8tsAAvLdAALy3wAC8uAAAvLhAALy4wAC8uQAAvMJAALzLQAC81QAAvN4AALzewAC830AAvN/AALzgQAC84MAAvOFAALzhgAC84kAAvOWAALzpQAC86cAAvOpAALzqwAC860AAvOvAALzsQAC87MAAvPCAALzxQAC88gAAvPLAALzzgAC89EAAvPUAALz1wAC89kAAvQYAAL0GgAC9BwAAvQeAAL0IQAC9CIAAvQjAAL0JAAC9CUAAvQnAAL0KQAC9CoAAvQrAAL0LQAC9C4AAvRtAAL0bwAC9HEAAvRzAAL0dgAC9HcAAvR4AAL0eQAC9HoAAvR8AAL0fgAC9H8AAvSAAAL0ggAC9IMAAvTCAAL0xAAC9MYAAvTIAAL0ywAC9MwAAvTNAAL0zgAC9M8AAvTRAAL00wAC9NQAAvTVAAL01wAC9NgAAvUXAAL1GQAC9RwAAvUeAAL1IQAC9SIAAvUjAAL1JAAC9SUAAvUnAAL1KQAC9SoAAvUrAAL1LQAC9S4AAvVtAAL1bwAC9XEAAvVzAAL1dgAC9XcAAvV4AAL1eQAC9XoAAvV8AAL1fgAC9X8AAvWAAAL1ggAC9YMAAvXCAAL1xAAC9ccAAvXJAAL1zAAC9c0AAvXOAAL1zwAC9dAAAvXSAAL11AAC9dUAAvXWAAL12AAC9dkAAvYAAAL2PwAC9kEAAvZ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oAAMTaQADE2sAAxNtAAMTbgADE28AAxNyAAMTcwADE3gAAxOFAAMTigADE4wAAxOOAAMTkwADE5YAAxOZAAMTmwADE8AAAxPkAAMUCwADFC8AAxQyAAMUNAADFDYAAxQ4AAMUOgADFDwAAxQ9AAMUQAADFE0AAxReAAMUYAADFGIAAxRkAAMUZgADFGgAAxRqAAMUbAADFG4AAxR/AAMUggADFIUAAxSIAAMUiwADFI4AAxSRAAMUlAADFJcAAxSZAAMU2AADFNoAAxTcAAMU3gADFOEAAxTiAAMU4wADFOQAAxTlAAMU5wADFOkAAxTqAAMU6wADFO0AAxTuAAMVLQADFS8AAxUxAAMVMwADFTYAAxU3AAMVOAADFTkAAxU6AAMVPAADFT4AAxU/AAMVQAADFUIAAxVDAAMVggADFYQAAxWHAAMViQADFYwAAxWNAAMVjgADFY8AAxWQAAMVkgADFZQAAxWVAAMVlgADFZgAAxWZAAMVpgADFacAAxWoAAMVqgADFekAAxXrAAMV7QADFe8AAxXyAAMV8wADFfQAAxX1AAMV9gADFfgAAxX6AAMV+wADFfwAAxX+AAMV/wADFj4AAxZAAAMWQgADFkQAAxZHAAMWSAADFkkAAxZKAAMWSwADFk0AAxZPAAMWUAADFlEAAxZTAAMWVAADFpMAAxaVAAMWlwADFpkAAxacAAMWnQADFp4AAxafAAMWoAADFqIAAxakAAMWpQADFqYAAxaoAAMWqQADFugAAxbqAAMW7AADFu4AAxbxAAMW8gADFvMAAxb0AAMW9QADFvcAAxb5AAMW+gADFvsAAxb9AAMW/gADFz0AAxc/AAMXQQADF0MAAxdGAAMXRwADF0gAAxdJAAMXSgADF0wAAxdOAAMXTwADF1AAAxdSAAMXUwADF3gAAxecAAMXwwADF+cAAxfqAAMX7AADF+4AAxfwAAMX8gADF/QAAxf1AAMX+AADGAUAAxgUAAMYFgADGBgAAxgaAAMYHAADGB4AAxggAAMYIgADGDEAAxg0AAMYNwADGDoAAxg9AAMYQAADGEMAAxhGAAMYSAADGIcAAxiJAAMYiwADGI0AAxiQAAMYkQADGJIAAxiTAAMYlAADGJYAAxiYAAMYmQADGJoAAxicAAMYnQADGNwAAxjeAAMY4AADGOIAAxjlAAMY5gADGOcAAxjoAAMY6QADGOsAAxjtAAMY7gADGO8AAxjxAAMY8gADGTEAAxkzAAMZNQADGTcAAxk6AAMZOwADGTwAAxk9AAMZPgADGUAAAxlCAAMZQwADGUQAAxlGAAMZRwADGYYAAxmIAAMZigADGYwAAxmPAAMZkAADGZEAAxmSAAMZkwADGZUAAxmXAAMZmAADGZkAAxmbAAMZnAADGdsAAxndAAMZ3wADGeEAAxnkAAMZ5QADGeYAAxnnAAMZ6AADGeoAAxnsAAMZ7QADGe4AAxnwAAMZ8QADGjAAAxoyAAMaNAADGjYAAxo5AAMaOgADGjsAAxo8AAMaPQADGj8AAxpBAAMaQgADGkMAAxpFAAMaRgADGoUAAxqHAAMaiQADGosAAxqOAAMajwADGpAAAxqRAAMakgADGpQAAxqWAAMalwADGpgAAxqaAAMamwADGuYAAxsJAAMbKQADG0kAAxtLAAMbTQADG08AAxtRAAMbVAADG1UAAxtWAAMbWQADG1oAAxtcAAMbXQADG18AAxtiAAMbYwADG2QAAxtnAAMbaAADG3EAAxt+AAMbgwADG4UAAxuHAAMbjAADG48AAxuSAAMblAADG7kAAxvdAAMcBAADHCgAAxwrAAMcLQADHC8AAxwxAAMcMwADHDUAAxw2AAMcOQADHEYAAxxXAAMcWQADHFsAAxxdAAMcXwADHGEAAxxjAAMcZQADHGcAAxx4AAMcewADHH4AAxyBAAMchAADHIcAAxyKAAMcjQADHJAAAxySAAMc0QADHNMAAxzVAAMc1wADHNoAAxzbAAMc3AADHN0AAxzeAAMc4AADHOIAAxzjAAMc5AADHOYAAxznAAMdJgADHSgAAx0qAAMdLAADHS8AAx0wAAMdMQADHTIAAx0zAAMdNQADHTcAAx04AAMdOQADHTsAAx08AAMdewADHX0AAx2AAAMdggADHYUAAx2GAAMdhwADHYgAAx2JAAMdiwADHY0AAx2OAAMdjwADHZEAAx2SAAMdnwADHaAAAx2hAAMdowADHeIAAx3kAAMd5gADHegAAx3rAAMd7AADHe0AAx3uAAMd7wADHfEAAx3zAAMd9AADHfUAAx33AAMd+AADHjcAAx45AAMeOwADHj0AAx5AAAMeQQADHkIAAx5DAAMeRAADHkYAAx5IAAMeSQADHkoAAx5MAAMeTQADHowAAx6OAAMekAADHpIAAx6VAAMelgADHpcAAx6YAAMemQADHpsAAx6dAAMengADHp8AAx6hAAMeogADHuEAAx7jAAMe5QADHucAAx7qAAMe6wADHuwAAx7tAAMe7gADHvAAAx7yAAMe8wADHvQAAx72AAMe9wADHzYAAx84AAMfOgADHzwAAx8/AAMfQAADH0EAAx9CAAMfQwADH0UAAx9HAAMfSAADH0kAAx9LAAMfTAADH3EAAx+VAAMfvAADH+AAAx/jAAMf5QADH+cAAx/pAAMf6wADH+0AAx/uAAMf8QADH/4AAyANAAMgDwADIBEAAyATAAMgFQADIBcAAyAZAAMgGwADICoAAyAtAAMgMAADIDMAAyA2AAMgOQADIDwAAyA/AAMgQQADIIAAAyCCAAMghAADIIYAAyCJAAMgigADIIsAAyCMAAMgjQADII8AAyCRAAMgkgADIJMAAyCVAAMglgADINUAAyDXAAMg2QADINsAAyDeAAMg3wADIOAAAyDhAAMg4gADIOQAAyDmAAMg5wADIOgAAyDqAAMg6wADISoAAyEsAAMhLgADITAAAyEzAAMhNAADITUAAyE2AAMhNwADITkAAyE7AAMhPAADIT0AAyE/AAMhQAADIX8AAyGBAAMhhAADIYYAAyGJAAMhigADIYsAAyGMAAMhjQADIY8AAyGRAAMhkgADIZMAAyGVAAMhlgADIZgAAyHXAAMh2QADIdsAAyHdAAMh4AADIeEAAyHiAAMh4wADIeQAAyHmAAMh6AADIekAAyHqAAMh7AADIe0AAyIsAAMiLgADIjAAAyIyAAMiNQADIjYAAyI3AAMiOAADIjkAAyI7AAMiPQADIj4AAyI/AAMiQQADIkIAAyKBAAMigwADIoUAAyKHAAMiigADIosAAyKMAAMijQADIo4AAyKQAAMikgADIpMAAyKUAAMilgADIpcAAyKgAAMioQADIqMAAyLiAAMi5AADIuYAAyLoAAMi6wADIuwAAyLtAAMi7gADIu8AAyLxAAMi8wADIvQAAyL1AAMi9wADIvgAAyM3AAMjOQADIzsAAyM9AAMjQAADI0EAAyNCAAMjQwADI0QAAyNGAAMjSAADI0kAAyNKAAMjTAADI00AAyOMAAMjjgADI5AAAyOSAAMjlQADI5YAAyOXAAMjmAADI5kAAyObAAMjnQADI54AAyOfAAMjoQADI6IAAyPhAAMj4wADI+UAAyPnAAMj6gADI+sAAyPsAAMj7QADI+4AAyPwAAMj8gADI/MAAyP0AAMj9gADI/cAAyQ2AAMkOAADJDoAAyQ8AAMkPwADJEAAAyRBAAMkQgADJEMAAyRFAAMkRwADJEgAAyRJAAMkSwADJEwAAySXAAMkugADJNoAAyT6AAMk/AADJP4AAyUAAAMlAgADJQUAAyUGAAMlBwADJQoAAyULAAMlDQADJQ4AAyUQAAMlEwADJRQAAyUVAAMlGAADJRkAAyUiAAMlLwADJTQAAyU2AAMlOAADJT0AAyVAAAMlQwADJUUAAyVqAAMljgADJbUAAyXZAAMl3AADJd4AAyXgAAMl4gADJeQAAyXmAAMl5wADJeoAAyX3AAMmCAADJgoAAyYMAAMmDgADJhAAAyYSAAMmFAADJhYAAyYYAAMmKQADJiwAAyYvAAMmMgADJjUAAyY4AAMmOwADJj4AAyZBAAMmQwADJoIAAyaEAAMmhgADJogAAyaLAAMmjAADJo0AAyaOAAMmjwADJpEAAyaTAAMmlAADJpUAAyaXAAMmmAADJtcAAybZAAMm2wADJt0AAybgAAMm4QADJuIAAybjAAMm5AADJuYAAyboAAMm6QADJuoAAybsAAMm7QADJywAAycuAAMnMQADJzMAAyc2AAMnNwADJzgAAyc5AAMnOgADJzwAAyc+AAMnPwADJ0AAAydCAAMnQwADJ1AAAydRAAMnUgADJ1QAAyeTAAMnlQADJ5cAAyeZAAMnnAADJ50AAyeeAAMnnwADJ6AAAyeiAAMnpAADJ6UAAyemAAMnqAADJ6kAAyfoAAMn6gADJ+wAAyfuAAMn8QADJ/IAAyfzAAMn9AADJ/UAAyf3AAMn+QADJ/oAAyf7AAMn/QADJ/4AAyg9AAMoPwADKEEAAyhDAAMoRgADKEcAAyhIAAMoSQADKEoAAyhMAAMoTgADKE8AAyhQAAMoUgADKFMAAyiSAAMolAADKJYAAyiYAAMomwADKJwAAyidAAMongADKJ8AAyihAAMoowADKKQAAyilAAMopwADKKgAAyjnAAMo6QADKOsAAyjtAAMo8AADKPEAAyjyAAMo8wADKPQAAyj2AAMo+AADKPkAAyj6AAMo/AADKP0AAykiAAMpRgADKW0AAymRAAMplAADKZYAAymYAAMpmgADKZwAAymeAAMpnwADKaIAAymvAAMpvgADKcAAAynCAAMpxAADKcYAAynIAAMpygADKcwAAynbAAMp3gADKeEAAynkAAMp5wADKeoAAyntAAMp8AADKfIAAyoxAAMqMwADKjUAAyo3AAMqOgADKjsAAyo8AAMqPQADKj4AAypAAAMqQgADKkMAAypEAAMqRgADKkcAAyqGAAMqiAADKooAAyqMAAMqjwADKpAAAyqRAAMqkgADKpMAAyqVAAMqlwADKpgAAyqZAAMqmwADKpwAAyrbAAMq3QADKt8AAyrhAAMq5AADKuUAAyrmAAMq5wADKugAAyrqAAMq7AADKu0AAyruAAMq8AADKvEAAyswAAMrMgADKzQAAys2AAMrOQADKzoAAys7AAMrPAADKz0AAys/AAMrQQADK0IAAytDAAMrRQADK0YAAyuFAAMrhwADK4kAAyuLAAMrjgADK48AAyuQAAMrkQADK5IAAyuUAAMrlgADK5cAAyuYAAMrmgADK5sAAyvaAAMr3AADK94AAyvgAAMr4wADK+QAAyvlAAMr5gADK+cAAyvpAAMr6wADK+wAAyvtAAMr7wADK/AAAywvAAMsMQADLDMAAyw1AAMsOAADLDkAAyw6AAMsOwADLDwAAyw+AAMsQAADLEEAAyxCAAMsRAADLEUAAyxOAAMsTwADLFEAAyyUAAMsuAADLNwAAyz/AAMtJgADLUYAAy1tAAMtlAADLbQAAy3YAAMt/AADLf4AAy4BAAMuAwADLgUAAy4HAAMuCgADLg0AAy4PAAMuEQADLhQAAy4WAAMuGAADLhsAAy4eAAMuHwADLiQAAy4xAAMuNAADLjYAAy45AAMuPAADLj4AAy5jAAMuhwADLq4AAy7SAAMu1QADLtcAAy7ZAAMu2wADLt0AAy7fAAMu4AADLuMAAy7wAAMvAwADLwUAAy8HAAMvCQADLwsAAy8NAAMvDwADLxEAAy8TAAMvFQADLygAAy8rAAMvLgADLzEAAy80AAMvNwADLzoAAy89AAMvQAADL0MAAy9FAAMvhAADL4YAAy+JAAMviwADL44AAy+PAAMvkAADL5EAAy+SAAMvlAADL5YAAy+XAAMvmAADL5oAAy+bAAMvpAADL6UAAy+nAAMv5gADL+gAAy/qAAMv7AADL+8AAy/wAAMv8QADL/IAAy/zAAMv9QADL/cAAy/4AAMv+QADL/sAAy/8AAMwOwADMD0AAzBAAAMwQgADMEUAAzBGAAMwRwADMEgAAzBJAAMwSwADME0AAzBOAAMwTwADMFEAAzBSAAMwWwADMFwAAzBeAAMwnQADMJ8AAzChAAMwowADMKYAAzCnAAMwqAADMKkAAzCqAAMwrAADMK4AAzCvAAMwsAADMLIAAzCzAAMw8gADMPQAAzD3AAMw+QADMPwAAzD9AAMw/gADMP8AAzEAAAMxAgADMQQAAzEFAAMxBgADMQgAAzEJAAMxEgADMRMAAzEVAAMxVAADMVYAAzFYAAMxWgADMV0AAzFeAAMxXwADMWAAAzFhAAMxYwADMWUAAzFmAAMxZwADMWkAAzFqAAMxqQADMasAAzGuAAMxsAADMbMAAzG0AAMxtQADMbYAAzG3AAMxuQADMbsAAzG8AAMxvQADMb8AAzHAAAMxzQADMc4AAzHPAAMx0QADMhAAAzISAAMyFAADMhYAAzIZAAMyGgADMhsAAzIcAAMyHQADMh8AAzIhAAMyIgADMiMAAzIlAAMyJgADMmUAAzJnAAMyagADMmwAAzJvAAMycAADMnEAAzJyAAMycwADMnUAAzJ3AAMyeAADMnkAAzJ7AAMyfAADMogAAzKVAAMymgADMp0AAzKgAAMypQADMqgAAzKrAAMyrQADMrMAAzK+AAMzCQADMywAAzNMAAMzbAADM24AAzNwAAMzcgADM3QAAzN3AAMzeAADM3kAAzN8AAMzfQADM38AAzOAAAMzggADM4UAAzOGAAMzhwADM4oAAzOLAAMzkAADM50AAzOiAAMzpAADM6YAAzOrAAMzrgADM7EAAzOzAAMz2AADM/wAAzQjAAM0RwADNEoAAzRMAAM0TgADNFAAAzRSAAM0VAADNFUAAzRYAAM0ZQADNHYAAzR4AAM0egADNHwAAzR+AAM0gAADNIIAAzSEAAM0hgADNJcAAzSaAAM0nQADNKAAAzSjAAM0pgADNKkAAzSsAAM0rwADNLEAAzTwAAM08gADNPQAAzT2AAM0+QADNPoAAzT7AAM0/AADNP0AAzT/AAM1AQADNQIAAzUDAAM1BQADNQYAAzVFAAM1RwADNUkAAzVLAAM1TgADNU8AAzVQAAM1UQADNVIAAzVUAAM1VgADNVcAAzVYAAM1WgADNVsAAzW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eAANAnwADQKAAA0ChAANAowADQKUAA0CmAANApwADQKkAA0CqAANA6QADQOsAA0DtAANA7wADQPIAA0DzAANA9AADQPUAA0D2AANA+AADQPoAA0D7AANA/AADQP4AA0D/AANBPgADQUAAA0FCAANBRAADQUcAA0FIAANBSQADQUoAA0FLAANBTQADQU8AA0FQAANBUQADQVMAA0FUAANBkwADQZUAA0GXAANBmQADQZwAA0GdAANBngADQZ8AA0GgAANBogADQaQAA0GlAANBpgADQagAA0GpAANB6AADQeoAA0HsAANB7gADQfEAA0HyAANB8wADQfQAA0H1AANB9wADQfkAA0H6AANB+wADQf0AA0H+AANCPQADQj8AA0JBAANCQwADQkYAA0JHAANCSAADQkkAA0JKAANCTAADQk4AA0JPAANCUAADQlIAA0JTAANCkgADQpQAA0KWAANCmAADQpsAA0KcAANCnQADQp4AA0KfAANCoQADQqMAA0KkAANCpQADQqcAA0KoAANCsQADQrIAA0K0AANC9wADQxsAA0M/AANDYgADQ4kAA0OpAAND0AADQ/cAA0QXAANEOwADRF8AA0RhAANEZAADRGYAA0RoAANEagADRG0AA0RwAANEcgADRHQAA0R3AANEeQADRHsAA0R+AANEgQADRIIAA0SHAANElAADRJcAA0SZAANEnAADRJ8AA0ShAANExgADROoAA0URAANFNQADRTgAA0U6AANFPAADRT4AA0VAAANFQgADRUMAA0VGAANFUwADRWYAA0VoAANFagADRWwAA0VuAANFcAADRXIAA0V0AANFdgADRXgAA0WLAANFjgADRZEAA0WUAANFlwADRZoAA0WdAANFoAADRaMAA0WmAANFqAADRecAA0XpAANF7AADRe4AA0XxAANF8gADRfMAA0X0AANF9QADRfcAA0X5AANF+gADRfsAA0X9AANF/gADRgcAA0YIAANGCgADRkkAA0ZLAANGTQADRk8AA0ZSAANGUwADRlQAA0ZVAANGVgADRlgAA0ZaAANGWwADRlwAA0ZeAANGXwADRp4AA0agAANGowADRqUAA0aoAANGqQADRqoAA0arAANGrAADRq4AA0awAANGsQADRrIAA0a0AANGtQADRr4AA0a/AANGwQADRwAAA0cCAANHBAADRwYAA0cJAANHCgADRwsAA0cMAANHDQADRw8AA0cRAANHEgADRxMAA0cVAANHFgADR1UAA0dXAANHWgADR1wAA0dfAANHYAADR2EAA0diAANHYwADR2UAA0dnAANHaAADR2kAA0drAANHbAADR3UAA0d2AANHeAADR7cAA0e5AANHuwADR70AA0fAAANHwQADR8IAA0fDAANHxAADR8YAA0fIAANHyQADR8oAA0fMAANHzQADSAwAA0gOAANIEQADSBMAA0gWAANIFwADSBgAA0gZAANIGgADSBwAA0geAANIHwADSCAAA0giAANIIwADSDAAA0gxAANIMgADSDQAA0hzAANIdQADSHcAA0h5AANIfAADSH0AA0h+AANIfwADSIAAA0iCAANIhAADSIUAA0iGAANIiAADSIkAA0jIAANIygADSM0AA0jPAANI0gADSNMAA0jUAANI1QADSNYAA0jYAANI2gADSNsAA0jcAANI3gADSN8AA0j3AANJBAADSQ8AA0kSAANJFQADSRgAA0kbAANJHgADSSkAA0ksAANJLwADSTIAA0k1AANJOAADSToAA0lDAANJTAADSVYAA0mhAANJxAADSeQAA0oEAANKBgADSggAA0oKAANKDAADSg8AA0oQAANKEQADShQAA0oVAANKFwADShgAA0oaAANKHQADSh4AA0ofAANKIgADSiMAA0ooAANKNQADSjoAA0o8AANKPgADSkMAA0pGAANKSQADSksAA0pwAANKlAADSrsAA0rfAANK4gADSuQAA0rmAANK6AADSuoAA0rsAANK7QADSvAAA0r9AANLDgADSxAAA0sSAANLFAADSxYAA0sYAANLGgADSxwAA0seAANLLwADSzIAA0s1AANLOAADSzsAA0s+AANLQQADS0QAA0tHAANLSQADS4gAA0uKAANLjAADS44AA0uRAANLkgADS5MAA0uUAANLlQADS5cAA0uZAANLmgADS5sAA0udAANLngADS90AA0vfAANL4QADS+MAA0vmAANL5wADS+gAA0vpAANL6gADS+wAA0vuAANL7wADS/AAA0vyAANL8wADTDIAA0w0AANMNwADTDkAA0w8AANMPQADTD4AA0w/AANMQAADTEIAA0xEAANMRQADTEYAA0xIAANMSQADTFYAA0xXAANMWAADTFoAA0yZAANMmwADTJ0AA0yfAANMogADTKMAA0ykAANMpQADTKYAA0yoAANMqgADTKsAA0ysAANMrgADTK8AA0zuAANM8AADTPIAA0z0AANM9wADTPgAA0z5AANM+gADTPsAA0z9AANM/wADTQAAA00BAANNAwADTQQAA01DAANNRQADTUcAA01JAANNTAADTU0AA01OAANNTwADTVAAA01SAANNVAADTVUAA01WAANNWAADTVkAA02YAANNmgADTZwAA02eAANNoQADTaIAA02jAANNpAADTaUAA02nAANNqQADTaoAA02rAANNrQADTa4AA03tAANN7wADTfEAA03zAANN9gADTfcAA034AANN+QADTfoAA038AANN/gADTf8AA04AAANOAgADTgMAA04oAANOTAADTnMAA06XAANOmgADTpwAA06eAANOoAADTqIAA06kAANOpQADTqgAA061AANOxAADTsYAA07IAANOygADTswAA07OAANO0AADTtIAA07hAANO5AADTucAA07qAANO7QADTvAAA07zAANO9gADTvgAA083AANPOQADTzsAA089AANPQAADT0EAA09CAANPQwADT0QAA09GAANPSAADT0kAA09KAANPTAADT00AA0+MAANPjgADT5AAA0+SAANPlQADT5YAA0+XAANPmAADT5kAA0+bAANPnQADT54AA0+fAANPoQADT6IAA0/hAANP4wADT+UAA0/nAANP6gADT+sAA0/sAANP7QADT+4AA0/wAANP8gADT/MAA0/0AANP9gADT/cAA1A2AANQOAADUDsAA1A9AANQQAADUEEAA1BCAANQQwADUEQAA1BGAANQSAADUEkAA1BKAANQTAADUE0AA1BQAANQjwADUJEAA1CTAANQlQADUJgAA1CZAANQmgADUJsAA1CcAANQngADUKAAA1ChAANQogADUKQAA1ClAANQ5AADUOYAA1DoAANQ6gADUO0AA1DuAANQ7wADUPAAA1DxAANQ8wADUPUAA1D2AANQ9wADUPkAA1D6AANROQADUTsAA1E9AANRPwADUUIAA1FDAANRRAADUUUAA1FGAANRSAADUUoAA1FLAANRTAADUU4AA1FPAANRmgADUb0AA1HdAANR/QADUf8AA1IBAANSAwADUgUAA1IIAANSCQADUgoAA1INAANSDgADUhAAA1IRAANSEwADUhYAA1IXAANSGAADUhsAA1IcAANSIQADUi4AA1IzAANSNQADUjcAA1I8AANSPwADUkIAA1JEAANSaQADUo0AA1K0AANS2AADUtsAA1LdAANS3wADUuEAA1LjAANS5QADUuYAA1LpAANS9gADUwcAA1MJAANTCwADUw0AA1MPAANTEQADUxMAA1MVAANTFwADUygAA1MrAANTLgADUzEAA1M0AANTNwADUzoAA1M9AANTQAADU0IAA1OBAANTgwADU4UAA1OHAANTigADU4sAA1OMAANTjQADU44AA1OQAANTkgADU5MAA1OUAANTlgADU5cAA1PWAANT2AADU9oAA1PcAANT3wADU+AAA1PhAANT4gADU+MAA1PlAANT5wADU+gAA1PpAANT6wADU+wAA1QrAANULQADVDAAA1QyAANUNQADVDYAA1Q3AANUOAADVDkAA1Q7AANUPQADVD4AA1Q/AANUQQADVEIAA1RPAANUUAADVFEAA1RTAANUkgADVJQAA1SWAANUmAADVJsAA1ScAANUnQADVJ4AA1SfAANUoQADVKMAA1SkAANUpQADVKcAA1SoAANU5wADVOkAA1TrAANU7QADVPAAA1TxAANU8gADVPMAA1T0AANU9gADVPgAA1T5AANU+gADVPwAA1T9AANVPAADVT4AA1VAAANVQgADVUUAA1VGAANVRwADVUgAA1VJAANVSwADVU0AA1VOAANVTwADVVEAA1VSAANVkQADVZMAA1WVAANVlwADVZoAA1WbAANVnAADVZ0AA1WeAANVoAADVaIAA1WjAANVpAADVaYAA1WnAANV5gADVegAA1XqAANV7AADVe8AA1XwAANV8QADVfIAA1XzAANV9QADVfcAA1X4AANV+QADVfsAA1X8AANWIQADVkUAA1ZsAANWkAADVpMAA1aVAANWlwADVpkAA1abAANWnQADVp4AA1ahAANWrgADVr0AA1a/AANWwQADVsMAA1bFAANWxwADVskAA1bLAANW2gADVt0AA1bgAANW4wADVuYAA1bpAANW7AADVu8AA1bxAANXMAADVzIAA1c0AANXNgADVzkAA1c6AANXOwADVzwAA1c9AANXPwADV0EAA1dCAANXQwADV0UAA1dGAANXhQADV4cAA1eJAANXiwADV44AA1ePAANXkAADV5EAA1eSAANXlAADV5YAA1eXAANXmAADV5oAA1ebAANX2gADV9wAA1feAANX4AADV+MAA1fkAANX5QADV+YAA1fnAANX6QADV+sAA1fsAANX7QADV+8AA1fwAANYLwADWDEAA1g0AANYNgADWDkAA1g6AANYOwADWDwAA1g9AANYPwADWEEAA1hCAANYQwADWEUAA1hGAANYhQADWIcAA1iJAANYiwADWI4AA1iPAANYkAADWJEAA1iSAANYlAADWJYAA1iXAANYmAADWJoAA1ibAANY2gADWNwAA1jeAANY4AADWOMAA1jkAANY5QADWOYAA1jnAANY6QADWOsAA1jsAANY7QADWO8AA1jwAANZLwADWTEAA1kzAANZNQADWTgAA1k5AANZOgADWTsAA1k8AANZPgADWUAAA1lBAANZQgADWUQAA1lFAANZkAADWbMAA1nTAANZ8wADWfUAA1n3AANZ+QADWfsAA1n+AANZ/wADWgAAA1oDAANaBAADWgYAA1oHAANaCQADWgwAA1oNAANaDgADWhEAA1oSAANaFwADWiQAA1opAANaKwADWi0AA1oyAANaNQADWjgAA1o6AANaXwADWoMAA1qqAANazgADWtEAA1rTAANa1QADWtcAA1rZAANa2wADWtwAA1rfAANa7AADWv0AA1r/AANbAQADWwMAA1sFAANbBwADWwkAA1sLAANbDQADWx4AA1shAANbJAADWycAA1sqAANbLQADWzAAA1szAANbNgADWzgAA1t3AANbeQADW3sAA1t9AANbgAADW4EAA1uCAANbgwADW4QAA1uGAANbiAADW4kAA1uKAANbjAADW40AA1vMAANbzgADW9AAA1vSAANb1QADW9YAA1vXAANb2AADW9kAA1vbAANb3QADW94AA1vfAANb4QADW+IAA1whAANcIwADXCYAA1woAANcKwADXCwAA1wtAANcLgADXC8AA1wxAANcMwADXDQAA1w1AANcNwADXDgAA1xFAANcRgADXEcAA1xJAANciAADXIoAA1yMAANcjgADXJEAA1ySAANckwADXJQAA1yVAANclwADXJkAA1yaAANcmwADXJ0AA1yeAANc3QADXN8AA1zhAANc4wADXOYAA1znAANc6AADXOkAA1zqAANc7AADXO4AA1zvAANc8AADXPIAA1zzAANdMgADXTQAA102AANdOAADXTsAA108AANdPQADXT4AA10/AANdQQADXUMAA11EAANdRQADXUcAA11IAANdhwADXYkAA12LAANdjQADXZAAA12RAANdkgADXZMAA12UAANdlgADXZgAA12ZAANdmgADXZwAA12dAANd3AADXd4AA13gAANd4gADXeUAA13mAANd5wADXegAA13pAANd6wADXe0AA13uAANd7wADXfEAA13yAANeFwADXjsAA15iAANehgADXokAA16LAANejQADXo8AA16RAANekwADXpQAA16XAANepAADXrMAA161AANetwADXrkAA167AANevQADXr8AA17BAANe0AADXtMAA17WAANe2QADXtwAA17fAANe4gADXuUAA17nAANfJgADXygAA18qAANfLAADXy8AA18wAANfMQADXzIAA18zAANfNQADXzcAA184AANfOQADXzsAA188AANfewADX30AA19/AANfgQADX4QAA1+FAANfhgADX4cAA1+IAANfigADX4wAA1+NAANfjgADX5AAA1+RAANf0AADX9IAA1/UAANf1gADX9kAA1/aAANf2wADX9wAA1/dAANf3wADX+EAA1/iAANf4wADX+UAA1/mAANgJQADYCcAA2ApAANgKwADYC4AA2AvAANgMAADYDEAA2AyAANgNAADYDYAA2A3AANgOAADYDoAA2A7AANgegADYHwAA2B+AANggAADYIMAA2CEAANghQADYIYAA2CHAANgiQADYIsAA2CMAANgjQADYI8AA2CQAANgzwADYNEAA2DTAANg1QADYNgAA2DZAANg2gADYNsAA2DcAANg3gADYOAAA2DhAANg4gADYOQAA2DlAANhJAADYSYAA2EoAANhKgADYS0AA2EuAANhLwADYTAAA2ExAANhMwADYTUAA2E2AANhNwADYTkAA2E6AANhhQADYagAA2HIAANh6AADYeoAA2HsAANh7gADYfAAA2HzAANh9AADYfUAA2H4AANh+QADYfsAA2H8AANh/gADYgEAA2ICAANiAwADYgYAA2IHAANiDAADYhkAA2IeAANiIAADYiIAA2InAANiKgADYi0AA2IvAANiVAADYngAA2KfAANiwwADYsYAA2LIAANiygADYswAA2LOAANi0AADYtEAA2LUAANi4QADYvIAA2L0AANi9gADYvgAA2L6AANi/AADYv4AA2MAAANjAgADYxMAA2MWAANjGQADYxwAA2MfAANjIgADYyUAA2MoAANjKwADYy0AA2NsAANjbgADY3AAA2NyAANjdQADY3YAA2N3AANjeAADY3kAA2N7AANjfQADY34AA2N/AANjgQADY4IAA2PBAANjwwADY8UAA2PHAANjygADY8sAA2PMAANjzQADY84AA2PQAANj0gADY9MAA2PUAANj1gADY9cAA2QWAANkGAADZBsAA2QdAANkIAADZCEAA2QiAANkIwADZCQAA2QmAANkKAADZCkAA2QqAANkLAADZC0AA2Q6AANkOwADZDwAA2Q+AANkfQADZH8AA2SBAANkgwADZIYAA2SHAANkiAADZIkAA2SKAANkjAADZI4AA2SPAANkkAADZJIAA2STAANk0gADZNQAA2TWAANk2AADZNsAA2TcAANk3QADZN4AA2TfAANk4QADZOMAA2TkAANk5QADZOcAA2ToAANlJwADZSkAA2UrAANlLQADZTAAA2UxAANlMgADZTMAA2U0AANlNgADZTgAA2U5AANlOgADZTwAA2U9AANlfAADZX4AA2WAAANlggADZYUAA2WGAANlhwADZYgAA2WJAANliwADZY0AA2WOAANljwADZZEAA2WSAANl0QADZdMAA2XVAANl1wADZdoAA2XbAANl3AADZd0AA2XeAANl4AADZeIAA2XjAANl5AADZeYAA2XnAANmDAADZjAAA2ZXAANmewADZn4AA2aAAANmggADZoQAA2aGAANmiAADZokAA2aMAANmmQADZqgAA2aqAANmrAADZq4AA2awAANmsgADZrQAA2a2AANmxQADZsgAA2bLAANmzgADZtEAA2bUAANm1wADZtoAA2bcAANnGwADZx0AA2cfAANnIQADZyQAA2clAANnJgADZycAA2coAANnKgADZywAA2ctAANnLgADZzAAA2cxAANncAADZ3IAA2d0AANndgADZ3kAA2d6AANnewADZ3wAA2d9AANnfwADZ4EAA2eCAANngwADZ4UAA2eGAANnxQADZ8cAA2fJAANnywADZ84AA2fPAANn0AADZ9EAA2fSAANn1AADZ9YAA2fXAANn2AADZ9oAA2fbAANoGgADaBwAA2gfAANoIQADaCQAA2glAANoJgADaCcAA2goAANoKgADaCwAA2gtAANoLgADaDAAA2gxAANocAADaHIAA2h0AANodgADaHkAA2h6AANoewADaHwAA2h9AANofwADaIEAA2iCAANogwADaIUAA2iGAANoxQADaMcAA2jJAANoywADaM4AA2jPAANo0AADaNEAA2jSAANo1AADaNYAA2jXAANo2AADaNoAA2jbAANpGgADaRwAA2keAANpIAADaSMAA2kkAANpJQADaSYAA2knAANpKQADaSsAA2ksAANpLQADaS8AA2kwAANpewADaZ4AA2m+AANp3gADaeAAA2niAANp5AADaeYAA2npAANp6gADaesAA2nuAANp7wADafEAA2nyAANp9AADafcAA2n4AANp+QADafwAA2n9AANqAgADag8AA2oUAANqFgADahgAA2odAANqIAADaiMAA2olAANqSgADam4AA2qVAANquQADarwAA2q+AANqwAADasIAA2rEAANqxgADascAA2rKAANq1wADaugAA2rqAANq7AADau4AA2rwAANq8gADavQAA2r2AANq+AADawkAA2sMAANrDwADaxIAA2sVAANrGAADaxsAA2seAANrIQADayMAA2tiAANrZAADa2YAA2toAANrawADa2wAA2ttAANrbgADa28AA2txAANrcwADa3QAA2t1AANrdwADa3gAA2u3AANruQADa7sAA2u9AANrwAADa8EAA2vCAANrwwADa8QAA2vGAANryAADa8kAA2vKAANrzAADa80AA2wMAANsDgADbBEAA2wTAANsFgADbBcAA2wYAANsGQADbBoAA2wcAANsHgADbB8AA2wgAANsIgADbCMAA2wwAANsMQADbDIAA2w0AANscwADbHUAA2x3AANseQADbHwAA2x9AANsfgADbH8AA2yAAANsggADbIQAA2yFAANshgADbIgAA2yJAANsyAADbMoAA2zMAANszgADbNEAA2zSAANs0wADbNQAA2zVAANs1wADbNkAA2zaAANs2wADbN0AA2zeAANtHQADbR8AA20hAANtIwADbSYAA20nAANtKAADbSkAA20qAANtLAADbS4AA20vAANtMAADbTIAA20zAANtcgADbXQAA212AANteAADbXsAA218AANtfQADbX4AA21/AANtgQADbYMAA22EAANthQADbYcAA22IAANtxwADbckAA23LAANtzQADbdAAA23RAANt0gADbdMAA23UAANt1gADbdgAA23ZAANt2gADbdwAA23dAANuAgADbiYAA25NAANucQADbnQAA252AANueAADbnoAA258AANufgADbn8AA26CAANujwADbp4AA26gAANuogADbqQAA26mAANuqAADbqoAA26sAANuuwADbr4AA27BAANuxAADbscAA27KAANuzQADbtAAA27SAANvEQADbxMAA28VAANvFwADbxoAA28bAANvHAADbx0AA28eAANvIAADbyIAA28jAANvJAADbyYAA28nAANvZgADb2gAA29qAANvbAADb28AA29wAANvcQADb3IAA29zAANvdQADb3cAA294AANveQADb3sAA298AANvuwADb70AA2+/AANvwQADb8QAA2/FAANvxgADb8cAA2/IAANvygADb8wAA2/NAANvzgADb9AAA2/RAANwEAADcBIAA3AVAANwFwADcBoAA3AbAANwHAADcB0AA3AeAANwIAADcCIAA3AjAANwJAADcCYAA3AnAANwZgADcGgAA3BqAANwbAADcG8AA3BwAANwcQADcHIAA3BzAANwdQADcHcAA3B4AANweQADcHsAA3B8AANwuwADcL0AA3C/AANwwQADcMQAA3DFAANwxgADcMcAA3DIAANwygADcMwAA3DNAANwzgADcNAAA3DRAANxEAADcRIAA3EUAANxFgADcRkAA3EaAANxGwADcRwAA3EdAANxHwADcSEAA3EiAANxIwADcSUAA3EmAANxLwADcTAAA3EyAANxdQADcZkAA3G9AANx4AADcgcAA3InAANyTgADcnUAA3KVAANyuQADct0AA3LfAANy4gADcuQAA3LmAANy6AADcusAA3LuAANy8AADcvIAA3L1AANy9wADcvkAA3L8AANy/wADcwAAA3MFAANzEgADcxUAA3MXAANzGgADcx0AA3MfAANzRAADc2gAA3OPAANzswADc7YAA3O4AANzugADc7wAA3O+AANzwAADc8EAA3PEAANz0QADc+QAA3PmAANz6AADc+oAA3PsAANz7gADc/AAA3PyAANz9AADc/YAA3QJAAN0DAADdA8AA3QSAAN0FQADdBgAA3QbAAN0HgADdCEAA3QkAAN0JgADdGUAA3RnAAN0agADdGwAA3RvAAN0cAADdHEAA3RyAAN0cwADdHUAA3R3AAN0eAADdHkAA3R7AAN0fAADdIUAA3SGAAN0iAADdMcAA3TJAAN0ywADdM0AA3TQAAN00QADdNIAA3TTAAN01AADdNYAA3TYAAN02QADdNoAA3TcAAN03QADdRwAA3UeAAN1IQADdSMAA3UmAAN1JwADdSgAA3UpAAN1KgADdSwAA3UuAAN1LwADdTAAA3UyAAN1MwADdTwAA3U9AAN1PwADdX4AA3WAAAN1ggADdYQAA3WHAAN1iAADdYkAA3WKAAN1iwADdY0AA3WPAAN1kAADdZEAA3WTAAN1lAADddMAA3XVAAN12AADddoAA3XdAAN13gADdd8AA3XgAAN14QADdeMAA3XlAAN15gADdecAA3XpAAN16gADdfMAA3X0AAN19gADdjUAA3Y3AAN2OQADdjsAA3Y+AAN2PwADdkAAA3ZBAAN2QgADdkQAA3ZGAAN2RwADdkgAA3ZKAAN2SwADdooAA3aMAAN2jwADdpEAA3aUAAN2lQADdpYAA3aXAAN2mAADdpoAA3acAAN2nQADdp4AA3agAAN2oQADdq4AA3avAAN2sAADdrIAA3bxAAN28wADdvUAA3b3AAN2+gADdvsAA3b8AAN2/QADdv4AA3cAAAN3AgADdwMAA3cEAAN3BgADdwcAA3dGAAN3SAADd0sAA3dNAAN3UAADd1EAA3dSAAN3UwADd1QAA3dWAAN3WAADd1kAA3daAAN3XAADd10AA3doAAN3dQADd34AA3eAAAN3ggADd4UAA3eIAAN3kQADd5QAA3eXAAN3mgADd50AA3efAAN3pwADd68AA3f6AAN4HQADeD0AA3hdAAN4XwADeGEAA3hjAAN4ZQADeGgAA3hpAAN4agADeG0AA3huAAN4cAADeHEAA3hzAAN4dQADeHYAA3h3AAN4egADeHsAA3iAAAN4jQADeJIAA3iUAAN4lgADeJsAA3ieAAN4oQADeKMAA3jIAAN47AADeRMAA3k3AAN5OgADeTwAA3k+AAN5QAADeUIAA3lEAAN5RQADeUgAA3lVAAN5ZgADeWgAA3lqAAN5bAADeW4AA3lwAAN5cgADeXQAA3l2AAN5hwADeYoAA3mNAAN5kAADeZMAA3mWAAN5mQADeZwAA3mfAAN5oQADeeAAA3niAAN55AADeeYAA3npAAN56gADeesAA3nsAAN57QADee8AA3nxAAN58gADefMAA3n1AAN59gADejUAA3o3AAN6OQADejsAA3o+AAN6PwADekAAA3pBAAN6QgADekQAA3pGAAN6RwADekgAA3pKAAN6SwADeooAA3qMAAN6jwADepEAA3qUAAN6lQADepYAA3qXAAN6mAADepoAA3qcAAN6nQADep4AA3qgAAN6oQADeq4AA3qvAAN6sAADerIAA3rxAAN68wADevUAA3r3AAN6+gADevsAA3r8AAN6/QADev4AA3sAAAN7AgADewMAA3sEAAN7BgADewcAA3tGAAN7SAADe0oAA3tMAAN7TwADe1AAA3tRAAN7UgADe1MAA3tVAAN7VwADe1gAA3tZAAN7WwADe1wAA3ubAAN7nQADe58AA3uhAAN7pAADe6UAA3umAAN7pwADe6gAA3uqAAN7rAADe60AA3uuAAN7sAADe7EAA3vwAAN78gADe/QAA3v2AAN7+QADe/oAA3v7AAN7/AADe/0AA3v/AAN8AQADfAIAA3wDAAN8BQADfAYAA3xFAAN8RwADfEkAA3xLAAN8TgADfE8AA3xQAAN8UQADfFIAA3xUAAN8VgADfFcAA3xYAAN8WgADfFsAA3yAAAN8pAADfMsAA3zvAAN88gADfPQAA3z2AAN8+AADfPoAA3z8AAN8/QADfQAAA30NAAN9HAADfR4AA30gAAN9IgADfSQAA30mAAN9KAADfSoAA305AAN9PAADfT8AA31CAAN9RQADfUgAA31LAAN9TgADfVAAA32PAAN9kQADfZMAA32VAAN9mAADfZkAA32aAAN9mwADfZwAA32eAAN9oAADfaEAA32iAAN9pAADfaUAA33kAAN95gADfegAA33qAAN97QADfe4AA33vAAN98AADffEAA33zAAN99QADffYAA333AAN9+QADffoAA345AAN+OwADfj0AA34/AAN+QgADfkMAA35EAAN+RQADfkYAA35IAAN+SgADfksAA35MAAN+TgADfk8AA36OAAN+kAADfpIAA36UAAN+lwADfpgAA36ZAAN+mgADfpsAA36dAAN+nwADfqAAA36hAAN+owADfqQAA37jAAN+5QADfucAA37pAAN+7AADfu0AA37uAAN+7wADfvAAA37yAAN+9AADfvUAA372AAN++AADfvkAA384AAN/OgADfzwAA38+AAN/QQADf0IAA39DAAN/RAADf0UAA39HAAN/SQADf0oAA39LAAN/TQADf04AA3+NAAN/jwADf5EAA3+TAAN/lgADf5cAA3+YAAN/mQADf5oAA3+cAAN/ngADf58AA3+gAAN/ogADf6MAA3/uAAOAEQADgDEAA4BRAAOAUwADgFUAA4BXAAOAWQADgFwAA4BdAAOAXgADgGEAA4BiAAOAZAADgGUAA4BnAAOAaQADgGoAA4BrAAOAbgADgG8AA4B4AAOAhQADgIoAA4CMAAOAjgADgJMAA4CWAAOAmQADgJsAA4DAAAOA5AADgQsAA4EvAAOBMgADgTQAA4E2AAOBOAADgToAA4E8AAOBPQADgUAAA4FNAAOBXgADgWAAA4FiAAOBZAADgWYAA4FoAAOBagADgWwAA4FuAAOBfwADgYIAA4GFAAOBiAADgYsAA4GOAAOBkQADgZQAA4GXAAOBmQADgdgAA4HaAAOB3AADgd4AA4HhAAOB4gADgeMAA4HkAAOB5QADgecAA4HpAAOB6gADgesAA4HtAAOB7gADgi0AA4IvAAOCMQADgjMAA4I2AAOCNwADgjgAA4I5AAOCOgADgjwAA4I+AAOCPwADgkAAA4JCAAOCQwADgoIAA4KEAAOChwADgokAA4KMAAOCjQADgo4AA4KPAAOCkAADgpIAA4KUAAOClQADgpYAA4KYAAOCmQADgqYAA4KnAAOCqAADgqoAA4LpAAOC6wADgu0AA4LvAAOC8gADgvMAA4L0AAOC9QADgvYAA4L4AAOC+gADgvsAA4L8AAOC/gADgv8AA4M+AAODQAADg0IAA4NEAAODRwADg0gAA4NJAAODSgADg0sAA4NNAAODTwADg1AAA4NRAAODUwADg1QAA4OTAAODlQADg5cAA4OZAAODnAADg50AA4OeAAODnwADg6AAA4OiAAODpAADg6UAA4OmAAODqAADg6kAA4PoAAOD6gADg+wAA4PuAAOD8QADg/IAA4PzAAOD9AADg/UAA4P3AAOD+QADg/oAA4P7AAOD/QADg/4AA4Q9AAOEPwADhEEAA4RDAAOERgADhEcAA4RIAAOESQADhEoAA4RMAAOETgADhE8AA4RQAAOEUgADhFMAA4R4AAOEnAADhMMAA4TnAAOE6gADhOwAA4TuAAOE8AADhPIAA4T0AAOE9QADhPgAA4UFAAOFFAADhRYAA4UYAAOFGgADhRwAA4UeAAOFIAADhSIAA4UxAAOFNAADhTcAA4U6AAOFPQADhUAAA4VDAAOFRgADhUgAA4WHAAOFiQADhYsAA4WNAAOFkAADhZEAA4WSAAOFkwADhZQAA4WWAAOFmAADhZkAA4WaAAOFnAADhZ0AA4XcAAOF3gADheAAA4XiAAOF5QADheYAA4XnAAOF6AADhekAA4XrAAOF7QADhe4AA4XvAAOF8QADhfIAA4YxAAOGMwADhjUAA4Y3AAOGOgADhjsAA4Y8AAOGPQADhj4AA4ZAAAOGQgADhkMAA4ZEAAOGRgADhkcAA4aGAAOGiAADhooAA4aMAAOGjwADhpAAA4aRAAOGkgADhpMAA4aVAAOGlwADhpgAA4aZAAOGmwADhpwAA4bbAAOG3QADht8AA4bhAAOG5AADhuUAA4bmAAOG5wADhugAA4bqAAOG7AADhu0AA4buAAOG8AADhvEAA4cwAAOHMgADhzQAA4c2AAOHOQADhzoAA4c7AAOHPAADhz0AA4c/AAOHQQADh0IAA4dDAAOHRQADh0YAA4eFAAOHhwADh4kAA4eLAAOHjgADh48AA4eQAAOHkQADh5IAA4eUAAOHlgADh5cAA4eYAAOHmgADh5sAA4fmAAOICQADiCkAA4hJAAOISwADiE0AA4hPAAOIUQADiFQAA4hVAAOIVgADiFkAA4haAAOIXAADiF0AA4hfAAOIYgADiGMAA4hkAAOIZwADiGgAA4htAAOIegADiH8AA4iBAAOIgwADiIgAA4iLAAOIjgADiJAAA4i1AAOI2QADiQAAA4kkAAOJJwADiSkAA4krAAOJLQADiS8AA4kxAAOJMgADiTUAA4lCAAOJUwADiVUAA4lXAAOJWQADiVsAA4ldAAOJXwADiWEAA4ljAAOJdAADiXcAA4l6AAOJfQADiYAAA4mDAAOJhgADiYkAA4mMAAOJjgADic0AA4nPAAOJ0QADidMAA4nWAAOJ1wADidgAA4nZAAOJ2gADidwAA4neAAOJ3wADieAAA4niAAOJ4wADiiIAA4okAAOKJgADiigAA4orAAOKLAADii0AA4ouAAOKLwADijEAA4ozAAOKNAADijUAA4o3AAOKOAADincAA4p5AAOKfAADin4AA4qBAAOKggADioMAA4qEAAOKhQADiocAA4qJAAOKigADiosAA4qNAAOKjgADipsAA4qcAAOKnQADip8AA4reAAOK4AADiuIAA4rkAAOK5wADiugAA4rpAAOK6gADiusAA4rtAAOK7wADivAAA4rxAAOK8wADivQAA4szAAOLNQADizcAA4s5AAOLPAADiz0AA4s+AAOLPwADi0AAA4tCAAOLRAADi0UAA4tGAAOLSAADi0kAA4uIAAOLigADi4wAA4uOAAOLkQADi5IAA4uTAAOLlAADi5UAA4uXAAOLmQADi5oAA4ubAAOLnQADi54AA4vdAAOL3wADi+EAA4vjAAOL5gADi+cAA4voAAOL6QADi+oAA4vsAAOL7gADi+8AA4vwAAOL8gADi/MAA4wyAAOMNAADjDYAA4w4AAOMOwADjDwAA4w9AAOMPgADjD8AA4xBAAOMQwADjEQAA4xFAAOMRwADjEgAA4xtAAOMkQADjLgAA4zcAAOM3wADjOEAA4zjAAOM5QADjOcAA4zpAAOM6gADjO0AA4z6AAONCQADjQsAA40NAAONDwADjREAA40TAAONFQADjRcAA40mAAONKQADjSwAA40vAAONMgADjTUAA404AAONOwADjT0AA418AAONfgADjYAAA42CAAONhQADjYYAA42HAAONiAADjYkAA42LAAONjQADjY4AA42PAAONkQADjZIAA43RAAON0wADjdUAA43XAAON2gADjdsAA43cAAON3QADjd4AA43gAAON4gADjeMAA43kAAON5gADjecAA44mAAOOKAADjioAA44sAAOOLwADjjAAA44xAAOOMgADjjMAA441AAOONwADjjgAA445AAOOOwADjjwAA457AAOOfQADjn8AA46BAAOOhAADjoUAA46GAAOOhwADjogAA46KAAOOjAADjo0AA46OAAOOkAADjpEAA47QAAOO0gADjtQAA47WAAOO2QADjtoAA47bAAOO3AADjt0AA47fAAOO4QADjuIAA47jAAOO5QADjuYAA48lAAOPJwADjykAA48rAAOPLgADjy8AA48wAAOPMQADjzIAA480AAOPNgADjzcAA484AAOPOgADjzsAA496AAOPfAADj34AA4+AAAOPgwADj4QAA4+FAAOPhgADj4cAA4+JAAOPiwADj4wAA4+NAAOPjwADj5AAA4/bAAOP/gADkB4AA5A+AAOQQAADkEIAA5BEAAOQRgADkEkAA5BKAAOQSwADkE4AA5BPAAOQUQADkFIAA5BUAAOQVwADkFgAA5BZAAOQXAADkF0AA5BmAAOQcwADkHgAA5B6AAOQfAADkIEAA5CEAAOQhwADkIkAA5CuAAOQ0gADkPkAA5EdAAORIAADkSIAA5EkAAORJgADkSgAA5EqAAORKwADkS4AA5E7AAORTAADkU4AA5FQAAORUgADkVQAA5FWAAORWAADkVoAA5FcAAORbQADkXAAA5FzAAORdgADkXkAA5F8AAORfwADkYIAA5GFAAORhwADkcYAA5HIAAORygADkcwAA5HPAAOR0AADkdEAA5HSAAOR0wADkdUAA5HXAAOR2AADkdkAA5HbAAOR3AADkhsAA5IdAAOSHwADkiEAA5IkAAOSJQADkiYAA5InAAOSKAADkioAA5IsAAOSLQADki4AA5IwAAOSMQADknAAA5JyAAOSdQADkncAA5J6AAOSewADknwAA5J9AAOSfgADkoAAA5KCAAOSgwADkoQAA5KGAAOShwADkpQAA5KVAAOSlgADkpgAA5LXAAOS2QADktsAA5LdAAOS4AADkuEAA5LiAAOS4wADkuQAA5LmAAOS6AADkukAA5LqAAOS7AADku0AA5MsAAOTLgADkzAAA5MyAAOTNQADkzYAA5M3AAOTOAADkzkAA5M7AAOTPQADkz4AA5M/AAOTQQADk0IAA5OBAAOTgwADk4UAA5OHAAOTigADk4sAA5OMAAOTjQADk44AA5OQAAOTkgADk5MAA5OUAAOTlgADk5cAA5PWAAOT2AADk9oAA5PcAAOT3wADk+AAA5PhAAOT4gADk+MAA5PlAAOT5wADk+gAA5PpAAOT6wADk+wAA5QrAAOULQADlC8AA5QxAAOUNAADlDUAA5Q2AAOUNwADlDgAA5Q6AAOUPAADlD0AA5Q+AAOUQAADlEEAA5RmAAOUigADlLEAA5TVAAOU2AADlNoAA5TcAAOU3gADlOAAA5TiAAOU4wADlOYAA5TzAAOVAgADlQQAA5UGAAOVCAADlQoAA5UMAAOVDgADlRAAA5UfAAOVIgADlSUAA5UoAAOVKwADlS4AA5UxAAOVNAADlTYAA5V1AAOVdwADlXkAA5V7AAOVfgADlX8AA5WAAAOVgQADlYIAA5WEAAOVhgADlYcAA5WIAAOVigADlYsAA5XKAAOVzAADlc4AA5XQAAOV0wADldQAA5XVAAOV1gADldcAA5XZAAOV2wADldwAA5XdAAOV3wADleAAA5YfAAOWIQADliMAA5YlAAOWKAADlikAA5YqAAOWKwADliwAA5YuAAOWMAADljEAA5YyAAOWNAADljUAA5Z0AAOWdgADlngAA5Z6AAOWfQADln4AA5Z/AAOWgAADloEAA5aDAAOWhQADloYAA5aHAAOWiQADlooAA5bJAAOWywADls0AA5bPAAOW0gADltMAA5bUAAOW1QADltYAA5bYAAOW2gADltsAA5bcAAOW3gADlt8AA5ceAAOXIAADlyIAA5ckAAOXJwADlygAA5cpAAOXKgADlysAA5ctAAOXLwADlzAAA5cxAAOXMwADlzQAA5dzAAOXdQADl3cAA5d5AAOXfAADl30AA5d+AAOXfwADl4AAA5eCAAOXhAADl4UAA5eGAAOXiAADl4kAA5eSAAOXkwADl5UAA5fYAAOX/AADmCAAA5hDAAOYagADmIoAA5ixAAOY2AADmPgAA5kcAAOZQAADmUIAA5lFAAOZRwADmUkAA5lLAAOZTgADmVEAA5lTAAOZVQADmVgAA5laAAOZXAADmV8AA5liAAOZYwADmWgAA5l1AAOZeAADmXoAA5l9AAOZgAADmYIAA5mnAAOZywADmfIAA5oWAAOaGQADmhsAA5odAAOaHwADmiEAA5ojAAOaJAADmicAA5o0AAOaRwADmkkAA5pLAAOaTQADmk8AA5pRAAOaUwADmlUAA5pXAAOaWQADmmwAA5pvAAOacgADmnUAA5p4AAOaewADmn4AA5qBAAOahAADmocAA5qJAAOayAADmsoAA5rNAAOazwADmtIAA5rTAAOa1AADmtUAA5rWAAOa2AADmtoAA5rbAAOa3AADmt4AA5rfAAOa6AADmukAA5rrAAObKgADmywAA5suAAObMAADmzMAA5s0AAObNQADmzYAA5s3AAObOQADmzsAA5s8AAObPQADmz8AA5tAAAObfwADm4EAA5uEAAObhgADm4kAA5uKAAObiwADm4wAA5uNAAObjwADm5EAA5uSAAObkwADm5UAA5uWAAObnwADm6AAA5uiAAOb4QADm+MAA5vlAAOb5wADm+oAA5vrAAOb7AADm+0AA5vuAAOb8AADm/IAA5vzAAOb9AADm/YAA5v3AAOcNgADnDgAA5w7AAOcPQADnEAAA5xBAAOcQgADnEMAA5xEAAOcRgADnEgAA5xJAAOcSgADnEwAA5xNAAOcVgADnFcAA5xZAAOcmAADnJoAA5ycAAOcngADnKEAA5yiAAOcowADnKQAA5ylAAOcpwADnKkAA5yqAAOcqwADnK0AA5yuAAOc7QADnO8AA5zyAAOc9AADnPcAA5z4AAOc+QADnPoAA5z7AAOc/QADnP8AA50AAAOdAQADnQMAA50EAAOdEQADnRIAA50TAAOdFQADnVQAA51WAAOdWAADnVoAA51dAAOdXgADnV8AA51gAAOdYQADnWMAA51lAAOdZgADnWcAA51pAAOdagADnakAA52rAAOdrgADnbAAA52zAAOdtAADnbUAA522AAOdtwADnbkAA527AAOdvAADnb0AA52/AAOdwAADndsAA53oAAOd/wADngIAA54FAAOeCAADngsAA54OAAOeEQADnhQAA54XAAOeGgADnh0AA54gAAOeNwADnjoAA549AAOeQAADnkMAA55GAAOeSQADnkwAA55PAAOeUgADnlUAA55YAAOeWgADnmEAA55oAAOecQADnnYAA56BAAOejQADnpYAA56aAAOepAADnqwAA573AAOfGgADnzoAA59aAAOfXAADn14AA59gAAOfYgADn2UAA59mAAOfZwADn2oAA59rAAOfbQADn24AA59wAAOfcwADn3QAA591AAOfeAADn3kAA59+AAOfiwADn5AAA5+SAAOflAADn5kAA5+cAAOfnwADn6EAA5/GAAOf6gADoBEAA6A1AAOgOAADoDoAA6A8AAOgPgADoEAAA6BCAAOgQwADoEYAA6BTAAOgZAADoGYAA6BoAAOgagADoGwAA6BuAAOgcAADoHIAA6B0AAOghQADoIgAA6CLAAOgjgADoJEAA6CUAAOglwADoJoAA6CdAAOgnwADoN4AA6DgAAOg4gADoOQAA6DnAAOg6AADoOkAA6DqAAOg6wADoO0AA6DvAAOg8AADoPEAA6DzAAOg9AADoTMAA6E1AAOhNwADoTkAA6E8AAOhPQADoT4AA6E/AAOhQAADoUIAA6FEAAOhRQADoUYAA6FIAAOhSQADoYgAA6GKAAOhjQADoY8AA6GSAAOhkwADoZQAA6GVAAOhlgADoZgAA6GaAAOhmwADoZwAA6GeAAOhnwADoawAA6GtAAOhrgADobAAA6HvAAOh8QADofMAA6H1AAOh+AADofkAA6H6AAOh+wADofwAA6H+AAOiAAADogEAA6ICAAOiBAADogUAA6JEAAOiRgADokgAA6JKAAOiTQADok4AA6JPAAOiUAADolEAA6JTAAOiVQADolYAA6JXAAOiWQADoloAA6KZAAOimwADop0AA6KfAAOiogADoqMAA6KkAAOipQADoqYAA6KoAAOiqgADoqsAA6KsAAOirgADoq8AA6LuAAOi8AADovIAA6L0AAOi9wADovgAA6L5AAOi+gADovsAA6L9AAOi/wADowAAA6MBAAOjAwADowQAA6NDAAOjRQADo0cAA6NJAAOjTAADo00AA6NOAAOjTwADo1AAA6NSAAOjVAADo1UAA6NWAAOjWAADo1kAA6N+AAOjogADo8kAA6PtAAOj8AADo/IAA6P0AAOj9gADo/gAA6P6AAOj+wADo/4AA6QLAAOkGgADpBwAA6QeAAOkIAADpCIAA6QkAAOkJgADpCgAA6Q3AAOkOgADpD0AA6RAAAOkQwADpEYAA6RJAAOkTAADpE4AA6SNAAOkjwADpJEAA6STAAOklgADpJcAA6SYAAOkmQADpJoAA6ScAAOkngADpJ8AA6SgAAOkogADpKMAA6TiAAOk5AADpOYAA6ToAAOk6wADpOwAA6TtAAOk7gADpO8AA6TxAAOk8wADpPQAA6T1AAOk9wADpPgAA6U3AAOlOQADpTsAA6U9AAOlQAADpUEAA6VCAAOlQwADpUQAA6VGAAOlSAADpUkAA6VKAAOlTAADpU0AA6WMAAOljgADpZAAA6WSAAOllQADpZYAA6WXAAOlmAADpZkAA6WbAAOlnQADpZ4AA6WfAAOloQADpaIAA6XhAAOl4wADpeUAA6XnAAOl6gADpesAA6XsAAOl7QADpe4AA6XwAAOl8gADpfMAA6X0AAOl9gADpfcAA6Y2AAOmOAADpjoAA6Y8AAOmPwADpkAAA6ZBAAOmQgADpkMAA6ZFAAOmRwADpkgAA6ZJAAOmSwADpkwAA6aLAAOmjQADpo8AA6aRAAOmlAADppUAA6aWAAOmlwADppgAA6aaAAOmnAADpp0AA6aeAAOmoAADpqEAA6bsAAOnDwADpy8AA6dPAAOnUQADp1MAA6dVAAOnVwADp1oAA6dbAAOnXAADp18AA6dgAAOnYgADp2MAA6dlAAOnaAADp2kAA6dqAAOnbQADp24AA6dzAAOngAADp4UAA6eHAAOniQADp44AA6eRAAOnlAADp5YAA6e7AAOn3wADqAYAA6gqAAOoLQADqC8AA6gxAAOoMwADqDUAA6g3AAOoOAADqDsAA6hIAAOoWQADqFsAA6hdAAOoXwADqGEAA6hjAAOoZQADqGcAA6hpAAOoegADqH0AA6iAAAOogwADqIYAA6iJAAOojAADqI8AA6iSAAOolAADqNMAA6jVAAOo1wADqNkAA6jcAAOo3QADqN4AA6jfAAOo4AADqOIAA6jkAAOo5QADqOYAA6joAAOo6QADqSgAA6kqAAOpLAADqS4AA6kxAAOpMgADqTMAA6k0AAOpNQADqTcAA6k5AAOpOgADqTsAA6k9AAOpPgADqX0AA6l/AAOpggADqYQAA6mHAAOpiAADqYkAA6mKAAOpiwADqY0AA6mPAAOpkAADqZEAA6mTAAOplAADqaEAA6miAAOpowADqaUAA6nkAAOp5gADqegAA6nqAAOp7QADqe4AA6nvAAOp8AADqfEAA6nzAAOp9QADqfYAA6n3AAOp+QADqfoAA6o5AAOqOwADqj0AA6o/AAOqQgADqkMAA6pEAAOqRQADqkYAA6pIAAOqSgADqksAA6pMAAOqTgADqk8AA6qOAAOqkAADqpIAA6qUAAOqlwADqpgAA6qZAAOqmgADqpsAA6qdAAOqnwADqqAAA6qhAAOqowADqqQAA6rjAAOq5QADqucAA6rpAAOq7AADqu0AA6ruAAOq7wADqvAAA6ryAAOq9AADqvUAA6r2AAOq+AADqvkAA6s4AAOrOgADqzwAA6s+AAOrQQADq0IAA6tDAAOrRAADq0UAA6tHAAOrSQADq0oAA6tLAAOrTQADq04AA6tzAAOrlwADq74AA6viAAOr5QADq+cAA6vpAAOr6wADq+0AA6vvAAOr8AADq/MAA6wAAAOsDwADrBEAA6wTAAOsFQADrBcAA6wZAAOsGwADrB0AA6wsAAOsLwADrDIAA6w1AAOsOAADrDsAA6w+AAOsQQADrEMAA6yCAAOshAADrIYAA6yIAAOsiwADrIwAA6yNAAOsjgADrI8AA6yRAAOskwADrJQAA6yVAAOslwADrJgAA6zXAAOs2QADrNsAA6zdAAOs4AADrOEAA6ziAAOs4wADrOQAA6zmAAOs6AADrOkAA6zqAAOs7AADrO0AA60sAAOtLgADrTAAA60yAAOtNQADrTYAA603AAOtOAADrTkAA607AAOtPQADrT4AA60/AAOtQQADrUIAA62BAAOtgwADrYUAA62HAAOtigADrYsAA62MAAOtjQADrY4AA62QAAOtkgADrZMAA62UAAOtlgADrZcAA63WAAOt2AADrdoAA63cAAOt3wADreAAA63hAAOt4gADreMAA63lAAOt5wADregAA63pAAOt6wADrewAA64rAAOuLQADri8AA64xAAOuNAADrjUAA642AAOuNwADrjgAA646AAOuPAADrj0AA64+AAOuQAADrkEAA66AAAOuggADroQAA66GAAOuiQADrooAA66LAAOujAADro0AA66PAAOukQADrpIAA66TAAOulQADrpYAA67hAAOvBAADryQAA69EAAOvRgADr0gAA69KAAOvTAADr08AA69QAAOvUQADr1QAA69VAAOvVwADr1gAA69aAAOvXQADr14AA69fAAOvYgADr2MAA69oAAOvdQADr3oAA698AAOvfgADr4MAA6+GAAOviQADr4sAA6+wAAOv1AADr/sAA7AfAAOwIgADsCQAA7AmAAOwKAADsCoAA7AsAAOwLQADsDAAA7A9AAOwTgADsFAAA7BSAAOwVAADsFYAA7BYAAOwWgADsFwAA7BeAAOwbwADsHIAA7B1AAOweAADsHsAA7B+AAOwgQADsIQAA7CHAAOwiQADsMgAA7DKAAOwzAADsM4AA7DRAAOw0gADsNMAA7DUAAOw1QADsNcAA7DZAAOw2gADsNsAA7DdAAOw3gADsR0AA7EfAAOxIQADsSMAA7EmAAOxJwADsSgAA7EpAAOxKgADsSwAA7EuAAOxLwADsTAAA7EyAAOxMwADsXIAA7F0AAOxdwADsXkAA7F8AAOxfQADsX4AA7F/AAOxgAADsYIAA7GEAAOxhQADsYYAA7GIAAOxiQADsZYAA7GXAAOxmAADsZoAA7HZAAOx2wADsd0AA7HfAAOx4gADseMAA7HkAAOx5QADseYAA7HoAAOx6gADsesAA7HsAAOx7gADse8AA7IuAAOyMAADsjIAA7I0AAOyNwADsjgAA7I5AAOyOgADsjsAA7I9AAOyPwADskAAA7JBAAOyQwADskQAA7KDAAOyhQADsocAA7KJAAOyjAADso0AA7KOAAOyjwADspAAA7KSAAOylAADspUAA7KWAAOymAADspkAA7LYAAOy2gADstwAA7LeAAOy4QADsuIAA7LjAAOy5AADsuUAA7LnAAOy6QADsuoAA7LrAAOy7QADsu4AA7MtAAOzLwADszEAA7MzAAOzNgADszcAA7M4AAOzOQADszoAA7M8AAOzPgADsz8AA7NAAAOzQgADs0MAA7NoAAOzjAADs7MAA7PXAAOz2gADs9wAA7PeAAOz4AADs+IAA7PkAAOz5QADs+gAA7P1AAO0BAADtAYAA7QIAAO0CgADtAwAA7QOAAO0EAADtBIAA7QhAAO0JAADtCcAA7QqAAO0LQADtDAAA7QzAAO0NgADtDgAA7R3AAO0eQADtHsAA7R9AAO0gAADtIEAA7SCAAO0gwADtIQAA7SGAAO0iAADtIkAA7SKAAO0jAADtI0AA7TMAAO0zgADtNAAA7TSAAO01QADtNYAA7TXAAO02AADtNkAA7TbAAO03QADtN4AA7TfAAO04QADtOIAA7UhAAO1IwADtSUAA7UnAAO1KgADtSsAA7UsAAO1LQADtS4AA7UwAAO1MgADtTMAA7U0AAO1NgADtTcAA7V2AAO1eAADtXoAA7V8AAO1fwADtYAAA7WBAAO1ggADtYMAA7WFAAO1hwADtYgAA7WJAAO1iwADtYwAA7XLAAO1zQADtc8AA7XRAAO11AADtdUAA7XWAAO11wADtdgAA7XaAAO13AADtd0AA7XeAAO14AADteEAA7YgAAO2IgADtiQAA7YmAAO2KQADtioAA7YrAAO2LAADti0AA7YvAAO2MQADtjIAA7YzAAO2NQADtjYAA7Z1AAO2dwADtnkAA7Z7AAO2fgADtn8AA7aAAAO2gQADtoIAA7aEAAO2hgADtocAA7aIAAO2igADtosAA7bWAAO2+QADtxkAA7c5AAO3OwADtz0AA7c/AAO3QQADt0QAA7dFAAO3RgADt0kAA7dKAAO3TAADt00AA7dPAAO3UgADt1MAA7dUAAO3VwADt1gAA7ddAAO3agADt28AA7dxAAO3cwADt3gAA7d7AAO3fgADt4AAA7elAAO3yQADt/AAA7gUAAO4FwADuBkAA7gbAAO4HQADuB8AA7ghAAO4IgADuCUAA7gyAAO4QwADuEUAA7hHAAO4SQADuEsAA7hNAAO4TwADuFEAA7hTAAO4ZAADuGcAA7hqAAO4bQADuHAAA7hzAAO4dgADuHkAA7h8AAO4fgADuL0AA7i/AAO4wQADuMMAA7jGAAO4xwADuMgAA7jJAAO4ygADuMwAA7jOAAO4zwADuNAAA7jSAAO40wADuRIAA7kUAAO5FgADuRgAA7kbAAO5HAADuR0AA7keAAO5HwADuSEAA7kjAAO5JAADuSUAA7knAAO5KAADuWcAA7lpAAO5bAADuW4AA7lxAAO5cgADuXMAA7l0AAO5dQADuXcAA7l5AAO5egADuXsAA7l9AAO5fgADuYsAA7mMAAO5jQADuY8AA7nOAAO50AADudIAA7nUAAO51wADudgAA7nZAAO52gADudsAA7ndAAO53wADueAAA7nhAAO54wADueQAA7ojAAO6JQADuicAA7opAAO6LAADui0AA7ouAAO6LwADujAAA7oyAAO6NAADujUAA7o2AAO6OAADujkAA7p4AAO6egADunwAA7p+AAO6gQADuoIAA7qDAAO6hAADuoUAA7qHAAO6iQADuooAA7qLAAO6jQADuo4AA7rNAAO6zwADutEAA7rTAAO61gADutcAA7rYAAO62QADutoAA7rcAAO63gADut8AA7rgAAO64gADuuMAA7siAAO7JAADuyYAA7soAAO7KwADuywAA7stAAO7LgADuy8AA7sxAAO7MwADuzQAA7s1AAO7NwADuzgAA7tdAAO7gQADu6gAA7vMAAO7zwADu9EAA7vTAAO71QADu9cAA7vZAAO72gADu90AA7vqAAO7+QADu/sAA7v9AAO7/wADvAEAA7wDAAO8BQADvAcAA7wWAAO8GQADvBwAA7wfAAO8IgADvCUAA7woAAO8KwADvC0AA7xsAAO8bgADvHAAA7xyAAO8dQADvHYAA7x3AAO8eAADvHkAA7x7AAO8fQADvH4AA7x/AAO8gQADvIIAA7zBAAO8wwADvMUAA7zHAAO8ygADvMsAA7zMAAO8zQADvM4AA7zQAAO80gADvNMAA7zUAAO81gADvNcAA70WAAO9GAADvRoAA70cAAO9HwADvSAAA70hAAO9IgADvSMAA70lAAO9JwADvSgAA70pAAO9KwADvSwAA71rAAO9bQADvXAAA71yAAO9dQADvXYAA713AAO9eAADvXkAA717AAO9fQADvX4AA71/AAO9gQADvYIAA73BAAO9wwADvcUAA73HAAO9ygADvcsAA73MAAO9zQADvc4AA73QAAO90gADvdMAA73UAAO91gADvdcAA74WAAO+GAADvhoAA74cAAO+HwADviAAA74hAAO+IgADviMAA74lAAO+JwADvigAA74pAAO+KwADviwAA75rAAO+bQADvm8AA75xAAO+dAADvnUAA752AAO+dwADvngAA756AAO+fAADvn0AA75+AAO+gAADvoEAA77MAAO+7wADvw8AA78vAAO/MQADvzMAA781AAO/NwADvzoAA787AAO/PAADvz8AA79AAAO/QgADv0MAA79FAAO/SAADv0kAA79KAAO/TQADv04AA79TAAO/YAADv2UAA79nAAO/aQADv24AA79xAAO/dAADv3YAA7+bAAO/vwADv+YAA8AKAAPADQADwA8AA8ARAAPAEwADwBUAA8AXAAPAGAADwBsAA8AoAAPAOQADwDsAA8A9AAPAPwADwEEAA8BDAAPARQADwEcAA8BJAAPAWgADwF0AA8BgAAPAYwADwGYAA8BpAAPAbAADwG8AA8ByAAPAdAADwLMAA8C1AAPAtwADwLkAA8C8AAPAvQADwL4AA8C/AAPAwAADwMIAA8DEAAPAxQADwMYAA8DIAAPAyQADwQgAA8EKAAPBDAADwQ4AA8ERAAPBEgADwRMAA8EUAAPBFQADwRcAA8EZAAPBGgADwRsAA8EdAAPBHgADwV0AA8FfAAPBYgADwWQAA8FnAAPBaAADwWkAA8FqAAPBawADwW0AA8FvAAPBcAADwXEAA8FzAAPBdAADwYEAA8GCAAPBgwADwYUAA8HEAAPBxgADwcgAA8HKAAPBzQADwc4AA8HPAAPB0AADwdEAA8HTAAPB1QADwdYAA8HXAAPB2QADwdoAA8IZAAPCGwADwh0AA8IfAAPCIgADwiMAA8IkAAPCJQADwiYAA8IoAAPCKgADwisAA8IsAAPCLgADwi8AA8JuAAPCcAADwnIAA8J0AAPCdwADwngAA8J5AAPCegADwnsAA8J9AAPCfwADwoAAA8KBAAPCgwADwoQAA8LDAAPCxQADwscAA8LJAAPCzAADws0AA8LOAAPCzwADwtAAA8LSAAPC1AADwtUAA8LWAAPC2AADwtkAA8MYAAPDGgADwxwAA8MeAAPDIQADwyIAA8MjAAPDJAADwyUAA8MnAAPDKQADwyoAA8MrAAPDLQADwy4AA8NTAAPDdwADw54AA8PCAAPDxQADw8cAA8PJAAPDywADw80AA8PPAAPD0AADw9MAA8PgAAPD7wADw/EAA8PzAAPD9QADw/cAA8P5AAPD+wADw/0AA8QMAAPEDwADxBIAA8QVAAPEGAADxBsAA8QeAAPEIQADxCMAA8RiAAPEZAADxGYAA8RoAAPEawADxGwAA8RtAAPEbgADxG8AA8RxAAPEcwADxHQAA8R1AAPEdwADxHgAA8S3AAPEuQADxLsAA8S9AAPEwAADxMEAA8TCAAPEwwADxMQAA8TGAAPEyAADxMkAA8TKAAPEzAADxM0AA8UMAAPFDgADxRAAA8USAAPFFQADxRYAA8UXAAPFGAADxRkAA8UbAAPFHQADxR4AA8UfAAPFIQADxSIAA8VhAAPFYwADxWUAA8VnAAPFagADxWsAA8VsAAPFbQADxW4AA8VwAAPFcgADxXMAA8V0AAPFdgADxXcAA8W2AAPFuAADxboAA8W8AAPFvwADxcAAA8XBAAPFwgADxcMAA8XFAAPFxwADxcgAA8XJAAPFywADxcwAA8YLAAPGDQADxg8AA8YRAAPGFAADxhUAA8YWAAPGFwADxhgAA8YaAAPGHAADxh0AA8YeAAPGIAADxiEAA8ZgAAPGYgADxmQAA8ZmAAPGaQADxmoAA8ZrAAPGbAADxm0AA8ZvAAPGcQADxnIAA8ZzAAPGdQADxnYAA8bBAAPG5AADxwQAA8ckAAPHJgADxygAA8cqAAPHLAADxy8AA8cwAAPHMQADxzQAA8c1AAPHNwADxzgAA8c6AAPHPQADxz4AA8c/AAPHQgADx0MAA8dIAAPHVQADx1oAA8dcAAPHXgADx2MAA8dmAAPHaQADx2sAA8eQAAPHtAADx9sAA8f/AAPIAgADyAQAA8gGAAPICAADyAoAA8gMAAPIDQADyBAAA8gdAAPILgADyDAAA8gyAAPINAADyDYAA8g4AAPIOgADyDwAA8g+AAPITwADyFIAA8hVAAPIWAADyFsAA8heAAPIYQADyGQAA8hnAAPIaQADyKgAA8iqAAPIrAADyK4AA8ixAAPIsgADyLMAA8i0AAPItQADyLcAA8i5AAPIugADyLsAA8i9AAPIvgADyP0AA8j/AAPJAQADyQMAA8kGAAPJBwADyQgAA8kJAAPJCgADyQwAA8kOAAPJDwADyRAAA8kSAAPJEwADyVIAA8lUAAPJVwADyVkAA8lcAAPJXQADyV4AA8lfAAPJYAADyWIAA8lkAAPJZQADyWYAA8loAAPJaQADyXYAA8l3AAPJeAADyXoAA8m5AAPJuwADyb0AA8m/AAPJwgADycMAA8nEAAPJxQADycYAA8nIAAPJygADycsAA8nMAAPJzgADyc8AA8oOAAPKEAADyhIAA8oUAAPKFwADyhgAA8oZAAPKGgADyhsAA8odAAPKHwADyiAAA8ohAAPKIwADyiQAA8pjAAPKZQADymcAA8ppAAPKbAADym0AA8puAAPKbwADynAAA8pyAAPKdAADynUAA8p2AAPKeAADynkAA8q4AAPKugADyrwAA8q+AAPKwQADysIAA8rDAAPKxAADysUAA8rHAAPKyQADysoAA8rLAAPKzQADys4AA8sNAAPLDwADyxEAA8sTAAPLFgADyxcAA8sYAAPLGQADyxoAA8scAAPLHgADyx8AA8sgAAPLIgADyyMAA8tIAAPLbAADy5MAA8u3AAPLugADy7wAA8u+AAPLwAADy8IAA8vEAAPLxQADy8gAA8vVAAPL5AADy+YAA8voAAPL6gADy+wAA8vuAAPL8AADy/IAA8wBAAPMBAADzAcAA8wKAAPMDQADzBAAA8wTAAPMFgADzBgAA8xXAAPMWQADzFsAA8xdAAPMYAADzGEAA8xiAAPMYwADzGQAA8xmAAPMaAADzGkAA8xqAAPMbAADzG0AA8ysAAPMrgADzLAAA8yyAAPMtQADzLYAA8y3AAPMuAADzLkAA8y7AAPMvQADzL4AA8y/AAPMwQADzMIAA80BAAPNAwADzQUAA80HAAPNCgADzQsAA80MAAPNDQADzQ4AA80QAAPNEgADzRMAA80UAAPNFgADzRcAA81WAAPNWAADzVsAA81dAAPNYAADzWEAA81iAAPNYwADzWQAA81mAAPNaAADzWkAA81qAAPNbAADzW0AA82sAAPNrgADzbAAA82yAAPNtQADzbYAA823AAPNuAADzbkAA827AAPNvQADzb4AA82/AAPNwQADzcIAA84BAAPOAwADzgUAA84HAAPOCgADzgsAA84MAAPODQADzg4AA84QAAPOEgADzhMAA84UAAPOFgADzhcAA85WAAPOWAADzloAA85cAAPOXwADzmAAA85hAAPOYgADzmMAA85lAAPOZwADzmgAA85pAAPOawADzmwAA863AAPO2gADzvoAA88aAAPPHAADzx4AA88gAAPPIgADzyUAA88mAAPPJwADzyoAA88rAAPPLQADzy4AA88wAAPPMwADzzQAA881AAPPOAADzzkAA88+AAPPSwADz1AAA89SAAPPVAADz1kAA89cAAPPXwADz2EAA8+GAAPPqgADz9EAA8/1AAPP+AADz/oAA8/8AAPP/gAD0AAAA9ACAAPQAwAD0AYAA9ATAAPQJAAD0CYAA9AoAAPQKgAD0CwAA9AuAAPQMAAD0DIAA9A0AAPQRQAD0EgAA9BLAAPQTgAD0FEAA9BUAAPQVwAD0FoAA9BdAAPQXwAD0J4AA9CgAAPQogAD0KQAA9CnAAPQqAAD0KkAA9CqAAPQqwAD0K0AA9CvAAPQsAAD0LEAA9CzAAPQtAAD0PMAA9D1AAPQ9wAD0PkAA9D8AAPQ/QAD0P4AA9D/AAPRAAAD0QIAA9EEAAPRBQAD0QYAA9EIAAPRCQAD0UgAA9FKAAPRTQAD0U8AA9FSAAPRUwAD0VQAA9FVAAPRVgAD0VgAA9FaAAPRWwAD0VwAA9FeAAPRXwAD0WwAA9FtAAPRbgAD0XAAA9GvAAPRsQAD0bMAA9G1AAPRuAAD0bkAA9G6AAPRuwAD0bwAA9G+AAPRwAAD0cEAA9HCAAPRxAAD0cUAA9IEAAPSBgAD0ggAA9IKAAPSDQAD0g4AA9IPAAPSEAAD0hEAA9ITAAPSFQAD0hYAA9IXAAPSGQAD0hoAA9JZAAPSWwAD0l0AA9JfAAPSYgAD0mMAA9JkAAPSZQAD0mYAA9JoAAPSagAD0msAA9JsAAPSbgAD0m8AA9KuAAPSsAAD0rIAA9K0AAPStwAD0rgAA9K5AAPSugAD0rsAA9K9AAPSvwAD0sAAA9LBAAPSwwAD0sQAA9MDAAPTBQAD0wcAA9MJAAPTDAAD0w0AA9MOAAPTDwAD0xAAA9MSAAPTFAAD0xUAA9MWAAPTGAAD0xkAA9M+AAPTYgAD04kAA9OtAAPTsAAD07IAA9O0AAPTtgAD07gAA9O6AAPTuwAD074AA9PLAAPT2gAD09wAA9PeAAPT4AAD0+IAA9PkAAPT5gAD0+gAA9P3AAPT+gAD0/0AA9QAAAPUAwAD1AYAA9QJAAPUDAAD1A4AA9RNAAPUTwAD1FEAA9RTAAPUVgAD1FcAA9RYAAPUWQAD1FoAA9RcAAPUXgAD1F8AA9RgAAPUYgAD1GMAA9SiAAPUpAAD1KYAA9SoAAPUqwAD1KwAA9StAAPUrgAD1K8AA9SxAAPUswAD1LQAA9S1AAPUtwAD1LgAA9T3AAPU+QAD1PsAA9T9AAPVAAAD1QEAA9UCAAPVAwAD1QQAA9UGAAPVCAAD1QkAA9UKAAPVDAAD1Q0AA9VMAAPVTgAD1VAAA9VSAAPVVQAD1VYAA9VXAAPVWAAD1VkAA9VbAAPVXQAD1V4AA9VfAAPVYQAD1WIAA9WhAAPVowAD1aUAA9WnAAPVqgAD1asAA9WsAAPVrQAD1a4AA9WwAAPVsgAD1bMAA9W0AAPVtgAD1bcAA9X2AAPV+AAD1foAA9X8AAPV/wAD1gAAA9YBAAPWAgAD1gMAA9YFAAPWBwAD1ggAA9YJAAPWCwAD1gwAA9ZLAAPWTQAD1k8AA9ZRAAPWVAAD1lUAA9ZWAAPWVwAD1lgAA9ZaAAPWXAAD1l0AA9ZeAAPWYAAD1mEAA9asAAPWzwAD1u8AA9cPAAPXEQAD1xMAA9cVAAPXFwAD1xoAA9cbAAPXHAAD1x8AA9cgAAPXIgAD1yMAA9clAAPXKAAD1ykAA9cqAAPXLQAD1y4AA9czAAPXQAAD10UAA9dHAAPXSQAD104AA9dRAAPXVAAD11YAA9d7AAPXnwAD18YAA9fqAAPX7QAD1+8AA9fxAAPX8wAD1/UAA9f3AAPX+AAD1/sAA9gIAAPYGQAD2BsAA9gdAAPYHwAD2CEAA9gjAAPYJQAD2CcAA9gpAAPYOgAD2D0AA9hAAAPYQwAD2EYAA9hJAAPYTAAD2E8AA9hSAAPYVAAD2JMAA9iVAAPYlwAD2JkAA9icAAPYnQAD2J4AA9ifAAPYoAAD2KIAA9ikAAPYpQAD2KYAA9ioAAPYqQAD2OgAA9jqAAPY7AAD2O4AA9jxAAPY8gAD2PMAA9j0AAPY9QAD2PcAA9j5AAPY+gAD2PsAA9j9AAPY/gAD2T0AA9k/AAPZQgAD2UQAA9lHAAPZSAAD2UkAA9lKAAPZSwAD2U0AA9lPAAPZUAAD2VEAA9lTAAPZVAAD2WEAA9liAAPZYwAD2WUAA9mkAAPZpgAD2agAA9mqAAPZrQAD2a4AA9mvAAPZsAAD2bEAA9mzAAPZtQAD2bYAA9m3AAPZuQAD2boAA9n5AAPZ+wAD2f0AA9n/AAPaAgAD2gMAA9oEAAPaBQAD2gYAA9oIAAPaCgAD2gsAA9oMAAPaDgAD2g8AA9pOAAPaUAAD2lIAA9pUAAPaVwAD2lgAA9pZAAPaWgAD2lsAA9pdAAPaXwAD2mAAA9phAAPaYwAD2mQAA9qjAAPapQAD2qcAA9qpAAParAAD2q0AA9quAAParwAD2rAAA9qyAAPatAAD2rUAA9q2AAPauAAD2rkAA9r4AAPa+gAD2vwAA9r+AAPbAQAD2wIAA9sDAAPbBAAD2wUAA9sHAAPbCQAD2woAA9sLAAPbDQAD2w4AA9szAAPbVwAD234AA9uiAAPbpQAD26cAA9upAAPbqwAD260AA9uvAAPbsAAD27MAA9vAAAPbzwAD29EAA9vTAAPb1QAD29cAA9vZAAPb2wAD290AA9vsAAPb7wAD2/IAA9v1AAPb+AAD2/sAA9v+AAPcAQAD3AMAA9xCAAPcRAAD3EYAA9xIAAPcSwAD3EwAA9xNAAPcTgAD3E8AA9xRAAPcUwAD3FQAA9xVAAPcVwAD3FgAA9yXAAPcmQAD3JsAA9ydAAPcoAAD3KEAA9yiAAPcowAD3KQAA9ymAAPcqAAD3KkAA9yqAAPcrAAD3K0AA9zsAAPc7gAD3PAAA9zyAAPc9QAD3PYAA9z3AAPc+AAD3PkAA9z7AAPc/QAD3P4AA9z/AAPdAQAD3QIAA91BAAPdQwAD3UUAA91HAAPdSgAD3UsAA91MAAPdTQAD3U4AA91QAAPdUgAD3VMAA91UAAPdVgAD3VcAA92WAAPdmAAD3ZoAA92cAAPdnwAD3aAAA92hAAPdogAD3aMAA92lAAPdpwAD3agAA92pAAPdqwAD3awAA93rAAPd7QAD3e8AA93xAAPd9AAD3fUAA932AAPd9wAD3fgAA936AAPd/AAD3f0AA93+AAPeAAAD3gEAA95AAAPeQgAD3kQAA95GAAPeSQAD3koAA95LAAPeTAAD3k0AA95PAAPeUQAD3lIAA95TAAPeVQAD3lYAA96hAAPexAAD3uQAA98EAAPfBgAD3wgAA98KAAPfDAAD3w8AA98QAAPfEQAD3xQAA98VAAPfFwAD3xgAA98aAAPfHQAD3x4AA98fAAPfIgAD3yMAA98oAAPfNQAD3zoAA988AAPfPgAD30MAA99GAAPfSQAD30sAA99wAAPflAAD37sAA9/fAAPf4gAD3+QAA9/mAAPf6AAD3+oAA9/sAAPf7QAD3/AAA9/9AAPgDgAD4BAAA+ASAAPgFAAD4BYAA+AYAAPgGgAD4BwAA+AeAAPgLwAD4DIAA+A1AAPgOAAD4DsAA+A+AAPgQQAD4EQAA+BHAAPgSQAD4IgAA+CKAAPgjAAD4I4AA+CRAAPgkgAD4JMAA+CUAAPglQAD4JcAA+CZAAPgmgAD4JsAA+CdAAPgngAD4N0AA+DfAAPg4QAD4OMAA+DmAAPg5wAD4OgAA+DpAAPg6gAD4OwAA+DuAAPg7wAD4PAAA+DyAAPg8wAD4TIAA+E0AAPhNwAD4TkAA+E8AAPhPQAD4T4AA+E/AAPhQAAD4UIAA+FEAAPhRQAD4UYAA+FIAAPhSQAD4VYAA+FXAAPhWAAD4VoAA+GZAAPhmwAD4Z0AA+GfAAPhogAD4aMAA+GkAAPhpQAD4aYAA+GoAAPhqgAD4asAA+GsAAPhrgAD4a8AA+HuAAPh8AAD4fIAA+H0AAPh9wAD4fgAA+H5AAPh+gAD4fsAA+H9AAPh/wAD4gAAA+IBAAPiAwAD4gQAA+JDAAPiRQAD4kcAA+JJAAPiTAAD4k0AA+JOAAPiTwAD4lAAA+JSAAPiVAAD4lUAA+JWAAPiWAAD4lkAA+KYAAPimgAD4pwAA+KeAAPioQAD4qIAA+KjAAPipAAD4qUAA+KnAAPiqQAD4qoAA+KrAAPirQAD4q4AA+LtAAPi7wAD4vEAA+LzAAPi9gAD4vcAA+L4AAPi+QAD4voAA+L8AAPi/gAD4v8AA+MAAAPjAgAD4wMAA+MoAAPjTAAD43MAA+OXAAPjmgAD45wAA+OeAAPjoAAD46IAA+OkAAPjpQAD46gAA+O1AAPjxAAD48YAA+PIAAPjygAD48wAA+POAAPj0AAD49IAA+PhAAPj5AAD4+cAA+PqAAPj7QAD4/AAA+PzAAPj9gAD4/gAA+Q3AAPkOQAD5DsAA+Q9AAPkQAAD5EEAA+RCAAPkQwAD5EQAA+RGAAPkSAAD5EkAA+RKAAPkTAAD5E0AA+SMAAPkjgAD5JAAA+SSAAPklQAD5JYAA+SXAAPkmAAD5JkAA+SbAAPknQAD5J4AA+SfAAPkoQAD5KIAA+ThAAPk4wAD5OUAA+TnAAPk6gAD5OsAA+TsAAPk7QAD5O4AA+TwAAPk8gAD5PMAA+T0AAPk9gAD5PcAA+U2AAPlOAAD5ToAA+U8AAPlPwAD5UAAA+VBAAPlQgAD5UMAA+VFAAPlRwAD5UgAA+VJAAPlSwAD5UwAA+WLAAPljQAD5Y8AA+WRAAPllAAD5ZUAA+WWAAPllwAD5ZgAA+WaAAPlnAAD5Z0AA+WeAAPloAAD5aEAA+XgAAPl4gAD5eQAA+XmAAPl6QAD5eoAA+XrAAPl7AAD5e0AA+XvAAPl8QAD5fIAA+XzAAPl9QAD5fYAA+Y1AAPmNwAD5jkAA+Y7AAPmPgAD5j8AA+ZAAAPmQQAD5kIAA+ZEAAPmRgAD5kcAA+ZIAAPmSgAD5ksAA+aWAAPmuQAD5tkAA+b5AAPm+wAD5v0AA+b/AAPnAQAD5wQAA+cFAAPnBgAD5wkAA+cKAAPnDAAD5w0AA+cPAAPnEgAD5xMAA+cUAAPnFwAD5xgAA+cdAAPnKgAD5y8AA+cxAAPnMwAD5zgAA+c7AAPnPgAD50AAA+dlAAPniQAD57AAA+fUAAPn1wAD59kAA+fbAAPn3QAD598AA+fhAAPn4gAD5+UAA+fyAAPoAwAD6AUAA+gHAAPoCQAD6AsAA+gNAAPoDwAD6BEAA+gTAAPoJAAD6CcAA+gqAAPoLQAD6DAAA+gzAAPoNgAD6DkAA+g8AAPoPgAD6H0AA+h/AAPogQAD6IMAA+iGAAPohwAD6IgAA+iJAAPoigAD6IwAA+iOAAPojwAD6JAAA+iSAAPokwAD6NIAA+jUAAPo1gAD6NgAA+jbAAPo3AAD6N0AA+jeAAPo3wAD6OEAA+jjAAPo5AAD6OUAA+jnAAPo6AAD6ScAA+kpAAPpLAAD6S4AA+kxAAPpMgAD6TMAA+k0AAPpNQAD6TcAA+k5AAPpOgAD6TsAA+k9AAPpPgAD6UsAA+lMAAPpTQAD6U8AA+mOAAPpkAAD6ZIAA+mUAAPplwAD6ZgAA+mZAAPpmgAD6ZsAA+mdAAPpnwAD6aAAA+mhAAPpowAD6aQAA+njAAPp5QAD6ecAA+npAAPp7AAD6e0AA+nuAAPp7wAD6fAAA+nyAAPp9AAD6fUAA+n2AAPp+AAD6fkAA+o4AAPqOgAD6jwAA+o+AAPqQQAD6kIAA+pDAAPqRAAD6kUAA+pHAAPqSQAD6koAA+pLAAPqTQAD6k4AA+qNAAPqjwAD6pEAA+qTAAPqlgAD6pcAA+qYAAPqmQAD6poAA+qcAAPqngAD6p8AA+qgAAPqogAD6qMAA+riAAPq5AAD6uYAA+roAAPq6wAD6uwAA+rtAAPq7gAD6u8AA+rxAAPq8wAD6vQAA+r1AAPq9wAD6vgAA+sdAAPrQQAD62gAA+uMAAPrjwAD65EAA+uTAAPrlQAD65cAA+uZAAPrmgAD650AA+uqAAPruQAD67sAA+u9AAPrvwAD68EAA+vDAAPrxQAD68cAA+vWAAPr2QAD69wAA+vfAAPr4gAD6+UAA+voAAPr6wAD6+0AA+wsAAPsLgAD7DAAA+wyAAPsNQAD7DYAA+w3AAPsOAAD7DkAA+w7AAPsPQAD7D4AA+w/AAPsQQAD7EIAA+yBAAPsgwAD7IUAA+yHAAPsigAD7IsAA+yMAAPsjQAD7I4AA+yQAAPskgAD7JMAA+yUAAPslgAD7JcAA+zWAAPs2AAD7NoAA+zcAAPs3wAD7OAAA+zhAAPs4gAD7OMAA+zlAAPs5wAD7OgAA+zpAAPs6wAD7OwAA+0rAAPtLQAD7TAAA+0yAAPtNQAD7TYAA+03AAPtOAAD7TkAA+07AAPtPQAD7T4AA+0/AAPtQQAD7UIAA+2BAAPtgwAD7YUAA+2HAAPtigAD7YsAA+2MAAPtjQAD7Y4AA+2QAAPtkgAD7ZMAA+2UAAPtlgAD7ZcAA+3WAAPt2AAD7doAA+3cAAPt3wAD7eAAA+3hAAPt4gAD7eMAA+3lAAPt5wAD7egAA+3pAAPt6wAD7ewAA+4rAAPuLQAD7i8AA+4xAAPuNAAD7jUAA+42AAPuNwAD7jgAA+46AAPuPAAD7j0AA+4+AAPuQAAD7kEAA+6MAAPurwAD7s8AA+7vAAPu8QAD7vMAA+71AAPu9wAD7voAA+77AAPu/AAD7v8AA+8AAAPvAgAD7wMAA+8FAAPvCAAD7wkAA+8KAAPvDQAD7w4AA+8TAAPvIAAD7yUAA+8nAAPvKQAD7y4AA+8xAAPvNAAD7zYAA+9bAAPvfwAD76YAA+/KAAPvzQAD788AA+/RAAPv0wAD79UAA+/XAAPv2AAD79sAA+/oAAPv+QAD7/sAA+/9AAPv/wAD8AEAA/ADAAPwBQAD8AcAA/AJAAPwGgAD8B0AA/AgAAPwIwAD8CYAA/ApAAPwLAAD8C8AA/AyAAPwNAAD8HMAA/B1AAPwdwAD8HkAA/B8AAPwfQAD8H4AA/B/AAPwgAAD8IIAA/CEAAPwhQAD8IYAA/CIAAPwiQAD8MgAA/DKAAPwzAAD8M4AA/DRAAPw0gAD8NMAA/DUAAPw1QAD8NcAA/DZAAPw2gAD8NsAA/DdAAPw3gAD8R0AA/EfAAPxIgAD8SQAA/EnAAPxKAAD8SkAA/EqAAPxKwAD8S0AA/EvAAPxMAAD8TEAA/EzAAPxNAAD8UEAA/FCAAPxQwAD8UUAA/GEAAPxhgAD8YgAA/GKAAPxjQAD8Y4AA/GPAAPxkAAD8ZEAA/GTAAPxlQAD8ZYAA/GXAAPxmQAD8ZoAA/HZAAPx2wAD8d0AA/HfAAPx4gAD8eMAA/HkAAPx5QAD8eYAA/HoAAPx6gAD8esAA/HsAAPx7gAD8e8AA/IuAAPyMAAD8jIAA/I0AAPyNwAD8jgAA/I5AAPyOgAD8jsAA/I9AAPyPwAD8kAAA/JBAAPyQwAD8kQAA/KDAAPyhQAD8ocAA/KJAAPyjAAD8o0AA/KOAAPyjwAD8pAAA/KSAAPylAAD8pUAA/KWAAPymAAD8pkAA/LYAAPy2gAD8twAA/LeAAPy4QAD8uIAA/LjAAPy5AAD8uUAA/LnAAPy6QAD8uoAA/LrAAPy7QAD8u4AA/MTAAPzNwAD814AA/OCAAPzhQAD84cAA/OJAAPziwAD840AA/OPAAPzkAAD85MAA/OgAAPzrwAD87EAA/OzAAPztQAD87cAA/O5AAPzuwAD870AA/PMAAPzzwAD89IAA/PVAAPz2AAD89sAA/PeAAPz4QAD8+MAA/QiAAP0JAAD9CYAA/QoAAP0KwAD9CwAA/QtAAP0LgAD9C8AA/QxAAP0MwAD9DQAA/Q1AAP0NwAD9DgAA/R3AAP0eQAD9HsAA/R9AAP0gAAD9IEAA/SCAAP0gwAD9IQAA/SGAAP0iAAD9IkAA/SKAAP0jAAD9I0AA/TMAAP0zgAD9NAAA/TSAAP01QAD9NYAA/TXAAP02AAD9NkAA/TbAAP03QAD9N4AA/TfAAP04QAD9OIAA/UhAAP1IwAD9SUAA/UnAAP1KgAD9SsAA/UsAAP1LQAD9S4AA/UwAAP1MgAD9TMAA/U0AAP1NgAD9TcAA/V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hAAQHIgAEByMABAckAAQHJQAEBycABAcpAAQHKgAEBysABActAAQHLgAEB20ABAdvAAQHcgAEB3QABAd3AAQHeAAEB3kABAd6AAQHewAEB30ABAd/AAQHgAAEB4EABAeDAAQHhAAEB5EABAeSAAQHkwAEB5UABAfUAAQH1gAEB9gABAfaAAQH3QAEB94ABAffAAQH4AAEB+EABAfjAAQH5QAEB+YABAfnAAQH6QAEB+oABAgpAAQIKwAECC0ABAgvAAQIMgAECDMABAg0AAQINQAECDYABAg4AAQIOgAECDsABAg8AAQIPgAECD8ABAh+AAQIgAAECIIABAiEAAQIhwAECIgABAiJAAQIigAECIsABAiNAAQIjwAECJAABAiRAAQIkwAECJQABAjTAAQI1QAECNcABAjZAAQI3AAECN0ABAjeAAQI3wAECOAABAjiAAQI5AAECOUABAjmAAQI6AAECOkABAkoAAQJKgAECSwABAkuAAQJMQAECTIABAkzAAQJNAAECTUABAk3AAQJOQAECToABAk7AAQJPQAECT4ABAljAAQJhwAECa4ABAnSAAQJ1QAECdcABAnZAAQJ2wAECd0ABAnfAAQJ4AAECeMABAnwAAQJ/wAECgEABAoDAAQKBQAECgcABAoJAAQKCwAECg0ABAocAAQKHwAECiIABAolAAQKKAAECisABAouAAQKMQAECjMABApyAAQKdAAECnYABAp4AAQKewAECnwABAp9AAQKfgAECn8ABAqBAAQKgwAECoQABAqFAAQKhwAECogABArHAAQKyQAECssABArNAAQK0AAECtEABArSAAQK0wAECtQABArWAAQK2AAECtkABAraAAQK3AAECt0ABAscAAQLHgAECyAABAsiAAQLJQAECyYABAsnAAQLKAAECykABAsrAAQLLQAECy4ABAsvAAQLMQAECzIABAtxAAQLcwAEC3UABAt3AAQLegAEC3sABAt8AAQLfQAEC34ABAuAAAQLggAEC4MABAuEAAQLhgAEC4cABAvGAAQLyAAEC8oABAvMAAQLzwAEC9AABAvRAAQL0gAEC9MABAvVAAQL1wAEC9gABAvZAAQL2wAEC9wABAwbAAQMHQAEDB8ABAwhAAQMJAAEDCUABAwmAAQMJwAEDCgABAwqAAQMLAAEDC0ABAwuAAQMMAAEDDEABAx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DAAQYhAAEGIYABBiHAAQYkAAEGJEABBiTAAQY0gAEGNQABBjWAAQY2AAEGNsABBjcAAQY3QAEGN4ABBjfAAQY4QAEGOMABBjkAAQY5QAEGOcABBjoAAQZJwAEGSkABBksAAQZLgAEGTEABBkyAAQZMwAEGTQABBk1AAQZNwAEGTkABBk6AAQZOwAEGT0ABBk+AAQZRwAEGUgABBlKAAQZiQAEGYsABBmNAAQZjwAEGZIABBmTAAQZlAAEGZUABBmWAAQZmAAEGZoABBmbAAQZnAAEGZ4ABBmfAAQZ3gAEGeAABBnjAAQZ5QAEGegABBnpAAQZ6gAEGesABBnsAAQZ7gAEGfAABBnxAAQZ8gAEGfQABBn1AAQaAgAEGgMABBoEAAQaBgAEGkUABBpHAAQaSQAEGksABBpOAAQaTwAEGlAABBpRAAQaUgAEGlQABBpWAAQaVwAEGlgABBpaAAQaWwAEGpoABBqcAAQanwAEGqEABBqkAAQapQAEGqYABBqnAAQaqAAEGqoABBqsAAQarQAEGq4ABBqwAAQasQAEGsAABBrNAAQa1AAEGtcABBraAAQa3QAEGuQABBrnAAQa6gAEGu0ABBrvAAQa9gAEGwAABBtLAAQbbgAEG44ABBuuAAQbsAAEG7IABBu0AAQbtgAEG7kABBu6AAQbuwAEG74ABBu/AAQbwQAEG8IABBvEAAQbxwAEG8gABBvJAAQbzAAEG80ABBvSAAQb3wAEG+QABBvmAAQb6AAEG+0ABBvwAAQb8wAEG/UABBwaAAQcPgAEHGUABByJAAQcjAAEHI4ABByQAAQckgAEHJQABByWAAQclwAEHJoABBynAAQcuAAEHLoABBy8AAQcvgAEHMAABBzCAAQcxAAEHMYABBzIAAQc2QAEHNwABBzfAAQc4gAEHOUABBzoAAQc6wAEHO4ABBzxAAQc8wAEHTIABB00AAQdNgAEHTgABB07AAQdPAAEHT0ABB0+AAQdPwAEHUEABB1DAAQdRAAEHUUABB1HAAQdSAAEHYcABB2JAAQdiwAEHY0ABB2QAAQdkQAEHZIABB2TAAQdlAAEHZYABB2YAAQdmQAEHZoABB2cAAQdnQAEHdwABB3eAAQd4QAEHeMABB3mAAQd5wAEHegABB3pAAQd6gAEHewABB3uAAQd7wAEHfAABB3yAAQd8wAEHgAABB4BAAQeAgAEHgQABB5DAAQeRQAEHkcABB5JAAQeTAAEHk0ABB5OAAQeTwAEHlAABB5SAAQeVAAEHlUABB5WAAQeWAAEHlkABB6YAAQemgAEHpwABB6eAAQeoQAEHqIABB6jAAQepAAEHqUABB6nAAQeqQAEHqoABB6rAAQerQAEHq4ABB7tAAQe7wAEHvEABB7zAAQe9gAEHvcABB74AAQe+QAEHvoABB78AAQe/gAEHv8ABB8AAAQfAgAEHwMABB9CAAQfRAAEH0YABB9IAAQfSwAEH0wABB9NAAQfTgAEH08ABB9RAAQfUwAEH1QABB9VAAQfVwAEH1gABB+XAAQfmQAEH5sABB+dAAQfoAAEH6EABB+iAAQfowAEH6QABB+mAAQfqAAEH6kABB+qAAQfrAAEH60ABB/SAAQf9gAEIB0ABCBBAAQgRAAEIEYABCBIAAQgSgAEIEwABCBOAAQgTwAEIFIABCBfAAQgbgAEIHAABCByAAQgdAAEIHYABCB4AAQgegAEIHwABCCLAAQgjgAEIJEABCCUAAQglwAEIJoABCCdAAQgoAAEIKIABCDhAAQg4wAEIOUABCDnAAQg6gAEIOsABCDsAAQg7QAEIO4ABCDwAAQg8gAEIPMABCD0AAQg9gAEIPcABCE2AAQhOAAEIToABCE8AAQhPwAEIUAABCFBAAQhQgAEIUMABCFFAAQhRwAEIUgABCFJAAQhSwAEIUwABCGLAAQhjQAEIY8ABCGRAAQhlAAEIZUABCGWAAQhlwAEIZgABCGaAAQhnAAEIZ0ABCGeAAQhoAAEIaEABCHgAAQh4gAEIeQABCHmAAQh6QAEIeoABCHrAAQh7AAEIe0ABCHvAAQh8QAEIfIABCHzAAQh9QAEIfYABCI1AAQiNwAEIjkABCI7AAQiPgAEIj8ABCJAAAQiQQAEIkIABCJEAAQiRgAEIkcABCJIAAQiSgAEIksABCKKAAQijAAEIo4ABCKQAAQikwAEIpQABCKVAAQilgAEIpcABCKZAAQimwAEIpwABCKdAAQinwAEIqAABCLfAAQi4QAEIuMABCLlAAQi6AAEIukABCLqAAQi6wAEIuwABCLuAAQi8AAEIvEABCLyAAQi9AAEIvUABCNAAAQjYwAEI4MABCOjAAQjpQAEI6cABCOpAAQjqwAEI64ABCOvAAQjsAAEI7MABCO0AAQjtgAEI7cABCO5AAQjvAAEI70ABCO+AAQjwQAEI8IABCPHAAQj1AAEI9kABCPbAAQj3QAEI+IABCPlAAQj6AAEI+oABCQPAAQkMwAEJFoABCR+AAQkgQAEJIMABCSFAAQkhwAEJIkABCSLAAQkjAAEJI8ABCScAAQkrQAEJK8ABCSxAAQkswAEJLUABCS3AAQkuQAEJLsABCS9AAQkzgAEJNEABCTUAAQk1wAEJNoABCTdAAQk4AAEJOMABCTmAAQk6AAEJScABCUpAAQlKwAEJS0ABCUwAAQlMQAEJTIABCUzAAQlNAAEJTYABCU4AAQlOQAEJToABCU8AAQlPQAEJXwABCV+AAQlgAAEJYIABCWFAAQlhgAEJYcABCWIAAQliQAEJYsABCWNAAQljgAEJY8ABCWRAAQlkgAEJdEABCXTAAQl1gAEJdgABCXbAAQl3AAEJd0ABCXeAAQl3wAEJeEABCXjAAQl5AAEJeUABCXnAAQl6AAEJfUABCX2AAQl9wAEJfkABCY4AAQmOgAEJjwABCY+AAQmQQAEJkIABCZDAAQmRAAEJkUABCZHAAQmSQAEJkoABCZLAAQmTQAEJk4ABCaNAAQmjwAEJpEABCaTAAQmlgAEJpcABCaYAAQmmQAEJpoABCacAAQmngAEJp8ABCagAAQmogAEJqMABCbiAAQm5AAEJuYABCboAAQm6wAEJuwABCbtAAQm7gAEJu8ABCbxAAQm8wAEJvQABCb1AAQm9wAEJvgABCc3AAQnOQAEJzsABCc9AAQnQAAEJ0EABCdCAAQnQwAEJ0QABCdGAAQnSAAEJ0kABCdKAAQnTAAEJ00ABCeMAAQnjgAEJ5AABCeSAAQnlQAEJ5YABCeXAAQnmAAEJ5kABCebAAQnnQAEJ54ABCefAAQnoQAEJ6IABCfHAAQn6wAEKBIABCg2AAQoOQAEKDsABCg9AAQoPwAEKEEABChDAAQoRAAEKEcABChUAAQoYwAEKGUABChnAAQoaQAEKGsABChtAAQobwAEKHEABCiAAAQogwAEKIYABCiJAAQojAAEKI8ABCiSAAQolQAEKJcABCjWAAQo2AAEKNoABCjcAAQo3wAEKOAABCjhAAQo4gAEKOMABCjlAAQo5wAEKOgABCjpAAQo6wAEKOwABCkrAAQpLQAEKS8ABCkxAAQpNAAEKTUABCk2AAQpNwAEKTgABCk6AAQpPAAEKT0ABCk+AAQpQAAEKUEABCmAAAQpggAEKYQABCmGAAQpiQAEKYoABCmLAAQpjAAEKY0ABCmPAAQpkQAEKZIABCmTAAQplQAEKZYABCnVAAQp1wAEKdkABCnbAAQp3gAEKd8ABCngAAQp4QAEKeIABCnkAAQp5gAEKecABCnoAAQp6gAEKesABCoqAAQqLAAEKi4ABCowAAQqMwAEKjQABCo1AAQqNgAEKjcABCo5AAQqOwAEKjwABCo9AAQqPwAEKkAABCp/AAQqgQAEKoMABCqFAAQqiAAEKokABCqKAAQqiwAEKowABCqOAAQqkAAEKpEABCqSAAQqlAAEKpUABCrUAAQq1gAEKtgABCraAAQq3QAEKt4ABCrfAAQq4AAEKuEABCrjAAQq5QAEKuYABCrnAAQq6QAEKuoABCs1AAQrWAAEK3gABCuYAAQrmgAEK5wABCueAAQroAAEK6MABCukAAQrpQAEK6gABCupAAQrqwAEK6wABCuuAAQrsQAEK7IABCuzAAQrtgAEK7cABCu8AAQryQAEK84ABCvQAAQr0gAEK9cABCvaAAQr3QAEK98ABCwEAAQsKAAELE8ABCxzAAQsdgAELHgABCx6AAQsfAAELH4ABCyAAAQsgQAELIQABCyRAAQsogAELKQABCymAAQsqAAELKoABCysAAQsrgAELLAABCyyAAQswwAELMYABCzJAAQszAAELM8ABCzSAAQs1QAELNgABCzbAAQs3QAELRwABC0eAAQtIAAELSIABC0lAAQtJgAELScABC0oAAQtKQAELSsABC0tAAQtLgAELS8ABC0xAAQtMgAELXEABC1zAAQtdQAELXcABC16AAQtewAELXwABC19AAQtfgAELYAABC2CAAQtgwAELYQABC2GAAQthwAELcYABC3IAAQtywAELc0ABC3QAAQt0QAELdIABC3TAAQt1AAELdYABC3YAAQt2QAELdoABC3cAAQt3QAELeoABC3rAAQt7AAELe4ABC4tAAQuLwAELjEABC4zAAQuNgAELjcABC44AAQuOQAELjoABC48AAQuPgAELj8ABC5AAAQuQgAELkMABC6CAAQuhAAELoYABC6IAAQuiwAELowABC6NAAQujgAELo8ABC6RAAQukwAELpQABC6VAAQulwAELpgABC7XAAQu2QAELtsABC7dAAQu4AAELuEABC7iAAQu4wAELuQABC7mAAQu6AAELukABC7qAAQu7AAELu0ABC8sAAQvLgAELzAABC8yAAQvNQAELzYABC83AAQvOAAELzkABC87AAQvPQAELz4ABC8/AAQvQQAEL0IABC+BAAQvgwAEL4UABC+HAAQvigAEL4sABC+MAAQvjQAEL44ABC+QAAQvkgAEL5MABC+UAAQvlgAEL5cABC+8AAQv4AAEMAcABDArAAQwLgAEMDAABDAyAAQwNAAEMDYABDA4AAQwOQAEMDwABDBJAAQwWAAEMFoABDBcAAQwXgAEMGAABDBiAAQwZAAEMGYABDB1AAQweAAEMHsABDB+AAQwgQAEMIQABDCHAAQwigAEMIwABDDLAAQwzQAEMM8ABDDRAAQw1AAEMNUABDDWAAQw1wAEMNgABDDaAAQw3AAEMN0ABDDeAAQw4AAEMOEABDEgAAQxIgAEMSQABDEmAAQxKQAEMSoABDErAAQxLAAEMS0ABDEvAAQxMQAEMTIABDEzAAQxNQAEMTYABDF1AAQxdwAEMXkABDF7AAQxfgAEMX8ABDGAAAQxgQAEMYIABDGEAAQxhgAEMYcABDGIAAQxigAEMYsABDHKAAQxzAAEMc4ABDHQAAQx0wAEMdQABDHVAAQx1gAEMdcABDHZAAQx2wAEMdwABDHdAAQx3wAEMeAABDIfAAQyIQAEMiMABDIlAAQyKAAEMikABDIqAAQyKwAEMiwABDIuAAQyMAAEMjEABDIyAAQyNAAEMjUABDJ0AAQydgAEMngABDJ6AAQyfQAEMn4ABDJ/AAQygAAEMoEABDKDAAQyhQAEMoYABDKHAAQyiQAEMooABDLJAAQyywAEMs0ABDLPAAQy0gAEMtMABDLUAAQy1QAEMtYABDLYAAQy2gAEMtsABDLcAAQy3gAEMt8ABDLoAAQy6QAEMusABDMuAAQzUgAEM3YABDOZAAQzwAAEM+AABDQHAAQ0LgAENE4ABDRyAAQ0lgAENJgABDSbAAQ0nQAENJ8ABDShAAQ0pAAENKcABDSpAAQ0qwAENK4ABDSwAAQ0sgAENLUABDS4AAQ0uQAENL4ABDTLAAQ0zgAENNAABDTTAAQ01gAENNgABDT9AAQ1IQAENUgABDVsAAQ1bwAENXEABDVzAAQ1dQAENXcABDV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FAARARgAEQEcABEBJAARASwAEQEwABEBNAARATwAEQFAABECPAARAkQAEQJMABECVAARAmAAEQJkABECaAARAmwAEQJwABECeAARAoAAEQKEABECiAARApAAEQKUABEDkAARA5gAEQOgABEDqAARA7QAEQO4ABEDvAARA8AAEQPEABEDzAARA9QAEQPYABED3AARA+QAEQPoABEE5AARBOwAEQT0ABEE/AARBQgAEQUMABEFEAARBRQAEQUYABEFIAARBSgAEQUsABEFMAARBTgAEQU8ABEGaAARBvQAEQd0ABEH9AARB/wAEQgEABEIDAARCBQAEQggABEIJAARCCgAEQg0ABEIOAARCEAAEQhEABEITAARCFgAEQhcABEIYAARCGwAEQhwABEIhAARCLgAEQjMABEI1AARCNwAEQjwABEI/AARCQgAEQkQABEJpAARCjQAEQrQABELYAARC2wAEQt0ABELfAARC4QAEQuMABELlAARC5gAEQukABEL2AARDBwAEQwkABEMLAARDDQAEQw8ABEMRAARDEwAEQxUABEMXAARDKAAEQysABEMuAARDMQAEQzQABEM3AARDOgAEQz0ABENAAARDQgAEQ4EABEODAARDhQAEQ4cABEOKAARDiwAEQ4wABEONAARDjgAEQ5AABEOSAARDkwAEQ5QABEOWAARDlwAEQ9YABEPYAARD2gAEQ9wABEPfAARD4AAEQ+EABEPiAARD4wAEQ+UABEPnAARD6AAEQ+kABEPrAARD7AAERCsABEQtAAREMAAERDIABEQ1AARENgAERDcABEQ4AAREOQAERDsABEQ9AAREPgAERD8ABERBAAREQgAERE8ABERQAAREUQAERFMABESSAARElAAERJYABESYAAREmwAERJwABESdAAREngAERJ8ABEShAAREowAERKQABESlAAREpwAERKgABETnAARE6QAEROsABETtAARE8AAERPEABETyAARE8wAERPQABET2AARE+AAERPkABET6AARE/AAERP0ABEU8AARFPgAERUAABEVCAARFRQAERUYABEVHAARFSAAERUkABEVLAARFTQAERU4ABEVPAARFUQAERVIABEWRAARFkwAERZUABEWXAARFmgAERZsABEWcAARFnQAERZ4ABEWgAARFogAERaMABEWkAARFpgAERacABEXmAARF6AAEReoABEXsAARF7wAERfAABEXxAARF8gAERfMABEX1AARF9wAERfgABEX5AARF+wAERfwABEYhAARGRQAERmwABEaQAARGkwAERpUABEaXAARGmQAERpsABEadAARGngAERqEABEauAARGvQAERr8ABEbBAARGwwAERsUABEbHAARGyQAERssABEbaAARG3QAERuAABEbjAARG5gAERukABEbsAARG7wAERvEABEcwAARHMgAERzQABEc2AARHOQAERzoABEc7AARHPAAERz0ABEc/AARHQQAER0IABEdDAARHRQAER0YABEeFAARHhwAER4kABEeLAARHjgAER48ABEeQAARHkQAER5IABEeUAARHlgAER5cABEeYAARHmgAER5sABEfaAARH3AAER94ABEfgAARH4wAER+QABEflAARH5gAER+cABEfpAARH6wAER+wABEftAARH7wAER/AABEgvAARIMQAESDMABEg1AARIOAAESDkABEg6AARIOwAESDwABEg+AARIQAAESEEABEhCAARIRAAESEUABEiEAARIhgAESIgABEiKAARIjQAESI4ABEiPAARIkAAESJEABEiTAARIlQAESJYABEiXAARImQAESJoABEjZAARI2wAESN0ABEjfAARI4gAESOMABEjkAARI5QAESOYABEjoAARI6gAESOsABEjsAARI7gAESO8ABEkuAARJMAAESTIABEk0AARJNwAESTgABEk5AARJOgAESTsABEk9AARJPwAESUAABElBAARJQwAESUQABElNAARJTgAESVAABEldAARJXgAESV8ABElhAARJbgAESW8ABElwAARJcgAESX8ABEmAAARJgQAESYMABEmMAARJmwAESagABEm3AARJyQAESd0ABEn0AARKBgAESg8ABEoQAARKEgAESh8ABEogAARKIQAESiMABEosAARKNgAESj0AAAAAAAAEAgAAAAAAAKWnAAAAAAAAAAAAAAAAAARKRQ== + + fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel + YnBsaXN0MDDUAAEAAgADAAQABQAGAAcAClgkdmVyc2lvblkkYXJjaGl2ZXJUJHRvcFgkb2JqZWN0 +cxIAAYagXxAPTlNLZXllZEFyY2hpdmVy0QAIAAlUcm9vdIABrxEPFQALAAwAGQA1ADYANwBnAGgAaQBqAGsAbABtAG4AbwBwAHEAcgBzAHQAdQB2AHcAeAB5AHoAewB8AJcAmACZAJ8AoACsAMIAwwDEAMUAxgDHAMgAyQDKAMsA5ADnAO4A9AEDARIBFQEkATMBNgCWAUYBVQFZAV0BbAFyAXMBewGKAYsBlAGcAZ0BngGzAbQBvAG9Ab4BygHeAd8B4AHhAeIB4wHkAeUB5gH1AgQCEwIXAiYCNQI2AkUCVAJjAm8CgQKCAoMChAKFAoYChwKIApcCpgK1AsQCxQLUAuMC8gL6Aw8DEAMYAyQDOANHA1YDZQNpA3gDhwOWA6UDtAPAA9ID4QPwA/8EDgQdBCwEOwQ8BD8ESARiBGMEaQR1BIsEmgSdBKwEuwS+BM0E3ATfBO4E/QUBBRAFHwUgBSoFKwUsBS0FQgVDBUsFVwVrBXoFiQWYBZwFqwW6BckF2AXnBfMGBQYUBiMGMgZBBlAGXwZuBoMGhAaMBpgGrAa7BsoG2QbdBuwG+wcKBxkHKAc0B0YHVQdkB3MHggeRB6AHrwfEB8UHzQfZB+0H/AgLCBoIHggtCDwISwhaCGkIdQiHCJYIpQi0CMMI0gjhCPAI8wkNCQ4JFAkgCTYJRQlICVcJZglqCW4Jbwl+CY0JkAmfCa4JsgnBCdAKFgoXChgKGQoaChsKHAodCh4KHwogCiEKIgojCiQKJQomCicKKAopCioKKwosCi0KLgovCjAKMQoyCjMKNAo1CjYKSwpMClQKYAp0CoMKkgqhCqUKtArDCtIK4QrwCvwLDgsdCywLOwtKC0sLWgtpC3gLjQuOC5YLogu2C8UL1AvjC+cL9gwFDBQMIwwyDD4MUAxfDG4MfQyMDJsMqgy5DM4MzwzXDOMM9w0GDRUNJA0oDTcNRg1VDWQNcw1/DZENoA2hDbANvw3ODc8N3g3tDfwOEQ4SDhoOJg46DkkOWA5nDmsOeg6JDpgOpw62DsIO1A7jDvIPAQ8QDx8PLg89D1IPUw9bD2cPew+KD5kPqA+sD7sPyg/ZD+gP9xADEBUQJBAzEEIQURBgEG8QfhCTEJQQnBCoELwQyxDaEOkQ7RD8EQsRGhEpETgRRBFWEWURdBGDEZIRoRGwEb8R1BHVEd0R6RH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OV9ZX4lf2WAVYFFgjWCdYNlhFWFRYY1hyWH5YkFifWK5YvVjMWNtY6lj5WQ5ZD1kXWSNZN1lGWVVZZFloWXdZhlmVWaRZs1m/WdFZ4FnvWf5aDVocWitaOlpPWlBaWFpkWnhah1qWWqVaqVq4Wsda1lrlWvRbAFsSWyFbMFs/W05bXVtsW3tbkFuRW5lbpVu5W8hb11vmW+pb+VwIXBdcJlw1XEFcU1xiXHFcgFyPXJ5crVy8XNFc0lzaXOZc+l0JXRhdJ10rXTpdSV1YXWdddl2CXZRdo12yXcFd0F3fXe5d/V4AXg9eHl4tXkJeQ15LXldea156XolemF6cXqteul7JXthe517zXwVfFF8jXzJfQV9QX19fbl+DX4RfjF+YX6xfu1/KX9lf3V/sX/tgCmAZYChgNGBGYFVgZGBzYIJgkWCgYK9gxGDFYM1g2WDtYPxhC2EaYR5hLWE8YUthWmFpYXVhh2GWYaVhtGHDYdJh4WHwYgViBmIOYhpiLmI9YkxiW2JfYm5ifWKMYptiqmK2Yshi12LmYvVjBGMTYyJjMWNGY0djT2NbY29jfmONY5xjoGOvY75jzWPcY+tj92QJZBhkJ2Q2ZEVkVGRjZHJkh2SIZJBknGSwZL9kzmTdZOFk8GT/ZQ5lHWUsZThlSmVZZWhld2WGZZVlpGWzZchlyWXRZd1l8WYAZg9mHmYiZjFmQGZPZl5mbWZ5ZotmmmapZrhmx2bWZuVm9GcJZwpnEmceZzJnQWdQZ19nY2dyZ4FnkGefZ65numfMZ9tn6mf5aAhoF2gmaCdoNmhLaExoVGhgaHRog2iSaKFopWi0aMNo0mjhaPBo/GkOaR1pLGk7aUppWWloaXdpjGmNaZVpoWm1acRp02niaeZp9WoEahNqImoxaj1qT2peam1qfGqLappqqWq4as1qzmrWauJq9msFaxRrI2snazZrRWtUa2Nrcmt+a5Brn2uua71rzGvba+pr+WwObA9sF2wjbDdsRmxVbGRsaGx3bIZslWykbLNsv2zRbOBs72z+bQ1tHG0rbTptPW1MbVttam1/bYBtiG2Ubahtt23GbdVt2W3obfduBm4VbiRuMG5CblFuYG5vbn5ujW6cbqtuwG7Bbslu1W7pbvhvB28WbxpvKW84b0dvVm9lb3Fvg2+Sb6FvsG+/b85v3W/scAFwAnAKcBZwKnA5cEhwV3BbcGpweXCIcJdwpnCycMRw03DicPFxAHEPcR5xLXFCcUNxS3FXcWtxenGJcZhxnHGrcbpxyXHYcedx83IFchRyI3IyckFyUHJfcm5ycXKLcoxyknKecrRyw3LGctVy5HLncvZzBXMIcxdzJnMqczlzSHNcc11zXnNfc2BzYXN2c3dzf3OLc59zrnO9c8xz0HPfc+5z/XQMdBt0J3Q5dEh0V3RmdHV0hHSTdKJ0t3S4dMB0zHTgdO90/nUNdRF1IHUvdT51TXVcdWh1enWJdZh1p3W2dcV11HXVdeR1+XX6dgJ2DnYidjF2QHZPdlN2YnZxdoB2j3aedqp2vHbLdtp26Xb4dwd3Fncldzp3O3dDd093Y3dyd4F3kHeUd6N3snfBd9B333frd/14DHgbeCp4OXhIeFd4Znh7eHx4hHiQeKR4s3jCeNF41XjkePN5AnkReSB5LHk+eU15XHlreXp5iXmYead5vHm9ecV50XnlefR6A3oSehZ6JXo0ekN6Unphem16f3qOep16rHq7esp62Xroev16/nsGexJ7Jns1e0R7U3tXe2Z7dXuEe5N7onuue8B7z3vee+17/HwLfBp8KXw+fD98R3xTfGd8dnyFfJR8mHynfLZ8xXzUfON8730BfRB9H30ufT19TH1bfWp9bX2HfYh9jn2afbB9v33CfdF94H3jffJ+AX4EfhN+In4mfjV+RH5Ffll+Wn5bflx+XX5efl9+dH51fn1+iX6dfqx+u37Kfs5+3X7sfvt/Cn8ZfyV/N39Gf1V/ZH9zf4J/kX+gf7V/tn++f8p/3n/tf/yAC4APgB6ALYA8gEuAWoBmgHiAh4CWgKWAtIDDgNKA4YD2gPeA/4ELgR+BLoE9gUyBUIFfgW6BfYGMgZuBp4G5gciB14HmgfWCBIITgiKCN4I4gkCCTIJggm+CfoKNgpGCoIKvgr6CzYLcguiC+oMJgxiDJ4M2g0WDVINjg3iDeYOBg42DoYOwg7+DzoPSg+GD8IP/hA6EHYQphDuESoRZhGiEd4SGhJWEpIS5hLqEwoTOhOKE8YUAhQ+FE4UihTGFQIVPhV6FaoV8hYuFmoWphbiFuYXIhdeF5oX7hfyGBIYQhiSGM4ZChlGGVYZkhnOGgoaRhqCGrIa+hs2G3IbrhvqHCYcYhyeHPIc9h0WHUYdlh3SHg4eSh5aHpYe0h8OH0ofhh+2H/4gOiB2ILIg7iEqIWYhoiGuIhYiGiIyImIiuiL2IwIjPiN6I4YjwiP+JAokRiSCJJIkziUKJQ4lPiVCJUYlmiWeJb4l7iY+JnomtibyJwInPid6J7Yn8iguKF4opijiKR4pWimWKdIqDipKKp4qoirCKvIrQit+K7or9iwGLEIsfiy6LPYtMi1iLaot5i4iLl4umi7WLxIvTi+iL6Yvxi/2MEYwgjC+MPoxCjFGMYIxvjH6MjYyZjKuMuozJjNiM54z2jQWNFI0pjSqNMo0+jVKNYY1wjX+Ng42SjaGNsI2/jc6N2o3sjfuOCo4ZjiiON45GjlWOWI5yjnOOeY6FjpuOqo6tjryOy47Ojt2O7I7vjv6PDY8RjyCPL48wj0qPS49Mj02PTo9Pj1CPUY9Sj1OPVI9pj2qPco9+j5KPoY+wj7+Pw4/Sj+GP8I//kA6QGpAskDuQSpBZkGiQd5CGkJWQqpCrkLOQv5DTkOKQ8ZEAkQSRE5EikTGRQJFPkVuRbZF8kYuRmpGpkbiRx5HWkeuR7JH0kgCSFJIjkjKSQZJFklSSY5JykoGSkJKckq6SvZLMktuS6pL5kwiTF5Msky2TNZNBk1WTZJNzk4KThpOVk6STs5PCk9GT3ZPvk/6UDZQclCuUOpRJlFiUbZRulHaUgpSWlKWUtJTDlMeU1pTllPSVA5USlR6VMJU/lU6VXZVslXuVipWZla6Vr5W3lcOV15XmlfWWBJYIlheWJpY1lkSWU5ZflnGWgJaPlp6WrZaulr2WzJbblvCW8Zb5lwWXGZcolzeXRpdKl1mXaJd3l4aXlZehl7OXwpfRl+CX75f+mA2YHJgxmDKYOphGmFqYaZh4mIeYi5iamKmYuJjHmNaY4pj0mQOZEpkhmTCZP5lOmV2ZcplzmXuZh5mbmaqZuZnImcyZ25nqmfmaCJoXmiOaNZpEmlOaYppxmoCaj5qemrOatJq8msia3JrrmvqbCZsNmxybK5s6m0mbWJtkm3abhZuUm6ObspvBm9Cb35v0m/Wb/ZwJnB2cLJw7nEqcTpxdnGyce5yKnJmcpZy3nMac1ZzknPOdAp0RnSCdI509nT6dRJ1QnWaddZ14nYedlp2Znaidt526ncmd2J3cneud+p37ngOeBJ4ZnhqeIp4unkKeUZ5gnm+ec56CnpGeoJ6vnr6eyp7cnuue+p8JnxifJ582n0WfWp9bn2Ofb5+Dn5KfoZ+wn7Sfw5/Sn+Gf8J//oAugHaAsoDugSqBZoGigd6CGoImgo6CkoKqgtqDMoNug3qDtoPyg/6EOoR2hIKEvoT6hQqFRoWChYaFvoXChcaFyoXOhiKGJoZGhnaGxocChz6HeoeKh8aIAog+iHqItojmiS6JaommieKKHopaipaK0osmiyqLSot6i8qMBoxCjH6MjozKjQaNQo1+jbqN6o4yjm6Oqo7mjyKPXo+aj9aQKpAukE6QfpDOkQqRRpGCkZKRzpIKkkaSgpK+ku6TNpNyk66T6pQmlGKUnpTalS6VMpVSlYKV0pYOlkqWhpaWltKXDpdKl4aXwpfymDqYdpiymO6ZKpkumWqZppnimjaaOppamoqa2psWm1Kbjpuem9qcFpxSnI6cypz6nUKdfp26nfaeMp5unqqe5p7yn1qfXp92n6af/qA6oEaggqC+oMqhBqFCoU6hiqHGodaiEqJOolKiiqKOopKilqKaou6i8qMSo0KjkqPOpAqkRqRWpJKkzqUKpUalgqWypfqmNqZypq6m6qcmp2KnZqeip/an+qgaqEqomqjWqRKpTqleqZqp1qoSqk6qiqq6qwKrPqt6q7ar8qwurGqsbqyqrP6tAq0irVKtoq3erhquVq5mrqKu3q8ar1avkq/CsAqwRrCCsL6w+rE2sXKxrrICsgayJrJWsqay4rMes1qzarOms+K0HrRatJa0xrUGtUK1qrWutca19rZOtoq2lrbStw63GrdWt5K3nrfauBa4JrhiuJ64orjKuM640rkmuSq5Srl6ucq6BrpCun66jrrKuwa7Qrt+u7q76rwyvG68qrzmvSK9Xr2avda+Kr4uvk6+fr7Ovwq/Rr+Cv5K/zsAKwEbAgsC+wO7BNsFywa7B6sImwmLCnsLawy7DMsNSw4LD0sQOxErEhsSWxNLFDsVKxYbFwsXyxjrGdsayxu7HKsdmx6LH3sfqyCbIYsieyNrJFslqyW7Jjsm+yg7KSsqGysLK0ssOy0rLhsvCy/7MLsx2zLLM7s0qzWbNos3ezhrOJs6OzpLOqs7azzLPbs96z7bP8s/+0DrQdtCC0L7Q+tEK0UbRgtGq0f7SAtIi0lLSotLe0xrTVtNm06LT3tQa1FbUktTC1QrVRtWC1b7V+tY21nLWrtcC1wbXJtdW16bX4tge2FrYatim2OLZHtla2ZbZxtoO2krahtrC2v7bOtt227LcBtwK3CrcWtyq3ObdIt1e3W7dqt3m3iLeXt6a3srfEt9O34rfxuAC4D7geuC24MLhKuEu4UbhduHO4griFuJS4o7imuLW4xLjHuNa45bjpuPi5B7kIuRa5F7kYuRm5GrkvuTC5OLlEuVi5Z7l2uYW5ibmYuae5trnFudS54LnyugG6ELofui66PbpMulu6cLpxunm6hbqZuqi6t7rGusq62brouve7BrsVuyG7M7tCu1G7YLtvu367jbucu7G7sru6u8a72rvpu/i8B7wLvBq8Kbw4vEe8VrxivHS8g7ySvKG8sLy/vM683bzyvPO8+70HvRu9Kr05vUi9TL1bvWq9eb2IvZe9o721vcS9073ivfG+AL4Pvh6+M740vjy+SL5cvmu+er6Jvo2+nL6rvrq+yb7YvuS+9r8FvxS/I78yv0G/UL9fv2K/fL99v4O/j7+lv7S/t7/Gv9W/2L/nv/a/+cAIwBfAG8AqwDnAOsBEwEXAWsBbwGPAb8CDwJLAocCwwLTAw8DSwOHA8MD/wQvBHcEswTvBSsFZwWjBd8GGwZvBnMGkwbDBxMHTweLB8cH1wgTCE8IiwjHCQMJMwl7CbcJ8wovCmsKpwrjCx8Lcwt3C5cLxwwXDFMMjwzLDNsNFw1TDY8Nyw4HDjcOfw67DvcPMw9vD6sP5xAjEC8QPxBPEF8QfxCLEJlUkbnVsbNYADQAOAA8AEAARABIAEwAUABUAFgAXABhfEA9feGRfcm9vdFBhY2thZ2VWJGNsYXNzXV94ZF9tb2RlbE5hbWVcX3hkX2NvbW1lbnRzXxAVX2NvbmZpZ3VyYXRpb25zQnlOYW1lXxAXX21vZGVsVmVyc2lvbklkZW50aWZpZXKAAoEPFIAAgQ8SgQ8TgQJL3gAaABsAHAAdAB4AHwAgAA4AIQAiACMAJAAlACYAJwAoACkACQAnABUALQAuAC8AMAAxACcAJwAVXxAcWERCdWNrZXRGb3JDbGFzc2Vzd2FzRW5jb2RlZF8QGlhEQnVja2V0Rm9yUGFja2FnZXNzdG9yYWdlXxAcWERCdWNrZXRGb3JJbnRlcmZhY2Vzc3RvcmFnZV8QD194ZF9vd25pbmdNb2RlbF8QHVhEQnVja2V0Rm9yUGFja2FnZXN3YXNFbmNvZGVkVl9vd25lcl8QG1hEQnVja2V0Rm9yRGF0YVR5cGVzc3RvcmFnZVtfdmlzaWJpbGl0eV8QGVhEQnVja2V0Rm9yQ2xhc3Nlc3N0b3JhZ2VVX25hbWVfEB9YREJ1Y2tldEZvckludGVyZmFjZXN3YXNFbmNvZGVkXxAeWERCdWNrZXRGb3JEYXRhVHlwZXN3YXNFbmNvZGVkXxAQX3VuaXF1ZUVsZW1lbnRJRIAEgQ8QgQ8OgAGABIAAgQ8PgQ8REACABYADgASABIAAUFNZRVPTADgAOQAOADoAUABmV05TLmtleXNaTlMub2JqZWN0c68QFQA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4AT4AGgAeACIAJgAqAC4AMgA2ADoAPgBCAEYASgBOAFIAVgBaAF4AYgBmAGq8QFQBRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEAYgBjAGQAZYAbgImA5oEGIoEI3oEJsIEKhIEK94EMFIEMWIEM5YEB14ENzoEGwoEOJ4EDyIEOs4EFwoEE84EET4ENVYA5W0NEU3Rhc2hJdGVtXxATQ0RYY21BdmFpbGFibGVBc3NldFdDRENoYWluXxAPQ0RQcmljZVByb3ZpZGVyWUNEVG9uRGFwcF8QEUNEVG9uQ29ubmVjdGVkQXBwWkNEU2NhbUluZm9fEBhDRFRyYW5zYWN0aW9uSGlzdG9yeUl0ZW1fEBJDRENoYWluU3RvcmFnZUl0ZW1fEBVDRFJ1bnRpbWVNZXRhZGF0YUl0ZW1fEBlDRFBvbGthc3dhcFJlbW90ZVNldHRpbmdzW0NEQ2hhaW5Ob2RlWUNEQ29udGFjdFtDRFByaWNlRGF0YV1DRENvbnRhY3RJdGVtXxAQQ0RDaGFpblhjbUNvbmZpZ15DRFBoaXNoaW5nSXRlbVdDREFzc2V0XUNERXh0ZXJuYWxBcGlfEBlDRFhjbUF2YWlsYWJsZURlc3RpbmF0aW9uXkNEUG9sa2Fzd2FwRGV43xAQAH0AfgB/AIAAHwCBAIIAIQCDAIQADgAjAIUAhgAmAIcAiACJACcAJwATAI0AjgAvACcAiACRADsAiACUAJUAll8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc2R1cGxpY2F0ZXNfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zc3RvcmFnZVtfaXNBYnN0cmFjdIAdgEGABIAEgAKAHoCGgASAHYCIgAaAHYCHgBwIEjXa1sRXb3JkZXJlZNMAOAA5AA4AmgCcAGahAJuAH6EAnYAggDleWERfUFN0ZXJlb3R5cGXZAB8AIwChAA4AJgCiACEAhwCjAFEAmwCIAKcAFQAnAC8AlgCrXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgBuAH4AdgECAAIAECIAh0wA4ADkADgCtALcAZqkArgCvALAAsQCyALMAtAC1ALaAIoAjgCSAJYAmgCeAKIApgCqpALgAuQC6ALsAvAC9AL4AvwDAgCuAL4AwgDKAM4A1gDeAOoA+gDlfEBNYRFBNQ29tcG91bmRJbmRleGVzXxAQWERfUFNLX2VsZW1lbnRJRF8QGVhEUE1VbmlxdWVuZXNzQ29uc3RyYWludHNfEBpYRF9QU0tfdmVyc2lvbkhhc2hNb2RpZmllcl8QGVhEX1BTS19mZXRjaFJlcXVlc3RzQXJyYXlfEBFYRF9QU0tfaXNBYnN0cmFjdF8QD1hEX1BTS191c2VySW5mb18QE1hEX1BTS19jbGFzc01hcHBpbmdfEBZYRF9QU0tfZW50aXR5Q2xhc3NOYW1l3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwD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AACjUAAAo1QAAKNcAACjZAAAo2gAAKNsAACjdAAAo3gAAKOcAACjoAAAo6gAAKSkAACkrAAApLQAAKS8AACkxAAApMgAAKTMAACk0AAApNQAAKTcAACk5AAApOgAAKTsAACk9AAApPgAAKX0AACl/AAApgQAAKYMAACmFAAAphgAAKYcAACmIAAApiQAAKYsAACmNAAApjgAAKY8AACmRAAApkgAAKZsAACmcAAApngAAKd0AACnfAAAp4QAAKeMAACnlAAAp5gAAKecAACnoAAAp6QAAKesAACntAAAp7gAAKe8AACnxAAAp8gAAKfMAACoyAAAqNAAAKjYAACo4AAAqOgAAKjsAACo8AAAqPQAAKj4AACpAAAAqQgAAKkMAACpEAAAqRgAAKkcAACpUAAAqVQAAKlYAACpYAAAqYQAAKncAACp+AAAqiwAAKsoAACrMAAAqzgAAKtAAACrSAAAq0wAAKtQAACrVAAAq1gAAKtgAACraAAAq2wAAKtwAACreAAAq3wAAKvgAACr6AAAq/AAAKv4AACr/AAArAQAAKxgAACshAAArLwAAKzwAACtKAAArXwAAK3MAACuKAAArnAAAK9sAACvdAAAr3wAAK+EAACvjAAAr5AAAK+UAACvmAAAr5wAAK+kAACvrAAAr7AAAK+0AACvvAAAr8AAAK/wAACwFAAAsGgAALCkAACw+AAAsTAAALGEAACx1AAAsjAAALJ4AACyrAAAssAAALLIAACy0AAAsuQAALLsAACy9AAAsvwAALMUAACzQAAAtGwAALT4AAC1eAAAtfgAALYAAAC2CAAAthAAALYYAAC2IAAAtiQAALYoAAC2MAAAtjQAALY8AAC2QAAAtkgAALZQAAC2VAAAtlgAALZgAAC2ZAAAtogAALa8AAC20AAAttgAALbgAAC29AAAtvwAALcEAAC3DAAAt2AAALe0AAC4SAAAuNgAALl0AAC6BAAAugwAALoUAAC6HAAAuiQAALosAAC6NAAAujgAALpAAAC6dAAAurgAALrAAAC6yAAAutAAALrYAAC64AAAuugAALrwAAC6+AAAuzwAALtEAAC7TAAAu1QAALtcAAC7ZAAAu2wAALt0AAC7fAAAu4QAALv8AAC8dAAAvMAAAL0QAAC9ZAAAvdgAAL4oAAC+gAAAv3wAAL+EAAC/jAAAv5QAAL+c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AAEJ7AABCfQAAQn4AAEJ/AABCgAAAQoEAAEKDAABChQAAQoYAAEKHAABCiQAAQooAAEKTAABClAAAQpYAAELVAABC1wAAQtkAAELbAABC3QAAQt4AAELfAABC4AAAQuEAAELjAABC5QAAQuYAAELnAABC6QAAQuoAAEMpAABDKwAAQy0AAEMvAABDMQAAQzIAAEMzAABDNAAAQzUAAEM3AABDOQAAQzoAAEM7AABDPQAAQz4AAENHAABDSAAAQ0oAAEOJAABDiwAAQ40AAEOPAABDkQAAQ5IAAEOTAABDlAAAQ5UAAEOXAABDmQAAQ5oAAEObAABDnQAAQ54AAEPdAABD3wAAQ+EAAEPjAABD5QAAQ+YAAEPnAABD6AAAQ+kAAEPrAABD7QAAQ+4AAEPvAABD8QAAQ/IAAEP7AABD/AAAQ/4AAEQ9AABEPwAAREEAAERDAABERQAAREYAAERHAABESAAAREkAAERLAABETQAARE4AAERPAABEUQAARFIAAESRAABEkwAARJUAAESXAABEmQAARJoAAESbAABEnAAARJ0AAESfAABEoQAARKIAAESjAABEpQAARKYAAESzAABEtAAARLUAAES3AABE9gAARPgAAET6AABE/AAARP4AAET/AABFAAAARQEAAEUCAABFBAAARQYAAEUHAABFCAAARQoAAEULAABFSgAARUwAAEVOAABFUAAARVIAAEVTAABFVAAARVUAAEVWAABFWAAARVoAAEVbAABFXAAARV4AAEVfAABFdQAARYIAAEWJAABFiwAARY0AAEWPAABFlgAARZgAAEWaAABFnAAARZ4AAEWhAABFqAAARbIAAEX9AABGIAAARkAAAEZgAABGYgAARmQAAEZmAABGaAAARmoAAEZrAABGbAAARm4AAEZvAABGcQAARnIAAEZ0AABGdgAARncAAEZ4AABGegAARnsAAEaEAABGkQAARpYAAEaYAABGmgAARp8AAEahAABGowAARqUAAEbKAABG7gAARxUAAEc5AABHOwAARz0AAEc/AABHQQAAR0MAAEdFAABHRgAAR0gAAEdVAABHZgAAR2gAAEdqAABHbAAAR24AAEdwAABHcgAAR3QAAEd2AABHhwAAR4kAAEeLAABHjQAAR48AAEeRAABHkwAAR5UAAEeXAABHmQAAR9gAAEfaAABH3AAAR94AAEfgAABH4QAAR+IAAEfjAABH5AAAR+YAAEfoAABH6QAAR+oAAEfsAABH7QAASCwAAEguAABIMAAASDIAAEg0AABINQAASDYAAEg3AABIOAAASDoAAEg8AABIPQAASD4AAEhAAABIQQAASIAAAEiCAABIhAAASIYAAEiIAABIiQAASIoAAEiLAABIjAAASI4AAEiQAABIkQAASJIAAEiUAABIlQAASKIAAEijAABIpAAASKYAAEjlAABI5wAASOkAAEjrAABI7QAASO4AAEjvAABI8AAASPEAAEjzAABI9QAASPYAAEj3AABI+QAASPoAAEk5AABJOwAAST0AAEk/AABJQQAASUIAAElDAABJRAAASUUAAElHAABJSQAASUoAAElLAABJTQAASU4AAEmNAABJjwAASZEAAEmTAABJlQAASZYAAEmXAABJmAAASZkAAEmbAABJnQAASZ4AAEmfAABJoQAASaIAAEnhAABJ4wAASeUAAEnnAABJ6QAASeoAAEnrAABJ7AAASe0AAEnvAABJ8QAASfIAAEnzAABJ9QAASfYAAEo1AABKNwAASjkAAEo7AABKPQAASj4AAEo/AABKQAAASkEAAEpDAABKRQAASkYAAEpHAABKSQAASkoAAEpvAABKkwAASroAAEreAABK4AAASuIAAErkAABK5gAASugAAErqAABK6wAASu0AAEr6AABLCQAASwsAAEsNAABLDwAASxEAAEsTAABLFQAASxcAAEsmAABLKAAASyoAAEssAABLLgAASzAAAEsyAABLNAAASzYAAEt1AABLdwAAS3kAAEt7AABLfQAAS34AAEt/AABLgAAAS4EAAEuDAABLhQAAS4YAAEuHAABLiQAAS4oAAEvJAABLywAAS80AAEvPAABL0QAAS9IAAEvTAABL1AAAS9UAAEvXAABL2QAAS9oAAEvbAABL3QAAS94AAEwdAABMHwAATCEAAEwjAABMJQAATCYAAEwnAABMKAAATCkAAEwrAABMLQAATC4AAEwvAABMMQAATDIAAExxAABMcwAATHUAAEx3AABMeQAATHoAAEx7AABMfAAATH0AAEx/AABMgQAATIIAAEyDAABMhQAATIYAAEzFAABMxwAATMkAAEzLAABMzQAATM4AAEzPAABM0AAATNEAAEzTAABM1QAATNYAAEzXAABM2QAATNoAAE0ZAABNGwAATR0AAE0fAABNIQAATSIAAE0jAABNJAAATSUAAE0nAABNKQAATSoAAE0rAABNLQAATS4AAE1tAABNbwAATXEAAE1zAABNdQAATXYAAE13AABNeAAATXkAAE17AABNfQAATX4AAE1/AABNgQAATYIAAE3NAABN8AAAThAAAE4wAABOMgAATjQAAE42AABOOAAATjoAAE47AABOPAAATj4AAE4/AABOQQAATkIAAE5EAABORgAATkcAAE5IAABOSgAATksAAE5QAABOXQAATmIAAE5kAABOZgAATmsAAE5tAABObwAATnEAAE6WAABOugAATuEAAE8FAABPBwAATwkAAE8LAABPDQAATw8AAE8RAABPEgAATxQAAE8hAABPMgAATzQAAE82AABPOAAATzoAAE88AABPPgAAT0AAAE9CAABPUwAAT1UAAE9XAABPWQAAT1sAAE9dAABPXwAAT2EAAE9jAABPZQAAT6QAAE+mAABPqAAAT6oAAE+sAABPrQAAT64AAE+vAABPsAAAT7IAAE+0AABPtQAAT7YAAE+4AABPuQAAT/gAAE/6AABP/AAAT/4AAFAAAABQAQAAUAIAAFADAABQBAAAUAYAAFAIAABQCQAAUAoAAFAMAABQDQAAUEwAAFBOAABQUAAAUFIAAFBUAABQVQAAUFYAAFBXAABQWAAAUFoAAFBcAABQXQAAUF4AAFBgAABQYQAAUG4AAFBvAABQcAAAUHIAAFCxAABQswAAULUAAFC3AABQuQAAULoAAFC7AABQvAAAUL0AAFC/AABQwQAAUMIAAFDDAABQxQAAUMYAAFEFAABRBwAAUQkAAFELAABRDQAAUQ4AAFEPAABREAAAUREAAFETAABRFQAAURYAAFEXAABRGQAAURoAAFFZAABRWwAAUV0AAFFfAABRYQAAUWIAAFFjAABRZAAAUWUAAFFnAABRaQAAUWoAAFFrAABRbQAAUW4AAFGtAABRrwAAUbEAAFGzAABRtQAAUbYAAFG3AABRuAAAUbkAAFG7AABRvQAAUb4AAFG/AABRwQAAUcIAAFIBAABSAwAAUgUAAFIHAABSCQAAUgoAAFILAABSDAAAUg0AAFIPAABSEQAAUhIAAFITAABSFQAAUhYAAFI7AABSXwAAUoYAAFKqAABSrAAAUq4AAFKwAABSsgAAUrQAAFK2AABStwAAUrkAAFLGAABS1QAAUtcAAFLZAABS2wAAUt0AAFLfAABS4QAAUuMAAFLyAABS9AAAUvYAAFL4AABS+gAAUvwAAFL+AABTAAAAUwIAAFNBAABTQwAAU0UAAFNHAABTSQAAU0oAAFNLAABTTAAAU00AAFNPAABTUQAAU1IAAFNTAABTVQAAU1YAAFOVAABTlwAAU5kAAFObAABTnQAAU54AAFOfAABToAAAU6EAAFOjAABTpQAAU6YAAFOnAABTqQAAU6oAAFPpAABT6wAAU+0AAFPvAABT8QAAU/IAAFPzAABT9AAAU/UAAFP3AABT+QAAU/oAAFP7AABT/QAAU/4AAFQ9AABUPwAAVEEAAFRDAABURQAAVEYAAFRHAABUSAAAVEkAAFRLAABUTQAAVE4AAFRPAABUUQAAVFIAAFSRAABUkwAAVJUAAFSXAABUmQAAVJoAAFSbAABUnAAAVJ0AAFSfAABUoQAAVKIAAFSjAABUpQAAVKYAAFTlAABU5wAAVOkAAFTrAABU7QAAVO4AAFTvAABU8AAAVPEAAFTzAABU9QAAVPYAAFT3AABU+QAAVPoAAFU5AABVOwAAVT0AAFU/AABVQQAAVUIAAFVDAABVRAAAVUUAAFVHAABVSQAAVUoAAFVLAABVTQAAVU4AAFWZAABVvAAAVdwAAFX8AABV/gAAVgAAAFYCAABWBAAAVgYAAFYHAABWCAAAVgoAAFYLAABWDQAAVg4AAFYQAABWEgAAVhMAAFYUAABWFgAAVhcAAFYcAABWKQAAVi4AAFYwAABWMgAAVjcAAFY5AABWOwAAVj0AAFZiAABWhgAAVq0AAFbRAABW0wAAVtUAAFbXAABW2QAAVtsAAFbdAABW3gAAVuAAAFbtAABW/gAAVwAAAFcCAABXBAAAVwYAAFcIAABXCgAAVwwAAFcOAABXHwAAVyEAAFcjAABXJQAAVycAAFcpAABXKwAAVy0AAFcvAABXMQAAV3AAAFdyAABXdAAAV3YAAFd4AABXeQAAV3oAAFd7AABXfAAAV34AAFeAAABXgQAAV4IAAFeEAABXhQAAV8QAAFfGAABXyAAAV8oAAFfMAABXzQAAV84AAFfPAABX0AAAV9IAAFfUAABX1QAAV9YAAFfYAABX2QAAWBgAAFgaAABYHAAAWB4AAFggAABYIQAAWCIAAFgjAABYJAAAWCYAAFgoAABYKQAAWCoAAFgsAABYLQAAWDoAAFg7AABYPAAAWD4AAFh9AABYfwAAWIEAAFiDAABYhQAAWIYAAFiHAABYiAAAWIkAAFiLAABYjQAAWI4AAFiPAABYkQAAWJIAAFjRAABY0wAAWNUAAFjXAABY2QAAWNoAAFjbAABY3AAAWN0AAFjfAABY4QAAWOIAAFjjAABY5QAAWOYAAFklAABZJwAAWSkAAFkrAABZLQAAWS4AAFkvAABZMAAAWTEAAFkzAABZNQAAWTYAAFk3AABZOQAAWToAAFl5AABZewAAWX0AAFl/AABZgQAAWYIAAFmDAABZhAAAWYUAAFmHAABZiQAAWYoAAFmLAABZjQAAWY4AAFnNAABZzwAAWdEAAFnTAABZ1QAAWdYAAFnXAABZ2AAAWdkAAFnbAABZ3QAAWd4AAFnfAABZ4QAAWeIAAFoHAABaKwAAWlIAAFp2AABaeAAAWnoAAFp8AABafgAAWoAAAFqCAABagwAAWoUAAFqSAABaoQAAWqMAAFqlAABapwAAWqkAAFqrAABarQAAWq8AAFq+AABawAAAWsIAAFrEAABaxgAAWsgAAFrKAABazAAAWs4AAFsNAABbDwAAWxEAAFsTAABbFQAAWxYAAFsXAABbGAAAWxkAAFsbAABbHQAAWx4AAFsfAABbIQAAWyIAAFthAABbYwAAW2UAAFtnAABbaQAAW2oAAFtrAABbbAAAW20AAFtvAABbcQAAW3IAAFtzAABbdQAAW3YAAFu1AABbtwAAW7kAAFu7AABbvQAAW74AAFu/AABbwAAAW8EAAFvDAABbxQAAW8YAAFvHAABbyQAAW8oAAFwJAABcCwAAXA0AAFwPAABcEQAAXBIAAFwTAABcFAAAXBUAAFwXAABcGQAAXBoAAFwbAABcHQAAXB4AAFxdAABcXwAAXGEAAFxjAABcZQAAXGYAAFxnAABcaAAAXGkAAFxrAABcbQAAXG4AAFxvAABccQAAXHIAAFyxAABcswAAXLUAAFy3AABcuQAAXLoAAFy7AABcvAAAXL0AAFy/AABcwQAAXMIAAFzDAABcxQAAXMYAAF0FAABdBwAAXQkAAF0LAABdDQAAXQ4AAF0PAABdEAAAXREAAF0TAABdFQAAXRYAAF0XAABdGQAAXRoAAF0jAABdJAAAXSYAAF1pAABdjQAAXbEAAF3UAABd+wAAXhsAAF5CAABeaQAAXokAAF6tAABe0QAAXtMAAF7VAABe1wAAXtkAAF7bAABe3QAAXt8AAF7hAABe4wAAXuUAAF7nAABe6QAAXuwAAF7uAABe7wAAXvQAAF8BAABfBAAAXwYAAF8JAABfCwAAXw0AAF8yAABfVgAAX30AAF+hAABfowAAX6UAAF+nAABfqQAAX6sAAF+tAABfrgAAX7AAAF+9AABf0AAAX9IAAF/UAABf1gAAX9gAAF/aAABf3AAAX94AAF/gAABf4gAAX/UAAF/3AABf+QAAX/sAAF/9AABf/wAAYAEAAGADAABgBQAAYAcAAGAJAABgSAAAYEoAAGBMAABgTgAAYFAAAGBRAABgUgAAYFMAAGBUAABgVgAAYFgAAGBZAABgWgAAYFwAAGBdAABgZgAAYGcAAGBpAABgqAAAYKoAAGCsAABgrgAAYLAAAGCxAABgsgAAYLMAAGC0AABgtgAAYLgAAGC5AABgugAAYLwAAGC9AABg/AAAYP4AAGEAAABhAgAAYQQAAGEFAABhBgAAYQcAAGEIAABhCgAAYQwAAGENAABhDgAAYRAAAGERAABhGgAAYR0AAGEfAABhIQAAYSoAAGEtAABhLwAAYTEAAGE5AABheAAAYXoAAGF8AABhfgAAYYAAAGGBAABhggAAYYMAAGGEAABhhgAAYYgAAGGJAABhigAAYYwAAGGNAABhzAAAYc4AAGHQAABh0gAAYdQAAGHVAABh1gAAYdcAAGHYAABh2gAAYdwAAGHdAABh3gAAYeAAAGHhAABh6gAAYesAAGHtAABiLAAAYi4AAGIwAABiMgAAYjQAAGI1AABiNgAAYjcAAGI4AABiOgAAYjwAAGI9AABiPgAAYkAAAGJBAABigAAAYoIAAGKEAABihgAAYogAAGKJAABiigAAYosAAGKMAABijgAAYpAAAGKRAABikgAAYpQAAGKVAABiogAAYqMAAGKkAABipgAAYuUAAGLnAABi6QAAYusAAGLtAABi7gAAYu8AAGLwAABi8QAAYvMAAGL1AABi9gAAYvcAAGL5AABi+gAAYzkAAGM7AABjPQAAYz8AAGNBAABjQgAAY0MAAGNEAABjRQAAY0cAAGNJAABjSgAAY0sAAGNNAABjTgAAY1sAAGOgAABjogAAY6QAAGOmAABjqAAAY6oAAGOtAABjsAAAY7MAAGO2AABjuQAAY7wAAGO/AABjwgAAY8UAAGPIAABjywAAY84AAGPRAABj1AAAY9cAAGPaAABj3QAAY+AAAGPjAABj5gAAY+kAAGPsAABj7gAAY/EAAGP0AABj9wAAY/oAAGP9AABkQgAAZEUAAGRIAABkSwAAZE4AAGRRAABkVAAAZFcAAGRaAABkXQAAZGAAAGRjAABkZgAAZGkAAGRsAABkbwAAZHIAAGR1AABkeAAAZHsAAGR+AABkgQAAZIQAAGSHAABkigAAZI0AAGSQAABkkwAAZJYAAGSZAABknAAAZJ8AAGSiAABkpQAAZKcAAGSsAABkuwAAZM0AAGTbAABk4AAAZOoAAGTzAABk/wAAZQ4AAGUhAABlLwAAZT0AAGVLAABlUgAAZVoAAGVnAABlewAAZYAAAGWHAABllQAAZaMAAGWtAABlswAAZcEAAGXLAABl2gAAZfAAAGX3AABmAQAAZgoAAGYeAABmJAAAZm8AAGaSAABmsgAAZtIAAGbUAABm1gAAZtgAAGbaAABm3AAAZt0AAGbeAABm4QAAZuIAAGbkAABm5QAAZucAAGbpAABm6gAAZusAAGbuAABm7wAAZvQAAGcBAABnBgAAZwgAAGcKAABnDwAAZxIAAGcVAABnFwAAZzwAAGdgAABnhwAAZ6sAAGeuAABnsAAAZ7IAAGe0AABntgAAZ7gAAGe5AABnvAAAZ8kAAGfaAABn3AAAZ94AAGfgAABn4gAAZ+QAAGfmAABn6AAAZ+oAAGf7AABn/gAAaAEAAGgEAABoBwAAaAoAAGgNAABoEAAAaBMAAGgVAABoVAAAaFYAAGhYAABoWgAAaF0AAGheAABoXwAAaGAAAGhhAABoYwAAaGUAAGhmAABoZwAAaGkAAGhqAABoqQAAaKsAAGitAABorwAAaLIAAGizAABotAAAaLUAAGi2AABouAAAaLoAAGi7AABovAAAaL4AAGi/AABo/gAAaQAAAGkDAABpBQAAaQgAAGkJAABpCgAAaQsAAGkMAABpDgAAaRAAAGkRAABpEgAAaRQAAGkVAABpIgAAaSMAAGkkAABpJgAAaWUAAGlnAABpaQAAaWsAAGluAABpbwAAaXAAAGlxAABpcgAAaXQAAGl2AABpdwAAaXgAAGl6AABpewAAaboAAGm8AABpvgAAacAAAGnDAABpxAAAacUAAGnGAABpxwAAackAAGnLAABpzAAAac0AAGnPAABp0AAAag8AAGoRAABqEwAAahUAAGoYAABqGQAAahoAAGobAABqHAAAah4AAGogAABqIQAAaiIAAGokAABqJQAAamQAAGpmAABqaAAAamoAAGptAABqbgAAam8AAGpwAABqcQAAanMAAGp1AABqdgAAancAAGp5AABqegAAarkAAGq7AABqvQAAar8AAGrCAABqwwAAasQAAGrFAABqxgAAasgAAGrKAABqywAAaswAAGrOAABqzwAAavQAAGsYAABrPwAAa2MAAGtmAABraAAAa2oAAGtsAABrbgAAa3AAAGtxAABrdAAAa4EAAGuQAABrkgAAa5QAAGuWAABrmAAAa5oAAGucAABrngAAa60AAGuwAABrswAAa7YAAGu5AABrvAAAa78AAGvCAABrxAAAbAMAAGwFAABsBwAAbAkAAGwMAABsDQAAbA4AAGwPAABsEAAAbBIAAGwUAABsFQAAbBYAAGwYAABsGQAAbFgAAGxaAABsXAAAbF4AAGxhAABsYgAAbGMAAGxkAABsZQAAbGcAAGxpAABsagAAbGsAAGxtAABsbgAAbK0AAGyvAABssQAAbLMAAGy2AABstwAAbLgAAGy5AABsugAAbLwAAGy+AABsvwAAbMAAAGzCAABswwAAbQIAAG0EAABtBwAAbQkAAG0MAABtDQAAbQ4AAG0PAABtEAAAbRIAAG0UAABtFQAAbRYAAG0YAABtGQAAbRwAAG1bAABtXQAAbV8AAG1hAABtZAAAbWUAAG1mAABtZwAAbWgAAG1qAABtbAAAbW0AAG1uAABtcAAAbXEAAG2wAABtsgAAbbQAAG22AABtuQAAbboAAG27AABtvAAAbb0AAG2/AABtwQAAbcIAAG3DAABtxQAAbcYAAG4FAABuBwAAbgkAAG4LAABuDgAAbg8AAG4QAABuEQAAbhIAAG4UAABuFgAAbhcAAG4YAABuGgAAbhsAAG5mAABuiQAAbqkAAG7JAABuywAAbs0AAG7PAABu0QAAbtMAAG7UAABu1QAAbtgAAG7ZAABu2wAAbtwAAG7eAABu4AAAbuEAAG7iAABu5QAAbuYAAG7rAABu+AAAbv0AAG7/AABvAQAAbwYAAG8JAABvDAAAbw4AAG8zAABvVwAAb34AAG+iAABvpQAAb6cAAG+pAABvqwAAb60AAG+vAABvsAAAb7MAAG/AAABv0QAAb9MAAG/VAABv1wAAb9kAAG/bAABv3QAAb98AAG/hAABv8gAAb/UAAG/4AABv+wAAb/4AAHABAABwBAAAcAcAAHAKAABwDAAAcEsAAHBNAABwTwAAcFEAAHBUAABwVQAAcFYAAHBXAABwWAAAcFoAAHBcAABwXQAAcF4AAHBgAABwYQAAcKAAAHCiAABwpAAAcKYAAHCpAABwqgAAcKsAAHCsAABwrQAAcK8AAHCxAABwsgAAcLMAAHC1AABwtgAAcPUAAHD3AABw+gAAcPwAAHD/AABxAAAAcQEAAHECAABxAwAAcQUAAHEHAABxCAAAcQkAAHELAABxDAAAcRkAAHEaAABxGwAAcR0AAHFcAABxXgAAcWAAAHFiAABxZQAAcWYAAHFnAABxaAAAcWkAAHFrAABxbQAAcW4AAHFvAABxcQAAcXIAAHGxAABxswAAcbUAAHG3AABxugAAcbsAAHG8AABxvQAAcb4AAHHAAABxwgAAccMAAHHEAABxxgAAcccAAHIGAAByCAAAcgoAAHIMAAByDwAAchAAAHIRAAByEgAAchMAAHIVAAByFwAAchgAAHIZAAByGwAAchwAAHJbAAByXQAAcl8AAHJhAAByZAAAcmUAAHJmAAByZwAAcmgAAHJqAABybAAAcm0AAHJuAABycAAAcnEAAHKwAABysgAAcrQAAHK2AAByuQAAcroAAHK7AAByvAAAcr0AAHK/AABywQAAcsIAAHLDAAByxQAAcsYAAHLrAABzDwAAczYAAHNaAABzXQAAc18AAHNhAABzYwAAc2UAAHNnAABzaAAAc2sAAHN4AABzhwAAc4kAAHOLAABzjQAAc48AAHORAABzkwAAc5UAAHOkAABzpwAAc6oAAHOtAABzsAAAc7MAAHO2AABzuQAAc7sAAHP6AABz/AAAc/4AAHQAAAB0AwAAdAQAAHQFAAB0BgAAdAcAAHQJAAB0CwAAdAwAAHQNAAB0DwAAdBAAAHRPAAB0UQAAdFMAAHRVAAB0WAAAdFkAAHRaAAB0WwAAdFwAAHReAAB0YAAAdGEAAHRiAAB0ZAAAdGUAAHSkAAB0pgAAdKgAAHSqAAB0rQAAdK4AAHSvAAB0sAAAdLEAAHSzAAB0tQAAdLYAAHS3AAB0uQAAdLoAAHT5AAB0+wAAdP0AAHT/AAB1AgAAdQMAAHUEAAB1BQAAdQYAAHUIAAB1CgAAdQsAAHUMAAB1DgAAdQ8AAHVOAAB1UAAAdVIAAHVUAAB1VwAAdVgAAHVZAAB1WgAAdVsAAHVdAAB1XwAAdWAAAHVhAAB1YwAAdWQAAHWjAAB1pQAAdacAAHWpAAB1rAAAda0AAHWuAAB1rwAAdbAAAHWyAAB1tAAAdbUAAHW2AAB1uAAAdbkAAHX4AAB1+gAAdfwAAHX+AAB2AQAAdgIAAHYDAAB2BAAAdgUAAHYHAAB2CQAAdgoAAHYLAAB2DQAAdg4AAHZZAAB2fAAAdpwAAHa8AAB2vgAAdsAAAHbCAAB2xAAAdsYAAHbHAAB2yAAAdssAAHbMAAB2zgAAds8AAHbRAAB20wAAdtQAAHbVAAB22AAAdtkAAHbeAAB26wAAdvAAAHbyAAB29AAAdvkAAHb8AAB2/wAAdwEAAHcmAAB3SgAAd3EAAHeVAAB3mAAAd5oAAHecAAB3ngAAd6AAAHeiAAB3owAAd6YAAHezAAB3xAAAd8YAAHfIAAB3ygAAd8wAAHfOAAB30AAAd9IAAHfUAAB35QAAd+gAAHfrAAB37gAAd/EAAHf0AAB39wAAd/oAAHf9AAB3/wAAeD4AAHhAAAB4QgAAeEQAAHhHAAB4SAAAeEkAAHhKAAB4SwAAeE0AAHhPAAB4UAAAeFEAAHhTAAB4VAAAeJMAAHiVAAB4lwAAeJkAAHicAAB4nQAAeJ4AAHifAAB4oAAAeKIAAHikAAB4pQAAeKYAAHioAAB4qQAAeOgAAHjqAAB47QAAeO8AAHjyAAB48wAAePQAAHj1AAB49gAAePgAAHj6AAB4+wAAePwAAHj+AAB4/wAAeQwAAHkNAAB5DgAAeRAAAHlPAAB5UQAAeVMAAHlVAAB5WAAAeVkAAHlaAAB5WwAAeVwAAHleAAB5YAAAeWEAAHliAAB5ZAAAeWUAAHmkAAB5pgAAeagAAHmqAAB5rQAAea4AAHmvAAB5sAAAebEAAHmzAAB5tQAAebYAAHm3AAB5uQAAeboAAHn5AAB5+wAAef0AAHn/AAB6AgAAegMAAHoEAAB6BQAAegYAAHoIAAB6CgAAegsAAHoMAAB6DgAAeg8AAHpOAAB6UAAAelIAAHpUAAB6VwAAelgAAHpZAAB6WgAAelsAAHpdAAB6XwAAemAAAHphAAB6YwAAemQAAHqjAAB6pQAAeqcAAHqpAAB6rAAAeq0AAHquAAB6rwAAerAAAHqyAAB6tAAAerUAAHq2AAB6uAAAerkAAHreAAB7AgAAeykAAHtNAAB7UAAAe1IAAHtUAAB7VgAAe1gAAHtaAAB7WwAAe14AAHtrAAB7egAAe3wAAHt+AAB7gAAAe4IAAHuEAAB7hgAAe4gAAHuXAAB7mgAAe50AAHugAAB7owAAe6YAAHupAAB7rAAAe64AAHvtAAB77wAAe/IAAHv0AAB79wAAe/gAAHv5AAB7+gAAe/sAAHv9AAB7/wAAfAAAAHwBAAB8AwAAfAQAAHwHAAB8RgAAfEgAAHxKAAB8TAAAfE8AAHxQAAB8UQAAfFIAAHxTAAB8VQAAfFcAAHxYAAB8WQAAfFsAAHxcAAB8mwAAfJ0AAHyfAAB8oQAAfKQAAHylAAB8pgAAfKcAAHyoAAB8qgAAfKwAAHytAAB8rgAAfLAAAHyxAAB88AAAfPIAAHz1AAB89wAAfPoAAHz7AAB8/AAAfP0AAHz+AAB9AAAAfQIAAH0DAAB9BAAAfQYAAH0HAAB9CgAAfUkAAH1LAAB9TQAAfU8AAH1SAAB9UwAAfVQAAH1VAAB9VgAAfVgAAH1aAAB9WwAAfVwAAH1eAAB9XwAAfZ4AAH2gAAB9ogAAfaQAAH2nAAB9qAAAfakAAH2qAAB9qwAAfa0AAH2vAAB9sAAAfbEAAH2zAAB9tAAAffMAAH31AAB99wAAffkAAH38AAB9/QAAff4AAH3/AAB+AAAAfgIAAH4EAAB+BQAAfgYAAH4IAAB+CQAAflQAAH53AAB+lwAAfrcAAH65AAB+uwAAfr0AAH6/AAB+wQAAfsIAAH7DAAB+xgAAfscAAH7JAAB+ygAAfswAAH7OAAB+zwAAftAAAH7TAAB+1AAAftkAAH7mAAB+6wAAfu0AAH7vAAB+9AAAfvcAAH76AAB+/AAAfyEAAH9FAAB/bAAAf5AAAH+TAAB/lQAAf5cAAH+ZAAB/mwAAf50AAH+eAAB/oQAAf64AAH+/AAB/wQAAf8MAAH/FAAB/xwAAf8kAAH/LAAB/zQAAf88AAH/gAAB/4wAAf+YAAH/pAAB/7AAAf+8AAH/yAAB/9QAAf/gAAH/6AACAOQAAgDsAAIA9AACAPwAAgEIAAIBDAACARAAAgEUAAIBGAACASAAAgEoAAIBLAACATAAAgE4AAIBPAACAjgAAgJAAAICSAACAlAAAgJcAAICYAACAmQAAgJoAAICbAACAnQAAgJ8AAICgAACAoQAAgKMAAICkAACA4wAAgOUAAIDoAACA6gAAgO0AAIDuAACA7wAAgPAAAIDxAACA8wAAgPUAAID2AACA9wAAgPkAAID6AACBBwAAgQgAAIEJAACBCwAAgUoAAIFMAACBTgAAgVAAAIFTAACBVAAAgVUAAIFWAACBVwAAgVkAAIFbAACBXAAAgV0AAIFfAACBYAAAgZ8AAIGhAACBowAAgaUAAIGoAACBqQAAgaoAAIGrAACBrAAAga4AAIGwAACBsQAAgbIAAIG0AACBtQAAgfQAAIH2AACB+AAAgfoAAIH9AACB/gAAgf8AAIIAAACCAQAAggMAAIIFAACCBgAAggcAAIIJAACCCgAAgkkAAIJLAACCTQAAgk8AAIJSAACCUwAAglQAAIJVAACCVgAAglgAAIJaAACCWwAAglwAAIJeAACCXwAAgp4AAIKgAACCogAAgqQAAIKnAACCqAAAgqkAAIKqAACCqwAAgq0AAIKvAACCsAAAgrEAAIKzAACCtAAAgtkAAIL9AACDJAAAg0gAAINLAACDTQAAg08AAINRAACDUwAAg1UAAINWAACDWQAAg2YAAIN1AACDdwAAg3kAAIN7AACDfQAAg38AAIOBAACDgwAAg5IAAIOVAACDmAAAg5sAAIOeAACDoQAAg6QAAIOnAACDqQAAg+gAAIPqAACD7AAAg+4AAIPxAACD8gAAg/MAAIP0AACD9QAAg/cAAIP5AACD+gAAg/sAAIP9AACD/gAAhD0AAIQ/AACEQQAAhEMAAIRGAACERwAAhEgAAIRJAACESgAAhEwAAIROAACETwAAhFAAAIRSAACEUwAAhJIAAISUAACElgAAhJgAAISbAACEnAAAhJ0AAISeAACEnwAAhKEAAISjAACEpAAAhKUAAISnAACEqAAAhOcAAITpAACE7AAAhO4AAITxAACE8gAAhPMAAIT0AACE9QAAhPcAAIT5AACE+gAAhPsAAIT9AACE/gAAhT0AAIU/AACFQQAAhUMAAIVGAACFRwAAhUgAAIVJAACFSgAAhUwAAIVOAACFTwAAhVAAAIVSAACFUwAAhZIAAIWUAACFlgAAhZgAAIWbAACFnAAAhZ0AAIWeAACFnwAAhaEAAIWjAACFpAAAhaUAAIWnAACFqAAAhecAAIXpAACF6wAAhe0AAIXwAACF8QAAhfIAAIXzAACF9AAAhfYAAIX4AACF+QAAhfoAAIX8AACF/QAAhkgAAIZrAACGiwAAhqsAAIatAACGrwAAhrEAAIazAACGtQAAhrYAAIa3AACGugAAhrsAAIa9AACGvgAAhsAAAIbCAACGwwAAhsQAAIbHAACGyAAAhtEAAIbeAACG4wAAhuUAAIbnAACG7AAAhu8AAIbyAACG9AAAhxkAAIc9AACHZAAAh4gAAIeLAACHjQAAh48AAIeRAACHkwAAh5UAAIeWAACHmQAAh6YAAIe3AACHuQAAh7sAAIe9AACHvwAAh8EAAIfDAACHxQAAh8cAAIfYAACH2wAAh94AAIfhAACH5AAAh+cAAIfqAACH7QAAh/AAAIfyAACIMQAAiDMAAIg1AACINwAAiDoAAIg7AACIPAAAiD0AAIg+AACIQAAAiEIAAIhDAACIRAAAiEYAAIhHAACIhgAAiIgAAIiKAACIjAAAiI8AAIiQAACIkQAAiJIAAIiTAACIlQAAiJcAAIiYAACImQAAiJsAAIicAACI2wAAiN0AAIjgAACI4gAAiOUAAIjmAACI5wAAiOgAAIjpAACI6wAAiO0AAIjuAACI7wAAiPEAAIjyAACI/wAAiQAAAIkBAACJAwAAiUIAAIlEAACJRgAAiUgAAIlLAACJTAAAiU0AAIlOAACJTwAAiVEAAIlTAACJVAAAiVUAAIlXAACJWAAAiZcAAImZAACJmwAAiZ0AAImgAACJoQAAiaIAAImjAACJpAAAiaYAAImoAACJqQAAiaoAAImsAACJrQAAiewAAInuAACJ8AAAifIAAIn1AACJ9gAAifcAAIn4AACJ+QAAifsAAIn9AACJ/gAAif8AAIoBAACKAgAAikEAAIpDAACKRQAAikcAAIpKAACKSwAAikwAAIpNAACKTgAAilAAAIpSAACKUwAAilQAAIpWAACKVwAAipYAAIqYAACKmgAAipwAAIqfAACKoAAAiqEAAIqiAACKowAAiqUAAIqnAACKqAAAiqkAAIqrAACKrAAAitEAAIr1AACLHAAAi0AAAItDAACLRQAAi0cAAItJAACLSwAAi00AAItOAACLUQAAi14AAIttAACLbwAAi3EAAItzAACLdQAAi3cAAIt5AACLewAAi4oAAIuNAACLkAAAi5MAAIuWAACLmQAAi5wAAIufAACLoQAAi+AAAIviAACL5AAAi+YAAIvpAACL6gAAi+sAAIvsAACL7QAAi+8AAIvxAACL8gAAi/MAAIv1AACL9gAAjDUAAIw3AACMOQAAjDsAAIw+AACMPwAAjEAAAIxBAACMQgAAjEQAAIxGAACMRwAAjEgAAIxKAACMSwAAjIoAAIyMAACMjgAAjJAAAIyTAACMlAAAjJUAAIyWAACMlwAAjJkAAIybAACMnAAAjJ0AAIyfAACMoAAAjN8AAIzhAACM4wAAjOUAAIzoAACM6QAAjOoAAIzrAACM7AAAjO4AAIzwAACM8QAAjPIAAIz0AACM9QAAjTQAAI02AACNOAAAjToAAI09AACNPgAAjT8AAI1AAACNQQAAjUMAAI1FAACNRgAAjUcAAI1JAACNSgAAjYkAAI2LAACNjQAAjY8AAI2SAACNkwAAjZQAAI2VAACNlgAAjZgAAI2aAACNmwAAjZwAAI2eAACNnwAAjd4AAI3gAACN4gAAjeQAAI3nAACN6AAAjekAAI3qAACN6wAAje0AAI3vAACN8AAAjfEAAI3zAACN9AAAjj8AAI5iAACOggAAjqIAAI6kAACOpgAAjqgAAI6qAACOrAAAjq0AAI6uAACOsQAAjrIAAI60AACOtQAAjrcAAI66AACOuwAAjrwAAI6/AACOwAAAjsUAAI7SAACO1wAAjtkAAI7bAACO4AAAjuMAAI7mAACO6AAAjw0AAI8xAACPWAAAj3wAAI9/AACPgQAAj4MAAI+FAACPhwAAj4kAAI+KAACPjQAAj5oAAI+rAACPrQAAj68AAI+xAACPswAAj7UAAI+3AACPuQAAj7sAAI/MAACPzwAAj9IAAI/VAACP2AAAj9sAAI/eAACP4QAAj+QAAI/mAACQJQAAkCcAAJApAACQKwAAkC4AAJAvAACQMAAAkDEAAJAyAACQNAAAkDYAAJA3AACQOAAAkDoAAJA7AACQegAAkHwAAJB+AACQgAAAkIMAAJCEAACQhQAAkIYAAJCHAACQiQAAkIsAAJCMAACQjQAAkI8AAJCQAACQzwAAkNEAAJDUAACQ1gAAkNkAAJDaAACQ2wAAkNwAAJDdAACQ3wAAkOEAAJDiAACQ4wAAkOUAAJDmAACQ8wAAkPQAAJD1AACQ9wAAkTYAAJE4AACROgAAkTwAAJE/AACRQAAAkUEAAJFCAACRQwAAkUUAAJFHAACRSAAAkUkAAJFLAACRTAAAkYsAAJGNAACRjwAAkZEAAJGUAACRlQAAkZYAAJGXAACRmAAAkZoAAJGcAACRnQAAkZ4AAJGgAACRoQAAkeAAAJHiAACR5AAAkeYAAJHpAACR6gAAkesAAJHsAACR7QAAke8AAJHxAACR8gAAkfMAAJH1AACR9gAAkjUAAJI3AACSOQAAkjsAAJI+AACSPwAAkkAAAJJBAACSQgAAkkQAAJJGAACSRwAAkkgAAJJKAACSSwAAkooAAJKMAACSjgAAkpAAAJKTAACSlAAAkpUAAJKWAACSlwAAkpkAAJKbAACSnAAAkp0AAJKfAACSoAAAksUAAJLpAACTEAAAkzQAAJM3AACTOQAAkzsAAJM9AACTPwAAk0EAAJNCAACTRQAAk1IAAJNhAACTYwAAk2UAAJNnAACTaQAAk2sAAJNtAACTbwAAk34AAJOBAACThAAAk4cAAJOKAACTjQAAk5AAAJOTAACTlQAAk9QAAJPWAACT2AAAk9oAAJPdAACT3gAAk98AAJPgAACT4QAAk+MAAJPlAACT5gAAk+cAAJPpAACT6gAAlCkAAJQrAACULQAAlC8AAJQyAACUMwAAlDQAAJQ1AACUNgAAlDgAAJQ6AACUOwAAlDwAAJQ+AACUPwAAlH4AAJSAAACUggAAlIQAAJSHAACUiAAAlIkAAJSKAACUiwAAlI0AAJSPAACUkAAAlJEAAJSTAACUlAAAlNMAAJTVAACU1wAAlNkAAJTcAACU3QAAlN4AAJTfAACU4AAAlOIAAJTkAACU5QAAlOYAAJToAACU6QAAlSgAAJUqAACVLAAAlS4AAJUxAACVMgAAlTMAAJU0AACVNQAAlTcAAJU5AACVOgAAlTsAAJU9AACVPgAAlX0AAJV/AACVgQAAlYMAAJWGAACVhwAAlYgAAJWJAACVigAAlYwAAJWOAACVjwAAlZAAAJWSAACVkwAAldIAAJXUAACV1gAAldgAAJXbAACV3AAAld0AAJXeAACV3wAAleEAAJXjAACV5AAAleUAAJXnAACV6AAAljMAAJZWAACWdgAAlpYAAJaYAACWmgAAlpwAAJaeAACWoAAAlqEAAJaiAACWpQAAlqYAAJaoAACWqQAAlqsAAJauAACWrwAAlrAAAJazAACWtAAAlrkAAJbGAACWywAAls0AAJbPAACW1AAAltcAAJbaAACW3AAAlwEAAJclAACXTAAAl3AAAJdzAACXdQAAl3cAAJd5AACXewAAl30AAJd+AACXgQAAl44AAJefAACXoQAAl6MAAJelAACXpwAAl6kAAJerAACXrQAAl68AAJfAAACXwwAAl8YAAJfJAACXzAAAl88AAJfSAACX1QAAl9gAAJfaAACYGQAAmBsAAJgdAACYHwAAmCIAAJgjAACYJAAAmCUAAJgmAACYKAAAmCoAAJgrAACYLAAAmC4AAJgvAACYbgAAmHAAAJhyAACYdAAAmHcAAJh4AACYeQAAmHoAAJh7AACYfQAAmH8AAJiAAACYgQAAmIMAAJiEAACYwwAAmMUAAJjIAACYygAAmM0AAJjOAACYzwAAmNAAAJjRAACY0wAAmNUAAJjWAACY1wAAmNkAAJjaAACY5wAAmOgAAJjpAACY6wAAmSoAAJksAACZLgAAmTAAAJkzAACZNAAAmTUAAJk2AACZNwAAmTkAAJk7AACZPAAAmT0AAJk/AACZQAAAmX8AAJmBAACZgwAAmYUAAJmIAACZiQAAmYoAAJmLAACZjAAAmY4AAJmQAACZkQAAmZIAAJmUAACZlQAAmdQAAJnWAACZ2AAAmdoAAJndAACZ3gAAmd8AAJngAACZ4QAAmeMAAJnlAACZ5gAAmecAAJnpAACZ6gAAmikAAJorAACaLQAAmi8AAJoyAACaMwAAmjQAAJo1AACaNgAAmjgAAJo6AACaOwAAmjwAAJo+AACaPwAAmn4AAJqAAACaggAAmoQAAJqHAACaiAAAmokAAJqKAACaiwAAmo0AAJqPAACakAAAmpEAAJqTAACalAAAmrkAAJrdAACbBAAAmygAAJsrAACbLQAAmy8AAJsxAACbMwAAmzUAAJs2AACbOQAAm0YAAJtVAACbVwAAm1kAAJtbAACbXQAAm18AAJthAACbYwAAm3IAAJt1AACbeAAAm3sAAJt+AACbgQAAm4QAAJuHAACbiQAAm8gAAJvKAACbzAAAm84AAJvRAACb0gAAm9MAAJvUAACb1QAAm9cAAJvZAACb2gAAm9sAAJvdAACb3gAAnB0AAJwfAACcIQAAnCMAAJwmAACcJwAAnCgAAJwpAACcKgAAnCwAAJwuAACcLwAAnDAAAJwyAACcMwAAnHIAAJx0AACcdgAAnHgAAJx7AACcfAAAnH0AAJx+AACcfwAAnIEAAJyDAACchAAAnIUAAJyHAACciAAAnMcAAJzJAACczAAAnM4AAJzRAACc0gAAnNMAAJzUAACc1QAAnNcAAJzZAACc2gAAnNsAAJzdAACc3gAAnR0AAJ0fAACdIQAAnSMAAJ0mAACdJwAAnSgAAJ0pAACdKgAAnSwAAJ0uAACdLwAAnTAAAJ0yAACdMwAAnXIAAJ10AACddgAAnXgAAJ17AACdfAAAnX0AAJ1+AACdfwAAnYEAAJ2DAACdhAAAnYUAAJ2HAACdiAAAnccAAJ3JAACdywAAnc0AAJ3QAACd0QAAndIAAJ3TAACd1AAAndYAAJ3YAACd2QAAndoAAJ3cAACd3QAAnigAAJ5LAACeawAAnosAAJ6NAACejwAAnpEAAJ6TAACelQAAnpYAAJ6XAACemgAAnpsAAJ6dAACengAAnqEAAJ6kAACepQAAnqYAAJ6pAACeqgAAnq8AAJ68AACewQAAnsMAAJ7GAACeywAAns4AAJ7RAACe0wAAnuYAAJ8LAACfLwAAn1YAAJ96AACffQAAn38AAJ+BAACfgwAAn4UAAJ+HAACfiAAAn4sAAJ+YAACfqQAAn6sAAJ+tAACfrwAAn7EAAJ+zAACftQAAn7cAAJ+5AACfygAAn80AAJ/QAACf0wAAn9YAAJ/ZAACf3AAAn98AAJ/iAACf5AAAoCMAAKAlAACgJwAAoCkAAKAsAACgLQAAoC4AAKAvAACgMAAAoDIAAKA0AACgNQAAoDYAAKA4AACgOQAAoHgAAKB6AACgfAAAoH4AAKCBAACgggAAoIMAAKCEAACghQAAoIcAAKCJAACgigAAoIsAAKCNAACgjgAAoM0AAKDPAACg0gAAoNQAAKDXAACg2AAAoNkAAKDaAACg2wAAoN0AAKDfAACg4AAAoOEAAKDjAACg5AAAoPEAAKDyAACg8wAAoPUAAKE0AAChNgAAoTgAAKE6AAChPQAAoT4AAKE/AAChQAAAoUEAAKFDAAChRQAAoUYAAKFHAAChSQAAoUoAAKGJAAChiwAAoY0AAKGPAAChkgAAoZMAAKGUAAChlQAAoZYAAKGYAAChmgAAoZsAAKGcAAChngAAoZ8AAKHeAACh4AAAoeIAAKHkAACh5wAAoegAAKHpAACh6gAAoesAAKHtAACh7wAAofAAAKHxAACh8wAAofQAAKIzAACiNQAAojcAAKI5AACiPAAAoj0AAKI+AACiPwAAokAAAKJCAACiRAAAokUAAKJGAACiSAAAokkAAKKIAACiigAAoowAAKKOAACikQAAopIAAKKTAACilAAAopUAAKKXAACimQAAopoAAKKbAACinQAAop4AAKLDAACi5wAAow4AAKMyAACjNQAAozgAAKM6AACjPAAAoz4AAKNAAACjQQAAo0QAAKNRAACjXgAAo2EAAKNkAACjZwAAo2oAAKNtAACjcAAAo30AAKOAAACjgwAAo4YAAKOJAACjjAAAo48AAKORAACjpgAAo7UAAKPHAACj2wAAo+0AAKP/AACkPgAApEAAAKRDAACkRQAApEgAAKRJAACkSgAApEsAAKRMAACkTgAApFEAAKRSAACkUwAApFUAAKRWAACkmQAApL0AAKThAAClBAAApSsAAKVLAAClcgAApZkAAKW5AACl3QAApgEAAKYDAACmBgAApggAAKYKAACmDAAApg8AAKYRAACmEwAAphUAAKYXAACmGQAAphsAAKYeAACmIQAApiIAAKYnAACmNAAApjcAAKY5AACmPAAApj8AAKZBAACmZgAApooAAKaxAACm1QAAptgAAKbaAACm3AAApt4AAKbgAACm4gAApuMAAKbmAACm8wAApwYAAKcIAACnCgAApwwAAKcOAACnEAAApxIAAKcUAACnFgAApxgAAKcrAACnLgAApzEAAKc0AACnNwAApzoAAKc9AACnQAAAp0MAAKdGAACnSAAAp4cAAKeJAACnjAAAp44AAKeRAACnkgAAp5MAAKeUAACnlQAAp5cAAKeZAACnmgAAp5sAAKedAACnngAAp6cAAKeoAACnqgAAp+kAAKfrAACn7QAAp+8AAKfyAACn8wAAp/QAAKf1AACn9gAAp/gAAKf6AACn+wAAp/wAAKf+AACn/wAAqD4AAKhAAACoQwAAqEUAAKhIAACoSQAAqEoAAKhLAACoTAAAqE4AAKhQAACoUQAAqFIAAKhUAACoVQAAqF4AAKhhAACoZAAAqGYAAKhvAACocgAAqHUAAKh3AACoewAAqLoAAKi8AACovgAAqMAAAKjDAACoxAAAqMUAAKjGAACoxwAAqMkAAKjLAACozAAAqM0AAKjPAACo0AAAqQ8AAKkRAACpFAAAqRYAAKkZAACpGgAAqRsAAKkcAACpHQAAqR8AAKkhAACpIgAAqSMAAKklAACpJgAAqS8AAKkwAACpMgAAqXEAAKlzAACpdQAAqXcAAKl6AACpewAAqXwAAKl9AACpfgAAqYAAAKmCAACpgwAAqYQAAKmGAACphwAAqcYAAKnIAACpywAAqc0AAKnQAACp0QAAqdIAAKnTAACp1AAAqdYAAKnYAACp2QAAqdoAAKncAACp3QAAqeoAAKnrAACp7AAAqe4AAKotAACqLwAAqjEAAKozAACqNgAAqjcAAKo4AACqOQAAqjoAAKo8AACqPgAAqj8AAKpAAACqQgAAqkMAAKqCAACqhAAAqocAAKqJAACqjAAAqo0AAKqOAACqjwAAqpAAAKqSAACqlAAAqpUAAKqWAACqmAAAqpkAAKqlAACqsgAAqr0AAKrAAACqwwAAqsYAAKrJAACqzAAAqtcAAKraAACq3QAAquAAAKrjAACq5gAAqugAAKruAACq+QAAqwYAAKtRAACrdAAAq5QAAKu0AACrtgAAq7gAAKu6AACrvAAAq78AAKvAAACrwQAAq8QAAKvFAACrxwAAq8gAAKvKAACrzQAAq84AAKvPAACr0gAAq9MAAKvYAACr5QAAq+oAAKvsAACr7gAAq/MAAKv2AACr+QAAq/sAAKwgAACsRAAArGsAAKyPAACskgAArJQAAKyWAACsmAAArJoAAKycAACsnQAArKAAAKytAACsvgAArMAAAKzCAACsxAAArMYAAKzIAACsygAArMwAAKzOAACs3wAArOIAAKzlAACs6AAArOsAAKzuAACs8QAArPQAAKz3AACs+QAArTgAAK06AACtPAAArT4AAK1BAACtQgAArUMAAK1EAACtRQAArUcAAK1JAACtSgAArUsAAK1NAACtTgAArY0AAK2PAACtkQAArZMAAK2WAACtlwAArZgAAK2ZAACtmgAArZwAAK2eAACtnwAAraAAAK2iAACtowAAreIAAK3kAACt5wAArekAAK3sAACt7QAAre4AAK3vAACt8AAArfIAAK30AACt9QAArfYAAK34AACt+QAArgYAAK4HAACuCAAArgoAAK5JAACuSwAArk0AAK5PAACuUgAArlMAAK5UAACuVQAArlYAAK5YAACuWgAArlsAAK5cAACuXgAArl8AAK6eAACuoAAArqIAAK6kAACupwAArqgAAK6pAACuqgAArqsAAK6tAACurwAArrAAAK6xAACuswAArrQAAK7zAACu9QAArvcAAK75AACu/AAArv0AAK7+AACu/wAArwAAAK8CAACvBAAArwUAAK8GAACvCAAArwkAAK9IAACvSgAAr0wAAK9OAACvUQAAr1IAAK9TAACvVAAAr1UAAK9XAACvWQAAr1oAAK9bAACvXQAAr14AAK+dAACvnwAAr6EAAK+jAACvpgAAr6cAAK+oAACvqQAAr6oAAK+sAACvrgAAr68AAK+wAACvsgAAr7MAAK/YAACv/AAAsCMAALBHAACwSgAAsEwAALBOAACwUAAAsFIAALBUAACwVQAAsFgAALBlAACwdAAAsHYAALB4AACwegAAsHwAALB+AACwgAAAsIIAALCRAACwlAAAsJcAALCaAACwnQAAsKAAALCjAACwpgAAsKgAALDnAACw6QAAsOsAALDtAACw8AAAsPEAALDyAACw8wAAsPQAALD2AACw+AAAsPkAALD6AACw/AAAsP0AALE8AACxPgAAsUAAALFCAACxRQAAsUYAALFHAACxSAAAsUkAALFLAACxTQAAsU4AALFPAACxUQAAsVIAALGRAACxkwAAsZUAALGXAACxmgAAsZsAALGcAACxnQAAsZ4AALGgAACxogAAsaMAALGkAACxpgAAsacAALHmAACx6AAAsesAALHtAACx8AAAsfEAALHyAACx8wAAsfQAALH2AACx+AAAsfkAALH6AACx/AAAsf0AALI8AACyPgAAskAAALJCAACyRQAAskYAALJHAACySAAAskkAALJLAACyTQAAsk4AALJPAACyUQAAslIAALKRAACykwAAspUAALKXAACymgAAspsAALKcAACynQAAsp4AALKgAACyogAAsqMAALKkAACypgAAsqcAALLmAACy6AAAsuoAALLsAACy7wAAsvAAALLxAACy8gAAsvMAALL1AACy9wAAsvgAALL5AACy+wAAsvwAALNHAACzagAAs4oAALOqAACzrAAAs64AALOwAACzsgAAs7UAALO2AACztwAAs7oAALO7AACzvQAAs74AALPBAACzxAAAs8UAALPGAACzyQAAs8oAALPTAACz4AAAs+UAALPnAACz6gAAs+8AALPyAACz9QAAs/cAALQcAAC0QAAAtGcAALSLAAC0jgAAtJAAALSSAAC0lAAAtJYAALSYAAC0mQAAtJwAALSpAAC0ugAAtLwAALS+AAC0wAAAtMIAALTEAAC0xgAAtMgAALTKAAC02wAAtN4AALThAAC05AAAtOcAALTqAAC07QAAtPAAALTzAAC09QAAtTQAALU2AAC1OAAAtToAALU9AAC1PgAAtT8AALVAAAC1QQAAtUMAALVFAAC1RgAAtUcAALVJAAC1SgAAtYkAALWLAAC1jQAAtY8AALWSAAC1kwAAtZQAALWVAAC1lgAAtZgAALWaAAC1mwAAtZwAALWeAAC1nwAAtd4AALXgAAC14wAAteUAALXoAAC16QAAteoAALXrAAC17AAAte4AALXwAAC18QAAtfIAALX0AAC19QAAtgIAALYDAAC2BAAAtgYAALZFAAC2RwAAtkkAALZLAAC2TgAAtk8AALZQAAC2UQAAtlIAALZUAAC2VgAAtlcAALZYAAC2WgAAtlsAALaaAAC2nAAAtp4AALagAAC2owAAtqQAALalAAC2pgAAtqcAALapAAC2qwAAtqwAALatAAC2rwAAtrAAALbvAAC28QAAtvMAALb1AAC2+AAAtvkAALb6AAC2+wAAtvwAALb+AAC3AAAAtwEAALcCAAC3BAAAtwUAALdEAAC3RgAAt0gAALdKAAC3TQAAt04AALdPAAC3UAAAt1EAALdTAAC3VQAAt1YAALdXAAC3WQAAt1oAALeZAAC3mwAAt50AALefAAC3ogAAt6MAALekAAC3pQAAt6YAALeoAAC3qgAAt6sAALesAAC3rgAAt68AALfUAAC3+AAAuB8AALhDAAC4RgAAuEkAALhLAAC4TQAAuE8AALhRAAC4UgAAuFUAALhiAAC4cQAAuHQAALh3AAC4egAAuH0AALiAAAC4gwAAuIYAALiVAAC4mAAAuJsAALieAAC4oQAAuKQAALinAAC4qgAAuKwAALjJAAC5CAAAuQoAALkNAAC5DwAAuRIAALkTAAC5FAAAuRUAALkWAAC5GAAAuRsAALkcAAC5HQAAuR8AALkgAAC5XwAAuWEAALlkAAC5ZgAAuWkAALlqAAC5awAAuWwAALltAAC5bwAAuXIAALlzAAC5dAAAuXYAALl3AAC5eQAAubgAALm6AAC5vQAAub8AALnCAAC5wwAAucQAALnFAAC5xgAAucgAALnLAAC5zAAAuc0AALnPAAC50AAAug8AALoRAAC6EwAAuhUAALoYAAC6GQAAuhoAALobAAC6HAAAuh4AALohAAC6IgAAuiMAALolAAC6JgAAumUAALpnAAC6aQAAumsAALpuAAC6bwAAunAAALpxAAC6cgAAunQAALp3AAC6eAAAunkAALp7AAC6fAAAursAALq9AAC6vwAAusEAALrEAAC6xQAAusYAALrHAAC6yAAAusoAALrNAAC6zgAAus8AALrRAAC60gAAuxEAALsTAAC7FgAAuxgAALsbAAC7HAAAux0AALseAAC7HwAAuyEAALskAAC7JQAAuyYAALsoAAC7KQAAu3QAALuXAAC7twAAu9cAALvZAAC72wAAu90AALvfAAC74QAAu+IAALvjAAC75gAAu+cAALvpAAC76gAAu+0AALvwAAC78QAAu/IAALv1AAC79gAAu/sAALwIAAC8DQAAvA8AALwSAAC8FwAAvBoAALwdAAC8HwAAvEQAALxoAAC8jwAAvLMAALy2AAC8uAAAvLoAALy8AAC8vgAAvMAAALzBAAC8xAAAvNEAALziAAC85AAAvOYAALzoAAC86gAAvOwAALzuAAC88AAAvPIAAL0DAAC9BgAAvQkAAL0MAAC9DwAAvRIAAL0VAAC9GAAAvRsAAL0dAAC9XAAAvV4AAL1gAAC9YgAAvWUAAL1mAAC9ZwAAvWgAAL1pAAC9awAAvW0AAL1uAAC9bwAAvXEAAL1yAAC9sQAAvbMAAL21AAC9twAAvboAAL27AAC9vAAAvb0AAL2+AAC9wAAAvcIAAL3DAAC9xAAAvcYAAL3HAAC+BgAAvggAAL4LAAC+DQAAvhAAAL4RAAC+EgAAvhMAAL4UAAC+FgAAvhgAAL4ZAAC+GgAAvhwAAL4dAAC+KgAAvisAAL4sAAC+LgAAvm0AAL5vAAC+cQAAvnMAAL52AAC+dwAAvngAAL55AAC+egAAvnwAAL5+AAC+fwAAvoAAAL6CAAC+gwAAvsIAAL7EAAC+xgAAvsgAAL7LAAC+zAAAvs0AAL7OAAC+zwAAvtEAAL7TAAC+1AAAvtUAAL7XAAC+2AAAvxcAAL8ZAAC/GwAAvx0AAL8gAAC/IQAAvyIAAL8jAAC/JAAAvyYAAL8oAAC/KQAAvyoAAL8sAAC/LQAAv2wAAL9uAAC/cAAAv3IAAL91AAC/dgAAv3cAAL94AAC/eQAAv3sAAL99AAC/fgAAv38AAL+BAAC/ggAAv8EAAL/DAAC/xQAAv8cAAL/KAAC/ywAAv8wAAL/NAAC/zgAAv9AAAL/SAAC/0wAAv9QAAL/WAAC/1wAAv/wAAMAgAADARwAAwGsAAMBuAADAcQAAwHMAAMB1AADAdwAAwHkAAMB6AADAfQAAwIoAAMCZAADAnAAAwJ8AAMCiAADApQAAwKgAAMCrAADArgAAwL0AAMDAAADAwwAAwMYAAMDJAADAzAAAwM8AAMDSAADA1AAAwRMAAMEVAADBGAAAwRoAAMEdAADBHgAAwR8AAMEgAADBIQAAwSMAAMEmAADBJwAAwSgAAMEqAADBKwAAwWoAAMFsAADBbwAAwXEAAMF0AADBdQAAwXYAAMF3AADBeAAAwXoAAMF9AADBfgAAwX8AAMGBAADBggAAwYQAAMHDAADBxQAAwcgAAMHKAADBzQAAwc4AAMHPAADB0AAAwdEAAMHTAADB1gAAwdcAAMHYAADB2gAAwdsAAMIaAADCHAAAwh8AAMIhAADCJAAAwiUAAMImAADCJwAAwigAAMIqAADCLQAAwi4AAMIvAADCMQAAwjIAAMJxAADCcwAAwnUAAMJ3AADCegAAwnsAAMJ8AADCfQAAwn4AAMKAAADCgwAAwoQAAMKFAADChwAAwogAAMLHAADCyQAAwssAAMLNAADC0AAAwtEAAMLSAADC0wAAwtQAAMLWAADC2QAAwtoAAMLbAADC3QAAwt4AAMMdAADDHwAAwyIAAMMkAADDJwAAwygAAMMpAADDKgAAwysAAMMtAADDMAAAwzEAAMMyAADDNAAAwzUAAMM+AADDUQAAw14AAMNxAADDfgAAw5EAAMOoAADDugAAxAUAAMQoAADESAAAxGgAAMRqAADEbAAAxG4AAMRwAADEcwAAxHQAAMR1AADEeAAAxHkAAMR7AADEfAAAxH4AAMSBAADEggAAxIMAAMSGAADEhwAAxIwAAMSZAADEngAAxKAAAMSiAADEpwAAxKoAAMStAADErwAAxNQAAMT4AADFHwAAxUMAAMVGAADFSAAAxUoAAMVMAADFTgAAxVAAAMVRAADFVAAAxWEAAMVyAADFdAAAxXYAAMV4AADFegAAxXwAAMV+AADFgAAAxYIAAMWTAADFlgAAxZkAAMWcAADFnwAAxaIAAMWlAADFqAAAxasAAMWtAADF7AAAxe4AAMXwAADF8gAAxfUAAMX2AADF9wAAxfgAAMX5AADF+wAAxf0AAMX+AADF/wAAxgEAAMYCAADGQQAAxkMAAMZFAADGRwAAxkoAAMZLAADGTAAAxk0AAMZOAADGUAAAxlIAAMZTAADGVAAAxlYAAMZXAADGlgAAxpgAAMabAADGnQAAxqAAAMahAADGogAAxqMAAMakAADGpgAAxqgAAMapAADGqgAAxqwAAMatAADGugAAxrsAAMa8AADGvgAAxv0AAMb/AADHAQAAxwMAAMcGAADHBwAAxwgAAMcJAADHCgAAxwwAAMcOAADHDwAAxxAAAMcSAADHEwAAx1IAAMdUAADHVgAAx1gAAMdbAADHXAAAx10AAMdeAADHXwAAx2EAAMdjAADHZAAAx2UAAMdnAADHaAAAx6cAAMepAADHqwAAx60AAMewAADHsQAAx7IAAMezAADHtAAAx7YAAMe4AADHuQAAx7oAAMe8AADHvQAAx/wAAMf+AADIAAAAyAIAAMgFAADIBgAAyAcAAMgIAADICQAAyAsAAMgNAADIDgAAyA8AAMgRAADIEgAAyFEAAMhTAADIVQAAyFcAAMhaAADIWwAAyFwAAMhdAADIXgAAyGAAAMhiAADIYwAAyGQAAMhmAADIZwAAyIwAAMiwAADI1wAAyPsAAMj+AADJAAAAyQIAAMkEAADJBgAAyQgAAMkJAADJDAAAyRkAAMkoAADJKgAAySwAAMkuAADJMAAAyTIAAMk0AADJNgAAyUUAAMlIAADJSwAAyU4AAMlRAADJVAAAyVcAAMlaAADJXAAAyZsAAMmdAADJoAAAyaIAAMmlAADJpgAAyacAAMmoAADJqQAAyasAAMmtAADJrgAAya8AAMmxAADJsgAAybMAAMnyAADJ9AAAyfYAAMn4AADJ+wAAyfwAAMn9AADJ/gAAyf8AAMoBAADKAwAAygQAAMoFAADKBwAAyggAAMpHAADKSQAAyksAAMpNAADKUAAAylEAAMpSAADKUwAAylQAAMpWAADKWAAAylkAAMpaAADKXAAAyl0AAMqcAADKngAAyqAAAMqiAADKpQAAyqYAAMqnAADKqAAAyqkAAMqrAADKrQAAyq4AAMqvAADKsQAAyrIAAMrxAADK8wAAyvUAAMr3AADK+gAAyvsAAMr8AADK/QAAyv4AAMsAAADLAgAAywMAAMsEAADLBgAAywcAAMtGAADLSAAAy0oAAMtMAADLTwAAy1AAAMtRAADLUgAAy1MAAMtVAADLVwAAy1gAAMtZAADLWwAAy1wAAMubAADLnQAAy58AAMuhAADLpAAAy6UAAMumAADLpwAAy6gAAMuqAADLrAAAy60AAMuuAADLsAAAy7EAAMv8AADMHwAAzD8AAMxfAADMYQAAzGMAAMxlAADMZwAAzGoAAMxrAADMbAAAzG8AAMxwAADMcgAAzHMAAMx1AADMeAAAzHkAAMx6AADMfQAAzH4AAMyDAADMkAAAzJUAAMyXAADMmQAAzJ4AAMyhAADMpAAAzKYAAMzLAADM7wAAzRYAAM06AADNPQAAzT8AAM1BAADNQwAAzUUAAM1HAADNSAAAzUsAAM1YAADNaQAAzWsAAM1tAADNbwAAzXEAAM1zAADNdQAAzXcAAM15AADNigAAzY0AAM2QAADNkwAAzZYAAM2ZAADNnAAAzZ8AAM2iAADNpAAAzeMAAM3lAADN5wAAzekAAM3sAADN7QAAze4AAM3vAADN8AAAzfIAAM30AADN9QAAzfYAAM34AADN+QAAzjgAAM46AADOPAAAzj4AAM5BAADOQgAAzkMAAM5EAADORQAAzkcAAM5JAADOSgAAzksAAM5NAADOTgAAzo0AAM6PAADOkgAAzpQAAM6XAADOmAAAzpkAAM6aAADOmwAAzp0AAM6fAADOoAAAzqEAAM6jAADOpAAAzrEAAM6yAADOswAAzrUAAM70AADO9gAAzvgAAM76AADO/QAAzv4AAM7/AADPAAAAzwEAAM8DAADPBQAAzwYAAM8HAADPCQAAzwoAAM9JAADPSwAAz00AAM9PAADPUgAAz1MAAM9UAADPVQAAz1YAAM9YAADPWgAAz1sAAM9cAADPXgAAz18AAM+eAADPoAAAz6IAAM+kAADPpwAAz6gAAM+pAADPqgAAz6sAAM+tAADPrwAAz7AAAM+xAADPswAAz7QAAM/zAADP9QAAz/cAAM/5AADP/AAAz/0AAM/+AADP/wAA0AAAANACAADQBAAA0AUAANAGAADQCAAA0AkAANBIAADQSgAA0EwAANBOAADQUQAA0FIAANBTAADQVAAA0FUAANBXAADQWQAA0FoAANBbAADQXQAA0F4AANCDAADQpwAA0M4AANDyAADQ9QAA0PcAAND5AADQ+wAA0P0AAND/AADRAAAA0QMAANEQAADRHwAA0SEAANEjAADRJQAA0ScAANEpAADRKwAA0S0AANE8AADRPwAA0UIAANFFAADRSAAA0UsAANFOAADRUQAA0VMAANGSAADRlAAA0ZYAANGYAADRmwAA0ZwAANGdAADRngAA0Z8AANGhAADRowAA0aQAANGlAADRpwAA0agAANHnAADR6QAA0esAANHtAADR8AAA0fEAANHyAADR8wAA0fQAANH2AADR+AAA0fkAANH6AADR/AAA0f0AANI8AADSPgAA0kAAANJCAADSRQAA0kYAANJHAADSSAAA0kkAANJLAADSTQAA0k4AANJPAADSUQAA0lIAANKRAADSkwAA0pUAANKXAADSmgAA0psAANKcAADSnQAA0p4AANKgAADSogAA0qMAANKkAADSpgAA0qcAANLmAADS6AAA0uoAANLsAADS7wAA0vAAANLxAADS8gAA0vMAANL1AADS9wAA0vgAANL5AADS+wAA0vwAANM7AADTPQAA0z8AANNBAADTRAAA00UAANNGAADTRwAA00gAANNKAADTTAAA000AANNOAADTUAAA01EAANOQAADTkgAA05QAANOWAADTmQAA05oAANObAADTnAAA050AANOfAADToQAA06IAANOjAADTpQAA06YAANPxAADUFAAA1DQAANRUAADUVgAA1FgAANRaAADUXAAA1F8AANRgAADUYQAA1GQAANRlAADUZwAA1GgAANRqAADUbQAA1G4AANRvAADUcgAA1HMAANR4AADUhQAA1IoAANSMAADUjgAA1JMAANSWAADUmQAA1JsAANTAAADU5AAA1QsAANUvAADVMgAA1TQAANU2AADVOAAA1ToAANU8AADVPQAA1UAAANVNAADVXgAA1WAAANViAADVZAAA1WYAANVoAADVagAA1WwAANVuAADVfwAA1YIAANWFAADViAAA1YsAANWOAADVkQAA1ZQAANWXAADVmQAA1dgAANXaAADV3AAA1d4AANXhAADV4gAA1eMAANXkAADV5QAA1ecAANXpAADV6gAA1esAANXtAADV7gAA1i0AANYvAADWMQAA1jMAANY2AADWNwAA1jgAANY5AADWOgAA1jwAANY+AADWPwAA1kAAANZCAADWQwAA1oIAANaEAADWhwAA1okAANaMAADWjQAA1o4AANaPAADWkAAA1pIAANaUAADWlQAA1pYAANaYAADWmQAA1qYAANanAADWqAAA1qoAANbpAADW6wAA1u0AANbvAADW8gAA1vMAANb0AADW9QAA1vYAANb4AADW+gAA1vsAANb8AADW/gAA1v8AANc+AADXQAAA10IAANdEAADXRwAA10gAANdJAADXSgAA10sAANdNAADXTwAA11AAANdRAADXUwAA11QAANeTAADXlQAA15cAANeZAADXnAAA150AANeeAADXnwAA16AAANeiAADXpAAA16UAANemAADXqAAA16kAANfoAADX6gAA1+wAANfuAADX8QAA1/IAANfzAADX9AAA1/UAANf3AADX+QAA1/oAANf7AADX/QAA1/4AANg9AADYPwAA2EEAANhDAADYRgAA2EcAANhIAADYSQAA2EoAANhMAADYTgAA2E8AANhQAADYUgAA2FMAANh4AADYnAAA2MMAANjnAADY6gAA2OwAANjuAADY8AAA2PIAANj0AADY9QAA2PgAANkFAADZFAAA2RYAANkYAADZGgAA2RwAANkeAADZIAAA2SIAANkxAADZNAAA2TcAANk6AADZPQAA2UAAANlDAADZRgAA2UgAANmHAADZiQAA2YsAANmNAADZkAAA2ZEAANmSAADZkwAA2ZQAANmWAADZmAAA2ZkAANmaAADZnAAA2Z0AANncAADZ3gAA2eAAANniAADZ5QAA2eYAANnnAADZ6AAA2ekAANnrAADZ7QAA2e4AANnvAADZ8QAA2fIAANoxAADaMwAA2jUAANo3AADaOgAA2jsAANo8AADaPQAA2j4AANpAAADaQgAA2kMAANpEAADaRgAA2kcAANqGAADaiAAA2ooAANqMAADajwAA2pAAANqRAADakgAA2pMAANqVAADalwAA2pgAANqZAADamwAA2pwAANrbAADa3QAA2t8AANrhAADa5AAA2uUAANrmAADa5wAA2ugAANrqAADa7AAA2u0AANruAADa8AAA2vEAANswAADbMgAA2zQAANs2AADbOQAA2zoAANs7AADbPAAA2z0AANs/AADbQQAA20IAANtDAADbRQAA20YAANuFAADbhwAA24kAANuLAADbjgAA248AANuQAADbkQAA25IAANuUAADblgAA25cAANuYAADbmgAA25sAANukAADbpQAA26cAANvmAADb6AAA2+oAANvsAADb7wAA2/AAANvxAADb8gAA2/MAANv1AADb+AAA2/kAANv6AADb/AAA2/0AANw8AADcPgAA3EEAANxDAADcRgAA3EcAANxIAADcSQAA3EoAANxMAADcTwAA3FAAANxRAADcUwAA3FQAANyTAADclQAA3JgAANyaAADcnQAA3J4AANyfAADcoAAA3KEAANyjAADcpgAA3KcAANyoAADcqgAA3KsAANzqAADc7AAA3O8AANzxAADc9AAA3PUAANz2AADc9wAA3PgAANz6AADc/QAA3P4AANz/AADdAQAA3QIAAN1BAADdQwAA3UUAAN1HAADdSgAA3UsAAN1MAADdTQAA3U4AAN1QAADdUwAA3VQAAN1VAADdVwAA3VgAAN2jAADdxgAA3eYAAN4GAADeCAAA3goAAN4MAADeDgAA3hAAAN4RAADeEgAA3hUAAN4WAADeGAAA3hkAAN4bAADeHgAA3h8AAN4gAADeIwAA3iQAAN4pAADeNgAA3jsAAN49AADePwAA3kQAAN5HAADeSgAA3kwAAN5xAADelQAA3rwAAN7gAADe4wAA3uUAAN7nAADe6QAA3usAAN7tAADe7gAA3vEAAN7+AADfDwAA3xEAAN8TAADfFQAA3xcAAN8ZAADfGwAA3x0AAN8fAADfMAAA3zMAAN82AADfOQAA3zwAAN8/AADfQgAA30UAAN9IAADfSgAA34kAAN+LAADfjQAA348AAN+SAADfkwAA35QAAN+VAADflgAA35gAAN+aAADfmwAA35wAAN+eAADfnwAA394AAN/gAADf4gAA3+QAAN/nAADf6AAA3+kAAN/qAADf6wAA3+0AAN/vAADf8AAA3/EAAN/zAADf9AAA4DMAAOA1AADgOAAA4DoAAOA9AADgPgAA4D8AAOBAAADgQQAA4EMAAOBFAADgRgAA4EcAAOBJAADgSgAA4FcAAOBYAADgWQAA4FsAAOCaAADgnAAA4J4AAOCgAADgowAA4KQAAOClAADgpgAA4KcAAOCpAADgqwAA4KwAAOCtAADgrwAA4LAAAODvAADg8QAA4PMAAOD1AADg+AAA4PkAAOD6AADg+wAA4PwAAOD+AADhAAAA4QEAAOECAADhBAAA4QUAAOFEAADhRgAA4UgAAOFKAADhTQAA4U4AAOFPAADhUAAA4VEAAOFTAADhVQAA4VYAAOFXAADhWQAA4VoAAOGZAADhmwAA4Z0AAOGfAADhogAA4aMAAOGkAADhpQAA4aYAAOGoAADhqgAA4asAAOGsAADhrgAA4a8AAOHuAADh8AAA4fIAAOH0AADh9wAA4fgAAOH5AADh+gAA4fsAAOH9AADh/wAA4gAAAOIBAADiAwAA4gQAAOIpAADiTQAA4nQAAOKYAADimwAA4p0AAOKfAADioQAA4qMAAOKlAADipgAA4qkAAOK2AADixQAA4scAAOLJAADiywAA4s0AAOLPAADi0QAA4tMAAOLiAADi5QAA4ugAAOLrAADi7gAA4vEAAOL0AADi9wAA4vkAAOM4AADjOgAA4zwAAOM+AADjQQAA40IAAONDAADjRAAA40UAAONHAADjSQAA40oAAONLAADjTQAA404AAOONAADjjwAA45EAAOOTAADjlgAA45cAAOOYAADjmQAA45oAAOOcAADjngAA458AAOOgAADjogAA46MAAOPiAADj5AAA4+YAAOPoAADj6wAA4+wAAOPtAADj7gAA4+8AAOPxAADj8wAA4/QAAOP1AADj9wAA4/gAAOQ3AADkOQAA5DsAAOQ9AADkQAAA5EEAAORCAADkQwAA5EQAAORGAADkSAAA5EkAAORKAADkTAAA5E0AAOSMAADkjgAA5JAAAOSSAADklQAA5JYAAOSXAADkmAAA5JkAAOSbAADknQAA5J4AAOSfAADkoQAA5KIAAOThAADk4wAA5OUAAOTnAADk6gAA5OsAAOTsAADk7QAA5O4AAOTwAADk8gAA5PMAAOT0AADk9gAA5PcAAOU2AADlOAAA5ToAAOU8AADlPwAA5UAAAOVBAADlQgAA5UMAAOVFAADlRwAA5UgAAOVJAADlSwAA5UwAAOWXAADlugAA5doAAOX6AADl/AAA5f4AAOYAAADmAgAA5gQAAOYFAADmBgAA5gkAAOYKAADmDAAA5g0AAOYPAADmEgAA5hMAAOYUAADmFwAA5hgAAOYdAADmKgAA5i8AAOYxAADmMwAA5jgAAOY7AADmPgAA5kAAAOZlAADmiQAA5rAAAObUAADm1wAA5tkAAObbAADm3QAA5t8AAObhAADm4gAA5uUAAObyAADnAwAA5wUAAOcHAADnCQAA5wsAAOcNAADnDwAA5xEAAOcTAADnJAAA5ycAAOcqAADnLQAA5zAAAOczAADnNgAA5zkAAOc8AADnPgAA530AAOd/AADngQAA54MAAOeGAADnhwAA54gAAOeJAADnigAA54wAAOeOAADnjwAA55AAAOeSAADnkwAA59IAAOfUAADn1gAA59gAAOfbAADn3AAA590AAOfeAADn3wAA5+EAAOfjAADn5AAA5+UAAOfnAADn6AAA6CcAAOgpAADoLAAA6C4AAOgxAADoMgAA6DMAAOg0AADoNQAA6DcAAOg5AADoOgAA6DsAAOg9AADoPgAA6EsAAOhMAADoTQAA6E8AAOiOAADokAAA6JIAAOiUAADolwAA6JgAAOiZAADomgAA6JsAAOidAADonwAA6KAAAOihAADoowAA6KQAAOjjAADo5QAA6OcAAOjpAADo7AAA6O0AAOjuAADo7wAA6PAAAOjyAADo9AAA6PUAAOj2AADo+AAA6PkAAOk4AADpOgAA6TwAAOk+AADpQQAA6UIAAOlDAADpRAAA6UUAAOlHAADpSQAA6UoAAOlLAADpTQAA6U4AAOmNAADpjwAA6ZEAAOmTAADplgAA6ZcAAOmYAADpmQAA6ZoAAOmcAADpngAA6Z8AAOmgAADpogAA6aMAAOniAADp5AAA6eYAAOnoAADp6wAA6ewAAOntAADp7gAA6e8AAOnxAADp8wAA6fQAAOn1AADp9wAA6fgAAOodAADqQQAA6mgAAOqMAADqjwAA6pEAAOqTAADqlQAA6pcAAOqZAADqmgAA6p0AAOqqAADquQAA6rsAAOq9AADqvwAA6sEAAOrDAADqxQAA6scAAOrWAADq2QAA6twAAOrfAADq4gAA6uUAAOroAADq6wAA6u0AAOssAADrLgAA6zAAAOsyAADrNQAA6zYAAOs3AADrOAAA6zkAAOs7AADrPQAA6z4AAOs/AADrQQAA60IAAOuBAADrgwAA64UAAOuHAADrigAA64sAAOuMAADrjQAA644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AAQHTAAEB1AABAdUAAQHWAAEB1wABAdkAAQHbAAEB3AABAd0AAQHfAAEB4AABAgUAAQIpAAECUAABAnQAAQJ3AAECeQABAnsAAQJ9AAECfwABAoEAAQKCAAEChQABApIAAQKhAAECowABAqUAAQKnAAECqQABAqsAAQKtAAECrwABAr4AAQLBAAECxAABAscAAQLKAAECzQABAtAAAQLTAAEC1QABAxQAAQMWAAEDGAABAxoAAQMdAAEDHgABAx8AAQMgAAEDIQABAyMAAQMlAAEDJgABAycAAQMpAAEDKgABA2kAAQNrAAEDbQABA28AAQNyAAEDcwABA3QAAQN1AAEDdgABA3gAAQN6AAEDewABA3wAAQN+AAEDfwABA74AAQPAAAEDwgABA8QAAQPHAAEDyAABA8kAAQPKAAEDywABA80AAQPPAAED0AABA9EAAQPTAAED1AABBBMAAQQVAAEEGAABBBoAAQQdAAEEHgABBB8AAQQgAAEEIQABBCMAAQQlAAEEJgABBCcAAQQpAAEEKgABBGkAAQRrAAEEbQABBG8AAQRyAAEEcwABBHQAAQR1AAEEdgABBHgAAQR6AAEEewABBHwAAQR+AAEEfwABBL4AAQTAAAEEwgABBMQAAQTHAAEEyAABBMkAAQTKAAEEywABBM0AAQTPAAEE0AABBNEAAQTTAAEE1AABBRMAAQUVAAEFFwABBRkAAQUcAAEFHQABBR4AAQUfAAEFIAABBSIAAQUkAAEFJQABBSYAAQUoAAEFKQABBXQAAQWXAAEFtwABBdcAAQXZAAEF2wABBd0AAQXfAAEF4QABBeIAAQXjAAEF5gABBecAAQXpAAEF6gABBewAAQXvAAEF8AABBfEAAQX0AAEF9QABBfoAAQYHAAEGDAABBg4AAQYQAAEGFQABBhgAAQYbAAEGHQABBkIAAQZmAAEGjQABBrEAAQa0AAEGtgABBrgAAQa6AAEGvAABBr4AAQa/AAEGwgABBs8AAQbgAAEG4gABBuQAAQbmAAEG6AABBuoAAQbsAAEG7gABBvAAAQcBAAEHBAABBwcAAQcKAAEHDQABBxAAAQcTAAEHFgABBxkAAQcbAAEHWgABB1wAAQdeAAEHYAABB2MAAQdkAAEHZQABB2YAAQdnAAEHaQABB2sAAQdsAAEHbQABB28AAQdwAAEHrwABB7EAAQezAAEHtQABB7gAAQe5AAEHugABB7sAAQe8AAEHvgABB8AAAQfBAAEHwgABB8QAAQfFAAEIBAABCAYAAQgJAAEICwABCA4AAQgPAAEIEAABCBEAAQgSAAEIFAABCBYAAQgXAAEIGAABCBoAAQgbAAEIKAABCCkAAQgqAAEILAABCGsAAQhtAAEIbwABCHEAAQh0AAEIdQABCHYAAQh3AAEIeAABCHoAAQh8AAEIfQABCH4AAQiAAAEIgQABCMAAAQjCAAEIxAABCMYAAQjJAAEIygABCMsAAQjMAAEIzQABCM8AAQjRAAEI0gABCNMAAQjVAAEI1gABCRUAAQkXAAEJGQABCRsAAQkeAAEJHwABCSAAAQkhAAEJIgABCSQAAQkmAAEJJwABCSgAAQkqAAEJKwABCWoAAQlsAAEJbgABCXAAAQlzAAEJdAABCXUAAQl2AAEJdwABCXkAAQl7AAEJfAABCX0AAQl/AAEJgAABCb8AAQnBAAEJwwABCcUAAQnIAAEJyQABCcoAAQnLAAEJzAABCc4AAQnQAAEJ0QABCdIAAQnUAAEJ1QABCfoAAQoeAAEKRQABCmkAAQpsAAEKbgABCnAAAQpyAAEKdAABCnYAAQp3AAEKegABCocAAQqWAAEKmAABCpoAAQqcAAEKngABCqAAAQqiAAEKpAABCrMAAQq2AAEKuQABCrwAAQq/AAEKwgABCsUAAQrIAAEKygABCwkAAQsLAAELDgABCxAAAQsTAAELFAABCxUAAQsWAAELFwABCxkAAQsbAAELHAABCx0AAQsfAAELIAABC18AAQthAAELYwABC2UAAQtoAAELaQABC2oAAQtrAAELbAABC24AAQtwAAELcQABC3IAAQt0AAELdQABC7QAAQu2AAELuAABC7oAAQu9AAELvgABC78AAQvAAAELwQABC8MAAQvFAAELxgABC8cAAQvJAAELygABDAkAAQwLAAEMDgABDBAAAQwTAAEMFAABDBUAAQwWAAEMFwABDBkAAQwbAAEMHAABDB0AAQwfAAEMIAABDF8AAQxhAAEMYwABDGUAAQxoAAEMaQABDGoAAQxrAAEMbAABDG4AAQxwAAEMcQABDHIAAQx0AAEMdQABDLQAAQy2AAEMuAABDLoAAQy9AAEMvgABDL8AAQzAAAEMwQABDMMAAQzFAAEMxgABDMcAAQzJAAEMygABDQkAAQ0LAAENDQABDQ8AAQ0SAAENEwABDRQAAQ0VAAENFgABDRgAAQ0aAAENGwABDRwAAQ0eAAENHwABDWoAAQ2NAAENrQABDc0AAQ3PAAEN0QABDdMAAQ3VAAEN1wABDdgAAQ3ZAAEN3AABDd0AAQ3fAAEN4AABDeIAAQ3lAAEN5gABDecAAQ3qAAEN6wABDfQAAQ4BAAEOBgABDggAAQ4KAAEODwABDhIAAQ4VAAEOFwABDjwAAQ5gAAEOhwABDqsAAQ6uAAEOsAABDrIAAQ60AAEOtgABDrgAAQ65AAEOvAABDskAAQ7aAAEO3AABDt4AAQ7gAAEO4gABDuQAAQ7mAAEO6AABDuoAAQ77AAEO/gABDwEAAQ8EAAEPBwABDwoAAQ8NAAEPEAABDxMAAQ8VAAEPVAABD1YAAQ9YAAEPWgABD10AAQ9eAAEPXwABD2AAAQ9hAAEPYwABD2UAAQ9mAAEPZwABD2kAAQ9qAAEPqQABD6sAAQ+tAAEPrwABD7IAAQ+zAAEPtAABD7UAAQ+2AAEPuAABD7oAAQ+7AAEPvAABD74AAQ+/AAEP/gABEAAAARADAAEQBQABEAgAARAJAAEQCgABEAsAARAMAAEQDgABEBAAARARAAEQEgABEBQAARAVAAEQIgABECMAARAkAAEQJgABEGUAARBnAAEQaQABEGsAARBuAAEQbwABEHAAARBxAAEQcgABEHQAARB2AAEQdwABEHgAARB6AAEQewABELoAARC8AAEQvgABEMAAARDDAAEQxAABEMUAARDGAAEQxwABEMkAARDLAAEQzAABEM0AARDPAAEQ0AABEQ8AARERAAEREwABERUAAREYAAERGQABERoAAREbAAERHAABER4AAREgAAERIQABESIAAREkAAERJQABEWQAARFmAAERaAABEWoAARFtAAERbgABEW8AARFwAAERcQABEXMAARF1AAERdgABEXcAARF5AAERegABEbkAARG7AAERvQABEb8AARHCAAERwwABEcQAARHFAAERxgABEcgAARHKAAERywABEcwAARHOAAERzwABEfQAARIYAAESPwABEmMAARJmAAESaAABEmoAARJsAAESbgABEnAAARJxAAESdAABEoEAARKQAAESkgABEpQAARKWAAESmAABEpoAARKcAAESngABEq0AARKwAAESswABErYAARK5AAESvAABEr8AARLCAAESxAABEwMAARMFAAETBwABEwkAARMMAAETDQABEw4AARMPAAETEAABExIAARMUAAETFQABExYAARMYAAETGQABE1gAARNaAAETXAABE14AARNhAAETYgABE2MAARNkAAETZQABE2cAARNpAAETagABE2sAARNtAAETbgABE60AAROvAAETsQABE7MAARO2AAETtwABE7gAARO5AAETugABE7wAARO+AAETvwABE8AAARPCAAETwwABFAIAARQEAAEUBwABFAkAARQMAAEUDQABFA4AARQPAAEUEAABFBIAARQUAAEUFQABFBYAARQYAAEUGQABFBwAARRbAAEUXQABFF8AARRhAAEUZAABFGUAARRmAAEUZwABFGgAARRqAAEUbAABFG0AARRuAAEUcAABFHEAARSwAAEUsgABFLUAARS3AAEUugABFLsAARS8AAEUvQABFL4AARTAAAEUwgABFMMAARTEAAEUxgABFMcAARTuAAEVLQABFS8AARUxAAEVMwABFTYAARU3AAEVOAABFTkAARU6AAEVPAABFT4AARU/AAEVQAABFUIAARVDAAEVjgABFbEAARXRAAEV8QABFfMAARX1AAEV9wABFfkAARX7AAEV/AABFf0AARYAAAEWAQABFgMAARYEAAEWBwABFgoAARYLAAEWDAABFg8AARYQAAEWFQABFiIAARYnAAEWKQABFiwAARYxAAEWNAABFjcAARY5AAEWXgABFoIAARapAAEWzQABFtAAARbSAAEW1AABFtYAARbYAAEW2gABFtsAARbeAAEW6wABFvwAARb+AAEXAAABFwIAARcEAAEXBgABFwgAARcKAAEXDAABFx0AARcgAAEXIwABFyYAARcpAAEXLAABFy8AARcyAAEXNQABFzcAARd2AAEXeAABF3oAARd8AAEXfwABF4AAAReBAAEXggABF4MAAReFAAEXhwABF4gAAReJAAEXiwABF4wAARfLAAEXzQABF88AARfRAAEX1AABF9UAARfWAAEX1wABF9gAARfaAAEX3AABF90AARfeAAEX4AABF+EAARggAAEYIgABGCUAARgnAAEYKgABGCsAARgsAAEYLQABGC4AARgwAAEYMgABGDMAARg0AAEYNgABGDcAARhEAAEYRQABGEYAARhIAAEYhwABGIkAARiLAAEYjQABGJAAARiRAAEYkgABGJMAARiUAAEYlgABGJgAARiZAAEYmgABGJwAARidAAEY3AABGN4AARjgAAEY4gABGOUAARjmAAEY5wABGOgAARjpAAEY6wABGO0AARjuAAEY7wABGPEAARjyAAEZMQABGTMAARk1AAEZNwABGToAARk7AAEZPAABGT0AARk+AAEZQAABGUIAARlDAAEZRAABGUYAARlHAAEZhgABGYgAARmKAAEZjAABGY8AARmQAAEZkQABGZIAARmTAAEZlQABGZcAARmYAAEZmQABGZsAARmcAAEZ2wABGd0AARnfAAEZ4QABGeQAARnlAAEZ5gABGecAARnoAAEZ6gABGewAARntAAEZ7gABGfAAARnxAAEaFgABGjoAARphAAEahQABGogAARqLAAEajQABGo8AARqRAAEakwABGpQAARqXAAEapAABGrEAARq0AAEatwABGroAARq9AAEawAABGsMAARrQAAEa0wABGtYAARrZAAEa3AABGt8AARriAAEa5AABGyMAARslAAEbKAABGyoAARstAAEbLgABGy8AARswAAEbMQABGzMAARs2AAEbNwABGzgAARs6AAEbOwABG3oAARt8AAEbfgABG4AAARuDAAEbhAABG4UAARuGAAEbhwABG4kAARuMAAEbjQABG44AARuQAAEbkQABG9AAARvSAAEb1QABG9cAARvaAAEb2wABG9wAARvdAAEb3gABG+AAARvjAAEb5AABG+UAARvnAAEb6AABHCcAARwpAAEcLAABHC4AARwxAAEcMgABHDMAARw0AAEcNQABHDcAARw6AAEcOwABHDwAARw+AAEcPwABHH4AARyAAAEcgwABHIUAARyIAAEciQABHIoAARyLAAEcjAABHI4AARyRAAEckgABHJMAARyVAAEclgABHNUAARzXAAEc2QABHNsAARzeAAEc3wABHOAAARzhAAEc4gABHOQAARznAAEc6AABHOkAARzrAAEc7AABHTcAAR1aAAEdegABHZoAAR2cAAEdngABHaAAAR2iAAEdpAABHaUAAR2mAAEdqQABHaoAAR2sAAEdrQABHa8AAR2yAAEdswABHbQAAR23AAEduAABHcEAAR3OAAEd0wABHdUAAR3XAAEd3AABHd8AAR3iAAEd5AABHgkAAR4tAAEeVAABHngAAR57AAEefQABHn8AAR6BAAEegwABHoUAAR6GAAEeiQABHpYAAR6nAAEeqQABHqsAAR6tAAEerwABHrEAAR6zAAEetQABHrcAAR7IAAEeywABHs4AAR7RAAEe1AABHtcAAR7aAAEe3QABHuAAAR7iAAEfIQABHyMAAR8lAAEfJwABHyoAAR8rAAEfLAABHy0AAR8uAAEfMAABHzIAAR8zAAEfNAABHzYAAR83AAEfdgABH3gAAR96AAEffAABH38AAR+AAAEfgQABH4IAAR+DAAEfhQABH4cAAR+IAAEfiQABH4sAAR+MAAEfywABH80AAR/QAAEf0gABH9UAAR/WAAEf1wABH9gAAR/ZAAEf2wABH90AAR/eAAEf3wABH+EAAR/iAAEf7wABH/AAAR/xAAEf8wABIDIAASA0AAEgNgABIDgAASA7AAEgPAABID0AASA+AAEgPwABIEEAASBDAAEgRAABIEUAASBHAAEgSAABIIcAASCJAAEgiwABII0AASCQAAEgkQABIJIAASCTAAEglAABIJYAASCYAAEgmQABIJoAASCcAAEgnQABINwAASDeAAEg4AABIOIAASDlAAEg5gABIOcAASDoAAEg6QABIOsAASDtAAEg7gABIO8AASDxAAEg8gABITEAASEzAAEhNQABITcAASE6AAEhOwABITwAASE9AAEhPgABIUAAASFCAAEhQwABIUQAASFGAAEhRwABIYYAASGIAAEhigABIYwAASGPAAEhkAABIZEAASGSAAEhkwABIZUAASGXAAEhmAABIZkAASGbAAEhnAABIcEAASHlAAEiDAABIjAAASIzAAEiNQABIjcAASI5AAEiOwABIj0AASI+AAEiQQABIk4AASJdAAEiXwABImEAASJjAAEiZQABImcAASJpAAEiawABInoAASJ9AAEigAABIoMAASKGAAEiiQABIowAASKPAAEikQABItAAASLSAAEi1AABItYAASLZAAEi2gABItsAASLcAAEi3QABIt8AASLhAAEi4gABIuMAASLlAAEi5gABIyUAASMnAAEjKQABIysAASMuAAEjLwABIzAAASMxAAEjMgABIzQAASM2AAEjNwABIzgAASM6AAEjOwABI3oAASN8AAEjfgABI4AAASODAAEjhAABI4UAASOGAAEjhwABI4kAASOLAAEjjAABI40AASOPAAEjkAABI88AASPRAAEj0wABI9UAASPYAAEj2QABI9oAASPbAAEj3AABI94AASPgAAEj4QABI+IAASPkAAEj5QABJCQAASQmAAEkKAABJCoAASQtAAEkLgABJC8AASQwAAEkMQABJDMAASQ1AAEkNgABJDcAASQ5AAEkOgABJHkAASR7AAEkfQABJH8AASSCAAEkgwABJIQAASSFAAEkhgABJIgAASSKAAEkiwABJIwAASSOAAEkjwABJM4AASTQAAEk0gABJNQAASTXAAEk2AABJNkAASTaAAEk2wABJN0AASTfAAEk4AABJOEAASTjAAEk5AABJS8AASVSAAElcgABJZIAASWUAAEllgABJZgAASWaAAElnAABJZ0AASWeAAEloQABJaIAASWkAAElpQABJacAASWqAAElqwABJawAASWvAAElsAABJbUAASXCAAElxwABJckAASXLAAEl0AABJdMAASXWAAEl2AABJf0AASYhAAEmSAABJmwAASZvAAEmcQABJnMAASZ1AAEmdwABJnkAASZ6AAEmfQABJooAASabAAEmnQABJp8AASahAAEmowABJqUAASanAAEmqQABJqsAASa8AAEmvwABJsIAASbFAAEmyAABJssAASbOAAEm0QABJtQAASbWAAEnFQABJxcAAScZAAEnGwABJx4AAScfAAEnIAABJyEAASciAAEnJAABJyYAAScnAAEnKAABJyoAAScrAAEnagABJ2wAASduAAEncAABJ3MAASd0AAEndQABJ3YAASd3AAEneQABJ3sAASd8AAEnfQABJ38AASeAAAEnvwABJ8EAASfEAAEnxgABJ8kAASfKAAEnywABJ8wAASfNAAEnzwABJ9EAASfSAAEn0wABJ9UAASfWAAEn4wABJ+QAASflAAEn5wABKCYAASgoAAEoKgABKCwAASgvAAEoMAABKDEAASgyAAEoMwABKDUAASg3AAEoOAABKDkAASg7AAEoPAABKHsAASh9AAEofwABKIEAASiEAAEohQABKIYAASiHAAEoiAABKIoAASiMAAEojQABKI4AASiQAAEokQABKNAAASjSAAEo1AABKNYAASjZAAEo2gABKNsAASjcAAEo3QABKN8AASjhAAEo4gABKOMAASjlAAEo5gABKSUAASknAAEpKQABKSsAASkuAAEpLwABKTAAASkxAAEpMgABKTQAASk2AAEpNwABKTgAASk6AAEpOwABKXoAASl8AAEpfgABKYAAASmDAAEphAABKYUAASmGAAEphwABKYkAASmLAAEpjAABKY0AASmPAAEpkAABKbUAASnZAAEqAAABKiQAASonAAEqKQABKisAASotAAEqLwABKjEAASoyAAEqNQABKkIAASpRAAEqUwABKlUAASpXAAEqWQABKlsAASpdAAEqXwABKm4AASpxAAEqdAABKncAASp6AAEqfQABKoAAASqDAAEqhQABKsQAASrGAAEqyAABKsoAASrNAAEqzgABKs8AASrQAAEq0QABKtMAASrVAAEq1gABKtcAASrZAAEq2gABKxkAASsbAAErHQABKx8AASsiAAErIwABKyQAASslAAErJgABKygAASsqAAErKwABKywAASsuAAErLwABK24AAStwAAErcgABK3QAASt3AAEreAABK3kAASt6AAErewABK30AASt/AAErgAABK4EAASuDAAErhAABK8MAASvFAAErxwABK8kAASvMAAErzQABK84AASvPAAEr0AABK9IAASvUAAEr1QABK9YAASvYAAEr2QABLBgAASwaAAEsHAABLB4AASwhAAEsIgABLCMAASwkAAEsJQABLCcAASwpAAEsKgABLCsAASwtAAEsLgABLG0AASxvAAEscQABLHMAASx2AAEsdwABLHgAASx5AAEsegABLHwAASx+AAEsfwABLIAAASyCAAEsgwABLMIAASzEAAEsxgABLMgAASzLAAEszAABLM0AASzOAAEszwABLNEAASzTAAEs1AABLNUAASzXAAEs2AABLSMAAS1GAAEtZgABLYYAAS2IAAEtigABLYwAAS2OAAEtkAABLZEAAS2SAAEtlQABLZYAAS2YAAEtmQABLZsAAS2eAAEtnwABLaAAAS2jAAEtpAABLakAAS22AAEtuwABLb0AAS2/AAEtxAABLccAAS3KAAEtzAABLfEAAS4VAAEuPAABLmAAAS5jAAEuZQABLmcAAS5pAAEuawABLm0AAS5uAAEucQABLn4AAS6PAAEukQABLpMAAS6VAAEulwABLpkAAS6bAAEunQABLp8AAS6wAAEuswABLrYAAS65AAEuvAABLr8AAS7CAAEuxQABLsgAAS7KAAEvCQABLwsAAS8NAAEvDwABLxIAAS8TAAEvFAABLxUAAS8WAAEvGAABLxoAAS8bAAEvHAABLx4AAS8fAAEvXgABL2AAAS9iAAEvZAABL2cAAS9oAAEvaQABL2oAAS9rAAEvbQABL28AAS9wAAEvcQABL3MAAS90AAEvswABL7UAAS+4AAEvugABL70AAS++AAEvvwABL8AAAS/BAAEvwwABL8UAAS/GAAEvxwABL8kAAS/KAAEv1wABL9gAAS/ZAAEv2wABMBoAATAcAAEwHgABMCAAATAjAAEwJAABMCUAATAmAAEwJwABMCkAATArAAEwLAABMC0AATAvAAEwMAABMG8AATBxAAEwcwABMHUAATB4AAEweQABMHoAATB7AAEwfAABMH4AATCAAAEwgQABMIIAATCEAAEwhQABMMQAATDGAAEwyAABMMoAATDNAAEwzgABMM8AATDQAAEw0QABMNMAATDVAAEw1gABMNcAATDZAAEw2gABMRkAATEbAAExHQABMR8AATEiAAExIwABMSQAATElAAExJgABMSgAATEqAAExKwABMSwAATEuAAExLwABMW4AATFwAAExcgABMXQAATF3AAExeAABMXkAATF6AAExewABMX0AATF/AAExgAABMYEAATGDAAExhAABMakAATHNAAEx9AABMhgAATIbAAEyHQABMh8AATIhAAEyIwABMiUAATImAAEyKQABMjYAATJFAAEyRwABMkkAATJLAAEyTQABMk8AATJRAAEyUwABMmIAATJlAAEyaAABMmsAATJuAAEycQABMnQAATJ3AAEyeQABMrgAATK6AAEyvAABMr4AATLBAAEywgABMsMAATLEAAEyxQABMscAATLJAAEyygABMssAATLNAAEyzgABMw0AATMPAAEzEQABMxMAATMWAAEzFwABMxgAATMZAAEzGgABMxwAATMeAAEzHwABMyAAATMiAAEzIwABM2IAATNkAAEzZgABM2gAATNrAAEzbAABM20AATNuAAEzbwABM3EAATNzAAEzdAABM3UAATN3AAEzeAABM7cAATO5AAEzuwABM70AATPAAAEzwQABM8IAATPDAAEzxAABM8YAATPIAAEzyQABM8oAATPMAAEzzQABNAwAATQOAAE0EAABNBIAATQVAAE0FgABNBcAATQYAAE0GQABNBsAATQdAAE0HgABNB8AATQhAAE0IgABNGEAATRjAAE0ZQABNGcAATRqAAE0awABNGwAATRtAAE0bgABNHAAATRyAAE0cwABNHQAATR2AAE0dwABNLYAATS4AAE0ugABNLwAATS/AAE0wAABNMEAATTCAAE0wwABNMUAATTHAAE0yAABNMkAATTLAAE0zAABNRcAATU6AAE1WgABNXoAATV8AAE1fgABNYAAATWCAAE1hAABNYUAATWGAAE1iQABNYoAATWMAAE1jQABNY8AATWSAAE1kwABNZQAATWXAAE1mAABNZ0AATWqAAE1rwABNbEAATWzAAE1uAABNbsAATW+AAE1wAABNeUAATYJAAE2MAABNlQAATZXAAE2WQABNlsAATZdAAE2XwABNmEAATZiAAE2ZQABNnIAATaDAAE2hQABNocAATaJAAE2iwABNo0AATaPAAE2kQABNpMAATakAAE2pwABNqoAATatAAE2sAABNrMAATa2AAE2uQABNrwAATa+AAE2/QABNv8AATcBAAE3AwABNwYAATcHAAE3CAABNwkAATcKAAE3DAABNw4AATcPAAE3EAABNxIAATcTAAE3UgABN1QAATdWAAE3WAABN1sAATdcAAE3XQABN14AATdfAAE3YQABN2MAATdkAAE3ZQABN2cAATdoAAE3pwABN6kAATesAAE3rgABN7EAATeyAAE3swABN7QAATe1AAE3twABN7kAATe6AAE3uwABN70AATe+AAE3ywABN8wAATfNAAE3zwABOA4AATgQAAE4EgABOBQAATgXAAE4GAABOBkAATgaAAE4GwABOB0AATgfAAE4IAABOCEAATgjAAE4JAABOGMAAThlAAE4ZwABOGkAAThsAAE4bQABOG4AAThvAAE4cAABOHIAATh0AAE4dQABOHYAATh4AAE4eQABOLgAATi6AAE4vAABOL4AATjBAAE4wgABOMMAATjEAAE4xQABOMcAATjJAAE4ygABOMsAATjNAAE4zgABOQ0AATkPAAE5EQABORMAATkWAAE5FwABORgAATkZAAE5GgABORwAATkeAAE5HwABOSAAATkiAAE5IwABOWIAATlkAAE5ZgABOWgAATlrAAE5bAABOW0AATluAAE5bwABOXEAATlzAAE5dAABOXUAATl3AAE5eAABOZ0AATnBAAE56AABOgwAAToPAAE6EQABOhMAAToVAAE6FwABOhkAAToaAAE6HQABOioAATo5AAE6OwABOj0AATo/AAE6QQABOkMAATpFAAE6RwABOlYAATpZAAE6XAABOl8AATpiAAE6ZQABOmgAATprAAE6bQABOqwAATquAAE6sAABOrIAATq1AAE6tgABOrcAATq4AAE6uQABOrsAATq9AAE6vgABOr8AATrBAAE6wgABOwEAATsDAAE7BQABOwcAATsKAAE7CwABOwwAATsNAAE7DgABOxAAATsSAAE7EwABOxQAATsWAAE7FwABO1YAATtYAAE7WgABO1wAATtfAAE7YAABO2EAATtiAAE7YwABO2UAATtnAAE7aAABO2kAATtrAAE7bAABO6sAATutAAE7rwABO7EAATu0AAE7tQABO7YAATu3AAE7uAABO7oAATu8AAE7vQABO74AATvAAAE7wQABPAAAATwCAAE8BAABPAYAATwJAAE8CgABPAsAATwMAAE8DQABPA8AATwRAAE8EgABPBMAATwVAAE8FgABPFUAATxXAAE8WQABPFsAATxeAAE8XwABPGAAATxhAAE8YgABPGQAATxmAAE8ZwABPGgAATxqAAE8awABPKoAATysAAE8rgABPLAAATyzAAE8tAABPLUAATy2AAE8twABPLkAATy7AAE8vAABPL0AATy/AAE8wAABPQsAAT0uAAE9TgABPW4AAT1wAAE9cgABPXQAAT12AAE9eAABPXkAAT16AAE9fQABPX4AAT2AAAE9gQABPYMAAT2GAAE9hwABPYgAAT2LAAE9jAABPZEAAT2eAAE9owABPaUAAT2nAAE9rAABPa8AAT2yAAE9tAABPdkAAT39AAE+JAABPkgAAT5LAAE+TQABPk8AAT5RAAE+UwABPlUAAT5WAAE+WQABPmYAAT53AAE+eQABPnsAAT59AAE+fwABPoEAAT6DAAE+hQABPocAAT6YAAE+mwABPp4AAT6hAAE+pAABPqcAAT6qAAE+rQABPrAAAT6yAAE+8QABPvMAAT71AAE+9wABPvoAAT77AAE+/AABPv0AAT7+AAE/AAABPwIAAT8DAAE/BAABPwYAAT8HAAE/RgABP0gAAT9KAAE/TAABP08AAT9QAAE/UQABP1IAAT9TAAE/VQABP1cAAT9YAAE/WQABP1sAAT9cAAE/mwABP50AAT+gAAE/ogABP6U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AAVEjAAFRJQABUSYAAVEnAAFRKQABUSoAAVE3AAFROAABUTkAAVE7AAFRegABUXwAAVF+AAFRgAABUYMAAVGEAAFRhQABUYYAAVGHAAFRiQABUYsAAVGMAAFRjQABUY8AAVGQAAFRzwABUdEAAVHUAAFR1gABUdkAAVHaAAFR2wABUdwAAVHdAAFR3wABUeEAAVHiAAFR4wABUeUAAVHmAAFR+QABUgYAAVIRAAFSFAABUhcAAVIaAAFSHQABUiAAAVIrAAFSLgABUjEAAVI0AAFSNwABUjoAAVI8AAFSVAABUmYAAVJxAAFSiQABUtQAAVL3AAFTFwABUzcAAVM5AAFTOwABUz0AAVM/AAFTQgABU0MAAVNEAAFTRwABU0gAAVNKAAFTSwABU00AAVNQAAFTUQABU1IAAVNVAAFTVgABU1sAAVNoAAFTbQABU28AAVNxAAFTdgABU3kAAVN8AAFTfgABU6MAAVPHAAFT7gABVBIAAVQVAAFUFwABVBkAAVQbAAFUHQABVB8AAVQgAAFUIwABVDAAAVRBAAFUQwABVEUAAVRHAAFUSQABVEsAAVRNAAFUTwABVFEAAVRiAAFUZQABVGgAAVRrAAFUbgABVHEAAVR0AAFUdwABVHoAAVR8AAFUuwABVL0AAVS/AAFUwQABVMQAAVTFAAFUxgABVMcAAVTIAAFUygABVMwAAVTNAAFUzgABVNAAAVTRAAFVEAABVRIAAVUUAAFVFgABVRkAAVUaAAFVGwABVRwAAVUdAAFVHwABVSEAAVUiAAFVIwABVSUAAVUmAAFVZQABVWcAAVVqAAFVbAABVW8AAVVwAAFVcQABVXIAAVVzAAFVdQABVXcAAVV4AAFVeQABVXsAAVV8AAFViQABVYoAAVWLAAFVjQABVcwAAVXOAAFV0AABVdIAAVXVAAFV1gABVdcAAVXYAAFV2QABVdsAAVXdAAFV3gABVd8AAVXhAAFV4gABViEAAVYjAAFWJQABVicAAVYqAAFWKwABViwAAVYtAAFWLgABVjAAAVYyAAFWMwABVjQAAVY2AAFWNwABVnYAAVZ4AAFWegABVnwAAVZ/AAFWgAABVoEAAVaCAAFWgwABVoUAAVaHAAFWiAABVokAAVaLAAFWjAABVssAAVbNAAFWzwABVtEAAVbUAAFW1QABVtYAAVbXAAFW2AABVtoAAVbcAAFW3QABVt4AAVbgAAFW4QABVyAAAVciAAFXJAABVyYAAVcpAAFXKgABVysAAVcsAAFXLQABVy8AAVcxAAFXMgABVzMAAVc1AAFXNgABV1sAAVd/AAFXpgABV8oAAVfNAAFXzwABV9EAAVfTAAFX1QABV9cAAVfYAAFX2wABV+gAAVf3AAFX+QABV/sAAVf9AAFX/wABWAEAAVgDAAFYBQABWBQAAVgXAAFYGgABWB0AAVggAAFYIwABWCYAAVgpAAFYKwABWGoAAVhsAAFYbgABWHAAAVhzAAFYdAABWHUAAVh2AAFYdwABWHkAAVh7AAFYfAABWH0AAVh/AAFYgAABWL8AAVjBAAFYwwABWMUAAVjIAAFYyQABWMoAAVjLAAFYzAABWM4AAVjQAAFY0QABWNIAAVjUAAFY1QABWRQAAVkWAAFZGAABWRoAAVkdAAFZHgABWR8AAVkgAAFZIQABWSMAAVklAAFZJgABWScAAVkpAAFZKgABWWkAAVlrAAFZbgABWXAAAVlzAAFZdAABWXUAAVl2AAFZdwABWXkAAVl7AAFZfAABWX0AAVl/AAFZgAABWb8AAVnBAAFZwwABWcUAAVnIAAFZyQABWcoAAVnLAAFZzAABWc4AAVnQAAFZ0QABWdIAAVnUAAFZ1QABWhQAAVoWAAFaGAABWhoAAVodAAFaHgABWh8AAVogAAFaIQABWiMAAVolAAFaJgABWicAAVopAAFaKgABWmkAAVprAAFabQABWm8AAVpyAAFacwABWnQAAVp1AAFadgABWngAAVp6AAFaewABWnwAAVp+AAFafwABWsoAAVrtAAFbDQABWy0AAVsvAAFbMQABWzMAAVs1AAFbOAABWzkAAVs6AAFbPQABWz4AAVtAAAFbQQABW0QAAVtHAAFbSAABW0kAAVtMAAFbTQABW1IAAVtfAAFbZAABW2YAAVtpAAFbbgABW3EAAVt0AAFbdgABW5sAAVu/AAFb5gABXAoAAVwNAAFcDwABXBEAAVwTAAFcFQABXBcAAVwYAAFcGwABXCgAAVw5AAFcOwABXD0AAVw/AAFcQQABXEMAAVxFAAFcRwABXEkAAVxaAAFcXQABXGAAAVxjAAFcZgABXGkAAVxsAAFcbwABXHIAAVx0AAFcswABXLUAAVy3AAFcuQABXLwAAVy9AAFcvgABXL8AAVzAAAFcwgABXMQAAVzFAAFcxgABXMgAAVzJAAFdCAABXQoAAV0MAAFdDgABXREAAV0SAAFdEwABXRQAAV0VAAFdFwABXRkAAV0aAAFdGwABXR0AAV0eAAFdXQABXV8AAV1iAAFdZAABXWcAAV1oAAFdaQABXWoAAV1rAAFdbQABXW8AAV1wAAFdcQABXXMAAV10AAFdgQABXYIAAV2DAAFdhQABXcQAAV3GAAFdyAABXcoAAV3NAAFdzgABXc8AAV3QAAFd0QABXdMAAV3VAAFd1gABXdcAAV3ZAAFd2gABXhkAAV4bAAFeHQABXh8AAV4iAAFeIwABXiQAAV4lAAFeJgABXigAAV4qAAFeKwABXiwAAV4uAAFeLwABXm4AAV5wAAFecgABXnQAAV53AAFeeAABXnkAAV56AAFeewABXn0AAV5/AAFegAABXoEAAV6DAAFehAABXsMAAV7FAAFexwABXskAAV7MAAFezQABXs4AAV7PAAFe0AABXtIAAV7UAAFe1QABXtYAAV7YAAFe2QABXxgAAV8aAAFfHAABXx4AAV8hAAFfIgABXyMAAV8kAAFfJQABXycAAV8pAAFfKgABXysAAV8tAAFfLgABX1MAAV93AAFfngABX8IAAV/FAAFfyAABX8oAAV/MAAFfzgABX9AAAV/RAAFf1AABX+EAAV/wAAFf8wABX/YAAV/5AAFf/AABX/8AAWACAAFgBQABYBQAAWAXAAFgGgABYB0AAWAgAAFgIwABYCYAAWApAAFgKwABYGoAAWBsAAFgbwABYHEAAWB0AAFgdQABYHYAAWB3AAFgeAABYHoAAWB9AAFgfgABYH8AAWCBAAFgggABYMEAAWDDAAFgxgABYMgAAWDLAAFgzAABYM0AAWDOAAFgzwABYNEAAWDUAAFg1QABYNYAAWDYAAFg2QABYRgAAWEaAAFhHQABYR8AAWEiAAFhIwABYSQAAWElAAFhJgABYSgAAWErAAFhLAABYS0AAWEvAAFhMAABYW8AAWFxAAFhcwABYXUAAWF4AAFheQABYXoAAWF7AAFhfAABYX4AAWGBAAFhggABYYMAAWGFAAFhhgABYcUAAWHHAAFhyQABYcsAAWHOAAFhzwABYdAAAWHRAAFh0gABYdQAAWHXAAFh2AABYdkAAWHbAAFh3AABYhsAAWIdAAFiHwABYiEAAWIkAAFiJQABYiYAAWInAAFiKAABYioAAWItAAFiLgABYi8AAWIxAAFiMgABYnEAAWJzAAFidgABYngAAWJ7AAFifAABYn0AAWJ+AAFifwABYoEAAWKEAAFihQABYoYAAWKIAAFiiQABYtQAAWL3AAFjFwABYzcAAWM5AAFjOwABYz0AAWM/AAFjQgABY0MAAWNEAAFjRwABY0gAAWNKAAFjSwABY04AAWNRAAFjUgABY1MAAWNWAAFjVwABY1wAAWNpAAFjbgABY3AAAWNzAAFjeAABY3sAAWN+AAFjgAABY6UAAWPJAAFj8AABZBQAAWQXAAFkGQABZBsAAWQdAAFkHwABZCEAAWQiAAFkJQABZDIAAWRDAAFkRQABZEcAAWRJAAFkSwABZE0AAWRPAAFkUQABZFMAAWRkAAFkZwABZGoAAWRtAAFkcAABZHMAAWR2AAFkeQABZHwAAWR+AAFkvQABZL8AAWTBAAFkwwABZMYAAWTHAAFkyAABZMkAAWTKAAFkzAABZM4AAWTPAAFk0AABZNIAAWTTAAFlEgABZRQAAWUWAAFlGAABZRsAAWUcAAFlHQABZR4AAWUfAAFlIQABZSMAAWUkAAFlJQABZScAAWUoAAFlZwABZWkAAWVsAAFlbgABZXEAAWVyAAFlcwABZXQAAWV1AAFldwABZXkAAWV6AAFlewABZX0AAWV+AAFliwABZYwAAWWNAAFljwABZc4AAWXQAAFl0gABZdQAAWXXAAFl2AABZdkAAWXaAAFl2wABZd0AAWXfAAFl4AABZeEAAWXjAAFl5AABZiMAAWYlAAFmJwABZikAAWYsAAFmLQABZi4AAWYvAAFmMAABZjIAAWY0AAFmNQABZjYAAWY4AAFmOQABZngAAWZ6AAFmfAABZn4AAWaBAAFmggABZoMAAWaEAAFmhQABZocAAWaJAAFmigABZosAAWaNAAFmjgABZs0AAWbPAAFm0QABZtMAAWbWAAFm1wABZtgAAWbZAAFm2gABZtwAAWbeAAFm3wABZuAAAWbiAAFm4wABZyIAAWckAAFnJgABZygAAWcrAAFnLAABZy0AAWcuAAFnLwABZzEAAWczAAFnNAABZzUAAWc3AAFnOAABZ10AAWeBAAFnqAABZ8wAAWfPAAFn0gABZ9QAAWfWAAFn2AABZ9oAAWfbAAFn3gABZ+sAAWf4AAFn+wABZ/4AAWgBAAFoBAABaAcAAWgKAAFoFwABaBoAAWgdAAFoIAABaCMAAWgmAAFoKQABaCsAAWhqAAFobAABaG4AAWhwAAFocwABaHQAAWh1AAFodgABaHcAAWh5AAFofAABaH0AAWh+AAFogAABaIEAAWjAAAFowgABaMQAAWjGAAFoyQABaMoAAWjLAAFozAABaM0AAWjPAAFo0gABaNMAAWjUAAFo1gABaNcAAWkWAAFpGAABaRsAAWkdAAFpIAABaSEAAWkiAAFpIwABaSQAAWkmAAFpKQABaSoAAWkrAAFpLQABaS4AAWltAAFpbwABaXIAAWl0AAFpdwABaXgAAWl5AAFpegABaXsAAWl9AAFpgAABaYEAAWmCAAFphAABaYUAAWnEAAFpxgABackAAWnLAAFpzgABac8AAWnQAAFp0QABadIAAWnUAAFp1wABadgAAWnZAAFp2wABadwAAWobAAFqHQABah8AAWohAAFqJAABaiUAAWomAAFqJwABaigAAWoqAAFqLQABai4AAWovAAFqMQABajIAAWp9AAFqoAABasAAAWrgAAFq4gABauQAAWrmAAFq6AABausAAWrsAAFq7QABavAAAWrxAAFq8wABavQAAWr2AAFq+QABavoAAWr7AAFq/gABav8AAWsIAAFrFQABaxoAAWscAAFrHgABayMAAWsmAAFrKQABaysAAWtQAAFrdAABa5sAAWu/AAFrwgABa8QAAWvGAAFryAABa8oAAWvMAAFrzQABa9AAAWvdAAFr7gABa/AAAWvyAAFr9AABa/YAAWv4AAFr+gABa/wAAWv+AAFsDwABbBIAAWwVAAFsGAABbBsAAWweAAFsIQABbCQAAWwnAAFsKQABbGgAAWxqAAFsbAABbG4AAWxxAAFscgABbHMAAWx0AAFsdQABbHcAAWx5AAFsegABbHsAAWx9AAFsfgABbL0AAWy/AAFswQABbMMAAWzGAAFsxwABbMgAAWzJAAFsygABbMwAAWzOAAFszwABbNAAAWzSAAFs0wABbRIAAW0UAAFtFwABbRkAAW0cAAFtHQABbR4AAW0fAAFtIAABbSIAAW0kAAFtJQABbSYAAW0oAAFtKQABbTYAAW03AAFtOAABbToAAW15AAFtewABbX0AAW1/AAFtggABbYMAAW2EAAFthQABbYYAAW2IAAFtigABbYsAAW2MAAFtjgABbY8AAW3OAAFt0AABbdIAAW3UAAFt1wABbdgAAW3ZAAFt2gABbdsAAW3dAAFt3wABbeAAAW3hAAFt4wABbeQAAW4jAAFuJQABbicAAW4pAAFuLAABbi0AAW4uAAFuLwABbjAAAW4yAAFuNAABbjUAAW42AAFuOAABbjkAAW54AAFuegABbnwAAW5+AAFugQABboIAAW6DAAFuhAABboUAAW6HAAFuiQABbooAAW6LAAFujQABbo4AAW7NAAFuzwABbtEAAW7TAAFu1gABbtcAAW7YAAFu2QABbtoAAW7cAAFu3gABbt8AAW7gAAFu4gABbuMAAW8IAAFvLAABb1MAAW93AAFvegABb3wAAW9+AAFvgAABb4IAAW+EAAFvhQABb4gAAW+VAAFvpAABb6YAAW+oAAFvqgABb6wAAW+uAAFvsAABb7IAAW/BAAFvxAABb8cAAW/KAAFvzQABb9AAAW/TAAFv1gABb9gAAXAXAAFwGQABcBsAAXAdAAFwIAABcCEAAXAiAAFwIwABcCQAAXAmAAFwKAABcCkAAXAqAAFwLAABcC0AAXBsAAFwbgABcHAAAXByAAFwdQABcHYAAXB3AAFweAABcHkAAXB7AAFwfQABcH4AAXB/AAFwgQABcIIAAXDBAAFwwwABcMUAAXDHAAFwygABcMsAAXDMAAFwzQABcM4AAXDQAAFw0gABcNMAAXDUAAFw1gABcNcAAXEWAAFxGAABcRoAAXEcAAFxHwABcSAAAXEhAAFxIgABcSMAAXElAAFxJwABcSgAAXEpAAFxKwABcSwAAXFrAAFxbQABcW8AAXFxAAFxdAABcXUAAXF2AAFxdwABcXgAAXF6AAFxfAABcX0AAXF+AAFxgAABcYEAAXHAAAFxwgABccQAAXHGAAFxyQABccoAAXHLAAFxzAABcc0AAXHPAAFx0QABcdIAAXHTAAFx1QABcdYAAXIVAAFyFwABchkAAXIbAAFyHgABch8AAXIgAAFyIQABciIAAXIkAAFyJgABcicAAXIoAAFyKgABcisAAXJ2AAFymQABcrkAAXLZAAFy2wABct0AAXLfAAFy4QABcuQAAXLlAAFy5gABcukAAXLqAAFy7AABcu0AAXLwAAFy8wABcvQAAXL1AAFy+AABcvkAAXL+AAFzCwABcxAAAXMSAAFzFQABcxoAAXMdAAFzIAABcyIAAXNHAAFzawABc5IAAXO2AAFzuQABc7sAAXO9AAFzvwABc8EAAXPDAAFzxAABc8cAAXPUAAFz5QABc+cAAXPpAAFz6wABc+0AAXPvAAFz8QABc/MAAXP1AAF0BgABdAkAAXQMAAF0DwABdBIAAXQVAAF0GAABdBsAAXQeAAF0IAABdF8AAXRhAAF0YwABdGUAAXRoAAF0aQABdGoAAXRrAAF0bAABdG4AAXRwAAF0cQABdHIAAXR0AAF0dQABdLQAAXS2AAF0uAABdLoAAXS9AAF0vgABdL8AAXTAAAF0wQABdMMAAXTFAAF0xgABdMcAAXTJAAF0ygABdQkAAXULAAF1DgABdRAAAXUTAAF1FAABdRUAAXUWAAF1FwABdRkAAXUbAAF1HAABdR0AAXUfAAF1IAABdS0AAXUuAAF1LwABdTEAAXVwAAF1cgABdXQAAXV2AAF1eQABdXoAAXV7AAF1fAABdX0AAXV/AAF1gQABdYIAAXWDAAF1hQABdYYAAXXFAAF1xwABdckAAXXLAAF1zgABdc8AAXXQAAF10QABddIAAXXUAAF11gABddcAAXXYAAF12gABddsAAXYaAAF2HAABdh4AAXYgAAF2IwABdiQAAXYlAAF2JgABdicAAXYpAAF2KwABdiwAAXYtAAF2LwABdjAAAXZvAAF2cQABdnMAAXZ1AAF2eAABdnkAAXZ6AAF2ewABdnwAAXZ+AAF2gAABdoEAAXaCAAF2hAABdoUAAXbEAAF2xgABdsgAAXbKAAF2zQABds4AAXbPAAF20AABdtEAAXbTAAF21QABdtYAAXbXAAF22QABdtoAAXb/AAF3IwABd0oAAXduAAF3cQABd3QAAXd2AAF3eAABd3oAAXd8AAF3fQABd4AAAXeNAAF3nAABd58AAXeiAAF3pQABd6gAAXerAAF3rgABd7EAAXfAAAF3wwABd8YAAXfJAAF3zAABd88AAXfSAAF31QABd9cAAXgWAAF4GAABeBsAAXgdAAF4IAABeCEAAXgiAAF4IwABeCQAAXgmAAF4KQABeCoAAXgrAAF4LQABeC4AAXhtAAF4bwABeHIAAXh0AAF4dwABeHgAAXh5AAF4egABeHsAAXh9AAF4gAABeIEAAXiCAAF4hAABeIUAAXjEAAF4xgABeMkAAXjLAAF4zgABeM8AAXjQAAF40QABeNIAAXjUAAF41wABeNgAAXjZAAF42wABeNwAAXkbAAF5HQABeSAAAXkiAAF5JQABeSYAAXknAAF5KAABeSkAAXkrAAF5LgABeS8AAXkwAAF5MgABeTMAAXl2AAF5mgABeb4AAXnhAAF6CAABeigAAXpPAAF6dgABepYAAXq6AAF63gABeuAAAXrjAAF65QABeucAAXrpAAF67AABeu4AAXrwAAF68gABevQAAXr2AAF6+AABevsAAXr+AAF6/wABewQAAXsRAAF7FAABexYAAXsZAAF7HAABex4AAXtDAAF7ZwABe44AAXuyAAF7tQABe7cAAXu5AAF7uwABe70AAXu/AAF7wAABe8MAAXvQAAF74wABe+UAAXvnAAF76QABe+sAAXvtAAF77wABe/EAAXvzAAF79QABfAgAAXwLAAF8DgABfBEAAXwUAAF8FwABfBoAAXwdAAF8IAABfCMAAXwlAAF8ZAABfGYAAXxpAAF8awABfG4AAXxvAAF8cAABfHEAAXxyAAF8dAABfHYAAXx3AAF8eAABfHoAAXx7AAF8hAABfIUAAXyHAAF8xgABfMgAAXzKAAF8zAABfM8AAXzQAAF80QABfNIAAXzTAAF81QABfNcAAXzYAAF82QABfNsAAXzcAAF9GwABfR0AAX0gAAF9IgABfSUAAX0mAAF9JwABfSgAAX0pAAF9KwABfS0AAX0uAAF9LwABfTEAAX0yAAF9OwABfTwAAX0+AAF9fQABfX8AAX2BAAF9gwABfYYAAX2HAAF9iAABfYkAAX2KAAF9jAABfY4AAX2PAAF9kAABfZIAAX2TAAF90gABfdQAAX3XAAF92QABfdwAAX3dAAF93gABfd8AAX3gAAF94gABfeQAAX3lAAF95gABfegAAX3pAAF98gABffMAAX31AAF+NAABfjYAAX44AAF+OgABfj0AAX4+AAF+PwABfkAAAX5BAAF+QwABfkUAAX5GAAF+RwABfkkAAX5KAAF+iQABfosAAX6OAAF+kAABfpMAAX6UAAF+lQABfpYAAX6XAAF+mQABfpsAAX6cAAF+nQABfp8AAX6gAAF+rQABfq4AAX6vAAF+sQABfvAAAX7yAAF+9AABfvYAAX75AAF++gABfvsAAX78AAF+/QABfv8AAX8BAAF/AgABfwMAAX8FAAF/BgABf0UAAX9HAAF/SgABf0wAAX9PAAF/UAABf1EAAX9SAAF/UwABf1UAAX9XAAF/WAABf1kAAX9bAAF/XAABf3gAAX+FAAF/jgABf5AAAX+TAAF/lgABf5kAAX+iAAF/pQABf6gAAX+rAAF/rgABf7AAAX/EAAF/ywABgBYAAYA5AAGAWQABgHkAAYB7AAGAfQABgH8AAYCBAAGAhAABgIUAAYCGAAGAiQABgIoAAYCMAAGAjQABgI8AAYCRAAGAkgABgJMAAYCWAAGAlwABgJwAAYCpAAGArgABgLAAAYCyAAGAtwABgLoAAYC9AAGAvwABgOQAAYEIAAGBLwABgVMAAYFWAAGBWAABgVoAAYFcAAGBXgABgWAAAYFhAAGBZAABgXEAAYGCAAGBhAABgYYAAYGIAAGBigABgYwAAYGOAAGBkAABgZIAAYGjAAGBpgABgakAAYGsAAGBrwABgbIAAYG1AAGBuAABgbsAAYG9AAGB/AABgf4AAYIAAAGCAgABggUAAYIGAAGCBwABgggAAYIJAAGCCwABgg0AAYIOAAGCDwABghEAAYISAAGCUQABglMAAYJVAAGCVwABgloAAYJbAAGCXAABgl0AAYJeAAGCYAABgmIAAYJjAAGCZAABgmYAAYJnAAGCpgABgqgAAYKrAAGCrQABgrAAAYKxAAGCsgABgrMAAYK0AAGCtgABgrgAAYK5AAGCugABgrwAAYK9AAGCygABgssAAYLMAAGCzgABgw0AAYMPAAGDEQABgxMAAYMWAAGDFwABgxgAAYMZAAGDGgABgxwAAYMeAAGDHwABgyAAAYMiAAGDIwABg2IAAYNkAAGDZgABg2gAAYNrAAGDbAABg20AAYNuAAGDbwABg3EAAYNzAAGDdAABg3UAAYN3AAGDeAABg7cAAYO5AAGDuwABg70AAYPAAAGDwQABg8IAAYPDAAGDxAABg8YAAYPIAAGDyQABg8oAAYPMAAGDzQABhAwAAYQOAAGEEAABhBIAAYQVAAGEFgABhBcAAYQYAAGEGQABhBsAAYQdAAGEHgABhB8AAYQhAAGEIgABhGEAAYRjAAGEZQABhGcAAYRqAAGEawABhGwAAYRtAAGEbgABhHAAAYRyAAGEcwABhHQAAYR2AAGEdwABhJwAAYTAAAGE5wABhQsAAYUOAAGFEAABhRIAAYUUAAGFFgABhRgAAYUZAAGFHAABhSkAAYU4AAGFOgABhTwAAYU+AAGFQAABhUIAAYVEAAGFRgABhVUAAYVYAAGFWwABhV4AAYVhAAGFZAABhWcAAYVqAAGFbAABhasAAYWtAAGFrwABhbEAAYW0AAGFtQABhbYAAYW3AAGFuAABhboAAYW8AAGFvQABhb4AAYXAAAGFwQABhgAAAYYCAAGGBAABhgYAAYYJAAGGCgABhgsAAYYMAAGGDQABhg8AAYYRAAGGEgABhhMAAYYVAAGGFgABhlUAAYZXAAGGWQABhlsAAYZeAAGGXwABhmAAAYZhAAGGYgABhmQAAYZmAAGGZwABhmgAAYZqAAGGawABhqoAAYasAAGGrgABhrAAAYazAAGGtAABhrUAAYa2AAGGtwABhrkAAYa7AAGGvAABhr0AAYa/AAGGwAABhv8AAYcBAAGHAwABhwUAAYcIAAGHCQABhwoAAYcLAAGHDAABhw4AAYcQAAGHEQABhxIAAYcUAAGHFQABh1QAAYdWAAGHWAABh1oAAYddAAGHXgABh18AAYdgAAGHYQABh2MAAYdlAAGHZgABh2cAAYdpAAGHagABh6kAAYerAAGHrQABh68AAYeyAAGHswABh7QAAYe1AAGHtgABh7gAAYe6AAGHuwABh7wAAYe+AAGHvwABiAoAAYgtAAGITQABiG0AAYhvAAGIcQABiHMAAYh1AAGIeAABiHkAAYh6AAGIfQABiH4AAYiAAAGIgQABiIQAAYiHAAGIiAABiIkAAYiMAAGIjQABiJIAAYifAAGIpAABiKYAAYipAAGIrgABiLEAAYi0AAGItgABiNsAAYj/AAGJJgABiUoAAYlNAAGJTwABiVEAAYlTAAGJVQABiVcAAYlYAAGJWwABiWgAAYl5AAGJewABiX0AAYl/AAGJgQABiYMAAYmFAAGJhwABiYkAAYmaAAGJnQABiaAAAYmjAAGJpgABiakAAYmsAAGJrwABibIAAYm0AAGJ8wABifUAAYn3AAGJ+QABifwAAYn9AAGJ/gABif8AAYoAAAGKAgABigQAAYoFAAGKBgABiggAAYoJAAGKSAABikoAAYpMAAGKTgABilEAAYpSAAGKUwABilQAAYpVAAGKVwABilkAAYpaAAGKWwABil0AAYpeAAGKnQABip8AAYqiAAGKpAABiqcAAYqoAAGKqQABiqoAAYqrAAGKrQABiq8AAYqwAAGKsQABirMAAYq0AAGKwQABisIAAYrDAAGKxQABiwQAAYsGAAGLCAABiwoAAYsNAAGLDgABiw8AAYsQAAGLEQABixMAAYsVAAGLFgABixcAAYsZAAGLGgABi1kAAYtbAAGLXQABi18AAYtiAAGLYwABi2QAAYtlAAGLZgABi2gAAYtqAAGLawABi2wAAYtuAAGLbwABi64AAYuwAAGLsgABi7QAAYu3AAGLuAABi7kAAYu6AAGLuwABi70AAYu/AAGLwAABi8EAAYvDAAGLxAABjAMAAYwFAAGMBwABjAkAAYwMAAGMDQABjA4AAYwPAAGMEAABjBIAAYwUAAGMFQABjBYAAYwYAAGMGQABjFgAAYxaAAGMXAABjF4AAYxhAAGMYgABjGMAAYxkAAGMZQABjGcAAYxpAAGMagABjGsAAYxtAAGMbgABjJMAAYy3AAGM3gABjQIAAY0FAAGNCAABjQoAAY0MAAGNDgABjRAAAY0RAAGNFAABjSEAAY0uAAGNMQABjTQAAY03AAGNOgABjT0AAY1AAAGNTQABjVAAAY1TAAGNVgABjVkAAY1cAAGNXwABjWEAAY2gAAGNogABjaQAAY2mAAGNqQABjaoAAY2rAAGNrAABja0AAY2vAAGNsgABjbMAAY20AAGNtgABjbcAAY32AAGN+AABjfoAAY38AAGN/wABjgAAAY4BAAGOAgABjgMAAY4FAAGOCAABjgkAAY4KAAGODAABjg0AAY5MAAGOTgABjlEAAY5TAAGOVgABjlcAAY5YAAGOWQABjloAAY5cAAGOXwABjmAAAY5hAAGOYwABjmQAAY6jAAGOpQABjqgAAY6qAAGOrQABjq4AAY6vAAGOsAABjrEAAY6zAAGOtgABjrcAAY64AAGOugABjrsAAY76AAGO/AABjv8AAY8BAAGPBAABjwUAAY8GAAGPBwABjwgAAY8KAAGPDQABjw4AAY8PAAGPEQABjxIAAY9RAAGPUwABj1UAAY9XAAGPWgABj1sAAY9cAAGPXQABj14AAY9gAAGPYwABj2QAAY9lAAGPZwABj2gAAY+zAAGP1gABj/YAAZAWAAGQGAABkBoAAZAcAAGQHgABkCEAAZAiAAGQIwABkCYAAZAnAAGQKQABkCoAAZAsAAGQLwABkDAAAZAxAAGQNAABkDUAAZA+AAGQSwABkFAAAZBSAAGQVAABkFkAAZBcAAGQXwABkGEAAZCGAAGQqgABkNEAAZD1AAGQ+AABkPoAAZD8AAGQ/gABkQAAAZECAAGRAwABkQYAAZETAAGRJAABkSYAAZEoAAGRKgABkSwAAZEuAAGRMAABkTIAAZE0AAGRRQABkUgAAZFLAAGRTgABkVEAAZFUAAGRVwABkVoAAZFdAAGRXwABkZ4AAZGgAAGRogABkaQAAZGnAAGRqAABkakAAZGqAAGRqwABka0AAZGvAAGRsAABkbEAAZGzAAGRtAABkfMAAZH1AAGR9wABkfkAAZH8AAGR/QABkf4AAZH/AAGSAAABkgIAAZIEAAGSBQABkgYAAZIIAAGSCQABkkgAAZJKAAGSTQABkk8AAZJSAAGSUwABklQAAZJVAAGSVgABklgAAZJaAAGSWwABklwAAZJeAAGSXwABkmwAAZJtAAGSbgABknAAAZKvAAGSsQABkrMAAZK1AAGSuAABkrkAAZK6AAGSuwABkrwAAZK+AAGSwAABksEAAZLCAAGSxAABksUAAZMEAAGTBgABkwgAAZMKAAGTDQABkw4AAZMPAAGTEAABkxEAAZMTAAGTFQABkxYAAZMXAAGTGQABkxoAAZNZAAGTWwABk10AAZNfAAGTYgABk2MAAZNkAAGTZQABk2YAAZNoAAGTagABk2sAAZNsAAGTbgABk28AAZOuAAGTsAABk7IAAZO0AAGTtwABk7gAAZO5AAGTugABk7sAAZO9AAGTvwABk8AAAZPBAAGTwwABk8QAAZQDAAGUBQABlAcAAZQJAAGUDAABlA0AAZQOAAGUDwABlBAAAZQSAAGUFAABlBUAAZQWAAGUGAABlBkAAZQ+AAGUYgABlIkAAZStAAGUsAABlLIAAZS0AAGUtgABlLgAAZS6AAGUuwABlL4AAZTLAAGU2gABlNwAAZTeAAGU4AABlOIAAZTkAAGU5gABlOgAAZT3AAGU+gABlP0AAZUAAAGVAwABlQYAAZUJAAGVDAABlQ4AAZVNAAGVTwABlVEAAZVTAAGVVgABlVcAAZVYAAGVWQABlVoAAZVcAAGVXgABlV8AAZVgAAGVYgABlWMAAZWiAAGVpAABlaYAAZWoAAGVqwABlawAAZWtAAGVrgABla8AAZWxAAGVswABlbQAAZW1AAGVtwABlbgAAZX3AAGV+QABlfsAAZX9AAGWAAABlgEAAZYCAAGWAwABlgQAAZYGAAGWCAABlgkAAZYKAAGWDAABlg0AAZZMAAGWTgABllAAAZZSAAGWVQABllYAAZZXAAGWWAABllkAAZZbAAGWXQABll4AAZZfAAGWYQABlmIAAZahAAGWowABlqUAAZanAAGWqgABlqsAAZasAAGWrQABlq4AAZawAAGWsgABlrMAAZa0AAGWtgABlrcAAZb2AAGW+AABlvoAAZb8AAGW/wABlwAAAZcBAAGXAgABlwMAAZcFAAGXBwABlwgAAZcJAAGXCwABlwwAAZdLAAGXTQABl08AAZdRAAGXVAABl1UAAZdWAAGXVwABl1gAAZdaAAGXXAABl10AAZdeAAGXYAABl2EAAZesAAGXzwABl+8AAZgPAAGYEQABmBMAAZgVAAGYFwABmBoAAZgbAAGYHAABmB8AAZggAAGYIgABmCMAAZgmAAGYKQABmCoAAZgrAAGYLgABmC8AAZg0AAGYQQABmEYAAZhIAAGYSwABmFAAAZhTAAGYVgABmFgAAZh9AAGYoQABmMgAAZjsAAGY7wABmPEAAZjzAAGY9QABmPcAAZj5AAGY+gABmP0AAZkKAAGZGwABmR0AAZkfAAGZIQABmSMAAZklAAGZJwABmSkAAZkrAAGZPAABmT8AAZlCAAGZRQABmUgAAZlLAAGZTgABmVEAAZlUAAGZVgABmZUAAZmXAAGZmQABmZsAAZmeAAGZnwABmaAAAZmhAAGZogABmaQAAZmmAAGZpwABmagAAZmqAAGZqwABmeoAAZnsAAGZ7gABmfAAAZnzAAGZ9AABmfUAAZn2AAGZ9wABmfkAAZn7AAGZ/AABmf0AAZn/AAGaAAABmj8AAZpBAAGaRAABmkYAAZpJAAGaSgABmksAAZpMAAGaTQABmk8AAZpRAAGaUgABmlMAAZpVAAGaVgABmmMAAZpkAAGaZQABmmcAAZqmAAGaqAABmqoAAZqsAAGarwABmrAAAZqxAAGasgABmrMAAZq1AAGatwABmrgAAZq5AAGauwABmrwAAZr7AAGa/QABmv8AAZsBAAGbBAABmwUAAZsGAAGbBwABmwgAAZsKAAGbDAABmw0AAZsOAAGbEAABmxEAAZtQAAGbUgABm1QAAZtWAAGbWQABm1o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AAaYvAAGmMQABpjIAAaYzAAGmNQABpjYAAaZbAAGmfwABpqYAAabKAAGmzQABps8AAabRAAGm0wABptUAAabXAAGm2AABptsAAaboAAGm9wABpvkAAab7AAGm/QABpv8AAacBAAGnAwABpwUAAacUAAGnFwABpxoAAacdAAGnIAABpyMAAacmAAGnKQABpysAAadqAAGnbAABp24AAadwAAGncwABp3QAAad1AAGndgABp3cAAad5AAGnewABp3wAAad9AAGnfwABp4AAAae/AAGnwQABp8MAAafFAAGnyAABp8kAAafKAAGnywABp8wAAafOAAGn0AABp9EAAafSAAGn1AABp9UAAagUAAGoFgABqBgAAagaAAGoHQABqB4AAagfAAGoIAABqCEAAagjAAGoJQABqCYAAagnAAGoKQABqCoAAahpAAGoawABqG4AAahwAAGocwABqHQAAah1AAGodgABqHcAAah5AAGoewABqHwAAah9AAGofwABqIAAAai/AAGowQABqMMAAajFAAGoyAABqMkAAajKAAGoywABqMwAAajOAAGo0AABqNEAAajSAAGo1AABqNUAAakUAAGpFgABqRgAAakaAAGpHQABqR4AAakfAAGpIAABqSEAAakjAAGpJQABqSYAAaknAAGpKQABqSoAAalpAAGpawABqW0AAalvAAGpcgABqXMAAal0AAGpdQABqXYAAal4AAGpegABqXsAAal8AAGpfgABqX8AAanKAAGp7QABqg0AAaotAAGqLwABqjEAAaozAAGqNQABqjcAAao4AAGqOQABqjwAAao9AAGqPwABqkAAAapDAAGqRgABqkcAAapIAAGqSwABqkwAAapRAAGqXgABqmMAAaplAAGqaAABqm0AAapwAAGqcwABqnUAAaqaAAGqvgABquUAAasJAAGrDAABqw4AAasQAAGrEgABqxQAAasWAAGrFwABqxoAAasnAAGrOAABqzoAAas8AAGrPgABq0AAAatCAAGrRAABq0YAAatIAAGrWQABq1wAAatfAAGrYgABq2UAAatoAAGrawABq24AAatxAAGrcwABq7IAAau0AAGrtgABq7gAAau7AAGrvAABq70AAau+AAGrvwABq8EAAavDAAGrxAABq8UAAavHAAGryAABrAcAAawJAAGsCwABrA0AAawQAAGsEQABrBIAAawTAAGsFAABrBYAAawYAAGsGQABrBoAAawcAAGsHQABrFwAAaxeAAGsYQABrGMAAaxmAAGsZwABrGgAAaxpAAGsagABrGwAAaxuAAGsbwABrHAAAaxyAAGscwABrIAAAayBAAGsggABrIQAAazDAAGsxQABrMcAAazJAAGszAABrM0AAazOAAGszwABrNAAAazSAAGs1AABrNUAAazWAAGs2AABrNkAAa0YAAGtGgABrRwAAa0eAAGtIQABrSIAAa0jAAGtJAABrSUAAa0nAAGtKQABrSoAAa0rAAGtLQABrS4AAa1tAAGtbwABrXEAAa1zAAGtdgABrXcAAa14AAGteQABrXoAAa18AAGtfgABrX8AAa2AAAGtggABrYMAAa3CAAGtxAABrcYAAa3IAAGtywABrcwAAa3NAAGtzgABrc8AAa3RAAGt0wABrdQAAa3VAAGt1wABrdgAAa4XAAGuGQABrhsAAa4dAAGuIAABriEAAa4iAAGuIwABriQAAa4mAAGuKAABrikAAa4qAAGuLAABri0AAa5SAAGudgABrp0AAa7BAAGuxAABrscAAa7JAAGuywABrs0AAa7PAAGu0AABrtMAAa7gAAGu7wABrvIAAa71AAGu+AABrvsAAa7+AAGvAQABrwQAAa8TAAGvFgABrxkAAa8cAAGvHwABryIAAa8lAAGvKAABryoAAa9pAAGvawABr24AAa9wAAGvcwABr3QAAa91AAGvdgABr3cAAa95AAGvfAABr30AAa9+AAGvgAABr4EAAa/AAAGvwgABr8UAAa/HAAGvygABr8sAAa/MAAGvzQABr84AAa/QAAGv0wABr9QAAa/VAAGv1wABr9gAAbAXAAGwGQABsBwAAbAeAAGwIQABsCIAAbAjAAGwJAABsCUAAbAnAAGwKgABsCsAAbAsAAGwLgABsC8AAbBuAAGwcAABsHMAAbB1AAGweAABsHkAAbB6AAGwewABsHwAAbB+AAGwgQABsIIAAbCDAAGwhQABsIYAAbDJAAGw7QABsREAAbE0AAGxWwABsXsAAbGiAAGxyQABsekAAbINAAGyMQABsjMAAbI2AAGyOAABsjoAAbI8AAGyPwABskEAAbJDAAGyRQABskcAAbJJAAGySwABsk4AAbJRAAGyUgABslcAAbJkAAGyZwABsmkAAbJsAAGybwABsnEAAbKWAAGyugABsuEAAbMFAAGzCAABswoAAbMMAAGzDgABsxAAAbMSAAGzEwABsxYAAbMjAAGzNgABszgAAbM6AAGzPAABsz4AAbNAAAGzQgABs0QAAbNGAAGzSAABs1sAAbNeAAGzYQABs2QAAbNnAAGzagABs20AAbNwAAGzcwABs3YAAbN4AAGztwABs7kAAbO8AAGzvgABs8EAAbPCAAGzwwABs8QAAbPFAAGzxwABs8kAAbPKAAGzywABs80AAbPOAAGz1wABs9gAAbPaAAG0GQABtBsAAbQdAAG0HwABtCIAAbQjAAG0JAABtCUAAbQmAAG0KAABtCoAAbQrAAG0LAABtC4AAbQvAAG0bgABtHAAAbRzAAG0dQABtHgAAbR5AAG0egABtHsAAbR8AAG0fgABtIAAAbSBAAG0ggABtIQAAbSFAAG0jgABtI8AAbSRAAG00AABtNIAAbTUAAG01gABtNkAAbTaAAG02wABtNwAAbTdAAG03wABtOEAAbTiAAG04wABtOUAAbTmAAG1JQABtScAAbUqAAG1LAABtS8AAbUwAAG1MQABtTIAAbUzAAG1NQABtTcAAbU4AAG1OQABtTsAAbU8AAG1RQABtUYAAbVIAAG1hwABtYkAAbWLAAG1jQABtZAAAbWRAAG1kgABtZMAAbWUAAG1lgABtZgAAbWZAAG1mgABtZwAAbWdAAG13AABtd4AAbXhAAG14wABteYAAbXnAAG16AABtekAAbXqAAG17AABte4AAbXvAAG18AABtfIAAbXzAAG2AAABtgEAAbYCAAG2BAABtkMAAbZFAAG2RwABtkkAAbZMAAG2TQABtk4AAbZPAAG2UAABtlIAAbZUAAG2VQABtlYAAbZYAAG2WQABtpgAAbaaAAG2nQABtp8AAbaiAAG2owABtqQAAbalAAG2pgABtqgAAbaqAAG2qwABtqwAAbauAAG2rwABtr0AAbbKAAG20wABttYAAbbZAAG23AABtt8AAbboAAG26wABtu4AAbbxAAG29AABtvYAAbb7AAG3RgABt2kAAbeJAAG3qQABt6sAAbetAAG3rwABt7EAAbe0AAG3tQABt7YAAbe5AAG3ugABt7wAAbe9AAG3wAABt8MAAbfEAAG3xQABt8gAAbfJAAG3zgABt9sAAbfgAAG34gABt+UAAbfqAAG37QABt/AAAbfyAAG4FwABuDsAAbhiAAG4hgABuIkAAbiLAAG4jQABuI8AAbiRAAG4kwABuJQAAbiXAAG4pAABuLUAAbi3AAG4uQABuLsAAbi9AAG4vwABuMEAAbjDAAG4xQABuNYAAbjZAAG43AABuN8AAbjiAAG45QABuOgAAbjrAAG47gABuPAAAbkvAAG5MQABuTMAAbk1AAG5OAABuTkAAbk6AAG5OwABuTwAAbk+AAG5QAABuUEAAblCAAG5RAABuUUAAbmEAAG5hgABuYgAAbmKAAG5jQABuY4AAbmPAAG5kAABuZEAAbmTAAG5lQABuZYAAbmXAAG5mQABuZoAAbnZAAG52wABud4AAbngAAG54wABueQAAbnlAAG55gABuecAAbnpAAG56wABuewAAbntAAG57wABufAAAbn9AAG5/gABuf8AAboBAAG6QAABukIAAbpEAAG6RgABukkAAbpKAAG6SwABukwAAbpNAAG6TwABulEAAbpSAAG6UwABulUAAbpWAAG6lQABupcAAbqZAAG6mwABup4AAbqfAAG6oAABuqEAAbqiAAG6pAABuqYAAbqnAAG6qAABuqoAAbqrAAG66gABuuwAAbruAAG68AABuvMAAbr0AAG69QABuvYAAbr3AAG6+QABuvsAAbr8AAG6/QABuv8AAbsAAAG7PwABu0EAAbtDAAG7RQABu0gAAbtJAAG7SgABu0sAAbtMAAG7TgABu1AAAbtRAAG7UgABu1QAAbtVAAG7lAABu5YAAbuYAAG7mgABu50AAbueAAG7nwABu6AAAbuhAAG7owABu6UAAbumAAG7pwABu6kAAbuqAAG7zwABu/MAAbwaAAG8PgABvEEAAbxEAAG8RgABvEgAAbxKAAG8TAABvE0AAbxQAAG8XQABvGwAAbxvAAG8cgABvHUAAbx4AAG8ewABvH4AAbyBAAG8kAABvJMAAbyWAAG8mQABvJwAAbyfAAG8ogABvKUAAbynAAG85gABvOgAAbzrAAG87QABvPAAAbzxAAG88gABvPMAAbz0AAG89gABvPkAAbz6AAG8+wABvP0AAbz+AAG9PQABvT8AAb1CAAG9RAABvUcAAb1IAAG9SQABvUoAAb1LAAG9TQABvVAAAb1RAAG9UgABvVQAAb1VAAG9lAABvZYAAb2ZAAG9mwABvZ4AAb2fAAG9oAABvaEAAb2iAAG9pAABvacAAb2oAAG9qQABvasAAb2sAAG96wABve0AAb3vAAG98QABvfQAAb31AAG99gABvfcAAb34AAG9+gABvf0AAb3+AAG9/wABvgEAAb4CAAG+QQABvkMAAb5FAAG+RwABvkoAAb5LAAG+TAABvk0AAb5OAAG+UAABvlMAAb5UAAG+VQABvlcAAb5YAAG+lwABvpkAAb6bAAG+nQABvqAAAb6hAAG+ogABvqMAAb6kAAG+pgABvqkAAb6qAAG+qwABvq0AAb6uAAG+7QABvu8AAb7yAAG+9AABvvcAAb74AAG++QABvvoAAb77AAG+/QABvwAAAb8BAAG/AgABvwQAAb8FAAG/UAABv3MAAb+TAAG/swABv7UAAb+3AAG/uQABv7sAAb++AAG/vwABv8AAAb/DAAG/xAABv8YAAb/HAAG/yQABv8wAAb/NAAG/zgABv9EAAb/SAAG/1wABv+QAAb/pAAG/6wABv+0AAb/yAAG/9QABv/gAAb/6AAHAHwABwEMAAcBqAAHAjgABwJEAAcCTAAHAlQABwJcAAcCZAAHAmwABwJwAAcCfAAHArAABwL0AAcC/AAHAwQABwMMAAcDFAAHAxwABwMkAAcDLAAHAzQABwN4AAcDhAAHA5AABwOcAAcDqAAHA7QABwPAAAcDzAAHA9gABwPgAAcE3AAHBOQABwTsAAcE9AAHBQAABwUEAAcFCAAHBQwABwUQAAcFGAAHBSAABwUkAAcFKAAHBTAABwU0AAcGMAAHBjgABwZAAAcGSAAHBlQABwZYAAcGXAAHBmAABwZkAAcGbAAHBnQABwZ4AAcGfAAHBoQABwaIAAcHhAAHB4wABweYAAcHoAAHB6wABwewAAcHtAAHB7gABwe8AAcHxAAHB8wABwfQAAcH1AAHB9wABwfgAAcIFAAHCBgABwgcAAcIJAAHCSAABwkoAAcJMAAHCTgABwlEAAcJSAAHCUwABwlQAAcJVAAHCVwABwlkAAcJaAAHCWwABwl0AAcJeAAHCnQABwp8AAcKhAAHCowABwqYAAcKnAAHCqAABwqkAAcKqAAHCrAABwq4AAcKvAAHCsAABwrIAAcKzAAHC8gABwvQAAcL2AAHC+AABwvsAAcL8AAHC/QABwv4AAcL/AAHDAQABwwMAAcMEAAHDBQABwwcAAcMIAAHDRwABw0kAAcNLAAHDTQABw1AAAcNRAAHDUgABw1MAAcNUAAHDVgABw1gAAcNZAAHDWgABw1wAAcNdAAHDnAABw54AAcOgAAHDogABw6UAAcOmAAHDpwABw6gAAcOpAAHDqwABw60AAcOuAAHDrwABw7EAAcOyAAHD1wABw/sAAcQiAAHERgABxEkAAcRLAAHETQABxE8AAcRRAAHEUwABxFQAAcRXAAHEZAABxHMAAcR1AAHEdwABxHkAAcR7AAHEfQABxH8AAcSBAAHEkAABxJMAAcSWAAHEmQABxJwAAcSfAAHEogABxKUAAcSnAAHE5gABxOgAAcTqAAHE7AABxO8AAcTwAAHE8QABxPIAAcTzAAHE9QABxPcAAcT4AAHE+QABxPsAAcT8AAHFOwABxT0AAcU/AAHFQQABxUQAAcVFAAHFRgABxUcAAcVIAAHFSgABxUwAAcVNAAHFTgABxVAAAcVRAAHFkAABxZIAAcWUAAHFlgABxZkAAcWaAAHFmwABxZwAAcWdAAHFnwABxaEAAcWiAAHFowABxaUAAcWmAAHF5QABxecAAcXqAAHF7AABxe8AAcXwAAHF8QABxfIAAcXzAAHF9QABxfcAAcX4AAHF+QABxfsAAcX8AAHGOwABxj0AAcY/AAHGQQABxkQAAcZFAAHGRgABxkcAAcZIAAHGSgABxkwAAcZNAAHGTgABxlAAAcZRAAHGkAABxpIAAcaVAAHGlwABxpoAAcabAAHGnAABxp0AAcaeAAHGoAABxqIAAcajAAHGpAABxqYAAcanAAHGwwABxwIAAccEAAHHBgABxwgAAccLAAHHDAABxw0AAccOAAHHDwABxxEAAccTAAHHFAABxxUAAccXAAHHGAABx2MAAceGAAHHpgABx8YAAcfIAAHHygABx8wAAcfOAAHH0QABx9IAAcfTAAHH1gABx9cAAcfZAAHH2gABx9wAAcffAAHH4AABx+EAAcfkAAHH5QABx+4AAcf7AAHIAAAByAIAAcgEAAHICQAByAwAAcgPAAHIEQAByDYAAchaAAHIgQAByKUAAcioAAHIqgAByKwAAciuAAHIsAAByLIAAcizAAHItgAByMMAAcjUAAHI1gAByNgAAcjaAAHI3AAByN4AAcjgAAHI4gAByOQAAcj1AAHI+AAByPsAAcj+AAHJAQAByQQAAckHAAHJCgAByQ0AAckPAAHJTgAByVAAAclSAAHJVAAByVcAAclYAAHJWQAByVoAAclbAAHJXQAByV8AAclgAAHJYQAByWMAAclkAAHJowAByaUAAcmnAAHJqQAByawAAcmtAAHJrgABya8AAcmwAAHJsgABybQAAcm1AAHJtgABybgAAcm5AAHJ+AAByfoAAcn9AAHJ/wABygIAAcoDAAHKBAABygUAAcoGAAHKCAABygoAAcoLAAHKDAAByg4AAcoPAAHKHAAByh0AAcoeAAHKIAAByl8AAcphAAHKYwABymUAAcpoAAHKaQABymoAAcprAAHKbAABym4AAcpwAAHKcQABynIAAcp0AAHKdQAByrQAAcq2AAHKuAAByroAAcq9AAHKvgAByr8AAcrAAAHKwQABysMAAcrFAAHKxgAByscAAcrJAAHKygABywkAAcsLAAHLDQAByw8AAcsSAAHLEwAByxQAAcsVAAHLFgAByxgAAcsaAAHLGwAByxwAAcseAAHLHwABy14AActgAAHLYgABy2QAActnAAHLaAABy2kAActqAAHLawABy20AActvAAHLcAABy3EAActzAAHLdAABy7MAAcu1AAHLtwABy7kAAcu8AAHLvQABy74AAcu/AAHLwAABy8IAAcvEAAHLxQABy8YAAcvIAAHLyQABy+4AAcwSAAHMOQABzF0AAcxgAAHMYgABzGQAAcxmAAHMaAABzGoAAcxrAAHMbgABzHsAAcyKAAHMjAABzI4AAcyQAAHMkgABzJQAAcyWAAHMmAABzKcAAcyqAAHMrQABzLAAAcyzAAHMtgABzLkAAcy8AAHMvgABzP0AAcz/AAHNAQABzQMAAc0GAAHNBwABzQgAAc0JAAHNCgABzQwAAc0OAAHNDwABzRAAAc0SAAHNEwABzVIAAc1UAAHNVgABzVgAAc1bAAHNXAABzV0AAc1eAAHNXwABzWEAAc1jAAHNZAABzWUAAc1nAAHNaAABzacAAc2pAAHNqwABza0AAc2wAAHNsQABzbIAAc2zAAHNtAABzbYAAc24AAHNuQABzboAAc28AAHNvQABzfwAAc3+AAHOAAABzgIAAc4FAAHOBgABzgcAAc4IAAHOCQABzgsAAc4NAAHODgABzg8AAc4RAAHOEgABzlEAAc5TAAHOVQABzlcAAc5aAAHOWwABzlwAAc5dAAHOXgABzmAAAc5iAAHOYwABzmQAAc5mAAHOZwABzqYAAc6oAAHOqgABzqwAAc6vAAHOsAABzrEAAc6yAAHOswABzrUAAc63AAHOuAABzrkAAc67AAHOvAABzvsAAc79AAHO/wABzwEAAc8EAAHPBQABzwYAAc8HAAHPCAABzwoAAc8MAAHPDQABzw4AAc8QAAHPEQABz1wAAc9/AAHPnwABz78AAc/BAAHPwwABz8UAAc/HAAHPygABz8sAAc/MAAHPzwABz9AAAc/SAAHP0wABz9UAAc/YAAHP2QABz9oAAc/dAAHP3gABz+MAAc/wAAHP9QABz/cAAc/5AAHP/gAB0AEAAdAEAAHQBgAB0CsAAdBPAAHQdgAB0JoAAdCdAAHQnwAB0KEAAdCjAAHQpQAB0KcAAdCoAAHQqwAB0LgAAdDJAAHQywAB0M0AAdDPAAHQ0QAB0NMAAdDVAAHQ1wAB0NkAAdDqAAHQ7QAB0PAAAdDzAAHQ9gAB0PkAAdD8AAHQ/wAB0QIAAdEEAAHRQwAB0UUAAdFHAAHRSQAB0UwAAdFNAAHRTgAB0U8AAdFQAAHRUgAB0VQAAdFVAAHRVgAB0VgAAdFZAAHRmAAB0ZoAAdGcAAHRngAB0aEAAdGiAAHRowAB0aQAAdGlAAHRpwAB0akAAdGqAAHRqwAB0a0AAdGuAAHR7QAB0e8AAdHyAAHR9AAB0fcAAdH4AAHR+QAB0foAAdH7AAHR/QAB0f8AAdIAAAHSAQAB0gMAAdIEAAHSEQAB0hIAAdITAAHSFQAB0lQAAdJWAAHSWAAB0loAAdJdAAHSXgAB0l8AAdJgAAHSYQAB0mMAAdJlAAHSZgAB0mcAAdJpAAHSagAB0qkAAdKrAAHSrQAB0q8AAdKyAAHSswAB0rQAAdK1AAHStgAB0rgAAdK6AAHSuwAB0rwAAdK+AAHSvwAB0v4AAdMAAAHTAgAB0wQAAdMHAAHTCAAB0wkAAdMKAAHTCwAB0w0AAdMPAAHTEAAB0xEAAdMTAAHTFAAB01MAAdNVAAHTVwAB01kAAdNcAAHTXQAB014AAdNfAAHTYAAB02IAAdNkAAHTZQAB02YAAdNoAAHTaQAB06gAAdOqAAHTrAAB064AAdOxAAHTsgAB07MAAdO0AAHTtQAB07cAAdO5AAHTugAB07sAAdO9AAHTvgAB0+MAAdQHAAHULgAB1FI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AAgGtAAIBrgACAbAAAgGyAAIBswACAbQAAgG2AAIBtwACAfYAAgH4AAIB+gACAfwAAgH/AAICAAACAgEAAgICAAICAwACAgUAAgIHAAICCAACAgkAAgILAAICDAACAksAAgJNAAICTwACAlEAAgJUAAICVQACAlYAAgJXAAICWAACAloAAgJcAAICXQACAl4AAgJgAAICYQACAqAAAgKiAAICpAACAqYAAgKpAAICqgACAqsAAgKsAAICrQACAq8AAgKxAAICsgACArMAAgK1AAICtgACAvUAAgL3AAIC+QACAvsAAgL+AAIC/wACAwAAAgMBAAIDAgACAwQAAgMGAAIDBwACAwgAAgMKAAIDCwACAzAAAgNUAAIDewACA58AAgOiAAIDpAACA6YAAgOoAAIDqgACA6wAAgOtAAIDsAACA70AAgPMAAIDzgACA9AAAgPSAAID1AACA9YAAgPYAAID2gACA+kAAgPsAAID7wACA/IAAgP1AAID+AACA/sAAgP+AAIEAAACBD8AAgRBAAIEQwACBEUAAgRIAAIESQACBEoAAgRLAAIETAACBE4AAgRQAAIEUQACBFIAAgRUAAIEVQACBJQAAgSWAAIEmAACBJoAAgSdAAIEngACBJ8AAgSgAAIEoQACBKMAAgSlAAIEpgACBKcAAgSpAAIEqgACBOkAAgTrAAIE7QACBO8AAgTyAAIE8wACBPQAAgT1AAIE9gACBPgAAgT6AAIE+wACBPwAAgT+AAIE/wACBT4AAgVAAAIFQgACBUQAAgVHAAIFSAACBUkAAgVKAAIFSwACBU0AAgVPAAIFUAACBVEAAgVTAAIFVAACBZMAAgWVAAIFlwACBZkAAgWcAAIFnQACBZ4AAgWfAAIFoAACBaIAAgWkAAIFpQACBaYAAgWoAAIFqQACBegAAgXqAAIF7AACBe4AAgXxAAIF8gACBfMAAgX0AAIF9QACBfcAAgX5AAIF+gACBfsAAgX9AAIF/gACBj0AAgY/AAIGQQACBkMAAgZGAAIGRwACBkgAAgZJAAIGSgACBkwAAgZOAAIGTwACBlAAAgZSAAIGUwACBp4AAgbBAAIG4QACBwEAAgcDAAIHBQACBwcAAgcJAAIHDAACBw0AAgcOAAIHEQACBxIAAgcUAAIHFQACBxgAAgcbAAIHHAACBx0AAgcgAAIHIQACByYAAgczAAIHOAACBzoAAgc9AAIHQgACB0UAAgdIAAIHSgACB28AAgeTAAIHugACB94AAgfhAAIH4wACB+UAAgfnAAIH6QACB+sAAgfsAAIH7wACB/wAAggNAAIIDwACCBEAAggTAAIIFQACCBcAAggZAAIIGwACCB0AAgguAAIIMQACCDQAAgg3AAIIOgACCD0AAghAAAIIQwACCEYAAghIAAIIhwACCIkAAgiLAAIIjQACCJAAAgiRAAIIkgACCJMAAgiUAAIIlgACCJgAAgiZAAIImgACCJwAAgidAAII3AACCN4AAgjgAAII4gACCOUAAgjmAAII5wACCOgAAgjpAAII6wACCO0AAgjuAAII7wACCPEAAgjyAAIJMQACCTMAAgk2AAIJOAACCTsAAgk8AAIJPQACCT4AAgk/AAIJQQACCUMAAglEAAIJRQACCUcAAglIAAIJVQACCVYAAglXAAIJWQACCZgAAgmaAAIJnAACCZ4AAgmhAAIJogACCaMAAgmkAAIJpQACCacAAgmpAAIJqgACCasAAgmtAAIJrgACCe0AAgnvAAIJ8QACCfMAAgn2AAIJ9wACCfgAAgn5AAIJ+gACCfwAAgn+AAIJ/wACCgAAAgoCAAIKAwACCkIAAgpEAAIKRgACCkgAAgpLAAIKTAACCk0AAgpOAAIKTwACClEAAgpTAAIKVAACClUAAgpXAAIKWAACCpcAAgqZAAIKmwACCp0AAgqgAAIKoQACCqIAAgqjAAIKpAACCqYAAgqoAAIKqQACCqoAAgqsAAIKrQACCuwAAgruAAIK8AACCvIAAgr1AAIK9gACCvcAAgr4AAIK+QACCvsAAgr9AAIK/gACCv8AAgsBAAILAgACCycAAgtLAAILcgACC5YAAguZAAILnAACC54AAgugAAILogACC6QAAgulAAILqAACC7UAAgvEAAILxwACC8oAAgvNAAIL0AACC9MAAgvWAAIL2QACC+gAAgvrAAIL7gACC/EAAgv0AAIL9wACC/oAAgv9AAIL/wACDD4AAgxAAAIMQwACDEUAAgxIAAIMSQACDEoAAgxLAAIMTAACDE4AAgxRAAIMUgACDFMAAgxVAAIMVgACDJUAAgyXAAIMmgACDJwAAgyfAAIMoAACDKEAAgyiAAIMowACDKUAAgyoAAIMqQACDKoAAgysAAIMrQACDOw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AAiQlAAIkSAACJGgAAiSIAAIkigACJIwAAiSOAAIkkAACJJMAAiSUAAIklQACJJgAAiSZAAIkmwACJJwAAiSeAAIkoQACJKIAAiSjAAIkpgACJKcAAiSsAAIkuQACJL4AAiTAAAIkwgACJMcAAiTKAAIkzQACJM8AAiT0AAIlGAACJT8AAiVjAAIlZgACJWgAAiVqAAIlbAACJW4AAiVwAAIlcQACJXQAAiWBAAIlkgACJZQAAiWWAAIlmAACJZoAAiWcAAIlngACJaAAAiWiAAIlswACJbYAAiW5AAIlvAACJb8AAiXCAAIlxQACJcgAAiXLAAIlzQACJgwAAiYOAAImEAACJhIAAiYVAAImFgACJhcAAiYYAAImGQACJhsAAiYdAAImHgACJh8AAiYhAAImIgACJmEAAiZjAAImZQACJmcAAiZqAAImawACJmwAAiZtAAImbgACJnAAAiZyAAImcwACJnQAAiZ2AAImdwACJrYAAia4AAImuwACJr0AAibAAAImwQACJsIAAibDAAImxAACJsYAAibIAAImyQACJsoAAibMAAImzQACJtoAAibbAAIm3AACJt4AAicdAAInHwACJyEAAicjAAInJgACJycAAicoAAInKQACJyoAAicsAAInLgACJy8AAicwAAInMgACJzMAAidyAAIndAACJ3YAAid4AAInewACJ3wAAid9AAInfgACJ38AAieBAAIngwACJ4QAAieFAAInhwACJ4gAAifHAAInyQACJ8sAAifNAAIn0AACJ9EAAifSAAIn0wACJ9QAAifWAAIn2AACJ9kAAifaAAIn3AACJ90AAigcAAIoHgACKCAAAigiAAIoJQACKCYAAignAAIoKAACKCkAAigrAAIoLQACKC4AAigvAAIoMQACKDIAAihxAAIocwACKHUAAih3AAIoegACKHsAAih8AAIofQACKH4AAiiAAAIoggACKIMAAiiEAAIohgACKIcAAiisAAIo0AACKPcAAikbAAIpHgACKSAAAikiAAIpJAACKSYAAikoAAIpKQACKSwAAik5AAIpSAACKUoAAilMAAIpTgACKVAAAilSAAIpVAACKVYAAillAAIpaAACKWsAAiluAAIpcQACKXQAAil3AAIpegACKXwAAim7AAIpvQACKb8AAinBAAIpxAACKcUAAinGAAIpxwACKcgAAinKAAIpzAACKc0AAinOAAIp0AACKdEAAioQAAIqEgACKhQAAioWAAIqGQACKhoAAiobAAIqHAACKh0AAiofAAIqIQACKiIAAiojAAIqJQACKiYAAiplAAIqZwACKmkAAiprAAIqbgACKm8AAipwAAIqcQACKnIAAip0AAIqdgACKncAAip4AAIqegACKnsAAiq6AAIqvAACKr4AAirAAAIqwwACKsQAAirFAAIqxgACKscAAirJAAIqywACKswAAirNAAIqzwACKtAAAisPAAIrEQACKxMAAisVAAIrGAACKxkAAisaAAIrGwACKxwAAiseAAIrIAACKyEAAisiAAIrJAACKyUAAitkAAIrZgACK2gAAitqAAIrbQACK24AAitvAAIrcAACK3EAAitzAAIrdQACK3YAAit3AAIreQACK3oAAiu5AAIruwACK70AAiu/AAIrwgACK8MAAivEAAIrxQACK8YAAivIAAIrygACK8sAAivMAAIrzgACK88AAiwaAAIsPQACLF0AAix9AAIsfwACLIEAAiyDAAIshQACLIgAAiyJAAIsigACLI0AAiyOAAIskAACLJEAAiyTAAIslgACLJcAAiyYAAIsmwACLJwAAiyhAAIsrgACLLMAAiy1AAIstwACLLwAAiy/AAIswgACLMQAAizpAAItDQACLTQAAi1YAAItWwACLV0AAi1fAAItYQACLWMAAi1lAAItZgACLWkAAi12AAIthwACLYkAAi2LAAItjQACLY8AAi2RAAItkwACLZUAAi2XAAItqAACLasAAi2uAAItsQACLbQAAi23AAItugACLb0AAi3AAAItwgACLgEAAi4DAAIuBQACLgcAAi4KAAIuCwACLgwAAi4NAAIuDgACLhAAAi4SAAIuEwACLhQAAi4WAAIuFwACLlYAAi5YAAIuWgACLlwAAi5fAAIuYAACLmEAAi5iAAIuYwACLmUAAi5nAAIuaAACLmkAAi5rAAIubAACLqsAAi6tAAIusAACLrIAAi61AAIutgACLrcAAi64AAIuuQACLrsAAi69AAIuvgACLr8AAi7BAAIuwgACLs8AAi7QAAIu0QACLtMAAi8SAAIvFAACLxYAAi8YAAIvGwACLxwAAi8dAAIvHgACLx8AAi8hAAIvIwACLyQAAi8lAAIvJwACLygAAi9nAAIvaQACL2sAAi9tAAIvcAACL3EAAi9yAAIvcwACL3QAAi92AAIveAACL3kAAi96AAIvfAACL30AAi+8AAIvvgACL8AAAi/CAAIvxQACL8YAAi/HAAIvyAACL8kAAi/LAAIvzQACL84AAi/PAAIv0QACL9IAAjARAAIwEwACMBUAAjAXAAIwGgACMBsAAjAcAAIwHQACMB4AAjAgAAIwIgACMCMAAjAkAAIwJgACMCcAAjBmAAIwaAACMGoAAjBsAAIwbwACMHAAAjBxAAIwcgACMHMAAjB1AAIwdwACMHgAAjB5AAIwewACMHwAAjChAAIwxQACMOwAAjEQAAIxEwACMRUAAjEXAAIxGQACMRsAAjEdAAIxHgACMSEAAjEuAAIxPQACMT8AAjFBAAIxQwACMUUAAjFHAAIxSQACMUsAAjFaAAIxXQACMWAAAjFjAAIxZgACMWkAAjFsAAIxbwACMXEAAjGwAAIxsgACMbQAAjG2AAIxuQACMboAAjG7AAIxvAACMb0AAjG/AAIxwQACMcIAAjHDAAIxxQACMcYAAjIFAAIyBwACMgkAAjILAAIyDgACMg8AAjIQAAIyEQACMhIAAjIUAAIyFgACMhcAAjIYAAIyGgACMhsAAjJaAAIyXAACMl4AAjJgAAIyYwACMmQAAjJlAAIyZgACMmcAAjJpAAIyawACMmwAAjJtAAIybwACMnAAAjKvAAIysQACMrMAAjK1AAIyuAACMrkAAjK6AAIyuwACMrwAAjK+AAIywAACMsEAAjLCAAIyxAACMsUAAjMEAAIzBgACMwgAAjMKAAIzDQACMw4AAjMPAAIzEAACMxEAAjMTAAIzFQACMxYAAjMXAAIzGQACMxoAAjNZAAIzWwACM10AAjNfAAIzYgACM2MAAjNkAAIzZQACM2YAAjNoAAIzagACM2sAAjNsAAIzbgACM28AAjOuAAIzsAACM7IAAjO0AAIztwACM7gAAjO5AAIzugACM7sAAjO9AAIzvwACM8AAAjPBAAIzwwACM8QAAjQPAAI0MgACNFIAAjRyAAI0dAACNHYAAjR4AAI0egACNH0AAjR+AAI0fwACNIIAAjSDAAI0hQACNIYAAjSJAAI0jAACNI0AAjSOAAI0kQACNJIAAjSXAAI0pAACNKkAAjSrAAI0rgACNLMAAjS2AAI0uQACNLsAAjTgAAI1BAACNSsAAjVPAAI1UgACNVQAAjVWAAI1WAACNVoAAjVcAAI1XQACNWAAAjVtAAI1fgACNYAAAjWCAAI1hAACNYYAAjWIAAI1igACNYwAAjWOAAI1nwACNaIAAjWlAAI1qAACNasAAjWuAAI1sQACNbQAAjW3AAI1uQACNfgAAjX6AAI1/AACNf4AAjYBAAI2AgACNgMAAjYEAAI2BQACNgcAAjYJAAI2CgACNgsAAjYNAAI2DgACNk0AAjZPAAI2UQACNlMAAjZWAAI2VwACNlgAAjZZAAI2WgACNlwAAjZeAAI2XwACNmAAAjZiAAI2YwACNqIAAjakAAI2pwACNqkAAjasAAI2rQACNq4AAjavAAI2sAACNrIAAja0AAI2tQACNrYAAja4AAI2uQACNsYAAjbHAAI2yAACNsoAAjcJAAI3CwACNw0AAjcPAAI3EgACNxMAAjcUAAI3FQACNxYAAjcYAAI3GgACNxsAAjccAAI3HgACNx8AAjdeAAI3YAACN2IAAjdkAAI3ZwACN2gAAjdpAAI3agACN2sAAjdtAAI3bwACN3AAAjdxAAI3cwACN3QAAjezAAI3tQACN7cAAje5AAI3vAACN70AAje+AAI3vwACN8AAAjfCAAI3xAACN8UAAjfGAAI3yAACN8kAAjgIAAI4CgACOAwAAjgOAAI4EQACOBIAAjgTAAI4FAACOBUAAjgXAAI4GQACOBoAAjgbAAI4HQACOB4AAjhdAAI4XwACOGEAAjhjAAI4ZgACOGcAAjhoAAI4aQACOGoAAjhsAAI4bgACOG8AAjhwAAI4cgACOHMAAjiYAAI4vAACOOMAAjkHAAI5CgACOQ0AAjkPAAI5EQACORMAAjkVAAI5FgACORkAAjkmAAI5NQACOTgAAjk7AAI5PgACOUEAAjlEAAI5RwACOUoAAjlZAAI5XAACOV8AAjliAAI5ZQACOWgAAjlrAAI5bgACOXAAAjmvAAI5sQACObQAAjm2AAI5uQACOboAAjm7AAI5vAACOb0AAjm/AAI5wgACOcMAAjnEAAI5xgACOccAAjoGAAI6CAACOgsAAjoNAAI6EAACOhEAAjoSAAI6EwACOhQAAjoWAAI6GQACOhoAAjobAAI6HQACOh4AAjpdAAI6XwACOmIAAjpkAAI6ZwACOmgAAjppAAI6agACOmsAAjptAAI6cAACOnE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AAkWgAAJFowACRaQAAkWpAAJFtgACRbsAAkW9AAJFwAACRcUAAkXIAAJFywACRc0AAkXyAAJGFgACRj0AAkZhAAJGZAACRmYAAkZoAAJGagACRmwAAkZuAAJGbwACRnIAAkZ/AAJGkAACRpIAAkaUAAJGlgACRpgAAkaaAAJGnAACRp4AAkagAAJGsQACRrQAAka3AAJGugACRr0AAkbAAAJGwwACRsYAAkbJAAJGywACRwoAAkcMAAJHDgACRxAAAkcTAAJHFAACRxUAAkcWAAJHFwACRxkAAkcbAAJHHAACRx0AAkcfAAJHIAACR18AAkdhAAJHYwACR2UAAkdoAAJHaQACR2oAAkdrAAJHbAACR24AAkdwAAJHcQACR3IAAkd0AAJHdQACR7QAAke2AAJHuQACR7sAAke+AAJHvwACR8AAAkfBAAJHwgACR8QAAkfGAAJHxwACR8gAAkfKAAJHywACR9gAAkfZAAJH2gACR9wAAkgbAAJIHQACSB8AAkghAAJIJAACSCUAAkgmAAJIJwACSCgAAkgqAAJILAACSC0AAkguAAJIMAACSDEAAkhwAAJIcgACSHQAAkh2AAJIeQACSHoAAkh7AAJIfAACSH0AAkh/AAJIgQACSIIAAkiDAAJIhQACSIYAAkjFAAJIxwACSMkAAkjLAAJIzgACSM8AAkjQAAJI0QACSNIAAkjUAAJI1gACSNcAAkjYAAJI2gACSNsAAkkaAAJJHAACSR4AAkkgAAJJIwACSSQAAkklAAJJJgACSScAAkkpAAJJKwACSSwAAkktAAJJLwACSTAAAklvAAJJcQACSXMAAkl1AAJJeAACSXkAAkl6AAJJewACSXwAAkl+AAJJgAACSYEAAkmCAAJJhAACSYUAAkmqAAJJzgACSfUAAkoZAAJKHAACSh8AAkohAAJKIwACSiUAAkonAAJKKAACSisAAko4AAJKRwACSkoAAkpNAAJKUAACSlMAAkpWAAJKWQACSlwAAkprAAJKbgACSnEAAkp0AAJKdwACSnoAAkp9AAJKgAACSoIAAkrBAAJKwwACSsYAAkrIAAJKywACSswAAkrNAAJKzgACSs8AAkrRAAJK1AACStUAAkrWAAJK2AACStkAAksYAAJLGgACSx0AAksfAAJLIgACSyMAAkskAAJLJQACSyYAAksoAAJLKwACSywAAkstAAJLLwACSzAAAktvAAJLcQACS3QAAkt2AAJLeQACS3oAAkt7AAJLfAACS30AAkt/AAJLggACS4MAAkuEAAJLhgACS4cAAkvGAAJLyAACS8sAAkvNAAJL0AACS9EAAkvSAAJL0wACS9QAAkvWAAJL2QACS9oAAkvbAAJL3QACS94AAkwhAAJMRQACTGkAAkyMAAJMswACTNMAAkz6AAJNIQACTUEAAk1lAAJNiQACTYsAAk2OAAJNkAACTZIAAk2UAAJNlwACTZkAAk2bAAJNnQACTZ8AAk2hAAJNowACTaYAAk2pAAJNqgACTa8AAk28AAJNvwACTcEAAk3EAAJNxwACTckAAk3uAAJOEgACTjkAAk5dAAJOYAACTmIAAk5kAAJOZgACTmgAAk5qAAJOawACTm4AAk57AAJOjgACTpAAAk6SAAJOlAACTpYAAk6YAAJOmgACTpwAAk6eAAJOoAACTrMAAk62AAJOuQACTrwAAk6/AAJOwgACTsUAAk7IAAJOywACTs4AAk7QAAJPDwACTxEAAk8UAAJPFgACTxkAAk8aAAJPGwACTxwAAk8dAAJPHwACTyEAAk8iAAJPIwACTyUAAk8mAAJPLwACTzAAAk8yAAJPcQACT3MAAk91AAJPdwACT3oAAk97AAJPfAACT30AAk9+AAJPgAACT4IAAk+DAAJPhAACT4YAAk+HAAJPxgACT8gAAk/LAAJPzQACT9AAAk/RAAJP0gACT9MAAk/UAAJP1gACT9gAAk/ZAAJP2gACT9wAAk/dAAJP5gACT+cAAk/pAAJQKAACUCoAAlAsAAJQLgACUDEAAlAyAAJQMwACUDQAAlA1AAJQNwACUDkAAlA6AAJQOwACUD0AAlA+AAJQfQACUH8AAlCCAAJQhAACUIcAAlCIAAJQiQACUIoAAlCLAAJQjQACUI8AAlCQAAJQkQACUJMAAlCUAAJQnQACUJ4AAlCgAAJQ3wACUOEAAlDjAAJQ5QACUOgAAlDpAAJQ6gACUOsAAlDsAAJQ7gACUPAAAlDxAAJQ8gACUPQAAlD1AAJRNAACUTYAAlE5AAJROwACUT4AAlE/AAJRQAACUUEAAlFCAAJRRAACUUYAAlFHAAJRSAACUUoAAlFLAAJRWAACUVkAAlFaAAJRXAACUZsAAlGdAAJRnwACUaEAAlGkAAJRpQACUaYAAlGnAAJRqAACUaoAAlGsAAJRrQACUa4AAlGwAAJRsQACUfAAAlHyAAJR9QACUfcAAlH6AAJR+wACUfwAAlH9AAJR/gACUgAAAlICAAJSAwACUgQAAlIGAAJSBwACUhMAAlIgAAJSLQACUjAAAlIzAAJSNgACUjkAAlI8AAJSPwACUkwAAlJPAAJSUgACUlUAAlJYAAJSWwACUl4AAlJgAAJSawACUnEAAlKDAAJSlgACUuEAAlMEAAJTJAACU0QAAlNGAAJTSAACU0oAAlNMAAJTTwACU1AAAlNRAAJTVAACU1UAAlNXAAJTWAACU1oAAlNdAAJTXgACU18AAlNiAAJTYwACU2gAAlN1AAJTegACU3wAAlN+AAJTgwACU4YAAlOJAAJTiwACU7AAAlPUAAJT+wACVB8AAlQiAAJUJAACVCYAAlQoAAJUKgACVCwAAlQtAAJUMAACVD0AAlROAAJUUAACVFIAAlRUAAJUVgACVFgAAlRaAAJUXAACVF4AAlRvAAJUcgACVHUAAlR4AAJUewACVH4AAlSBAAJUhAACVIcAAlSJAAJUyAACVMoAAlTMAAJUzgACVNEAAlTSAAJU0wACVNQAAlTVAAJU1wACVNkAAlTaAAJU2wACVN0AAlTeAAJVHQACVR8AAlUhAAJVIwACVSYAAlUnAAJVKAACVSkAAlUqAAJVLAACVS4AAlUvAAJVMAACVTIAAlUzAAJVcgACVXQAAlV3AAJVeQACVXwAAlV9AAJVfgACVX8AAlWAAAJVggACVYQAAlWFAAJVhgACVYgAAlWJAAJVlgACVZcAAlWYAAJVmgACVdkAAlXbAAJV3QACVd8AAlXiAAJV4wACVeQAAlXlAAJV5gACVegAAlXqAAJV6wACVewAAlXuAAJV7wACVi4AAlYwAAJWMgACVjQAAlY3AAJWOAACVjkAAlY6AAJWOwACVj0AAlY/AAJWQAACVkEAAlZDAAJWRAACVoMAAlaFAAJWhwACVokAAlaMAAJWjQACVo4AAlaPAAJWkAACVpIAAlaUAAJWlQACVpYAAlaYAAJWmQACVtgAAlbaAAJW3AACVt4AAlbhAAJW4gACVuMAAlbkAAJW5QACVucAAlbpAAJW6gACVusAAlbtAAJW7gACVy0AAlcvAAJXMQACVzMAAlc2AAJXNwACVzgAAlc5AAJXOgACVzwAAlc+AAJXPwACV0AAAldCAAJXQwACV2gAAleMAAJXswACV9cAAlfaAAJX3AACV94AAlfgAAJX4gACV+QAAlflAAJX6AACV/UAAlgEAAJYBgACWAgAAlgKAAJYDAACWA4AAlgQAAJYEgACWCEAAlgkAAJYJwACWCoAAlgtAAJYMAACWDMAAlg2AAJYOAACWHcAAlh5AAJYewACWH0AAliAAAJYgQACWIIAAliDAAJYhAACWIYAAliIAAJYiQACWIoAAliMAAJYjQACWMwAAljOAAJY0AACWNIAAljVAAJY1gACWNcAAljYAAJY2QACWNsAAljdAAJY3gACWN8AAljhAAJY4gACWSEAAlkjAAJZJQACWScAAlkqAAJZKwACWSwAAlktAAJZLgACWTAAAlkyAAJZMwACWTQAAlk2AAJZNwACWXYAAll4AAJZegACWXwAAll/AAJZgAACWYEAAlmCAAJZgwACWYUAAlmHAAJZiAACWYkAAlmLAAJZjAACWcsAAlnNAAJZzwACWdEAAlnUAAJZ1QACWdYAAlnXAAJZ2AACWdoAAlncAAJZ3QACWd4AAlngAAJZ4QACWiAAAloiAAJaJAACWiYAAlopAAJaKgACWisAAlosAAJaLQACWi8AAloxAAJaMgACWjMAAlo1AAJaNgACWnUAAlp3AAJaeQACWnsAAlp+AAJafwACWoAAAlqBAAJaggACWoQAAlqGAAJahwACWogAAlqKAAJaiwACWtYAAlr5AAJbGQACWzkAAls7AAJbPQACWz8AAltBAAJbRAACW0UAAltGAAJbSQACW0oAAltMAAJbTQACW1AAAltTAAJbVAACW1UAAltYAAJbWQACW14AAltrAAJbcAACW3IAAlt1AAJbegACW30AAluAAAJbggACW6cAAlvLAAJb8gACXBYAAlwZAAJcGwACXB0AAlwfAAJcIQACXCMAAlwkAAJcJwACXDQAAlxFAAJcRwACXEkAAlxLAAJcTQACXE8AAlxRAAJcUwACXFUAAlxmAAJcaQACXGwAAlxvAAJccgACXHUAAlx4AAJcewACXH4AAlyAAAJcvwACXMEAAlzDAAJcxQACXMgAAlzJAAJcygACXMsAAlzMAAJczgACXNAAAlzRAAJc0gACXNQAAlzVAAJdFAACXRYAAl0YAAJdGgACXR0AAl0eAAJdHwACXSAAAl0hAAJdIwACXSUAAl0mAAJdJwACXSkAAl0qAAJdaQACXWsAAl1uAAJdcAACXXMAAl10AAJddQACXXYAAl13AAJdeQACXXsAAl18AAJdfQACXX8AAl2AAAJdjQACXY4AAl2PAAJdkQACXdAAAl3SAAJd1AACXdYAAl3ZAAJd2gACXdsAAl3cAAJd3QACXd8AAl3hAAJd4gACXeMAAl3lAAJd5gACXiUAAl4nAAJeKQACXisAAl4uAAJeLwACXjAAAl4xAAJeMgACXjQAAl42AAJeNwACXjgAAl46AAJeOwACXnoAAl58AAJefgACXoAAAl6DAAJehAACXoUAAl6GAAJehwACXokAAl6LAAJejAACXo0AAl6PAAJekAACXs8AAl7RAAJe0wACXtUAAl7YAAJe2QACXtoAAl7bAAJe3AACXt4AAl7gAAJe4QACXuIAAl7kAAJe5QACXyQAAl8mAAJfKAACXyoAAl8tAAJfLgACXy8AAl8wAAJfMQACXzMAAl81AAJfNgACXzcAAl85AAJfOgACX18AAl+DAAJfqgACX84AAl/RAAJf1AACX9YAAl/YAAJf2gACX9wAAl/dAAJf4AACX+0AAl/8AAJf/wACYAIAAmAFAAJgCAACYAsAAmAOAAJgEQACYCAAAmAjAAJgJgACYCkAAmAsAAJgLwACYDIAAmA1AAJgNwACYHYAAmB4AAJgewACYH0AAmCAAAJggQACYIIAAmCDAAJghAACYIYAAmCJAAJgigACYIsAAmCNAAJgjgACYM0AAmDPAAJg0gACYNQAAmDXAAJg2AACYNkAAmDaAAJg2wACYN0AAmDgAAJg4QACYOIAAmDkAAJg5QACYSQAAmEmAAJhKQACYSsAAmEuAAJhLwACYTAAAmExAAJhMgACYTQAAmE3AAJhOAACYTkAAmE7AAJhPAACYXsAAmF9AAJhgAACYYIAAmGFAAJhhgACYYcAAmGIAAJhiQACYYsAAmGOAAJhjwACYZAAAmGSAAJhkwACYdIAAmHUAAJh1gACYdgAAmHbAAJh3AACYd0AAmHeAAJh3wACYeEAAmHkAAJh5QACYeYAAmHoAAJh6QACYigAAmIqAAJiLAACYi4AAmIxAAJiMgACYjMAAmI0AAJiNQACYjcAAmI6AAJiOwACYjwAAmI+AAJiPwACYn4AAmKAAAJigwACYoUAAmKIAAJiiQACYooAAmKLAAJijAACYo4AAmKRAAJikgACYpMAAmKVAAJilgACYuEAAmMEAAJjJAACY0QAAmNGAAJjSAACY0oAAmNMAAJjTwACY1AAAmNRAAJjVAACY1UAAmNXAAJjWAACY1oAAmNdAAJjXgACY18AAmNiAAJjYwACY2gAAmN1AAJjegACY3wAAmN+AAJjgwACY4YAAmOJAAJjiwACY7AAAmPUAAJj+wACZB8AAmQiAAJkJAACZCYAAmQoAAJkKgACZCwAAmQtAAJkMAACZD0AAmROAAJkUAACZFIAAmRUAAJkVgACZFgAAmRaAAJkXAACZF4AAmRvAAJkcgACZHUAAmR4AAJkewACZH4AAmSBAAJkhAACZIcAAmSJAAJkyAACZMoAAmTMAAJkzgACZNEAAmTSAAJk0wACZNQAAmTVAAJk1wACZNkAAmTaAAJk2wACZN0AAmTeAAJlHQACZR8AAmUhAAJlIwACZSYAAmUnAAJlKAACZSkAAmUqAAJlLAACZS4AAmUvAAJlMAACZTIAAmUzAAJlcgACZXQAAmV3AAJleQACZXwAAmV9AAJlfgACZX8AAmWAAAJlggACZYQAAmWFAAJlhgACZYgAAmWJAAJllgACZZcAAmWYAAJlmgACZdkAAmXbAAJl3QACZd8AAmXiAAJl4wACZeQAAmXlAAJl5gACZegAAmXqAAJl6wACZewAAmXuAAJl7wACZi4AAmYwAAJmMgACZjQAAmY3AAJmOAACZjkAAmY6AAJmOwACZj0AAmY/AAJmQAACZkEAAmZDAAJmRAACZoMAAmaFAAJmhwACZokAAmaMAAJmjQACZo4AAmaPAAJmkAACZpIAAmaUAAJmlQACZpYAAmaYAAJmmQACZtgAAmbaAAJm3AACZt4AAmbhAAJm4gACZuMAAmbkAAJm5QACZucAAmbpAAJm6gACZusAAmbtAAJm7gACZy0AAmcvAAJnMQACZzMAAmc2AAJnNwACZzgAAmc5AAJnOgACZzwAAmc+AAJnPwACZ0AAAmdCAAJnQwACZ2gAAmeMAAJnswACZ9cAAmfaAAJn3AACZ94AAmfgAAJn4gACZ+QAAmflAAJn6AACZ/UAAmgEAAJoBgACaAgAAmgKAAJoDAACaA4AAmgQAAJoEgACaCEAAmgkAAJoJwACaCoAAmgtAAJoMAACaDMAAmg2AAJoOAACaHcAAmh5AAJoewACaH0AAmiAAAJogQACaIIAAmiDAAJohAACaIYAAmiIAAJoiQACaIoAAmiMAAJojQACaMwAAmjOAAJo0AACaNIAAmjVAAJo1gACaNcAAmjYAAJo2QACaNsAAmjdAAJo3gACaN8AAmjhAAJo4gACaSEAAmkjAAJpJQACaScAAmkqAAJpKwACaSwAAmktAAJpLgACaTAAAmkyAAJpMwACaTQAAmk2AAJpNwACaXYAAml4AAJpegACaXwAAml/AAJpgAACaYEAAmmCAAJpgwACaYUAAmmHAAJpiAACaYkAAmmLAAJpjAACacsAAmnNAAJpzwACadEAAmnUAAJp1QACadYAAmnXAAJp2AACadoAAmncAAJp3QACad4AAmngAAJp4QACaiAAAmoiAAJqJAACaiYAAmopAAJqKgACaisAAmosAAJqLQACai8AAmoxAAJqMgACajMAAmo1AAJqNgACanUAAmp3AAJqeQACansAAmp+AAJqfwACaoAAAmqBAAJqggACaoQAAmqGAAJqhwACaogAAmqKAAJqiwACatYAAmr5AAJrGQACazkAAms7AAJrPQACaz8AAmtBAAJrRAACa0UAAmtGAAJrSQACa0oAAmtMAAJrTQACa08AAmtSAAJrUwACa1QAAmtXAAJrWAACa10AAmtqAAJrbwACa3EAAmtzAAJreAACa3sAAmt+AAJrgAACa6UAAmvJAAJr8AACbBQAAmwXAAJsGQACbBsAAmwdAAJsHwACbCEAAmwiAAJsJQACbDIAAmxDAAJsRQACbEcAAmxJAAJsSwACbE0AAmxPAAJsUQACbFMAAmxkAAJsZwACbGoAAmxtAAJscAACbHMAAmx2AAJseQACbHwAAmx+AAJsvQACbL8AAmzBAAJswwACbMYAAmzHAAJsyAACbMkAAmzKAAJszAACbM4AAmzPAAJs0AACbNIAAmzTAAJtEgACbRQAAm0WAAJtGAACbRsAAm0cAAJtHQACbR4AAm0fAAJtIQACbSMAAm0kAAJtJQACbScAAm0oAAJtZwACbWkAAm1sAAJtbgACbXEAAm1yAAJtcwACbXQAAm11AAJtdwACbXkAAm16AAJtewACbX0AAm1+AAJtiwACbYwAAm2NAAJtjwACbc4AAm3QAAJt0gACbdQAAm3XAAJt2AACbdkAAm3aAAJt2wACbd0AAm3fAAJt4AACbeEAAm3jAAJt5AACbiMAAm4lAAJuJwACbikAAm4sAAJuLQACbi4AAm4vAAJuMAACbjIAAm40AAJuNQACbjYAAm44AAJuOQACbngAAm56AAJufAACbn4AAm6BAAJuggACboMAAm6EAAJuhQACbocAAm6JAAJuigACbosAAm6NAAJujgACbs0AAm7PAAJu0QACbtMAAm7WAAJu1wACbtgAAm7ZAAJu2gACbtwAAm7eAAJu3wACbuAAAm7iAAJu4wACbyIAAm8kAAJvJgACbygAAm8rAAJvLAACby0AAm8uAAJvLwACbzEAAm8zAAJvNAACbzUAAm83AAJvOAACb10AAm+BAAJvqAACb8wAAm/PAAJv0QACb9MAAm/VAAJv1wACb9kAAm/aAAJv3QACb+oAAm/5AAJv+wACb/0AAm//AAJwAQACcAMAAnAFAAJwBwACcBYAAnAZAAJwHAACcB8AAnAiAAJwJQACcCgAAnArAAJwLQACcGwAAnBuAAJwcAACcHIAAnB1AAJwdgACcHcAAnB4AAJweQACcHsAAnB9AAJwfgACcH8AAnCBAAJwggACcMEAAnDDAAJwxQACcMcAAnDKAAJwywACcMwAAnDNAAJwzgACcNAAAnDSAAJw0wACcNQAAnDWAAJw1wACcRYAAnEYAAJxGgACcRwAAnEfAAJxIAACcSEAAnEiAAJxIwACcSUAAnEnAAJxKAACcSkAAnErAAJxLAACcWsAAnFtAAJxbwACcXEAAnF0AAJxdQACcXYAAnF3AAJxeAACcXoAAnF8AAJxfQACcX4AAnGAAAJxgQACccAAAnHCAAJxxAACccYAAnHJAAJxygACccsAAnHMAAJxzQACcc8AAnHRAAJx0gACcdMAAnHVAAJx1gACchUAAnIXAAJyGQACchsAAnIeAAJyHwACciAAAnIhAAJyIgACciQAAnImAAJyJwACcigAAnIqAAJyKwACcmoAAnJsAAJybgACcnAAAnJzAAJydAACcnUAAnJ2AAJydwACcnkAAnJ7AAJyfAACcn0AAnJ/AAJygAACcssAAnLuAAJzDgACcy4AAnMwAAJzMgACczQAAnM2AAJzOQACczoAAnM7AAJzPgACcz8AAnNBAAJzQgACc0QAAnNHAAJzSAACc0kAAnNMAAJzTQACc1IAAnNfAAJzZAACc2YAAnNoAAJzbQACc3AAAnNzAAJzdQACc5oAAnO+AAJz5QACdAkAAnQMAAJ0DgACdBAAAnQSAAJ0FAACdBYAAnQXAAJ0GgACdCcAAnQ4AAJ0OgACdDwAAnQ+AAJ0QAACdEIAAnREAAJ0RgACdEgAAnRZAAJ0XAACdF8AAnRiAAJ0ZQACdGgAAnRrAAJ0bgACdHEAAnRzAAJ0sgACdLQAAnS2AAJ0uAACdLsAAnS8AAJ0vQACdL4AAnS/AAJ0wQACdMMAAnTEAAJ0xQACdMcAAnTIAAJ1BwACdQkAAnULAAJ1DQACdRAAAnURAAJ1EgACdRMAAnUUAAJ1FgACdRgAAnUZAAJ1GgACdRwAAnUdAAJ1XAACdV4AAnVhAAJ1YwACdWYAAnVnAAJ1aAACdWkAAnVqAAJ1bAACdW4AAnVvAAJ1cAACdXIAAnVzAAJ1gAACdYEAAnWCAAJ1hAACdcMAAnXFAAJ1xwACdckAAnXMAAJ1zQACdc4AAnXPAAJ10AACddIAAnXUAAJ11QACddYAAnXYAAJ12QACdhgAAnYaAAJ2HAACdh4AAnYhAAJ2IgACdiMAAnYkAAJ2JQACdicAAnYpAAJ2KgACdisAAnYtAAJ2LgACdm0AAnZvAAJ2cQACdnMAAnZ2AAJ2dwACdngAAnZ5AAJ2egACdnwAAnZ+AAJ2fwACdoAAAnaCAAJ2gwACdsIAAnbEAAJ2xgACdsgAAnbLAAJ2zAACds0AAnbOAAJ2zwACdtEAAnbTAAJ21AACdtUAAnbXAAJ22AACdxcAAncZAAJ3GwACdx0AAncgAAJ3IQACdyIAAncjAAJ3JAACdyYAAncoAAJ3KQACdyoAAncsAAJ3LQACd1IAAnd2AAJ3nQACd8EAAnfEAAJ3xgACd8gAAnfKAAJ3zAACd84AAnfPAAJ30gACd98AAnfuAAJ38AACd/IAAnf0AAJ39gACd/gAAnf6AAJ3/AACeAsAAngOAAJ4EQACeBQAAngXAAJ4GgACeB0AAnggAAJ4IgACeGEAAnhjAAJ4ZQACeGcAAnhqAAJ4awACeGwAAnhtAAJ4bgACeHAAAnhyAAJ4cwACeHQAAnh2AAJ4dwACeLYAAni4AAJ4ugACeLwAAni/AAJ4wAACeMEAAnjCAAJ4wwACeMUAAnjHAAJ4yAACeMkAAnjLAAJ4zAACeQs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AAoQvAAKEMgAChDMAAoQ0AAKENwAChDgAAoQ6AAKEOwAChD0AAoRAAAKEQQAChEIAAoRFAAKERgAChEsAAoRYAAKEXQAChF8AAoRhAAKEZgAChGkAAoRsAAKEbgAChJMAAoS3AAKE3gAChQIAAoUFAAKFBwAChQkAAoULAAKFDQAChQ8AAoUQAAKFEwAChSAAAoUxAAKFMwAChTUAAoU3AAKFOQAChTsAAoU9AAKFPwAChUEAAoVSAAKFVQAChVgAAoVbAAKFXgAChWEAAoVkAAKFZwAChWoAAoVsAAKFqwACha0AAoWvAAKFsQAChbQAAoW1AAKFtgAChbcAAoW4AAKFugAChbwAAoW9AAKFvgAChcAAAoXBAAKGAAAChgIAAoYEAAKGBgAChgkAAoYKAAKGCwAChgwAAoYNAAKGDwAChhEAAoYSAAKGEwAChhUAAoYWAAKGVQAChlcAAoZaAAKGXAAChl8AAoZgAAKGYQAChmIAAoZjAAKGZQAChmcAAoZoAAKGaQAChmsAAoZsAAKGeQAChnoAAoZ7AAKGfQAChrwAAoa+AAKGwAAChsIAAobFAAKGxgAChscAAobIAAKGyQAChssAAobNAAKGzgAChs8AAobRAAKG0gAChxEAAocTAAKHFQAChxcAAocaAAKHGwAChxwAAocdAAKHHgAChyAAAociAAKHIwAChyQAAocmAAKHJwACh2YAAodoAAKHagACh2wAAodvAAKHcAACh3EAAodyAAKHcwACh3UAAod3AAKHeAACh3kAAod7AAKHfAACh7sAAoe9AAKHvwACh8EAAofEAAKHxQACh8YAAofHAAKHyAACh8oAAofMAAKHzQACh84AAofQAAKH0QACiBAAAogSAAKIFAACiBYAAogZAAKIGgACiBsAAogcAAKIHQACiB8AAoghAAKIIgACiCMAAoglAAKIJgACiEsAAohvAAKIlgACiLoAAoi9AAKIvwACiMEAAojDAAKIxQACiMcAAojIAAKIywACiNgAAojnAAKI6QACiOsAAojtAAKI7wACiPEAAojzAAKI9QACiQQAAokHAAKJCgACiQ0AAokQAAKJEwACiRYAAokZAAKJGwACiVoAAolcAAKJXgACiWAAAoljAAKJZAACiWUAAolmAAKJZwACiWkAAolrAAKJbAACiW0AAolvAAKJcAACia8AAomxAAKJswACibUAAom4AAKJuQACiboAAom7AAKJvAACib4AAonAAAKJwQACicIAAonEAAKJxQACigQAAooGAAKKCAACigoAAooNAAKKDgACig8AAooQAAKKEQACihMAAooVAAKKFgACihcAAooZAAKKGgACilkAAopbAAKKXQACil8AAopiAAKKYwACimQAAoplAAKKZgACimgAAopqAAKKawACimwAAopuAAKKbwACiq4AAoqwAAKKsgACirQAAoq3AAKKuAACirkAAoq6AAKKuwACir0AAoq/AAKKwAACisEAAorDAAKKxAACiwMAAosFAAKLBwACiwkAAosMAAKLDQACiw4AAosPAAKLEAACixIAAosUAAKLFQACixYAAosYAAKLGQACi1gAAotaAAKLXAACi14AAothAAKLYgACi2MAAotkAAKLZQACi2cAAotpAAKLagACi2sAAottAAKLbgACi7kAAovcAAKL/AACjBwAAoweAAKMIAACjCIAAowkAAKMJwACjCgAAowpAAKMLAACjC0AAowvAAKMMAACjDIAAow1AAKMNgACjDcAAow6AAKMOwACjEAAAoxNAAKMUgACjFQAAoxWAAKMWwACjF4AAoxhAAKMYwACjIgAAoysAAKM0wACjPcAAoz6AAKM/AACjP4AAo0AAAKNAgACjQQAAo0FAAKNCAACjRUAAo0mAAKNKAACjSoAAo0sAAKNLgACjTAAAo0yAAKNNAACjTYAAo1HAAKNSgACjU0AAo1QAAKNUwACjVYAAo1ZAAKNXAACjV8AAo1hAAKNoAACjaIAAo2kAAKNpgACjakAAo2qAAKNqwACjawAAo2tAAKNrwACjbEAAo2yAAKNswACjbUAAo22AAKN9QACjfcAAo35AAKN+wACjf4AAo3/AAKOAAACjgEAAo4CAAKOBAACjgYAAo4HAAKOCAACjgoAAo4LAAKOSgACjkwAAo5PAAKOUQACjlQAAo5VAAKOVgACjlcAAo5YAAKOWgACjlwAAo5dAAKOXgACjmAAAo5hAAKObgACjm8AAo5wAAKOcgACjrEAAo6zAAKOtQACjrcAAo66AAKOuwACjrwAAo69AAKOvgACjsAAAo7CAAKOwwACjsQAAo7GAAKOxwACjwYAAo8IAAKPCgACjwwAAo8PAAKPEAACjxEAAo8SAAKPEwACjxUAAo8XAAKPGAACjxkAAo8bAAKPHAACj1sAAo9dAAKPXwACj2EAAo9kAAKPZQACj2YAAo9nAAKPaAACj2oAAo9sAAKPbQACj24AAo9wAAKPcQACj7AAAo+yAAKPtAACj7YAAo+5AAKPugACj7sAAo+8AAKPvQACj78AAo/BAAKPwgACj8MAAo/FAAKPxgACkAUAApAHAAKQCQACkAsAApAOAAKQDwACkBAAApARAAKQEgACkBQAApAWAAKQFwACkBgAApAaAAKQGwACkEAAApBkAAKQiwACkK8AApCyAAKQtAACkLYAApC4AAKQugACkLwAApC9AAKQwAACkM0AApDcAAKQ3gACkOAAApDiAAKQ5AACkOYAApDoAAKQ6gACkPkAApD8AAKQ/wACkQIAApEFAAKRCAACkQsAApEOAAKREAACkU8AApFRAAKRUwACkVUAApFYAAKRWQACkVoAApFbAAKRXAACkV4AApFgAAKRYQACkWIAApFkAAKRZQACkaQAApGmAAKRqAACkaoAApGtAAKRrgACka8AApGwAAKRsQACkbMAApG1AAKRtgACkbcAApG5AAKRugACkfkAApH7AAKR/QACkf8AApICAAKSAwACkgQAApIFAAKSBgACkggAApIKAAKSCwACkgwAApIOAAKSDwACkk4AApJQAAKSUgACklQAApJXAAKSWAACklkAApJaAAKSWwACkl0AApJfAAKSYAACkmEAApJjAAKSZAACkqMAApKlAAKSpwACkqkAApKsAAKSrQACkq4AApKvAAKSsAACkrIAApK0AAKStQACkrYAApK4AAKSuQACkvgAApL6AAKS/AACkv4AApMBAAKTAgACkwMAApMEAAKTBQACkwcAApMJAAKTCgACkwsAApMNAAKTDgACk00AApNPAAKTUQACk1MAApNWAAKTVwACk1gAApNZAAKTWgACk1wAApNeAAKTXwACk2AAApNiAAKTYwACk64AApPRAAKT8QAClBEAApQTAAKUFQAClBcAApQZAAKUHAAClB0AApQeAAKUIQAClCIAApQkAAKUJQAClCcAApQqAAKUKwAClCwAApQvAAKUMAAClDUAApRCAAKURwAClEkAApRLAAKUUAAClFMAApRWAAKUWAAClH0AApShAAKUyAAClOwAApTvAAKU8QAClPMAApT1AAKU9wAClPkAApT6AAKU/QAClQoAApUbAAKVHQAClR8AApUhAAKVIwAClSUAApUnAAKVKQAClSsAApU8AAKVPwAClUIAApVFAAKVSAAClUsAApVOAAKVUQAClVQAApVWAAKVlQAClZcAApWZAAKVmwAClZ4AApWfAAKVoAAClaEAApWiAAKVpAAClaYAApWnAAKVqAAClaoAApWrAAKV6gAClewAApXuAAKV8AAClfMAApX0AAKV9QAClfYAApX3AAKV+QAClfsAApX8AAKV/QAClf8AApYAAAKWPwAClkEAApZEAAKWRgAClkkAApZKAAKWSwAClkwAApZNAAKWTwACllEAApZSAAKWUwACllUAApZWAAKWYwAClmQAApZlAAKWZwAClqYAApaoAAKWqgAClqwAApavAAKWsAAClrEAApayAAKWswAClrUAApa3AAKWuAAClrkAApa7AAKWvAAClvsAApb9AAKW/wAClwEAApcEAAKXBQAClwYAApcHAAKXCAAClwoAApcMAAKXDQAClw4AApcQAAKXEQACl1AAApdSAAKXVAACl1YAApdZAAKXWgACl1sAApdcAAKXXQACl18AApdhAAKXYgACl2MAApdlAAKXZgACl6UAApenAAKXqQACl6sAApeuAAKXrwACl7AAApexAAKXsgACl7QAApe2AAKXtwACl7gAApe6AAKXuwACl/oAApf8AAKX/gACmAAAApgDAAKYBAACmAUAApgGAAKYBwACmAkAApgLAAKYDAACmA0AApgPAAKYEAACmDUAAphZAAKYgAACmKQAApinAAKYqQACmKsAApitAAKYrwACmLEAApiyAAKYtQACmMIAApjRAAKY0wACmNUAApjXAAKY2QACmNsAApjdAAKY3wACmO4AApjxAAKY9AACmPcAApj6AAKY/QACmQAAApkDAAKZBQACmUQAAplGAAKZSAACmUoAAplNAAKZTgACmU8AAplQAAKZUQACmVMAAplVAAKZVgACmVcAAplZAAKZWgACmZkAApmbAAKZnQACmZ8AApmiAAKZowACmaQAApmlAAKZpgACmagAApmqAAKZqwACmawAApmuAAKZrwACme4AApnwAAKZ8gACmfQAApn3AAKZ+AACmfkAApn6AAKZ+wACmf0AApn/AAKaAAACmgEAApoDAAKaBAACmkMAAppFAAKaRwACmkkAAppMAAKaTQACmk4AAppPAAKaUAACmlIAAppUAAKaVQACmlYAAppYAAKaWQACmpgAApqaAAKanAACmp4AApqhAAKaogACmqMAApqkAAKapQACmqcAApqpAAKaqgACmqsAApqtAAKargACmu0AAprvAAKa8QACmvMAApr2AAKa9wACmvgAApr5AAKa+gACmvwAApr+AAKa/wACmwAAApsCAAKbAwACm0IAAptEAAKbRgACm0gAAptLAAKbTAACm00AAptOAAKbTwACm1EAAptTAAKbVAACm1UAAptXAAKbWAACm6MAApvGAAKb5gACnAYAApwIAAKcCgACnAwAApwOAAKcEQACnBIAApwTAAKcFgACnBcAApwZAAKcGgACnBwAApwfAAKcIAACnCEAApwkAAKcJQACnCoAApw3AAKcPAACnD4AApxAAAKcRQACnEgAApxLAAKcTQACnHIAApyWAAKcvQACnOEAApzkAAKc5gACnOgAApzqAAKc7AACnO4AApzvAAKc8gACnP8AAp0QAAKdEgACnRQAAp0WAAKdGAACnRoAAp0cAAKdHgACnSAAAp0xAAKdNAACnTcAAp06AAKdPQACnUAAAp1DAAKdRgACnUkAAp1LAAKdigACnYwAAp2OAAKdkAACnZMAAp2UAAKdlQACnZYAAp2XAAKdmQACnZsAAp2cAAKdnQACnZ8AAp2gAAKd3wACneEAAp3jAAKd5QACnegAAp3pAAKd6gACnesAAp3sAAKd7gACnfAAAp3xAAKd8gACnfQAAp31AAKeNAACnjYAAp45AAKeOwACnj4AAp4/AAKeQAACnkEAAp5CAAKeRAACnkYAAp5HAAKeSAACnkoAAp5LAAKeWAACnlkAAp5aAAKeXAACnpsAAp6dAAKenwACnqEAAp6kAAKepQACnqYAAp6nAAKeqAACnqoAAp6sAAKerQACnq4AAp6wAAKesQACnvAAAp7yAAKe9AACnvYAAp75AAKe+gACnvsAAp78AAKe/QACnv8AAp8BAAKfAgACnwMAAp8FAAKfBgACn0UAAp9HAAKfSQACn0sAAp9OAAKfTwACn1AAAp9RAAKfUgACn1QAAp9WAAKfVwACn1gAAp9aAAKfWwACn5oAAp+cAAKfngACn6AAAp+jAAKfpAACn6UAAp+mAAKfpwACn6kAAp+rAAKfrAACn60AAp+vAAKfsAACn+8AAp/xAAKf8wACn/UAAp/4AAKf+QACn/oAAp/7AAKf/AACn/4AAqAAAAKgAQACoAIAAqAEAAKgBQACoCoAAqBOAAKgdQACoJkAAqCcAAKgngACoKAAAqCiAAKgpAACoKYAAqCnAAKgqgACoLcAAqDGAAKgyAACoMoAAqDMAAKgzgACoNAAAqDSAAKg1AACoOMAAqDmAAKg6QACoOwAAqDvAAKg8gACoPUAAqD4AAKg+gACoTkAAqE7AAKhPQACoT8AAqFCAAKhQwACoUQAAqFFAAKhRgACoUgAAqFKAAKhSwACoUwAAqFOAAKhTwACoY4AAqGQAAKhkgACoZQAAqGXAAKhmAACoZkAAqGaAAKhmwACoZ0AAqGfAAKhoAACoaEAAqGjAAKhpAACoeMAAqHlAAKh5wACoekAAqHsAAKh7QACoe4AAqHvAAKh8AACofIAAqH0AAKh9QACofYAAqH4AAKh+QACojgAAqI6AAKiPAACoj4AAqJBAAKiQgACokMAAqJEAAKiRQACokcAAqJJAAKiSgACoksAAqJNAAKiTgACoo0AAqKPAAKikQACopMAAqKWAAKilwACopgAAqKZAAKimgACopwAAqKeAAKinwACoqAAAqKiAAKiowACouIAAqLkAAKi5gACougAAqLrAAKi7AACou0AAqLuAAKi7wACovEAAqLzAAKi9AACovUAAqL3AAKi+AACozcAAqM5AAKjOwACoz0AAqNAAAKjQQACo0IAAqNDAAKjRAACo0YAAqNIAAKjSQACo0oAAqNMAAKjTQACo5gAAqO7AAKj2wACo/sAAqP9AAKj/wACpAEAAqQDAAKkBgACpAcAAqQIAAKkCwACpAwAAqQOAAKkDwACpBEAAqQUAAKkFQACpBYAAqQZAAKkGgACpCMAAqQwAAKkNQACpDcAAqQ5AAKkPgACpEEAAqREAAKkRgACpGsAAqSPAAKktgACpNoAAqTdAAKk3wACpOEAAqTjAAKk5QACpOcAAqToAAKk6wACpPgAAqUJAAKlCwACpQ0AAqUPAAKlEQACpRMAAqUVAAKlFwACpRkAAqUqAAKlLQACpTAAAqUzAAKlNgACpTkAAqU8AAKlPwACpUIAAqVEAAKlgwACpYUAAqWHAAKliQACpYwAAqWNAAKljgACpY8AAqWQAAKlkgACpZQAAqWVAAKllgACpZgAAqWZAAKl2AACpdoAAqXcAAKl3gACpeEAAqXiAAKl4wACpeQAAqXlAAKl5wACpekAAqXqAAKl6wACpe0AAqXuAAKmLQACpi8AAqYyAAKmNAACpjcAAqY4AAKmOQACpjoAAqY7AAKmPQACpj8AAqZAAAKmQQACpkMAAqZEAAKmUQACplIAAqZTAAKmVQACppQAAqaWAAKmmAACppoAAqadAAKmngACpp8AAqagAAKmoQACpqMAAqalAAKmpgACpqcAAqapAAKmqgACpukAAqbrAAKm7QACpu8AAqbyAAKm8wACpvQAAqb1AAKm9gACpvgAAqb6AAKm+wACpvwAAqb+AAKm/wACpz4AAqdAAAKnQgACp0QAAqdHAAKnSAACp0kAAqdKAAKnSwACp00AAqdPAAKnUAACp1EAAqdTAAKnVAACp5MAAqeVAAKnlwACp5kAAqecAAKnnQACp54AAqefAAKnoAACp6IAAqekAAKnpQACp6YAAqeoAAKnqQACp+gAAqfqAAKn7AACp+4AAqfxAAKn8gACp/MAAqf0AAKn9QACp/cAAqf5AAKn+gACp/sAAqf9AAKn/gACqCMAAqhHAAKobgACqJIAAqiVAAKolwACqJkAAqibAAKonQACqJ8AAqigAAKoowACqLAAAqi/AAKowQACqMMAAqjFAAKoxwACqMkAAqjLAAKozQACqNwAAqjfAAKo4gACqOUAAqjoAAKo6wACqO4AAqjxAAKo8wACqTIAAqk0AAKpNgACqTgAAqk7AAKpPAACqT0AAqk+AAKpPwACqUEAAqlDAAKpRAACqUUAAqlHAAKpSAACqYcAAqmJAAKpiwACqY0AAqmQAAKpkQACqZIAAqmTAAKplAACqZYAAqmYAAKpmQACqZoAAqmcAAKpnQACqdwAAqneAAKp4AACqeIAAqnlAAKp5gACqecAAqnoAAKp6QACqesAAqntAAKp7gACqe8AAqnxAAKp8gACqjEAAqozAAKqNQACqjcAAqo6AAKqOwACqjwAAqo9AAKqPgACqkAAAqpCAAKqQwACqkQAAqpGAAKqRwACqoYAAqqIAAKqigACqowAAqqPAAKqkAACqpEAAqqSAAKqkwACqpUAAqqXAAKqmAACqpkAAqqbAAKqnAACqtsAAqrdAAKq3wACquEAAqrkAAKq5QACquYAAqrnAAKq6AACquoAAqrsAAKq7QACqu4AAqrwAAKq8QACqzAAAqsyAAKrNAACqzYAAqs5AAKrOgACqzsAAqs8AAKrPQACqz8AAqtBAAKrQgACq0MAAqtFAAKrRgACq5EAAqu0AAKr1AACq/QAAqv2AAKr+AACq/oAAqv8AAKr/wACrAAAAqwBAAKsBAACrAUAAqwHAAKsCAACrAoAAqwNAAKsDgACrA8AAqwSAAKsEwACrBgAAqwlAAKsKgACrCwAAqwuAAKsMwACrDYAAqw5AAKsOwACrGAAAqyEAAKsqwACrM8AAqzSAAKs1AACrNYAAqzYAAKs2gACrNwAAqzdAAKs4AACrO0AAqz+AAKtAAACrQIAAq0EAAKtBgACrQgAAq0KAAKtDAACrQ4AAq0fAAKtIgACrSUAAq0oAAKtKwACrS4AAq0xAAKtNAACrTcAAq05AAKteAACrXoAAq18AAKtfgACrYEAAq2CAAKtgwACrYQAAq2FAAKthwACrYkAAq2KAAKtiwACrY0AAq2OAAKtzQACrc8AAq3RAAKt0wACrdYAAq3XAAKt2AACrdkAAq3aAAKt3AACrd4AAq3fAAKt4AACreIAAq3jAAKuIgACriQAAq4nAAKuKQACriwAAq4tAAKuLgACri8AAq4wAAKuMgACrjQAAq41AAKuNgACrjgAAq45AAKuRgACrkcAAq5IAAKuSgACrokAAq6LAAKujQACro8AAq6SAAKukwACrpQAAq6VAAKulgACrpgAAq6aAAKumwACrpwAAq6eAAKunwACrt4AAq7gAAKu4gACruQAAq7nAAKu6AACrukAAq7qAAKu6wACru0AAq7vAAKu8AACrvEAAq7zAAKu9AACrzMAAq81AAKvNwACrzkAAq88AAKvPQACrz4AAq8/AAKvQAACr0IAAq9EAAKvRQACr0YAAq9IAAKvSQACr4gAAq+KAAKvjAACr44AAq+RAAKvkgACr5MAAq+UAAKvlQACr5cAAq+ZAAKvmgACr5sAAq+dAAKvngACr90AAq/fAAKv4QACr+MAAq/mAAKv5wACr+gAAq/pAAKv6gACr+wAAq/uAAKv7wACr/AAAq/yAAKv8wACsBgAArA8AAKwYwACsIcAArCKAAKwjAACsI4AArCQAAKwkgACsJQAArCVAAKwmAACsKUAArC0AAKwtgACsLgAArC6AAKwvAACsL4AArDAAAKwwgACsNEAArDUAAKw1wACsNoAArDdAAKw4AACsOMAArDmAAKw6AACsScAArEpAAKxKwACsS0AArEwAAKxMQACsTIAArEzAAKxNAACsTYAArE4AAKxOQACsToAArE8AAKxPQACsXwAArF+AAKxgAACsYIAArGFAAKxhgACsYcAArGIAAKxiQACsYsAArGNAAKxjgACsY8AArGRAAKxkgACsdEAArHTAAKx1QACsdcAArHaAAKx2wACsdwAArHdAAKx3gACseAAArHiAAKx4wACseQAArHmAAKx5wACsiYAArIoAAKyKwACsi0AArIwAAKyMQACsjIAArIzAAKyNAACsjYAArI4AAKyOQACsjoAArI8AAKyPQACsnwAArJ+AAKygAACsoIAArKFAAKyhgACsocAArKIAAKyiQACsosAArKNAAKyjgACso8AArKRAAKykgACstEAArLTAAKy1QACstcAArLaAAKy2wACstwAArLdAAKy3gACsuAAArLiAAKy4wACsuQAArLmAAKy5wACsyYAArMoAAKzKgACsywAArMvAAKzMAACszEAArMyAAKzMwACszUAArM3AAKzOAACszkAArM7AAKzPAACs4cAArOqAAKzygACs+oAArPsAAKz7gACs/AAArPyAAKz9QACs/YAArP3AAKz+gACs/sAArP9AAKz/gACtAAAArQDAAK0BAACtAUAArQIAAK0CQACtA4AArQbAAK0IAACtCIAArQkAAK0KQACtCwAArQvAAK0MQACtFYAArR6AAK0oQACtMUAArTIAAK0ygACtMwAArTOAAK00AACtNIAArTTAAK01gACtOMAArT0AAK09gACtPgAArT6AAK0/AACtP4AArUAAAK1AgACtQQAArUVAAK1GAACtRsAArUeAAK1IQACtSQAArUnAAK1KgACtS0AArUvAAK1bgACtXAAArVyAAK1dAACtXcAArV4AAK1eQACtXoAArV7AAK1fQACtX8AArWAAAK1gQACtYMAArWEAAK1wwACtcUAArXHAAK1yQACtcwAArXNAAK1zgACtc8AArXQAAK10gACtdQAArXVAAK11gACtdgAArXZAAK2GAACthoAArYdAAK2HwACtiIAArYjAAK2JAACtiUAArYmAAK2KAACtioAArYrAAK2LAACti4AArYvAAK2PAACtj0AArY+AAK2QAACtn8AAraBAAK2gwACtoUAAraIAAK2iQACtooAAraLAAK2jAACto4AAraQAAK2kQACtpIAAraUAAK2lQACttQAArbWAAK22AACttoAArbdAAK23gACtt8AArbgAAK24QACtuMAArblAAK25gACtucAArbpAAK26gACtykAArcrAAK3LQACty8AArcyAAK3MwACtzQAArc1AAK3NgACtzgAArc6AAK3OwACtzwAArc+AAK3PwACt34AAreAAAK3ggACt4QAAreHAAK3iAACt4kAAreKAAK3iwACt40AArePAAK3kAACt5EAAreTAAK3lAACt9MAArfVAAK31wACt9kAArfcAAK33QACt94AArffAAK34AACt+IAArfkAAK35QACt+YAArfoAAK36QACuA4AArgyAAK4WQACuH0AAriAAAK4ggACuIQAAriGAAK4iAACuIoAAriLAAK4jgACuJsAAriqAAK4rAACuK4AAriwAAK4sgACuLQAAri2AAK4uAACuMcAArjKAAK4zQACuNAAArjTAAK41gACuNkAArjcAAK43gACuR0AArkfAAK5IgACuSQAArknAAK5KAACuSkAArkqAAK5KwACuS0AArkvAAK5MAACuTEAArkzAAK5NAACuXMAArl1AAK5dwACuXkAArl8AAK5fQACuX4AArl/AAK5gAACuYIAArmEAAK5hQACuYYAArmIAAK5iQACucgAArnKAAK5zAACuc4AArnRAAK50gACudMAArnUAAK51QACudcAArnZAAK52gACudsAArndAAK53gACuh0AArofAAK6IgACuiQAAronAAK6KAACuikAAroqAAK6KwACui0AArovAAK6MAACujEAArozAAK6NAACunMAArp1AAK6dwACunkAArp8AAK6fQACun4AArp/AAK6gAACuoIAArqEAAK6hQACuoYAArqIAAK6iQACusgAArrKAAK6zAACus4AArrRAAK60gACutMAArrUAAK61QACutcAArrZAAK62gACutsAArrdAAK63gACux0AArsfAAK7IQACuyMAArsmAAK7JwACuygAArspAAK7KgACuywAArsuAAK7LwACuzAAArsyAAK7MwACu34AAruhAAK7wQACu+EAArvjAAK75QACu+cAArvpAAK77AACu+0AArvuAAK78QACu/IAArv0AAK79QACu/cAArv6AAK7+wACu/wAArv/AAK8AAACvAUAArwSAAK8FwACvBkAArwbAAK8IAACvCMAArwmAAK8KAACvE0AArxxAAK8mAACvLwAAry/AAK8wQACvMMAArzFAAK8xwACvMkAArzKAAK8zQACvNoAArzrAAK87QACvO8AArzxAAK88wACvPUAArz3AAK8+QACvPsAAr0MAAK9DwACvRIAAr0VAAK9GAACvRsAAr0eAAK9IQACvSQAAr0mAAK9ZQACvWcAAr1pAAK9awACvW4AAr1vAAK9cAACvXEAAr1yAAK9dAACvXYAAr13AAK9eAACvXoAAr17AAK9ugACvbwAAr2+AAK9wAACvcMAAr3EAAK9xQACvcYAAr3HAAK9yQACvcsAAr3MAAK9zQACvc8AAr3QAAK+DwACvhEAAr4UAAK+FgACvhkAAr4aAAK+GwACvhwAAr4dAAK+HwACviEAAr4iAAK+IwACviUAAr4mAAK+MwACvjQAAr41AAK+NwACvnYAAr54AAK+egACvnwAAr5/AAK+gAACvoEAAr6CAAK+gwACvoUAAr6HAAK+iAACvokAAr6LAAK+jAACvssAAr7NAAK+zwACvtEAAr7UAAK+1QACvtYAAr7XAAK+2AACvtoAAr7cAAK+3QACvt4AAr7gAAK+4QACvyAAAr8iAAK/JAACvyYAAr8pAAK/KgACvysAAr8sAAK/LQACvy8AAr8xAAK/MgACvzMAAr81AAK/NgACv3UAAr93AAK/eQACv3sAAr9+AAK/fwACv4AAAr+BAAK/ggACv4QAAr+GAAK/hwACv4gAAr+KAAK/iwACv8oAAr/MAAK/zgACv9AAAr/TAAK/1AACv9UAAr/WAAK/1wACv9kAAr/bAAK/3AACv90AAr/fAAK/4AACwAUAAsApAALAUAACwHQAAsB3AALAeQACwHsAAsB9AALAfwACwIEAAsCCAALAhQACwJIAAsChAALAowACwKUAAsCnAALAqQACwKsAAsCtAALArwACwL4AAsDBAALAxAACwMcAAsDKAALAzQACwNAAAsDTAALA1QACwRQAAsEWAALBGAACwRoAAsEdAALBHgACwR8AAsEgAALBIQACwSMAAsElAALBJgACwScAAsEpAALBKgACwWkAAsFrAALBbQACwW8AAsFyAALBcwACwXQAAsF1AALBdgACwXgAAsF6AALBewACwXwAAsF+AALBfwACwb4AAsHAAALBwgACwcQAAsHHAALByAACwckAAsHKAALBywACwc0AAsHPAALB0AACwdEAAsHTAALB1AACwhMAAsIVAALCGAACwhoAAsIdAALCHgACwh8AAsIgAALCIQACwiMAAsIlAALCJgACwicAAsIpAALCKgACwmkAAsJrAALCbQACwm8AAsJyAALCcwACwnQAAsJ1AALCdgACwngAAsJ6AALCewACwnwAAsJ+AALCfwACwr4AAsLAAALCwwACwsUAAsLIAALCyQACwsoAAsLLAALCzAACws4AAsLQAALC0QACwtIAAsLUAALC1QACwvwAAsM7AALDPQACwz8AAsNBAALDRAACw0UAAsNGAALDRwACw0gAAsNKAALDTAACw00AAsNOAALDUAACw1EAAsOcAALDvwACw98AAsP/AALEAQACxAMAAsQFAALEBwACxAoAAsQLAALEDAACxA8AAsQQAALEEgACxBMAAsQVAALEGAACxBkAAsQaAALEHQACxB4AAsQnAALENAACxDkAAsQ7AALEPQACxEIAAsRFAALESAACxEoAAsRvAALEkwACxLoAAsTeAALE4QACxOMAAsTlAALE5wACxOkAAsTrAALE7AACxO8AAsT8AALFDQACxQ8AAsURAALFEwACxRUAAsUXAALFGQACxRsAAsUdAALFLgACxTEAAsU0AALFNwACxToAAsU9AALFQAACxUMAAsVGAALFSAACxYcAAsWJAALFiwACxY0AAsWQAALFkQACxZIAAsWTAALFlAACxZYAAsWYAALFmQACxZoAAsWcAALFnQACxdwAAsXeAALF4AACxeIAAsXlAALF5gACxecAAsXoAALF6QACxesAAsXtAALF7gACxe8AAsXxAALF8gACxjEAAsYzAALGNgACxjgAAsY7AALGPAACxj0AAsY+AALGPwACxkEAAsZDAALGRAACxkUAAsZHAALGSAACxlUAAsZWAALGVwACxlkAAsaYAALGmgACxpwAAsaeAALGoQACxqIAAsajAALGpAACxqUAAsanAALGqQACxqoAAsarAALGrQACxq4AAsbtAALG7wACxvEAAsbzAALG9gACxvcAAsb4AALG+QACxvoAAsb8AALG/gACxv8AAscAAALHAgACxwMAAsdCAALHRAACx0YAAsdIAALHSwACx0wAAsdNAALHTgACx08AAsdRAALHUwACx1QAAsdVAALHVwACx1gAAseXAALHmQACx5sAAsedAALHoAACx6EAAseiAALHowACx6QAAsemAALHqAACx6kAAseqAALHrAACx60AAsfsAALH7gACx/AAAsfyAALH9QACx/YAAsf3AALH+AACx/kAAsf7AALH/QACx/4AAsf/AALIAQACyAIAAsgnAALISwACyHIAAsiWAALImQACyJsAAsidAALInwACyKEAAsijAALIpAACyKcAAsi0AALIwwACyMUAAsjHAALIyQACyMsAAsjNAALIzwACyNEAAsjgAALI4wACyOYAAsjpAALI7AACyO8AAsjyAALI9QACyPcAAsk2AALJOAACyToAAsk8AALJPwACyUAAAslBAALJQgACyUMAAslFAALJRwACyUgAAslJAALJSwACyUwAAsmLAALJjQACyY8AAsmRAALJlAACyZUAAsmWAALJlwACyZgAAsmaAALJnAACyZ0AAsmeAALJoAACyaEAAsngAALJ4gACyeQAAsnmAALJ6QACyeoAAsnrAALJ7AACye0AAsnvAALJ8QACyfIAAsnzAALJ9QACyfYAAso1AALKNwACyjkAAso7AALKPgACyj8AAspAAALKQQACykIAAspEAALKRgACykcAAspIAALKSgACyksAAsqKAALKjAACyo4AAsqQAALKkwACypQAAsqVAALKlgACypcAAsqZAALKmwACypwAAsqdAALKnwACyqAAAsrfAALK4QACyuMAAsrlAALK6AACyukAAsrqAALK6wACyuwAAsruAALK8AACyvEAAsryAALK9AACyvUAAss0AALLNgACyzgAAss6AALLPQACyz4AAss/AALLQAACy0EAAstDAALLRQACy0YAAstHAALLSQACy0oAAsuVAALLuAACy9gAAsv4AALL+gACy/wAAsv+AALMAAACzAMAAswEAALMBQACzAgAAswJAALMCwACzAwAAswOAALMEAACzBEAAswSAALMFQACzBYAAswbAALMKAACzC0AAswvAALMMQACzDYAAsw5AALMPAACzD4AAsxjAALMhwACzK4AAszSAALM1QACzNcAAszZAALM2wACzN0AAszfAALM4AACzOMAAszwAALNAQACzQMAAs0FAALNBwACzQkAAs0LAALNDQACzQ8AAs0RAALNIgACzSUAAs0oAALNKwACzS4AAs0xAALNNAACzTcAAs06AALNPAACzXsAAs19AALNfwACzYEAAs2EAALNhQACzYYAAs2HAALNiAACzYoAAs2MAALNjQACzY4AAs2QAALNkQACzdAAAs3SAALN1AACzdYAAs3ZAALN2gACzdsAAs3cAALN3QACzd8AAs3hAALN4gACzeMAAs3lAALN5gACziUAAs4nAALOKgACziwAAs4vAALOMAACzjEAAs4yAALOMwACzjUAAs43AALOOAACzjkAAs47AALOPAACzkkAAs5KAALOSwACzk0AAs6MAALOjgACzpAAAs6SAALOlQACzpYAAs6XAALOmAACzpkAAs6bAALOnQACzp4AAs6fAALOoQACzqIAAs7hAALO4wACzuUAAs7nAALO6gACzusAAs7sAALO7QACzu4AAs7wAALO8gACzvMAAs70AALO9gACzvcAAs82AALPOAACzzoAAs88AALPPwACz0AAAs9BAALPQgACz0MAAs9FAALPRwACz0gAAs9JAALPSwACz0wAAs+LAALPjQACz48AAs+RAALPlAACz5UAAs+WAALPlwACz5gAAs+aAALPnAACz50AAs+eAALPoAACz6EAAs/gAALP4gACz+QAAs/mAALP6QACz+oAAs/rAALP7AACz+0AAs/vAALP8QACz/IAAs/zAALP9QACz/YAAtAbAALQPwAC0GYAAtCKAALQjQAC0I8AAtCRAALQkwAC0JUAAtCXAALQmAAC0JsAAtCoAALQtwAC0LkAAtC7AALQvQAC0L8AAtDBAALQwwAC0MUAAtDUAALQ1wAC0NoAAtDdAALQ4AAC0OMAAtDmAALQ6QAC0OsAAtEqAALRLAAC0S4AAtEwAALRMwAC0TQAAtE1AALRNgAC0TcAAtE5AALROwAC0TwAAtE9AALRPwAC0UAAAtF/AALRgQAC0YMAAtGFAALRiAAC0YkAAtGKAALRiwAC0YwAAtGOAALRkAAC0ZEAAtGSAALRlAAC0ZUAAtHUAALR1gAC0dgAAtHaAALR3QAC0d4AAtHfAALR4AAC0eEAAtHjAALR5QAC0eYAAtHnAALR6QAC0eoAAtIpAALSKwAC0i4AAtIwAALSMwAC0jQAAtI1AALSNgAC0jcAAtI5AALSOwAC0jwAAtI9AALSPwAC0kAAAtJ/AALSgQAC0oMAAtKFAALSiAAC0okAAtKKAALSiwAC0owAAtKOAALSkAAC0pEAAtKSAALSlAAC0pUAAtLUAALS1gAC0tgAAtLaAALS3QAC0t4AAtLfAALS4AAC0uEAAtLjAALS5QAC0uYAAtLnAALS6QAC0uoAAtMpAALTKwAC0y0AAtMvAALTMgAC0zMAAtM0AALTNQAC0zYAAtM4AALTOgAC0zsAAtM8AALTPgAC0z8AAtOKAALTrQAC080AAtPtAALT7wAC0/EAAtPzAALT9QAC0/gAAtP5AALT+gAC0/0AAtP+AALUAAAC1AEAAtQDAALUBgAC1AcAAtQIAALUCwAC1AwAAtQRAALUHgAC1CMAAtQlAALUJwAC1CwAAtQvAALUMgAC1DQAAtRZAALUfQAC1KQAAtTIAALUywAC1M0AAtTPAALU0QAC1NMAAtTVAALU1gAC1NkAAtTmAALU9wAC1PkAAtT7AALU/QAC1P8AAtUBAALVAwAC1QUAAtUHAALVGAAC1RsAAtUeAALVIQAC1SQAAtUnAALVKgAC1S0AAtUwAALVMgAC1XEAAtVzAALVdQAC1XcAAtV6AALVewAC1XwAAtV9AALVfgAC1YAAAtWCAALVgwAC1YQAAtWGAALVhwAC1cYAAtXIAALVygAC1cwAAtXPAALV0AAC1dEAAtXSAALV0wAC1dUAAtXXAALV2AAC1dkAAtXbAALV3AAC1hsAAtYdAALWIAAC1iIAAtYlAALWJgAC1icAAtYoAALWKQAC1isAAtYtAALWLgAC1i8AAtYxAALWMgAC1j8AAtZAAALWQQAC1kMAAtaCAALWhAAC1oYAAtaIAALWiwAC1owAAtaNAALWjgAC1o8AAtaRAALWkwAC1pQAAtaVAALWlwAC1pgAAtbXAALW2QAC1tsAAtbdAALW4AAC1uEAAtbiAALW4wAC1uQAAtbmAALW6AAC1ukAAtbqAALW7AAC1u0AAtcsAALXLgAC1zAAAtcyAALXNQAC1zYAAtc3AALXOAAC1zkAAtc7AALXPQAC1z4AAtc/AALXQQAC10IAAteBAALXgwAC14UAAteHAALXigAC14sAAteMAALXjQAC144AAteQAALXkgAC15MAAteUAALXlgAC15cAAtfWAALX2AAC19oAAtfcAALX3wAC1+AAAtfhAALX4gAC1+MAAtflAALX5wAC1+gAAtfpAALX6wAC1+wAAtgRAALYNQAC2FwAAtiAAALYgwAC2IUAAtiHAALYiQAC2IsAAtiNAALYjgAC2JEAAtieAALYrQAC2K8AAtixAALYswAC2LUAAti3AALYuQAC2LsAAtjKAALYzQAC2NAAAtjTAALY1gAC2NkAAtjcAALY3wAC2OEAAtkgAALZIgAC2SQAAtkmAALZKQAC2SoAAtkrAALZLAAC2S0AAtkvAALZMQAC2TIAAtkzAALZNQAC2TYAAtl1AALZdwAC2XkAAtl7AALZfgAC2X8AAtmAAALZgQAC2YIAAtmEAALZhgAC2YcAAtmIAALZigAC2YsAAtnKAALZzAAC2c4AAtnQAALZ0wAC2dQAAtnVAALZ1gAC2dcAAtnZAALZ2wAC2dwAAtndAALZ3wAC2eAAAtofAALaIQAC2iMAAtolAALaKAAC2ikAAtoqAALaKwAC2iwAAtouAALaMAAC2jEAAtoyAALaNAAC2jUAAtp0AALadgAC2ngAAtp6AALafQAC2n4AAtp/AALagAAC2oEAAtqDAALahQAC2oYAAtqHAALaiQAC2ooAAtrJAALaywAC2s0AAtrPAALa0gAC2tMAAtrUAALa1QAC2tYAAtrYAALa2gAC2tsAAtrcAALa3gAC2t8AAtseAALbIAAC2yIAAtskAALbJwAC2ygAAtspAALbKgAC2ysAAtstAALbLwAC2zAAAtsxAALbMwAC2zQAAtt/AALbogAC28IAAtviAALb5AAC2+YAAtvoAALb6gAC2+0AAtvuAALb7wAC2/IAAtvzAALb9QAC2/YAAtv4AALb+wAC2/wAAtv9AALcAAAC3AEAAtwGAALcEwAC3BgAAtwaAALcHAAC3CEAAtwkAALcJwAC3CkAAtxOAALccgAC3JkAAty9AALcwAAC3MIAAtzEAALcxgAC3MgAAtzKAALcywAC3M4AAtzbAALc7AAC3O4AAtzwAALc8gAC3PQAAtz2AALc+AAC3PoAAtz8AALdDQAC3RAAAt0TAALdFgAC3RkAAt0cAALdHwAC3SIAAt0lAALdJwAC3WYAAt1oAALdagAC3WwAAt1vAALdcAAC3XEAAt1yAALdcwAC3XUAAt13AALdeAAC3XkAAt17AALdfAAC3bsAAt29AALdvwAC3cEAAt3EAALdxQAC3cYAAt3HAALdyAAC3coAAt3MAALdzQAC3c4AAt3QAALd0QAC3hAAAt4SAALeFQAC3hcAAt4aAALeGwAC3hwAAt4dAALeHgAC3iAAAt4iAALeIwAC3iQAAt4mAALeJwAC3jQAAt41AALeNgAC3jgAAt53AALeeQAC3nsAAt59AALegAAC3oEAAt6CAALegwAC3oQAAt6GAALeiAAC3okAAt6KAALejAAC3o0AAt7MAALezgAC3tAAAt7SAALe1QAC3tYAAt7XAALe2AAC3tkAAt7bAALe3QAC3t4AAt7fAALe4QAC3uIAAt8hAALfIwAC3yUAAt8nAALfKgAC3ysAAt8sAALfLQAC3y4AAt8wAALfMgAC3zMAAt80AALfNgAC3zcAAt92AALfeAAC33oAAt98AALffwAC34AAAt+BAALfggAC34MAAt+FAALfhwAC34gAAt+JAALfiwAC34wAAt/LAALfzQAC388AAt/RAALf1AAC39UAAt/WAALf1wAC39gAAt/aAALf3AAC390AAt/eAALf4AAC3+EAAuAGAALgKgAC4FEAAuB1AALgeAAC4HoAAuB8AALgfgAC4IAAAuCCAALggwAC4IYAAuCTAALgogAC4KQAAuCmAALgqAAC4KoAAuCsAALgrgAC4LAAAuC/AALgwgAC4MUAAuDIAALgywAC4M4AAuDRAALg1AAC4NYAAuEVAALhFwAC4RkAAuEbAALhHgAC4R8AAuEgAALhIQAC4SIAAuEkAALhJgAC4ScAAuEoAALhKgAC4SsAAuFqAALhbAAC4W4AAuFwAALhcwAC4XQAAuF1AALhdgAC4XcAAuF5AALhewAC4XwAAuF9AALhfwAC4YAAAuG/AALhwQAC4cMAAuHFAALhyAAC4ckAAuHKAALhywAC4cwAAuHOAALh0AAC4dEAAuHSAALh1AAC4dUAAuIUAALiFgAC4hkAAuIbAALiHgAC4h8AAuIgAALiIQAC4iIAAuIkAALiJgAC4icAAuIoAALiKgAC4isAAuJqAALibAAC4m4AAuJwAALicwAC4nQAAuJ1AALidgAC4ncAAuJ5AALiewAC4nwAAuJ9AALifwAC4oAAAuK/AALiwQAC4sMAAuLFAALiyAAC4skAAuLKAALiywAC4swAAuLOAALi0AAC4tEAAuLSAALi1AAC4tUAAuMUAALjFgAC4xgAAuMaAALjHQAC4x4AAuMfAALjIAAC4yEAAuMjAALjJQAC4yYAAuMnAALjKQAC4yoAAuMzAALjNAAC4zYAAuN1AALjdwAC43kAAuN7AALjfgAC438AAuOAAALjgQAC44IAAuOEAALjhwAC44gAAuOJAALjiwAC44wAAuPLAALjzQAC488AAuPRAALj1AAC49UAAuPWAALj1wAC49gAAuPaAALj3QAC494AAuPfAALj4QAC4+IAAuQhAALkIwAC5CYAAuQoAALkKwAC5CwAAuQtAALkLgAC5C8AAuQxAALkNAAC5DUAAuQ2AALkOAAC5DkAAuSEAALkpwAC5McAAuTnAALk6QAC5OsAAuTtAALk7wAC5PEAAuTyAALk8wAC5PYAAuT3AALk+QAC5PoAAuT8AALk/wAC5QAAAuUBAALlBAAC5QUAAuUKAALlFwAC5RwAAuUeAALlIAAC5SUAAuUoAALlKwAC5S0AAuVSAALldgAC5Z0AAuXBAALlxAAC5cYAAuXIAALlygAC5cwAAuXOAALlzwAC5dIAAuXfAALl8AAC5fIAAuX0AALl9gAC5fgAAuX6AALl/AAC5f4AAuYAAALmEQAC5hQAAuYXAALmGgAC5h0AAuYgAALmIwAC5iYAAuYpAALmKwAC5moAAuZsAALmbgAC5nAAAuZzAALmdAAC5nUAAuZ2AALmdwAC5nkAAuZ7AALmfAAC5n0AAuZ/AALmgAAC5r8AAubBAALmwwAC5sUAAubIAALmyQAC5soAAubLAALmzAAC5s4AAubQAALm0QAC5tIAAubUAALm1QAC5xQAAucWAALnGQAC5xsAAuceAALnHwAC5yAAAuchAALnIgAC5yQAAucmAALnJwAC5ygAAucqAALnKwAC5zgAAuc5AALnOgAC5zwAAud7AALnfQAC538AAueBAALnhAAC54UAAueGAALnhwAC54gAAueKAALnjAAC540AAueOAALnkAAC55EAAufQAALn0gAC59QAAufWAALn2QAC59oAAufbAALn3AAC590AAuffAALn4QAC5+IAAufjAALn5QAC5+YAAuglAALoJwAC6CkAAugrAALoLgAC6C8AAugwAALoMQAC6DIAAug0AALoNgAC6DcAAug4AALoOgAC6DsAAuh6AALofAAC6H4AAuiAAALogwAC6IQAAuiFAALohgAC6IcAAuiJAALoiwAC6IwAAuiNAALojwAC6JAAAujPAALo0QAC6NMAAujVAALo2AAC6NkAAujaAALo2wAC6NwAAujeAALo4AAC6OEAAujiAALo5AAC6OUAAukKAALpLgAC6VUAAul5AALpfAAC6X4AAumAAALpggAC6YQAAumGAALphwAC6YoAAumXAALppgAC6agAAumqAALprAAC6a4AAumwAALpsgAC6bQAAunDAALpxgAC6ckAAunMAALpzwAC6dIAAunVAALp2AAC6doAAuoZAALqGwAC6h4AAuogAALqIwAC6iQAAuolAALqJgAC6icAAuopAALqKwAC6iwAAuotAALqLwAC6jAAAupvAALqcQAC6nMAAup1AALqeAAC6nkAAup6AALqewAC6nwAAup+AALqgAAC6oEAAuqCAALqhAAC6oUAAurEAALqxgAC6sgAAurKAALqzQAC6s4AAurPAALq0AAC6tEAAurTAALq1QAC6tYAAurXAALq2QAC6toAAusZAALrGwAC6x4AAusgAALrIwAC6yQAAuslAALrJgAC6ycAAuspAALrKwAC6ywAAustAALrLwAC6zAAAutvAALrcQAC63MAAut1AALreAAC63kAAut6AALrewAC63wAAut+AALrgAAC64EAAuuCAALrhAAC64UAAuvEAALrxgAC68gAAuvKAALrzQAC684AAuvPAALr0AAC69EAAuvTAALr1QAC69YAAuvXAALr2QAC69oAAuwZAALsGwAC7B0AAuwfAALsIgAC7CMAAuwkAALsJQAC7CYAAuwoAALsKgAC7CsAAuwsAALsLgAC7C8AAux6AALsnQAC7L0AAuzdAALs3wAC7OEAAuzjAALs5QAC7OcAAuzoAALs6QAC7OwAAuztAALs7wAC7PAAAuzyAALs9QAC7PYAAuz3AALs+gAC7PsAAu0AAALtDQAC7RIAAu0UAALtFgAC7RsAAu0eAALtIQAC7SMAAu1IAALtbAAC7ZMAAu23AALtugAC7bwAAu2+AALtwAAC7cIAAu3EAALtxQAC7cgAAu3VAALt5gAC7egAAu3qAALt7AAC7e4AAu3wAALt8gAC7fQAAu32AALuBwAC7goAAu4NAALuEAAC7hMAAu4WAALuGQAC7hw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AAwQNAAMEDwADBBAAAwQZAAMEGgADBBwAAwRfAAMEgwADBKcAAwTKAAME8QADBREAAwU4AAMFXwADBX8AAwWjAAMFxwADBckAAwXMAAMFzgADBdAAAwXSAAMF1QADBdcAAwXZAAMF2wADBd0AAwXfAAMF4QADBeQAAwXnAAMF6AADBe0AAwX6AAMF/QADBf8AAwYCAAMGBQADBgcAAwYsAAMGUAADBncAAwabAAMGngADBqAAAwaiAAMGpAADBqYAAwaoAAMGqQADBqwAAwa5AAMGzAADBs4AAwbQAAMG0gADBtQAAwbWAAMG2AADBtoAAwbcAAMG3gADBvEAAwb0AAMG9wADBvoAAwb9AAMHAAADBwMAAwcGAAMHCQADBwwAAwcOAAMHTQADB08AAwdSAAMHVAADB1cAAwdYAAMHWQADB1oAAwdbAAMHXQADB18AAwdgAAMHYQADB2MAAwdkAAMHbQADB24AAwdwAAMHrwADB7EAAwezAAMHtQADB7gAAwe5AAMHugADB7sAAwe8AAMHvgADB8AAAwfBAAMHwgADB8QAAwfFAAMIBAADCAYAAwgJAAMICwADCA4AAwgPAAMIEAADCBEAAwgSAAMIFAADCBYAAwgXAAMIGAADCBoAAwgbAAMIJAADCCUAAwgnAAMIZgADCGgAAwhqAAMIbAADCG8AAwhwAAMIcQADCHIAAwhzAAMIdQADCHcAAwh4AAMIeQADCHsAAwh8AAMIuwADCL0AAwjAAAMIwgADCMUAAwjGAAMIxwADCMgAAwjJAAMIywADCM0AAwjOAAMIzwADCNEAAwjSAAMI2wADCNwAAwjeAAMJHQADCR8AAwkhAAMJIwADCSYAAwknAAMJKAADCSkAAwkqAAMJLAADCS4AAwkvAAMJMAADCTIAAwkzAAMJcgADCXQAAwl3AAMJeQADCXwAAwl9AAMJfgADCX8AAwmAAAMJggADCYQAAwmFAAMJhgADCYgAAwmJAAMJlgADCZcAAwmYAAMJmgADCdkAAwnbAAMJ3QADCd8AAwniAAMJ4wADCeQAAwnlAAMJ5gADCegAAwnqAAMJ6wADCewAAwnuAAMJ7wADCi4AAwowAAMKMgADCjQAAwo3AAMKOAADCjkAAwo6AAMKOwADCj0AAwo/AAMKQAADCkEAAwpDAAMKRAADClEAAwpiAAMKZQADCmgAAwprAAMKbgADCnEAAwp0AAMKdwADCnkAAwqKAAMKjQADCpAAAwqTAAMKlgADCpkAAwqcAAMKnwADCqIAAwqkAAMKqwADCrIAAwrBAAMKzAADCtgAAwsjAAMLRgADC2YAAwuGAAMLiAADC4oAAwuMAAMLjgADC5EAAwuSAAMLkwADC5YAAwuXAAMLmQADC5oAAwucAAMLnwADC6AAAwuhAAMLpAADC6UAAwuqAAMLtwADC7wAAwu+AAMLwAADC8UAAwvIAAMLywADC80AAwvyAAMMFgADDD0AAwxhAAMMZAADDGYAAwxoAAMMagADDGwAAwxuAAMMbwADDHIAAwx/AAMMkAADDJIAAwyUAAMMlgADDJgAAwyaAAMMnAADDJ4AAwygAAMMsQADDLQAAwy3AAMMugADDL0AAwzAAAMMwwADDMYAAwzJAAMMywADDQoAAw0MAAMNDgADDRAAAw0TAAMNFAADDRUAAw0WAAMNFwADDRkAAw0bAAMNHAADDR0AAw0fAAMNIAADDV8AAw1hAAMNYwADDWUAAw1oAAMNaQADDWoAAw1rAAMNbAADDW4AAw1wAAMNcQADDXIAAw10AAMNdQADDbQAAw22AAMNuQADDbsAAw2+AAMNvwADDcAAAw3BAAMNwgADDcQAAw3GAAMNxwADDcgAAw3KAAMNywADDdgAAw3ZAAMN2gADDdwAAw4bAAMOHQADDh8AAw4hAAMOJAADDiUAAw4mAAMOJwADDigAAw4qAAMOLAADDi0AAw4uAAMOMAADDjEAAw5wAAMOcgADDnQAAw52AAMOeQADDnoAAw57AAMOfAADDn0AAw5/AAMOgQADDoIAAw6DAAMOhQADDoYAAw7FAAMOxwADDskAAw7LAAMOzgADDs8AAw7QAAMO0QADDtIAAw7UAAMO1gADDtcAAw7YAAMO2gADDtsAAw8aAAMPHAADDx4AAw8gAAMPIwADDyQAAw8lAAMPJgADDycAAw8pAAMPKwADDywAAw8tAAMPLwADDzAAAw9vAAMPcQADD3MAAw91AAMPeAADD3kAAw96AAMPewADD3wAAw9+AAMPgAADD4EAAw+CAAMPhAADD4UAAw+qAAMPzgADD/UAAxAZAAMQHAADEB4AAxAgAAMQIgADECQAAxAmAAMQJwADECoAAxA3AAMQRgADEEgAAxBKAAMQTAADEE4AAxBQAAMQUgADEFQAAxBjAAMQZgADEGkAAxBsAAMQbwADEHIAAxB1AAMQeAADEHoAAxC5AAMQuwADEL0AAxC/AAMQwgADEMMAAxDEAAMQxQADEMYAAxDIAAMQygADEMsAAxDMAAMQzgADEM8AAxEOAAMREAADERIAAxEUAAMRFwADERgAAxEZAAMRGgADERsAAxEdAAMRHwADESAAAxEhAAMRIwADESQAAxFjAAMRZQADEWcAAxFpAAMRbAADEW0AAxFuAAMRbwADEXAAAxFyAAMRdAADEXUAAxF2AAMReAADEXkAAxG4AAMRugADEb0AAxG/AAMRwgADEcMAAxHEAAMRxQADEcYAAxHIAAMRygADEcsAAxHMAAMRzgADEc8AAxIOAAMSEAADEhIAAxIUAAMSFwADEhgAAxIZAAMSGgADEhsAAxIdAAMSHwADEiAAAxIhAAMSIwADEiQAAxJjAAMSZQADEmcAAxJpAAMSbAADEm0AAxJuAAMSbwADEnAAAxJyAAMSdAADEnUAAxJ2AAMSeAADEnkAAxK4AAMSugADErwAAxK+AAMSwQADEsIAAxLDAAMSxAADEsUAAxLHAAMSyQADEsoAAxLLAAMSzQADEs4AAxMZAAMTPAADE1wAAxN8AAMTfgADE4AAAxOCAAMThAADE4cAAxOIAAMTiQADE4wAAxONAAMTjwADE5AAAxOSAAMTlQADE5YAAxOXAAMTmgADE5sAAxOgAAMTrQADE7IAAxO0AAMTtgADE7sAAxO+AAMTwQADE8MAAxPoAAMUDAADFDMAAxRXAAMUWgADFFwAAxReAAMUYAADFGIAAxRkAAMUZQADFGgAAxR1AAMUhgADFIgAAxSKAAMUjAADFI4AAxSQAAMUkgADFJQAAxSWAAMUpwADFKoAAxStAAMUsAADFLMAAxS2AAMUuQADFLwAAxS/AAMUwQADFQAAAxUCAAMVBAADFQYAAxUJAAMVCgADFQsAAxUMAAMVDQADFQ8AAxURAAMVEgADFRMAAxUVAAMVFgADFVUAAxVXAAMVWQADFVsAAxVeAAMVXwADFWAAAxVhAAMVYgADFWQAAxVmAAMVZwADFWgAAxVqAAMVawADFaoAAxWsAAMVrwADFbEAAxW0AAMVtQADFbYAAxW3AAMVuAADFboAAxW8AAMVvQADFb4AAxXAAAMVwQADFc4AAxXPAAMV0AADFdIAAxYRAAMWEwADFhUAAxYXAAMWGgADFhsAAxYcAAMWHQADFh4AAxYgAAMWIgADFiMAAxYkAAMWJgADFicAAxZmAAMWaAADFmoAAxZsAAMWbwADFnAAAxZxAAMWcgADFnMAAxZ1AAMWdwADFngAAxZ5AAMWewADFnwAAxa7AAMWvQADFr8AAxbBAAMWxAADFsUAAxbGAAMWxwADFsgAAxbKAAMWzAADFs0AAxbOAAMW0AADFtEAAxcQAAMXEgADFxQAAxcWAAMXGQADFxoAAxcbAAMXHAADFx0AAxcfAAMXIQADFyIAAxcjAAMXJQADFyYAAxdlAAMXZwADF2kAAxdrAAMXbgADF28AAxdwAAMXcQADF3IAAxd0AAMXdgADF3cAAxd4AAMXegADF3sAAxegAAMXxAADF+sAAxgPAAMYEgADGBQAAxgWAAMYGAADGBoAAxgcAAMYHQADGCAAAxgtAAMYPAADGD4AAxhAAAMYQgADGEQAAxhGAAMYSAADGEoAAxhZAAMYXAADGF8AAxhiAAMYZQADGGgAAxhrAAMYbgADGHAAAxivAAMYsQADGLMAAxi1AAMYuAADGLkAAxi6AAMYuwADGLwAAxi+AAMYwAADGMEAAxjCAAMYxAADGMUAAxkEAAMZBgADGQgAAxkKAAMZDQADGQ4AAxkPAAMZEAADGREAAxkTAAMZFQADGRYAAxkXAAMZGQADGRoAAxlZAAMZWwADGV0AAxlfAAMZYgADGWMAAxlkAAMZZQADGWYAAxloAAMZagADGWsAAxlsAAMZbgADGW8AAxmuAAMZsAADGbMAAxm1AAMZuAADGbkAAxm6AAMZuwADGbwAAxm+AAMZwAADGcEAAxnCAAMZxAADGcUAAxoEAAMaBgADGggAAxoKAAMaDQADGg4AAxoPAAMaEAADGhEAAxoTAAMaFQADGhYAAxoXAAMaGQADGhoAAxpZAAMaWwADGl4AAxpgAAMaYwADGmQAAxplAAMaZgADGmcAAxppAAMaawADGmwAAxptAAMabwADGnAAAxqMAAMaywADGs0AAxrPAAMa0QADGtQAAxrVAAMa1gADGtcAAxrYAAMa2gADGtwAAxrdAAMa3gADGuAAAxrhAAMbLAADG08AAxtvAAMbjwADG5EAAxuTAAMblQADG5cAAxuaAAMbmwADG5wAAxufAAMboAADG6IAAxujAAMbpQADG6gAAxupAAMbqgADG60AAxuuAAMbswADG8AAAxvFAAMbxwADG8kAAxvOAAMb0QADG9QAAxvWAAMb+wADHB8AAxxGAAMcagADHG0AAxxvAAMccQADHHMAAxx1AAMcdwADHHgAAxx7AAMciAADHJkAAxybAAMcnQADHJ8AAxyhAAMcowADHKUAAxynAAMcqQADHLoAAxy9AAMcwAADHMMAAxzGAAMcyQADHMwAAxzPAAMc0gADHNQAAx0TAAMdFQADHRcAAx0ZAAMdHAADHR0AAx0eAAMdHwADHSAAAx0iAAMdJAADHSUAAx0mAAMdKAADHSkAAx1oAAMdagADHWwAAx1uAAMdcQADHXIAAx1zAAMddAADHXUAAx13AAMdeQADHXoAAx17AAMdfQADHX4AAx29AAMdvwADHcIAAx3EAAMdxwADHcgAAx3JAAMdygADHcsAAx3NAAMdzwADHdAAAx3RAAMd0wADHdQAAx3hAAMd4gADHeMAAx3lAAMeJAADHiYAAx4oAAMeKgADHi0AAx4uAAMeLwADHjAAAx4xAAMeMwADHjUAAx42AAMeNwADHjkAAx46AAMeeQADHnsAAx59AAMefwADHoIAAx6DAAMehAADHoUAAx6GAAMeiAADHooAAx6LAAMejAADHo4AAx6PAAMezgADHtAAAx7SAAMe1AADHtcAAx7YAAMe2QADHtoAAx7bAAMe3QADHt8AAx7gAAMe4QADHuMAAx7kAAMfIwADHyUAAx8nAAMfKQADHywAAx8tAAMfLgADHy8AAx8wAAMfMgADHzQAAx81AAMfNgADHzgAAx85AAMfeAADH3oAAx98AAMffgADH4EAAx+CAAMfgwADH4QAAx+FAAMfhwADH4kAAx+KAAMfiwADH40AAx+OAAMfswADH9cAAx/+AAMgIgADICUAAyAnAAMgKQADICsAAyAtAAMgLwADIDAAAyAzAAMgQAADIE8AAyBRAAMgUwADIFUAAyBXAAMgWQADIFsAAyBdAAMgbAADIG8AAyByAAMgdQADIHgAAyB7AAMgfgADIIEAAyCDAAMgwgADIMQAAyDGAAMgyAADIMsAAyDMAAMgzQADIM4AAyDPAAMg0QADINMAAyDUAAMg1QADINcAAyDYAAMhFwADIRkAAyEbAAMhHQADISAAAyEhAAMhIgADISMAAyEkAAMhJgADISgAAyEpAAMhKgADISwAAyEtAAMhbAADIW4AAyFwAAMhcgADIXUAAyF2AAMhdwADIXgAAyF5AAMhewADIX0AAyF+AAMhfwADIYEAAyGCAAMhwQADIcMAAyHFAAMhxwADIcoAAyHLAAMhzAADIc0AAyHOAAMh0AADIdIAAyHTAAMh1AADIdYAAyHXAAMiFgADIhgAAyIaAAMiHAADIh8AAyIgAAMiIQADIiIAAyIjAAMiJQADIicAAyIoAAMiKQADIisAAyIsAAMiawADIm0AAyJvAAMicQADInQAAyJ1AAMidgADIncAAyJ4AAMiegADInwAAyJ9AAMifgADIoAAAyKBAAMiwAADIsIAAyLEAAMixgADIskAAyLKAAMiywADIswAAyLNAAMizwADItEAAyLSAAMi0wADItUAAyLWAAMjIQADI0QAAyNkAAMjhAADI4YAAyOIAAMjigADI4wAAyOPAAMjkAADI5EAAyOUAAMjlQADI5cAAyOYAAMjmgADI50AAyOeAAMjnwADI6IAAyOjAAMjqAADI7UAAyO6AAMjvAADI74AAyPDAAMjxgADI8kAAyPLAAMj8AADJBQAAyQ7AAMkXwADJGIAAyRkAAMkZgADJGgAAyRqAAMkbAADJG0AAyRwAAMkfQADJI4AAySQAAMkkgADJJQAAySWAAMkmAADJJoAAyScAAMkngADJK8AAySyAAMktQADJLgAAyS7AAMkvgADJMEAAyTEAAMkxwADJMkAAyUIAAMlCgADJQwAAyUOAAMlEQADJRIAAyUTAAMlFAADJRUAAyUXAAMlGQADJRoAAyUbAAMlHQADJR4AAyVdAAMlXwADJWEAAyVjAAMlZgADJWcAAyVoAAMlaQADJWoAAyVsAAMlbgADJW8AAyVwAAMlcgADJXMAAyWyAAMltAADJbcAAyW5AAMlvAADJb0AAyW+AAMlvwADJcAAAyXCAAMlxAADJcUAAyXGAAMlyAADJckAAyXWAAMl1wADJdgAAyXaAAMmGQADJhsAAyYdAAMmHwADJiIAAyYjAAMmJAADJiUAAyYmAAMmKAADJioAAyYrAAMmLAADJi4AAyYvAAMmbgADJnAAAyZyAAMmdAADJncAAyZ4AAMmeQADJnoAAyZ7AAMmfQADJn8AAyaAAAMmgQADJoMAAyaEAAMmwwADJsUAAybHAAMmyQADJswAAybNAAMmzgADJs8AAybQAAMm0gADJtQAAybVAAMm1gADJtgAAybZAAMnGAADJxoAAyccAAMnHgADJyEAAyciAAMnIwADJyQAAyclAAMnJwADJykAAycqAAMnKwADJy0AAycuAAMnbQADJ28AAydxAAMncwADJ3YAAyd3AAMneAADJ3kAAyd6AAMnfAADJ34AAyd/AAMngAADJ4IAAyeDAAMnqAADJ8wAAyfzAAMoFwADKBoAAygcAAMoHgADKCAAAygiAAMoJAADKCUAAygoAAMoNQADKEQAAyhGAAMoSAADKEoAAyhMAAMoTgADKFAAAyhSAAMoYQADKGQAAyhnAAMoagADKG0AAyhwAAMocwADKHYAAyh4AAMotwADKLkAAyi7AAMovQADKMAAAyjBAAMowgADKMMAAyjEAAMoxgADKMgAAyjJAAMoygADKMwAAyjNAAMpDAADKQ4AAykQAAMpEgADKRUAAykWAAMpFwADKRgAAykZAAMpGwADKR0AAykeAAMpHwADKSEAAykiAAMpYQADKWMAAyllAAMpZwADKWoAAylrAAMpbAADKW0AAyluAAMpcAADKXIAAylzAAMpdAADKXYAAyl3AAMptgADKbgAAym7AAMpvQADKcAAAynBAAMpwgADKcMAAynEAAMpxgADKcgAAynJAAMpygADKcwAAynNAAMqDAADKg4AAyoQAAMqEgADKhUAAyoWAAMqFwADKhgAAyoZAAMqGwADKh0AAyoeAAMqHwADKiEAAyoiAAMqYQADKmMAAyplAAMqZwADKmoAAyprAAMqbAADKm0AAypuAAMqcAADKnIAAypzAAMqdAADKnYAAyp3AAMqtgADKrgAAyq6AAMqvAADKr8AAyrAAAMqwQADKsIAAyrDAAMqxQADKscAAyrIAAMqyQADKssAAyrMAAMrFwADKzoAAytaAAMregADK3wAAyt+AAMrgAADK4IAAyuFAAMrhgADK4cAAyuKAAMriwADK40AAyuOAAMrkAADK5MAAyuUAAMrlQADK5gAAyuZAAMrngADK6sAAyuwAAMrsgADK7QAAyu5AAMrvAADK78AAyvBAAMr5gADLAoAAywxAAMsVQADLFgAAyxaAAMsXAADLF4AAyxgAAMsYgADLGMAAyxmAAMscwADLIQ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AAzdcAAM3XgADN2EAAzdiAAM3YwADN2QAAzdlAAM3ZwADN2kAAzdqAAM3awADN20AAzduAAM3kwADN7cAAzfeAAM4AgADOAUAAzgHAAM4CQADOAsAAzgNAAM4DwADOBAAAzgTAAM4IAADOC8AAzgxAAM4MwADODUAAzg3AAM4OQADODsAAzg9AAM4TAADOE8AAzhSAAM4VQADOFgAAzhbAAM4XgADOGEAAzhjAAM4ogADOKQAAzimAAM4qAADOKsAAzisAAM4rQADOK4AAzivAAM4sQADOLMAAzi0AAM4tQADOLcAAzi4AAM49wADOPkAAzj7AAM4/QADOQAAAzkBAAM5AgADOQMAAzkEAAM5BgADOQgAAzkJAAM5CgADOQwAAzkNAAM5TAADOU4AAzlQAAM5UgADOVUAAzlWAAM5VwADOVgAAzlZAAM5WwADOV0AAzleAAM5XwADOWEAAzliAAM5oQADOaMAAzmmAAM5qAADOasAAzmsAAM5rQADOa4AAzmvAAM5sQADObMAAzm0AAM5tQADObcAAzm4AAM59wADOfkAAzn7AAM5/QADOgAAAzoBAAM6AgADOgMAAzoEAAM6BgADOggAAzoJAAM6CgADOgwAAzoNAAM6TAADOk4AAzpQAAM6UgADOlUAAzpWAAM6VwADOlgAAzpZAAM6WwADOl0AAzpeAAM6XwADOmEAAzpiAAM6oQADOqMAAzqlAAM6pwADOqoAAzqrAAM6rAADOq0AAzquAAM6sAADOrIAAzqzAAM6tAADOrYAAzq3AAM7AgADOyUAAztFAAM7ZQADO2cAAztpAAM7awADO20AAztwAAM7cQADO3IAAzt1AAM7dgADO3gAAzt5AAM7ewADO34AAzt/AAM7gAADO4MAAzuEAAM7iQADO5YAAzubAAM7nQADO58AAzukAAM7pwADO6oAAzusAAM70QADO/UAAzwcAAM8QAADPEMAAzxFAAM8RwADPEkAAzxLAAM8TQADPE4AAzxRAAM8XgADPG8AAzxxAAM8cwADPHUAAzx3AAM8eQADPHsAAzx9AAM8fwADPJAAAzyTAAM8lgADPJkAAzycAAM8nwADPKIAAzylAAM8qAADPKoAAzzpAAM86wADPO0AAzzvAAM88gADPPMAAzz0AAM89QADPPYAAzz4AAM8+gADPPsAAzz8AAM8/gADPP8AAz0+AAM9QAADPUIAAz1EAAM9RwADPUgAAz1JAAM9SgADPUsAAz1NAAM9TwADPVAAAz1RAAM9UwADPVQAAz2TAAM9lQADPZgAAz2aAAM9nQADPZ4AAz2fAAM9oAADPaEAAz2jAAM9pQADPaYAAz2nAAM9qQADPaoAAz23AAM9uAADPbkAAz27AAM9+gADPfwAAz3+AAM+AAADPgMAAz4EAAM+BQADPgYAAz4HAAM+CQADPgsAAz4MAAM+DQADPg8AAz4QAAM+TwADPlEAAz5TAAM+VQADPlgAAz5ZAAM+WgADPlsAAz5cAAM+XgADPmAAAz5hAAM+YgADPmQAAz5lAAM+pAADPqYAAz6oAAM+qgADPq0AAz6uAAM+rwADPrAAAz6xAAM+swADPrUAAz62AAM+twADPrkAAz66AAM++QADPvsAAz79AAM+/wADPwIAAz8DAAM/BAADPwUAAz8GAAM/CAADPwoAAz8LAAM/DAADPw4AAz8PAAM/TgADP1AAAz9SAAM/VAADP1cAAz9YAAM/WQADP1oAAz9bAAM/XQADP18AAz9gAAM/YQADP2MAAz9kAAM/iQADP60AAz/UAAM/+AADP/sAAz/9AAM//wADQAEAA0ADAANABQADQAYAA0AJAANAFgADQCUAA0AnAANAKQADQCsAA0AtAANALwADQDEAA0AzAANAQgADQEUAA0BIAANASwADQE4AA0BRAANAVAADQFcAA0BZAANAmAADQJoAA0CcAANAngADQKEAA0CiAANAowADQKQAA0ClAANApwADQKkAA0CqAANAqwADQK0AA0CuAANA7QADQO8AA0DxAANA8wADQPYAA0D3AANA+AADQPkAA0D6AANA/AADQP4AA0D/AANBAAADQQIAA0EDAANBQgADQUQAA0FGAANBSAADQUsAA0FMAANBTQADQU4AA0FPAANBUQADQVMAA0FUAANBVQADQVcAA0FYAANBlwADQZkAA0GbAANBnQADQaAAA0GhAANBogADQaMAA0GkAANBpgADQagAA0GpAANBqgADQawAA0GtAANB7AADQe4AA0HwAANB8gADQfUAA0H2AANB9wADQfgAA0H5AANB+wADQf0AA0H+AANB/wADQgEAA0ICAANCQQADQkMAA0JFAANCRwADQkoAA0JLAANCTAADQk0AA0JOAANCUAADQlIAA0JTAANCVAADQlYAA0JXAANClgADQpgAA0KaAANCnAADQp8AA0KgAANCoQADQqIAA0KjAANCpQADQqcAA0KoAANCqQADQqsAA0KsAANC9wADQxoAA0M6AANDWgADQ1wAA0NeAANDYAADQ2IAA0NlAANDZgADQ2cAA0NqAANDawADQ20AA0NuAANDcAADQ3IAA0NzAANDdAADQ3cAA0N4AANDfQADQ4oAA0OPAANDkQADQ5MAA0OYAANDmwADQ54AA0OgAANDxQADQ+kAA0QQAANENAADRDcAA0Q5AANEOwADRD0AA0Q/AANEQQADREIAA0RFAANEUgADRGMAA0RlAANEZwADRGkAA0RrAANEbQADRG8AA0RxAANEcwADRIQAA0SHAANEigADRI0AA0SQAANEkwADRJYAA0SZAANEnAADRJ4AA0TdAANE3wADROEAA0TjAANE5gADROcAA0ToAANE6QADROoAA0TsAANE7gADRO8AA0TwAANE8gADRPMAA0UyAANFNAADRTYAA0U4AANFOwADRTwAA0U9AANFPgADRT8AA0VBAANFQwADRUQAA0VFAANFRwADRUgAA0WHAANFiQADRYwAA0WOAANFkQADRZIAA0WTAANFlAADRZUAA0WXAANFmQADRZoAA0WbAANFnQADRZ4AA0WrAANFrAADRa0AA0WvAANF7gADRfAAA0XyAANF9AADRfcAA0X4AANF+QADRfoAA0X7AANF/QADRf8AA0YAAANGAQADRgMAA0YEAANGQwADRkUAA0ZHAANGSQADRkwAA0ZNAANGTgADRk8AA0ZQAANGUgADRlQAA0ZVAANGVgADRlgAA0ZZAANGmAADRpoAA0acAANGngADRqEAA0aiAANGowADRqQAA0alAANGpwADRqkAA0aqAANGqwADRq0AA0auAANG7QADRu8AA0bxAANG8wADRvYAA0b3AANG+AADRvkAA0b6AANG/AADRv4AA0b/AANHAAADRwIAA0cDAANHQgADR0QAA0dGAANHSAADR0sAA0dMAANHTQADR04AA0dPAANHUQADR1MAA0dUAANHVQADR1cAA0dYAANHfQADR6EAA0fIAANH7AADR+8AA0fxAANH8wADR/UAA0f3AANH+QADR/oAA0f9AANICgADSBkAA0gbAANIHQADSB8AA0ghAANIIwADSCUAA0gnAANINgADSDkAA0g8AANIPwADSEIAA0hFAANISAADSEsAA0hNAANIjAADSI4AA0iQAANIkgADSJUAA0iWAANIlwADSJgAA0iZAANImwADSJ0AA0ieAANInwADSKEAA0iiAANI4QADSOMAA0jlAANI5wADSOoAA0jrAANI7AADSO0AA0juAANI8AADSPIAA0jzAANI9AADSPYAA0j3AANJNgADSTgAA0k6AANJPAADST8AA0lAAANJQQADSUIAA0lDAANJRQADSUcAA0lIAANJSQADSUsAA0lMAANJiwADSY0AA0mQAANJkgADSZUAA0mWAANJlwADSZgAA0mZAANJmwADSZ0AA0meAANJnwADSaEAA0miAANJ4QADSeMAA0nlAANJ5wADSeoAA0nrAANJ7AADSe0AA0nuAANJ8AADSfIAA0nzAANJ9AADSfYAA0n3AANKNgADSjgAA0o6AANKPAADSj8AA0pAAANKQQADSkIAA0pDAANKRQADSkcAA0pIAANKSQADSksAA0pMAANKiwADSo0AA0qPAANKkQADSpQAA0qVAANKlgADSpcAA0qYAANKmgADSpwAA0qdAANKngADSqAAA0qhAANKqgADSqsAA0qtAANK8AADSxQAA0s4AANLWwADS4IAA0uiAANLyQADS/AAA0wQAANMNAADTFgAA0xaAANMXQADTF8AA0xhAANMYwADTGYAA0xoAANMagADTGwAA0xuAANMcAADTHIAA0x1AANMeAADTHkAA0x+AANMiwADTI4AA0yQAANMkwADTJYAA0yYAANMvQADTOEAA00IAANNLAADTS8AA00xAANNMwADTTUAA003AANNOQADTToAA009AANNSgADTV0AA01fAANNYQADTWMAA01lAANNZwADTWkAA01rAANNbQADTW8AA02CAANNhQADTYgAA02LAANNjgADTZEAA02UAANNlwADTZoAA02dAANNnwADTd4AA03gAANN4wADTeUAA03oAANN6QADTeoAA03rAANN7AADTe4AA03wAANN8QADTfIAA030AANN9QADTf4AA03/AANOAQADTkAAA05CAANORAADTkYAA05JAANOSgADTksAA05MAANOTQADTk8AA05RAANOUgADTlMAA05VAANOVgADTpUAA06XAANOmgADTpwAA06fAANOoAADTqEAA06iAANOowADTqUAA06nAANOqAADTqkAA06rAANOrAADTrUAA062AANOuAADTvcAA075AANO+wADTv0AA08AAANPAQADTwIAA08DAANPBAADTwYAA08IAANPCQADTwoAA08MAANPDQADT0wAA09OAANPUQADT1MAA09WAANPVwADT1gAA09ZAANPWgADT1wAA09eAANPXwADT2AAA09iAANPYwADT2wAA09tAANPbwADT64AA0+wAANPsgADT7QAA0+3AANPuAADT7kAA0+6AANPuwADT70AA0+/AANPwAADT8EAA0/DAANPxAADUAMAA1AFAANQCAADUAoAA1ANAANQDgADUA8AA1AQAANQEQADUBMAA1AVAANQFgADUBcAA1AZAANQGgADUCcAA1AoAANQKQADUCsAA1BqAANQbAADUG4AA1BwAANQcwADUHQAA1B1AANQdgADUHcAA1B5AANQewADUHwAA1B9AANQfwADUIAAA1C/AANQwQADUMQAA1DGAANQyQADUMoAA1DLAANQzAADUM0AA1DPAANQ0QADUNIAA1DTAANQ1QADUNYAA1DqAANQ9wADUQgAA1ELAANRDgADUREAA1EUAANRFwADURoAA1EdAANRIAADUTEAA1E0AANRNwADUToAA1E9AANRQAADUUMAA1FGAANRSQADUUsAA1FSAANRWwADUWMAA1FsAANRdgADUYEAA1HMAANR7wADUg8AA1IvAANSMQADUjMAA1I1AANSNwADUjoAA1I7AANSPAADUj8AA1JAAANSQgADUkMAA1JFAANSSAADUkkAA1JKAANSTQADUk4AA1JTAANSYAADUmUAA1JnAANSaQADUm4AA1JxAANSdAADUnYAA1KbAANSvwADUuYAA1MKAANTDQADUw8AA1MRAANTEwADUxUAA1MXAANTGAADUxsAA1MoAANTOQADUzsAA1M9AANTPwADU0EAA1NDAANTRQADU0cAA1NJAANTWgADU10AA1NgAANTYwADU2YAA1NpAANTbAADU28AA1NyAANTdAADU7MAA1O1AANTtwADU7kAA1O8AANTvQADU74AA1O/AANTwAADU8IAA1PEAANTxQADU8YAA1PIAANTyQADVAgAA1QKAANUDAADVA4AA1QRAANUEgADVBMAA1QUAANUFQADVBcAA1QZAANUGgADVBsAA1QdAANUHgADVF0AA1RfAANUYgADVGQAA1RnAANUaAADVGkAA1RqAANUawADVG0AA1RvAANUcAADVHEAA1RzAANUdAADVIEAA1SCAANUgwADVIUAA1TEAANUxgADVMgAA1TKAANUzQADVM4AA1TPAANU0AADVNEAA1TTAANU1QADVNYAA1TXAANU2QADVNoAA1UZAANVGwADVR0AA1UfAANVIgADVSMAA1UkAANVJQADVSYAA1UoAANVKgADVSsAA1UsAANVLgADVS8AA1VuAANVcAADVXIAA1V0AANVdwADVXgAA1V5AANVegADVXsAA1V9AANVfwADVYAAA1WBAANVgwADVYQAA1XDAANVxQADVccAA1XJAANVzAADVc0AA1XOAANVzwADVdAAA1XSAANV1AADVdUAA1XWAANV2AADVdkAA1YYAANWGgADVhwAA1YeAANWIQADViIAA1YjAANWJAADViUAA1YnAANWKQADVioAA1YrAANWLQADVi4AA1ZTAANWdwADVp4AA1bCAANWxQADVscAA1bJAANWywADVs0AA1bPAANW0AADVtMAA1bgAANW7wADVvEAA1bzAANW9QADVvcAA1b5AANW+wADVv0AA1cMAANXDwADVxIAA1cVAANXGAADVxsAA1ceAANXIQADVyMAA1diAANXZAADV2YAA1doAANXawADV2wAA1dtAANXbgADV28AA1dxAANXcwADV3QAA1d1AANXdwADV3gAA1e3AANXuQADV7sAA1e9AANXwAADV8EAA1fCAANXwwADV8QAA1fGAANXyAADV8kAA1fKAANXzAADV80AA1gMAANYDgADWBAAA1gSAANYFQADWBYAA1gXAANYGAADWBkAA1gbAANYHQADWB4AA1gfAANYIQADWCIAA1hhAANYYwADWGYAA1hoAANYawADWGwAA1htAANYbgADWG8AA1hxAANYcwADWHQAA1h1AANYdwADWHgAA1i3AANYuQADWLsAA1i9AANYwAADWMEAA1jCAANYwwADWMQAA1jGAANYyAADWMkAA1jKAANYzAADWM0AA1kMAANZDgADWRAAA1kSAANZFQADWRYAA1kXAANZGAADWRkAA1kbAANZHQADWR4AA1kfAANZIQADWSIAA1lhAANZYwADWWUAA1lnAANZagADWWsAA1lsAANZbQADWW4AA1lwAANZcgADWXMAA1l0AANZdgADWXcAA1nCAANZ5QADWgUAA1olAANaJwADWikAA1orAANaLQADWjAAA1oxAANaMgADWjUAA1o2AANaOAADWjkAA1o7AANaPgADWj8AA1pAAANaQwADWkQAA1pJAANaVgADWlsAA1pdAANaXwADWmQAA1pnAANaagADWmwAA1qRAANatQADWtwAA1sAAANbAwADWwUAA1sHAANbCQADWwsAA1sNAANbDgADWxEAA1seAANbLwADWzEAA1szAANbNQADWzcAA1s5AANbOwADWz0AA1s/AANbUAADW1MAA1tWAANbWQADW1wAA1tfAANbYgADW2UAA1toAANbagADW6kAA1urAANbrQADW68AA1uyAANbswADW7QAA1u1AANbtgADW7gAA1u6AANbuwADW7wAA1u+AANbvwADW/4AA1wAAANcAgADXAQAA1wHAANcCAADXAkAA1wKAANcCwADXA0AA1wPAANcEAADXBEAA1wTAANcFAADXFMAA1xVAANcWAADXFoAA1xdAANcXgADXF8AA1xgAANcYQADXGMAA1xlAANcZgADXGcAA1xpAANcagADXHcAA1x4AANceQADXHsAA1y6AANcvAADXL4AA1zAAANcwwADXMQAA1zFAANcxgADXMcAA1zJAANcywADXMwAA1zNAANczwADXNAAA10PAANdEQADXRMAA10VAANdGAADXRkAA10aAANdGwADXRwAA10eAANdIAADXSEAA10iAANdJAADXSUAA11kAANdZgADXWgAA11qAANdbQADXW4AA11vAANdcAADXXEAA11zAANddQADXXYAA113AANdeQADXXoAA125AANduwADXb0AA12/AANdwgADXcMAA13EAANdxQADXcYAA13IAANdygADXcsAA13MAANdzgADXc8AA14OAANeEAADXhIAA14UAANeFwADXhgAA14ZAANeGgADXhsAA14dAANeHwADXiAAA14hAANeIwADXiQAA15JAANebQADXpQAA164AANeuwADXr0AA16/AANewQADXsMAA17FAANexgADXskAA17WAANe5QADXucAA17pAANe6wADXu0AA17vAANe8QADXvMAA18CAANfBQADXwgAA18LAANfDgADXxEAA18UAANfFwADXxkAA19YAANfWgADX1wAA19eAANfYQADX2IAA19jAANfZAADX2UAA19nAANfaQADX2oAA19rAANfbQADX24AA1+tAANfrwADX7EAA1+zAANftgADX7cAA1+4AANfuQADX7oAA1+8AANfvgADX78AA1/AAANfwgADX8MAA2ACAANgBAADYAYAA2AIAANgCwADYAwAA2ANAANgDgADYA8AA2ARAANgEwADYBQAA2AVAANgFwADYBgAA2BXAANgWQADYFsAA2BdAANgYAADYGEAA2BiAANgYwADYGQAA2BmAANgaAADYGkAA2BqAANgbAADYG0AA2CsAANgrgADYLAAA2CyAANgtQADYLYAA2C3AANguAADYLkAA2C7AANgvQADYL4AA2C/AANgwQADYMIAA2EBAANhAwADYQUAA2EHAANhCgADYQsAA2EMAANhDQADYQ4AA2EQAANhEgADYRMAA2EUAANhFgADYRcAA2FWAANhWAADYVoAA2FcAANhXwADYWAAA2FhAANhYgADYWMAA2FlAANhZwADYWgAA2FpAANhawADYWwAA2G3AANh2gADYfoAA2IaAANiHAADYh4AA2IgAANiIgADYiUAA2ImAANiJwADYioAA2IrAANiLQADYi4AA2IwAANiMwADYjQAA2I1AANiOAADYjkAA2JCAANiTwADYlQAA2JWAANiWAADYl0AA2JgAANiYwADYmUAA2KKAANirgADYtUAA2L5AANi/AADYv4AA2MAAANjAgADYwQAA2MGAANjBwADYwoAA2MXAANjKAADYyoAA2MsAANjLgADYzAAA2MyAANjNAADYzYAA2M4AANjSQADY0wAA2NPAANjUgADY1UAA2NYAANjWwADY14AA2NhAANjYwADY6IAA2OkAANjpgADY6gAA2OrAANjrAADY60AA2OuAANjrwADY7EAA2OzAANjtAADY7UAA2O3AANjuAADY/cAA2P5AANj+wADY/0AA2QAAANkAQADZAIAA2QDAANkBAADZAYAA2QIAANkCQADZAoAA2QMAANkDQADZEwAA2ROAANkUQADZFMAA2RWAANkVwADZFgAA2RZAANkWgADZFwAA2ReAANkXwADZGAAA2RiAANkYwADZHAAA2RxAANkcgADZHQAA2SzAANktQADZLcAA2S5AANkvAADZL0AA2S+AANkvwADZMAAA2TCAANkxAADZMUAA2TGAANkyAADZMkAA2UIAANlCgADZQwAA2UOAANlEQADZRIAA2UTAANlFAADZRUAA2UXAANlGQADZRoAA2UbAANlHQADZR4AA2VdAANlXwADZWEAA2VjAANlZgADZWcAA2VoAANlaQADZWoAA2VsAANlbgADZW8AA2VwAANlcgADZXMAA2WyAANltAADZbYAA2W4AANluwADZbwAA2W9AANlvgADZb8AA2XBAANlwwADZcQAA2XFAANlxwADZcgAA2YHAANmCQADZgsAA2YNAANmEAADZhEAA2YSAANmEwADZhQAA2YWAANmGAADZhkAA2YaAANmHAADZh0AA2ZCAANmZgADZo0AA2axAANmtAADZrYAA2a4AANmugADZrwAA2a+AANmvwADZsIAA2bPAANm3gADZuAAA2biAANm5AADZuYAA2boAANm6gADZuwAA2b7AANm/gADZwEAA2cEAANnBwADZwoAA2cNAANnEAADZxIAA2dRAANnUwADZ1UAA2dXAANnWgADZ1sAA2dcAANnXQADZ14AA2dgAANnYgADZ2MAA2dkAANnZgADZ2cAA2emAANnqAADZ6oAA2esAANnrwADZ7AAA2exAANnsgADZ7MAA2e1AANntwADZ7gAA2e5AANnuwADZ7wAA2f7AANn/QADZ/8AA2gBAANoBAADaAUAA2gGAANoBwADaAgAA2gKAANoDAADaA0AA2gOAANoEAADaBEAA2hQAANoUgADaFUAA2hXAANoWgADaFsAA2hcAANoXQADaF4AA2hgAANoYgADaGMAA2hkAANoZgADaGcAA2imAANoqAADaKoAA2isAANorwADaLAAA2ixAANosgADaLMAA2i1AANotwADaLgAA2i5AANouwADaLwAA2j7AANo/QADaP8AA2kBAANpBAADaQUAA2kGAANpBwADaQgAA2kKAANpDAADaQ0AA2kOAANpEAADaREAA2lQAANpUgADaVQAA2lWAANpWQADaVoAA2lbAANpXAADaV0AA2lfAANpYQADaWIAA2ljAANpZQADaWYAA2mxAANp1AADafQAA2oUAANqFgADahgAA2oaAANqHAADah8AA2ogAANqIQADaiQAA2olAANqJwADaigAA2oqAANqLQADai4AA2ovAANqMgADajMAA2o4AANqRQADakoAA2pMAANqTgADalMAA2pWAANqWQADalsAA2qAAANqpAADassAA2rvAANq8gADavQAA2r2AANq+AADavoAA2r8AANq/QADawAAA2sNAANrHgADayAAA2siAANrJAADayYAA2soAANrKgADaywAA2suAANrPwADa0IAA2tFAANrSAADa0sAA2tOAANrUQADa1QAA2tXAANrWQADa5gAA2uaAANrnAADa54AA2uhAANrogADa6MAA2ukAANrpQADa6cAA2upAANrqgADa6sAA2utAANrrgADa+0AA2vvAANr8QADa/MAA2v2AANr9wADa/gAA2v5AANr+gADa/wAA2v+AANr/wADbAAAA2wCAANsAwADbEIAA2xEAANsRwADbEkAA2xMAANsTQADbE4AA2xPAANsUAADbFIAA2xUAANsVQADbFYAA2xYAANsWQADbGYAA2xnAANsaAADbGoAA2ypAANsqwADbK0AA2yvAANssgADbLMAA2y0AANstQADbLYAA2y4AANsugADbLsAA2y8AANsvgADbL8AA2z+AANtAAADbQIAA20EAANtBwADbQgAA20JAANtCgADbQsAA20NAANtDwADbRAAA20RAANtEwADbRQAA21TAANtVQADbVcAA21ZAANtXAADbV0AA21eAANtXwADbWAAA21iAANtZAADbWUAA21mAANtaAADbWkAA22oAANtqgADbawAA22uAANtsQADbbIAA22zAANttAADbbUAA223AANtuQADbboAA227AANtvQADbb4AA239AANt/wADbgEAA24DAANuBgADbgcAA24IAANuCQADbgoAA24MAANuDgADbg8AA24QAANuEgADbhMAA244AANuXAADboMAA26nAANuqgADbqwAA26uAANusAADbrIAA260AANutQADbrgAA27FAANu1AADbtYAA27YAANu2gADbtwAA27eAANu4AADbuIAA27xAANu9AADbvcAA276AANu/QADbwAAA28DAANvBgADbwgAA29HAANvSQADb0sAA29NAANvUAADb1EAA29SAANvUwADb1QAA29WAANvWAADb1kAA29aAANvXAADb10AA2+cAANvngADb6AAA2+iAANvpQADb6YAA2+nAANvqAADb6kAA2+rAANvrQADb64AA2+vAANvsQADb7IAA2/xAANv8wADb/UAA2/3AANv+gADb/sAA2/8AANv/QADb/4AA3AAAANwAgADcAMAA3AEAANwBgADcAcAA3BGAANwSAADcEoAA3BMAANwTwADcFAAA3BRAANwUgADcFMAA3BVAANwVwADcFgAA3BZAANwWwADcFwAA3CbAANwnQADcJ8AA3ChAANwpAADcKUAA3CmAANwpwADcKgAA3CqAANwrAADcK0AA3CuAANwsAADcLEAA3DwAANw8gADcPQAA3D2AANw+QADcPoAA3D7AANw/AADcP0AA3D/AANxAQADcQIAA3EDAANxBQADcQYAA3FFAANxRwADcUkAA3FLAANxTgADcU8AA3FQAANxUQADcVIAA3FUAANxVgADcVcAA3FYAANxWgADcVsAA3GmAANxyQADcekAA3IJAANyCwADcg0AA3IPAANyEQADchQAA3IVAANyFgADchkAA3IaAANyHAADch0AA3IfAANyIgADciMAA3IkAANyJwADcigAA3ItAANyOgADcj8AA3JBAANyQwADckgAA3JLAANyTgADclAAA3J1AANymQADcsAAA3LkAANy5wADcukAA3LrAANy7QADcu8AA3LxAANy8gADcvUAA3MCAANzEwADcxUAA3MXAANzGQADcxsAA3MdAANzHwADcyEAA3MjAANzNAADczcAA3M6AANzPQADc0AAA3NDAANzRgADc0kAA3NMAANzTgADc40AA3OPAANzkQADc5MAA3OWAANzlwADc5gAA3OZAANzmgADc5wAA3OeAANznwADc6AAA3OiAANzowADc+IAA3PkAANz5gADc+gAA3PrAANz7AADc+0AA3PuAANz7wADc/EAA3PzAANz9AADc/UAA3P3AANz+AADdDcAA3Q5AAN0PAADdD4AA3RBAAN0QgADdEMAA3REAAN0RQADdEcAA3RJAAN0SgADdEsAA3RNAAN0TgADdFsAA3RcAAN0XQADdF8AA3SeAAN0oAADdKIAA3SkAAN0pwADdKgAA3SpAAN0qgADdKsAA3StAAN0rwADdLAAA3SxAAN0swADdLQAA3TzAAN09QADdPcAA3T5AAN0/AADdP0AA3T+AAN0/wADdQAAA3UCAAN1BAADdQUAA3UGAAN1CAADdQkAA3VIAAN1SgADdUwAA3VOAAN1UQADdVIAA3VTAAN1VAADdVUAA3VXAAN1WQADdVoAA3VbAAN1XQADdV4AA3WdAAN1nwADdaEAA3WjAAN1pgADdacAA3WoAAN1qQADdaoAA3WsAAN1rgADda8AA3WwAAN1sgADdbMAA3XyAAN19AADdfYAA3X4AAN1+wADdfwAA3X9AAN1/gADdf8AA3YBAAN2AwADdgQAA3YFAAN2BwADdggAA3YtAAN2UQADdngAA3acAAN2nwADdqEAA3ajAAN2pQADdqcAA3apAAN2qgADdq0AA3a6AAN2yQADdssAA3bNAAN2zwADdtEAA3bTAAN21QADdtcAA3bmAAN26QADduwAA3bvAAN28gADdvUAA3b4AAN2+wADdv0AA3c8AAN3PgADd0AAA3dCAAN3RQADd0YAA3dHAAN3SAADd0kAA3dLAAN3TQADd04AA3dPAAN3UQADd1IAA3eRAAN3kwADd5UAA3eXAAN3mgADd5sAA3ecAAN3nQADd54AA3egAAN3ogADd6MAA3ekAAN3pgADd6cAA3fmAAN36AADd+oAA3fsAAN37wADd/AAA3fxAAN38gADd/MAA3f1AAN39wADd/gAA3f5AAN3+wADd/wAA3g7AAN4PQADeD8AA3hBAAN4RAADeEUAA3hGAAN4RwADeEgAA3hKAAN4TAADeE0AA3hOAAN4UAADeFEAA3iQAAN4kgADeJQAA3iWAAN4mQADeJoAA3ibAAN4nAADeJ0AA3ifAAN4oQADeKIAA3ijAAN4pQADeKYAA3jlAAN45wADeOkAA3jrAAN47gADeO8AA3jwAAN48QADePIAA3j0AAN49gADePcAA3j4AAN4+gADePsAA3k6AAN5PAADeT4AA3lAAAN5QwADeUQAA3lFAAN5RgADeUcAA3lJAAN5SwADeUwAA3lNAAN5TwADeVAAA3mbAAN5vgADed4AA3n+AAN6AAADegIAA3oEAAN6BgADegkAA3oKAAN6CwADeg4AA3oPAAN6EQADehIAA3oUAAN6FwADehgAA3oZAAN6HAADeh0AA3oiAAN6LwADejQAA3o2AAN6OAADej0AA3pAAAN6QwADekUAA3pqAAN6jgADerUAA3rZAAN63AADet4AA3rgAAN64gADeuQAA3rmAAN65wADeuoAA3r3AAN7CAADewoAA3sMAAN7DgADexAAA3sSAAN7FAADexYAA3sYAAN7KQADeywAA3svAAN7MgADezUAA3s4AAN7OwADez4AA3tBAAN7QwADe4IAA3uEAAN7hgADe4gAA3uLAAN7jAADe40AA3uOAAN7jwADe5EAA3uTAAN7lAADe5UAA3uXAAN7mAADe9cAA3vZAAN72wADe90AA3vgAAN74QADe+IAA3vjAAN75AADe+YAA3voAAN76QADe+oAA3vsAAN77QADfCwAA3wuAAN8MQADfDMAA3w2AAN8NwADfDgAA3w5AAN8OgADfDwAA3w+AAN8PwADfEAAA3xCAAN8QwADfFAAA3xRAAN8UgADfFQAA3yTAAN8lQADfJcAA3yZAAN8nAADfJ0AA3yeAAN8nwADfKAAA3yiAAN8pAADfKUAA3ymAAN8qAADfKkAA3zoAAN86gADfOwAA3zuAAN88QADfPIAA3zzAAN89AADfPUAA3z3AAN8+QADfPoAA3z7AAN8/QADfP4AA309AAN9PwADfUEAA31DAAN9RgADfUcAA31IAAN9SQADfUoAA31MAAN9TgADfU8AA31QAAN9UgADfVMAA32SAAN9lAADfZYAA32YAAN9mwADfZwAA32dAAN9ngADfZ8AA32hAAN9owADfaQAA32lAAN9pwADfagAA33nAAN96QADfesAA33tAAN98AADffEAA33yAAN98wADffQAA332AAN9+AADffkAA336AAN9/AADff0AA34iAAN+RgADfm0AA36RAAN+lAADfpYAA36YAAN+mgADfpwAA36eAAN+nwADfqIAA36vAAN+vgADfsAAA37CAAN+xAADfsYAA37IAAN+ygADfswAA37bAAN+3gADfuEAA37kAAN+5wADfuoAA37tAAN+8AADfvIAA38xAAN/MwADfzUAA383AAN/OgADfzsAA388AAN/PQADfz4AA39AAAN/QgADf0MAA39EAAN/RgADf0cAA3+GAAN/iAADf4oAA3+MAAN/jwADf5AAA3+RAAN/kgADf5MAA3+VAAN/lwADf5gAA3+ZAAN/mwADf5wAA3/bAAN/3QADf98AA3/hAAN/5AADf+UAA3/mAAN/5wADf+gAA3/qAAN/7AADf+0AA3/uAAN/8AADf/EAA4AwAAOAMgADgDUAA4A3AAOAOgADgDsAA4A8AAOAPQADgD4AA4BAAAOAQgADgEMAA4BEAAOARgADgEcAA4BKAAOAiQADgIsAA4CNAAOAjwADgJIAA4CTAAOAlAADgJUAA4CWAAOAmAADgJoAA4CbAAOAnAADgJ4AA4CfAAOA3gADgOAAA4DiAAOA5AADgOcAA4DoAAOA6QADgOoAA4DrAAOA7QADgO8AA4DwAAOA8QADgPMAA4D0AAOBMwADgTUAA4E3AAOBOQADgTwAA4E9AAOBPgADgT8AA4FAAAOBQgADgUQAA4FFAAOBRgADgUgAA4FJAAOBlAADgbcAA4HXAAOB9wADgfkAA4H7AAOB/QADgf8AA4ICAAOCAwADggQAA4IHAAOCCAADggoAA4ILAAOCDQADghAAA4IRAAOCEgADghUAA4IWAAOCGwADgigAA4ItAAOCLwADgjEAA4I2AAOCOQADgjwAA4I+AAOCYwADgocAA4KuAAOC0gADgtUAA4LXAAOC2QADgtsAA4LdAAOC3wADguAAA4LjAAOC8AADgwEAA4MDAAODBQADgwcAA4MJAAODCwADgw0AA4MPAAODEQADgyIAA4MlAAODKAADgysAA4MuAAODMQADgzQAA4M3AAODOgADgzwAA4N7AAODfQADg38AA4OBAAODhAADg4UAA4OGAAODhwADg4gAA4OKAAODjAADg40AA4OOAAODkAADg5EAA4PQAAOD0gADg9QAA4PWAAOD2QADg9oAA4PbAAOD3AADg90AA4PfAAOD4QADg+IAA4PjAAOD5QADg+YAA4QlAAOEJwADhCoAA4QsAAOELwADhDAAA4QxAAOEMgADhDMAA4Q1AAOENwADhDgAA4Q5AAOEOwADhDwAA4RJAAOESgADhEsAA4RNAAOEjAADhI4AA4SQAAOEkgADhJUAA4SWAAOElwADhJgAA4SZAAOEmwADhJ0AA4SeAAOEnwADhKEAA4SiAAOE4QADhOMAA4TlAAOE5wADhOoAA4TrAAOE7AADhO0AA4TuAAOE8AADhPIAA4TzAAOE9AADhPYAA4T3AAOFNgADhTgAA4U6AAOFPAADhT8AA4VAAAOFQQADhUIAA4VDAAOFRQADhUcAA4VIAAOFSQADhUsAA4VMAAOFiwADhY0AA4WPAAOFkQADhZQAA4WVAAOFlgADhZcAA4WYAAOFmgADhZwAA4WdAAOFngADhaAAA4WhAAOF4AADheIAA4XkAAOF5gADhekAA4XqAAOF6wADhewAA4XtAAOF7wADhfEAA4XyAAOF8wADhfUAA4X2AAOGGwADhj8AA4ZmAAOGigADho0AA4aPAAOGkQADhpMAA4aVAAOGlwADhpgAA4abAAOGqAADhrcAA4a5AAOGuwADhr0AA4a/AAOGwQADhsMAA4bFAAOG1AADhtcAA4baAAOG3QADhuAAA4bjAAOG5gADhukAA4brAAOHKgADhywAA4cuAAOHMAADhzMAA4c0AAOHNQADhzYAA4c3AAOHOQADhzsAA4c8AAOHPQADhz8AA4dAAAOHfwADh4EAA4eDAAOHhQADh4gAA4eJAAOHigADh4sAA4eMAAOHjgADh5AAA4eRAAOHkgADh5QAA4eVAAOH1AADh9YAA4fYAAOH2gADh90AA4feAAOH3wADh+AAA4fhAAOH4wADh+UAA4fmAAOH5wADh+kAA4fqAAOIKQADiCsAA4guAAOIMAADiDMAA4g0AAOINQADiDYAA4g3AAOIOQADiDsAA4g8AAOIPQADiD8AA4hAAAOIfwADiIEAA4iDAAOIhQADiIgAA4iJAAOIigADiIsAA4iMAAOIjgADiJAAA4iRAAOIkgADiJQAA4iVAAOI1AADiNYAA4jYAAOI2gADiN0AA4jeAAOI3wADiOAAA4jhAAOI4wADiOUAA4jmAAOI5wADiOkAA4jqAAOJKQADiSsAA4ktAAOJLwADiTIAA4kzAAOJNAADiTUAA4k2AAOJOAADiToAA4k7AAOJPAADiT4AA4k/AAOJigADia0AA4nNAAOJ7QADie8AA4nxAAOJ8wADifUAA4n4AAOJ+QADifoAA4n9AAOJ/gADigAAA4oBAAOKAwADigYAA4oHAAOKCAADigsAA4oMAAOKFQADiiIAA4onAAOKKQADiisAA4owAAOKMwADijYAA4o4AAOKXQADioEAA4qoAAOKzAADis8AA4rRAAOK0wADitUAA4rXAAOK2QADitoAA4rdAAOK6gADivsAA4r9AAOK/wADiwEAA4sDAAOLBQADiwcAA4sJAAOLCwADixwAA4sfAAOLIgADiyUAA4soAAOLKwADiy4AA4sxAAOLNAADizYAA4t1AAOLdwADi3kAA4t7AAOLfgADi38AA4uAAAOLgQADi4IAA4uEAAOLhgADi4cAA4uIAAOLigADi4sAA4vKAAOLzAADi84AA4vQAAOL0wADi9QAA4vVAAOL1gADi9cAA4vZAAOL2wADi9wAA4vdAAOL3wADi+AAA4wfAAOMIQADjCQAA4wmAAOMKQADjCoAA4wrAAOMLAADjC0AA4wvAAOMMQADjDIAA4wzAAOMNQADjDYAA4xDAAOMRAADjEUAA4xHAAOMhgADjIgAA4yKAAOMjAADjI8AA4yQAAOMkQADjJIAA4yTAAOMlQADjJcAA4yYAAOMmQADjJsAA4ycAAOM2wADjN0AA4zfAAOM4QADjOQAA4zlAAOM5gADjOcAA4zoAAOM6gADjOwAA4ztAAOM7gADjPAAA4zxAAONMAADjTIAA400AAONNgADjTkAA406AAONOwADjTwAA409AAONPwADjUEAA41CAAONQwADjUUAA41GAAONhQADjYcAA42JAAONiwADjY4AA42PAAONkAADjZEAA42SAAONlAADjZYAA42XAAONmAADjZoAA42bAAON2gADjdwAA43eAAON4AADjeMAA43kAAON5QADjeYAA43nAAON6QADjesAA43sAAON7QADje8AA43wAAOOFQADjjkAA45gAAOOhAADjocAA46JAAOOiwADjo0AA46PAAOOkQADjpIAA46VAAOOogADjrEAA46zAAOOtQADjrcAA465AAOOuwADjr0AA46/AAOOzgADjtEAA47UAAOO1wADjtoAA47dAAOO4AADjuMAA47lAAOPJAADjyYAA48oAAOPKgADjy0AA48uAAOPLwADjzAAA48xAAOPMwADjzUAA482AAOPNwADjzkAA486AAOPeQADj3sAA499AAOPfwADj4IAA4+DAAOPhAADj4UAA4+GAAOPiAADj4oAA4+LAAOPjAADj44AA4+PAAOPzgADj9AAA4/SAAOP1AADj9cAA4/YAAOP2QADj9oAA4/bAAOP3QADj98AA4/gAAOP4QADj+MAA4/kAAOQIwADkCUAA5AnAAOQKQADkCwAA5AtAAOQLgADkC8AA5AwAAOQMgADkDQAA5A1AAOQNgADkDgAA5A5AAOQeAADkHoAA5B8AAOQfgADkIEAA5CCAAOQgwADkIQAA5CFAAOQhwADkIkAA5CKAAOQiwADkI0AA5COAAOQzQADkM8AA5DRAAOQ0wADkNYAA5DXAAOQ2AADkNkAA5DaAAOQ3AADkN4AA5DfAAOQ4AADkOIAA5DjAAORIgADkSQAA5EmAAORKAADkSsAA5EsAAORLQADkS4AA5EvAAORMQADkTMAA5E0AAORNQADkTcAA5E4AAORQQADkUIAA5FEAAORhwADkasAA5HPAAOR8gADkhkAA5I5AAOSYAADkocAA5KnAAOSywADku8AA5LxAAOS9AADkvYAA5L4AAOS+gADkv0AA5L/AAOTAQADkwMAA5MFAAOTBwADkwkAA5MMAAOTDwADkxAAA5MVAAOTIgADkyUAA5MnAAOTKgADky0AA5MvAAOTVAADk3gAA5OfAAOTwwADk8YAA5PIAAOTygADk8wAA5POAAOT0AADk9EAA5PUAAOT4QADk/QAA5P2AAOT+AADk/oAA5P8AAOT/gADlAAAA5QCAAOUBAADlAYAA5QZAAOUHAADlB8AA5QiAAOUJQADlCgAA5QrAAOULgADlDEAA5Q0AAOUNgADlHUAA5R3AAOUegADlHwAA5R/AAOUgAADlIEAA5SCAAOUgwADlIUAA5SHAAOUiAADlIkAA5SLAAOUjAADlJUAA5SWAAOUmAADlNcAA5TZAAOU2wADlN0AA5TgAAOU4QADlOIAA5TjAAOU5AADlOYAA5ToAAOU6QADlOoAA5TsAAOU7QADlSwAA5UuAAOVMQADlTMAA5U2AAOVNwADlTgAA5U5AAOVOgADlTwAA5U+AAOVPwADlUAAA5VCAAOVQwADlUwAA5VNAAOVTwADlY4AA5WQAAOVkgADlZQAA5WXAAOVmAADlZkAA5WaAAOVmwADlZ0AA5WfAAOVoAADlaEAA5WjAAOVpAADleMAA5XlAAOV6AADleoAA5XtAAOV7gADle8AA5XwAAOV8QADlfMAA5X1AAOV9gADlfcAA5X5AAOV+gADlgMAA5YEAAOWBgADlkUAA5ZHAAOWSQADlksAA5ZOAAOWTwADllAAA5ZRAAOWUgADllQAA5ZWAAOWVwADllgAA5ZaAAOWWwADlpoAA5acAAOWnwADlqEAA5akAAOWpQADlqYAA5anAAOWqAADlqoAA5asAAOWrQADlq4AA5awAAOWsQADlr4AA5a/AAOWwAADlsIAA5cBAAOXAwADlwUAA5cHAAOXCgADlwsAA5cMAAOXDQADlw4AA5cQAAOXEgADlxMAA5cUAAOXFgADlxcAA5dWAAOXWAADl1sAA5ddAAOXYAADl2EAA5diAAOXYwADl2QAA5dmAAOXaAADl2kAA5dqAAOXbAADl20AA5d4AAOXhQADl44AA5eRAAOXlAADl5cAA5eaAAOXowADl6YAA5epAAOXrAADl68AA5exAAOXuQADl8EAA5gMAAOYLwADmE8AA5hvAAOYcQADmHMAA5h1AAOYdwADmHoAA5h7AAOYfAADmH8AA5iAAAOYggADmIMAA5iFAAOYiAADmIkAA5iKAAOYjQADmI4AA5iTAAOYoAADmKUAA5inAAOYqQADmK4AA5ixAAOYtAADmLYAA5jbAAOY/wADmSYAA5lKAAOZTQADmU8AA5lRAAOZUwADmVUAA5lXAAOZWAADmVsAA5loAAOZeQADmXsAA5l9AAOZfwADmYEAA5mDAAOZhQADmYcAA5mJAAOZmgADmZ0AA5mgAAOZowADmaYAA5mpAAOZrAADma8AA5myAAOZtAADmfMAA5n1AAOZ9wADmfkAA5n8AAOZ/QADmf4AA5n/AAOaAAADmgIAA5oEAAOaBQADmgYAA5oIAAOaCQADmkgAA5pKAAOaTAADmk4AA5pRAAOaUgADmlMAA5pUAAOaVQADmlcAA5pZAAOaWgADmlsAA5pdAAOaXgADmp0AA5qfAAOaogADmqQAA5qnAAOaqAADmqkAA5qqAAOaqwADmq0AA5qvAAOasAADmrEAA5qzAAOatAADmsEAA5rCAAOawwADmsUAA5sEAAObBgADmwgAA5sKAAObDQADmw4AA5sPAAObEAADmxEAA5sTAAObFQADmxYAA5sXAAObGQADmxoAA5tZAAObWwADm10AA5tfAAObYgADm2MAA5tkAAObZQADm2YAA5toAAObagADm2sAA5tsAAObbgADm28AA5uuAAObsAADm7IAA5u0AAObtwADm7gAA5u5AAObugADm7sAA5u9AAObvwADm8AAA5vBAAObwwADm8QAA5wDAAOcBQADnAcAA5wJAAOcDAADnA0AA5wOAAOcDwADnBAAA5wSAAOcFAADnBUAA5wWAAOcGAADnBkAA5xYAAOcWgADnFwAA5xeAAOcYQADnGIAA5xjAAOcZAADnGUAA5xnAAOcaQADnGoAA5xrAAOcbQADnG4AA5yTAAOctwADnN4AA50CAAOdBQADnQcAA50JAAOdCwADnQ0AA50PAAOdEAADnRMAA50gAAOdLwADnTEAA50zAAOdNQADnTcAA505AAOdOwADnT0AA51MAAOdTwADnVIAA51VAAOdWAADnVsAA51eAAOdYQADnWMAA52iAAOdpAADnaYAA52oAAOdqwADnawAA52tAAOdrgADna8AA52xAAOdswADnbQAA521AAOdtwADnbgAA533AAOd+QADnfsAA539AAOeAAADngEAA54CAAOeAwADngQAA54GAAOeCAADngkAA54KAAOeDAADng0AA55MAAOeTgADnlAAA55SAAOeVQADnlYAA55XAAOeWAADnlkAA55bAAOeXQADnl4AA55fAAOeYQADnmIAA56hAAOeowADnqUAA56nAAOeqgADnqsAA56sAAOerQADnq4AA56wAAOesgADnrMAA560AAOetgADnrcAA572AAOe+AADnvoAA578AAOe/wADnwAAA58BAAOfAgADnwMAA58FAAOfBwADnwgAA58JAAOfCwADnwwAA59LAAOfTQADn08AA59RAAOfVAADn1UAA59WAAOfVwADn1gAA59aAAOfXAADn10AA59eAAOfYAADn2EAA5+gAAOfogADn6QAA5+mAAOfqQADn6oAA5+rAAOfrAADn60AA5+vAAOfsQADn7IAA5+zAAOftQADn7YAA6ABAAOgJAADoEQAA6BkAAOgZgADoGgAA6BqAAOgbAADoG8AA6BwAAOgcQADoHQAA6B1AAOgdwADoHgAA6B6AAOgfQADoH4AA6B/AAOgggADoIMAA6CIAAOglQADoJoAA6CcAAOgngADoKMAA6CmAAOgqQADoKsAA6DQAAOg9AADoRsAA6E/AAOhQgADoUQAA6FGAAOhSAADoUoAA6FMAAOhTQADoVAAA6FdAAOhbgADoXAAA6FyAAOhdAADoXYAA6F4AAOhegADoXwAA6F+AAOhjwADoZIAA6GVAAOhmAADoZsAA6GeAAOhoQADoaQAA6GnAAOhqQADoegAA6HqAAOh7AADoe4AA6HxAAOh8gADofMAA6H0AAOh9QADofcAA6H5AAOh+gADofsAA6H9AAOh/gADoj0AA6I/AAOiQQADokMAA6JGAAOiRwADokgAA6JJAAOiSgADokwAA6JOAAOiTwADolAAA6JSAAOiUwADopIAA6KUAAOilwADopkAA6KcAAOinQADop4AA6KfAAOioAADoqIAA6KkAAOipQADoqYAA6KoAAOiqQADorYAA6K3AAOiuAADoroAA6L5AAOi+wADov0AA6L/AAOjAgADowMAA6MEAAOjBQADowYAA6MIAAOjCgADowsAA6MMAAOjDgADow8AA6NOAAOjUAADo1IAA6NUAAOjVwADo1gAA6NZAAOjWgADo1sAA6NdAAOjXwADo2AAA6NhAAOjYwADo2QAA6OjAAOjpQADo6cAA6OpAAOjrAADo60AA6OuAAOjrwADo7AAA6OyAAOjtAADo7UAA6O2AAOjuAADo7kAA6P4AAOj+gADo/wAA6P+AAOkAQADpAIAA6QDAAOkBAADpAUAA6QHAAOkCQADpAoAA6QLAAOkDQADpA4AA6RNAAOkTwADpFEAA6RTAAOkVgADpFcAA6RYAAOkWQADpFoAA6RcAAOkXgADpF8AA6RgAAOkYgADpGMAA6SIAAOkrAADpNMAA6T3AAOk+gADpPwAA6T+AAOlAAADpQIAA6UEAAOlBQADpQgAA6UVAAOlJAADpSYAA6UoAAOlKgADpSwAA6UuAAOlMAADpTIAA6VBAAOlRAADpUcAA6VKAAOlTQADpVAAA6VTAAOlVgADpVgAA6WXAAOlmQADpZsAA6WdAAOloAADpaEAA6WiAAOlowADpaQAA6WmAAOlqAADpakAA6WqAAOlrAADpa0AA6XsAAOl7gADpfAAA6XyAAOl9QADpfYAA6X3AAOl+AADpfkAA6X7AAOl/QADpf4AA6X/AAOmAQADpgIAA6ZBAAOmQwADpkUAA6ZHAAOmSgADpksAA6ZMAAOmTQADpk4AA6ZQAAOmUgADplMAA6ZUAAOmVgADplcAA6aWAAOmmAADppoAA6acAAOmnwADpqAAA6ahAAOmogADpqMAA6alAAOmpwADpqgAA6apAAOmqwADpqwAA6brAAOm7QADpu8AA6bxAAOm9AADpvUAA6b2AAOm9wADpvgAA6b6AAOm/AADpv0AA6b+AAOnAAADpwEAA6dAAAOnQgADp0QAA6dGAAOnSQADp0oAA6dLAAOnTAADp00AA6dPAAOnUQADp1IAA6dTAAOnVQADp1YAA6eVAAOnlwADp5kAA6ebAAOnngADp58AA6egAAOnoQADp6IAA6ekAAOnpgADp6cAA6eoAAOnqgADp6sAA6f2AAOoGQADqDkAA6hZAAOoWwADqF0AA6hfAAOoYQADqGQAA6hlAAOoZgADqGkAA6hqAAOobAADqG0AA6hvAAOocgADqHMAA6h0AAOodwADqHgAA6h9AAOoigADqI8AA6iRAAOokwADqJgAA6ibAAOongADqKAAA6jFAAOo6QADqRAAA6k0AAOpNwADqTkAA6k7AAOpPQADqT8AA6lBAAOpQgADqUUAA6lSAAOpYwADqWUAA6lnAAOpaQADqWsAA6ltAAOpbwADqXEAA6lzAAOphAADqYcAA6mKAAOpjQADqZAAA6mTAAOplgADqZkAA6mcAAOpngADqd0AA6nfAAOp4QADqeMAA6nmAAOp5wADqegAA6npAAOp6gADqewAA6nuAAOp7wADqfAAA6nyAAOp8wADqjIAA6o0AAOqNgADqjgAA6o7AAOqPAADqj0AA6o+AAOqPwADqkEAA6pDAAOqRAADqkUAA6pHAAOqSAADqocAA6qJAAOqjAADqo4AA6qRAAOqkgADqpMAA6qUAAOqlQADqpcAA6qZAAOqmgADqpsAA6qdAAOqngADqqsAA6qsAAOqrQADqq8AA6ruAAOq8AADqvIAA6r0AAOq9wADqvgAA6r5AAOq+gADqvsAA6r9AAOq/wADqwAAA6sBAAOrAwADqwQAA6tDAAOrRQADq0cAA6tJAAOrTAADq00AA6tOAAOrTwADq1AAA6tSAAOrVAADq1UAA6tWAAOrWAADq1kAA6uYAAOrmgADq5wAA6ueAAOroQADq6IAA6ujAAOrpAADq6UAA6unAAOrqQADq6oAA6urAAOrrQADq64AA6vtAAOr7wADq/EAA6vzAAOr9gADq/cAA6v4AAOr+QADq/oAA6v8AAOr/gADq/8AA6wAAAOsAgADrAMAA6xCAAOsRAADrEYAA6xIAAOsSwADrEwAA6xNAAOsTgADrE8AA6xRAAOsUwADrFQAA6xVAAOsVwADrFgAA6x9AAOsoQADrMgAA6zsAAOs7wADrPEAA6zzAAOs9QADrPcAA6z5AAOs+gADrP0AA60KAAOtGQADrRsAA60dAAOtHwADrSEAA60jAAOtJQADrScAA602AAOtOQADrTwAA60/AAOtQgADrUUAA61IAAOtSwADrU0AA62MAAOtjgADrZAAA62SAAOtlQADrZYAA62XAAOtmAADrZkAA62bAAOtnQADrZ4AA62fAAOtoQADraIAA63hAAOt4wADreUAA63nAAOt6gADresAA63sAAOt7QADre4AA63wAAOt8gADrfMAA630AAOt9gADrfcAA642AAOuOAADrjoAA648AAOuPwADrkAAA65BAAOuQgADrkMAA65FAAOuRwADrkgAA65JAAOuSwADrkwAA66LAAOujQADro8AA66RAAOulAADrpUAA66WAAOulwADrpgAA66aAAOunAADrp0AA66eAAOuoAADrqEAA67gAAOu4gADruQAA67mAAOu6QADruoAA67rAAOu7AADru0AA67vAAOu8QADrvIAA67zAAOu9QADrvYAA681AAOvNwADrzkAA687AAOvPgADrz8AA69AAAOvQQADr0IAA69EAAOvRgADr0cAA69IAAOvSgADr0sAA6+KAAOvjAADr44AA6+QAAOvkwADr5QAA6+VAAOvlgADr5cAA6+ZAAOvmwADr5wAA6+dAAOvnwADr6AAA6/rAAOwDgADsC4AA7BOAAOwUAADsFIAA7BUAAOwVgADsFkAA7BaAAOwWwADsF4AA7BfAAOwYQADsGIAA7BkAAOwZwADsGgAA7BpAAOwbAADsG0AA7B2AAOwgwADsIgAA7CKAAOwjAADsJEAA7CUAAOwlwADsJkAA7C+AAOw4gADsQkAA7EtAAOxMAADsTIAA7E0AAOxNgADsTgAA7E6AAOxOwADsT4AA7FLAAOxXAADsV4AA7FgAAOxYgADsWQAA7FmAAOxaAADsWoAA7FsAAOxfQADsYAAA7GDAAOxhgADsYkAA7GMAAOxjwADsZIAA7GVAAOxlwADsdYAA7HYAAOx2gADsdwAA7HfAAOx4AADseEAA7HiAAOx4wADseUAA7HnAAOx6AADsekAA7HrAAOx7AADsisAA7ItAAOyLwADsjEAA7I0AAOyNQADsjYAA7I3AAOyOAADsjoAA7I8AAOyPQADsj4AA7JAAAOyQQADsoAAA7KCAAOyhQADsocAA7KKAAOyiwADsowAA7KNAAOyjgADspAAA7KSAAOykwADspQAA7KWAAOylwADsqQAA7KlAAOypgADsqgAA7LnAAOy6QADsusAA7LtAAOy8AADsvEAA7LyAAOy8wADsvQAA7L2AAOy+AADsvkAA7L6AAOy/AADsv0AA7M8AAOzPgADs0AAA7NCAAOzRQADs0YAA7NHAAOzSAADs0kAA7NLAAOzTQADs04AA7NPAAOzUQADs1IAA7ORAAOzkwADs5UAA7OXAAOzmgADs5sAA7OcAAOznQADs54AA7OgAAOzogADs6MAA7OkAAOzpgADs6cAA7PmAAOz6AADs+oAA7PsAAOz7wADs/AAA7PxAAOz8gADs/MAA7P1AAOz9wADs/gAA7P5AAOz+wADs/wAA7Q7AAO0PQADtD8AA7RBAAO0RAADtEUAA7RGAAO0RwADtEgAA7RKAAO0TAADtE0AA7ROAAO0UAADtFEAA7R2AAO0mgADtMEAA7TlAAO06AADtOoAA7TsAAO07gADtPAAA7TyAAO08wADtPYAA7UDAAO1EgADtRQAA7UWAAO1GAADtRoAA7UcAAO1HgADtSAAA7UvAAO1MgADtTUAA7U4AAO1OwADtT4AA7VBAAO1RAADtUYAA7WFAAO1hwADtYkAA7WLAAO1jgADtY8AA7WQAAO1kQADtZIAA7WUAAO1lgADtZcAA7WYAAO1mgADtZsAA7XaAAO13AADtd4AA7XgAAO14wADteQAA7XlAAO15gADtecAA7XpAAO16wADtewAA7XtAAO17wADtfAAA7YvAAO2MQADtjMAA7Y1AAO2OAADtjkAA7Y6AAO2OwADtjwAA7Y+AAO2QAADtkEAA7ZCAAO2RAADtkUAA7aEAAO2hgADtogAA7aKAAO2jQADto4AA7aPAAO2kAADtpEAA7aTAAO2lQADtpYAA7aXAAO2mQADtpoAA7bZAAO22wADtt0AA7bfAAO24gADtuMAA7bkAAO25QADtuYAA7boAAO26gADtusAA7bsAAO27gADtu8AA7cuAAO3MAADtzIAA7c0AAO3NwADtzgAA7c5AAO3OgADtzsAA7c9AAO3PwADt0AAA7dBAAO3QwADt0QAA7eDAAO3hQADt4cAA7eJAAO3jAADt40AA7eOAAO3jwADt5AAA7eSAAO3lAADt5UAA7eWAAO3mAADt5kAA7eiAAO3owADt6UAA7foAAO4DAADuDAAA7hTAAO4egADuJoAA7jBAAO46AADuQgAA7ksAAO5UAADuVIAA7lVAAO5VwADuVkAA7lbAAO5XgADuWAAA7liAAO5ZAADuWYAA7loAAO5agADuW0AA7lwAAO5cQADuXYAA7mDAAO5hgADuYgAA7mLAAO5jgADuZAAA7m1AAO52QADugAAA7okAAO6JwADuikAA7orAAO6LQADui8AA7oxAAO6MgADujUAA7pCAAO6VQADulcAA7pZAAO6WwADul0AA7pfAAO6YQADumMAA7plAAO6ZwADunoAA7p9AAO6gAADuoMAA7qGAAO6iQADuowAA7qPAAO6kgADupUAA7qXAAO61gADutgAA7rbAAO63QADuuAAA7rhAAO64gADuuMAA7rkAAO65gADuugAA7rpAAO66gADuuwAA7rtAAO69gADuvcAA7r5AAO7OAADuzoAA7s8AAO7PgADu0EAA7tCAAO7QwADu0QAA7tFAAO7RwADu0kAA7tKAAO7SwADu00AA7tOAAO7jQADu48AA7uSAAO7lAADu5cAA7uYAAO7mQADu5oAA7ubAAO7nQADu58AA7ugAAO7oQADu6MAA7ukAAO7rQADu64AA7uwAAO77wADu/EAA7vzAAO79QADu/gAA7v5AAO7+gADu/sAA7v8AAO7/gADvAAAA7wBAAO8AgADvAQAA7wFAAO8RAADvEYAA7xJAAO8SwADvE4AA7xPAAO8UAADvFEAA7xSAAO8VAADvFYAA7xXAAO8WAADvFoAA7xbAAO8ZAADvGUAA7xnAAO8pgADvKgAA7yqAAO8rAADvK8AA7ywAAO8sQADvLIAA7yzAAO8tQADvLcAA7y4AAO8uQADvLsAA7y8AAO8+wADvP0AA70AAAO9AgADvQUAA70GAAO9BwADvQgAA70JAAO9CwADvQ0AA70OAAO9DwADvREAA70SAAO9HwADvSAAA70hAAO9IwADvWIAA71kAAO9ZgADvWgAA71rAAO9bAADvW0AA71uAAO9bwADvXEAA71zAAO9dAADvXUAA713AAO9eAADvbcAA725AAO9vAADvb4AA73BAAO9wgADvcMAA73EAAO9xQADvccAA73JAAO9ygADvcsAA73NAAO9zgADvekAA732AAO+DQADvhAAA74TAAO+FgADvhkAA74cAAO+HwADviIAA74lAAO+KAADvisAA74uAAO+RQADvkgAA75LAAO+TgADvlEAA75UAAO+VwADvloAA75dAAO+YAADvmMAA75mAAO+aAADvm8AA752AAO+fwADvoQAA76PAAO+mwADvqQAA76oAAO+sgADvroAA78FAAO/KAADv0gAA79oAAO/agADv2wAA79uAAO/cAADv3MAA790AAO/dQADv3gAA795AAO/ewADv3wAA79+AAO/gQADv4IAA7+DAAO/hgADv4cAA7+MAAO/mQADv54AA7+gAAO/ogADv6cAA7+qAAO/rQADv68AA7/UAAO/+AADwB8AA8BDAAPARgADwEgAA8BKAAPATAADwE4AA8BQAAPAUQADwFQAA8BhAAPAcgADwHQAA8B2AAPAeAADwHoAA8B8AAPAfgADwIAAA8CCAAPAkwADwJYAA8CZAAPAnAADwJ8AA8CiAAPApQADwKgAA8CrAAPArQADwOwAA8DuAAPA8AADwPIAA8D1AAPA9gADwPcAA8D4AAPA+QADwPsAA8D9AAPA/gADwP8AA8EBAAPBAgADwUEAA8FDAAPBRQADwUcAA8FKAAPBSwADwUwAA8FNAAPBTgADwVAAA8FSAAPBUwADwVQAA8FWAAPBVwADwZYAA8GYAAPBmwADwZ0AA8GgAAPBoQADwaIAA8GjAAPBpAADwaYAA8GoAAPBqQADwaoAA8GsAAPBrQADwboAA8G7AAPBvAADwb4AA8H9AAPB/wADwgEAA8IDAAPCBgADwgcAA8IIAAPCCQADwgoAA8IMAAPCDgADwg8AA8IQAAPCEgADwhMAA8JSAAPCVAADwlYAA8JYAAPCWwADwlwAA8JdAAPCXgADwl8AA8JhAAPCYwADwmQAA8JlAAPCZwADwmgAA8KnAAPCqQADwqsAA8KtAAPCsAADwrEAA8KyAAPCswADwrQAA8K2AAPCuAADwrkAA8K6AAPCvAADwr0AA8L8AAPC/gADwwAAA8MCAAPDBQADwwYAA8MHAAPDCAADwwkAA8MLAAPDDQADww4AA8MPAAPDEQADwxIAA8NRAAPDUwADw1UAA8NXAAPDWgADw1sAA8NcAAPDXQADw14AA8NgAAPDYgADw2MAA8NkAAPDZgADw2cAA8OMAAPDsAADw9cAA8P7AAPD/gADxAAAA8QCAAPEBAADxAYAA8QIAAPECQADxAwAA8QZAAPEKAADxCoAA8QsAAPELgADxDAAA8QyAAPENAADxDYAA8RFAAPESAADxEsAA8ROAAPEUQADxFQAA8RXAAPEWgADxFwAA8SbAAPEnQADxJ8AA8ShAAPEpAADxKUAA8SmAAPEpwADxKgAA8SqAAPErAADxK0AA8SuAAPEsAADxLEAA8TwAAPE8gADxPQAA8T2AAPE+QADxPoAA8T7AAPE/AADxP0AA8T/AAPFAQADxQIAA8UDAAPFBQADxQYAA8VFAAPFRwADxUkAA8VLAAPFTgADxU8AA8VQAAPFUQADxVIAA8VUAAPFVgADxVcAA8VYAAPFWgADxVsAA8WaAAPFnAADxZ4AA8WgAAPFowADxaQAA8WlAAPFpgADxacAA8WpAAPFqwADxawAA8WtAAPFrwADxbAAA8XvAAPF8QADxfMAA8X1AAPF+AADxfkAA8X6AAPF+wADxfwAA8X+AAPGAAADxgEAA8YCAAPGBAADxgUAA8ZEAAPGRgADxkgAA8ZKAAPGTQADxk4AA8ZPAAPGUAADxlEAA8ZTAAPGVQADxlYAA8ZXAAPGWQADxloAA8aZAAPGmwADxp0AA8afAAPGogADxqMAA8akAAPGpQADxqYAA8aoAAPGqgADxqsAA8asAAPGrgADxq8AA8b6AAPHHQADxz0AA8ddAAPHXwADx2EAA8djAAPHZQADx2gAA8dpAAPHagADx20AA8duAAPHcAADx3EAA8dzAAPHdgADx3cAA8d4AAPHewADx3wAA8eBAAPHjgADx5MAA8eVAAPHlwADx5wAA8efAAPHogADx6QAA8fJAAPH7QADyBQAA8g4AAPIOwADyD0AA8g/AAPIQQADyEMAA8hFAAPIRgADyEkAA8hWAAPIZwADyGkAA8hrAAPIbQADyG8AA8hxAAPIcwADyHUAA8h3AAPIiAADyIsAA8iOAAPIkQADyJQAA8iXAAPImgADyJ0AA8igAAPIogADyOEAA8jjAAPI5QADyOcAA8jqAAPI6wADyOwAA8jtAAPI7gADyPAAA8jyAAPI8wADyPQAA8j2AAPI9wADyTYAA8k4AAPJOgADyTwAA8k/AAPJQAADyUEAA8lCAAPJQwADyUUAA8lHAAPJSAADyUkAA8lLAAPJTAADyYsAA8mNAAPJkAADyZIAA8mVAAPJlgADyZcAA8mYAAPJmQADyZsAA8mdAAPJngADyZ8AA8mhAAPJogADya8AA8mwAAPJsQADybMAA8nyAAPJ9AADyfYAA8n4AAPJ+wADyfwAA8n9AAPJ/gADyf8AA8oBAAPKAwADygQAA8oFAAPKBwADyggAA8pHAAPKSQADyksAA8pNAAPKUAADylEAA8pSAAPKUwADylQAA8pWAAPKWAADylkAA8paAAPKXAADyl0AA8qcAAPKngADyqAAA8qiAAPKpQADyqYAA8qnAAPKqAADyqkAA8qrAAPKrQADyq4AA8qvAAPKsQADyrIAA8rxAAPK8wADyvUAA8r3AAPK+gADyvsAA8r8AAPK/QADyv4AA8sAAAPLAgADywMAA8sEAAPLBgADywcAA8tGAAPLSAADy0oAA8tMAAPLTwADy1AAA8tRAAPLUgADy1MAA8tVAAPLVwADy1gAA8tZAAPLWwADy1wAA8uBAAPLpQADy8wAA8vwAAPL8wADy/UAA8v3AAPL+QADy/sAA8v9AAPL/gADzAEAA8wOAAPMHQADzB8AA8whAAPMIwADzCUAA8wnAAPMKQADzCsAA8w6AAPMPQADzEAAA8xDAAPMRgADzEkAA8xMAAPMTwADzFEAA8yQAAPMkgADzJUAA8yXAAPMmgADzJsAA8ycAAPMnQADzJ4AA8ygAAPMogADzKMAA8ykAAPMpgADzKcAA8zmAAPM6AADzOoAA8zsAAPM7wADzPAAA8zxAAPM8gADzPMAA8z1AAPM9wADzPgAA8z5AAPM+wADzPwAA807AAPNPQADzT8AA81BAAPNRAADzUUAA81GAAPNRwADzUgAA81KAAPNTAADzU0AA81OAAPNUAADzVEAA82QAAPNkgADzZUAA82XAAPNmgADzZsAA82cAAPNnQADzZ4AA82gAAPNogADzaMAA82kAAPNpgADzacAA83mAAPN6AADzeoAA83sAAPN7wADzfAAA83xAAPN8gADzfMAA831AAPN9wADzfgAA835AAPN+wADzfwAA847AAPOPQADzj8AA85BAAPORAADzkUAA85GAAPORwADzkgAA85KAAPOTAADzk0AA85OAAPOUAADzlEAA86QAAPOkgADzpQAA86WAAPOmQADzpoAA86bAAPOnAADzp0AA86fAAPOoQADzqIAA86jAAPOpQADzqYAA87xAAPPFAADzzQAA89UAAPPVgADz1gAA89aAAPPXAADz18AA89gAAPPYQADz2QAA89lAAPPZwADz2gAA89qAAPPbQADz24AA89vAAPPcgADz3MAA894AAPPhQADz4oAA8+MAAPPjgADz5MAA8+WAAPPmQADz5sAA8/AAAPP5AAD0AsAA9AvAAPQMgAD0DQAA9A2AAPQOAAD0DoAA9A8AAPQPQAD0EAAA9BNAAPQXgAD0GAAA9BiAAPQZAAD0GYAA9BoAAPQagAD0GwAA9BuAAPQfwAD0IIAA9CFAAPQiAAD0IsAA9COAAPQkQAD0JQAA9CXAAPQmQAD0NgAA9DaAAPQ3AAD0N4AA9DhAAPQ4gAD0OMAA9DkAAPQ5QAD0OcAA9DpAAPQ6gAD0OsAA9DtAAPQ7gAD0S0AA9EvAAPRMQAD0TMAA9E2AAPRNwAD0TgAA9E5AAPROgAD0TwAA9E+AAPRPwAD0UAAA9FCAAPRQwAD0YIAA9GEAAPRhwAD0YkAA9GMAAPRjQAD0Y4AA9GPAAPRkAAD0ZIAA9GUAAPRlQAD0ZYAA9GYAAPRmQAD0aYAA9GnAAPRqAAD0aoAA9HpAAPR6wAD0e0AA9HvAAPR8gAD0fMAA9H0AAPR9QAD0fYAA9H4AAPR+gAD0fsAA9H8AAPR/gAD0f8AA9I+AAPSQAAD0kIAA9JEAAPSRwAD0kgAA9JJAAPSSgAD0ksAA9JNAAPSTwAD0lAAA9JRAAPSUwAD0lQAA9KTAAPSlQAD0pcAA9KZAAPSnAAD0p0AA9KeAAPSnwAD0qAAA9KiAAPSpAAD0qUAA9KmAAPSqAAD0qkAA9LoAAPS6gAD0uwAA9LuAAPS8QAD0vIAA9LzAAPS9AAD0vUAA9L3AAPS+QAD0voAA9L7AAPS/QAD0v4AA9M9AAPTPwAD00EAA9NDAAPTRgAD00cAA9NIAAPTSQAD00oAA9NMAAPTTgAD008AA9NQAAPTUgAD01MAA9N4AAPTnAAD08MAA9PnAAPT6gAD0+wAA9PuAAPT8AAD0/IAA9P0AAPT9QAD0/gAA9QFAAPUFAAD1BYAA9QYAAPUGgAD1BwAA9QeAAPUIAAD1CIAA9QxAAPUNAAD1DcAA9Q6AAPUPQAD1EAAA9RDAAPURgAD1EgAA9SHAAPUiQAD1IsAA9SNAAPUkAAD1JEAA9SSAAPUkwAD1JQAA9SWAAPUmAAD1JkAA9SaAAPUnAAD1J0AA9TcAAPU3gAD1OAAA9TiAAPU5QAD1OYAA9TnAAPU6AAD1OkAA9TrAAPU7QAD1O4AA9TvAAPU8QAD1PIAA9UxAAPVMwAD1TUAA9U3AAPVOgAD1TsAA9U8AAPVPQAD1T4AA9VAAAPVQgAD1UMAA9VEAAPVRgAD1UcAA9WGAAPViAAD1YoAA9WMAAPVjwAD1ZAAA9WRAAPVkgAD1ZMAA9WVAAPVlwAD1ZgAA9WZAAPVmwAD1ZwAA9XbAAPV3QAD1d8AA9XhAAPV5AAD1eUAA9XmAAPV5wAD1egAA9XqAAPV7AAD1e0AA9XuAAPV8AAD1fEAA9YwAAPWMgAD1jQAA9Y2AAPWOQAD1joAA9Y7AAPWPAAD1j0AA9Y/AAPWQQAD1kIAA9ZDAAPWRQAD1kYAA9aFAAPWhwAD1okAA9aLAAPWjgAD1o8AA9aQAAPWkQAD1pIAA9aUAAPWlgAD1pcAA9aYAAPWmgAD1psAA9bmAAPXCQAD1ykAA9dJAAPXSwAD100AA9dPAAPXUQAD11QAA9dVAAPXVgAD11kAA9daAAPXXAAD110AA9dfAAPXYgAD12MAA9dkAAPXZwAD12gAA9dtAAPXegAD138AA9eBAAPXgwAD14gAA9eLAAPXjgAD15AAA9e1AAPX2QAD2AAAA9gkAAPYJwAD2CkAA9grAAPYLQAD2C8AA9gxAAPYMgAD2DUAA9hCAAPYUwAD2FUAA9hXAAPYWQAD2FsAA9hdAAPYXwAD2GEAA9hjAAPYdAAD2HcAA9h6AAPYfQAD2IAAA9iDAAPYhgAD2IkAA9iMAAPYjgAD2M0AA9jPAAPY0QAD2NMAA9jWAAPY1wAD2NgAA9jZAAPY2gAD2NwAA9jeAAPY3wAD2OAAA9jiAAPY4wAD2SIAA9kkAAPZJgAD2SgAA9krAAPZLAAD2S0AA9kuAAPZLwAD2TEAA9kzAAPZNAAD2TUAA9k3AAPZOAAD2XcAA9l5AAPZfAAD2X4AA9mBAAPZggAD2YMAA9mEAAPZhQAD2YcAA9mJAAPZigAD2YsAA9mNAAPZjgAD2ZsAA9mcAAPZnQAD2Z8AA9neAAPZ4AAD2eIAA9nkAAPZ5wAD2egAA9npAAPZ6gAD2esAA9ntAAPZ7wAD2fAAA9nxAAPZ8wAD2fQAA9ozAAPaNQAD2jcAA9o5AAPaPAAD2j0AA9o+AAPaPwAD2kAAA9pCAAPaRAAD2kUAA9pGAAPaSAAD2kkAA9qIAAPaigAD2owAA9qOAAPakQAD2pIAA9qTAAPalAAD2pUAA9qXAAPamQAD2poAA9qbAAPanQAD2p4AA9rdAAPa3wAD2uEAA9rjAAPa5gAD2ucAA9roAAPa6QAD2uoAA9rsAAPa7gAD2u8AA9rwAAPa8gAD2vMAA9syAAPbNAAD2zYAA9s4AAPbOwAD2zwAA9s9AAPbPgAD2z8AA9tBAAPbQwAD20QAA9tFAAPbRwAD20g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AA+Z/AAPmgQAD5oIAA+aDAAPmhQAD5oYAA+bRAAPm9AAD5xQAA+c0AAPnNgAD5zgAA+c6AAPnPAAD5z8AA+dAAAPnQQAD50QAA+dFAAPnRwAD50gAA+dKAAPnTQAD504AA+dPAAPnUgAD51MAA+dYAAPnZQAD52oAA+dsAAPnbgAD53MAA+d2AAPneQAD53sAA+egAAPnxAAD5+sAA+gPAAPoEgAD6BQAA+gWAAPoGAAD6BoAA+gcAAPoHQAD6CAAA+gtAAPoPgAD6EAAA+hCAAPoRAAD6EYAA+hIAAPoSgAD6EwAA+hOAAPoXwAD6GIAA+hlAAPoaAAD6GsAA+huAAPocQAD6HQAA+h3AAPoeQAD6LgAA+i6AAPovAAD6L4AA+jBAAPowgAD6MMAA+jEAAPoxQAD6McAA+jJAAPoygAD6MsAA+jNAAPozgAD6Q0AA+kPAAPpEQAD6RMAA+kWAAPpFwAD6RgAA+kZAAPpGgAD6RwAA+keAAPpHwAD6SAAA+kiAAPpIwAD6WIAA+lkAAPpZwAD6WkAA+lsAAPpbQAD6W4AA+lvAAPpcAAD6XIAA+l0AAPpdQAD6XYAA+l4AAPpeQAD6YYAA+mHAAPpiAAD6YoAA+nJAAPpywAD6c0AA+nPAAPp0gAD6dMAA+nUAAPp1QAD6dYAA+nYAAPp2gAD6dsAA+ncAAPp3gAD6d8AA+oeAAPqIAAD6iIAA+okAAPqJwAD6igAA+opAAPqKgAD6isAA+otAAPqLwAD6jAAA+oxAAPqMwAD6jQAA+pzAAPqdQAD6ncAA+p5AAPqfAAD6n0AA+p+AAPqfwAD6oAAA+qCAAPqhAAD6oUAA+qGAAPqiAAD6okAA+rIAAPqygAD6swAA+rOAAPq0QAD6tIAA+rTAAPq1AAD6tUAA+rXAAPq2QAD6toAA+rbAAPq3QAD6t4AA+sdAAPrHwAD6yEAA+sjAAPrJgAD6ycAA+soAAPrKQAD6yoAA+ssAAPrLgAD6y8AA+swAAPrMgAD6zMAA+tYAAPrfAAD66MAA+vHAAPrygAD68wAA+vOAAPr0AAD69IAA+vUAAPr1QAD69gAA+vlAAPr9AAD6/YAA+v4AAPr+gAD6/wAA+v+AAPsAAAD7AIAA+wRAAPsFAAD7BcAA+waAAPsHQAD7CAAA+wjAAPsJgAD7CgAA+xnAAPsaQAD7Gs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AA/dhAAP3ZAAD92cAA/dpAAP3jgAD97IAA/fZAAP3/QAD+AAAA/gCAAP4BAAD+AYAA/gIAAP4CgAD+AsAA/gOAAP4GwAD+CwAA/guAAP4MAAD+DIAA/g0AAP4NgAD+DgAA/g6AAP4PAAD+E0AA/hQAAP4UwAD+FYAA/hZAAP4XAAD+F8AA/hiAAP4ZQAD+GcAA/imAAP4qAAD+KoAA/isAAP4rwAD+LAAA/ixAAP4sgAD+LMAA/i1AAP4twAD+LgAA/i5AAP4uwAD+LwAA/j7AAP4/QAD+P8AA/kBAAP5BAAD+QUAA/kGAAP5BwAD+QgAA/kKAAP5DAAD+Q0AA/kOAAP5EAAD+REAA/lQAAP5UgAD+VUAA/lXAAP5WgAD+VsAA/lcAAP5XQAD+V4AA/lgAAP5YgAD+WMAA/lkAAP5ZgAD+WcAA/l0AAP5dQAD+XYAA/l4AAP5twAD+bkAA/m7AAP5vQAD+cAAA/nBAAP5wgAD+cMAA/nEAAP5xgAD+cgAA/nJAAP5ygAD+cwAA/nNAAP6DAAD+g4AA/oQAAP6EgAD+hUAA/oWAAP6FwAD+hgAA/oZAAP6GwAD+h0AA/oeAAP6HwAD+iEAA/oiAAP6YQAD+mMAA/plAAP6ZwAD+moAA/prAAP6bAAD+m0AA/puAAP6cAAD+nIAA/pzAAP6dAAD+nYAA/p3AAP6tgAD+rgAA/q6AAP6vAAD+r8AA/rAAAP6wQAD+sIAA/rDAAP6xQAD+scAA/rIAAP6yQAD+ssAA/rMAAP7CwAD+w0AA/sPAAP7EQAD+xQAA/sVAAP7FgAD+xcAA/sYAAP7GgAD+xwAA/sdAAP7HgAD+yAAA/shAAP7RgAD+2oAA/uRAAP7tQAD+7gAA/u6AAP7vAAD+74AA/vAAAP7wgAD+8MAA/vGAAP70wAD++IAA/vkAAP75gAD++gAA/vqAAP77AAD++4AA/vwAAP7/wAD/AIAA/wFAAP8CAAD/AsAA/wOAAP8EQAD/BQAA/wWAAP8VQAD/FcAA/xZAAP8WwAD/F4AA/xfAAP8YAAD/GEAA/xiAAP8ZAAD/GYAA/xnAAP8aAAD/GoAA/xrAAP8qgAD/KwAA/yuAAP8sAAD/LMAA/y0AAP8tQAD/LYAA/y3AAP8uQAD/LsAA/y8AAP8vQAD/L8AA/zAAAP8/wAD/QEAA/0DAAP9BQAD/Qg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ABAhMAAQITwAECFEABAiQAAQIkgAECJQABAiWAAQImQAECJoABAibAAQInAAECJ0ABAifAAQIoQAECKIABAijAAQIpQAECKYABAjlAAQI5wAECOkABAjrAAQI7gAECO8ABAjwAAQI8QAECPIABAj0AAQI9gAECPcABAj4AAQI+gAECPsABAk6AAQJPAAECT8ABAlBAAQJRAAECUUABAlGAAQJRwAECUgABAlKAAQJTAAECU0ABAlOAAQJUAAECVEABAleAAQJXwAECWAABAliAAQJoQAECaMABAmlAAQJpwAECaoABAmrAAQJrAAECa0ABAmuAAQJsAAECbIABAmzAAQJtAAECbYABAm3AAQJ9gAECfgABAn6AAQJ/AAECf8ABAoAAAQKAQAECgIABAoDAAQKBQAECgcABAoIAAQKCQAECgsABAoMAAQKSwAECk0ABApPAAQKUQAEClQABApVAAQKVgAEClcABApYAAQKWgAEClwABApdAAQKXgAECmAABAphAAQKoAAECqIABAqkAAQKpgAECqkABAqqAAQKqwAECqwABAqtAAQKrwAECrEABAqyAAQKswAECrUABAq2AAQK9QAECvcABAr5AAQK+wAECv4ABAr/AAQLAAAECwEABAsCAAQLBAAECwYABAsHAAQLCAAECwoABAsLAAQLMAAEC1QABAt7AAQLnwAEC6IABAukAAQLpgAEC6gABAuqAAQLrAAEC60ABAuwAAQLvQAEC8wABAvOAAQL0AAEC9IABAvUAAQL1gAEC9gABAvaAAQL6QAEC+wABAvvAAQL8gAEC/UABAv4AAQL+wAEC/4ABAwAAAQMPwAEDEEABAxEAAQMRgAEDEkABAxKAAQMSwAEDEwABAxNAAQMTwAEDFEABAxSAAQMUwAEDFUABAxWAAQMlQAEDJcABAyZAAQMmwAEDJ4ABAyfAAQMoAAEDKEABAyiAAQMpAAEDKYABAynAAQMqAAEDKoABAyrAAQM6gAEDOwABAzuAAQM8AAEDPMABAz0AAQM9QAEDPYABAz3AAQM+QAEDPsABAz8AAQM/QAEDP8ABA0AAAQNPwAEDUEABA1EAAQNRgAEDUkABA1KAAQNSwAEDUwABA1NAAQNTwAEDVEABA1SAAQNUwAEDVUABA1WAAQNlQAEDZcABA2ZAAQNmwAEDZ4ABA2fAAQNoAAEDaE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ABCSsAAQkrgAEJLAABCSxAAQksgAEJLQABCS1AAQlAAAEJSMABCVDAAQlYwAEJWUABCVnAAQlaQAEJWsABCVuAAQlbwAEJXAABCVzAAQldAAEJXYABCV3AAQleQAEJXwABCV9AAQlfgAEJYEABCWCAAQliwAEJZgABCWdAAQlnwAEJaEABCWmAAQlqQAEJawABCWuAAQl0wAEJfcABCYeAAQmQgAEJkUABCZHAAQmSQAEJksABCZNAAQmTwAEJlAABCZTAAQmYAAEJnEABCZzAAQmdQAEJncABCZ5AAQmewAEJn0ABCZ/AAQmgQAEJpIABCaVAAQmmAAEJpsABCaeAAQmoQAEJqQABCanAAQmqgAEJqwABCbrAAQm7QAEJu8ABCbxAAQm9AAEJvUABCb2AAQm9wAEJvgABCb6AAQm/AAEJv0ABCb+AAQnAAAEJwEABCdAAAQnQgAEJ0QABCdGAAQnSQAEJ0oABCdLAAQnTAAEJ00ABCdPAAQnUQAEJ1IABCdTAAQnVQAEJ1YABCeVAAQnlwAEJ5oABCecAAQnnwAEJ6AABCehAAQnogAEJ6MABCelAAQnpwAEJ6gABCepAAQnqwAEJ6wABCe5AAQnugAEJ7sABCe9AAQn/AAEJ/4ABCgAAAQoAgAEKAUABCgGAAQoBwAEKAgABCgJAAQoCwAEKA0ABCgOAAQoDwAEKBEABCgSAAQoUQAEKFMABChVAAQoVwAEKFoABChbAAQoXAAEKF0ABCheAAQoYAAEKGIABChjAAQoZAAEKGYABChnAAQopgAEKKgABCiqAAQorAAEKK8ABCiwAAQosQAEKLIABCizAAQotQAEKLcABCi4AAQouQAEKLsABCi8AAQo+wAEKP0ABCj/AAQpAQAEKQQABCkFAAQpBgAEKQcABCkIAAQpCgAEKQwABCkNAAQpDgAEKRAABCkRAAQpUAAEKVIABClUAAQpVgAEKVkABClaAAQpWwAEKVwABCldAAQpXwAEKWEABCliAAQpYwAEKWUABClmAAQpiwAEKa8ABCnWAAQp+gAEKf0ABCn/AAQqAQAEKgMABCoFAAQqBwAEKggABCoLAAQqGAAEKicABCopAAQqKwAEKi0ABCovAAQqMQAEKjMABCo1AAQqRAAEKkcABCpKAAQqTQAEKlAABCpTAAQqVgAEKlkABCpbAAQqmgAEKpw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ABDZqAAQ2qQAENqsABDatAAQ2rwAENrIABDazAAQ2tAAENrUABDa2AAQ2uAAENroABDa7AAQ2vAAENr4ABDa/AAQ2/gAENwAABDcCAAQ3BAAENwcABDcIAAQ3CQAENwoABDcLAAQ3DQAENw8ABDcQAAQ3EQAENxMABDcUAAQ3UwAEN1UABDdXAAQ3WQAEN1wABDddAAQ3XgAEN18ABDdgAAQ3YgAEN2QABDdlAAQ3ZgAEN2gABDdpAAQ3qAAEN6oABDesAAQ3rgAEN7EABDeyAAQ3swAEN7QABDe1AAQ3twAEN7kABDe6AAQ3uwAEN70ABDe+AAQ3/QAEN/8ABDgBAAQ4AwAEOAYABDgHAAQ4CAAEOAkABDgKAAQ4DAAEOA4ABDgPAAQ4EAAEOBIABDgTAAQ4OAAEOFwABDiDAAQ4pwAEOKoABDisAAQ4rgAEOLAABDiyAAQ4tAAEOLUABDi4AAQ4xQAEONQABDjWAAQ42AAEONoABDjcAAQ43gAEOOAABDjiAAQ48QAEOPQABDj3AAQ4+gAEOP0ABDkAAAQ5AwAEOQYABDkIAAQ5RwAEOUkABDlLAAQ5TQAEOVAABDlRAAQ5UgAEOVMABDlUAAQ5VgAEOVgABDlZAAQ5WgAEOVwABDldAAQ5nAAEOZ4ABDmgAAQ5ogAEOaUABDmmAAQ5pwAEOagABDmpAAQ5qwAEOa0ABDmuAAQ5rwAEObEABDmyAAQ58QAEOfMABDn1AAQ59wAEOfoABDn7AAQ5/AAEOf0ABDn+AAQ6AAAEOgIABDoDAAQ6BAAEOgYABDoHAAQ6RgAEOkgABDpLAAQ6TQAEOlAABDpRAAQ6UgAEOlMABDpUAAQ6VgAEOlgABDpZAAQ6WgAEOlwABDpdAAQ6nAAEOp4ABDqgAAQ6ogAEOqUABDqmAAQ6pwAEOqgABDqpAAQ6qwAEOq0ABDquAAQ6rwAEOrEABDqyAAQ68QAEOvMABDr1AAQ69wAEOvoABDr7AAQ6/AAEOv0ABDr+AAQ7AAAEOwIABDsDAAQ7BAAEOwYABDsHAAQ7RgAEO0gABDtKAAQ7TAAEO08ABDtQAAQ7UQAEO1IABDtTAAQ7VQAEO1cABDtYAAQ7WQAEO1sABDtcAAQ7pwAEO8oABDvqAAQ8CgAEPAwABDwOAAQ8EAAEPBIABDwVAAQ8FgAEPBcABDwaAAQ8GwAEPB0ABDweAAQ8IAAEPCMABDwkAAQ8JQAEPCgABDwpAAQ8LgAEPDsABDxAAAQ8QgAEPEQABDxJAAQ8TAAEPE8ABDxRAAQ8dgAEPJoABDzBAAQ85QAEPOgABDzqAAQ87AAEPO4ABDzwAAQ88gAEPPMABDz2AAQ9AwAEPRQABD0WAAQ9GAAEPRoABD0cAAQ9HgAEPSAABD0iAAQ9JAAEPTUABD04AAQ9OwAEPT4ABD1BAAQ9RAAEPUcABD1KAAQ9TQAEPU8ABD2OAAQ9kAAEPZIABD2UAAQ9lwAEPZgABD2ZAAQ9mgAEPZsABD2dAAQ9nwAEPaAABD2hAAQ9owAEPaQABD3jAAQ95QAEPecABD3pAAQ97AAEPe0ABD3uAAQ97wAEPfAABD3yAAQ99AAEPfUABD32AAQ9+AAEPfkABD44AAQ+OgAEPj0ABD4/AAQ+QgAEPkMABD5EAAQ+RQAEPkYABD5IAAQ+SgAEPksABD5MAAQ+TgAEPk8ABD5cAAQ+XQAEPl4ABD5gAAQ+nwAEPqEABD6jAAQ+pQAEPqgABD6pAAQ+qgAEPqsABD6sAAQ+rgAEPrAABD6xAAQ+sgAEPrQABD61AAQ+9AAEPvYABD74AAQ++gAEPv0ABD7+AAQ+/wAEPwAABD8BAAQ/AwAEPwUABD8GAAQ/BwAEPwkABD8KAAQ/SQAEP0sABD9NAAQ/TwAEP1IABD9TAAQ/VAAEP1UABD9WAAQ/WAAEP1oABD9bAAQ/XAAEP14ABD9fAAQ/ngAEP6AABD+iAAQ/pAAEP6cABD+oAAQ/qQAEP6oABD+rAAQ/rQAEP68ABD+wAAQ/sQAEP7MABD+0AAQ/8wAEP/UABD/3AAQ/+QAEP/wABD/9AAQ//gAEP/8ABEAAAARAAgAEQAQABEAFAARABgAEQAgABEAJAARALgAEQFIABEB5AARAnQAEQKAABECiAARApAAEQKYABECoAARAqgAEQKsABECuAARAuwAEQMoABEDMAARAzgAEQNAABEDSAARA1AAEQNYABEDYAARA5wAEQOoABEDtAARA8AAEQPMABED2AARA+QAEQPwABED+AARBPQAEQT8ABEFBAARBQwAEQUYABEFHAARBSAAEQUkABEFKAARBTAAEQU4ABEFPAARBUAAEQVIABEFTAARBkgAEQZQABEGWAARBmAAEQZsABEGcAARBnQAEQZ4ABEGfAARBoQAEQaMABEGkAARBpQAEQacABEGoAARB5wAEQekABEHrAARB7QAEQfAABEHxAARB8gAEQfMABEH0AARB9gAEQfgABEH5AARB+gAEQfwABEH9AARCPAAEQj4ABEJBAARCQwAEQkYABEJHAARCSAAEQkkABEJKAARCTAAEQk4ABEJPAARCUAAEQlIABEJTAARCkgAEQpQABEKWAARCmAAEQpsABEKcAARCnQAEQp4ABEKfAARCoQAEQqMABEKkAARCpQAEQqcABEKoAARC5wAEQukABELrAARC7QAEQvAABELxAARC8gAEQvMABEL0AARC9gAEQvgABEL5AARC+gAEQvwABEL9AARDPAAEQz4ABENAAARDQgAEQ0UABENGAARDRwAEQ0gABENJAARDSwAEQ00ABENOAARDTwAEQ1EABENSAARDnQAEQ8AABEPgAAREAAAERAIABEQEAAREBgAERAgABEQLAAREDAAERA0ABEQQAAREEQAERBMABEQUAAREFgAERBkABEQaAAREGwAERB4ABEQfAAREJAAERDEABEQ2AAREOAAERDoABEQ/AAREQgAEREUABERHAAREbAAERJAABES3AARE2wAERN4ABETgAARE4gAEROQABETmAARE6AAEROkABETsAARE+QAERQoABEUMAARFDgAERRAABEUSAARFFAAERRYABEUYAARFGgAERSsABEUuAARFMQAERTQABEU3AARFOgAERT0ABEVAAARFQwAERUUABEWEAARFhgAERYgABEWKAARFjQAERY4ABEWPAARFkAAERZEABEWTAARFlQAERZYABEWXAARFmQAERZoABEXZAARF2wAERd0ABEXfAARF4gAEReMABEXkAARF5QAEReYABEXoAARF6gAEResABEXsAARF7gAERe8ABEYuAARGMAAERjMABEY1AARGOAAERjkABEY6AARGOwAERjwABEY+AARGQAAERkEABEZCAARGRAAERkUABEZSAARGUwAERlQABEZWAARGlQAERpcABEaZAARGmwAERp4ABEafAARGoAAERqEABEaiAARGpAAERqYABEanAARGqAAERqoABEarAARG6gAERuwABEbuAARG8AAERvMABEb0AARG9QAERvYABEb3AARG+QAERvsABEb8AARG/QAERv8ABEcAAARHPwAER0EABEdDAARHRQAER0gABEdJAARHSgAER0sABEdMAARHTgAER1AABEdRAARHUgAER1QABEdVAARHlAAER5YABEeYAARHmgAER50ABEeeAARHnwAER6AABEehAARHowAER6UABEemAARHpwAER6kABEeqAARH6QAER+sABEftAARH7wAER/IABEfzAARH9AAER/UABEf2AARH+AAER/oABEf7AARH/AAER/4ABEf/AARIJAAESEgABEhvAARIkwAESJYABEiYAARImgAESJwABEieAARIoAAESKEABEikAARIsQAESMAABEjCAARIxAAESMYABEjIAARIygAESMwABEjOAARI3QAESOAABEjjAARI5gAESOkABEjsAARI7wAESPIABEj0AARJMwAESTUABEk3AARJOQAESTwABEk9AARJPgAEST8ABElAAARJQgAESUQABElFAARJRgAESUgABElJAARJiAAESYoABEmMAARJjgAESZEABEmSAARJkwAESZQABEmVAARJlwAESZkABEmaAARJmwAESZ0ABEmeAARJ3QAESd8ABEnhAARJ4wAESeYABEnnAARJ6AAESekABEnqAARJ7AAESe4ABEnvAARJ8AAESfIABEnzAARKMgAESjQABEo2AARKOAAESjsABEo8AARKPQAESj4ABEo/AARKQQAESkMABEpEAARKRQAESkcABEpIAARKhwAESokABEqLAARKjQAESpAABEqRAARKkgAESpMABEqUAARKlgAESpgABEqZAARKmgAESpwABEqdAARK3AAESt4ABErgAARK4gAESuUABErmAARK5wAESugABErpAARK6wAESu0ABEruAARK7wAESvEABEryAARLMQAESzMABEs1AARLNwAESzoABEs7AARLPAAESz0ABEs+AARLQAAES0IABEtDAARLRAAES0YABEtHAARLkgAES7UABEvVAARL9QAES/cABEv5AARL+wAES/0ABEwAAARMAQAETAIABEwFAARMBgAETAgABEwJAARMCwAETA4ABEwPAARMEAAETBMABEwUAARMGQAETCYABEwrAARMLQAETC8ABEw0AARMNwAETDoABEw8AARMYQAETIUABEysAARM0AAETNMABEzVAARM1wAETNkABEzbAARM3QAETN4ABEzhAARM7gAETP8ABE0BAARNAwAETQUABE0HAARNCQAETQsABE0NAARNDwAETSAABE0jAARNJgAETSkABE0sAARNLwAETTIABE01AARNOAAETToABE15AARNewAETX0ABE1/AARNggAETYMABE2EAARNhQAETYYABE2IAARNigAETYsABE2MAARNjgAETY8ABE3OAARN0AAETdIABE3UAARN1wAETdgABE3ZAARN2gAETdsABE3dAARN3wAETeAABE3hAARN4wAETeQABE4jAAROJQAETigABE4qAAROLQAETi4ABE4vAAROMAAETjEABE4zAARONQAETjYABE43AAROOQAETjoABE5HAAROSAAETkkABE5LAAROigAETowABE6OAAROkAAETpMABE6UAAROlQAETpYABE6XAAROmQAETpsABE6cAAROnQAETp8ABE6gAARO3wAETuEABE7jAARO5QAETugABE7pAARO6gAETusABE7sAARO7gAETvAABE7xAARO8gAETvQABE71AARPNAAETzYABE84AARPOgAETz0ABE8+AARPPwAET0AABE9BAARPQwAET0UABE9GAARPRwAET0kABE9KAARPiQAET4sABE+NAARPjwAET5IABE+TAARPlAAET5UABE+WAARPmAAET5oABE+bAARPnAAET54ABE+fAARP3gAET+AABE/iAARP5AAET+cABE/oAARP6QAET+oABE/rAARP7QAET+8ABE/wAARP8QAET/MABE/0AARQGQAEUD0ABFBkAARQiAAEUIsABFCNAARQjwAEUJEABFCTAARQlQAEUJYABFCZAARQpgAEULUABFC3AARQuQAEULsABFC9AARQvwAEUMEABFDDAARQ0gAEUNUABFDYAARQ2wAEUN4ABFDhAARQ5AAEUOcABFDpAARRKAAEUSoABFEtAARRLwAEUTIABFEzAARRNAAEUTUABFE2AARROAAEUToABFE7AARRPAAEUT4ABFE/AARRfgAEUYAABFGCAARRhAAEUYcABFGIAARRiQAEUYoABFGLAARRjQAEUY8ABFGQAARRkQAEUZMABFGUAARR0wAEUdUABFHXAARR2QAEUdwABFHdAARR3gAEUd8ABFHgAARR4gAEUeQABFHlAARR5gAEUegABFHpAARSKAAEUioABFItAARSLwAEUjIABFIzAARSNAAEUjUABFI2AARSOAAEUjoABFI7AARSPAAEUj4ABFI/AARSQQAEUoAABFKCAARShAAEUoYABFKJAARSigAEUosABFKMAARSjQAEUo8ABFKRAARSkgAEUpMABFKVAARSlgAEUtUABFLXAARS2QAEUtsABFLeAARS3wAEUuAABFLhAARS4gAEUuQABFLmAARS5wAEUugABFLqAARS6wAEUyoABFMsAARTLgAEUzAABFMzAARTNAAEUzUABFM2AARTNwAEUzkABFM7AARTPAAEUz0ABFM/AARTQAAEU4sABFOuAARTzgAEU+4ABFPwAART8gAEU/QABFP2AART+QAEU/oABFP7AART/gAEU/8ABFQBAARUAgAEVAQABFQHAARUCAAEVAkABFQMAARUDQAEVBIABFQfAARUJAAEVCYABFQoAARULQAEVDAABFQzAARUNQAEVFoABFR+AARUpQAEVMkABFTMAARUzgAEVNAABFTSAARU1AAEVNYABFTXAARU2gAEVOcABFT4AARU+gAEVPwABFT+AARVAAAEVQIABFUEAARVBgAEVQgABFUZAARVHAAEVR8ABFUiAARVJQAEVSgABFUrAARVLgAEVTEABFUzAARVcgAEVXQABFV2AARVeAAEVXsABFV8AARVfQAEVX4ABFV/AARVgQAEVYMABFWEAARVhQAEVYcABFWIAARVxwAEVckABFXLAARVzQAEVdAABFXRAARV0gAEVdMABFXUAARV1gAEVdgABFXZAARV2gAEVdwABFXdAARWHAAEVh4ABFYhAARWIwAEViYABFYnAARWKAAEVikABFYqAARWLAAEVi4ABFYvAARWMAAEVjIABFYzAARWQAAEVkEABFZCAARWRAAEVoMABFaFAARWhwAEVokABFaMAARWjQAEVo4ABFaPAARWkAAEVpIABFaUAARWlQAEVpYABFaYAARWmQAEVtgABFbaAARW3AAEVt4ABFbhAARW4gAEVuMABFbkAARW5QAEVucABFbpAARW6gAEVusABFbtAARW7gAEVy0ABFcvAARXMQAEVzMABFc2AARXNwAEVzgABFc5AARXOgAEVzwABFc+AARXPwAEV0AABFdCAARXQwAEV4IABFeEAARXhgAEV4gABFeLAARXjAAEV40ABFeOAARXjwAEV5EABFeTAARXlAAEV5UABFeXAARXmAAEV9cABFfZAARX2wAEV90ABFfgAARX4QAEV+IABFfjAARX5AAEV+YABFfoAARX6QAEV+oABFfsAARX7QAEWBIABFg2AARYXQAEWIEABFiEAARYhgAEWIgABFiKAARYjAAEWI4ABFiPAARYkgAEWJ8ABFiuAARYsAAEWLIABFi0AARYtgAEWLgABFi6AARYvAAEWMsABFjOAARY0QAEWNQABFjXAARY2gAEWN0ABFjgAARY4gAEWSEABFkjAARZJgAEWSgABFkrAARZLAAEWS0ABFkuAARZLwAEWTEABFkzAARZNAAEWTUABFk3AARZOAAEWXcABFl5AARZewAEWX0ABFmAAARZgQAEWYIABFmDAARZhAAEWYYABFmIAARZiQAEWYoABFmMAARZjQAEWcwABFnOAARZ0AAEWdIABFnVAARZ1gAEWdcABFnYAARZ2QAEWdsABFndAARZ3gAEWd8ABFnhAARZ4gAEWiEABFojAARaJgAEWigABForAARaLAAEWi0ABFouAARaLwAEWjEABFozAARaNAAEWjUABFo3AARaOAAEWncABFp5AARaewAEWn0ABFqAAARagQAEWoIABFqDAARahAAEWoYABFqIAARaiQAEWooABFqMAARajQAEWswABFrOAARa0AAEWtIABFrVAARa1gAEWtcABFrYAARa2QAEWtsABFrdAARa3gAEWt8ABFrhAARa4gAEWyEABFsjAARbJQAEWycABFsqAARbKwAEWywABFstAARbLgAEWzAABFsyAARbMwAEWzQABFs2AARbNwAEW0AABFtBAARbQwAEW4YABFuqAARbzgAEW/EABFwYAARcOAAEXF8ABFyGAARcpgAEXMoABFzuAARc8AAEXPMABFz1AARc9wAEXPkABFz8AARc/gAEXQAABF0CAARdBAAEXQYABF0IAARdCwAEXQ4ABF0PAARdFAAEXSEABF0kAARdJgAEXSkABF0sAARdLgAEXVMABF13AARdngAEXcIABF3FAARdxwAEXckABF3LAARdzQAEXc8ABF3QAARd0wAEXeAABF3zAARd9QAEXfcABF35AARd+wAEXf0ABF3/AAReAQAEXgMABF4FAAReGAAEXhsABF4eAAReIQAEXiQABF4nAAReKgAEXi0ABF4wAAReMwAEXjUABF50AARedgAEXnkABF57AARefgAEXn8ABF6AAARegQAEXoIABF6EAARehgAEXocABF6IAAReigAEXosABF6UAARelQAEXpcABF7WAARe2AAEXtoABF7cAARe3wAEXuAABF7hAARe4gAEXuMABF7lAARe5wAEXugABF7pAARe6wAEXuwABF8rAARfLQAEXzAABF8yAARfNQAEXzYABF83AARfOAAEXzkABF87AARfPQAEXz4ABF8/AARfQQAEX0IABF9LAARfTAAEX04ABF+NAARfjwAEX5EABF+TAARflgAEX5cABF+YAARfmQAEX5oABF+cAARfngAEX58ABF+gAARfogAEX6MABF/iAARf5AAEX+cABF/pAARf7AAEX+0ABF/uAARf7wAEX/AABF/yAARf9AAEX/UABF/2AARf+AAEX/kABGACAARgAwAEYAUABGBEAARgRgAEYEgABGBKAARgTQAEYE4ABGBPAARgUAAEYFEABGBTAARgVQAEYFYABGBXAARgWQAEYFoABGCZAARgmwAEYJ4ABGCgAARgowAEYKQABGClAARgpgAEYKcABGCpAARgqwAEYKwABGCtAARgrwAEYLAABGC9AARgvgAEYL8ABGDBAARhAAAEYQIABGEEAARhBgAEYQkABGEKAARhCwAEYQwABGENAARhDwAEYREABGESAARhEwAEYRUABGEWAARhVQAEYVcABGFaAARhXAAEYV8ABGFgAARhYQAEYWIABGFjAARhZQAEYWcABGFoAARhaQAEYWsABGFsAARhiAAEYZUABGGgAARhowAEYaYABGGpAARhrAAEYa8ABGG6AARhvQAEYcAABGHDAARhxgAEYckABGHLAARh3gAEYewABGH1AARiBwAEYlIABGJ1AARilQAEYrUABGK3AARiuQAEYrsABGK9AARiwAAEYsEABGLCAARixQAEYsYABGLIAARiyQAEYssABGLOAARizwAEYtAABGLTAARi1AAEYtkABGLmAARi6wAEYu0ABGLvAARi9AAEYvcABGL6AARi/AAEYyEABGNFAARjbAAEY5AABGOTAARjlQAEY5cABGOZAARjmwAEY50ABGOeAARjoQAEY64ABGO/AARjwQAEY8MABGPFAARjxwAEY8kABGPLAARjzQAEY88ABGPgAARj4wAEY+YABGPpAARj7AAEY+8ABGPyAARj9QAEY/gABGP6AARkOQAEZDsABGQ9AARkPwAEZEIABGRDAARkRAAEZEUABGRGAARkSAAEZEoABGRLAARkTAAEZE4ABGRPAARkjgAEZJAABGSSAARklAAEZJcABGSYAARkmQAEZJoABGSbAARknQAEZJ8ABGSgAARkoQAEZKMABGSkAARk4wAEZOUABGToAARk6gAEZO0ABGTuAARk7wAEZPAABGTxAARk8wAEZPUABGT2AARk9wAEZPkABGT6AARlBwAEZQgABGUJAARlCwAEZUoABGVMAARlTgAEZVAABGVTAARlVAAEZVUABGVWAARlVwAEZVkABGVbAARlXAAEZV0ABGVfAARlYAAEZZ8ABGWhAARlowAEZaUABGWoAARlqQAEZaoABGWrAARlrAAEZa4ABGWwAARlsQAEZbIABGW0AARltQAEZfQABGX2AARl+AAEZfoABGX9AARl/gAEZf8ABGYAAARmAQAEZgMABGYFAARmBgAEZgcABGYJAARmCgAEZkkABGZLAARmTQAEZk8ABGZSAARmUwAEZlQABGZVAARmVgAEZlgABGZaAARmWwAEZlwABGZeAARmXwAEZp4ABGagAARmogAEZqQABGanAARmqAAEZqkABGaqAARmqwAEZq0ABGavAARmsAAEZrEABGazAARmtAAEZtkABGb9AARnJAAEZ0gABGdLAARnTQAEZ08ABGdRAARnUwAEZ1UABGdWAARnWQAEZ2YABGd1AARndwAEZ3kABGd7AARnfQAEZ38ABGeBAARngwAEZ5IABGeVAARnmAAEZ5sABGeeAARnoQAEZ6QABGenAARnqQAEZ+gABGfqAARn7AAEZ+4ABGfxAARn8gAEZ/MABGf0AARn9QAEZ/cABGf5AARn+gAEZ/sABGf9AARn/gAEaD0ABGg/AARoQQAEaEMABGhGAARoRwAEaEgABGhJAARoSgAEaEwABGhOAARoTwAEaFAABGhSAARoUwAEaJIABGiUAARolgAEaJgABGibAARonAAEaJ0ABGieAARonwAEaKEABGijAARopAAEaKUABGinAARoqAAEaOcABGjpAARo7AAEaO4ABGjxAARo8gAEaPMABGj0AARo9QAEaPcABGj5AARo+gAEaPsABGj9AARo/gAEaT0ABGk/AARpQQAEaUMABGlGAARpRwAEaUgABGlJAARpSgAEaUwABGlOAARpTwAEaVAABGlSAARpUwAEaZIABGmUAARplwAEaZkABGmcAARpnQAEaZ4ABGmfAARpoAAEaaIABGmkAARppQAEaaYABGmoAARpqQAEadAABGoPAARqEQAEahMABGoVAARqGAAEahkABGoaAARqGwAEahwABGoeAARqIAAEaiEABGoiAARqJAAEaiUABGpwAARqkwAEarMABGrTAARq1QAEatcABGrZAARq2wAEat4ABGrfAARq4AAEauMABGrkAARq5gAEaucABGrpAARq7AAEau0ABGruAARq8QAEavIABGr3AARrBAAEawkABGsLAARrDQAEaxIABGsVAARrGAAEaxoABGs/AARrYwAEa4oABGuuAARrsQAEa7MABGu1AARrtwAEa7kABGu7AARrvAAEa78ABGvMAARr3QAEa98ABGvhAARr4wAEa+UABGvnAARr6QAEa+sABGvtAARr/gAEbAEABGwEAARsBwAEbAoABGwNAARsEAAEbBMABGwWAARsGAAEbFcABGxZAARsWwAEbF0ABGxgAARsYQAEbGIABGxjAARsZAAEbGYABGxoAARsaQAEbGoABGxsAARsbQAEbKwABGyuAARssAAEbLIABGy1AARstgAEbLcABGy4AARsuQAEbLsABGy9AARsvgAEbL8ABGzBAARswgAEbQEABG0DAARtBgAEbQgABG0LAARtDAAEbQ0ABG0OAARtDwAEbREABG0TAARtFAAEbRUABG0XAARtGAAEbSUABG0mAARtJwAEbSkABG1oAARtagAEbWwABG1uAARtcQAEbXIABG1zAARtdAAEbXUABG13AARteQAEbXoABG17AARtfQAEbX4ABG29AARtvwAEbcEABG3DAARtxgAEbccABG3IAARtyQAEbcoABG3MAARtzgAEbc8ABG3QAARt0gAEbdMABG4SAARuFAAEbhYABG4YAARuGwAEbhwABG4dAARuHgAEbh8ABG4hAARuIwAEbiQABG4lAARuJwAEbigABG5nAARuaQAEbmsABG5tAARucAAEbnEABG5yAARucwAEbnQABG52AARueAAEbnkABG56AARufAAEbn0ABG68AARuvgAEbsAABG7CAARuxQAEbsYABG7HAARuyAAEbskABG7LAARuzQAEbs4ABG7PAARu0QAEbtIABG73AARvGwAEb0IABG9mAARvaQAEb2sABG9tAARvbwAEb3EABG9zAARvdAAEb3cABG+EAARvkwAEb5UABG+XAARvmQAEb5sABG+dAARvnwAEb6EABG+wAARvswAEb7YABG+5AARvvAAEb78ABG/CAARvxQAEb8cABHAGAARwCAAEcAoABHAMAARwDwAEcBAABHARAARwEgAEcBMABHAVAARwFwAEcBgABHAZAARwGwAEcBwABHBbAARwXQAEcF8ABHBhAARwZAAEcGUABHBmAARwZwAEcGgABHBqAARwbAAEcG0ABHBuAARwcAAEcHEABHCwAARwsgAEcLQABHC2AARwuQAEcLoABHC7AARwvAAEcL0ABHC/AARwwQAEcMIABHDDAARwxQAEcMYABHEFAARxBwAEcQoABHEMAARxDwAEcRAABHERAARxEgAEcRMABHEVAARxFwAEcRgABHEZAARxGwAEcRwABHFbAARxXQAEcV8ABHFhAARxZAAEcWUABHFmAARxZwAEcWgABHFqAARxbAAEcW0ABHFuAARxcAAEcXEABHGwAARxsgAEcbUABHG3AARxugAEcbsABHG8AARxvQAEcb4ABHHAAARxwgAEccMABHHEAARxxgAEcccABHHuAARyLQAEci8ABHIxAARyMwAEcjYABHI3AARyOAAEcjkABHI6AARyPAAEcj4ABHI/AARyQAAEckIABHJDAARyjgAEcrEABHLRAARy8QAEcvMABHL1AARy9wAEcvkABHL8AARy/QAEcv4ABHMBAARzAgAEcwQABHMFAARzBwAEcwoABHMLAARzDAAEcw8ABHMQAARzGQAEcyYABHMrAARzLQAEcy8ABHM0AARzNwAEczoABHM8AARzYQAEc4UABHOsAARz0AAEc9MABHPVAARz1wAEc9kABHPbAARz3QAEc94ABHPhAARz7gAEc/8ABHQBAAR0AwAEdAUABHQHAAR0CQAEdAsABHQNAAR0DwAEdCAABHQjAAR0JgAEdCkABHQsAAR0LwAEdDIABHQ1AAR0OAAEdDoABHR5AAR0ewAEdH0ABHR/AAR0ggAEdIMABHSEAAR0hQAEdIYABHSIAAR0igAEdIsABHSMAAR0jgAEdI8ABHTOAAR00AAEdNIABHTUAAR01wAEdNgABHTZAAR02gAEdNsABHTdAAR03wAEdOAABHThAAR04wAEdOQABHUjAAR1JQAEdSgABHUqAAR1LQAEdS4ABHUvAAR1MAAEdTEABHUzAAR1NQAEdTYABHU3AAR1OQAEdToABHVHAAR1SAAEdUkABHVLAAR1igAEdYwABHWOAAR1kAAEdZMABHWUAAR1lQAEdZYABHWXAAR1mQAEdZsABHWcAAR1nQAEdZ8ABHWgAAR13wAEdeEABHXjAAR15QAEdegABHXpAAR16gAEdesABHXsAAR17gAEdfAABHXxAAR18gAEdfQABHX1AAR2NAAEdjYABHY4AAR2OgAEdj0ABHY+AAR2PwAEdkAABHZBAAR2QwAEdkUABHZGAAR2RwAEdkkABHZKAAR2iQAEdosABHaNAAR2jwAEdpIABHaTAAR2lAAEdpUABHaWAAR2mAAEdpoABHabAAR2nAAEdp4ABHafAAR23gAEduAABHbiAAR25AAEducABHboAAR26QAEduoABHbrAAR27QAEdu8ABHbwAAR28QAEdvMABHb0AAR3GQAEdz0ABHdkAAR3iAAEd4sABHeNAAR3jwAEd5EABHeTAAR3lQAEd5YABHeZAAR3pgAEd7UABHe3AAR3uQAEd7sABHe9AAR3vwAEd8EABHfDAAR30gAEd9UABHfYAAR32wAEd94ABHfhAAR35AAEd+cABHfpAAR4KAAEeCoABHgsAAR4LgAEeDEABHgyAAR4MwAEeDQABHg1AAR4NwAEeDkABHg6AAR4OwAEeD0ABHg+AAR4fQAEeH8ABHiBAAR4gwAEeIYABHiHAAR4iAAEeIkABHiKAAR4jAAEeI4ABHiPAAR4kAAEeJIABHiTAAR40gAEeNQABHjWAAR42AAEeNsABHjcAAR43QAEeN4ABHjfAAR44QAEeOMABHjkAAR45QAEeOcABHjoAAR5JwAEeSkABHkrAAR5LQAEeTAABHkxAAR5MgAEeTMABHk0AAR5NgAEeTgABHk5AAR5OgAEeTwABHk9AAR5fAAEeX4ABHmAAAR5ggAEeYUABHmGAAR5hwAEeYgABHmJAAR5iwAEeY0ABHmOAAR5jwAEeZEABHmSAAR50QAEedMABHnVAAR51wAEedoABHnbAAR53AAEed0ABHneAAR54AAEeeIABHnjAAR55AAEeeYABHnnAAR6JgAEeigABHoqAAR6LAAEei8ABHowAAR6MQAEejIABHozAAR6NQAEejcABHo4AAR6OQAEejsABHo8AAR6hwAEeqoABHrKAAR66gAEeuwABHruAAR68AAEevIABHr1AAR69gAEevcABHr6AAR6+wAEev0ABHr+AAR7AQAEewQABHsFAAR7BgAEewkABHsKAAR7DwAEexwABHshAAR7IwAEeyYABHsrAAR7LgAEezEABHszAAR7WAAEe3wABHujAAR7xwAEe8oABHvMAAR7zgAEe9AABHvSAAR71AAEe9UABHvYAAR75QAEe/YABHv4AAR7+gAEe/wABHv+AAR8AAAEfAIABHwEAAR8BgAEfBcABHwaAAR8HQAEfCAABHwjAAR8JgAEfCkABHwsAAR8LwAEfDEABHxwAAR8cgAEfHQABHx2AAR8eQAEfHoABHx7AAR8fAAEfH0ABHx/AAR8gQAEfIIABHyDAAR8hQAEfIYABHzFAAR8xwAEfMkABHzLAAR8zgAEfM8ABHzQAAR80QAEfNIABHzUAAR81gAEfNcABHzYAAR82gAEfNsABH0aAAR9HAAEfR8ABH0hAAR9JAAEfSUABH0mAAR9JwAEfSgABH0qAAR9LAAEfS0ABH0uAAR9MAAEfTEABH0+AAR9PwAEfUAABH1CAAR9gQAEfYMABH2FAAR9hwAEfYoABH2LAAR9jAAEfY0ABH2OAAR9kAAEfZIABH2TAAR9lAAEfZYABH2XAAR91gAEfdgABH3aAAR93AAEfd8ABH3gAAR94QAEfeIABH3jAAR95QAEfecABH3oAAR96QAEfesABH3sAAR+KwAEfi0ABH4vAAR+MQAEfjQABH41AAR+NgAEfjcABH44AAR+OgAEfjwABH49AAR+PgAEfkAABH5BAAR+gAAEfoIABH6EAAR+hgAEfokABH6KAAR+iwAEfowABH6NAAR+jwAEfpEABH6SAAR+kwAEfpUABH6WAAR+1QAEftcABH7ZAAR+2wAEft4ABH7fAAR+4AAEfuEABH7iAAR+5AAEfuYABH7nAAR+6AAEfuoABH7rAAR/EAAEfzQABH9bAAR/fwAEf4IABH+FAAR/hwAEf4kABH+LAAR/jQAEf44ABH+RAAR/ngAEf6sABH+uAAR/sQAEf7QABH+3AAR/ugAEf70ABH/KAAR/zQAEf9AABH/TAAR/1gAEf9kABH/cAAR/3gAEgB0ABIAfAASAIgAEgCQABIAnAASAKAAEgCkABIAqAASAKwAEgC0ABIAwAASAMQAEgDIABIA0AASANQAEgHgABICcAASAwAAEgOMABIEKAASBKgAEgVEABIF4AASBmAAEgbwABIHgAASB4gAEgeUABIHnAASB6QAEgesABIHuAASB8AAEgfIABIH0AASB9gAEgfgABIH6AASB/QAEggAABIIBAASCBgAEghMABIIWAASCGAAEghsABIIeAASCIAAEgkUABIJpAASCkAAEgrQABIK3AASCuQAEgrsABIK9AASCvwAEgsEABILCAASCxQAEgtIABILlAASC5wAEgukABILrAASC7QAEgu8ABILxAASC8wAEgvUABIL3AASDCgAEgw0ABIMQAASDEwAEgxYABIMZAASDHAAEgx8ABIMiAASDJQAEgycABINmAASDaAAEg2sABINtAASDcAAEg3EABINyAASDcwAEg3QABIN2AASDeAAEg3kABIN6AASDfAAEg30ABIOGAASDhwAEg4kABIPIAASDygAEg8wABIPOAASD0QAEg9IABIPTAASD1AAEg9UABIPXAASD2QAEg9oABIPbAASD3QAEg94ABIQdAASEHwAEhCIABIQkAASEJwAEhCgABIQpAASEKgAEhCsABIQtAASELwAEhDAABIQxAASEMwAEhDQABIQ9AASEPgAEhEAABIR/AASEgQAEhIMABISFAASEiAAEhIkABISKAASEiwAEhIwABISOAASEkAAEhJEABISSAASElAAEhJUABITUAASE1gAEhNkABITbAASE3gAEhN8ABITgAASE4QAEhOIABITkAASE5gAEhOcABIToAASE6gAEhOsABIT0AASE9QAEhPcABIU2AASFOAAEhToABIU8AASFPwAEhUAABIVBAASFQgAEhUMABIVFAASFRwAEhUgABIVJAASFSwAEhUwABIWLAASFjQAEhZAABIWSAASFlQAEhZYABIWXAASFmAAEhZkABIWbAASFnQAEhZ4ABIWfAASFoQAEhaIABIWvAASFsAAEhbEABIWzAASF8gAEhfQABIX2AASF+AAEhfsABIX8AASF/QAEhf4ABIX/AASGAQAEhgMABIYEAASGBQAEhgcABIYIAASGRwAEhkkABIZMAASGTgAEhlEABIZSAASGUwAEhlQABIZVAASGVwAEhlkABIZaAASGWwAEhl0ABIZeAASGbQAEhnoABIaBAASGhAAEhocABIaKAASGkQAEhpQABIaXAASGmgAEhpwABIakAASGqQAEhvQABIcXAASHNwAEh1cABIdZAASHWwAEh10ABIdfAASHYgAEh2MABIdkAASHZwAEh2gABIdqAASHawAEh20ABIdwAASHcQAEh3IABId1AASHdgAEh3sABIeIAASHjQAEh48ABIeRAASHlgAEh5kABIecAASHngAEh8MABIfnAASIDgAEiDIABIg1AASINwAEiDkABIg7AASIPQAEiD8ABIhAAASIQwAEiFAABIhhAASIYwAEiGUABIhnAASIaQAEiGsABIhtAASIbwAEiHEABIiCAASIhQAEiIgABIiLAASIjgAEiJEABIiUAASIlwAEiJoABIicAASI2wAEiN0ABIjfAASI4QAEiOQABIjlAASI5gAEiOcABIjoAASI6gAEiOwABIjtAASI7gAEiPAABIjxAASJMAAEiTIABIk0AASJNgAEiTkABIk6AASJOwAEiTwABIk9AASJPwAEiUEABIlCAASJQwAEiUUABIlGAASJhQAEiYcABImKAASJjAAEiY8ABImQAASJkQAEiZIABImTAASJlQAEiZcABImYAASJmQAEiZsABImcAASJqQAEiaoABImrAASJrQAEiewABInuAASJ8AAEifIABIn1AASJ9gAEifcABIn4AASJ+QAEifsABIn9AASJ/gAEif8ABIoBAASKAgAEikEABIpDAASKRQAEikcABIpKAASKSwAEikwABIpNAASKTgAEilAABIpSAASKUwAEilQABIpWAASKVwAEipYABIqYAASKmgAEipwABIqfAASKoAAEiqEABIqiAASKowAEiqUABIqnAASKqAAEiqkABIqrAASKrAAEiusABIrtAASK7wAEivEABIr0AASK9QAEivYABIr3AASK+AAEivoABIr8AASK/QAEiv4ABIsAAASLAQAEi0AABItCAASLRAAEi0YABItJAASLSgAEi0sABItMAASLTQAEi08ABItRAASLUgAEi1MABItVAASLVgAEi3sABIufAASLxgAEi+oABIvtAASL7wAEi/EABIvzAASL9QAEi/cABIv4AASL+wAEjAgABIwXAASMGQAEjBsABIwdAASMHwAEjCEABIwjAASMJQAEjDQABIw3AASMOgAEjD0ABIxAAASMQwAEjEYABIxJAASMSwAEjIoABIyMAASMjgAEjJAABIyTAASMlAAEjJUABIyWAASMlwAEjJkABIybAASMnAAEjJ0ABIyfAASMoAAEjN8ABIzhAASM4wAEjOUABIzoAASM6QAEjOoABIzrAASM7AAEjO4ABIzwAASM8QAEjPIABIz0AASM9QAEjTQABI02AASNOAAEjToABI09AASNPgAEjT8ABI1AAASNQQAEjUMABI1FAASNRgAEjUcABI1JAASNSgAEjYkABI2LAASNjQAEjY8ABI2SAASNkwAEjZQABI2VAASNlgAEjZgABI2aAASNmwAEjZwABI2eAASNnwAEjd4ABI3gAASN4gAEjeQABI3nAASN6AAEjekABI3qAASN6wAEje0ABI3vAASN8AAEjfEABI3zAASN9AAEjjMABI41AASONwAEjjkABI48AASOPQAEjj4ABI4/AASOQAAEjkIABI5EAASORQAEjkYABI5IAASOSQAEjogABI6KAASOjAAEjo4ABI6RAASOkgAEjpMABI6UAASOlQAEjpcABI6ZAASOmgAEjpsABI6dAASOngAEjukABI8MAASPLAAEj0wABI9OAASPUAAEj1IABI9UAASPVwAEj1gABI9ZAASPXAAEj10ABI9fAASPYAAEj2IABI9lAASPZgAEj2cABI9qAASPawAEj3AABI99AASPggAEj4QABI+GAASPiwAEj44ABI+RAASPkwAEj7gABI/cAASQAwAEkCcABJAqAASQLAAEkC4ABJAwAASQMgAEkDQABJA1AASQOAAEkEUABJBWAASQWAAEkFoABJBcAASQXgAEkGAABJBiAASQZAAEkGYABJB3AASQegAEkH0ABJCAAASQgwAEkIYABJCJAASQjAAEkI8ABJCRAASQ0AAEkNIABJDUAASQ1gAEkNkABJDaAASQ2wAEkNwABJDdAASQ3wAEkOEABJDiAASQ4wAEkOUABJDmAASRJQAEkScABJEpAASRKwAEkS4ABJEvAASRMAAEkTEABJEyAASRNAAEkTYABJE3AASROAAEkToABJE7AASRegAEkXwABJF/AASRgQAEkYQABJGFAASRhgAEkYcABJGIAASRigAEkYwABJGNAASRjgAEkZAABJGRAASRngAEkZ8ABJGgAASRogAEkeEABJHjAASR5QAEkecABJHqAASR6wAEkewABJHtAASR7gAEkfAABJHyAASR8wAEkfQABJH2AASR9wAEkjYABJI4AASSOgAEkjwABJI/AASSQAAEkkEABJJCAASSQwAEkkUABJJHAASSSAAEkkkABJJLAASSTAAEkosABJKNAASSjwAEkpEABJKUAASSlQAEkpYABJKXAASSmAAEkpoABJKcAASSnQAEkp4ABJKgAASSoQAEkuAABJLiAASS5AAEkuYABJLpAASS6gAEkusABJLsAASS7QAEku8ABJLxAASS8gAEkvMABJL1AASS9gAEkzUABJM3AASTOQAEkzsABJM+AASTPwAEk0AABJNBAASTQgAEk0QABJNGAASTRwAEk0gABJNKAASTSwAEk3AABJOUAASTuwAEk98ABJPiAAST5AAEk+YABJPoAAST6gAEk+wABJPtAAST8AAEk/0ABJQMAASUDgAElBAABJQSAASUFAAElBYABJQYAASUGgAElCkABJQsAASULwAElDIABJQ1AASUOAAElDsABJQ+AASUQAAElH8ABJSBAASUgwAElIUABJSIAASUiQAElIoABJSLAASUjAAElI4ABJSQAASUkQAElJIABJSUAASUlQAElNQABJTWAASU2AAElNoABJTdAASU3gAElN8ABJTgAASU4QAElOMABJTlAASU5gAElOcABJTpAASU6gAElSkABJUrAASVLQAElS8ABJUyAASVMwAElTQABJU1AASVNgAElTgABJU6AASVOwAElTwABJU+AASVPwAElX4ABJWAAASVggAElYQABJWHAASViAAElYkABJWKAASViwAElY0ABJWPAASVkAAElZEABJWTAASVlAAEldMABJXVAASV1wAEldkABJXcAASV3QAEld4ABJXfAASV4AAEleIABJXkAASV5QAEleYABJXoAASV6QAEligABJYqAASWLAAEli4ABJYxAASWMgAEljMABJY0AASWNQAEljcABJY5AASWOgAEljsABJY9AASWPgAEln0ABJZ/AASWgQAEloMABJaGAASWhwAElogABJaJAASWigAElowABJaOAASWjwAElpAABJaSAASWkwAElt4ABJcBAASXIQAEl0EABJdDAASXRQAEl0cABJdJAASXTAAEl00ABJdOAASXUQAEl1IABJdUAASXVQAEl1cABJdaAASXWwAEl1wABJdfAASXYAAEl2UABJdyAASXdwAEl3kABJd7AASXgAAEl4MABJeGAASXiAAEl60ABJfRAASX+AAEmBwABJgfAASYIQAEmCMABJglAASYJwAEmCkABJgqAASYLQAEmDoABJhLAASYTQAEmE8ABJhRAASYUwAEmFUABJhXAASYWQAEmFsABJhsAASYbwAEmHIABJh1AASYeAAEmHsABJh+AASYgQAEmIQABJiGAASYxQAEmMcABJjJAASYywAEmM4ABJjPAASY0AAEmNEABJjSAASY1AAEmNYABJjXAASY2AAEmNoABJjbAASZGgAEmRwABJkeAASZIAAEmSMABJkkAASZJQAEmSYABJknAASZKQAEmSsABJksAASZLQAEmS8ABJkwAASZbwAEmXEABJl0AASZdgAEmXkABJl6AASZewAEmXwABJl9AASZfwAEmYEABJmCAASZgwAEmYUABJmGAASZkwAEmZQABJmVAASZlwAEmdYABJnYAASZ2gAEmdwABJnfAASZ4AAEmeEABJniAASZ4wAEmeUABJnnAASZ6AAEmekABJnrAASZ7AAEmisABJotAASaLwAEmjEABJo0AASaNQAEmjYABJo3AASaOAAEmjoABJo8AASaPQAEmj4ABJpAAASaQQAEmoAABJqCAASahAAEmoYABJqJAASaigAEmosABJqMAASajQAEmo8ABJqRAASakgAEmpMABJqVAASalgAEmtUABJrXAASa2QAEmtsABJreAASa3wAEmuAABJrhAASa4gAEmuQABJrmAASa5wAEmugABJrqAASa6wAEmyoABJssAASbLgAEmzAABJszAASbNAAEmzUABJs2AASbNwAEmzkABJs7AASbPAAEmz0ABJs/AASbQAAEm2UABJuJAASbsAAEm9QABJvXAASb2QAEm9sABJvdAASb3wAEm+EABJviAASb5QAEm/IABJwBAAScAwAEnAUABJwHAAScCQAEnAsABJwNAAScDwAEnB4ABJwhAAScJAAEnCcABJwqAAScLQAEnDAABJwzAAScNQAEnHQABJx2AASceQAEnHsABJx+AAScfwAEnIAABJyBAAScggAEnIQABJyGAASchwAEnIgABJyKAASciwAEnMoABJzMAASczgAEnNAABJzTAASc1AAEnNUABJzWAASc1wAEnNkABJzbAASc3AAEnN0ABJzfAASc4AAEnR8ABJ0hAASdIwAEnSUABJ0oAASdKQAEnSoABJ0rAASdLAAEnS4ABJ0wAASdMQAEnTIABJ00AASdNQAEnXQABJ12AASdeQAEnXsABJ1+AASdfwAEnYAABJ2BAASdggAEnYQABJ2GAASdhwAEnYgABJ2KAASdiwAEncoABJ3MAASdzgAEndAABJ3TAASd1AAEndUABJ3WAASd1wAEndkABJ3bAASd3AAEnd0ABJ3fAASd4AAEnh8ABJ4hAASeIwAEniUABJ4oAASeKQAEnioABJ4rAASeLAAEni4ABJ4wAASeMQAEnjIABJ40AASeNQAEnnQABJ52AASeeAAEnnoABJ59AASefgAEnn8ABJ6AAASegQAEnoMABJ6FAASehgAEnocABJ6JAASeigAEnpMABJ6UAASelgAEntUABJ7XAASe2QAEntsABJ7eAASe3wAEnuAABJ7hAASe4gAEnuQABJ7nAASe6AAEnukABJ7rAASe7AAEnysABJ8tAASfMAAEnzIABJ81AASfNgAEnzcABJ84AASfOQAEnzsABJ8+AASfPwAEn0AABJ9CAASfQwAEn4IABJ+EAASfhwAEn4kABJ+MAASfjQAEn44ABJ+PAASfkAAEn5IABJ+VAASflgAEn5cABJ+ZAASfmgAEn9kABJ/bAASf3gAEn+AABJ/jAASf5AAEn+UABJ/mAASf5wAEn+kABJ/sAASf7QAEn+4ABJ/wAASf8QAEoDAABKAyAASgNAAEoDYABKA5AASgOgAEoDsABKA8AASgPQAEoD8ABKBCAASgQwAEoEQABKBGAASgRwAEoJIABKC1AASg1QAEoPUABKD3AASg+QAEoPsABKD9AAShAAAEoQEABKECAAShBQAEoQYABKEIAAShCQAEoQsABKEOAAShDwAEoRAABKETAAShFAAEoRkABKEmAAShKwAEoS0ABKEvAAShNAAEoTcABKE6AAShPAAEoWEABKGFAAShrAAEodAABKHTAASh1QAEodcABKHZAASh2wAEod0ABKHeAASh4QAEoe4ABKH/AASiAQAEogMABKIFAASiBwAEogkABKILAASiDQAEog8ABKIgAASiIwAEoiYABKIpAASiLAAEoi8ABKIyAASiNQAEojgABKI6AASieQAEonsABKJ9AASifwAEooIABKKDAASihAAEooUABKKGAASiiAAEoooABKKLAASijAAEoo4ABKKPAASizgAEotAABKLSAASi1AAEotcABKLYAASi2QAEotoABKLbAASi3QAEot8ABKLgAASi4QAEouMABKLkAASjIwAEoyUABKMoAASjKgAEoy0ABKMuAASjLwAEozAABKMxAASjMwAEozUABKM2AASjNwAEozkABKM6AASjRwAEo0gABKNJAASjSwAEo4oABKOMAASjjgAEo5AABKOTAASjlAAEo5UABKOWAASjlwAEo5kABKObAASjnAAEo50ABKOfAASjoAAEo98ABKPhAASj4wAEo+UABKPoAASj6QAEo+oABKPrAASj7AAEo+4ABKPwAASj8QAEo/IABKP0AASj9QAEpDQABKQ2AASkOAAEpDoABKQ9AASkPgAEpD8ABKRAAASkQQAEpEMABKRFAASkRgAEpEcABKRJAASkSgAEpIkABKSLAASkjQAEpI8ABKSSAASkkwAEpJQABKSVAASklgAEpJgABKSaAASkmwAEpJwABKSeAASknwAEpN4ABKTgAASk4gAEpOQABKTnAASk6AAEpOkABKTqAASk6wAEpO0ABKTvAASk8AAEpPEABKTzAASk9AAEpRkABKU9AASlZAAEpYgABKWLAASljQAEpY8ABKWRAASlkwAEpZUABKWWAASlmQAEpaYABKW1AASltwAEpbkABKW7AASlvQAEpb8ABKXBAASlwwAEpdIABKXVAASl2AAEpdsABKXeAASl4QAEpeQABKXnAASl6QAEpigABKYqAASmLAAEpi4ABKYxAASmMgAEpjMABKY0AASmNQAEpjcABKY5AASmOgAEpjsABKY9AASmPgAEpn0ABKZ/AASmgQAEpoMABKaGAASmhwAEpogABKaJAASmigAEpowABKaOAASmjwAEppAABKaSAASmkwAEptIABKbUAASm1gAEptgABKbbAASm3AAEpt0ABKbeAASm3wAEpuEABKbjAASm5AAEpuUABKbnAASm6AAEpycABKcpAASnKwAEpy0ABKcwAASnMQAEpzIABKczAASnNAAEpzYABKc4AASnOQAEpzoABKc8AASnPQAEp3wABKd+AASngAAEp4IABKeFAASnhgAEp4cABKeIAASniQAEp4sABKeNAASnjgAEp48ABKeRAASnkgAEp9EABKfTAASn1QAEp9cABKfaAASn2wAEp9wABKfdAASn3gAEp+AABKfiAASn4wAEp+QABKfmAASn5wAEqCYABKgoAASoKgAEqCwABKgvAASoMAAEqDEABKgyAASoMwAEqDUABKg3AASoOAAEqDkABKg7AASoPAAEqEUABKhGAASoSAAEqIsABKivAASo0wAEqPYABKkdAASpPQAEqWQABKmLAASpqwAEqc8ABKnzAASp9QAEqfgABKn6AASp/AAEqf4ABKoBAASqAwAEqgUABKoHAASqCQAEqgsABKoNAASqEAAEqhMABKoUAASqGQAEqiYABKopAASqKwAEqi4ABKoxAASqMwAEqlgABKp8AASqowAEqscABKrKAASqzAAEqs4ABKrQAASq0gAEqtQABKrVAASq2AAEquUABKr4AASq+gAEqvwABKr+AASrAAAEqwIABKsEAASrBgAEqwgABKsKAASrHQAEqyAABKsjAASrJgAEqykABKssAASrLwAEqzIABKs1AASrOAAEqzoABKt5AASrewAEq34ABKuAAASrgwAEq4QABKuFAASrhgAEq4cABKuJAASriwAEq4wABKuNAASrjwAEq5AABKuZAASrmgAEq5wABKvbAASr3QAEq98ABKvhAASr5AAEq+UABKvmAASr5wAEq+gABKvqAASr7AAEq+0ABKvuAASr8AAEq/EABKwwAASsMgAErDUABKw3AASsOgAErDsABKw8AASsPQAErD4ABKxAAASsQgAErEMABKxEAASsRgAErEcABKxQAASsUQAErFMABKySAASslAAErJYABKyYAASsmwAErJwABKydAASsngAErJ8ABKyhAASsowAErKQABKylAASspwAErKgABKznAASs6QAErOwABKzuAASs8QAErPIABKzzAASs9AAErPUABKz3AASs+QAErPoABKz7AASs/QAErP4ABK0HAAStCAAErQoABK1JAAStSwAErU0ABK1PAAStUgAErVMABK1UAAStVQAErVYABK1YAAStWgAErVsABK1cAAStXgAErV8ABK2eAAStoAAEraMABK2lAAStqAAErakABK2qAAStqwAErawABK2uAAStsAAErbEABK2yAASttAAErbUABK3CAAStwwAErcQABK3GAASuBQAErgcABK4JAASuCwAErg4ABK4PAASuEAAErhEABK4SAASuFAAErhYABK4XAASuGAAErhoABK4bAASuWgAErlwABK5eAASuYAAErmMABK5kAASuZQAErmYABK5nAASuaQAErmsABK5sAASubQAErm8ABK5wAASufQAEroQABK6HAASuiQAErowABK6TAASulgAErpkABK6cAASungAErukABK8MAASvLAAEr0wABK9OAASvUAAEr1IABK9UAASvVwAEr1gABK9ZAASvXAAEr10ABK9fAASvYAAEr2IABK9lAASvZgAEr2cABK9qAASvawAEr3AABK99AASvggAEr4QABK+GAASviwAEr44ABK+RAASvkwAEr7gABK/cAASwAwAEsCcABLAqAASwLAAEsC4ABLAwAASwMgAEsDQABLA1AASwOAAEsEUABLBWAASwWAAEsFoABLBcAASwXgAEsGAABLBiAASwZAAEsGYABLB3AASwegAEsH0ABLCAAASwgwAEsIYABLCJAASwjAAEsI8ABLCRAASw0AAEsNIABLDUAASw1gAEsNkABLDaAASw2wAEsNwABLDdAASw3wAEsOEABLDiAASw4wAEsOUABLDmAASxJQAEsScABLEpAASxKwAEsS4ABLEvAASxMAAEsTEABLEyAASxNAAEsTYABLE3AASxOAAEsToABLE7AASxegAEsXwABLF/AASxgQAEsYQABLGFAASxhgAEsYcABLGIAASxigAEsYwABLGNAASxjgAEsZAABLGRAASxngAEsZ8ABLGgAASxogAEseEABLHjAASx5QAEsecABLHqAASx6wAEsewABLHtAASx7gAEsfAABLHyAASx8wAEsfQABLH2AASx9wAEsjYABLI4AASyOgAEsjwABLI/AASyQAAEskEABLJCAASyQwAEskUABLJHAASySAAEskkABLJLAASyTAAEsosABLKNAASyjwAEspEABLKUAASylQAEspYABLKXAASymAAEspoABLKcAASynQAEsp4ABLKgAASyoQAEsuAABLLiAASy5AAEsuYABLLpAASy6gAEsusABLLsAASy7QAEsu8ABLLxAASy8gAEsvMABLL1AASy9gAEszUABLM3AASzOQAEszsABLM+AASzPwAEs0AABLNBAASzQgAEs0QABLNGAASzRwAEs0gABLNKAASzSwAEs3AABLOUAASzuwAEs98ABLPiAASz5AAEs+YABLPoAASz6gAEs+wABLPtAASz8AAEs/0ABLQMAAS0DgAEtBAABLQSAAS0FAAEtBYABLQYAAS0GgAEtCkABLQsAAS0LwAEtDIABLQ1AAS0OAAEtDsABLQ+AAS0QAAEtH8ABLSBAAS0gwAEtIUABLSIAAS0iQAEtIoABLSLAAS0jAAEtI4ABLSQAAS0kQAEtJIABLSUAAS0lQAEtNQABLTWAAS02AAEtNoABLTdAAS03gAEtN8ABLTgAAS04QAEtOMABLTlAAS05gAEtOcABLTpAAS06gAEtSkABLUrAAS1LQAEtS8ABLUyAAS1MwAEtTQABLU1AAS1NgAEtTgABLU6AAS1OwAEtTwABLU+AAS1PwAEtX4ABLWAAAS1ggAEtYQABLWHAAS1iAAEtYkABLWKAAS1iwAEtY0ABLWPAAS1kAAEtZEABLWTAAS1lAAEtdMABLXVAAS11wAEtdkABLXcAAS13QAEtd4ABLXfAAS14AAEteIABLXkAAS15QAEteYABLXoAAS16QAEtigABLYqAAS2LAAEti4ABLYxAAS2MgAEtjMABLY0AAS2NQAEtjcABLY5AAS2OgAEtjsABLY9AAS2PgAEtn0ABLZ/AAS2gQAEtoMABLaGAAS2hwAEtogABLaJAAS2igAEtowABLaOAAS2jwAEtpAABLaSAAS2kwAEtt4ABLcBAAS3IQAEt0EABLdDAAS3RQAEt0cABLdJAAS3TAAEt00ABLdOAAS3UQAEt1IABLdUAAS3VQAEt1cABLdZAAS3WgAEt1sABLdeAAS3XwAEt2QABLdxAAS3dgAEt3gABLd6AAS3fwAEt4IABLeFAAS3hwAEt6wABLfQAAS39wAEuBsABLgeAAS4IAAEuCIABLgkAAS4JgAEuCgABLgpAAS4LAAEuDkABLhKAAS4TAAEuE4ABLhQAAS4UgAEuFQABLhWAAS4WAAEuFoABLhrAAS4bgAEuHEABLh0AAS4dwAEuHoABLh9AAS4gAAEuIMABLiFAAS4xAAEuMYABLjIAAS4ygAEuM0ABLjOAAS4zwAEuNAABLjRAAS40wAEuNUABLjWAAS41wAEuNkABLjaAAS5GQAEuRsABLkdAAS5HwAEuSIABLkjAAS5JAAEuSUABLkmAAS5KAAEuSoABLkrAAS5LAAEuS4ABLkvAAS5bgAEuXAABLlzAAS5dQAEuXgABLl5AAS5egAEuXsABLl8AAS5fgAEuYAABLmBAAS5ggAEuYQABLmFAAS5kgAEuZMABLmUAAS5lgAEudUABLnXAAS52QAEudsABLneAAS53wAEueAABLnhAAS54gAEueQABLnmAAS55wAEuegABLnqAAS56wAEuioABLosAAS6LgAEujAABLozAAS6NAAEujUABLo2AAS6NwAEujkABLo7AAS6PAAEuj0ABLo/AAS6QAAEun8ABLqBAAS6gwAEuoUABLqIAAS6iQAEuooABLqLAAS6jAAEuo4ABLqQAAS6kQAEupIABLqUAAS6lQAEutQABLrWAAS62AAEutoABLrdAAS63gAEut8ABLrgAAS64QAEuuMABLrlAAS65gAEuucABLrpAAS66gAEuykABLsrAAS7LQAEuy8ABLsyAAS7MwAEuzQABLs1AAS7NgAEuzgABLs6AAS7OwAEuzwABLs+AAS7PwAEu2QABLuIAAS7rwAEu9MABLvWAAS72AAEu9oABLvcAAS73gAEu+AABLvhAAS75AAEu/EABLwAAAS8AgAEvAQABLwGAAS8CAAEvAoABLwMAAS8DgAEvB0ABLwgAAS8IwAEvCYABLwpAAS8LAAEvC8ABLwyAAS8NAAEvHMABLx1AAS8dwAEvHkABLx8AAS8fQAEvH4ABLx/AAS8gAAEvIIABLyEAAS8hQAEvIYABLyIAAS8iQAEvMgABLzKAAS8zAAEvM4ABLzRAAS80gAEvNMABLzUAAS81QAEvNcABLzZAAS82gAEvNsABLzdAAS83gAEvR0ABL0fAAS9IQAEvSMABL0mAAS9JwAEvSgABL0pAAS9KgAEvSwABL0uAAS9LwAEvTAABL0yAAS9MwAEvXIABL10AAS9dgAEvXgABL17AAS9fAAEvX0ABL1+AAS9fwAEvYEABL2DAAS9hAAEvYUABL2HAAS9iAAEvccABL3JAAS9ywAEvc0ABL3QAAS90QAEvdIABL3TAAS91AAEvdYABL3YAAS92QAEvdoABL3cAAS93QAEvhwABL4eAAS+IAAEviIABL4lAAS+JgAEvicABL4oAAS+KQAEvisABL4tAAS+LgAEvi8ABL4xAAS+MgAEvnEABL5zAAS+dQAEvncABL56AAS+ewAEvnwABL59AAS+fgAEvoAABL6CAAS+gwAEvoQABL6GAAS+hwAEvtIABL71AAS/FQAEvzUABL83AAS/OQAEvzsABL89AAS/QAAEv0EABL9CAAS/RQAEv0YABL9IAAS/SQAEv0sABL9OAAS/TwAEv1AABL9TAAS/VAAEv1kABL9mAAS/awAEv20ABL9vAAS/dAAEv3cABL96AAS/fAAEv6EABL/FAAS/7AAEwBAABMATAATAFQAEwBcABMAZAATAGwAEwB0ABMAeAATAIQAEwC4ABMA/AATAQQAEwEMABMBFAATARwAEwEkABMBLAATATQAEwE8ABMBgAATAYwAEwGYABMBpAATAbAAEwG8ABMByAATAdQAEwHgABMB6AATAuQAEwLsABMC9AATAvwAEwMIABMDDAATAxAAEwMUABMDGAATAyAAEwMoABMDLAATAzAAEwM4ABMDPAATBDgAEwRAABMESAATBFAAEwRcABMEYAATBGQAEwRoABMEbAATBHQAEwR8ABMEgAATBIQAEwSMABMEkAATBYwAEwWUABMFoAATBagAEwW0ABMFuAATBbwAEwXAABMFxAATBcwAEwXUABMF2AATBdwAEwXkABMF6AATBhwAEwYgABMGJAATBiwAEwcoABMHMAATBzgAEwdAABMHTAATB1AAEwdUABMHWAATB1wAEwdkABMHbAATB3AAEwd0ABMHfAATB4AAEwh8ABMIhAATCIwAEwiUABMIoAATCKQAEwioABMIrAATCLAAEwi4ABMIwAATCMQAEwjIABMI0AATCNQAEwnQABMJ2AATCeAAEwnoABMJ9AATCfgAEwn8ABMKAAATCgQAEwoMABMKFAATChgAEwocABMKJAATCigAEwskABMLLAATCzQAEws8ABMLSAATC0wAEwtQABMLVAATC1gAEwtgABMLaAATC2wAEwtwABMLeAATC3wAEwx4ABMMgAATDIgAEwyQABMMnAATDKAAEwykABMMqAATDKwAEwy0ABMMvAATDMAAEwzEABMMzAATDNAAEw1kABMN9AATDpAAEw8gABMPLAATDzQAEw88ABMPRAATD0wAEw9UABMPWAATD2QAEw+YABMP1AATD9wAEw/kABMP7AATD/QAEw/8ABMQBAATEAwAExBIABMQVAATEGAAExBsABMQeAATEIQAExCQABMQnAATEKQAExGgABMRqAATEbAAExG4ABMRxAATEcgAExHMABMR0AATEdQAExHcABMR5AATEegAExHsABMR9AATEfgAExL0ABMS/AATEwQAExMMABMTGAATExwAExMgABMTJAATEygAExMwABMTOAATEzwAExNAABMTSAATE0wAExRIABMUUAATFFgAExRgABMUbAATFHAAExR0ABMUeAATFHwAExSEABMUjAATFJAAExSUABMUnAATFKAAExWcABMVpAATFawAExW0ABMVwAATFcQAExXIABMVzAATFdAAExXYABMV4AATFeQAExXoABMV8AATFfQAExbwABMW+AATFwAAExcIABMXFAATFxgAExccABMXIAATFyQAExcsABMXNAATFzgAExc8ABMXRAATF0gAExhEABMYTAATGFQAExhcABMYaAATGGwAExhwABMYdAATGHgAExiAABMYiAATGIwAExiQABMYmAATGJwAExmYABMZoAATGagAExmwABMZvAATGcAAExnEABMZyAATGcwAExnUABMZ3AATGeAAExnkABMZ7AATGfAAExoUABMaGAATGiAAExssABMbvAATHEwAExzYABMddAATHfQAEx6QABMfLAATH6wAEyA8ABMgzAATINQAEyDgABMg6AATIPAAEyD4ABMhBAATIQwAEyEUABMhHAATISQAEyEsABMhNAATIUAAEyFMABMhUAATIWQAEyGYABMhpAATIawAEyG4ABMhxAATIcwAEyJgABMi8AATI4wAEyQcABMkKAATJDAAEyQ4ABMkQAATJEgAEyRQABMkVAATJGAAEySUABMk4AATJOgAEyTwABMk+AATJQAAEyUIABMlEAATJRgAEyUgABMlKAATJXQAEyWAABMljAATJZgAEyWkABMlsAATJbwAEyXIABMl1AATJeAAEyXoABMm5AATJuwAEyb4ABMnAAATJwwAEycQABMnFAATJxgAEyccABMnJAATJywAEycwABMnNAATJzwAEydAABMnZAATJ2gAEydwABMobAATKHQAEyh8ABMohAATKJAAEyiUABMomAATKJwAEyigABMoqAATKLAAEyi0ABMouAATKMAAEyjEABMpwAATKcgAEynUABMp3AATKegAEynsABMp8AATKfQAEyn4ABMqAAATKggAEyoMABMqEAATKhgAEyocABMqQAATKkQAEypMABMrSAATK1AAEytYABMrYAATK2wAEytwABMrdAATK3gAEyt8ABMrhAATK4wAEyuQABMrlAATK5wAEyugABMsnAATLKQAEyywABMsuAATLMQAEyzIABMszAATLNAAEyzUABMs3AATLOQAEyzoABMs7AATLPQAEyz4ABMtHAATLSAAEy0oABMuJAATLiwAEy40ABMuPAATLkgAEy5MABMuUAATLlQAEy5YABMuYAATLmgAEy5sABMucAATLngAEy58ABMveAATL4AAEy+MABMvlAATL6AAEy+kABMvqAATL6wAEy+wABMvuAATL8AAEy/EABMvyAATL9AAEy/UABMwCAATMAwAEzAQABMwGAATMRQAEzEcABMxJAATMSwAEzE4ABMxPAATMUAAEzFEABMxSAATMVAAEzFYABMxXAATMWAAEzFoABMxbAATMmgAEzJwABMyfAATMoQAEzKQABMylAATMpgAEzKcABMyoAATMqgAEzKwABMytAATMrgAEzLAABMyxAATMvwAEzMwABMzXAATM2gAEzN0ABMzgAATM4wAEzOYABMzxAATM9AAEzPcABMz6AATM/QAEzQAABM0CAATNDgAEzRwABM0mAATNLwAEzXoABM2dAATNvQAEzd0ABM3fAATN4QAEzeMABM3lAATN6AAEzekABM3qAATN7QAEze4ABM3wAATN8QAEzfMABM32AATN9wAEzfgABM37AATN/AAEzgEABM4OAATOEwAEzhUABM4XAATOHAAEzh8ABM4iAATOJAAEzkkABM5tAATOlAAEzrgABM67AATOvQAEzr8ABM7BAATOwwAEzsUABM7GAATOyQAEztYABM7nAATO6QAEzusABM7tAATO7wAEzvEABM7zAATO9QAEzvcABM8IAATPCwAEzw4ABM8RAATPFAAEzxcABM8aAATPHQAEzyAABM8iAATPYQAEz2MABM9lAATPZwAEz2oABM9rAATPbAAEz20ABM9uAATPcAAEz3IABM9zAATPdAAEz3YABM93AATPtgAEz7gABM+6AATPvAAEz78ABM/AAATPwQAEz8IABM/DAATPxQAEz8cABM/IAATPyQAEz8sABM/MAATQCwAE0A0ABNAQAATQEgAE0BUABNAWAATQFwAE0BgABNAZAATQGwAE0B0ABNAeAATQHwAE0CEABNAiAATQLwAE0DAABNAxAATQMwAE0HIABNB0AATQdgAE0HgABNB7AATQfAAE0H0ABNB+AATQfwAE0IEABNCDAATQhAAE0IUABNCHAATQiAAE0McABNDJAATQywAE0M0ABNDQAATQ0QAE0NIABNDTAATQ1AAE0NYABNDYAATQ2QAE0NoABNDcAATQ3QAE0RwABNEeAATRIAAE0SIABNElAATRJgAE0ScABNEoAATRKQAE0SsABNEtAATRLgAE0S8ABNExAATRMgAE0XEABNFzAATRdQAE0XcABNF6AATRewAE0XwABNF9AATRfgAE0YAABNGCAATRgwAE0YQABNGGAATRhwAE0cYABNHIAATRygAE0cwABNHPAATR0AAE0dEABNHSAATR0wAE0dUABNHXAATR2AAE0dkABNHbAATR3AAE0gEABNIlAATSTAAE0nAABNJzAATSdQAE0ncABNJ5AATSewAE0n0ABNJ+AATSgQAE0o4ABNKdAATSnwAE0qEABNKjAATSpQAE0qcABNKpAATSqwAE0roABNK9AATSwAAE0sMABNLGAATSyQAE0swABNLPAATS0QAE0xAABNMSAATTFAAE0xYABNMZAATTGgAE0xsABNMcAATTHQAE0x8ABNMhAATTIgAE0yMABNMlAATTJgAE02UABNNnAATTaQAE02sABNNuAATTbwAE03AABNNxAATTcgAE03QABNN2AATTdwAE03gABNN6AATTewAE07oABNO8AATTvgAE08AABNPDAATTxAAE08UABNPGAATTxwAE08kABNPLAATTzAAE080ABNPPAATT0AAE1A8ABNQRAATUEwAE1BUABNQYAATUGQAE1BoABNQbAATUHAAE1B4ABNQgAATUIQAE1CIABNQkAATUJQAE1GQABNRmAATUaAAE1GoABNRtAATUbgAE1G8ABNRwAATUcQAE1HMABNR1AATUdgAE1HcABNR5AATUegAE1LkABNS7AATUvQAE1L8ABNTCAATUwwAE1MQABNTFAATUxgAE1MgABNTKAATUywAE1MwABNTOAATUzwAE1Q4ABNUQAATVEgAE1RQABNUXAATVGAAE1RkABNUaAATVGwAE1R0ABNUfAATVIAAE1SEABNUjAATVJAAE1W8ABNWSAATVsgAE1dIABNXUAATV1gAE1dgABNXaAATV3QAE1d4ABNXfAATV4gAE1eMABNXlAATV5gAE1egABNXrAATV7AAE1e0ABNXwAATV8QAE1fYABNYDAATWCAAE1goABNYMAATWEQAE1hQABNYXAATWGQAE1j4ABNZiAATWiQAE1q0ABNawAATWsgAE1rQABNa2AATWuAAE1roABNa7AATWvgAE1ssABNbcAATW3gAE1uAABNbiAATW5AAE1uYABNboAATW6gAE1uwABNb9AATXAAAE1wMABNcGAATXCQAE1wwABNcPAATXEgAE1xUABNcXAATXVgAE11gABNdaAATXXAAE118ABNdgAATXYQAE12IABNdjAATXZQAE12cABNdoAATXaQAE12sABNdsAATXqwAE160ABNevAATXsQAE17QABNe1AATXtgAE17cABNe4AATXugAE17wABNe9AATXvgAE18AABNfBAATYAAAE2AIABNgFAATYBwAE2AoABNgLAATYDAAE2A0ABNgOAATYEAAE2BIABNgTAATYFAAE2BYABNgXAATYJAAE2CUABNgmAATYKAAE2GcABNhpAATYawAE2G0ABNhwAATYcQAE2HIABNhzAATYdAAE2HYABNh4AATYeQAE2HoABNh8AATYfQAE2LwABNi+AATYwAAE2MIABNjFAATYxgAE2McABNjIAATYyQAE2MsABNjNAATYzgAE2M8ABNjRAATY0gAE2REABNkTAATZFQAE2RcABNkaAATZGwAE2RwABNkdAATZHgAE2SAABNkiAATZIwAE2SQABNkmAATZJwAE2WYABNloAATZagAE2WwABNlvAATZcAAE2XEABNlyAATZcwAE2XUABNl3AATZeAAE2XkABNl7AATZfAAE2bsABNm9AATZvwAE2cEABNnEAATZxQAE2cYABNnHAATZyAAE2coABNnMAATZzQAE2c4ABNnQAATZ0QAE2fYABNoaAATaQQAE2mUABNpoAATaagAE2mwABNpuAATacAAE2nIABNpzAATadgAE2oMABNqSAATalAAE2pYABNqYAATamgAE2pwABNqeAATaoAAE2q8ABNqyAATatQAE2rgABNq7AATavgAE2sEABNrEAATaxgAE2wUABNsHAATbCQAE2wsABNsOAATbDwAE2xAABNsRAATbEgAE2xQABNsWAATbFwAE2xgABNsaAATbGwAE21oABNtcAATbXgAE22AABNtjAATbZAAE22UABNtmAATbZwAE22kABNtrAATbbAAE220ABNtvAATbcAAE268ABNuxAATbswAE27UABNu4AATbuQAE27oABNu7AATbvAAE274ABNvAAATbwQAE28IABNvEAATbxQAE3AQABNwGAATcCAAE3AoABNwNAATcDgAE3A8ABNwQAATcEQAE3BMABNwVAATcFgAE3BcABNwZAATcGgAE3FkABNxbAATcXQAE3F8ABNxiAATcYwAE3GQABNxlAATcZgAE3GgABNxqAATcawAE3GwABNxuAATcbwAE3K4ABNywAATcsgAE3LQABNy3AATcuAAE3LkABNy6AATcuwAE3L0ABNy/AATcwAAE3MEABNzDAATcxAAE3QMABN0FAATdBwAE3QkABN0MAATdDQAE3Q4ABN0PAATdEAAE3RIABN0UAATdFQAE3RYABN0YAATdGQAE3WQABN2HAATdpwAE3ccABN3JAATdywAE3c0ABN3PAATd0gAE3dMABN3UAATd1wAE3dgABN3aAATd2wAE3d0ABN3gAATd4QAE3eIABN3lAATd5gAE3esABN34AATd/QAE3f8ABN4BAATeBgAE3gkABN4MAATeDgAE3jMABN5XAATefgAE3qIABN6lAATepwAE3qkABN6rAATerQAE3q8ABN6wAATeswAE3sAABN7RAATe0wAE3tUABN7XAATe2QAE3tsABN7dAATe3wAE3uEABN7yAATe9QAE3vgABN77AATe/gAE3wEABN8EAATfBwAE3woABN8MAATfSwAE300ABN9PAATfUQAE31QABN9VAATfVgAE31cABN9YAATfWgAE31wABN9dAATfXgAE32AABN9hAATfoAAE36IABN+kAATfpgAE36kABN+qAATfqwAE36wABN+tAATfrwAE37EABN+yAATfswAE37UABN+2AATf9QAE3/cABN/6AATf/AAE3/8ABOAAAATgAQAE4AIABOADAATgBQAE4AcABOAIAATgCQAE4AsABOAMAATgGQAE4BoABOAbAATgHQAE4FwABOBeAATgYAAE4GIABOBlAATgZgAE4GcABOBoAATgaQAE4GsABOBtAATgbgAE4G8ABOBxAATgcgAE4LEABOCzAATgtQAE4LcABOC6AATguwAE4LwABOC9AATgvgAE4MAABODCAATgwwAE4MQABODGAATgxwAE4QYABOEIAAThCgAE4QwABOEPAAThEAAE4REABOESAAThEwAE4RUABOEXAAThGAAE4RkABOEbAAThHAAE4VsABOFdAAThXwAE4WEABOFkAAThZQAE4WYABOFnAAThaAAE4WoABOFsAAThbQAE4W4ABOFwAAThcQAE4bAABOGyAAThtAAE4bYABOG5AAThugAE4bsABOG8AAThvQAE4b8ABOHBAAThwgAE4cMABOHFAAThxgAE4esABOIPAATiNgAE4loABOJdAATiXwAE4mEABOJjAATiZQAE4mcABOJoAATiawAE4ngABOKHAATiiQAE4osABOKNAATijwAE4pEABOKTAATilQAE4qQABOKnAATiqgAE4q0ABOKwAATiswAE4rYABOK5AATiuwAE4voABOL8AATi/wAE4wEABOMEAATjBQAE4wYABOMHAATjCAAE4woABOMMAATjDQAE4w4ABOMQAATjEQAE41AABONSAATjVAAE41YABONZAATjWgAE41sABONcAATjXQAE418ABONhAATjYgAE42MABONlAATjZgAE46UABOOnAATjqQAE46sABOOuAATjrwAE47AABOOxAATjsgAE47QABOO2AATjtwAE47gABOO6AATjuwAE4/oABOP8AATj/wAE5AEABOQEAATkBQAE5AYABOQHAATkCAAE5AoABOQMAATkDQAE5A4ABOQQAATkEQAE5FAABORSAATkVAAE5FYABORZAATkWgAE5FsABORcAATkXQAE5F8ABORhAATkYgAE5GMABORlAATkZgAE5KUABOSnAATkqQAE5KsABOSuAATkrwAE5LAABOSxAATksgAE5LQABOS2AATktwAE5LgABOS6AATkuwAE5PoABOT8AATk/gAE5QAABOUDAATlBAAE5QUABOUGAATlBwAE5QkABOULAATlDAAE5Q0ABOUPAATlEAAE5VsABOV+AATlngAE5b4ABOXAAATlwgAE5cQABOXGAATlyQAE5coABOXLAATlzgAE5c8ABOXRAATl0gAE5dQABOXXAATl2AAE5dkABOXcAATl3QAE5eIABOXvAATl9AAE5fYABOX4AATl/QAE5gAABOYDAATmBQAE5ioABOZOAATmdQAE5pkABOacAATmngAE5qAABOaiAATmpAAE5qYABOanAATmqgAE5rcABObIAATmygAE5swABObOAATm0AAE5tIABObUAATm1gAE5tgABObpAATm7AAE5u8ABObyAATm9QAE5vgABOb7AATm/gAE5wEABOcDAATnQgAE50QABOdGAATnSAAE50sABOdMAATnTQAE504ABOdPAATnUQAE51MABOdUAATnVQAE51cABOdYAATnlwAE55kABOebAATnnQAE56AABOehAATnogAE56MABOekAATnpgAE56gABOepAATnqgAE56wABOetAATn7AAE5+4ABOfxAATn8wAE5/YABOf3AATn+AAE5/kABOf6AATn/AAE5/4ABOf/AAToAAAE6AIABOgDAAToEAAE6BEABOgSAAToFAAE6FMABOhVAAToVwAE6FkABOhcAAToXQAE6F4ABOhfAAToYAAE6GIABOhkAAToZQAE6GYABOhoAAToaQAE6KgABOiqAATorAAE6K4ABOixAATosgAE6LMABOi0AATotQAE6LcABOi5AATougAE6LsABOi9AATovgAE6P0ABOj/AATpAQAE6QMABOkGAATpBwAE6QgABOkJAATpCgAE6QwABOkOAATpDwAE6RAABOkSAATpEwAE6VIABOlUAATpVgAE6VgABOlbAATpXAAE6V0ABOleAATpXwAE6WEABOljAATpZAAE6WUABOlnAATpaAAE6acABOmpAATpqwAE6a0ABOmwAATpsQAE6bIABOmzAATptAAE6bYABOm4AATpuQAE6boABOm8AATpvQAE6eIABOoGAATqLQAE6lEABOpUAATqVgAE6lgABOpaAATqXAAE6l4ABOpfAATqYgAE6m8ABOp+AATqgAAE6oIABOqEAATqhgAE6ogABOqKAATqjAAE6psABOqeAATqoQAE6qQABOqnAATqqgAE6q0ABOqwAATqsgAE6vEABOrzAATq9QAE6vcABOr6AATq+wAE6vwABOr9AATq/gAE6wAABOsCAATrAwAE6wQABOsGAATrBwAE60YABOtIAATrSgAE60wABOtPAATrUAAE61EABOtSAATrUwAE61UABOtXAATrWAAE61kABOtbAATrXAAE65sABOudAATrnwAE66EABOukAATrpQAE66YABOunAATrqAAE66oABOusAATrrQAE664ABOuwAATrsQAE6/AABOvyAATr9AAE6/YABOv5AATr+gAE6/sABOv8AATr/QAE6/8ABOwBAATsAgAE7AMABOwFAATsBgAE7EUABOxHAATsSQAE7EsABOxOAATsTwAE7FAABOxRAATsUgAE7FQABOxWAATsVwAE7FgABOxaAATsWwAE7JoABOycAATsngAE7KAABOyjAATspAAE7KUABOymAATspwAE7KkABOyrAATsrAAE7K0ABOyvAATssAAE7O8ABOzxAATs8wAE7PUABOz4AATs+QAE7PoABOz7AATs/AAE7P4ABO0AAATtAQAE7QIABO0EAATtBQAE7VAABO1zAATtkwAE7bMABO21AATttwAE7bkABO27AATtvgAE7b8ABO3AAATtwwAE7cQABO3GAATtxwAE7ckABO3MAATtzQAE7c4ABO3RAATt0gAE7dcABO3kAATt6QAE7esABO3tAATt8gAE7fUABO34AATt+gAE7h8ABO5DAATuagAE7o4ABO6RAATukwAE7pUABO6XAATumQAE7psABO6cAATunwAE7qwABO69AATuvwAE7sEABO7DAATuxQAE7scABO7JAATuywAE7s0ABO7eAATu4QAE7uQABO7nAATu6gAE7u0ABO7wAATu8wAE7vYABO74AATvNwAE7zkABO87AATvPQAE70AABO9BAATvQgAE70MABO9EAATvRgAE70gABO9JAATvSgAE70wABO9NAATvjAAE744ABO+QAATvkgAE75UABO+WAATvlwAE75gABO+ZAATvmwAE750ABO+eAATvnwAE76EABO+iAATv4QAE7+MABO/mAATv6AAE7+sABO/sAATv7QAE7+4ABO/vAATv8QAE7/MABO/0AATv9QAE7/cABO/4AATwBQAE8AYABPAHAATwCQAE8EgABPBKAATwTAAE8E4ABPBRAATwUgAE8FMABPBUAATwVQAE8FcABPBZAATwWgAE8FsABPBdAATwXgAE8J0ABPCfAATwoQAE8KMABPCmAATwpwAE8KgABPCpAATwqgAE8KwABPCuAATwrwAE8LAABPCyAATwswAE8PIABPD0AATw9gAE8PgABPD7AATw/AAE8P0ABPD+AATw/wAE8QEABPEDAATxBAAE8QUABPEHAATxCAAE8UcABPFJAATxSwAE8U0ABPFQAATxUQAE8VIABPFTAATxVAAE8VYABPFYAATxWQAE8VoABPFcAATxXQAE8ZwABPGeAATxoAAE8aIABPGlAATxpgAE8acABPGoAATxqQAE8asABPGtAATxrgAE8a8ABPGxAATxsgAE8dcABPH7AATyIgAE8kYABPJJAATySwAE8k0ABPJPAATyUQAE8lMABPJUAATyVwAE8mQABPJzAATydQAE8ncABPJ5AATyewAE8n0ABPJ/AATygQAE8pAABPKTAATylgAE8pkABPKcAATynwAE8qIABPKlAATypwAE8uYABPLoAATy6gAE8uwABPLvAATy8AAE8vEABPLyAATy8wAE8vUABPL3AATy+AAE8vkABPL7AATy/AAE8zsABPM9AATzPwAE80EABPNEAATzRQAE80YABPNHAATzSAAE80oABPNMAATzTQAE804ABPNQAATzUQAE85AABPOSAATzlAAE85YABPOZAATzmgAE85sABPOcAATznQAE858ABPOhAATzogAE86MABPOlAATzpgAE8+UABPPnAATz6QAE8+sABPPuAATz7wAE8/AABPPxAATz8gAE8/QABPP2AATz9wAE8/gABPP6AATz+wAE9DoABPQ8AAT0PgAE9EAABPRDAAT0RAAE9EUABPRGAAT0RwAE9EkABPRLAAT0TAAE9E0ABPRPAAT0UAAE9I8ABPSRAAT0kwAE9JUABPSYAAT0mQAE9JoABPSbAAT0nAAE9J4ABPSgAAT0oQAE9KIABPSkAAT0pQAE9OQABPTmAAT06AAE9OoABPTtAAT07gAE9O8ABPTwAAT08QAE9PMABPT1AAT09gAE9PcABPT5AAT0+gAE9QMABPUEAAT1BgAE9UkABPVtAAT1kQAE9bQABPXbAAT1+wAE9iIABPZJAAT2aQAE9o0ABPaxAAT2swAE9rYABPa4AAT2ugAE9rwABPa/AAT2wQAE9sMABPbFAAT2xwAE9skABPbLAAT2zgAE9tEABPbSAAT21wAE9uQABPbnAAT26QAE9uwABPbvAAT28QAE9xYABPc6AAT3YQAE94UABPeIAAT3igAE94wABPeOAAT3kAAE95IABPeTAAT3lgAE96MABPe2AAT3uAAE97oABPe8AAT3vgAE98AABPfCAAT3xAAE98YABPfIAAT32wAE994ABPfhAAT35AAE9+cABPfqAAT37QAE9/AABPfzAAT39gAE9/gABPg3AAT4OQAE+DwABPg+AAT4QQAE+EIABPhDAAT4RAAE+EUABPhHAAT4SQAE+EoABPhLAAT4TQAE+E4ABPhXAAT4WAAE+FoABPiZAAT4mwAE+J0ABPifAAT4ogAE+KMABPikAAT4pQAE+KYABPioAAT4qgAE+Ks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ABQNpAAUDtAAFA9cABQP3AAUEFwAFBBkABQQbAAUEHQAFBB8ABQQiAAUEIwAFBCQABQQnAAUEKAAFBCoABQQrAAUELQAFBDAABQQxAAUEMgAFBDUABQQ2AAUEPwAFBEwABQRRAAUEUwAFBFUABQRaAAUEXQAFBGAABQRiAAUEhwAFBKsABQTSAAUE9gAFBPkABQT7AAUE/QAFBP8ABQUBAAUFAwAFBQQABQUHAAUFFAAFBSUABQUnAAUFKQAFBSsABQUtAAUFLwAFBTEABQUzAAUFNQAFBUYABQVJAAUFTAAFBU8ABQVSAAUFVQAFBVgABQVbAAUFXgAFBWAABQWfAAUFoQAFBaMABQWlAAUFqAAFBakABQWqAAUFqwAFBawABQWuAAUFsAAFBbEABQWyAAUFtAAFBbUABQX0AAUF9gAFBfgABQX6AAUF/QAFBf4ABQX/AAUGAAAFBgEABQYDAAUGBQAFBgYABQYHAAUGCQAFBgoABQZJAAUGSwAFBk4ABQZQAAUGUwAFBlQABQZVAAUGVgAFBlcABQZZAAUGWwAFBlwABQZdAAUGXwAFBmAABQZtAAUGbgAFBm8ABQZxAAUGsAAFBrIABQa0AAUGtgAFBrkABQa6AAUGuwAFBrwABQa9AAUGvwAFBsEABQbCAAUGwwAFBsUABQbGAAUHBQAFBwcABQcJAAUHCwAFBw4ABQcPAAUHEAAFBxEABQcSAAUHFAAFBxYABQcXAAUHGAAFBxoABQcbAAUHWgAFB1wABQdeAAUHYAAFB2MABQdkAAUHZQAFB2YABQdnAAUHaQAFB2sABQdsAAUHbQAFB28ABQdwAAUHrwAFB7EABQezAAUHtQAFB7gABQe5AAUHugAFB7sABQe8AAUHvgAFB8AABQfBAAUHwgAFB8QABQfFAAUIBAAFCAYABQgIAAUICgAFCA0ABQgOAAUIDwAFCBAABQgRAAUIEwAFCBUABQgWAAUIFwAFCBkABQgaAAUIPwAFCGMABQiKAAUIrgAFCLEABQizAAUItQAFCLcABQi5AAUIuwAFCLwABQi/AAUIzAAFCNsABQjdAAUI3wAFCOEABQjjAAUI5QAFCOcABQjpAAUI+AAFCPsABQj+AAUJAQAFCQQABQkHAAUJCgAFCQ0ABQkPAAUJTgAFCVAABQlSAAUJVAAFCVcABQlYAAUJWQAFCVoABQlbAAUJXQAFCV8ABQlgAAUJYQAFCWMABQlkAAUJowAFCaUABQmnAAUJqQAFCawABQmtAAUJrgAFCa8ABQmwAAUJsgAFCbQABQm1AAUJtgAFCbgABQm5AAUJ+AAFCfoABQn8AAUJ/gAFCgEABQoCAAUKAwAFCgQABQoFAAUKBwAFCgkABQoKAAUKCwAFCg0ABQoOAAUKTQAFCk8ABQpRAAUKUwAFClYABQpXAAUKWAAFClkABQpaAAUKXAAFCl4ABQpfAAUKYAAFCmIABQpjAAUKogAFCqQABQqmAAUKqAAFCqsABQqsAAUKrQAFCq4ABQqvAAUKsQAFCrMABQq0AAUKtQAFCrcABQq4AAUK9wAFCvkABQr7AAUK/QAFCwAABQsBAAULAgAFCwMABQsEAAULBgAFCwgABQsJAAULCgAFCwwABQsNAAULTAAFC04ABQtQAAULUgAFC1UABQtWAAULVwAFC1gABQtZAAULWwAFC10ABQteAAULXwAFC2EABQtiAAULrQAFC9AABQvwAAUMEAAFDBIABQwUAAUMFgAFDBgABQwbAAUMHAAFDB0ABQwgAAUMIQAFDCMABQwkAAUMJgAFDCkABQwqAAUMKwAFDC4ABQwvAAUMNAAFDEEABQxGAAUMSAAFDEoABQxPAAUMUgAFDFUABQxXAAUMfAAFDKAABQzHAAUM6wAFDO4ABQzwAAUM8gAFDPQABQz2AAUM+AAFDPkABQz8AAUNCQAFDRoABQ0cAAUNHgAFDSAABQ0iAAUNJAAFDSYABQ0oAAUNKgAFDTsABQ0+AAUNQQAFDUQABQ1HAAUNSgAFDU0ABQ1QAAUNUwAFDVUABQ2UAAUNlgAFDZgABQ2aAAUNnQAFDZ4ABQ2fAAUNoAAFDaEABQ2jAAUNpQAFDaYABQ2nAAUNqQAFDaoABQ3pAAUN6wAFDe0ABQ3vAAUN8gAFDfMABQ30AAUN9QAFDfYABQ34AAUN+gAFDfsABQ38AAUN/gAFDf8ABQ4+AAUOQAAFDkMABQ5FAAUOSAAFDkkABQ5KAAUOSwAFDkwABQ5OAAUOUAAFDlEABQ5SAAUOVAAFDlUABQ5iAAUOYwAFDmQABQ5mAAUOpQAFDqcABQ6pAAUOqwAFDq4ABQ6vAAUOsAAFDrEABQ6yAAUOtAAFDrYABQ63AAUOuAAFDroABQ67AAUO+gAFDvwABQ7+AAUPAAAFDwMABQ8EAAUPBQAFDwYABQ8HAAUPCQAFDwsABQ8MAAUPDQAFDw8ABQ8QAAUPTwAFD1EABQ9TAAUPVQAFD1gABQ9ZAAUPWgAFD1sABQ9cAAUPXgAFD2AABQ9hAAUPYgAFD2QABQ9lAAUPpAAFD6YABQ+oAAUPqgAFD60ABQ+uAAUPrwAFD7AABQ+xAAUPswAFD7UABQ+2AAUPtwAFD7kABQ+6AAUP+QAFD/sABQ/9AAUP/wAFEAIABRADAAUQBAAFEAUABRAGAAUQCAAFEAoABRALAAUQDAAFEA4ABRAPAAUQNAAFEFgABRB/AAUQowAFEKYABRCoAAUQqgAFEKwABRCuAAUQsAAFELEABRC0AAUQwQAFENAABRDSAAUQ1AAFENYABRDYAAUQ2gAFENwABRDeAAUQ7QAFEPAABRDzAAUQ9gAFEPkABRD8AAUQ/wAFEQIABREEAAURQwAFEUUABRFHAAURSQAFEUwABRFNAAURTgAFEU8ABRFQAAURUgAFEVQABRFVAAURVgAFEVgABRFZAAURmAAFEZoABRGcAAURngAFEaEABRGiAAURowAFEaQABRGlAAURpwAFEakABRGqAAURqwAFEa0ABRGuAAUR7QAFEe8ABRHxAAUR8wAFEfYABRH3AAUR+AAFEfkABRH6AAUR/AAFEf4ABRH/AAUSAAAFEgIABRIDAAUSQgAFEkQABRJGAAUSSAAFEksABRJMAAUSTQAFEk4ABRJPAAUSUQAFElMABRJUAAUSVQAFElcABRJYAAUSlwAFEpkABRKbAAUSnQAFEqAABRKhAAUSogAFEqMABRKkAAUSpgAFEqgABRKpAAUSqgAFEqwABRKtAAUS7AAFEu4ABRLwAAUS8gAFEvUABRL2AAUS9wAFEvgABRL5AAUS+wAFEv0ABRL+AAUS/wAFEwEABRMCAAUTQQAFE0MABRNFAAUTRwAFE0oABRNLAAUTTAAFE00ABRNOAAUTUAAFE1IABRNTAAUTVAAFE1YABRNXAAUTYAAFE2EABRNjAAUTcAAFE3EABRNyAAUTdAAFE4EABROCAAUTgwAFE4UABROSAAUTkwAFE5QABROWAAUTnwAFE64ABRO7AAUTygAFE9wABRPwAAUUBwAFFBkABRQiAAUUIwAFFCUABRQyAAUUMwAFFDQABRQ2AAUUPwAFFEkABRRQAAAAAAAABAIAAAAAAADEKgAAAAAAAAAAAAAAAAAFFFg= + + + + + symbol + + + + CDExternalApi + Undefined + 15 + CDExternalApi + 1 + + + + + + CDChainXcmConfig + Undefined + 2 + CDChainXcmConfig + 1 + + + + + + CDRuntimeMetadataItem + Undefined + 11 + CDRuntimeMetadataItem + 1 + + + + + + CDChainNode + Undefined + 19 + CDChainNode + 1 + + + + + + CDChainStorageItem + Undefined + 7 + CDChainStorageItem + 1 + + + + + + chainId + + + + disabled + + + + historyApiUrl + + + + isOrml + + + + name + + + + pricingApiType + + + + stakingApiUrl + + + + 1 + assets + + + + precision + + + + blockNumber + + + + identifier + + + + status + + + + chains + + + + name + + + + identifier + + + + price + + + + id + + + + peerAddress + + + + name + + + + url + + + + staking + + + + color + + + + apiQueryName + + + + purchaseProviders + + + + version + + + + 1 + availableDexIds + + + + isNative + + + + identifier + + + + name + + + + 1 + config + + + + identifier + + + + type + + + + address + + + + updatedAt + + + + fearless.ChainSubstrateV8MigrationPolicy + CDChain + Undefined + 1 + CDChain + 1 + + + + + + CDContactItem + Undefined + 10 + CDContactItem + 1 + + + + + + CDPolkaswapDex + Undefined + 18 + CDPolkaswapDex + 1 + + + + + + CDTransactionHistoryItem + Undefined + 5 + CDTransactionHistoryItem + 1 + + + + + + CDPhishingItem + Undefined + 14 + CDPhishingItem + 1 + + + + + + addressPrefix + + + \ No newline at end of file From ba01c4724b116824e40088059756a8629dd7d76b Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Mon, 2 Dec 2024 10:57:13 +0500 Subject: [PATCH 104/156] [#FLW-5091] The icons on the banners are on the wrong places --- fearless.xcodeproj/project.pbxproj | 8 ++++++++ .../xcshareddata/swiftpm/Package.resolved | 6 +++--- .../DappBrowser/Cells/BrowserExploreFeaturedCell.swift | 5 +++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index 87bae42ea1..988102ba0d 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -251,6 +251,8 @@ 074EB7AF290BA057000A2A6A /* ConnectionOfflineEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 074EB7AE290BA056000A2A6A /* ConnectionOfflineEvent.swift */; }; 074EB7B1290BA142000A2A6A /* ConnectionOnlineEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 074EB7B0290BA142000A2A6A /* ConnectionOnlineEvent.swift */; }; 075C647028098AFB00A55094 /* EthereumConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 075C646F28098AFB00A55094 /* EthereumConstants.swift */; }; + 075D9E482CF9B7E500ACA291 /* ChainSubstrateV8MigrationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 075D9E472CF9B7E500ACA291 /* ChainSubstrateV8MigrationPolicy.swift */; }; + 075D9E4A2CF9C25800ACA291 /* SubstrateV7toV8.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = 075D9E492CF9C25800ACA291 /* SubstrateV7toV8.xcmappingmodel */; }; 075E5FCF2C7F1A180044C142 /* TonConnectServiceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 075E5FCE2C7F1A180044C142 /* TonConnectServiceDelegate.swift */; }; 075E5FD12C7F1A630044C142 /* TonConnectService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 075E5FD02C7F1A630044C142 /* TonConnectService.swift */; }; 075FC63528D9AB1600E25263 /* CommonInputViewV2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 075FC63428D9AB1600E25263 /* CommonInputViewV2.swift */; }; @@ -3457,6 +3459,8 @@ 074EB7AE290BA056000A2A6A /* ConnectionOfflineEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectionOfflineEvent.swift; sourceTree = ""; }; 074EB7B0290BA142000A2A6A /* ConnectionOnlineEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectionOnlineEvent.swift; sourceTree = ""; }; 075C646F28098AFB00A55094 /* EthereumConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EthereumConstants.swift; sourceTree = ""; }; + 075D9E472CF9B7E500ACA291 /* ChainSubstrateV8MigrationPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainSubstrateV8MigrationPolicy.swift; sourceTree = ""; }; + 075D9E492CF9C25800ACA291 /* SubstrateV7toV8.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = SubstrateV7toV8.xcmappingmodel; sourceTree = ""; }; 075E5FCE2C7F1A180044C142 /* TonConnectServiceDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectServiceDelegate.swift; sourceTree = ""; }; 075E5FD02C7F1A630044C142 /* TonConnectService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectService.swift; sourceTree = ""; }; 075FC63428D9AB1600E25263 /* CommonInputViewV2.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommonInputViewV2.swift; sourceTree = ""; }; @@ -11121,6 +11125,7 @@ FA69A94627CE3476000352A6 /* SubstrateV2Mapping.xcmappingmodel */, FA28A9B129D2E451005AA42E /* MultiassetV9.xcmappingmodel */, 07EC555A2CD8A3600074132E /* MultiAssetV12.xcmappingmodel */, + 075D9E492CF9C25800ACA291 /* SubstrateV7toV8.xcmappingmodel */, ); path = MigrationMappings; sourceTree = ""; @@ -15821,6 +15826,7 @@ FACD428A2A5BE811009975AA /* ChainSubstrateV2MigrationPolicy.swift */, FACD428B2A5BE811009975AA /* SubstrateStorageMigrator.swift */, FACD428C2A5BE811009975AA /* ChainModelV4MigrationPolicy.swift */, + 075D9E472CF9B7E500ACA291 /* ChainSubstrateV8MigrationPolicy.swift */, ); path = SubstrateStorage; sourceTree = ""; @@ -18487,6 +18493,7 @@ FAD4292E2A865680001D6A16 /* BackupWalletImportedProtocols.swift in Sources */, 84BAB6102642C286007782D0 /* SelectedRebondVariant.swift in Sources */, 84F5107C263C0C11005D15AE /* AnyProviderCleaning.swift in Sources */, + 075D9E4A2CF9C25800ACA291 /* SubstrateV7toV8.xcmappingmodel in Sources */, FAA0134628DA12CD000A5230 /* StakingUnbondSetupPoolViewModelState.swift in Sources */, 84BEE22325646AC000D05EB3 /* SelectedUsernameChanged.swift in Sources */, 8467FD4124ED3C72005D486C /* AlignableContentControl.swift in Sources */, @@ -18525,6 +18532,7 @@ 9942034DCB680824831B0AC1 /* AccountCreatePresenter.swift in Sources */, AEA2C1B82681E9BD0069492E /* ValidatorSearchWireframe.swift in Sources */, 84C4C2D7255D2B780045B582 /* PinChangeWireframe.swift in Sources */, + 075D9E482CF9B7E500ACA291 /* ChainSubstrateV8MigrationPolicy.swift in Sources */, 84FB29992639AC2300BE0FCD /* YourValidatorList+SelectionConfirm.swift in Sources */, 8493D0DF26FE7D7400A28008 /* ChainRepositoryFactory.swift in Sources */, FAD4291E2A86567F001D6A16 /* WalletNameInteractor.swift in Sources */, diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 599bf00d5b..15964afc89 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -6,8 +6,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/openid/AppAuth-iOS.git", "state" : { - "revision" : "c89ed571ae140f8eb1142735e6e23d7bb8c34cb2", - "version" : "1.7.5" + "revision" : "2781038865a80e2c425a1da12cc1327bcd56501f", + "version" : "1.7.6" } }, { @@ -142,7 +142,7 @@ "location" : "https://github.com/soramitsu/shared-features-spm.git", "state" : { "branch" : "FW-new-ecosystem", - "revision" : "4a54a916ef2aa87d52e32341cd519b1c791f66e6" + "revision" : "9c8b40782d0b1f3e306ac24fed5048326df61cfe" } }, { diff --git a/fearless/Modules/DappBrowser/Cells/BrowserExploreFeaturedCell.swift b/fearless/Modules/DappBrowser/Cells/BrowserExploreFeaturedCell.swift index c5f10fc716..a70a19d2fb 100644 --- a/fearless/Modules/DappBrowser/Cells/BrowserExploreFeaturedCell.swift +++ b/fearless/Modules/DappBrowser/Cells/BrowserExploreFeaturedCell.swift @@ -3,7 +3,7 @@ import UIKit final class DappBrowserFeaturedCell: UICollectionViewCell { let posterImageView: UIImageView = { let imageView = UIImageView() - imageView.contentMode = .scaleAspectFit + imageView.contentMode = .scaleToFill imageView.clipsToBounds = true return imageView }() @@ -40,13 +40,14 @@ final class DappBrowserFeaturedCell: UICollectionViewCell { override func layoutSubviews() { super.layoutSubviews() iconViewImage.layer.cornerRadius = 8 - posterImageView.layer.cornerRadius = 15 } override func prepareForReuse() { super.prepareForReuse() posterImageView.kf.cancelDownloadTask() posterImageView.image = nil + iconViewImage.kf.cancelDownloadTask() + iconViewImage.image = nil } func configure(model: DappBrowserFeaturedViewModel) { From 8a742ece2c3be8f5d767ea16b0950b44065953e3 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Mon, 2 Dec 2024 13:08:05 +0500 Subject: [PATCH 105/156] =?UTF-8?q?[#FLW-5095]=20TON.=20The=20Connection?= =?UTF-8?q?=20doesn=E2=80=99t=20work?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DappBrowser/Cells/BrowserExploreFeaturedCell.swift | 5 +++-- fearless/Modules/DappBrowser/DappBrowserInteractor.swift | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/fearless/Modules/DappBrowser/Cells/BrowserExploreFeaturedCell.swift b/fearless/Modules/DappBrowser/Cells/BrowserExploreFeaturedCell.swift index a70a19d2fb..b66dc7baaf 100644 --- a/fearless/Modules/DappBrowser/Cells/BrowserExploreFeaturedCell.swift +++ b/fearless/Modules/DappBrowser/Cells/BrowserExploreFeaturedCell.swift @@ -53,9 +53,10 @@ final class DappBrowserFeaturedCell: UICollectionViewCell { func configure(model: DappBrowserFeaturedViewModel) { model.poster.loadImage( on: posterImageView, - placholder: R.image.featuredBanner(), targetSize: bounds.size, - animated: true + animated: true, + cornerRadius: 0, + completionHandler: nil ) model.icon.loadImage( on: iconViewImage, diff --git a/fearless/Modules/DappBrowser/DappBrowserInteractor.swift b/fearless/Modules/DappBrowser/DappBrowserInteractor.swift index 09d332d3b7..a3cfe7540b 100644 --- a/fearless/Modules/DappBrowser/DappBrowserInteractor.swift +++ b/fearless/Modules/DappBrowser/DappBrowserInteractor.swift @@ -94,4 +94,8 @@ extension DappBrowserInteractor: EventVisitorProtocol { func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { output?.didUpdate(wallet: event.account) } + + func processSelectedAccountChanged(event: SelectedAccountChanged) { + output?.didUpdate(wallet: event.account) + } } From 9a400f5e9d8f6f4e1fb9da373f299c0f3704c51a Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Tue, 3 Dec 2024 17:19:54 +0500 Subject: [PATCH 106/156] =?UTF-8?q?[#FLW-5096]=20Swap=20button=20doesn?= =?UTF-8?q?=E2=80=99t=20work?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Helpres/SwapQuoteAmountFactory.swift | 19 +------- .../PolkaswapAdjustmentAssembly.swift | 22 ++------- .../PolkaswapAdjustmentInteractor.swift | 47 ++++++++++++++----- .../PolkaswapAdjustmentPresenter.swift | 20 ++++---- 4 files changed, 50 insertions(+), 58 deletions(-) diff --git a/fearless/Modules/PolkaswapFlow/Helpres/SwapQuoteAmountFactory.swift b/fearless/Modules/PolkaswapFlow/Helpres/SwapQuoteAmountFactory.swift index df369eb95f..93fb4218ec 100644 --- a/fearless/Modules/PolkaswapFlow/Helpres/SwapQuoteAmountFactory.swift +++ b/fearless/Modules/PolkaswapFlow/Helpres/SwapQuoteAmountFactory.swift @@ -57,15 +57,13 @@ final class PolkaswapAdjustmentViewModelFactory: PolkaswapAdjustmentViewModelFac } private let assetBalanceFormatterFactory: AssetBalanceFormatterFactoryProtocol - private let xorChainAsset: ChainAsset private var wallet: MetaAccountModel + init( wallet: MetaAccountModel, - xorChainAsset: ChainAsset, assetBalanceFormatterFactory: AssetBalanceFormatterFactoryProtocol ) { self.wallet = wallet - self.xorChainAsset = xorChainAsset self.assetBalanceFormatterFactory = assetBalanceFormatterFactory } @@ -219,21 +217,6 @@ final class PolkaswapAdjustmentViewModelFactory: PolkaswapAdjustmentViewModelFac return (receiveValue, minMaxValue) } - private func createLiqitityProviderFeeViewMode( - lpAmount: Decimal, - locale: Locale - ) -> BalanceViewModelProtocol { - let balanceViewModelFactory = createBalanceViewModelFactory(for: xorChainAsset) - let lpViewModel = balanceViewModelFactory.balanceFromPrice( - lpAmount, - priceData: xorChainAsset.asset.getPrice(for: wallet.selectedCurrency), - isApproximately: true, - usageCase: .detailsCrypto - ).value(for: locale) - - return lpViewModel - } - private func createSwapRoute( dexId: UInt32, swapToChainAsset: ChainAsset, diff --git a/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentAssembly.swift b/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentAssembly.swift index 64f23fa70d..6c2aa5e6f6 100644 --- a/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentAssembly.swift +++ b/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentAssembly.swift @@ -14,10 +14,8 @@ final class PolkaswapAdjustmentAssembly { let chainRegistry = ChainRegistryFacade.sharedRegistry guard - let xorChainAsset = chainRegistry.getChain(for: Chain.soraMain.genesisHash)?.utilityChainAssets().first, - let connection = chainRegistry.getConnection(for: xorChainAsset.chain.chainId), - let accountResponse = wallet.fetch(for: xorChainAsset.chain.accountRequest()), - let runtimeService = chainRegistry.getRuntimeProvider(for: xorChainAsset.chain.chainId) + let connection = chainRegistry.getConnection(for: Chain.soraMain.genesisHash), + let runtimeService = chainRegistry.getRuntimeProvider(for: Chain.soraMain.genesisHash) else { return nil } @@ -39,7 +37,7 @@ final class PolkaswapAdjustmentAssembly { let operationFactory = PolkaswapOperationFactory( storageRequestFactory: storageOperationFactory, chainRegistry: chainRegistry, - chainId: xorChainAsset.chain.chainId + chainId: Chain.soraMain.genesisHash ) let logger = Logger.shared @@ -48,15 +46,6 @@ final class PolkaswapAdjustmentAssembly { logger: logger ) - let extrinsicService = ExtrinsicService( - accountId: accountResponse.accountId, - chainFormat: xorChainAsset.chain.chainFormat, - cryptoType: accountResponse.cryptoType, - runtimeRegistry: runtimeService, - engine: connection, - operationManager: operationManager - ) - let mapper = PolkaswapSettingMapper() let settingsRepository: CoreDataRepository = repositoryFacade.createRepository( @@ -68,12 +57,11 @@ final class PolkaswapAdjustmentAssembly { let callFactory = SubstrateCallFactoryDefault(runtimeService: runtimeService) let interactor = PolkaswapAdjustmentInteractor( - xorChainAsset: xorChainAsset, + wallet: wallet, subscriptionService: subscriptionService, accountInfoSubscriptionAdapter: accountInfoSubscriptionAdapter, feeProxy: ExtrinsicFeeProxy(), settingsRepository: AnyDataProviderRepository(settingsRepository), - extrinsicService: extrinsicService, operationFactory: operationFactory, operationManager: operationManager, userDefaultsStorage: SettingsManager.shared, @@ -84,14 +72,12 @@ final class PolkaswapAdjustmentAssembly { let viewModelFactory = PolkaswapAdjustmentViewModelFactory( wallet: wallet, - xorChainAsset: xorChainAsset, assetBalanceFormatterFactory: AssetBalanceFormatterFactory() ) let dataValidatingFactory = SendDataValidatingFactory(presentable: router) let presenter = PolkaswapAdjustmentPresenter( wallet: wallet, - xorChainAsset: xorChainAsset, swapChainAsset: chainAsset, viewModelFactory: viewModelFactory, dataValidatingFactory: dataValidatingFactory, diff --git a/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentInteractor.swift b/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentInteractor.swift index 36c01601f2..b22d7b7785 100644 --- a/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentInteractor.swift +++ b/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentInteractor.swift @@ -14,11 +14,11 @@ final class PolkaswapAdjustmentInteractor: RuntimeConstantFetching { private let subscriptionService: PolkaswapRemoteSubscriptionServiceProtocol private let settingsRepository: AnyDataProviderRepository private let operationManager: OperationManagerProtocol - private var xorChainAsset: ChainAsset - private let extrinsicService: ExtrinsicServiceProtocol + private var xorChainAsset: ChainAsset? private let userDefaultsStorage: SettingsManagerProtocol private let callFactory: SubstrateCallFactoryProtocol private let chainModelRepo: AsyncAnyRepository + private let wallet: MetaAccountModel private var dexIds: [UInt32] = [] private var swapValues: [SwapValues] = [] @@ -27,24 +27,22 @@ final class PolkaswapAdjustmentInteractor: RuntimeConstantFetching { private var dexInfos: [PolkaswapDexInfo] = [] init( - xorChainAsset: ChainAsset, + wallet: MetaAccountModel, subscriptionService: PolkaswapRemoteSubscriptionServiceProtocol, accountInfoSubscriptionAdapter: AccountInfoSubscriptionAdapterProtocol, feeProxy: ExtrinsicFeeProxyProtocol, settingsRepository: AnyDataProviderRepository, - extrinsicService: ExtrinsicServiceProtocol, operationFactory: PolkaswapOperationFactoryProtocol, operationManager: OperationManagerProtocol, userDefaultsStorage: SettingsManagerProtocol, callFactory: SubstrateCallFactoryProtocol, chainModelRepo: AsyncAnyRepository ) { - self.xorChainAsset = xorChainAsset + self.wallet = wallet self.subscriptionService = subscriptionService self.accountInfoSubscriptionAdapter = accountInfoSubscriptionAdapter self.feeProxy = feeProxy self.settingsRepository = settingsRepository - self.extrinsicService = extrinsicService self.operationFactory = operationFactory self.operationManager = operationManager self.userDefaultsStorage = userDefaultsStorage @@ -133,6 +131,26 @@ final class PolkaswapAdjustmentInteractor: RuntimeConstantFetching { operationManager.enqueue(operations: [operation], in: .transient) } + + private func createExtrinsicService() async throws -> ExtrinsicServiceProtocol? { + let chainRegistry = ChainRegistryFacade.sharedRegistry + guard + let chain = try await chainModelRepo.fetch(by: Chain.soraMain.genesisHash), + let accountResponse = wallet.fetch(for: chain.accountRequest()), + let runtimeService = chainRegistry.getRuntimeProvider(for: chain.chainId), + let connection = chainRegistry.getConnection(for: chain.chainId) + else { + return nil + } + return ExtrinsicService( + accountId: accountResponse.accountId, + chainFormat: chain.chainFormat, + cryptoType: accountResponse.cryptoType, + runtimeRegistry: runtimeService, + engine: connection, + operationManager: operationManager + ) + } } // MARK: - PolkaswapAdjustmentInteractorInput @@ -145,7 +163,7 @@ extension PolkaswapAdjustmentInteractor: PolkaswapAdjustmentInteractorInput { fetchDisclaimerVisible() Task { [weak self] in guard let self else { return } - let xorChainModel = try await chainModelRepo.fetch(by: xorChainAsset.chain.chainId) + let xorChainModel = try await chainModelRepo.fetch(by: Chain.soraMain.genesisHash) if let utilityChainAsset = xorChainModel?.utilityChainAssets().first { self.xorChainAsset = utilityChainAsset self.output?.didReceive(xorChainAsset: utilityChainAsset) @@ -254,11 +272,16 @@ extension PolkaswapAdjustmentInteractor: PolkaswapAdjustmentInteractorInput { liquiditySourceType.rawValue ].joined() - feeProxy.estimateFee( - using: extrinsicService, - reuseIdentifier: reuseIdentifier, - setupBy: builderClosure - ) + Task { + guard let extrinsicService = try await createExtrinsicService() else { + return + } + feeProxy.estimateFee( + using: extrinsicService, + reuseIdentifier: reuseIdentifier, + setupBy: builderClosure + ) + } } func fetchDisclaimerVisible() { diff --git a/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentPresenter.swift b/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentPresenter.swift index 8e80d2ae7d..533c59c8d8 100644 --- a/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentPresenter.swift +++ b/fearless/Modules/PolkaswapFlow/PolkaswapAdjustment/PolkaswapAdjustmentPresenter.swift @@ -29,7 +29,7 @@ final class PolkaswapAdjustmentPresenter { private let logger: LoggerProtocol private var polkaswapRemoteSettings: PolkaswapRemoteSettings? - private var xorChainAsset: ChainAsset + private var xorChainAsset: ChainAsset? private var swapVariant: SwapVariant = .desiredInput private var swapFromChainAsset: ChainAsset? private var swapToChainAsset: ChainAsset? @@ -70,7 +70,6 @@ final class PolkaswapAdjustmentPresenter { init( wallet: MetaAccountModel, - xorChainAsset: ChainAsset, swapChainAsset: ChainAsset?, viewModelFactory: PolkaswapAdjustmentViewModelFactoryProtocol, dataValidatingFactory: SendDataValidatingFactory, @@ -81,7 +80,6 @@ final class PolkaswapAdjustmentPresenter { localizationManager: LocalizationManagerProtocol ) { self.wallet = wallet - self.xorChainAsset = xorChainAsset self.viewModelFactory = viewModelFactory self.dataValidatingFactory = dataValidatingFactory self.logger = logger @@ -360,7 +358,7 @@ final class PolkaswapAdjustmentPresenter { } private func provideFeeViewModel() { - guard let swapFromFee = networkFee else { + guard let swapFromFee = networkFee, let xorChainAsset else { return } let balanceViewModelFactory = viewModelFactory @@ -403,7 +401,8 @@ final class PolkaswapAdjustmentPresenter { let networkFeeViewModel = networkFeeViewModel, let detailsViewModel = detailsViewModel, let fromAmount = swapFromInputResult?.absoluteValue(from: swapFromBalance ?? .zero), - let toAmount = swapToInputResult?.absoluteValue(from: swapToBalance ?? .zero) + let toAmount = swapToInputResult?.absoluteValue(from: swapToBalance ?? .zero), + let xorChainAsset else { return nil } @@ -443,7 +442,7 @@ final class PolkaswapAdjustmentPresenter { contextTag = InputTag.swapFrom.rawValue filterChainAsset = swapToChainAsset } - let showChainAssets = strongSelf.xorChainAsset.chain.chainAssets + let showChainAssets = strongSelf.xorChainAsset?.chain.chainAssets .filter { $0.chainAssetId != filterChainAsset?.chainAssetId } strongSelf.router.showSelectAsset( from: strongSelf.view, @@ -548,7 +547,7 @@ extension PolkaswapAdjustmentPresenter: PolkaswapAdjustmentViewOutput { } func didTapSelectFromAsset() { - let showChainAssets = xorChainAsset.chain.chainAssets + let showChainAssets = xorChainAsset?.chain.chainAssets .filter { $0.chainAssetId != swapToChainAsset?.chainAssetId } router.showSelectAsset( from: view, @@ -561,7 +560,7 @@ extension PolkaswapAdjustmentPresenter: PolkaswapAdjustmentViewOutput { } func didTapSelectToAsset() { - let showChainAssets = xorChainAsset.chain.chainAssets + let showChainAssets = xorChainAsset?.chain.chainAssets .filter { $0.chainAssetId != swapFromChainAsset?.chainAssetId } router.showSelectAsset( from: view, @@ -682,7 +681,7 @@ extension PolkaswapAdjustmentPresenter: PolkaswapAdjustmentViewOutput { } // if don't have XOR balance for fee payment, fee will be payment from receive amount - if xorBalance.or(.zero) < networkFee, swapToChainAsset?.identifier == xorChainAsset.identifier { + if xorBalance.or(.zero) < networkFee, swapToChainAsset?.identifier == xorChainAsset?.identifier { if params.toAmount <= networkFee { presentAddMoreAmountAlert() return @@ -699,7 +698,7 @@ extension PolkaswapAdjustmentPresenter: PolkaswapAdjustmentViewOutput { } var feeAndTip: Decimal = .zero - if swapFromChainAsset?.identifier == xorChainAsset.identifier { + if swapFromChainAsset?.identifier == xorChainAsset?.identifier { feeAndTip = networkFee } @@ -788,6 +787,7 @@ extension PolkaswapAdjustmentPresenter: PolkaswapAdjustmentInteractorOutput { switch result { case let .success(info): guard let feeValue = BigUInt(info.fee), + let xorChainAsset, let fee = Decimal.fromSubstrateAmount( feeValue, precision: Int16(xorChainAsset.asset.precision) From f8d4f675eacbb5d377f5b52fdc72fa27478a6d70 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Thu, 5 Dec 2024 14:59:23 +0500 Subject: [PATCH 107/156] [#FLW-5042] Substrate. Update the app. Black screen on the Staking --- fearless.xcodeproj/project.pbxproj | 23 +++++++++---- .../xcshareddata/swiftpm/Package.resolved | 21 ++++++------ .../EntityToModel/ChainModelMapper.swift | 32 +++++++++++++++---- .../DappBrowserViewController.swift | 2 +- 4 files changed, 52 insertions(+), 26 deletions(-) diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index 988102ba0d..63a147ea38 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -252,7 +252,6 @@ 074EB7B1290BA142000A2A6A /* ConnectionOnlineEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 074EB7B0290BA142000A2A6A /* ConnectionOnlineEvent.swift */; }; 075C647028098AFB00A55094 /* EthereumConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 075C646F28098AFB00A55094 /* EthereumConstants.swift */; }; 075D9E482CF9B7E500ACA291 /* ChainSubstrateV8MigrationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 075D9E472CF9B7E500ACA291 /* ChainSubstrateV8MigrationPolicy.swift */; }; - 075D9E4A2CF9C25800ACA291 /* SubstrateV7toV8.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = 075D9E492CF9C25800ACA291 /* SubstrateV7toV8.xcmappingmodel */; }; 075E5FCF2C7F1A180044C142 /* TonConnectServiceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 075E5FCE2C7F1A180044C142 /* TonConnectServiceDelegate.swift */; }; 075E5FD12C7F1A630044C142 /* TonConnectService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 075E5FD02C7F1A630044C142 /* TonConnectService.swift */; }; 075FC63528D9AB1600E25263 /* CommonInputViewV2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 075FC63428D9AB1600E25263 /* CommonInputViewV2.swift */; }; @@ -2197,6 +2196,7 @@ FA2E9BBD27A293DA0023FAD2 /* FilterSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2E9BBC27A293DA0023FAD2 /* FilterSet.swift */; }; FA2E9BBF27A297CE0023FAD2 /* FilterSectionViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2E9BBE27A297CE0023FAD2 /* FilterSectionViewModel.swift */; }; FA2E9BC127A2A1000023FAD2 /* FilterSectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2E9BC027A2A1000023FAD2 /* FilterSectionHeaderView.swift */; }; + FA2F50042D01A81A00ED1441 /* SubstrateV7toV8.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = FA2F50032D01A81A00ED1441 /* SubstrateV7toV8.xcmappingmodel */; }; FA2FC7C928B3805400CC0A42 /* JoinPoolCall.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2FC7C628B3805400CC0A42 /* JoinPoolCall.swift */; }; FA2FC7CA28B3805400CC0A42 /* SetMetadataCall.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2FC7C728B3805400CC0A42 /* SetMetadataCall.swift */; }; FA2FC7CB28B3805400CC0A42 /* CreatePoolCall.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2FC7C828B3805400CC0A42 /* CreatePoolCall.swift */; }; @@ -3460,7 +3460,6 @@ 074EB7B0290BA142000A2A6A /* ConnectionOnlineEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectionOnlineEvent.swift; sourceTree = ""; }; 075C646F28098AFB00A55094 /* EthereumConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EthereumConstants.swift; sourceTree = ""; }; 075D9E472CF9B7E500ACA291 /* ChainSubstrateV8MigrationPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainSubstrateV8MigrationPolicy.swift; sourceTree = ""; }; - 075D9E492CF9C25800ACA291 /* SubstrateV7toV8.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = SubstrateV7toV8.xcmappingmodel; sourceTree = ""; }; 075E5FCE2C7F1A180044C142 /* TonConnectServiceDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectServiceDelegate.swift; sourceTree = ""; }; 075E5FD02C7F1A630044C142 /* TonConnectService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectService.swift; sourceTree = ""; }; 075FC63428D9AB1600E25263 /* CommonInputViewV2.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommonInputViewV2.swift; sourceTree = ""; }; @@ -5519,6 +5518,7 @@ FA2E9BBC27A293DA0023FAD2 /* FilterSet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilterSet.swift; sourceTree = ""; }; FA2E9BBE27A297CE0023FAD2 /* FilterSectionViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilterSectionViewModel.swift; sourceTree = ""; }; FA2E9BC027A2A1000023FAD2 /* FilterSectionHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilterSectionHeaderView.swift; sourceTree = ""; }; + FA2F50032D01A81A00ED1441 /* SubstrateV7toV8.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = SubstrateV7toV8.xcmappingmodel; sourceTree = ""; }; FA2FC7C628B3805400CC0A42 /* JoinPoolCall.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JoinPoolCall.swift; sourceTree = ""; }; FA2FC7C728B3805400CC0A42 /* SetMetadataCall.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetMetadataCall.swift; sourceTree = ""; }; FA2FC7C828B3805400CC0A42 /* CreatePoolCall.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CreatePoolCall.swift; sourceTree = ""; }; @@ -11119,13 +11119,13 @@ 84CEAAEB26D6D91A0021B881 /* MigrationMappings */ = { isa = PBXGroup; children = ( + FA2F50032D01A81A00ED1441 /* SubstrateV7toV8.xcmappingmodel */, FABA161C2B0C94C9001AF2F0 /* UserDataModelV10toV11.xcmappingmodel */, 846CA7712707A3060011124C /* SingleToMultiasset.xcmappingmodel */, FA9278A727C382C600FF7B5B /* MultiassetV2.xcmappingmodel */, FA69A94627CE3476000352A6 /* SubstrateV2Mapping.xcmappingmodel */, FA28A9B129D2E451005AA42E /* MultiassetV9.xcmappingmodel */, 07EC555A2CD8A3600074132E /* MultiAssetV12.xcmappingmodel */, - 075D9E492CF9C25800ACA291 /* SubstrateV7toV8.xcmappingmodel */, ); path = MigrationMappings; sourceTree = ""; @@ -18493,7 +18493,7 @@ FAD4292E2A865680001D6A16 /* BackupWalletImportedProtocols.swift in Sources */, 84BAB6102642C286007782D0 /* SelectedRebondVariant.swift in Sources */, 84F5107C263C0C11005D15AE /* AnyProviderCleaning.swift in Sources */, - 075D9E4A2CF9C25800ACA291 /* SubstrateV7toV8.xcmappingmodel in Sources */, + FA2F50042D01A81A00ED1441 /* SubstrateV7toV8.xcmappingmodel in Sources */, FAA0134628DA12CD000A5230 /* StakingUnbondSetupPoolViewModelState.swift in Sources */, 84BEE22325646AC000D05EB3 /* SelectedUsernameChanged.swift in Sources */, 8467FD4124ED3C72005D486C /* AlignableContentControl.swift in Sources */, @@ -20400,9 +20400,12 @@ ); MARKETING_VERSION = 4.0.1; OTHER_SWIFT_FLAGS = "$(inherited)"; - PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearlesswallet; + PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 1; }; @@ -20428,9 +20431,12 @@ "$(FRAMEWORK_SEARCH_PATHS)", ); MARKETING_VERSION = 4.0.1; - PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearlesswallet; + PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 1; }; @@ -20568,9 +20574,12 @@ ); MARKETING_VERSION = 4.0.1; OTHER_SWIFT_FLAGS = "$(inherited)"; - PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearlesswallet; + PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; + SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; + SUPPORTS_MACCATALYST = NO; + SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 1; }; diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 15964afc89..8874c70d24 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,5 +1,4 @@ { - "originHash" : "db3e9f7067135f4497b6059ac444951778a2f8ca758335577305759626739473", "pins" : [ { "identity" : "appauth-ios", @@ -136,15 +135,6 @@ "version" : "0.1.7" } }, - { - "identity" : "shared-features-spm", - "kind" : "remoteSourceControl", - "location" : "https://github.com/soramitsu/shared-features-spm.git", - "state" : { - "branch" : "FW-new-ecosystem", - "revision" : "9c8b40782d0b1f3e306ac24fed5048326df61cfe" - } - }, { "identity" : "swift-atomics", "kind" : "remoteSourceControl", @@ -244,6 +234,15 @@ "version" : "1.3.2" } }, + { + "identity" : "swiftformat", + "kind" : "remoteSourceControl", + "location" : "https://github.com/nicklockwood/SwiftFormat", + "state" : { + "revision" : "2d5a2b6bde636c1feae2c852ab9a50f221e98c66", + "version" : "0.55.3" + } + }, { "identity" : "swiftimagereadwrite", "kind" : "remoteSourceControl", @@ -335,5 +334,5 @@ } } ], - "version" : 3 + "version" : 2 } diff --git a/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift b/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift index 74a2873c1b..4f021ee4c5 100644 --- a/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift +++ b/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift @@ -29,7 +29,7 @@ final class ChainModelMapper { ) } - private func createAsset(from entity: CDAsset) -> AssetModel? { + private func createAsset(from entity: CDAsset, ecosystem: Ecosystem) -> AssetModel? { var symbol: String? if let entitySymbol = entity.symbol { symbol = entitySymbol @@ -69,7 +69,25 @@ final class ChainModelMapper { priceProvider = PriceProvider(type: type, id: id, precision: Int16(precision)) } - guard let assetType = ChainAssetType(storageValue: entity.type) else { + guard let assetType: ChainAssetType = entity.type.map({ type in + switch ecosystem { + case .substrate: + let substrateType = SubstrateAssetType(rawValue: type) ?? .normal + + return .substrate(substrateType: substrateType) + case .ethereumBased: + let substrateType = SubstrateAssetType(rawValue: type) ?? .normal + + return .substrate(substrateType: substrateType) + case .ethereum: + let ethereumType = EthereumAssetType(rawValue: type) ?? .normal + + return .ethereum(ethereumType: ethereumType) + case .ton: + let tonType = TonAssetType(rawValue: type) ?? .normal + return .ton(tonType: tonType) + } + }) else { return nil } @@ -159,8 +177,8 @@ final class ChainModelMapper { if let oldAssets = entity.assets as? Set, - let updatedAsset = oldAssets.first(where: { cdAsset in - cdAsset.id == assetModel.id + let updatedAsset = oldAssets.first(where: { asset in + asset.id == assetModel.id }) { if let oldPrices = updatedAsset.priceData as? Set { oldPrices.forEach { cdPriceData in @@ -176,8 +194,8 @@ final class ChainModelMapper { } if let oldAssets = entity.assets as? Set { - oldAssets.forEach { cdAsset in - context.delete(cdAsset) + oldAssets.forEach { asset in + context.delete(asset) } } @@ -566,7 +584,7 @@ extension ChainModelMapper: CoreDataMapperProtocol { return nil } - return createAsset(from: asset) + return createAsset(from: asset, ecosystem: ecosystem) } let assets = Set(assetsArray) diff --git a/fearless/Modules/DappBrowser/DappBrowserViewController.swift b/fearless/Modules/DappBrowser/DappBrowserViewController.swift index c9cdf9ab00..489ef6a8dc 100644 --- a/fearless/Modules/DappBrowser/DappBrowserViewController.swift +++ b/fearless/Modules/DappBrowser/DappBrowserViewController.swift @@ -216,7 +216,7 @@ extension DappBrowserViewController: UITableViewDelegate { func tableView(_: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { switch viewModel[indexPath.section] { case .featured: - return 170 + return 140 case .section: return 64 } From 4400b5c5fb49b935011f74cd62d8de50e58eb4bf Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Thu, 5 Dec 2024 18:02:41 +0500 Subject: [PATCH 108/156] [#FLW-5098] There is a crash after watching all sliders --- .../EntityToModel/ChainModelMapper.swift | 35 +++++++++++++------ 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift b/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift index 4f021ee4c5..446ef13567 100644 --- a/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift +++ b/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift @@ -72,20 +72,33 @@ final class ChainModelMapper { guard let assetType: ChainAssetType = entity.type.map({ type in switch ecosystem { case .substrate: - let substrateType = SubstrateAssetType(rawValue: type) ?? .normal - - return .substrate(substrateType: substrateType) + if let type = ChainAssetType(storageValue: type) { + return type + } else { + let substrateType = SubstrateAssetType(rawValue: type) ?? .normal + return .substrate(substrateType: substrateType) + } case .ethereumBased: - let substrateType = SubstrateAssetType(rawValue: type) ?? .normal - - return .substrate(substrateType: substrateType) + if let type = ChainAssetType(storageValue: type) { + return type + } else { + let substrateType = SubstrateAssetType(rawValue: type) ?? .normal + return .substrate(substrateType: substrateType) + } case .ethereum: - let ethereumType = EthereumAssetType(rawValue: type) ?? .normal - - return .ethereum(ethereumType: ethereumType) + if let type = ChainAssetType(storageValue: type) { + return type + } else { + let ethereumType = EthereumAssetType(rawValue: type) ?? .normal + return .ethereum(ethereumType: ethereumType) + } case .ton: - let tonType = TonAssetType(rawValue: type) ?? .normal - return .ton(tonType: tonType) + if let type = ChainAssetType(storageValue: type) { + return type + } else { + let tonType = TonAssetType(rawValue: type) ?? .normal + return .ton(tonType: tonType) + } } }) else { return nil From 5b13e3af5d5a9e6fbf7f9325b21a448cd9621ae5 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Thu, 5 Dec 2024 18:25:43 +0500 Subject: [PATCH 109/156] select wallet in dapp browser module has been disabled --- fearless/Modules/DappBrowser/DappBrowserPresenter.swift | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fearless/Modules/DappBrowser/DappBrowserPresenter.swift b/fearless/Modules/DappBrowser/DappBrowserPresenter.swift index debcffdf2c..fd61da6e35 100644 --- a/fearless/Modules/DappBrowser/DappBrowserPresenter.swift +++ b/fearless/Modules/DappBrowser/DappBrowserPresenter.swift @@ -136,10 +136,10 @@ extension DappBrowserPresenter: DappBrowserViewOutput { } func didTapOnWalletSelectButton() { - router.showWalletManagment( - from: view, - moduleOutput: self - ) +// router.showWalletManagment( +// from: view, +// moduleOutput: self +// ) } func didTapOnNetworkSelectButton() { From ef0bb4590c7ff3111839f3b2840ce23da3704c2d Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Fri, 6 Dec 2024 14:44:34 +0500 Subject: [PATCH 110/156] [#FLW-5098] There is a crash after watching all sliders --- .../EntityToModel/ChainModelMapper.swift | 36 +++----- .../ChainSubstrateV8MigrationPolicy.swift | 83 ++++++++++++++++--- .../xcmapping.xml | 6 +- fearless/Modules/Root/RootInteractor.swift | 6 +- .../Modules/Root/RootPresenterFactory.swift | 3 - 5 files changed, 87 insertions(+), 47 deletions(-) diff --git a/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift b/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift index 446ef13567..bfdb78258a 100644 --- a/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift +++ b/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift @@ -70,35 +70,19 @@ final class ChainModelMapper { } guard let assetType: ChainAssetType = entity.type.map({ type in + if let type = ChainAssetType(storageValue: type) { + return type + } switch ecosystem { - case .substrate: - if let type = ChainAssetType(storageValue: type) { - return type - } else { - let substrateType = SubstrateAssetType(rawValue: type) ?? .normal - return .substrate(substrateType: substrateType) - } - case .ethereumBased: - if let type = ChainAssetType(storageValue: type) { - return type - } else { - let substrateType = SubstrateAssetType(rawValue: type) ?? .normal - return .substrate(substrateType: substrateType) - } + case .substrate, .ethereumBased: + let substrateType = SubstrateAssetType(rawValue: type) ?? .normal + return .substrate(substrateType: substrateType) case .ethereum: - if let type = ChainAssetType(storageValue: type) { - return type - } else { - let ethereumType = EthereumAssetType(rawValue: type) ?? .normal - return .ethereum(ethereumType: ethereumType) - } + let ethereumType = EthereumAssetType(rawValue: type) ?? .normal + return .ethereum(ethereumType: ethereumType) case .ton: - if let type = ChainAssetType(storageValue: type) { - return type - } else { - let tonType = TonAssetType(rawValue: type) ?? .normal - return .ton(tonType: tonType) - } + let tonType = TonAssetType(rawValue: type) ?? .normal + return .ton(tonType: tonType) } }) else { return nil diff --git a/fearless/Common/Storage/Migration/SubstrateStorage/ChainSubstrateV8MigrationPolicy.swift b/fearless/Common/Storage/Migration/SubstrateStorage/ChainSubstrateV8MigrationPolicy.swift index 3a5057c058..0489acc52b 100644 --- a/fearless/Common/Storage/Migration/SubstrateStorage/ChainSubstrateV8MigrationPolicy.swift +++ b/fearless/Common/Storage/Migration/SubstrateStorage/ChainSubstrateV8MigrationPolicy.swift @@ -1,25 +1,84 @@ import Foundation +import SSFModels import CoreData class ChainSubstrateV8MigrationPolicy: NSEntityMigrationPolicy { - override func createRelationships( - forDestination chainModel: NSManagedObject, + override func createDestinationInstances( + forSource sInstance: NSManagedObject, in mapping: NSEntityMapping, manager: NSMigrationManager ) throws { - try super.createRelationships(forDestination: chainModel, in: mapping, manager: manager) - - guard let options = chainModel.value(forKey: "options") as? [String] else { - chainModel.setValue("substrate", forKey: "ecosystem") - return + try super.createDestinationInstances(forSource: sInstance, in: mapping, manager: manager) + + guard let updatedChainModel = manager.destinationInstances( + forEntityMappingName: mapping.name, + sourceInstances: [sInstance] + ).first else { + throw ConvenienceError(error: "Can't create destination instance") } - if options.contains("ethereum") { - chainModel.setValue("ethereum", forKey: "ecosystem") - } else if options.contains("ethereumBased") { - chainModel.setValue("ethereumBased", forKey: "ecosystem") + let options = sInstance.value(forKey: "options") as? [String] + if options?.contains("ethereum") == true { + updatedChainModel.setValue("ethereum", forKey: "ecosystem") + } else if options?.contains("ethereumBased") == true { + updatedChainModel.setValue("ethereumBased", forKey: "ecosystem") } else { - chainModel.setValue("substrate", forKey: "ecosystem") + updatedChainModel.setValue("substrate", forKey: "ecosystem") + } + + guard let chainAssetsModels = sInstance.value(forKey: "assets") as? Set else { + throw ConvenienceError(error: "No assets value") + } + + let assetModels: [NSManagedObject] = chainAssetsModels.compactMap { + guard + let id = $0.value(forKey: "id") as? String, + let name = $0.value(forKey: "name") as? String, + let symbol = $0.value(forKey: "symbol") as? String, + let precision = $0.value(forKey: "precision") as? UInt16 + else { + return nil + } + let icon = $0.value(forKey: "icon") as? URL + let currencyId = $0.value(forKey: "currencyId") as? String + let existentialDeposit = $0.value(forKey: "existentialDeposit") as? String + let color = $0.value(forKey: "color") as? String + let isUtility: Bool = ($0.value(forKey: "isUtility") as? Bool) ?? false + let isNative: Bool = ($0.value(forKey: "isNative") as? Bool) ?? false + let staking: String? = $0.value(forKey: "staking") as? String + let purchaseProviders: [String]? = $0.value(forKey: "purchaseProviders") as? [String] + let priceId: String? = $0.value(forKey: "priceId") as? String + + let updatedAssetModel = NSEntityDescription.insertNewObject( + forEntityName: "CDAsset", + into: manager.destinationContext + ) + + updatedAssetModel.setValue(id, forKey: "id") + updatedAssetModel.setValue(symbol, forKey: "symbol") + updatedAssetModel.setValue(precision, forKey: "precision") + updatedAssetModel.setValue(icon, forKey: "icon") + updatedAssetModel.setValue(currencyId, forKey: "currencyId") + updatedAssetModel.setValue(existentialDeposit, forKey: "existentialDeposit") + updatedAssetModel.setValue(color, forKey: "color") + updatedAssetModel.setValue(isNative, forKey: "isNative") + updatedAssetModel.setValue(isUtility, forKey: "isUtility") + updatedAssetModel.setValue(purchaseProviders, forKey: "purchaseProviders") + updatedAssetModel.setValue(staking, forKey: "staking") + + if let ethereumType = $0.value(forKey: "ethereumType") as? String { + updatedAssetModel.setValue("ethereum-" + ethereumType, forKey: "type") + } else if let type = $0.value(forKey: "type") as? String { + updatedAssetModel.setValue("substrate-" + type, forKey: "type") + } + return updatedAssetModel } + updatedChainModel.setValue(Set(assetModels), forKey: "assets") + + manager.associate( + sourceInstance: sInstance, + withDestinationInstance: updatedChainModel, + for: mapping + ) } } diff --git a/fearless/Common/Storage/MigrationMappings/SubstrateV7toV8.xcmappingmodel/xcmapping.xml b/fearless/Common/Storage/MigrationMappings/SubstrateV7toV8.xcmappingmodel/xcmapping.xml index bb45ff7ba2..47aa06c359 100644 --- a/fearless/Common/Storage/MigrationMappings/SubstrateV7toV8.xcmappingmodel/xcmapping.xml +++ b/fearless/Common/Storage/MigrationMappings/SubstrateV7toV8.xcmappingmodel/xcmapping.xml @@ -683,7 +683,7 @@ cxIAAYagXxAPTlNLZXllZEFyY2hpdmVy0QAIAAlUcm9vdIABrxEPFQALAAwAGQA1ADYANwBnAGgAaQBq 1 assets - + precision @@ -799,8 +799,8 @@ cxIAAYagXxAPTlNLZXllZEFyY2hpdmVy0QAIAAlUcm9vdIABrxEPFQALAAwAGQA1ADYANwBnAGgAaQBq CDChain 1 - - + + CDContactItem diff --git a/fearless/Modules/Root/RootInteractor.swift b/fearless/Modules/Root/RootInteractor.swift index 342683db27..e61e35aea7 100644 --- a/fearless/Modules/Root/RootInteractor.swift +++ b/fearless/Modules/Root/RootInteractor.swift @@ -7,7 +7,9 @@ import SoraFoundation final class RootInteractor { weak var presenter: RootInteractorOutputProtocol? - private let chainRegistry: ChainRegistryProtocol + private lazy var chainRegistry: ChainRegistryProtocol = { + ChainRegistryFacade.sharedRegistry + }() private let settings: SelectedWalletSettings private let applicationConfig: ApplicationConfigProtocol private let eventCenter: EventCenterProtocol @@ -17,7 +19,6 @@ final class RootInteractor { private let onboardingConfigResolver: OnboardingConfigVersionResolver init( - chainRegistry: ChainRegistryProtocol, settings: SelectedWalletSettings, applicationConfig: ApplicationConfigProtocol, eventCenter: EventCenterProtocol, @@ -26,7 +27,6 @@ final class RootInteractor { onboardingService: OnboardingServiceProtocol, onboardingConfigResolver: OnboardingConfigVersionResolver ) { - self.chainRegistry = chainRegistry self.settings = settings self.applicationConfig = applicationConfig self.eventCenter = eventCenter diff --git a/fearless/Modules/Root/RootPresenterFactory.swift b/fearless/Modules/Root/RootPresenterFactory.swift index a6917643da..123e080c7d 100644 --- a/fearless/Modules/Root/RootPresenterFactory.swift +++ b/fearless/Modules/Root/RootPresenterFactory.swift @@ -40,8 +40,6 @@ final class RootPresenterFactory: RootPresenterFactoryProtocol { startViewHelper: startViewHelper ) - let assetManagementMigrator = AssetManagementMigratorAssembly.createDefaultMigrator() - let migrators: [Migrating] = [ languageMigrator, dbMigrator, @@ -53,7 +51,6 @@ final class RootPresenterFactory: RootPresenterFactoryProtocol { let resolver = OnboardingConfigVersionResolver(userDefaultsStorage: SettingsManager.shared) let interactor = RootInteractor( - chainRegistry: ChainRegistryFacade.sharedRegistry, settings: SelectedWalletSettings.shared, applicationConfig: ApplicationConfig.shared, eventCenter: EventCenter.shared, From b64f254e861f88489c3aa4d888fbe32db6029034 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Fri, 6 Dec 2024 17:17:08 +0500 Subject: [PATCH 111/156] migration has been fixed --- .../ChainSubstrateV8MigrationPolicy.swift | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/fearless/Common/Storage/Migration/SubstrateStorage/ChainSubstrateV8MigrationPolicy.swift b/fearless/Common/Storage/Migration/SubstrateStorage/ChainSubstrateV8MigrationPolicy.swift index 0489acc52b..47e846b39d 100644 --- a/fearless/Common/Storage/Migration/SubstrateStorage/ChainSubstrateV8MigrationPolicy.swift +++ b/fearless/Common/Storage/Migration/SubstrateStorage/ChainSubstrateV8MigrationPolicy.swift @@ -9,7 +9,7 @@ class ChainSubstrateV8MigrationPolicy: NSEntityMigrationPolicy { manager: NSMigrationManager ) throws { try super.createDestinationInstances(forSource: sInstance, in: mapping, manager: manager) - + guard let updatedChainModel = manager.destinationInstances( forEntityMappingName: mapping.name, sourceInstances: [sInstance] @@ -25,11 +25,11 @@ class ChainSubstrateV8MigrationPolicy: NSEntityMigrationPolicy { } else { updatedChainModel.setValue("substrate", forKey: "ecosystem") } - + guard let chainAssetsModels = sInstance.value(forKey: "assets") as? Set else { throw ConvenienceError(error: "No assets value") } - + let assetModels: [NSManagedObject] = chainAssetsModels.compactMap { guard let id = $0.value(forKey: "id") as? String, @@ -48,12 +48,19 @@ class ChainSubstrateV8MigrationPolicy: NSEntityMigrationPolicy { let staking: String? = $0.value(forKey: "staking") as? String let purchaseProviders: [String]? = $0.value(forKey: "purchaseProviders") as? [String] let priceId: String? = $0.value(forKey: "priceId") as? String + let priceProvider = $0.value(forKey: "priceProvider") as? NSManagedObject let updatedAssetModel = NSEntityDescription.insertNewObject( forEntityName: "CDAsset", into: manager.destinationContext ) - + + if let priceProviderId = priceProvider?.objectID { + let priceProviderInDestinationContext = manager.destinationContext.object(with: priceProviderId) + updatedAssetModel.setValue(priceProviderInDestinationContext, forKey: "priceProvider") + } + + updatedAssetModel.setValue(name, forKey: "name") updatedAssetModel.setValue(id, forKey: "id") updatedAssetModel.setValue(symbol, forKey: "symbol") updatedAssetModel.setValue(precision, forKey: "precision") @@ -65,6 +72,7 @@ class ChainSubstrateV8MigrationPolicy: NSEntityMigrationPolicy { updatedAssetModel.setValue(isUtility, forKey: "isUtility") updatedAssetModel.setValue(purchaseProviders, forKey: "purchaseProviders") updatedAssetModel.setValue(staking, forKey: "staking") + updatedAssetModel.setValue(priceId, forKey: "priceId") if let ethereumType = $0.value(forKey: "ethereumType") as? String { updatedAssetModel.setValue("ethereum-" + ethereumType, forKey: "type") From 1bb970326e179683f54bb7b72af2d24b7795282a Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Fri, 6 Dec 2024 17:41:19 +0500 Subject: [PATCH 112/156] migration for asset model --- fearless.xcodeproj/project.pbxproj | 4 ++ .../AssetSubstrateV8MigrationPolicy.swift | 32 +++++++++++ .../ChainSubstrateV8MigrationPolicy.swift | 57 ------------------- .../xcmapping.xml | 16 ++++-- 4 files changed, 47 insertions(+), 62 deletions(-) create mode 100644 fearless/Common/Storage/Migration/AssetSubstrateV8MigrationPolicy.swift diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index 63a147ea38..992024e784 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -199,6 +199,7 @@ 0713097D28C63893002B17D0 /* ScamSyncService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0713097C28C63893002B17D0 /* ScamSyncService.swift */; }; 0713097F28C6F60D002B17D0 /* ScamSyncServiceFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0713097E28C6F60D002B17D0 /* ScamSyncServiceFactory.swift */; }; 0713098128C6F7BB002B17D0 /* CDScamInfo+CoreDataCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0713098028C6F7BB002B17D0 /* CDScamInfo+CoreDataCodable.swift */; }; + 07145F9C2D03272F00D48302 /* AssetSubstrateV8MigrationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07145F9B2D03272F00D48302 /* AssetSubstrateV8MigrationPolicy.swift */; }; 0715FCD42C65E96000AA674E /* TonWebBridgeHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCD32C65E96000AA674E /* TonWebBridgeHeaderView.swift */; }; 0715FCD92C6608B700AA674E /* TonConnectMessageBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCD82C6608B700AA674E /* TonConnectMessageBuilder.swift */; }; 0715FCDD2C660AF700AA674E /* DappBridgeMessageType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0715FCDC2C660AF700AA674E /* DappBridgeMessageType.swift */; }; @@ -3406,6 +3407,7 @@ 0713097C28C63893002B17D0 /* ScamSyncService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScamSyncService.swift; sourceTree = ""; }; 0713097E28C6F60D002B17D0 /* ScamSyncServiceFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScamSyncServiceFactory.swift; sourceTree = ""; }; 0713098028C6F7BB002B17D0 /* CDScamInfo+CoreDataCodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CDScamInfo+CoreDataCodable.swift"; sourceTree = ""; }; + 07145F9B2D03272F00D48302 /* AssetSubstrateV8MigrationPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AssetSubstrateV8MigrationPolicy.swift; sourceTree = ""; }; 0715FCD32C65E96000AA674E /* TonWebBridgeHeaderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TonWebBridgeHeaderView.swift; sourceTree = ""; }; 0715FCD82C6608B700AA674E /* TonConnectMessageBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectMessageBuilder.swift; sourceTree = ""; }; 0715FCDC2C660AF700AA674E /* DappBridgeMessageType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DappBridgeMessageType.swift; sourceTree = ""; }; @@ -15814,6 +15816,7 @@ FACD42942A5BE811009975AA /* SelectedLanguageMigrator.swift */, FACD42952A5BE811009975AA /* KeystoreMigrator.swift */, FACD42962A5BE811009975AA /* Migrating.swift */, + 07145F9B2D03272F00D48302 /* AssetSubstrateV8MigrationPolicy.swift */, ); path = Migration; sourceTree = ""; @@ -18520,6 +18523,7 @@ 84963D6E26F91826003FE8E4 /* RemoteSubscriptionRequests.swift in Sources */, FA402F2F27C7C646008CF986 /* ExportAction.swift in Sources */, FAB0EDDE27AA6DDC003D93C2 /* NodeSelectionViewModel.swift in Sources */, + 07145F9C2D03272F00D48302 /* AssetSubstrateV8MigrationPolicy.swift in Sources */, FA62624F2AC2E35A005D3D95 /* WalletConnectActiveSessionsAssembly.swift in Sources */, 849DEC5925ED756F00C64C19 /* SubstrateCallFactoryDefault.swift in Sources */, FA93A2F02833B11A0021330F /* RecommendedValidatorListParachainViewModelFactory.swift in Sources */, diff --git a/fearless/Common/Storage/Migration/AssetSubstrateV8MigrationPolicy.swift b/fearless/Common/Storage/Migration/AssetSubstrateV8MigrationPolicy.swift new file mode 100644 index 0000000000..a4dd718ea2 --- /dev/null +++ b/fearless/Common/Storage/Migration/AssetSubstrateV8MigrationPolicy.swift @@ -0,0 +1,32 @@ +import Foundation +import SSFModels +import CoreData + +class AssetSubstrateV8MigrationPolicy: NSEntityMigrationPolicy { + override func createDestinationInstances( + forSource sInstance: NSManagedObject, + in mapping: NSEntityMapping, + manager: NSMigrationManager + ) throws { + try super.createDestinationInstances(forSource: sInstance, in: mapping, manager: manager) + + guard let updatedAssetModel = manager.destinationInstances( + forEntityMappingName: mapping.name, + sourceInstances: [sInstance] + ).first else { + throw ConvenienceError(error: "Can't create destination instance") + } + + if let ethereumType = sInstance.value(forKey: "ethereumType") as? String { + updatedAssetModel.setValue("ethereum-" + ethereumType, forKey: "type") + } else if let type = sInstance.value(forKey: "type") as? String { + updatedAssetModel.setValue("substrate-" + type, forKey: "type") + } + + manager.associate( + sourceInstance: sInstance, + withDestinationInstance: updatedAssetModel, + for: mapping + ) + } +} diff --git a/fearless/Common/Storage/Migration/SubstrateStorage/ChainSubstrateV8MigrationPolicy.swift b/fearless/Common/Storage/Migration/SubstrateStorage/ChainSubstrateV8MigrationPolicy.swift index 47e846b39d..f03083a911 100644 --- a/fearless/Common/Storage/Migration/SubstrateStorage/ChainSubstrateV8MigrationPolicy.swift +++ b/fearless/Common/Storage/Migration/SubstrateStorage/ChainSubstrateV8MigrationPolicy.swift @@ -26,63 +26,6 @@ class ChainSubstrateV8MigrationPolicy: NSEntityMigrationPolicy { updatedChainModel.setValue("substrate", forKey: "ecosystem") } - guard let chainAssetsModels = sInstance.value(forKey: "assets") as? Set else { - throw ConvenienceError(error: "No assets value") - } - - let assetModels: [NSManagedObject] = chainAssetsModels.compactMap { - guard - let id = $0.value(forKey: "id") as? String, - let name = $0.value(forKey: "name") as? String, - let symbol = $0.value(forKey: "symbol") as? String, - let precision = $0.value(forKey: "precision") as? UInt16 - else { - return nil - } - let icon = $0.value(forKey: "icon") as? URL - let currencyId = $0.value(forKey: "currencyId") as? String - let existentialDeposit = $0.value(forKey: "existentialDeposit") as? String - let color = $0.value(forKey: "color") as? String - let isUtility: Bool = ($0.value(forKey: "isUtility") as? Bool) ?? false - let isNative: Bool = ($0.value(forKey: "isNative") as? Bool) ?? false - let staking: String? = $0.value(forKey: "staking") as? String - let purchaseProviders: [String]? = $0.value(forKey: "purchaseProviders") as? [String] - let priceId: String? = $0.value(forKey: "priceId") as? String - let priceProvider = $0.value(forKey: "priceProvider") as? NSManagedObject - - let updatedAssetModel = NSEntityDescription.insertNewObject( - forEntityName: "CDAsset", - into: manager.destinationContext - ) - - if let priceProviderId = priceProvider?.objectID { - let priceProviderInDestinationContext = manager.destinationContext.object(with: priceProviderId) - updatedAssetModel.setValue(priceProviderInDestinationContext, forKey: "priceProvider") - } - - updatedAssetModel.setValue(name, forKey: "name") - updatedAssetModel.setValue(id, forKey: "id") - updatedAssetModel.setValue(symbol, forKey: "symbol") - updatedAssetModel.setValue(precision, forKey: "precision") - updatedAssetModel.setValue(icon, forKey: "icon") - updatedAssetModel.setValue(currencyId, forKey: "currencyId") - updatedAssetModel.setValue(existentialDeposit, forKey: "existentialDeposit") - updatedAssetModel.setValue(color, forKey: "color") - updatedAssetModel.setValue(isNative, forKey: "isNative") - updatedAssetModel.setValue(isUtility, forKey: "isUtility") - updatedAssetModel.setValue(purchaseProviders, forKey: "purchaseProviders") - updatedAssetModel.setValue(staking, forKey: "staking") - updatedAssetModel.setValue(priceId, forKey: "priceId") - - if let ethereumType = $0.value(forKey: "ethereumType") as? String { - updatedAssetModel.setValue("ethereum-" + ethereumType, forKey: "type") - } else if let type = $0.value(forKey: "type") as? String { - updatedAssetModel.setValue("substrate-" + type, forKey: "type") - } - return updatedAssetModel - } - updatedChainModel.setValue(Set(assetModels), forKey: "assets") - manager.associate( sourceInstance: sInstance, withDestinationInstance: updatedChainModel, diff --git a/fearless/Common/Storage/MigrationMappings/SubstrateV7toV8.xcmappingmodel/xcmapping.xml b/fearless/Common/Storage/MigrationMappings/SubstrateV7toV8.xcmappingmodel/xcmapping.xml index 47aa06c359..7606e3b6d7 100644 --- a/fearless/Common/Storage/MigrationMappings/SubstrateV7toV8.xcmappingmodel/xcmapping.xml +++ b/fearless/Common/Storage/MigrationMappings/SubstrateV7toV8.xcmappingmodel/xcmapping.xml @@ -5,7 +5,7 @@ 134481920 2BD542A3-0359-40E5-840A-4C2BA58F46E0 - 263 + 264 @@ -410,14 +410,15 @@ + fearless.AssetSubstrateV8MigrationPolicy CDAsset Undefined 16 CDAsset 1 - - + + CDStashItem @@ -799,8 +800,8 @@ cxIAAYagXxAPTlNLZXllZEFyY2hpdmVy0QAIAAlUcm9vdIABrxEPFQALAAwAGQA1ADYANwBnAGgAaQBq CDChain 1 - - + + CDContactItem @@ -846,4 +847,9 @@ cxIAAYagXxAPTlNLZXllZEFyY2hpdmVy0QAIAAlUcm9vdIABrxEPFQALAAwAGQA1ADYANwBnAGgAaQBq addressPrefix + + 1 + assets + + \ No newline at end of file From adca14510afcfb6b7d6e0f7f0d291f7fc53e594f Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Sat, 7 Dec 2024 16:48:37 +0700 Subject: [PATCH 113/156] nft visibility fix --- .../WalletMainContainer/WalletMainContainerInteractor.swift | 3 ++- .../WalletMainContainer/WalletMainContainerPresenter.swift | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fearless/Modules/WalletMainContainer/WalletMainContainerInteractor.swift b/fearless/Modules/WalletMainContainer/WalletMainContainerInteractor.swift index de6ab1e4e0..65e71a868d 100644 --- a/fearless/Modules/WalletMainContainer/WalletMainContainerInteractor.swift +++ b/fearless/Modules/WalletMainContainer/WalletMainContainerInteractor.swift @@ -98,7 +98,8 @@ final class WalletMainContainerInteractor { let config = try? fetchOperation.extractNoCancellableResultData() DispatchQueue.main.async { [weak self] in - self?.output?.didReceiveNftAvailability(isNftAvailable: config?.nftEnabled == true) + let available = config?.nftEnabled == true && self?.wallet.ecosystem.isRegular == true + self?.output?.didReceiveNftAvailability(isNftAvailable: available) } } diff --git a/fearless/Modules/WalletMainContainer/WalletMainContainerPresenter.swift b/fearless/Modules/WalletMainContainer/WalletMainContainerPresenter.swift index 63de01f820..483300e559 100644 --- a/fearless/Modules/WalletMainContainer/WalletMainContainerPresenter.swift +++ b/fearless/Modules/WalletMainContainer/WalletMainContainerPresenter.swift @@ -57,7 +57,6 @@ final class WalletMainContainerPresenter { DispatchQueue.main.async { [weak self] in guard let self else { return } self.view?.didReceiveViewModel(viewModel) - self.view?.didReceiveNftAvailability(isNftAvailable: self.wallet.ecosystem.isRegular) } } From f242caf3617dce5c6d0c0be687258afc3529e86f Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Sat, 7 Dec 2024 15:54:45 +0500 Subject: [PATCH 114/156] nft visibility fixes --- .../DappBrowser/DappBrowserViewModelFactory.swift | 9 +++++++-- .../WalletMainContainerInteractor.swift | 8 ++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift b/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift index 3063c215c2..0404c04fb6 100644 --- a/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift +++ b/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift @@ -47,6 +47,7 @@ final class DappBrowserViewModelFactoryImpl: DappBrowserViewModelFactory { ) case .connected: return buildConnectedPageViewModel( + wallet: wallet, connected: connected, locale: locale ) @@ -146,13 +147,17 @@ final class DappBrowserViewModelFactoryImpl: DappBrowserViewModelFactory { } private func buildConnectedPageViewModel( + wallet: MetaAccountModel, connected: [TonConnectApp], locale: Locale ) -> [DappBrowserViewModel] { var viewModel: [DappBrowserViewModel] = [] + let walletApps = connected.filter { $0.walletId == wallet.metaId } - if connected.isNotEmpty { - let apps = connected.map { + if walletApps.isNotEmpty { + let apps = connected + .filter { $0.walletId == wallet.metaId } + .map { TonDapp( identifier: $0.identifier, chains: ["\(TonConstants.tonChainId)", "\(TonConstants.testnetChainId)"], diff --git a/fearless/Modules/WalletMainContainer/WalletMainContainerInteractor.swift b/fearless/Modules/WalletMainContainer/WalletMainContainerInteractor.swift index 65e71a868d..ceebf6d03b 100644 --- a/fearless/Modules/WalletMainContainer/WalletMainContainerInteractor.swift +++ b/fearless/Modules/WalletMainContainer/WalletMainContainerInteractor.swift @@ -18,6 +18,7 @@ final class WalletMainContainerInteractor { private let walletConnectService: WalletConnectService private let featureToggleService: FeatureToggleProviderProtocol private let tonConnectService: TonConnectService + private var config: FeatureToggleConfig? // MARK: - Constructor @@ -94,10 +95,11 @@ final class WalletMainContainerInteractor { private func checkNftAvailability() { let fetchOperation = featureToggleService.fetchConfigOperation() - fetchOperation.completionBlock = { + fetchOperation.completionBlock = { [weak self] in let config = try? fetchOperation.extractNoCancellableResultData() + self?.config = config - DispatchQueue.main.async { [weak self] in + DispatchQueue.main.async { let available = config?.nftEnabled == true && self?.wallet.ecosystem.isRegular == true self?.output?.didReceiveNftAvailability(isNftAvailable: available) } @@ -154,6 +156,8 @@ extension WalletMainContainerInteractor: EventVisitorProtocol { output?.didReceiveAccount(wallet) fetchNetworkManagmentFilter() + let available = config?.nftEnabled == true && wallet.ecosystem.isRegular == true + output?.didReceiveNftAvailability(isNftAvailable: available) } func processChainSyncDidComplete(event _: ChainSyncDidComplete) { From 75a7579291a25bc280be5c48006df8a879beb377 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Tue, 10 Dec 2024 10:51:45 +0500 Subject: [PATCH 115/156] [#FLW-5116] Substrate wallet. Send. Entered numbers deleted automatically --- fearless/Modules/Transfer/Transfer/TransferFlowUseCase.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/fearless/Modules/Transfer/Transfer/TransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/TransferFlowUseCase.swift index 662c617864..b890daf10d 100644 --- a/fearless/Modules/Transfer/Transfer/TransferFlowUseCase.swift +++ b/fearless/Modules/Transfer/Transfer/TransferFlowUseCase.swift @@ -197,6 +197,5 @@ extension TransferFlowUseCase { } else { availableInputBalance = availableBalance } - provideInputViewModel?() } } From bcc84f282d0107819259bfb59d2f9ac8bdc22186 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Wed, 11 Dec 2024 09:41:31 +0500 Subject: [PATCH 116/156] [#FLW-5118] Sockets are breaking --- .../xcshareddata/swiftpm/Package.resolved | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 8874c70d24..cf91dcbcea 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,4 +1,5 @@ { + "originHash" : "db3e9f7067135f4497b6059ac444951778a2f8ca758335577305759626739473", "pins" : [ { "identity" : "appauth-ios", @@ -135,6 +136,15 @@ "version" : "0.1.7" } }, + { + "identity" : "shared-features-spm", + "kind" : "remoteSourceControl", + "location" : "https://github.com/soramitsu/shared-features-spm.git", + "state" : { + "branch" : "FW-new-ecosystem", + "revision" : "b056d37ccdd8c4e121bca3d94068608de6875bcf" + } + }, { "identity" : "swift-atomics", "kind" : "remoteSourceControl", @@ -234,15 +244,6 @@ "version" : "1.3.2" } }, - { - "identity" : "swiftformat", - "kind" : "remoteSourceControl", - "location" : "https://github.com/nicklockwood/SwiftFormat", - "state" : { - "revision" : "2d5a2b6bde636c1feae2c852ab9a50f221e98c66", - "version" : "0.55.3" - } - }, { "identity" : "swiftimagereadwrite", "kind" : "remoteSourceControl", @@ -334,5 +335,5 @@ } } ], - "version" : 2 + "version" : 3 } From 0ee2597b76efe1a9ce224a345abf3c514c88df3b Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Mon, 16 Dec 2024 11:50:42 +0500 Subject: [PATCH 117/156] [#FLW-5119] Data provider migration for SORA Mainnet: Subsquid to SubQuery indexers --- fearless.xcodeproj/project.pbxproj | 8 + .../xcshareddata/swiftpm/Package.resolved | 32 +- .../SoraSubqueryStakingRewardsFetcher.swift | 165 ++++++++ .../StakingRewardsFetcherAssembly.swift | 2 + .../Subquery/Data/SubqueryHistoryData.swift | 9 + .../Data/SubqueryRewardOrSlashData.swift | 98 +++++ .../Main/HistoryOperationFactory.swift | 2 + .../SoraSubqueryHistoryOperationFactory.swift | 390 ++++++++++++++++++ .../ParachainHistoryOperationFactory.swift | 2 +- .../Rewards/RewardOperationFactory.swift | 2 + 10 files changed, 693 insertions(+), 17 deletions(-) create mode 100644 fearless/ApplicationLayer/StakingRewards/SoraSubqueryStakingRewardsFetcher.swift create mode 100644 fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SoraSubqueryHistoryOperationFactory.swift diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index 992024e784..6ba7b87b4a 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -247,6 +247,8 @@ 073DE30C2C5B99D6003B4990 /* TonHistoryOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 073DE30B2C5B99D6003B4990 /* TonHistoryOperationFactory.swift */; }; 073DE30F2C5BA35B003B4990 /* TonModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 073DE30E2C5BA35B003B4990 /* TonModels.swift */; }; 073DE3112C5BB783003B4990 /* AssetTransactionData+Ton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 073DE3102C5BB783003B4990 /* AssetTransactionData+Ton.swift */; }; + 074988DB2D0AB7EA0058807D /* SoraSubqueryHistoryOperationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 074988DA2D0AB7EA0058807D /* SoraSubqueryHistoryOperationFactory.swift */; }; + 074988DD2D0C0B8B0058807D /* SoraSubqueryStakingRewardsFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 074988DC2D0C0B8B0058807D /* SoraSubqueryStakingRewardsFetcher.swift */; }; 074EB7AA290B9E20000A2A6A /* ApplicationStatusAlertEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 074EB7A9290B9E20000A2A6A /* ApplicationStatusAlertEvent.swift */; }; 074EB7AD290B9F64000A2A6A /* AddressCopiedEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 074EB7AC290B9F64000A2A6A /* AddressCopiedEvent.swift */; }; 074EB7AF290BA057000A2A6A /* ConnectionOfflineEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 074EB7AE290BA056000A2A6A /* ConnectionOfflineEvent.swift */; }; @@ -3456,6 +3458,8 @@ 073DE30B2C5B99D6003B4990 /* TonHistoryOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonHistoryOperationFactory.swift; sourceTree = ""; }; 073DE30E2C5BA35B003B4990 /* TonModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonModels.swift; sourceTree = ""; }; 073DE3102C5BB783003B4990 /* AssetTransactionData+Ton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+Ton.swift"; sourceTree = ""; }; + 074988DA2D0AB7EA0058807D /* SoraSubqueryHistoryOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoraSubqueryHistoryOperationFactory.swift; sourceTree = ""; }; + 074988DC2D0C0B8B0058807D /* SoraSubqueryStakingRewardsFetcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoraSubqueryStakingRewardsFetcher.swift; sourceTree = ""; }; 074EB7A9290B9E20000A2A6A /* ApplicationStatusAlertEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationStatusAlertEvent.swift; sourceTree = ""; }; 074EB7AC290B9F64000A2A6A /* AddressCopiedEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddressCopiedEvent.swift; sourceTree = ""; }; 074EB7AE290BA056000A2A6A /* ConnectionOfflineEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectionOfflineEvent.swift; sourceTree = ""; }; @@ -14421,6 +14425,7 @@ 0701B8A62C78F5DB00DCD395 /* ZChainHistoryOperationFactory.swift */, 07BF3D932B3D873F0046ABF4 /* OklinkHistoryOperationFactory.swift */, FA5137B429AC76EB00560EBA /* SubqueryHistoryOperationFactory.swift */, + 074988DA2D0AB7EA0058807D /* SoraSubqueryHistoryOperationFactory.swift */, FA5137B529AC76EB00560EBA /* GiantsquidHistoryOperationFactory.swift */, FA5137B629AC76EB00560EBA /* SubsquidHistoryOperationFactory.swift */, FA5137B729AC76EB00560EBA /* HistoryOperationFactory.swift */, @@ -14746,6 +14751,7 @@ FA7741D42B6A350200358315 /* SubsquidStakingRewardsFetcher.swift */, FA7741D52B6A350200358315 /* StakingRewardFetcher.swift */, FA7741D62B6A350200358315 /* SubqueryStakingRewardsFetcher.swift */, + 074988DC2D0C0B8B0058807D /* SoraSubqueryStakingRewardsFetcher.swift */, FA7741D72B6A350200358315 /* StakingRewardsFetcherAssembly.swift */, FA7741D82B6A350200358315 /* ReefStakingRewardsFetcher.swift */, FA7741D92B6A350200358315 /* Requests */, @@ -17741,6 +17747,7 @@ FA2FC84128B3879900CC0A42 /* InsettedLabel.swift in Sources */, FAADC1AD29261F7000DA9903 /* PoolRolesConfirmRouter.swift in Sources */, F4871DF326D63E8700D27F23 /* AnalyticsRewardDetailsViewModelFactory.swift in Sources */, + 074988DD2D0C0B8B0058807D /* SoraSubqueryStakingRewardsFetcher.swift in Sources */, 07ECB8032C6B4EA3000E0A14 /* TonConnectSessionCrypto.swift in Sources */, FA9A8F1F2A72573C008FA99F /* AlchemyHistory.swift in Sources */, 84873B0426029B75000A83EE /* StakingEstimationViewModel.swift in Sources */, @@ -18765,6 +18772,7 @@ FA1D01FF2BBE713D005B7071 /* LiquidityPoolsListAssembly.swift in Sources */, 84DED3EF26661CC600A153BB /* CrowdloanFlow.swift in Sources */, FA1D01FB2BBE713D005B7071 /* LiquidityPoolsListViewLayout.swift in Sources */, + 074988DB2D0AB7EA0058807D /* SoraSubqueryHistoryOperationFactory.swift in Sources */, F4F65C3D26D8B9DD002EE838 /* FWYAxisChartFormatter.swift in Sources */, 847C963525534E41002D288F /* UIFactory.swift in Sources */, 07BFF8AA2AD666CE005A5C58 /* AutoNamespacesError+Extension.swift in Sources */, diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index cf91dcbcea..3d1483c056 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -159,8 +159,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-collections.git", "state" : { - "revision" : "3d2dc41a01f9e49d84f0a3925fb858bed64f702d", - "version" : "1.1.2" + "revision" : "671108c96644956dddcd89dd59c203dcdb36cec7", + "version" : "1.1.4" } }, { @@ -168,8 +168,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-http-types", "state" : { - "revision" : "ae67c8178eb46944fd85e4dc6dd970e1f3ed6ccd", - "version" : "1.3.0" + "revision" : "ef18d829e8b92d731ad27bb81583edd2094d1ce3", + "version" : "1.3.1" } }, { @@ -177,8 +177,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-nio.git", "state" : { - "revision" : "4c4453b489cf76e6b3b0f300aba663eb78182fad", - "version" : "2.70.0" + "revision" : "dca6594f65308c761a9c409e09fbf35f48d50d34", + "version" : "2.77.0" } }, { @@ -186,8 +186,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-nio-extras.git", "state" : { - "revision" : "05c36b57453d23ea63785d58a7dbc7b70ba1745e", - "version" : "1.23.0" + "revision" : "2e9746cfc57554f70b650b021b6ae4738abef3e6", + "version" : "1.24.1" } }, { @@ -195,8 +195,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-nio-http2.git", "state" : { - "revision" : "b5f7062b60e4add1e8c343ba4eb8da2e324b3a94", - "version" : "1.34.0" + "revision" : "eaa71bb6ae082eee5a07407b1ad0cbd8f48f9dca", + "version" : "1.34.1" } }, { @@ -204,8 +204,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-nio-ssl.git", "state" : { - "revision" : "a9fa5efd86e7ce2e5c1b6de113262e58035ca251", - "version" : "2.27.1" + "revision" : "c7e95421334b1068490b5d41314a50e70bab23d1", + "version" : "2.29.0" } }, { @@ -213,8 +213,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-nio-transport-services.git", "state" : { - "revision" : "38ac8221dd20674682148d6451367f89c2652980", - "version" : "1.21.0" + "revision" : "bbd5e63cf949b7db0c9edaf7a21e141c52afe214", + "version" : "1.23.0" } }, { @@ -240,8 +240,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-system.git", "state" : { - "revision" : "d2ba781702a1d8285419c15ee62fd734a9437ff5", - "version" : "1.3.2" + "revision" : "c8a44d836fe7913603e246acab7c528c2e780168", + "version" : "1.4.0" } }, { diff --git a/fearless/ApplicationLayer/StakingRewards/SoraSubqueryStakingRewardsFetcher.swift b/fearless/ApplicationLayer/StakingRewards/SoraSubqueryStakingRewardsFetcher.swift new file mode 100644 index 0000000000..dcd30cf7d5 --- /dev/null +++ b/fearless/ApplicationLayer/StakingRewards/SoraSubqueryStakingRewardsFetcher.swift @@ -0,0 +1,165 @@ +import Foundation +import SSFModels +import SSFNetwork +import RobinHood + +final class SoraSubqueryStakingRewardsFetcher { + private let chain: ChainModel + + init(chain: ChainModel) { + self.chain = chain + } + + func queryString( + address: String, + startTimestamp: Int64?, + endTimestamp: Int64? + ) -> String { + var filter = """ + { + and: [], + method: {equalTo: "Rewarded"}, + address: {equalTo: "\(address)"}, + module: {equalTo: "staking"} + } + """ + + if let timestamp = startTimestamp { + let startTimestampValue = "\(timestamp)" + filter.append(", dataFrom: {greaterThanOrEqualTo: \(startTimestampValue)}") + } + if let timestamp = endTimestamp { + let endTimestampValue = "\(timestamp)" + filter.append(", dataTo: {lessThanOrEqualTo: \(endTimestampValue)}") + } + + return """ + { + historyElements( + after: null + orderBy: TIMESTAMP_DESC + filter: \(filter) + ) { + pageInfo { + startCursor + endCursor + } + nodes { + id + timestamp + address + data + method + module + blockHash + blockHeight + } + } + } + """ + } +} + +extension SoraSubqueryStakingRewardsFetcher: StakingRewardsFetcher { + func fetchAllRewards( + address: String, + startTimestamp: Int64?, + endTimestamp: Int64? + ) async throws -> [RewardOrSlashData] { + guard let blockExplorer = chain.externalApi?.staking else { + throw StakingRewardsFetcherError.missingBlockExplorer(chain: chain.name) + } + + let queryString = queryString( + address: address, + startTimestamp: startTimestamp, + endTimestamp: endTimestamp + ) + + let request = try StakingRewardsRequest( + baseURL: blockExplorer.url, + query: queryString + ) + let worker = NetworkWorkerImpl() + let response: GraphQLResponse = try await worker.performRequest(with: request) + + switch response { + case let .data(data): + return data.data + case let .errors(error): + throw error + } + } +} + +extension SoraSubqueryStakingRewardsFetcher: RewardOperationFactoryProtocol { + func createLastRoundOperation() -> BaseOperation { + BaseOperation.createWithError(SoraRewardOperationFactoryError.stakingTypeUnsupported) + } + + func createAprOperation( + for _: @escaping () throws -> [AccountId], + dependingOn _: BaseOperation + ) -> BaseOperation { + BaseOperation.createWithError(SoraRewardOperationFactoryError.stakingTypeUnsupported) + } + + func createDelegatorRewardsOperation( + address _: String, + startTimestamp _: Int64?, + endTimestamp _: Int64? + ) -> BaseOperation { + BaseOperation.createWithError(SoraRewardOperationFactoryError.stakingTypeUnsupported) + } + + func createHistoryOperation( + address: String, + startTimestamp: Int64?, + endTimestamp: Int64? + ) -> BaseOperation { + let requestFactory = BlockNetworkRequestFactory { [weak self] in + guard let strongSelf = self else { + throw CommonError.internal + } + guard let blockExplorer = strongSelf.chain.externalApi?.staking else { + throw StakingRewardsFetcherError.missingBlockExplorer(chain: strongSelf.chain.name) + } + + let queryString = strongSelf.queryString( + address: address, + startTimestamp: startTimestamp, + endTimestamp: endTimestamp + ) + + var request = URLRequest(url: blockExplorer.url) + + let info = JSON.dictionaryValue(["query": JSON.stringValue(queryString)]) + request.httpBody = try JSONEncoder().encode(info) + request.setValue( + HttpContentType.json.rawValue, + forHTTPHeaderField: HttpHeaderKey.contentType.rawValue + ) + + request.httpMethod = HttpMethod.post.rawValue + return request + } + + let resultFactory = AnyNetworkResultFactory { data in + let response = try JSONDecoder().decode( + GraphQLResponse.self, + from: data + ) + + switch response { + case let .errors(error): + throw error + case let .data(response): + return response + } + } + + let operation = NetworkOperation(requestFactory: requestFactory, resultFactory: resultFactory) + + return operation + } +} diff --git a/fearless/ApplicationLayer/StakingRewards/StakingRewardsFetcherAssembly.swift b/fearless/ApplicationLayer/StakingRewards/StakingRewardsFetcherAssembly.swift index 7955fca0ea..bb441b917d 100644 --- a/fearless/ApplicationLayer/StakingRewards/StakingRewardsFetcherAssembly.swift +++ b/fearless/ApplicationLayer/StakingRewards/StakingRewardsFetcherAssembly.swift @@ -17,6 +17,8 @@ final class StakingRewardsFetcherAssembly { return SoraStakingRewardsFetcher(chain: chain) case .reef: return ReefStakingRewardsFetcher(chain: chain) + case .soraSubquery: + return SoraSubqueryStakingRewardsFetcher(chain: chain) case .alchemy, .etherscan, .oklink, .blockscout, .fire, .vicscan, .zchain, .klaytn, .ton: throw StakingRewardsFetcherError.missingBlockExplorer(chain: chain.name) } diff --git a/fearless/Common/Network/BlockExplorer/Subquery/Data/SubqueryHistoryData.swift b/fearless/Common/Network/BlockExplorer/Subquery/Data/SubqueryHistoryData.swift index 8f532655ef..0b1e67785e 100644 --- a/fearless/Common/Network/BlockExplorer/Subquery/Data/SubqueryHistoryData.swift +++ b/fearless/Common/Network/BlockExplorer/Subquery/Data/SubqueryHistoryData.swift @@ -8,3 +8,12 @@ struct SubqueryHistoryData: Decodable { let historyElements: HistoryElements } + +struct SoraSubqueryHistoryData: Decodable { + struct HistoryElements: Decodable { + let pageInfo: SubqueryPageInfo + let nodes: [SoraSubsquidHistoryElement] + } + + let historyElements: HistoryElements +} diff --git a/fearless/Common/Network/BlockExplorer/Subquery/Data/SubqueryRewardOrSlashData.swift b/fearless/Common/Network/BlockExplorer/Subquery/Data/SubqueryRewardOrSlashData.swift index c3e8282eae..b8897f00c3 100644 --- a/fearless/Common/Network/BlockExplorer/Subquery/Data/SubqueryRewardOrSlashData.swift +++ b/fearless/Common/Network/BlockExplorer/Subquery/Data/SubqueryRewardOrSlashData.swift @@ -13,3 +13,101 @@ extension SubqueryRewardOrSlashData: RewardOrSlashResponse { historyElements.nodes } } + +struct SoraSubqueryRewardOrSlashData: Decodable { + struct HistoryElements: Decodable { + let nodes: [SoraSubqueryHistoryElement] + } + + let historyElements: HistoryElements +} + +extension SoraSubqueryRewardOrSlashData: RewardOrSlashResponse { + var data: [RewardOrSlashData] { + historyElements.nodes + } +} + +struct SoraSubqueryHistoryElement: Decodable, RewardOrSlashData { + + enum CodingKeys: String, CodingKey { + case timestamp + case id + case address + case data + case method + case module + case blockHash + case blockHeight + } + + let timestamp: String + let id: String + let address: String + let data: SoraSubqueryHistoryElementData + let method: String + let module: String + let blockHash: String + let blockHeight: Int + + var identifier: String { + id + } + + var rewardInfo: (any RewardOrSlash)? { + self + } + + init(from decoder: any Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + + if let timestampInt = try? container.decode(Int.self, forKey: .timestamp) { + self.timestamp = String(timestampInt) + } else { + self.timestamp = "" + } + id = try container.decode(String.self, forKey: .id) + address = try container.decode(String.self, forKey: .address) + data = try container.decode(SoraSubqueryHistoryElementData.self, forKey: .data) + method = try container.decode(String.self, forKey: .method) + module = try container.decode(String.self, forKey: .module) + blockHash = try container.decode(String.self, forKey: .blockHash) + blockHeight = try container.decode(Int.self, forKey: .blockHeight) + } +} + +extension SoraSubqueryHistoryElement: RewardOrSlash { + var amount: String { + data.amount + } + + var isReward: Bool { + true + } + + var era: Int? { + data.era + } + + var validator: String? { + nil + } + + var stash: String? { + data.stash + } + + var eventIdx: String? { + id + } + + var assetId: String? { + nil + } +} + +struct SoraSubqueryHistoryElementData: Decodable { + let era: Int + let payee, stash: String + let amount, amountUSD: String +} diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/HistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/HistoryOperationFactory.swift index ff56fe0280..64db92a722 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/HistoryOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/HistoryOperationFactory.swift @@ -41,6 +41,8 @@ final class HistoryOperationFactoriesAssembly { return KaiaHistoryOperationFactory() case .ton: return TonHistoryOperationFactory() + case .soraSubquery: + return SoraSubqueryHistoryOperationFactory(txStorage: txStorage, chainRegistry: ChainRegistryFacade.sharedRegistry) case .none: return nil } diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SoraSubqueryHistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SoraSubqueryHistoryOperationFactory.swift new file mode 100644 index 0000000000..9a09c8d6c1 --- /dev/null +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SoraSubqueryHistoryOperationFactory.swift @@ -0,0 +1,390 @@ +import Foundation +import Foundation +import RobinHood + +import IrohaCrypto +import SSFUtils +import SSFModels +import SSFRuntimeCodingService + +class SoraSubqueryHistoryOperationFactory { + private let txStorage: AnyDataProviderRepository + private let chainRegistry: ChainRegistryProtocol + + init( + txStorage: AnyDataProviderRepository, + chainRegistry: ChainRegistryProtocol + ) { + self.txStorage = txStorage + self.chainRegistry = chainRegistry + } + + private func createOperation( + address: String, + count: Int, + cursor: String?, + url: URL, + filters: [WalletTransactionHistoryFilter] + ) -> BaseOperation { + let queryString = prepareQueryForAddress( + address, + count: count, + cursor: cursor, + filters: filters + ) + + let requestFactory = BlockNetworkRequestFactory { + var request = URLRequest(url: url) + + let info = JSON.dictionaryValue(["query": JSON.stringValue(queryString)]) + request.httpBody = try JSONEncoder().encode(info) + request.setValue( + HttpContentType.json.rawValue, + forHTTPHeaderField: HttpHeaderKey.contentType.rawValue + ) + + request.httpMethod = HttpMethod.post.rawValue + return request + } + + let resultFactory = AnyNetworkResultFactory { data in + let response = try JSONDecoder().decode( + GraphQLResponse.self, + from: data + ) + + switch response { + case let .errors(error): + throw error + case let .data(response): + return response + } + } + + let operation = NetworkOperation( + requestFactory: requestFactory, + resultFactory: resultFactory + ) + + return operation + } + + private func prepareExtrinsicInclusionFilter() -> String { + """ + { + or: [ + { + extrinsic: {isNull: true} + }, + { + not: { + and: [ + { + extrinsic: { contains: {module: "balances"} } , + or: [ + { extrinsic: {contains: {call: "transfer"} } }, + { extrinsic: {contains: {call: "transferKeepAlive"} } }, + { extrinsic: {contains: {call: "forceTransfer"} } }, + ] + } + ] + } + } + ] + } + """ + } + + private func prepareFilter( + filters: [WalletTransactionHistoryFilter] + ) -> String { + var filterStrings: [String] = [] + + if !filters.contains(where: { $0.type == .swap && $0.selected }) { + filterStrings.append("\"swap\"") + } + + if !filters.contains(where: { $0.type == .reward && $0.selected }) { + filterStrings.append("\"rewarded\"") + } + + if !filters.contains(where: { $0.type == .transfer && $0.selected }) { + filterStrings.append("\"transfer\"") + } + + guard filterStrings.isNotEmpty else { + return "" + } + + let resultFilters = filterStrings.joined(separator: ",") + return ", method_not_in: [\(resultFilters)]" + } + + private func prepareQueryForAddress( + _ address: String, + count: Int, + cursor: String?, + filters: [WalletTransactionHistoryFilter] + ) -> String { + let after = cursor.map { "\"\($0)\"" } ?? "null" + let filter = prepareFilter(filters: filters) + + return """ + { + historyElements( + after: \(after) + first: \(count) + orderBy: TIMESTAMP_DESC + filter: {address: {equalTo: "\(address)"}, and: [\(filter)]} + ) { + pageInfo { + startCursor + endCursor + } + nodes { + id + timestamp + address + data + method + module + blockHash + blockHeight + networkFee + execution + } + } + } + """ + } + + private func createHistoryMergeOperation( + dependingOn remoteOperation: BaseOperation?, + localOperation: BaseOperation<[TransactionHistoryItem]>?, + asset: AssetModel, + chain: ChainModel, + address: String + ) -> BaseOperation { + ClosureOperation { + let remoteTransactions = try remoteOperation?.extractNoCancellableResultData().historyItems ?? [] + + if let localTransactions = try localOperation?.extractNoCancellableResultData(), + !localTransactions.isEmpty { + let manager = TransactionHistoryMergeManager( + address: address, + chain: chain, + asset: asset + ) + return manager.merge( + subscanItems: remoteTransactions, + localItems: localTransactions + ) + } else { + let transactions: [AssetTransactionData] = remoteTransactions.map { item in + item.createTransactionForAddress( + address, + chain: chain, + asset: asset + ) + } + + return TransactionHistoryMergeResult( + historyItems: transactions, + identifiersToRemove: [] + ) + } + } + } + + private func createSubqueryHistoryMergeOperation( + dependingOn remoteOperation: BaseOperation?, + runtimeOperation: BaseOperation, + localOperation: BaseOperation<[TransactionHistoryItem]>?, + asset: AssetModel, + chain: ChainModel, + address: String + ) -> BaseOperation { + ClosureOperation { + let chainAsset = ChainAsset(chain: chain, asset: asset) +// let remoteTransactions = try remoteOperation?.extractNoCancellableResultData().historyElementsConnection.edges.map { $0.node } ?? [] + let remoteTransactions = try remoteOperation?.extractNoCancellableResultData().historyElements.nodes ?? [] + let filteredTransactions = remoteTransactions + .filter { transaction in + if asset.symbol.lowercased() == "val", transaction.method == "rewarded" { + return true + } + + if asset.isUtility, transaction.module == "staking", transaction.method != "rewarded" { + return true + } + + if let targetAssetId = transaction.data?.targetAssetId, targetAssetId == asset.currencyId { + return true + } + + if let baseAssetId = transaction.data?.baseAssetId, baseAssetId == asset.currencyId { + return true + } + + if let assetId = transaction.data?.assetId, assetId == asset.currencyId { + return true + } + + return false + } + + if let localTransactions = try localOperation?.extractNoCancellableResultData(), + !localTransactions.isEmpty { + let manager = TransactionHistoryMergeManager( + address: address, + chain: chain, + asset: asset + ) + return manager.merge( + subscanItems: remoteTransactions, + localItems: localTransactions + ) + } else { + let transactions: [AssetTransactionData] = filteredTransactions.map { item in + item.createTransactionForAddress( + address, + chain: chain, + asset: asset + ) + } + + return TransactionHistoryMergeResult( + historyItems: transactions, + identifiersToRemove: [] + ) + } + } + } + + private func createHistoryMapOperation( + dependingOn mergeOperation: BaseOperation, + remoteOperation: BaseOperation + ) -> BaseOperation { + ClosureOperation { + let mergeResult = try mergeOperation.extractNoCancellableResultData() + let newHistoryContext = try remoteOperation.extractNoCancellableResultData().context + + return AssetTransactionPageData( + transactions: mergeResult.historyItems, + context: !newHistoryContext.isComplete ? newHistoryContext.toContext() : nil + ) + } + } + + private func createSubqueryHistoryMapOperation( + dependingOn mergeOperation: BaseOperation, + remoteOperation: BaseOperation + ) -> BaseOperation { + ClosureOperation { + let mergeResult = try mergeOperation.extractNoCancellableResultData() + let remoteData = try remoteOperation.extractNoCancellableResultData() + + return AssetTransactionPageData( + transactions: mergeResult.historyItems, + context: remoteData.historyElements.pageInfo.toContext() + ) + } + } +} + +extension SoraSubqueryHistoryOperationFactory: HistoryOperationFactoryProtocol { + func fetchTransactionHistoryOperation( + asset: AssetModel, + chain: ChainModel, + address: String, + filters: [WalletTransactionHistoryFilter], + pagination: Pagination + ) -> CompoundOperationWrapper { + guard let runtimeService = chainRegistry.getRuntimeProvider(for: chain.chainId) else { + return CompoundOperationWrapper.createWithError(RuntimeProviderError.providerUnavailable) + } + let runtimeOperation = runtimeService.fetchCoderFactoryOperation() + + let historyContext = TransactionHistoryContext( + context: pagination.context ?? [:], + defaultRow: pagination.count + ).byApplying(filters: filters) + + guard !historyContext.isComplete else { + let pageData = AssetTransactionPageData( + transactions: [], + context: nil + ) + + let operation = BaseOperation() + operation.result = .success(pageData) + return CompoundOperationWrapper(targetOperation: operation) + } + + let remoteHistoryOperation: BaseOperation + + if let baseUrl = chain.externalApi?.history?.url { + remoteHistoryOperation = createOperation( + address: address, + count: pagination.count, + cursor: pagination.context?["endCursor"], + url: baseUrl, + filters: filters + ) + } else { + let result = SoraSubqueryHistoryData(historyElements: .init(pageInfo: .init(startCursor: nil, endCursor: nil, hasNextPage: nil), nodes: [])) + remoteHistoryOperation = BaseOperation.createWithResult(result) + } + + var dependencies: [Operation] = [remoteHistoryOperation, runtimeOperation] + + let localFetchOperation: BaseOperation<[TransactionHistoryItem]>? + + if pagination.context == nil { + let operation = txStorage.fetchAllOperation(with: RepositoryFetchOptions()) + dependencies.append(operation) + + operation.addDependency(remoteHistoryOperation) + + localFetchOperation = operation + } else { + localFetchOperation = nil + } + + let mergeOperation = createSubqueryHistoryMergeOperation( + dependingOn: remoteHistoryOperation, + runtimeOperation: runtimeOperation, + localOperation: localFetchOperation, + asset: asset, + chain: chain, + address: address + ) + + dependencies.forEach { mergeOperation.addDependency($0) } + + dependencies.append(mergeOperation) + + if pagination.context == nil { + let clearOperation = txStorage.saveOperation({ [] }, { + let mergeResult = try mergeOperation + .extractResultData(throwing: BaseOperationError.parentOperationCancelled) + return mergeResult.identifiersToRemove + }) + + dependencies.append(clearOperation) + clearOperation.addDependency(mergeOperation) + } + + let mapOperation = createSubqueryHistoryMapOperation( + dependingOn: mergeOperation, + remoteOperation: remoteHistoryOperation + ) + + dependencies.forEach { mapOperation.addDependency($0) } + + return CompoundOperationWrapper( + targetOperation: mapOperation, + dependencies: dependencies + ) + } +} diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Staking/ParachainHistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Staking/ParachainHistoryOperationFactory.swift index 5c4d66f686..7e6bc1917c 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Staking/ParachainHistoryOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Staking/ParachainHistoryOperationFactory.swift @@ -20,7 +20,7 @@ enum ParachainHistoryOperationFactoryAssembly { return ParachainSubsquidHistoryOperationFactory(url: blockExplorer?.url) case .giantsquid: return ParachainSubsquidHistoryOperationFactory(url: blockExplorer?.url) - case .sora: + case .sora, .soraSubquery: return ParachainSubsquidHistoryOperationFactory(url: blockExplorer?.url) case .alchemy, .etherscan, .oklink, .reef, .blockscout, .fire, .vicscan, .zchain, .klaytn, .ton: return nil diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/RewardOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/RewardOperationFactory.swift index f5b67e1fc7..d92c36e5e6 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/RewardOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/Rewards/RewardOperationFactory.swift @@ -40,6 +40,8 @@ enum RewardOperationFactory { return SoraRewardOperationFactory(url: blockExplorer?.url, chain: chain) case .reef: return ReefRewardOperationFactory(url: blockExplorer?.url, chain: chain) + case .soraSubquery: + return SoraSubqueryStakingRewardsFetcher(chain: chain) case .alchemy, .etherscan, .oklink, .blockscout, .fire, .vicscan, .zchain, .klaytn, .ton: return GiantsquidRewardOperationFactory(url: blockExplorer?.url, chain: chain) } From 3455e7a5e8f3c2c96dfc298d595fa8a052eee605 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Mon, 16 Dec 2024 15:58:07 +0500 Subject: [PATCH 118/156] [#FLW-5119] Data provider migration for SORA Mainnet: Subsquid to SubQuery indexers --- fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 3d1483c056..f689325aa7 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -142,7 +142,7 @@ "location" : "https://github.com/soramitsu/shared-features-spm.git", "state" : { "branch" : "FW-new-ecosystem", - "revision" : "b056d37ccdd8c4e121bca3d94068608de6875bcf" + "revision" : "2e2071fafc95a6c3c6f313129b37da8c104cdfd5" } }, { From 905031331cddd86210da04b38c94666b1a3db921 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Wed, 18 Dec 2024 10:55:35 +0500 Subject: [PATCH 119/156] [#FLW-5137] There is eternal loader on the history --- .../SoraSubqueryHistoryOperationFactory.swift | 48 ++++--------------- 1 file changed, 10 insertions(+), 38 deletions(-) diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SoraSubqueryHistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SoraSubqueryHistoryOperationFactory.swift index 9a09c8d6c1..cfd2b9bd95 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SoraSubqueryHistoryOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SoraSubqueryHistoryOperationFactory.swift @@ -1,5 +1,4 @@ import Foundation -import Foundation import RobinHood import IrohaCrypto @@ -69,47 +68,21 @@ class SoraSubqueryHistoryOperationFactory { return operation } - private func prepareExtrinsicInclusionFilter() -> String { - """ - { - or: [ - { - extrinsic: {isNull: true} - }, - { - not: { - and: [ - { - extrinsic: { contains: {module: "balances"} } , - or: [ - { extrinsic: {contains: {call: "transfer"} } }, - { extrinsic: {contains: {call: "transferKeepAlive"} } }, - { extrinsic: {contains: {call: "forceTransfer"} } }, - ] - } - ] - } - } - ] - } - """ - } - private func prepareFilter( filters: [WalletTransactionHistoryFilter] ) -> String { var filterStrings: [String] = [] - if !filters.contains(where: { $0.type == .swap && $0.selected }) { - filterStrings.append("\"swap\"") + if filters.contains(where: { $0.type == .swap && $0.selected }) { + filterStrings.append("{ method:{equalTo:\"swap\"}}") } - if !filters.contains(where: { $0.type == .reward && $0.selected }) { - filterStrings.append("\"rewarded\"") + if filters.contains(where: { $0.type == .reward && $0.selected }) { + filterStrings.append("{ method:{ equalTo:\"Rewarded\"}}") } - if !filters.contains(where: { $0.type == .transfer && $0.selected }) { - filterStrings.append("\"transfer\"") + if filters.contains(where: { $0.type == .transfer && $0.selected }) { + filterStrings.append("{ method:{ equalTo:\"Transfer\"}}") } guard filterStrings.isNotEmpty else { @@ -117,7 +90,7 @@ class SoraSubqueryHistoryOperationFactory { } let resultFilters = filterStrings.joined(separator: ",") - return ", method_not_in: [\(resultFilters)]" + return resultFilters } private func prepareQueryForAddress( @@ -135,7 +108,7 @@ class SoraSubqueryHistoryOperationFactory { after: \(after) first: \(count) orderBy: TIMESTAMP_DESC - filter: {address: {equalTo: "\(address)"}, and: [\(filter)]} + filter: {or: [\(filter)] address: {equalTo: "\(address)"}} ) { pageInfo { startCursor @@ -206,15 +179,14 @@ class SoraSubqueryHistoryOperationFactory { ) -> BaseOperation { ClosureOperation { let chainAsset = ChainAsset(chain: chain, asset: asset) -// let remoteTransactions = try remoteOperation?.extractNoCancellableResultData().historyElementsConnection.edges.map { $0.node } ?? [] let remoteTransactions = try remoteOperation?.extractNoCancellableResultData().historyElements.nodes ?? [] let filteredTransactions = remoteTransactions .filter { transaction in - if asset.symbol.lowercased() == "val", transaction.method == "rewarded" { + if asset.symbol.lowercased() == "val", transaction.method?.lowercased() == "rewarded" { return true } - if asset.isUtility, transaction.module == "staking", transaction.method != "rewarded" { + if asset.isUtility, transaction.module?.lowercased() == "staking", transaction.method?.lowercased() != "rewarded" { return true } From a22c577eb5aec2416fcdda979817db0630ab7c11 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Wed, 18 Dec 2024 15:08:47 +0500 Subject: [PATCH 120/156] [#FLW-5091] The icons on the banners are on the wrong places --- fearless/Modules/DappBrowser/DappBrowserViewController.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fearless/Modules/DappBrowser/DappBrowserViewController.swift b/fearless/Modules/DappBrowser/DappBrowserViewController.swift index 489ef6a8dc..d0bed2fe8b 100644 --- a/fearless/Modules/DappBrowser/DappBrowserViewController.swift +++ b/fearless/Modules/DappBrowser/DappBrowserViewController.swift @@ -216,7 +216,7 @@ extension DappBrowserViewController: UITableViewDelegate { func tableView(_: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { switch viewModel[indexPath.section] { case .featured: - return 140 + return UIScreen.width / 3.4 case .section: return 64 } From af27f466a2c360583f66f0ee4397240ab4a2b47a Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Thu, 19 Dec 2024 15:07:57 +0500 Subject: [PATCH 121/156] tonBridgeUrl has been added to ChainModel --- .../xcshareddata/swiftpm/Package.resolved | 2 +- .../Services/ChainRegistry/ChainRegistry.swift | 15 ++++++++------- .../Storage/EntityToModel/ChainModelMapper.swift | 5 ++++- .../SubstrateDataModel_v8.xcdatamodel/contents | 1 + 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index f689325aa7..978f111842 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -142,7 +142,7 @@ "location" : "https://github.com/soramitsu/shared-features-spm.git", "state" : { "branch" : "FW-new-ecosystem", - "revision" : "2e2071fafc95a6c3c6f313129b37da8c104cdfd5" + "revision" : "46eeda75fd638a132965b3115abf5a9aea899cd0" } }, { diff --git a/fearless/Common/Services/ChainRegistry/ChainRegistry.swift b/fearless/Common/Services/ChainRegistry/ChainRegistry.swift index b3262b665b..4839492948 100644 --- a/fearless/Common/Services/ChainRegistry/ChainRegistry.swift +++ b/fearless/Common/Services/ChainRegistry/ChainRegistry.swift @@ -276,17 +276,18 @@ final class ChainRegistry { private func handle(ton chain: ChainModel) { chains = chains.filter { $0.chainId != chain.chainId } chains.append(chain) -//#if DEBUG - let token = TonNodeApiKeyDebug.tonApiKey -//#else -// let token = TonNodeApiKey.tonApiKey -//#endif + + let token = TonNodeApiKey.tonApiKey + guard let tonBridgeURL = chain.tonBridgeUrl else { + logger?.error("Missing tonBridgeURL") + return + } let isTesnet = LocalToggleService.shared.tonEnvListToggle.storageValue if chain.options.or([]).contains(.testnet), isTesnet, let node = chain.nodes.first { - let apiAssembly = TonAPIAssembly(tonAPIURL: node.url, token: token) + let apiAssembly = TonAPIAssembly(tonAPIURL: node.url, token: token, tonBridgeURL: tonBridgeURL) tonApiAssembly = apiAssembly } else if !chain.options.or([]).contains(.testnet), !isTesnet, let node = chain.nodes.first { - let apiAssembly = TonAPIAssembly(tonAPIURL: node.url, token: token) + let apiAssembly = TonAPIAssembly(tonAPIURL: node.url, token: token, tonBridgeURL: tonBridgeURL) tonApiAssembly = apiAssembly } } diff --git a/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift b/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift index bfdb78258a..0569e9b9ea 100644 --- a/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift +++ b/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift @@ -573,7 +573,8 @@ extension ChainModelMapper: CoreDataMapperProtocol { selectedNode: selectedNode, customNodes: customNodesSet, iosMinAppVersion: entity.minimalAppVersion, - identityChain: entity.identityChain + identityChain: entity.identityChain, + tonBridgeUrl: entity.tonBridgeUrl ) let assetsArray: [AssetModel] = entity.assets.or([]).compactMap { anyAsset in @@ -616,6 +617,8 @@ extension ChainModelMapper: CoreDataMapperProtocol { entity.minimalAppVersion = model.iosMinAppVersion entity.options = model.options?.map(\.rawValue) as? NSArray entity.identityChain = model.identityChain + entity.tonBridgeUrl = model.tonBridgeUrl + updateEntityAsset(for: entity, from: model, context: context) updateEntityNodes(for: entity, from: model, context: context) updateExternalApis(in: entity, from: model.externalApi) diff --git a/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents index d8cb5b55a2..ef4d7c662b 100644 --- a/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents +++ b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents @@ -45,6 +45,7 @@ + From fde70d9cabff64805cc1275c96f1a800d28989e0 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Thu, 19 Dec 2024 16:16:44 +0500 Subject: [PATCH 122/156] [#FLW-5136] There is not 3 dots to importing EVM accounts --- fearless/Common/Model/ChainAction.swift | 5 - .../MetaAccountOperationFactory.swift | 299 ++++++++++-------- .../AccountCreatePresenter.swift | 21 +- .../AccountCreateViewController.swift | 2 +- .../AccountCreateViewLayout.swift | 4 +- .../Model/AccountCreateFlow.swift | 11 +- .../AccountImportPresenter.swift | 53 +++- .../AccountImportProtocols.swift | 6 +- .../AccountImportViewController.swift | 2 +- .../AccountImportWireframe.swift | 2 +- .../BaseAccountImportInteractor.swift | 35 +- .../Model/AccountImportRequest.swift | 19 +- .../ConnectedAccountsAssembly.swift | 3 +- .../ConnectedAccountsInteractor.swift | 18 +- .../ConnectedAccountsPresenter.swift | 113 ++++++- .../ConnectedAccountsProtocols.swift | 22 +- .../ConnectedAccountsRouter.swift | 51 +++ .../Resources/chains.json | 6 +- .../ChainAccount/ChainAccountPresenter.swift | 3 - .../UsernameSetupPresenter.swift | 6 + .../WalletDetailsPresenter.swift | 18 +- 21 files changed, 476 insertions(+), 223 deletions(-) diff --git a/fearless/Common/Model/ChainAction.swift b/fearless/Common/Model/ChainAction.swift index 1dc01ecc1c..fc4503963b 100644 --- a/fearless/Common/Model/ChainAction.swift +++ b/fearless/Common/Model/ChainAction.swift @@ -10,7 +10,6 @@ enum ChainAction { case tonviewer(url: URL) case switchNode case export - case replace case reefscan(url: URL) case claimCrowdloanRewards @@ -24,8 +23,6 @@ enum ChainAction { return R.image.iconCopy() case .polkascan, .subscan, .etherscan, .reefscan, .oklink, .tonviewer: return R.image.iconOpenWeb() - case .replace: - return R.image.iconReplace() case .claimCrowdloanRewards: return R.image.iconInfo() } @@ -45,8 +42,6 @@ enum ChainAction { case .subscan: return R.string.localizable .transactionDetailsViewSubscan(preferredLanguages: locale.rLanguages) - case .replace: - return R.string.localizable.replaceAccount(preferredLanguages: locale.rLanguages) case .etherscan: return R.string.localizable.transactionDetailsViewEtherscan(preferredLanguages: locale.rLanguages) case .reefscan: diff --git a/fearless/Common/Operation/MetaAccountOperationFactory.swift b/fearless/Common/Operation/MetaAccountOperationFactory.swift index f126a8a083..f13e73c7a2 100644 --- a/fearless/Common/Operation/MetaAccountOperationFactory.swift +++ b/fearless/Common/Operation/MetaAccountOperationFactory.swift @@ -523,175 +523,194 @@ extension MetaAccountOperationFactory: MetaAccountOperationFactoryProtocol { } } - func importChainAccountOperation(request: ChainAccountImportMnemonicRequest) -> BaseOperation { + func importChainAccountOperation( + request: ChainAccountImportMnemonicRequest + ) -> BaseOperation { ClosureOperation { [self] in - let metaId = request.meta.metaId + var updatedWallet = request.wallet + + try request.chains.forEach { chain in + let metaId = request.wallet.metaId + let accountId: AccountId + let privateKey: Data + let publicKey: Data + switch chain.ecosystem { + case .substrate: + let query = try getQuery( + seedSource: .mnemonic(request.mnemonic), + derivationPath: request.derivationPath, + cryptoType: request.cryptoType, + ethereumBased: false + ) + accountId = try query.publicKey.publicKeyToAccountId() + privateKey = query.privateKey + publicKey = query.publicKey + try saveSeed(query.seed, metaId: metaId, ecosystem: chain.ecosystem) + case .ethereum, .ethereumBased: + let query = try getQuery( + seedSource: .mnemonic(request.mnemonic), + derivationPath: request.derivationPath, + cryptoType: request.cryptoType, + ethereumBased: true + ) + accountId = try query.publicKey.ethereumAddressFromPublicKey() + privateKey = query.privateKey + publicKey = query.publicKey + try saveSeed(query.seed, metaId: metaId, ecosystem: chain.ecosystem) + case .ton: + throw AccountOperationFactoryError.unsupportedImport + } - let accountId: AccountId - let privateKey: Data - let publicKey: Data - switch request.ecosystem { - case .substrate: - let query = try getQuery( - seedSource: .mnemonic(request.mnemonic), - derivationPath: request.derivationPath, - cryptoType: request.cryptoType, - ethereumBased: false + try saveSecretKey( + privateKey, + metaId: metaId, + ecosystem: chain.ecosystem, + accountId: accountId ) - accountId = try query.publicKey.publicKeyToAccountId() - privateKey = query.privateKey - publicKey = query.publicKey - try saveSeed(query.seed, metaId: metaId, ecosystem: request.ecosystem) - case .ethereum, .ethereumBased: - let query = try getQuery( - seedSource: .mnemonic(request.mnemonic), - derivationPath: request.derivationPath, - cryptoType: request.cryptoType, - ethereumBased: true - ) - accountId = try query.publicKey.ethereumAddressFromPublicKey() - privateKey = query.privateKey - publicKey = query.publicKey - try saveSeed(query.seed, metaId: metaId, ecosystem: request.ecosystem) - case .ton: - throw AccountOperationFactoryError.unsupportedImport - } - try saveSecretKey( - privateKey, - metaId: metaId, - ecosystem: request.ecosystem, - accountId: accountId - ) - - try saveDerivationPath( - request.derivationPath, - metaId: metaId, - accountId: accountId, - ethereumBased: request.ecosystem.isEthereum || request.ecosystem.isEthereumBased - ) + try saveDerivationPath( + request.derivationPath, + metaId: metaId, + accountId: accountId, + ethereumBased: chain.ecosystem.isEthereum || chain.ecosystem.isEthereumBased + ) - try saveEntropy(request.mnemonic.entropy(), metaId: metaId, accountId: accountId) + try saveEntropy(request.mnemonic.entropy(), metaId: metaId, accountId: accountId) - let chainAccount = ChainAccountModel( - chainId: request.chainId, - accountId: accountId, - publicKey: publicKey, - cryptoType: request.cryptoType.rawValue, - ecosystem: request.ecosystem - ) + let chainAccount = ChainAccountModel( + chainId: chain.chainId, + accountId: accountId, + publicKey: publicKey, + cryptoType: request.cryptoType.rawValue, + ecosystem: chain.ecosystem + ) - return request.meta.insertingChainAccount(chainAccount) + updatedWallet = updatedWallet.insertingChainAccount(chainAccount) + } + return updatedWallet } } - func importChainAccountOperation(request: ChainAccountImportSeedRequest) -> BaseOperation { + func importChainAccountOperation( + request: ChainAccountImportSeedRequest + ) -> BaseOperation { ClosureOperation { [self] in - let seed = try Data(hexStringSSF: request.seed) - let query = try getQuery( - seedSource: .seed(seed), - derivationPath: request.derivationPath, - cryptoType: request.cryptoType, - ethereumBased: request.ecosystem.isEthereum || request.ecosystem.isEthereumBased - ) + var updatedWallet = request.wallet + + try request.chains.forEach { chain in + let seed = try Data(hexStringSSF: request.seed) + let query = try getQuery( + seedSource: .seed(seed), + derivationPath: request.derivationPath, + cryptoType: request.cryptoType, + ethereumBased: chain.ecosystem.isEthereum || chain.ecosystem.isEthereumBased + ) - let accountId: AccountId - switch request.ecosystem { - case .substrate: - accountId = try query.publicKey.publicKeyToAccountId() - case .ethereum, .ethereumBased: - accountId = try query.publicKey.ethereumAddressFromPublicKey() - case .ton: - throw AccountOperationFactoryError.unsupportedImport - } - let metaId = request.meta.metaId + let accountId: AccountId + switch chain.ecosystem { + case .substrate: + accountId = try query.publicKey.publicKeyToAccountId() + case .ethereum, .ethereumBased: + accountId = try query.publicKey.ethereumAddressFromPublicKey() + case .ton: + throw AccountOperationFactoryError.unsupportedImport + } + let metaId = request.wallet.metaId - try saveSecretKey( - query.privateKey, - metaId: metaId, - ecosystem: request.ecosystem, - accountId: accountId - ) + try saveSecretKey( + query.privateKey, + metaId: metaId, + ecosystem: chain.ecosystem, + accountId: accountId + ) - try saveDerivationPath( - request.derivationPath, - metaId: metaId, - accountId: accountId, - ethereumBased: request.ecosystem.isEthereum || request.ecosystem.isEthereumBased - ) + try saveDerivationPath( + request.derivationPath, + metaId: metaId, + accountId: accountId, + ethereumBased: chain.ecosystem.isEthereum || chain.ecosystem.isEthereumBased + ) - try saveSeed(seed, metaId: metaId, ecosystem: request.ecosystem) + try saveSeed(seed, metaId: metaId, ecosystem: chain.ecosystem) - let chainAccount = ChainAccountModel( - chainId: request.chainId, - accountId: accountId, - publicKey: query.publicKey, - cryptoType: request.cryptoType.rawValue, - ecosystem: request.ecosystem - ) + let chainAccount = ChainAccountModel( + chainId: chain.chainId, + accountId: accountId, + publicKey: query.publicKey, + cryptoType: request.cryptoType.rawValue, + ecosystem: chain.ecosystem + ) - return request.meta.insertingChainAccount(chainAccount) + updatedWallet = updatedWallet.insertingChainAccount(chainAccount) + } + return updatedWallet } } - func importChainAccountOperation(request: ChainAccountImportKeystoreRequest) -> BaseOperation { + func importChainAccountOperation( + request: ChainAccountImportKeystoreRequest + ) -> BaseOperation { ClosureOperation { [self] in let keystoreExtractor = KeystoreExtractor() + var updatedWallet = request.wallet + + try request.chains.forEach { chain in + guard let data = request.keystore.data(using: .utf8) else { + throw AccountOperationFactoryError.invalidKeystore + } - guard let data = request.keystore.data(using: .utf8) else { - throw AccountOperationFactoryError.invalidKeystore - } - - let keystoreDefinition = try JSONDecoder().decode( - KeystoreDefinition.self, - from: data - ) - - guard let keystore = try? keystoreExtractor - .extractFromDefinition(keystoreDefinition, password: request.password) else { - throw AccountOperationFactoryError.decryption - } + let keystoreDefinition = try JSONDecoder().decode( + KeystoreDefinition.self, + from: data + ) - let publicKey: IRPublicKeyProtocol - let accountId: Data - switch request.ecosystem { - case .substrate: - switch request.cryptoType { - case .sr25519: - publicKey = try SNPublicKey(rawData: keystore.publicKeyData) - case .ed25519: - publicKey = try EDPublicKey(rawData: keystore.publicKeyData) - case .ecdsa: - publicKey = try SECPublicKey(rawData: keystore.publicKeyData) - } - accountId = try publicKey.rawData().publicKeyToAccountId() - case .ethereum, .ethereumBased: - if let privateKey = try? SECPrivateKey(rawData: keystore.secretKeyData) { - publicKey = try SECKeyFactory().derive(fromPrivateKey: privateKey).publicKey() - } else { + guard let keystore = try? keystoreExtractor + .extractFromDefinition(keystoreDefinition, password: request.password) else { throw AccountOperationFactoryError.decryption } - accountId = try publicKey.rawData().ethereumAddressFromPublicKey() - case .ton: - throw AccountOperationFactoryError.unsupportedImport - } - try saveSecretKey( - keystore.secretKeyData, - metaId: request.meta.metaId, - ecosystem: request.ecosystem, - accountId: accountId - ) + let publicKey: IRPublicKeyProtocol + let accountId: Data + switch chain.ecosystem { + case .substrate: + switch request.cryptoType { + case .sr25519: + publicKey = try SNPublicKey(rawData: keystore.publicKeyData) + case .ed25519: + publicKey = try EDPublicKey(rawData: keystore.publicKeyData) + case .ecdsa: + publicKey = try SECPublicKey(rawData: keystore.publicKeyData) + } + accountId = try publicKey.rawData().publicKeyToAccountId() + case .ethereum, .ethereumBased: + if let privateKey = try? SECPrivateKey(rawData: keystore.secretKeyData) { + publicKey = try SECKeyFactory().derive(fromPrivateKey: privateKey).publicKey() + } else { + throw AccountOperationFactoryError.decryption + } + accountId = try publicKey.rawData().ethereumAddressFromPublicKey() + case .ton: + throw AccountOperationFactoryError.unsupportedImport + } - let chainAccount = ChainAccountModel( - chainId: request.chainId, - accountId: accountId, - publicKey: publicKey.rawData(), - cryptoType: request.cryptoType.rawValue, - ecosystem: request.ecosystem - ) + try saveSecretKey( + keystore.secretKeyData, + metaId: request.wallet.metaId, + ecosystem: chain.ecosystem, + accountId: accountId + ) + + let chainAccount = ChainAccountModel( + chainId: chain.chainId, + accountId: accountId, + publicKey: publicKey.rawData(), + cryptoType: request.cryptoType.rawValue, + ecosystem: chain.ecosystem + ) + updatedWallet = updatedWallet.insertingChainAccount(chainAccount) + } - return request.meta.insertingChainAccount(chainAccount) + return updatedWallet } } } diff --git a/fearless/Modules/AccountCreate/AccountCreatePresenter.swift b/fearless/Modules/AccountCreate/AccountCreatePresenter.swift index 6f6c0b8536..09fa68b755 100644 --- a/fearless/Modules/AccountCreate/AccountCreatePresenter.swift +++ b/fearless/Modules/AccountCreate/AccountCreatePresenter.swift @@ -157,6 +157,8 @@ extension AccountCreatePresenter: AccountCreatePresenterProtocol { selectedCryptoType = cryptoType } view?.set(chainType: model.chain.isEthereumBased ? .ethereum : .substrate) + case .ethereum: + view?.set(chainType: .ethereum) } applySubstrateCryptoTypeViewModel() applySubstrateDerivationPathViewModel() @@ -285,13 +287,12 @@ extension AccountCreatePresenter: AccountCreatePresenterProtocol { return } let request = ChainAccountImportMnemonicRequest( + wallet: model.meta, mnemonic: mnemonic, username: usernameSetup.username, derivationPath: model.chain.isEthereumBased ? ethereumDerivationPath : substrateDerivationPath, cryptoType: model.chain.isEthereumBased ? .ecdsa : selectedCryptoType, - ecosystem: model.chain.ecosystem, - meta: model.meta, - chainId: model.chain.chainId + chains: [model.chain] ) wireframe.confirm(from: view, flow: .chain(request)) case .backup: @@ -311,6 +312,20 @@ extension AccountCreatePresenter: AccountCreatePresenterProtocol { request: request, from: view ) + case .ethereum(wallet: let wallet, chains: let chains): + guard let mnemonic = interactor.createMnemonicFromString(mnemonic.joined(separator: " ")) else { + didReceiveMnemonicGeneration(error: AccountCreateError.invalidMnemonicFormat) + return + } + let request = ChainAccountImportMnemonicRequest( + wallet: wallet, + mnemonic: mnemonic, + username: usernameSetup.username, + derivationPath: ethereumDerivationPath, + cryptoType: .ecdsa, + chains: chains + ) + wireframe.confirm(from: view, flow: .chain(request)) } } diff --git a/fearless/Modules/AccountCreate/AccountCreateViewController.swift b/fearless/Modules/AccountCreate/AccountCreateViewController.swift index 7e49d9b366..998eed5ef4 100644 --- a/fearless/Modules/AccountCreate/AccountCreateViewController.swift +++ b/fearless/Modules/AccountCreate/AccountCreateViewController.swift @@ -76,7 +76,7 @@ private extension AccountCreateViewController { ) navigationItem.rightBarButtonItem = infoItem switch presenter.flow { - case .wallet, .chain: + case .wallet, .chain, .ethereum: title = R.string.localizable.accountCreateTitle(preferredLanguages: locale.rLanguages) case .backup: title = R.string.localizable.backupMnemonicTitle(preferredLanguages: locale.rLanguages) diff --git a/fearless/Modules/AccountCreate/AccountCreateViewLayout.swift b/fearless/Modules/AccountCreate/AccountCreateViewLayout.swift index e7a215c421..788d30af06 100644 --- a/fearless/Modules/AccountCreate/AccountCreateViewLayout.swift +++ b/fearless/Modules/AccountCreate/AccountCreateViewLayout.swift @@ -397,7 +397,7 @@ private extension AccountCreateViewLayout { backupButton.snp.makeConstraints { make in make.height.equalTo(UIConstants.actionHeight) } - case .chain: + case .chain, .ethereum: backupButton.isHidden = true case .backup: expandableControl.isHidden = true @@ -409,7 +409,7 @@ private extension AccountCreateViewLayout { .commonAdvanced(preferredLanguages: locale.rLanguages) switch flow { - case .wallet, .chain: + case .wallet, .chain, .ethereum: detailsLabel.text = R.string.localizable.accountCreateDetails(preferredLanguages: locale.rLanguages) nextButton.imageWithTitleView?.title = R.string.localizable .accountConfirmationTitle(preferredLanguages: locale.rLanguages) diff --git a/fearless/Modules/AccountCreate/Model/AccountCreateFlow.swift b/fearless/Modules/AccountCreate/Model/AccountCreateFlow.swift index 5275f1f0d5..0cab2418ea 100644 --- a/fearless/Modules/AccountCreate/Model/AccountCreateFlow.swift +++ b/fearless/Modules/AccountCreate/Model/AccountCreateFlow.swift @@ -1,7 +1,10 @@ +import SSFModels + enum AccountCreateFlow { case chain(model: UniqueChainModel) case wallet case backup + case ethereum(wallet: MetaAccountModel, chains: [ChainModel]) var supportsSubstrate: Bool { switch self { @@ -9,12 +12,14 @@ enum AccountCreateFlow { return true case let .chain(model): return !model.chain.isEthereumBased + case .ethereum: + return false } } var supportsEthereum: Bool { switch self { - case .wallet, .backup: + case .wallet, .backup, .ethereum: return true case let .chain(model): return model.chain.isEthereumBased @@ -25,7 +30,7 @@ enum AccountCreateFlow { switch self { case .wallet, .backup: return true - case .chain: + case .chain, .ethereum: return false } } @@ -36,6 +41,8 @@ enum AccountCreateFlow { return "" case let .chain(model): return model.meta.name + case let .ethereum(wallet, _): + return wallet.name } } } diff --git a/fearless/Modules/AccountImport/AccountImportPresenter.swift b/fearless/Modules/AccountImport/AccountImportPresenter.swift index 74783462b1..b8e4188891 100644 --- a/fearless/Modules/AccountImport/AccountImportPresenter.swift +++ b/fearless/Modules/AccountImport/AccountImportPresenter.swift @@ -18,6 +18,7 @@ struct UniqueChainModel { enum AccountImportFlow { case chain(model: UniqueChainModel) case wallet(step: AccountCreationStep) + case ethereum(wallet: MetaAccountModel, chains: [ChainModel]) var isEthereumFlow: Bool { switch self { @@ -30,6 +31,8 @@ enum AccountImportFlow { case .ethereum: return true } + case .ethereum: + return true } } @@ -66,7 +69,7 @@ struct UniqueChainImportRequestData { let selectedCryptoType: CryptoType let password: String let meta: MetaAccountModel - let chain: ChainModel + let chains: [ChainModel] } struct PreferredData { @@ -162,6 +165,9 @@ private extension AccountImportPresenter { case .ton: view?.setSource(type: .tonMnemonic, chainType: .ton, selectable: false) } + case .ethereum(wallet: let wallet, chains: let chains): + selectedCryptoType = .ecdsa + view?.setSource(type: selectedSourceType, chainType: .ethereum, selectable: false) } applySourceTextViewModel(value) @@ -177,6 +183,8 @@ private extension AccountImportPresenter { case let .ethereum(data): username = data.username } + case let .ethereum(wallet, _): + username = wallet.name } applyUsernameViewModel(username) applyPasswordViewModel() @@ -249,7 +257,7 @@ private extension AccountImportPresenter { switch flow { case .wallet: visible = true - case .chain: + case .chain, .ethereum: visible = false } @@ -296,6 +304,9 @@ private extension AccountImportPresenter { applySubstrateDerivationPathViewModel() view?.show(chainType: .substrate) } + case .ethereum: + applyEthereumDerivationPathViewModel() + view?.show(chainType: .ethereum) } case .seed: applyCryptoTypeViewModel(cryptoType) @@ -512,11 +523,27 @@ private extension AccountImportPresenter { selectedCryptoType: data.selectedCryptoType, password: data.password, meta: model.meta, - chain: model.chain + chains: [model.chain] ) - importUniqueChain(data: data) + importUniqueChains(data: data, isEthereum: model.chain.isEthereumBased) case let .wallet(step): importMetaAccount(data: data, step: step) + case let .ethereum(wallet, chains): + guard let chain = chains.first else { + return + } + let derivationPath = data.ethereumDerivationPath + let data = UniqueChainImportRequestData( + selectedSourceType: data.selectedSourceType, + source: data.source, + username: data.username, + derivationPath: derivationPath, + selectedCryptoType: data.selectedCryptoType, + password: data.password, + meta: wallet, + chains: chains + ) + importUniqueChains(data: data, isEthereum: true) } } @@ -634,7 +661,10 @@ private extension AccountImportPresenter { wireframe.showEthereumStep(from: view, with: data) } - func importUniqueChain(data: UniqueChainImportRequestData) { + func importUniqueChains( + data: UniqueChainImportRequestData, + isEthereum: Bool + ) { var source: UniqueChainImportRequestSource switch data.selectedSourceType { case .mnemonic: @@ -663,13 +693,16 @@ private extension AccountImportPresenter { return } let request = UniqueChainImportRequest( - source: source, username: data.username, - cryptoType: data.chain.isEthereumBased ? .ecdsa : data.selectedCryptoType, - meta: data.meta, - chain: data.chain + cryptoType: isEthereum ? .ecdsa : data.selectedCryptoType, + chains: data.chains + ) + + interactor.importUniqueChain( + source: source, + wallet: data.meta, + request: request ) - interactor.importUniqueChain(request: request) } func validateSource(with value: String) -> Error? { diff --git a/fearless/Modules/AccountImport/AccountImportProtocols.swift b/fearless/Modules/AccountImport/AccountImportProtocols.swift index 826470f3db..7f3c041be3 100644 --- a/fearless/Modules/AccountImport/AccountImportProtocols.swift +++ b/fearless/Modules/AccountImport/AccountImportProtocols.swift @@ -38,7 +38,11 @@ protocol AccountImportPresenterProtocol: AnyObject { protocol AccountImportInteractorInputProtocol: AnyObject { func setup() func importMetaAccount(request: MetaAccountImportRequest) - func importUniqueChain(request: UniqueChainImportRequest) + func importUniqueChain( + source: UniqueChainImportRequestSource, + wallet: MetaAccountModel, + request: UniqueChainImportRequest + ) func deriveMetadataFromKeystore(_ keystore: String) func createMnemonicFromString(_ mnemonicString: String) -> IRMnemonicProtocol? } diff --git a/fearless/Modules/AccountImport/AccountImportViewController.swift b/fearless/Modules/AccountImport/AccountImportViewController.swift index bd99d1f521..c8eb2bf487 100644 --- a/fearless/Modules/AccountImport/AccountImportViewController.swift +++ b/fearless/Modules/AccountImport/AccountImportViewController.swift @@ -105,7 +105,7 @@ private extension AccountImportViewController { switch presenter.flow { case .wallet: title = R.string.localizable.importWallet(preferredLanguages: locale.rLanguages) - case .chain: + case .chain, .ethereum: title = R.string.localizable.onboardingRestoreAccount(preferredLanguages: locale.rLanguages) } diff --git a/fearless/Modules/AccountImport/AccountImportWireframe.swift b/fearless/Modules/AccountImport/AccountImportWireframe.swift index 8f5ba4391d..00db9803fe 100644 --- a/fearless/Modules/AccountImport/AccountImportWireframe.swift +++ b/fearless/Modules/AccountImport/AccountImportWireframe.swift @@ -25,7 +25,7 @@ final class AccountImportWireframe: AccountImportWireframeProtocol { return } rootAnimator.animateTransition(to: pincodeViewController) - case .chain: + case .chain, .ethereum: dismiss(view: view) } } diff --git a/fearless/Modules/AccountImport/BaseAccountImportInteractor.swift b/fearless/Modules/AccountImport/BaseAccountImportInteractor.swift index e00b8b93f3..2b1ca58089 100644 --- a/fearless/Modules/AccountImport/BaseAccountImportInteractor.swift +++ b/fearless/Modules/AccountImport/BaseAccountImportInteractor.swift @@ -121,42 +121,43 @@ extension BaseAccountImportInteractor: AccountImportInteractorInputProtocol { importAccountUsingOperation(operation) } - func importUniqueChain(request: UniqueChainImportRequest) { + func importUniqueChain( + source: UniqueChainImportRequestSource, + wallet: MetaAccountModel, + request: UniqueChainImportRequest + ) { let operation: BaseOperation - switch request.source { + switch source { case let .mnemonic(data): - let request = ChainAccountImportMnemonicRequest( + let mnemonicRequest = ChainAccountImportMnemonicRequest( + wallet: wallet, mnemonic: data.mnemonic, username: request.username, derivationPath: data.derivationPath, cryptoType: request.cryptoType, - ecosystem: request.chain.ecosystem, - meta: request.meta, - chainId: request.chain.chainId + chains: request.chains ) - operation = accountOperationFactory.importChainAccountOperation(request: request) + operation = accountOperationFactory.importChainAccountOperation(request: mnemonicRequest) case let .seed(data): - let request = ChainAccountImportSeedRequest( + let seedRequest = ChainAccountImportSeedRequest( + wallet: wallet, seed: data.seed, username: request.username, derivationPath: data.derivationPath, cryptoType: request.cryptoType, - ecosystem: request.chain.ecosystem, - meta: request.meta, - chainId: request.chain.chainId + chains: request.chains ) - operation = accountOperationFactory.importChainAccountOperation(request: request) + operation = accountOperationFactory.importChainAccountOperation(request: seedRequest) case let .keystore(data): - let request = ChainAccountImportKeystoreRequest( + let keystoreRequest = ChainAccountImportKeystoreRequest( + wallet: wallet, keystore: data.keystore, password: data.password, username: request.username, cryptoType: request.cryptoType, - ecosystem: request.chain.ecosystem, - meta: request.meta, - chainId: request.chain.chainId + chains: request.chains ) - operation = accountOperationFactory.importChainAccountOperation(request: request) + operation = accountOperationFactory.importChainAccountOperation(request: keystoreRequest) } importAccountUsingOperation(operation) } diff --git a/fearless/Modules/AccountImport/Model/AccountImportRequest.swift b/fearless/Modules/AccountImport/Model/AccountImportRequest.swift index 69041bed4a..2ab93873c5 100644 --- a/fearless/Modules/AccountImport/Model/AccountImportRequest.swift +++ b/fearless/Modules/AccountImport/Model/AccountImportRequest.swift @@ -64,33 +64,30 @@ struct MetaAccountImportRequest { } struct ChainAccountImportMnemonicRequest { + let wallet: MetaAccountModel let mnemonic: IRMnemonicProtocol let username: String let derivationPath: String let cryptoType: CryptoType - let ecosystem: Ecosystem - let meta: MetaAccountModel - let chainId: ChainModel.Id + let chains: [ChainModel] } struct ChainAccountImportSeedRequest { + let wallet: MetaAccountModel let seed: String let username: String let derivationPath: String let cryptoType: CryptoType - let ecosystem: Ecosystem - let meta: MetaAccountModel - let chainId: ChainModel.Id + let chains: [ChainModel] } struct ChainAccountImportKeystoreRequest { + let wallet: MetaAccountModel let keystore: String let password: String let username: String let cryptoType: CryptoType - let ecosystem: Ecosystem - let meta: MetaAccountModel - let chainId: ChainModel.Id + let chains: [ChainModel] } enum UniqueChainImportRequestSource { @@ -115,9 +112,7 @@ enum UniqueChainImportRequestSource { } struct UniqueChainImportRequest { - let source: UniqueChainImportRequestSource let username: String let cryptoType: CryptoType - let meta: MetaAccountModel - let chain: ChainModel + let chains: [ChainModel] } diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsAssembly.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsAssembly.swift index 2910386fe5..06825402b8 100644 --- a/fearless/Modules/ConnectedAccounts/ConnectedAccountsAssembly.swift +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsAssembly.swift @@ -13,7 +13,8 @@ final class ConnectedAccountsAssembly { let interactor = ConnectedAccountsInteractor( wallet: wallet, chainRepository: ServiceAssembly.shared.asyncChainModelRepository(), - walletBalanceSubscriptionAdapter: ServiceAssembly.shared.walletBalanceSubscriptionAdapter + walletBalanceSubscriptionAdapter: ServiceAssembly.shared.walletBalanceSubscriptionAdapter, + eventCenter: ServiceAssembly.shared.eventCenter ) let router = ConnectedAccountsRouter() diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsInteractor.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsInteractor.swift index 150bc27c32..72a8bb113a 100644 --- a/fearless/Modules/ConnectedAccounts/ConnectedAccountsInteractor.swift +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsInteractor.swift @@ -4,24 +4,29 @@ import RobinHood protocol ConnectedAccountsInteractorOutput: AnyObject { func didReceiveWalletBalances(_ balances: Result<[MetaAccountId: WalletBalanceInfo], Error>) + func processSelectedAccountChanged(wallet: MetaAccountModel) } final class ConnectedAccountsInteractor { // MARK: - Private properties private weak var output: ConnectedAccountsInteractorOutput? - private let wallet: MetaAccountModel + private var wallet: MetaAccountModel private let walletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterProtocol private let chainRepository: AsyncAnyRepository + private let eventCenter: EventCenterProtocol init( wallet: MetaAccountModel, chainRepository: AsyncAnyRepository, - walletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterProtocol + walletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterProtocol, + eventCenter: EventCenterProtocol ) { self.wallet = wallet self.chainRepository = chainRepository self.walletBalanceSubscriptionAdapter = walletBalanceSubscriptionAdapter + self.eventCenter = eventCenter + eventCenter.add(observer: self, dispatchIn: .global()) } // MARK: - Private methods @@ -59,3 +64,12 @@ extension ConnectedAccountsInteractor: WalletBalanceSubscriptionListener { output?.didReceiveWalletBalances(result) } } + +// MARK: - EventVisitorProtocol + +extension ConnectedAccountsInteractor: EventVisitorProtocol { + func processSelectedAccountChanged(event: SelectedAccountChanged) { + wallet = event.account + output?.processSelectedAccountChanged(wallet: wallet) + } +} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsPresenter.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsPresenter.swift index c2ba86c202..4afbc19148 100644 --- a/fearless/Modules/ConnectedAccounts/ConnectedAccountsPresenter.swift +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsPresenter.swift @@ -18,7 +18,7 @@ final class ConnectedAccountsPresenter { private let router: ConnectedAccountsRouterInput private let interactor: ConnectedAccountsInteractorInput private let viewModelFactory: ConnectedAccountsViewModelFactory - private let wallet: MetaAccountModel + private var wallet: MetaAccountModel private lazy var logger: LoggerProtocol = Logger.shared private var balance: WalletBalanceInfo? @@ -51,6 +51,110 @@ final class ConnectedAccountsPresenter { await view?.didReceive(viewModels: viewModel) } } + + private func startAddAccountFlow(chains: [ChainModel]) { + func showCreateFlow() { + let rLanguages = localizationManager?.selectedLocale.rLanguages + let actionTitle = R.string.localizable.commonOk(preferredLanguages: rLanguages) + let action = SheetAlertPresentableAction(title: actionTitle) { [weak self] in + guard let self else { return } + self.router.showCreate( + wallet: self.wallet, + chains: chains, + from: self.view + ) + } + + let title = R.string.localizable.commonNoScreenshotTitle(preferredLanguages: rLanguages) + let message = R.string.localizable.commonNoScreenshotMessage(preferredLanguages: rLanguages) + let viewModel = SheetAlertPresentableViewModel( + title: title, + message: message, + actions: [action], + closeAction: nil, + icon: R.image.iconWarningBig() + ) + + router.present(viewModel: viewModel, from: view) + } + + let options: [ReplaceChainOption] = ReplaceChainOption.allCases + router.showUniqueChainSourceSelection( + from: view, + items: options, + callback: { + [weak self] selectedIndex in + let option = options[selectedIndex] + switch option { + case .create: + showCreateFlow() + case .import: + guard let wallet = self?.wallet else { + return + } + let uniqueChainModels = chains.map { + UniqueChainModel( + meta: wallet, + chain: $0 + ) + } + self?.showImportSource(for: chains) + } + } + ) + } + + private func showImportSource(for chains: [ChainModel]) { + let preferredLanguages = selectedLocale.rLanguages + + let mnemonicTitle = R.string.localizable + .googleBackupChoiceMnemonic(preferredLanguages: preferredLanguages) + let mnemonicAction = SheetAlertPresentableAction( + title: mnemonicTitle, + button: UIFactory.default.createDisabledButton() + ) { [weak self] in + guard let self = self else { return } + self.router.showImport(wallet: wallet, chains: chains, defaultSource: .mnemonic, from: view) + } + + let rawTitle = R.string.localizable + .googleBackupChoiceRaw(preferredLanguages: preferredLanguages) + let rawAction = SheetAlertPresentableAction( + title: rawTitle, + button: UIFactory.default.createDisabledButton() + ) { [weak self] in + guard let self = self else { return } + self.router.showImport(wallet: wallet, chains: chains, defaultSource: .seed, from: view) + } + + let jsonTitle = R.string.localizable + .googleBackupChoiceJson(preferredLanguages: preferredLanguages) + let jsonAction = SheetAlertPresentableAction( + title: jsonTitle, + button: UIFactory.default.createDisabledButton() + ) { [weak self] in + guard let self = self else { return } + self.router.showImport(wallet: wallet, chains: chains, defaultSource: .keystore, from: view) + } + + let cancelTitle = R.string.localizable.commonCancel(preferredLanguages: preferredLanguages) + let cancelAction = SheetAlertPresentableAction( + title: cancelTitle, + style: .pinkBackgroundWhiteText + ) + + let title = R.string.localizable + .googleBackupChoiceTitle(preferredLanguages: preferredLanguages) + let viewModel = SheetAlertPresentableViewModel( + title: title, + message: nil, + actions: [mnemonicAction, rawAction, jsonAction, cancelAction], + closeAction: nil, + icon: nil + ) + + router.present(viewModel: viewModel, from: view) + } } // MARK: - ConnectedAccountsViewOutput @@ -71,7 +175,7 @@ extension ConnectedAccountsPresenter: ConnectedAccountsViewOutput { func didSelect(viewModel: ConnectedAccountsViewModel.Accounts) { guard viewModel.count > 0 else { - // TODO: - Show Add account flow + startAddAccountFlow(chains: viewModel.chains) return } router.showOptions( @@ -100,6 +204,11 @@ extension ConnectedAccountsPresenter: ConnectedAccountsViewOutput { // MARK: - ConnectedAccountsInteractorOutput extension ConnectedAccountsPresenter: ConnectedAccountsInteractorOutput { + func processSelectedAccountChanged(wallet: SSFModels.MetaAccountModel) { + self.wallet = wallet + provideViewModel() + } + func didReceiveWalletBalances(_ balances: Result<[MetaAccountId: WalletBalanceInfo], any Error>) { switch balances { case let .success(balances): diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsProtocols.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsProtocols.swift index e06ee8ec33..83a11ffb80 100644 --- a/fearless/Modules/ConnectedAccounts/ConnectedAccountsProtocols.swift +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsProtocols.swift @@ -5,7 +5,11 @@ typealias ConnectedAccountsModuleCreationResult = ( input: ConnectedAccountsModuleInput ) -protocol ConnectedAccountsRouterInput: AnyDismissable, AuthorizationPresentable, AccountScorePresentable { +protocol ConnectedAccountsRouterInput: + AnyDismissable, + AuthorizationPresentable, + AccountScorePresentable, + SheetAlertPresentable { func showAccountDetails( from view: ControllerBackedProtocol?, metaAccount: MetaAccountModel @@ -35,6 +39,22 @@ protocol ConnectedAccountsRouterInput: AnyDismissable, AuthorizationPresentable, flow: ExportFlow, from view: ControllerBackedProtocol? ) + func showUniqueChainSourceSelection( + from view: ControllerBackedProtocol?, + items: [ReplaceChainOption], + callback: @escaping ModalPickerSelectionCallback + ) + func showCreate( + wallet: MetaAccountModel, + chains: [ChainModel], + from view: ControllerBackedProtocol? + ) + func showImport( + wallet: MetaAccountModel, + chains: [ChainModel], + defaultSource: AccountImportSource, + from view: ControllerBackedProtocol? + ) } protocol ConnectedAccountsModuleInput: AnyObject {} diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsRouter.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsRouter.swift index 538c593470..3f88b9c931 100644 --- a/fearless/Modules/ConnectedAccounts/ConnectedAccountsRouter.swift +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsRouter.swift @@ -2,6 +2,57 @@ import Foundation import SSFModels final class ConnectedAccountsRouter: ConnectedAccountsRouterInput { + func showUniqueChainSourceSelection( + from view: (any ControllerBackedProtocol)?, + items: [ReplaceChainOption], + callback: @escaping ModalPickerSelectionCallback + ) { + let actionsView = ModalPickerFactory.createPickerForList( + items, + callback: callback, + context: nil + ) + + guard let actionsView = actionsView else { + return + } + + view?.controller.navigationController?.present(actionsView, animated: true) + } + + func showCreate( + wallet: SSFModels.MetaAccountModel, + chains: [SSFModels.ChainModel], + from view: (any ControllerBackedProtocol)? + ) { + guard let createController = AccountCreateViewFactory.createViewForOnboarding( + ecosystem: .regular, + model: UsernameSetupModel(username: wallet.name), + flow: .ethereum(wallet: wallet, chains: chains) + )?.controller else { + return + } + createController.hidesBottomBarWhenPushed = true + view?.controller.navigationController?.pushViewController(createController, animated: true) + } + + func showImport( + wallet: SSFModels.MetaAccountModel, + chains: [SSFModels.ChainModel], + defaultSource: AccountImportSource, + from view: (any ControllerBackedProtocol)? + ) { + guard let importController = AccountImportViewFactory.createViewForOnboarding( + defaultSource: defaultSource, + flow: .ethereum(wallet: wallet, chains: chains) + )?.controller else { + return + } + importController.hidesBottomBarWhenPushed = true + let navigationController = FearlessNavigationController(rootViewController: importController) + view?.controller.navigationController?.present(navigationController, animated: true) + } + func showAccountDetails( from view: ControllerBackedProtocol?, metaAccount: MetaAccountModel diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/chains.json b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/chains.json index ab6cd50df8..c7575aadc3 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/chains.json +++ b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/chains.json @@ -8703,7 +8703,8 @@ ], "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/TON.svg", "addressPrefix": 0, - "options": ["remoteAssets"] + "options": ["remoteAssets"], + "tonBridgeUrl": "https://fearless-ton-bridge.tachi.soramitsu.co.jp" }, { "disabled": false, @@ -8751,6 +8752,7 @@ "options": [ "remoteAssets", "testnet" - ] + ], + "tonBridgeUrl": "https://fearless-ton-bridge.tachi.soramitsu.co.jp" } ] diff --git a/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift b/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift index cad2f10eca..14f41c7558 100644 --- a/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift +++ b/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift @@ -285,7 +285,6 @@ extension ChainAccountPresenter: ChainAccountInteractorOutputProtocol { items.append(.export) if chainAsset.chain.ecosystem.isSubstrate || chainAsset.chain.ecosystem.isEthereumBased { items.append(.switchNode) - items.append(.replace) } if interactor.checkIsClaimAvailable() { items.append(.claimCrowdloanRewards) } @@ -310,8 +309,6 @@ extension ChainAccountPresenter: ChainAccountInteractorOutputProtocol { from: self.view, chain: self.chainAsset.chain ) - case .replace: - self.startReplaceAccountFlow() case .claimCrowdloanRewards: self.wireframe.showClaimCrowdloanRewardsFlow(from: self.view, chainAsset: self.chainAsset, wallet: self.wallet) default: diff --git a/fearless/Modules/UsernameSetup/UsernameSetupPresenter.swift b/fearless/Modules/UsernameSetup/UsernameSetupPresenter.swift index 65de38ad92..3c86c9fe70 100644 --- a/fearless/Modules/UsernameSetup/UsernameSetupPresenter.swift +++ b/fearless/Modules/UsernameSetup/UsernameSetupPresenter.swift @@ -51,6 +51,12 @@ extension UsernameSetupPresenter: UsernameSetupPresenterProtocol { icon: model.chain.icon.map { RemoteImageViewModel(url: $0) } ) view.bindUniqueChain(viewModel: uniqueChainModel) + case .ethereum(wallet: let wallet, chains: let chains): + let selectableViewModel = SelectableViewModel( + underlyingViewModel: viewModel, + selectable: false + ) + view.bindUsername(viewModel: selectableViewModel) } self.view = view } diff --git a/fearless/Modules/WalletDetails/WalletDetailsPresenter.swift b/fearless/Modules/WalletDetails/WalletDetailsPresenter.swift index 8ea3af139a..e20d6fa5f3 100644 --- a/fearless/Modules/WalletDetails/WalletDetailsPresenter.swift +++ b/fearless/Modules/WalletDetails/WalletDetailsPresenter.swift @@ -144,22 +144,6 @@ extension WalletDetailsPresenter: WalletDetailsInteractorOutputProtocol { self.wireframe.present(from: view, url: url) case let .tonviewer(url): self.wireframe.present(from: view, url: url) - case .replace: - let model = UniqueChainModel(meta: self.flow.wallet, chain: chainAccount.chain) - let options: [ReplaceChainOption] = ReplaceChainOption.allCases - self.wireframe.showUniqueChainSourceSelection( - from: view, - items: options, - callback: { [weak self] selectedIndex in - let option = options[selectedIndex] - switch option { - case .create: - self?.wireframe.showCreate(uniqueChainModel: model, from: view) - case .import: - self?.wireframe.showImport(uniqueChainModel: model, from: view) - } - } - ) case let .oklink(url: url): self.wireframe.present(from: view, url: url) } @@ -210,7 +194,7 @@ private extension WalletDetailsPresenter { } func createActions(for chain: ChainModel, address: String) -> [ChainAction] { - var actions: [ChainAction] = [.copyAddress, .switchNode, .export, .replace] + var actions: [ChainAction] = [.copyAddress, .switchNode, .export] if let explorers = chain.externalApi?.explorers { let explorerActions: [ChainAction] = explorers.compactMap { switch $0.type { From 68e0afb3dcd488967058956af76959fde7fecd9a Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Fri, 20 Dec 2024 14:43:51 +0500 Subject: [PATCH 123/156] Fast ton wallet create --- .../AddAccount+OnboardingMainWireframe.swift | 11 ++++ .../OnboardingMainInteractor.swift | 65 ++++++++++++++++++- .../OnboardingMainPresenter.swift | 13 +++- .../OnboardingMainProtocol.swift | 4 ++ .../OnboardingMainViewFactory.swift | 5 +- .../OnboardingMainWireframe.swift | 10 +++ ...witchAccount+OnboardingMainWireframe.swift | 2 + 7 files changed, 107 insertions(+), 3 deletions(-) diff --git a/fearless/Modules/AddAccount/Wireframes/AddAccount+OnboardingMainWireframe.swift b/fearless/Modules/AddAccount/Wireframes/AddAccount+OnboardingMainWireframe.swift index 05cce3e993..eff6e793de 100644 --- a/fearless/Modules/AddAccount/Wireframes/AddAccount+OnboardingMainWireframe.swift +++ b/fearless/Modules/AddAccount/Wireframes/AddAccount+OnboardingMainWireframe.swift @@ -3,6 +3,17 @@ import SSFCloudStorage extension AddAccount { final class OnboardingMainWireframe: OnboardingMainWireframeProtocol { + func didCompleteCreate(from view: ControllerBackedProtocol?) { + guard let navigationController = view?.controller.navigationController else { + return + } + + MainTransitionHelper.transitToMainTabBarController( + closing: navigationController, + animated: true + ) + } + func showPreinstalledFlow(from view: ControllerBackedProtocol?) { let module = GetPreinstalledWalletAssembly.configureModuleForNewUser() diff --git a/fearless/Modules/OnbordingMain/OnboardingMainInteractor.swift b/fearless/Modules/OnbordingMain/OnboardingMainInteractor.swift index b3fe806a48..8befaa36e3 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainInteractor.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainInteractor.swift @@ -1,6 +1,10 @@ import Foundation +import SSFAccountManagment import SSFUtils import SSFCloudStorage +import TonSwift +import RobinHood +import SSFModels final class OnboardingMainInteractor { weak var presenter: OnboardingMainInteractorOutputProtocol? @@ -9,17 +13,26 @@ final class OnboardingMainInteractor { private let cloudStorage: CloudStorageServiceProtocol private let featureToggleService: FeatureToggleProviderProtocol private let operationQueue: OperationQueue + private let accountOperationFactory: MetaAccountOperationFactoryProtocol + private let settings: SelectedWalletSettings + private let eventCenter: EventCenterProtocol init( keystoreImportService: KeystoreImportServiceProtocol, cloudStorage: CloudStorageServiceProtocol, featureToggleService: FeatureToggleProviderProtocol, - operationQueue: OperationQueue + operationQueue: OperationQueue, + accountOperationFactory: MetaAccountOperationFactoryProtocol, + settings: SelectedWalletSettings, + eventCenter: EventCenterProtocol ) { self.keystoreImportService = keystoreImportService self.cloudStorage = cloudStorage self.featureToggleService = featureToggleService self.operationQueue = operationQueue + self.accountOperationFactory = accountOperationFactory + self.settings = settings + self.eventCenter = eventCenter } deinit { @@ -37,6 +50,43 @@ final class OnboardingMainInteractor { operationQueue.addOperation(fetchOperation) } + + private func createAccountUsingOperation(_ importOperation: BaseOperation) { + let saveOperation: ClosureOperation = ClosureOperation { [weak self] in + let accountItem = try importOperation + .extractResultData(throwing: BaseOperationError.parentOperationCancelled) + self?.settings.save(value: accountItem) + + return accountItem + } + + saveOperation.completionBlock = { [weak self] in + DispatchQueue.main.async { + switch saveOperation.result { + case .success: + do { + let accountItem = try importOperation + .extractResultData(throwing: BaseOperationError.parentOperationCancelled) + + self?.settings.setup() + self?.eventCenter.notify(with: SelectedAccountChanged(account: accountItem)) + self?.presenter?.didCompleteConfirmation() + } catch { + self?.presenter?.didReceive(error: error) + } + case let .failure(error): + self?.presenter?.didReceive(error: error) + + case .none: + let error = BaseOperationError.parentOperationCancelled + self?.presenter?.didReceive(error: error) + } + } + } + + saveOperation.addDependency(importOperation) + operationQueue.addOperations([importOperation, saveOperation], waitUntilFinished: false) + } } extension OnboardingMainInteractor: OnboardingMainInteractorInputProtocol { @@ -66,6 +116,19 @@ extension OnboardingMainInteractor: OnboardingMainInteractorInputProtocol { } } } + + func createTonAccount() { + let allWords = TonSwift.Mnemonic.mnemonicNew(wordsCount: 24) + let request = MetaAccountImportTonMnemonicRequest( + mnemonic: allWords.joined(separator: " "), + username: "Wallet" + ) + let operation = accountOperationFactory.newTonMetaAccountOperation( + request: request, + isBackedUp: false + ) + createAccountUsingOperation(operation) + } } extension OnboardingMainInteractor: KeystoreImportObserver { diff --git a/fearless/Modules/OnbordingMain/OnboardingMainPresenter.swift b/fearless/Modules/OnbordingMain/OnboardingMainPresenter.swift index 5fc9a62d53..6ad239e83c 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainPresenter.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainPresenter.swift @@ -89,7 +89,12 @@ extension OnboardingMainPresenter: OnboardingMainPresenterProtocol { func activateSignup() { guard let ecosystem else { return } - wireframe.showSignup(from: view, ecosystem: ecosystem) + switch ecosystem { + case .regular: + wireframe.showSignup(from: view, ecosystem: ecosystem) + case .ton: + interactor.createTonAccount() + } } func activateAccountRestore() { @@ -170,6 +175,12 @@ extension OnboardingMainPresenter: OnboardingMainPresenterProtocol { } extension OnboardingMainPresenter: OnboardingMainInteractorOutputProtocol { + func didCompleteConfirmation() { + wireframe.didCompleteCreate(from: view) + } + + func didReceive(error: any Error) {} + func didSuggestKeystoreImport() { wireframe.showKeystoreImport(from: view) } diff --git a/fearless/Modules/OnbordingMain/OnboardingMainProtocol.swift b/fearless/Modules/OnbordingMain/OnboardingMainProtocol.swift index d45cf7e8f3..e5a08f6dcf 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainProtocol.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainProtocol.swift @@ -33,17 +33,21 @@ protocol OnboardingMainWireframeProtocol: WebPresentable, ErrorPresentable, Shee ) func showCreateFlow(from view: ControllerBackedProtocol?) func showPreinstalledFlow(from view: ControllerBackedProtocol?) + func didCompleteCreate(from view: ControllerBackedProtocol?) } protocol OnboardingMainInteractorInputProtocol: AnyObject { func setup() func activateGoogleBackup() + func createTonAccount() } protocol OnboardingMainInteractorOutputProtocol: AnyObject { func didSuggestKeystoreImport() func didReceiveBackupAccounts(result: Result<[OpenBackupAccount], Error>) func didReceiveFeatureToggleConfig(result: Result?) + func didCompleteConfirmation() + func didReceive(error: Error) } protocol OnboardingMainViewFactoryProtocol { diff --git a/fearless/Modules/OnbordingMain/OnboardingMainViewFactory.swift b/fearless/Modules/OnbordingMain/OnboardingMainViewFactory.swift index a4dcf17e92..79c18fbe24 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainViewFactory.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainViewFactory.swift @@ -64,7 +64,10 @@ final class OnboardingMainViewFactory: OnboardingMainViewFactoryProtocol { keystoreImportService: kestoreImportService, cloudStorage: cloudStorage, featureToggleService: featureToggleProvider, - operationQueue: OperationQueue() + operationQueue: OperationQueue(), + accountOperationFactory: MetaAccountOperationFactory(keystore: Keychain()), + settings: SelectedWalletSettings.shared, + eventCenter: ServiceAssembly.shared.eventCenter ) let presenter = OnboardingMainPresenter( diff --git a/fearless/Modules/OnbordingMain/OnboardingMainWireframe.swift b/fearless/Modules/OnbordingMain/OnboardingMainWireframe.swift index e574d840d1..a6e7ad35c5 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainWireframe.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainWireframe.swift @@ -2,6 +2,16 @@ import Foundation import SSFCloudStorage final class OnboardingMainWireframe: OnboardingMainWireframeProtocol { + lazy var rootAnimator: RootControllerAnimationCoordinatorProtocol = RootControllerAnimationCoordinator() + + func didCompleteCreate(from view: ControllerBackedProtocol?) { + guard let pincodeViewController = PinViewFactory.createPinSetupView()?.controller else { + return + } + + rootAnimator.animateTransition(to: pincodeViewController) + } + func showSignup(from view: OnboardingMainViewProtocol?, ecosystem: AccountCreateEcosystem) { guard let usernameSetup = UsernameSetupViewFactory.createViewForOnboarding(ecosystem: ecosystem) else { return diff --git a/fearless/Modules/SwitchAccount/SwitchAccount+OnboardingMainWireframe.swift b/fearless/Modules/SwitchAccount/SwitchAccount+OnboardingMainWireframe.swift index 346feb0dbc..5667b74cb9 100644 --- a/fearless/Modules/SwitchAccount/SwitchAccount+OnboardingMainWireframe.swift +++ b/fearless/Modules/SwitchAccount/SwitchAccount+OnboardingMainWireframe.swift @@ -3,6 +3,8 @@ import SSFCloudStorage extension SwitchAccount { final class OnboardingMainWireframe: OnboardingMainWireframeProtocol { + func didCompleteCreate(from view: ControllerBackedProtocol?) {} + func showPreinstalledFlow(from view: ControllerBackedProtocol?) { let module = GetPreinstalledWalletAssembly.configureModuleForExistingUser() From 0d5d1c15b7b19fb110e6a9a7bde1b95d262a651b Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Fri, 20 Dec 2024 14:46:42 +0500 Subject: [PATCH 124/156] cascade nodes deletion rule --- .../SubstrateDataModel_v8.xcdatamodel/contents | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents index ef4d7c662b..a642fb38cc 100644 --- a/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents +++ b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents @@ -65,7 +65,7 @@ - + From 58e3d2cdebf576b71a57ef2032ca0d1219dfcb6d Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Mon, 23 Dec 2024 11:45:24 +0500 Subject: [PATCH 125/156] ton balance fetching fix --- .../Services/Balance/TonRemoteBalanceFetching.swift | 6 +++--- fearless/Common/Services/ChainRegistry/ChainRegistry.swift | 6 +++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift b/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift index 991be7ab75..54d9331d48 100644 --- a/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift +++ b/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift @@ -35,7 +35,7 @@ actor TonRemoteBalanceFetchingImpl: AccountInfoRemoteService { guard let accountId = wallet.fetch(for: chain.accountRequest())?.accountId else { throw TonRemoteBalanceFetchingError.missingAccount } - let address = try accountId.asTonAddress().toRaw() + let address = try accountId.asTonAddress().toString() let chainAssets = chain.chainAssets.divide { chainAsset in chainAsset.chainAssetType.tonAssetType == .normal @@ -78,7 +78,7 @@ actor TonRemoteBalanceFetchingImpl: AccountInfoRemoteService { guard let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId else { throw TonRemoteBalanceFetchingError.missingAccount } - let address = try accountId.asTonAddress().toRaw() + let address = try accountId.asTonAddress().toString() let accountInfo: AccountInfo switch chainAsset.chainAssetType.tonAssetType { @@ -124,7 +124,7 @@ actor TonRemoteBalanceFetchingImpl: AccountInfoRemoteService { throw TonRemoteBalanceFetchingError.missingAccount } - let address = try accountId.asTonAddress().toRaw() + let address = try accountId.asTonAddress().toString() let chainAccountInfos = try await getChainAccountInfos( address: address, currency: wallet.selectedCurrency diff --git a/fearless/Common/Services/ChainRegistry/ChainRegistry.swift b/fearless/Common/Services/ChainRegistry/ChainRegistry.swift index 4839492948..76ad3e1123 100644 --- a/fearless/Common/Services/ChainRegistry/ChainRegistry.swift +++ b/fearless/Common/Services/ChainRegistry/ChainRegistry.swift @@ -277,7 +277,11 @@ final class ChainRegistry { chains = chains.filter { $0.chainId != chain.chainId } chains.append(chain) - let token = TonNodeApiKey.tonApiKey + #if DEBUG + let token = TonNodeApiKeyDebug.tonApiKey + #else + let token = TonNodeApiKey.tonApiKey + #endif guard let tonBridgeURL = chain.tonBridgeUrl else { logger?.error("Missing tonBridgeURL") return From a6d016ce77e9c5f5a49f446de859f46d184ec45e Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Tue, 24 Dec 2024 15:15:18 +0500 Subject: [PATCH 126/156] https://tonapi.io/ api problem debuging --- fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved | 3 +-- .../Services/Balance/TonRemoteBalanceFetching.swift | 7 +++---- fearless/Common/Configs/ApplicationConfigs.swift | 5 ++--- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 978f111842..a592031621 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -142,7 +142,7 @@ "location" : "https://github.com/soramitsu/shared-features-spm.git", "state" : { "branch" : "FW-new-ecosystem", - "revision" : "46eeda75fd638a132965b3115abf5a9aea899cd0" + "revision" : "903bb64d35db4ff02ec735f1118c29399c36cbbb" } }, { @@ -276,7 +276,6 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/DRadmir/ton-api-swift.git", "state" : { - "branch" : "main", "revision" : "8ddff19a40d3d00503cab7fb9d9eb77459169488" } }, diff --git a/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift b/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift index 54d9331d48..bab17d9716 100644 --- a/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift +++ b/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift @@ -35,7 +35,7 @@ actor TonRemoteBalanceFetchingImpl: AccountInfoRemoteService { guard let accountId = wallet.fetch(for: chain.accountRequest())?.accountId else { throw TonRemoteBalanceFetchingError.missingAccount } - let address = try accountId.asTonAddress().toString() + let address = try accountId.asTonAddress().toRaw() let chainAssets = chain.chainAssets.divide { chainAsset in chainAsset.chainAssetType.tonAssetType == .normal @@ -78,7 +78,7 @@ actor TonRemoteBalanceFetchingImpl: AccountInfoRemoteService { guard let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId else { throw TonRemoteBalanceFetchingError.missingAccount } - let address = try accountId.asTonAddress().toString() + let address = try accountId.asTonAddress().toRaw() let accountInfo: AccountInfo switch chainAsset.chainAssetType.tonAssetType { @@ -118,13 +118,12 @@ actor TonRemoteBalanceFetchingImpl: AccountInfoRemoteService { guard let normal = chainAssets.slice.first else { throw TonRemoteBalanceFetchingError.utilityNotFound } - let jettons = chainAssets.remainder guard let accountId = wallet.fetch(for: normal.chain.accountRequest())?.accountId else { throw TonRemoteBalanceFetchingError.missingAccount } - let address = try accountId.asTonAddress().toString() + let address = try accountId.asTonAddress().toRaw() let chainAccountInfos = try await getChainAccountInfos( address: address, currency: wallet.selectedCurrency diff --git a/fearless/Common/Configs/ApplicationConfigs.swift b/fearless/Common/Configs/ApplicationConfigs.swift index b42b116e69..de80b0e438 100644 --- a/fearless/Common/Configs/ApplicationConfigs.swift +++ b/fearless/Common/Configs/ApplicationConfigs.swift @@ -144,11 +144,10 @@ extension ApplicationConfig: ApplicationConfigProtocol, XcmConfigProtocol { // MARK: - GitHub var chainsSourceUrl: URL { - let isDev = LocalToggleService.shared.chainsListToggle?.storageValue #if F_DEV - return GitHubUrl.url(suffix: "chains/v12/chains_dev.json", branch: .developFree) + return GitHubUrl.url(suffix: "chains/v13/chains_dev.json", branch: .developFree) #else - return GitHubUrl.url(suffix: "chains/v12/chains.json") + return GitHubUrl.url(suffix: "chains/v13/chains.json") #endif } From 1f1cf1de6847240bbda4d15a8fcfabe8f3689924 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Tue, 24 Dec 2024 15:43:04 +0500 Subject: [PATCH 127/156] update package versions --- fearless.xcodeproj/project.pbxproj | 4 ++-- fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index 6ba7b87b4a..522b76bb63 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -20688,8 +20688,8 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/DRadmir/ton-api-swift.git"; requirement = { - branch = main; - kind = branch; + kind = exactVersion; + version = 0.5.0; }; }; FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */ = { diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index a592031621..de3ab84383 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -142,7 +142,7 @@ "location" : "https://github.com/soramitsu/shared-features-spm.git", "state" : { "branch" : "FW-new-ecosystem", - "revision" : "903bb64d35db4ff02ec735f1118c29399c36cbbb" + "revision" : "05bde96eecdf4e8f6f5fa60b2b16c003673d3679" } }, { @@ -276,7 +276,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/DRadmir/ton-api-swift.git", "state" : { - "revision" : "8ddff19a40d3d00503cab7fb9d9eb77459169488" + "revision" : "8ddff19a40d3d00503cab7fb9d9eb77459169488", + "version" : "0.5.0" } }, { From 8db475dce42229b74d9376f3dc56f26b608894a4 Mon Sep 17 00:00:00 2001 From: Radmir Dzhurabaev Date: Wed, 25 Dec 2024 18:27:52 +0500 Subject: [PATCH 128/156] update package resolved --- fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index de3ab84383..37bee8e2d8 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -142,7 +142,7 @@ "location" : "https://github.com/soramitsu/shared-features-spm.git", "state" : { "branch" : "FW-new-ecosystem", - "revision" : "05bde96eecdf4e8f6f5fa60b2b16c003673d3679" + "revision" : "a99482d742e9450c75e6440d80a43ee32908f96c" } }, { From 74b937c5605de2aabcd654d0f8f43de17dcc6be7 Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Thu, 26 Dec 2024 20:54:21 +0700 Subject: [PATCH 129/156] fix transfer initialization fix ton balance fetching --- Podfile.lock | 2 +- .../Services/Balance/TonRemoteBalanceFetching.swift | 2 +- .../Modules/Transfer/Transfer/TonTransferFlowUseCase.swift | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Podfile.lock b/Podfile.lock index 8e1e65320b..f325ec2052 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -99,7 +99,7 @@ DEPENDENCIES: - SwiftyBeaver SPEC REPOS: - https://github.com/CocoaPods/Specs.git: + https://github.com/cocoapods/Specs.git: - Charts - CocoaLumberjack - Cuckoo diff --git a/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift b/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift index bab17d9716..7637d35dc8 100644 --- a/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift +++ b/fearless/ApplicationLayer/Services/Balance/TonRemoteBalanceFetching.swift @@ -123,7 +123,7 @@ actor TonRemoteBalanceFetchingImpl: AccountInfoRemoteService { throw TonRemoteBalanceFetchingError.missingAccount } - let address = try accountId.asTonAddress().toRaw() + let address = try accountId.asTonAddress().toFriendly().toString() let chainAccountInfos = try await getChainAccountInfos( address: address, currency: wallet.selectedCurrency diff --git a/fearless/Modules/Transfer/Transfer/TonTransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/TonTransferFlowUseCase.swift index abe24f6974..2576b15e6d 100644 --- a/fearless/Modules/Transfer/Transfer/TonTransferFlowUseCase.swift +++ b/fearless/Modules/Transfer/Transfer/TonTransferFlowUseCase.swift @@ -69,6 +69,8 @@ final class TonTransferFlowUseCase: TransferFlowUseCase { selectedChainAsset = chainAsset utilityChainAsset = chainAsset.chain.utilityChainAssets().first + provideInputViewModel?() + provideAssetViewModel?() provideRecipientViewModel?() provideNetworkViewModel?() @@ -209,7 +211,6 @@ final class TonTransferFlowUseCase: TransferFlowUseCase { } async let balancesTask = try await interactor.fetchAccountInfos(for: chainAsset) - let chainAssetBalance = await balance( for: chainAsset, accountId: accountId, From 2c6015fae349ca6d834c8b5e21b77bf44d8cee53 Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Thu, 26 Dec 2024 23:02:04 +0700 Subject: [PATCH 130/156] ton api key local --- fearless.xcodeproj/project.pbxproj | 6 +++--- .../Common/Services/ChainRegistry/ChainRegistry.swift | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index 522b76bb63..9158ad3da2 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -20412,7 +20412,7 @@ ); MARKETING_VERSION = 4.0.1; OTHER_SWIFT_FLAGS = "$(inherited)"; - PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless; + PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless5; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; @@ -20443,7 +20443,7 @@ "$(FRAMEWORK_SEARCH_PATHS)", ); MARKETING_VERSION = 4.0.1; - PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless; + PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless5; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; @@ -20586,7 +20586,7 @@ ); MARKETING_VERSION = 4.0.1; OTHER_SWIFT_FLAGS = "$(inherited)"; - PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless; + PRODUCT_BUNDLE_IDENTIFIER = jp.co.soramitsu.fearless5; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; diff --git a/fearless/Common/Services/ChainRegistry/ChainRegistry.swift b/fearless/Common/Services/ChainRegistry/ChainRegistry.swift index 76ad3e1123..bd92784f3b 100644 --- a/fearless/Common/Services/ChainRegistry/ChainRegistry.swift +++ b/fearless/Common/Services/ChainRegistry/ChainRegistry.swift @@ -277,11 +277,11 @@ final class ChainRegistry { chains = chains.filter { $0.chainId != chain.chainId } chains.append(chain) - #if DEBUG +// #if DEBUG let token = TonNodeApiKeyDebug.tonApiKey - #else - let token = TonNodeApiKey.tonApiKey - #endif +// #else +// let token = TonNodeApiKey.tonApiKey +// #endif guard let tonBridgeURL = chain.tonBridgeUrl else { logger?.error("Missing tonBridgeURL") return From f3628e5aa1fa7cd5097ba7f789e92bbe83cac03c Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Fri, 27 Dec 2024 18:08:13 +0700 Subject: [PATCH 131/156] bug fixes --- fearless.xcodeproj/project.pbxproj | 2 + .../xcshareddata/swiftpm/Package.resolved | 21 ++++--- .../Error/ErrorPresentable+AlertText.swift | 5 ++ .../UIKit/UIAlertViewController+Account.swift | 3 +- .../Wallet/AssetTransactionData+Ton.swift | 5 +- fearless/Common/Model/AmountInputResult.swift | 11 +++- .../BlockExplorer/History/TonModels.swift | 2 +- .../Transfer/BokoloTransferFlowUseCase.swift | 20 +++++-- .../EthereumTransferFlowUseCase.swift | 7 ++- .../Transfer/SoraQrTransferFlowUseCase.swift | 7 ++- .../SubstrateTransferFlowUseCase.swift | 7 ++- .../Transfer/TonTransferFlowUseCase.swift | 37 +++++++++--- .../Transfer/TransferFlowUseCase.swift | 60 +++++++++++++++---- .../Transfer/Transfer/TransferPresenter.swift | 26 ++++++-- 14 files changed, 165 insertions(+), 48 deletions(-) diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index 9158ad3da2..46d9f57605 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -5717,6 +5717,7 @@ FA5137B529AC76EB00560EBA /* GiantsquidHistoryOperationFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GiantsquidHistoryOperationFactory.swift; sourceTree = ""; }; FA5137B629AC76EB00560EBA /* SubsquidHistoryOperationFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SubsquidHistoryOperationFactory.swift; sourceTree = ""; }; FA5137B729AC76EB00560EBA /* HistoryOperationFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HistoryOperationFactory.swift; sourceTree = ""; }; + FA52A7BE2D1E8B1A0054D0C1 /* shared-features-spm */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = "shared-features-spm"; path = "../shared-features-spm"; sourceTree = SOURCE_ROOT; }; FA53D88F2C084ECA00173ADB /* LiquidityPoolSupplyViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyViewModel.swift; sourceTree = ""; }; FA53D8912C08510000173ADB /* LiquidityPoolSupplyViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyViewModelFactory.swift; sourceTree = ""; }; FA584C772AB2BCD500F6F020 /* UniversalMediaView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UniversalMediaView.swift; sourceTree = ""; }; @@ -9921,6 +9922,7 @@ 8490139F24A80984008F705E = { isa = PBXGroup; children = ( + FA52A7BE2D1E8B1A0054D0C1 /* shared-features-spm */, 849013AA24A80984008F705E /* fearless */, 849013C124A80986008F705E /* fearlessTests */, 8438E1D024BFAAD2001BDB13 /* fearlessIntegrationTests */, diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 37bee8e2d8..754a02843e 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,5 +1,4 @@ { - "originHash" : "db3e9f7067135f4497b6059ac444951778a2f8ca758335577305759626739473", "pins" : [ { "identity" : "appauth-ios", @@ -136,15 +135,6 @@ "version" : "0.1.7" } }, - { - "identity" : "shared-features-spm", - "kind" : "remoteSourceControl", - "location" : "https://github.com/soramitsu/shared-features-spm.git", - "state" : { - "branch" : "FW-new-ecosystem", - "revision" : "a99482d742e9450c75e6440d80a43ee32908f96c" - } - }, { "identity" : "swift-atomics", "kind" : "remoteSourceControl", @@ -244,6 +234,15 @@ "version" : "1.4.0" } }, + { + "identity" : "swiftformat", + "kind" : "remoteSourceControl", + "location" : "https://github.com/nicklockwood/SwiftFormat", + "state" : { + "revision" : "4e92b81311f528cfdca8015d629c650d0aff94ce", + "version" : "0.55.4" + } + }, { "identity" : "swiftimagereadwrite", "kind" : "remoteSourceControl", @@ -335,5 +334,5 @@ } } ], - "version" : 3 + "version" : 2 } diff --git a/fearless/Common/Extension/Error/ErrorPresentable+AlertText.swift b/fearless/Common/Extension/Error/ErrorPresentable+AlertText.swift index 0cbdc18724..2ebf125b87 100644 --- a/fearless/Common/Extension/Error/ErrorPresentable+AlertText.swift +++ b/fearless/Common/Extension/Error/ErrorPresentable+AlertText.swift @@ -1,5 +1,6 @@ import Foundation import RobinHood +import TonAPI struct ErrorContent { let title: String @@ -30,6 +31,10 @@ extension ErrorPresentable where Self: SheetAlertPresentable { return ErrorContent(title: title, message: message) } + + if let stringConvertibleError = error as? CustomStringConvertible { + return ErrorContent(title: "", message: stringConvertibleError.description) + } return nil }() diff --git a/fearless/Common/Extension/UIKit/UIAlertViewController+Account.swift b/fearless/Common/Extension/UIKit/UIAlertViewController+Account.swift index 70bba9117d..543bf6ea5d 100644 --- a/fearless/Common/Extension/UIKit/UIAlertViewController+Account.swift +++ b/fearless/Common/Extension/UIKit/UIAlertViewController+Account.swift @@ -33,8 +33,9 @@ extension UIAlertController { alertController.addAction(copy) + let type: ChainModel.SubscanType = chain.ecosystem == .ton ? .tonAccount : .address chain.externalApi?.explorers?.forEach { explorer in - guard let url = explorer.explorerUrl(for: address, type: .address) else { + guard let url = explorer.explorerUrl(for: address, type: type) else { return } let title = explorer.type.actionTitle().value(for: locale) diff --git a/fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift b/fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift index 2b71eb7d79..68b8bcf8f7 100644 --- a/fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift +++ b/fearless/Common/Extension/Wallet/AssetTransactionData+Ton.swift @@ -13,8 +13,9 @@ extension AssetTransactionData { asset: AssetModel, filters: [WalletTransactionHistoryFilter] ) -> AssetTransactionData? { - let status: AssetTransactionStatus = event.isInProgress ? .pending : .commited - + let commitedStatus: AssetTransactionStatus = action.status == .ok ? .commited : .rejected + let status: AssetTransactionStatus = event.isInProgress ? .pending : commitedStatus + var fees: [AssetTransactionFee] = [] if let feeValue = BigUInt(string: String(abs(event.fee))), let feeValue = Decimal.fromSubstrateAmount(feeValue, precision: Int16(asset.precision)) { diff --git a/fearless/Common/Model/AmountInputResult.swift b/fearless/Common/Model/AmountInputResult.swift index 326a424bac..19be166410 100644 --- a/fearless/Common/Model/AmountInputResult.swift +++ b/fearless/Common/Model/AmountInputResult.swift @@ -1,6 +1,6 @@ import Foundation -enum AmountInputResult { +enum AmountInputResult: Equatable { case rate(_ value: Decimal) case absolute(_ value: Decimal) @@ -12,4 +12,13 @@ enum AmountInputResult { return value } } + + var needsUpdateInputAfterChange: Bool { + switch self { + case .rate: + return true + case .absolute: + return false + } + } } diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/TonModels.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/TonModels.swift index 2e3d6bee89..e0a1a041ec 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/TonModels.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/TonModels.swift @@ -197,7 +197,7 @@ public struct AccountEventAction: Codable { } } -enum AccountEventStatus: Codable { +enum AccountEventStatus: Codable, Equatable { case ok case failed case unknown(String) diff --git a/fearless/Modules/Transfer/Transfer/BokoloTransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/BokoloTransferFlowUseCase.swift index 1cadac0507..19aada4628 100644 --- a/fearless/Modules/Transfer/Transfer/BokoloTransferFlowUseCase.swift +++ b/fearless/Modules/Transfer/Transfer/BokoloTransferFlowUseCase.swift @@ -50,7 +50,8 @@ final class BokoloTransferFlowUseCase: TransferFlowUseCase { var provideNetworkViewModel: (() -> Void)? var provideTipViewModel: (() -> Void)? var provideFeeViewModel: (() -> Void)? - + var onFeeEstimationFailure: ((Error) -> Void)? + private var bokoloCashId: Data? private var bokoloSwapValues: SwapValues? @@ -219,6 +220,10 @@ final class BokoloTransferFlowUseCase: TransferFlowUseCase { let transfer = TransferType.xorless(xorless) return transfer } + + func checkAccountIsActive() async -> Bool { + true + } // MARK: - Private methods @@ -235,10 +240,15 @@ final class BokoloTransferFlowUseCase: TransferFlowUseCase { transfer: transfer, chainAsset: selectedChainAsset ) - for try await fee in stream { - let precision = Int16(selectedChainAsset.asset.precision) - self.fee = Decimal.fromSubstrateAmount(fee, precision: precision) - try await self.checkXorFeePaymentPossibles() + + do { + for try await fee in stream { + let precision = Int16(selectedChainAsset.asset.precision) + self.fee = Decimal.fromSubstrateAmount(fee, precision: precision) + try await self.checkXorFeePaymentPossibles() + } + } catch { + onFeeEstimationFailure?(error) } } } diff --git a/fearless/Modules/Transfer/Transfer/EthereumTransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/EthereumTransferFlowUseCase.swift index 5b2f73e5f9..52457f6b9b 100644 --- a/fearless/Modules/Transfer/Transfer/EthereumTransferFlowUseCase.swift +++ b/fearless/Modules/Transfer/Transfer/EthereumTransferFlowUseCase.swift @@ -47,7 +47,8 @@ final class EthereumTransferFlowUseCase: TransferFlowUseCase { var provideNetworkViewModel: (() -> Void)? var provideTipViewModel: (() -> Void)? var provideFeeViewModel: (() -> Void)? - + var onFeeEstimationFailure: ((Error) -> Void)? + init( wallet: MetaAccountModel, dataValidatingFactory: SendDataValidatingFactory, @@ -135,6 +136,10 @@ final class EthereumTransferFlowUseCase: TransferFlowUseCase { let transfer = TransferType.ethereum(ethereumTransfer) return transfer } + + func checkAccountIsActive() async -> Bool { + true + } // MARK: - Private methods diff --git a/fearless/Modules/Transfer/Transfer/SoraQrTransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/SoraQrTransferFlowUseCase.swift index 054681e596..5a72a8a09d 100644 --- a/fearless/Modules/Transfer/Transfer/SoraQrTransferFlowUseCase.swift +++ b/fearless/Modules/Transfer/Transfer/SoraQrTransferFlowUseCase.swift @@ -48,7 +48,8 @@ final class SoraQrTransferFlowUseCase: TransferFlowUseCase { var provideNetworkViewModel: (() -> Void)? var provideTipViewModel: (() -> Void)? var provideFeeViewModel: (() -> Void)? - + var onFeeEstimationFailure: ((Error) -> Void)? + init( wallet: MetaAccountModel, dataValidatingFactory: SendDataValidatingFactory, @@ -138,6 +139,10 @@ final class SoraQrTransferFlowUseCase: TransferFlowUseCase { buildSubstrateTransfer() } + func checkAccountIsActive() async -> Bool { + true + } + // MARK: - Private methods private func calcFee() { diff --git a/fearless/Modules/Transfer/Transfer/SubstrateTransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/SubstrateTransferFlowUseCase.swift index 59b7e8b841..e049f10009 100644 --- a/fearless/Modules/Transfer/Transfer/SubstrateTransferFlowUseCase.swift +++ b/fearless/Modules/Transfer/Transfer/SubstrateTransferFlowUseCase.swift @@ -48,7 +48,8 @@ final class SubstrateTransferFlowUseCase: TransferFlowUseCase { var provideNetworkViewModel: (() -> Void)? var provideTipViewModel: (() -> Void)? var provideFeeViewModel: (() -> Void)? - + var onFeeEstimationFailure: ((Error) -> Void)? + init( wallet: MetaAccountModel, dataValidatingFactory: SendDataValidatingFactory, @@ -151,6 +152,10 @@ final class SubstrateTransferFlowUseCase: TransferFlowUseCase { func getTransfer() -> TransferType? { buildSubstrateTransfer() } + + func checkAccountIsActive() async -> Bool { + true + } // MARK: - Private methods diff --git a/fearless/Modules/Transfer/Transfer/TonTransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/TonTransferFlowUseCase.swift index 2576b15e6d..9865a60a09 100644 --- a/fearless/Modules/Transfer/Transfer/TonTransferFlowUseCase.swift +++ b/fearless/Modules/Transfer/Transfer/TonTransferFlowUseCase.swift @@ -48,7 +48,8 @@ final class TonTransferFlowUseCase: TransferFlowUseCase { var provideNetworkViewModel: (() -> Void)? var provideTipViewModel: (() -> Void)? var provideFeeViewModel: (() -> Void)? - + var onFeeEstimationFailure: ((Error) -> Void)? + init( wallet: MetaAccountModel, dataValidatingFactory: SendDataValidatingFactory, @@ -88,7 +89,8 @@ final class TonTransferFlowUseCase: TransferFlowUseCase { case .all: guard let selectedChainAsset, - let availableInputBalance + let availableBalance, + let sendAmount = amount() else { throw TransferFlowUseCaseError.getValidatorsError } @@ -97,8 +99,7 @@ final class TonTransferFlowUseCase: TransferFlowUseCase { ? .utility(balance: utilityBalance) : .orml(balance: availableBalance, utilityBalance: utilityBalance) - let sendAmount = inputResult?.absoluteValue(from: availableInputBalance) - + let feeAndTip: Decimal = [fee, tip].compactMap { $0 }.reduce(0.0, +) let validators = [ dataValidatingFactory.has( fee: fee, @@ -111,7 +112,7 @@ final class TonTransferFlowUseCase: TransferFlowUseCase { }, dataValidatingFactory.canPayFeeAndAmount( balanceType: balanceType, - feeAndTip: .zero, + feeAndTip: feeAndTip, sendAmount: sendAmount, locale: locale ) @@ -160,6 +161,10 @@ final class TonTransferFlowUseCase: TransferFlowUseCase { let transfer = TransferType.ton(tonTransfer) return transfer } + + func checkAccountIsActive() async -> Bool { + true + } // MARK: - Private methods @@ -167,10 +172,18 @@ final class TonTransferFlowUseCase: TransferFlowUseCase { guard let transfer = getTransfer(), let selectedChainAsset, - let utilityChainAsset + let utilityChainAsset, + let amount = amount(), + amount > 0 else { return } + + if let balance = utilityBalance, balance < 0.005 { + onFeeEstimationFailure?(ConvenienceError(error: "You don't have enough tokens to cover the transaction fee and complete the transfer.")) + return + + } provideFeeViewModel?() Task { [weak self] in guard let self else { return } @@ -179,13 +192,23 @@ final class TonTransferFlowUseCase: TransferFlowUseCase { chainAsset: selectedChainAsset ) let precision = Int16(utilityChainAsset.asset.precision) + let shouldUpdateInputViewModel = inputResult?.needsUpdateInputAfterChange == true + do { for try await fee in stream { - self.fee = Decimal.fromSubstrateAmount(fee, precision: precision) + self.fee = (Decimal.fromSubstrateAmount(fee, precision: precision)).flatMap { + return $0 * 1.1 + } + self.provideFeeViewModel?() + + if shouldUpdateInputViewModel { + self.provideInputViewModel?() + } } } catch { logger.customError(error) + onFeeEstimationFailure?(error) } } } diff --git a/fearless/Modules/Transfer/Transfer/TransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/TransferFlowUseCase.swift index b890daf10d..fe7bda3193 100644 --- a/fearless/Modules/Transfer/Transfer/TransferFlowUseCase.swift +++ b/fearless/Modules/Transfer/Transfer/TransferFlowUseCase.swift @@ -54,6 +54,7 @@ protocol TransferFlowUseCase: AnyObject { var provideInputViewModel: (() -> Void)? { get set } var provideTipViewModel: (() -> Void)? { get set } var provideFeeViewModel: (() -> Void)? { get set } + var onFeeEstimationFailure: ((Error) -> Void)? { get set } func handle(initialData: SendFlowInitialData) async throws func reset() async @@ -64,14 +65,33 @@ protocol TransferFlowUseCase: AnyObject { locale: Locale ) throws -> [DataValidating] func getTransfer() -> TransferType? + func checkAccountIsActive() async -> Bool } extension TransferFlowUseCase { func amount() -> Decimal? { - guard let availableInputBalance else { - return nil + let sendAvailableBalance = availableBalance.flatMap { availableInputBalance in + guard selectedChainAsset?.isUtility == true else { + return availableInputBalance + } + + var balance = availableInputBalance + if let fee = fee { + balance -= fee + } + if let tip = tip { + balance -= tip + } + + return balance } - let amount = inputResult?.absoluteValue(from: availableInputBalance) + + + guard let sendAvailableBalance else { + return inputResult?.absoluteValue(from: .zero) + } + + let amount = inputResult?.absoluteValue(from: sendAvailableBalance) return amount } @@ -144,22 +164,36 @@ extension TransferFlowUseCase { guard let selectedChainAsset, let transfer, - let utilityChainAsset + let utilityChainAsset, + let amount = amount(), + amount > 0.0 else { return } + let shouldUpdateInputViewModel = inputResult?.needsUpdateInputAfterChange == true provideFeeViewModel?() + Task { [weak self] in guard let self else { return } - let stream = await self.interactor.estimateFee( - transfer: transfer, - chainAsset: selectedChainAsset - ) - for try await fee in stream { - let precision = Int16(utilityChainAsset.asset.precision) - self.fee = Decimal.fromSubstrateAmount(fee, precision: precision) - self.provideFeeViewModel?() - await calcAvailableInputBalance() + do { + let stream = await self.interactor.estimateFee( + transfer: transfer, + chainAsset: selectedChainAsset + ) + for try await fee in stream { + let precision = Int16(utilityChainAsset.asset.precision) + self.fee = Decimal.fromSubstrateAmount(fee, precision: precision).flatMap { + $0 * 1.1 + } + self.provideFeeViewModel?() + + if shouldUpdateInputViewModel { + self.provideInputViewModel?() + } + await calcAvailableInputBalance() + } + } catch { + onFeeEstimationFailure?(error) } } } diff --git a/fearless/Modules/Transfer/Transfer/TransferPresenter.swift b/fearless/Modules/Transfer/Transfer/TransferPresenter.swift index 6b2d13dc08..0c04f4df7c 100644 --- a/fearless/Modules/Transfer/Transfer/TransferPresenter.swift +++ b/fearless/Modules/Transfer/Transfer/TransferPresenter.swift @@ -158,8 +158,7 @@ final class TransferPresenter { return } - let availableInputBalance = currentFlowUseCase.availableInputBalance ?? .zero - let inputAmount = currentFlowUseCase.inputResult?.absoluteValue(from: availableInputBalance) + let inputAmount = currentFlowUseCase.amount() let inputViewModel = viewModelFactory.createBalanceInputViewModel( inputAmount: inputAmount, @@ -434,6 +433,15 @@ final class TransferPresenter { await self?.provideFeeViewModel() } } + currentFlowUseCase?.onFeeEstimationFailure = { [weak self] error in + guard let view = self?.view else { + return + } + + DispatchQueue.main.async { + self?.router.present(error: error, from: self?.view, locale: self?.selectedLocale) + } + } } private func validateInputData() async { @@ -726,7 +734,12 @@ extension TransferPresenter: TransferViewOutput { guard let transfer = currentFlowUseCase?.getTransfer() else { return } - currentFlowUseCase?.refreshFee(for: transfer) + + do { + try currentFlowUseCase?.refreshFee(for: transfer) + } catch { + router.present(error: error, from: view, locale: selectedLocale) + } } func updateAmount(_ newValue: Decimal) { @@ -753,7 +766,12 @@ extension TransferPresenter: TransferViewOutput { guard let transfer = currentFlowUseCase?.getTransfer() else { return } - currentFlowUseCase?.refreshFee(for: transfer) + + do { + try currentFlowUseCase?.refreshFee(for: transfer) + } catch { + router.present(error: error, from: view, locale: selectedLocale) + } } func didSwitchSendAll(_ enabled: Bool) { From fcb8f2399cce93452d551e5107112749f97d1485 Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Sat, 28 Dec 2024 16:41:47 +0700 Subject: [PATCH 132/156] migration fix, sora history fix --- fearless.xcodeproj/project.pbxproj | 8 +- ...tTransactionData+SoraSubsquidHistory.swift | 2 +- fearless/Common/Services/PricesService.swift | 14 +- .../xcmapping.xml | 855 ------------------ .../SubstrateV8.xcmappingmodel/xcmapping.xml | 853 +++++++++++++++++ .../contents | 4 +- .../SoraSubqueryHistoryOperationFactory.swift | 6 +- 7 files changed, 871 insertions(+), 871 deletions(-) delete mode 100644 fearless/Common/Storage/MigrationMappings/SubstrateV7toV8.xcmappingmodel/xcmapping.xml create mode 100644 fearless/Common/Storage/MigrationMappings/SubstrateV8.xcmappingmodel/xcmapping.xml diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index 46d9f57605..4a17d75764 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -2199,7 +2199,6 @@ FA2E9BBD27A293DA0023FAD2 /* FilterSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2E9BBC27A293DA0023FAD2 /* FilterSet.swift */; }; FA2E9BBF27A297CE0023FAD2 /* FilterSectionViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2E9BBE27A297CE0023FAD2 /* FilterSectionViewModel.swift */; }; FA2E9BC127A2A1000023FAD2 /* FilterSectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2E9BC027A2A1000023FAD2 /* FilterSectionHeaderView.swift */; }; - FA2F50042D01A81A00ED1441 /* SubstrateV7toV8.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = FA2F50032D01A81A00ED1441 /* SubstrateV7toV8.xcmappingmodel */; }; FA2FC7C928B3805400CC0A42 /* JoinPoolCall.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2FC7C628B3805400CC0A42 /* JoinPoolCall.swift */; }; FA2FC7CA28B3805400CC0A42 /* SetMetadataCall.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2FC7C728B3805400CC0A42 /* SetMetadataCall.swift */; }; FA2FC7CB28B3805400CC0A42 /* CreatePoolCall.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2FC7C828B3805400CC0A42 /* CreatePoolCall.swift */; }; @@ -3105,6 +3104,7 @@ FAEDC1392820E62F00E6582C /* StakingAmountRelaychainViewModelState.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAEDC1382820E62F00E6582C /* StakingAmountRelaychainViewModelState.swift */; }; FAEDC13D2820F59100E6582C /* StakingAmountViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAEDC13C2820F59100E6582C /* StakingAmountViewModel.swift */; }; FAEDC13F2821264E00E6582C /* StakingAmountRelaychainViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAEDC13E2821264E00E6582C /* StakingAmountRelaychainViewModelFactory.swift */; }; + FAF487472D1FD4F0009A402C /* SubstrateV8.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = FAF487462D1FD4F0009A402C /* SubstrateV8.xcmappingmodel */; }; FAF5E9CD27E46D3E005A3448 /* GithubJSONDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF5E9CA27E46D3E005A3448 /* GithubJSONDecoder.swift */; }; FAF5E9CE27E46D3E005A3448 /* URLConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF5E9CC27E46D3E005A3448 /* URLConstants.swift */; }; FAF5E9D127E46D6A005A3448 /* AppVersionObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAF5E9D027E46D6A005A3448 /* AppVersionObserver.swift */; }; @@ -5524,7 +5524,6 @@ FA2E9BBC27A293DA0023FAD2 /* FilterSet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilterSet.swift; sourceTree = ""; }; FA2E9BBE27A297CE0023FAD2 /* FilterSectionViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilterSectionViewModel.swift; sourceTree = ""; }; FA2E9BC027A2A1000023FAD2 /* FilterSectionHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilterSectionHeaderView.swift; sourceTree = ""; }; - FA2F50032D01A81A00ED1441 /* SubstrateV7toV8.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = SubstrateV7toV8.xcmappingmodel; sourceTree = ""; }; FA2FC7C628B3805400CC0A42 /* JoinPoolCall.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JoinPoolCall.swift; sourceTree = ""; }; FA2FC7C728B3805400CC0A42 /* SetMetadataCall.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SetMetadataCall.swift; sourceTree = ""; }; FA2FC7C828B3805400CC0A42 /* CreatePoolCall.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CreatePoolCall.swift; sourceTree = ""; }; @@ -6417,6 +6416,7 @@ FAEDC1382820E62F00E6582C /* StakingAmountRelaychainViewModelState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingAmountRelaychainViewModelState.swift; sourceTree = ""; }; FAEDC13C2820F59100E6582C /* StakingAmountViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingAmountViewModel.swift; sourceTree = ""; }; FAEDC13E2821264E00E6582C /* StakingAmountRelaychainViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingAmountRelaychainViewModelFactory.swift; sourceTree = ""; }; + FAF487462D1FD4F0009A402C /* SubstrateV8.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = SubstrateV8.xcmappingmodel; sourceTree = ""; }; FAF5E9CA27E46D3E005A3448 /* GithubJSONDecoder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GithubJSONDecoder.swift; sourceTree = ""; }; FAF5E9CC27E46D3E005A3448 /* URLConstants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLConstants.swift; sourceTree = ""; }; FAF5E9D027E46D6A005A3448 /* AppVersionObserver.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppVersionObserver.swift; sourceTree = ""; }; @@ -11127,13 +11127,13 @@ 84CEAAEB26D6D91A0021B881 /* MigrationMappings */ = { isa = PBXGroup; children = ( - FA2F50032D01A81A00ED1441 /* SubstrateV7toV8.xcmappingmodel */, FABA161C2B0C94C9001AF2F0 /* UserDataModelV10toV11.xcmappingmodel */, 846CA7712707A3060011124C /* SingleToMultiasset.xcmappingmodel */, FA9278A727C382C600FF7B5B /* MultiassetV2.xcmappingmodel */, FA69A94627CE3476000352A6 /* SubstrateV2Mapping.xcmappingmodel */, FA28A9B129D2E451005AA42E /* MultiassetV9.xcmappingmodel */, 07EC555A2CD8A3600074132E /* MultiAssetV12.xcmappingmodel */, + FAF487462D1FD4F0009A402C /* SubstrateV8.xcmappingmodel */, ); path = MigrationMappings; sourceTree = ""; @@ -17407,6 +17407,7 @@ FA93A3032834E4620021330F /* ValidatorInfoParachainStrategy.swift in Sources */, AEAC690426EB891900346599 /* Logger+FearlessUtils.swift in Sources */, FACD429E2A5BE811009975AA /* StorageMigrator+Sync.swift in Sources */, + FAF487472D1FD4F0009A402C /* SubstrateV8.xcmappingmodel in Sources */, FA93A2D928323CC40021330F /* CustomValidatorListParachainViewModelFactory.swift in Sources */, F4C086B826D10E3400716AEC /* UIRefreshControl+ProgramaticallyBeginRefresh.swift in Sources */, FAFFAE3D29AC84480074AF1F /* SymbolView.swift in Sources */, @@ -18505,7 +18506,6 @@ FAD4292E2A865680001D6A16 /* BackupWalletImportedProtocols.swift in Sources */, 84BAB6102642C286007782D0 /* SelectedRebondVariant.swift in Sources */, 84F5107C263C0C11005D15AE /* AnyProviderCleaning.swift in Sources */, - FA2F50042D01A81A00ED1441 /* SubstrateV7toV8.xcmappingmodel in Sources */, FAA0134628DA12CD000A5230 /* StakingUnbondSetupPoolViewModelState.swift in Sources */, 84BEE22325646AC000D05EB3 /* SelectedUsernameChanged.swift in Sources */, 8467FD4124ED3C72005D486C /* AlignableContentControl.swift in Sources */, diff --git a/fearless/Common/Extension/Wallet/AssetTransactionData+SoraSubsquidHistory.swift b/fearless/Common/Extension/Wallet/AssetTransactionData+SoraSubsquidHistory.swift index ca503313a9..5d7a5c8b40 100644 --- a/fearless/Common/Extension/Wallet/AssetTransactionData+SoraSubsquidHistory.swift +++ b/fearless/Common/Extension/Wallet/AssetTransactionData+SoraSubsquidHistory.swift @@ -26,7 +26,7 @@ extension AssetTransactionData { context: nil ) - switch (item.module, item.method) { + switch (item.module?.lowercased(), item.method?.lowercased()) { case ("staking", "rewarded"): return createRewardTransaction( from: item, diff --git a/fearless/Common/Services/PricesService.swift b/fearless/Common/Services/PricesService.swift index 6986ec4c17..05be1ec182 100644 --- a/fearless/Common/Services/PricesService.swift +++ b/fearless/Common/Services/PricesService.swift @@ -36,6 +36,13 @@ final class PricesService: PricesServiceProtocol { func setup() { eventCenter.add(observer: self) + } + + func updatePrices() { + pricesProvider?.refresh() + } + + private func subscribe() { let walletsOperation = walletRepository.fetchAllOperation(with: RepositoryFetchOptions()) let chainsOperation = chainRepository.fetchAllOperation(with: RepositoryFetchOptions()) let subscribeOperation = ClosureOperation { [weak self] in @@ -51,10 +58,6 @@ final class PricesService: PricesServiceProtocol { subscribeOperation.addDependency(chainsOperation) operationQueue.addOperations([subscribeOperation, walletsOperation, chainsOperation], waitUntilFinished: false) } - - func updatePrices() { - pricesProvider?.refresh() - } } extension PricesService: PriceLocalSubscriptionHandler { @@ -75,8 +78,7 @@ extension PricesService: PriceLocalSubscriptionHandler { extension PricesService: EventVisitorProtocol { func processChainSyncDidComplete(event: ChainSyncDidComplete) { - let updatedChainAssets = event.newOrUpdatedChains.map(\.chainAssets).reduce([], +).uniq(predicate: { $0.chainAssetId }) - observePrices(for: updatedChainAssets, currencies: currencies) + subscribe() } func processChainsUpdated(event: ChainsUpdatedEvent) { diff --git a/fearless/Common/Storage/MigrationMappings/SubstrateV7toV8.xcmappingmodel/xcmapping.xml b/fearless/Common/Storage/MigrationMappings/SubstrateV7toV8.xcmappingmodel/xcmapping.xml deleted file mode 100644 index 7606e3b6d7..0000000000 --- a/fearless/Common/Storage/MigrationMappings/SubstrateV7toV8.xcmappingmodel/xcmapping.xml +++ /dev/null @@ -1,855 +0,0 @@ - - - - - - 134481920 - 2BD542A3-0359-40E5-840A-4C2BA58F46E0 - 264 - - - - NSPersistenceFrameworkVersion - 1344 - NSStoreModelVersionChecksumKey - bMpud663vz0bXQE24C6Rh4MvJ5jVnzsD2sI3njZkKbc= - NSStoreModelVersionHashes - - XDDevAttributeMapping - - 0plcXXRN7XHKl5CcF+fwriFmUpON3ZtcI/AfK748aWc= - - XDDevEntityMapping - - qeN1Ym3TkWN1G6dU9RfX6Kd2ccEvcDVWHpd3LpLgboI= - - XDDevMappingModel - - EqtMzvRnVZWkXwBHu4VeVGy8UyoOe+bi67KC79kphlQ= - - XDDevPropertyMapping - - XN33V44TTGY4JETlMoOB5yyTKxB+u4slvDIinv0rtGA= - - XDDevRelationshipMapping - - akYY9LhehVA/mCb4ATLWuI9XGLcjpm14wWL1oEBtIcs= - - - NSStoreModelVersionHashesDigest - +Hmc2uYZK6og+Pvx5GUJ7oW75UG4V/ksQanTjfTKUnxyGWJRMtB5tIRgVwGsrd7lz/QR57++wbvWsr6nxwyS0A== - NSStoreModelVersionHashesVersion - 3 - NSStoreModelVersionIdentifiers - - - - - - - - - crowdloansApiType - - - - ecosystem - - - - icon - - - - isTestnet - - - - options - - - - pricingApiUrl - - - - types - - - - 1 - explorers - - - - 1 - selectedNode - - - - destWeightIsPrimitive - - - - 1 - availableDestinations - - - - controller - - - - type - - - - call - - - - moduleName - - - - timestamp - - - - icon - - - - poster - - - - coingeckoPriceId - - - - priceId - - - - minAmount - - - - peerName - - - - 1 - priceData - - - - name - - - - 1 - chain - - - - iconUrl - - - - source - - - - 1 - assets - - - - currencyId - - - - chainId - - - - bridgeParachainId - - - - existentialDeposit - - - - id - - - - resolver - - - - txVersion - - - - icon - - - - Undefined - 21 - CDTonConnectedApp - 1 - - - - - - CDXcmAvailableAsset - Undefined - 9 - CDXcmAvailableAsset - 1 - - - - - - CDPolkaswapRemoteSettings - Undefined - 17 - CDPolkaswapRemoteSettings - 1 - - - - - - CDPriceProvider - Undefined - 4 - CDPriceProvider - 1 - - - - - - CDXcmAvailableDestination - Undefined - 13 - CDXcmAvailableDestination - 1 - - - - - - Undefined - 6 - CDTonDapp - 1 - - - - - - hasCrowdloans - - - - identityChain - - - - isTipRequired - - - - paraId - - - - rank - - - - typesOverrideCommon - - - - 1 - customNodes - - - - xcmVersion - - - - stash - - - - 1 - asset - - - - callName - - - - receiver - - - - txIndex - - - - identifier - - - - url - - - - currencyId - - - - 1 - asset - - - - symbol - - - - targetAddress - - - - chainId - - - - name - - - - name - - - - identifier - - - - apiKeyName - - - - 1 - priceProvider - - - - privateKey - - - - types - - - - publicKey - - - - isUtility - - - - assetId - - - - metadata - - - - version - - - - url - - - - subtype - - - - walletId - - - - Undefined - 8 - CDPriceData - 1 - - - - - - fearless.AssetSubstrateV8MigrationPolicy - CDAsset - Undefined - 16 - CDAsset - 1 - - - - - - CDStashItem - Undefined - 3 - CDStashItem - 1 - - - - - - CDScamInfo - Undefined - 12 - CDScamInfo - 1 - - - - - - CDContact - Undefined - 20 - CDContact - 1 - - - - - - crowdloansApiUrl - - - - historyApiType - - - - isEthereumBased - - - - minimalAppVersion - - - - parentId - - - - stakingApiType - - - - 1 - nodes - - - - 1 - xcmConfig - - - - 1 - availableAssets - - - - 1 - chain - - - - id - - - - fee - - - - sender - - - - appDescription - - - - isConnected - - - - data - - - - fiatDayByChange - - - - identifier - - - - appUrl - - - - address - - - - availableSources - - - - clientId - - - - 1 - chain - - - - forceSmartIds - - - - xstusdId - - - - code - - - - 1 - chain - - - - type - - - - type - - - - precision - - - - priceId - - - - publicKey - - - - name - - - - fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v7.xcdatamodel - YnBsaXN0MDDUAAEAAgADAAQABQAGAAcAClgkdmVyc2lvblkkYXJjaGl2ZXJUJHRvcFgkb2JqZWN0 -cxIAAYagXxAPTlNLZXllZEFyY2hpdmVy0QAIAAlUcm9vdIABrxEMzgALAAwAGQA1ADYANwBhAGIAYwBkAGUAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAcgBzAI4AjwCQAJYAlwCjALkAugC7ALwAvQC+AL8AwADBAMIA2wDeAOUA6wD6AQkBDAEbASoBLQCNAT0BTAFQAVQBYwFpAWoBcgGBAYIBiwGXAZgBmQGaAZsBsAGxAbkBugG7AccB2wHcAd0B3gHfAeAB4QHiAeMB8gIBAhACFAIjAjICMwJCAlECYAJsAn4CfwKAAoECggKDAoQChQAvApQCowKkArMCwgLcAt0C4wLvAwUDFAMXAyYDNQM5Az0DPgNNA1wDXwNuA30DgQOQA58D4wPkA+UD5gPnA+gD6QPqA+sD7APtA+4D7wPwA/ED8gPzA/QD9QP2A/cD+AP5A/oD+wP8A/0D/gP/BAAEAQQWBBcEHwQgBCwEQARPBF4EbQRxBIAEjwSeBK0EvATIBNoE2wTcBN0E3gTfBOAE4QTwBP8FDgUdBR4FLQU8BUsFUwVoBWkFcQV9BZEFoAWvBb4FwgXRBeAF7wX+Bg0GGQYrBjoGSQZYBmcGdgaFBpQGnAaxBrIGugbGBtoG6Qb4BwcHCwcaBykHOAdHB1YHYgd0B4MHhAeTB6IHsQeyB8EH0AffB/QH9Qf9CAkIHQgsCDsISghOCF0IbAh7CIoImQilCLcIxgjVCOQI8wkCCREJIAk1CTYJPglKCV4JbQl8CYsJjwmeCa0JvAnLCdoJ5gn4CgcKFgolCjQKQwpSCmEKdgp3Cn8KiwqfCq4KvQrMCtAK3wruCv0LDAsbCycLOQtIC1cLZgt1C3YLhQuUC5ULpAu5C7oLwgvOC+IL8QwADA8MEwwiDDEMQAxPDF4Magx8DIsMmgypDLgMuQzIDNcM5gz7DPwNBA0QDSQNMw1CDVENVQ1kDXMNgg2RDaANrA2+Dc0Nzg3dDewN+w38DgsOGg4pDj4OPw5HDlMOZw52DoUOlA6YDqcOtg7FDtQO4w7vDwEPEA8fDy4PPQ9MD1sPag9/D4APiA+UD6gPtw/GD9UP2Q/oD/cQBhAVECQQMBBCEFEQYBBvEH4QjRCcEKsQwBDBEMkQ1RDpEPgRBxEWERoRKRE4EUcRVhFlEXERgxGSEaERsBG/Ec4R3RHs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WPFZAFkPWRJZIVkwWTNZQllRWVVZZFlzWXRZgFmBWYJZl1mYWaBZrFnAWc9Z3lntWfFaAFoPWh5aLVo8WkhaWlppWnhah1qWWqVatFrDWtha2VrhWu1bAVsQWx9bLlsyW0FbUFtfW25bfVuJW5lbqFu3W8Zb1VvkW/NcCFwJXBFcHVwxXEBcT1xeXGJccVyAXI9cnlytXLlcy1zaXOlc+F0HXRZdJV00XUldSl1SXV5dcl2BXZBdn12jXbJdwV3QXd9d7l36XgxeG14qXjleSF5XXmZedV54Xodell6lXqhet17GXtVe6l7rXvNe/18TXyJfMV9AX0RfU19iX3FfgF+PX5tfrV+8X8tf2l/pX/hgB2AWYCtgLGA0YEBgVGBjYHJggWCFYJRgo2CyYMFg0GDcYO5g/WEMYRthKmE5YUhhV2FsYW1hdWGBYZVhpGGzYcJhxmHVYeRh82ICYhFiHWItYjxiS2JaYmlieGKHYopimWKoYrdizGLNYtVi4WL1YwRjE2MiYyZjNWNEY1NjYmNxY31jj2OeY61jvGPLY9pj6WPqY/lkDmQPZBdkI2Q3ZEZkVWRkZGhkd2SGZJVkpGSzZL9k0WTgZO9k/mUNZRxlK2U6ZU9lUGVYZWRleGWHZZZlpWWpZbhlx2XWZeVl9GYAZhJmIWYwZj9mTmZdZmxme2Z+ZphmmWafZqtmwWbQZtNm4mbxZvRnA2cSZxVnJGczZzdnRmdVZ1ZnZGdlZ2ZnZ2doZ2lnfmd/Z4dnk2enZ7ZnxWfUZ9hn52f2aAVoFGgjaC9oQWhQaF9obmh9aIxom2iqaL9owGjIaNRo6Gj3aQZpFWkZaShpN2lGaVVpZGlwaYJpkWmgaa9pvmnNadxp62oAagFqCWoVailqOGpHalZqWmppanhqh2qWaqVqsWrDatJq4Wrwav9rAGsPax5rLWtCa0NrS2tXa2tremuJa5hrnGura7pryWvYa+dr82wFbBRsI2wybEFsUGxfbG5sg2yEbIxsmGysbLtsymzZbN1s7Gz7bQptGW0obTRtRm1VbWRtc22CbZFtoG2vbbJtzG3NbdNt3231bgRuB24WbiVuKG43bkZuSW5Ybmdua256boluim6Ybplumm6bbpxunW6ybrNuu27Hbttu6m75bwhvDG8bbypvOW9Ib1dvY291b4Rvk2+ib7FvwG/Pb9Bv32/0b/Vv/XAJcB1wLHA7cEpwTnBdcGxwe3CKcJlwpXC3cMZw1XDkcPNxAnERcRJxIXE2cTdxP3FLcV9xbnF9cYxxkHGfca5xvXHMcdtx53H5cghyF3ImcjVyRHJTcmJyd3J4coByjHKgcq9yvnLNctFy4HLvcv5zDXMccyhzOHNHc2FzYnNoc3RzinOZc5xzq3O6c71zzHPbc95z7XP8dAB0D3QedB90KXQqdCt0QHRBdEl0VXRpdHh0h3SWdJp0qXS4dMd01nTldPF1A3USdSF1MHU/dU51XXVsdYF1gnWKdZZ1qnW5dch113Xbdep1+XYIdhd2JnYydkR2U3ZidnF2gHaPdp52rXbCdsN2y3bXdut2+ncJdxh3HHcrdzp3SXdYd2d3c3eFd5R3o3eyd8F3wnfRd+B373fyeAF4EHgfeC54PXhSeFN4W3hneHt4iniZeKh4rHi7eMp42XjoePd5A3kVeSR5M3lCeVF5YHlveX55gXmbeZx5onmuecR503nWeeV59Hn3egZ6FXoYeid6Nno6ekl6WHpZemF6Ynpjenh6eXqBeo16oXqwer96znrSeuF68Hr/ew57HXspezt7SntZe2h7d3uGe5V7pHu5e7p7wnvOe+J78XwAfA98E3wifDF8QHxPfF58anx8fIt8mnypfLh8x3zWfOV86H0CfQN9CX0VfSt9On09fUx9W31efW19fH1/fY59nX2hfbB9v33Afc59z33QfdF95n3nfe99+34Pfh5+LX48fkB+T35efm1+fH6Lfpd+qX64fsd+1n7lfuZ+9X8EfxN/KH8pfzF/PX9Rf2B/b39+f4J/kX+gf69/vn/Nf9l/63/6gAmAGIAngDaARYBUgGmAaoBygH6AkoChgLCAv4DDgNKA4YDwgP+BDoEagSyBO4FKgVmBaIF3gYaBlYGqgauBs4G/gdOB4oHxggCCBIITgiKCMYJAgk+CW4JtgnyCi4KagqmCuILHgtaC64LsgvSDAIMUgyODMoNBg0WDVINjg3KDgYOQg5yDroO9g8yD24Pqg/mECIQXhBqENIQ1hDuER4RdhGyEb4R+hI2EkISfhK6EsYTAhM+E04TihPGE8oT+hP+FAIUVhRaFHoUqhT6FTYVchWuFb4V+hY2FnIWrhbqFxoXYheeF9oYFhhSGI4YyhkGGVoZXhl+Ga4Z/ho6GnYashrCGv4bOht2G7Ib7hweHGYcohzeHRodVh2SHc4eCh5eHmIegh6yHwIfPh96H7YfxiACID4geiC2IPIhIiFqIaYh4iIeIloiliLSIw4jYiNmI4YjtiQGJEIkfiS6JMolBiVCJX4luiX2JiYmbiaqJuYnIideJ5on1igSKB4ohiiKKKIo0ikqKWYpcimuKeop9ioyKm4qeiq2KvIrAis+K3orfivmK+or7ivyK/Yr+iv+LAIsBiwKLA4sYixmLIYsti0GLUItfi26LcouBi5CLn4uui72LyYvbi+qL+YwIjBeMJow1jESMWYxajGKMboyCjJGMoIyvjLOMwozRjOCM74z+jQqNHI0rjTqNSY1YjWeNdo2FjZqNm42jja+Nw43SjeGN8I30jgOOEo4hjjCOP45Ljl2ObI57joqOmY6ojreOxo7bjtyO5I7wjwSPE48ijzGPNY9Ej1OPYo9xj4CPjI+ej62PvI/Lj9qP6Y/4kAeQHJAdkCWQMZBFkFSQY5BykHaQhZCUkKOQspDBkM2Q35DukP2RDJEbkSqROZFIkV2RXpFmkXKRhpGVkaSRs5G3kcaR1ZHkkfOSApIOkiCSL5I+kk2SXJJrknqSiZKekp+Sp5KzkseS1pLlkvSS+JMHkxaTJZM0k0OTT5Nhk3CTf5OOk52TrJO7k8qT35Pgk+iT9JQIlBeUJpQ1lDmUSJRXlGaUdZSElJCUopSxlMCUz5TelO2U/JULlSCVIZUplTWVSZVYlWeVdpV6lYmVmJWnlbaVxZXRleOV8pYBlhCWH5Yulj2WTJZhlmKWapZ2loqWmZaolreWu5bKltmW6Jb3lwaXEpcklzOXQpdRl2CXb5d+l42Xopejl6uXt5fLl9qX6Zf4l/yYC5gamCmYOJhHmFOYZZh0mIOYkpihmLCYv5jOmNGY65jsmPKY/pkUmSOZJpk1mUSZR5lWmWWZaJl3mYaZipmZmaiZspnHmciZ0JncmfCZ/5oOmh2aIZowmj+aTppdmmyaeJqKmpmaqJq3msaa1ZrkmvObCJsJmxGbHZsxm0CbT5tem2KbcZuAm4+bnputm7mby5vam+mb+JwHnBacJZw0nEmcSpxSnF6ccpyBnJCcn5yjnLKcwZzQnN+c7pz6nQydG50qnTmdSJ1XnWaddZ14nZKdk52ZnaWdu53Knc2d3J3rne6d/Z4Mng+eHp4tnjGeQJ5PnlCeWp5bnlyecZ5ynnqehp6anqmeuJ7Hnsue2p7pnvifB58WnyKfNJ9Dn1KfYZ9wn3+fjp+dn7Kfs5+7n8ef25/qn/mgCKAMoBugKqA5oEigV6BjoHWghKCToKKgsaDAoM+g3qDzoPSg/KEIoRyhK6E6oUmhTaFcoWuheqGJoZihpKG2ocWh1KHjofKiAaIQoh+iIqI8oj2iQ6JPomWidKJ3ooailaKYoqeitqK5osii16Lbouqi+aL6owKjA6MYoxmjIaMto0GjUKNfo26jcqOBo5Cjn6Ouo72jyaPbo+qj+aQIpBekJqQ1pESkWaRapGKkbqSCpJGkoKSvpLOkwqTRpOCk76T+pQqlHKUrpTqlSaVYpWeldqWFpYiljKWQpZSlnKWfpaNVJG51bGzWAA0ADgAPABAAEQASABMAFAAVABYAFwAYXxAPX3hkX3Jvb3RQYWNrYWdlViRjbGFzc11feGRfbW9kZWxOYW1lXF94ZF9jb21tZW50c18QFV9jb25maWd1cmF0aW9uc0J5TmFtZV8QF19tb2RlbFZlcnNpb25JZGVudGlmaWVygAKBDM2AAIEMy4EMzIEFTN4AGgAbABwAHQAeAB8AIAAOACEAIgAjACQAJQAmACcAKAApAAkAJwAVAC0ALgAvADAAMQAnACcAFV8QHFhEQnVja2V0Rm9yQ2xhc3Nlc3dhc0VuY29kZWRfEBpYREJ1Y2tldEZvclBhY2thZ2Vzc3RvcmFnZV8QHFhEQnVja2V0Rm9ySW50ZXJmYWNlc3N0b3JhZ2VfEA9feGRfb3duaW5nTW9kZWxfEB1YREJ1Y2tldEZvclBhY2thZ2Vzd2FzRW5jb2RlZFZfb3duZXJfEBtYREJ1Y2tldEZvckRhdGFUeXBlc3N0b3JhZ2VbX3Zpc2liaWxpdHlfEBlYREJ1Y2tldEZvckNsYXNzZXNzdG9yYWdlVV9uYW1lXxAfWERCdWNrZXRGb3JJbnRlcmZhY2Vzd2FzRW5jb2RlZF8QHlhEQnVja2V0Rm9yRGF0YVR5cGVzd2FzRW5jb2RlZF8QEF91bmlxdWVFbGVtZW50SUSABIEMyYEMx4ABgASAAIEMyIEMyhAAgAWAA4AEgASAAFBTWUVT0wA4ADkADgA6AE0AYFdOUy5rZXlzWk5TLm9iamVjdHOvEBIAOwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEyABoAHgAiACYAKgAuADIANgA6AD4AQgBGAEoATgBSAFYAWgBevEBIATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF+AGIBrgQZigQIDgQf1gQiDgQYLgQlugQmzgQj0gQJ+gQo/gQT2gQqygQbtgQvOgQwngQyDgDZdQ0RFeHRlcm5hbEFwaVdDRENoYWluXxATQ0RYY21BdmFpbGFibGVBc3NldFdDREFzc2V0XUNEQ29udGFjdEl0ZW1fEBlDRFBvbGthc3dhcFJlbW90ZVNldHRpbmdzXxAQQ0RDaGFpblhjbUNvbmZpZ1tDRFN0YXNoSXRlbV8QFUNEUnVudGltZU1ldGFkYXRhSXRlbV5DRFBvbGthc3dhcERleF8QD0NEUHJpY2VQcm92aWRlclpDRFNjYW1JbmZvW0NEQ2hhaW5Ob2RlXxAYQ0RUcmFuc2FjdGlvbkhpc3RvcnlJdGVtXxAZQ0RYY21BdmFpbGFibGVEZXN0aW5hdGlvbllDRENvbnRhY3ReQ0RQaGlzaGluZ0l0ZW1fEBJDRENoYWluU3RvcmFnZUl0ZW3fEBAAdAB1AHYAdwAfAHgAeQAhAHoAewAOACMAfAB9ACYAfgB/AIAAJwAnABMAhACFAC8AJwB/AIgAOwB/AIsAjACNXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zZHVwbGljYXRlc18QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNzdG9yYWdlW19pc0Fic3RyYWN0gBqAPoAEgASAAoAbgQLvgASAGoEC8YAGgBqBB/SAGQgSl+5mZldvcmRlcmVk0wA4ADkADgCRAJMAYKEAkoAcoQCUgB2ANl5YRF9QU3RlcmVvdHlwZdkAHwAjAJgADgAmAJkAIQB+AJoATgCSAH8AngAVACcALwCNAKJfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WAGIAcgBqAPYAAgAQIgB7TADgAOQAOAKQArgBgqQClAKYApwCoAKkAqgCrAKwArYAfgCCAIYAigCOAJIAlgCaAJ6kArwCwALEAsgCzALQAtQC2ALeAKIAsgC2AL4AwgDKANIA3gDuANl8QE1hEUE1Db21wb3VuZEluZGV4ZXNfEBBYRF9QU0tfZWxlbWVudElEXxAZWERQTVVuaXF1ZW5lc3NDb25zdHJhaW50c18QGlhEX1BTS192ZXJzaW9uSGFzaE1vZGlmaWVyXxAZWERfUFNLX2ZldGNoUmVxdWVzdHNBcnJheV8QEVhEX1BTS19pc0Fic3RyYWN0XxAPWERfUFNLX3VzZXJJbmZvXxATWERfUFNLX2NsYXNzTWFwcGluZ18QFlhEX1BTS19lbnRpdHlDbGFzc05hbWXfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQDOABUAlACNAI0AjQAvAI0A1QClAI0AjQAVAI1VX3R5cGVYX2RlZmF1bHRcX2Fzc29jaWF0aW9uW19pc1JlYWRPbmx5WV9pc1N0YXRpY1lfaXNVbmlxdWVaX2lzRGVyaXZlZFpfaXNPcmRlcmVkXF9pc0NvbXBvc2l0ZVdfaXNMZWFmgACAKYAAgB0ICAgIgCuAHwgIgAAI0gA5AA4A3ADdoIAq0gDfAOAA4QDiWiRjbGFzc25hbWVYJGNsYXNzZXNeTlNNdXRhYmxlQXJyYXmjAOEA4wDkV05TQXJyYXlYTlNPYmplY3TSAN8A4ADmAOdfEBBYRFVNTFByb3BlcnR5SW1wpADoAOkA6gDkXxAQWERVTUxQcm9wZXJ0eUltcF8QFFhEVU1MTmFtZWRFbGVtZW50SW1wXxAPWERVTUxFbGVt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dEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBBlGAR4AagD2AAIAECIEGYNMAOAA5AA5RNVE8AGCmAnECcwJuAm8CcAJygGGAY4BegF+AYIBiplE9UT5RP1FAUUFRQoEGYYEGvYEGvoEGv4EGwIEGwYA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAUAAVUIoAjQCNAI0ALwCNANUCcQCNAI0AFQCNgACBBmKAAIEGXwgICAiAK4BhCAiAAAjfEBBRVFFVUVZRVwAfUVhRWQAhUVpRWwAOACNRXFFdACYAfgB/UV8AJwAnABNRYwCFAC8AJwB/AIgAPQB/UWpRawCNXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zZHVwbGljYXRlc18QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNzdG9yYWdlgBqBBnWABIAEgAKBBmSBAu+ABIAagQLxgAiAGoEGvIEGYwgTAAAAARtmJ1/TADgAOQAOUW9RcQBgoQCSgByhUXKBBmWANtkAHwAjUXUADgAmUXYAIQB+UXcAUACSAH8AngAVACcALwCNUX9fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBBmKAHIAagD2AAIAECIEGZtMAOAA5AA5RgVGLAGCpAKUApgCnAKgAqQCqAKsArACtgB+AIIAh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AAAnFAAAJxUAACcWAAAnFwAAJxgAACcaAAAnHAAAJx0AACceAAAnIAAAJyEAACcvAAAnOAAAJ00AACdcAAAncQAAJ38AACeUAAAnqAAAJ78AACfRAAAn3gAAJ+cAACfpAAAn6wAAJ+0AACfvAAAn+AAAJ/oAACf9AAAoAAAAKAMAACgFAAAoCwAAKBEAACgWAAAoGgAAKGUAACiIAAAoqAAAKMgAACjKAAAozAAAKM4AACjQAAAo0gAAKNMAACjUAAAo1gAAKNcAACjZAAAo2gAAKNwAACjeAAAo3wAAKOAAACjiAAAo4wAAKOgAACj1AAAo+gAAKPwAACj+AAApAwAAKQUAACkHAAApCQAAKR4AACkxAAApVgAAKXoAACmhAAApxQAAKccAACnJAAApywAAKc0AACnPAAAp0QAAKdIAACnUAAAp4QAAKfIAACn0AAAp9gAAKfgAACn6AAAp/AAAKf4AACoAAAAqAgAAKhMAACoVAAAqFwAAKhkAACobAAAqHQAAKh8AACohAAAqIwAAKiUAACpDAAAqYQAAKnQAACqIAAAqnQAAKroAACrOAAAq5AAAKyMAACslAAArJwAAKykAACsrAAArLAAAKy0AACsuAAArLwAAKzEAACszAAArNAAAKzUAACs3AAArOAAAK3cAACt5AAArewAAK30AACt/AAArgAAAK4EAACuCAAArgwAAK4UAACuHAAAriAAAK4kAACuLAAArjAAAK8sAACvNAAArzwAAK9EAACvTAAAr1AAAK9UAACvWAAAr1wAAK9kAACvbAAAr3AAAK90AACvfAAAr4AAAK+0AACvuAAAr7wAAK/EAACwwAAAsMgAALDQAACw2AAAsOAAALDkAACw6AAAsOwAALDwAACw+AAAsQAAALEEAACxCAAAsRAAALEUAACyEAAAshgAALIgAACyKAAAsjAAALI0AACyOAAAsjwAALJAAACySAAAslAAALJUAACyWAAAsmAAALJkAACyaAAAs2QAALNsAACzdAAAs3wAALOEAACziAAAs4wAALOQAACzlAAAs5wAALOkAACzqAAAs6wAALO0AACzuAAAtLQAALS8AAC0xAAAtMwAALTUAAC02AAAtNwAALTgAAC05AAAtOwAALT0AAC0+AAAtPwAALUEAAC1CAAAtgQAALYMAAC2FAAAthwAALYkAAC2KAAAtiwAALYwAAC2NAAAtjwAALZEAAC2SAAAtkwAALZUAAC2WAAAtuwAALd8AAC4GAAAuKgAALiwAAC4uAAAuMAAALjIAAC40AAAuNgAALjcAAC45AAAuRgAALlUAAC5XAAAuWQAALlsAAC5dAAAuXwAALmEAAC5jAAAucgAALnQAAC52AAAueAAALnoAAC59AAAugAAALoMAAC6FAAAulwAALqsAAC69AAAu0gAALuQAAC7zAAAvEAAAL08AAC9RAAAvUwAAL1UAAC9XAAAvWAAAL1kAAC9aAAAvWwAAL10AAC9fAAAvYAAAL2EAAC9jAAAvZAAAL6MAAC+lAAAvpwAAL6kAAC+rAAAvrAAAL60AAC+uAAAvrwAAL7EAAC+zAAAvtAAAL7UAAC+3AAAvuAAAL7oAAC/5AAAv+wAAL/0AAC//AAAwAQAAMAIAADADAAAwBAAAMAUAADAHAAAwCQAAMAoAADALAAAwDQAAMA4AADBNAAAwTwAAMFEAADBTAAAwVQAAMFYAADBXAAAwWAAAMFkAADBbAAAwXQAAMF4AADBfAAAwYQAAMGIAADClAAAwyQAAMO0AADEQAAAxNwAAMVcAADF+AAAxpQAAMcUAADHpAAAyDQAAMg8AADIRAAAyEwAAMhUAADIXAAAyGQAAMhwAADIeAAAyIAAAMiMAADIlAAAyJwAAMioAADIsAAAyLQAAMjIAADI/AAAyQgAAMkQAADJHAAAySQAAMksAADJwAAAylAAAMrsAADLfAAAy4QAAMuMAADLlAAAy5wAAMukAADLrAAAy7AAAMu4AADL7AAAzDgAAMxAAADMSAAAzFAAAMxYAADMYAAAzGgAAMxwAADMeAAAzIAAAMzMAADM1AAAzNwAAMzkAADM7AAAzPQAAMz8AADNBAAAzQwAAM0UAADNHAAAzhgAAM4gAADOKAAAzjAAAM44AADOPAAAzkAAAM5EAADOSAAAzlAAAM5YAADOXAAAzmAAAM5oAADObAAAzpAAAM6UAADOnAAAz5gAAM+gAADPqAAAz7AAAM+4AADPvAAAz8AAAM/EAADPyAAAz9AAAM/YAADP3AAAz+AAAM/oAADP7AAA0OgAANDwAADQ+AAA0QAAANEIAADRDAAA0RAAANEUAADRGAAA0SAAANEoAADRLAAA0TAAANE4AADRPAAA0WAAANFsAADRdAAA0XwAANGgAADRrAAA0bQAANG8AADR3AAA0tgAANLgAADS6AAA0vAAANL4AADS/AAA0wAAANMEAADTCAAA0xAAANMYAADTHAAA0yAAANMoAADTLAAA1CgAANQwAADUOAAA1EAAANRIAADUTAAA1FAAANRUAADUWAAA1GAAANRoAADUbAAA1HAAANR4AADUfAAA1KAAANSkAADUrAAA1agAANWwAADVuAAA1cAAANXIAADVzAAA1dAAANXUAADV2AAA1eAAANXoAADV7AAA1fAAANX4AADV/AAA1vgAANcAAADXCAAA1xAAANcYAADXHAAA1yAAANckAADXKAAA1zAAANc4AADXPAAA10AAANdIAADXTAAA14AAANeEAADXiAAA15AAANiMAADYlAAA2JwAANikAADYrAAA2LAAANi0AADYuAAA2LwAANjEAADYzAAA2NAAANjUAADY3AAA2OAAANncAADZ5AAA2ewAANn0AADZ/AAA2gAAANoEAADaCAAA2gwAANoUAADaHAAA2iAAANokAADaLAAA2jAAANpkAADbcAAA23gAANuAAADbiAAA25AAANuYAADboAAA26gAANuwAADbuAAA28AAANvIAADb0AAA29gAANvgAADb6AAA2/AAANv4AADcAAAA3AgAANwQAADcGAAA3CAAANwoAADcMAAA3DgAANxAAADcSAAA3FAAANxYAADcYAAA3GgAANxwAADdfAAA3YQAAN2MAADdlAAA3ZwAAN2oAADdtAAA3cAAAN3MAADd2AAA3eQAAN3wAADd/AAA3ggAAN4UAADeIAAA3iwAAN44AADeRAAA3lAAAN5cAADeaAAA3nQAAN6AAADejAAA3pgAAN6kAADesAAA3rwAAN7IAADe1AAA3uAAAN7sAADe9AAA3wgAAN8wAADfaAAA36QAAN/EAADf/AAA4DQAAOBIAADghAAA4LwAAOD0AADhCAAA4VgAAOF0AADhkAAA4cgAAOHwAADiLAAA4oQAAOKoAADiwAAA4twAAOMAAADjNAAA44QAAOPQAADj+AAA5EAAAOR4AADkqAAA5dQAAOZgAADm4AAA52AAAOdoAADncAAA53gAAOeAAADniAAA54wAAOeQAADnmAAA55wAAOekAADnqAAA57AAAOe4AADnvAAA58AAAOfIAADnzAAA5+AAAOgUAADoKAAA6DAAAOg4AADoTAAA6FQAAOhcAADoZAAA6LgAAOlMAADp3AAA6ngAAOsIAADrEAAA6xgAAOsgAADrKAAA6zAAAOs4AADrPAAA60QAAOt4AADrvAAA68QAAOvMAADr1AAA69wAAOvkAADr7AAA6/QAAOv8AADsQAAA7EgAAOxQAADsWAAA7GAAAOxoAADscAAA7HgAAOyAAADsiAAA7YQAAO2MAADtlAAA7ZwAAO2kAADtqAAA7awAAO2wAADttAAA7bwAAO3EAADtyAAA7cwAAO3UAADt2AAA7tQAAO7cAADu5AAA7uwAAO70AADu+AAA7vwAAO8AAADvBAAA7wwAAO8UAADvGAAA7xwAAO8kAADvKAAA8CQAAPAsAADwNAAA8DwAAPBEAADwSAAA8EwAAPBQAADwVAAA8FwAAPBkAADwaAAA8GwAAPB0AADweAAA8KwAAPCwAADwtAAA8LwAAPG4AADxwAAA8cgAAPHQAADx2AAA8dwAAPHgAADx5AAA8egAAPHwAADx+AAA8fwAAPIAAADyCAAA8gwAAPMIAADzEAAA8xgAAPMgAADzKAAA8ywAAPMwAADzNAAA8zgAAPNAAADzSAAA80wAAPNQAADzWAAA81wAAPRYAAD0YAAA9GgAAPRwAAD0eAAA9HwAAPSAAAD0hAAA9IgAAPSQAAD0mAAA9JwAAPSgAAD0qAAA9KwAAPWoAAD1sAAA9bgAAPXAAAD1yAAA9cwAAPXQAAD11AAA9dgAAPXgAAD16AAA9ewAAPXwAAD1+AAA9fwAAPb4AAD3AAAA9wgAAPcQAAD3GAAA9xwAAPcgAAD3JAAA9ygAAPcwAAD3OAAA9zwAAPdAAAD3SAAA90wAAPfgAAD4cAAA+QwAAPmcAAD5pAAA+awAAPm0AAD5vAAA+cQAAPnMAAD50AAA+dgAAPoMAAD6SAAA+lAAAPpYAAD6YAAA+mgAAPpwAAD6eAAA+oAAAPq8AAD6xAAA+swAAPrUAAD63AAA+uQAAPrsAAD69AAA+vwAAPt8AAD8KAAA/JAAAPz0AAD9XAAA/dwAAP5oAAD/ZAAA/2wAAP90AAD/fAAA/4QAAP+IAAD/jAAA/5AAAP+UAAD/nAAA/6QAAP+oAAD/rAAA/7QAAP+4AAEAtAABALwAAQDEAAEAzAABANQAAQDYAAEA3AABAOAAAQDkAAEA7AABAPQAAQD4AAEA/AABAQQAAQEIAAECBAABAgwAAQIUAAECHAABAiQAAQIoAAECLAABAjAAAQI0AAECPAABAkQAAQJIAAECTAABAlQAAQJYAAEDVAABA1wAAQNkAAEDbAABA3QAAQN4AAEDfAABA4AAAQOEAAEDjAABA5QAAQOYAAEDnAABA6QAAQOoAAEDtAABBLAAAQS4AAEEwAABBMgAAQTQAAEE1AABBNgAAQTcAAEE4AABBOgAAQTwAAEE9AABBPgAAQUAAAEFBAABBgAAAQYIAAEGEAABBhgAAQYgAAEGJAABBigAAQYsAAEGMAABBjgAAQZAAAEGRAABBkgAAQZQAAEGVAABB1AAAQdYAAEHYAABB2gAAQdwAAEHdAABB3gAAQd8AAEHgAABB4gAAQeQAAEHlAABB5gAAQegAAEHpAABB8gAAQgAAAEINAABCGwAAQigAAEI7AABCUgAAQmQAAEKvAABC0gAAQvIAAEMSAABDFAAAQxYAAEMYAABDGgAAQxwAAEMdAABDHgAAQyAAAEMhAABDIwAAQyQAAEMmAABDKAAAQykAAEMqAABDLAAAQy0AAEMyAABDPwAAQ0QAAENGAABDSAAAQ00AAENPAABDUQAAQ1MAAEN4AABDnAAAQ8MAAEPnAABD6QAAQ+sAAEPtAABD7wAAQ/EAAEPzAABD9AAAQ/YAAEQDAABEFAAARBYAAEQYAABEGgAARBwAAEQeAABEIAAARCIAAEQkAABENQAARDcAAEQ5AABEOwAARD0AAEQ/AABEQQAAREMAAERFAABERwAARIYAAESIAABEigAARIwAAESOAABEjwAARJAAAESRAABEkgAARJQAAESWAABElwAARJgAAESaAABEmwAARNoAAETcAABE3gAAROAAAETiAABE4wAAROQAAETlAABE5gAAROgAAETqAABE6wAAROwAAETuAABE7wAARS4AAEUwAABFMgAARTQAAEU2AABFNwAARTgAAEU5AABFOgAARTwAAEU+AABFPwAARUAAAEVCAABFQwAARVAAAEVRAABFUgAARVQAAEWTAABFlQAARZcAAEWZAABFmwAARZwAAEWdAABFngAARZ8AAEWhAABFowAARaQAAEWlAABFpwAARagAAEXnAABF6QAAResAAEXtAABF7wAARfAAAEXxAABF8gAARfMAAEX1AABF9wAARfgAAEX5AABF+wAARfwAAEY7AABGPQAARj8AAEZBAABGQwAARkQAAEZFAABGRgAARkcAAEZJAABGSwAARkwAAEZNAABGTwAARlAAAEaPAABGkQAARpMAAEaVAABGlwAARpgAAEaZAABGmgAARpsAAEadAABGnwAARqAAAEahAABGowAARqQAAEbjAABG5QAARucAAEbpAABG6wAARuwAAEbtAABG7gAARu8AAEbxAABG8wAARvQAAEb1AABG9wAARvgAAEcdAABHQQAAR2gAAEeMAABHjgAAR5AAAEeSAABHlAAAR5YAAEeYAABHmQAAR5sAAEeoAABHtwAAR7kAAEe7AABHvQAAR78AAEfBAABHwwAAR8UAAEfUAABH1gAAR9gAAEfaAABH3AAAR94AAEfgAABH4gAAR+QAAEgjAABIJQAASCcAAEgpAABIKwAASCwAAEgtAABILgAASC8AAEgxAABIMwAASDQAAEg1AABINwAASDgAAEh3AABIeQAASHsAAEh9AABIfwAASIAAAEiBAABIggAASIMAAEiFAABIhwAASIgAAEiJAABIiwAASIwAAEjLAABIzQAASM8AAEjRAABI0wAASNQAAEjVAABI1gAASNcAAEjZAABI2wAASNwAAEjdAABI3wAASOAAAEkfAABJIQAASSMAAEklAABJJwAASSgAAEkpAABJKgAASSsAAEktAABJLwAASTAAAEkxAABJMwAASTQAAElzAABJdQAASXcAAEl5AABJewAASXwAAEl9AABJfgAASX8AAEmBAABJgwAASYQAAEmFAABJhwAASYgAAEnHAABJyQAAScsAAEnNAABJzwAASdAAAEnRAABJ0gAASdMAAEnVAABJ1wAASdgAAEnZAABJ2wAASdwAAEobAABKHQAASh8AAEohAABKIwAASiQAAEolAABKJgAASicAAEopAABKKwAASiwAAEotAABKLwAASjAAAEo5AABKTAAASlkAAEpsAABKeQAASowAAEqjAABKtQAASwAAAEsjAABLQwAAS2MAAEtlAABLZwAAS2kAAEtrAABLbQAAS24AAEtvAABLcQAAS3IAAEt0AABLdQAAS3cAAEt5AABLegAAS3sAAEt9AABLfgAAS4MAAEuQAABLlQAAS5cAAEuZAABLngAAS6AAAEuiAABLpAAAS8kAAEvtAABMFAAATDgAAEw6AABMPAAATD4AAExAAABMQgAATEQAAExFAABMRwAATFQAAExlAABMZwAATGkAAExrAABMbQAATG8AAExxAABMcwAATHUAAEyGAABMiAAATIoAAEyMAABMjgAATJAAAEySAABMlAAATJYAAEyYAABM1wAATNkAAEzbAABM3QAATN8AAEzgAABM4QAATOIAAEzjAABM5QAATOcAAEzoAABM6QAATOsAAEzsAABNKwAATS0AAE0vAABNMQAATTMAAE00AABNNQAATTYAAE03AABNOQAATTsAAE08AABNPQAATT8AAE1AAABNfwAATYEAAE2DAABNhQAATYcAAE2IAABNiQAATYoAAE2LAABNjQAATY8AAE2QAABNkQAATZMAAE2UAABNoQAATaIAAE2jAABNpQAATeQAAE3mAABN6AAATeoAAE3sAABN7QAATe4AAE3vAABN8AAATfIAAE30AABN9QAATfYAAE34AABN+QAATjgAAE46AABOPAAATj4AAE5AAABOQQAATkIAAE5DAABORAAATkYAAE5IAABOSQAATkoAAE5MAABOTQAATowAAE6OAABOkAAATpIAAE6UAABOlQAATpYAAE6XAABOmAAATpoAAE6cAABOnQAATp4AAE6gAABOoQAATuAAAE7iAABO5AAATuYAAE7oAABO6QAATuoAAE7rAABO7AAATu4AAE7wAABO8QAATvIAAE70AABO9QAATzQAAE82AABPOAAATzoAAE88AABPPQAATz4AAE8/AABPQAAAT0IAAE9EAABPRQAAT0YAAE9IAABPSQAAT24AAE+SAABPuQAAT90AAE/fAABP4QAAT+MAAE/lAABP5wAAT+kAAE/qAABP7AAAT/kAAFAIAABQCgAAUAwAAFAOAABQEAAAUBIAAFAUAABQFgAAUCUAAFAnAABQKQAAUCsAAFAtAABQLwAAUDEAAFAzAABQNQAAUHQAAFB2AABQeAAAUHoAAFB8AABQfQAAUH4AAFB/AABQgAAAUIIAAFCEAABQhQAAUIYAAFCIAABQiQAAUIsAAFDKAABQzAAAUM4AAFDQAABQ0gAAUNMAAFDUAABQ1QAAUNYAAFDYAABQ2gAAUNsAAFDcAABQ3gAAUN8AAFEeAABRIAAAUSIAAFEkAABRJgAAUScAAFEoAABRKQAAUSoAAFEs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AACfbQAAn28AAJ9xAACfcwAAn3UAAJ93AACfeAAAn3sAAJ+IAACflwAAn5kAAJ+bAACfnQAAn58AAJ+hAACfowAAn6UAAJ+0AACftwAAn7oAAJ+9AACfwAAAn8MAAJ/GAACfyQAAn8sAAKAKAACgDAAAoA4AAKAQAACgEwAAoBQAAKAVAACgFgAAoBcAAKAZAACgGwAAoBwAAKAdAACgHwAAoCAAAKBfAACgYQAAoGMAAKBlAACgaAAAoGkAAKBqAACgawAAoGwAAKBuAACgcAAAoHEAAKByAACgdAAAoHUAAKC0AACgtgAAoLgAAKC6AACgvQAAoL4AAKC/AACgwAAAoMEAAKDDAACgxQAAoMYAAKDHAACgyQAAoMoAAKEJAAChCwAAoQ0AAKEPAAChEgAAoRMAAKEUAAChFQAAoRYAAKEYAAChGgAAoRsAAKEcAAChHgAAoR8AAKFeAAChYAAAoWIAAKFkAAChZwAAoWgAAKFpAAChagAAoWsAAKFtAAChbwAAoXAAAKFxAAChcwAAoXQAAKGzAAChtQAAobcAAKG5AAChvAAAob0AAKG+AAChvwAAocAAAKHCAAChxAAAocUAAKHGAAChyAAAockAAKIIAACiCgAAogwAAKIOAACiEQAAohIAAKITAACiFAAAohUAAKIXAACiGQAAohoAAKIbAACiHQAAoh4AAKJpAACijAAAoqwAAKLMAACizgAAotAAAKLSAACi1AAAotYAAKLXAACi2AAAotsAAKLcAACi3gAAot8AAKLhAACi4wAAouQAAKLlAACi6AAAoukAAKLuAACi+wAAowAAAKMCAACjBAAAowkAAKMMAACjDwAAoxEAAKM2AACjWgAAo4EAAKOlAACjqAAAo6oAAKOsAACjrgAAo7AAAKOyAACjswAAo7YAAKPDAACj1AAAo9YAAKPYAACj2gAAo9wAAKPeAACj4AAAo+IAAKPkAACj9QAAo/gAAKP7AACj/gAApAEAAKQEAACkBwAApAoAAKQNAACkDwAApE4AAKRQAACkUgAApFQAAKRXAACkWAAApFkAAKRaAACkWwAApF0AAKRfAACkYAAApGEAAKRjAACkZAAApKMAAKSlAACkpwAApKkAAKSsAACkrQAApK4AAKSvAACksAAApLIAAKS0AACktQAApLYAAKS4AACkuQAApPgAAKT6AACk/QAApP8AAKUCAAClAwAApQQAAKUFAAClBgAApQgAAKUKAAClCwAApQwAAKUOAAClDwAApRwAAKUdAAClHgAApSAAAKVfAAClYQAApWMAAKVlAAClaAAApWkAAKVqAAClawAApWwAAKVuAAClcAAApXEAAKVyAACldAAApXUAAKW0AACltgAApbgAAKW6AAClvQAApb4AAKW/AAClwAAApcEAAKXDAAClxQAApcYAAKXHAAClyQAApcoAAKYJAACmCwAApg0AAKYPAACmEgAAphMAAKYUAACmFQAAphYAAKYYAACmGgAAphsAAKYcAACmHgAAph8AAKZeAACmYAAApmIAAKZkAACmZwAApmgAAKZpAACmagAApmsAAKZtAACmbwAApnAAAKZxAACmcwAApnQAAKazAACmtQAAprcAAKa5AACmvAAApr0AAKa+AACmvwAApsAAAKbCAACmxAAApsUAAKbGAACmyAAApskAAKbuAACnEgAApzkAAKddAACnYAAAp2IAAKdkAACnZgAAp2gAAKdqAACnawAAp24AAKd7AACnigAAp4wAAKeOAACnkAAAp5IAAKeUAACnlgAAp5gAAKenAACnqgAAp60AAKewAACnswAAp7YAAKe5AACnvAAAp74AAKf9AACn/wAAqAEAAKgDAACoBgAAqAcAAKgIAACoCQAAqAoAAKgMAACoDgAAqA8AAKgQAACoEgAAqBMAAKhSAACoVAAAqFYAAKhYAACoWwAAqFwAAKhdAACoXgAAqF8AAKhhAACoYwAAqGQAAKhlAACoZwAAqGgAAKinAACoqQAAqKsAAKitAACosAAAqLEAAKiyAACoswAAqLQAAKi2AACouAAAqLkAAKi6AACovAAAqL0AAKj8AACo/gAAqQAAAKkCAACpBQAAqQYAAKkHAACpCAAAqQkAAKkLAACpDQAAqQ4AAKkPAACpEQAAqRIAAKlRAACpUwAAqVUAAKlXAACpWgAAqVsAAKlcAACpXQAAqV4AAKlgAACpYgAAqWMAAKlkAACpZgAAqWcAAKmmAACpqAAAqaoAAKmsAACprwAAqbAAAKmxAACpsgAAqbMAAKm1AACptwAAqbgAAKm5AACpuwAAqbwAAKn7AACp/QAAqf8AAKoBAACqBAAAqgUAAKoGAACqBwAAqggAAKoKAACqDAAAqg0AAKoOAACqEAAAqhEAAKpcAACqfwAAqp8AAKq/AACqwQAAqsMAAKrFAACqxwAAqskAAKrKAACqywAAqs4AAKrPAACq0QAAqtIAAKrUAACq1gAAqtcAAKrYAACq2wAAqtwAAKrhAACq7gAAqvMAAKr1AACq9wAAqvwAAKr/AACrAgAAqwQAAKspAACrTQAAq3QAAKuYAACrmwAAq50AAKufAACroQAAq6MAAKulAACrpgAAq6kAAKu2AACrxwAAq8kAAKvLAACrzQAAq88AAKvRAACr0wAAq9UAAKvXAACr6AAAq+sAAKvuAACr8QAAq/QAAKv3AACr+gAAq/0AAKwAAACsAgAArEEAAKxDAACsRQAArEcAAKxKAACsSwAArEwAAKxNAACsTgAArFAAAKxSAACsUwAArFQAAKxWAACsVwAArJYAAKyYAACsmgAArJwAAKyfAACsoAAArKEAAKyiAACsowAArKUAAKynAACsqAAArKkAAKyrAACsrAAArOsAAKztAACs8AAArPIAAKz1AACs9gAArPcAAKz4AACs+QAArPsAAKz9AACs/gAArP8AAK0BAACtAgAArQ8AAK0QAACtEQAArRMAAK1SAACtVAAArVYAAK1YAACtWwAArVwAAK1dAACtXgAArV8AAK1hAACtYwAArWQAAK1lAACtZwAArWgAAK2nAACtqQAArasAAK2tAACtsAAArbEAAK2yAACtswAArbQAAK22AACtuAAArbkAAK26AACtvAAArb0AAK38AACt/gAArgAAAK4CAACuBQAArgYAAK4HAACuCAAArgkAAK4LAACuDQAArg4AAK4PAACuEQAArhIAAK5RAACuUwAArlUAAK5XAACuWgAArlsAAK5cAACuXQAArl4AAK5gAACuYgAArmMAAK5kAACuZgAArmcAAK6mAACuqAAArqoAAK6sAACurwAArrAAAK6xAACusgAArrMAAK61AACutwAArrgAAK65AACuuwAArrwAAK7hAACvBQAArywAAK9QAACvUwAAr1UAAK9XAACvWQAAr1sAAK9dAACvXgAAr2EAAK9uAACvewAAr30AAK9/AACvgQAAr4MAAK+FAACvhwAAr5QAAK+XAACvmgAAr50AAK+gAACvowAAr6YAAK+oAACv5wAAr+kAAK/sAACv7gAAr/EAAK/yAACv8wAAr/QAAK/1AACv9wAAr/kAAK/6AACv+wAAr/0AAK/+AACwQQAAsGUAALCJAACwrAAAsNMAALDzAACxGgAAsUEAALFhAACxhQAAsakAALGrAACxrgAAsbAAALGyAACxtAAAsbcAALG6AACxvAAAsb4AALHBAACxwwAAscUAALHIAACxywAAscwAALHRAACx3gAAseEAALHjAACx5gAAsekAALHrAACyEAAAsjQAALJbAACyfwAAsoIAALKEAACyhgAAsogAALKKAACyjAAAso0AALKQAACynQAAsrAAALKyAACytAAAsrYAALK4AACyugAAsrwAALK+AACywAAAssIAALLVAACy2AAAstsAALLeAACy4QAAsuQAALLnAACy6gAAsu0AALLwAACy8gAAszEAALMzAACzNgAAszgAALM7AACzPAAAsz0AALM+AACzPwAAs0EAALNDAACzRAAAs0UAALNHAACzSAAAs1EAALNSAACzVAAAs5MAALOVAACzlwAAs5kAALOcAACznQAAs54AALOfAACzoAAAs6IAALOkAACzpQAAs6YAALOoAACzqQAAs+gAALPqAACz7QAAs+8AALPyAACz8wAAs/QAALP1AACz9gAAs/gAALP6AACz+wAAs/wAALP+AACz/wAAtAgAALQJAAC0CwAAtEoAALRMAAC0TgAAtFAAALRTAAC0VAAAtFUAALRWAAC0VwAAtFkAALRbAAC0XAAAtF0AALRfAAC0YAAAtJ8AALShAAC0pAAAtKYAALSpAAC0qgAAtKsAALSsAAC0rQAAtK8AALSxAAC0sgAAtLMAALS1AAC0tgAAtL8AALTAAAC0wgAAtQEAALUDAAC1BQAAtQcAALUKAAC1CwAAtQwAALUNAAC1DgAAtRAAALUSAAC1EwAAtRQAALUWAAC1FwAAtVYAALVYAAC1WwAAtV0AALVgAAC1YQAAtWIAALVjAAC1ZAAAtWYAALVoAAC1aQAAtWoAALVsAAC1bQAAtXoAALV7AAC1fAAAtX4AALW9AAC1vwAAtcEAALXDAAC1xgAAtccAALXIAAC1yQAAtcoAALXMAAC1zgAAtc8AALXQAAC10gAAtdMAALYSAAC2FAAAthYAALYYAAC2GwAAthwAALYdAAC2HgAAth8AALYhAAC2IwAAtiQAALYlAAC2JwAAtigAALY1AAC2XAAAtl8AALZiAAC2ZAAAtmcAALZqAAC2bQAAtnAAALZzAAC2dgAAtnkAALZ8AAC2fwAAtoEAALaEAAC2hwAAtooAALaMAAC2jwAAtrYAALa5AAC2vAAAtr8AALbCAAC2xQAAtsgAALbLAAC2zgAAttEAALbUAAC21wAAttoAALbdAAC24AAAtuMAALbmAAC26QAAtuwAALbuAAC28QAAtvkAALcHAAC3DgAAtxwAALciAAC3KAAAtzAAALc7AAC3RQAAt04AALdbAAC3cAAAt3oAALeOAAC32QAAt/wAALgcAAC4PAAAuD4AALhAAAC4QgAAuEQAALhHAAC4SAAAuEkAALhMAAC4TQAAuE8AALhQAAC4UgAAuFUAALhWAAC4VwAAuFoAALhbAAC4YAAAuG0AALhyAAC4dAAAuHYAALh7AAC4fgAAuIEAALiDAAC4qAAAuMwAALjzAAC5FwAAuRoAALkcAAC5HgAAuSAAALkiAAC5JAAAuSUAALkoAAC5NQAAuUYAALlIAAC5SgAAuUwAALlOAAC5UAAAuVIAALlUAAC5VgAAuWcAALlqAAC5bQAAuXAAALlzAAC5dgAAuXkAALl8AAC5fwAAuYEAALnAAAC5wgAAucQAALnGAAC5yQAAucoAALnLAAC5zAAAuc0AALnPAAC50QAAudIAALnTAAC51QAAudYAALoVAAC6FwAAuhkAALobAAC6HgAAuh8AALogAAC6IQAAuiIAALokAAC6JgAAuicAALooAAC6KgAAuisAALpqAAC6bAAAum8AALpxAAC6dAAAunUAALp2AAC6dwAAungAALp6AAC6fAAAun0AALp+AAC6gAAAuoEAALqOAAC6jwAAupAAALqSAAC60QAAutMAALrVAAC61wAAutoAALrbAAC63AAAut0AALreAAC64AAAuuIAALrjAAC65AAAuuYAALrnAAC7JgAAuygAALsqAAC7LAAAuy8AALswAAC7MQAAuzIAALszAAC7NQAAuzcAALs4AAC7OQAAuzsAALs8AAC7ewAAu30AALt/AAC7gQAAu4QAALuFAAC7hgAAu4cAALuIAAC7igAAu4wAALuNAAC7jgAAu5AAALuRAAC70AAAu9IAALvUAAC71gAAu9kAALvaAAC72wAAu9wAALvdAAC73wAAu+EAALviAAC74wAAu+UAALvmAAC8JQAAvCcAALwpAAC8KwAAvC4AALwvAAC8MAAAvDEAALwyAAC8NAAAvDYAALw3AAC8OAAAvDoAALw7AAC8YAAAvIQAALyrAAC8zwAAvNIAALzUAAC81gAAvNgAALzaAAC83AAAvN0AALzgAAC87QAAvPwAALz+AAC9AAAAvQIAAL0EAAC9BgAAvQgAAL0KAAC9GQAAvRwAAL0fAAC9IgAAvSUAAL0oAAC9KwAAvS4AAL0wAAC9bwAAvXEAAL1zAAC9dQAAvXgAAL15AAC9egAAvXsAAL18AAC9fgAAvYAAAL2BAAC9ggAAvYQAAL2FAAC9xAAAvcYAAL3IAAC9ygAAvc0AAL3OAAC9zwAAvdAAAL3RAAC90wAAvdUAAL3WAAC91wAAvdkAAL3aAAC+GQAAvhsAAL4dAAC+HwAAviIAAL4jAAC+JAAAviUAAL4mAAC+KAAAvioAAL4rAAC+LAAAvi4AAL4vAAC+bgAAvnAAAL5yAAC+dAAAvncAAL54AAC+eQAAvnoAAL57AAC+fQAAvn8AAL6AAAC+gQAAvoMAAL6EAAC+wwAAvsUAAL7HAAC+yQAAvswAAL7NAAC+zgAAvs8AAL7QAAC+0gAAvtQAAL7VAAC+1gAAvtgAAL7ZAAC/GAAAvxoAAL8cAAC/HgAAvyEAAL8iAAC/IwAAvyQAAL8lAAC/JwAAvykAAL8qAAC/KwAAvy0AAL8uAAC/bQAAv28AAL9xAAC/cwAAv3YAAL93AAC/eAAAv3kAAL96AAC/fAAAv34AAL9/AAC/gAAAv4IAAL+DAAC/zgAAv/EAAMARAADAMQAAwDMAAMA1AADANwAAwDkAAMA8AADAPQAAwD4AAMBBAADAQgAAwEQAAMBFAADARwAAwEoAAMBLAADATAAAwE8AAMBQAADAVQAAwGIAAMBnAADAaQAAwGsAAMBwAADAcwAAwHYAAMB4AADAnQAAwMEAAMDoAADBDAAAwQ8AAMERAADBEwAAwRUAAMEXAADBGQAAwRoAAMEdAADBKgAAwTsAAME9AADBPwAAwUEAAMFDAADBRQAAwUcAAMFJAADBSwAAwVwAAMFfAADBYgAAwWUAAMFoAADBawAAwW4AAMFxAADBdAAAwXYAAMG1AADBtwAAwbkAAMG7AADBvgAAwb8AAMHAAADBwQAAwcIAAMHEAADBxgAAwccAAMHIAADBygAAwcsAAMIKAADCDAAAwg4AAMIQAADCEwAAwhQAAMIVAADCFgAAwhcAAMIZAADCGwAAwhwAAMIdAADCHwAAwiAAAMJfAADCYQAAwmQAAMJmAADCaQAAwmoAAMJrAADCbAAAwm0AAMJvAADCcQAAwnIAAMJzAADCdQAAwnYAAMKDAADChAAAwoUAAMKHAADCxgAAwsgAAMLKAADCzAAAws8AAMLQAADC0QAAwtIAAMLTAADC1QAAwtcAAMLYAADC2QAAwtsAAMLcAADDGwAAwx0AAMMfAADDIQAAwyQAAMMlAADDJgAAwycAAMMoAADDKgAAwywAAMMtAADDLgAAwzAAAMMxAADDcAAAw3IAAMN0AADDdgAAw3kAAMN6AADDewAAw3wAAMN9AADDfwAAw4EAAMOCAADDgwAAw4UAAMOGAADDxQAAw8cAAMPJAADDywAAw84AAMPPAADD0AAAw9EAAMPSAADD1AAAw9YAAMPXAADD2AAAw9oAAMPbAADEGgAAxBwAAMQeAADEIAAAxCMAAMQkAADEJQAAxCYAAMQnAADEKQAAxCsAAMQsAADELQAAxC8AAMQwAADEVQAAxHkAAMSgAADExAAAxMcAAMTJAADEywAAxM0AAMTPAADE0QAAxNIAAMTVAADE4gAAxPEAAMTzAADE9QAAxPcAAMT5AADE+wAAxP0AAMT/AADFDgAAxREAAMUUAADFFwAAxRoAAMUdAADFIAAAxSMAAMUlAADFZAAAxWYAAMVoAADFagAAxW0AAMVuAADFbwAAxXAAAMVxAADFcwAAxXUAAMV2AADFdwAAxXkAAMV6AADFuQAAxbsAAMW9AADFvwAAxcIAAMXDAADFxAAAxcUAAMXGAADFyAAAxcoAAMXLAADFzAAAxc4AAMXPAADGDgAAxhAAAMYSAADGFAAAxhcAAMYYAADGGQAAxhoAAMYbAADGHQAAxh8AAMYgAADGIQAAxiMAAMYkAADGYwAAxmUAAMZnAADGaQAAxmwAAMZtAADGbgAAxm8AAMZwAADGcgAAxnQAAMZ1AADGdgAAxngAAMZ5AADGuAAAxroAAMa8AADGvgAAxsEAAMbCAADGwwAAxsQAAMbFAADGxwAAxskAAMbKAADGywAAxs0AAMbOAADHDQAAxw8AAMcRAADHEwAAxxYAAMcXAADHGAAAxxkAAMcaAADHHAAAxx4AAMcfAADHIAAAxyIAAMcjAADHYgAAx2QAAMdmAADHaAAAx2sAAMdsAADHbQAAx24AAMdvAADHcQAAx3MAAMd0AADHdQAAx3cAAMd4AADHwwAAx+YAAMgGAADIJgAAyCgAAMgqAADILAAAyC4AAMgxAADIMgAAyDMAAMg2AADINwAAyDkAAMg6AADIPAAAyD4AAMg/AADIQAAAyEMAAMhEAADITQAAyFoAAMhfAADIYQAAyGMAAMhoAADIawAAyG4AAMhwAADIlQAAyLkAAMjgAADJBAAAyQcAAMkJAADJCwAAyQ0AAMkPAADJEQAAyRIAAMkVAADJIgAAyTMAAMk1AADJNwAAyTkAAMk7AADJPQAAyT8AAMlBAADJQwAAyVQAAMlXAADJWgAAyV0AAMlgAADJYwAAyWYAAMlpAADJbAAAyW4AAMmtAADJrwAAybEAAMmzAADJtgAAybcAAMm4AADJuQAAyboAAMm8AADJvgAAyb8AAMnAAADJwgAAycMAAMoCAADKBAAAygYAAMoIAADKCwAAygwAAMoNAADKDgAAyg8AAMoRAADKEwAAyhQAAMoVAADKFwAAyhgAAMpXAADKWQAAylwAAMpeAADKYQAAymIAAMpjAADKZAAAymUAAMpnAADKaQAAymoAAMprAADKbQAAym4AAMp7AADKfAAAyn0AAMp/AADKvgAAysAAAMrCAADKxAAAyscAAMrIAADKyQAAysoAAMrLAADKzQAAys8AAMrQAADK0QAAytMAAMrUAADLEwAAyxUAAMsXAADLGQAAyxwAAMsdAADLHgAAyx8AAMsgAADLIgAAyyQAAMslAADLJgAAyygAAMspAADLaAAAy2oAAMtsAADLbgAAy3EAAMtyAADLcwAAy3QAAMt1AADLdwAAy3kAAMt6AADLewAAy30AAMt+AADLvQAAy78AAMvBAADLwwAAy8YAAMvHAADLyAAAy8kAAMvKAADLzAAAy84AAMvPAADL0AAAy9IAAMvTAADMEgAAzBQAAMwWAADMGAAAzBsAAMwcAADMHQAAzB4AAMwfAADMIQAAzCMAAMwkAADMJQAAzCcAAMwoAADMTQAAzHEAAMyYAADMvAAAzL8AAMzBAADMwwAAzMUAAMzHAADMyQAAzMoAAMzNAADM2gAAzOkAAMzrAADM7QAAzO8AAMzxAADM8wAAzPUAAMz3AADNBgAAzQkAAM0MAADNDwAAzRIAAM0VAADNGAAAzRsAAM0dAADNXAAAzV4AAM1gAADNYgAAzWUAAM1mAADNZwAAzWgAAM1pAADNawAAzW0AAM1uAADNbwAAzXEAAM1yAADNsQAAzbMAAM21AADNtwAAzboAAM27AADNvAAAzb0AAM2+AADNwAAAzcIAAM3DAADNxAAAzcYAAM3HAADOBgAAzggAAM4KAADODAAAzg8AAM4QAADOEQAAzhIAAM4TAADOFQAAzhcAAM4YAADOGQAAzhsAAM4cAADOWwAAzl0AAM5fAADOYQAAzmQAAM5lAADOZgAAzmcAAM5oAADOagAAzmwAAM5tAADObgAAznAAAM5xAADOsAAAzrIAAM60AADOtgAAzrkAAM66AADOuwAAzrwAAM69AADOvwAAzsEAAM7CAADOwwAAzsUAAM7GAADPBQAAzwcAAM8JAADPCwAAzw4AAM8PAADPEAAAzxEAAM8SAADPFAAAzxYAAM8XAADPGAAAzxoAAM8bAADPWgAAz1wAAM9eAADPYAAAz2MAAM9kAADPZQAAz2YAAM9nAADPaQAAz2sAAM9sAADPbQAAz28AAM9wAADPuwAAz94AAM/+AADQHgAA0CAAANAiAADQJAAA0CYAANApAADQKgAA0CsAANAuAADQLwAA0DEAANAyAADQNAAA0DcAANA4AADQOQAA0DwAANA9AADQRgAA0FMAANBYAADQWgAA0FwAANBhAADQZAAA0GcAANBpAADQjgAA0LIAANDZAADQ/QAA0QAAANECAADRBAAA0QYAANEIAADRCgAA0QsAANEOAADRGwAA0SwAANEuAADRMAAA0TIAANE0AADRNgAA0TgAANE6AADRPAAA0U0AANFQAADRUwAA0VYAANFZAADRXAAA0V8AANFiAADRZQAA0WcAANGmAADRqAAA0aoAANGsAADRrwAA0bAAANGxAADRsgAA0bMAANG1AADRtwAA0bgAANG5AADRuwAA0bwAANH7AADR/QAA0f8AANIBAADSBAAA0gUAANIGAADSBwAA0ggAANIKAADSDAAA0g0AANIOAADSEAAA0hEAANJQAADSUgAA0lUAANJXAADSWgAA0lsAANJcAADSXQAA0l4AANJgAADSYgAA0mMAANJkAADSZgAA0mcAANJ0AADSdQAA0nYAANJ4AADStwAA0rkAANK7AADSvQAA0sAAANLBAADSwgAA0sMAANLEAADSxgAA0sgAANLJAADSygAA0swAANLNAADTDAAA0w4AANMQAADTEgAA0xUAANMWAADTFwAA0xgAANMZAADTGwAA0x0AANMeAADTHwAA0yEAANMiAADTYQAA02MAANNlAADTZwAA02oAANNrAADTbAAA020AANNuAADTcAAA03IAANNzAADTdAAA03YAANN3AADTtgAA07gAANO6AADTvAAA078AANPAAADTwQAA08IAANPDAADTxQAA08cAANPIAADTyQAA08sAANPMAADUCwAA1A0AANQPAADUEQAA1BQAANQVAADUFgAA1BcAANQYAADUGgAA1BwAANQdAADUHgAA1CAAANQhAADURgAA1GoAANSRAADUtQAA1LgAANS6AADUvAAA1L4AANTAAADUwgAA1MMAANTGAADU0wAA1OIAANTkAADU5gAA1OgAANTqAADU7AAA1O4AANTwAADU/wAA1QIAANUFAADVCAAA1QsAANUOAADVEQAA1RQAANUWAADVVQAA1VcAANVZAADVWwAA1V4AANVfAADVYAAA1WEAANViAADVZAAA1WYAANVnAADVaAAA1WoAANVrAADVqgAA1awAANWuAADVsAAA1bMAANW0AADVtQAA1bYAANW3AADVuQAA1bsAANW8AADVvQAA1b8AANXAAADV/wAA1gEAANYDAADWBQAA1ggAANYJAADWCgAA1gsAANYMAADWDgAA1hAAANYRAADWEgAA1hQAANYVAADWVAAA1lYAANZZAADWWwAA1l4AANZfAADWYAAA1mEAANZiAADWZAAA1mYAANZnAADWaAAA1moAANZrAADWrgAA1tIAANb2AADXGQAA10AAANdgAADXhwAA164AANfOAADX8gAA2BYAANgYAADYGwAA2B0AANgfAADYIQAA2CQAANgnAADYKQAA2CsAANguAADYMAAA2DIAANg1AADYOAAA2DkAANhCAADYTwAA2FIAANhUAADYVwAA2FoAANhcAADYgQAA2KUAANjMAADY8AAA2PMAANj1AADY9wAA2PkAANj7AADY/QAA2P4AANkBAADZDgAA2SEAANkjAADZJQAA2ScAANkpAADZKwAA2S0AANkvAADZMQAA2TMAANlGAADZSQAA2UwAANlPAADZUgAA2VUAANlYAADZWwAA2V4AANlhAADZYwAA2aIAANmkAADZpwAA2akAANmsAADZrQAA2a4AANmvAADZsAAA2bIAANm0AADZtQAA2bYAANm4AADZuQAA2cIAANnDAADZxQAA2gQAANoGAADaCAAA2goAANoNAADaDgAA2g8AANoQAADaEQAA2hMAANoVAADaFgAA2hcAANoZAADaGgAA2lkAANpbAADaXgAA2mAAANpjAADaZAAA2mUAANpmAADaZwAA2mkAANprAADabAAA2m0AANpvAADacAAA2nkAANp6AADafAAA2rsAANq9AADavwAA2sEAANrEAADaxQAA2sYAANrHAADayAAA2soAANrMAADazQAA2s4AANrQAADa0QAA2xAAANsSAADbFQAA2xcAANsaAADbGwAA2xwAANsdAADbHgAA2yAAANsiAADbIwAA2yQAANsmAADbJwAA2zAAANsxAADbMwAA23IAANt0AADbdgAA23gAANt7AADbfAAA230AANt+AADbfwAA24EAANuDAADbhAAA24UAANuHAADbiAAA28cAANvJAADbzAAA284AANvRAADb0gAA29MAANvUAADb1QAA29cAANvZAADb2gAA29sAANvdAADb3gAA2+sAANvsAADb7QAA2+8AANwuAADcMAAA3DIAANw0AADcNwAA3DgAANw5AADcOgAA3DsAANw9AADcPwAA3EAAANxBAADcQwAA3EQAANyDAADchQAA3IgAANyKAADcjQAA3I4AANyPAADckAAA3JEAANyTAADclQAA3JYAANyXAADcmQAA3JoAANysAADcuQAA3MIAANzFAADcyAAA3MoAANzNAADc1gAA3NkAANzcAADc3wAA3OIAANzkAADc6gAA3TUAAN1YAADdeAAA3ZgAAN2aAADdnAAA3Z4AAN2gAADdowAA3aQAAN2lAADdqAAA3akAAN2rAADdrAAA3a4AAN2xAADdsgAA3bMAAN22AADdtwAA3bwAAN3JAADdzgAA3dAAAN3SAADd1wAA3doAAN3dAADd3wAA3gQAAN4oAADeTwAA3nMAAN52AADeeAAA3noAAN58AADefgAA3oAAAN6BAADehAAA3pEAAN6iAADepAAA3qYAAN6oAADeqgAA3qwAAN6uAADesAAA3rIAAN7DAADexgAA3skAAN7MAADezwAA3tIAAN7VAADe2AAA3tsAAN7dAADfHAAA3x4AAN8gAADfIgAA3yUAAN8mAADfJwAA3ygAAN8pAADfKwAA3y0AAN8uAADfLwAA3zEAAN8yAADfcQAA33MAAN91AADfdwAA33oAAN97AADffAAA330AAN9+AADfgAAA34IAAN+DAADfhAAA34YAAN+HAADfxgAA38gAAN/LAADfzQAA39AAAN/RAADf0gAA39MAAN/UAADf1gAA39gAAN/ZAADf2gAA39wAAN/dAADf6gAA3+sAAN/sAADf7gAA4C0AAOAvAADgMQAA4DMAAOA2AADgNwAA4DgAAOA5AADgOgAA4DwAAOA+AADgPwAA4EAAAOBCAADgQwAA4IIAAOCEAADghgAA4IgAAOCLAADgjAAA4I0AAOCOAADgjwAA4JEAAOCTAADglAAA4JUAAOCXAADgmAAA4NcAAODZAADg2wAA4N0AAODgAADg4QAA4OIAAODjAADg5AAA4OYAAODoAADg6QAA4OoAAODsAADg7QAA4SwAAOEuAADhMAAA4TIAAOE1AADhNgAA4TcAAOE4AADhOQAA4TsAAOE9AADhPgAA4T8AAOFBAADhQgAA4YEAAOGDAADhhQAA4YcAAOGKAADhiwAA4YwAAOGNAADhjgAA4ZAAAOGSAADhkwAA4ZQAAOGWAADhlwAA4bwAAOHgAADiBwAA4isAAOIuAADiMAAA4jIAAOI0AADiNgAA4jgAAOI5AADiPAAA4kkAAOJYAADiWgAA4lwAAOJeAADiYAAA4mIAAOJkAADiZgAA4nUAAOJ4AADiewAA4n4AAOKBAADihAAA4ocAAOKKAADijAAA4ssAAOLNAADizwAA4tEAAOLUAADi1QAA4tYAAOLXAADi2AAA4toAAOLcAADi3QAA4t4AAOLgAADi4QAA4yAAAOMiAADjJAAA4yYAAOMpAADjKgAA4ysAAOMsAADjLQAA4y8AAOMxAADjMgAA4zMAAOM1AADjNgAA43UAAON3AADjeQAA43sAAON+AADjfwAA44AAAOOBAADjggAA44QAAOOGAADjhwAA44gAAOOKAADjiwAA48oAAOPMAADjzgAA49AAAOPTAADj1AAA49UAAOPWAADj1wAA49kAAOPbAADj3AAA490AAOPfAADj4AAA5B8AAOQhAADkIwAA5CUAAOQoAADkKQAA5CoAAOQrAADkLAAA5C4AAOQwAADkMQAA5DIAAOQ0AADkNQAA5HQAAOR2AADkeAAA5HoAAOR9AADkfgAA5H8AAOSAAADkgQAA5IMAAOSFAADkhgAA5IcAAOSJAADkigAA5MkAAOTLAADkzQAA5M8AAOTSAADk0wAA5NQAAOTVAADk1gAA5NgAAOTaAADk2wAA5NwAAOTeAADk3wAA5SoAAOVNAADlbQAA5Y0AAOWPAADlkQAA5ZMAAOWVAADlmAAA5ZkAAOWaAADlnQAA5Z4AAOWgAADloQAA5aMAAOWmAADlpwAA5agAAOWrAADlrAAA5bEAAOW+AADlwwAA5cUAAOXHAADlzAAA5c8AAOXSAADl1AAA5fkAAOYdAADmRAAA5mgAAOZrAADmbQAA5m8AAOZxAADmcwAA5nUAAOZ2AADmeQAA5oYAAOaXAADmmQAA5psAAOadAADmnwAA5qEAAOajAADmpQAA5qcAAOa4AADmuwAA5r4AAObBAADmxAAA5scAAObKAADmzQAA5tAAAObSAADnEQAA5xMAAOcVAADnFwAA5xoAAOcbAADnHAAA5x0AAOceAADnIAAA5yIAAOcjAADnJAAA5yYAAOcnAADnZgAA52gAAOdqAADnbAAA528AAOdwAADncQAA53IAAOdzAADndQAA53cAAOd4AADneQAA53sAAOd8AADnuwAA570AAOfAAADnwgAA58UAAOfGAADnxwAA58gAAOfJAADnywAA580AAOfOAADnzwAA59EAAOfSAADn3wAA5+AAAOfhAADn4wAA6CIAAOgkAADoJgAA6CgAAOgrAADoLAAA6C0AAOguAADoLwAA6DEAAOgzAADoNAAA6DUAAOg3AADoOAAA6HcAAOh5AADoewAA6H0AAOiAAADogQAA6IIAAOiDAADohAAA6IYAAOiIAADoiQAA6IoAAOiMAADojQAA6MwAAOjOAADo0AAA6NIAAOjVAADo1gAA6NcAAOjYAADo2QAA6NsAAOjdAADo3gAA6N8AAOjhAADo4gAA6SEAAOkjAADpJQAA6ScAAOkqAADpKwAA6SwAAOktAADpLgAA6TAAAOkyAADpMwAA6TQAAOk2AADpNwAA6XYAAOl4AADpegAA6XwAAOl/AADpgAAA6YEAAOmCAADpgwAA6YUAAOmHAADpiAAA6YkAAOmLAADpjAAA6bEAAOnVAADp/AAA6iAAAOojAADqJQAA6icAAOopAADqKwAA6i0AAOouAADqMQAA6j4AAOpNAADqTwAA6lEAAOpTAADqVQAA6lcAAOpZAADqWwAA6moAAOptAADqcAAA6nMAAOp2AADqeQAA6nwAAOp/AADqgQAA6sAAAOrCAADqxAAA6sYAAOrJAADqygAA6ssAAOrMAADqzQAA6s8AAOrRAADq0gAA6tMAAOrVAADq1gAA6xUAAOsXAADrGQAA6xsAAOseAADrHwAA6yAAAOshAADrIgAA6yQAAOsmAADrJwAA6ygAAOsqAADrKwAA62oAAOtsAADrbgAA63AAAOtzAADrdAAA63UAAOt2AADrdwAA63kAAOt7AADrfAAA630AAOt/AADrgAAA678AAOvBAADrwwAA68UAAOvIAADryQAA68oAAOvLAADrzAAA684AAOvQAADr0QAA69IAAOvUAADr1QAA7BQAAOwWAADsGAAA7BoAAOwdAADsHgAA7B8AAOwgAADsIQAA7CMAAOwlAADsJgAA7CcAAOwpAADsKgAA7GkAAOxrAADsbQAA7G8AAOxyAADscwAA7HQAAOx1AADsdgAA7HgAAOx6AADsewAA7HwAAOx+AADsfwAA7L4AAOzAAADswgAA7MQAAOzHAADsyAAA7MkAAOzKAADsywAA7M0AAOzPAADs0AAA7NEAAOzTAADs1AAA7R8AAO1CAADtYgAA7YIAAO2EAADthgAA7YgAAO2KAADtjQAA7Y4AAO2PAADtkgAA7ZMAAO2VAADtlgAA7ZgAAO2aAADtmwAA7ZwAAO2fAADtoAAA7aUAAO2yAADttwAA7bkAAO27AADtwAAA7cMAAO3GAADtyAAA7e0AAO4RAADuOAAA7lwAAO5fAADuYQAA7mMAAO5lAADuZwAA7mkAAO5qAADubQAA7noAAO6LAADujQAA7o8AAO6RAADukwAA7pUAAO6XAADumQAA7psAAO6sAADurwAA7rIAAO61AADuuAAA7rsAAO6+AADuwQAA7sQAAO7GAADvBQAA7wcAAO8JAADvCwAA7w4AAO8PAADvEAAA7xEAAO8SAADvFAAA7xYAAO8XAADvGAAA7xoAAO8bAADvWgAA71wAAO9eAADvYAAA72MAAO9kAADvZQAA72YAAO9nAADvaQAA72sAAO9s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AAEAngABAKAAAQCjAAEApAABAKUAAQCmAAEApwABAKkAAQCrAAEArAABAK0AAQCvAAEAsAABAO8AAQDxAAEA8wABAPUAAQD4AAEA+QABAPoAAQD7AAEA/AABAP4AAQEAAAEBAQABAQIAAQEEAAEBBQABAUQAAQFGAAEBSQABAUsAAQFOAAEBTwABAVAAAQFRAAEBUgABAVQAAQFWAAEBVwABAVgAAQFaAAEBWwABAWgAAQFpAAEBagABAWwAAQGrAAEBrQABAa8AAQGxAAEBtAABAbUAAQG2AAEBtwABAbgAAQG6AAEBvAABAb0AAQG+AAEBwAABAcEAAQIAAAECAgABAgQAAQIGAAECCQABAgoAAQILAAECDAABAg0AAQIPAAECEQABAhIAAQITAAECFQABAhYAAQJVAAECVwABAlkAAQJbAAECXgABAl8AAQJgAAECYQABAmIAAQJkAAECZgABAmcAAQJoAAECagABAmsAAQKqAAECrAABAq4AAQKwAAECswABArQAAQK1AAECtgABArcAAQK5AAECuwABArwAAQK9AAECvwABAsAAAQL/AAEDAQABAwMAAQMFAAEDCAABAwkAAQMKAAEDCwABAwwAAQMOAAEDEAABAxEAAQMSAAEDFAABAxUAAQM6AAEDXgABA4UAAQOpAAEDrAABA64AAQOwAAEDsgABA7QAAQO2AAEDtwABA7oAAQPHAAED1gABA9gAAQPaAAED3AABA94AAQPgAAED4gABA+QAAQPzAAED9gABA/kAAQP8AAED/wABBAIAAQQFAAEECAABBAoAAQRJAAEESwABBE0AAQRPAAEEUgABBFMAAQRUAAEEVQABBFYAAQRYAAEEWgABBFsAAQRcAAEEXgABBF8AAQSeAAEEoAABBKIAAQSkAAEEpwABBKgAAQSpAAEEqgABBKsAAQStAAEErwABBLAAAQSxAAEEswABBLQAAQTzAAEE9QABBPcAAQT5AAEE/AABBP0AAQT+AAEE/wABBQAAAQUCAAEFBAABBQUAAQUGAAEFCAABBQkAAQVIAAEFSgABBUwAAQVOAAEFUQABBVIAAQVTAAEFVAABBVUAAQVXAAEFWQABBVoAAQVbAAEFXQABBV4AAQWdAAEFnwABBaEAAQWjAAEFpgABBacAAQWoAAEFqQABBaoAAQWsAAEFrgABBa8AAQWw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AAERPgABEUEAARFCAAERQwABEUQAARFFAAERRwABEUkAARFKAAERSwABEU0AARFOAAERWwABEVwAARFdAAERXwABEZ4AARGgAAERogABEaQAARGnAAERqAABEakAARGqAAERqwABEa0AARGvAAERsAABEbEAARGzAAERtAABEfMAARH1AAER9wABEfkAARH8AAER/QABEf4AARH/AAESAAABEgIAARIEAAESBQABEgYAARIIAAESCQABEkgAARJKAAESTAABEk4AARJRAAESUgABElMAARJUAAESVQABElcAARJZAAESWgABElsAARJdAAESXgABEp0AARKfAAESoQABEqMAARKmAAESpwABEqgAARKpAAESqgABEqwAARKuAAESrwABErAAARKyAAESswABEvIAARL0AAES9gABEvgAARL7AAES/AABEv0AARL+AAES/wABEwEAARMDAAETBAABEwUAARMHAAETCAABEy0AARNRAAETeAABE5wAAROfAAEToQABE6MAAROlAAETpwABE6kAAROqAAETrQABE7oAARPJAAETywABE80AARPPAAET0QABE9MAARPVAAET1wABE+YAARPpAAET7AABE+8AARPyAAET9QABE/gAARP7AAET/QABFDwAARQ+AAEUQAABFEIAARRFAAEURgABFEcAARRIAAEUSQABFEsAARRNAAEUTgABFE8AARRRAAEUUgABFJEAARSTAAEUlQABFJcAARSaAAEUmwABFJwAARSdAAEUngABFKAAARSiAAEUowABFKQAARSmAAEUpwABFOYAARToAAEU6gABFOwAARTvAAEU8AABFPEAARTyAAEU8wABFPUAART3AAEU+AABFPkAART7AAEU/AABFTsAARU9AAEVPwABFUEAARVEAAEVRQABFUYAARVHAAEVSAABFUoAARVMAAEVTQABFU4AARVQAAEVUQABFZAAARWSAAEVlAABFZYAARWZAAEVmgABFZsAARWcAAEVnQABFZ8AARWhAAEVogABFaMAARWlAAEVpgABFeUAARXnAAEV6QABFesAARXuAAEV7wABFfAAARXxAAEV8gABFfQAARX2AAEV9wABFfgAARX6AAEV+wABFjoAARY8AAEWPgABFkAAARZDAAEWRAABFkUAARZGAAEWRwABFkkAARZLAAEWTAABFk0AARZPAAEWUAABFpsAARa+AAEW3gABFv4AARcAAAEXAgABFwQAARcGAAEXCQABFwoAARcLAAEXDgABFw8AARcRAAEXEgABFxQAARcXAAEXGAABFxkAARccAAEXHQABFyYAARczAAEXOAABFzoAARc8AAEXQQABF0QAARdHAAEXSQABF24AAReSAAEXuQABF90AARfgAAEX4gABF+QAARfmAAEX6AABF+oAARfrAAEX7gABF/sAARgMAAEYDgABGBAAARgSAAEYFAABGBYAARgYAAEYGgABGBwAARgtAAEYMAABGDMAARg2AAEYOQABGDwAARg/AAEYQgABGEUAARhHAAEYhgABGIgAARiKAAEYjAABGI8AARiQAAEYkQABGJIAARiTAAEYlQABGJcAARiYAAEYmQABGJsAARicAAEY2wABGN0AARjfAAEY4QABGOQAARjlAAEY5gABGOcAARjoAAEY6gABGOwAARjtAAEY7gABGPAAARjxAAEZMAABGTIAARk1AAEZNwABGToAARk7AAEZPAABGT0AARk+AAEZQAABGUIAARlDAAEZRAABGUYAARlHAAEZVAABGVUAARlWAAEZWAABGZcAARmZAAEZmwABGZ0AARmgAAEZoQABGaIAARmjAAEZpAABGaYAARmoAAEZqQABGaoAARmsAAEZrQABGewAARnuAAEZ8AABGfIAARn1AAEZ9gABGfcAARn4AAEZ+QABGfsAARn9AAEZ/gABGf8AARoBAAEaAgABGkEAARpDAAEaRQABGkcAARpKAAEaSwABGkwAARpNAAEaTgABGlAAARpSAAEaUwABGlQAARpWAAEaVwABGpYAARqYAAEamgABGpwAARqfAAEaoAABGqEAARqiAAEaowABGqUAARqnAAEaqAABGqkAARqrAAEarAABGusAARrtAAEa7wABGvEAARr0AAEa9QABGvYAARr3AAEa+AABGvoAARr8AAEa/QABGv4AARsAAAEbAQABGyYAARtKAAEbcQABG5UAARuYAAEbmgABG5wAARueAAEboAABG6IAARujAAEbpgABG7MAARvCAAEbxAABG8YAARvIAAEbygABG8wAARvOAAEb0AABG98AARviAAEb5QABG+gAARvrAAEb7gABG/EAARv0AAEb9gABHDUAARw3AAEcOgABHDwAARw/AAEcQAABHEEAARxCAAEcQwABHEUAARxHAAEcSAABHEkAARxLAAEcTAABHIsAARyNAAEcjwABHJEAARyUAAEclQABHJYAARyXAAEcmAABHJoAARycAAEcnQABHJ4AARygAAEcoQABHOAAARziAAEc5AABHOYAARzpAAEc6gABHOsAARzsAAEc7QABHO8AARzxAAEc8gABHPMAARz1AAEc9gABHTUAAR03AAEdOgABHTwAAR0/AAEdQAABHUEAAR1CAAEdQwABHUUAAR1HAAEdSAABHUkAAR1LAAEdTAABHYsAAR2NAAEdjwABHZEAAR2UAAEdlQABHZYAAR2XAAEdmAABHZoAAR2cAAEdnQABHZ4AAR2gAAEdoQABHeAAAR3iAAEd5AABHeYAAR3pAAEd6gABHesAAR3sAAEd7QABHe8AAR3xAAEd8gABHfMAAR31AAEd9gABHjUAAR43AAEeOQABHjsAAR4+AAEePwABHkAAAR5BAAEeQgABHkQAAR5GAAEeRwABHkgAAR5KAAEeSwABHpYAAR65AAEe2QABHvkAAR77AAEe/QABHv8AAR8BAAEfBAABHwUAAR8GAAEfCQABHwoAAR8MAAEfDQABHw8AAR8SAAEfEwABHxQAAR8XAAEfGAABHx0AAR8qAAEfLwABHzEAAR8zAAEfOAABHzsAAR8+AAEfQAABH2UAAR+JAAEfsAABH9QAAR/XAAEf2QABH9sAAR/dAAEf3wABH+EAAR/iAAEf5QABH/IAASADAAEgBQABIAcAASAJAAEgCwABIA0AASAPAAEgEQABIBMAASAkAAEgJwABICoAASAtAAEgMAABIDMAASA2AAEgOQABIDwAASA+AAEgfQABIH8AASCBAAEggwABIIYAASCHAAEgiAABIIkAASCKAAEgjAABII4AASCPAAEgkAABIJIAASCTAAEg0gABINQAASDWAAEg2AABINsAASDcAAEg3QABIN4AASDfAAEg4QABIOMAASDkAAEg5QABIOcAASDoAAEhJwABISkAASEsAAEhLgABITEAASEyAAEhMwABITQAASE1AAEhNwABITkAASE6AAEhOwABIT0AASE+AAEhSwABIUwAASFNAAEhTwABIY4AASGQAAEhkgABIZQAASGXAAEhmAABIZkAASGaAAEhmwABIZ0AASGfAAEhoAABIaEAASGjAAEhpAABIeMAASHlAAEh5wABIekAASHsAAEh7QABIe4AASHvAAEh8AABIfIAASH0AAEh9QABIfYAASH4AAEh+QABIjgAASI6AAEiPAABIj4AASJBAAEiQgABIkMAASJEAAEiRQABIkcAASJJAAEiSgABIksAASJNAAEiTgABIo0AASKPAAEikQABIpMAASKWAAEilwABIpgAASKZAAEimgABIpwAASKeAAEinwABIqAAASKiAAEiowABIuIAASLkAAEi5gABIugAASLrAAEi7AABIu0AASLuAAEi7wABIvEAASLzAAEi9AABIvUAASL3AAEi+AABIx0AASNBAAEjaAABI4wAASOPAAEjkQABI5MAASOVAAEjlwABI5kAASOaAAEjnQABI6oAASO5AAEjuwABI70AASO/AAEjwQABI8MAASPFAAEjxwABI9YAASPZAAEj3AABI98AASPiAAEj5QABI+gAASPrAAEj7QABJCwAASQuAAEkMAABJDIAASQ1AAEkNgABJDcAASQ4AAEkOQABJDsAASQ9AAEkPgABJD8AASRBAAEkQgABJIEAASSDAAEkhQABJIcAASSKAAEkiwABJIwAASSNAAEkjgABJJAAASSSAAEkkwABJJQAASSWAAEklwABJNYAASTYAAEk2gABJNwAASTfAAEk4AABJOEAASTiAAEk4wABJOUAASTnAAEk6AABJOkAASTrAAEk7AABJSsAASUtAAElLwABJTEAASU0AAElNQABJTYAASU3AAElOAABJToAASU8AAElPQABJT4AASVAAAElQQABJYAAASWCAAElhAABJYYAASWJAAEligABJYsAASWMAAEljQABJY8AASWRAAElkgABJZMAASWVAAEllgABJdUAASXXAAEl2QABJdsAASXeAAEl3wABJeAAASXhAAEl4gABJeQAASXmAAEl5wABJegAASXqAAEl6wABJioAASYsAAEmLgABJjAAASYzAAEmNAABJjUAASY2AAEmNwABJjkAASY7AAEmPAABJj0AASY/AAEmQAABJosAASauAAEmzgABJu4AASbwAAEm8gABJvQAASb2AAEm+QABJvoAASb7AAEm/gABJv8AAScBAAEnAgABJwQAAScHAAEnCAABJwkAAScMAAEnDQABJxIAAScfAAEnJAABJyYAAScoAAEnLQABJzAAASczAAEnNQABJ1oAASd+AAEnpQABJ8kAASfMAAEnzgABJ9AAASfSAAEn1AABJ9YAASfXAAEn2gABJ+cAASf4AAEn+gABJ/wAASf+AAEoAAABKAIAASgEAAEoBgABKAgAASgZAAEoHAABKB8AASgiAAEoJQABKCgAASgrAAEoLgABKDEAASgzAAEocgABKHQAASh2AAEoeAABKHsAASh8AAEofQABKH4AASh/AAEogQABKIMAASiEAAEohQABKIcAASiIAAEoxwABKMkAASjLAAEozQABKNAAASjRAAEo0gABKNMAASjUAAEo1gABKNgAASjZAAEo2gABKNwAASjdAAEpHAABKR4AASkhAAEpIwABKSYAASknAAEpKAABKSkAASkqAAEpLAABKS4AASkvAAEpMAABKTIAASkzAAEpQAABKUEAASlCAAEpRAABKYMAASmFAAEphwABKYkAASmMAAEpjQABKY4AASmPAAEpkAABKZIAASmUAAEplQABKZYAASmYAAEpmQABKdgAASnaAAEp3AABKd4AASnhAAEp4gABKeMAASnkAAEp5QABKecAASnpAAEp6gABKesAASntAAEp7gABKi0AASovAAEqMQABKjMAASo2AAEqNwABKjgAASo5AAEqOgABKjwAASo+AAEqPwABKkAAASpCAAEqQwABKoIAASqEAAEqhgABKogAASqLAAEqjAABKo0AASqOAAEqjwABKpEAASqTAAEqlAABKpUAASqXAAEqmAABKtcAASrZAAEq2wABKt0AASrgAAEq4QABKuIAASrjAAEq5AABKuYAASroAAEq6QABKuoAASrsAAEq7QABKxIAASs2AAErXQABK4EAASuEAAErhgABK4gAASuKAAErjAABK44AASuPAAErkgABK58AASuuAAErsAABK7IAASu0AAErtgABK7gAASu6AAErvAABK8sAASvOAAEr0QABK9QAASvXAAEr2gABK90AASvgAAEr4gABLCEAASwjAAEsJQABLCcAASwqAAEsKwABLCwAASwtAAEsLgABLDAAASwyAAEsMwABLDQAASw2AAEsNwABLHYAASx4AAEsegABLHwAASx/AAEsgAABLIEAASyCAAEsgwABLIUAASyHAAEsiAABLIkAASyLAAEsjAABLMsAASzNAAEszwABLNEAASzUAAEs1QABLNYAASzXAAEs2AABLNoAASzcAAEs3QABLN4AASzgAAEs4QABLSAAAS0iAAEtJAABLSYAAS0pAAEtKgABLSsAAS0sAAEtLQABLS8AAS0xAAEtMgABLTMAAS01AAEtNgABLXUAAS13AAEteQABLXsAAS1+AAEtfwABLYAAAS2BAAEtggABLYQAAS2GAAEthwABLYgAAS2KAAEtiwABLcoAAS3MAAEtzgABLdAAAS3TAAEt1AABLdUAAS3WAAEt1wABLdkAAS3bAAEt3AABLd0AAS3fAAEt4AABLh8AAS4hAAEuIwABLiUAAS4oAAEuKQABLioAAS4rAAEuLAABLi4AAS4wAAEuMQABLjIAAS40AAEuNQABLoAAAS6jAAEuwwABLuMAAS7lAAEu5wABLukAAS7rAAEu7gABLu8AAS7wAAEu8wABLvQAAS72AAEu9wABLvkAAS78AAEu/QABLv4AAS8BAAEvAgABLwcAAS8UAAEvGQABLxsAAS8dAAEvIgABLyUAAS8oAAEvKgABL08AAS9zAAEvmgABL74AAS/BAAEvwwABL8UAAS/HAAEvyQABL8sAAS/MAAEvzwABL9wAAS/tAAEv7wABL/EAAS/zAAEv9QABL/cAAS/5AAEv+wABL/0AATAOAAEwEQABMBQAATAXAAEwGgABMB0AATAgAAEwIwABMCYAATAoAAEwZwABMGkAATBrAAEwbQABMHAAATBxAAEwcgABMHMAATB0AAEwdgABMHgAATB5AAEwegABMHwAATB9AAEwvAABML4AATDAAAEwwgABMMUAATDGAAEwxwABMMgAATDJAAEwywABMM0AATDOAAEwzwABMNEAATDSAAExEQABMRMAATEWAAExGAABMRsAATEcAAExHQABMR4AATEfAAExIQABMSMAATEkAAExJQABMScAATEoAAExNQABMTYAATE3AAExOQABMXgAATF6AAExfAABMX4AATGBAAExggABMYMAATGEAAExhQABMYcAATGJAAExigABMYsAATGNAAExjgABMc0AATHPAAEx0QABMdMAATHWAAEx1wABMdgAATHZAAEx2gABMdwAATHeAAEx3wABMeAAATHiAAEx4wABMiIAATIkAAEyJgABMigAATIrAAEyLAABMi0AATIuAAEyLwABMjEAATIzAAEyNAABMjUAATI3AAEyOAABMncAATJ5AAEyewABMn0AATKAAAEygQABMoIAATKDAAEyhAABMoYAATKIAAEyiQABMooAATKMAAEyjQABMswAATLOAAEy0AABMtIAATLVAAEy1gABMtcAATLYAAEy2QABMtsAATLdAAEy3gABMt8AATLhAAEy4gABMwcAATMrAAEzUgABM3YAATN5AAEzewABM30AATN/AAEzgQABM4MAATOEAAEzhwABM5QAATOjAAEzpQABM6cAATOpAAEzqwABM60AATOvAAEzsQABM8AAATPDAAEzxgABM8kAATPMAAEzzwABM9IAATPVAAEz1wABNBYAATQYAAE0GgABNBwAATQfAAE0IAABNCEAATQiAAE0IwABNCUAATQnAAE0KAABNCkAATQrAAE0LAABNGsAATRtAAE0bwABNHEAATR0AAE0dQABNHYAATR3AAE0eAABNHoAATR8AAE0fQABNH4AATSAAAE0gQABNMAAATTCAAE0xAABNMYAATTJAAE0ygABNMsAATTMAAE0zQABNM8AATTRAAE00gABNNMAATTVAAE01gABNRUAATUXAAE1GQABNRsAATUeAAE1HwABNSAAATUhAAE1IgABNSQAATUmAAE1JwABNSgAATUqAAE1KwABNWoAATVsAAE1bgABNXAAATVzAAE1dAABNXUAATV2AAE1dwABNXkAATV7AAE1fAABNX0AATV/AAE1gAABNb8AATXBAAE1wwABNcUAATXIAAE1yQABNcoAATXLAAE1zAABNc4AATXQAAE10QABNdIAATXUAAE11QABNhQAATYWAAE2GAABNhoAATYdAAE2HgABNh8AATYgAAE2IQABNiMAATYlAAE2JgABNicAATYpAAE2KgABNnUAATaYAAE2uAABNtgAATbaAAE23AABNt4AATbgAAE24wABNuQAATblAAE26AABNukAATbrAAE27AABNu4AATbxAAE28gABNvMAATb2AAE29wABNvwAATcJAAE3DgABNxAAATcSAAE3FwABNxoAATcdAAE3HwABN0QAATdoAAE3jwABN7MAATe2AAE3uAABN7oAATe8AAE3vgABN8AAATfBAAE3xAABN9EAATfiAAE35AABN+YAATfoAAE36gABN+wAATfuAAE38AABN/IAATgDAAE4BgABOAkAATgMAAE4DwABOBIAATgVAAE4GAABOBsAATgdAAE4XAABOF4AAThgAAE4YgABOGUAAThmAAE4ZwABOGgAAThpAAE4awABOG0AAThuAAE4bwABOHEAAThyAAE4sQABOLMAATi1AAE4twABOLoAATi7AAE4vAABOL0AATi+AAE4wAABOMIAATjDAAE4xAABOMYAATjHAAE5BgABOQgAATkLAAE5DQABORAAATkRAAE5EgABORMAATkUAAE5FgABORgAATkZAAE5GgABORwAATkdAAE5KgABOSsAATksAAE5LgABOW0AATlvAAE5cQABOXMAATl2AAE5dwABOXgAATl5AAE5egABOXwAATl+AAE5fwABOYAAATmCAAE5gwABOcIAATnEAAE5xgABOcgAATnLAAE5zAABOc0AATnOAAE5zwABOdEAATnTAAE51AABOdUAATnXAAE52AABOhcAAToZAAE6GwABOh0AATogAAE6IQABOiIAATojAAE6JAABOiYAATooAAE6KQABOioAATosAAE6LQABOmwAATpuAAE6cAABOnIAATp1AAE6dgABOncAATp4AAE6eQABOnsAATp9AAE6fgABOn8AATqBAAE6ggABOsEAATrDAAE6xQABOscAATrKAAE6ywABOswAATrNAAE6zgABOtAAATrSAAE60wABOtQAATrWAAE61wABOvwAATsgAAE7RwABO2sAATtuAAE7cAABO3IAATt0AAE7dgABO3gAATt5AAE7fAABO4kAATuYAAE7mgABO5wAATueAAE7oAABO6IAATukAAE7pgABO7UAATu4AAE7uwABO74AATvBAAE7xAABO8cAATvKAAE7zAABPAsAATwNAAE8DwABPBEAATwUAAE8FQABPBYAATwXAAE8GAABPBoAATwcAAE8HQABPB4AATwgAAE8IQABPGAAATxiAAE8ZAABPGYAATxpAAE8agABPGsAATxsAAE8bQABPG8AATxxAAE8cgABPHMAATx1AAE8dgABPLUAATy3AAE8uQABPLsAATy+AAE8vwABPMAAATzBAAE8wgABPMQAATzGAAE8xwABPMgAATzKAAE8ywABPQoAAT0MAAE9DwABPREAAT0UAAE9FQABPRYAAT0XAAE9GAABPRoAAT0cAAE9HQABPR4AAT0gAAE9IQABPWAAAT1iAAE9ZAABPWYAAT1pAAE9agABPWsAAT1sAAE9bQABPW8AAT1xAAE9cgABPXMAAT11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AAFklQABZNQAAWTWAAFk2AABZNoAAWTdAAFk3gABZN8AAWTgAAFk4QABZOMAAWTlAAFk5gABZOcAAWTpAAFk6gABZSkAAWUrAAFlLQABZS8AAWUyAAFlMwABZTQAAWU1AAFlNgABZTgAAWU6AAFlOwABZTwAAWU+AAFlPwABZX4AAWWAAAFlggABZYQAAWWHAAFliAABZYkAAWWKAAFliwABZY0AAWWPAAFlkAABZZEAAWWTAAFllAABZdMAAWXVAAFl1wABZdkAAWXcAAFl3QABZd4AAWXfAAFl4AABZeIAAWXkAAFl5QABZeYAAWXoAAFl6QABZjQAAWZXAAFmdwABZpcAAWaZAAFmmwABZp0AAWafAAFmogABZqMAAWakAAFmpwABZqgAAWaqAAFmqwABZq0AAWawAAFmsQABZrIAAWa1AAFmtgABZrsAAWbIAAFmzQABZs8AAWbRAAFm1gABZtkAAWbcAAFm3gABZwMAAWcnAAFnTgABZ3IAAWd1AAFndwABZ3kAAWd7AAFnfQABZ38AAWeAAAFngwABZ5AAAWehAAFnowABZ6UAAWenAAFnqQABZ6sAAWetAAFnrwABZ7EAAWfCAAFnxQABZ8gAAWfLAAFnzgABZ9EAAWfUAAFn1wABZ9oAAWfcAAFoGwABaB0AAWgfAAFoIQABaCQAAWglAAFoJgABaCcAAWgoAAFoKgABaCwAAWgtAAFoLgABaDAAAWgxAAFocAABaHIAAWh0AAFodgABaHkAAWh6AAFoewABaHwAAWh9AAFofwABaIEAAWiCAAFogwABaIUAAWiGAAFoxQABaMcAAWjKAAFozAABaM8AAWjQAAFo0QABaNIAAWjTAAFo1QABaNcAAWjYAAFo2QABaNsAAWjcAAFo6QABaOoAAWjrAAFo7QABaSwAAWkuAAFpMAABaTIAAWk1AAFpNgABaTcAAWk4AAFpOQABaTsAAWk9AAFpPgABaT8AAWlBAAFpQgABaYEAAWmDAAFphQABaYcAAWmKAAFpiwABaYwAAWmNAAFpjgABaZAAAWmSAAFpkwABaZQAAWmWAAFplwABadYAAWnYAAFp2gABadwAAWnfAAFp4AABaeEAAWniAAFp4wABaeUAAWnnAAFp6AABaekAAWnrAAFp7AABaisAAWotAAFqLwABajEAAWo0AAFqNQABajYAAWo3AAFqOAABajoAAWo8AAFqPQABaj4AAWpAAAFqQQABaoAAAWqCAAFqhAABaoYAAWqJAAFqigABaosAAWqMAAFqjQABao8AAWqRAAFqkgABapMAAWqVAAFqlgABarsAAWrfAAFrBgABayoAAWstAAFrLwABazEAAWszAAFrNQABazcAAWs4AAFrOwABa0gAAWtXAAFrWQABa1sAAWtdAAFrXwABa2EAAWtjAAFrZQABa3QAAWt3AAFregABa30AAWuAAAFrgwABa4YAAWuJAAFriwABa8oAAWvMAAFrzgABa9AAAWvTAAFr1AABa9UAAWvWAAFr1wABa9kAAWvbAAFr3AABa90AAWvfAAFr4AABbB8AAWwhAAFsIwABbCUAAWwoAAFsKQABbCoAAWwrAAFsLAABbC4AAWwwAAFsMQABbDIAAWw0AAFsNQABbHQAAWx2AAFseAABbHoAAWx9AAFsfgABbH8AAWyAAAFsgQABbIMAAWyFAAFshgABbIcAAWyJAAFsigABbMkAAWzLAAFszgABbNAAAWzTAAFs1AABbNUAAWzWAAFs1wABbNkAAWzbAAFs3AABbN0AAWzfAAFs4AABbR8AAW0hAAFtIwABbSUAAW0oAAFtKQABbSoAAW0rAAFtLAABbS4AAW0wAAFtMQABbTIAAW00AAFtNQABbXQAAW12AAFteQABbXsAAW1+AAFtfwABbYAAAW2BAAFtggABbYQAAW2GAAFthwABbYgAAW2KAAFtiwABbbIAAW3xAAFt8wABbfUAAW33AAFt+gABbfsAAW38AAFt/QABbf4AAW4AAAFuAgABbgMAAW4EAAFuBgABbgcAAW4QAAFuEQABbhMAAW5SAAFuVAABblYAAW5YAAFuWwABblwAAW5dAAFuXgABbl8AAW5hAAFuYwABbmQAAW5lAAFuZwABbmgAAW6nAAFuqQABbqsAAW6tAAFusAABbrEAAW6yAAFuswABbrQAAW62AAFuuAABbrkAAW66AAFuvAABbr0AAW78AAFu/gABbwAAAW8CAAFvBQABbwYAAW8HAAFvCAABbwkAAW8LAAFvDQABbw4AAW8PAAFvEQABbxIAAW9RAAFvUwABb1UAAW9XAAFvWgABb1sAAW9cAAFvXQABb14AAW9gAAFvYgABb2MAAW9kAAFvZgABb2cAAW+mAAFvqAABb6oAAW+sAAFvrwABb7AAAW+xAAFvsgABb7MAAW+1AAFvtwABb7gAAW+5AAFvuwABb7wAAXAHAAFwKgABcEoAAXBqAAFwbAABcG4AAXBwAAFwcgABcHQAAXB1AAFwdgABcHkAAXB6AAFwfAABcH0AAXB/AAFwgQABcIIAAXCDAAFwhgABcIcAAXCQAAFwnQABcKIAAXCkAAFwpgABcKsAAXCuAAFwsQABcLMAAXDYAAFw/AABcSMAAXFHAAFxSgABcUwAAXFOAAFxUAABcVIAAXFUAAFxVQABcVgAAXFlAAFxdgABcXgAAXF6AAFxfAABcX4AAXGAAAFxggABcYQAAXGGAAFxlwABcZoAAXGdAAFxoAABcaMAAXGmAAFxqQABcawAAXGvAAFxsQABcfAAAXHyAAFx9AABcfYAAXH5AAFx+gABcfsAAXH8AAFx/QABcf8AAXIBAAFyAgABcgMAAXIFAAFyBgABckUAAXJHAAFySQABcksAAXJOAAFyTwABclAAAXJRAAFyUgABclQAAXJWAAFyVwABclgAAXJaAAFyWwABcpoAAXKcAAFynwABcqEAAXKkAAFypQABcqYAAXKnAAFyqAABcqoAAXKsAAFyrQABcq4AAXKwAAFysQABcr4AAXK/AAFywAABcsIAAXMBAAFzAwABcwUAAXMHAAFzCgABcwsAAXMMAAFzDQABcw4AAXMQAAFzEgABcxMAAXMUAAFzFgABcxcAAXNWAAFzWAABc1oAAXNcAAFzXwABc2AAAXNhAAFzYgABc2MAAXNlAAFzZwABc2gAAXNpAAFzawABc2wAAXOrAAFzrQABc68AAXOxAAFztAABc7UAAXO2AAFztwABc7gAAXO6AAFzvAABc70AAXO+AAFzwAABc8EAAXQAAAF0AgABdAQAAXQGAAF0CQABdAoAAXQLAAF0DAABdA0AAXQPAAF0EQABdBIAAXQTAAF0FQABdBYAAXRVAAF0VwABdFkAAXRbAAF0XgABdF8AAXRgAAF0YQABdGIAAXRkAAF0ZgABdGcAAXRoAAF0agABdGsAAXSQAAF0tAABdNsAAXT/AAF1AgABdQQAAXUGAAF1CAABdQoAAXUMAAF1DQABdRAAAXUdAAF1LAABdS4AAXUwAAF1MgABdTQAAXU2AAF1OAABdToAAXVJAAF1TAABdU8AAXVSAAF1VQABdVgAAXVbAAF1XgABdWAAAXWfAAF1oQABdaMAAXWlAAF1qAABdakAAXWqAAF1qwABdawAAXWuAAF1sAABdbEAAXWyAAF1tAABdbUAAXX0AAF19gABdfgAAXX6AAF1/QABdf4AAXX/AAF2AAABdgEAAXYDAAF2BQABdgYAAXYHAAF2CQABdgoAAXZJAAF2SwABdk0AAXZPAAF2UgABdlMAAXZUAAF2VQABdlYAAXZYAAF2WgABdlsAAXZcAAF2XgABdl8AAXaeAAF2oAABdqMAAXalAAF2qAABdqkAAXaqAAF2qwABdqwAAXauAAF2sAABdrEAAXayAAF2tAABdrUAAXb0AAF29gABdvgAAXb6AAF2/QABdv4AAXb/AAF3AAABdwEAAXcDAAF3BQABdwYAAXcHAAF3CQABdwoAAXdJAAF3SwABd00AAXdPAAF3UgABd1MAAXdUAAF3VQABd1YAAXdYAAF3WgABd1sAAXdcAAF3XgABd18AAXeeAAF3oAABd6IAAXekAAF3pwABd6gAAXepAAF3qgABd6sAAXetAAF3rwABd7AAAXexAAF3swABd7QAAXf/AAF4IgABeEIAAXhiAAF4ZAABeGYAAXhoAAF4agABeGwAAXhtAAF4bgABeHEAAXhyAAF4dAABeHUAAXh3AAF4eQABeHoAAXh7AAF4fgABeH8AAXiIAAF4lQABeJoAAXicAAF4ngABeKMAAXimAAF4qQABeKsAAXjQAAF49AABeRsAAXk/AAF5QgABeUQAAXlGAAF5SAABeUoAAXlMAAF5TQABeVAAAXldAAF5bgABeXAAAXlyAAF5dAABeXYAAXl4AAF5egABeXwAAXl+AAF5jwABeZIAAXmVAAF5mAABeZsAAXmeAAF5oQABeaQAAXmnAAF5qQABeegAAXnqAAF57AABee4AAXnxAAF58gABefMAAXn0AAF59QABefcAAXn5AAF5+gABefsAAXn9AAF5/gABej0AAXo/AAF6QQABekMAAXpGAAF6RwABekgAAXpJAAF6SgABekwAAXpOAAF6TwABelAAAXpSAAF6UwABepIAAXqUAAF6lwABepkAAXqcAAF6nQABep4AAXqfAAF6oAABeqIAAXqkAAF6pQABeqYAAXqoAAF6qQABerYAAXq3AAF6uAABeroAAXr5AAF6+wABev0AAXr/AAF7AgABewMAAXsE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AAGGNgABhjgAAYY6AAGGPQABhj4AAYY/AAGGQAABhkEAAYZDAAGGRQABhkYAAYZHAAGGSQABhkoAAYaJAAGGiwABho0AAYaPAAGGkgABhpMAAYaUAAGGlQABhpYAAYaYAAGGmgABhpsAAYacAAGGngABhp8AAYbeAAGG4AABhuIAAYbkAAGG5wABhugAAYbpAAGG6gABhusAAYbtAAGG7wABhvAAAYbxAAGG8wABhvQAAYczAAGHNQABhzcAAYc5AAGHPAABhz0AAYc+AAGHPwABh0AAAYdCAAGHRAABh0UAAYdGAAGHSAABh0kAAYeIAAGHigABh4wAAYeOAAGHkQABh5IAAYeTAAGHlAABh5UAAYeXAAGHmQABh5oAAYebAAGHnQABh54AAYfpAAGIDAABiCwAAYhMAAGITgABiFAAAYhSAAGIVAABiFYAAYhXAAGIWAABiFsAAYhcAAGIXgABiF8AAYhhAAGIYwABiGQAAYhlAAGIaAABiGkAAYhuAAGIewABiIAAAYiCAAGIhAABiIkAAYiMAAGIjwABiJEAAYi2AAGI2gABiQEAAYklAAGJKAABiSoAAYksAAGJLgABiTAAAYkyAAGJMwABiTYAAYlDAAGJVAABiVYAAYlYAAGJWgABiVwAAYleAAGJYAABiWIAAYlkAAGJdQABiXgAAYl7AAGJfgABiYEAAYmEAAGJhwABiYoAAYmNAAGJjwABic4AAYnQAAGJ0gABidQAAYnXAAGJ2AABidkAAYnaAAGJ2wABid0AAYnfAAGJ4AABieEAAYnjAAGJ5AABiiMAAYolAAGKJwABiikAAYosAAGKLQABii4AAYovAAGKMAABijIAAYo0AAGKNQABijYAAYo4AAGKOQABingAAYp6AAGKfQABin8AAYqCAAGKgwABioQAAYqFAAGKhgABiogAAYqKAAGKiwABiowAAYqOAAGKjwABipwAAYqdAAGKngABiqAAAYrfAAGK4QABiuMAAYrlAAGK6AABiukAAYrqAAGK6wABiuwAAYruAAGK8AABivEAAYryAAGK9AABivUAAYs0AAGLNgABizgAAYs6AAGLPQABiz4AAYs/AAGLQAABi0EAAYtDAAGLRQABi0YAAYtHAAGLSQABi0oAAYuJAAGLiwABi40AAYuPAAGLkgABi5MAAYuUAAGLlQABi5YAAYuY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AAGiFQABohYAAaIYAAGiGQABolgAAaJaAAGiXQABol8AAaJiAAGiYwABomQAAaJlAAGiZgABomgAAaJqAAGiawABomwAAaJuAAGibwABonwAAaJ9AAGifgABooAAAaK/AAGiwQABosMAAaLFAAGiyAABoskAAaLKAAGiywABoswAAaLOAAGi0AABotEAAaLSAAGi1AABotUAAaMUAAGjFgABoxgAAaMaAAGjHQABox4AAaMfAAGjIAABoyEAAaMjAAGjJQABoyYAAaMnAAGjKQABoyoAAaNpAAGjawABo20AAaNvAAGjcgABo3MAAaN0AAGjdQABo3YAAaN4AAGjegABo3sAAaN8AAGjfgABo38AAaO+AAGjwAABo8IAAaPEAAGjxwABo8gAAaPJAAGjygABo8sAAaPNAAGjzwABo9AAAaPRAAGj0wABo9QAAaQTAAGkFQABpBcAAaQZAAGkHAABpB0AAaQeAAGkHwABpCAAAaQiAAGkJAABpCUAAaQmAAGkKAABpCkAAaROAAGkcgABpJkAAaS9AAGkwAABpMIAAaTEAAGkxgABpMgAAaTKAAGkywABpM4AAaTbAAGk6gABpOwAAaTuAAGk8AABpPIAAaT0AAGk9gABpPgAAaUHAAGlCgABpQ0AAaUQAAGlEwABpRYAAaUZAAGlHAABpR4AAaVdAAGlXwABpWEAAaVjAAGlZgABpWcAAaVoAAGlaQABpWoAAaVsAAGlbgABpW8AAaVwAAGlcgABpXMAAaWyAAGltAABpbYAAaW4AAGluwABpbwAAaW9AAGlvgABpb8AAaXBAAGlwwABpcQAAaXFAAGlxwABpcgAAaYHAAGmCQABpgsAAaYNAAGmEAABphEAAaYSAAGmEwABphQAAaYWAAGmGAABphkAAaYaAAGmHAABph0AAaZcAAGmXgABpmAAAaZiAAGmZQABpmYAAaZnAAGmaAABpmkAAaZrAAGmbQABpm4AAaZvAAGmcQABpnIAAaaxAAGmswABprUAAaa3AAGmugABprsAAaa8AAGmvQABpr4AAabAAAGmwgABpsMAAabEAAGmxgABpscAAacGAAGnCAABpwoAAacMAAGnDwABpxAAAacRAAGnEgABpxMAAacVAAGnFwABpxgAAacZAAGnGwABpxwAAadbAAGnXQABp18AAadhAAGnZAABp2UAAadmAAGnZwABp2gAAadqAAGnbAABp20AAaduAAGncAABp3EAAae8AAGn3wABp/8AAagfAAGoIQABqCMAAaglAAGoJwABqCkAAagqAAGoKwABqC4AAagvAAGoMQABqDIAAag0AAGoNgABqDcAAag4AAGoOwABqDwAAahBAAGoTgABqFMAAahVAAGoVwABqFwAAahfAAGoYgABqGQAAaiJAAGorQABqNQAAaj4AAGo+wABqP0AAaj/AAGpAQABqQMAAakFAAGpBgABqQkAAakWAAGpJwABqSkAAakrAAGpLQABqS8AAakxAAGpMwABqTUAAak3AAGpSAABqUsAAalOAAGpUQABqVQAAalXAAGpWgABqV0AAalgAAGpYgABqaEAAamjAAGppQABqacAAamqAAGpqwABqawAAamtAAGprgABqbAAAamyAAGpswABqbQAAam2AAGptwABqfYAAan4AAGp+gABqfwAAan/AAGqAAABqgEAAaoCAAGqAwABqgUAAaoHAAGqCAABqgkAAaoLAAGqDAABqksAAapNAAGqUAABqlIAAapVAAGqVgABqlcAAapYAAGqWQABqlsAAapdAAGqXgABql8AAaphAAGqYgABqm8AAapwAAGqcQABqnMAAaqyAAGqtAABqrYAAaq4AAGquwABqrwAAaq9AAGqvgABqr8AAarBAAGqwwABqsQAAarFAAGqxwABqsgAAasHAAGrCQABqwsAAasNAAGrEAABqxEAAasSAAGrEwABqxQAAasWAAGrGAABqxkAAasaAAGrHAABqx0AAatcAAGrXgABq2AAAatiAAGrZQABq2YAAatnAAGraAABq2kAAatrAAGrbQABq24AAatvAAGrcQABq3IAAauxAAGrswABq7UAAau3AAGrugABq7sAAau8AAGrvQABq74AAavAAAGrwgABq8MAAavEAAGrxgABq8cAAawGAAGsCAABrAoAAawMAAGsDwABrBAAAawRAAGsEgABrBMAAawVAAGsFwABrBgAAawZAAGsGwABrBwAAaxBAAGsZQABrIwAAaywAAGsswABrLUAAay3AAGsuQABrLsAAay9AAGsvgABrMEAAazOAAGs3QABrN8AAazhAAGs4wABrOUAAaznAAGs6QABrOsAAaz6AAGs/QABrQAAAa0DAAGtBgABrQkAAa0MAAGtDwABrREAAa1Q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AAG5DAABuQ4AAbkPAAG5TgABuVAAAblSAAG5VAABuVcAAblYAAG5WQABuVoAAblbAAG5XQABuV8AAblgAAG5YQABuWMAAblkAAG5owABuaUAAbmnAAG5qQABuawAAbmtAAG5rgABua8AAbmwAAG5sgABubQAAbm1AAG5tgABubgAAbm5AAG53gABugIAAbopAAG6TQABulAAAbpSAAG6VAABulYAAbpYAAG6WgABulsAAbpeAAG6awABunoAAbp8AAG6fgABuoAAAbqCAAG6hAABuoYAAbqIAAG6lwABupoAAbqdAAG6oAABuqMAAbqmAAG6qQABuqwAAbquAAG67QABuu8AAbrxAAG68wABuvYAAbr3AAG6+AABuvkAAbr6AAG6/AABuv4AAbr/AAG7AAABuwIAAbsDAAG7QgABu0QAAbtGAAG7SAABu0sAAbtMAAG7TQABu04AAbtPAAG7UQABu1MAAbtUAAG7VQABu1cAAbtYAAG7lwABu5kAAbubAAG7nQABu6AAAbuhAAG7ogABu6MAAbukAAG7pgABu6gAAbupAAG7qgABu6wAAbutAAG77AABu+4AAbvxAAG78wABu/YAAbv3AAG7+AABu/kAAbv6AAG7/AABu/4AAbv/AAG8AAABvAIAAbwDAAG8QgABvEQAAbxGAAG8SAABvEsAAbxMAAG8TQABvE4AAbxPAAG8UQABvFMAAbxUAAG8VQABvFcAAbxYAAG8lwABvJkAAbybAAG8nQABvKAAAbyhAAG8ogABvKMAAbykAAG8pgABvKgAAbypAAG8qgABvKwAAbytAAG87AABvO4AAbzwAAG88gABvPUAAbz2AAG89wABvPgAAbz5AAG8+wABvP0AAbz+AAG8/wABvQEAAb0CAAG9TQABvXAAAb2QAAG9sAABvbIAAb20AAG9tgABvbgAAb27AAG9vAABvb0AAb3AAAG9wQABvcMAAb3EAAG9xgABvcgAAb3JAAG9ygABvc0AAb3OAAG90wABveAAAb3lAAG95wABvekAAb3uAAG98QABvfQAAb32AAG+GwABvj8AAb5mAAG+igABvo0AAb6PAAG+kQABvpMAAb6VAAG+lwABvpgAAb6bAAG+qAABvrkAAb67AAG+vQABvr8AAb7BAAG+wwABvsUAAb7HAAG+yQABvtoAAb7dAAG+4AABvuMAAb7mAAG+6QABvuwAAb7vAAG+8gABvvQAAb8zAAG/NQABvzcAAb85AAG/PAABvz0AAb8+AAG/PwABv0AAAb9CAAG/RAABv0UAAb9GAAG/SAABv0kAAb+IAAG/igABv4wAAb+OAAG/kQABv5IAAb+TAAG/lAABv5UAAb+XAAG/mQABv5oAAb+bAAG/nQABv54AAb/dAAG/3wABv+IAAb/kAAG/5wABv+gAAb/pAAG/6gABv+sAAb/tAAG/7wABv/AAAb/xAAG/8wABv/QAAcABAAHAAgABwAMAAcAFAAHARAABwEYAAcBIAAHASgABwE0AAcBOAAHATwABwFAAAcBRAAHAUwABwFUAAcBWAAHAVwABwFkAAcBaAAHAmQABwJsAAcCdAAHAnwABwKIAAcCjAAHApAABwKUAAcCmAAHAqAABwKoAAcCrAAHArAABwK4AAcCvAAHA7gABwPAAAcDyAAHA9AABwPcAAcD4AAHA+QABwPoAAcD7AAHA/QABwP8AAcEAAAHBAQABwQMAAcEEAAHBQwABwUUAAcFHAAHBSQABwUwAAcFNAAHBTgABwU8AAcFQAAHBUgABwVQAAcFVAAHBVgABwVgAAcFZAAHBmAABwZoAAcGcAAHBngABwaEAAcGiAAHBowABwaQAAcGlAAHBpwABwakAAcGqAAHBqwABwa0AAcGuAAHB0wABwfcAAcIeAAHCQgABwkUAAcJHAAHCSQABwksAAcJNAAHCTwABwlAAAcJTAAHCYAABwm8AAcJxAAHCcwABwnUAAcJ3AAHCeQABwnsAAcJ9AAHCjAABwo8AAcKSAAHClQABwpgAAcKbAAHCngABwqEAAcKjAAHC4gABwuQAAcLmAAHC6AABwusAAcLsAAHC7QABwu4AAcLvAAHC8QABwvMAAcL0AAHC9QABwvcAAcL4AAHDNwABwzkAAcM7AAHDPQABw0AAAcNBAAHDQgABw0MAAcNEAAHDRgABw0gAAcNJAAHDSgABw0wAAcNNAAHDjAABw44AAcOQAAHDkgABw5UAAcOWAAHDlwABw5gAAcOZAAHDmwABw50AAcOeAAHDnwABw6EAAcOiAAHD4QABw+MAAcPlAAHD5wABw+oAAcPrAAHD7AABw+0AAcPuAAHD8AABw/IAAcPzAAHD9AABw/YAAcP3AAHENgABxDgAAcQ6AAHEPAABxD8AAcRAAAHEQQABxEIAAcRDAAHERQABxEcAAcRIAAHESQABxEsAAcRMAAHEiwABxI0AAcSPAAHEkQABxJQAAcSVAAHElgABxJcAAcSYAAHEmgABxJwAAcSdAAHEngABxKAAAcShAAHE4AABxOIAAcTlAAHE5wABxOoAAcTrAAHE7AABxO0AAcTuAAHE8AABxPIAAcTzAAHE9AABxPYAAcT3AAHFQgABxWUAAcWFAAHFpQABxacAAcWpAAHFqwABxa0AAcWwAAHFsQABxbIAAcW1AAHFtgABxbgAAcW5AAHFuwABxb0AAcW+AAHFvwABxcIAAcXDAAHFyAABxdUAAcXaAAHF3AABxd4AAcXjAAHF5gABxekAAcXrAAHGEAABxjQAAcZbAAHGfwABxoIAAcaEAAHGhgABxogAAcaKAAHGjAABxo0AAcaQAAHGnQABxq4AAcawAAHGsgABxrQAAca2AAHGuAABxroAAca8AAHGvgABxs8AAcbSAAHG1QABxtgAAcbbAAHG3gABxuEAAcbkAAHG5wABxukAAccoAAHHKgABxywAAccuAAHHMQABxzIAAcczAAHHNAABxzUAAcc3AAHHOQABxzoAAcc7AAHHPQABxz4AAcd9AAHHfwABx4EAAceDAAHHhgABx4cAAceIAAHHiQABx4oAAceMAAHHjgABx48AAceQAAHHkgABx5MAAcfSAAHH1AABx9cAAcfZAAHH3AABx90AAcfeAAHH3wABx+AAAcfiAAHH5AABx+UAAcfmAAHH6AABx+kAAcf2AAHH9wABx/gAAcf6AAHIOQAByDsAAcg9AAHIPwAByEIAAchDAAHIRAAByEUAAchGAAHISAAByEoAAchLAAHITAAByE4AAchPAAHIjgAByJAAAciSAAHIlAAByJcAAciYAAHImQAByJoAAcibAAHInQAByJ8AAcigAAHIoQAByKMAAcikAAHI4wAByOUAAcjnAAHI6QAByOwAAcjtAAHI7gAByO8AAcjwAAHI8gAByPQAAcj1AAHI9gAByPgAAcj5AAHJOAAByToAAck8AAHJPgAByUEAAclCAAHJQwAByUQAAclFAAHJRwAByUkAAclKAAHJSwAByU0AAclOAAHJjQAByY8AAcmRAAHJkwAByZYAAcmXAAHJmAAByZkAAcmaAAHJnAAByZ4AAcmfAAHJoAAByaIAAcmjAAHJyAAByewAAcoTAAHKNwAByjoAAco8AAHKPgABykAAAcpCAAHKRAABykUAAcpIAAHKVQABymQAAcpmAAHKaAABymoAAcpsAAHKbgABynAAAcpyAAHKgQAByoQAAcqHAAHKigAByo0AAcqQAAHKkwABypYAAcqYAAHK1wABytkAAcrcAAHK3gAByuEAAcriAAHK4wAByuQAAcrlAAHK5wAByukAAcrqAAHK6wAByu0AAcruAAHK7wAByy4AAcswAAHLMgAByzQAAcs3AAHLOAAByzkAAcs6AAHLOwAByz0AAcs/AAHLQAABy0EAActDAAHLRAABy4MAAcuFAAHLhwABy4kAAcuMAAHLjQABy44AAcuPAAHLkAABy5IAAcuUAAHLlQABy5YAAcuYAAHLmQABy9gAAcvaAAHL3AABy94AAcvhAAHL4gABy+MAAcvkAAHL5QABy+cAAcvpAAHL6gABy+sAAcvtAAHL7gABzC0AAcwvAAHMMQABzDMAAcw2AAHMNwABzDgAAcw5AAHMOgABzDwAAcw+AAHMPwABzEAAAcxCAAHMQwABzIIAAcyEAAHMhgABzIgAAcyLAAHMjAABzI0AAcyOAAHMjwABzJEAAcyTAAHMlAABzJUAAcyXAAHMmAABzNcAAczZAAHM2wABzN0AAczgAAHM4QABzOIAAczjAAHM5AABzOYAAczoAAHM6QABzOoAAczsAAHM7QABzTgAAc1bAAHNewABzZsAAc2dAAHNnwABzaEAAc2jAAHNpgABzacAAc2oAAHNqwABzawAAc2uAAHNrwABzbEAAc20AAHNtQABzbYAAc25AAHNugABzcMAAc3QAAHN1QABzdcAAc3ZAAHN3gABzeEAAc3kAAHN5gABzgsAAc4vAAHOVgABznoAAc59AAHOfwABzoEAAc6DAAHOhQABzocAAc6IAAHOiwABzpgAAc6pAAHOqwABzq0AAc6vAAHOsQABzrMAAc61AAHOtwABzrkAAc7KAAHOzQABztAAAc7TAAHO1gABztkAAc7cAAHO3wABzuIAAc7kAAHPIwABzyUAAc8nAAHPKQABzywAAc8tAAHPLgABzy8AAc8wAAHPMgABzzQAAc81AAHPNgABzzgAAc85AAHPeAABz3oAAc98AAHPfgABz4EAAc+CAAHPgwABz4QAAc+FAAHPhwABz4kAAc+K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AAIHRgACB4UAAgeHAAIHiQACB4sAAgeOAAIHjwACB5AAAgeRAAIHkgACB5QAAgeWAAIHlwACB5gAAgeaAAIHmwACB9oAAgfcAAIH3gACB+AAAgfjAAIH5AACB+UAAgfmAAIH5wACB+kAAgfrAAIH7AACB+0AAgfvAAIH8AACCC8AAggxAAIINAACCDYAAgg5AAIIOgACCDsAAgg8AAIIPQACCD8AAghBAAIIQgACCEMAAghFAAIIRgACCFMAAghUAAIIVQACCFcAAgiWAAIImAACCJoAAgicAAIInwACCKAAAgihAAIIogACCKMAAgilAAIIpwACCKgAAgipAAIIqwACCKwAAgjrAAII7QACCO8AAgjxAAII9AACCPUAAgj2AAII9wACCPgAAgj6AAII/AACCP0AAgj+AAIJAAACCQEAAglAAAIJQgACCUQAAglGAAIJSQACCUoAAglLAAIJTAACCU0AAglPAAIJUQACCVIAAglTAAIJVQACCVYAAgmVAAIJlwACCZkAAgmbAAIJngACCZ8AAgmgAAIJoQACCaIAAgmkAAIJpgACCacAAgmoAAIJqgACCasAAgnqAAIJ7AACCe4AAgnwAAIJ8wACCfQAAgn1AAIJ9gACCfcAAgn5AAIJ+wACCfwAAgn9AAIJ/wACCgAAAgolAAIKSQACCnAAAgqUAAIKlwACCpkAAgqbAAIKnQACCp8AAgqhAAIKogACCqUAAgqyAAIKwQACCsMAAgrFAAIKxwACCskAAgrLAAIKzQACCs8AAgreAAIK4QACCuQAAgrnAAIK6gACCu0AAgrwAAIK8wACCvUAAgs0AAILNgACCzgAAgs6AAILPQACCz4AAgs/AAILQAACC0EAAgtDAAILRQACC0YAAgtHAAILSQACC0oAAguJAAILiwACC40AAguPAAILkgACC5MAAguUAAILlQACC5YAAguYAAILmgACC5sAAgucAAILngACC58AAgveAAIL4AACC+IAAgvkAAIL5wACC+gAAgvpAAIL6gACC+sAAgvtAAIL7wACC/AAAgvxAAIL8wACC/QAAgwzAAIMNQACDDgAAgw6AAIMPQACDD4AAgw/AAIMQAACDEEAAgxDAAIMRQACDEYAAgxHAAIMSQACDEoAAgyNAAIMsQACDNUAAgz4AAINHwACDT8AAg1mAAINjQACDa0AAg3R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AAIkkgACJJQAAiSWAAIkmAACJJoAAiScAAIknQACJKAAAiStAAIkvgACJMAAAiTCAAIkxAACJMYAAiTIAAIkygACJMwAAiTOAAIk3wACJOIAAiTlAAIk6AACJOsAAiTuAAIk8QACJPQAAiT3AAIk+QACJTgAAiU6AAIlPAACJT4AAiVBAAIlQgACJUMAAiVEAAIlRQACJUcAAiVJAAIlSgACJUsAAiVNAAIlTgACJY0AAiWPAAIlkQACJZMAAiWWAAIllwACJZgAAiWZAAIlmgACJZwAAiWeAAIlnwACJaAAAiWiAAIlowACJeIAAiXkAAIl5wACJekAAiXsAAIl7QACJe4AAiXvAAIl8AACJfIAAiX0AAIl9QACJfYAAiX4AAIl+QACJgYAAiYHAAImCAACJgoAAiZJAAImSwACJk0AAiZPAAImUgACJlMAAiZUAAImVQACJlYAAiZYAAImWgACJlsAAiZcAAImXgACJl8AAiaeAAImoAACJqIAAiakAAImpwACJqgAAiapAAImqgACJqsAAiatAAImrwACJrAAAiaxAAImswACJrQAAibzAAIm9QACJvcAAib5AAIm/AACJv0AAib+AAIm/wACJwAAAicCAAInBAACJwUAAicGAAInCAACJwkAAidIAAInSgACJ0wAAidOAAInUQACJ1IAAidTAAInVAACJ1UAAidXAAInWQACJ1oAAidbAAInXQACJ14AAiedAAInnwACJ6EAAiejAAInpgACJ6cAAieoAAInqQACJ6oAAiesAAInrgACJ68AAiewAAInsgACJ7MAAifYAAIn/AACKCMAAihHAAIoSgACKEwAAihOAAIoUAACKFIAAihUAAIoVQACKFgAAihlAAIocgACKHQAAih2AAIoeAACKHoAAih8AAIofgACKIsAAiiOAAIokQACKJQAAiiXAAIomgACKJ0AAiifAAIo3gACKOAAAijjAAIo5QACKOgAAijpAAIo6gACKOsAAijsAAIo7gACKPAAAijxAAIo8gACKPQAAij1AAIpOAACKVwAAimAAAIpowACKcoAAinqAAIqEQACKjgAAipYAAIqfAACKqAAAiqiAAIqpQACKqcAAiqpAAIqqwACKq4AAiqxAAIqswACKrUAAiq4AAIqugACKrwAAiq/AAIqwgACKsMAAirMAAIq2QACKtwAAireAAIq4QACKuQAAirmAAIrCwACKy8AAitWAAIregACK30AAit/AAIrgQACK4MAAiuFAAIrhwACK4gAAiuLAAIrmAACK6sAAiutAAIrrwACK7EAAiuzAAIrtQACK7cAAiu5AAIruwACK70AAivQAAIr0wACK9YAAivZAAIr3AACK98AAiviAAIr5QACK+gAAivrAAIr7QACLCwAAiwuAAIsMQACLDMAAiw2AAIsNwACLDgAAiw5AAIsOgACLDwAAiw+AAIsPwACLEAAAixCAAIsQwACLEwAAixNAAIsTwACLI4AAiyQAAIskgACLJQAAiyXAAIsmAACLJkAAiyaAAIsmwACLJ0AAiyfAAIsoAACLKEAAiyjAAIspAACLOMAAizlAAIs6AACLOoAAiztAAIs7gACLO8AAizwAAIs8QACLPMAAiz1AAIs9gACLPcAAiz5AAIs+gACLQMAAi0EAAItBgACLUUAAi1HAAItSQACLUsAAi1OAAItTwACLVAAAi1RAAItUgACLVQAAi1WAAItVwACLVgAAi1aAAItWwACLZoAAi2cAAItnwACLaEAAi2kAAItpQACLaYAAi2nAAItqAACLaoAAi2sAAItrQACLa4AAi2wAAItsQACLboAAi27AAItvQACLfwAAi3+AAIuAAACLgIAAi4FAAIuBgACLgcAAi4IAAIuCQACLgsAAi4NAAIuDgACLg8AAi4RAAIuEgACLlEAAi5TAAIuVgACLlgAAi5bAAIuXAACLl0AAi5eAAIuXwACLmEAAi5jAAIuZAACLmUAAi5nAAIuaAACLnUAAi52AAIudwACLnkAAi64AAIuugACLrwAAi6+AAIuwQACLsIAAi7DAAIuxAACLsUAAi7HAAIuyQACLsoAAi7LAAIuzQACLs4AAi8NAAIvDwACLxIAAi8UAAIvFwACLxgAAi8ZAAIvGgACLxsAAi8dAAIvHwACLyAAAi8hAAIvIwACLyQAAi86AAIvRwACL04AAi9RAAIvVAACL1cAAi9eAAIvYQACL2QAAi9nAAIvaQACL3MAAi++AAIv4QACMAEAAjAhAAIwIwACMCUAAjAnAAIwKQACMCwAAjAtAAIwLgACMDEAAjAyAAIwNAACMDUAAjA3AAIwOgACMDsAAjA8AAIwPwACMEAAAjBJAAIwVgACMFsAAjBdAAIwXwACMGQAAjBn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AAJGpwACRqgAAkapAAJGqwACRqwAAkbrAAJG7QACRu8AAkbxAAJG9AACRvUAAkb2AAJG9wACRvgAAkb6AAJG/AACRv0AAkb+AAJHAAACRwEAAkdAAAJHQgACR0QAAkdGAAJHSQACR0oAAkdLAAJHTAACR00AAkdPAAJHUQACR1IAAkdTAAJHVQACR1YAAkdfAAJHYAACR2IAAkehAAJHowACR6UAAkenAAJHqgACR6sAAkesAAJHrQACR64AAkewAAJHsgACR7MAAke0AAJHtgACR7cAAkf2AAJH+AACR/oAAkf8AAJH/wACSAAAAkgBAAJIAgACSAMAAkgFAAJIBwACSAgAAkgJAAJICwACSAwAAkhLAAJITQACSE8AAkhRAAJIVAACSFUAAkhWAAJIVwACSFgAAkhaAAJIXAACSF0AAkheAAJIYAACSGEAAkigAAJIogACSKQAAkimAAJIqQACSKoAAkirAAJIrAACSK0AAkivAAJIsQACSLIAAkizAAJItQACSLYAAkj1AAJI9wACSPkAAkj7AAJI/gACSP8AAkkAAAJJAQACSQIAAkkEAAJJBgACSQcAAkkIAAJJCgACSQsAAklWAAJJeQACSZkAAkm5AAJJuwACSb0AAkm/AAJJwQACScQAAknFAAJJxgACSckAAknKAAJJzAACSc0AAknPAAJJ0gACSdMAAknUAAJJ1wACSdgAAkndAAJJ6gACSe8AAknxAAJJ8wACSfgAAkn7AAJJ/gACSgAAAkolAAJKSQACSnAAAkqUAAJKlwACSpkAAkqbAAJKnQACSp8AAkqhAAJKogACSqUAAkqyAAJKwwACSsUAAkrHAAJKyQACSssAAkrNAAJKzwACStEAAkrTAAJK5AACSucAAkrqAAJK7QACSvAAAkrzAAJK9gACSvkAAkr8AAJK/gACSz0AAks/AAJLQQACS0MAAktGAAJLRwACS0gAAktJAAJLSgACS0wAAktOAAJLTwACS1AAAktSAAJLUwACS5IAAkuUAAJLlgACS5gAAkubAAJLnAACS50AAkueAAJLnwACS6EAAkujAAJLpAACS6UAAkunAAJLqAACS+cAAkvpAAJL7AACS+4AAkvxAAJL8gACS/MAAkv0AAJL9QACS/cAAkv5AAJL+gACS/sAAkv9AAJL/gACTAsAAkwMAAJMDQACTA8AAkxO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AAJXSwACV0wAAldNAAJXTwACV1AAAlePAAJXkQACV5MAAleVAAJXmAACV5kAAleaAAJXmwACV5wAAleeAAJXoAACV6EAAleiAAJXpAACV6UAAlfkAAJX5gACV+kAAlfrAAJX7gACV+8AAlfwAAJX8QACV/IAAlf0AAJX9gACV/cAAlf4AAJX+gACV/sAAlg+AAJYYgACWIYAAlipAAJY0AACWPAAAlkXAAJZPgACWV4AAlmCAAJZpgACWagAAlmrAAJZrQACWa8AAlmxAAJZtAACWbcAAlm5AAJZuwACWb4AAlnAAAJZwgACWcUAAlnIAAJZyQACWc4AAlnbAAJZ3gACWeAAAlnjAAJZ5gACWegAAloNAAJaMQACWlgAAlp8AAJafwACWoEAAlqDAAJahQACWocAAlqJAAJaigACWo0AAlqaAAJarQACWq8AAlqxAAJaswACWrUAAlq3AAJauQACWrsAAlq9AAJavwACWtIAAlrVAAJa2AACWtsAAlreAAJa4QACWuQAAlrnAAJa6gACWu0AAlrvAAJbLgACWzAAAlszAAJbNQACWzgAAls5AAJbOgACWzsAAls8AAJbPgACW0AAAltBAAJbQgACW0QAAltFAAJbTgACW08AAltRAAJbkAACW5IAAluUAAJblgACW5kAAluaAAJbmwACW5wAAludAAJbnwACW6EAAluiAAJbowACW6UAAlumAAJb5QACW+cAAlvqAAJb7AACW+8AAlvwAAJb8QACW/IAAlvzAAJb9QACW/cAAlv4AAJb+QACW/sAAlv8AAJcBQACXAYAAlwIAAJcRwACXEkAAlxLAAJcTQACXFAAAlxRAAJcUgACXFMAAlxUAAJcVgACXFgAAlxZAAJcWgACXFwAAlxdAAJcnAACXJ4AAlyhAAJcowACXKYAAlynAAJcqAACXKkAAlyqAAJcrAACXK4AAlyvAAJcsAACXLIAAlyzAAJcvAACXL0AAly/AAJc/gACXQAAAl0CAAJdBAACXQcAAl0IAAJdCQACXQoAAl0LAAJdDQACXQ8AAl0QAAJdEQACXRMAAl0UAAJdUwACXVUAAl1YAAJdWgACXV0AAl1eAAJdXwACXWAAAl1hAAJdYwACXWUAAl1mAAJdZwACXWkAAl1qAAJddwACXXgAAl15AAJdewACXboAAl28AAJdvgACXcAAAl3DAAJdxAACXcUAAl3GAAJdxwACXckAAl3LAAJdzAACXc0AAl3PAAJd0AACXg8AAl4RAAJeFAACXhYAAl4ZAAJeGgACXhsAAl4cAAJeHQACXh8AAl4hAAJeIgACXiMAAl4lAAJeJgACXkIAAl5PAAJeWAACXloAAl5cAAJeXwACXmIAAl5rAAJebgACXnEAAl50AAJedwACXnkAAl6NAAJelAACXt8AAl8CAAJfIgACX0IAAl9EAAJfRgACX0gAAl9KAAJfTQACX04AAl9PAAJfUgACX1MAAl9VAAJfVgACX1gAAl9aAAJfWwACX1wAAl9fAAJfYAACX2UAAl9yAAJfdwACX3kAAl97AAJfgAACX4MAAl+GAAJfiAACX60AAl/RAAJf+AACYBwAAmAfAAJgIQACYCMAAmAlAAJgJwACYCkAAmAqAAJgLQACYDoAAmBLAAJgTQACYE8AAmBRAAJgUwACYFUAAmBXAAJgWQACYFsAAmBsAAJgbwACYHIAAmB1AAJgeAACYHsAAmB+AAJggQACYIQAAmCGAAJgxQACYMcAAmDJAAJgywACYM4AAmDPAAJg0AACYNEAAmDSAAJg1AACYNYAAmDXAAJg2AACYNoAAmDbAAJhGgACYRwAAmEeAAJhIAACYSMAAmEkAAJhJQACYSYAAmEnAAJhKQACYSsAAmEsAAJhLQACYS8AAmEwAAJhbwACYXEAAmF0AAJhdgACYXkAAmF6AAJhewACYXwAAmF9AAJhfwACYYEAAmGCAAJhgwACYYUAAmGGAAJhkwACYZQAAmGVAAJhlwACYdYAAmHYAAJh2gACYdwAAmHfAAJh4AACYeEAAmHiAAJh4wACYeUAAmHnAAJh6AACYekAAmHrAAJh7AACYisAAmItAAJiLwACYjEAAmI0AAJiNQACYjYAAmI3AAJiOAACYjoAAmI8AAJiPQACYj4AAmJAAAJiQQACYoAAAmKCAAJihAACYoYAAmKJAAJiigACYosAAmKMAAJijQACYo8AAmKRAAJikgACYpMAAmKVAAJilgACYtUAAmLXAAJi2QACYtsAAmLeAAJi3wACYuAAAmLhAAJi4gACYuQAAmLmAAJi5wACYugAAmLqAAJi6wACYyoAAmMsAAJjLgACYzAAAmMzAAJjNAACYzUAAmM2AAJjNwACYzkAAmM7AAJjPAACYz0AAmM/AAJjQAACY2UAAmOJAAJjsAACY9QAAmPXAAJj2QACY9sAAmPdAAJj3wACY+EAAmPiAAJj5QACY/IAAmQBAAJkAwACZAUAAmQHAAJkCQACZAsAAmQNAAJkDwACZB4AAmQhAAJkJAACZCcAAmQqAAJkLQACZDAAAmQzAAJkNQACZHQAAmR2AAJkeAACZHoAAmR9AAJkfgACZH8AAmSAAAJkgQACZIMAAmSFAAJkhgACZIcAAmSJAAJkigACZMkAAmTLAAJkzQACZM8AAmTSAAJk0wACZNQAAmTVAAJk1gACZNgAAmTaAAJk2wACZNwAAmTeAAJk3wACZR4AAmUgAAJlIgACZSQAAmUnAAJlKAACZSkAAmUqAAJlKwACZS0AAmUvAAJlMAACZTEAAmUzAAJlNAACZXMAAmV1AAJldwACZXkAAmV8AAJlfQACZX4AAmV/AAJlgAACZYIAAmWEAAJlhQACZYYAAmWIAAJliQACZcgAAmXKAAJlzAACZc4AAmXRAAJl0gACZdMAAmXUAAJl1QACZdcAAmXZAAJl2gACZdsAAmXdAAJl3gACZh0AAmYfAAJmIQACZiMAAmYmAAJmJwACZigAAmYpAAJmKgACZiwAAmYuAAJmLwACZjAAAmYyAAJmMwACZnIAAmZ0AAJmdgACZngAAmZ7AAJmfAACZn0AAmZ+AAJmfwACZoEAAmaDAAJmhAACZoUAAmaHAAJmiAACZtMAAmb2AAJnFgACZzYAAmc4AAJnOgACZzwAAmc+AAJnQQACZ0IAAmdDAAJnRgACZ0cAAmdJAAJnSgACZ0wAAmdOAAJnTwACZ1AAAmdTAAJnVAACZ1kAAmdmAAJnawACZ20AAmdvAAJndAACZ3cAAmd6AAJnfAACZ6EAAmfFAAJn7AACaBAAAmgTAAJoFQACaBcAAmgZAAJoGwACaB0AAmgeAAJoIQACaC4AAmg/AAJoQQACaEMAAmhFAAJoRwACaEkAAmhLAAJoTQACaE8AAmhgAAJoYwACaGYAAmhpAAJobAACaG8AAmhyAAJodQACaHgAAmh6AAJouQACaLsAAmi9AAJovwACaMIAAmjDAAJoxAACaMUAAmjGAAJoyAACaMoAAmjLAAJozAACaM4AAmjPAAJpDgACaRAAAmkSAAJpFAACaRcAAmkYAAJpGQACaRoAAmkbAAJpHQACaR8AAmkgAAJpIQACaSMAAmkkAAJpYwACaWUAAmloAAJpagACaW0AAmluAAJpbwACaXAAAmlxAAJpcwACaXUAAml2AAJpdwACaXkAAml6AAJphwACaYgAAmmJAAJpiwACacoAAmnMAAJpzgACadAAAmnTAAJp1AACadUAAmnWAAJp1wACadkAAmnbAAJp3AACad0AAmnfAAJp4AACah8AAmohAAJqIwACaiUAAmooAAJqKQACaioAAmorAAJqLAACai4AAmowAAJqMQACajIAAmo0AAJqNQACanQAAmp2AAJqeAACanoAAmp9AAJqfgACan8AAmqAAAJqgQACaoMAAmqFAAJqhgACaocAAmqJAAJqigACaskAAmrLAAJqzQACas8AAmrSAAJq0wACatQAAmrVAAJq1gACatgAAmraAAJq2wACatwAAmreAAJq3wACax4AAmsgAAJrIgACayQAAmsnAAJrKAACaykAAmsqAAJrKwACay0AAmsvAAJrMAACazEAAmszAAJrNAACa1kAAmt9AAJrpAACa8gAAmvLAAJrzQACa88AAmvRAAJr0wACa9UAAmvWAAJr2QACa+YAAmvzAAJr9QACa/cAAmv5AAJr+wACa/0AAmv/AAJsDAACbA8AAmwSAAJsFQACbBgAAmwbAAJsHgACbCAAAmxfAAJsYQACbGQAAmxmAAJsaQACbGoAAmxrAAJsbAACbG0AAmxvAAJscQACbHIAAmxzAAJsdQACbHYAAmy1AAJstwACbLkAAmy7AAJsvgACbL8AAmzAAAJswQACbMIAAmzEAAJsxgACbMcAAmzIAAJsygACbMsAAm0KAAJtDAACbQ4AAm0QAAJtEwACbRQAAm0VAAJtFgACbRcAAm0ZAAJtGwACbRwAAm0dAAJtHwACbSAAAm1fAAJtYQACbWMAAm1lAAJtaAACbWkAAm1qAAJtawACbWwAAm1uAAJtcAACbXEAAm1yAAJtdAACbXUAAm20AAJttgACbbgAAm26AAJtvQACbb4AAm2/AAJtwAACbcEAAm3DAAJtxQACbcYAAm3HAAJtyQACbcoAAm4JAAJuCwACbg0AAm4PAAJuEgACbhMAAm4UAAJuFQACbhYAAm4YAAJuGgACbhsAAm4cAAJuHgACbh8AAm5qAAJujQACbq0AAm7NAAJuzwACbtEAAm7TAAJu1QACbtgAAm7ZAAJu2gACbt0AAm7eAAJu4AACbuEAAm7jAAJu5gACbucAAm7oAAJu6wACbuwAAm7xAAJu/gACbwMAAm8FAAJvBwACbwwAAm8PAAJvEgACbxQAAm85AAJvXQACb4QAAm+oAAJvqwACb60AAm+vAAJvsQACb7MAAm+1AAJvtgACb7kAAm/GAAJv1wACb9kAAm/bAAJv3QACb98AAm/hAAJv4wACb+UAAm/nAAJv+AACb/sAAm/+AAJwAQACcAQAAnAHAAJwCgACcA0AAnAQAAJwEgACcFEAAnBTAAJwVQACcFcAAnBaAAJwWwACcFwAAnBdAAJwXgACcGAAAnBiAAJwYwACcGQAAnBmAAJwZwACcKYAAnCoAAJwqgACcKwAAnCvAAJwsAACcLEAAnCyAAJwswACcLUAAnC3AAJwuAACcLkAAnC7AAJwvAACcPsAAnD9AAJxAAACcQIAAnEFAAJxBgACcQcAAnEIAAJxCQACcQsAAnENAAJxDgACcQ8AAnERAAJxEgACcR8AAnEgAAJxIQACcSMAAnFiAAJxZAACcWYAAnFoAAJxawACcWwAAnFtAAJxbgACcW8AAnFxAAJxcwACcXQAAnF1AAJxdwACcXgAAnG3AAJxuQACcbsAAnG9AAJxwAACccEAAnHCAAJxwwACccQAAnHGAAJxyAACcckAAnHKAAJxzAACcc0AAnIMAAJyDgACchAAAnISAAJyFQACchYAAnIXAAJyGAACchkAAnIbAAJyHQACch4AAnIfAAJyIQACciIAAnJhAAJyYwACcmUAAnJnAAJyagACcmsAAnJsAAJybQACcm4AAnJwAAJycgACcnMAAnJ0AAJydgACcncAAnK2AAJyuAACcroAAnK8AAJyvwACcsAAAnLBAAJywgACcsMAAnLFAAJyxwACcsgAAnLJAAJyywACcswAAnLxAAJzFQACczwAAnNgAAJzYwACc2UAAnNnAAJzaQACc2sAAnNtAAJzbgACc3EAAnN+AAJzjQACc48AAnORAAJzkwACc5UAAnOXAAJzmQACc5sAAnOqAAJzrQACc7AAAnOzAAJztgACc7kAAnO8AAJzvwACc8EAAnQAAAJ0AgACdAQAAnQGAAJ0CQACdAoAAnQLAAJ0DAACdA0AAnQPAAJ0EQACdBIAAnQTAAJ0FQACdBYAAnRVAAJ0VwACdFkAAnRbAAJ0XgACdF8AAnRgAAJ0YQACdGIAAnRkAAJ0ZgACdGcAAnRoAAJ0agACdGsAAnSqAAJ0rAACdK4AAnSwAAJ0swACdLQAAnS1AAJ0tgACdLcAAnS5AAJ0uwACdLwAAnS9AAJ0vwACdMAAAnT/AAJ1AQACdQMAAnUFAAJ1CAACdQkAAnUKAAJ1CwACdQwAAnUOAAJ1EAACdREAAnUSAAJ1FAACdRUAAnVUAAJ1VgACdVgAAnVaAAJ1XQACdV4AAnVfAAJ1YAACdWEAAnVjAAJ1ZQACdWYAAnVnAAJ1aQACdWoAAnWpAAJ1qwACda0AAnWvAAJ1sgACdbMAAnW0AAJ1tQACdbYAAnW4AAJ1ugACdbsAAnW8AAJ1vgACdb8AAnX+AAJ2AAACdgIAAnYEAAJ2BwACdggAAnYJAAJ2CgACdgsAAnYNAAJ2DwACdhAAAnYRAAJ2EwACdhQAAnZfAAJ2ggACdqIAAnbCAAJ2xAACdsYAAnbIAAJ2ygACds0AAnbOAAJ2zwACdtIAAnbTAAJ21QACdtYAAnbYAAJ22wACdtwAAnbdAAJ24AACduEAAnbqAAJ29wACdvwAAnb+AAJ3AAACdwUAAncIAAJ3CwACdw0AAncyAAJ3VgACd30AAnehAAJ3pAACd6YAAneoAAJ3qgACd6wAAneuAAJ3rwACd7IAAne/AAJ30AACd9IAAnfUAAJ31gACd9gAAnfaAAJ33AACd94AAnfgAAJ38QACd/QAAnf3AAJ3+gACd/0AAngAAAJ4AwACeAYAAngJAAJ4CwACeEoAAnhMAAJ4TgACeFAAAnhTAAJ4VAACeFUAAnhWAAJ4VwACeFkAAnhbAAJ4XAACeF0AAnhfAAJ4YAACeJ8AAnihAAJ4owACeKUAAnioAAJ4qQACeKoAAnirAAJ4rAACeK4AAniwAAJ4sQACeLIAAni0AAJ4tQACePQAAnj2AAJ4+QACePsAAnj+AAJ4/wACeQAAAnkBAAJ5AgACeQQAAnkGAAJ5BwACeQgAAnkKAAJ5CwACeRgAAnkZAAJ5GgACeRwAAnlbAAJ5XQACeV8AAnlhAAJ5ZAACeWUAAnlmAAJ5ZwACeWgAAnlqAAJ5bAACeW0AAnluAAJ5cAACeXEAAnmwAAJ5sgACebQAAnm2AAJ5uQACeboAAnm7AAJ5vAACeb0AAnm/AAJ5wQACecIAAnnDAAJ5xQACecYAAnoFAAJ6BwACegkAAnoLAAJ6DgACeg8AAnoQAAJ6EQACehIAAnoUAAJ6FgACehcAAnoYAAJ6GgACehsAAnpaAAJ6XAACel4AAnpgAAJ6YwACemQAAnplAAJ6ZgACemcAAnppAAJ6awACemwAAnptAAJ6bwACenAAAnqvAAJ6sQACerMAAnq1AAJ6uAACerkAAnq6AAJ6uwACerwAAnq+AAJ6wAACesEAAnrCAAJ6xAACesUAAnrqAAJ7DgACezUAAntZAAJ7XAACe14AAntgAAJ7YgACe2QAAntmAAJ7ZwACe2oAAnt3AAJ7hgACe4gAAnuKAAJ7jAACe44AAnuQAAJ7kgACe5QAAnujAAJ7pgACe6kAAnusAAJ7rwACe7IAAnu1AAJ7uAACe7oAAnv5AAJ7+wACe/0AAnv/AAJ8AgACfAMAAnwEAAJ8BQACfAYAAnwIAAJ8CgACfAsAAnwMAAJ8DgACfA8AAnxOAAJ8UAACfFIAAnxUAAJ8VwACfFgAAnxZAAJ8WgACfFsAAnxdAAJ8XwACfGAAAnxhAAJ8YwACfGQAAnyjAAJ8pQACfKcAAnypAAJ8rAACfK0AAnyuAAJ8rwACfLAAAnyyAAJ8tAACfLUAAny2AAJ8uAACfLkAAnz4AAJ8+gACfP0AAnz/AAJ9AgACfQMAAn0EAAJ9BQACfQYAAn0IAAJ9CgACfQsAAn0MAAJ9DgACfQ8AAn1OAAJ9UAACfVIAAn1UAAJ9VwACfVgAAn1ZAAJ9WgACfVsAAn1dAAJ9XwACfWAAAn1hAAJ9YwACfWQAAn2jAAJ9pQACfacAAn2pAAJ9rAACfa0AAn2uAAJ9rwACfbAAAn2yAAJ9tAACfbUAAn22AAJ9uAACfbkAAn34AAJ9+gACff0AAn3/AAJ+AgACfgMAAn4EAAJ+BQACfgYAAn4IAAJ+CgACfgsAAn4MAAJ+DgACfg8AAn4YAAJ+GQACfhsAAn5aAAJ+XAACfl4AAn5gAAJ+YwACfmQAAn5lAAJ+ZgACfmcAAn5pAAJ+awACfmwAAn5tAAJ+bwACfnAAAn6vAAJ+sQACfrMAAn61AAJ+uAACfrkAAn66AAJ+uwACfrwAAn6+AAJ+wAACfsEAAn7CAAJ+xAACfsUAAn8EAAJ/BgACfwkAAn8LAAJ/DgACfw8AAn8QAAJ/EQACfxIAAn8UAAJ/FgACfxcAAn8YAAJ/GgACfxsAAn8kAAJ/JQACfycAAn9mAAJ/aAACf2oAAn9sAAJ/bwACf3AAAn9xAAJ/cgACf3MAAn91AAJ/dwACf3gAAn95AAJ/ewACf3wAAn+7AAJ/vQACf78AAn/BAAJ/xAACf8UAAn/GAAJ/xwACf8gAAn/KAAJ/zAACf80AAn/OAAJ/0AACf9EAAoAQAAKAEgACgBUAAoAXAAKAGgACgBsAAoAcAAKAHQACgB4AAoAgAAKAIgACgCMAAoAkAAKAJgACgCcAAoByAAKAlQACgLUAAoDVAAKA1wACgNkAAoDbAAKA3QACgN8AAoDgAAKA4QACgOQAAoDlAAKA5wACgOgAAoDqAAKA7AACgO0AAoDuAAKA8QACgPIAAoD7AAKBCAACgQ0AAoEPAAKBEQACgRYAAoEZAAKBHAACgR4AAoFDAAKBZwACgY4AAoGyAAKBtQACgbcAAoG5AAKBuwACgb0AAoG/AAKBwAACgcMAAoHQAAKB4QACgeMAAoHlAAKB5wACgekAAoHrAAKB7QACge8AAoHxAAKCAgACggUAAoIIAAKCCwACgg4AAoIRAAKCFAACghcAAoIaAAKCHAACglsAAoJdAAKCXwACgmEAAoJkAAKCZQACgmYAAoJnAAKCaAACgmoAAoJsAAKCbQACgm4AAoJwAAKCcQACgrAAAoKyAAKCtAACgrYAAoK5AAKCugACgrsAAoK8AAKCvQACgr8AAoLBAAKCwgACgsMAAoLFAAKCxgACgwUAAoMHAAKDCgACgwwAAoMPAAKDEAACgxEAAoMSAAKDEwACgxUAAoMXAAKDGAACgxkAAoMbAAKDHAACgykAAoMqAAKDKwACgy0AAoNsAAKDbgACg3AAAoNyAAKDdQACg3YAAoN3AAKDeAACg3kAAoN7AAKDfQACg34AAoN/AAKDgQACg4IAAoPBAAKDwwACg8UAAoPHAAKDygACg8sAAoPMAAKDzQACg84AAoPQAAKD0gACg9MAAoPUAAKD1gACg9cAAoQWAAKEGAAChBoAAoQcAAKEHwAChCAAAoQhAAKEIgAChCMAAoQlAAKEJwAChCgAAoQpAAKEKwAChCwAAoRrAAKEbQAChG8AAoRxAAKEdAAChHUAAoR2AAKEdwAChHgAAoR6AAKEfAAChH0AAoR+AAKEgAAChIEAAoTAAAKEwgAChMQAAoTGAAKEyQAChMoAAoTLAAKEzAAChM0AAoTPAAKE0QAChNIAAoTTAAKE1QAChNYAAoT7AAKFHwAChUYAAoVqAAKFbQAChW8AAoVxAAKFcwAChXUAAoV3AAKFeAAChXsAAoWIAAKFlwAChZkAAoWbAAKFnQAChZ8AAoWhAAKFowAChaUAAoW0AAKFtwAChboAAoW9AAKFwAAChcMAAoXGAAKFyQAChcsAAoYKAAKGDAAChg8AAoYRAAKGFAAChhUAAoYWAAKGFwAChhgAAoYaAAKGHAAChh0AAoYeAAKGIAAChiEAAoZgAAKGYgAChmQAAoZmAAKGaQAChmoAAoZrAAKGbAAChm0AAoZvAAKGcQAChnIAAoZzAAKGdQAChnYAAoa1AAKGtwAChrkAAoa7AAKGvgAChr8AAobAAAKGwQAChsIAAobEAAKGxgAChscAAobIAAKGygAChssAAocKAAKHDAAChw8AAocRAAKHFAAChxUAAocWAAKHFwAChxgAAocaAAKHHAAChx0AAoceAAKHIAAChyEAAodgAAKHYgACh2QAAodmAAKHaQACh2oAAodrAAKHbAACh20AAodvAAKHcQACh3IAAodzAAKHdQACh3YAAoe1AAKHtwACh7kAAoe7AAKHvgACh78AAofAAAKHwQACh8IAAofEAAKHxgACh8cAAofIAAKHygACh8sAAogKAAKIDAACiA4AAogQAAKIEwACiBQAAogVAAKIFgACiBcAAogZAAKIGwACiBwAAogdAAKIHwACiCAAAohrAAKIjgACiK4AAojOAAKI0AACiNIAAojUAAKI1gACiNgAAojZAAKI2gACiN0AAojeAAKI4AACiOEAAojjAAKI5QACiOYAAojnAAKI6gACiOsAAojwAAKI/QACiQIAAokEAAKJBgACiQsAAokOAAKJEQACiRMAAok4AAKJXAACiYMAAomnAAKJqgACiawAAomuAAKJsAACibIAAom0AAKJtQACibgAAonFAAKJ1gACidgAAonaAAKJ3AACid4AAongAAKJ4gACieQAAonmAAKJ9wACifoAAon9AAKKAAACigMAAooGAAKKCQACigwAAooPAAKKEQACilAAAopSAAKKVAACilYAAopZAAKKWgACilsAAopcAAKKXQACil8AAophAAKKYgACimMAAoplAAKKZgACiqUAAoqnAAKKqQACiqsAAoquAAKKrwACirAAAoqxAAKKsgACirQAAoq2AAKKtwACirgAAoq6AAKKuwACivoAAor8AAKK/wACiwEAAosEAAKLBQACiwYAAosHAAKLCAACiwoAAosMAAKLDQACiw4AAosQAAKLEQACix4AAosfAAKLIAACiyIAAothAAKLYwACi2UAAotnAAKLagACi2sAAotsAAKLbQACi24AAotwAAKLcgACi3MAAot0AAKLdgACi3cAAou2AAKLuAACi7oAAou8AAKLvwACi8AAAovBAAKLwgACi8MAAovFAAKLxwACi8gAAovJAAKLywACi8wAAowLAAKMDQACjA8AAowRAAKMFAACjBUAAowWAAKMFwACjBgAAowaAAKMHAACjB0AAoweAAKMIAACjCEAAoxgAAKMYgACjGQAAoxmAAKMaQACjGoAAoxrAAKMbAACjG0AAoxvAAKMcQACjHIAAoxzAAKMdQACjHYAAoy1AAKMtwACjLkAAoy7AAKMvgACjL8AAozAAAKMwQACjMIAAozEAAKMxgACjMcAAozIAAKMygACjMsAAozwAAKNFAACjTsAAo1fAAKNYgACjWQAAo1mAAKNaAACjWoAAo1sAAKNbQACjXAAAo19AAKNjAACjY4AAo2QAAKNkgACjZQAAo2WAAKNmAACjZoAAo2pAAKNrAACja8AAo2yAAKNtQACjbgAAo27AAKNvgACjcAAAo3/AAKOAQACjgMAAo4FAAKOCAACjgkAAo4KAAKOCwACjgwAAo4OAAKOEAACjhEAAo4SAAKOFAACjhUAAo5UAAKOVgACjlgAAo5aAAKOXQACjl4AAo5fAAKOYAACjmEAAo5jAAKOZQACjmYAAo5nAAKOaQACjmoAAo6pAAKOqwACjq0AAo6vAAKOsgACjrMAAo60AAKOtQACjrYAAo64AAKOugACjrsAAo68AAKOvgACjr8AAo7+AAKPAAACjwMAAo8FAAKPCAACjwkAAo8KAAKPCwACjwwAAo8OAAKPEAACjxEAAo8SAAKPFAACjxUAAo9UAAKPVgACj1gAAo9aAAKPXQACj14AAo9fAAKPYAACj2EAAo9jAAKPZQACj2YAAo9nAAKPaQACj2oAAo+pAAKPqwACj60AAo+vAAKPsgACj7MAAo+0AAKPtQACj7YAAo+4AAKPugACj7sAAo+8AAKPvgACj78AAo/+AAKQAAACkAIAApAEAAKQBwACkAgAApAJAAKQCgACkAsAApANAAKQDwACkBAAApARAAKQEwACkBQAApBfAAKQggACkKIAApDCAAKQxAACkMYAApDIAAKQygACkMwAApDNAAKQzgACkNEAApDSAAKQ1AACkNUAApDXAAKQ2QACkNoAApDbAAKQ3gACkN8AApDkAAKQ8QACkPYAApD4AAKQ+gACkP8AApECAAKRBQACkQcAApEsAAKRUAACkXcAApGbAAKRngACkaAAApGiAAKRpAACkaYAApGoAAKRqQACkawAApG5AAKRygACkcwAApHOAAKR0AACkdIAApHUAAKR1gACkdgAApHaAAKR6wACke4AApHxAAKR9AACkfcAApH6AAKR/QACkgAAApIDAAKSBQACkkQAApJGAAKSSAACkkoAApJNAAKSTgACkk8AApJQAAKSUQACklMAApJVAAKSVgACklcAApJZAAKSWgACkpkAApKbAAKSnQACkp8AApKiAAKSowACkqQAApKlAAKSpgACkqgAApKqAAKSqwACkqwAApKuAAKSrwACku4AApLwAAKS8wACkvUAApL4AAKS+QACkvoAApL7AAKS/AACkv4AApMAAAKTAQACkwIAApMEAAKTBQACkxIAApMTAAKTFAACkxYAApNVAAKTVwACk1kAApNbAAKTXgACk18AApNgAAKTYQACk2IAApNkAAKTZgACk2cAApNoAAKTagACk2sAApOqAAKTrAACk64AApOwAAKTswACk7QAApO1AAKTtgACk7cAApO5AAKTuwACk7wAApO9AAKTvwACk8AAApP/AAKUAQAClAMAApQFAAKUCAAClAkAApQKAAKUCwAClAwAApQOAAKUEAAClBEAApQSAAKUFAAClBUAApRUAAKUVgAClFgAApRaAAKUXQAClF4AApRfAAKUYAAClGEAApRjAAKUZQAClGYAApRnAAKUaQAClGoAApSpAAKUqwAClK0AApSvAAKUsgAClLMAApS0AAKUtQAClLYAApS4AAKUugAClLsAApS8AAKUvgAClL8AApTkAAKVCAAClS8AApVTAAKVVgAClVgAApVaAAKVXAAClV4AApVgAAKVYQAClWQAApVxAAKVfgAClYAAApWCAAKVhAAClYYAApWIAAKVigAClZcAApWaAAKVnQAClaAAApWjAAKVpgAClakAApWrAAKV6gAClewAApXvAAKV8QAClfQAApX1AAKV9gAClfcAApX4AAKV+gAClfwAApX9AAKV/gAClgAAApYBAAKWQAAClkIAApZEAAKWRgAClkkAApZKAAKWSwAClkwAApZNAAKWTwACllEAApZSAAKWUwACllUAApZWAAKWlQAClpcAApaZAAKWmwAClp4AApafAAKWoAAClqEAApaiAAKWpAAClqYAApanAAKWqAAClqoAAparAAKW6gACluwAApbvAAKW8QAClvQAApb1AAKW9gAClvcAApb4AAKW+gAClvwAApb9AAKW/gAClwAAApcBAAKXQAACl0IAApdEAAKXRgACl0kAApdKAAKXSwACl0wAApdNAAKXTwACl1EAApdSAAKXUwACl1UAApdWAAKXlQACl5cAApeZAAKXmwACl54AApefAAKXoAACl6EAApeiAAKXpAACl6YAApenAAKXqAACl6oAAperAAKXtAACl7UAApe3AAKX9gACl/gAApf6AAKX/AACl/4AApf/AAKYAAACmAEAApgCAAKYBAACmAYAApgHAAKYCAACmAoAApgLAAKYSgACmEwAAphOAAKYUAACmFIAAphTAAKYVAACmFUAAphWAAKYWAACmFoAAphbAAKYXAACmF4AAphfAAKYngACmKAAApiiAAKYpAACmKYAApinAAKYqAACmKkAApiqAAKYrAACmK4AApivAAKYsAACmLIAApizAAKY/gACmSEAAplBAAKZYQACmWMAApllAAKZZwACmWkAAplrAAKZbAACmW0AAplwAAKZcQACmXMAApl0AAKZdgACmXgAApl5AAKZegACmX0AApl+AAKZgwACmZAAApmVAAKZlwACmZkAApmeAAKZoQACmaQAApmmAAKZywACme8AApoWAAKaOgACmj0AApo/AAKaQQACmkMAAppFAAKaRwACmkgAAppLAAKaWAACmmkAApprAAKabQACmm8AAppxAAKacwACmnUAApp3AAKaeQACmooAApqNAAKakAACmpMAApqWAAKamQACmpwAApqfAAKaogACmqQAAprjAAKa5QACmucAAprpAAKa7AACmu0AApruAAKa7wACmvAAApryAAKa9AACmvUAApr2AAKa+AACmvkAAps4AAKbOgACmzwAAps+AAKbQQACm0IAAptDAAKbRAACm0UAAptHAAKbSQACm0oAAptLAAKbTQACm04AApuNAAKbjwACm5IAApuUAAKblwACm5gAApuZAAKbmgACm5sAApudAAKbnwACm6AAApuhAAKbowACm6QAApuxAAKbsgACm7MAApu1AAKb9AACm/YAApv4AAKb+gACm/0AApv+AAKb/wACnAAAApwBAAKcAwACnAUAApwGAAKcBwACnAkAApwKAAKcSQACnEsAApxNAAKcTwACnFIAApxTAAKcVAACnFUAApxWAAKcWAACnFoAApxbAAKcXAACnF4AApxfAAKcngACnKAAApyiAAKcpAACnKcAApyoAAKcqQACnKoAApyrAAKcrQACnK8AApywAAKcsQACnLMAApy0AAKc8wACnPUAApz3AAKc+QACnPwAApz9AAKc/gACnP8AAp0AAAKdAgACnQQAAp0FAAKdBgACnQgAAp0JAAKdSAACnUoAAp1MAAKdTgACnVEAAp1SAAKdUwACnVQAAp1VAAKdVwACnVkAAp1aAAKdWwACnV0AAp1eAAKdgwACnacAAp3OAAKd8gACnfUAAp33AAKd+QACnfsAAp39AAKd/wACngAAAp4DAAKeEAACnh8AAp4hAAKeIwACniUAAp4nAAKeKQACnisAAp4tAAKePAACnj8AAp5CAAKeRQACnkgAAp5LAAKeTgACnlEAAp5TAAKekgACnpQAAp6WAAKemAACnpsAAp6cAAKenQACnp4AAp6fAAKeoQACnqMAAp6kAAKepQACnqcAAp6oAAKe5wACnukAAp7rAAKe7QACnvAAAp7xAAKe8gACnvMAAp70AAKe9gACnvgAAp75AAKe+gACnvwAAp79AAKfPAACnz4AAp9AAAKfQgACn0UAAp9GAAKfRwACn0gAAp9JAAKfSwACn00AAp9OAAKfTwACn1EAAp9SAAKfkQACn5MAAp+WAAKfmAACn5sAAp+cAAKfnQACn54AAp+fAAKfoQACn6MAAp+kAAKfpQACn6cAAp+oAAKf5wACn+kAAp/rAAKf7QACn/AAAp/xAAKf8gACn/MAAp/0AAKf9gACn/gAAp/5AAKf+gACn/wAAp/9AAKgPAACoD4AAqBBAAKgQwACoEYAAqBHAAKgSAACoEkAAqBKAAKgTAACoE4AAqBPAAKgUAACoFIAAqBTAAKgbwACoK4AAqCwAAKgsgACoLQAAqC3AAKguAACoLkAAqC6AAKguwACoL0AAqC/AAKgwAACoMEAAqDDAAKgxAACoQ8AAqEyAAKhUgACoXIAAqF0AAKhdgACoXgAAqF6AAKhfAACoX0AAqF+AAKhgQACoYIAAqGEAAKhhQACoYcAAqGJAAKhigACoYsAAqGOAAKhjwACoZQAAqGhAAKhpgACoagAAqGqAAKhrwACobIAAqG1AAKhtwACodwAAqIAAAKiJwACoksAAqJOAAKiUAAColIAAqJUAAKiVgAColgAAqJZAAKiXAAComkAAqJ6AAKifAACon4AAqKAAAKiggACooQAAqKGAAKiiAACoooAAqKbAAKingACoqEAAqKkAAKipwACoqoAAqKtAAKisAACorMAAqK1AAKi9AACovYAAqL4AAKi+gACov0AAqL+AAKi/wACowAAAqMBAAKjAwACowUAAqMGAAKjBwACowkAAqMKAAKjSQACo0sAAqNNAAKjTwACo1IAAqNTAAKjVAACo1UAAqNWAAKjWAACo1oAAqNbAAKjXAACo14AAqNfAAKjngACo6AAAqOjAAKjpQACo6gAAqOpAAKjqgACo6sAAqOsAAKjrgACo7AAAqOxAAKjsgACo7QAAqO1AAKjwgACo8MAAqPEAAKjxgACpAUAAqQHAAKkCQACpAsAAqQOAAKkDwACpBAAAqQRAAKkEgACpBQAAqQWAAKkFwACpBgAAqQaAAKkGwACpFoAAqRcAAKkXgACpGAAAqRjAAKkZAACpGUAAqRmAAKkZwACpGkAAqRrAAKkbAACpG0AAqRvAAKkcAACpK8AAqSxAAKkswACpLUAAqS4AAKkuQACpLoAAqS7AAKkvAACpL4AAqTAAAKkwQACpMIAAqTEAAKkxQACpQQAAqUGAAKlCAACpQoAAqUNAAKlDgACpQ8AAqUQAAKlEQACpRMAAqUVAAKlFgACpRcAAqUZAAKlGgACpVkAAqVbAAKlXQACpV8AAqViAAKlYwACpWQAAqVlAAKlZgACpWgAAqVqAAKlawACpWwAAqVuAAKlbwACpZQAAqW4AAKl3wACpgMAAqYGAAKmCAACpgoAAqYMAAKmDgACphAAAqYRAAKmFAACpiEAAqYwAAKmMgACpjQAAqY2AAKmOAACpjoAAqY8AAKmPgACpk0AAqZQAAKmUwACplYAAqZZAAKmXAACpl8AAqZiAAKmZAACpqMAAqalAAKmpwACpqkAAqasAAKmrQACpq4AAqavAAKmsAACprIAAqa0AAKmtQACprYAAqa4AAKmuQACpvgAAqb6AAKm/AACpv4AAqcBAAKnAgACpwMAAqcEAAKnBQACpwcAAqcJAAKnCgACpwsAAqcNAAKnDgACp00AAqdPAAKnUQACp1MAAqdWAAKnVwACp1gAAqdZAAKnWgACp1wAAqdeAAKnXwACp2AAAqdiAAKnYwACp6IAAqekAAKnpgACp6gAAqerAAKnrAACp60AAqeuAAKnrwACp7EAAqezAAKntAACp7UAAqe3AAKnuAACp/cAAqf5AAKn+wACp/0AAqgAAAKoAQACqAIAAqgDAAKoBAACqAYAAqgIAAKoCQACqAoAAqgMAAKoDQACqEwAAqhOAAKoUAACqFIAAqhVAAKoVgACqFcAAqhYAAKoWQACqFsAAqhdAAKoXgACqF8AAqhhAAKoYgACqKEAAqijAAKopQACqKcAAqiqAAKoqwACqKwAAqitAAKorgACqLAAAqiyAAKoswACqLQAAqi2AAKotwACqQIAAqklAAKpRQACqWUAAqlnAAKpaQACqWsAAqltAAKpbwACqXAAAqlxAAKpdAACqXUAAql3AAKpeAACqXoAAql8AAKpfQACqX4AAqmBAAKpggACqYcAAqmUAAKpmQACqZsAAqmdAAKpogACqaUAAqmoAAKpqgACqc8AAqnzAAKqGgACqj4AAqpBAAKqQwACqkUAAqpHAAKqSQACqksAAqpMAAKqTwACqlwAAqptAAKqbwACqnEAAqpzAAKqdQACqncAAqp5AAKqewACqn0AAqqOAAKqkQACqpQAAqqXAAKqmgACqp0AAqqgAAKqowACqqYAAqqoAAKq5wACqukAAqrrAAKq7QACqvAAAqrxAAKq8gACqvMAAqr0AAKq9gACqvgAAqr5AAKq+gACqvwAAqr9AAKrPAACqz4AAqtAAAKrQgACq0UAAqtGAAKrRwACq0gAAqtJAAKrSwACq00AAqtOAAKrTwACq1EAAqtSAAKrkQACq5MAAquWAAKrmAACq5sAAqucAAKrnQACq54AAqufAAKroQACq6MAAqukAAKrpQACq6cAAquoAAKrtQACq7YAAqu3AAKruQACq/gAAqv6AAKr/AACq/4AAqwBAAKsAgACrAMAAqwEAAKsBQACrAcAAqwJAAKsCgACrAsAAqwNAAKsDgACrE0AAqxPAAKsUQACrFMAAqxWAAKsVwACrFgAAqxZAAKsWgACrFwAAqxeAAKsXwACrGAAAqxiAAKsYwACrKIAAqykAAKspgACrKgAAqyrAAKsrAACrK0AAqyuAAKsrwACrLEAAqyzAAKstAACrLUAAqy3AAKsuAACrPcAAqz5AAKs+wACrP0AAq0AAAKtAQACrQIAAq0DAAKtBAACrQYAAq0IAAKtCQACrQoAAq0MAAKtDQACrUwAAq1OAAKtUAACrVIAAq1VAAKtVgACrVcAAq1YAAKtWQACrVsAAq1dAAKtXgACrV8AAq1hAAKtYgACrYcAAq2rAAKt0gACrfYAAq35AAKt+wACrf0AAq3/AAKuAQACrgMAAq4EAAKuBwACrhQAAq4jAAKuJQACricAAq4pAAKuKwACri0AAq4vAAKuMQACrkAAAq5DAAKuRgACrkkAAq5MAAKuTwACrlIAAq5VAAKuVwACrpYAAq6YAAKumgACrpwAAq6fAAKuoAACrqEAAq6iAAKuowACrqUAAq6nAAKuqAACrqkAAq6rAAKurAACrusAAq7tAAKu7wACrvEAAq70AAKu9QACrvYAAq73AAKu+AACrvoAAq78AAKu/QACrv4AAq8AAAKvAQACr0AAAq9CAAKvRAACr0YAAq9JAAKvSgACr0sAAq9MAAKvTQACr08AAq9RAAKvUgACr1MAAq9VAAKvVgACr5UAAq+XAAKvmQACr5sAAq+eAAKvnwACr6AAAq+hAAKvogACr6QAAq+mAAKvpwACr6gAAq+qAAKvqwACr+oAAq/sAAKv7gACr/AAAq/zAAKv9AACr/UAAq/2AAKv9wACr/kAAq/7AAKv/AACr/0AAq//AAKwAAACsD8AArBBAAKwQwACsEUAArBIAAKwSQACsEoAArBLAAKwTAACsE4AArBQAAKwUQACsFIAArBUAAKwVQACsJQAArCWAAKwmAACsJoAArCdAAKwngACsJ8AArCgAAKwoQACsKMAArClAAKwpgACsKcAArCpAAKwqgACsLMAArC0AAKwtgACsPkAArEdAAKxQQACsWQAArGLAAKxqwACsdIAArH5AAKyGQACsj0AArJhAAKyYwACsmYAArJoAAKyagACsmwAArJvAAKycgACsnQAArJ2AAKyeQACsnsAArJ9AAKygAACsoMAArKEAAKyiQACspYAArKZAAKymwACsp4AArKhAAKyowACssgAArLsAAKzEwACszcAArM6AAKzPAACsz4AArNAAAKzQgACs0QAArNFAAKzSAACs1UAArNoAAKzagACs2wAArNuAAKzcAACs3IAArN0AAKzdgACs3gAArN6AAKzjQACs5AAArOTAAKzlgACs5kAArOcAAKznwACs6IAArOlAAKzqAACs6oAArPpAAKz6wACs+4AArPwAAKz8wACs/QAArP1AAKz9gACs/cAArP5AAKz+wACs/wAArP9AAKz/wACtAAAArQJAAK0CgACtAwAArRLAAK0TQACtE8AArRRAAK0VAACtFUAArRWAAK0VwACtFgAArRaAAK0XAACtF0AArReAAK0YAACtGEAArSgAAK0ogACtKUAArSnAAK0qgACtKsAArSsAAK0rQACtK4AArSwAAK0sgACtLMAArS0AAK0tgACtLcAArTAAAK0wQACtMMAArUCAAK1BAACtQYAArUIAAK1CwACtQwAArUNAAK1DgACtQ8AArURAAK1EwACtRQAArUVAAK1FwACtRgAArVXAAK1WQACtVwAArVeAAK1YQACtWIAArVjAAK1ZAACtWUAArVnAAK1aQACtWoAArVrAAK1bQACtW4AArV3AAK1eAACtXoAArW5AAK1uwACtb0AArW/AAK1wgACtcMAArXEAAK1xQACtcYAArXIAAK1ygACtcsAArXMAAK1zgACtc8AArYOAAK2EAACthMAArYVAAK2GAACthkAArYaAAK2GwACthwAArYeAAK2IAACtiEAArYiAAK2JAACtiUAArYyAAK2MwACtjQAArY2AAK2dQACtncAArZ5AAK2ewACtn4AArZ/AAK2gAACtoEAAraCAAK2hAACtoYAAraHAAK2iAACtooAAraLAAK2ygACtswAArbPAAK20QACttQAArbVAAK21gACttcAArbYAAK22gACttwAArbdAAK23gACtuAAArbhAAK27wACtvwAArcHAAK3CgACtw0AArcQAAK3EwACtxYAArchAAK3JAACtycAArcqAAK3LQACtzAAArcyAAK3PgACt0wAArdWAAK3YQACt2oAAre1AAK32AACt/gAArgYAAK4GgACuBwAArgeAAK4IAACuCMAArgkAAK4JQACuCgAArgpAAK4KwACuCwAArguAAK4MQACuDIAArgzAAK4NgACuDcAArg8AAK4SQACuE4AArhQAAK4UgACuFcAArhaAAK4XQACuF8AAriEAAK4qAACuM8AArjzAAK49gACuPgAArj6AAK4/AACuP4AArkAAAK5AQACuQQAArkRAAK5IgACuSQAArkmAAK5KAACuSoAArksAAK5LgACuTAAArkyAAK5QwACuUYAArlJAAK5TAACuU8AArlSAAK5VQACuVgAArlbAAK5XQACuZwAArmeAAK5oAACuaIAArmlAAK5pgACuacAArmoAAK5qQACuasAArmtAAK5rgACua8AArmxAAK5sgACufEAArnzAAK59QACufcAArn6AAK5+wACufwAArn9AAK5/gACugAAAroCAAK6AwACugQAAroGAAK6BwACukYAArpIAAK6SwACuk0AArpQAAK6UQACulIAArpTAAK6VAACulYAArpYAAK6WQACuloAArpcAAK6XQACumoAArprAAK6bAACum4AArqtAAK6rwACurEAArqzAAK6tgACurcAArq4AAK6uQACuroAArq8AAK6vgACur8AArrAAAK6wgACusMAArsCAAK7BAACuwYAArsIAAK7CwACuwwAArsNAAK7DgACuw8AArsRAAK7EwACuxQAArsVAAK7FwACuxgAArtXAAK7WQACu1sAArtdAAK7YAACu2EAArtiAAK7YwACu2QAArtmAAK7aAACu2kAArtqAAK7bAACu20AArusAAK7rgACu7AAAruyAAK7tQACu7YAAru3AAK7uAACu7kAAru7AAK7vQACu74AAru/AAK7wQACu8IAArwBAAK8AwACvAUAArwHAAK8CgACvAsAArwMAAK8DQACvA4AArwQAAK8EgACvBMAArwUAAK8FgACvBcAArw8AAK8YAACvIcAAryrAAK8rgACvLAAAryyAAK8tAACvLYAAry4AAK8uQACvLwAArzJAAK82AACvNoAArzcAAK83gACvOAAArziAAK85AACvOYAArz1AAK8+AACvPsAArz+AAK9AQACvQQAAr0HAAK9CgACvQwAAr1LAAK9TQACvU8AAr1RAAK9VAACvVUAAr1WAAK9VwACvVgAAr1aAAK9XAACvV0AAr1eAAK9YAACvWEAAr2gAAK9ogACvaQAAr2mAAK9qQACvaoAAr2rAAK9rAACva0AAr2vAAK9sQACvbIAAr2zAAK9tQACvbYAAr31AAK99wACvfkAAr37AAK9/gACvf8AAr4AAAK+AQACvgIAAr4EAAK+BgACvgcAAr4IAAK+CgACvgsAAr5KAAK+TAACvk4AAr5QAAK+UwACvlQAAr5VAAK+VgACvlcAAr5ZAAK+WwACvlwAAr5dAAK+XwACvmAAAr6fAAK+oQACvqMAAr6lAAK+qAACvqkAAr6qAAK+qwACvqwAAr6uAAK+sAACvrEAAr6yAAK+tAACvrUAAr70AAK+9gACvvgAAr76AAK+/QACvv4AAr7/AAK/AAACvwEAAr8DAAK/BQACvwYAAr8HAAK/CQACvwoAAr9JAAK/SwACv00AAr9PAAK/UgACv1MAAr9UAAK/VQACv1YAAr9YAAK/WgACv1sAAr9cAAK/XgACv18AAr+qAAK/zQACv+0AAsANAALADwACwBEAAsATAALAFQACwBgAAsAZAALAGgACwB0AAsAeAALAIAACwCEAAsAjAALAJgACwCcAAsAoAALAKwACwCwAAsAxAALAPgACwEMAAsBFAALARwACwEwAAsBPAALAUgACwFQAAsB5AALAnQACwMQAAsDoAALA6wACwO0AAsDvAALA8QACwPMAAsD1AALA9gACwPkAAsEGAALBFwACwRkAAsEbAALBHQACwR8AAsEhAALBIwACwSUAAsEnAALBOAACwTsAAsE+AALBQQACwUQAAsFHAALBSgACwU0AAsFQAALBUgACwZEAAsGTAALBlQACwZcAAsGaAALBmwACwZwAAsGdAALBngACwaAAAsGiAALBowACwaQAAsGmAALBpwACweYAAsHoAALB6gACwewAAsHvAALB8AACwfEAAsHyAALB8wACwfUAAsH3AALB+AACwfkAAsH7AALB/AACwjsAAsI9AALCQAACwkIAAsJFAALCRgACwkcAAsJIAALCSQACwksAAsJNAALCTgACwk8AAsJRAALCUgACwl8AAsJgAALCYQACwmMAAsKiAALCpAACwqYAAsKoAALCqwACwqwAAsKtAALCrgACwq8AAsKxAALCswACwrQAAsK1AALCtwACwrgAAsL3AALC+QACwvsAAsL9AALDAAACwwEAAsMCAALDAwACwwQAAsMGAALDCAACwwkAAsMKAALDDAACww0AAsNMAALDTgACw1AAAsNSAALDVQACw1YAAsNXAALDWAACw1kAAsNbAALDXQACw14AAsNfAALDYQACw2IAAsOhAALDowACw6UAAsOnAALDqgACw6sAAsOsAALDrQACw64AAsOwAALDsgACw7MAAsO0AALDtgACw7cAAsP2AALD+AACw/oAAsP8AALD/wACxAAAAsQBAALEAgACxAMAAsQFAALEBwACxAgAAsQJAALECwACxAwAAsQxAALEVQACxHwAAsSgAALEowACxKUAAsSnAALEqQACxKsAAsStAALErgACxLEAAsS+AALEzQACxM8AAsTRAALE0wACxNUAAsTXAALE2QACxNsAAsTqAALE7QACxPAAAsTzAALE9gACxPkAAsT8AALE/wACxQEAAsVAAALFQgACxUQAAsVGAALFSQACxUoAAsVLAALFTAACxU0AAsVPAALFUQACxVIAAsVTAALFVQACxVYAAsWVAALFlwACxZkAAsWbAALFngACxZ8AAsWgAALFoQACxaIAAsWkAALFpgACxacAAsWoAALFqgACxasAAsXqAALF7AACxe4AAsXwAALF8wACxfQAAsX1AALF9gACxfcAAsX5AALF+wACxfwAAsX9AALF/wACxgAAAsY/AALGQQACxkMAAsZFAALGSAACxkkAAsZKAALGSwACxkwAAsZOAALGUAACxlEAAsZSAALGVAACxlUAAsaUAALGlgACxpgAAsaaAALGnQACxp4AAsafAALGoAACxqEAAsajAALGpQACxqYAAsanAALGqQACxqoAAsbpAALG6wACxu0AAsbvAALG8gACxvMAAsb0AALG9QACxvYAAsb4AALG+gACxvsAAsb8AALG/gACxv8AAsc+AALHQAACx0IAAsdEAALHRwACx0gAAsdJAALHSgACx0sAAsdNAALHTwACx1AAAsdRAALHUwACx1QAAsefAALHwgACx+IAAsgCAALIBAACyAYAAsgIAALICgACyA0AAsgOAALIDwACyBIAAsgTAALIFQACyBYAAsgYAALIGwACyBwAAsgdAALIIAACyCEAAsgmAALIMwACyDgAAsg6AALIPAACyEEAAshEAALIRwACyEkAAshuAALIkgACyLkAAsjdAALI4AACyOIAAsjkAALI5gACyOgAAsjqAALI6wACyO4AAsj7AALJDAACyQ4AAskQAALJEgACyRQAAskWAALJGAACyRoAAskcAALJLQACyTAAAskzAALJNgACyTkAAsk8AALJPwACyUIAAslFAALJRwACyYYAAsmIAALJigACyYwAAsmPAALJkAACyZEAAsmSAALJkwACyZUAAsmXAALJmAACyZkAAsmbAALJnAACydsAAsndAALJ3wACyeEAAsnkAALJ5QACyeYAAsnnAALJ6AACyeoAAsnsAALJ7QACye4AAsnwAALJ8QACyjAAAsoyAALKNQACyjcAAso6AALKOwACyjwAAso9AALKPgACykAAAspCAALKQwACykQAAspGAALKRwACylQAAspVAALKVgACylgAAsqXAALKmQACypsAAsqdAALKoAACyqEAAsqiAALKowACyqQAAsqmAALKqAACyqkAAsqqAALKrAACyq0AAsrsAALK7gACyvAAAsryAALK9QACyvYAAsr3AALK+AACyvkAAsr7AALK/QACyv4AAsr/AALLAQACywIAAstBAALLQwACy0UAAstHAALLSgACy0sAAstMAALLTQACy04AAstQAALLUgACy1MAAstUAALLVgACy1cAAsuWAALLmAACy5oAAsucAALLnwACy6AAAsuhAALLogACy6MAAsulAALLpwACy6gAAsupAALLqwACy6wAAsvrAALL7QACy+8AAsvxAALL9AACy/UAAsv2AALL9wACy/gAAsv6AALL/AACy/0AAsv+AALMAAACzAEAAswmAALMSgACzHEAAsyVAALMmAACzJoAAsycAALMngACzKAAAsyiAALMowACzKYAAsyzAALMwgACzMQAAszGAALMyAACzMoAAszMAALMzgACzNAAAszfAALM4gACzOUAAszoAALM6wACzO4AAszxAALM9AACzPYAAs01AALNNwACzTkAAs07AALNPgACzT8AAs1AAALNQQACzUIAAs1EAALNRgACzUcAAs1IAALNSgACzUsAAs2KAALNjAACzY4AAs2QAALNkwACzZQAAs2VAALNlgACzZcAAs2ZAALNmwACzZwAAs2dAALNnwACzaAAAs3fAALN4QACzeMAAs3lAALN6AACzekAAs3qAALN6wACzewAAs3uAALN8AACzfEAAs3yAALN9AACzfUAAs40AALONgACzjkAAs47AALOPgACzj8AAs5AAALOQQACzkIAAs5EAALORgACzkcAAs5IAALOSgACzksAAs5OAALOjQACzo8AAs6RAALOkwACzpYAAs6XAALOmAACzpkAAs6aAALOnAACzp4AAs6fAALOoAACzqIAAs6jAALO4gACzuQAAs7mAALO6AACzusAAs7sAALO7QACzu4AAs7vAALO8QACzvMAAs70AALO9QACzvcAAs74AALPNwACzzkAAs87AALPPQACz0AAAs9BAALPQgACz0MAAs9EAALPRgACz0gAAs9JAALPSgACz0wAAs9NAALPmAACz7sAAs/bAALP+wACz/0AAs//AALQAQAC0AMAAtAGAALQBwAC0AgAAtALAALQDAAC0A4AAtAPAALQEQAC0BQAAtAVAALQFgAC0BkAAtAaAALQHwAC0CwAAtAxAALQMwAC0DUAAtA6AALQPQAC0EAAAtBCAALQZwAC0IsAAtCyAALQ1gAC0NkAAtDbAALQ3QAC0N8AAtDhAALQ4wAC0OQAAtDnAALQ9AAC0QUAAtEHAALRCQAC0QsAAtENAALRDwAC0REAAtETAALRFQAC0SYAAtEpAALRLAAC0S8AAtEyAALRNQAC0TgAAtE7AALRPgAC0UAAAtF/AALRgQAC0YMAAtGFAALRiAAC0YkAAtGKAALRiwAC0YwAAtGOAALRkAAC0ZEAAtGSAALRlAAC0ZUAAtHUAALR1gAC0dgAAtHaAALR3QAC0d4AAtHfAALR4AAC0eEAAtHjAALR5QAC0eYAAtHnAALR6QAC0eoAAtIpAALSKwAC0i4AAtIwAALSMwAC0jQAAtI1AALSNgAC0jcAAtI5AALSOwAC0jwAAtI9AALSPwAC0kAAAtJNAALSTgAC0k8AAtJRAALSkAAC0pIAAtKUAALSlgAC0pkAAtKaAALSmwAC0pwAAtKdAALSnwAC0qEAAtKiAALSowAC0qUAAtKmAALS5QAC0ucAAtLpAALS6wAC0u4AAtLvAALS8AAC0vEAAtLyAALS9AAC0vYAAtL3AALS+AAC0voAAtL7AALTOgAC0zwAAtM+AALTQAAC00MAAtNEAALTRQAC00YAAtNHAALTSQAC00sAAtNMAALTTQAC008AAtNQAALTjwAC05EAAtOTAALTlQAC05gAAtOZAALTmgAC05sAAtOcAALTngAC06AAAtOhAALTogAC06QAAtOlAALT5AAC0+YAAtPoAALT6gAC0+0AAtPuAALT7wAC0/AAAtPxAALT8wAC0/UAAtP2AALT9wAC0/kAAtP6AALUHwAC1EMAAtRqAALUjgAC1JEAAtSTAALUlQAC1JcAAtSZAALUmwAC1JwAAtSfAALUrAAC1LsAAtS9AALUvwAC1MEAAtTDAALUxQAC1McAAtTJAALU2AAC1NsAAtTeAALU4QAC1OQAAtTnAALU6gAC1O0AAtTvAALVLgAC1TAAAtUyAALVNAAC1TcAAtU4AALVOQAC1ToAAtU7AALVPQAC1T8AAtVAAALVQQAC1UMAAtVEAALVgwAC1YUAAtWHAALViQAC1YwAAtWNAALVjgAC1Y8AAtWQAALVkgAC1ZQAAtWVAALVlgAC1ZgAAtWZAALV2AAC1doAAtXcAALV3gAC1eEAAtXiAALV4wAC1eQAAtXlAALV5wAC1ekAAtXqAALV6wAC1e0AAtXuAALWLQAC1i8AAtYxAALWMwAC1jYAAtY3AALWOAAC1jkAAtY6AALWPAAC1j4AAtY/AALWQAAC1kIAAtZDAALWggAC1oQAAtaGAALWiAAC1osAAtaMAALWjQAC1o4AAtaPAALWkQAC1pMAAtaUAALWlQAC1pcAAtaYAALW1wAC1tkAAtbbAALW3QAC1uAAAtbhAALW4gAC1uMAAtbkAALW5gAC1ugAAtbpAALW6gAC1uwAAtbtAALXLAAC1y4AAtcwAALXMgAC1zUAAtc2AALXNwAC1zgAAtc5AALXOwAC1z0AAtc+AALXPwAC10EAAtdCAALXjQAC17AAAtfQAALX8AAC1/IAAtf0AALX9gAC1/gAAtf7AALX/AAC1/0AAtgAAALYAQAC2AMAAtgEAALYBgAC2AkAAtgKAALYCwAC2A4AAtgPAALYFAAC2CEAAtgmAALYKAAC2CoAAtgvAALYMgAC2DUAAtg3AALYXAAC2IAAAtinAALYywAC2M4AAtjQAALY0gAC2NQAAtjWAALY2AAC2NkAAtjcAALY6QAC2PoAAtj8AALY/gAC2QAAAtkCAALZBAAC2QYAAtkIAALZCgAC2RsAAtkeAALZIQAC2SQAAtknAALZKgAC2S0AAtkwAALZMwAC2TUAAtl0AALZdgAC2XgAAtl6AALZfQAC2X4AAtl/AALZgAAC2YEAAtmDAALZhQAC2YYAAtmHAALZiQAC2YoAAtnJAALZywAC2c0AAtnPAALZ0gAC2dMAAtnUAALZ1QAC2dYAAtnYAALZ2gAC2dsAAtncAALZ3gAC2d8AAtoeAALaIAAC2iMAAtolAALaKAAC2ikAAtoqAALaKwAC2iwAAtouAALaMAAC2jEAAtoyAALaNAAC2jUAAtpCAALaQwAC2kQAAtpGAALahQAC2ocAAtqJAALaiwAC2o4AAtqPAALakAAC2pEAAtqSAALalAAC2pYAAtqXAALamAAC2poAAtqbAALa2gAC2twAAtreAALa4AAC2uMAAtrkAALa5QAC2uYAAtrnAALa6QAC2usAAtrsAALa7QAC2u8AAtrwAALbLwAC2zEAAtszAALbNQAC2zgAAts5AALbOgAC2zsAAts8AALbPgAC20AAAttBAALbQgAC20QAAttFAALbhAAC24YAAtuIAALbigAC240AAtuOAALbjwAC25AAAtuRAALbkwAC25UAAtuWAALblwAC25kAAtuaAALb2QAC29sAAtvdAALb3wAC2+IAAtvjAALb5AAC2+UAAtvmAALb6AAC2+oAAtvrAALb7AAC2+4AAtvvAALcFAAC3DgAAtxfAALcgwAC3IYAAtyIAALcigAC3IwAAtyOAALckAAC3JEAAtyUAALcoQAC3LAAAtyyAALctAAC3LYAAty4AALcugAC3LwAAty+AALczQAC3NAAAtzTAALc1gAC3NkAAtzcAALc3wAC3OIAAtzkAALdIwAC3SUAAt0nAALdKQAC3SwAAt0tAALdLgAC3S8AAt0wAALdMgAC3TQAAt01AALdNgAC3TgAAt05AALdeAAC3XoAAt18AALdfgAC3YEAAt2CAALdgwAC3YQAAt2FAALdhwAC3YkAAt2KAALdiwAC3Y0AAt2OAALdzQAC3c8AAt3RAALd0wAC3dYAAt3XAALd2AAC3dkAAt3aAALd3AAC3d4AAt3fAALd4AAC3eIAAt3jAALeIgAC3iQAAt4mAALeKAAC3isAAt4sAALeLQAC3i4AAt4vAALeMQAC3jMAAt40AALeNQAC3jcAAt44AALedwAC3nkAAt57AALefQAC3oAAAt6BAALeggAC3oMAAt6EAALehgAC3ogAAt6JAALeigAC3owAAt6NAALezAAC3s4AAt7QAALe0gAC3tUAAt7WAALe1wAC3tgAAt7ZAALe2wAC3t0AAt7eAALe3wAC3uEAAt7iAALfIQAC3yMAAt8lAALfJwAC3yoAAt8rAALfLAAC3y0AAt8uAALfMAAC3zIAAt8zAALfNAAC3zYAAt83AALfQAAC30EAAt9DAALfhgAC36oAAt/OAALf8QAC4BgAAuA4AALgXwAC4IYAAuCmAALgygAC4O4AAuDwAALg8wAC4PUAAuD3AALg+QAC4PwAAuD/AALhAQAC4QMAAuEGAALhCAAC4QoAAuENAALhEAAC4REAAuEWAALhIwAC4SYAAuEoAALhKwAC4S4AAuEwAALhVQAC4XkAAuGgAALhxAAC4ccAAuHJAALhywAC4c0AAuHPAALh0QAC4dIAAuHVAALh4gAC4fUAAuH3AALh+QAC4fsAAuH9AALh/wAC4gEAAuIDAALiBQAC4gcAAuIaAALiHQAC4iAAAuIjAALiJgAC4ikAAuIsAALiLwAC4jIAAuI1AALiNwAC4nYAAuJ4AALiewAC4n0AAuKAAALigQAC4oIAAuKDAALihAAC4oYAAuKIAALiiQAC4ooAAuKMAALijQAC4pYAAuKXAALimQAC4tgAAuLaAALi3AAC4t4AAuLhAALi4gAC4uMAAuLkAALi5QAC4ucAAuLpAALi6gAC4usAAuLtAALi7gAC4y0AAuMvAALjMgAC4zQAAuM3AALjOAAC4zkAAuM6AALjOwAC4z0AAuM/AALjQAAC40EAAuNDAALjRAAC400AAuNOAALjUAAC448AAuORAALjkwAC45UAAuOYAALjmQAC45oAAuObAALjnAAC454AAuOgAALjoQAC46IAAuOkAALjpQAC4+QAAuPmAALj6QAC4+sAAuPuAALj7wAC4/AAAuPxAALj8gAC4/QAAuP2AALj9wAC4/gAAuP6AALj+wAC5AQAAuQFAALkBwAC5EYAAuRIAALkSgAC5EwAAuRPAALkUAAC5FEAAuRSAALkUwAC5FUAAuRXAALkWAAC5FkAAuRbAALkXAAC5JsAAuSdAALkoAAC5KIAAuSlAALkpgAC5KcAAuSoAALkqQAC5KsAAuStAALkrgAC5K8AAuSxAALksgAC5L8AAuTAAALkwQAC5MMAAuUCAALlBAAC5QYAAuUIAALlCwAC5QwAAuUNAALlDgAC5Q8AAuURAALlEwAC5RQAAuUVAALlFwAC5RgAAuVXAALlWQAC5VwAAuVeAALlYQAC5WIAAuVjAALlZAAC5WUAAuVnAALlaQAC5WoAAuVrAALlbQAC5W4AAuWKAALllwAC5aIAAuWlAALlqAAC5asAAuWuAALlsQAC5bwAAuW/AALlwgAC5cUAAuXIAALlywAC5c0AAuXgAALl7gAC5fcAAuYJAALmEQAC5lwAAuZ/AALmnwAC5r8AAubBAALmwwAC5sUAAubHAALmygAC5ssAAubMAALmzwAC5tAAAubSAALm0wAC5tUAAubYAALm2QAC5toAAubdAALm3gAC5ucAAub0AALm+QAC5vsAAub9AALnAgAC5wUAAucIAALnCgAC5y8AAudTAALnegAC554AAuehAALnowAC56UAAuenAALnqQAC56sAAuesAALnrwAC57wAAufNAALnzwAC59EAAufTAALn1QAC59cAAufZAALn2wAC590AAufuAALn8QAC5/QAAuf3AALn+gAC5/0AAugAAALoAwAC6AYAAugIAALoRwAC6EkAAuhLAALoTQAC6FAAAuhRAALoUgAC6FMAAuhUAALoVgAC6FgAAuhZAALoWgAC6FwAAuhdAALonAAC6J4AAuigAALoogAC6KUAAuimAALopwAC6KgAAuipAALoqwAC6K0AAuiuAALorwAC6LEAAuiyAALo8QAC6PMAAuj2AALo+AAC6PsAAuj8AALo/QAC6P4AAuj/AALpAQAC6QMAAukEAALpBQAC6QcAAukIAALpFQAC6RYAAukXAALpGQAC6VgAAulaAALpXAAC6V4AAulhAALpYgAC6WMAAulkAALpZQAC6WcAAulpAALpagAC6WsAAultAALpbgAC6a0AAumvAALpsQAC6bMAAum2AALptwAC6bgAAum5AALpugAC6bwAAum+AALpvwAC6cAAAunCAALpwwAC6gIAAuoEAALqBgAC6ggAAuoLAALqDAAC6g0AAuoOAALqDwAC6hEAAuoTAALqFAAC6hUAAuoXAALqGAAC6lcAAupZAALqWwAC6l0AAupgAALqYQAC6mIAAupjAALqZAAC6mYAAupoAALqaQAC6moAAupsAALqbQAC6qwAAuquAALqsAAC6rIAAuq1AALqtgAC6rcAAuq4AALquQAC6rsAAuq9AALqvgAC6r8AAurBAALqwgAC6ucAAusLAALrMgAC61YAAutZAALrWwAC610AAutfAALrYQAC62MAAutkAALrZwAC63QAAuuDAALrhQAC64cAAuuJAALriwAC640AAuuPAALrkQAC66AAAuujAALrpgAC66kAAuusAALrrwAC67IAAuu1AALrtwAC6/YAAuv4AALr+gAC6/wAAuv/AALsAAAC7AEAAuwCAALsAwAC7AUAAuwHAALsCAAC7AkAAuwLAALsDAAC7EsAAuxNAALsTwAC7FEAAuxUAALsVQAC7FYAAuxXAALsWAAC7FoAAuxcAALsXQAC7F4AAuxgAALsYQAC7KAAAuyiAALspAAC7KYAAuypAALsqgAC7KsAAuysAALsrQAC7K8AAuyxAALssgAC7LMAAuy1AALstgAC7PUAAuz3AALs+gAC7PwAAuz/AALtAAAC7QEAAu0CAALtAwAC7QUAAu0HAALtCAAC7QkAAu0LAALtDAAC7UsAAu1NAALtTwAC7VEAAu1UAALtVQAC7VYAAu1XAALtWAAC7VoAAu1cAALtXQAC7V4AAu1gAALtYQAC7aAAAu2iAALtpQAC7acAAu2qAALtqwAC7awAAu2tAALtrgAC7bAAAu2yAALtswAC7bQAAu22AALttwAC7d4AAu4dAALuHwAC7iEAAu4jAALuJgAC7icAAu4oAALuKQAC7ioAAu4sAALuLgAC7i8AAu4wAALuMgAC7jMAAu5+AALuoQAC7sEAAu7hAALu4wAC7uUAAu7nAALu6QAC7uwAAu7tAALu7gAC7vEAAu7yAALu9AAC7vUAAu73AALu+gAC7vsAAu78AALu/wAC7wAAAu8JAALvFgAC7xsAAu8dAALvHwAC7yQAAu8nAALvKgAC7ywAAu9RAALvdQAC75wAAu/AAALvwwAC78UAAu/HAALvyQAC78sAAu/NAALvzgAC79EAAu/eAALv7wAC7/EAAu/zAALv9QAC7/cAAu/5AALv+wAC7/0AAu//AALwEAAC8BMAAvAWAALwGQAC8BwAAvAfAALwIgAC8CUAAvAoAALwKgAC8GkAAvBrAALwbQAC8G8AAvByAALwcwAC8HQAAvB1AALwdgAC8HgAAvB6AALwewAC8HwAAvB+AALwfwAC8L4AAvDAAALwwgAC8MQAAvDHAALwyAAC8MkAAvDK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AANAnwADQKAAA0ChAANAowADQKUAA0CmAANApwADQKkAA0CqAANA6QADQOsAA0DtAANA7wADQPIAA0DzAANA9AADQPUAA0D2AANA+AADQPoAA0D7AANA/AADQP4AA0D/AANBPgADQUAAA0FCAANBRAADQUcAA0FIAANBSQADQUoAA0FLAANBTQADQU8AA0FQAANBUQADQVMAA0FUAANBkwADQZUAA0GXAANBmQADQZwAA0GdAANBngADQZ8AA0GgAANBogADQaQAA0GlAANBpgADQagAA0GpAANB6AADQeoAA0HsAANB7gADQfEAA0HyAANB8wADQfQAA0H1AANB9wADQfkAA0H6AANB+wADQf0AA0H+AANCPQADQj8AA0JBAANCQwADQkYAA0JHAANCSAADQkkAA0JKAANCTAADQk4AA0JPAANCUAADQlIAA0JTAANCkgADQpQAA0KWAANCmAADQpsAA0KcAANCnQADQp4AA0KfAANCoQADQqMAA0KkAANCpQADQqcAA0KoAANCsQADQrIAA0K0AANC9wADQxsAA0M/AANDYgADQ4kAA0OpAAND0AADQ/cAA0QXAANEOwADRF8AA0RhAANEZAADRGYAA0RoAANEagADRG0AA0RwAANEcgADRHQAA0R3AANEeQADRHsAA0R+AANEgQADRIIAA0SHAANElAADRJcAA0SZAANEnAADRJ8AA0ShAANExgADROoAA0URAANFNQADRTgAA0U6AANFPAADRT4AA0VAAANFQgADRUMAA0VGAANFUwADRWYAA0VoAANFagADRWwAA0VuAANFcAADRXIAA0V0AANFdgADRXgAA0WLAANFjgADRZEAA0WUAANFlwADRZoAA0WdAANFoAADRaMAA0WmAANFqAADRecAA0XpAANF7AADRe4AA0XxAANF8gADRfMAA0X0AANF9QADRfcAA0X5AANF+gADRfsAA0X9AANF/gADRgcAA0YIAANGCgADRkkAA0ZLAANGTQADRk8AA0ZSAANGUwADRlQAA0ZVAANGVgADRlgAA0ZaAANGWwADRlwAA0ZeAANGXwADRp4AA0agAANGowADRqUAA0aoAANGqQADRqoAA0arAANGrAADRq4AA0awAANGsQADRrIAA0a0AANGtQADRr4AA0a/AANGwQADRwAAA0cCAANHBAADRwYAA0cJAANHCgADRwsAA0cMAANHDQADRw8AA0cRAANHEgADRxMAA0cVAANHFgADR1UAA0dXAANHWgADR1wAA0dfAANHYAADR2EAA0diAANHYwADR2UAA0dnAANHaAADR2kAA0drAANHbAADR3UAA0d2AANHeAADR7cAA0e5AANHuwADR70AA0fAAANHwQADR8IAA0fDAANHxAADR8YAA0fIAANHyQADR8oAA0fMAANHzQADSAwAA0gOAANIEQADSBMAA0gWAANIFwADSBgAA0gZAANIGgADSBwAA0geAANIHwADSCAAA0giAANIIwADSDAAA0gxAANIMgADSDQAA0hzAANIdQADSHcAA0h5AANIfAADSH0AA0h+AANIfwADSIAAA0iCAANIhAADSIUAA0iGAANIiAADSIkAA0jIAANIygADSM0AA0jPAANI0gADSNMAA0jUAANI1QADSNYAA0jYAANI2gADSNsAA0jcAANI3gADSN8AA0j3AANJBAADSQ8AA0kSAANJFQADSRgAA0kbAANJHgADSSkAA0ksAANJLwADSTIAA0k1AANJOAADSToAA0lDAANJTAADSVYAA0mhAANJxAADSeQAA0oEAANKBgADSggAA0oKAANKDAADSg8AA0oQAANKEQADShQAA0oVAANKFwADShgAA0oaAANKHQADSh4AA0ofAANKIgADSiMAA0ooAANKNQADSjoAA0o8AANKPgADSkMAA0pGAANKSQADSksAA0pwAANKlAADSrsAA0rfAANK4gADSuQAA0rmAANK6AADSuoAA0rsAANK7QADSvAAA0r9AANLDgADSxAAA0sSAANLFAADSxYAA0sYAANLGgADSxwAA0seAANLLwADSzIAA0s1AANLOAADSzsAA0s+AANLQQADS0QAA0tHAANLSQADS4gAA0uKAANLjAADS44AA0uRAANLkgADS5MAA0uUAANLlQADS5cAA0uZAANLmgADS5sAA0udAANLngADS90AA0vfAANL4QADS+MAA0vmAANL5wADS+gAA0vpAANL6gADS+wAA0vuAANL7wADS/AAA0vyAANL8wADTDIAA0w0AANMNwADTDkAA0w8AANMPQADTD4AA0w/AANMQAADTEIAA0xEAANMRQADTEYAA0xIAANMSQADTFYAA0xXAANMWAADTFoAA0yZAANMmwADTJ0AA0yfAANMogADTKMAA0ykAANMpQADTKYAA0yoAANMqgADTKsAA0ysAANMrgADTK8AA0zuAANM8AADTPIAA0z0AANM9wADTPgAA0z5AANM+gADTPsAA0z9AANM/wADTQAAA00BAANNAwADTQQAA01DAANNRQADTUcAA01JAANNTAADTU0AA01OAANNTwADTVAAA01SAANNVAADTVUAA01WAANNWAADTVkAA02YAANNmgADTZwAA02eAANNoQADTaIAA02jAANNpAADTaUAA02nAANNqQADTaoAA02rAANNrQADTa4AA03tAANN7wADTfEAA03zAANN9gADTfcAA034AANN+QADTfoAA038AANN/gADTf8AA04AAANOAgADTgMAA04oAANOTAADTnMAA06XAANOmgADTpwAA06eAANOoAADTqIAA06kAANOpQADTqgAA061AANOxAADTsYAA07IAANOygADTswAA07OAANO0AADTtIAA07hAANO5AADTucAA07qAANO7QADTvAAA07zAANO9gADTvgAA083AANPOQADTzsAA089AANPQAADT0EAA09CAANPQwADT0QAA09GAANPSAADT0kAA09KAANPTAADT00AA0+MAANPjgADT5AAA0+SAANPlQADT5YAA0+XAANPmAADT5kAA0+bAANPnQADT54AA0+fAANPoQADT6IAA0/hAANP4wADT+UAA0/nAANP6gADT+sAA0/sAANP7QADT+4AA0/wAANP8gADT/MAA0/0AANP9gADT/cAA1A2AANQOAADUDsAA1A9AANQQAADUEEAA1BCAANQQwADUEQAA1BGAANQSAADUEkAA1BKAANQTAADUE0AA1BQAANQjwADUJEAA1CTAANQlQADUJgAA1CZAANQmgADUJsAA1CcAANQngADUKAAA1ChAANQogADUKQAA1ClAANQ5AADUOYAA1DoAANQ6gADUO0AA1DuAANQ7wADUPAAA1DxAANQ8wADUPUAA1D2AANQ9wADUPkAA1D6AANROQADUTsAA1E9AANRPwADUUIAA1FDAANRRAADUUUAA1FGAANRSAADUUoAA1FLAANRTAADUU4AA1FPAANRmgADUb0AA1HdAANR/QADUf8AA1IBAANSAwADUgUAA1IIAANSCQADUgoAA1INAANSDgADUhAAA1IRAANSEwADUhYAA1IXAANSGAADUhsAA1IcAANSIQADUi4AA1IzAANSNQADUjcAA1I8AANSPwADUkIAA1JEAANSaQADUo0AA1K0AANS2AADUtsAA1LdAANS3wADUuEAA1LjAANS5QADUuYAA1LpAANS9gADUwcAA1MJAANTCwADUw0AA1MPAANTEQADUxMAA1MVAANTFwADUygAA1MrAANTLgADUzEAA1M0AANTNwADUzoAA1M9AANTQAADU0IAA1OBAANTgwADU4UAA1OHAANTigADU4sAA1OMAANTjQADU44AA1OQAANTkgADU5MAA1OUAANTlgADU5cAA1PWAANT2AADU9oAA1PcAANT3wADU+AAA1PhAANT4gADU+MAA1PlAANT5wADU+gAA1PpAANT6wADU+wAA1QrAANULQADVDAAA1QyAANUNQADVDYAA1Q3AANUOAADVDkAA1Q7AANUPQADVD4AA1Q/AANUQQADVEIAA1RPAANUUAADVFEAA1RTAANUkgADVJQAA1SWAANUmAADVJsAA1ScAANUnQADVJ4AA1SfAANUoQADVKMAA1SkAANUpQADVKcAA1SoAANU5wADVOkAA1TrAANU7QADVPAAA1TxAANU8gADVPMAA1T0AANU9gADVPgAA1T5AANU+gADVPwAA1T9AANVPAADVT4AA1VAAANVQgADVUUAA1VGAANVRwADVUgAA1VJAANVSwADVU0AA1VOAANVTwADVVEAA1VSAANVkQADVZMAA1WVAANVlwADVZoAA1WbAANVnAADVZ0AA1WeAANVoAADVaIAA1WjAANVpAADVaYAA1WnAANV5gADVegAA1XqAANV7AADVe8AA1XwAANV8QADVfIAA1XzAANV9QADVfcAA1X4AANV+QADVfsAA1X8AANWIQADVkUAA1ZsAANWkAADVpMAA1aVAANWlwADVpkAA1abAANWnQADVp4AA1ahAANWrgADVr0AA1a/AANWwQADVsMAA1bFAANWxwADVskAA1bLAANW2gADVt0AA1bgAANW4wADVuYAA1bpAANW7AADVu8AA1bxAANXMAADVzIAA1c0AANXNgADVzkAA1c6AANXOwADVzwAA1c9AANXPwADV0EAA1dCAANXQwADV0UAA1dGAANXhQADV4cAA1eJAANXiwADV44AA1ePAANXkAADV5EAA1eSAANXlAADV5YAA1eXAANXmAADV5oAA1ebAANX2gADV9wAA1feAANX4AADV+MAA1fkAANX5QADV+YAA1fnAANX6QADV+sAA1fsAANX7QADV+8AA1fwAANYLwADWDEAA1g0AANYNgADWDkAA1g6AANYOwADWDwAA1g9AANYPwADWEEAA1hCAANYQwADWEUAA1hGAANYhQADWIcAA1iJAANYiwADWI4AA1iPAANYkAADWJEAA1iSAANYlAADWJYAA1iXAANYmAADWJoAA1ibAANY2gADWNwAA1jeAANY4AADWOMAA1jkAANY5QADWOYAA1jnAANY6QADWOsAA1jsAANY7QADWO8AA1jwAANZLwADWTEAA1kzAANZNQADWTgAA1k5AANZOgADWTsAA1k8AANZPgADWUAAA1lBAANZQgADWUQAA1lFAANZkAADWbMAA1nTAANZ8wADWfUAA1n3AANZ+QADWfsAA1n+AANZ/wADWgAAA1oDAANaBAADWgYAA1oHAANaCQADWgwAA1oNAANaDgADWhEAA1oSAANaFwADWiQAA1opAANaKwADWi0AA1oyAANaNQADWjgAA1o6AANaXwADWoMAA1qqAANazgADWtEAA1rTAANa1QADWtcAA1rZAANa2wADWtwAA1rfAANa7AADWv0AA1r/AANbAQADWwMAA1sFAANbBwADWwkAA1sLAANbDQADWx4AA1shAANbJAADWycAA1sqAANbLQADWzAAA1szAANbNgADWzgAA1t3AANbeQADW3sAA1t9AANbgAADW4EAA1uCAANbgwADW4QAA1uGAANbiAADW4kAA1uKAANbjAADW40AA1vMAANbzgADW9AAA1vSAANb1QADW9YAA1vXAANb2AADW9kAA1vbAANb3QADW94AA1vfAANb4QADW+IAA1whAANcIwADXCYAA1woAANcKwADXCwAA1wtAANcLgADXC8AA1wxAANcMwADXDQAA1w1AANcNwADXDgAA1xFAANcRgADXEcAA1xJAANciAADXIoAA1yMAANcjgADXJEAA1ySAANckwADXJQAA1yVAANclwADXJkAA1yaAANcmwADXJ0AA1yeAANc3QADXN8AA1zhAANc4wADXOYAA1znAANc6AADXOkAA1zqAANc7AADXO4AA1zvAANc8AADXPIAA1zzAANdMgADXTQAA102AANdOAADXTsAA108AANdPQADXT4AA10/AANdQQADXUMAA11EAANdRQADXUcAA11IAANdhwADXYkAA12LAANdjQADXZAAA12RAANdkgADXZMAA12UAANdlgADXZgAA12ZAANdmgADXZwAA12dAANd3AADXd4AA13gAANd4gADXeUAA13mAANd5wADXegAA13pAANd6wADXe0AA13uAANd7wADXfEAA13yAANeFwADXjsAA15iAANehgADXokAA16LAANejQADXo8AA16RAANekwADXpQAA16XAANepAADXrMAA161AANetwADXrkAA167AANevQADXr8AA17BAANe0AADXtMAA17WAANe2QADXtwAA17fAANe4gADXuUAA17nAANfJgADXygAA18qAANfLAADXy8AA18wAANfMQADXzIAA18zAANfNQADXzcAA184AANfOQADXzsAA188AANfewADX30AA19/AANfgQADX4QAA1+FAANfhgADX4cAA1+IAANfigADX4wAA1+NAANfjgADX5AAA1+RAANf0AADX9IAA1/UAANf1gADX9kAA1/aAANf2wADX9wAA1/dAANf3wADX+EAA1/iAANf4wADX+UAA1/mAANgJQADYCcAA2ApAANgKwADYC4AA2AvAANgMAADYDEAA2AyAANgNAADYDYAA2A3AANgOAADYDoAA2A7AANgegADYHwAA2B+AANggAADYIMAA2CEAANghQADYIYAA2CHAANgiQADYIsAA2CMAANgjQADYI8AA2CQAANgzwADYNEAA2DTAANg1QADYNgAA2DZAANg2gADYNsAA2DcAANg3gADYOAAA2DhAANg4gADYOQAA2DlAANhJAADYSYAA2EoAANhKgADYS0AA2EuAANhLwADYTAAA2ExAANhMwADYTUAA2E2AANhNwADYTkAA2E6AANhhQADYagAA2HIAANh6AADYeoAA2HsAANh7gADYfAAA2HzAANh9AADYfUAA2H4AANh+QADYfsAA2H8AANh/gADYgEAA2ICAANiAwADYgYAA2IHAANiDAADYhkAA2IeAANiIAADYiIAA2InAANiKgADYi0AA2IvAANiVAADYngAA2KfAANiwwADYsYAA2LIAANiygADYswAA2LOAANi0AADYtEAA2LUAANi4QADYvIAA2L0AANi9gADYvgAA2L6AANi/AADYv4AA2MAAANjAgADYxMAA2MWAANjGQADYxwAA2MfAANjIgADYyUAA2MoAANjKwADYy0AA2NsAANjbgADY3AAA2NyAANjdQADY3YAA2N3AANjeAADY3kAA2N7AANjfQADY34AA2N/AANjgQADY4IAA2PBAANjwwADY8UAA2PHAANjygADY8sAA2PMAANjzQADY84AA2PQAANj0gADY9MAA2PUAANj1gADY9cAA2QWAANkGAADZBsAA2QdAANkIAADZCEAA2QiAANkIwADZCQAA2QmAANkKAADZCkAA2QqAANkLAADZC0AA2Q6AANkOwADZDwAA2Q+AANkfQADZH8AA2SBAANkgwADZIYAA2SHAANkiAADZIkAA2SKAANkjAADZI4AA2SPAANkkAADZJIAA2STAANk0gADZNQAA2TWAANk2AADZNsAA2TcAANk3QADZN4AA2TfAANk4QADZOMAA2TkAANk5QADZOcAA2ToAANlJwADZSkAA2UrAANlLQADZTAAA2UxAANlMgADZTMAA2U0AANlNgADZTgAA2U5AANlOgADZTwAA2U9AANlfAADZX4AA2WAAANlggADZYUAA2WGAANlhwADZYgAA2WJAANliwADZY0AA2WOAANljwADZZEAA2WSAANl0QADZdMAA2XVAANl1wADZdoAA2XbAANl3AADZd0AA2XeAANl4AADZeIAA2XjAANl5AADZeYAA2XnAANmDAADZjAAA2ZXAANmewADZn4AA2aAAANmggADZoQAA2aGAANmiAADZokAA2aMAANmmQADZqgAA2aqAANmrAADZq4AA2awAANmsgADZrQAA2a2AANmxQADZsgAA2bLAANmzgADZtEAA2bUAANm1wADZtoAA2bcAANnGwADZx0AA2cfAANnIQADZyQAA2clAANnJgADZycAA2coAANnKgADZywAA2ctAANnLgADZzAAA2cxAANncAADZ3IAA2d0AANndgADZ3kAA2d6AANnewADZ3wAA2d9AANnfwADZ4EAA2eCAANngwADZ4UAA2eGAANnxQADZ8cAA2fJAANnywADZ84AA2fPAANn0AADZ9EAA2fSAANn1AADZ9YAA2fXAANn2AADZ9oAA2fbAANoGgADaBwAA2gfAANoIQADaCQAA2glAANoJgADaCcAA2goAANoKgADaCwAA2gtAANoLgADaDAAA2gxAANocAADaHIAA2h0AANodgADaHkAA2h6AANoewADaHwAA2h9AANofwADaIEAA2iCAANogwADaIUAA2iGAANoxQADaMcAA2jJAANoywADaM4AA2jPAANo0AADaNEAA2jSAANo1AADaNYAA2jXAANo2AADaNoAA2jbAANpGgADaRwAA2keAANpIAADaSMAA2kkAANpJQADaSYAA2knAANpKQADaSsAA2ksAANpLQADaS8AA2kwAANpewADaZ4AA2m+AANp3gADaeAAA2niAANp5AADaeYAA2npAANp6gADaesAA2nuAANp7wADafEAA2nyAANp9AADafcAA2n4AANp+QADafwAA2n9AANqAgADag8AA2oUAANqFgADahgAA2odAANqIAADaiMAA2olAANqSgADam4AA2qVAANquQADarwAA2q+AANqwAADasIAA2rEAANqxgADascAA2rKAANq1wADaugAA2rqAANq7AADau4AA2rwAANq8gADavQAA2r2AANq+AADawkAA2sMAANrDwADaxIAA2sVAANrGAADaxsAA2seAANrIQADayMAA2tiAANrZAADa2YAA2toAANrawADa2wAA2ttAANrbgADa28AA2txAANrcwADa3QAA2t1AANrdwADa3gAA2u3AANruQADa7sAA2u9AANrwAADa8EAA2vCAANrwwADa8QAA2vGAANryAADa8kAA2vKAANrzAADa80AA2wMAANsDgADbBEAA2wTAANsFgADbBcAA2wYAANsGQADbBoAA2wcAANsHgADbB8AA2wgAANsIgADbCMAA2wwAANsMQADbDIAA2w0AANscwADbHUAA2x3AANseQADbHwAA2x9AANsfgADbH8AA2yAAANsggADbIQAA2yFAANshgADbIgAA2yJAANsyAADbMoAA2zMAANszgADbNEAA2zSAANs0wADbNQAA2zVAANs1wADbNkAA2zaAANs2wADbN0AA2zeAANtHQADbR8AA20hAANtIwADbSYAA20nAANtKAADbSkAA20qAANtLAADbS4AA20vAANtMAADbTIAA20zAANtcgADbXQAA212AANteAADbXsAA218AANtfQADbX4AA21/AANtgQADbYMAA22EAANthQADbYcAA22IAANtxwADbckAA23LAANtzQADbdAAA23RAANt0gADbdMAA23UAANt1gADbdgAA23ZAANt2gADbdwAA23dAANuAgADbiYAA25NAANucQADbnQAA252AANueAADbnoAA258AANufgADbn8AA26CAANujwADbp4AA26gAANuogADbqQAA26mAANuqAADbqoAA26sAANuuwADbr4AA27BAANuxAADbscAA27KAANuzQADbtAAA27SAANvEQADbxMAA28VAANvFwADbxoAA28bAANvHAADbx0AA28eAANvIAADbyIAA28jAANvJAADbyYAA28nAANvZgADb2gAA29qAANvbAADb28AA29wAANvcQADb3IAA29zAANvdQADb3cAA294AANveQADb3sAA298AANvuwADb70AA2+/AANvwQADb8QAA2/FAANvxgADb8cAA2/IAANvygADb8wAA2/NAANvzgADb9AAA2/RAANwEAADcBIAA3AVAANwFwADcBoAA3AbAANwHAADcB0AA3AeAANwIAADcCIAA3AjAANwJAADcCYAA3AnAANwZgADcGgAA3BqAANwbAADcG8AA3BwAANwcQADcHIAA3BzAANwdQADcHcAA3B4AANweQADcHsAA3B8AANwuwADcL0AA3C/AANwwQADcMQAA3DFAANwxgADcMcAA3DIAANwygADcMwAA3DNAANwzgADcNAAA3DRAANxEAADcRIAA3EUAANxFgADcRkAA3EaAANxGwADcRwAA3EdAANxHwADcSEAA3EiAANxIwADcSUAA3EmAANxLwADcTAAA3EyAANxdQADcZkAA3G9AANx4AADcgcAA3InAANyTgADcnUAA3KVAANyuQADct0AA3LfAANy4gADcuQAA3LmAANy6AADcusAA3LuAANy8AADcvIAA3L1AANy9wADcvkAA3L8AANy/wADcwAAA3MFAANzEgADcxUAA3MXAANzGgADcx0AA3MfAANzRAADc2gAA3OPAANzswADc7YAA3O4AANzugADc7wAA3O+AANzwAADc8EAA3PEAANz0QADc+QAA3PmAANz6AADc+oAA3PsAANz7gADc/AAA3PyAANz9AADc/YAA3QJAAN0DAADdA8AA3QSAAN0FQADdBgAA3QbAAN0HgADdCEAA3QkAAN0JgADdGUAA3RnAAN0agADdGwAA3RvAAN0cAADdHEAA3RyAAN0cwADdHUAA3R3AAN0eAADdHkAA3R7AAN0fAADdIUAA3SGAAN0iAADdMcAA3TJAAN0ywADdM0AA3TQAAN00QADdNIAA3TTAAN01AADdNYAA3TYAAN02QADdNoAA3TcAAN03QADdRwAA3UeAAN1IQADdSMAA3UmAAN1JwADdSgAA3UpAAN1KgADdSwAA3UuAAN1LwADdTAAA3UyAAN1MwADdTwAA3U9AAN1PwADdX4AA3WAAAN1ggADdYQAA3WHAAN1iAADdYkAA3WKAAN1iwADdY0AA3WPAAN1kAADdZEAA3WTAAN1lAADddMAA3XVAAN12AADddoAA3XdAAN13gADdd8AA3XgAAN14QADdeMAA3XlAAN15gADdecAA3XpAAN16gADdfMAA3X0AAN19gADdjUAA3Y3AAN2OQADdjsAA3Y+AAN2PwADdkAAA3ZBAAN2QgADdkQAA3ZGAAN2RwADdkgAA3ZKAAN2SwADdooAA3aMAAN2jwADdpEAA3aUAAN2lQADdpYAA3aXAAN2mAADdpoAA3acAAN2nQADdp4AA3agAAN2oQADdq4AA3avAAN2sAADdrIAA3bxAAN28wADdvUAA3b3AAN2+gADdvsAA3b8AAN2/QADdv4AA3cAAAN3AgADdwMAA3cEAAN3BgADdwcAA3dGAAN3SAADd0sAA3dNAAN3UAADd1EAA3dSAAN3UwADd1QAA3dWAAN3WAADd1kAA3daAAN3XAADd10AA3doAAN3dQADd34AA3eAAAN3ggADd4UAA3eIAAN3kQADd5QAA3eXAAN3mgADd50AA3efAAN3pwADd68AA3f6AAN4HQADeD0AA3hdAAN4XwADeGEAA3hjAAN4ZQADeGgAA3hpAAN4agADeG0AA3huAAN4cAADeHEAA3hzAAN4dQADeHYAA3h3AAN4egADeHsAA3iAAAN4jQADeJIAA3iUAAN4lgADeJsAA3ieAAN4oQADeKMAA3jIAAN47AADeRMAA3k3AAN5OgADeTwAA3k+AAN5QAADeUIAA3lEAAN5RQADeUgAA3lVAAN5ZgADeWgAA3lqAAN5bAADeW4AA3lwAAN5cgADeXQAA3l2AAN5hwADeYoAA3mNAAN5kAADeZMAA3mWAAN5mQADeZwAA3mfAAN5oQADeeAAA3niAAN55AADeeYAA3npAAN56gADeesAA3nsAAN57QADee8AA3nxAAN58gADefMAA3n1AAN59gADejUAA3o3AAN6OQADejsAA3o+AAN6PwADekAAA3pBAAN6QgADekQAA3pGAAN6RwADekgAA3pKAAN6SwADeooAA3qMAAN6jwADepEAA3qUAAN6lQADepYAA3qXAAN6mAADepoAA3qcAAN6nQADep4AA3qgAAN6oQADeq4AA3qvAAN6sAADerIAA3rxAAN68wADevUAA3r3AAN6+gADevsAA3r8AAN6/QADev4AA3sAAAN7AgADewMAA3sEAAN7BgADewcAA3tGAAN7SAADe0oAA3tMAAN7TwADe1AAA3tRAAN7UgADe1MAA3tVAAN7VwADe1gAA3tZAAN7WwADe1wAA3ubAAN7nQADe58AA3uhAAN7pAADe6UAA3umAAN7pwADe6gAA3uqAAN7rAADe60AA3uuAAN7sAADe7EAA3vwAAN78gADe/QAA3v2AAN7+QADe/oAA3v7AAN7/AADe/0AA3v/AAN8AQADfAIAA3wDAAN8BQADfAYAA3xFAAN8RwADfEkAA3xLAAN8TgADfE8AA3xQAAN8UQADfFIAA3xUAAN8VgADfFcAA3xYAAN8WgADfFsAA3yAAAN8pAADfMsAA3zvAAN88gADfPQAA3z2AAN8+AADfPoAA3z8AAN8/QADfQAAA30NAAN9HAADfR4AA30gAAN9IgADfSQAA30mAAN9KAADfSoAA305AAN9PAADfT8AA31CAAN9RQADfUgAA31LAAN9TgADfVAAA32PAAN9kQADfZMAA32VAAN9mAADfZkAA32aAAN9mwADfZwAA32eAAN9oAADfaEAA32iAAN9pAADfaUAA33kAAN95gADfegAA33qAAN97QADfe4AA33vAAN98AADffEAA33zAAN99QADffYAA333AAN9+QADffoAA345AAN+OwADfj0AA34/AAN+QgADfkMAA35EAAN+RQADfkYAA35IAAN+SgADfksAA35MAAN+TgADfk8AA36OAAN+kAADfpIAA36UAAN+lwADfpgAA36ZAAN+mgADfpsAA36dAAN+nwADfqAAA36hAAN+owADfqQAA37jAAN+5QADfucAA37pAAN+7AADfu0AA37uAAN+7wADfvAAA37yAAN+9AADfvUAA372AAN++AADfvkAA384AAN/OgADfzwAA38+AAN/QQADf0IAA39DAAN/RAADf0UAA39HAAN/SQADf0oAA39LAAN/TQADf04AA3+NAAN/jwADf5EAA3+TAAN/lgADf5cAA3+YAAN/mQADf5oAA3+cAAN/ngADf58AA3+gAAN/ogADf6MAA3/uAAOAEQADgDEAA4BRAAOAUwADgFUAA4BXAAOAWQADgFwAA4BdAAOAXgADgGEAA4BiAAOAZAADgGUAA4BnAAOAaQADgGoAA4BrAAOAbgADgG8AA4B4AAOAhQADgIoAA4CMAAOAjgADgJMAA4CWAAOAmQADgJsAA4DAAAOA5AADgQsAA4EvAAOBMgADgTQAA4E2AAOBOAADgToAA4E8AAOBPQADgUAAA4FNAAOBXgADgWAAA4FiAAOBZAADgWYAA4FoAAOBagADgWwAA4FuAAOBfwADgYIAA4GFAAOBiAADgYsAA4GOAAOBkQADgZQAA4GXAAOBmQADgdgAA4HaAAOB3AADgd4AA4HhAAOB4gADgeMAA4HkAAOB5QADgecAA4HpAAOB6gADgesAA4HtAAOB7gADgi0AA4IvAAOCMQADgjMAA4I2AAOCNwADgjgAA4I5AAOCOgADgjwAA4I+AAOCPwADgkAAA4JCAAOCQwADgoIAA4KEAAOChwADgokAA4KMAAOCjQADgo4AA4KPAAOCkAADgpIAA4KUAAOClQADgpYAA4KYAAOCmQADgqYAA4KnAAOCqAADgqoAA4LpAAOC6wADgu0AA4LvAAOC8gADgvMAA4L0AAOC9QADgvYAA4L4AAOC+gADgvsAA4L8AAOC/gADgv8AA4M+AAODQAADg0IAA4NEAAODRwADg0gAA4NJAAODSgADg0sAA4NNAAODTwADg1AAA4NRAAODUwADg1QAA4OTAAODlQADg5cAA4OZAAODnAADg50AA4OeAAODnwADg6AAA4OiAAODpAADg6UAA4OmAAODqAADg6kAA4PoAAOD6gADg+wAA4PuAAOD8QADg/IAA4PzAAOD9AADg/UAA4P3AAOD+QADg/oAA4P7AAOD/QADg/4AA4Q9AAOEPwADhEEAA4RDAAOERgADhEcAA4RIAAOESQADhEoAA4RMAAOETgADhE8AA4RQAAOEUgADhFMAA4R4AAOEnAADhMMAA4TnAAOE6gADhOwAA4TuAAOE8AADhPIAA4T0AAOE9QADhPgAA4UFAAOFFAADhRYAA4UYAAOFGgADhRwAA4UeAAOFIAADhSIAA4UxAAOFNAADhTcAA4U6AAOFPQADhUAAA4VDAAOFRgADhUgAA4WHAAOFiQADhYsAA4WNAAOFkAADhZEAA4WSAAOFkwADhZQAA4WWAAOFmAADhZkAA4WaAAOFnAADhZ0AA4XcAAOF3gADheAAA4XiAAOF5QADheYAA4XnAAOF6AADhekAA4XrAAOF7QADhe4AA4XvAAOF8QADhfIAA4YxAAOGMwADhjUAA4Y3AAOGOgADhjsAA4Y8AAOGPQADhj4AA4ZAAAOGQgADhkMAA4ZEAAOGRgADhkcAA4aGAAOGiAADhooAA4aMAAOGjwADhpAAA4aRAAOGkgADhpMAA4aVAAOGlwADhpgAA4aZAAOGmwADhpwAA4bbAAOG3QADht8AA4bhAAOG5AADhuUAA4bmAAOG5wADhugAA4bqAAOG7AADhu0AA4buAAOG8AADhvEAA4cwAAOHMgADhzQAA4c2AAOHOQADhzoAA4c7AAOHPAADhz0AA4c/AAOHQQADh0IAA4dDAAOHRQADh0YAA4eFAAOHhwADh4kAA4eLAAOHjgADh48AA4eQAAOHkQADh5IAA4eUAAOHlgADh5cAA4eYAAOHmgADh5sAA4fmAAOICQADiCkAA4hJAAOISwADiE0AA4hPAAOIUQADiFQAA4hVAAOIVgADiFkAA4haAAOIXAADiF0AA4hfAAOIYgADiGMAA4hkAAOIZwADiGgAA4htAAOIegADiH8AA4iBAAOIgwADiIgAA4iLAAOIjgADiJAAA4i1AAOI2QADiQAAA4kkAAOJJwADiSkAA4krAAOJLQADiS8AA4kxAAOJMgADiTUAA4lCAAOJUwADiVUAA4lXAAOJWQADiVsAA4ldAAOJXwADiWEAA4ljAAOJdAADiXcAA4l6AAOJfQADiYAAA4mDAAOJhgADiYkAA4mMAAOJjgADic0AA4nPAAOJ0QADidMAA4nWAAOJ1wADidgAA4nZAAOJ2gADidwAA4neAAOJ3wADieAAA4niAAOJ4wADiiIAA4okAAOKJgADiigAA4orAAOKLAADii0AA4ouAAOKLwADijEAA4ozAAOKNAADijUAA4o3AAOKOAADincAA4p5AAOKfAADin4AA4qBAAOKggADioMAA4qEAAOKhQADiocAA4qJAAOKigADiosAA4qNAAOKjgADipsAA4qcAAOKnQADip8AA4reAAOK4AADiuIAA4rkAAOK5wADiugAA4rpAAOK6gADiusAA4rtAAOK7wADivAAA4rxAAOK8wADivQAA4szAAOLNQADizcAA4s5AAOLPAADiz0AA4s+AAOLPwADi0AAA4tCAAOLRAADi0UAA4tGAAOLSAADi0kAA4uIAAOLigADi4wAA4uOAAOLkQADi5IAA4uTAAOLlAADi5UAA4uXAAOLmQADi5oAA4ubAAOLnQADi54AA4vdAAOL3wADi+EAA4vjAAOL5gADi+cAA4voAAOL6QADi+oAA4vsAAOL7gADi+8AA4vwAAOL8gADi/MAA4wyAAOMNAADjDYAA4w4AAOMOwADjDwAA4w9AAOMPgADjD8AA4xBAAOMQwADjEQAA4xFAAOMRwADjEgAA4xtAAOMkQADjLgAA4zcAAOM3wADjOEAA4zjAAOM5QADjOcAA4zpAAOM6gADjO0AA4z6AAONCQADjQsAA40NAAONDwADjREAA40TAAONFQADjRcAA40mAAONKQADjSwAA40vAAONMgADjTUAA404AAONOwADjT0AA418AAONfgADjYAAA42CAAONhQADjYYAA42HAAONiAADjYkAA42LAAONjQADjY4AA42PAAONkQADjZIAA43RAAON0wADjdUAA43XAAON2gADjdsAA43cAAON3QADjd4AA43gAAON4gADjeMAA43kAAON5gADjecAA44mAAOOKAADjioAA44sAAOOLwADjjAAA44xAAOOMgADjjMAA441AAOONwADjjgAA445AAOOOwADjjwAA457AAOOfQADjn8AA46BAAOOhAADjoUAA46GAAOOhwADjogAA46KAAOOjAADjo0AA46OAAOOkAADjpEAA47QAAOO0gADjtQAA47WAAOO2QADjtoAA47bAAOO3AADjt0AA47fAAOO4QADjuIAA47jAAOO5QADjuYAA48lAAOPJwADjykAA48rAAOPLgADjy8AA48wAAOPMQADjzIAA480AAOPNgADjzcAA484AAOPOgADjzsAA496AAOPfAADj34AA4+AAAOPgwADj4QAA4+FAAOPhgADj4cAA4+JAAOPiwADj4wAA4+NAAOPjwADj5AAA4/bAAOP/gADkB4AA5A+AAOQQAADkEIAA5BEAAOQRgADkEkAA5BKAAOQSwADkE4AA5BPAAOQUQADkFIAA5BUAAOQVwADkFgAA5BZAAOQXAADkF0AA5BmAAOQcwADkHgAA5B6AAOQfAADkIEAA5CEAAOQhwADkIkAA5CuAAOQ0gADkPkAA5EdAAORIAADkSIAA5EkAAORJgADkSgAA5EqAAORKwADkS4AA5E7AAORTAADkU4AA5FQAAORUgADkVQAA5FWAAORWAADkVoAA5FcAAORbQADkXAAA5FzAAORdgADkXkAA5F8AAORfwADkYIAA5GFAAORhwADkcYAA5HIAAORygADkcwAA5HPAAOR0AADkdEAA5HSAAOR0wADkdUAA5HXAAOR2AADkdkAA5HbAAOR3AADkhsAA5IdAAOSHwADkiEAA5IkAAOSJQADkiYAA5InAAOSKAADkioAA5IsAAOSLQADki4AA5IwAAOSMQADknAAA5JyAAOSdQADkncAA5J6AAOSewADknwAA5J9AAOSfgADkoAAA5KCAAOSgwADkoQAA5KGAAOShwADkpQAA5KVAAOSlgADkpgAA5LXAAOS2QADktsAA5LdAAOS4AADkuEAA5LiAAOS4wADkuQAA5LmAAOS6AADkukAA5LqAAOS7AADku0AA5MsAAOTLgADkzAAA5MyAAOTNQADkzYAA5M3AAOTOAADkzkAA5M7AAOTPQADkz4AA5M/AAOTQQADk0IAA5OBAAOTgwADk4UAA5OHAAOTigADk4sAA5OMAAOTjQADk44AA5OQAAOTkgADk5MAA5OUAAOTlgADk5cAA5PWAAOT2AADk9oAA5PcAAOT3wADk+AAA5PhAAOT4gADk+MAA5PlAAOT5wADk+gAA5PpAAOT6wADk+wAA5QrAAOULQADlC8AA5QxAAOUNAADlDUAA5Q2AAOUNwADlDgAA5Q6AAOUPAADlD0AA5Q+AAOUQAADlEEAA5RmAAOUigADlLEAA5TVAAOU2AADlNoAA5TcAAOU3gADlOAAA5TiAAOU4wADlOYAA5TzAAOVAgADlQQAA5UGAAOVCAADlQoAA5UMAAOVDgADlRAAA5UfAAOVIgADlSUAA5UoAAOVKwADlS4AA5UxAAOVNAADlTYAA5V1AAOVdwADlXkAA5V7AAOVfgADlX8AA5WAAAOVgQADlYIAA5WEAAOVhgADlYcAA5WIAAOVigADlYsAA5XKAAOVzAADlc4AA5XQAAOV0wADldQAA5XVAAOV1gADldcAA5XZAAOV2wADldwAA5XdAAOV3wADleAAA5YfAAOWIQADliMAA5YlAAOWKAADlikAA5YqAAOWKwADliwAA5YuAAOWMAADljEAA5YyAAOWNAADljUAA5Z0AAOWdgADlngAA5Z6AAOWfQADln4AA5Z/AAOWgAADloEAA5aDAAOWhQADloYAA5aHAAOWiQADlooAA5bJAAOWywADls0AA5bPAAOW0gADltMAA5bUAAOW1QADltYAA5bYAAOW2gADltsAA5bcAAOW3gADlt8AA5ceAAOXIAADlyIAA5ckAAOXJwADlygAA5cpAAOXKgADlysAA5ctAAOXLwADlzAAA5cxAAOXMwADlzQAA5dzAAOXdQADl3cAA5d5AAOXfAADl30AA5d+AAOXfwADl4AAA5eCAAOXhAADl4UAA5eGAAOXiAADl4kAA5eSAAOXkwADl5UAA5fYAAOX/AADmCAAA5hDAAOYagADmIoAA5ixAAOY2AADmPgAA5kcAAOZQAADmUIAA5lFAAOZRwADmUkAA5lLAAOZTgADmVEAA5lTAAOZVQADmVgAA5laAAOZXAADmV8AA5liAAOZYwADmWgAA5l1AAOZeAADmXoAA5l9AAOZgAADmYIAA5mnAAOZywADmfIAA5oWAAOaGQADmhsAA5odAAOaHwADmiEAA5ojAAOaJAADmicAA5o0AAOaRwADmkkAA5pLAAOaTQADmk8AA5pRAAOaUwADmlUAA5pXAAOaWQADmmwAA5pvAAOacgADmnUAA5p4AAOaewADmn4AA5qBAAOahAADmocAA5qJAAOayAADmsoAA5rNAAOazwADmtIAA5rTAAOa1AADmtUAA5rWAAOa2AADmtoAA5rbAAOa3AADmt4AA5rfAAOa6AADmukAA5rrAAObKgADmywAA5suAAObMAADmzMAA5s0AAObNQADmzYAA5s3AAObOQADmzsAA5s8AAObPQADmz8AA5tAAAObfwADm4EAA5uEAAObhgADm4kAA5uKAAObiwADm4wAA5uNAAObjwADm5EAA5uSAAObkwADm5UAA5uWAAObnwADm6AAA5uiAAOb4QADm+MAA5vlAAOb5wADm+oAA5vrAAOb7AADm+0AA5vuAAOb8AADm/IAA5vzAAOb9AADm/YAA5v3AAOcNgADnDgAA5w7AAOcPQADnEAAA5xBAAOcQgADnEMAA5xEAAOcRgADnEgAA5xJAAOcSgADnEwAA5xNAAOcVgADnFcAA5xZAAOcmAADnJoAA5ycAAOcngADnKEAA5yiAAOcowADnKQAA5ylAAOcpwADnKkAA5yqAAOcqwADnK0AA5yuAAOc7QADnO8AA5zyAAOc9AADnPcAA5z4AAOc+QADnPoAA5z7AAOc/QADnP8AA50AAAOdAQADnQMAA50EAAOdEQADnRIAA50TAAOdFQADnVQAA51WAAOdWAADnVoAA51dAAOdXgADnV8AA51gAAOdYQADnWMAA51lAAOdZgADnWcAA51pAAOdagADnakAA52rAAOdrgADnbAAA52zAAOdtAADnbUAA522AAOdtwADnbkAA527AAOdvAADnb0AA52/AAOdwAADndsAA53oAAOd/wADngIAA54FAAOeCAADngsAA54OAAOeEQADnhQAA54XAAOeGgADnh0AA54gAAOeNwADnjoAA549AAOeQAADnkMAA55GAAOeSQADnkwAA55PAAOeUgADnlUAA55YAAOeWgADnmEAA55oAAOecQADnnYAA56BAAOejQADnpYAA56aAAOepAADnqwAA573AAOfGgADnzoAA59aAAOfXAADn14AA59gAAOfYgADn2UAA59mAAOfZwADn2oAA59rAAOfbQADn24AA59wAAOfcwADn3QAA591AAOfeAADn3kAA59+AAOfiwADn5AAA5+SAAOflAADn5kAA5+cAAOfnwADn6EAA5/GAAOf6gADoBEAA6A1AAOgOAADoDoAA6A8AAOgPgADoEAAA6BCAAOgQwADoEYAA6BTAAOgZAADoGYAA6BoAAOgagADoGwAA6BuAAOgcAADoHIAA6B0AAOghQADoIgAA6CLAAOgjgADoJEAA6CUAAOglwADoJoAA6CdAAOgnwADoN4AA6DgAAOg4gADoOQAA6DnAAOg6AADoOkAA6DqAAOg6wADoO0AA6DvAAOg8AADoPEAA6DzAAOg9AADoTMAA6E1AAOhNwADoTkAA6E8AAOhPQADoT4AA6E/AAOhQAADoUIAA6FEAAOhRQADoUYAA6FIAAOhSQADoYgAA6GKAAOhjQADoY8AA6GSAAOhkwADoZQAA6GVAAOhlgADoZgAA6GaAAOhmwADoZwAA6GeAAOhnwADoawAA6GtAAOhrgADobAAA6Hv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AAOs6AADrOkAA6zqAAOs7AADrO0AA60sAAOtLgADrTAAA60yAAOtNQADrTYAA603AAOtOAADrTkAA607AAOtPQADrT4AA60/AAOtQQADrUIAA62BAAOtgwADrYUAA62HAAOtigADrYsAA62MAAOtjQADrY4AA62QAAOtkgADrZMAA62UAAOtlgADrZcAA63WAAOt2AADrdoAA63cAAOt3wADreAAA63hAAOt4gADreMAA63lAAOt5wADregAA63pAAOt6wADrewAA64rAAOuLQADri8AA64xAAOuNAADrjUAA642AAOuNwADrjgAA646AAOuPAADrj0AA64+AAOuQAADrkEAA66AAAOuggADroQAA66GAAOuiQADrooAA66LAAOujAADro0AA66PAAOukQADrpIAA66TAAOulQADrpYAA67hAAOvBAADryQAA69EAAOvRgADr0gAA69KAAOvTAADr08AA69QAAOvUQADr1QAA69VAAOvVwADr1gAA69aAAOvXQADr14AA69fAAOvYgADr2MAA69oAAOvdQADr3oAA698AAOvfgADr4MAA6+GAAOviQADr4sAA6+wAAOv1AADr/sAA7AfAAOwIgADsCQAA7AmAAOwKAADsCoAA7AsAAOwLQADsDAAA7A9AAOwTgADsFAAA7BSAAOwVAADsFYAA7BYAAOwWgADsFwAA7BeAAOwbwADsHIAA7B1AAOweAADsHsAA7B+AAOwgQADsIQAA7CHAAOwiQADsMgAA7DKAAOwzAADsM4AA7DRAAOw0gADsNMAA7DUAAOw1QADsNcAA7DZAAOw2gADsNsAA7DdAAOw3gADsR0AA7EfAAOxIQADsSMAA7EmAAOxJwADsSgAA7EpAAOxKgADsSwAA7EuAAOxLwADsTAAA7EyAAOxMwADsXIAA7F0AAOxdwADsXkAA7F8AAOxfQADsX4AA7F/AAOxgAADsYIAA7GEAAOxhQADsYYAA7GIAAOxiQADsZYAA7GXAAOxmAADsZoAA7HZAAOx2wADsd0AA7HfAAOx4gADseMAA7HkAAOx5QADseYAA7HoAAOx6gADsesAA7HsAAOx7gADse8AA7IuAAOyMAADsjIAA7I0AAOyNwADsjgAA7I5AAOyOgADsjsAA7I9AAOyPwADskAAA7JBAAOyQwADskQAA7KDAAOyhQADsocAA7KJAAOyjAADso0AA7KOAAOyjwADspAAA7KSAAOylAADspUAA7KWAAOymAADspkAA7LYAAOy2gADstwAA7LeAAOy4QADsuIAA7LjAAOy5AADsuUAA7LnAAOy6QADsuoAA7LrAAOy7QADsu4AA7MtAAOzLwADszEAA7MzAAOzNgADszcAA7M4AAOzOQADszoAA7M8AAOzPgADsz8AA7NAAAOzQgADs0MAA7NoAAOzjAADs7MAA7PXAAOz2gADs9wAA7PeAAOz4AADs+IAA7PkAAOz5QADs+gAA7P1AAO0BAADtAYAA7QIAAO0CgADtAwAA7QOAAO0EAADtBIAA7QhAAO0JAADtCcAA7QqAAO0LQADtDAAA7QzAAO0NgADtDgAA7R3AAO0eQADtHsAA7R9AAO0gAADtIEAA7SCAAO0gwADtIQAA7SGAAO0iAADtIkAA7SKAAO0jAADtI0AA7TMAAO0zgADtNAAA7TSAAO01QADtNYAA7TXAAO02AADtNkAA7TbAAO03QADtN4AA7TfAAO04QADtOIAA7UhAAO1IwADtSUAA7UnAAO1KgADtSsAA7UsAAO1LQADtS4AA7UwAAO1MgADtTMAA7U0AAO1NgADtTcAA7V2AAO1eAADtXoAA7V8AAO1fwADtYAAA7WBAAO1ggADtYMAA7WFAAO1hwADtYgAA7WJAAO1iwADtYwAA7XLAAO1zQADtc8AA7XRAAO11AADtdUAA7XWAAO11wADtdgAA7XaAAO13AADtd0AA7XeAAO14AADteEAA7YgAAO2IgADtiQAA7YmAAO2KQADtioAA7YrAAO2LAADti0AA7YvAAO2MQADtjIAA7YzAAO2NQADtjYAA7Z1AAO2dwADtnkAA7Z7AAO2fgADtn8AA7aAAAO2gQADtoIAA7aEAAO2hgADtocAA7aIAAO2igADtosAA7bWAAO2+QADtxkAA7c5AAO3OwADtz0AA7c/AAO3QQADt0QAA7dFAAO3RgADt0kAA7dKAAO3TAADt00AA7dPAAO3UgADt1MAA7dUAAO3VwADt1gAA7ddAAO3agADt28AA7dxAAO3cwADt3gAA7d7AAO3fgADt4AAA7elAAO3yQADt/AAA7gUAAO4FwADuBkAA7gbAAO4HQADuB8AA7ghAAO4IgADuCUAA7gyAAO4QwADuEUAA7hHAAO4SQADuEsAA7hNAAO4TwADuFEAA7hTAAO4ZAADuGcAA7hqAAO4bQADuHAAA7hzAAO4dgADuHkAA7h8AAO4fgADuL0AA7i/AAO4wQADuMMAA7jGAAO4xwADuMgAA7jJAAO4ygADuMwAA7jOAAO4zwADuNAAA7jSAAO40wADuRIAA7kUAAO5FgADuRgAA7kbAAO5HAADuR0AA7keAAO5HwADuSEAA7kjAAO5JAADuSUAA7knAAO5KAADuWcAA7lpAAO5bAADuW4AA7lxAAO5cgADuXMAA7l0AAO5dQADuXcAA7l5AAO5egADuXsAA7l9AAO5fgADuYsAA7mMAAO5jQADuY8AA7nOAAO50AADudIAA7nUAAO51wADudgAA7nZAAO52gADudsAA7ndAAO53wADueAAA7nhAAO54wADueQAA7ojAAO6JQADuicAA7opAAO6LAADui0AA7ouAAO6LwADujAAA7oyAAO6NAADujUAA7o2AAO6OAADujkAA7p4AAO6egADunwAA7p+AAO6gQADuoIAA7qDAAO6hAADuoUAA7qHAAO6iQADuooAA7qLAAO6jQADuo4AA7rNAAO6zwADutEAA7rTAAO61gADutcAA7rYAAO62QADutoAA7rcAAO63gADut8AA7rgAAO64gADuuMAA7siAAO7JAADuyYAA7soAAO7KwADuywAA7stAAO7LgADuy8AA7sxAAO7MwADuzQAA7s1AAO7NwADuzgAA7tdAAO7gQADu6gAA7vMAAO7zwADu9EAA7vTAAO71QADu9cAA7vZAAO72gADu90AA7vqAAO7+QADu/sAA7v9AAO7/wADvAEAA7wDAAO8BQADvAcAA7wWAAO8GQADvBwAA7wfAAO8IgADvCUAA7woAAO8KwADvC0AA7xsAAO8bgADvHAAA7xyAAO8dQADvHYAA7x3AAO8eAADvHkAA7x7AAO8fQADvH4AA7x/AAO8gQADvIIAA7zBAAO8wwADvMUAA7zHAAO8ygADvMsAA7zMAAO8zQADvM4AA7zQAAO80gADvNMAA7zUAAO81gADvNcAA70WAAO9GAADvRoAA70cAAO9HwADvSAAA70hAAO9IgADvSMAA70lAAO9JwADvSgAA70pAAO9KwADvSwAA71rAAO9bQADvXAAA71yAAO9dQADvXYAA713AAO9eAADvXkAA717AAO9fQADvX4AA71/AAO9gQADvYIAA73BAAO9wwADvcUAA73HAAO9ygADvcsAA73MAAO9zQADvc4AA73QAAO90gADvdMAA73UAAO91gADvdcAA74WAAO+GAADvhoAA74cAAO+HwADviAAA74hAAO+IgADviMAA74lAAO+JwADvigAA74pAAO+KwADviwAA75rAAO+bQADvm8AA75xAAO+dAADvnUAA752AAO+dwADvngAA756AAO+fAADvn0AA75+AAO+gAADvoEAA77MAAO+7wADvw8AA78vAAO/MQADvzMAA781AAO/NwADvzoAA787AAO/PAADvz8AA79AAAO/QgADv0MAA79FAAO/SAADv0kAA79KAAO/TQADv04AA79TAAO/YAADv2UAA79nAAO/aQADv24AA79xAAO/dAADv3YAA7+bAAO/vwADv+YAA8AKAAPADQADwA8AA8ARAAPAEwADwBUAA8AXAAPAGAADwBsAA8AoAAPAOQADwDsAA8A9AAPAPwADwEEAA8BDAAPARQADwEcAA8BJAAPAWgADwF0AA8BgAAPAYwADwGYAA8BpAAPAbAADwG8AA8ByAAPAdAADwLMAA8C1AAPAtwADwLkAA8C8AAPAvQADwL4AA8C/AAPAwAADwMIAA8DEAAPAxQADwMYAA8DIAAPAyQADwQgAA8EKAAPBDAADwQ4AA8ERAAPBEgADwRMAA8EUAAPBFQADwRcAA8EZAAPBGgADwRsAA8EdAAPBHgADwV0AA8FfAAPBYgADwWQAA8FnAAPBaAADwWkAA8FqAAPBawADwW0AA8FvAAPBcAADwXEAA8FzAAPBdAADwYEAA8GCAAPBgwADwYUAA8HEAAPBxgADwcgAA8HKAAPBzQADwc4AA8HPAAPB0AADwdEAA8HTAAPB1QADwdYAA8HXAAPB2QADwdoAA8IZAAPCGwADwh0AA8IfAAPCIgADwiMAA8IkAAPCJQADwiYAA8IoAAPCKgADwisAA8IsAAPCLgADwi8AA8JuAAPCcAADwnIAA8J0AAPCdwADwngAA8J5AAPCegADwnsAA8J9AAPCfwADwoAAA8KBAAPCgwADwoQAA8LDAAPCxQADwscAA8LJAAPCzAADws0AA8LOAAPCzwADwtAAA8LSAAPC1AADwtUAA8LWAAPC2AADwtkAA8MYAAPDGgADwxwAA8MeAAPDIQADwyIAA8MjAAPDJAADwyUAA8MnAAPDKQADwyoAA8MrAAPDLQADwy4AA8NTAAPDdwADw54AA8PCAAPDxQADw8cAA8PJAAPDywADw80AA8PPAAPD0AADw9MAA8PgAAPD7wADw/EAA8PzAAPD9QADw/cAA8P5AAPD+wADw/0AA8QMAAPEDwADxBIAA8QVAAPEGAADxBsAA8QeAAPEIQADxCMAA8RiAAPEZAADxGYAA8RoAAPEawADxGwAA8RtAAPEbgADxG8AA8RxAAPEcwADxHQAA8R1AAPEdwADxHgAA8S3AAPEuQADxLsAA8S9AAPEwAADxMEAA8TCAAPEwwADxMQAA8TGAAPEyAADxMkAA8TKAAPEzAADxM0AA8UMAAPFDgADxRAAA8USAAPFFQADxRYAA8UXAAPFGAADxRkAA8UbAAPFHQADxR4AA8UfAAPFIQADxSIAA8VhAAPFYwADxWUAA8VnAAPFagADxWsAA8VsAAPFbQADxW4AA8VwAAPFcgADxXMAA8V0AAPFdgADxXcAA8W2AAPFuAADxboAA8W8AAPFvwADxcAAA8XBAAPFwgADxcMAA8XFAAPFxwADxcgAA8XJAAPFywADxcwAA8YLAAPGDQADxg8AA8YRAAPGFAADxhUAA8YWAAPGFwADxhgAA8YaAAPGHAADxh0AA8YeAAPGIAADxiEAA8ZgAAPGYgADxmQAA8ZmAAPGaQADxmoAA8ZrAAPGbAADxm0AA8ZvAAPGcQADxnIAA8ZzAAPGdQADxnYAA8bBAAPG5AADxwQAA8ckAAPHJgADxygAA8cqAAPHLAADxy8AA8cwAAPHMQADxzQAA8c1AAPHNwADxzgAA8c6AAPHPQADxz4AA8c/AAPHQgADx0MAA8dIAAPHVQADx1oAA8dcAAPHXgADx2MAA8dmAAPHaQADx2sAA8eQAAPHtAADx9sAA8f/AAPIAgADyAQAA8gGAAPICAADyAoAA8gMAAPIDQADyBAAA8gdAAPILgADyDAAA8gyAAPINAADyDYAA8g4AAPIOgADyDwAA8g+AAPITwADyFIAA8hVAAPIWAADyFsAA8heAAPIYQADyGQAA8hnAAPIaQADyKgAA8iqAAPIrAADyK4AA8ixAAPIsgADyLMAA8i0AAPItQADyLcAA8i5AAPIugADyLsAA8i9AAPIvgADyP0AA8j/AAPJAQADyQMAA8kGAAPJBwADyQgAA8kJAAPJCgADyQwAA8kOAAPJDwADyRAAA8kSAAPJEwADyVIAA8lUAAPJVwADyVkAA8lcAAPJXQADyV4AA8lfAAPJYAADyWIAA8lkAAPJZQADyWYAA8loAAPJaQADyXYAA8l3AAPJeAADyXoAA8m5AAPJuwADyb0AA8m/AAPJwgADycMAA8nEAAPJxQADycYAA8nIAAPJygADycsAA8nMAAPJzgADyc8AA8oOAAPKEAADyhIAA8oUAAPKFwADyhgAA8oZAAPKGgADyhsAA8odAAPKHwADyiAAA8ohAAPKIwADyiQAA8pjAAPKZQADymcAA8ppAAPKbAADym0AA8puAAPKbwADynAAA8pyAAPKdAADynUAA8p2AAPKeAADynkAA8q4AAPKugADyrwAA8q+AAPKwQADysIAA8rDAAPKxAADysUAA8rHAAPKyQADysoAA8rLAAPKzQADys4AA8sNAAPLDwADyxEAA8sTAAPLFgADyxcAA8sYAAPLGQADyxoAA8scAAPLHgADyx8AA8sgAAPLIgADyyMAA8tIAAPLbAADy5MAA8u3AAPLugADy7wAA8u+AAPLwAADy8IAA8vEAAPLxQADy8gAA8vVAAPL5AADy+YAA8voAAPL6gADy+wAA8vuAAPL8AADy/IAA8wBAAPMBAADzAcAA8wKAAPMDQADzBAAA8wTAAPMFgADzBgAA8xXAAPMWQADzFsAA8xdAAPMYAADzGEAA8xiAAPMYwADzGQAA8xmAAPMaAADzGkAA8xqAAPMbAADzG0AA8ysAAPMrgADzLAAA8yyAAPMtQADzLYAA8y3AAPMuAADzLkAA8y7AAPMvQADzL4AA8y/AAPMwQADzMIAA80BAAPNAwADzQUAA80HAAPNCgADzQsAA80MAAPNDQADzQ4AA80QAAPNEgADzRMAA80UAAPNFgADzRcAA81WAAPNWAADzVsAA81dAAPNYAADzWEAA81iAAPNYwADzWQAA81mAAPNaAADzWkAA81qAAPNbAADzW0AA82sAAPNrgADzbAAA82yAAPNtQADzbYAA823AAPNuAADzbkAA827AAPNvQADzb4AA82/AAPNwQADzcIAA84BAAPOAwADzgUAA84HAAPOCgADzgsAA84MAAPODQADzg4AA84QAAPOEgADzhMAA84UAAPOFgADzhcAA85W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AAPkoQAD5KIAA+ThAAPk4wAD5OUAA+TnAAPk6gAD5OsAA+TsAAPk7QAD5O4AA+TwAAPk8gAD5PMAA+T0AAPk9gAD5PcAA+U2AAPlOAAD5ToAA+U8AAPlPwAD5UAAA+VBAAPlQgAD5UMAA+VFAAPlRwAD5UgAA+VJAAPlSwAD5UwAA+WLAAPljQAD5Y8AA+WRAAPllAAD5ZUAA+WWAAPllwAD5ZgAA+WaAAPlnAAD5Z0AA+WeAAPloAAD5aEAA+XgAAPl4gAD5eQAA+XmAAPl6QAD5eoAA+XrAAPl7AAD5e0AA+XvAAPl8QAD5fIAA+XzAAPl9QAD5fYAA+Y1AAPmNwAD5jkAA+Y7AAPmPgAD5j8AA+ZAAAPmQQAD5kIAA+ZEAAPmRgAD5kcAA+ZIAAPmSgAD5ksAA+aWAAPmuQAD5tkAA+b5AAPm+wAD5v0AA+b/AAPnAQAD5wQAA+cFAAPnBgAD5wkAA+cKAAPnDAAD5w0AA+cPAAPnEgAD5xMAA+cUAAPnFwAD5xgAA+cdAAPnKgAD5y8AA+cxAAPnMwAD5zgAA+c7AAPnPgAD50AAA+dlAAPniQAD57AAA+fUAAPn1wAD59kAA+fbAAPn3QAD598AA+fhAAPn4gAD5+UAA+fyAAPoAwAD6AUAA+gHAAPoCQAD6AsAA+gNAAPoDwAD6BEAA+gTAAPoJAAD6CcAA+gqAAPoLQAD6DAAA+gzAAPoNgAD6DkAA+g8AAPoPgAD6H0AA+h/AAPogQAD6IMAA+iGAAPohwAD6IgAA+iJAAPoigAD6IwAA+iOAAPojwAD6JAAA+iSAAPokwAD6NIAA+jUAAPo1gAD6NgAA+jbAAPo3AAD6N0AA+jeAAPo3wAD6OEAA+jjAAPo5AAD6OUAA+jnAAPo6AAD6ScAA+kpAAPpLAAD6S4AA+kxAAPpMgAD6TMAA+k0AAPpNQAD6TcAA+k5AAPpOgAD6TsAA+k9AAPpPgAD6UsAA+lMAAPpTQAD6U8AA+mOAAPpkAAD6ZIAA+mUAAPplwAD6ZgAA+mZAAPpmgAD6ZsAA+mdAAPpnwAD6aAAA+mhAAPpowAD6aQAA+njAAPp5QAD6ecAA+npAAPp7AAD6e0AA+nuAAPp7wAD6fAAA+nyAAPp9AAD6fUAA+n2AAPp+AAD6fkAA+o4AAPqOgAD6jwAA+o+AAPqQQAD6kIAA+pD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AAQHIgAEByMABAckAAQHJQAEBycABAcpAAQHKgAEBysABActAAQHLgAEB20ABAdvAAQHcgAEB3QABAd3AAQHeAAEB3kABAd6AAQHewAEB30ABAd/AAQHgAAEB4EABAeDAAQHhAAEB5EABAeSAAQHkwAEB5UABAfUAAQH1gAEB9gABAfaAAQH3QAEB94ABAffAAQH4AAEB+EABAfjAAQH5QAEB+YABAfnAAQH6QAEB+oABAgpAAQIKwAECC0ABAgvAAQIMgAECDMABAg0AAQINQAECDYABAg4AAQIOgAECDsABAg8AAQIPgAECD8ABAh+AAQIgAAECIIABAiEAAQIhwAECIgABAiJAAQIigAECIsABAiNAAQIjwAECJAABAiRAAQIkwAECJQABAjTAAQI1QAECNcABAjZAAQI3AAECN0ABAjeAAQI3wAECOAABAjiAAQI5AAECOUABAjmAAQI6AAECOkABAkoAAQJKgAECSwABAkuAAQJMQAECTIABAkzAAQJNAAECTUABAk3AAQJOQAECToABAk7AAQJPQAECT4ABAljAAQJhwAECa4ABAnSAAQJ1QAECdcABAnZAAQJ2wAECd0ABAnfAAQJ4AAECeMABAnwAAQJ/wAECgEABAoDAAQKBQAECgcABAoJAAQKCwAECg0ABAocAAQKHwAECiIABAolAAQKKAAECisABAouAAQKMQAECjMABApyAAQKdAAECnYABAp4AAQKewAECnwABAp9AAQKfgAECn8ABAqBAAQKgwAECoQABAqFAAQKhwAECogABArHAAQKyQAECssABArNAAQK0AAECtEABArSAAQK0wAECtQABArWAAQK2AAECtkABAraAAQK3AAECt0ABAscAAQLHgAECyAABAsiAAQLJQAECyYABAsnAAQLKAAECykABAsrAAQLLQAECy4ABAsvAAQLMQAECzIABAtxAAQLcwAEC3UABAt3AAQLegAEC3sABAt8AAQLfQAEC34ABAuAAAQLggAEC4MABAuEAAQLhgAEC4cABAvGAAQLyAAEC8oABAvMAAQLzwAEC9AABAvRAAQL0gAEC9MABAvVAAQL1wAEC9gABAvZAAQL2wAEC9wABAwbAAQMHQAEDB8ABAwhAAQMJAAEDCUABAwmAAQMJwAEDCgABAwqAAQMLAAEDC0ABAwuAAQMMAAEDDEABAxw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AAQpNwAEKTgABCk6AAQpPAAEKT0ABCk+AAQpQAAEKUEABCmAAAQpggAEKYQABCmGAAQpiQAEKYoABCmLAAQpjAAEKY0ABCmPAAQpkQAEKZIABCmTAAQplQAEKZYABCnVAAQp1wAEKdkABCnbAAQp3gAEKd8ABCngAAQp4QAEKeIABCnkAAQp5gAEKecABCnoAAQp6gAEKesABCoqAAQqLAAEKi4ABCowAAQqMwAEKjQABCo1AAQqNgAEKjcABCo5AAQqOwAEKjwABCo9AAQqPwAEKkAABCp/AAQqgQAEKoMABCqFAAQqiAAEKokABCqKAAQqiwAEKowABCqOAAQqkAAEKpEABCqSAAQqlAAEKpUABCrUAAQq1gAEKtgABCraAAQq3QAEKt4ABCrfAAQq4AAEKuEABCrjAAQq5QAEKuYABCrnAAQq6QAEKuoABCs1AAQrWAAEK3gABCuYAAQrmgAEK5wABCueAAQroAAEK6MABCukAAQrpQAEK6gABCupAAQrqwAEK6wABCuuAAQrsQAEK7IABCuzAAQrtgAEK7cABCu8AAQryQAEK84ABCvQAAQr0gAEK9cABCvaAAQr3QAEK98ABCwEAAQsKAAELE8ABCxzAAQsdgAELHgABCx6AAQsfAAELH4ABCyAAAQsgQAELIQABCyRAAQsogAELKQABCymAAQsqAAELKoABCysAAQsrgAELLAABCyyAAQswwAELMYABCzJAAQszAAELM8ABCzSAAQs1QAELNgABCzbAAQs3QAELRwABC0eAAQtIAAELSIABC0lAAQtJgAELScABC0oAAQtKQAELSsABC0tAAQtLgAELS8ABC0xAAQtMgAELXEABC1zAAQtdQAELXcABC16AAQtewAELXwABC19AAQtfgAELYAABC2CAAQtgwAELYQABC2GAAQthwAELcYABC3IAAQtywAELc0ABC3QAAQt0QAELdIABC3TAAQt1AAELdYABC3YAAQt2QAELdoABC3cAAQt3QAELeoABC3rAAQt7AAELe4ABC4tAAQuLwAELjEABC4zAAQuNgAELjcABC44AAQuOQAELjoABC48AAQuPgAELj8ABC5AAAQuQgAELkMABC6CAAQuhAAELoYABC6IAAQuiwAELowABC6NAAQujgAELo8ABC6RAAQukwAELpQABC6VAAQulwAELpgABC7X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AARARgAEQEcABEBJAARASwAEQEwABEBNAARATwAEQFAABECPAARAkQAEQJMABECVAARAmAAEQJkABECaAARAmwAEQJwABECeAARAoAAEQKEABECiAARApAAEQKUABEDkAARA5gAEQOgABEDqAARA7QAEQO4ABEDvAARA8AAEQPEABEDzAARA9QAEQPYABED3AARA+QAEQPoABEE5AARBOwAEQT0ABEE/AARBQgAEQUMABEFEAARBRQAEQUYABEFIAARBSgAEQUsABEFMAARBTgAEQU8ABEGaAARBvQAEQd0ABEH9AARB/wAEQgEABEIDAARCBQAEQggABEIJAARCCgAEQg0ABEIOAARCEAAEQhEABEITAARCFgAEQhcABEIYAARCGwAEQhwABEIhAARCLgAEQjMABEI1AARCNwAEQjwABEI/AARCQgAEQkQABEJpAARCjQAEQrQABELYAARC2wAEQt0ABELfAARC4QAEQuMABELlAARC5gAEQukABEL2AARDBwAEQwkABEMLAARDDQAEQw8ABEMRAARDEwAEQxUABEMXAARDKAAEQysABEMuAARDMQAEQzQABEM3AARDOgAEQz0ABENAAARDQgAEQ4EABEODAARDhQAEQ4cABEOKAARDiwAEQ4wABEONAARDjgAEQ5AABEOSAARDkwAEQ5QABEOWAARDlwAEQ9YABEPYAARD2gAEQ9wABEPfAARD4AAEQ+EABEPiAARD4wAEQ+UABEPnAARD6AAEQ+kABEPrAARD7AAERCsABEQtAAREMAAERDIABEQ1AARENgAERDcABEQ4AAREOQAERDsABEQ9AAREPgAERD8ABERBAAREQgAERE8ABERQAAREUQAERFMABESSAARElAAERJYABESYAAREmwAERJwABESdAAREngAERJ8ABEShAAREowAERKQABESlAAREpwAERKgABETnAARE6QAEROsABETtAARE8AAERPEABETyAARE8wAERPQABET2AARE+AAERPkABET6AARE/AAERP0ABEU8AARFPgAERUAABEVCAARFRQAERUYABEVHAARFSAAERUkABEVLAARFTQAERU4ABEVPAARFUQAERVIABEWRAARFkwAERZUABEWXAARFmgAERZsABEWcAARFnQAERZ4ABEWgAARFogAERaMABEWkAARFpgAERacABEXmAARF6AAEReoABEXsAARF7wAERfAABEXxAARF8gAERfMABEX1AARF9wAERfgABEX5AARF+wAERfwABEYhAARGRQAERmwABEaQAARGkwAERpUABEaXAARGmQAERpsABEadAARGngAERqEABEauAARGvQAERr8ABEbBAARGwwAERsUABEbHAARGyQAERssABEbaAARG3QAERuAABEbjAARG5gAERukABEbsAARG7wAERvEABEcwAARHMgAERzQABEc2AARHOQAERzoABEc7AARHPAAERz0ABEc/AARHQQAER0IABEdDAARHRQAER0YABEeFAARHhwAER4kABEeLAARHjgAER48ABEeQAARHkQAER5IABEeUAARHlgAER5cABEeYAARHmgAER5sABEfaAARH3AAER94ABEfgAARH4wAER+QABEflAARH5gAER+cABEfpAARH6wAER+wABEftAARH7wAER/AABEgvAARIMQAESDMABEg1AARIOAAESDkABEg6AARIOwAESDwABEg+AARIQAAESEEABEhCAARIRAAESEUABEiEAARIhgAESIgABEiKAARIjQAESI4ABEiPAARIkAAESJEABEiTAARIlQAESJYABEiXAARImQAESJoABEjZAARI2wAESN0ABEjfAARI4gAESOMABEjkAARI5QAESOYABEjoAARI6gAESOsABEjsAARI7gAESO8ABEkuAARJMAAESTIABEk0AARJNwAESTgABEk5AARJOgAESTsABEk9AARJPwAESUAABElBAARJQwAESUQABElNAARJTgAESVAABEldAARJXgAESV8ABElhAARJbgAESW8ABElwAARJcgAESX8ABEmAAARJgQAESYMABEmMAARJmwAESagABEm3AARJyQAESd0ABEn0AARKBgAESg8ABEoQAARKEgAESh8ABEogAARKIQAESiMABEosAARKNgAESj0AAAAAAAAEAgAAAAAAAKWnAAAAAAAAAAAAAAAAAARKRQ== - - fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel - YnBsaXN0MDDUAAEAAgADAAQABQAGAAcAClgkdmVyc2lvblkkYXJjaGl2ZXJUJHRvcFgkb2JqZWN0 -cxIAAYagXxAPTlNLZXllZEFyY2hpdmVy0QAIAAlUcm9vdIABrxEPFQALAAwAGQA1ADYANwBnAGgAaQBqAGsAbABtAG4AbwBwAHEAcgBzAHQAdQB2AHcAeAB5AHoAewB8AJcAmACZAJ8AoACsAMIAwwDEAMUAxgDHAMgAyQDKAMsA5ADnAO4A9AEDARIBFQEkATMBNgCWAUYBVQFZAV0BbAFyAXMBewGKAYsBlAGcAZ0BngGzAbQBvAG9Ab4BygHeAd8B4AHhAeIB4wHkAeUB5gH1AgQCEwIXAiYCNQI2AkUCVAJjAm8CgQKCAoMChAKFAoYChwKIApcCpgK1AsQCxQLUAuMC8gL6Aw8DEAMYAyQDOANHA1YDZQNpA3gDhwOWA6UDtAPAA9ID4QPwA/8EDgQdBCwEOwQ8BD8ESARiBGMEaQR1BIsEmgSdBKwEuwS+BM0E3ATfBO4E/QUBBRAFHwUgBSoFKwUsBS0FQgVDBUsFVwVrBXoFiQWYBZwFqwW6BckF2AXnBfMGBQYUBiMGMgZBBlAGXwZuBoMGhAaMBpgGrAa7BsoG2QbdBuwG+wcKBxkHKAc0B0YHVQdkB3MHggeRB6AHrwfEB8UHzQfZB+0H/AgLCBoIHggtCDwISwhaCGkIdQiHCJYIpQi0CMMI0gjhCPAI8wkNCQ4JFAkgCTYJRQlICVcJZglqCW4Jbwl+CY0JkAmfCa4JsgnBCdAKFgoXChgKGQoaChsKHAodCh4KHwogCiEKIgojCiQKJQomCicKKAopCioKKwosCi0KLgovCjAKMQoyCjMKNAo1CjYKSwpMClQKYAp0CoMKkgqhCqUKtArDCtIK4QrwCvwLDgsdCywLOwtKC0sLWgtpC3gLjQuOC5YLogu2C8UL1AvjC+cL9gwFDBQMIwwyDD4MUAxfDG4MfQyMDJsMqgy5DM4MzwzXDOMM9w0GDRUNJA0oDTcNRg1VDWQNcw1/DZENoA2hDbANvw3ODc8N3g3tDfwOEQ4SDhoOJg46DkkOWA5nDmsOeg6JDpgOpw62DsIO1A7jDvIPAQ8QDx8PLg89D1IPUw9bD2cPew+KD5kPqA+sD7sPyg/ZD+gP9xADEBUQJBAzEEIQURBgEG8QfhCTEJQQnBCoELwQyxDaEOkQ7RD8EQsRGhEpETgRRBFWEWURdBGDEZIRoRGwEb8R1BHVEd0R6RH9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V9ZX4lf2WAVYFFgjWCdYNlhFWFRYY1hyWH5YkFifWK5YvVjMWNtY6lj5WQ5ZD1kXWSNZN1lGWVVZZFloWXdZhlmVWaRZs1m/WdFZ4FnvWf5aDVocWitaOlpPWlBaWFpkWnhah1qWWqVaqVq4Wsda1lrlWvRbAFsSWyFbMFs/W05bXVtsW3tbkFuRW5lbpVu5W8hb11vmW+pb+VwIXBdcJlw1XEFcU1xiXHFcgFyPXJ5crVy8XNFc0lzaXOZc+l0JXRhdJ10rXTpdSV1YXWdddl2CXZRdo12yXcFd0F3fXe5d/V4AXg9eHl4tXkJeQ15LXldea156XolemF6cXqteul7JXthe517zXwVfFF8jXzJfQV9QX19fbl+DX4RfjF+YX6xfu1/KX9lf3V/sX/tgCmAZYChgNGBGYFVgZGBzYIJgkWCgYK9gxGDFYM1g2WDtYPxhC2EaYR5hLWE8YUthWmFpYXVhh2GWYaVhtGHDYdJh4WHwYgViBmIOYhpiLmI9YkxiW2JfYm5ifWKMYptiqmK2Yshi12LmYvVjBGMTYyJjMWNGY0djT2NbY29jfmONY5xjoGOvY75jzWPcY+tj92QJZBhkJ2Q2ZEVkVGRjZHJkh2SIZJBknGSwZL9kzmTdZOFk8GT/ZQ5lHWUsZThlSmVZZWhld2WGZZVlpGWzZchlyWXRZd1l8WYAZg9mHmYiZjFmQGZPZl5mbWZ5ZotmmmapZrhmx2bWZuVm9GcJZwpnEmceZzJnQWdQZ19nY2dyZ4FnkGefZ65numfMZ9tn6mf5aAhoF2gmaCdoNmhLaExoVGhgaHRog2iSaKFopWi0aMNo0mjhaPBo/GkOaR1pLGk7aUppWWloaXdpjGmNaZVpoWm1acRp02niaeZp9WoEahNqImoxaj1qT2peam1qfGqLappqqWq4as1qzmrWauJq9msFaxRrI2snazZrRWtUa2Nrcmt+a5Brn2uua71rzGvba+pr+WwObA9sF2wjbDdsRmxVbGRsaGx3bIZslWykbLNsv2zRbOBs72z+bQ1tHG0rbTptPW1MbVttam1/bYBtiG2Ubahtt23GbdVt2W3obfduBm4VbiRuMG5CblFuYG5vbn5ujW6cbqtuwG7Bbslu1W7pbvhvB28WbxpvKW84b0dvVm9lb3Fvg2+Sb6FvsG+/b85v3W/scAFwAnAKcBZwKnA5cEhwV3BbcGpweXCIcJdwpnCycMRw03DicPFxAHEPcR5xLXFCcUNxS3FXcWtxenGJcZhxnHGrcbpxyXHYcedx83IFchRyI3IyckFyUHJfcm5ycXKLcoxyknKecrRyw3LGctVy5HLncvZzBXMIcxdzJnMqczlzSHNcc11zXnNfc2BzYXN2c3dzf3OLc59zrnO9c8xz0HPfc+5z/XQMdBt0J3Q5dEh0V3RmdHV0hHSTdKJ0t3S4dMB0zHTgdO90/nUNdRF1IHUvdT51TXVcdWh1enWJdZh1p3W2dcV11HXVdeR1+XX6dgJ2DnYidjF2QHZPdlN2YnZxdoB2j3aedqp2vHbLdtp26Xb4dwd3Fncldzp3O3dDd093Y3dyd4F3kHeUd6N3snfBd9B333frd/14DHgbeCp4OXhIeFd4Znh7eHx4hHiQeKR4s3jCeNF41XjkePN5AnkReSB5LHk+eU15XHlreXp5iXmYead5vHm9ecV50XnlefR6A3oSehZ6JXo0ekN6Unphem16f3qOep16rHq7esp62Xroev16/nsGexJ7Jns1e0R7U3tXe2Z7dXuEe5N7onuue8B7z3vee+17/HwLfBp8KXw+fD98R3xTfGd8dnyFfJR8mHynfLZ8xXzUfON8730BfRB9H30ufT19TH1bfWp9bX2HfYh9jn2afbB9v33CfdF94H3jffJ+AX4EfhN+In4mfjV+RH5Ffll+Wn5bflx+XX5efl9+dH51fn1+iX6dfqx+u37Kfs5+3X7sfvt/Cn8ZfyV/N39Gf1V/ZH9zf4J/kX+gf7V/tn++f8p/3n/tf/yAC4APgB6ALYA8gEuAWoBmgHiAh4CWgKWAtIDDgNKA4YD2gPeA/4ELgR+BLoE9gUyBUIFfgW6BfYGMgZuBp4G5gciB14HmgfWCBIITgiKCN4I4gkCCTIJggm+CfoKNgpGCoIKvgr6CzYLcguiC+oMJgxiDJ4M2g0WDVINjg3iDeYOBg42DoYOwg7+DzoPSg+GD8IP/hA6EHYQphDuESoRZhGiEd4SGhJWEpIS5hLqEwoTOhOKE8YUAhQ+FE4UihTGFQIVPhV6FaoV8hYuFmoWphbiFuYXIhdeF5oX7hfyGBIYQhiSGM4ZChlGGVYZkhnOGgoaRhqCGrIa+hs2G3IbrhvqHCYcYhyeHPIc9h0WHUYdlh3SHg4eSh5aHpYe0h8OH0ofhh+2H/4gOiB2ILIg7iEqIWYhoiGuIhYiGiIyImIiuiL2IwIjPiN6I4YjwiP+JAokRiSCJJIkziUKJQ4lPiVCJUYlmiWeJb4l7iY+JnomtibyJwInPid6J7Yn8iguKF4opijiKR4pWimWKdIqDipKKp4qoirCKvIrQit+K7or9iwGLEIsfiy6LPYtMi1iLaot5i4iLl4umi7WLxIvTi+iL6Yvxi/2MEYwgjC+MPoxCjFGMYIxvjH6MjYyZjKuMuozJjNiM54z2jQWNFI0pjSqNMo0+jVKNYY1wjX+Ng42SjaGNsI2/jc6N2o3sjfuOCo4ZjiiON45GjlWOWI5yjnOOeY6FjpuOqo6tjryOy47Ojt2O7I7vjv6PDY8RjyCPL48wj0qPS49Mj02PTo9Pj1CPUY9Sj1OPVI9pj2qPco9+j5KPoY+wj7+Pw4/Sj+GP8I//kA6QGpAskDuQSpBZkGiQd5CGkJWQqpCrkLOQv5DTkOKQ8ZEAkQSRE5EikTGRQJFPkVuRbZF8kYuRmpGpkbiRx5HWkeuR7JH0kgCSFJIjkjKSQZJFklSSY5JykoGSkJKckq6SvZLMktuS6pL5kwiTF5Msky2TNZNBk1WTZJNzk4KThpOVk6STs5PCk9GT3ZPvk/6UDZQclCuUOpRJlFiUbZRulHaUgpSWlKWUtJTDlMeU1pTllPSVA5USlR6VMJU/lU6VXZVslXuVipWZla6Vr5W3lcOV15XmlfWWBJYIlheWJpY1lkSWU5ZflnGWgJaPlp6WrZaulr2WzJbblvCW8Zb5lwWXGZcolzeXRpdKl1mXaJd3l4aXlZehl7OXwpfRl+CX75f+mA2YHJgxmDKYOphGmFqYaZh4mIeYi5iamKmYuJjHmNaY4pj0mQOZEpkhmTCZP5lOmV2ZcplzmXuZh5mbmaqZuZnImcyZ25nqmfmaCJoXmiOaNZpEmlOaYppxmoCaj5qemrOatJq8msia3JrrmvqbCZsNmxybK5s6m0mbWJtkm3abhZuUm6ObspvBm9Cb35v0m/Wb/ZwJnB2cLJw7nEqcTpxdnGyce5yKnJmcpZy3nMac1ZzknPOdAp0RnSCdI509nT6dRJ1QnWaddZ14nYedlp2Znaidt526ncmd2J3cneud+p37ngOeBJ4ZnhqeIp4unkKeUZ5gnm+ec56CnpGeoJ6vnr6eyp7cnuue+p8JnxifJ582n0WfWp9bn2Ofb5+Dn5KfoZ+wn7Sfw5/Sn+Gf8J//oAugHaAsoDugSqBZoGigd6CGoImgo6CkoKqgtqDMoNug3qDtoPyg/6EOoR2hIKEvoT6hQqFRoWChYaFvoXChcaFyoXOhiKGJoZGhnaGxocChz6HeoeKh8aIAog+iHqItojmiS6JaommieKKHopaipaK0osmiyqLSot6i8qMBoxCjH6MjozKjQaNQo1+jbqN6o4yjm6Oqo7mjyKPXo+aj9aQKpAukE6QfpDOkQqRRpGCkZKRzpIKkkaSgpK+ku6TNpNyk66T6pQmlGKUnpTalS6VMpVSlYKV0pYOlkqWhpaWltKXDpdKl4aXwpfymDqYdpiymO6ZKpkumWqZppnimjaaOppamoqa2psWm1Kbjpuem9qcFpxSnI6cypz6nUKdfp26nfaeMp5unqqe5p7yn1qfXp92n6af/qA6oEaggqC+oMqhBqFCoU6hiqHGodaiEqJOolKiiqKOopKilqKaou6i8qMSo0KjkqPOpAqkRqRWpJKkzqUKpUalgqWypfqmNqZypq6m6qcmp2KnZqeip/an+qgaqEqomqjWqRKpTqleqZqp1qoSqk6qiqq6qwKrPqt6q7ar8qwurGqsbqyqrP6tAq0irVKtoq3erhquVq5mrqKu3q8ar1avkq/CsAqwRrCCsL6w+rE2sXKxrrICsgayJrJWsqay4rMes1qzarOms+K0HrRatJa0xrUGtUK1qrWutca19rZOtoq2lrbStw63GrdWt5K3nrfauBa4JrhiuJ64orjKuM640rkmuSq5Srl6ucq6BrpCun66jrrKuwa7Qrt+u7q76rwyvG68qrzmvSK9Xr2avda+Kr4uvk6+fr7Ovwq/Rr+Cv5K/zsAKwEbAgsC+wO7BNsFywa7B6sImwmLCnsLawy7DMsNSw4LD0sQOxErEhsSWxNLFDsVKxYbFwsXyxjrGdsayxu7HKsdmx6LH3sfqyCbIYsieyNrJFslqyW7Jjsm+yg7KSsqGysLK0ssOy0rLhsvCy/7MLsx2zLLM7s0qzWbNos3ezhrOJs6OzpLOqs7azzLPbs96z7bP8s/+0DrQdtCC0L7Q+tEK0UbRgtGq0f7SAtIi0lLSotLe0xrTVtNm06LT3tQa1FbUktTC1QrVRtWC1b7V+tY21nLWrtcC1wbXJtdW16bX4tge2FrYatim2OLZHtla2ZbZxtoO2krahtrC2v7bOtt227LcBtwK3CrcWtyq3ObdIt1e3W7dqt3m3iLeXt6a3srfEt9O34rfxuAC4D7geuC24MLhKuEu4UbhduHO4griFuJS4o7imuLW4xLjHuNa45bjpuPi5B7kIuRa5F7kYuRm5GrkvuTC5OLlEuVi5Z7l2uYW5ibmYuae5trnFudS54LnyugG6ELofui66PbpMulu6cLpxunm6hbqZuqi6t7rGusq62brouve7BrsVuyG7M7tCu1G7YLtvu367jbucu7G7sru6u8a72rvpu/i8B7wLvBq8Kbw4vEe8VrxivHS8g7ySvKG8sLy/vM683bzyvPO8+70HvRu9Kr05vUi9TL1bvWq9eb2IvZe9o721vcS9073ivfG+AL4Pvh6+M740vjy+SL5cvmu+er6Jvo2+nL6rvrq+yb7YvuS+9r8FvxS/I78yv0G/UL9fv2K/fL99v4O/j7+lv7S/t7/Gv9W/2L/nv/a/+cAIwBfAG8AqwDnAOsBEwEXAWsBbwGPAb8CDwJLAocCwwLTAw8DSwOHA8MD/wQvBHcEswTvBSsFZwWjBd8GGwZvBnMGkwbDBxMHTweLB8cH1wgTCE8IiwjHCQMJMwl7CbcJ8wovCmsKpwrjCx8Lcwt3C5cLxwwXDFMMjwzLDNsNFw1TDY8Nyw4HDjcOfw67DvcPMw9vD6sP5xAjEC8QPxBPEF8QfxCLEJlUkbnVsbNYADQAOAA8AEAARABIAEwAUABUAFgAXABhfEA9feGRfcm9vdFBhY2thZ2VWJGNsYXNzXV94ZF9tb2RlbE5hbWVcX3hkX2NvbW1lbnRzXxAVX2NvbmZpZ3VyYXRpb25zQnlOYW1lXxAXX21vZGVsVmVyc2lvbklkZW50aWZpZXKAAoEPFIAAgQ8SgQ8TgQJL3gAaABsAHAAdAB4AHwAgAA4AIQAiACMAJAAlACYAJwAoACkACQAnABUALQAuAC8AMAAxACcAJwAVXxAcWERCdWNrZXRGb3JDbGFzc2Vzd2FzRW5jb2RlZF8QGlhEQnVja2V0Rm9yUGFja2FnZXNzdG9yYWdlXxAcWERCdWNrZXRGb3JJbnRlcmZhY2Vzc3RvcmFnZV8QD194ZF9vd25pbmdNb2RlbF8QHVhEQnVja2V0Rm9yUGFja2FnZXN3YXNFbmNvZGVkVl9vd25lcl8QG1hEQnVja2V0Rm9yRGF0YVR5cGVzc3RvcmFnZVtfdmlzaWJpbGl0eV8QGVhEQnVja2V0Rm9yQ2xhc3Nlc3N0b3JhZ2VVX25hbWVfEB9YREJ1Y2tldEZvckludGVyZmFjZXN3YXNFbmNvZGVkXxAeWERCdWNrZXRGb3JEYXRhVHlwZXN3YXNFbmNvZGVkXxAQX3VuaXF1ZUVsZW1lbnRJRIAEgQ8QgQ8OgAGABIAAgQ8PgQ8REACABYADgASABIAAUFNZRVPTADgAOQAOADoAUABmV05TLmtleXNaTlMub2JqZWN0c68QFQA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4AT4AGgAeACIAJgAqAC4AMgA2ADoAPgBCAEYASgBOAFIAVgBaAF4AYgBmAGq8QFQBRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEAYgBjAGQAZYAbgImA5oEGIoEI3oEJsIEKhIEK94EMFIEMWIEM5YEB14ENzoEGwoEOJ4EDyIEOs4EFwoEE84EET4ENVYA5W0NEU3Rhc2hJdGVtXxATQ0RYY21BdmFpbGFibGVBc3NldFdDRENoYWluXxAPQ0RQcmljZVByb3ZpZGVyWUNEVG9uRGFwcF8QEUNEVG9uQ29ubmVjdGVkQXBwWkNEU2NhbUluZm9fEBhDRFRyYW5zYWN0aW9uSGlzdG9yeUl0ZW1fEBJDRENoYWluU3RvcmFnZUl0ZW1fEBVDRFJ1bnRpbWVNZXRhZGF0YUl0ZW1fEBlDRFBvbGthc3dhcFJlbW90ZVNldHRpbmdzW0NEQ2hhaW5Ob2RlWUNEQ29udGFjdFtDRFByaWNlRGF0YV1DRENvbnRhY3RJdGVtXxAQQ0RDaGFpblhjbUNvbmZpZ15DRFBoaXNoaW5nSXRlbVdDREFzc2V0XUNERXh0ZXJuYWxBcGlfEBlDRFhjbUF2YWlsYWJsZURlc3RpbmF0aW9uXkNEUG9sa2Fzd2FwRGV43xAQAH0AfgB/AIAAHwCBAIIAIQCDAIQADgAjAIUAhgAmAIcAiACJACcAJwATAI0AjgAvACcAiACRADsAiACUAJUAll8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc2R1cGxpY2F0ZXNfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zc3RvcmFnZVtfaXNBYnN0cmFjdIAdgEGABIAEgAKAHoCGgASAHYCIgAaAHYCHgBwIEjXa1sRXb3JkZXJlZNMAOAA5AA4AmgCcAGahAJuAH6EAnYAggDleWERfUFN0ZXJlb3R5cGXZAB8AIwChAA4AJgCiACEAhwCjAFEAmwCIAKcAFQAnAC8AlgCrXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgBuAH4AdgECAAIAECIAh0wA4ADkADgCtALcAZqkArgCvALAAsQCyALMAtAC1ALaAIoAjgCSAJYAmgCeAKIApgCqpALgAuQC6ALsAvAC9AL4AvwDAgCuAL4AwgDKAM4A1gDeAOoA+gDlfEBNYRFBNQ29tcG91bmRJbmRleGVzXxAQWERfUFNLX2VsZW1lbnRJRF8QGVhEUE1VbmlxdWVuZXNzQ29uc3RyYWludHNfEBpYRF9QU0tfdmVyc2lvbkhhc2hNb2RpZmllcl8QGVhEX1BTS19mZXRjaFJlcXVlc3RzQXJyYXlfEBFYRF9QU0tfaXNBYnN0cmFjdF8QD1hEX1BTS191c2VySW5mb18QE1hEX1BTS19jbGFzc01hcHBpbmdfEBZYRF9QU0tfZW50aXR5Q2xhc3NOYW1l3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDT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AC/oAAAv6QAAL+oAAC/rAAAv7QAAL+8AAC/wAAAv8QAAL/MAAC/0AAAwMwAAMDUAADA3AAAwOQAAMDsAADA8AAAwPQAAMD4AADA/AAAwQQAAMEMAADBEAAAwRQAAMEcAADBIAAAwhwAAMIkAADCLAAAwjQAAMI8AADCQAAAwkQAAMJIAADCTAAAwlQAAMJcAADCYAAAwmQAAMJsAADCcAAAwqQAAMKoAADCrAAAwrQAAMOwAADDuAAAw8AAAMPIAADD0AAAw9QAAMPYAADD3AAAw+AAAMPoAADD8AAAw/QAAMP4AADEAAAAxAQAAMUAAADFCAAAxRAAAMUYAADFIAAAxSQAAMUoAADFLAAAxTAAAMU4AADFQAAAxUQAAMVIAADFUAAAxVQAAMVYAADGVAAAxlwAAMZkAADGbAAAxnQAAMZ4AADGfAAAxoAAAMaEAADGjAAAxpQAAMaYAADGnAAAxqQAAMaoAADHpAAAx6wAAMe0AADHvAAAx8QAAMfIAADHzAAAx9AAAMfUAADH3AAAx+QAAMfoAADH7AAAx/QAAMf4AADI9AAAyPwAAMkEAADJDAAAyRQAAMkYAADJHAAAySAAAMkkAADJLAAAyTQAAMk4AADJPAAAyUQAAMlIAADJ3AAAymwAAMsIAADLmAAAy6AAAMuoAADLsAAAy7gAAMvAAADLyAAAy8wAAMvUAADMCAAAzEQAAMxMAADMVAAAzFwAAMxkAADMbAAAzHQAAMx8AADMuAAAzMAAAMzIAADM0AAAzNgAAMzgAADM6AAAzPAAAMz4AADNeAAAziQAAM6MAADO8AAAz1gAAM/YAADQZAAA0WAAANFoAADRcAAA0XgAANGAAADRhAAA0YgAANGMAADRkAAA0ZgAANGgAADRpAAA0agAANGwAADRtAAA0rAAANK4AADSwAAA0sgAANLQAADS1AAA0tgAANLcAADS4AAA0ugAANLwAADS9AAA0vgAANMAAADTBAAA1AAAANQIAADUEAAA1BgAANQgAADUJAAA1CgAANQsAADUMAAA1DgAANRAAADURAAA1EgAANRQAADUVAAA1VAAANVYAADVYAAA1WgAANVwAADVdAAA1XgAANV8AADVgAAA1YgAANWQAADVlAAA1ZgAANWgAADVpAAA1bAAANasAADWtAAA1rwAANbEAADWzAAA1tAAANbUA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AEJ7AABCfQAAQn4AAEJ/AABCgAAAQoEAAEKDAABChQAAQoYAAEKHAABCiQAAQooAAEKTAABClAAAQpYAAELVAABC1wAAQtkAAELbAABC3QAAQt4AAELfAABC4AAAQuEAAELjAABC5QAAQuYAAELnAABC6QAAQuoAAEMpAABDKwAAQy0AAEMvAABDMQAAQzIAAEMzAABDNAAAQzUAAEM3AABDOQAAQzoAAEM7AABDPQAAQz4AAENHAABDSAAAQ0oAAEOJAABDiwAAQ40AAEOPAABDkQAAQ5IAAEOTAABDlAAAQ5UAAEOXAABDmQAAQ5oAAEObAABDnQAAQ54AAEPdAABD3wAAQ+EAAEPjAABD5QAAQ+YAAEPnAABD6AAAQ+kAAEPrAABD7QAAQ+4AAEPvAABD8QAAQ/IAAEP7AABD/AAAQ/4AAEQ9AABEPwAAREEAAERDAABERQAAREYAAERHAABESAAAREkAAERLAABETQAARE4AAERPAABEUQAARFIAAESRAABEkwAARJUAAESXAABEmQAARJoAAESbAABEnAAARJ0AAESfAABEoQAARKIAAESjAABEpQAARKYAAESzAABEtAAARLUAAES3AABE9gAARPgAAET6AABE/AAARP4AAET/AABFAAAARQEAAEUCAABFBAAARQYAAEUHAABFCAAARQoAAEULAABFSgAARUwAAEVOAABFUAAARVIAAEVTAABFVAAARVUAAEVWAABFWAAARVoAAEVbAABFXAAARV4AAEVfAABFdQAARYIAAEWJAABFiwAARY0AAEWPAABFlgAARZgAAEWaAABFnAAARZ4AAEWhAABFqAAARbIAAEX9AABGIAAARkAAAEZgAABGYgAARmQAAEZmAABGaAAARmoAAEZrAABGbAAARm4AAEZvAABGcQAARnIAAEZ0AABGdgAARncAAEZ4AABGegAARnsAAEaEAABGkQAARpYAAEaYAABGmgAARp8AAEahAABGowAARqUAAEbKAABG7gAARxUAAEc5AABHOwAARz0AAEc/AABHQQAAR0MAAEdFAABHRgAAR0gAAEdVAABHZgAAR2gAAEdqAABHbAAAR24AAEdwAABHcgAAR3QAAEd2AABHhwAAR4kAAEeLAABHjQAAR48AAEeRAABHkwAAR5UAAEeXAABHmQAAR9gAAEfaAABH3AAAR94AAEfgAABH4QAAR+IAAEfjAABH5AAAR+YAAEfoAABH6QAAR+oAAEfsAABH7QAASCwAAEguAABIMAAASDIAAEg0AABINQAASDYAAEg3AABIOAAASDoAAEg8AABIPQAASD4AAEhAAABIQQAASIAAAEiCAABIhAAASIYAAEiIAABIiQAASIoAAEiLAABIjAAASI4AAEiQAABIkQAASJIAAEiUAABIlQAASKIAAEijAABIpAAASKYAAEjlAABI5wAASOkAAEjrAABI7QAASO4AAEjvAABI8AAASPEAAEjzAABI9QAASPYAAEj3AABI+QAASPoAAEk5AABJOwAAST0AAEk/AABJQQAASUIAAElDAABJRAAASUUAAElHAABJSQAASUoAAElLAABJTQAASU4AAEmNAABJjwAASZEAAEmTAABJlQAASZYAAEmXAABJmAAASZkAAEmbAABJnQAASZ4AAEmfAABJoQAASaIAAEnhAABJ4wAASeUAAEnnAABJ6QAASeoAAEnrAABJ7AAASe0AAEnvAABJ8QAASfIAAEnzAABJ9QAASfYAAEo1AABKNwAASjkAAEo7AABKPQAASj4AAEo/AABKQAAASkEAAEpDAABKRQAASkYAAEpHAABKSQAASkoAAEpvAABKkwAASroAAEreAABK4AAASuIAAErkAABK5gAASugAAErqAABK6wAASu0AAEr6AABLCQAASwsAAEsNAABLDwAASxEAAEsTAABLFQAASxcAAEsmAABLKAAASyoAAEssAABLLgAASzAAAEsyAABLNAAASzYAAEt1AABLdwAAS3kAAEt7AABLfQAAS34AAEt/AABLgAAAS4EAAEuDAABLhQAAS4YAAEuHAABLiQAAS4oAAEvJAABLywAAS80AAEvPAABL0QAAS9IAAEvTAABL1AAAS9UAAEvXAABL2QAAS9oAAEvbAABL3QAAS94AAEwdAABMHwAATCEAAEwjAABMJQAATCYAAEwnAABMKAAATCkAAEwrAABMLQAATC4AAEwvAABMMQAATDIAAExxAABMcwAATHUAAEx3AABMeQAATHoAAEx7AABMfAAATH0AAEx/AABMgQAATIIAAEyDAABMhQAATIYAAEzFAABMxwAATMkAAEzLAABMzQAATM4AAEzPAABM0AAATNEAAEzTAABM1QAATNYAAEzXAABM2QAATNoAAE0ZAABNGwAATR0AAE0fAABNIQAATSIAAE0jAABNJAAATSUAAE0nAABNKQAATSoAAE0rAABNLQAATS4AAE1tAABNbwAATXEAAE1zAABNdQAATXYAAE13AABNeAAATXkAAE17AABNfQAATX4AAE1/AABNgQAATYIAAE3NAABN8AAAThAAAE4wAABOMgAATjQAAE42AABOOAAATjoAAE47AABOPAAATj4AAE4/AABOQQAATkIAAE5EAABORgAATkcAAE5IAABOSgAATksAAE5QAABOXQAATmIAAE5kAABOZgAATmsAAE5tAABObwAATnEAAE6WAABOugAATuEAAE8FAABPBwAATwkAAE8LAABPDQAATw8AAE8RAABPEgAATxQAAE8hAABPMgAATzQAAE82AABPOAAATzoAAE88AABPPgAAT0AAAE9CAABPUwAAT1UAAE9XAABPWQAAT1sAAE9dAABPXwAAT2EAAE9jAABPZQAAT6QAAE+mAABPqAAAT6oAAE+sAABPrQAAT64AAE+vAABPsAAAT7IAAE+0AABPtQAAT7YAAE+4AABPuQAAT/gAAE/6AABP/AAAT/4AAFAAAABQAQAAUAIAAFADAABQBAAAUAYAAFAIAABQCQAAUAoAAFAMAABQDQAAUEwAAFBOAABQUAAAUFIAAFBUAABQVQAAUFYAAFBXAABQWAAAUFoAAFBcAABQXQAAUF4AAFBgAABQYQAAUG4AAFBvAABQcAAAUHIAAFCxAABQswAAULUAAFC3AABQuQAAULoAAFC7AABQvAAAUL0AAFC/AABQwQAAUMIAAFDDAABQxQAAUMYAAFEFAABRBwAAUQkAAFELAABRDQAAUQ4AAFEPAABREAAAUREAAFETAABRFQAAURYAAFEXAABRGQAAURoAAFFZAABRWwAAUV0AAFFfAABRYQAAUWIAAFFjAABRZAAAUWUAAFFnAABRaQAAUWoAAFFrAABRbQAAUW4AAFGtAABRrwAAUbEAAFGzAABRtQAAUbYAAFG3AABRuAAAUbkAAFG7AABRvQAAUb4AAFG/AABRwQAAUcIAAFIBAABSAwAAUgUAAFIHAABSCQAAUgoAAFILAABSDAAAUg0AAFIPAABSEQAAUhIAAFITAABSFQAAUhYAAFI7AABSXwAAUoYAAFKqAABSrAAAUq4AAFKwAABSsgAAUrQAAFK2AABStwAAUrkAAFLGAABS1QAAUtcAAFLZAABS2wAAUt0AAFLfAABS4QAAUuMAAFLyAABS9AAAUvYAAFL4AABS+gAAUvwAAFL+AABTAAAAUwIAAFNBAABTQwAAU0UAAFNHAABTSQAAU0oAAFNLAABTTAAAU00AAFNPAABTUQAAU1IAAFNTAABTVQAAU1YAAFOVAABTlwAAU5kAAFObAABTnQAAU54AAFOfAABToAAAU6EAAFOjAABTpQAAU6YAAFOnAABTqQAAU6oAAFPpAABT6wAAU+0AAFPvAABT8QAAU/IAAFPzAABT9AAAU/UAAFP3AABT+QAAU/oAAFP7AABT/QAAU/4AAFQ9AABUPwAAVEEAAFRDAABURQAAVEYAAFRHAABUSAAAVEkAAFRLAABUTQAAVE4AAFRPAABUUQAAVFIAAFSRAABUkwAAVJUAAFSXAABUmQAAVJoAAFSbAABUnAAAVJ0AAFSfAABUoQAAVKIAAFSjAABUpQAAVKYAAFTlAABU5wAAVOkAAFTrAABU7QAAVO4AAFTvAABU8AAAVPEAAFTzAABU9QAAVPYAAFT3AABU+QAAVPoAAFU5AABVOwAAVT0AAFU/AABVQQAAVUIAAFVDAABVRAAAVUUAAFVHAABVSQAAVUoAAFVLAABVTQAAVU4AAFWZAABVvAAAVdwAAFX8AABV/gAAVgAAAFYCAABWBAAAVgYAAFYHAABWCAAAVgoAAFYLAABWDQAAVg4AAFYQAABWEgAAVhMAAFYUAABWFgAAVhcAAFYcAABWKQAAVi4AAFYwAABWMgAAVjcAAFY5AABWOwAAVj0AAFZiAABWhgAAVq0AAFbRAABW0wAAVtUAAFbXAABW2QAAVtsAAFbdAABW3gAAVuAAAFbtAABW/gAAVwAAAFcCAABXBAAAVwYAAFcIAABXCgAAVwwAAFcOAABXHwAAVyEAAFcjAABXJQAAVycAAFcpAABXKwAAVy0AAFcvAABXMQAAV3AAAFdyAABXdAAAV3YAAFd4AABXeQAAV3oAAFd7AABXfAAAV34AAFeAAABXgQAAV4IAAFeEAABXhQAAV8QAAFfGAABXyAAAV8oAAFfMAABXzQAAV84AAFfPAABX0AAAV9IAAFfUAABX1QAAV9YAAFfYAABX2QAAWBgAAFgaAABYHAAAWB4AAFggAABYIQAAWCIAAFgjAABYJAAAWCYAAFgoAABYKQAAWCoAAFgsAABYLQAAWDoAAFg7AABYPAAAWD4AAFh9AABYfwAAWIEAAFiDAABYhQAAWIYAAFiHAABYiAAAWIkAAFiLAABYjQAAWI4AAFiPAABYkQAAWJIAAFjRAABY0wAAWNUAAFjXAABY2QAAWNoAAFjbAABY3AAAWN0AAFjfAABY4QAAWOIAAFjjAABY5QAAWOYAAFklAABZJwAAWSkAAFkrAABZLQAAWS4AAFkvAABZMAAAWTEAAFkzAABZNQAAWTYAAFk3AABZOQAAWToAAFl5AABZewAAWX0AAFl/AABZgQAAWYIAAFmDAABZhAAAWYUAAFmHAABZiQAAWYoAAFmLAABZjQAAWY4AAFnNAABZzwAAWdEAAFnTAABZ1QAAWdYAAFnXAABZ2AAAWdkAAFnbAABZ3QAAWd4AAFnfAABZ4QAAWeIAAFoHAABaKwAAWlIAAFp2AABaeAAAWnoAAFp8AABafgAAWoAAAFqCAABagwAAWoUAAFqSAABaoQAAWqMAAFqlAABapwAAWqkAAFqrAABarQAAWq8AAFq+AABawAAAWsIAAFrEAABaxgAAWsgAAFrKAABazAAAWs4AAFsNAABbDwAAWxEAAFsTAABbFQAAWxYAAFsXAABbGAAAWxkAAFsbAABbHQAAWx4AAFsfAABbIQAAWyIAAFthAABbYwAAW2UAAFtnAABbaQAAW2oAAFtrAABbbAAAW20AAFtvAABbcQAAW3IAAFtzAABbdQAAW3YAAFu1AABbtwAAW7kAAFu7AABbvQAAW74AAFu/AABbwAAAW8EAAFvDAABbxQAAW8YAAFvHAABbyQAAW8oAAFwJAABcCwAAXA0AAFwPAABcEQAAXBIAAFwTAABcFAAAXBUAAFwXAABcGQAAXBoAAFwbAABcHQAAXB4AAFxdAABcXwAAXGEAAFxjAABcZQAAXGYAAFxnAABcaAAAXGkAAFxrAABcbQAAXG4AAFxvAABccQAAXHIAAFyxAABcswAAXLUAAFy3AABcuQAAXLoAAFy7AABcvAAAXL0AAFy/AABcwQAAXMIAAFzDAABcxQAAXMYAAF0FAABdBwAAXQkAAF0LAABdDQAAXQ4AAF0PAABdEAAAXREAAF0TAABdFQAAXRYAAF0XAABdGQAAXRoAAF0jAABdJAAAXSYAAF1pAABdjQAAXbEAAF3UAABd+wAAXhsAAF5CAABeaQAAXokAAF6tAABe0QAAXtMAAF7VAABe1wAAXtkAAF7bAABe3QAAXt8AAF7hAABe4wAAXuUAAF7nAABe6QAAXuwAAF7uAABe7wAAXvQAAF8BAABfBAAAXwYAAF8JAABfCwAAXw0AAF8yAABfVgAAX30AAF+hAABfowAAX6UAAF+nAABfqQAAX6sAAF+tAABfrgAAX7AAAF+9AABf0AAAX9IAAF/UAABf1gAAX9gAAF/aAABf3AAAX94AAF/gAABf4gAAX/UAAF/3AABf+QAAX/sAAF/9AABf/wAAYAEAAGADAABgBQAAYAcAAGAJAABgSAAAYEoAAGBMAABgTgAAYFAAAGBRAABgUgAAYFMAAGBUAABgVgAAYFgAAGBZAABgWgAAYFwAAGBdAABgZgAAYGcAAGBpAABgqAAAYKoAAGCsAABgrgAAYLAAAGCxAABgsgAAYLMAAGC0AABgtgAAYLgAAGC5AABgugAAYLwAAGC9AABg/AAAYP4AAGEAAABhAgAAYQQAAGEFAABhBgAAYQcAAGEIAABhCgAAYQwAAGENAABhDgAAYRAAAGERAABhGgAAYR0AAGEfAABhIQAAYSoAAGEtAABhLwAAYTEAAGE5AABheAAAYXoAAGF8AABhfgAAYYAAAGGBAABhggAAYYMAAGGEAABhhgAAYYgAAGGJAABhigAAYYwAAGGNAABhzAAAYc4AAGHQAABh0gAAYdQAAGHVAABh1gAAYdcAAGHYAABh2gAAYdwAAGHdAABh3gAAYeAAAGHhAABh6gAAYesAAGHtAABiLAAAYi4AAGIwAABiMgAAYjQAAGI1AABiNgAAYjcAAGI4AABiOgAAYjwAAGI9AABiPgAAYkAAAGJBAABigAAAYoIAAGKEAABihgAAYogAAGKJAABiigAAYosAAGKMAABijgAAYpAAAGKRAABikgAAYpQAAGKVAABiogAAYqMAAGKkAABipgAAYuUAAGLnAABi6QAAYusAAGLtAABi7gAAYu8AAGLwAABi8QAAYvMAAGL1AABi9gAAYvcAAGL5AABi+gAAYzkAAGM7AABjPQAAYz8AAGNBAABjQgAAY0MAAGNEAABjRQAAY0cAAGNJAABjSgAAY0sAAGNNAABjTgAAY1sAAGOgAABjogAAY6QAAGOmAABjqAAAY6oAAGOtAABjsAAAY7MAAGO2AABjuQAAY7wAAGO/AABjwgAAY8UAAGPIAABjywAAY84AAGPRAABj1AAAY9cAAGPaAABj3QAAY+AAAGPjAABj5gAAY+kAAGPsAABj7gAAY/EAAGP0AABj9wAAY/oAAGP9AABkQgAAZEUAAGRIAABkSwAAZE4AAGRRAABkVAAAZFcAAGRaAABkXQAAZGAAAGRjAABkZgAAZGkAAGRsAABkbwAAZHIAAGR1AABkeAAAZHsAAGR+AABkgQAAZIQAAGSHAABkigAAZI0AAGSQAABkkwAAZJYAAGSZAABknAAAZJ8AAGSiAABkpQAAZKcAAGSsAABkuwAAZM0AAGTbAABk4AAAZOoAAGTzAABk/wAAZQ4AAGUhAABlLwAAZT0AAGVLAABlUgAAZVoAAGVnAABlewAAZYAAAGWHAABllQAAZaMAAGWtAABlswAAZcEAAGXLAABl2gAAZfAAAGX3AABmAQAAZgoAAGYeAABmJAAAZm8AAGaSAABmsgAAZtIAAGbUAABm1gAAZtgAAGbaAABm3AAAZt0AAGbeAABm4QAAZuIAAGbkAABm5QAAZucAAGbpAABm6gAAZusAAGbuAABm7wAAZvQAAGcBAABnBgAAZwgAAGcKAABnDwAAZxIAAGcVAABnFwAAZzwAAGdgAABnhwAAZ6sAAGeuAABnsAAAZ7IAAGe0AABntgAAZ7gAAGe5AABnvAAAZ8kAAGfaAABn3AAAZ94AAGfgAABn4gAAZ+QAAGfmAABn6AAAZ+oAAGf7AABn/gAAaAEAAGgEAABoBwAAaAoAAGgNAABoEAAAaBMAAGgVAABoVAAAaFYAAGhYAABoWgAAaF0AAGheAABoXwAAaGAAAGhhAABoYwAAaGUAAGhmAABoZwAAaGkAAGhqAABoqQAAaKsAAGitAABorwAAaLIAAGizAABotAAAaLUAAGi2AABouAAAaLoAAGi7AABovAAAaL4AAGi/AABo/gAAaQAAAGkDAABpBQAAaQgAAGkJAABpCgAAaQsAAGkMAABpDgAAaRAAAGkRAABpEgAAaRQAAGkVAABpIgAAaSMAAGkkAABpJgAAaWUAAGlnAABpaQAAaWsAAGluAABpbwAAaXAAAGlxAABpcgAAaXQAAGl2AABpdwAAaXgAAGl6AABpewAAaboAAGm8AABpvgAAacAAAGnDAABpxAAAacUAAGnGAABpxwAAackAAGnLAABpzAAAac0AAGnPAABp0AAAag8AAGoRAABqEwAAahUAAGoYAABqGQAAahoAAGobAABqHAAAah4AAGogAABqIQAAaiIAAGokAABqJQAAamQAAGpmAABqaAAAamoAAGptAABqbgAAam8AAGpwAABqcQAAanMAAGp1AABqdgAAancAAGp5AABqegAAarkAAGq7AABqvQAAar8AAGrCAABqwwAAasQAAGrFAABqxgAAasgAAGrKAABqywAAaswAAGrOAABqzwAAavQAAGsYAABrPwAAa2MAAGtmAABraAAAa2oAAGtsAABrbgAAa3AAAGtxAABrdAAAa4EAAGuQAABrkgAAa5QAAGuWAABrmAAAa5oAAGucAABrngAAa60AAGuwAABrswAAa7YAAGu5AABrvAAAa78AAGvCAABrxAAAbAMAAGwFAABsBwAAbAkAAGwMAABsDQAAbA4AAGwPAABsEAAAbBIAAGwUAABsFQAAbBYAAGwYAABsGQAAbFgAAGxaAABsXAAAbF4AAGxhAABsYgAAbGMAAGxkAABsZQAAbGcAAGxpAABsagAAbGsAAGxtAABsbgAAbK0AAGyvAABssQAAbLMAAGy2AABstwAAbLgAAGy5AABsugAAbLwAAGy+AABsvwAAbMAAAGzCAABswwAAbQIAAG0EAABtBwAAbQkAAG0MAABtDQAAbQ4AAG0PAABtEAAAbRIAAG0UAABtFQAAbRYAAG0YAABtGQAAbRwAAG1bAABtXQAAbV8AAG1hAABtZAAAbWUAAG1mAABtZwAAbWgAAG1qAABtbAAAbW0AAG1uAABtcAAAbXEAAG2wAABtsgAAbbQAAG22AABtuQAAbboAAG27AABtvAAAbb0AAG2/AABtwQAAbcIAAG3DAABtxQAAbcYAAG4FAABuBwAAbgkAAG4LAABuDgAAbg8AAG4QAABuEQAAbhIAAG4UAABuFgAAbhcAAG4YAABuGgAAbhsAAG5mAABuiQAAbqkAAG7JAABuywAAbs0AAG7PAABu0QAAbtMAAG7UAABu1QAAbtgAAG7ZAABu2wAAbtwAAG7eAABu4AAAbuEAAG7iAABu5QAAbuYAAG7rAABu+AAAbv0AAG7/AABvAQAAbwYAAG8JAABvDAAAbw4AAG8zAABvVwAAb34AAG+iAABvpQAAb6cAAG+pAABvqwAAb60AAG+vAABvsAAAb7MAAG/AAABv0QAAb9MAAG/VAABv1wAAb9kAAG/bAABv3QAAb98AAG/hAABv8gAAb/UAAG/4AABv+wAAb/4AAHABAABwBAAAcAcAAHAKAABwDAAAcEsAAHBNAABwTwAAcFEAAHBUAABwVQAAcFYAAHBXAABwWAAAcFoAAHBcAABwXQAAcF4AAHBgAABwYQAAcKAAAHCiAABwpAAAcKYAAHCpAABwqgAAcKsAAHCsAABwrQAAcK8AAHCxAABwsgAAcLMAAHC1AABwtgAAcPUAAHD3AABw+gAAcPwAAHD/AABxAAAAcQEAAHECAABxAwAAcQUAAHEHAABxCAAAcQkAAHELAABxDAAAcRkAAHEaAABxGwAAcR0AAHFcAABxXgAAcWAAAHFiAABxZQAAcWYAAHFnAABxaAAAcWkAAHFrAABxbQAAcW4AAHFvAABxcQAAcXIAAHGxAABxswAAcbUAAHG3AABxugAAcbsAAHG8AABxvQAAcb4AAHHAAABxwgAAccMAAHHEAABxxgAAcccAAHIGAAByCAAAcgoAAHIMAAByDwAAchAAAHIRAAByEgAAchMAAHIVAAByFwAAchgAAHIZAAByGwAAchwAAHJbAAByXQAAcl8AAHJhAAByZAAAcmUAAHJmAAByZwAAcmgAAHJqAABybAAAcm0AAHJuAABycAAAcnEAAHKwAABysgAAcrQAAHK2AAByuQAAcroAAHK7AAByvAAAcr0AAHK/AABywQAAcsIAAHLDAAByxQAAcsYAAHLrAABzDwAAczYAAHNaAABzXQAAc18AAHNhAABzYwAAc2UAAHNnAABzaAAAc2sAAHN4AABzhwAAc4kAAHOLAABzjQAAc48AAHORAABzkwAAc5UAAHOkAABzpwAAc6oAAHOtAABzsAAAc7MAAHO2AABzuQAAc7sAAHP6AABz/AAAc/4AAHQAAAB0AwAAdAQAAHQFAAB0BgAAdAcAAHQJAAB0CwAAdAwAAHQNAAB0DwAAdBAAAHRPAAB0UQAAdFMAAHRVAAB0WAAAdFkAAHRaAAB0WwAAdFwAAHReAAB0YAAAdGEAAHRiAAB0ZAAAdGUAAHSkAAB0pgAAdKgAAHSqAAB0rQAAdK4AAHSvAAB0sAAAdLEAAHSzAAB0tQAAdLYAAHS3AAB0uQAAdLoAAHT5AAB0+wAAdP0AAHT/AAB1AgAAdQMAAHUEAAB1BQAAdQYAAHUIAAB1CgAAdQsAAHUMAAB1DgAAdQ8AAHVOAAB1UAAAdVIAAHVUAAB1VwAAdVgAAHVZAAB1WgAAdVsAAHVdAAB1XwAAdWAAAHVhAAB1YwAAdWQAAHWjAAB1pQAAdacAAHWpAAB1rAAAda0AAHWuAAB1rwAAdbAAAHWyAAB1tAAAdbUAAHW2AAB1uAAAdbkAAHX4AAB1+gAAdfwAAHX+AAB2AQAAdgIAAHYDAAB2BAAAdgUAAHYHAAB2CQAAdgoAAHYLAAB2DQAAdg4AAHZZAAB2fAAAdpwAAHa8AAB2vgAAdsAAAHbCAAB2xAAAdsYAAHbHAAB2yAAAdssAAHbMAAB2zgAAds8AAHbRAAB20wAAdtQAAHbVAAB22AAAdtkAAHbeAAB26wAAdvAAAHbyAAB29AAAdvkAAHb8AAB2/wAAdwEAAHcmAAB3SgAAd3EAAHeVAAB3mAAAd5oAAHecAAB3ngAAd6AAAHeiAAB3owAAd6YAAHezAAB3xAAAd8YAAHfIAAB3ygAAd8wAAHfOAAB30AAAd9IAAHfUAAB35QAAd+gAAHfrAAB37gAAd/EAAHf0AAB39wAAd/oAAHf9AAB3/wAAeD4AAHhAAAB4QgAAeEQAAHhHAAB4SAAAeEkAAHhKAAB4SwAAeE0AAHhPAAB4UAAAeFEAAHhTAAB4VAAAeJMAAHiVAAB4lwAAeJkAAHicAAB4nQAAeJ4AAHifAAB4oAAAeKIAAHikAAB4pQAAeKYAAHioAAB4qQAAeOgAAHjqAAB47QAAeO8AAHjyAAB48wAAePQAAHj1AAB49gAAePgAAHj6AAB4+wAAePwAAHj+AAB4/wAAeQwAAHkNAAB5DgAAeRAAAHlPAAB5UQAAeVMAAHlVAAB5WAAAeVkAAHlaAAB5WwAAeVwAAHleAAB5YAAAeWEAAHliAAB5ZAAAeWUAAHmkAAB5pgAAeagAAHmqAAB5rQAAea4AAHmvAAB5sAAAebEAAHmzAAB5tQAAebYAAHm3AAB5uQAAeboAAHn5AAB5+wAAef0AAHn/AAB6AgAAegMAAHoEAAB6BQAAegYAAHoIAAB6CgAAegsAAHoMAAB6DgAAeg8AAHpOAAB6UAAAelIAAHpUAAB6VwAAelgAAHpZAAB6WgAAelsAAHpdAAB6XwAAemAAAHphAAB6YwAAemQAAHqjAAB6pQAAeqcAAHqpAAB6rAAAeq0AAHquAAB6rwAAerAAAHqyAAB6tAAAerUAAHq2AAB6uAAAerkAAHreAAB7AgAAeykAAHtNAAB7UAAAe1IAAHtUAAB7VgAAe1gAAHtaAAB7WwAAe14AAHtrAAB7egAAe3wAAHt+AAB7gAAAe4IAAHuEAAB7hgAAe4gAAHuXAAB7mgAAe50AAHugAAB7owAAe6YAAHupAAB7rAAAe64AAHvtAAB77wAAe/IAAHv0AAB79wAAe/gAAHv5AAB7+gAAe/sAAHv9AAB7/wAAfAAAAHwBAAB8AwAAfAQAAHwHAAB8RgAAfEgAAHxKAAB8TAAAfE8AAHxQAAB8UQAAfFIAAHxTAAB8VQAAfFcAAHxYAAB8WQAAfFsAAHxcAAB8mwAAfJ0AAHyfAAB8oQAAfKQAAHylAAB8pgAAfKcAAHyoAAB8qgAAfKwAAHytAAB8rgAAfLAAAHyxAAB88AAAfPIAAHz1AAB89wAAfPoAAHz7AAB8/AAAfP0AAHz+AAB9AAAAfQIAAH0DAAB9BAAAfQYAAH0HAAB9CgAAfUkAAH1LAAB9TQAAfU8AAH1SAAB9UwAAfVQAAH1VAAB9VgAAfVgAAH1aAAB9WwAAfVwAAH1eAAB9XwAAfZ4AAH2gAAB9ogAAfaQAAH2nAAB9qAAAfakAAH2qAAB9qwAAfa0AAH2vAAB9sAAAfbEAAH2zAAB9tAAAffMAAH31AAB99wAAffkAAH38AAB9/QAAff4AAH3/AAB+AAAAfgIAAH4EAAB+BQAAfgYAAH4IAAB+CQAAflQAAH53AAB+lwAAfrcAAH65AAB+uwAAfr0AAH6/AAB+wQAAfsIAAH7DAAB+xgAAfscAAH7JAAB+ygAAfswAAH7OAAB+zwAAftAAAH7TAAB+1AAAftkAAH7mAAB+6wAAfu0AAH7vAAB+9AAAfvcAAH76AAB+/AAAfyEAAH9FAAB/bAAAf5AAAH+TAAB/lQAAf5cAAH+ZAAB/mwAAf50AAH+eAAB/oQAAf64AAH+/AAB/wQAAf8MAAH/FAAB/xwAAf8kAAH/LAAB/zQAAf88AAH/gAAB/4wAAf+YAAH/pAAB/7AAAf+8AAH/yAAB/9QAAf/gAAH/6AACAOQAAgDsAAIA9AACAPwAAgEIAAIBDAACARAAAgEUAAIBGAACASAAAgEoAAIBLAACATAAAgE4AAIBPAACAjgAAgJAAAICSAACAlAAAgJcAAICYAACAmQAAgJoAAICbAACAnQAAgJ8AAICgAACAoQAAgKMAAICkAACA4wAAgOUAAIDoAACA6gAAgO0AAIDuAACA7wAAgPAAAIDxAACA8wAAgPUAAID2AACA9wAAgPkAAID6AACBBwAAgQgAAIEJAACBCwAAgUoAAIFMAACBTgAAgVAAAIFTAACBVAAAgVUAAIFWAACBVwAAgVkAAIFbAACBXAAAgV0AAIFfAACBYAAAgZ8AAIGhAACBowAAgaUAAIGoAACBqQAAgaoAAIGrAACBrAAAga4AAIGwAACBsQAAgbIAAIG0AACBtQAAgfQAAIH2AACB+AAAgfoAAIH9AACB/gAAgf8AAIIAAACCAQAAggMAAIIFAACCBgAAggcAAIIJAACCCgAAgkkAAIJLAACCTQAAgk8AAIJSAACCUwAAglQAAIJVAACCVgAAglgAAIJaAACCWwAAglwAAIJeAACCXwAAgp4AAIKgAACCogAAgqQAAIKnAACCqAAAgqkAAIKqAACCqwAAgq0AAIKvAACCsAAAgrEAAIKzAACCtAAAgtkAAIL9AACDJAAAg0gAAINLAACDTQAAg08AAINRAACDUwAAg1UAAINWAACDWQAAg2YAAIN1AACDdwAAg3kAAIN7AACDfQAAg38AAIOBAACDgwAAg5IAAIOVAACDmAAAg5sAAIOeAACDoQAAg6QAAIOnAACDqQAAg+gAAIPqAACD7AAAg+4AAIPxAACD8gAAg/MAAIP0AACD9QAAg/cAAIP5AACD+gAAg/sAAIP9AACD/gAAhD0AAIQ/AACEQQAAhEMAAIRGAACERwAAhEgAAIRJAACESgAAhEwAAIROAACETwAAhFAAAIRSAACEUwAAhJIAAISUAACElgAAhJgAAISbAACEnAAAhJ0AAISeAACEnwAAhKEAAISjAACEpAAAhKUAAISnAACEqAAAhOcAAITpAACE7AAAhO4AAITxAACE8gAAhPMAAIT0AACE9QAAhPcAAIT5AACE+gAAhPsAAIT9AACE/gAAhT0AAIU/AACFQQAAhUMAAIVGAACFRwAAhUgAAIVJAACFSgAAhUwAAIVOAACFTwAAhVAAAIVSAACFUwAAhZIAAIWUAACFlgAAhZgAAIWbAACFnAAAhZ0AAIWeAACFnwAAhaEAAIWjAACFpAAAhaUAAIWnAACFqAAAhecAAIXpAACF6wAAhe0AAIXwAACF8QAAhfIAAIXzAACF9AAAhfYAAIX4AACF+QAAhfoAAIX8AACF/QAAhkgAAIZrAACGiwAAhqsAAIatAACGrwAAhrEAAIazAACGtQAAhrYAAIa3AACGugAAhrsAAIa9AACGvgAAhsAAAIbCAACGwwAAhsQAAIbHAACGyAAAhtEAAIbeAACG4wAAhuUAAIbnAACG7AAAhu8AAIbyAACG9AAAhxkAAIc9AACHZAAAh4gAAIeLAACHjQAAh48AAIeRAACHkwAAh5UAAIeWAACHmQAAh6YAAIe3AACHuQAAh7sAAIe9AACHvwAAh8EAAIfDAACHxQAAh8cAAIfYAACH2wAAh94AAIfhAACH5AAAh+cAAIfqAACH7QAAh/AAAIfyAACIMQAAiDMAAIg1AACINwAAiDoAAIg7AACIPAAAiD0AAIg+AACIQAAAiEIAAIhDAACIRAAAiEYAAIhHAACIhgAAiIgAAIiKAACIjAAAiI8AAIiQAACIkQAAiJIAAIiTAACIlQAAiJcAAIiYAACImQAAiJsAAIicAACI2wAAiN0AAIjgAACI4gAAiOUAAIjmAACI5wAAiOgAAIjpAACI6wAAiO0AAIjuAACI7wAAiPEAAIjyAACI/wAAiQAAAIkBAACJAwAAiUIAAIlEAACJRgAAiUgAAIlLAACJTAAAiU0AAIlOAACJTwAAiVEAAIlTAACJVAAAiVUAAIlXAACJWAAAiZcAAImZAACJmwAAiZ0AAImgAACJoQAAiaIAAImjAACJpAAAiaYAAImoAACJqQAAiaoAAImsAACJrQAAiewAAInuAACJ8AAAifIAAIn1AACJ9gAAifcAAIn4AACJ+QAAifsAAIn9AACJ/gAAif8AAIoBAACKAgAAikEAAIpDAACKRQAAikcAAIpKAACKSwAAikwAAIpNAACKTgAAilAAAIpSAACKUwAAilQAAIpWAACKVwAAipYAAIqYAACKmgAAipwAAIqfAACKoAAAiqEAAIqiAACKowAAiqUAAIqnAACKqAAAiqkAAIqrAACKrAAAitEAAIr1AACLHAAAi0AAAItDAACLRQAAi0cAAItJAACLSwAAi00AAItOAACLUQAAi14AAIttAACLbwAAi3EAAItzAACLdQAAi3cAAIt5AACLewAAi4oAAIuNAACLkAAAi5MAAIuWAACLmQAAi5wAAIufAACLoQAAi+AAAIviAACL5AAAi+YAAIvpAACL6gAAi+sAAIvsAACL7QAAi+8AAIvxAACL8gAAi/MAAIv1AACL9gAAjDUAAIw3AACMOQAAjDsAAIw+AACMPwAAjEAAAIxBAACMQgAAjEQAAIxGAACMRwAAjEgAAIxKAACMSwAAjIoAAIyMAACMjgAAjJAAAIyTAACMlAAAjJUAAIyWAACMlwAAjJkAAIybAACMnAAAjJ0AAIyfAACMoAAAjN8AAIzhAACM4wAAjOUAAIzoAACM6QAAjOoAAIzrAACM7AAAjO4AAIzwAACM8QAAjPIAAIz0AACM9QAAjTQAAI02AACNOAAAjToAAI09AACNPgAAjT8AAI1AAACNQQAAjUMAAI1FAACNRgAAjUcAAI1JAACNSgAAjYkAAI2LAACNjQAAjY8AAI2SAACNkwAAjZQAAI2VAACNlgAAjZgAAI2aAACNmwAAjZwAAI2eAACNnwAAjd4AAI3gAACN4gAAjeQAAI3nAACN6AAAjekAAI3qAACN6wAAje0AAI3vAACN8AAAjfEAAI3zAACN9AAAjj8AAI5iAACOggAAjqIAAI6kAACOpgAAjqgAAI6qAACOrAAAjq0AAI6uAACOsQAAjrIAAI60AACOtQAAjrcAAI66AACOuwAAjrwAAI6/AACOwAAAjsUAAI7SAACO1wAAjtkAAI7bAACO4AAAjuMAAI7mAACO6AAAjw0AAI8xAACPWAAAj3wAAI9/AACPgQAAj4MAAI+FAACPhwAAj4kAAI+KAACPjQAAj5oAAI+rAACPrQAAj68AAI+xAACPswAAj7UAAI+3AACPuQAAj7sAAI/MAACPzwAAj9IAAI/VAACP2AAAj9sAAI/eAACP4QAAj+QAAI/mAACQJQAAkCcAAJApAACQKwAAkC4AAJAvAACQMAAAkDEAAJAyAACQNAAAkDYAAJA3AACQOAAAkDoAAJA7AACQegAAkHwAAJB+AACQgAAAkIMAAJCEAACQhQAAkIYAAJCHAACQiQAAkIsAAJCMAACQjQAAkI8AAJCQAACQzwAAkNEAAJDUAACQ1gAAkNkAAJDaAACQ2wAAkNwAAJDdAACQ3wAAkOEAAJDiAACQ4wAAkOUAAJDmAACQ8wAAkPQAAJD1AACQ9wAAkTYAAJE4AACROgAAkTwAAJE/AACRQAAAkUEAAJFCAACRQwAAkUUAAJFHAACRSAAAkUkAAJFLAACRTAAAkYsAAJGNAACRjwAAkZEAAJGUAACRlQAAkZYAAJGXAACRmAAAkZoAAJGcAACRnQAAkZ4AAJGgAACRoQAAkeAAAJHiAACR5AAAkeYAAJHpAACR6gAAkesAAJHsAACR7QAAke8AAJHxAACR8gAAkfMAAJH1AACR9gAAkjUAAJI3AACSOQAAkjsAAJI+AACSPwAAkkAAAJJBAACSQgAAkkQAAJJGAACSRwAAkkgAAJJKAACSSwAAkooAAJKMAACSjgAAkpAAAJKTAACSlAAAkpUAAJKWAACSlwAAkpkAAJKbAACSnAAAkp0AAJKfAACSoAAAksUAAJLpAACTEAAAkzQAAJM3AACTOQAAkzsAAJM9AACTPwAAk0EAAJNCAACTRQAAk1IAAJNhAACTYwAAk2UAAJNnAACTaQAAk2sAAJNtAACTbwAAk34AAJOBAACThAAAk4cAAJOKAACTjQAAk5AAAJOTAACTlQAAk9QAAJPWAACT2AAAk9oAAJPdAACT3gAAk98AAJPgAACT4QAAk+MAAJPlAACT5gAAk+cAAJPpAACT6gAAlCkAAJQrAACULQAAlC8AAJQyAACUMwAAlDQAAJQ1AACUNgAAlDgAAJQ6AACUOwAAlDwAAJQ+AACUPwAAlH4AAJSAAACUggAAlIQAAJSHAACUiAAAlIkAAJSKAACUiwAAlI0AAJSPAACUkAAAlJEAAJSTAACUlAAAlNMAAJTVAACU1wAAlNkAAJTcAACU3QAAlN4AAJTfAACU4AAAlOIAAJTkAACU5QAAlOYAAJToAACU6QAAlSgAAJUqAACVLAAAlS4AAJUxAACVMgAAlTMAAJU0AACVNQAAlTcAAJU5AACVOgAAlTsAAJU9AACVPgAAlX0AAJV/AACVgQAAlYMAAJWGAACVhwAAlYgAAJWJAACVigAAlYwAAJWOAACVjwAAlZAAAJWSAACVkwAAldIAAJXUAACV1gAAldgAAJXbAACV3AAAld0AAJXeAACV3wAAleEAAJXjAACV5AAAleUAAJXnAACV6AAAljMAAJZWAACWdgAAlpYAAJaYAACWmgAAlpwAAJaeAACWoAAAlqEAAJaiAACWpQAAlqYAAJaoAACWqQAAlqsAAJauAACWrwAAlrAAAJazAACWtAAAlrkAAJbGAACWywAAls0AAJbPAACW1AAAltcAAJbaAACW3AAAlwEAAJclAACXTAAAl3AAAJdzAACXdQAAl3cAAJd5AACXewAAl30AAJd+AACXgQAAl44AAJefAACXoQAAl6MAAJelAACXpwAAl6kAAJerAACXrQAAl68AAJfAAACXwwAAl8YAAJfJAACXzAAAl88AAJfSAACX1QAAl9gAAJfaAACYGQAAmBsAAJgdAACYHwAAmCIAAJgjAACYJAAAmCUAAJgmAACYKAAAmCoAAJgrAACYLAAAmC4AAJgvAACYbgAAmHAAAJhyAACYdAAAmHcAAJh4AACYeQAAmHoAAJh7AACYfQAAmH8AAJiAAACYgQAAmIMAAJiEAACYwwAAmMUAAJjIAACYygAAmM0AAJjOAACYzwAAmNAAAJjRAACY0wAAmNUAAJjWAACY1wAAmNkAAJjaAACY5wAAmOgAAJjpAACY6wAAmSoAAJksAACZLgAAmTAAAJkzAACZNAAAmTUAAJk2AACZNwAAmTkAAJk7AACZPAAAmT0AAJk/AACZQAAAmX8AAJmBAACZgwAAmYUAAJmIAACZiQAAmYoAAJmLAACZjAAAmY4AAJmQAACZkQAAmZIAAJmUAACZlQAAmdQAAJnWAACZ2AAAmdoAAJndAACZ3gAAmd8AAJngAACZ4QAAmeMAAJnlAACZ5gAAmecAAJnpAACZ6gAAmikAAJorAACaLQAAmi8AAJoyAACaMwAAmjQAAJo1AACaNgAAmjgAAJo6AACaOwAAmjwAAJo+AACaPwAAmn4AAJqAAACaggAAmoQAAJqHAACaiAAAmokAAJqKAACaiwAAmo0AAJqPAACakAAAmpEAAJqTAACalAAAmrkAAJrdAACbBAAAmygAAJsrAACbLQAAmy8AAJsxAACbMwAAmzUAAJs2AACbOQAAm0YAAJtVAACbVwAAm1kAAJtbAACbXQAAm18AAJthAACbYwAAm3IAAJt1AACbeAAAm3sAAJt+AACbgQAAm4QAAJuHAACbiQAAm8gAAJvKAACbzAAAm84AAJvRAACb0gAAm9MAAJvUAACb1QAAm9cAAJvZAACb2gAAm9sAAJvdAACb3gAAnB0AAJwfAACcIQAAnCMAAJwmAACcJwAAnCgAAJwpAACcKgAAnCwAAJwuAACcLwAAnDAAAJwyAACcMwAAnHIAAJx0AACcdgAAnHgAAJx7AACcfAAAnH0AAJx+AACcfwAAnIEAAJyDAACchAAAnIUAAJyHAACciAAAnMcAAJzJAACczAAAnM4AAJzRAACc0gAAnNMAAJzUAACc1QAAnNcAAJzZAACc2gAAnNsAAJzdAACc3gAAnR0AAJ0fAACdIQAAnSMAAJ0mAACdJwAAnSgAAJ0pAACdKgAAnSwAAJ0uAACdLwAAnTAAAJ0yAACdMwAAnXIAAJ10AACddgAAnXgAAJ17AACdfAAAnX0AAJ1+AACdfwAAnYEAAJ2DAACdhAAAnYUAAJ2HAACdiAAAnccAAJ3JAACdywAAnc0AAJ3QAACd0QAAndIAAJ3TAACd1AAAndYAAJ3YAACd2QAAndoAAJ3cAACd3QAAnigAAJ5LAACeawAAnosAAJ6NAACejwAAnpEAAJ6TAACelQAAnpYAAJ6XAACemgAAnpsAAJ6dAACengAAnqEAAJ6kAACepQAAnqYAAJ6pAACeqgAAnq8AAJ68AACewQAAnsMAAJ7GAACeywAAns4AAJ7RAACe0wAAnuYAAJ8LAACfLwAAn1YAAJ96AACffQAAn38AAJ+BAACfgwAAn4UAAJ+HAACfiAAAn4sAAJ+YAACfqQAAn6sAAJ+tAACfrwAAn7EAAJ+zAACftQAAn7cAAJ+5AACfygAAn80AAJ/QAACf0wAAn9YAAJ/ZAACf3AAAn98AAJ/iAACf5AAAoCMAAKAlAACgJwAAoCkAAKAsAACgLQAAoC4AAKAvAACgMAAAoDIAAKA0AACgNQAAoDYAAKA4AACgOQAAoHgAAKB6AACgfAAAoH4AAKCBAACgggAAoIMAAKCEAACghQAAoIcAAKCJAACgigAAoIsAAKCNAACgjgAAoM0AAKDPAACg0gAAoNQAAKDXAACg2AAAoNkAAKDaAACg2wAAoN0AAKDfAACg4AAAoOEAAKDjAACg5AAAoPEAAKDyAACg8wAAoPUAAKE0AAChNgAAoTgAAKE6AAChPQAAoT4AAKE/AAChQAAAoUEAAKFDAAChRQAAoUYAAKFHAAChSQAAoUoAAKGJAAChiwAAoY0AAKGPAAChkgAAoZMAAKGUAAChlQAAoZYAAKGYAAChmgAAoZsAAKGcAAChngAAoZ8AAKHeAACh4AAAoeIAAKHkAACh5wAAoegAAKHpAACh6gAAoesAAKHtAACh7wAAofAAAKHxAACh8wAAofQAAKIzAACiNQAAojcAAKI5AACiPAAAoj0AAKI+AACiPwAAokAAAKJCAACiRAAAokUAAKJGAACiSAAAokkAAKKIAACiigAAoowAAKKOAACikQAAopIAAKKTAACilAAAopUAAKKXAACimQAAopoAAKKbAACinQAAop4AAKLDAACi5wAAow4AAKMyAACjNQAAozgAAKM6AACjPAAAoz4AAKNAAACjQQAAo0QAAKNRAACjXgAAo2EAAKNkAACjZwAAo2oAAKNtAACjcAAAo30AAKOAAACjgwAAo4YAAKOJAACjjAAAo48AAKORAACjpgAAo7UAAKPHAACj2wAAo+0AAKP/AACkPgAApEAAAKRDAACkRQAApEgAAKRJAACkSgAApEsAAKRMAACkTgAApFEAAKRSAACkUwAApFUAAKRWAACkmQAApL0AAKThAAClBAAApSsAAKVLAAClcgAApZkAAKW5AACl3QAApgEAAKYDAACmBgAApggAAKYKAACmDAAApg8AAKYRAACmEwAAphUAAKYXAACmGQAAphsAAKYeAACmIQAApiIAAKYnAACmNAAApjcAAKY5AACmPAAApj8AAKZBAACmZgAApooAAKaxAACm1QAAptgAAKbaAACm3AAApt4AAKbgAACm4gAApuMAAKbmAACm8wAApwYAAKcIAACnCgAApwwAAKcOAACnEAAApxIAAKcUAACnFgAApxgAAKcrAACnLgAApzEAAKc0AACnNwAApzoAAKc9AACnQAAAp0MAAKdGAACnSAAAp4cAAKeJAACnjAAAp44AAKeRAACnkgAAp5MAAKeUAACnlQAAp5cAAKeZAACnmgAAp5sAAKedAACnngAAp6cAAKeoAACnqgAAp+kAAKfrAACn7QAAp+8AAKfyAACn8wAAp/QAAKf1AACn9gAAp/gAAKf6AACn+wAAp/wAAKf+AACn/wAAqD4AAKhAAACoQwAAqEUAAKhIAACoSQAAqEoAAKhLAACoTAAAqE4AAKhQAACoUQAAqFIAAKhUAACoVQAAqF4AAKhhAACoZAAAqGYAAKhvAACocgAAqHUAAKh3AACoewAAqLoAAKi8AACovgAAqMAAAKjDAACoxAAAqMUAAKjGAACoxwAAqMkAAKjLAACozAAAqM0AAKjPAACo0AAAqQ8AAKkRAACpFAAAqRYAAKkZAACpGgAAqRsAAKkcAACpHQAAqR8AAKkhAACpIgAAqSMAAKklAACpJgAAqS8AAKkwAACpMgAAqXEAAKlzAACpdQAAqXcAAKl6AACpewAAqXwAAKl9AACpfgAAqYAAAKmCAACpgwAAqYQAAKmGAACphwAAqcYAAKnIAACpywAAqc0AAKnQAACp0QAAqdIAAKnTAACp1AAAqdYAAKnYAACp2QAAqdoAAKncAACp3QAAqeoAAKnrAACp7AAAqe4AAKotAACqLwAAqjEAAKozAACqNgAAqjcAAKo4AACqOQAAqjoAAKo8AACqPgAAqj8AAKpAAACqQgAAqkMAAKqCAACqhAAAqocAAKqJAACqjAAAqo0AAKqOAACqjwAAqpAAAKqSAACqlAAAqpUAAKqWAACqmAAAqpkAAKqlAACqsgAAqr0AAKrAAACqwwAAqsYAAKrJAACqzAAAqtcAAKraAACq3QAAquAAAKrjAACq5gAAqugAAKruAACq+QAAqwYAAKtRAACrdAAAq5QAAKu0AACrtgAAq7gAAKu6AACrvAAAq78AAKvAAACrwQAAq8QAAKvFAACrxwAAq8gAAKvKAACrzQAAq84AAKvPAACr0gAAq9MAAKvYAACr5QAAq+oAAKvsAACr7gAAq/MAAKv2AACr+QAAq/sAAKwgAACsRAAArGsAAKyPAACskgAArJQAAKyWAACsmAAArJoAAKycAACsnQAArKAAAKytAACsvgAArMAAAKzCAACsxAAArMYAAKzIAACsygAArMwAAKzOAACs3wAArOIAAKzlAACs6AAArOsAAKzuAACs8QAArPQAAKz3AACs+QAArTgAAK06AACtPAAArT4AAK1BAACtQgAArUMAAK1EAACtRQAArUcAAK1JAACtSgAArUsAAK1NAACtTgAArY0AAK2PAACtkQAArZMAAK2WAACtlwAArZgAAK2ZAACtmgAArZwAAK2eAACtnwAAraAAAK2iAACtowAAreIAAK3kAACt5wAArekAAK3sAACt7QAAre4AAK3vAACt8AAArfIAAK30AACt9QAArfYAAK34AACt+QAArgYAAK4HAACuCAAArgoAAK5JAACuSwAArk0AAK5PAACuUgAArlMAAK5UAACuVQAArlYAAK5YAACuWgAArlsAAK5cAACuXgAArl8AAK6eAACuoAAArqIAAK6kAACupwAArqgAAK6pAACuqgAArqsAAK6tAACurwAArrAAAK6xAACuswAArrQAAK7zAACu9QAArvcAAK75AACu/AAArv0AAK7+AACu/wAArwAAAK8CAACvBAAArwUAAK8GAACvCAAArwkAAK9IAACvSgAAr0wAAK9OAACvUQAAr1IAAK9TAACvVAAAr1UAAK9XAACvWQAAr1oAAK9bAACvXQAAr14AAK+dAACvnwAAr6EAAK+jAACvpgAAr6cAAK+oAACvqQAAr6oAAK+sAACvrgAAr68AAK+wAACvsgAAr7MAAK/YAACv/AAAsCMAALBHAACwSgAAsEwAALBOAACwUAAAsFIAALBUAACwVQAAsFgAALBlAACwdAAAsHYAALB4AACwegAAsHwAALB+AACwgAAAsIIAALCRAACwlAAAsJcAALCaAACwnQAAsKAAALCjAACwpgAAsKgAALDnAACw6QAAsOsAALDtAACw8AAAsPEAALDyAACw8wAAsPQAALD2AACw+AAAsPkAALD6AACw/AAAsP0AALE8AACxPgAAsUAAALFCAACxRQAAsUYAALFHAACxSAAAsUkAALFLAACxTQAAsU4AALFPAACxUQAAsVIAALGRAACxkwAAsZUAALGXAACxmgAAsZsAALGcAACxnQAAsZ4AALGgAACxogAAsaMAALGkAACxpgAAsacAALHmAACx6AAAsesAALHtAACx8AAAsfEAALHyAACx8wAAsfQAALH2AACx+AAAsfkAALH6AACx/AAAsf0AALI8AACyPgAAskAAALJCAACyRQAAskYAALJHAACySAAAskkAALJLAACyTQAAsk4AALJPAACyUQAAslIAALKRAACykwAAspUAALKXAACymgAAspsAALKcAACynQAAsp4AALKgAACyogAAsqMAALKkAACypgAAsqcAALLmAACy6AAAsuoAALLsAACy7wAAsvAAALLxAACy8gAAsvMAALL1AACy9wAAsvgAALL5AACy+wAAsvwAALNHAACzagAAs4oAALOqAACzrAAAs64AALOwAACzsgAAs7UAALO2AACztwAAs7oAALO7AACzvQAAs74AALPBAACzxAAAs8UAALPGAACzyQAAs8oAALPTAACz4AAAs+UAALPnAACz6gAAs+8AALPyAACz9QAAs/cAALQcAAC0QAAAtGcAALSLAAC0jgAAtJAAALSSAAC0lAAAtJYAALSYAAC0mQAAtJwAALSpAAC0ugAAtLwAALS+AAC0wAAAtMIAALTEAAC0xgAAtMgAALTKAAC02wAAtN4AALThAAC05AAAtOcAALTqAAC07QAAtPAAALTzAAC09QAAtTQAALU2AAC1OAAAtToAALU9AAC1PgAAtT8AALVAAAC1QQAAtUMAALVFAAC1RgAAtUcAALVJAAC1SgAAtYkAALWLAAC1jQAAtY8AALWSAAC1kwAAtZQAALWVAAC1lgAAtZgAALWaAAC1mwAAtZwAALWeAAC1nwAAtd4AALXgAAC14wAAteUAALXoAAC16QAAteoAALXrAAC17AAAte4AALXwAAC18QAAtfIAALX0AAC19QAAtgIAALYDAAC2BAAAtgYAALZFAAC2RwAAtkkAALZLAAC2TgAAtk8AALZQAAC2UQAAtlIAALZUAAC2VgAAtlcAALZYAAC2WgAAtlsAALaaAAC2nAAAtp4AALagAAC2owAAtqQAALalAAC2pgAAtqcAALapAAC2qwAAtqwAALatAAC2rwAAtrAAALbvAAC28QAAtvMAALb1AAC2+AAAtvkAALb6AAC2+wAAtvwAALb+AAC3AAAAtwEAALcCAAC3BAAAtwUAALdEAAC3RgAAt0gAALdKAAC3TQAAt04AALdPAAC3UAAAt1EAALdTAAC3VQAAt1YAALdXAAC3WQAAt1oAALeZAAC3mwAAt50AALefAAC3ogAAt6MAALekAAC3pQAAt6YAALeoAAC3qgAAt6sAALesAAC3rgAAt68AALfUAAC3+AAAuB8AALhDAAC4RgAAuEkAALhLAAC4TQAAuE8AALhRAAC4UgAAuFUAALhiAAC4cQAAuHQAALh3AAC4egAAuH0AALiAAAC4gwAAuIYAALiVAAC4mAAAuJsAALieAAC4oQAAuKQAALinAAC4qgAAuKwAALjJAAC5CAAAuQoAALkNAAC5DwAAuRIAALkTAAC5FAAAuRUAALkWAAC5GAAAuRsAALkcAAC5HQAAuR8AALkgAAC5XwAAuWEAALlkAAC5ZgAAuWkAALlqAAC5awAAuWwAALltAAC5bwAAuXIAALlzAAC5dAAAuXYAALl3AAC5eQAAubgAALm6AAC5vQAAub8AALnCAAC5wwAAucQAALnFAAC5xgAAucgAALnLAAC5zAAAuc0AALnPAAC50AAAug8AALoRAAC6EwAAuhUAALoYAAC6GQAAuhoAALobAAC6HAAAuh4AALohAAC6IgAAuiMAALolAAC6JgAAumUAALpnAAC6aQAAumsAALpuAAC6bwAAunAAALpxAAC6cgAAunQAALp3AAC6eAAAunkAALp7AAC6fAAAursAALq9AAC6vwAAusEAALrEAAC6xQAAusYAALrHAAC6yAAAusoAALrNAAC6zgAAus8AALrRAAC60gAAuxEAALsTAAC7FgAAuxgAALsbAAC7HAAAux0AALseAAC7HwAAuyEAALskAAC7JQAAuyYAALsoAAC7KQAAu3QAALuXAAC7twAAu9cAALvZAAC72wAAu90AALvfAAC74QAAu+IAALvjAAC75gAAu+cAALvpAAC76gAAu+0AALvwAAC78QAAu/IAALv1AAC79gAAu/sAALwIAAC8DQAAvA8AALwSAAC8FwAAvBoAALwdAAC8HwAAvEQAALxoAAC8jwAAvLMAALy2AAC8uAAAvLoAALy8AAC8vgAAvMAAALzBAAC8xAAAvNEAALziAAC85AAAvOYAALzoAAC86gAAvOwAALzuAAC88AAAvPIAAL0DAAC9BgAAvQkAAL0MAAC9DwAAvRIAAL0VAAC9GAAAvRsAAL0dAAC9XAAAvV4AAL1gAAC9YgAAvWUAAL1mAAC9ZwAAvWgAAL1pAAC9awAAvW0AAL1uAAC9bwAAvXEAAL1yAAC9sQAAvbMAAL21AAC9twAAvboAAL27AAC9vAAAvb0AAL2+AAC9wAAAvcIAAL3DAAC9xAAAvcYAAL3HAAC+BgAAvggAAL4LAAC+DQAAvhAAAL4RAAC+EgAAvhMAAL4UAAC+FgAAvhgAAL4ZAAC+GgAAvhwAAL4dAAC+KgAAvisAAL4sAAC+LgAAvm0AAL5vAAC+cQAAvnMAAL52AAC+dwAAvngAAL55AAC+egAAvnwAAL5+AAC+fwAAvoAAAL6CAAC+gwAAvsIAAL7EAAC+xgAAvsgAAL7LAAC+zAAAvs0AAL7OAAC+zwAAvtEAAL7TAAC+1AAAvtUAAL7XAAC+2AAAvxcAAL8ZAAC/GwAAvx0AAL8gAAC/IQAAvyIAAL8jAAC/JAAAvyYAAL8oAAC/KQAAvyoAAL8sAAC/LQAAv2wAAL9uAAC/cAAAv3IAAL91AAC/dgAAv3cAAL94AAC/eQAAv3sAAL99AAC/fgAAv38AAL+BAAC/ggAAv8EAAL/DAAC/xQAAv8cAAL/KAAC/ywAAv8wAAL/NAAC/zgAAv9AAAL/SAAC/0wAAv9QAAL/WAAC/1wAAv/wAAMAgAADARwAAwGsAAMBuAADAcQAAwHMAAMB1AADAdwAAwHkAAMB6AADAfQAAwIoAAMCZAADAnAAAwJ8AAMCiAADApQAAwKgAAMCrAADArgAAwL0AAMDAAADAwwAAwMYAAMDJAADAzAAAwM8AAMDSAADA1AAAwRMAAMEVAADBGAAAwRoAAMEdAADBHgAAwR8AAMEgAADBIQAAwSMAAMEmAADBJwAAwSgAAMEqAADBKwAAwWoAAMFsAADBbwAAwXEAAMF0AADBdQAAwXYAAMF3AADBeAAAwXoAAMF9AADBfgAAwX8AAMGBAADBggAAwYQAAMHDAADBxQAAwcgAAMHKAADBzQAAwc4AAMHPAADB0AAAwdEAAMHTAADB1gAAwdcAAMHYAADB2gAAwdsAAMIaAADCHAAAwh8AAMIhAADCJAAAwiUAAMImAADCJwAAwigAAMIqAADCLQAAwi4AAMIvAADCMQAAwjIAAMJxAADCcwAAwnUAAMJ3AADCegAAwnsAAMJ8AADCfQAAwn4AAMKAAADCgwAAwoQAAMKFAADChwAAwogAAMLHAADCyQAAwssAAMLNAADC0AAAwtEAAMLSAADC0wAAwtQAAMLWAADC2QAAwtoAAMLbAADC3QAAwt4AAMMdAADDHwAAwyIAAMMkAADDJwAAwygAAMMpAADDKgAAwysAAMMtAADDMAAAwzEAAMMyAADDNAAAwzUAAMM+AADDUQAAw14AAMNxAADDfgAAw5EAAMOoAADDugAAxAUAAMQoAADESAAAxGgAAMRqAADEbAAAxG4AAMRwAADEcwAAxHQAAMR1AADEeAAAxHkAAMR7AADEfAAAxH4AAMSBAADEggAAxIMAAMSGAADEhwAAxIwAAMSZAADEngAAxKAAAMSiAADEpwAAxKoAAMStAADErwAAxNQAAMT4AADFHwAAxUMAAMVGAADFSAAAxUoAAMVMAADFTgAAxVAAAMVRAADFVAAAxWEAAMVyAADFdAAAxXYAAMV4AADFegAAxXwAAMV+AADFgAAAxYIAAMWTAADFlgAAxZkAAMWcAADFnwAAxaIAAMWlAADFqAAAxasAAMWtAADF7AAAxe4AAMXwAADF8gAAxfUAAMX2AADF9wAAxfgAAMX5AADF+wAAxf0AAMX+AADF/wAAxgEAAMYCAADGQQAAxkMAAMZFAADGRwAAxkoAAMZLAADGTAAAxk0AAMZOAADGUAAAxlIAAMZTAADGVAAAxlYAAMZXAADGlgAAxpgAAMabAADGnQAAxqAAAMahAADGogAAxqMAAMakAADGpgAAxqgAAMapAADGqgAAxqwAAMatAADGugAAxrsAAMa8AADGvgAAxv0AAMb/AADHAQAAxwMAAMcGAADHBwAAxwgAAMcJAADHCgAAxwwAAMcOAADHDwAAxxAAAMcSAADHEwAAx1IAAMdUAADHVgAAx1gAAMdbAADHXAAAx10AAMdeAADHXwAAx2EAAMdjAADHZAAAx2UAAMdnAADHaAAAx6cAAMepAADHqwAAx60AAMewAADHsQAAx7IAAMezAADHtAAAx7YAAMe4AADHuQAAx7oAAMe8AADHvQAAx/wAAMf+AADIAAAAyAIAAMgFAADIBgAAyAcAAMgIAADICQAAyAsAAMgNAADIDgAAyA8AAMgRAADIEgAAyFEAAMhTAADIVQAAyFcAAMhaAADIWwAAyFwAAMhdAADIXgAAyGAAAMhiAADIYwAAyGQAAMhmAADIZwAAyIwAAMiwAADI1wAAyPsAAMj+AADJAAAAyQIAAMkEAADJBgAAyQgAAMkJAADJDAAAyRkAAMkoAADJKgAAySwAAMkuAADJMAAAyTIAAMk0AADJNgAAyUUAAMlIAADJSwAAyU4AAMlRAADJVAAAyVcAAMlaAADJXAAAyZsAAMmdAADJoAAAyaIAAMmlAADJpgAAyacAAMmoAADJqQAAyasAAMmtAADJrgAAya8AAMmxAADJsgAAybMAAMnyAADJ9AAAyfYAAMn4AADJ+wAAyfwAAMn9AADJ/gAAyf8AAMoBAADKAwAAygQAAMoFAADKBwAAyggAAMpHAADKSQAAyksAAMpNAADKUAAAylEAAMpSAADKUwAAylQAAMpWAADKWAAAylkAAMpaAADKXAAAyl0AAMqcAADKngAAyqAAAMqiAADKpQAAyqYAAMqnAADKqAAAyqkAAMqrAADKrQAAyq4AAMqvAADKsQAAyrIAAMrxAADK8wAAyvUAAMr3AADK+gAAyvsAAMr8AADK/QAAyv4AAMsAAADLAgAAywMAAMsEAADLBgAAywcAAMtGAADLSAAAy0oAAMtMAADLTwAAy1AAAMtRAADLUgAAy1MAAMtVAADLVwAAy1gAAMtZAADLWwAAy1wAAMubAADLnQAAy58AAMuhAADLpAAAy6UAAMumAADLpwAAy6gAAMuqAADLrAAAy60AAMuuAADLsAAAy7EAAMv8AADMHwAAzD8AAMxfAADMYQAAzGMAAMxlAADMZwAAzGoAAMxrAADMbAAAzG8AAMxwAADMcgAAzHMAAMx1AADMeAAAzHkAAMx6AADMfQAAzH4AAMyDAADMkAAAzJUAAMyXAADMmQAAzJ4AAMyhAADMpAAAzKYAAMzLAADM7wAAzRYAAM06AADNPQAAzT8AAM1BAADNQwAAzUUAAM1HAADNSAAAzUsAAM1YAADNaQAAzWsAAM1tAADNbwAAzXEAAM1zAADNdQAAzXcAAM15AADNigAAzY0AAM2QAADNkwAAzZYAAM2ZAADNnAAAzZ8AAM2iAADNpAAAzeMAAM3lAADN5wAAzekAAM3sAADN7QAAze4AAM3vAADN8AAAzfIAAM30AADN9QAAzfYAAM34AADN+QAAzjgAAM46AADOPAAAzj4AAM5BAADOQgAAzkMAAM5EAADORQAAzkcAAM5JAADOSgAAzksAAM5NAADOTgAAzo0AAM6PAADOkgAAzpQAAM6XAADOmAAAzpkAAM6aAADOmwAAzp0AAM6fAADOoAAAzqEAAM6jAADOpAAAzrEAAM6yAADOswAAzrUAAM70AADO9gAAzvgAAM76AADO/QAAzv4AAM7/AADPAAAAzwEAAM8DAADPBQAAzwYAAM8HAADPCQAAzwoAAM9JAADPSwAAz00AAM9PAADPUgAAz1MAAM9UAADPVQAAz1YAAM9YAADPWgAAz1sAAM9cAADPXgAAz18AAM+eAADPoAAAz6IAAM+kAADPpwAAz6gAAM+pAADPqgAAz6sAAM+tAADPrwAAz7AAAM+xAADPswAAz7QAAM/zAADP9QAAz/cAAM/5AADP/AAAz/0AAM/+AADP/wAA0AAAANACAADQBAAA0AUAANAGAADQCAAA0AkAANBIAADQSgAA0EwAANBOAADQUQAA0FIAANBTAADQVAAA0FUAANBXAADQWQAA0FoAANBbAADQXQAA0F4AANCDAADQpwAA0M4AANDyAADQ9QAA0PcAAND5AADQ+wAA0P0AAND/AADRAAAA0QMAANEQAADRHwAA0SEAANEjAADRJQAA0ScAANEpAADRKwAA0S0AANE8AADRPwAA0UIAANFFAADRSAAA0UsAANFOAADRUQAA0VMAANGSAADRlAAA0ZYAANGYAADRmwAA0ZwAANGdAADRngAA0Z8AANGhAADRowAA0aQAANGlAADRpwAA0agAANHnAADR6QAA0esAANHtAADR8AAA0fEAANHyAADR8wAA0fQAANH2AADR+AAA0fkAANH6AADR/AAA0f0AANI8AADSPgAA0kAAANJCAADSRQAA0kYAANJHAADSSAAA0kkAANJLAADSTQAA0k4AANJPAADSUQAA0lIAANKRAADSkwAA0pUAANKXAADSmgAA0psAANKcAADSnQAA0p4AANKgAADSogAA0qMAANKkAADSpgAA0qcAANLmAADS6AAA0uoAANLsAADS7wAA0vAAANLxAADS8gAA0vMAANL1AADS9wAA0vgAANL5AADS+wAA0vwAANM7AADTPQAA0z8AANNBAADTRAAA00UAANNGAADTRwAA00gAANNKAADTTAAA000AANNOAADTUAAA01EAANOQAADTkgAA05QAANOWAADTmQAA05oAANObAADTnAAA050AANOfAADToQAA06IAANOjAADTpQAA06YAANPxAADUFAAA1DQAANRUAADUVgAA1FgAANRaAADUXAAA1F8AANRgAADUYQAA1GQAANRlAADUZwAA1GgAANRqAADUbQAA1G4AANRvAADUcgAA1HMAANR4AADUhQAA1IoAANSMAADUjgAA1JMAANSWAADUmQAA1JsAANTAAADU5AAA1QsAANUvAADVMgAA1TQAANU2AADVOAAA1ToAANU8AADVPQAA1UAAANVNAADVXgAA1WAAANViAADVZAAA1WYAANVoAADVagAA1WwAANVuAADVfwAA1YIAANWFAADViAAA1YsAANWOAADVkQAA1ZQAANWXAADVmQAA1dgAANXaAADV3AAA1d4AANXhAADV4gAA1eMAANXkAADV5QAA1ecAANXpAADV6gAA1esAANXtAADV7gAA1i0AANYvAADWMQAA1jMAANY2AADWNwAA1jgAANY5AADWOgAA1jwAANY+AADWPwAA1kAAANZCAADWQwAA1oIAANaEAADWhwAA1okAANaMAADWjQAA1o4AANaPAADWkAAA1pIAANaUAADWlQAA1pYAANaYAADWmQAA1qYAANanAADWqAAA1qoAANbpAADW6wAA1u0AANbvAADW8gAA1vMAANb0AADW9QAA1vYAANb4AADW+gAA1vsAANb8AADW/gAA1v8AANc+AADXQAAA10IAANdEAADXRwAA10gAANdJAADXSgAA10sAANdNAADXTwAA11AAANdRAADXUwAA11QAANeTAADXlQAA15cAANeZAADXnAAA150AANeeAADXnwAA16AAANeiAADXpAAA16UAANemAADXqAAA16kAANfoAADX6gAA1+wAANfuAADX8QAA1/IAANfzAADX9AAA1/UAANf3AADX+QAA1/oAANf7AADX/QAA1/4AANg9AADYPwAA2EEAANhDAADYRgAA2EcAANhIAADYSQAA2EoAANhMAADYTgAA2E8AANhQAADYUgAA2FMAANh4AADYnAAA2MMAANjnAADY6gAA2OwAANjuAADY8AAA2PIAANj0AADY9QAA2PgAANkFAADZFAAA2RYAANkYAADZGgAA2RwAANkeAADZIAAA2SIAANkxAADZNAAA2TcAANk6AADZPQAA2UAAANlDAADZRgAA2UgAANmHAADZiQAA2YsAANmNAADZkAAA2ZEAANmSAADZkwAA2ZQAANmWAADZmAAA2ZkAANmaAADZnAAA2Z0AANncAADZ3gAA2eAAANniAADZ5QAA2eYAANnnAADZ6AAA2ekAANnrAADZ7QAA2e4AANnvAADZ8QAA2fIAANoxAADaMwAA2jUAANo3AADaOgAA2jsAANo8AADaPQAA2j4AANpAAADaQgAA2kMAANpEAADaRgAA2kcAANqGAADaiAAA2ooAANqMAADajwAA2pAAANqRAADakgAA2pMAANqVAADalwAA2pgAANqZAADamwAA2pwAANrbAADa3QAA2t8AANrhAADa5AAA2uUAANrmAADa5wAA2ugAANrqAADa7AAA2u0AANruAADa8AAA2vEAANswAADbMgAA2zQAANs2AADbOQAA2zoAANs7AADbPAAA2z0AANs/AADbQQAA20IAANtDAADbRQAA20YAANuFAADbhwAA24kAANuLAADbjgAA248AANuQAADbkQAA25IAANuUAADblgAA25cAANuYAADbmgAA25sAANukAADbpQAA26cAANvmAADb6AAA2+oAANvsAADb7wAA2/AAANvxAADb8gAA2/MAANv1AADb+AAA2/kAANv6AADb/AAA2/0AANw8AADcPgAA3EEAANxDAADcRgAA3EcAANxIAADcSQAA3EoAANxMAADcTwAA3FAAANxRAADcUwAA3FQAANyTAADclQAA3JgAANyaAADcnQAA3J4AANyfAADcoAAA3KEAANyjAADcpgAA3KcAANyoAADcqgAA3KsAANzqAADc7AAA3O8AANzxAADc9AAA3PUAANz2AADc9wAA3PgAANz6AADc/QAA3P4AANz/AADdAQAA3QIAAN1BAADdQwAA3UUAAN1HAADdSgAA3UsAAN1MAADdTQAA3U4AAN1QAADdUwAA3VQAAN1VAADdVwAA3VgAAN2jAADdxgAA3eYAAN4GAADeCAAA3goAAN4MAADeDgAA3hAAAN4RAADeEgAA3hUAAN4WAADeGAAA3hkAAN4bAADeHgAA3h8AAN4gAADeIwAA3iQAAN4pAADeNgAA3jsAAN49AADePwAA3kQAAN5HAADeSgAA3kwAAN5xAADelQAA3rwAAN7gAADe4wAA3uUAAN7nAADe6QAA3usAAN7tAADe7gAA3vEAAN7+AADfDwAA3xEAAN8TAADfFQAA3xcAAN8ZAADfGwAA3x0AAN8fAADfMAAA3zMAAN82AADfOQAA3zwAAN8/AADfQgAA30UAAN9IAADfSgAA34kAAN+LAADfjQAA348AAN+SAADfkwAA35QAAN+VAADflgAA35gAAN+aAADfmwAA35wAAN+eAADfnwAA394AAN/gAADf4gAA3+QAAN/nAADf6AAA3+kAAN/qAADf6wAA3+0AAN/vAADf8AAA3/EAAN/zAADf9AAA4DMAAOA1AADgOAAA4DoAAOA9AADgPgAA4D8AAOBAAADgQQAA4EMAAOBFAADgRgAA4EcAAOBJAADgSgAA4FcAAOBYAADgWQAA4FsAAOCaAADgnAAA4J4AAOCgAADgowAA4KQAAOClAADgpgAA4KcAAOCpAADgqwAA4KwAAOCtAADgrwAA4LAAAODvAADg8QAA4PMAAOD1AADg+AAA4PkAAOD6AADg+wAA4PwAAOD+AADhAAAA4QEAAOECAADhBAAA4QUAAOFEAADhRgAA4UgAAOFKAADhTQAA4U4AAOFPAADhUAAA4VEAAOFTAADhVQAA4VYAAOFXAADhWQAA4VoAAOGZAADhmwAA4Z0AAOGfAADhogAA4aMAAOGkAADhpQAA4aYAAOGoAADhqgAA4asAAOGsAADhrgAA4a8AAOHuAADh8AAA4fIAAOH0AADh9wAA4fgAAOH5AADh+gAA4fsAAOH9AADh/wAA4gAAAOIBAADiAwAA4gQAAOIpAADiTQAA4nQAAOKYAADimwAA4p0AAOKfAADioQAA4qMAAOKlAADipgAA4qkAAOK2AADixQAA4scAAOLJAADiywAA4s0AAOLPAADi0QAA4tMAAOLiAADi5QAA4ugAAOLrAADi7gAA4vEAAOL0AADi9wAA4vkAAOM4AADjOgAA4zwAAOM+AADjQQAA40IAAONDAADjRAAA40UAAONHAADjSQAA40oAAONLAADjTQAA404AAOONAADjjwAA45EAAOOTAADjlgAA45cAAOOYAADjmQAA45oAAOOcAADjngAA458AAOOgAADjogAA46MAAOPiAADj5AAA4+YAAOPoAADj6wAA4+wAAOPtAADj7gAA4+8AAOPxAADj8wAA4/QAAOP1AADj9wAA4/gAAOQ3AADkOQAA5DsAAOQ9AADkQAAA5EEAAORCAADkQwAA5EQAAORGAADkSAAA5EkAAORKAADkTAAA5E0AAOSMAADkjgAA5JAAAOSSAADklQAA5JYAAOSXAADkmAAA5JkAAOSbAADknQAA5J4AAOSfAADkoQAA5KIAAOThAADk4wAA5OUAAOTnAADk6gAA5OsAAOTsAADk7QAA5O4AAOTwAADk8gAA5PMAAOT0AADk9gAA5PcAAOU2AADlOAAA5ToAAOU8AADlPwAA5UAAAOVBAADlQgAA5UMAAOVFAADlRwAA5UgAAOVJAADlSwAA5UwAAOWXAADlugAA5doAAOX6AADl/AAA5f4AAOYAAADmAgAA5gQAAOYFAADmBgAA5gkAAOYKAADmDAAA5g0AAOYPAADmEgAA5hMAAOYUAADmFwAA5hgAAOYdAADmKgAA5i8AAOYxAADmMwAA5jgAAOY7AADmPgAA5kAAAOZlAADmiQAA5rAAAObUAADm1wAA5tkAAObbAADm3QAA5t8AAObhAADm4gAA5uUAAObyAADnAwAA5wUAAOcHAADnCQAA5wsAAOcNAADnDwAA5xEAAOcTAADnJAAA5ycAAOcqAADnLQAA5zAAAOczAADnNgAA5zkAAOc8AADnPgAA530AAOd/AADngQAA54MAAOeGAADnhwAA54gAAOeJAADnigAA54wAAOeOAADnjwAA55AAAOeSAADnkwAA59IAAOfUAADn1gAA59gAAOfbAADn3AAA590AAOfeAADn3wAA5+EAAOfjAADn5AAA5+UAAOfnAADn6AAA6CcAAOgpAADoLAAA6C4AAOgxAADoMgAA6DMAAOg0AADoNQAA6DcAAOg5AADoOgAA6DsAAOg9AADoPgAA6EsAAOhMAADoTQAA6E8AAOiOAADokAAA6JIAAOiUAADolwAA6JgAAOiZAADomgAA6JsAAOidAADonwAA6KAAAOihAADoowAA6KQAAOjjAADo5QAA6OcAAOjpAADo7AAA6O0AAOjuAADo7wAA6PAAAOjyAADo9AAA6PUAAOj2AADo+AAA6PkAAOk4AADpOgAA6TwAAOk+AADpQQAA6UIAAOlDAADpRAAA6UUAAOlHAADpSQAA6UoAAOlLAADpTQAA6U4AAOmNAADpjwAA6ZEAAOmTAADplgAA6ZcAAOmYAADpmQAA6ZoAAOmcAADpngAA6Z8AAOmgAADpogAA6aMAAOniAADp5AAA6eYAAOnoAADp6wAA6ewAAOntAADp7gAA6e8AAOnxAADp8wAA6fQAAOn1AADp9wAA6fgAAOodAADqQQAA6mgAAOqMAADqjwAA6pEAAOqTAADqlQAA6pcAAOqZAADqmgAA6p0AAOqqAADquQAA6rsAAOq9AADqvwAA6sEAAOrDAADqxQAA6scAAOrWAADq2QAA6twAAOrfAADq4gAA6uUAAOroAADq6wAA6u0AAOssAADrLgAA6zAAAOsyAADrNQAA6zYAAOs3AADrOAAA6zkAAOs7AADrPQAA6z4AAOs/AADrQQAA60IAAOuBAADrgwAA64UAAOuHAADrigAA64sAAOuMAADrjQAA644AAOuQAADrkgAA65MAAOuUAADrlgAA65cAAOvWAADr2AAA69oAAOvcAADr3wAA6+AAAOvhAADr4gAA6+MAAOvlAADr5wAA6+gAAOvpAADr6wAA6+wAAOwrAADsLQAA7DAAAOwyAADsNQAA7DYAAOw3AADsOAAA7DkAAOw7AADsPQAA7D4AAOw/AADsQQAA7EIAAOyBAADsgwAA7IUAAOyHAADsigAA7IsAAOyMAADsjQAA7I4AAOyQAADskgAA7JMAAOyUAADslgAA7JcAAOzWAADs2AAA7NoAAOzcAADs3wAA7OAAAOzhAADs4gAA7OMAAOzlAADs5wAA7OgAAOzpAADs6wAA7OwAAO0rAADtLQAA7S8AAO0xAADtNAAA7TUAAO02AADtNwAA7TgAAO06AADtPAAA7T0AAO0+AADtQAAA7UEAAO2MAADtrwAA7c8AAO3vAADt8QAA7fMAAO31AADt9wAA7fkAAO36AADt+wAA7f4AAO3/AADuAQAA7gIAAO4EAADuBwAA7ggAAO4JAADuDAAA7g0AAO4SAADuHwAA7iQAAO4mAADuKAAA7i0AAO4wAADuMwAA7jUAAO5aAADufgAA7qUAAO7JAADuzAAA7s4AAO7QAADu0gAA7tQAAO7WAADu1wAA7toAAO7nAADu+AAA7voAAO78AADu/gAA7wAAAO8CAADvBAAA7wYAAO8IAADvGQAA7xwAAO8fAADvIgAA7yUAAO8oAADvKwAA7y4AAO8xAADvMwAA73IAAO90AADvdgAA73gAAO97AADvfAAA730AAO9+AADvfwAA74EAAO+DAADvhAAA74UAAO+HAADviAAA78cAAO/JAADvywAA780AAO/QAADv0QAA79IAAO/TAADv1AAA79YAAO/YAADv2QAA79oAAO/cAADv3QAA8BwAAPAeAADwIQAA8CMAAPAmAADwJwAA8CgAAPApAADwKgAA8CwAAPAuAADwLwAA8DAAAPAyAADwMwAA8EAAAPBBAADwQgAA8EQAAPCDAADwhQAA8IcAAPCJAADwjAAA8I0AAPCOAADwjwAA8JAAAPCSAADwlAAA8JUAAPCWAADwmAAA8JkAAPDYAADw2gAA8NwAAPDeAADw4QAA8OIAAPDjAADw5AAA8OUAAPDnAADw6QAA8OoAAPDrAADw7QAA8O4AAPEtAADxLwAA8TEA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AQHTAAEB1AABAdUAAQHWAAEB1wABAdkAAQHbAAEB3AABAd0AAQHfAAEB4AABAgUAAQIpAAECUAABAnQAAQJ3AAECeQABAnsAAQJ9AAECfwABAoEAAQKCAAEChQABApIAAQKhAAECowABAqUAAQKnAAECqQABAqsAAQKtAAECrwABAr4AAQLBAAECxAABAscAAQLKAAECzQABAtAAAQLTAAEC1QABAxQAAQMWAAEDGAABAxoAAQMdAAEDHgABAx8AAQMgAAEDIQABAyMAAQMlAAEDJgABAycAAQMpAAEDKgABA2kAAQNrAAEDbQABA28AAQNyAAEDcwABA3QAAQN1AAEDdgABA3gAAQN6AAEDewABA3wAAQN+AAEDfwABA74AAQPAAAEDwgABA8QAAQPHAAEDyAABA8kAAQPKAAEDywABA80AAQPPAAED0AABA9EAAQPTAAED1AABBBMAAQQVAAEEGAABBBoAAQQdAAEEHgABBB8AAQQgAAEEIQABBCMAAQQlAAEEJgABBCcAAQQpAAEEKgABBGkAAQRrAAEEbQABBG8AAQRyAAEEcwABBHQAAQR1AAEEdgABBHgAAQR6AAEEewABBHwAAQR+AAEEfwABBL4AAQTAAAEEwgABBMQAAQTHAAEEyAABBMkAAQTKAAEEywABBM0AAQTPAAEE0AABBNEAAQTTAAEE1AABBRMAAQUVAAEFFwABBRkAAQUcAAEFHQABBR4AAQUfAAEFIAABBSIAAQUkAAEFJQABBSYAAQUoAAEFKQABBXQAAQWXAAEFtwABBdcAAQXZAAEF2wABBd0AAQXfAAEF4QABBeIAAQXjAAEF5gABBecAAQXpAAEF6gABBewAAQXvAAEF8AABBfEAAQX0AAEF9QABBfoAAQYHAAEGDAABBg4AAQYQAAEGFQABBhgAAQYbAAEGHQABBkIAAQZmAAEGjQABBrEAAQa0AAEGtgABBrgAAQa6AAEGvAABBr4AAQa/AAEGwgABBs8AAQbgAAEG4gABBuQAAQbmAAEG6AABBuoAAQbsAAEG7gABBvAAAQcBAAEHBAABBwcAAQcKAAEHDQABBxAAAQcTAAEHFgABBxkAAQcbAAEHWgABB1wAAQdeAAEHYAABB2MAAQdkAAEHZQABB2YAAQdnAAEHaQABB2sAAQdsAAEHbQABB28AAQdwAAEHrwABB7EAAQezAAEHtQABB7gAAQe5AAEHugABB7sAAQe8AAEHvgABB8AAAQfBAAEHwgABB8QAAQfFAAEIBAABCAYAAQgJAAEICwABCA4AAQgPAAEIEAABCBEAAQgSAAEIFAABCBYAAQgXAAEIGAABCBoAAQgbAAEIKAABCCkAAQgqAAEILAABCGsAAQhtAAEIbwABCHEAAQh0AAEIdQABCHYAAQh3AAEIeAABCHoAAQh8AAEIfQABCH4AAQiAAAEIgQABCMAAAQjCAAEIxAABCMYAAQjJAAEIygABCMsAAQjMAAEIzQABCM8AAQjRAAEI0gABCNMAAQjVAAEI1gABCRUAAQkXAAEJGQABCRsAAQkeAAEJHwABCSAAAQkhAAEJIgABCSQAAQkmAAEJJwABCSgAAQkqAAEJKwABCWoAAQlsAAEJbgABCXAAAQlzAAEJdAABCXUAAQl2AAEJdwABCXkAAQl7AAEJfAABCX0AAQl/AAEJgAABCb8AAQnBAAEJwwABCcUAAQnIAAEJyQABCcoAAQnLAAEJzAABCc4AAQnQAAEJ0QABCdIAAQnUAAEJ1QABCfoAAQoeAAEKRQABCmkAAQpsAAEKbgABCnAAAQpyAAEKdAABCnYAAQp3AAEKegABCocAAQqWAAEKmAABCpoAAQqcAAEKngABCqAAAQqiAAEKpAABCrMAAQq2AAEKuQABCrwAAQq/AAEKwgABCsUAAQrIAAEKygABCwkAAQsLAAELDgABCxAAAQsTAAELFAABCxUAAQsWAAELFwABCxkAAQsbAAELHAABCx0AAQsfAAELIAABC18AAQthAAELYwABC2UAAQtoAAELaQABC2oAAQtrAAELbAABC24AAQtwAAELcQABC3IAAQt0AAELdQABC7QAAQu2AAELuAABC7oAAQu9AAELvgABC78AAQvAAAELwQABC8MAAQvFAAELxgABC8cAAQvJAAELygABDAkAAQwLAAEMDgABDBAAAQwTAAEMFAABDBUAAQwWAAEMFwABDBkAAQwbAAEMHAABDB0AAQwfAAEMIAABDF8AAQxhAAEMYwABDGUAAQxoAAEMaQABDGoAAQxrAAEMbAABDG4AAQxwAAEMcQABDHIAAQx0AAEMdQABDLQAAQy2AAEMuAABDLoAAQy9AAEMvgABDL8AAQzAAAEMwQABDMMAAQzFAAEMxgABDMcAAQzJAAEMygABDQkAAQ0LAAENDQABDQ8AAQ0SAAENEwABDRQAAQ0VAAENFgABDRgAAQ0aAAENGwABDRwAAQ0eAAENHwABDWoAAQ2NAAENrQABDc0AAQ3PAAEN0QABDdMAAQ3VAAEN1wABDdgAAQ3ZAAEN3AABDd0AAQ3fAAEN4AABDeIAAQ3lAAEN5gABDecAAQ3qAAEN6wABDfQAAQ4BAAEOBgABDggAAQ4KAAEODwABDhIAAQ4VAAEOFwABDjwAAQ5gAAEOhwABDqsAAQ6uAAEOsAABDrIAAQ60AAEOtgABDrgAAQ65AAEOvAABDskAAQ7aAAEO3AABDt4AAQ7gAAEO4gABDuQAAQ7mAAEO6AABDuoAAQ77AAEO/gABDwEAAQ8EAAEPBwABDwoAAQ8NAAEPEAABDxMAAQ8VAAEPVAABD1YAAQ9YAAEPWgABD10AAQ9eAAEPXwABD2AAAQ9hAAEPYwABD2UAAQ9mAAEPZwABD2kAAQ9qAAEPqQABD6sAAQ+tAAEPrwABD7IAAQ+zAAEPtAABD7UAAQ+2AAEPuAABD7oAAQ+7AAEPvAABD74AAQ+/AAEP/gABEAAAARADAAEQBQABEAgAARAJAAEQCgABEAsAARAMAAEQDgABEBAAARARAAEQEgABEBQAARAVAAEQIgABECMAARAkAAEQJgABEGUAARBnAAEQaQABEGsAARBuAAEQbwABEHAAARBxAAEQcgABEHQAARB2AAEQdwABEHgAARB6AAEQewABELoAARC8AAEQvgABEMAAARDDAAEQxAABEMUAARDGAAEQxwABEMkAARDLAAEQzAABEM0AARDPAAEQ0AABEQ8AARERAAEREwABERUAAREYAAERGQABERoAAREbAAERHAABER4AAREgAAERIQABESIAAREkAAERJQABEWQAARFmAAERaAABEWoAARFtAAERbgABEW8AARFwAAERcQABEXMAARF1AAERdgABEXcAARF5AAERegABEbkAARG7AAERvQABEb8AARHCAAERwwABEcQAARHFAAERxgABEcgAARHKAAERywABEcwAARHOAAERzwABEfQAARIYAAESPwABEmMAARJmAAESaAABEmoAARJsAAESbgABEnAAARJxAAESdAABEoEAARKQAAESkgABEpQAARKWAAESmAABEpoAARKcAAESngABEq0AARKwAAESswABErYAARK5AAESvAABEr8AARLCAAESxAABEwMAARMFAAETBwABEwkAARMMAAETDQABEw4AARMPAAETEAABExIAARMUAAETFQABExYAARMYAAETGQABE1gAARNaAAETXAABE14AARNhAAETYgABE2MAARNkAAETZQABE2cAARNpAAETagABE2sAARNtAAETbgABE60AAROvAAETsQABE7MAARO2AAETtwABE7gAARO5AAETugABE7wAARO+AAETvwABE8AAARPCAAETwwABFAIAARQEAAEUBwABFAkAARQMAAEUDQABFA4AARQPAAEUEAABFBIAARQUAAEUFQABFBYAARQYAAEUGQABFBwAARRbAAEUXQABFF8AARRhAAEUZAABFGUAARRmAAEUZwABFGgAARRqAAEUbAABFG0AARRuAAEUcAABFHEAARSwAAEUsgABFLUAARS3AAEUugABFLsAARS8AAEUvQABFL4AARTAAAEUwgABFMMAARTEAAEUxgABFMcAARTuAAEVLQABFS8AARUxAAEVMwABFTYAARU3AAEVOAABFTkAARU6AAEVPAABFT4AARU/AAEVQAABFUIAARVDAAEVjgABFbEAARXRAAEV8QABFfMAARX1AAEV9wABFfkAARX7AAEV/AABFf0AARYAAAEWAQABFgMAARYEAAEWBwABFgoAARYLAAEWDAABFg8AARYQAAEWFQABFiIAARYnAAEWKQABFiwAARYxAAEWNAABFjcAARY5AAEWXgABFoIAARapAAEWzQABFtAAARbSAAEW1AABFtYAARbYAAEW2gABFtsAARbeAAEW6wABFvwAARb+AAEXAAABFwIAARcEAAEXBgABFwgAARcKAAEXDAABFx0AARcgAAEXIwABFyYAARcpAAEXLAABFy8AARcyAAEXNQABFzcAARd2AAEXeAABF3oAARd8AAEXfwABF4AAAReBAAEXggABF4MAAReFAAEXhwABF4gAAReJAAEXiwABF4wAARfLAAEXzQABF88AARfRAAEX1AABF9UAARfWAAEX1wABF9gAARfaAAEX3AABF90AARfeAAEX4AABF+EAARggAAEYIgABGCUAARgnAAEYKgABGCsAARgsAAEYLQABGC4AARgwAAEYMgABGDMAARg0AAEYNgABGDcAARhEAAEYRQABGEYAARhIAAEYhwABGIkAARiLAAEYjQABGJAAARiRAAEYkgABGJMAARiUAAEYlgABGJgAARiZAAEYmgABGJwAARidAAEY3AABGN4AARjgAAEY4gABGOUAARjmAAEY5wABGOgAARjpAAEY6wABGO0AARjuAAEY7wABGPEAARjyAAEZMQABGTMAARk1AAEZNwABGToAARk7AAEZPAABGT0AARk+AAEZQAABGUIAARlDAAEZRAABGUYAARlHAAEZhgABGYgAARmKAAEZjAABGY8AARmQAAEZkQABGZIAARmTAAEZlQABGZcAARmYAAEZmQABGZsAARmcAAEZ2wABGd0AARnfAAEZ4QABGeQAARnlAAEZ5gABGecAARnoAAEZ6gABGewAARntAAEZ7gABGfAAARnxAAEaFgABGjoAARphAAEahQABGogAARqLAAEajQABGo8AARqRAAEakwABGpQAARqXAAEapAABGrEAARq0AAEatwABGroAARq9AAEawAABGsMAARrQAAEa0wABGtYAARrZAAEa3AABGt8AARriAAEa5AABGyMAARslAAEbKAABGyoAARstAAEbLgABGy8AARswAAEbMQABGzMAARs2AAEbNwABGzgAARs6AAEbOwABG3oAARt8AAEbfgABG4AAARuDAAEbhAABG4UAARuGAAEbhwABG4kAARuMAAEbjQABG44AARuQAAEbkQABG9AAARvSAAEb1QABG9cAARvaAAEb2wABG9wAARvdAAEb3gABG+AAARvjAAEb5AABG+UAARvnAAEb6AABHCcAARwpAAEcLAABHC4AARwxAAEcMgABHDMAARw0AAEcNQABHDcAARw6AAEcOwABHDwAARw+AAEcPwABHH4AARyAAAEcgwABHIUAARyIAAEciQABHIoAARyLAAEcjAABHI4AARyRAAEckgABHJMAARyVAAEclgABHNUAARzXAAEc2QABHNsAARzeAAEc3wABHOAAARzhAAEc4gABHOQAARznAAEc6AABHOkAARzrAAEc7AABHTcAAR1aAAEdegABHZoAAR2cAAEdngABHaAAAR2iAAEdpAABHaUAAR2mAAEdqQABHaoAAR2sAAEdrQABHa8AAR2yAAEdswABHbQAAR23AAEduAABHcEAAR3OAAEd0wABHdUAAR3XAAEd3AABHd8AAR3iAAEd5AABHgkAAR4tAAEeVAABHngAAR57AAEefQABHn8AAR6BAAEegwABHoUAAR6GAAEeiQABHpYAAR6nAAEeqQABHqsAAR6tAAEerwABHrEAAR6zAAEetQABHrcAAR7IAAEeywABHs4AAR7RAAEe1AABHtcAAR7aAAEe3QABHuAAAR7iAAEfIQABHyMAAR8lAAEfJwABHyoAAR8rAAEfLAABHy0AAR8uAAEfMAABHzIAAR8zAAEfNAABHzYAAR83AAEfdgABH3gAAR96AAEffAABH38AAR+AAAEfgQABH4IAAR+DAAEfhQABH4cAAR+IAAEfiQABH4sAAR+MAAEfywABH80AAR/QAAEf0gABH9UAAR/WAAEf1wABH9gAAR/ZAAEf2wABH90AAR/eAAEf3wABH+EAAR/iAAEf7wABH/AAAR/xAAEf8wABIDIAASA0AAEgNgABIDgAASA7AAEgPAABID0AASA+AAEgPwABIEEAASBDAAEgRAABIEUAASBHAAEgSAABIIcAASCJAAEgiwABII0AASCQAAEgkQABIJIAASCTAAEglAABIJYAASCYAAEgmQABIJoAASCcAAEgnQABINwAASDeAAEg4AABIOIAASDlAAEg5gABIOcAASDoAAEg6QABIOsAASDtAAEg7gABIO8AASDxAAEg8gABITEAASEzAAEhNQABITcAASE6AAEhOwABITwAASE9AAEhPgABIUAAASFCAAEhQwABIUQAASFGAAEhRwABIYYAASGIAAEhigABIYwAASGPAAEhkAABIZEAASGSAAEhkwABIZUAASGXAAEhmAABIZkAASGbAAEhnAABIcEAASHlAAEiDAABIjAAASIzAAEiNQABIjcAASI5AAEiOwABIj0AASI+AAEiQQABIk4AASJdAAEiXwABImEAASJjAAEiZQABImcAASJpAAEiawABInoAASJ9AAEigAABIoMAASKGAAEiiQABIowAASKPAAEikQABItAAASLSAAEi1AABItYAASLZAAEi2gABItsAASLcAAEi3QABIt8AASLhAAEi4gABIuMAASLlAAEi5gABIyUAASMnAAEjKQABIysAASMuAAEjLwABIzAAASMxAAEjMgABIzQAASM2AAEjNwABIzgAASM6AAEjOwABI3oAASN8AAEjfgABI4AAASODAAEjhAABI4UAASOGAAEjhwABI4kAASOLAAEjjAABI40AASOPAAEjkAABI88AASPRAAEj0wABI9UAASPYAAEj2QABI9oAASPbAAEj3AABI94AASPgAAEj4QABI+IAASPkAAEj5QABJCQAASQmAAEkKAABJCoAASQtAAEkLgABJC8AASQwAAEkMQABJDMAASQ1AAEkNgABJDcAASQ5AAEkOgABJHkAASR7AAEkfQABJH8AASSCAAEkgwABJIQAASSFAAEkhgABJIgAASSKAAEkiwABJIwAASSOAAEkjwABJM4AASTQAAEk0gABJNQAASTXAAEk2AABJNkAASTaAAEk2wABJN0AASTfAAEk4AABJOEAASTjAAEk5AABJS8AASVSAAElcgABJZIAASWUAAEllgABJZgAASWaAAElnAABJZ0AASWeAAEloQABJaIAASWkAAElpQABJacAASWqAAElqwABJawAASWvAAElsAABJbUAASXCAAElxwABJckAASXLAAEl0AABJdMAASXWAAEl2AABJf0AASYhAAEmSAABJmwAASZvAAEmcQABJnMAASZ1AAEmdwABJnkAASZ6AAEmfQABJooAASabAAEmnQABJp8AASahAAEmowABJqUAASanAAEmqQABJqsAASa8AAEmvwABJsIAASbFAAEmyAABJssAASbOAAEm0QABJtQAASbWAAEnFQABJxcAAScZAAEnGwABJx4AAScfAAEnIAABJyEAASciAAEnJAABJyYAAScnAAEnKAABJyoAAScrAAEnagABJ2wAASduAAEncAABJ3MAASd0AAEndQABJ3YAASd3AAEneQABJ3sAASd8AAEnfQABJ38AASeAAAEnvwABJ8EAASfEAAEnxgABJ8kAASfKAAEnywABJ8wAASfNAAEnzwABJ9EAASfSAAEn0wABJ9UAASfWAAEn4wABJ+QAASflAAEn5wABKCYAASgoAAEoKgABKCwAASgvAAEoMAABKDEAASgyAAEoMwABKDUAASg3AAEoOAABKDkAASg7AAEoPAABKHsAASh9AAEofwABKIEAASiEAAEohQABKIYAASiHAAEoiAABKIoAASiMAAEojQABKI4AASiQAAEokQABKNAAASjSAAEo1AABKNYAASjZAAEo2gABKNsAASjcAAEo3QABKN8AASjhAAEo4gABKOMAASjlAAEo5gABKSUAASknAAEpKQABKSsAASkuAAEpLwABKTAAASkxAAEpMgABKTQAASk2AAEpNwABKTgAASk6AAEpOwABKXoAASl8AAEpfgABKYAAASmDAAEphAABKYUAASmGAAEphwABKYkAASmLAAEpjAABKY0AASmPAAEpkAABKbUAASnZAAEqAAABKiQAASonAAEqKQABKisAASotAAEqLwABKjEAASoyAAEqNQABKkIAASpRAAEqUwABKlUAASpXAAEqWQABKlsAASpdAAEqXwABKm4AASpxAAEqdAABKncAASp6AAEqfQABKoAAASqDAAEqhQABKsQAASrGAAEqyAABKsoAASrNAAEqzgABKs8AASrQAAEq0QABKtMAASrVAAEq1gABKtcAASrZAAEq2gABKxkAASsbAAErHQABKx8AASsiAAErIwABKyQAASslAAErJgABKygAASsqAAErKwABKywAASsuAAErLwABK24AAStwAAErcgABK3QAASt3AAEreAABK3kAASt6AAErewABK30AASt/AAErgAABK4EAASuDAAErhAABK8MAASvFAAErxwABK8kAASvMAAErzQABK84AASvPAAEr0AABK9IAASvUAAEr1QABK9YAASvYAAEr2QABLBgAASwaAAEsHAABLB4AASwhAAEsIgABLCMAASwkAAEsJQABLCcAASwpAAEsKgABLCsAASwtAAEsLgABLG0AASxvAAEscQABLHMAASx2AAEsdwABLHgAASx5AAEsegABLHwAASx+AAEsfwABLIAAASyCAAEsgwABLMIAASzEAAEsxgABLMgAASzLAAEszAABLM0AASzOAAEszwABLNEAASzTAAEs1AABLNUAASzXAAEs2AABLSMAAS1GAAEtZgABLYYAAS2IAAEtigABLYwAAS2OAAEtkAABLZEAAS2SAAEtlQABLZYAAS2YAAEtmQABLZsAAS2eAAEtnwABLaAAAS2jAAEtpAABLakAAS22AAEtuwABLb0AAS2/AAEtxAABLccAAS3KAAEtzAABLfEAAS4VAAEuPAABLmAAAS5jAAEuZQABLmcAAS5pAAEuawABLm0AAS5uAAEucQABLn4AAS6PAAEukQABLpMAAS6VAAEulwABLpkAAS6bAAEunQABLp8AAS6wAAEuswABLrYAAS65AAEuvAABLr8AAS7CAAEuxQABLsgAAS7KAAEvCQABLwsAAS8NAAEvDwABLxIAAS8TAAEvFAABLxUAAS8WAAEvGAABLxoAAS8bAAEvHAABLx4AAS8fAAEvXgABL2AAAS9iAAEvZAABL2cAAS9oAAEvaQABL2oAAS9rAAEvbQABL28AAS9wAAEvcQABL3MAAS90AAEvswABL7UAAS+4AAEvugABL70AAS++AAEvvwABL8AAAS/BAAEvwwABL8UAAS/GAAEvxwABL8kAAS/KAAEv1wABL9gAAS/ZAAEv2wABMBoAATAcAAEwHgABMCAAATAjAAEwJAABMCUAATAmAAEwJwABMCkAATArAAEwLAABMC0AATAvAAEwMAABMG8AATBxAAEwcwABMHUAATB4AAEweQABMHoAATB7AAEwfAABMH4AATCAAAEwgQABMIIAATCEAAEwhQABMMQAATDGAAEwyAABMMoAATDNAAEwzgABMM8AATDQAAEw0QABMNMAATDVAAEw1gABMNcAATDZAAEw2gABMRkAATEbAAExHQABMR8AATEiAAExIwABMSQAATElAAExJgABMSgAATEqAAExKwABMSwAATEuAAExLwABMW4AATFwAAExcgABMXQAATF3AAExeAABMXkAATF6AAExewABMX0AATF/AAExgAABMYEAATGDAAExhAABMakAATHNAAEx9AABMhgAATIbAAEyHQABMh8AATIhAAEyIwABMiUAATImAAEyKQABMjYAATJFAAEyRwABMkkAATJLAAEyTQABMk8AATJRAAEyUwABMmIAATJlAAEyaAABMmsAATJuAAEycQABMnQAATJ3AAEyeQABMrgAATK6AAEyvAABMr4AATLBAAEywgABMsMAATLEAAEyxQABMscAATLJAAEyygABMssAATLNAAEyzgABMw0AATMPAAEzEQABMxMAATMWAAEzFwABMxgAATMZAAEzGgABMxwAATMeAAEzHwABMyAAATMiAAEzIwABM2IAATNkAAEzZgABM2gAATNrAAEzbAABM20AATNuAAEzbwABM3EAATNzAAEzdAABM3UAATN3AAEzeAABM7cAATO5AAEzuwABM70AATPAAAEzwQABM8IAATPDAAEzxAABM8YAATPIAAEzyQABM8oAATPMAAEzzQABNAwAATQOAAE0EAABNBIAATQVAAE0FgABNBcAATQYAAE0GQABNBsAATQdAAE0HgABNB8AATQhAAE0IgABNGEAATRjAAE0ZQABNGcAATRqAAE0awABNGwAATRtAAE0bgABNHAAATRyAAE0cwABNHQAATR2AAE0dwABNLYAATS4AAE0ugABNLwAATS/AAE0wAABNMEAATTCAAE0wwABNMUAATTHAAE0yAABNMkAATTLAAE0zAABNRcAATU6AAE1WgABNXoAATV8AAE1fgABNYAAATWCAAE1hAABNYUAATWGAAE1iQABNYoAATWMAAE1jQABNY8AATWSAAE1kwABNZQAATWXAAE1mAABNZ0AATWqAAE1rwABNbEAATWzAAE1uAABNbsAATW+AAE1wAABNeUAATYJAAE2MAABNlQAATZXAAE2WQABNlsAATZdAAE2XwABNmEAATZiAAE2ZQABNnIAATaDAAE2hQABNocAATaJAAE2iwABNo0AATaPAAE2kQABNpMAATakAAE2pwABNqoAATatAAE2sAABNrMAATa2AAE2uQABNrwAATa+AAE2/QABNv8AATcBAAE3AwABNwYAATcHAAE3CAABNwkAATcKAAE3DAABNw4AATcPAAE3EAABNxIAATcTAAE3UgABN1QAATdWAAE3WAABN1sAATdcAAE3XQABN14AATdfAAE3YQABN2MAATdkAAE3ZQABN2cAATdoAAE3pwABN6kAATesAAE3rgABN7EAATeyAAE3swABN7QAATe1AAE3twABN7kAATe6AAE3uwABN70AATe+AAE3ywABN8wAATfNAAE3zwABOA4AATgQAAE4EgABOBQAATgXAAE4GAABOBkAATgaAAE4GwABOB0AATgfAAE4IAABOCEAATgjAAE4JAABOGMAAThlAAE4ZwABOGkAAThsAAE4bQABOG4AAThvAAE4cAABOHIAATh0AAE4dQABOHYAATh4AAE4eQABOLgAATi6AAE4vAABOL4AATjBAAE4wgABOMMAATjEAAE4xQABOMcAATjJAAE4ygABOMsAATjNAAE4zgABOQ0AATkPAAE5EQABORMAATkWAAE5FwABORgAATkZAAE5GgABORwAATkeAAE5HwABOSAAATkiAAE5IwABOWIAATlkAAE5ZgABOWgAATlrAAE5bAABOW0AATluAAE5bwABOXEAATlzAAE5dAABOXUAATl3AAE5eAABOZ0AATnBAAE56AABOgwAAToPAAE6EQABOhMAAToVAAE6FwABOhkAAToaAAE6HQABOioAATo5AAE6OwABOj0AATo/AAE6QQABOkMAATpFAAE6RwABOlYAATpZAAE6XAABOl8AATpiAAE6ZQABOmgAATprAAE6bQABOqwAATquAAE6sAABOrIAATq1AAE6tgABOrcAATq4AAE6uQABOrsAATq9AAE6vgABOr8AATrBAAE6wgABOwEAATsDAAE7BQABOwcAATsKAAE7CwABOwwAATsNAAE7DgABOxAAATsSAAE7EwABOxQAATsWAAE7FwABO1YAATtYAAE7WgABO1wAATtfAAE7YAABO2EAATtiAAE7YwABO2UAATtnAAE7aAABO2kAATtrAAE7bAABO6sAATutAAE7rwABO7EAATu0AAE7tQABO7YAATu3AAE7uAABO7oAATu8AAE7vQABO74AATvAAAE7wQABPAAAATwCAAE8BAABPAYAATwJAAE8CgABPAsAATwMAAE8DQABPA8AATwRAAE8EgABPBMAATwVAAE8FgABPFUAATxXAAE8WQABPFsAATxeAAE8XwABPGAAATxhAAE8YgABPGQAATxmAAE8ZwABPGgAATxqAAE8awABPKoAATysAAE8rgABPLAAATyzAAE8tAABPLUAATy2AAE8twABPLkAATy7AAE8vAABPL0AATy/AAE8wAABPQsAAT0uAAE9TgABPW4AAT1wAAE9cgABPXQAAT12AAE9eAABPXkAAT16AAE9fQABPX4AAT2AAAE9gQABPYMAAT2GAAE9hwABPYgAAT2LAAE9jAABPZEAAT2eAAE9owABPaUAAT2nAAE9rAABPa8AAT2yAAE9tAABPdkAAT39AAE+JAABPkgAAT5LAAE+TQABPk8AAT5RAAE+UwABPlUAAT5WAAE+WQABPmYAAT53AAE+eQABPnsAAT59AAE+fwABPoEAAT6DAAE+hQABPocAAT6YAAE+mwABPp4AAT6hAAE+pAABPqcAAT6qAAE+rQABPrAAAT6yAAE+8QABPvMAAT71AAE+9wABPvoAAT77AAE+/AABPv0AAT7+AAE/AAABPwIAAT8DAAE/BAABPwYAAT8HAAE/RgABP0gAAT9KAAE/TAABP08AAT9QAAE/UQABP1IAAT9TAAE/VQABP1cAAT9YAAE/WQABP1sAAT9cAAE/mwABP50AAT+gAAE/ogABP6UA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AVEjAAFRJQABUSYAAVEnAAFRKQABUSoAAVE3AAFROAABUTkAAVE7AAFRegABUXwAAVF+AAFRgAABUYMAAVGEAAFRhQABUYYAAVGHAAFRiQABUYsAAVGMAAFRjQABUY8AAVGQAAFRzwABUdEAAVHUAAFR1gABUdkAAVHaAAFR2wABUdwAAVHdAAFR3wABUeEAAVHiAAFR4wABUeUAAVHmAAFR+QABUgYAAVIRAAFSFAABUhcAAVIaAAFSHQABUiAAAVIrAAFSLgABUjEAAVI0AAFSNwABUjoAAVI8AAFSVAABUmYAAVJxAAFSiQABUtQAAVL3AAFTFwABUzcAAVM5AAFTOwABUz0AAVM/AAFTQgABU0MAAVNEAAFTRwABU0gAAVNKAAFTSwABU00AAVNQAAFTUQABU1IAAVNVAAFTVgABU1sAAVNoAAFTbQABU28AAVNxAAFTdgABU3kAAVN8AAFTfgABU6MAAVPHAAFT7gABVBIAAVQVAAFUFwABVBkAAVQbAAFUHQABVB8AAVQgAAFUIwABVDAAAVRBAAFUQwABVEUAAVRHAAFUSQABVEsAAVRNAAFUTwABVFEAAVRiAAFUZQABVGgAAVRrAAFUbgABVHEAAVR0AAFUdwABVHoAAVR8AAFUuwABVL0AAVS/AAFUwQABVMQAAVTFAAFUxgABVMcAAVTIAAFUygABVMwAAVTNAAFUzgABVNAAAVTRAAFVEAABVRIAAVUUAAFVFgABVRkAAVUaAAFVGwABVRwAAVUdAAFVHwABVSEAAVUiAAFVIwABVSUAAVUmAAFVZQABVWcAAVVqAAFVbAABVW8AAVVwAAFVcQABVXIAAVVzAAFVdQABVXcAAVV4AAFVeQABVXsAAVV8AAFViQABVYoAAVWLAAFVjQABVcwAAVXOAAFV0AABVdIAAVXVAAFV1gABVdcAAVXYAAFV2QABVdsAAVXdAAFV3gABVd8AAVXhAAFV4gABViEAAVYjAAFWJQABVicAAVYqAAFWKwABViwAAVYtAAFWLgABVjAAAVYyAAFWMwABVjQAAVY2AAFWNwABVnYAAVZ4AAFWegABVnwAAVZ/AAFWgAABVoEAAVaCAAFWgwABVoUAAVaHAAFWiAABVokAAVaLAAFWjAABVssAAVbNAAFWzwABVtEAAVbUAAFW1QABVtYAAVbXAAFW2AABVtoAAVbcAAFW3QABVt4AAVbgAAFW4QABVyAAAVciAAFXJAABVyYAAVcpAAFXKgABVysAAVcsAAFXLQABVy8AAVcxAAFXMgABVzMAAVc1AAFXNgABV1sAAVd/AAFXpgABV8oAAVfNAAFXzwABV9EAAVfTAAFX1QABV9cAAVfYAAFX2wABV+gAAVf3AAFX+QABV/sAAVf9AAFX/wABWAEAAVgDAAFYBQABWBQAAVgXAAFYGgABWB0AAVggAAFYIwABWCYAAVgpAAFYKwABWGoAAVhsAAFYbgABWHAAAVhzAAFYdAABWHUAAVh2AAFYdwABWHkAAVh7AAFYfAABWH0AAVh/AAFYgAABWL8AAVjBAAFYwwABWMUAAVjIAAFYyQABWMoAAVjLAAFYzAABWM4AAVjQAAFY0QABWNIAAVjUAAFY1QABWRQAAVkWAAFZGAABWRoAAVkdAAFZHgABWR8AAVkgAAFZIQABWSMAAVklAAFZJgABWScAAVkpAAFZKgABWWkAAVlrAAFZbgABWXAAAVlzAAFZdAABWXUAAVl2AAFZdwABWXkAAVl7AAFZfAABWX0AAVl/AAFZgAABWb8AAVnBAAFZwwABWcUAAVnIAAFZyQABWcoAAVnLAAFZzAABWc4AAVnQAAFZ0QABWdIAAVnUAAFZ1QABWhQAAVoWAAFaGAABWhoAAVodAAFaHgABWh8AAVogAAFaIQABWiMAAVolAAFaJgABWicAAVopAAFaKgABWmkAAVprAAFabQABWm8AAVpyAAFacwABWnQAAVp1AAFadgABWngAAVp6AAFaewABWnwAAVp+AAFafwABWsoAAVrtAAFbDQABWy0AAVsvAAFbMQABWzMAAVs1AAFbOAABWzkAAVs6AAFbPQABWz4AAVtAAAFbQQABW0QAAVtHAAFbSAABW0kAAVtMAAFbTQABW1IAAVtfAAFbZAABW2YAAVtpAAFbbgABW3EAAVt0AAFbdgABW5sAAVu/AAFb5gABXAoAAVwNAAFcDwABXBEAAVwTAAFcFQABXBcAAVwYAAFcGwABXCgAAVw5AAFcOwABXD0AAVw/AAFcQQABXEMAAVxFAAFcRwABXEkAAVxaAAFcXQABXGAAAVxjAAFcZgABXGkAAVxsAAFcbwABXHIAAVx0AAFcswABXLUAAVy3AAFcuQABXLwAAVy9AAFcvgABXL8AAVzAAAFcwgABXMQAAVzFAAFcxgABXMgAAVzJAAFdCAABXQoAAV0MAAFdDgABXREAAV0SAAFdEwABXRQAAV0VAAFdFwABXRkAAV0aAAFdGwABXR0AAV0eAAFdXQABXV8AAV1iAAFdZAABXWcAAV1oAAFdaQABXWoAAV1rAAFdbQABXW8AAV1wAAFdcQABXXMAAV10AAFdgQABXYIAAV2DAAFdhQABXcQAAV3GAAFdyAABXcoAAV3NAAFdzgABXc8AAV3QAAFd0QABXdMAAV3VAAFd1gABXdcAAV3ZAAFd2gABXhkAAV4bAAFeHQABXh8AAV4iAAFeIwABXiQAAV4lAAFeJgABXigAAV4qAAFeKwABXiwAAV4uAAFeLwABXm4AAV5wAAFecgABXnQAAV53AAFeeAABXnkAAV56AAFeewABXn0AAV5/AAFegAABXoEAAV6DAAFehAABXsMAAV7FAAFexwABXskAAV7MAAFezQABXs4AAV7PAAFe0AABXtIAAV7UAAFe1QABXtYAAV7YAAFe2QABXxgAAV8aAAFfHAABXx4AAV8hAAFfIgABXyMAAV8kAAFfJQABXycAAV8pAAFfKgABXysAAV8tAAFfLgABX1MAAV93AAFfngABX8IAAV/FAAFfyAABX8oAAV/MAAFfzgABX9AAAV/RAAFf1AABX+EAAV/wAAFf8wABX/YAAV/5AAFf/AABX/8AAWACAAFgBQABYBQAAWAXAAFgGgABYB0AAWAgAAFgIwABYCYAAWApAAFgKwABYGoAAWBsAAFgbwABYHEAAWB0AAFgdQABYHYAAWB3AAFgeAABYHoAAWB9AAFgfgABYH8AAWCBAAFgggABYMEAAWDDAAFgxgABYMgAAWDLAAFgzAABYM0AAWDOAAFgzwABYNEAAWDUAAFg1QABYNYAAWDYAAFg2QABYRgAAWEaAAFhHQABYR8AAWEiAAFhIwABYSQAAWElAAFhJgABYSgAAWErAAFhLAABYS0AAWEvAAFhMAABYW8AAWFxAAFhcwABYXUAAWF4AAFheQABYXoAAWF7AAFhfAABYX4AAWGBAAFhggABYYMAAWGFAAFhhgABYcUAAWHHAAFhyQABYcsAAWHOAAFhzwABYdAAAWHRAAFh0gABYdQAAWHXAAFh2AABYdkAAWHbAAFh3AABYhsAAWIdAAFiHwABYiEAAWIkAAFiJQABYiYAAWInAAFiKAABYioAAWItAAFiLgABYi8AAWIxAAFiMgABYnEAAWJzAAFidgABYngAAWJ7AAFifAABYn0AAWJ+AAFifwABYoEAAWKEAAFihQABYoYAAWKIAAFiiQABYtQAAWL3AAFjFwABYzcAAWM5AAFjOwABYz0AAWM/AAFjQgABY0MAAWNEAAFjRwABY0gAAWNKAAFjSwABY04AAWNRAAFjUgABY1MAAWNWAAFjVwABY1wAAWNpAAFjbgABY3AAAWNzAAFjeAABY3sAAWN+AAFjgAABY6UAAWPJAAFj8AABZBQAAWQXAAFkGQABZBsAAWQdAAFkHwABZCEAAWQiAAFkJQABZDIAAWRDAAFkRQABZEcAAWRJAAFkSwABZE0AAWRPAAFkUQABZFMAAWRkAAFkZwABZGoAAWRtAAFkcAABZHMAAWR2AAFkeQABZHwAAWR+AAFkvQABZL8AAWTBAAFkwwABZMYAAWTHAAFkyAABZMkAAWTKAAFkzAABZM4AAWTPAAFk0AABZNIAAWTTAAFlEgABZRQAAWUWAAFlGAABZRsAAWUcAAFlHQABZR4AAWUfAAFlIQABZSMAAWUkAAFlJQABZScAAWUoAAFlZwABZWkAAWVsAAFlbgABZXEAAWVyAAFlcwABZXQAAWV1AAFldwABZXkAAWV6AAFlewABZX0AAWV+AAFliwABZYwAAWWNAAFljwABZc4AAWXQAAFl0gABZdQAAWXXAAFl2AABZdkAAWXaAAFl2wABZd0AAWXfAAFl4AABZeEAAWXjAAFl5AABZiMAAWYlAAFmJwABZikAAWYsAAFmLQABZi4AAWYvAAFmMAABZjIAAWY0AAFmNQABZjYAAWY4AAFmOQABZngAAWZ6AAFmfAABZn4AAWaBAAFmggABZoMAAWaEAAFmhQABZocAAWaJAAFmigABZosAAWaNAAFmjgABZs0AAWbPAAFm0QABZtMAAWbWAAFm1wABZtgAAWbZAAFm2gABZtwAAWbeAAFm3wABZuAAAWbiAAFm4wABZyIAAWckAAFnJgABZygAAWcrAAFnLAABZy0AAWcuAAFnLwABZzEAAWczAAFnNAABZzUAAWc3AAFnOAABZ10AAWeBAAFnqAABZ8wAAWfPAAFn0gABZ9QAAWfWAAFn2AABZ9oAAWfbAAFn3gABZ+sAAWf4AAFn+wABZ/4AAWgBAAFoBAABaAcAAWgKAAFoFwABaBoAAWgdAAFoIAABaCMAAWgmAAFoKQABaCsAAWhqAAFobAABaG4AAWhwAAFocwABaHQAAWh1AAFodgABaHcAAWh5AAFofAABaH0AAWh+AAFogAABaIEAAWjAAAFowgABaMQAAWjGAAFoyQABaMoAAWjLAAFozAABaM0AAWjPAAFo0gABaNMAAWjUAAFo1gABaNcAAWkWAAFpGAABaRsAAWkdAAFpIAABaSEAAWkiAAFpIwABaSQAAWkmAAFpKQABaSoAAWkrAAFpLQABaS4AAWltAAFpbwABaXIAAWl0AAFpdwABaXgAAWl5AAFpegABaXsAAWl9AAFpgAABaYEAAWmCAAFphAABaYUAAWnEAAFpxgABackAAWnLAAFpzgABac8AAWnQAAFp0QABadIAAWnUAAFp1wABadgAAWnZAAFp2wABadwAAWobAAFqHQABah8AAWohAAFqJAABaiUAAWomAAFqJwABaigAAWoqAAFqLQABai4AAWovAAFqMQABajIAAWp9AAFqoAABasAAAWrgAAFq4gABauQAAWrmAAFq6AABausAAWrsAAFq7QABavAAAWrxAAFq8wABavQAAWr2AAFq+QABavoAAWr7AAFq/gABav8AAWsIAAFrFQABaxoAAWscAAFrHgABayMAAWsmAAFrKQABaysAAWtQAAFrdAABa5sAAWu/AAFrwgABa8QAAWvGAAFryAABa8oAAWvMAAFrzQABa9AAAWvdAAFr7gABa/AAAWvyAAFr9AABa/YAAWv4AAFr+gABa/wAAWv+AAFsDwABbBIAAWwVAAFsGAABbBsAAWweAAFsIQABbCQAAWwnAAFsKQABbGgAAWxqAAFsbAABbG4AAWxxAAFscgABbHMAAWx0AAFsdQABbHcAAWx5AAFsegABbHsAAWx9AAFsfgABbL0AAWy/AAFswQABbMMAAWzGAAFsxwABbMgAAWzJAAFsygABbMwAAWzOAAFszwABbNAAAWzSAAFs0wABbRIAAW0UAAFtFwABbRkAAW0cAAFtHQABbR4AAW0fAAFtIAABbSIAAW0kAAFtJQABbSYAAW0oAAFtKQABbTYAAW03AAFtOAABbToAAW15AAFtewABbX0AAW1/AAFtggABbYMAAW2EAAFthQABbYYAAW2IAAFtigABbYsAAW2MAAFtjgABbY8AAW3OAAFt0AABbdIAAW3UAAFt1wABbdgAAW3ZAAFt2gABbdsAAW3dAAFt3wABbeAAAW3hAAFt4wABbeQAAW4jAAFuJQABbicAAW4pAAFuLAABbi0AAW4uAAFuLwABbjAAAW4yAAFuNAABbjUAAW42AAFuOAABbjkAAW54AAFuegABbnwAAW5+AAFugQABboIAAW6DAAFuhAABboUAAW6HAAFuiQABbooAAW6LAAFujQABbo4AAW7NAAFuzwABbtEAAW7TAAFu1gABbtcAAW7YAAFu2QABbtoAAW7cAAFu3gABbt8AAW7gAAFu4gABbuMAAW8IAAFvLAABb1MAAW93AAFvegABb3wAAW9+AAFvgAABb4IAAW+EAAFvhQABb4gAAW+VAAFvpAABb6YAAW+oAAFvqgABb6wAAW+uAAFvsAABb7IAAW/BAAFvxAABb8cAAW/KAAFvzQABb9AAAW/TAAFv1gABb9gAAXAXAAFwGQABcBsAAXAdAAFwIAABcCEAAXAiAAFwIwABcCQAAXAmAAFwKAABcCkAAXAqAAFwLAABcC0AAXBsAAFwbgABcHAAAXByAAFwdQABcHYAAXB3AAFweAABcHkAAXB7AAFwfQABcH4AAXB/AAFwgQABcIIAAXDBAAFwwwABcMUAAXDHAAFwygABcMsAAXDMAAFwzQABcM4AAXDQAAFw0gABcNMAAXDUAAFw1gABcNcAAXEWAAFxGAABcRoAAXEcAAFxHwABcSAAAXEhAAFxIgABcSMAAXElAAFxJwABcSgAAXEpAAFxKwABcSwAAXFrAAFxbQABcW8AAXFxAAFxdAABcXUAAXF2AAFxdwABcXgAAXF6AAFxfAABcX0AAXF+AAFxgAABcYEAAXHAAAFxwgABccQAAXHGAAFxyQABccoAAXHLAAFxzAABcc0AAXHPAAFx0QABcdIAAXHTAAFx1QABcdYAAXIVAAFyFwABchkAAXIbAAFyHgABch8AAXIgAAFyIQABciIAAXIkAAFyJgABcicAAXIoAAFyKgABcisAAXJ2AAFymQABcrkAAXLZAAFy2wABct0AAXLfAAFy4QABcuQAAXLlAAFy5gABcukAAXLqAAFy7AABcu0AAXLwAAFy8wABcvQAAXL1AAFy+AABcvkAAXL+AAFzCwABcxAAAXMSAAFzFQABcxoAAXMdAAFzIAABcyIAAXNHAAFzawABc5IAAXO2AAFzuQABc7sAAXO9AAFzvwABc8EAAXPDAAFzxAABc8cAAXPUAAFz5QABc+cAAXPpAAFz6wABc+0AAXPvAAFz8QABc/MAAXP1AAF0BgABdAkAAXQMAAF0DwABdBIAAXQVAAF0GAABdBsAAXQeAAF0IAABdF8AAXRhAAF0YwABdGUAAXRoAAF0aQABdGoAAXRrAAF0bAABdG4AAXRwAAF0cQABdHIAAXR0AAF0dQABdLQAAXS2AAF0uAABdLoAAXS9AAF0vgABdL8AAXTAAAF0wQABdMMAAXTFAAF0xgABdMcAAXTJAAF0ygABdQkAAXULAAF1DgABdRAAAXUTAAF1FAABdRUAAXUWAAF1FwABdRkAAXUbAAF1HAABdR0AAXUfAAF1IAABdS0AAXUuAAF1LwABdTEAAXVwAAF1cgABdXQAAXV2AAF1eQABdXoAAXV7AAF1fAABdX0AAXV/AAF1gQABdYIAAXWDAAF1hQABdYYAAXXFAAF1xwABdckAAXXLAAF1zgABdc8AAXXQAAF10QABddIAAXXUAAF11gABddcAAXXYAAF12gABddsAAXYaAAF2HAABdh4AAXYgAAF2IwABdiQAAXYlAAF2JgABdicAAXYpAAF2KwABdiwAAXYtAAF2LwABdjAAAXZvAAF2cQABdnMAAXZ1AAF2eAABdnkAAXZ6AAF2ewABdnwAAXZ+AAF2gAABdoEAAXaCAAF2hAABdoUAAXbEAAF2xgABdsgAAXbKAAF2zQABds4AAXbPAAF20AABdtEAAXbTAAF21QABdtYAAXbXAAF22QABdtoAAXb/AAF3IwABd0oAAXduAAF3cQABd3QAAXd2AAF3eAABd3oAAXd8AAF3fQABd4AAAXeNAAF3nAABd58AAXeiAAF3pQABd6gAAXerAAF3rgABd7EAAXfAAAF3wwABd8YAAXfJAAF3zAABd88AAXfSAAF31QABd9cAAXgWAAF4GAABeBsAAXgdAAF4IAABeCEAAXgiAAF4IwABeCQAAXgmAAF4KQABeCoAAXgrAAF4LQABeC4AAXhtAAF4bwABeHIAAXh0AAF4dwABeHgAAXh5AAF4egABeHsAAXh9AAF4gAABeIEAAXiCAAF4hAABeIUAAXjEAAF4xgABeMkAAXjLAAF4zgABeM8AAXjQAAF40QABeNIAAXjUAAF41wABeNgAAXjZAAF42wABeNwAAXkbAAF5HQABeSAAAXkiAAF5JQABeSYAAXknAAF5KAABeSkAAXkrAAF5LgABeS8AAXkwAAF5MgABeTMAAXl2AAF5mgABeb4AAXnhAAF6CAABeigAAXpPAAF6dgABepYAAXq6AAF63gABeuAAAXrjAAF65QABeucAAXrpAAF67AABeu4AAXrwAAF68gABevQAAXr2AAF6+AABevsAAXr+AAF6/wABewQAAXsRAAF7FAABexYAAXsZAAF7HAABex4AAXtDAAF7ZwABe44AAXuyAAF7tQABe7cAAXu5AAF7uwABe70AAXu/AAF7wAABe8MAAXvQAAF74wABe+UAAXvnAAF76QABe+sAAXvtAAF77wABe/EAAXvzAAF79QABfAgAAXwLAAF8DgABfBEAAXwUAAF8FwABfBoAAXwdAAF8IAABfCMAAXwlAAF8ZAABfGYAAXxpAAF8awABfG4AAXxvAAF8cAABfHEAAXxyAAF8dAABfHYAAXx3AAF8eAABfHoAAXx7AAF8hAABfIUAAXyHAAF8xgABfMgAAXzKAAF8zAABfM8AAXzQAAF80QABfNIAAXzTAAF81QABfNcAAXzYAAF82QABfNsAAXzcAAF9GwABfR0AAX0gAAF9IgABfSUAAX0mAAF9JwABfSgAAX0pAAF9KwABfS0AAX0uAAF9LwABfTEAAX0yAAF9OwABfTwAAX0+AAF9fQABfX8AAX2BAAF9gwABfYYAAX2HAAF9iAABfYkAAX2KAAF9jAABfY4AAX2PAAF9kAABfZIAAX2TAAF90gABfdQAAX3XAAF92QABfdwAAX3dAAF93gABfd8AAX3gAAF94gABfeQAAX3lAAF95gABfegAAX3pAAF98gABffMAAX31AAF+NAABfjYAAX44AAF+OgABfj0AAX4+AAF+PwABfkAAAX5BAAF+QwABfkUAAX5GAAF+RwABfkkAAX5KAAF+iQABfosAAX6OAAF+kAABfpMAAX6UAAF+lQABfpYAAX6XAAF+mQABfpsAAX6cAAF+nQABfp8AAX6gAAF+rQABfq4AAX6vAAF+sQABfvAAAX7yAAF+9AABfvYAAX75AAF++gABfvsAAX78AAF+/QABfv8AAX8BAAF/AgABfwMAAX8FAAF/BgABf0UAAX9HAAF/SgABf0wAAX9PAAF/UAABf1EAAX9SAAF/UwABf1UAAX9XAAF/WAABf1kAAX9bAAF/XAABf3gAAX+FAAF/jgABf5AAAX+TAAF/lgABf5kAAX+iAAF/pQABf6gAAX+rAAF/rgABf7AAAX/EAAF/ywABgBYAAYA5AAGAWQABgHkAAYB7AAGAfQABgH8AAYCBAAGAhAABgIUAAYCGAAGAiQABgIoAAYCMAAGAjQABgI8AAYCRAAGAkgABgJMAAYCWAAGAlwABgJwAAYCpAAGArgABgLAAAYCyAAGAtwABgLoAAYC9AAGAvwABgOQAAYEIAAGBLwABgVMAAYFWAAGBWAABgVoAAYFcAAGBXgABgWAAAYFhAAGBZAABgXEAAYGCAAGBhAABgYYAAYGIAAGBigABgYwAAYGOAAGBkAABgZIAAYGjAAGBpgABgakAAYGsAAGBrwABgbIAAYG1AAGBuAABgbsAAYG9AAGB/AABgf4AAYIAAAGCAgABggUAAYIGAAGCBwABgggAAYIJAAGCCwABgg0AAYIOAAGCDwABghEAAYISAAGCUQABglMAAYJVAAGCVwABgloAAYJbAAGCXAABgl0AAYJeAAGCYAABgmIAAYJjAAGCZAABgmYAAYJnAAGCpgABgqgAAYKrAAGCrQABgrAAAYKxAAGCsgABgrMAAYK0AAGCtgABgrgAAYK5AAGCugABgrwAAYK9AAGCygABgssAAYLMAAGCzgABgw0AAYMPAAGDEQABgxMAAYMWAAGDFwABgxgAAYMZAAGDGgABgxwAAYMeAAGDHwABgyAAAYMiAAGDIwABg2IAAYNkAAGDZgABg2gAAYNrAAGDbAABg20AAYNuAAGDbwABg3EAAYNzAAGDdAABg3UAAYN3AAGDeAABg7cAAYO5AAGDuwABg70AAYPAAAGDwQABg8IAAYPDAAGDxAABg8YAAYPIAAGDyQABg8oAAYPMAAGDzQABhAwAAYQOAAGEEAABhBIAAYQVAAGEFgABhBcAAYQYAAGEGQABhBsAAYQdAAGEHgABhB8AAYQhAAGEIgABhGEAAYRjAAGEZQABhGcAAYRqAAGEawABhGwAAYRtAAGEbgABhHAAAYRyAAGEcwABhHQAAYR2AAGEdwABhJwAAYTAAAGE5wABhQsAAYUOAAGFEAABhRIAAYUUAAGFFgABhRgAAYUZAAGFHAABhSkAAYU4AAGFOgABhTwAAYU+AAGFQAABhUIAAYVEAAGFRgABhVUAAYVYAAGFWwABhV4AAYVhAAGFZAABhWcAAYVqAAGFbAABhasAAYWtAAGFrwABhbEAAYW0AAGFtQABhbYAAYW3AAGFuAABhboAAYW8AAGFvQABhb4AAYXAAAGFwQABhgAAAYYCAAGGBAABhgYAAYYJAAGGCgABhgsAAYYMAAGGDQABhg8AAYYRAAGGEgABhhMAAYYVAAGGFgABhlUAAYZXAAGGWQABhlsAAYZeAAGGXwABhmAAAYZhAAGGYgABhmQAAYZmAAGGZwABhmgAAYZqAAGGawABhqoAAYasAAGGrgABhrAAAYazAAGGtAABhrUAAYa2AAGGtwABhrkAAYa7AAGGvAABhr0AAYa/AAGGwAABhv8AAYcBAAGHAwABhwUAAYcIAAGHCQABhwoAAYcLAAGHDAABhw4AAYcQAAGHEQABhxIAAYcUAAGHFQABh1QAAYdWAAGHWAABh1oAAYddAAGHXgABh18AAYdgAAGHYQABh2MAAYdlAAGHZgABh2cAAYdpAAGHagABh6kAAYerAAGHrQABh68AAYeyAAGHswABh7QAAYe1AAGHtgABh7gAAYe6AAGHuwABh7wAAYe+AAGHvwABiAoAAYgtAAGITQABiG0AAYhvAAGIcQABiHMAAYh1AAGIeAABiHkAAYh6AAGIfQABiH4AAYiAAAGIgQABiIQAAYiHAAGIiAABiIkAAYiMAAGIjQABiJIAAYifAAGIpAABiKYAAYipAAGIrgABiLEAAYi0AAGItgABiNsAAYj/AAGJJgABiUoAAYlNAAGJTwABiVEAAYlTAAGJVQABiVcAAYlYAAGJWwABiWgAAYl5AAGJewABiX0AAYl/AAGJgQABiYMAAYmFAAGJhwABiYkAAYmaAAGJnQABiaAAAYmjAAGJpgABiakAAYmsAAGJrwABibIAAYm0AAGJ8wABifUAAYn3AAGJ+QABifwAAYn9AAGJ/gABif8AAYoAAAGKAgABigQAAYoFAAGKBgABiggAAYoJAAGKSAABikoAAYpMAAGKTgABilEAAYpSAAGKUwABilQAAYpVAAGKVwABilkAAYpaAAGKWwABil0AAYpeAAGKnQABip8AAYqiAAGKpAABiqcAAYqoAAGKqQABiqoAAYqrAAGKrQABiq8AAYqwAAGKsQABirMAAYq0AAGKwQABisIAAYrDAAGKxQABiwQAAYsGAAGLCAABiwoAAYsNAAGLDgABiw8AAYsQAAGLEQABixMAAYsVAAGLFgABixcAAYsZAAGLGgABi1kAAYtbAAGLXQABi18AAYtiAAGLYwABi2QAAYtlAAGLZgABi2gAAYtqAAGLawABi2wAAYtuAAGLbwABi64AAYuwAAGLsgABi7QAAYu3AAGLuAABi7kAAYu6AAGLuwABi70AAYu/AAGLwAABi8EAAYvDAAGLxAABjAMAAYwFAAGMBwABjAkAAYwMAAGMDQABjA4AAYwPAAGMEAABjBIAAYwUAAGMFQABjBYAAYwYAAGMGQABjFgAAYxaAAGMXAABjF4AAYxhAAGMYgABjGMAAYxkAAGMZQABjGcAAYxpAAGMagABjGsAAYxtAAGMbgABjJMAAYy3AAGM3gABjQIAAY0FAAGNCAABjQoAAY0MAAGNDgABjRAAAY0RAAGNFAABjSEAAY0uAAGNMQABjTQAAY03AAGNOgABjT0AAY1AAAGNTQABjVAAAY1TAAGNVgABjVkAAY1cAAGNXwABjWEAAY2gAAGNogABjaQAAY2mAAGNqQABjaoAAY2rAAGNrAABja0AAY2vAAGNsgABjbMAAY20AAGNtgABjbcAAY32AAGN+AABjfoAAY38AAGN/wABjgAAAY4BAAGOAgABjgMAAY4FAAGOCAABjgkAAY4KAAGODAABjg0AAY5MAAGOTgABjlEAAY5TAAGOVgABjlcAAY5YAAGOWQABjloAAY5cAAGOXwABjmAAAY5hAAGOYwABjmQAAY6jAAGOpQABjqgAAY6qAAGOrQABjq4AAY6vAAGOsAABjrEAAY6zAAGOtgABjrcAAY64AAGOugABjrsAAY76AAGO/AABjv8AAY8BAAGPBAABjwUAAY8GAAGPBwABjwgAAY8KAAGPDQABjw4AAY8PAAGPEQABjxIAAY9RAAGPUwABj1UAAY9XAAGPWgABj1sAAY9cAAGPXQABj14AAY9gAAGPYwABj2QAAY9lAAGPZwABj2gAAY+zAAGP1gABj/YAAZAWAAGQGAABkBoAAZAcAAGQHgABkCEAAZAiAAGQIwABkCYAAZAnAAGQKQABkCoAAZAsAAGQLwABkDAAAZAxAAGQNAABkDUAAZA+AAGQSwABkFAAAZBSAAGQVAABkFkAAZBcAAGQXwABkGEAAZCGAAGQqgABkNEAAZD1AAGQ+AABkPoAAZD8AAGQ/gABkQAAAZECAAGRAwABkQYAAZETAAGRJAABkSYAAZEoAAGRKgABkSwAAZEuAAGRMAABkTIAAZE0AAGRRQABkUgAAZFLAAGRTgABkVEAAZFUAAGRVwABkVoAAZFdAAGRXwABkZ4AAZGgAAGRogABkaQAAZGnAAGRqAABkakAAZGqAAGRqwABka0AAZGvAAGRsAABkbEAAZGzAAGRtAABkfMAAZH1AAGR9wABkfkAAZH8AAGR/QABkf4AAZH/AAGSAAABkgIAAZIEAAGSBQABkgYAAZIIAAGSCQABkkgAAZJKAAGSTQABkk8AAZJSAAGSUwABklQAAZJVAAGSVgABklgAAZJaAAGSWwABklwAAZJeAAGSXwABkmwAAZJtAAGSbgABknAAAZKvAAGSsQABkrMAAZK1AAGSuAABkrkAAZK6AAGSuwABkrwAAZK+AAGSwAABksEAAZLCAAGSxAABksUAAZMEAAGTBgABkwgAAZMKAAGTDQABkw4AAZMPAAGTEAABkxEAAZMTAAGTFQABkxYAAZMXAAGTGQABkxoAAZNZAAGTWwABk10AAZNfAAGTYgABk2MAAZNkAAGTZQABk2YAAZNoAAGTagABk2sAAZNsAAGTbgABk28AAZOuAAGTsAABk7IAAZO0AAGTtwABk7gAAZO5AAGTugABk7sAAZO9AAGTvwABk8AAAZPBAAGTwwABk8QAAZQDAAGUBQABlAcAAZQJAAGUDAABlA0AAZQOAAGUDwABlBAAAZQSAAGUFAABlBUAAZQWAAGUGAABlBkAAZQ+AAGUYgABlIkAAZStAAGUsAABlLIAAZS0AAGUtgABlLgAAZS6AAGUuwABlL4AAZTLAAGU2gABlNwAAZTeAAGU4AABlOIAAZTkAAGU5gABlOgAAZT3AAGU+gABlP0AAZUAAAGVAwABlQYAAZUJAAGVDAABlQ4AAZVNAAGVTwABlVEAAZVTAAGVVgABlVcAAZVYAAGVWQABlVoAAZVcAAGVXgABlV8AAZVgAAGVYgABlWMAAZWiAAGVpAABlaYAAZWoAAGVqwABlawAAZWtAAGVrgABla8AAZWxAAGVswABlbQAAZW1AAGVtwABlbgAAZX3AAGV+QABlfsAAZX9AAGWAAABlgEAAZYCAAGWAwABlgQAAZYGAAGWCAABlgkAAZYKAAGWDAABlg0AAZZMAAGWTgABllAAAZZSAAGWVQABllYAAZZXAAGWWAABllkAAZZbAAGWXQABll4AAZZfAAGWYQABlmIAAZahAAGWowABlqUAAZanAAGWqgABlqsAAZasAAGWrQABlq4AAZawAAGWsgABlrMAAZa0AAGWtgABlrcAAZb2AAGW+AABlvoAAZb8AAGW/wABlwAAAZcBAAGXAgABlwMAAZcFAAGXBwABlwgAAZcJAAGXCwABlwwAAZdLAAGXTQABl08AAZdRAAGXVAABl1UAAZdWAAGXVwABl1gAAZdaAAGXXAABl10AAZdeAAGXYAABl2EAAZesAAGXzwABl+8AAZgPAAGYEQABmBMAAZgVAAGYFwABmBoAAZgbAAGYHAABmB8AAZggAAGYIgABmCMAAZgmAAGYKQABmCoAAZgrAAGYLgABmC8AAZg0AAGYQQABmEYAAZhIAAGYSwABmFAAAZhTAAGYVgABmFgAAZh9AAGYoQABmMgAAZjsAAGY7wABmPEAAZjzAAGY9QABmPcAAZj5AAGY+gABmP0AAZkKAAGZGwABmR0AAZkfAAGZIQABmSMAAZklAAGZJwABmSkAAZkrAAGZPAABmT8AAZlCAAGZRQABmUgAAZlLAAGZTgABmVEAAZlUAAGZVgABmZUAAZmXAAGZmQABmZsAAZmeAAGZnwABmaAAAZmhAAGZogABmaQAAZmmAAGZpwABmagAAZmqAAGZqwABmeoAAZnsAAGZ7gABmfAAAZnzAAGZ9AABmfUAAZn2AAGZ9wABmfkAAZn7AAGZ/AABmf0AAZn/AAGaAAABmj8AAZpBAAGaRAABmkYAAZpJAAGaSgABmksAAZpMAAGaTQABmk8AAZpRAAGaUgABmlMAAZpVAAGaVgABmmMAAZpkAAGaZQABmmcAAZqmAAGaqAABmqoAAZqsAAGarwABmrAAAZqxAAGasgABmrMAAZq1AAGatwABmrgAAZq5AAGauwABmrwAAZr7AAGa/QABmv8AAZsBAAGbBAABmwUAAZsGAAGbBwABmwgAAZsKAAGbDAABmw0AAZsOAAGbEAABmxEAAZtQAAGbUgABm1QAAZtWAAGbWQABm1oAAZtbAAGbXAABm10AAZtfAAGbYQABm2IAAZtjAAGbZQABm2YAAZulAAGbpwABm6kAAZurAAGbrgABm68AAZuwAAGbsQABm7IAAZu0AAGbtgABm7cAAZu4AAGbugABm7sAAZv6AAGb/AABm/4AAZwAAAGcAwABnAQAAZwFAAGcBgABnAcAAZwJAAGcCwABnAwAAZwNAAGcDwABnBAAAZw1AAGcWQABnIAAAZykAAGcpwABnKoAAZysAAGcrgABnLAAAZyyAAGcswABnLYAAZzDAAGc0gABnNUAAZzYAAGc2wABnN4AAZzhAAGc5AABnOcAAZz2AAGc+QABnPwAAZz/AAGdAgABnQUAAZ0IAAGdCwABnQ0AAZ1MAAGdTgABnVEAAZ1TAAGdVgABnVcAAZ1YAAGdWQABnVoAAZ1cAAGdXwABnWAAAZ1hAAGdYwABnWQAAZ2jAAGdpQABnagAAZ2qAAGdrQABna4AAZ2vAAGdsAABnbEAAZ2zAAGdtgABnbcAAZ24AAGdugABnbsAAZ36AAGd/AABnf8AAZ4BAAGeBAABngUAAZ4GAAGeBwABnggAAZ4KAAGeDQABng4AAZ4PAAGeEQABnhIAAZ5RAAGeUwABnlYAAZ5YAAGeWwABnlwAAZ5dAAGeXgABnl8AAZ5hAAGeZAABnmUAAZ5mAAGeaAABnmkAAZ6oAAGeqgABnqwAAZ6uAAGesQABnrIAAZ6zAAGetAABnrUAAZ63AAGeugABnrsAAZ68AAGevgABnr8AAZ7+AAGfAAABnwIAAZ8EAAGfBwABnwgAAZ8JAAGfCgABnwsAAZ8NAAGfEAABnxEAAZ8SAAGfFAABnxUAAZ9UAAGfVgABn1kAAZ9bAAGfXgABn18AAZ9gAAGfYQABn2IAAZ9kAAGfZwABn2gAAZ9pAAGfawABn2wAAZ91AAGfdgABn3gAAZ+3AAGfuQABn7sAAZ+9AAGfwAABn8EAAZ/CAAGfwwABn8QAAZ/GAAGfyQABn8oAAZ/LAAGfzQABn84AAaANAAGgDwABoBEAAaATAAGgFgABoBcAAaAYAAGgGQABoBoAAaAcAAGgHwABoCAAAaAhAAGgIwABoCQAAaBjAAGgZQABoGgAAaBqAAGgbQABoG4AAaBvAAGgcAABoHEAAaBzAAGgdgABoHcAAaB4AAGgegABoHsAAaCEAAGghQABoIcAAaDGAAGgyAABoMoAAaDMAAGgzwABoNAAAaDRAAGg0gABoNMAAaDVAAGg2AABoNkAAaDaAAGg3AABoN0AAaEcAAGhHgABoSAAAaEiAAGhJQABoSYAAaEnAAGhKAABoSkAAaErAAGhLgABoS8AAaEwAAGhMgABoTMAAaFyAAGhdAABoXcAAaF5AAGhfAABoX0AAaF+AAGhfwABoYAAAaGCAAGhhQABoYYAAaGHAAGhiQABoYoAAaHVAAGh+AABohgAAaI4AAGiOgABojwAAaI+AAGiQAABokIAAaJDAAGiRAABokcAAaJIAAGiSgABoksAAaJNAAGiUAABolEAAaJSAAGiVQABolYAAaJbAAGiaAABom0AAaJvAAGicQABonYAAaJ5AAGifAABon4AAaKjAAGixwABou4AAaMSAAGjFQABoxcAAaMZAAGjGwABox0AAaMfAAGjIAABoyMAAaMwAAGjQQABo0MAAaNFAAGjRwABo0kAAaNLAAGjTQABo08AAaNRAAGjYgABo2UAAaNoAAGjawABo24AAaNxAAGjdAABo3cAAaN6AAGjfAABo7sAAaO9AAGjvwABo8EAAaPEAAGjxQABo8YAAaPHAAGjyAABo8oAAaPMAAGjzQABo84AAaPQAAGj0QABpBAAAaQSAAGkFAABpBYAAaQZAAGkGgABpBsAAaQcAAGkHQABpB8AAaQhAAGkIgABpCMAAaQlAAGkJgABpGUAAaRnAAGkagABpGwAAaRvAAGkcAABpHEAAaRyAAGkcwABpHUAAaR3AAGkeAABpHkAAaR7AAGkfAABpIkAAaSKAAGkiwABpI0AAaTMAAGkzgABpNAAAaTSAAGk1QABpNYAAaTXAAGk2AABpNkAAaTbAAGk3QABpN4AAaTfAAGk4QABpOIAAaUhAAGlIwABpSUAAaUnAAGlKgABpSsAAaUsAAGlLQABpS4AAaUwAAGlMgABpTMAAaU0AAGlNgABpTcAAaV2AAGleAABpXoAAaV8AAGlfwABpYAAAaWBAAGlggABpYMAAaWFAAGlhwABpYgAAaWJAAGliwABpYwAAaXLAAGlzQABpc8AAaXRAAGl1AABpdUAAaXWAAGl1wABpdgAAaXaAAGl3AABpd0AAaXeAAGl4AABpeEAAaYgAAGmIgABpiQAAaYmAAGmKQABpioAAaYrAAGmLAABpi0AAaYvAAGmMQABpjIAAaYzAAGmNQABpjYAAaZbAAGmfwABpqYAAabKAAGmzQABps8AAabRAAGm0wABptUAAabXAAGm2AABptsAAaboAAGm9wABpvkAAab7AAGm/QABpv8AAacBAAGnAwABpwUAAacUAAGnFwABpxoAAacdAAGnIAABpyMAAacmAAGnKQABpysAAadqAAGnbAABp24AAadwAAGncwABp3QAAad1AAGndgABp3cAAad5AAGnewABp3wAAad9AAGnfwABp4AAAae/AAGnwQABp8MAAafFAAGnyAABp8kAAafKAAGnywABp8wAAafOAAGn0AABp9EAAafSAAGn1AABp9UAAagUAAGoFgABqBgAAagaAAGoHQABqB4AAagfAAGoIAABqCEAAagjAAGoJQABqCYAAagnAAGoKQABqCoAAahpAAGoawABqG4AAahwAAGocwABqHQAAah1AAGodgABqHcAAah5AAGoewABqHwAAah9AAGofwABqIAAAai/AAGowQABqMMAAajFAAGoyAABqMkAAajKAAGoywABqMwAAajOAAGo0AABqNEAAajSAAGo1AABqNUAAakUAAGpFgABqRgAAakaAAGpHQABqR4AAakfAAGpIAABqSEAAakjAAGpJQABqSYAAaknAAGpKQABqSoAAalpAAGpawABqW0AAalvAAGpcgABqXMAAal0AAGpdQABqXYAAal4AAGpegABqXsAAal8AAGpfgABqX8AAanKAAGp7QABqg0AAaotAAGqLwABqjEAAaozAAGqNQABqjcAAao4AAGqOQABqjwAAao9AAGqPwABqkAAAapDAAGqRgABqkcAAapIAAGqSwABqkwAAapRAAGqXgABqmMAAaplAAGqaAABqm0AAapwAAGqcwABqnUAAaqaAAGqvgABquUAAasJAAGrDAABqw4AAasQAAGrEgABqxQAAasWAAGrFwABqxoAAasnAAGrOAABqzoAAas8AAGrPgABq0AAAatCAAGrRAABq0YAAatIAAGrWQABq1wAAatfAAGrYgABq2UAAatoAAGrawABq24AAatxAAGrcwABq7IAAau0AAGrtgABq7gAAau7AAGrvAABq70AAau+AAGrvwABq8EAAavDAAGrxAABq8UAAavHAAGryAABrAcAAawJAAGsCwABrA0AAawQAAGsEQABrBIAAawTAAGsFAABrBYAAawYAAGsGQABrBoAAawcAAGsHQABrFwAAaxeAAGsYQABrGMAAaxmAAGsZwABrGgAAaxpAAGsagABrGwAAaxuAAGsbwABrHAAAaxyAAGscwABrIAAAayBAAGsggABrIQAAazDAAGsxQABrMcAAazJAAGszAABrM0AAazOAAGszwABrNAAAazSAAGs1AABrNUAAazWAAGs2AABrNkAAa0YAAGtGgABrRwAAa0eAAGtIQABrSIAAa0jAAGtJAABrSUAAa0nAAGtKQABrSoAAa0rAAGtLQABrS4AAa1tAAGtbwABrXEAAa1zAAGtdgABrXcAAa14AAGteQABrXoAAa18AAGtfgABrX8AAa2AAAGtggABrYMAAa3CAAGtxAABrcYAAa3IAAGtywABrcwAAa3NAAGtzgABrc8AAa3RAAGt0wABrdQAAa3VAAGt1wABrdgAAa4XAAGuGQABrhsAAa4dAAGuIAABriEAAa4iAAGuIwABriQAAa4mAAGuKAABrikAAa4qAAGuLAABri0AAa5SAAGudgABrp0AAa7BAAGuxAABrscAAa7JAAGuywABrs0AAa7PAAGu0AABrtMAAa7gAAGu7wABrvIAAa71AAGu+AABrvsAAa7+AAGvAQABrwQAAa8TAAGvFgABrxkAAa8cAAGvHwABryIAAa8lAAGvKAABryoAAa9pAAGvawABr24AAa9wAAGvcwABr3QAAa91AAGvdgABr3cAAa95AAGvfAABr30AAa9+AAGvgAABr4EAAa/AAAGvwgABr8UAAa/HAAGvygABr8sAAa/MAAGvzQABr84AAa/QAAGv0wABr9QAAa/VAAGv1wABr9gAAbAXAAGwGQABsBwAAbAeAAGwIQABsCIAAbAjAAGwJAABsCUAAbAnAAGwKgABsCsAAbAsAAGwLgABsC8AAbBuAAGwcAABsHMAAbB1AAGweAABsHkAAbB6AAGwewABsHwAAbB+AAGwgQABsIIAAbCDAAGwhQABsIYAAbDJAAGw7QABsREAAbE0AAGxWwABsXsAAbGiAAGxyQABsekAAbINAAGyMQABsjMAAbI2AAGyOAABsjoAAbI8AAGyPwABskEAAbJDAAGyRQABskcAAbJJAAGySwABsk4AAbJRAAGyUgABslcAAbJkAAGyZwABsmkAAbJsAAGybwABsnEAAbKWAAGyugABsuEAAbMFAAGzCAABswoAAbMMAAGzDgABsxAAAbMSAAGzEwABsxYAAbMjAAGzNgABszgAAbM6AAGzPAABsz4AAbNAAAGzQgABs0QAAbNGAAGzSAABs1sAAbNeAAGzYQABs2QAAbNnAAGzagABs20AAbNwAAGzcwABs3YAAbN4AAGztwABs7kAAbO8AAGzvgABs8EAAbPCAAGzwwABs8QAAbPFAAGzxwABs8kAAbPKAAGzywABs80AAbPOAAGz1wABs9gAAbPaAAG0GQABtBsAAbQdAAG0HwABtCIAAbQjAAG0JAABtCUAAbQmAAG0KAABtCoAAbQrAAG0LAABtC4AAbQvAAG0bgABtHAAAbRzAAG0dQABtHgAAbR5AAG0egABtHsAAbR8AAG0fgABtIAAAbSBAAG0ggABtIQAAbSFAAG0jgABtI8AAbSRAAG00AABtNIAAbTUAAG01gABtNkAAbTaAAG02wABtNwAAbTdAAG03wABtOEAAbTiAAG04wABtOUAAbTmAAG1JQABtScAAbUqAAG1LAABtS8AAbUwAAG1MQABtTIAAbUzAAG1NQABtTcAAbU4AAG1OQABtTsAAbU8AAG1RQABtUYAAbVIAAG1hwABtYkAAbWLAAG1jQABtZAAAbWRAAG1kgABtZMAAbWUAAG1lgABtZgAAbWZAAG1mgABtZwAAbWdAAG13AABtd4AAbXhAAG14wABteYAAbXnAAG16AABtekAAbXqAAG17AABte4AAbXvAAG18AABtfIAAbXzAAG2AAABtgEAAbYCAAG2BAABtkMAAbZFAAG2RwABtkkAAbZMAAG2TQABtk4AAbZPAAG2UAABtlIAAbZUAAG2VQABtlYAAbZYAAG2WQABtpgAAbaaAAG2nQABtp8AAbaiAAG2owABtqQAAbalAAG2pgABtqgAAbaqAAG2qwABtqwAAbauAAG2rwABtr0AAbbKAAG20wABttYAAbbZAAG23AABtt8AAbboAAG26wABtu4AAbbxAAG29AABtvYAAbb7AAG3RgABt2kAAbeJAAG3qQABt6sAAbetAAG3rwABt7EAAbe0AAG3tQABt7YAAbe5AAG3ugABt7wAAbe9AAG3wAABt8MAAbfEAAG3xQABt8gAAbfJAAG3zgABt9sAAbfgAAG34gABt+UAAbfqAAG37QABt/AAAbfyAAG4FwABuDsAAbhiAAG4hgABuIkAAbiLAAG4jQABuI8AAbiRAAG4kwABuJQAAbiXAAG4pAABuLUAAbi3AAG4uQABuLsAAbi9AAG4vwABuMEAAbjDAAG4xQABuNYAAbjZAAG43AABuN8AAbjiAAG45QABuOgAAbjrAAG47gABuPAAAbkvAAG5MQABuTMAAbk1AAG5OAABuTkAAbk6AAG5OwABuTwAAbk+AAG5QAABuUEAAblCAAG5RAABuUUAAbmEAAG5hgABuYgAAbmKAAG5jQABuY4AAbmPAAG5kAABuZEAAbmTAAG5lQABuZYAAbmXAAG5mQABuZoAAbnZAAG52wABud4AAbngAAG54wABueQAAbnlAAG55gABuecAAbnpAAG56wABuewAAbntAAG57wABufAAAbn9AAG5/gABuf8AAboBAAG6QAABukIAAbpEAAG6RgABukkAAbpKAAG6SwABukwAAbpNAAG6TwABulEAAbpSAAG6UwABulUAAbpWAAG6lQABupcAAbqZAAG6mwABup4AAbqfAAG6oAABuqEAAbqiAAG6pAABuqYAAbqnAAG6qAABuqoAAbqrAAG66gABuuwAAbruAAG68AABuvMAAbr0AAG69QABuvYAAbr3AAG6+QABuvsAAbr8AAG6/QABuv8AAbsAAAG7PwABu0EAAbtDAAG7RQABu0gAAbtJAAG7SgABu0sAAbtMAAG7TgABu1AAAbtRAAG7UgABu1QAAbtVAAG7lAABu5YAAbuYAAG7mgABu50AAbueAAG7nwABu6AAAbuhAAG7owABu6UAAbumAAG7pwABu6kAAbuqAAG7zwABu/MAAbwaAAG8PgABvEEAAbxEAAG8RgABvEgAAbxKAAG8TAABvE0AAbxQAAG8XQABvGwAAbxvAAG8cgABvHUAAbx4AAG8ewABvH4AAbyBAAG8kAABvJMAAbyWAAG8mQABvJwAAbyfAAG8ogABvKUAAbynAAG85gABvOgAAbzrAAG87QABvPAAAbzxAAG88gABvPMAAbz0AAG89gABvPkAAbz6AAG8+wABvP0AAbz+AAG9PQABvT8AAb1CAAG9RAABvUcAAb1IAAG9SQABvUoAAb1LAAG9TQABvVAAAb1RAAG9UgABvVQAAb1VAAG9lAABvZYAAb2ZAAG9mwABvZ4AAb2fAAG9oAABvaEAAb2iAAG9pAABvacAAb2oAAG9qQABvasAAb2sAAG96wABve0AAb3vAAG98QABvfQAAb31AAG99gABvfcAAb34AAG9+gABvf0AAb3+AAG9/wABvgEAAb4CAAG+QQABvkMAAb5FAAG+RwABvkoAAb5LAAG+TAABvk0AAb5OAAG+UAABvlMAAb5UAAG+VQABvlcAAb5YAAG+lwABvpkAAb6bAAG+nQABvqAAAb6hAAG+ogABvqMAAb6kAAG+pgABvqkAAb6qAAG+qwABvq0AAb6uAAG+7QABvu8AAb7yAAG+9AABvvcAAb74AAG++QABvvoAAb77AAG+/QABvwAAAb8BAAG/AgABvwQAAb8FAAG/UAABv3MAAb+TAAG/swABv7UAAb+3AAG/uQABv7sAAb++AAG/vwABv8AAAb/DAAG/xAABv8YAAb/HAAG/yQABv8wAAb/NAAG/zgABv9EAAb/SAAG/1wABv+QAAb/pAAG/6wABv+0AAb/yAAG/9QABv/gAAb/6AAHAHwABwEMAAcBqAAHAjgABwJEAAcCTAAHAlQABwJcAAcCZAAHAmwABwJwAAcCfAAHArAABwL0AAcC/AAHAwQABwMMAAcDFAAHAxwABwMkAAcDLAAHAzQABwN4AAcDhAAHA5AABwOcAAcDqAAHA7QABwPAAAcDzAAHA9gABwPgAAcE3AAHBOQABwTsAAcE9AAHBQAABwUEAAcFCAAHBQwABwUQAAcFGAAHBSAABwUkAAcFKAAHBTAABwU0AAcGMAAHBjgABwZAAAcGSAAHBlQABwZYAAcGXAAHBmAABwZkAAcGbAAHBnQABwZ4AAcGfAAHBoQABwaIAAcHhAAHB4wABweYAAcHoAAHB6wABwewAAcHtAAHB7gABwe8AAcHxAAHB8wABwfQAAcH1AAHB9wABwfgAAcIFAAHCBgABwgcAAcIJAAHCSAABwkoAAcJMAAHCTgABwlEAAcJSAAHCUwABwlQAAcJVAAHCVwABwlkAAcJaAAHCWwABwl0AAcJeAAHCnQABwp8AAcKhAAHCowABwqYAAcKnAAHCqAABwqkAAcKqAAHCrAABwq4AAcKvAAHCsAABwrIAAcKzAAHC8gABwvQAAcL2AAHC+AABwvsAAcL8AAHC/QABwv4AAcL/AAHDAQABwwMAAcMEAAHDBQABwwcAAcMIAAHDRwABw0kAAcNLAAHDTQABw1AAAcNRAAHDUgABw1MAAcNUAAHDVgABw1gAAcNZAAHDWgABw1wAAcNdAAHDnAABw54AAcOgAAHDogABw6UAAcOmAAHDpwABw6gAAcOpAAHDqwABw60AAcOuAAHDrwABw7EAAcOyAAHD1wABw/sAAcQiAAHERgABxEkAAcRLAAHETQABxE8AAcRRAAHEUwABxFQAAcRXAAHEZAABxHMAAcR1AAHEdwABxHkAAcR7AAHEfQABxH8AAcSBAAHEkAABxJMAAcSWAAHEmQABxJwAAcSfAAHEogABxKUAAcSnAAHE5gABxOgAAcTqAAHE7AABxO8AAcTwAAHE8QABxPIAAcTzAAHE9QABxPcAAcT4AAHE+QABxPsAAcT8AAHFOwABxT0AAcU/AAHFQQABxUQAAcVFAAHFRgABxUcAAcVIAAHFSgABxUwAAcVNAAHFTgABxVAAAcVRAAHFkAABxZIAAcWUAAHFlgABxZkAAcWaAAHFmwABxZwAAcWdAAHFnwABxaEAAcWiAAHFowABxaUAAcWmAAHF5QABxecAAcXqAAHF7AABxe8AAcXwAAHF8QABxfIAAcXzAAHF9QABxfcAAcX4AAHF+QABxfsAAcX8AAHGOwABxj0AAcY/AAHGQQABxkQAAcZFAAHGRgABxkcAAcZIAAHGSgABxkwAAcZNAAHGTgABxlAAAcZRAAHGkAABxpIAAcaVAAHGlwABxpoAAcabAAHGnAABxp0AAcaeAAHGoAABxqIAAcajAAHGpAABxqYAAcanAAHGwwABxwIAAccEAAHHBgABxwgAAccLAAHHDAABxw0AAccOAAHHDwABxxEAAccTAAHHFAABxxUAAccXAAHHGAABx2MAAceGAAHHpgABx8YAAcfIAAHHygABx8wAAcfOAAHH0QABx9IAAcfTAAHH1gABx9cAAcfZAAHH2gABx9wAAcffAAHH4AABx+EAAcfkAAHH5QABx+4AAcf7AAHIAAAByAIAAcgEAAHICQAByAwAAcgPAAHIEQAByDYAAchaAAHIgQAByKUAAcioAAHIqgAByKwAAciuAAHIsAAByLIAAcizAAHItgAByMMAAcjUAAHI1gAByNgAAcjaAAHI3AAByN4AAcjgAAHI4gAByOQAAcj1AAHI+AAByPsAAcj+AAHJAQAByQQAAckHAAHJCgAByQ0AAckPAAHJTgAByVAAAclSAAHJVAAByVcAAclYAAHJWQAByVoAAclbAAHJXQAByV8AAclgAAHJYQAByWMAAclkAAHJowAByaUAAcmnAAHJqQAByawAAcmtAAHJrgABya8AAcmwAAHJsgABybQAAcm1AAHJtgABybgAAcm5AAHJ+AAByfoAAcn9AAHJ/wABygIAAcoDAAHKBAABygUAAcoGAAHKCAABygoAAcoLAAHKDAAByg4AAcoPAAHKHAAByh0AAcoeAAHKIAAByl8AAcphAAHKYwABymUAAcpoAAHKaQABymoAAcprAAHKbAABym4AAcpwAAHKcQABynIAAcp0AAHKdQAByrQAAcq2AAHKuAAByroAAcq9AAHKvgAByr8AAcrAAAHKwQABysMAAcrFAAHKxgAByscAAcrJAAHKygABywkAAcsLAAHLDQAByw8AAcsSAAHLEwAByxQAAcsVAAHLFgAByxgAAcsaAAHLGwAByxwAAcseAAHLHwABy14AActgAAHLYgABy2QAActnAAHLaAABy2kAActqAAHLawABy20AActvAAHLcAABy3EAActzAAHLdAABy7MAAcu1AAHLtwABy7kAAcu8AAHLvQABy74AAcu/AAHLwAABy8IAAcvEAAHLxQABy8YAAcvIAAHLyQABy+4AAcwSAAHMOQABzF0AAcxgAAHMYgABzGQAAcxmAAHMaAABzGoAAcxrAAHMbgABzHsAAcyKAAHMjAABzI4AAcyQAAHMkgABzJQAAcyWAAHMmAABzKcAAcyqAAHMrQABzLAAAcyzAAHMtgABzLkAAcy8AAHMvgABzP0AAcz/AAHNAQABzQMAAc0GAAHNBwABzQgAAc0JAAHNCgABzQwAAc0OAAHNDwABzRAAAc0SAAHNEwABzVIAAc1UAAHNVgABzVgAAc1bAAHNXAABzV0AAc1eAAHNXwABzWEAAc1jAAHNZAABzWUAAc1nAAHNaAABzacAAc2pAAHNqwABza0AAc2wAAHNsQABzbIAAc2zAAHNtAABzbYAAc24AAHNuQABzboAAc28AAHNvQABzfwAAc3+AAHOAAABzgIAAc4FAAHOBgABzgcAAc4IAAHOCQABzgsAAc4NAAHODgABzg8AAc4RAAHOEgABzlEAAc5TAAHOVQABzlcAAc5aAAHOWwABzlwAAc5dAAHOXgABzmAAAc5iAAHOYwABzmQAAc5mAAHOZwABzqYAAc6oAAHOqgABzqwAAc6vAAHOsAABzrEAAc6yAAHOswABzrUAAc63AAHOuAABzrkAAc67AAHOvAABzvsAAc79AAHO/wABzwEAAc8EAAHPBQABzwYAAc8HAAHPCAABzwoAAc8MAAHPDQABzw4AAc8QAAHPEQABz1wAAc9/AAHPnwABz78AAc/BAAHPwwABz8UAAc/HAAHPygABz8sAAc/MAAHPzwABz9AAAc/SAAHP0wABz9UAAc/YAAHP2QABz9oAAc/dAAHP3gABz+MAAc/wAAHP9QABz/cAAc/5AAHP/gAB0AEAAdAEAAHQBgAB0CsAAdBPAAHQdgAB0JoAAdCdAAHQnwAB0KEAAdCjAAHQpQAB0KcAAdCoAAHQqwAB0LgAAdDJAAHQywAB0M0AAdDPAAHQ0QAB0NMAAdDVAAHQ1wAB0NkAAdDqAAHQ7QAB0PAAAdDzAAHQ9gAB0PkAAdD8AAHQ/wAB0QIAAdEEAAHRQwAB0UUAAdFHAAHRSQAB0UwAAdFNAAHRTgAB0U8AAdFQAAHRUgAB0VQAAdFVAAHRVgAB0VgAAdFZAAHRmAAB0ZoAAdGcAAHRngAB0aEAAdGiAAHRowAB0aQAAdGlAAHRpwAB0akAAdGqAAHRqwAB0a0AAdGuAAHR7QAB0e8AAdHyAAHR9AAB0fcAAdH4AAHR+QAB0foAAdH7AAHR/QAB0f8AAdIAAAHSAQAB0gMAAdIEAAHSEQAB0hIAAdITAAHSFQAB0lQAAdJWAAHSWAAB0loAAdJdAAHSXgAB0l8AAdJgAAHSYQAB0mMAAdJlAAHSZgAB0mcAAdJpAAHSagAB0qkAAdKrAAHSrQAB0q8AAdKyAAHSswAB0rQAAdK1AAHStgAB0rgAAdK6AAHSuwAB0rwAAdK+AAHSvwAB0v4AAdMAAAHTAgAB0wQAAdMHAAHTCAAB0wkAAdMKAAHTCwAB0w0AAdMPAAHTEAAB0xEAAdMTAAHTFAAB01MAAdNVAAHTVwAB01kAAdNcAAHTXQAB014AAdNfAAHTYAAB02IAAdNkAAHTZQAB02YAAdNoAAHTaQAB06gAAdOqAAHTrAAB064AAdOxAAHTsgAB07MAAdO0AAHTtQAB07cAAdO5AAHTugAB07sAAdO9AAHTvgAB0+MAAdQHAAHULgAB1FIAAdRVAAHUVwAB1FkAAdRbAAHUXQAB1F8AAdRgAAHUYwAB1HAAAdR/AAHUgQAB1IMAAdSFAAHUhwAB1IkAAdSLAAHUjQAB1JwAAdSfAAHUogAB1KUAAdSoAAHUqwAB1K4AAdSxAAHUswAB1PIAAdT0AAHU9gAB1PgAAdT7AAHU/AAB1P0AAdT+AAHU/wAB1QEAAdUDAAHVBAAB1QUAAdUHAAHVCAAB1UcAAdVJAAHVSwAB1U0AAdVQAAHVUQAB1VIAAdVTAAHVVAAB1VYAAdVYAAHVWQAB1VoAAdVcAAHVXQAB1ZwAAdWeAAHVoAAB1aIAAdWlAAHVpgAB1acAAdWoAAHVqQAB1asAAdWtAAHVrgAB1a8AAdWxAAHVsgAB1fEAAdXzAAHV9QAB1fcAAdX6AAHV+wAB1fwAAdX9AAHV/gAB1gAAAdYCAAHWAwAB1gQAAdYGAAHWBwAB1kYAAdZIAAHWSgAB1kwAAdZPAAHWUAAB1lEAAdZSAAHWUwAB1lUAAdZXAAHWWAAB1lkAAdZbAAHWXAAB1psAAdadAAHWnwAB1qEAAdakAAHWpQAB1qYAAdanAAHWqAAB1qoAAdasAAHWrQAB1q4AAdawAAHWsQAB1vAAAdbyAAHW9AAB1vYAAdb5AAHW+gAB1vsAAdb8AAHW/QAB1v8AAdcBAAHXAgAB1wMAAdcFAAHXBgAB1w8AAdcQAAHXEgAB11EAAddTAAHXVQAB11cAAddaAAHXWwAB11wAAdddAAHXXgAB12AAAddjAAHXZAAB12UAAddnAAHXaAAB16cAAdepAAHXqwAB160AAdewAAHXsQAB17IAAdezAAHXtAAB17YAAde5AAHXugAB17sAAde9AAHXvgAB1/0AAdf/AAHYAgAB2AQAAdgHAAHYCAAB2AkAAdgKAAHYCwAB2A0AAdgQAAHYEQAB2BIAAdgUAAHYFQAB2GAAAdiDAAHYowAB2MMAAdjFAAHYxwAB2MkAAdjLAAHYzQAB2M4AAdjPAAHY0gAB2NMAAdjVAAHY1gAB2NgAAdjbAAHY3AAB2N0AAdjgAAHY4QAB2OoAAdj3AAHY/AAB2P4AAdkAAAHZBQAB2QgAAdkLAAHZDQAB2TIAAdlWAAHZfQAB2aEAAdmkAAHZpgAB2agAAdmqAAHZrAAB2a4AAdmvAAHZsgAB2b8AAdnQAAHZ0gAB2dQAAdnWAAHZ2AAB2doAAdncAAHZ3gAB2eAAAdnxAAHZ9AAB2fcAAdn6AAHZ/QAB2gAAAdoDAAHaBgAB2gkAAdoLAAHaSgAB2kwAAdpOAAHaUAAB2lMAAdpUAAHaVQAB2lYAAdpXAAHaWQAB2lsAAdpcAAHaXQAB2l8AAdpgAAHanwAB2qEAAdqjAAHapQAB2qgAAdqpAAHaqgAB2qsAAdqsAAHargAB2rAAAdqxAAHasgAB2rQAAdq1AAHa9AAB2vYAAdr5AAHa+wAB2v4AAdr/AAHbAAAB2wEAAdsCAAHbBAAB2wYAAdsHAAHbCAAB2woAAdsLAAHbGAAB2xkAAdsaAAHbHAAB21sAAdtdAAHbXwAB22EAAdtkAAHbZQAB22YAAdtnAAHbaAAB22oAAdtsAAHbbQAB224AAdtwAAHbcQAB27AAAduyAAHbtAAB27YAAdu5AAHbugAB27sAAdu8AAHbvQAB278AAdvBAAHbwgAB28MAAdvFAAHbxgAB3AUAAdwHAAHcCQAB3AsAAdwOAAHcDwAB3BAAAdwRAAHcEgAB3BQAAdwWAAHcFwAB3BgAAdwaAAHcGwAB3FoAAdxcAAHcXgAB3GAAAdxjAAHcZAAB3GUAAdxmAAHcZwAB3GkAAdxrAAHcbAAB3G0AAdxvAAHccAAB3K8AAdyxAAHcswAB3LUAAdy4AAHcuQAB3LoAAdy7AAHcvAAB3L4AAdzAAAHcwQAB3MIAAdzEAAHcxQAB3OoAAd0OAAHdNQAB3VkAAd1cAAHdXgAB3WAAAd1iAAHdZAAB3WYAAd1nAAHdagAB3XcAAd2GAAHdiAAB3YoAAd2MAAHdjgAB3ZAAAd2SAAHdlAAB3aMAAd2mAAHdqQAB3awAAd2vAAHdsgAB3bUAAd24AAHdugAB3fkAAd37AAHd/QAB3f8AAd4CAAHeAwAB3gQAAd4FAAHeBgAB3ggAAd4KAAHeCwAB3gwAAd4OAAHeDwAB3k4AAd5QAAHeUgAB3lQAAd5XAAHeWAAB3lkAAd5aAAHeWwAB3l0AAd5fAAHeYAAB3mEAAd5jAAHeZAAB3qMAAd6lAAHepwAB3qkAAd6sAAHerQAB3q4AAd6vAAHesAAB3rIAAd60AAHetQAB3rYAAd64AAHeuQAB3vgAAd76AAHe/AAB3v4AAd8BAAHfAgAB3wMAAd8EAAHfBQAB3wcAAd8JAAHfCgAB3wsAAd8NAAHfDgAB300AAd9PAAHfUQAB31MAAd9WAAHfVwAB31gAAd9ZAAHfWgAB31wAAd9eAAHfXwAB32AAAd9iAAHfYwAB36IAAd+kAAHfpgAB36gAAd+rAAHfrAAB360AAd+uAAHfrwAB37EAAd+zAAHftAAB37UAAd+3AAHfuAAB3/cAAd/5AAHf+wAB3/0AAeAAAAHgAQAB4AIAAeADAAHgBAAB4AYAAeAIAAHgCQAB4AoAAeAMAAHgDQAB4FgAAeB7AAHgmwAB4LsAAeC9AAHgvwAB4MEAAeDDAAHgxQAB4MYAAeDHAAHgygAB4MsAAeDNAAHgzgAB4NAAAeDTAAHg1AAB4NUAAeDYAAHg2QAB4N4AAeDrAAHg8AAB4PIAAeD0AAHg+QAB4PwAAeD/AAHhAQAB4SYAAeFKAAHhcQAB4ZUAAeGYAAHhmgAB4ZwAAeGeAAHhoAAB4aIAAeGjAAHhpgAB4bMAAeHEAAHhxgAB4cgAAeHKAAHhzAAB4c4AAeHQAAHh0gAB4dQAAeHlAAHh6AAB4esAAeHuAAHh8QAB4fQAAeH3AAHh+gAB4f0AAeH/AAHiPgAB4kAAAeJCAAHiRAAB4kcAAeJIAAHiSQAB4koAAeJLAAHiTQAB4k8AAeJQAAHiUQAB4lMAAeJUAAHikwAB4pUAAeKXAAHimQAB4pwAAeKdAAHingAB4p8AAeKgAAHiogAB4qQAAeKlAAHipgAB4qgAAeKpAAHi6AAB4uoAAeLtAAHi7wAB4vIAAeLzAAHi9AAB4vUAAeL2AAHi+AAB4voAAeL7AAHi/AAB4v4AAeL/AAHjDAAB4w0AAeMOAAHjEAAB408AAeNRAAHjUwAB41UAAeNYAAHjWQAB41oAAeNbAAHjXAAB414AAeNgAAHjYQAB42IAAeNkAAHjZQAB46QAAeOmAAHjqAAB46oAAeOtAAHjrgAB468AAeOwAAHjsQAB47MAAeO1AAHjtgAB47cAAeO5AAHjugAB4/kAAeP7AAHj/QAB4/8AAeQCAAHkAwAB5AQAAeQFAAHkBgAB5AgAAeQKAAHkCwAB5AwAAeQOAAHkDwAB5E4AAeRQAAHkUgAB5FQAAeRXAAHkWAAB5FkAAeRaAAHkWwAB5F0AAeRfAAHkYAAB5GEAAeRjAAHkZAAB5KMAAeSlAAHkpwAB5KkA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Ae+fAAHvoAAB798AAe/hAAHv4wAB7+UAAe/oAAHv6QAB7+oAAe/rAAHv7AAB7+4AAe/wAAHv8QAB7/IAAe/0AAHv9QAB8EAAAfBjAAHwgwAB8KMAAfClAAHwpwAB8KkAAfCrAAHwrQAB8K4AAfCvAAHwsgAB8LMAAfC1AAHwtgAB8LkAAfC8AAHwvQAB8L4AAfDBAAHwwgAB8McAAfDUAAHw2QAB8NsAAfDeAAHw4wAB8OYAAfDpAAHw6wAB8RAAAfE0AAHxWwAB8X8AAfGCAAHxhAAB8YYAAfGIAAHxigAB8YwAAfGNAAHxkAAB8Z0AAfGuAAHxsAAB8bIAAfG0AAHxtgAB8bgAAfG6AAHxvAAB8b4AAfHPAAHx0gAB8dUAAfHYAAHx2wAB8d4AAfHhAAHx5AAB8ecAAfHpAAHyKAAB8ioAAfIsAAHyLgAB8jEAAfIyAAHyMwAB8jQAAfI1AAHyNwAB8jkAAfI6AAHyOwAB8j0AAfI+AAHyfQAB8n8AAfKBAAHygwAB8oYAAfKHAAHyiAAB8okAAfKKAAHyjAAB8o4AAfKPAAHykAAB8pIAAfKTAAHy0gAB8tQAAfLXAAHy2QAB8twAAfLdAAHy3gAB8t8AAfLgAAHy4gAB8uQAAfLlAAHy5gAB8ugAAfLpAAHy9gAB8vcAAfL4AAHy+gAB8zkAAfM7AAHzPQAB8z8AAfNCAAHzQwAB80QAAfNFAAHzRgAB80gAAfNKAAHzSwAB80wAAfNOAAHzTwAB844AAfOQAAHzkgAB85QAAfOXAAHzmAAB85kAAfOaAAHzmwAB850AAfOfAAHzoAAB86EAAfOjAAHzpAAB8+MAAfPlAAHz5wAB8+kAAfPsAAHz7QAB8+4AAfPvAAHz8AAB8/IAAfP0AAHz9QAB8/YAAfP4AAHz+QAB9DgAAfQ6AAH0PAAB9D4AAfRBAAH0QgAB9EMAAfREAAH0RQAB9EcAAfRJAAH0SgAB9EsAAfRNAAH0TgAB9I0AAfSPAAH0kQAB9JMAAfSWAAH0lwAB9JgAAfSZAAH0mgAB9JwAAfSeAAH0nwAB9KAAAfSiAAH0owAB9MgAAfTsAAH1EwAB9TcAAfU6AAH1PQAB9T8AAfVBAAH1QwAB9UUAAfVGAAH1SQAB9VYAAfVlAAH1aAAB9WsAAfVuAAH1cQAB9XQAAfV3AAH1egAB9YkA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AgGtAAIBrgACAbAAAgGyAAIBswACAbQAAgG2AAIBtwACAfYAAgH4AAIB+gACAfwAAgH/AAICAAACAgEAAgICAAICAwACAgUAAgIHAAICCAACAgkAAgILAAICDAACAksAAgJNAAICTwACAlEAAgJUAAICVQACAlYAAgJXAAICWAACAloAAgJcAAICXQACAl4AAgJgAAICYQACAqAAAgKiAAICpAACAqYAAgKpAAICqgACAqsAAgKsAAICrQACAq8AAgKxAAICsgACArMAAgK1AAICtgACAvUAAgL3AAIC+QACAvsAAgL+AAIC/wACAwAAAgMBAAIDAgACAwQAAgMGAAIDBwACAwgAAgMKAAIDCwACAzAAAgNUAAIDewACA58AAgOiAAIDpAACA6YAAgOoAAIDqgACA6wAAgOtAAIDsAACA70AAgPMAAIDzgACA9AAAgPSAAID1AACA9YAAgPYAAID2gACA+kAAgPsAAID7wACA/IAAgP1AAID+AACA/sAAgP+AAIEAAACBD8AAgRBAAIEQwACBEUAAgRIAAIESQACBEoAAgRLAAIETAACBE4AAgRQAAIEUQACBFIAAgRUAAIEVQACBJQAAgSWAAIEmAACBJoAAgSdAAIEngACBJ8AAgSgAAIEoQACBKMAAgSlAAIEpgACBKcAAgSpAAIEqgACBOkAAgTrAAIE7QACBO8AAgTyAAIE8wACBPQAAgT1AAIE9gACBPgAAgT6AAIE+wACBPwAAgT+AAIE/wACBT4AAgVAAAIFQgACBUQAAgVHAAIFSAACBUkAAgVKAAIFSwACBU0AAgVPAAIFUAACBVEAAgVTAAIFVAACBZMAAgWVAAIFlwACBZkAAgWcAAIFnQACBZ4AAgWfAAIFoAACBaIAAgWkAAIFpQACBaYAAgWoAAIFqQACBegAAgXqAAIF7AACBe4AAgXxAAIF8gACBfMAAgX0AAIF9QACBfcAAgX5AAIF+gACBfsAAgX9AAIF/gACBj0AAgY/AAIGQQACBkMAAgZGAAIGRwACBkgAAgZJAAIGSgACBkwAAgZOAAIGTwACBlAAAgZSAAIGUwACBp4AAgbBAAIG4QACBwEAAgcDAAIHBQACBwcAAgcJAAIHDAACBw0AAgcOAAIHEQACBxIAAgcUAAIHFQACBxgAAgcbAAIHHAACBx0AAgcgAAIHIQACByYAAgczAAIHOAACBzoAAgc9AAIHQgACB0UAAgdIAAIHSgACB28AAgeTAAIHugACB94AAgfhAAIH4wACB+UAAgfnAAIH6QACB+sAAgfsAAIH7wACB/wAAggNAAIIDwACCBEAAggTAAIIFQACCBcAAggZAAIIGwACCB0AAgguAAIIMQACCDQAAgg3AAIIOgACCD0AAghAAAIIQwACCEYAAghIAAIIhwACCIkAAgiLAAIIjQACCJAAAgiRAAIIkgACCJMAAgiUAAIIlgACCJgAAgiZAAIImgACCJwAAgidAAII3AACCN4AAgjgAAII4gACCOUAAgjmAAII5wACCOgAAgjpAAII6wACCO0AAgjuAAII7wACCPEAAgjyAAIJMQACCTMAAgk2AAIJOAACCTsAAgk8AAIJPQACCT4AAgk/AAIJQQACCUMAAglEAAIJRQACCUcAAglIAAIJVQACCVYAAglXAAIJWQACCZgAAgmaAAIJnAACCZ4AAgmhAAIJogACCaMAAgmkAAIJpQACCacAAgmpAAIJqgACCasAAgmtAAIJrgACCe0AAgnvAAIJ8QACCfMAAgn2AAIJ9wACCfgAAgn5AAIJ+gACCfwAAgn+AAIJ/wACCgAAAgoCAAIKAwACCkIAAgpEAAIKRgACCkgAAgpLAAIKTAACCk0AAgpOAAIKTwACClEAAgpTAAIKVAACClUAAgpXAAIKWAACCpcAAgqZAAIKmwACCp0AAgqgAAIKoQACCqIAAgqjAAIKpAACCqYAAgqoAAIKqQACCqoAAgqsAAIKrQACCuwAAgruAAIK8AACCvIAAgr1AAIK9gACCvcAAgr4AAIK+QACCvsAAgr9AAIK/gACCv8AAgsBAAILAgACCycAAgtLAAILcgACC5YAAguZAAILnAACC54AAgugAAILogACC6QAAgulAAILqAACC7UAAgvEAAILxwACC8oAAgvNAAIL0AACC9MAAgvWAAIL2QACC+gAAgvrAAIL7gACC/EAAgv0AAIL9wACC/oAAgv9AAIL/wACDD4AAgxAAAIMQwACDEUAAgxIAAIMSQACDEoAAgxLAAIMTAACDE4AAgxRAAIMUgACDFMAAgxVAAIMVgACDJUAAgyXAAIMmgACDJwAAgyfAAIMoAACDKEAAgyiAAIMowACDKUAAgyoAAIMqQACDKoAAgysAAIMrQACDOwA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AhlVAAIZVwACGVoAAhlcAAIZXwACGWAAAhlhAAIZYgACGWMAAhllAAIZZwACGWgAAhlpAAIZawACGWwAAhl1AAIZdgACGXgAAhm3AAIZuQACGbsAAhm9AAIZwAACGcEAAhnCAAIZwwACGcQAAhnGAAIZyAACGckAAhnKAAIZzAACGc0AAhoMAAIaDgACGhEAAhoTAAIaFgACGhcAAhoYAAIaGQACGhoAAhocAAIaHgACGh8AAhogAAIaIgACGiMAAhosAAIaLQACGi8AAhpuAAIacAACGnIAAhp0AAIadwACGngAAhp5AAIaegACGnsAAhp9AAIafwACGoAAAhqBAAIagwACGoQAAhrDAAIaxQACGsgAAhrKAAIazQACGs4AAhrPAAIa0AACGtEAAhrTAAIa1QACGtYAAhrXAAIa2QACGtoAAhrnAAIa6AACGukAAhrrAAIbKgACGywAAhsuAAIbMAACGzMAAhs0AAIbNQACGzYAAhs3AAIbOQACGzsAAhs8AAIbPQACGz8AAhtAAAIbfwACG4EAAhuEAAIbhgACG4kAAhuKAAIbiwACG4wAAhuNAAIbjwACG5EAAhuSAAIbkwACG5UAAhuWAAIbqAACG7UAAhu+AAIbwAACG8MAAhvGAAIbyQACG9IAAhvVAAIb2AACG9sAAhveAAIb4AACG+YAAhwxAAIcVAACHHQAAhyUAAIclgACHJgAAhyaAAIcnAACHJ8AAhygAAIcoQACHKQAAhylAAIcpwACHKgAAhyqAAIcrAACHK0AAhyuAAIcsQACHLIAAhy3AAIcxAACHMkAAhzLAAIczQACHNIAAhzVAAIc2AACHNoAAhz/AAIdIwACHUoAAh1uAAIdcQACHXMAAh11AAIddwACHXkAAh17AAIdfAACHX8AAh2MAAIdnQACHZ8AAh2hAAIdowACHaUAAh2nAAIdqQACHasAAh2tAAIdvgACHcEAAh3EAAIdxwACHcoAAh3NAAId0AACHdMAAh3WAAId2AACHhcAAh4ZAAIeGwACHh0AAh4gAAIeIQACHiIAAh4jAAIeJAACHiYAAh4oAAIeKQACHioAAh4sAAIeLQACHmwAAh5uAAIecAACHnIAAh51AAIedgACHncAAh54AAIeeQACHnsAAh59AAIefgACHn8AAh6BAAIeggACHsEAAh7DAAIexgACHsgAAh7LAAIezAACHs0AAh7OAAIezwACHtEAAh7TAAIe1AACHtUAAh7XAAIe2AACHuUAAh7mAAIe5wACHukAAh8oAAIfKgACHywAAh8uAAIfMQACHzIAAh8zAAIfNAACHzUAAh83AAIfOQACHzoAAh87AAIfPQACHz4AAh99AAIffwACH4EAAh+DAAIfhgACH4cAAh+IAAIfiQACH4oAAh+MAAIfjgACH48AAh+QAAIfkgACH5MAAh/SAAIf1AACH9YAAh/YAAIf2wACH9wAAh/dAAIf3gACH98AAh/hAAIf4wACH+QAAh/lAAIf5wACH+gAAiAnAAIgKQACICsAAiAtAAIgMAACIDEAAiAyAAIgMwACIDQAAiA2AAIgOAACIDkAAiA6AAIgPAACID0AAiB8AAIgfgACIIAAAiCCAAIghQACIIYAAiCHAAIgiAACIIkAAiCLAAIgjQACII4AAiCPAAIgkQACIJIAAiC3AAIg2wACIQIAAiEmAAIhKQACISsAAiEtAAIhLwACITEAAiEzAAIhNAACITcAAiFEAAIhUwACIVUAAiFXAAIhWQACIVsAAiFdAAIhXwACIWEAAiFwAAIhcwACIXYAAiF5AAIhfAACIX8AAiGCAAIhhQACIYcAAiHGAAIhyAACIcoAAiHMAAIhzwACIdAAAiHRAAIh0gACIdMAAiHVAAIh1wACIdgAAiHZAAIh2wACIdwAAiIbAAIiHQACIh8AAiIhAAIiJAACIiUAAiImAAIiJwACIigAAiIqAAIiLAACIi0AAiIuAAIiMAACIjEAAiJwAAIicgACInQAAiJ2AAIieQACInoAAiJ7AAIifAACIn0AAiJ/AAIigQACIoIAAiKDAAIihQACIoYAAiLFAAIixwACIskAAiLLAAIizgACIs8AAiLQAAIi0QACItIAAiLUAAIi1gACItcAAiLYAAIi2gACItsAAiMaAAIjHAACIx4AAiMgAAIjIwACIyQAAiMlAAIjJgACIycAAiMpAAIjKwACIywAAiMtAAIjLwACIzAAAiNvAAIjcQACI3MAAiN1AAIjeAACI3kAAiN6AAIjewACI3wAAiN+AAIjgAACI4EAAiOCAAIjhAACI4UAAiPEAAIjxgACI8gAAiPKAAIjzQACI84AAiPPAAIj0AACI9EAAiPTAAIj1QACI9YAAiPXAAIj2QACI9oAAiQlAAIkSAACJGgAAiSIAAIkigACJIwAAiSOAAIkkAACJJMAAiSUAAIklQACJJgAAiSZAAIkmwACJJwAAiSeAAIkoQACJKIAAiSjAAIkpgACJKcAAiSsAAIkuQACJL4AAiTAAAIkwgACJMcAAiTKAAIkzQACJM8AAiT0AAIlGAACJT8AAiVjAAIlZgACJWgAAiVqAAIlbAACJW4AAiVwAAIlcQACJXQAAiWBAAIlkgACJZQAAiWWAAIlmAACJZoAAiWcAAIlngACJaAAAiWiAAIlswACJbYAAiW5AAIlvAACJb8AAiXCAAIlxQACJcgAAiXLAAIlzQACJgwAAiYOAAImEAACJhIAAiYVAAImFgACJhcAAiYYAAImGQACJhsAAiYdAAImHgACJh8AAiYhAAImIgACJmEAAiZjAAImZQACJmcAAiZqAAImawACJmwAAiZtAAImbgACJnAAAiZyAAImcwACJnQAAiZ2AAImdwACJrYAAia4AAImuwACJr0AAibAAAImwQACJsIAAibDAAImxAACJsYAAibIAAImyQACJsoAAibMAAImzQACJtoAAibbAAIm3AACJt4AAicdAAInHwACJyEAAicjAAInJgACJycAAicoAAInKQACJyoAAicsAAInLgACJy8AAicwAAInMgACJzMAAidyAAIndAACJ3YAAid4AAInewACJ3wAAid9AAInfgACJ38AAieBAAIngwACJ4QAAieFAAInhwACJ4gAAifHAAInyQACJ8sAAifNAAIn0AACJ9EAAifSAAIn0wACJ9QAAifWAAIn2AACJ9kAAifaAAIn3AACJ90AAigcAAIoHgACKCAAAigiAAIoJQACKCYAAignAAIoKAACKCkAAigrAAIoLQACKC4AAigvAAIoMQACKDIAAihxAAIocwACKHUAAih3AAIoegACKHsAAih8AAIofQACKH4AAiiAAAIoggACKIMAAiiEAAIohgACKIcAAiisAAIo0AACKPcAAikbAAIpHgACKSAAAikiAAIpJAACKSYAAikoAAIpKQACKSwAAik5AAIpSAACKUoAAilMAAIpTgACKVAAAilSAAIpVAACKVYAAillAAIpaAACKWsAAiluAAIpcQACKXQAAil3AAIpegACKXwAAim7AAIpvQACKb8AAinBAAIpxAACKcUAAinGAAIpxwACKcgAAinKAAIpzAACKc0AAinOAAIp0AACKdEAAioQAAIqEgACKhQAAioWAAIqGQACKhoAAiobAAIqHAACKh0AAiofAAIqIQACKiIAAiojAAIqJQACKiYAAiplAAIqZwACKmkAAiprAAIqbgACKm8AAipwAAIqcQACKnIAAip0AAIqdgACKncAAip4AAIqegACKnsAAiq6AAIqvAACKr4AAirAAAIqwwACKsQAAirFAAIqxgACKscAAirJAAIqywACKswAAirNAAIqzwACKtAAAisPAAIrEQACKxMAAisVAAIrGAACKxkAAisaAAIrGwACKxwAAiseAAIrIAACKyEAAisiAAIrJAACKyUAAitkAAIrZgACK2gAAitqAAIrbQACK24AAitvAAIrcAACK3EAAitzAAIrdQACK3YAAit3AAIreQACK3oAAiu5AAIruwACK70AAiu/AAIrwgACK8MAAivEAAIrxQACK8YAAivIAAIrygACK8sAAivMAAIrzgACK88AAiwaAAIsPQACLF0AAix9AAIsfwACLIEAAiyDAAIshQACLIgAAiyJAAIsigACLI0AAiyOAAIskAACLJEAAiyTAAIslgACLJcAAiyYAAIsmwACLJwAAiyhAAIsrgACLLMAAiy1AAIstwACLLwAAiy/AAIswgACLMQAAizpAAItDQACLTQAAi1YAAItWwACLV0AAi1fAAItYQACLWMAAi1lAAItZgACLWkAAi12AAIthwACLYkAAi2LAAItjQACLY8AAi2RAAItkwACLZUAAi2XAAItqAACLasAAi2uAAItsQACLbQAAi23AAItugACLb0AAi3AAAItwgACLgEAAi4DAAIuBQACLgcAAi4KAAIuCwACLgwAAi4NAAIuDgACLhAAAi4SAAIuEwACLhQAAi4WAAIuFwACLlYAAi5YAAIuWgACLlwAAi5fAAIuYAACLmEAAi5iAAIuYwACLmUAAi5nAAIuaAACLmkAAi5rAAIubAACLqsAAi6tAAIusAACLrIAAi61AAIutgACLrcAAi64AAIuuQACLrsAAi69AAIuvgACLr8AAi7BAAIuwgACLs8AAi7QAAIu0QACLtMAAi8SAAIvFAACLxYAAi8YAAIvGwACLxwAAi8dAAIvHgACLx8AAi8hAAIvIwACLyQAAi8lAAIvJwACLygAAi9nAAIvaQACL2sAAi9tAAIvcAACL3EAAi9yAAIvcwACL3QAAi92AAIveAACL3kAAi96AAIvfAACL30AAi+8AAIvvgACL8AAAi/CAAIvxQACL8YAAi/HAAIvyAACL8kAAi/LAAIvzQACL84AAi/PAAIv0QACL9IAAjARAAIwEwACMBUAAjAXAAIwGgACMBsAAjAcAAIwHQACMB4AAjAgAAIwIgACMCMAAjAkAAIwJgACMCcAAjBmAAIwaAACMGoAAjBsAAIwbwACMHAAAjBxAAIwcgACMHMAAjB1AAIwdwACMHgAAjB5AAIwewACMHwAAjChAAIwxQACMOwAAjEQAAIxEwACMRUAAjEXAAIxGQACMRsAAjEdAAIxHgACMSEAAjEuAAIxPQACMT8AAjFBAAIxQwACMUUAAjFHAAIxSQACMUsAAjFaAAIxXQACMWAAAjFjAAIxZgACMWkAAjFsAAIxbwACMXEAAjGwAAIxsgACMbQAAjG2AAIxuQACMboAAjG7AAIxvAACMb0AAjG/AAIxwQACMcIAAjHDAAIxxQACMcYAAjIFAAIyBwACMgkAAjILAAIyDgACMg8AAjIQAAIyEQACMhIAAjIUAAIyFgACMhcAAjIYAAIyGgACMhsAAjJaAAIyXAACMl4AAjJgAAIyYwACMmQAAjJlAAIyZgACMmcAAjJpAAIyawACMmwAAjJtAAIybwACMnAAAjKvAAIysQACMrMAAjK1AAIyuAACMrkAAjK6AAIyuwACMrwAAjK+AAIywAACMsEAAjLCAAIyxAACMsUAAjMEAAIzBgACMwgAAjMKAAIzDQACMw4AAjMPAAIzEAACMxEAAjMTAAIzFQACMxYAAjMXAAIzGQACMxoAAjNZAAIzWwACM10AAjNfAAIzYgACM2MAAjNkAAIzZQACM2YAAjNoAAIzagACM2sAAjNsAAIzbgACM28AAjOuAAIzsAACM7IAAjO0AAIztwACM7gAAjO5AAIzugACM7sAAjO9AAIzvwACM8AAAjPBAAIzwwACM8QAAjQPAAI0MgACNFIAAjRyAAI0dAACNHYAAjR4AAI0egACNH0AAjR+AAI0fwACNIIAAjSDAAI0hQACNIYAAjSJAAI0jAACNI0AAjSOAAI0kQACNJIAAjSXAAI0pAACNKkAAjSrAAI0rgACNLMAAjS2AAI0uQACNLsAAjTgAAI1BAACNSsAAjVPAAI1UgACNVQAAjVWAAI1WAACNVoAAjVcAAI1XQACNWAAAjVtAAI1fgACNYAAAjWCAAI1hAACNYYAAjWIAAI1igACNYwAAjWOAAI1nwACNaIAAjWlAAI1qAACNasAAjWuAAI1sQACNbQAAjW3AAI1uQACNfgAAjX6AAI1/AACNf4AAjYBAAI2AgACNgMAAjYEAAI2BQACNgcAAjYJAAI2CgACNgsAAjYNAAI2DgACNk0AAjZPAAI2UQACNlMAAjZWAAI2VwACNlgAAjZZAAI2WgACNlwAAjZeAAI2XwACNmAAAjZiAAI2YwACNqIAAjakAAI2pwACNqkAAjasAAI2rQACNq4AAjavAAI2sAACNrIAAja0AAI2tQACNrYAAja4AAI2uQACNsYAAjbHAAI2yAACNsoAAjcJAAI3CwACNw0AAjcPAAI3EgACNxMAAjcUAAI3FQACNxYAAjcYAAI3GgACNxsAAjccAAI3HgACNx8AAjdeAAI3YAACN2IAAjdkAAI3ZwACN2gAAjdpAAI3agACN2sAAjdtAAI3bwACN3AAAjdxAAI3cwACN3QAAjezAAI3tQACN7cAAje5AAI3vAACN70AAje+AAI3vwACN8AAAjfCAAI3xAACN8UAAjfGAAI3yAACN8kAAjgIAAI4CgACOAwAAjgOAAI4EQACOBIAAjgTAAI4FAACOBUAAjgXAAI4GQACOBoAAjgbAAI4HQACOB4AAjhdAAI4XwACOGEAAjhjAAI4ZgACOGcAAjhoAAI4aQACOGoAAjhsAAI4bgACOG8AAjhwAAI4cgACOHMAAjiYAAI4vAACOOMAAjkHAAI5CgACOQ0AAjkPAAI5EQACORMAAjkVAAI5FgACORkAAjkmAAI5NQACOTgAAjk7AAI5PgACOUEAAjlEAAI5RwACOUoAAjlZAAI5XAACOV8AAjliAAI5ZQACOWgAAjlrAAI5bgACOXAAAjmvAAI5sQACObQAAjm2AAI5uQACOboAAjm7AAI5vAACOb0AAjm/AAI5wgACOcMAAjnEAAI5xgACOccAAjoGAAI6CAACOgsAAjoNAAI6EAACOhEAAjoSAAI6EwACOhQAAjoWAAI6GQACOhoAAjobAAI6HQACOh4AAjpdAAI6XwACOmIAAjpkAAI6ZwACOmgAAjppAAI6agACOmsAAjptAAI6cAACOnEA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AkWgAAJFowACRaQAAkWpAAJFtgACRbsAAkW9AAJFwAACRcUAAkXIAAJFywACRc0AAkXyAAJGFgACRj0AAkZhAAJGZAACRmYAAkZoAAJGagACRmwAAkZuAAJGbwACRnIAAkZ/AAJGkAACRpIAAkaUAAJGlgACRpgAAkaaAAJGnAACRp4AAkagAAJGsQACRrQAAka3AAJGugACRr0AAkbAAAJGwwACRsYAAkbJAAJGywACRwoAAkcMAAJHDgACRxAAAkcTAAJHFAACRxUAAkcWAAJHFwACRxkAAkcbAAJHHAACRx0AAkcfAAJHIAACR18AAkdhAAJHYwACR2UAAkdoAAJHaQACR2oAAkdrAAJHbAACR24AAkdwAAJHcQACR3IAAkd0AAJHdQACR7QAAke2AAJHuQACR7sAAke+AAJHvwACR8AAAkfBAAJHwgACR8QAAkfGAAJHxwACR8gAAkfKAAJHywACR9gAAkfZAAJH2gACR9wAAkgbAAJIHQACSB8AAkghAAJIJAACSCUAAkgmAAJIJwACSCgAAkgqAAJILAACSC0AAkguAAJIMAACSDEAAkhwAAJIcgACSHQAAkh2AAJIeQACSHoAAkh7AAJIfAACSH0AAkh/AAJIgQACSIIAAkiDAAJIhQACSIYAAkjFAAJIxwACSMkAAkjLAAJIzgACSM8AAkjQAAJI0QACSNIAAkjUAAJI1gACSNcAAkjYAAJI2gACSNsAAkkaAAJJHAACSR4AAkkgAAJJIwACSSQAAkklAAJJJgACSScAAkkpAAJJKwACSSwAAkktAAJJLwACSTAAAklvAAJJcQACSXMAAkl1AAJJeAACSXkAAkl6AAJJewACSXwAAkl+AAJJgAACSYEAAkmCAAJJhAACSYUAAkmqAAJJzgACSfUAAkoZAAJKHAACSh8AAkohAAJKIwACSiUAAkonAAJKKAACSisAAko4AAJKRwACSkoAAkpNAAJKUAACSlMAAkpWAAJKWQACSlwAAkprAAJKbgACSnEAAkp0AAJKdwACSnoAAkp9AAJKgAACSoIAAkrBAAJKwwACSsYAAkrIAAJKywACSswAAkrNAAJKzgACSs8AAkrRAAJK1AACStUAAkrWAAJK2AACStkAAksYAAJLGgACSx0AAksfAAJLIgACSyMAAkskAAJLJQACSyYAAksoAAJLKwACSywAAkstAAJLLwACSzAAAktvAAJLcQACS3QAAkt2AAJLeQACS3oAAkt7AAJLfAACS30AAkt/AAJLggACS4MAAkuEAAJLhgACS4cAAkvGAAJLyAACS8sAAkvNAAJL0AACS9EAAkvSAAJL0wACS9QAAkvWAAJL2QACS9oAAkvbAAJL3QACS94AAkwhAAJMRQACTGkAAkyMAAJMswACTNMAAkz6AAJNIQACTUEAAk1lAAJNiQACTYsAAk2OAAJNkAACTZIAAk2UAAJNlwACTZkAAk2bAAJNnQACTZ8AAk2hAAJNowACTaYAAk2pAAJNqgACTa8AAk28AAJNvwACTcEAAk3EAAJNxwACTckAAk3uAAJOEgACTjkAAk5dAAJOYAACTmIAAk5kAAJOZgACTmgAAk5qAAJOawACTm4AAk57AAJOjgACTpAAAk6SAAJOlAACTpYAAk6YAAJOmgACTpwAAk6eAAJOoAACTrMAAk62AAJOuQACTrwAAk6/AAJOwgACTsUAAk7IAAJOywACTs4AAk7QAAJPDwACTxEAAk8UAAJPFgACTxkAAk8aAAJPGwACTxwAAk8dAAJPHwACTyEAAk8iAAJPIwACTyUAAk8mAAJPLwACTzAAAk8yAAJPcQACT3MAAk91AAJPdwACT3oAAk97AAJPfAACT30AAk9+AAJPgAACT4IAAk+DAAJPhAACT4YAAk+HAAJPxgACT8gAAk/LAAJPzQACT9AAAk/RAAJP0gACT9MAAk/UAAJP1gACT9gAAk/ZAAJP2gACT9wAAk/dAAJP5gACT+cAAk/pAAJQKAACUCoAAlAsAAJQLgACUDEAAlAyAAJQMwACUDQAAlA1AAJQNwACUDkAAlA6AAJQOwACUD0AAlA+AAJQfQACUH8AAlCCAAJQhAACUIcAAlCIAAJQiQACUIoAAlCLAAJQjQACUI8AAlCQAAJQkQACUJMAAlCUAAJQnQACUJ4AAlCgAAJQ3wACUOEAAlDjAAJQ5QACUOgAAlDpAAJQ6gACUOsAAlDsAAJQ7gACUPAAAlDxAAJQ8gACUPQAAlD1AAJRNAACUTYAAlE5AAJROwACUT4AAlE/AAJRQAACUUEAAlFCAAJRRAACUUYAAlFHAAJRSAACUUoAAlFLAAJRWAACUVkAAlFaAAJRXAACUZsAAlGdAAJRnwACUaEAAlGkAAJRpQACUaYAAlGnAAJRqAACUaoAAlGsAAJRrQACUa4AAlGwAAJRsQACUfAAAlHyAAJR9QACUfcAAlH6AAJR+wACUfwAAlH9AAJR/gACUgAAAlICAAJSAwACUgQAAlIGAAJSBwACUhMAAlIgAAJSLQACUjAAAlIzAAJSNgACUjkAAlI8AAJSPwACUkwAAlJPAAJSUgACUlUAAlJYAAJSWwACUl4AAlJgAAJSawACUnEAAlKDAAJSlgACUuEAAlMEAAJTJAACU0QAAlNGAAJTSAACU0oAAlNMAAJTTwACU1AAAlNRAAJTVAACU1UAAlNXAAJTWAACU1oAAlNdAAJTXgACU18AAlNiAAJTYwACU2gAAlN1AAJTegACU3wAAlN+AAJTgwACU4YAAlOJAAJTiwACU7AAAlPUAAJT+wACVB8AAlQiAAJUJAACVCYAAlQoAAJUKgACVCwAAlQtAAJUMAACVD0AAlROAAJUUAACVFIAAlRUAAJUVgACVFgAAlRaAAJUXAACVF4AAlRvAAJUcgACVHUAAlR4AAJUewACVH4AAlSBAAJUhAACVIcAAlSJAAJUyAACVMoAAlTMAAJUzgACVNEAAlTSAAJU0wACVNQAAlTVAAJU1wACVNkAAlTaAAJU2wACVN0AAlTeAAJVHQACVR8AAlUhAAJVIwACVSYAAlUnAAJVKAACVSkAAlUqAAJVLAACVS4AAlUvAAJVMAACVTIAAlUzAAJVcgACVXQAAlV3AAJVeQACVXwAAlV9AAJVfgACVX8AAlWAAAJVggACVYQAAlWFAAJVhgACVYgAAlWJAAJVlgACVZcAAlWYAAJVmgACVdkAAlXbAAJV3QACVd8AAlXiAAJV4wACVeQAAlXlAAJV5gACVegAAlXqAAJV6wACVewAAlXuAAJV7wACVi4AAlYwAAJWMgACVjQAAlY3AAJWOAACVjkAAlY6AAJWOwACVj0AAlY/AAJWQAACVkEAAlZDAAJWRAACVoMAAlaFAAJWhwACVokAAlaMAAJWjQACVo4AAlaPAAJWkAACVpIAAlaUAAJWlQACVpYAAlaYAAJWmQACVtgAAlbaAAJW3AACVt4AAlbhAAJW4gACVuMAAlbkAAJW5QACVucAAlbpAAJW6gACVusAAlbtAAJW7gACVy0AAlcvAAJXMQACVzMAAlc2AAJXNwACVzgAAlc5AAJXOgACVzwAAlc+AAJXPwACV0AAAldCAAJXQwACV2gAAleMAAJXswACV9cAAlfaAAJX3AACV94AAlfgAAJX4gACV+QAAlflAAJX6AACV/UAAlgEAAJYBgACWAgAAlgKAAJYDAACWA4AAlgQAAJYEgACWCEAAlgkAAJYJwACWCoAAlgtAAJYMAACWDMAAlg2AAJYOAACWHcAAlh5AAJYewACWH0AAliAAAJYgQACWIIAAliDAAJYhAACWIYAAliIAAJYiQACWIoAAliMAAJYjQACWMwAAljOAAJY0AACWNIAAljVAAJY1gACWNcAAljYAAJY2QACWNsAAljdAAJY3gACWN8AAljhAAJY4gACWSEAAlkjAAJZJQACWScAAlkqAAJZKwACWSwAAlktAAJZLgACWTAAAlkyAAJZMwACWTQAAlk2AAJZNwACWXYAAll4AAJZegACWXwAAll/AAJZgAACWYEAAlmCAAJZgwACWYUAAlmHAAJZiAACWYkAAlmLAAJZjAACWcsAAlnNAAJZzwACWdEAAlnUAAJZ1QACWdYAAlnXAAJZ2AACWdoAAlncAAJZ3QACWd4AAlngAAJZ4QACWiAAAloiAAJaJAACWiYAAlopAAJaKgACWisAAlosAAJaLQACWi8AAloxAAJaMgACWjMAAlo1AAJaNgACWnUAAlp3AAJaeQACWnsAAlp+AAJafwACWoAAAlqBAAJaggACWoQAAlqGAAJahwACWogAAlqKAAJaiwACWtYAAlr5AAJbGQACWzkAAls7AAJbPQACWz8AAltBAAJbRAACW0UAAltGAAJbSQACW0oAAltMAAJbTQACW1AAAltTAAJbVAACW1UAAltYAAJbWQACW14AAltrAAJbcAACW3IAAlt1AAJbegACW30AAluAAAJbggACW6cAAlvLAAJb8gACXBYAAlwZAAJcGwACXB0AAlwfAAJcIQACXCMAAlwkAAJcJwACXDQAAlxFAAJcRwACXEkAAlxLAAJcTQACXE8AAlxRAAJcUwACXFUAAlxmAAJcaQACXGwAAlxvAAJccgACXHUAAlx4AAJcewACXH4AAlyAAAJcvwACXMEAAlzDAAJcxQACXMgAAlzJAAJcygACXMsAAlzMAAJczgACXNAAAlzRAAJc0gACXNQAAlzVAAJdFAACXRYAAl0YAAJdGgACXR0AAl0eAAJdHwACXSAAAl0hAAJdIwACXSUAAl0mAAJdJwACXSkAAl0qAAJdaQACXWsAAl1uAAJdcAACXXMAAl10AAJddQACXXYAAl13AAJdeQACXXsAAl18AAJdfQACXX8AAl2AAAJdjQACXY4AAl2PAAJdkQACXdAAAl3SAAJd1AACXdYAAl3ZAAJd2gACXdsAAl3cAAJd3QACXd8AAl3hAAJd4gACXeMAAl3lAAJd5gACXiUAAl4nAAJeKQACXisAAl4uAAJeLwACXjAAAl4xAAJeMgACXjQAAl42AAJeNwACXjgAAl46AAJeOwACXnoAAl58AAJefgACXoAAAl6DAAJehAACXoUAAl6GAAJehwACXokAAl6LAAJejAACXo0AAl6PAAJekAACXs8AAl7RAAJe0wACXtUAAl7YAAJe2QACXtoAAl7bAAJe3AACXt4AAl7gAAJe4QACXuIAAl7kAAJe5QACXyQAAl8mAAJfKAACXyoAAl8tAAJfLgACXy8AAl8wAAJfMQACXzMAAl81AAJfNgACXzcAAl85AAJfOgACX18AAl+DAAJfqgACX84AAl/RAAJf1AACX9YAAl/YAAJf2gACX9wAAl/dAAJf4AACX+0AAl/8AAJf/wACYAIAAmAFAAJgCAACYAsAAmAOAAJgEQACYCAAAmAjAAJgJgACYCkAAmAsAAJgLwACYDIAAmA1AAJgNwACYHYAAmB4AAJgewACYH0AAmCAAAJggQACYIIAAmCDAAJghAACYIYAAmCJAAJgigACYIsAAmCNAAJgjgACYM0AAmDPAAJg0gACYNQAAmDXAAJg2AACYNkAAmDaAAJg2wACYN0AAmDgAAJg4QACYOIAAmDkAAJg5QACYSQAAmEmAAJhKQACYSsAAmEuAAJhLwACYTAAAmExAAJhMgACYTQAAmE3AAJhOAACYTkAAmE7AAJhPAACYXsAAmF9AAJhgAACYYIAAmGFAAJhhgACYYcAAmGIAAJhiQACYYsAAmGOAAJhjwACYZAAAmGSAAJhkwACYdIAAmHUAAJh1gACYdgAAmHbAAJh3AACYd0AAmHeAAJh3wACYeEAAmHkAAJh5QACYeYAAmHoAAJh6QACYigAAmIqAAJiLAACYi4AAmIxAAJiMgACYjMAAmI0AAJiNQACYjcAAmI6AAJiOwACYjwAAmI+AAJiPwACYn4AAmKAAAJigwACYoUAAmKIAAJiiQACYooAAmKLAAJijAACYo4AAmKRAAJikgACYpMAAmKVAAJilgACYuEAAmMEAAJjJAACY0QAAmNGAAJjSAACY0oAAmNMAAJjTwACY1AAAmNRAAJjVAACY1UAAmNXAAJjWAACY1oAAmNdAAJjXgACY18AAmNiAAJjYwACY2gAAmN1AAJjegACY3wAAmN+AAJjgwACY4YAAmOJAAJjiwACY7AAAmPUAAJj+wACZB8AAmQiAAJkJAACZCYAAmQoAAJkKgACZCwAAmQtAAJkMAACZD0AAmROAAJkUAACZFIAAmRUAAJkVgACZFgAAmRaAAJkXAACZF4AAmRvAAJkcgACZHUAAmR4AAJkewACZH4AAmSBAAJkhAACZIcAAmSJAAJkyAACZMoAAmTMAAJkzgACZNEAAmTSAAJk0wACZNQAAmTVAAJk1wACZNkAAmTaAAJk2wACZN0AAmTeAAJlHQACZR8AAmUhAAJlIwACZSYAAmUnAAJlKAACZSkAAmUqAAJlLAACZS4AAmUvAAJlMAACZTIAAmUzAAJlcgACZXQAAmV3AAJleQACZXwAAmV9AAJlfgACZX8AAmWAAAJlggACZYQAAmWFAAJlhgACZYgAAmWJAAJllgACZZcAAmWYAAJlmgACZdkAAmXbAAJl3QACZd8AAmXiAAJl4wACZeQAAmXlAAJl5gACZegAAmXqAAJl6wACZewAAmXuAAJl7wACZi4AAmYwAAJmMgACZjQAAmY3AAJmOAACZjkAAmY6AAJmOwACZj0AAmY/AAJmQAACZkEAAmZDAAJmRAACZoMAAmaFAAJmhwACZokAAmaMAAJmjQACZo4AAmaPAAJmkAACZpIAAmaUAAJmlQACZpYAAmaYAAJmmQACZtgAAmbaAAJm3AACZt4AAmbhAAJm4gACZuMAAmbkAAJm5QACZucAAmbpAAJm6gACZusAAmbtAAJm7gACZy0AAmcvAAJnMQACZzMAAmc2AAJnNwACZzgAAmc5AAJnOgACZzwAAmc+AAJnPwACZ0AAAmdCAAJnQwACZ2gAAmeMAAJnswACZ9cAAmfaAAJn3AACZ94AAmfgAAJn4gACZ+QAAmflAAJn6AACZ/UAAmgEAAJoBgACaAgAAmgKAAJoDAACaA4AAmgQAAJoEgACaCEAAmgkAAJoJwACaCoAAmgtAAJoMAACaDMAAmg2AAJoOAACaHcAAmh5AAJoewACaH0AAmiAAAJogQACaIIAAmiDAAJohAACaIYAAmiIAAJoiQACaIoAAmiMAAJojQACaMwAAmjOAAJo0AACaNIAAmjVAAJo1gACaNcAAmjYAAJo2QACaNsAAmjdAAJo3gACaN8AAmjhAAJo4gACaSEAAmkjAAJpJQACaScAAmkqAAJpKwACaSwAAmktAAJpLgACaTAAAmkyAAJpMwACaTQAAmk2AAJpNwACaXYAAml4AAJpegACaXwAAml/AAJpgAACaYEAAmmCAAJpgwACaYUAAmmHAAJpiAACaYkAAmmLAAJpjAACacsAAmnNAAJpzwACadEAAmnUAAJp1QACadYAAmnXAAJp2AACadoAAmncAAJp3QACad4AAmngAAJp4QACaiAAAmoiAAJqJAACaiYAAmopAAJqKgACaisAAmosAAJqLQACai8AAmoxAAJqMgACajMAAmo1AAJqNgACanUAAmp3AAJqeQACansAAmp+AAJqfwACaoAAAmqBAAJqggACaoQAAmqGAAJqhwACaogAAmqKAAJqiwACatYAAmr5AAJrGQACazkAAms7AAJrPQACaz8AAmtBAAJrRAACa0UAAmtGAAJrSQACa0oAAmtMAAJrTQACa08AAmtSAAJrUwACa1QAAmtXAAJrWAACa10AAmtqAAJrbwACa3EAAmtzAAJreAACa3sAAmt+AAJrgAACa6UAAmvJAAJr8AACbBQAAmwXAAJsGQACbBsAAmwdAAJsHwACbCEAAmwiAAJsJQACbDIAAmxDAAJsRQACbEcAAmxJAAJsSwACbE0AAmxPAAJsUQACbFMAAmxkAAJsZwACbGoAAmxtAAJscAACbHMAAmx2AAJseQACbHwAAmx+AAJsvQACbL8AAmzBAAJswwACbMYAAmzHAAJsyAACbMkAAmzKAAJszAACbM4AAmzPAAJs0AACbNIAAmzTAAJtEgACbRQAAm0WAAJtGAACbRsAAm0cAAJtHQACbR4AAm0fAAJtIQACbSMAAm0kAAJtJQACbScAAm0oAAJtZwACbWkAAm1sAAJtbgACbXEAAm1yAAJtcwACbXQAAm11AAJtdwACbXkAAm16AAJtewACbX0AAm1+AAJtiwACbYwAAm2NAAJtjwACbc4AAm3QAAJt0gACbdQAAm3XAAJt2AACbdkAAm3aAAJt2wACbd0AAm3fAAJt4AACbeEAAm3jAAJt5AACbiMAAm4lAAJuJwACbikAAm4sAAJuLQACbi4AAm4vAAJuMAACbjIAAm40AAJuNQACbjYAAm44AAJuOQACbngAAm56AAJufAACbn4AAm6BAAJuggACboMAAm6EAAJuhQACbocAAm6JAAJuigACbosAAm6NAAJujgACbs0AAm7PAAJu0QACbtMAAm7WAAJu1wACbtgAAm7ZAAJu2gACbtwAAm7eAAJu3wACbuAAAm7iAAJu4wACbyIAAm8kAAJvJgACbygAAm8rAAJvLAACby0AAm8uAAJvLwACbzEAAm8zAAJvNAACbzUAAm83AAJvOAACb10AAm+BAAJvqAACb8wAAm/PAAJv0QACb9MAAm/VAAJv1wACb9kAAm/aAAJv3QACb+oAAm/5AAJv+wACb/0AAm//AAJwAQACcAMAAnAFAAJwBwACcBYAAnAZAAJwHAACcB8AAnAiAAJwJQACcCgAAnArAAJwLQACcGwAAnBuAAJwcAACcHIAAnB1AAJwdgACcHcAAnB4AAJweQACcHsAAnB9AAJwfgACcH8AAnCBAAJwggACcMEAAnDDAAJwxQACcMcAAnDKAAJwywACcMwAAnDNAAJwzgACcNAAAnDSAAJw0wACcNQAAnDWAAJw1wACcRYAAnEYAAJxGgACcRwAAnEfAAJxIAACcSEAAnEiAAJxIwACcSUAAnEnAAJxKAACcSkAAnErAAJxLAACcWsAAnFtAAJxbwACcXEAAnF0AAJxdQACcXYAAnF3AAJxeAACcXoAAnF8AAJxfQACcX4AAnGAAAJxgQACccAAAnHCAAJxxAACccYAAnHJAAJxygACccsAAnHMAAJxzQACcc8AAnHRAAJx0gACcdMAAnHVAAJx1gACchUAAnIXAAJyGQACchsAAnIeAAJyHwACciAAAnIhAAJyIgACciQAAnImAAJyJwACcigAAnIqAAJyKwACcmoAAnJsAAJybgACcnAAAnJzAAJydAACcnUAAnJ2AAJydwACcnkAAnJ7AAJyfAACcn0AAnJ/AAJygAACcssAAnLuAAJzDgACcy4AAnMwAAJzMgACczQAAnM2AAJzOQACczoAAnM7AAJzPgACcz8AAnNBAAJzQgACc0QAAnNHAAJzSAACc0kAAnNMAAJzTQACc1IAAnNfAAJzZAACc2YAAnNoAAJzbQACc3AAAnNzAAJzdQACc5oAAnO+AAJz5QACdAkAAnQMAAJ0DgACdBAAAnQSAAJ0FAACdBYAAnQXAAJ0GgACdCcAAnQ4AAJ0OgACdDwAAnQ+AAJ0QAACdEIAAnREAAJ0RgACdEgAAnRZAAJ0XAACdF8AAnRiAAJ0ZQACdGgAAnRrAAJ0bgACdHEAAnRzAAJ0sgACdLQAAnS2AAJ0uAACdLsAAnS8AAJ0vQACdL4AAnS/AAJ0wQACdMMAAnTEAAJ0xQACdMcAAnTIAAJ1BwACdQkAAnULAAJ1DQACdRAAAnURAAJ1EgACdRMAAnUUAAJ1FgACdRgAAnUZAAJ1GgACdRwAAnUdAAJ1XAACdV4AAnVhAAJ1YwACdWYAAnVnAAJ1aAACdWkAAnVqAAJ1bAACdW4AAnVvAAJ1cAACdXIAAnVzAAJ1gAACdYEAAnWCAAJ1hAACdcMAAnXFAAJ1xwACdckAAnXMAAJ1zQACdc4AAnXPAAJ10AACddIAAnXUAAJ11QACddYAAnXYAAJ12QACdhgAAnYaAAJ2HAACdh4AAnYhAAJ2IgACdiMAAnYkAAJ2JQACdicAAnYpAAJ2KgACdisAAnYtAAJ2LgACdm0AAnZvAAJ2cQACdnMAAnZ2AAJ2dwACdngAAnZ5AAJ2egACdnwAAnZ+AAJ2fwACdoAAAnaCAAJ2gwACdsIAAnbEAAJ2xgACdsgAAnbLAAJ2zAACds0AAnbOAAJ2zwACdtEAAnbTAAJ21AACdtUAAnbXAAJ22AACdxcAAncZAAJ3GwACdx0AAncgAAJ3IQACdyIAAncjAAJ3JAACdyYAAncoAAJ3KQACdyoAAncsAAJ3LQACd1IAAnd2AAJ3nQACd8EAAnfEAAJ3xgACd8gAAnfKAAJ3zAACd84AAnfPAAJ30gACd98AAnfuAAJ38AACd/IAAnf0AAJ39gACd/gAAnf6AAJ3/AACeAsAAngOAAJ4EQACeBQAAngXAAJ4GgACeB0AAnggAAJ4IgACeGEAAnhjAAJ4ZQACeGcAAnhqAAJ4awACeGwAAnhtAAJ4bgACeHAAAnhyAAJ4cwACeHQAAnh2AAJ4dwACeLYAAni4AAJ4ugACeLwAAni/AAJ4wAACeMEAAnjCAAJ4wwACeMUAAnjHAAJ4yAACeMkAAnjLAAJ4zAACeQsA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AoQvAAKEMgAChDMAAoQ0AAKENwAChDgAAoQ6AAKEOwAChD0AAoRAAAKEQQAChEIAAoRFAAKERgAChEsAAoRYAAKEXQAChF8AAoRhAAKEZgAChGkAAoRsAAKEbgAChJMAAoS3AAKE3gAChQIAAoUFAAKFBwAChQkAAoULAAKFDQAChQ8AAoUQAAKFEwAChSAAAoUxAAKFMwAChTUAAoU3AAKFOQAChTsAAoU9AAKFPwAChUEAAoVSAAKFVQAChVgAAoVbAAKFXgAChWEAAoVkAAKFZwAChWoAAoVsAAKFqwACha0AAoWvAAKFsQAChbQAAoW1AAKFtgAChbcAAoW4AAKFugAChbwAAoW9AAKFvgAChcAAAoXBAAKGAAAChgIAAoYEAAKGBgAChgkAAoYKAAKGCwAChgwAAoYNAAKGDwAChhEAAoYSAAKGEwAChhUAAoYWAAKGVQAChlcAAoZaAAKGXAAChl8AAoZgAAKGYQAChmIAAoZjAAKGZQAChmcAAoZoAAKGaQAChmsAAoZsAAKGeQAChnoAAoZ7AAKGfQAChrwAAoa+AAKGwAAChsIAAobFAAKGxgAChscAAobIAAKGyQAChssAAobNAAKGzgAChs8AAobRAAKG0gAChxEAAocTAAKHFQAChxcAAocaAAKHGwAChxwAAocdAAKHHgAChyAAAociAAKHIwAChyQAAocmAAKHJwACh2YAAodoAAKHagACh2wAAodvAAKHcAACh3EAAodyAAKHcwACh3UAAod3AAKHeAACh3kAAod7AAKHfAACh7sAAoe9AAKHvwACh8EAAofEAAKHxQACh8YAAofHAAKHyAACh8oAAofMAAKHzQACh84AAofQAAKH0QACiBAAAogSAAKIFAACiBYAAogZAAKIGgACiBsAAogcAAKIHQACiB8AAoghAAKIIgACiCMAAoglAAKIJgACiEsAAohvAAKIlgACiLoAAoi9AAKIvwACiMEAAojDAAKIxQACiMcAAojIAAKIywACiNgAAojnAAKI6QACiOsAAojtAAKI7wACiPEAAojzAAKI9QACiQQAAokHAAKJCgACiQ0AAokQAAKJEwACiRYAAokZAAKJGwACiVoAAolcAAKJXgACiWAAAoljAAKJZAACiWUAAolmAAKJZwACiWkAAolrAAKJbAACiW0AAolvAAKJcAACia8AAomxAAKJswACibUAAom4AAKJuQACiboAAom7AAKJvAACib4AAonAAAKJwQACicIAAonEAAKJxQACigQAAooGAAKKCAACigoAAooNAAKKDgACig8AAooQAAKKEQACihMAAooVAAKKFgACihcAAooZAAKKGgACilkAAopbAAKKXQACil8AAopiAAKKYwACimQAAoplAAKKZgACimgAAopqAAKKawACimwAAopuAAKKbwACiq4AAoqwAAKKsgACirQAAoq3AAKKuAACirkAAoq6AAKKuwACir0AAoq/AAKKwAACisEAAorDAAKKxAACiwMAAosFAAKLBwACiwkAAosMAAKLDQACiw4AAosPAAKLEAACixIAAosUAAKLFQACixYAAosYAAKLGQACi1gAAotaAAKLXAACi14AAothAAKLYgACi2MAAotkAAKLZQACi2cAAotpAAKLagACi2sAAottAAKLbgACi7kAAovcAAKL/AACjBwAAoweAAKMIAACjCIAAowkAAKMJwACjCgAAowpAAKMLAACjC0AAowvAAKMMAACjDIAAow1AAKMNgACjDcAAow6AAKMOwACjEAAAoxNAAKMUgACjFQAAoxWAAKMWwACjF4AAoxhAAKMYwACjIgAAoysAAKM0wACjPcAAoz6AAKM/AACjP4AAo0AAAKNAgACjQQAAo0FAAKNCAACjRUAAo0mAAKNKAACjSoAAo0sAAKNLgACjTAAAo0yAAKNNAACjTYAAo1HAAKNSgACjU0AAo1QAAKNUwACjVYAAo1ZAAKNXAACjV8AAo1hAAKNoAACjaIAAo2kAAKNpgACjakAAo2qAAKNqwACjawAAo2tAAKNrwACjbEAAo2yAAKNswACjbUAAo22AAKN9QACjfcAAo35AAKN+wACjf4AAo3/AAKOAAACjgEAAo4CAAKOBAACjgYAAo4HAAKOCAACjgoAAo4LAAKOSgACjkwAAo5PAAKOUQACjlQAAo5VAAKOVgACjlcAAo5YAAKOWgACjlwAAo5dAAKOXgACjmAAAo5hAAKObgACjm8AAo5wAAKOcgACjrEAAo6zAAKOtQACjrcAAo66AAKOuwACjrwAAo69AAKOvgACjsAAAo7CAAKOwwACjsQAAo7GAAKOxwACjwYAAo8IAAKPCgACjwwAAo8PAAKPEAACjxEAAo8SAAKPEwACjxUAAo8XAAKPGAACjxkAAo8bAAKPHAACj1sAAo9dAAKPXwACj2EAAo9kAAKPZQACj2YAAo9nAAKPaAACj2oAAo9sAAKPbQACj24AAo9wAAKPcQACj7AAAo+yAAKPtAACj7YAAo+5AAKPugACj7sAAo+8AAKPvQACj78AAo/BAAKPwgACj8MAAo/FAAKPxgACkAUAApAHAAKQCQACkAsAApAOAAKQDwACkBAAApARAAKQEgACkBQAApAWAAKQFwACkBgAApAaAAKQGwACkEAAApBkAAKQiwACkK8AApCyAAKQtAACkLYAApC4AAKQugACkLwAApC9AAKQwAACkM0AApDcAAKQ3gACkOAAApDiAAKQ5AACkOYAApDoAAKQ6gACkPkAApD8AAKQ/wACkQIAApEFAAKRCAACkQsAApEOAAKREAACkU8AApFRAAKRUwACkVUAApFYAAKRWQACkVoAApFbAAKRXAACkV4AApFgAAKRYQACkWIAApFkAAKRZQACkaQAApGmAAKRqAACkaoAApGtAAKRrgACka8AApGwAAKRsQACkbMAApG1AAKRtgACkbcAApG5AAKRugACkfkAApH7AAKR/QACkf8AApICAAKSAwACkgQAApIFAAKSBgACkggAApIKAAKSCwACkgwAApIOAAKSDwACkk4AApJQAAKSUgACklQAApJXAAKSWAACklkAApJaAAKSWwACkl0AApJfAAKSYAACkmEAApJjAAKSZAACkqMAApKlAAKSpwACkqkAApKsAAKSrQACkq4AApKvAAKSsAACkrIAApK0AAKStQACkrYAApK4AAKSuQACkvgAApL6AAKS/AACkv4AApMBAAKTAgACkwMAApMEAAKTBQACkwcAApMJAAKTCgACkwsAApMNAAKTDgACk00AApNPAAKTUQACk1MAApNWAAKTVwACk1gAApNZAAKTWgACk1wAApNeAAKTXwACk2AAApNiAAKTYwACk64AApPRAAKT8QAClBEAApQTAAKUFQAClBcAApQZAAKUHAAClB0AApQeAAKUIQAClCIAApQkAAKUJQAClCcAApQqAAKUKwAClCwAApQvAAKUMAAClDUAApRCAAKURwAClEkAApRLAAKUUAAClFMAApRWAAKUWAAClH0AApShAAKUyAAClOwAApTvAAKU8QAClPMAApT1AAKU9wAClPkAApT6AAKU/QAClQoAApUbAAKVHQAClR8AApUhAAKVIwAClSUAApUnAAKVKQAClSsAApU8AAKVPwAClUIAApVFAAKVSAAClUsAApVOAAKVUQAClVQAApVWAAKVlQAClZcAApWZAAKVmwAClZ4AApWfAAKVoAAClaEAApWiAAKVpAAClaYAApWnAAKVqAAClaoAApWrAAKV6gAClewAApXuAAKV8AAClfMAApX0AAKV9QAClfYAApX3AAKV+QAClfsAApX8AAKV/QAClf8AApYAAAKWPwAClkEAApZEAAKWRgAClkkAApZKAAKWSwAClkwAApZNAAKWTwACllEAApZSAAKWUwACllUAApZWAAKWYwAClmQAApZlAAKWZwAClqYAApaoAAKWqgAClqwAApavAAKWsAAClrEAApayAAKWswAClrUAApa3AAKWuAAClrkAApa7AAKWvAAClvsAApb9AAKW/wAClwEAApcEAAKXBQAClwYAApcHAAKXCAAClwoAApcMAAKXDQAClw4AApcQAAKXEQACl1AAApdSAAKXVAACl1YAApdZAAKXWgACl1sAApdcAAKXXQACl18AApdhAAKXYgACl2MAApdlAAKXZgACl6UAApenAAKXqQACl6sAApeuAAKXrwACl7AAApexAAKXsgACl7QAApe2AAKXtwACl7gAApe6AAKXuwACl/oAApf8AAKX/gACmAAAApgDAAKYBAACmAUAApgGAAKYBwACmAkAApgLAAKYDAACmA0AApgPAAKYEAACmDUAAphZAAKYgAACmKQAApinAAKYqQACmKsAApitAAKYrwACmLEAApiyAAKYtQACmMIAApjRAAKY0wACmNUAApjXAAKY2QACmNsAApjdAAKY3wACmO4AApjxAAKY9AACmPcAApj6AAKY/QACmQAAApkDAAKZBQACmUQAAplGAAKZSAACmUoAAplNAAKZTgACmU8AAplQAAKZUQACmVMAAplVAAKZVgACmVcAAplZAAKZWgACmZkAApmbAAKZnQACmZ8AApmiAAKZowACmaQAApmlAAKZpgACmagAApmqAAKZqwACmawAApmuAAKZrwACme4AApnwAAKZ8gACmfQAApn3AAKZ+AACmfkAApn6AAKZ+wACmf0AApn/AAKaAAACmgEAApoDAAKaBAACmkMAAppFAAKaRwACmkkAAppMAAKaTQACmk4AAppPAAKaUAACmlIAAppUAAKaVQACmlYAAppYAAKaWQACmpgAApqaAAKanAACmp4AApqhAAKaogACmqMAApqkAAKapQACmqcAApqpAAKaqgACmqsAApqtAAKargACmu0AAprvAAKa8QACmvMAApr2AAKa9wACmvgAApr5AAKa+gACmvwAApr+AAKa/wACmwAAApsCAAKbAwACm0IAAptEAAKbRgACm0gAAptLAAKbTAACm00AAptOAAKbTwACm1EAAptTAAKbVAACm1UAAptXAAKbWAACm6MAApvGAAKb5gACnAYAApwIAAKcCgACnAwAApwOAAKcEQACnBIAApwTAAKcFgACnBcAApwZAAKcGgACnBwAApwfAAKcIAACnCEAApwkAAKcJQACnCoAApw3AAKcPAACnD4AApxAAAKcRQACnEgAApxLAAKcTQACnHIAApyWAAKcvQACnOEAApzkAAKc5gACnOgAApzqAAKc7AACnO4AApzvAAKc8gACnP8AAp0QAAKdEgACnRQAAp0WAAKdGAACnRoAAp0cAAKdHgACnSAAAp0xAAKdNAACnTcAAp06AAKdPQACnUAAAp1DAAKdRgACnUkAAp1LAAKdigACnYwAAp2OAAKdkAACnZMAAp2UAAKdlQACnZYAAp2XAAKdmQACnZsAAp2cAAKdnQACnZ8AAp2gAAKd3wACneEAAp3jAAKd5QACnegAAp3pAAKd6gACnesAAp3sAAKd7gACnfAAAp3xAAKd8gACnfQAAp31AAKeNAACnjYAAp45AAKeOwACnj4AAp4/AAKeQAACnkEAAp5CAAKeRAACnkYAAp5HAAKeSAACnkoAAp5LAAKeWAACnlkAAp5aAAKeXAACnpsAAp6dAAKenwACnqEAAp6kAAKepQACnqYAAp6nAAKeqAACnqoAAp6sAAKerQACnq4AAp6wAAKesQACnvAAAp7yAAKe9AACnvYAAp75AAKe+gACnvsAAp78AAKe/QACnv8AAp8BAAKfAgACnwMAAp8FAAKfBgACn0UAAp9HAAKfSQACn0sAAp9OAAKfTwACn1AAAp9RAAKfUgACn1QAAp9WAAKfVwACn1gAAp9aAAKfWwACn5oAAp+cAAKfngACn6AAAp+jAAKfpAACn6UAAp+mAAKfpwACn6kAAp+rAAKfrAACn60AAp+vAAKfsAACn+8AAp/xAAKf8wACn/UAAp/4AAKf+QACn/oAAp/7AAKf/AACn/4AAqAAAAKgAQACoAIAAqAEAAKgBQACoCoAAqBOAAKgdQACoJkAAqCcAAKgngACoKAAAqCiAAKgpAACoKYAAqCnAAKgqgACoLcAAqDGAAKgyAACoMoAAqDMAAKgzgACoNAAAqDSAAKg1AACoOMAAqDmAAKg6QACoOwAAqDvAAKg8gACoPUAAqD4AAKg+gACoTkAAqE7AAKhPQACoT8AAqFCAAKhQwACoUQAAqFFAAKhRgACoUgAAqFKAAKhSwACoUwAAqFOAAKhTwACoY4AAqGQAAKhkgACoZQAAqGXAAKhmAACoZkAAqGaAAKhmwACoZ0AAqGfAAKhoAACoaEAAqGjAAKhpAACoeMAAqHlAAKh5wACoekAAqHsAAKh7QACoe4AAqHvAAKh8AACofIAAqH0AAKh9QACofYAAqH4AAKh+QACojgAAqI6AAKiPAACoj4AAqJBAAKiQgACokMAAqJEAAKiRQACokcAAqJJAAKiSgACoksAAqJNAAKiTgACoo0AAqKPAAKikQACopMAAqKWAAKilwACopgAAqKZAAKimgACopwAAqKeAAKinwACoqAAAqKiAAKiowACouIAAqLkAAKi5gACougAAqLrAAKi7AACou0AAqLuAAKi7wACovEAAqLzAAKi9AACovUAAqL3AAKi+AACozcAAqM5AAKjOwACoz0AAqNAAAKjQQACo0IAAqNDAAKjRAACo0YAAqNIAAKjSQACo0oAAqNMAAKjTQACo5gAAqO7AAKj2wACo/sAAqP9AAKj/wACpAEAAqQDAAKkBgACpAcAAqQIAAKkCwACpAwAAqQOAAKkDwACpBEAAqQUAAKkFQACpBYAAqQZAAKkGgACpCMAAqQwAAKkNQACpDcAAqQ5AAKkPgACpEEAAqREAAKkRgACpGsAAqSPAAKktgACpNoAAqTdAAKk3wACpOEAAqTjAAKk5QACpOcAAqToAAKk6wACpPgAAqUJAAKlCwACpQ0AAqUPAAKlEQACpRMAAqUVAAKlFwACpRkAAqUqAAKlLQACpTAAAqUzAAKlNgACpTkAAqU8AAKlPwACpUIAAqVEAAKlgwACpYUAAqWHAAKliQACpYwAAqWNAAKljgACpY8AAqWQAAKlkgACpZQAAqWVAAKllgACpZgAAqWZAAKl2AACpdoAAqXcAAKl3gACpeEAAqXiAAKl4wACpeQAAqXlAAKl5wACpekAAqXqAAKl6wACpe0AAqXuAAKmLQACpi8AAqYyAAKmNAACpjcAAqY4AAKmOQACpjoAAqY7AAKmPQACpj8AAqZAAAKmQQACpkMAAqZEAAKmUQACplIAAqZTAAKmVQACppQAAqaWAAKmmAACppoAAqadAAKmngACpp8AAqagAAKmoQACpqMAAqalAAKmpgACpqcAAqapAAKmqgACpukAAqbrAAKm7QACpu8AAqbyAAKm8wACpvQAAqb1AAKm9gACpvgAAqb6AAKm+wACpvwAAqb+AAKm/wACpz4AAqdAAAKnQgACp0QAAqdHAAKnSAACp0kAAqdKAAKnSwACp00AAqdPAAKnUAACp1EAAqdTAAKnVAACp5MAAqeVAAKnlwACp5kAAqecAAKnnQACp54AAqefAAKnoAACp6IAAqekAAKnpQACp6YAAqeoAAKnqQACp+gAAqfqAAKn7AACp+4AAqfxAAKn8gACp/MAAqf0AAKn9QACp/cAAqf5AAKn+gACp/sAAqf9AAKn/gACqCMAAqhHAAKobgACqJIAAqiVAAKolwACqJkAAqibAAKonQACqJ8AAqigAAKoowACqLAAAqi/AAKowQACqMMAAqjFAAKoxwACqMkAAqjLAAKozQACqNwAAqjfAAKo4gACqOUAAqjoAAKo6wACqO4AAqjxAAKo8wACqTIAAqk0AAKpNgACqTgAAqk7AAKpPAACqT0AAqk+AAKpPwACqUEAAqlDAAKpRAACqUUAAqlHAAKpSAACqYcAAqmJAAKpiwACqY0AAqmQAAKpkQACqZIAAqmTAAKplAACqZYAAqmYAAKpmQACqZoAAqmcAAKpnQACqdwAAqneAAKp4AACqeIAAqnlAAKp5gACqecAAqnoAAKp6QACqesAAqntAAKp7gACqe8AAqnxAAKp8gACqjEAAqozAAKqNQACqjcAAqo6AAKqOwACqjwAAqo9AAKqPgACqkAAAqpCAAKqQwACqkQAAqpGAAKqRwACqoYAAqqIAAKqigACqowAAqqPAAKqkAACqpEAAqqSAAKqkwACqpUAAqqXAAKqmAACqpkAAqqbAAKqnAACqtsAAqrdAAKq3wACquEAAqrkAAKq5QACquYAAqrnAAKq6AACquoAAqrsAAKq7QACqu4AAqrwAAKq8QACqzAAAqsyAAKrNAACqzYAAqs5AAKrOgACqzsAAqs8AAKrPQACqz8AAqtBAAKrQgACq0MAAqtFAAKrRgACq5EAAqu0AAKr1AACq/QAAqv2AAKr+AACq/oAAqv8AAKr/wACrAAAAqwBAAKsBAACrAUAAqwHAAKsCAACrAoAAqwNAAKsDgACrA8AAqwSAAKsEwACrBgAAqwlAAKsKgACrCwAAqwuAAKsMwACrDYAAqw5AAKsOwACrGAAAqyEAAKsqwACrM8AAqzSAAKs1AACrNYAAqzYAAKs2gACrNwAAqzdAAKs4AACrO0AAqz+AAKtAAACrQIAAq0EAAKtBgACrQgAAq0KAAKtDAACrQ4AAq0fAAKtIgACrSUAAq0oAAKtKwACrS4AAq0xAAKtNAACrTcAAq05AAKteAACrXoAAq18AAKtfgACrYEAAq2CAAKtgwACrYQAAq2FAAKthwACrYkAAq2KAAKtiwACrY0AAq2OAAKtzQACrc8AAq3RAAKt0wACrdYAAq3XAAKt2AACrdkAAq3aAAKt3AACrd4AAq3fAAKt4AACreIAAq3jAAKuIgACriQAAq4nAAKuKQACriwAAq4tAAKuLgACri8AAq4wAAKuMgACrjQAAq41AAKuNgACrjgAAq45AAKuRgACrkcAAq5IAAKuSgACrokAAq6LAAKujQACro8AAq6SAAKukwACrpQAAq6VAAKulgACrpgAAq6aAAKumwACrpwAAq6eAAKunwACrt4AAq7gAAKu4gACruQAAq7nAAKu6AACrukAAq7qAAKu6wACru0AAq7vAAKu8AACrvEAAq7zAAKu9AACrzMAAq81AAKvNwACrzkAAq88AAKvPQACrz4AAq8/AAKvQAACr0IAAq9EAAKvRQACr0YAAq9IAAKvSQACr4gAAq+KAAKvjAACr44AAq+RAAKvkgACr5MAAq+UAAKvlQACr5cAAq+ZAAKvmgACr5sAAq+dAAKvngACr90AAq/fAAKv4QACr+MAAq/mAAKv5wACr+gAAq/pAAKv6gACr+wAAq/uAAKv7wACr/AAAq/yAAKv8wACsBgAArA8AAKwYwACsIcAArCKAAKwjAACsI4AArCQAAKwkgACsJQAArCVAAKwmAACsKUAArC0AAKwtgACsLgAArC6AAKwvAACsL4AArDAAAKwwgACsNEAArDUAAKw1wACsNoAArDdAAKw4AACsOMAArDmAAKw6AACsScAArEpAAKxKwACsS0AArEwAAKxMQACsTIAArEzAAKxNAACsTYAArE4AAKxOQACsToAArE8AAKxPQACsXwAArF+AAKxgAACsYIAArGFAAKxhgACsYcAArGIAAKxiQACsYsAArGNAAKxjgACsY8AArGRAAKxkgACsdEAArHTAAKx1QACsdcAArHaAAKx2wACsdwAArHdAAKx3gACseAAArHiAAKx4wACseQAArHmAAKx5wACsiYAArIoAAKyKwACsi0AArIwAAKyMQACsjIAArIzAAKyNAACsjYAArI4AAKyOQACsjoAArI8AAKyPQACsnwAArJ+AAKygAACsoIAArKFAAKyhgACsocAArKIAAKyiQACsosAArKNAAKyjgACso8AArKRAAKykgACstEAArLTAAKy1QACstcAArLaAAKy2wACstwAArLdAAKy3gACsuAAArLiAAKy4wACsuQAArLmAAKy5wACsyYAArMoAAKzKgACsywAArMvAAKzMAACszEAArMyAAKzMwACszUAArM3AAKzOAACszkAArM7AAKzPAACs4cAArOqAAKzygACs+oAArPsAAKz7gACs/AAArPyAAKz9QACs/YAArP3AAKz+gACs/sAArP9AAKz/gACtAAAArQDAAK0BAACtAUAArQIAAK0CQACtA4AArQbAAK0IAACtCIAArQkAAK0KQACtCwAArQvAAK0MQACtFYAArR6AAK0oQACtMUAArTIAAK0ygACtMwAArTOAAK00AACtNIAArTTAAK01gACtOMAArT0AAK09gACtPgAArT6AAK0/AACtP4AArUAAAK1AgACtQQAArUVAAK1GAACtRsAArUeAAK1IQACtSQAArUnAAK1KgACtS0AArUvAAK1bgACtXAAArVyAAK1dAACtXcAArV4AAK1eQACtXoAArV7AAK1fQACtX8AArWAAAK1gQACtYMAArWEAAK1wwACtcUAArXHAAK1yQACtcwAArXNAAK1zgACtc8AArXQAAK10gACtdQAArXVAAK11gACtdgAArXZAAK2GAACthoAArYdAAK2HwACtiIAArYjAAK2JAACtiUAArYmAAK2KAACtioAArYrAAK2LAACti4AArYvAAK2PAACtj0AArY+AAK2QAACtn8AAraBAAK2gwACtoUAAraIAAK2iQACtooAAraLAAK2jAACto4AAraQAAK2kQACtpIAAraUAAK2lQACttQAArbWAAK22AACttoAArbdAAK23gACtt8AArbgAAK24QACtuMAArblAAK25gACtucAArbpAAK26gACtykAArcrAAK3LQACty8AArcyAAK3MwACtzQAArc1AAK3NgACtzgAArc6AAK3OwACtzwAArc+AAK3PwACt34AAreAAAK3ggACt4QAAreHAAK3iAACt4kAAreKAAK3iwACt40AArePAAK3kAACt5EAAreTAAK3lAACt9MAArfVAAK31wACt9kAArfcAAK33QACt94AArffAAK34AACt+IAArfkAAK35QACt+YAArfoAAK36QACuA4AArgyAAK4WQACuH0AAriAAAK4ggACuIQAAriGAAK4iAACuIoAAriLAAK4jgACuJsAAriqAAK4rAACuK4AAriwAAK4sgACuLQAAri2AAK4uAACuMcAArjKAAK4zQACuNAAArjTAAK41gACuNkAArjcAAK43gACuR0AArkfAAK5IgACuSQAArknAAK5KAACuSkAArkqAAK5KwACuS0AArkvAAK5MAACuTEAArkzAAK5NAACuXMAArl1AAK5dwACuXkAArl8AAK5fQACuX4AArl/AAK5gAACuYIAArmEAAK5hQACuYYAArmIAAK5iQACucgAArnKAAK5zAACuc4AArnRAAK50gACudMAArnUAAK51QACudcAArnZAAK52gACudsAArndAAK53gACuh0AArofAAK6IgACuiQAAronAAK6KAACuikAAroqAAK6KwACui0AArovAAK6MAACujEAArozAAK6NAACunMAArp1AAK6dwACunkAArp8AAK6fQACun4AArp/AAK6gAACuoIAArqEAAK6hQACuoYAArqIAAK6iQACusgAArrKAAK6zAACus4AArrRAAK60gACutMAArrUAAK61QACutcAArrZAAK62gACutsAArrdAAK63gACux0AArsfAAK7IQACuyMAArsmAAK7JwACuygAArspAAK7KgACuywAArsuAAK7LwACuzAAArsyAAK7MwACu34AAruhAAK7wQACu+EAArvjAAK75QACu+cAArvpAAK77AACu+0AArvuAAK78QACu/IAArv0AAK79QACu/cAArv6AAK7+wACu/wAArv/AAK8AAACvAUAArwSAAK8FwACvBkAArwbAAK8IAACvCMAArwmAAK8KAACvE0AArxxAAK8mAACvLwAAry/AAK8wQACvMMAArzFAAK8xwACvMkAArzKAAK8zQACvNoAArzrAAK87QACvO8AArzxAAK88wACvPUAArz3AAK8+QACvPsAAr0MAAK9DwACvRIAAr0VAAK9GAACvRsAAr0eAAK9IQACvSQAAr0mAAK9ZQACvWcAAr1pAAK9awACvW4AAr1vAAK9cAACvXEAAr1yAAK9dAACvXYAAr13AAK9eAACvXoAAr17AAK9ugACvbwAAr2+AAK9wAACvcMAAr3EAAK9xQACvcYAAr3HAAK9yQACvcsAAr3MAAK9zQACvc8AAr3QAAK+DwACvhEAAr4UAAK+FgACvhkAAr4aAAK+GwACvhwAAr4dAAK+HwACviEAAr4iAAK+IwACviUAAr4mAAK+MwACvjQAAr41AAK+NwACvnYAAr54AAK+egACvnwAAr5/AAK+gAACvoEAAr6CAAK+gwACvoUAAr6HAAK+iAACvokAAr6LAAK+jAACvssAAr7NAAK+zwACvtEAAr7UAAK+1QACvtYAAr7XAAK+2AACvtoAAr7cAAK+3QACvt4AAr7gAAK+4QACvyAAAr8iAAK/JAACvyYAAr8pAAK/KgACvysAAr8sAAK/LQACvy8AAr8xAAK/MgACvzMAAr81AAK/NgACv3UAAr93AAK/eQACv3sAAr9+AAK/fwACv4AAAr+BAAK/ggACv4QAAr+GAAK/hwACv4gAAr+KAAK/iwACv8oAAr/MAAK/zgACv9AAAr/TAAK/1AACv9UAAr/WAAK/1wACv9kAAr/bAAK/3AACv90AAr/fAAK/4AACwAUAAsApAALAUAACwHQAAsB3AALAeQACwHsAAsB9AALAfwACwIEAAsCCAALAhQACwJIAAsChAALAowACwKUAAsCnAALAqQACwKsAAsCtAALArwACwL4AAsDBAALAxAACwMcAAsDKAALAzQACwNAAAsDTAALA1QACwRQAAsEWAALBGAACwRoAAsEdAALBHgACwR8AAsEgAALBIQACwSMAAsElAALBJgACwScAAsEpAALBKgACwWkAAsFrAALBbQACwW8AAsFyAALBcwACwXQAAsF1AALBdgACwXgAAsF6AALBewACwXwAAsF+AALBfwACwb4AAsHAAALBwgACwcQAAsHHAALByAACwckAAsHKAALBywACwc0AAsHPAALB0AACwdEAAsHTAALB1AACwhMAAsIVAALCGAACwhoAAsIdAALCHgACwh8AAsIgAALCIQACwiMAAsIlAALCJgACwicAAsIpAALCKgACwmkAAsJrAALCbQACwm8AAsJyAALCcwACwnQAAsJ1AALCdgACwngAAsJ6AALCewACwnwAAsJ+AALCfwACwr4AAsLAAALCwwACwsUAAsLIAALCyQACwsoAAsLLAALCzAACws4AAsLQAALC0QACwtIAAsLUAALC1QACwvwAAsM7AALDPQACwz8AAsNBAALDRAACw0UAAsNGAALDRwACw0gAAsNKAALDTAACw00AAsNOAALDUAACw1EAAsOcAALDvwACw98AAsP/AALEAQACxAMAAsQFAALEBwACxAoAAsQLAALEDAACxA8AAsQQAALEEgACxBMAAsQVAALEGAACxBkAAsQaAALEHQACxB4AAsQnAALENAACxDkAAsQ7AALEPQACxEIAAsRFAALESAACxEoAAsRvAALEkwACxLoAAsTeAALE4QACxOMAAsTlAALE5wACxOkAAsTrAALE7AACxO8AAsT8AALFDQACxQ8AAsURAALFEwACxRUAAsUXAALFGQACxRsAAsUdAALFLgACxTEAAsU0AALFNwACxToAAsU9AALFQAACxUMAAsVGAALFSAACxYcAAsWJAALFiwACxY0AAsWQAALFkQACxZIAAsWTAALFlAACxZYAAsWYAALFmQACxZoAAsWcAALFnQACxdwAAsXeAALF4AACxeIAAsXlAALF5gACxecAAsXoAALF6QACxesAAsXtAALF7gACxe8AAsXxAALF8gACxjEAAsYzAALGNgACxjgAAsY7AALGPAACxj0AAsY+AALGPwACxkEAAsZDAALGRAACxkUAAsZHAALGSAACxlUAAsZWAALGVwACxlkAAsaYAALGmgACxpwAAsaeAALGoQACxqIAAsajAALGpAACxqUAAsanAALGqQACxqoAAsarAALGrQACxq4AAsbtAALG7wACxvEAAsbzAALG9gACxvcAAsb4AALG+QACxvoAAsb8AALG/gACxv8AAscAAALHAgACxwMAAsdCAALHRAACx0YAAsdIAALHSwACx0wAAsdNAALHTgACx08AAsdRAALHUwACx1QAAsdVAALHVwACx1gAAseXAALHmQACx5sAAsedAALHoAACx6EAAseiAALHowACx6QAAsemAALHqAACx6kAAseqAALHrAACx60AAsfsAALH7gACx/AAAsfyAALH9QACx/YAAsf3AALH+AACx/kAAsf7AALH/QACx/4AAsf/AALIAQACyAIAAsgnAALISwACyHIAAsiWAALImQACyJsAAsidAALInwACyKEAAsijAALIpAACyKcAAsi0AALIwwACyMUAAsjHAALIyQACyMsAAsjNAALIzwACyNEAAsjgAALI4wACyOYAAsjpAALI7AACyO8AAsjyAALI9QACyPcAAsk2AALJOAACyToAAsk8AALJPwACyUAAAslBAALJQgACyUMAAslFAALJRwACyUgAAslJAALJSwACyUwAAsmLAALJjQACyY8AAsmRAALJlAACyZUAAsmWAALJlwACyZgAAsmaAALJnAACyZ0AAsmeAALJoAACyaEAAsngAALJ4gACyeQAAsnmAALJ6QACyeoAAsnrAALJ7AACye0AAsnvAALJ8QACyfIAAsnzAALJ9QACyfYAAso1AALKNwACyjkAAso7AALKPgACyj8AAspAAALKQQACykIAAspEAALKRgACykcAAspIAALKSgACyksAAsqKAALKjAACyo4AAsqQAALKkwACypQAAsqVAALKlgACypcAAsqZAALKmwACypwAAsqdAALKnwACyqAAAsrfAALK4QACyuMAAsrlAALK6AACyukAAsrqAALK6wACyuwAAsruAALK8AACyvEAAsryAALK9AACyvUAAss0AALLNgACyzgAAss6AALLPQACyz4AAss/AALLQAACy0EAAstDAALLRQACy0YAAstHAALLSQACy0oAAsuVAALLuAACy9gAAsv4AALL+gACy/wAAsv+AALMAAACzAMAAswEAALMBQACzAgAAswJAALMCwACzAwAAswOAALMEAACzBEAAswSAALMFQACzBYAAswbAALMKAACzC0AAswvAALMMQACzDYAAsw5AALMPAACzD4AAsxjAALMhwACzK4AAszSAALM1QACzNcAAszZAALM2wACzN0AAszfAALM4AACzOMAAszwAALNAQACzQMAAs0FAALNBwACzQkAAs0LAALNDQACzQ8AAs0RAALNIgACzSUAAs0oAALNKwACzS4AAs0xAALNNAACzTcAAs06AALNPAACzXsAAs19AALNfwACzYEAAs2EAALNhQACzYYAAs2HAALNiAACzYoAAs2MAALNjQACzY4AAs2QAALNkQACzdAAAs3SAALN1AACzdYAAs3ZAALN2gACzdsAAs3cAALN3QACzd8AAs3hAALN4gACzeMAAs3lAALN5gACziUAAs4nAALOKgACziwAAs4vAALOMAACzjEAAs4yAALOMwACzjUAAs43AALOOAACzjkAAs47AALOPAACzkkAAs5KAALOSwACzk0AAs6MAALOjgACzpAAAs6SAALOlQACzpYAAs6XAALOmAACzpkAAs6bAALOnQACzp4AAs6fAALOoQACzqIAAs7hAALO4wACzuUAAs7nAALO6gACzusAAs7sAALO7QACzu4AAs7wAALO8gACzvMAAs70AALO9gACzvcAAs82AALPOAACzzoAAs88AALPPwACz0AAAs9BAALPQgACz0MAAs9FAALPRwACz0gAAs9JAALPSwACz0wAAs+LAALPjQACz48AAs+RAALPlAACz5UAAs+WAALPlwACz5gAAs+aAALPnAACz50AAs+eAALPoAACz6EAAs/gAALP4gACz+QAAs/mAALP6QACz+oAAs/rAALP7AACz+0AAs/vAALP8QACz/IAAs/zAALP9QACz/YAAtAbAALQPwAC0GYAAtCKAALQjQAC0I8AAtCRAALQkwAC0JUAAtCXAALQmAAC0JsAAtCoAALQtwAC0LkAAtC7AALQvQAC0L8AAtDBAALQwwAC0MUAAtDUAALQ1wAC0NoAAtDdAALQ4AAC0OMAAtDmAALQ6QAC0OsAAtEqAALRLAAC0S4AAtEwAALRMwAC0TQAAtE1AALRNgAC0TcAAtE5AALROwAC0TwAAtE9AALRPwAC0UAAAtF/AALRgQAC0YMAAtGFAALRiAAC0YkAAtGKAALRiwAC0YwAAtGOAALRkAAC0ZEAAtGSAALRlAAC0ZUAAtHUAALR1gAC0dgAAtHaAALR3QAC0d4AAtHfAALR4AAC0eEAAtHjAALR5QAC0eYAAtHnAALR6QAC0eoAAtIpAALSKwAC0i4AAtIwAALSMwAC0jQAAtI1AALSNgAC0jcAAtI5AALSOwAC0jwAAtI9AALSPwAC0kAAAtJ/AALSgQAC0oMAAtKFAALSiAAC0okAAtKKAALSiwAC0owAAtKOAALSkAAC0pEAAtKSAALSlAAC0pUAAtLUAALS1gAC0tgAAtLaAALS3QAC0t4AAtLfAALS4AAC0uEAAtLjAALS5QAC0uYAAtLnAALS6QAC0uoAAtMpAALTKwAC0y0AAtMvAALTMgAC0zMAAtM0AALTNQAC0zYAAtM4AALTOgAC0zsAAtM8AALTPgAC0z8AAtOKAALTrQAC080AAtPtAALT7wAC0/EAAtPzAALT9QAC0/gAAtP5AALT+gAC0/0AAtP+AALUAAAC1AEAAtQDAALUBgAC1AcAAtQIAALUCwAC1AwAAtQRAALUHgAC1CMAAtQlAALUJwAC1CwAAtQvAALUMgAC1DQAAtRZAALUfQAC1KQAAtTIAALUywAC1M0AAtTPAALU0QAC1NMAAtTVAALU1gAC1NkAAtTmAALU9wAC1PkAAtT7AALU/QAC1P8AAtUBAALVAwAC1QUAAtUHAALVGAAC1RsAAtUeAALVIQAC1SQAAtUnAALVKgAC1S0AAtUwAALVMgAC1XEAAtVzAALVdQAC1XcAAtV6AALVewAC1XwAAtV9AALVfgAC1YAAAtWCAALVgwAC1YQAAtWGAALVhwAC1cYAAtXIAALVygAC1cwAAtXPAALV0AAC1dEAAtXSAALV0wAC1dUAAtXXAALV2AAC1dkAAtXbAALV3AAC1hsAAtYdAALWIAAC1iIAAtYlAALWJgAC1icAAtYoAALWKQAC1isAAtYtAALWLgAC1i8AAtYxAALWMgAC1j8AAtZAAALWQQAC1kMAAtaCAALWhAAC1oYAAtaIAALWiwAC1owAAtaNAALWjgAC1o8AAtaRAALWkwAC1pQAAtaVAALWlwAC1pgAAtbXAALW2QAC1tsAAtbdAALW4AAC1uEAAtbiAALW4wAC1uQAAtbmAALW6AAC1ukAAtbqAALW7AAC1u0AAtcsAALXLgAC1zAAAtcyAALXNQAC1zYAAtc3AALXOAAC1zkAAtc7AALXPQAC1z4AAtc/AALXQQAC10IAAteBAALXgwAC14UAAteHAALXigAC14sAAteMAALXjQAC144AAteQAALXkgAC15MAAteUAALXlgAC15cAAtfWAALX2AAC19oAAtfcAALX3wAC1+AAAtfhAALX4gAC1+MAAtflAALX5wAC1+gAAtfpAALX6wAC1+wAAtgRAALYNQAC2FwAAtiAAALYgwAC2IUAAtiHAALYiQAC2IsAAtiNAALYjgAC2JEAAtieAALYrQAC2K8AAtixAALYswAC2LUAAti3AALYuQAC2LsAAtjKAALYzQAC2NAAAtjTAALY1gAC2NkAAtjcAALY3wAC2OEAAtkgAALZIgAC2SQAAtkmAALZKQAC2SoAAtkrAALZLAAC2S0AAtkvAALZMQAC2TIAAtkzAALZNQAC2TYAAtl1AALZdwAC2XkAAtl7AALZfgAC2X8AAtmAAALZgQAC2YIAAtmEAALZhgAC2YcAAtmIAALZigAC2YsAAtnKAALZzAAC2c4AAtnQAALZ0wAC2dQAAtnVAALZ1gAC2dcAAtnZAALZ2wAC2dwAAtndAALZ3wAC2eAAAtofAALaIQAC2iMAAtolAALaKAAC2ikAAtoqAALaKwAC2iwAAtouAALaMAAC2jEAAtoyAALaNAAC2jUAAtp0AALadgAC2ngAAtp6AALafQAC2n4AAtp/AALagAAC2oEAAtqDAALahQAC2oYAAtqHAALaiQAC2ooAAtrJAALaywAC2s0AAtrPAALa0gAC2tMAAtrUAALa1QAC2tYAAtrYAALa2gAC2tsAAtrcAALa3gAC2t8AAtseAALbIAAC2yIAAtskAALbJwAC2ygAAtspAALbKgAC2ysAAtstAALbLwAC2zAAAtsxAALbMwAC2zQAAtt/AALbogAC28IAAtviAALb5AAC2+YAAtvoAALb6gAC2+0AAtvuAALb7wAC2/IAAtvzAALb9QAC2/YAAtv4AALb+wAC2/wAAtv9AALcAAAC3AEAAtwGAALcEwAC3BgAAtwaAALcHAAC3CEAAtwkAALcJwAC3CkAAtxOAALccgAC3JkAAty9AALcwAAC3MIAAtzEAALcxgAC3MgAAtzKAALcywAC3M4AAtzbAALc7AAC3O4AAtzwAALc8gAC3PQAAtz2AALc+AAC3PoAAtz8AALdDQAC3RAAAt0TAALdFgAC3RkAAt0cAALdHwAC3SIAAt0lAALdJwAC3WYAAt1oAALdagAC3WwAAt1vAALdcAAC3XEAAt1yAALdcwAC3XUAAt13AALdeAAC3XkAAt17AALdfAAC3bsAAt29AALdvwAC3cEAAt3EAALdxQAC3cYAAt3HAALdyAAC3coAAt3MAALdzQAC3c4AAt3QAALd0QAC3hAAAt4SAALeFQAC3hcAAt4aAALeGwAC3hwAAt4dAALeHgAC3iAAAt4iAALeIwAC3iQAAt4mAALeJwAC3jQAAt41AALeNgAC3jgAAt53AALeeQAC3nsAAt59AALegAAC3oEAAt6CAALegwAC3oQAAt6GAALeiAAC3okAAt6KAALejAAC3o0AAt7MAALezgAC3tAAAt7SAALe1QAC3tYAAt7XAALe2AAC3tkAAt7bAALe3QAC3t4AAt7fAALe4QAC3uIAAt8hAALfIwAC3yUAAt8nAALfKgAC3ysAAt8sAALfLQAC3y4AAt8wAALfMgAC3zMAAt80AALfNgAC3zcAAt92AALfeAAC33oAAt98AALffwAC34AAAt+BAALfggAC34MAAt+FAALfhwAC34gAAt+JAALfiwAC34wAAt/LAALfzQAC388AAt/RAALf1AAC39UAAt/WAALf1wAC39gAAt/aAALf3AAC390AAt/eAALf4AAC3+EAAuAGAALgKgAC4FEAAuB1AALgeAAC4HoAAuB8AALgfgAC4IAAAuCCAALggwAC4IYAAuCTAALgogAC4KQAAuCmAALgqAAC4KoAAuCsAALgrgAC4LAAAuC/AALgwgAC4MUAAuDIAALgywAC4M4AAuDRAALg1AAC4NYAAuEVAALhFwAC4RkAAuEbAALhHgAC4R8AAuEgAALhIQAC4SIAAuEkAALhJgAC4ScAAuEoAALhKgAC4SsAAuFqAALhbAAC4W4AAuFwAALhcwAC4XQAAuF1AALhdgAC4XcAAuF5AALhewAC4XwAAuF9AALhfwAC4YAAAuG/AALhwQAC4cMAAuHFAALhyAAC4ckAAuHKAALhywAC4cwAAuHOAALh0AAC4dEAAuHSAALh1AAC4dUAAuIUAALiFgAC4hkAAuIbAALiHgAC4h8AAuIgAALiIQAC4iIAAuIkAALiJgAC4icAAuIoAALiKgAC4isAAuJqAALibAAC4m4AAuJwAALicwAC4nQAAuJ1AALidgAC4ncAAuJ5AALiewAC4nwAAuJ9AALifwAC4oAAAuK/AALiwQAC4sMAAuLFAALiyAAC4skAAuLKAALiywAC4swAAuLOAALi0AAC4tEAAuLSAALi1AAC4tUAAuMUAALjFgAC4xgAAuMaAALjHQAC4x4AAuMfAALjIAAC4yEAAuMjAALjJQAC4yYAAuMnAALjKQAC4yoAAuMzAALjNAAC4zYAAuN1AALjdwAC43kAAuN7AALjfgAC438AAuOAAALjgQAC44IAAuOEAALjhwAC44gAAuOJAALjiwAC44wAAuPLAALjzQAC488AAuPRAALj1AAC49UAAuPWAALj1wAC49gAAuPaAALj3QAC494AAuPfAALj4QAC4+IAAuQhAALkIwAC5CYAAuQoAALkKwAC5CwAAuQtAALkLgAC5C8AAuQxAALkNAAC5DUAAuQ2AALkOAAC5DkAAuSEAALkpwAC5McAAuTnAALk6QAC5OsAAuTtAALk7wAC5PEAAuTyAALk8wAC5PYAAuT3AALk+QAC5PoAAuT8AALk/wAC5QAAAuUBAALlBAAC5QUAAuUKAALlFwAC5RwAAuUeAALlIAAC5SUAAuUoAALlKwAC5S0AAuVSAALldgAC5Z0AAuXBAALlxAAC5cYAAuXIAALlygAC5cwAAuXOAALlzwAC5dIAAuXfAALl8AAC5fIAAuX0AALl9gAC5fgAAuX6AALl/AAC5f4AAuYAAALmEQAC5hQAAuYXAALmGgAC5h0AAuYgAALmIwAC5iYAAuYpAALmKwAC5moAAuZsAALmbgAC5nAAAuZzAALmdAAC5nUAAuZ2AALmdwAC5nkAAuZ7AALmfAAC5n0AAuZ/AALmgAAC5r8AAubBAALmwwAC5sUAAubIAALmyQAC5soAAubLAALmzAAC5s4AAubQAALm0QAC5tIAAubUAALm1QAC5xQAAucWAALnGQAC5xsAAuceAALnHwAC5yAAAuchAALnIgAC5yQAAucmAALnJwAC5ygAAucqAALnKwAC5zgAAuc5AALnOgAC5zwAAud7AALnfQAC538AAueBAALnhAAC54UAAueGAALnhwAC54gAAueKAALnjAAC540AAueOAALnkAAC55EAAufQAALn0gAC59QAAufWAALn2QAC59oAAufbAALn3AAC590AAuffAALn4QAC5+IAAufjAALn5QAC5+YAAuglAALoJwAC6CkAAugrAALoLgAC6C8AAugwAALoMQAC6DIAAug0AALoNgAC6DcAAug4AALoOgAC6DsAAuh6AALofAAC6H4AAuiAAALogwAC6IQAAuiFAALohgAC6IcAAuiJAALoiwAC6IwAAuiNAALojwAC6JAAAujPAALo0QAC6NMAAujVAALo2AAC6NkAAujaAALo2wAC6NwAAujeAALo4AAC6OEAAujiAALo5AAC6OUAAukKAALpLgAC6VUAAul5AALpfAAC6X4AAumAAALpggAC6YQAAumGAALphwAC6YoAAumXAALppgAC6agAAumqAALprAAC6a4AAumwAALpsgAC6bQAAunDAALpxgAC6ckAAunMAALpzwAC6dIAAunVAALp2AAC6doAAuoZAALqGwAC6h4AAuogAALqIwAC6iQAAuolAALqJgAC6icAAuopAALqKwAC6iwAAuotAALqLwAC6jAAAupvAALqcQAC6nMAAup1AALqeAAC6nkAAup6AALqewAC6nwAAup+AALqgAAC6oEAAuqCAALqhAAC6oUAAurEAALqxgAC6sgAAurKAALqzQAC6s4AAurPAALq0AAC6tEAAurTAALq1QAC6tYAAurXAALq2QAC6toAAusZAALrGwAC6x4AAusgAALrIwAC6yQAAuslAALrJgAC6ycAAuspAALrKwAC6ywAAustAALrLwAC6zAAAutvAALrcQAC63MAAut1AALreAAC63kAAut6AALrewAC63wAAut+AALrgAAC64EAAuuCAALrhAAC64UAAuvEAALrxgAC68gAAuvKAALrzQAC684AAuvPAALr0AAC69EAAuvTAALr1QAC69YAAuvXAALr2QAC69oAAuwZAALsGwAC7B0AAuwfAALsIgAC7CMAAuwkAALsJQAC7CYAAuwoAALsKgAC7CsAAuwsAALsLgAC7C8AAux6AALsnQAC7L0AAuzdAALs3wAC7OEAAuzjAALs5QAC7OcAAuzoAALs6QAC7OwAAuztAALs7wAC7PAAAuzyAALs9QAC7PYAAuz3AALs+gAC7PsAAu0AAALtDQAC7RIAAu0UAALtFgAC7RsAAu0eAALtIQAC7SMAAu1IAALtbAAC7ZMAAu23AALtugAC7bwAAu2+AALtwAAC7cIAAu3EAALtxQAC7cgAAu3VAALt5gAC7egAAu3qAALt7AAC7e4AAu3wAALt8gAC7fQAAu32AALuBwAC7goAAu4NAALuEAAC7hMAAu4WAALuGQAC7hwAAu4fAALuIQAC7mAAAu5iAALuZAAC7mYAAu5pAALuagAC7msAAu5sAALubQAC7m8AAu5xAALucgAC7nMAAu51AALudgAC7rUAAu63AALuuQAC7rsAAu6+AALuvwAC7sAAAu7BAALuwgAC7sQAAu7GAALuxwAC7sgAAu7KAALuywAC7woAAu8MAALvDwAC7xEAAu8UAALvFQAC7xYAAu8XAALvGAAC7xoAAu8cAALvHQAC7x4AAu8gAALvIQAC7y4AAu8vAALvMAAC7zIAAu9xAALvcwAC73UAAu93AALvegAC73sAAu98AALvfQAC734AAu+AAALvggAC74MAAu+EAALvhgAC74cAAu/GAALvyAAC78oAAu/MAALvzwAC79AAAu/RAALv0gAC79MAAu/VAALv1wAC79gAAu/ZAALv2wAC79wAAvAbAALwHQAC8B8AAvAhAALwJAAC8CUAAvAmAALwJwAC8CgAAvAqAALwLAAC8C0AAvAuAALwMAAC8DEAAvBwAALwcgAC8HQAAvB2AALweQAC8HoAAvB7AALwfAAC8H0AAvB/AALwgQAC8IIAAvCDAALwhQAC8IYAAvDFAALwxwAC8MkAAvDLAALwzgAC8M8AAvDQAALw0QAC8NIAAvDUAALw1gAC8NcAAvDYAALw2gAC8NsAAvEAAALxJAAC8UsAAvFvAALxcgAC8XQAAvF2AALxeAAC8XoAAvF8AALxfQAC8YAAAvGNAALxnAAC8Z4AAvGgAALxogAC8aQAAvGmAALxqAAC8aoAAvG5AALxvAAC8b8AAvHCAALxxQAC8cgAAvHLAALxzgAC8dAAAvIPAALyEQAC8hMAAvIVAALyGAAC8hkAAvIaAALyGwAC8hwAAvIeAALyIAAC8iEAAvIiAALyJAAC8iUAAvJkAALyZgAC8mgAAvJqAALybQAC8m4AAvJvAALycAAC8nEAAvJzAALydQAC8nYAAvJ3AALyeQAC8noAAvK5AALyuwAC8r0AAvK/AALywgAC8sMAAvLEAALyxQAC8sYAAvLIAALyygAC8ssAAvLMAALyzgAC8s8AAvMOAALzEAAC8xIAAvMUAALzFwAC8xgAAvMZAALzGgAC8xsAAvMdAALzHwAC8yAAAvMhAALzIwAC8yQAAvNjAALzZQAC82cAAvNpAALzbAAC820AAvNuAALzbwAC83AA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AwQNAAMEDwADBBAAAwQZAAMEGgADBBwAAwRfAAMEgwADBKcAAwTKAAME8QADBREAAwU4AAMFXwADBX8AAwWjAAMFxwADBckAAwXMAAMFzgADBdAAAwXSAAMF1QADBdcAAwXZAAMF2wADBd0AAwXfAAMF4QADBeQAAwXnAAMF6AADBe0AAwX6AAMF/QADBf8AAwYCAAMGBQADBgcAAwYsAAMGUAADBncAAwabAAMGngADBqAAAwaiAAMGpAADBqYAAwaoAAMGqQADBqwAAwa5AAMGzAADBs4AAwbQAAMG0gADBtQAAwbWAAMG2AADBtoAAwbcAAMG3gADBvEAAwb0AAMG9wADBvoAAwb9AAMHAAADBwMAAwcGAAMHCQADBwwAAwcOAAMHTQADB08AAwdSAAMHVAADB1cAAwdYAAMHWQADB1oAAwdbAAMHXQADB18AAwdgAAMHYQADB2MAAwdkAAMHbQADB24AAwdwAAMHrwADB7EAAwezAAMHtQADB7gAAwe5AAMHugADB7sAAwe8AAMHvgADB8AAAwfBAAMHwgADB8QAAwfFAAMIBAADCAYAAwgJAAMICwADCA4AAwgPAAMIEAADCBEAAwgSAAMIFAADCBYAAwgXAAMIGAADCBoAAwgbAAMIJAADCCUAAwgnAAMIZgADCGgAAwhqAAMIbAADCG8AAwhwAAMIcQADCHIAAwhzAAMIdQADCHcAAwh4AAMIeQADCHsAAwh8AAMIuwADCL0AAwjAAAMIwgADCMUAAwjGAAMIxwADCMgAAwjJAAMIywADCM0AAwjOAAMIzwADCNEAAwjSAAMI2wADCNwAAwjeAAMJHQADCR8AAwkhAAMJIwADCSYAAwknAAMJKAADCSkAAwkqAAMJLAADCS4AAwkvAAMJMAADCTIAAwkzAAMJcgADCXQAAwl3AAMJeQADCXwAAwl9AAMJfgADCX8AAwmAAAMJggADCYQAAwmFAAMJhgADCYgAAwmJAAMJlgADCZcAAwmYAAMJmgADCdkAAwnbAAMJ3QADCd8AAwniAAMJ4wADCeQAAwnlAAMJ5gADCegAAwnqAAMJ6wADCewAAwnuAAMJ7wADCi4AAwowAAMKMgADCjQAAwo3AAMKOAADCjkAAwo6AAMKOwADCj0AAwo/AAMKQAADCkEAAwpDAAMKRAADClEAAwpiAAMKZQADCmgAAwprAAMKbgADCnEAAwp0AAMKdwADCnkAAwqKAAMKjQADCpAAAwqTAAMKlgADCpkAAwqcAAMKnwADCqIAAwqkAAMKqwADCrIAAwrBAAMKzAADCtgAAwsjAAMLRgADC2YAAwuGAAMLiAADC4oAAwuMAAMLjgADC5EAAwuSAAMLkwADC5YAAwuXAAMLmQADC5oAAwucAAMLnwADC6AAAwuhAAMLpAADC6UAAwuqAAMLtwADC7wAAwu+AAMLwAADC8UAAwvIAAMLywADC80AAwvyAAMMFgADDD0AAwxhAAMMZAADDGYAAwxoAAMMagADDGwAAwxuAAMMbwADDHIAAwx/AAMMkAADDJIAAwyUAAMMlgADDJgAAwyaAAMMnAADDJ4AAwygAAMMsQADDLQAAwy3AAMMugADDL0AAwzAAAMMwwADDMYAAwzJAAMMywADDQoAAw0MAAMNDgADDRAAAw0TAAMNFAADDRUAAw0WAAMNFwADDRkAAw0bAAMNHAADDR0AAw0fAAMNIAADDV8AAw1hAAMNYwADDWUAAw1oAAMNaQADDWoAAw1rAAMNbAADDW4AAw1wAAMNcQADDXIAAw10AAMNdQADDbQAAw22AAMNuQADDbsAAw2+AAMNvwADDcAAAw3BAAMNwgADDcQAAw3GAAMNxwADDcgAAw3KAAMNywADDdgAAw3ZAAMN2gADDdwAAw4bAAMOHQADDh8AAw4hAAMOJAADDiUAAw4mAAMOJwADDigAAw4qAAMOLAADDi0AAw4uAAMOMAADDjEAAw5wAAMOcgADDnQAAw52AAMOeQADDnoAAw57AAMOfAADDn0AAw5/AAMOgQADDoIAAw6DAAMOhQADDoYAAw7FAAMOxwADDskAAw7LAAMOzgADDs8AAw7QAAMO0QADDtIAAw7UAAMO1gADDtcAAw7YAAMO2gADDtsAAw8aAAMPHAADDx4AAw8gAAMPIwADDyQAAw8lAAMPJgADDycAAw8pAAMPKwADDywAAw8tAAMPLwADDzAAAw9vAAMPcQADD3MAAw91AAMPeAADD3kAAw96AAMPewADD3wAAw9+AAMPgAADD4EAAw+CAAMPhAADD4UAAw+qAAMPzgADD/UAAxAZAAMQHAADEB4AAxAgAAMQIgADECQAAxAmAAMQJwADECoAAxA3AAMQRgADEEgAAxBKAAMQTAADEE4AAxBQAAMQUgADEFQAAxBjAAMQZgADEGkAAxBsAAMQbwADEHIAAxB1AAMQeAADEHoAAxC5AAMQuwADEL0AAxC/AAMQwgADEMMAAxDEAAMQxQADEMYAAxDIAAMQygADEMsAAxDMAAMQzgADEM8AAxEOAAMREAADERIAAxEUAAMRFwADERgAAxEZAAMRGgADERsAAxEdAAMRHwADESAAAxEhAAMRIwADESQAAxFjAAMRZQADEWcAAxFpAAMRbAADEW0AAxFuAAMRbwADEXAAAxFyAAMRdAADEXUAAxF2AAMReAADEXkAAxG4AAMRugADEb0AAxG/AAMRwgADEcMAAxHEAAMRxQADEcYAAxHIAAMRygADEcsAAxHMAAMRzgADEc8AAxIOAAMSEAADEhIAAxIUAAMSFwADEhgAAxIZAAMSGgADEhsAAxIdAAMSHwADEiAAAxIhAAMSIwADEiQAAxJjAAMSZQADEmcAAxJpAAMSbAADEm0AAxJuAAMSbwADEnAAAxJyAAMSdAADEnUAAxJ2AAMSeAADEnkAAxK4AAMSugADErwAAxK+AAMSwQADEsIAAxLDAAMSxAADEsUAAxLHAAMSyQADEsoAAxLLAAMSzQADEs4AAxMZAAMTPAADE1wAAxN8AAMTfgADE4AAAxOCAAMThAADE4cAAxOIAAMTiQADE4wAAxONAAMTjwADE5AAAxOSAAMTlQADE5YAAxOXAAMTmgADE5sAAxOgAAMTrQADE7IAAxO0AAMTtgADE7sAAxO+AAMTwQADE8MAAxPoAAMUDAADFDMAAxRXAAMUWgADFFwAAxReAAMUYAADFGIAAxRkAAMUZQADFGgAAxR1AAMUhgADFIgAAxSKAAMUjAADFI4AAxSQAAMUkgADFJQAAxSWAAMUpwADFKoAAxStAAMUsAADFLMAAxS2AAMUuQADFLwAAxS/AAMUwQADFQAAAxUCAAMVBAADFQYAAxUJAAMVCgADFQsAAxUMAAMVDQADFQ8AAxURAAMVEgADFRMAAxUVAAMVFgADFVUAAxVXAAMVWQADFVsAAxVeAAMVXwADFWAAAxVhAAMVYgADFWQAAxVmAAMVZwADFWgAAxVqAAMVawADFaoAAxWsAAMVrwADFbEAAxW0AAMVtQADFbYAAxW3AAMVuAADFboAAxW8AAMVvQADFb4AAxXAAAMVwQADFc4AAxXPAAMV0AADFdIAAxYRAAMWEwADFhUAAxYXAAMWGgADFhsAAxYcAAMWHQADFh4AAxYgAAMWIgADFiMAAxYkAAMWJgADFicAAxZmAAMWaAADFmoAAxZsAAMWbwADFnAAAxZxAAMWcgADFnMAAxZ1AAMWdwADFngAAxZ5AAMWewADFnwAAxa7AAMWvQADFr8AAxbBAAMWxAADFsUAAxbGAAMWxwADFsgAAxbKAAMWzAADFs0AAxbOAAMW0AADFtEAAxcQAAMXEgADFxQAAxcWAAMXGQADFxoAAxcbAAMXHAADFx0AAxcfAAMXIQADFyIAAxcjAAMXJQADFyYAAxdlAAMXZwADF2kAAxdrAAMXbgADF28AAxdwAAMXcQADF3IAAxd0AAMXdgADF3cAAxd4AAMXegADF3sAAxegAAMXxAADF+sAAxgPAAMYEgADGBQAAxgWAAMYGAADGBoAAxgcAAMYHQADGCAAAxgtAAMYPAADGD4AAxhAAAMYQgADGEQAAxhGAAMYSAADGEoAAxhZAAMYXAADGF8AAxhiAAMYZQADGGgAAxhrAAMYbgADGHAAAxivAAMYsQADGLMAAxi1AAMYuAADGLkAAxi6AAMYuwADGLwAAxi+AAMYwAADGMEAAxjCAAMYxAADGMUAAxkEAAMZBgADGQgAAxkKAAMZDQADGQ4AAxkPAAMZEAADGREAAxkTAAMZFQADGRYAAxkXAAMZGQADGRoAAxlZAAMZWwADGV0AAxlfAAMZYgADGWMAAxlkAAMZZQADGWYAAxloAAMZagADGWsAAxlsAAMZbgADGW8AAxmuAAMZsAADGbMAAxm1AAMZuAADGbkAAxm6AAMZuwADGbwAAxm+AAMZwAADGcEAAxnCAAMZxAADGcUAAxoEAAMaBgADGggAAxoKAAMaDQADGg4AAxoPAAMaEAADGhEAAxoTAAMaFQADGhYAAxoXAAMaGQADGhoAAxpZAAMaWwADGl4AAxpgAAMaYwADGmQAAxplAAMaZgADGmcAAxppAAMaawADGmwAAxptAAMabwADGnAAAxqMAAMaywADGs0AAxrPAAMa0QADGtQAAxrVAAMa1gADGtcAAxrYAAMa2gADGtwAAxrdAAMa3gADGuAAAxrhAAMbLAADG08AAxtvAAMbjwADG5EAAxuTAAMblQADG5cAAxuaAAMbmwADG5wAAxufAAMboAADG6IAAxujAAMbpQADG6gAAxupAAMbqgADG60AAxuuAAMbswADG8AAAxvFAAMbxwADG8kAAxvOAAMb0QADG9QAAxvWAAMb+wADHB8AAxxGAAMcagADHG0AAxxvAAMccQADHHMAAxx1AAMcdwADHHgAAxx7AAMciAADHJkAAxybAAMcnQADHJ8AAxyhAAMcowADHKUAAxynAAMcqQADHLoAAxy9AAMcwAADHMMAAxzGAAMcyQADHMwAAxzPAAMc0gADHNQAAx0TAAMdFQADHRcAAx0ZAAMdHAADHR0AAx0eAAMdHwADHSAAAx0iAAMdJAADHSUAAx0mAAMdKAADHSkAAx1oAAMdagADHWwAAx1uAAMdcQADHXIAAx1zAAMddAADHXUAAx13AAMdeQADHXoAAx17AAMdfQADHX4AAx29AAMdvwADHcIAAx3EAAMdxwADHcgAAx3JAAMdygADHcsAAx3NAAMdzwADHdAAAx3RAAMd0wADHdQAAx3hAAMd4gADHeMAAx3lAAMeJAADHiYAAx4oAAMeKgADHi0AAx4uAAMeLwADHjAAAx4xAAMeMwADHjUAAx42AAMeNwADHjkAAx46AAMeeQADHnsAAx59AAMefwADHoIAAx6DAAMehAADHoUAAx6GAAMeiAADHooAAx6LAAMejAADHo4AAx6PAAMezgADHtAAAx7SAAMe1AADHtcAAx7YAAMe2QADHtoAAx7bAAMe3QADHt8AAx7gAAMe4QADHuMAAx7kAAMfIwADHyUAAx8nAAMfKQADHywAAx8tAAMfLgADHy8AAx8wAAMfMgADHzQAAx81AAMfNgADHzgAAx85AAMfeAADH3oAAx98AAMffgADH4EAAx+CAAMfgwADH4QAAx+FAAMfhwADH4kAAx+KAAMfiwADH40AAx+OAAMfswADH9cAAx/+AAMgIgADICUAAyAnAAMgKQADICsAAyAtAAMgLwADIDAAAyAzAAMgQAADIE8AAyBRAAMgUwADIFUAAyBXAAMgWQADIFsAAyBdAAMgbAADIG8AAyByAAMgdQADIHgAAyB7AAMgfgADIIEAAyCDAAMgwgADIMQAAyDGAAMgyAADIMsAAyDMAAMgzQADIM4AAyDPAAMg0QADINMAAyDUAAMg1QADINcAAyDYAAMhFwADIRkAAyEbAAMhHQADISAAAyEhAAMhIgADISMAAyEkAAMhJgADISgAAyEpAAMhKgADISwAAyEtAAMhbAADIW4AAyFwAAMhcgADIXUAAyF2AAMhdwADIXgAAyF5AAMhewADIX0AAyF+AAMhfwADIYEAAyGCAAMhwQADIcMAAyHFAAMhxwADIcoAAyHLAAMhzAADIc0AAyHOAAMh0AADIdIAAyHTAAMh1AADIdYAAyHXAAMiFgADIhgAAyIaAAMiHAADIh8AAyIgAAMiIQADIiIAAyIjAAMiJQADIicAAyIoAAMiKQADIisAAyIsAAMiawADIm0AAyJvAAMicQADInQAAyJ1AAMidgADIncAAyJ4AAMiegADInwAAyJ9AAMifgADIoAAAyKBAAMiwAADIsIAAyLEAAMixgADIskAAyLKAAMiywADIswAAyLNAAMizwADItEAAyLSAAMi0wADItUAAyLWAAMjIQADI0QAAyNkAAMjhAADI4YAAyOIAAMjigADI4wAAyOPAAMjkAADI5EAAyOUAAMjlQADI5cAAyOYAAMjmgADI50AAyOeAAMjnwADI6IAAyOjAAMjqAADI7UAAyO6AAMjvAADI74AAyPDAAMjxgADI8kAAyPLAAMj8AADJBQAAyQ7AAMkXwADJGIAAyRkAAMkZgADJGgAAyRqAAMkbAADJG0AAyRwAAMkfQADJI4AAySQAAMkkgADJJQAAySWAAMkmAADJJoAAyScAAMkngADJK8AAySyAAMktQADJLgAAyS7AAMkvgADJMEAAyTEAAMkxwADJMkAAyUIAAMlCgADJQwAAyUOAAMlEQADJRIAAyUTAAMlFAADJRUAAyUXAAMlGQADJRoAAyUbAAMlHQADJR4AAyVdAAMlXwADJWEAAyVjAAMlZgADJWcAAyVoAAMlaQADJWoAAyVsAAMlbgADJW8AAyVwAAMlcgADJXMAAyWyAAMltAADJbcAAyW5AAMlvAADJb0AAyW+AAMlvwADJcAAAyXCAAMlxAADJcUAAyXGAAMlyAADJckAAyXWAAMl1wADJdgAAyXaAAMmGQADJhsAAyYdAAMmHwADJiIAAyYjAAMmJAADJiUAAyYmAAMmKAADJioAAyYrAAMmLAADJi4AAyYvAAMmbgADJnAAAyZyAAMmdAADJncAAyZ4AAMmeQADJnoAAyZ7AAMmfQADJn8AAyaAAAMmgQADJoMAAyaEAAMmwwADJsUAAybHAAMmyQADJswAAybNAAMmzgADJs8AAybQAAMm0gADJtQAAybVAAMm1gADJtgAAybZAAMnGAADJxoAAyccAAMnHgADJyEAAyciAAMnIwADJyQAAyclAAMnJwADJykAAycqAAMnKwADJy0AAycuAAMnbQADJ28AAydxAAMncwADJ3YAAyd3AAMneAADJ3kAAyd6AAMnfAADJ34AAyd/AAMngAADJ4IAAyeDAAMnqAADJ8wAAyfzAAMoFwADKBoAAygcAAMoHgADKCAAAygiAAMoJAADKCUAAygoAAMoNQADKEQAAyhGAAMoSAADKEoAAyhMAAMoTgADKFAAAyhSAAMoYQADKGQAAyhnAAMoagADKG0AAyhwAAMocwADKHYAAyh4AAMotwADKLkAAyi7AAMovQADKMAAAyjBAAMowgADKMMAAyjEAAMoxgADKMgAAyjJAAMoygADKMwAAyjNAAMpDAADKQ4AAykQAAMpEgADKRUAAykWAAMpFwADKRgAAykZAAMpGwADKR0AAykeAAMpHwADKSEAAykiAAMpYQADKWMAAyllAAMpZwADKWoAAylrAAMpbAADKW0AAyluAAMpcAADKXIAAylzAAMpdAADKXYAAyl3AAMptgADKbgAAym7AAMpvQADKcAAAynBAAMpwgADKcMAAynEAAMpxgADKcgAAynJAAMpygADKcwAAynNAAMqDAADKg4AAyoQAAMqEgADKhUAAyoWAAMqFwADKhgAAyoZAAMqGwADKh0AAyoeAAMqHwADKiEAAyoiAAMqYQADKmMAAyplAAMqZwADKmoAAyprAAMqbAADKm0AAypuAAMqcAADKnIAAypzAAMqdAADKnYAAyp3AAMqtgADKrgAAyq6AAMqvAADKr8AAyrAAAMqwQADKsIAAyrDAAMqxQADKscAAyrIAAMqyQADKssAAyrMAAMrFwADKzoAAytaAAMregADK3wAAyt+AAMrgAADK4IAAyuFAAMrhgADK4cAAyuKAAMriwADK40AAyuOAAMrkAADK5MAAyuUAAMrlQADK5gAAyuZAAMrngADK6sAAyuwAAMrsgADK7QAAyu5AAMrvAADK78AAyvBAAMr5gADLAoAAywxAAMsVQADLFgAAyxaAAMsXAADLF4AAyxgAAMsYgADLGMAAyxmAAMscwADLIQAAyyGAAMsiAADLIoAAyyMAAMsjgADLJAAAyySAAMslAADLKUAAyyoAAMsqwADLK4AAyyxAAMstAADLLcAAyy6AAMsvQADLL8AAyz+AAMtAAADLQIAAy0EAAMtBwADLQgAAy0JAAMtCgADLQsAAy0NAAMtDwADLRAAAy0RAAMtEwADLRQAAy1TAAMtVQADLVcAAy1ZAAMtXAADLV0AAy1eAAMtXwADLWAAAy1iAAMtZAADLWUAAy1mAAMtaAADLWkAAy2oAAMtqgADLa0AAy2vAAMtsgADLbMAAy20AAMttQADLbYAAy24AAMtugADLbsAAy28AAMtvgADLb8AAy3MAAMtzQADLc4AAy3QAAMuDwADLhEAAy4TAAMuFQADLhgAAy4ZAAMuGgADLhsAAy4cAAMuHgADLiAAAy4hAAMuIgADLiQAAy4lAAMuZAADLmYAAy5oAAMuagADLm0AAy5uAAMubwADLnAAAy5xAAMucwADLnUAAy52AAMudwADLnkAAy56AAMuuQADLrsAAy69AAMuvwADLsIAAy7DAAMuxAADLsUAAy7GAAMuyAADLsoAAy7LAAMuzAADLs4AAy7PAAMvDgADLxAAAy8SAAMvFAADLxcAAy8YAAMvGQADLxoAAy8bAAMvHQADLx8AAy8gAAMvIQADLyMAAy8kAAMvYwADL2UAAy9nAAMvaQADL2wAAy9tAAMvbgADL28AAy9wAAMvcgADL3QAAy91AAMvdgADL3gAAy95AAMvngADL8IAAy/pAAMwDQADMBAAAzASAAMwFAADMBYAAzAYAAMwGgADMBsAAzAeAAMwKwADMDoAAzA8AAMwPgADMEAAAzBCAAMwRAADMEYAAzBIAAMwVwADMFoAAzBdAAMwYAADMGMAAzBmAAMwaQADMGwAAzBuAAMwrQADMK8AAzCxAAMwswADMLYAAzC3AAMwuAADMLkAAzC6AAMwvAADML4AAzC/AAMwwAADMMIAAzDDAAMxAgADMQQAAzEGAAMxCAADMQsAAzEMAAMxDQADMQ4AAzEPAAMxEQADMRMAAzEUAAMxFQADMRcAAzEYAAMxVwADMVkAAzFbAAMxXQADMWAAAzFhAAMxYgADMWMAAzFkAAMxZgADMWgAAzFpAAMxagADMWwAAzFtAAMxrAADMa4AAzGwAAMxsgADMbUAAzG2AAMxtwADMbgAAzG5AAMxuwADMb0AAzG+AAMxvwADMcEAAzHCAAMyAQADMgMAAzIFAAMyBwADMgoAAzILAAMyDAADMg0AAzIOAAMyEAADMhIAAzITAAMyFAADMhYAAzIXAAMyVgADMlgAAzJaAAMyXAADMl8AAzJgAAMyYQADMmIAAzJjAAMyZQADMmcAAzJoAAMyaQADMmsAAzJsAAMyqwADMq0AAzKvAAMysQADMrQAAzK1AAMytgADMrcAAzK4AAMyugADMrwAAzK9AAMyvgADMsAAAzLBAAMzDAADMy8AAzNPAAMzbwADM3EAAzNzAAMzdQADM3cAAzN6AAMzewADM3wAAzN/AAMzgAADM4IAAzODAAMzhQADM4gAAzOJAAMzigADM40AAzOOAAMzkwADM6AAAzOlAAMzpwADM6kAAzOuAAMzsQADM7QAAzO2AAMz2wADM/8AAzQmAAM0SgADNE0AAzRPAAM0UQADNFMAAzRVAAM0VwADNFgAAzRbAAM0aAADNHkAAzR7AAM0fQADNH8AAzSBAAM0gwADNIUAAzSHAAM0iQADNJoAAzSdAAM0oAADNKMAAzSmAAM0qQADNKwAAzSvAAM0sgADNLQAAzTzAAM09QADNPcAAzT5AAM0/AADNP0AAzT+AAM0/wADNQAAAzUCAAM1BAADNQUAAzUGAAM1CAADNQkAAzVIAAM1SgADNUwAAzVOAAM1UQADNVIAAzVTAAM1VAADNVUAAzVXAAM1WQADNVoAAzVbAAM1XQADNV4AAzWdAAM1nwADNaIAAzWkAAM1pwADNagAAzWpAAM1qgADNasAAzWtAAM1rwADNbAAAzWxAAM1swADNbQAAzXBAAM1wgADNcMAAzXFAAM2BAADNgYAAzYIAAM2CgADNg0AAzYOAAM2DwADNhAAAzYRAAM2EwADNhUAAzYWAAM2FwADNhkAAzYaAAM2WQADNlsAAzZdAAM2XwADNmIAAzZjAAM2ZAADNmUAAzZmAAM2aAADNmoAAzZrAAM2bAADNm4AAzZvAAM2rgADNrAAAzayAAM2tAADNrcAAza4AAM2uQADNroAAza7AAM2vQADNr8AAzbAAAM2wQADNsMAAzbEAAM3AwADNwUAAzcHAAM3CQADNwwAAzcNAAM3DgADNw8AAzcQAAM3EgADNxQAAzcVAAM3FgADNxgAAzcZAAM3WAADN1oAAzdcAAM3XgADN2EAAzdiAAM3YwADN2QAAzdlAAM3ZwADN2kAAzdqAAM3awADN20AAzduAAM3kwADN7cAAzfeAAM4AgADOAUAAzgHAAM4CQADOAsAAzgNAAM4DwADOBAAAzgTAAM4IAADOC8AAzgxAAM4MwADODUAAzg3AAM4OQADODsAAzg9AAM4TAADOE8AAzhSAAM4VQADOFgAAzhbAAM4XgADOGEAAzhjAAM4ogADOKQAAzimAAM4qAADOKsAAzisAAM4rQADOK4AAzivAAM4sQADOLMAAzi0AAM4tQADOLcAAzi4AAM49wADOPkAAzj7AAM4/QADOQAAAzkBAAM5AgADOQMAAzkEAAM5BgADOQgAAzkJAAM5CgADOQwAAzkNAAM5TAADOU4AAzlQAAM5UgADOVUAAzlWAAM5VwADOVgAAzlZAAM5WwADOV0AAzleAAM5XwADOWEAAzliAAM5oQADOaMAAzmmAAM5qAADOasAAzmsAAM5rQADOa4AAzmvAAM5sQADObMAAzm0AAM5tQADObcAAzm4AAM59wADOfkAAzn7AAM5/QADOgAAAzoBAAM6AgADOgMAAzoEAAM6BgADOggAAzoJAAM6CgADOgwAAzoNAAM6TAADOk4AAzpQAAM6UgADOlUAAzpWAAM6VwADOlgAAzpZAAM6WwADOl0AAzpeAAM6XwADOmEAAzpiAAM6oQADOqMAAzqlAAM6pwADOqoAAzqrAAM6rAADOq0AAzquAAM6sAADOrIAAzqzAAM6tAADOrYAAzq3AAM7AgADOyUAAztFAAM7ZQADO2cAAztpAAM7awADO20AAztwAAM7cQADO3IAAzt1AAM7dgADO3gAAzt5AAM7ewADO34AAzt/AAM7gAADO4MAAzuEAAM7iQADO5YAAzubAAM7nQADO58AAzukAAM7pwADO6oAAzusAAM70QADO/UAAzwcAAM8QAADPEMAAzxFAAM8RwADPEkAAzxLAAM8TQADPE4AAzxRAAM8XgADPG8AAzxxAAM8cwADPHUAAzx3AAM8eQADPHsAAzx9AAM8fwADPJAAAzyTAAM8lgADPJkAAzycAAM8nwADPKIAAzylAAM8qAADPKoAAzzpAAM86wADPO0AAzzvAAM88gADPPMAAzz0AAM89QADPPYAAzz4AAM8+gADPPsAAzz8AAM8/gADPP8AAz0+AAM9QAADPUIAAz1EAAM9RwADPUgAAz1JAAM9SgADPUsAAz1NAAM9TwADPVAAAz1RAAM9UwADPVQAAz2TAAM9lQADPZgAAz2aAAM9nQADPZ4AAz2fAAM9oAADPaEAAz2jAAM9pQADPaYAAz2nAAM9qQADPaoAAz23AAM9uAADPbkAAz27AAM9+gADPfwAAz3+AAM+AAADPgMAAz4EAAM+BQADPgYAAz4HAAM+CQADPgsAAz4MAAM+DQADPg8AAz4QAAM+TwADPlEAAz5TAAM+VQADPlgAAz5ZAAM+WgADPlsAAz5cAAM+XgADPmAAAz5hAAM+YgADPmQAAz5lAAM+pAADPqYAAz6oAAM+qgADPq0AAz6uAAM+rwADPrAAAz6xAAM+swADPrUAAz62AAM+twADPrkAAz66AAM++QADPvsAAz79AAM+/wADPwIAAz8DAAM/BAADPwUAAz8GAAM/CAADPwoAAz8LAAM/DAADPw4AAz8PAAM/TgADP1AAAz9SAAM/VAADP1cAAz9YAAM/WQADP1oAAz9bAAM/XQADP18AAz9gAAM/YQADP2MAAz9kAAM/iQADP60AAz/UAAM/+AADP/sAAz/9AAM//wADQAEAA0ADAANABQADQAYAA0AJAANAFgADQCUAA0AnAANAKQADQCsAA0AtAANALwADQDEAA0AzAANAQgADQEUAA0BIAANASwADQE4AA0BRAANAVAADQFcAA0BZAANAmAADQJoAA0CcAANAngADQKEAA0CiAANAowADQKQAA0ClAANApwADQKkAA0CqAANAqwADQK0AA0CuAANA7QADQO8AA0DxAANA8wADQPYAA0D3AANA+AADQPkAA0D6AANA/AADQP4AA0D/AANBAAADQQIAA0EDAANBQgADQUQAA0FGAANBSAADQUsAA0FMAANBTQADQU4AA0FPAANBUQADQVMAA0FUAANBVQADQVcAA0FYAANBlwADQZkAA0GbAANBnQADQaAAA0GhAANBogADQaMAA0GkAANBpgADQagAA0GpAANBqgADQawAA0GtAANB7AADQe4AA0HwAANB8gADQfUAA0H2AANB9wADQfgAA0H5AANB+wADQf0AA0H+AANB/wADQgEAA0ICAANCQQADQkMAA0JFAANCRwADQkoAA0JLAANCTAADQk0AA0JOAANCUAADQlIAA0JTAANCVAADQlYAA0JXAANClgADQpgAA0KaAANCnAADQp8AA0KgAANCoQADQqIAA0KjAANCpQADQqcAA0KoAANCqQADQqsAA0KsAANC9wADQxoAA0M6AANDWgADQ1wAA0NeAANDYAADQ2IAA0NlAANDZgADQ2cAA0NqAANDawADQ20AA0NuAANDcAADQ3IAA0NzAANDdAADQ3cAA0N4AANDfQADQ4oAA0OPAANDkQADQ5MAA0OYAANDmwADQ54AA0OgAANDxQADQ+kAA0QQAANENAADRDcAA0Q5AANEOwADRD0AA0Q/AANEQQADREIAA0RFAANEUgADRGMAA0RlAANEZwADRGkAA0RrAANEbQADRG8AA0RxAANEcwADRIQAA0SHAANEigADRI0AA0SQAANEkwADRJYAA0SZAANEnAADRJ4AA0TdAANE3wADROEAA0TjAANE5gADROcAA0ToAANE6QADROoAA0TsAANE7gADRO8AA0TwAANE8gADRPMAA0UyAANFNAADRTYAA0U4AANFOwADRTwAA0U9AANFPgADRT8AA0VBAANFQwADRUQAA0VFAANFRwADRUgAA0WHAANFiQADRYwAA0WOAANFkQADRZIAA0WTAANFlAADRZUAA0WXAANFmQADRZoAA0WbAANFnQADRZ4AA0WrAANFrAADRa0AA0WvAANF7gADRfAAA0XyAANF9AADRfcAA0X4AANF+QADRfoAA0X7AANF/QADRf8AA0YAAANGAQADRgMAA0YEAANGQwADRkUAA0ZHAANGSQADRkwAA0ZNAANGTgADRk8AA0ZQAANGUgADRlQAA0ZVAANGVgADRlgAA0ZZAANGmAADRpoAA0acAANGngADRqEAA0aiAANGowADRqQAA0alAANGpwADRqkAA0aqAANGqwADRq0AA0auAANG7QADRu8AA0bxAANG8wADRvYAA0b3AANG+AADRvkAA0b6AANG/AADRv4AA0b/AANHAAADRwIAA0cDAANHQgADR0QAA0dGAANHSAADR0sAA0dMAANHTQADR04AA0dPAANHUQADR1MAA0dUAANHVQADR1cAA0dYAANHfQADR6EAA0fIAANH7AADR+8AA0fxAANH8wADR/UAA0f3AANH+QADR/oAA0f9AANICgADSBkAA0gbAANIHQADSB8AA0ghAANIIwADSCUAA0gnAANINgADSDkAA0g8AANIPwADSEIAA0hFAANISAADSEsAA0hNAANIjAADSI4AA0iQAANIkgADSJUAA0iWAANIlwADSJgAA0iZAANImwADSJ0AA0ieAANInwADSKEAA0iiAANI4QADSOMAA0jlAANI5wADSOoAA0jrAANI7AADSO0AA0juAANI8AADSPIAA0jzAANI9AADSPYAA0j3AANJNgADSTgAA0k6AANJPAADST8AA0lAAANJQQADSUIAA0lDAANJRQADSUcAA0lIAANJSQADSUsAA0lMAANJiwADSY0AA0mQAANJkgADSZUAA0mWAANJlwADSZgAA0mZAANJmwADSZ0AA0meAANJnwADSaEAA0miAANJ4QADSeMAA0nlAANJ5wADSeoAA0nrAANJ7AADSe0AA0nuAANJ8AADSfIAA0nzAANJ9AADSfYAA0n3AANKNgADSjgAA0o6AANKPAADSj8AA0pAAANKQQADSkIAA0pDAANKRQADSkcAA0pIAANKSQADSksAA0pMAANKiwADSo0AA0qPAANKkQADSpQAA0qVAANKlgADSpcAA0qYAANKmgADSpwAA0qdAANKngADSqAAA0qhAANKqgADSqsAA0qtAANK8AADSxQAA0s4AANLWwADS4IAA0uiAANLyQADS/AAA0wQAANMNAADTFgAA0xaAANMXQADTF8AA0xhAANMYwADTGYAA0xoAANMagADTGwAA0xuAANMcAADTHIAA0x1AANMeAADTHkAA0x+AANMiwADTI4AA0yQAANMkwADTJYAA0yYAANMvQADTOEAA00IAANNLAADTS8AA00xAANNMwADTTUAA003AANNOQADTToAA009AANNSgADTV0AA01fAANNYQADTWMAA01lAANNZwADTWkAA01rAANNbQADTW8AA02CAANNhQADTYgAA02LAANNjgADTZEAA02UAANNlwADTZoAA02dAANNnwADTd4AA03gAANN4wADTeUAA03oAANN6QADTeoAA03rAANN7AADTe4AA03wAANN8QADTfIAA030AANN9QADTf4AA03/AANOAQADTkAAA05CAANORAADTkYAA05JAANOSgADTksAA05MAANOTQADTk8AA05RAANOUgADTlMAA05VAANOVgADTpUAA06XAANOmgADTpwAA06fAANOoAADTqEAA06iAANOowADTqUAA06nAANOqAADTqkAA06rAANOrAADTrUAA062AANOuAADTvcAA075AANO+wADTv0AA08AAANPAQADTwIAA08DAANPBAADTwYAA08IAANPCQADTwoAA08MAANPDQADT0wAA09OAANPUQADT1MAA09WAANPVwADT1gAA09ZAANPWgADT1wAA09eAANPXwADT2AAA09iAANPYwADT2wAA09tAANPbwADT64AA0+wAANPsgADT7QAA0+3AANPuAADT7kAA0+6AANPuwADT70AA0+/AANPwAADT8EAA0/DAANPxAADUAMAA1AFAANQCAADUAoAA1ANAANQDgADUA8AA1AQAANQEQADUBMAA1AVAANQFgADUBcAA1AZAANQGgADUCcAA1AoAANQKQADUCsAA1BqAANQbAADUG4AA1BwAANQcwADUHQAA1B1AANQdgADUHcAA1B5AANQewADUHwAA1B9AANQfwADUIAAA1C/AANQwQADUMQAA1DGAANQyQADUMoAA1DLAANQzAADUM0AA1DPAANQ0QADUNIAA1DTAANQ1QADUNYAA1DqAANQ9wADUQgAA1ELAANRDgADUREAA1EUAANRFwADURoAA1EdAANRIAADUTEAA1E0AANRNwADUToAA1E9AANRQAADUUMAA1FGAANRSQADUUsAA1FSAANRWwADUWMAA1FsAANRdgADUYEAA1HMAANR7wADUg8AA1IvAANSMQADUjMAA1I1AANSNwADUjoAA1I7AANSPAADUj8AA1JAAANSQgADUkMAA1JFAANSSAADUkkAA1JKAANSTQADUk4AA1JTAANSYAADUmUAA1JnAANSaQADUm4AA1JxAANSdAADUnYAA1KbAANSvwADUuYAA1MKAANTDQADUw8AA1MRAANTEwADUxUAA1MXAANTGAADUxsAA1MoAANTOQADUzsAA1M9AANTPwADU0EAA1NDAANTRQADU0cAA1NJAANTWgADU10AA1NgAANTYwADU2YAA1NpAANTbAADU28AA1NyAANTdAADU7MAA1O1AANTtwADU7kAA1O8AANTvQADU74AA1O/AANTwAADU8IAA1PEAANTxQADU8YAA1PIAANTyQADVAgAA1QKAANUDAADVA4AA1QRAANUEgADVBMAA1QUAANUFQADVBcAA1QZAANUGgADVBsAA1QdAANUHgADVF0AA1RfAANUYgADVGQAA1RnAANUaAADVGkAA1RqAANUawADVG0AA1RvAANUcAADVHEAA1RzAANUdAADVIEAA1SCAANUgwADVIUAA1TEAANUxgADVMgAA1TKAANUzQADVM4AA1TPAANU0AADVNEAA1TTAANU1QADVNYAA1TXAANU2QADVNoAA1UZAANVGwADVR0AA1UfAANVIgADVSMAA1UkAANVJQADVSYAA1UoAANVKgADVSsAA1UsAANVLgADVS8AA1VuAANVcAADVXIAA1V0AANVdwADVXgAA1V5AANVegADVXsAA1V9AANVfwADVYAAA1WBAANVgwADVYQAA1XDAANVxQADVccAA1XJAANVzAADVc0AA1XOAANVzwADVdAAA1XSAANV1AADVdUAA1XWAANV2AADVdkAA1YYAANWGgADVhwAA1YeAANWIQADViIAA1YjAANWJAADViUAA1YnAANWKQADVioAA1YrAANWLQADVi4AA1ZTAANWdwADVp4AA1bCAANWxQADVscAA1bJAANWywADVs0AA1bPAANW0AADVtMAA1bgAANW7wADVvEAA1bzAANW9QADVvcAA1b5AANW+wADVv0AA1cMAANXDwADVxIAA1cVAANXGAADVxsAA1ceAANXIQADVyMAA1diAANXZAADV2YAA1doAANXawADV2wAA1dtAANXbgADV28AA1dxAANXcwADV3QAA1d1AANXdwADV3gAA1e3AANXuQADV7sAA1e9AANXwAADV8EAA1fCAANXwwADV8QAA1fGAANXyAADV8kAA1fKAANXzAADV80AA1gMAANYDgADWBAAA1gSAANYFQADWBYAA1gXAANYGAADWBkAA1gbAANYHQADWB4AA1gfAANYIQADWCIAA1hhAANYYwADWGYAA1hoAANYawADWGwAA1htAANYbgADWG8AA1hxAANYcwADWHQAA1h1AANYdwADWHgAA1i3AANYuQADWLsAA1i9AANYwAADWMEAA1jCAANYwwADWMQAA1jGAANYyAADWMkAA1jKAANYzAADWM0AA1kMAANZDgADWRAAA1kSAANZFQADWRYAA1kXAANZGAADWRkAA1kbAANZHQADWR4AA1kfAANZIQADWSIAA1lhAANZYwADWWUAA1lnAANZagADWWsAA1lsAANZbQADWW4AA1lwAANZcgADWXMAA1l0AANZdgADWXcAA1nCAANZ5QADWgUAA1olAANaJwADWikAA1orAANaLQADWjAAA1oxAANaMgADWjUAA1o2AANaOAADWjkAA1o7AANaPgADWj8AA1pAAANaQwADWkQAA1pJAANaVgADWlsAA1pdAANaXwADWmQAA1pnAANaagADWmwAA1qRAANatQADWtwAA1sAAANbAwADWwUAA1sHAANbCQADWwsAA1sNAANbDgADWxEAA1seAANbLwADWzEAA1szAANbNQADWzcAA1s5AANbOwADWz0AA1s/AANbUAADW1MAA1tWAANbWQADW1wAA1tfAANbYgADW2UAA1toAANbagADW6kAA1urAANbrQADW68AA1uyAANbswADW7QAA1u1AANbtgADW7gAA1u6AANbuwADW7wAA1u+AANbvwADW/4AA1wAAANcAgADXAQAA1wHAANcCAADXAkAA1wKAANcCwADXA0AA1wPAANcEAADXBEAA1wTAANcFAADXFMAA1xVAANcWAADXFoAA1xdAANcXgADXF8AA1xgAANcYQADXGMAA1xlAANcZgADXGcAA1xpAANcagADXHcAA1x4AANceQADXHsAA1y6AANcvAADXL4AA1zAAANcwwADXMQAA1zFAANcxgADXMcAA1zJAANcywADXMwAA1zNAANczwADXNAAA10PAANdEQADXRMAA10VAANdGAADXRkAA10aAANdGwADXRwAA10eAANdIAADXSEAA10iAANdJAADXSUAA11kAANdZgADXWgAA11qAANdbQADXW4AA11vAANdcAADXXEAA11zAANddQADXXYAA113AANdeQADXXoAA125AANduwADXb0AA12/AANdwgADXcMAA13EAANdxQADXcYAA13IAANdygADXcsAA13MAANdzgADXc8AA14OAANeEAADXhIAA14UAANeFwADXhgAA14ZAANeGgADXhsAA14dAANeHwADXiAAA14hAANeIwADXiQAA15JAANebQADXpQAA164AANeuwADXr0AA16/AANewQADXsMAA17FAANexgADXskAA17WAANe5QADXucAA17pAANe6wADXu0AA17vAANe8QADXvMAA18CAANfBQADXwgAA18LAANfDgADXxEAA18UAANfFwADXxkAA19YAANfWgADX1wAA19eAANfYQADX2IAA19jAANfZAADX2UAA19nAANfaQADX2oAA19rAANfbQADX24AA1+tAANfrwADX7EAA1+zAANftgADX7cAA1+4AANfuQADX7oAA1+8AANfvgADX78AA1/AAANfwgADX8MAA2ACAANgBAADYAYAA2AIAANgCwADYAwAA2ANAANgDgADYA8AA2ARAANgEwADYBQAA2AVAANgFwADYBgAA2BXAANgWQADYFsAA2BdAANgYAADYGEAA2BiAANgYwADYGQAA2BmAANgaAADYGkAA2BqAANgbAADYG0AA2CsAANgrgADYLAAA2CyAANgtQADYLYAA2C3AANguAADYLkAA2C7AANgvQADYL4AA2C/AANgwQADYMIAA2EBAANhAwADYQUAA2EHAANhCgADYQsAA2EMAANhDQADYQ4AA2EQAANhEgADYRMAA2EUAANhFgADYRcAA2FWAANhWAADYVoAA2FcAANhXwADYWAAA2FhAANhYgADYWMAA2FlAANhZwADYWgAA2FpAANhawADYWwAA2G3AANh2gADYfoAA2IaAANiHAADYh4AA2IgAANiIgADYiUAA2ImAANiJwADYioAA2IrAANiLQADYi4AA2IwAANiMwADYjQAA2I1AANiOAADYjkAA2JCAANiTwADYlQAA2JWAANiWAADYl0AA2JgAANiYwADYmUAA2KKAANirgADYtUAA2L5AANi/AADYv4AA2MAAANjAgADYwQAA2MGAANjBwADYwoAA2MXAANjKAADYyoAA2MsAANjLgADYzAAA2MyAANjNAADYzYAA2M4AANjSQADY0wAA2NPAANjUgADY1UAA2NYAANjWwADY14AA2NhAANjYwADY6IAA2OkAANjpgADY6gAA2OrAANjrAADY60AA2OuAANjrwADY7EAA2OzAANjtAADY7UAA2O3AANjuAADY/cAA2P5AANj+wADY/0AA2QAAANkAQADZAIAA2QDAANkBAADZAYAA2QIAANkCQADZAoAA2QMAANkDQADZEwAA2ROAANkUQADZFMAA2RWAANkVwADZFgAA2RZAANkWgADZFwAA2ReAANkXwADZGAAA2RiAANkYwADZHAAA2RxAANkcgADZHQAA2SzAANktQADZLcAA2S5AANkvAADZL0AA2S+AANkvwADZMAAA2TCAANkxAADZMUAA2TGAANkyAADZMkAA2UIAANlCgADZQwAA2UOAANlEQADZRIAA2UTAANlFAADZRUAA2UXAANlGQADZRoAA2UbAANlHQADZR4AA2VdAANlXwADZWEAA2VjAANlZgADZWcAA2VoAANlaQADZWoAA2VsAANlbgADZW8AA2VwAANlcgADZXMAA2WyAANltAADZbYAA2W4AANluwADZbwAA2W9AANlvgADZb8AA2XBAANlwwADZcQAA2XFAANlxwADZcgAA2YHAANmCQADZgsAA2YNAANmEAADZhEAA2YSAANmEwADZhQAA2YWAANmGAADZhkAA2YaAANmHAADZh0AA2ZCAANmZgADZo0AA2axAANmtAADZrYAA2a4AANmugADZrwAA2a+AANmvwADZsIAA2bPAANm3gADZuAAA2biAANm5AADZuYAA2boAANm6gADZuwAA2b7AANm/gADZwEAA2cEAANnBwADZwoAA2cNAANnEAADZxIAA2dRAANnUwADZ1UAA2dXAANnWgADZ1sAA2dcAANnXQADZ14AA2dgAANnYgADZ2MAA2dkAANnZgADZ2cAA2emAANnqAADZ6oAA2esAANnrwADZ7AAA2exAANnsgADZ7MAA2e1AANntwADZ7gAA2e5AANnuwADZ7wAA2f7AANn/QADZ/8AA2gBAANoBAADaAUAA2gGAANoBwADaAgAA2gKAANoDAADaA0AA2gOAANoEAADaBEAA2hQAANoUgADaFUAA2hXAANoWgADaFsAA2hcAANoXQADaF4AA2hgAANoYgADaGMAA2hkAANoZgADaGcAA2imAANoqAADaKoAA2isAANorwADaLAAA2ixAANosgADaLMAA2i1AANotwADaLgAA2i5AANouwADaLwAA2j7AANo/QADaP8AA2kBAANpBAADaQUAA2kGAANpBwADaQgAA2kKAANpDAADaQ0AA2kOAANpEAADaREAA2lQAANpUgADaVQAA2lWAANpWQADaVoAA2lbAANpXAADaV0AA2lfAANpYQADaWIAA2ljAANpZQADaWYAA2mxAANp1AADafQAA2oUAANqFgADahgAA2oaAANqHAADah8AA2ogAANqIQADaiQAA2olAANqJwADaigAA2oqAANqLQADai4AA2ovAANqMgADajMAA2o4AANqRQADakoAA2pMAANqTgADalMAA2pWAANqWQADalsAA2qAAANqpAADassAA2rvAANq8gADavQAA2r2AANq+AADavoAA2r8AANq/QADawAAA2sNAANrHgADayAAA2siAANrJAADayYAA2soAANrKgADaywAA2suAANrPwADa0IAA2tFAANrSAADa0sAA2tOAANrUQADa1QAA2tXAANrWQADa5gAA2uaAANrnAADa54AA2uhAANrogADa6MAA2ukAANrpQADa6cAA2upAANrqgADa6sAA2utAANrrgADa+0AA2vvAANr8QADa/MAA2v2AANr9wADa/gAA2v5AANr+gADa/wAA2v+AANr/wADbAAAA2wCAANsAwADbEIAA2xEAANsRwADbEkAA2xMAANsTQADbE4AA2xPAANsUAADbFIAA2xUAANsVQADbFYAA2xYAANsWQADbGYAA2xnAANsaAADbGoAA2ypAANsqwADbK0AA2yvAANssgADbLMAA2y0AANstQADbLYAA2y4AANsugADbLsAA2y8AANsvgADbL8AA2z+AANtAAADbQIAA20EAANtBwADbQgAA20JAANtCgADbQsAA20NAANtDwADbRAAA20RAANtEwADbRQAA21TAANtVQADbVcAA21ZAANtXAADbV0AA21eAANtXwADbWAAA21iAANtZAADbWUAA21mAANtaAADbWkAA22oAANtqgADbawAA22uAANtsQADbbIAA22zAANttAADbbUAA223AANtuQADbboAA227AANtvQADbb4AA239AANt/wADbgEAA24DAANuBgADbgcAA24IAANuCQADbgoAA24MAANuDgADbg8AA24QAANuEgADbhMAA244AANuXAADboMAA26nAANuqgADbqwAA26uAANusAADbrIAA260AANutQADbrgAA27FAANu1AADbtYAA27YAANu2gADbtwAA27eAANu4AADbuIAA27xAANu9AADbvcAA276AANu/QADbwAAA28DAANvBgADbwgAA29HAANvSQADb0sAA29NAANvUAADb1EAA29SAANvUwADb1QAA29WAANvWAADb1kAA29aAANvXAADb10AA2+cAANvngADb6AAA2+iAANvpQADb6YAA2+nAANvqAADb6kAA2+rAANvrQADb64AA2+vAANvsQADb7IAA2/xAANv8wADb/UAA2/3AANv+gADb/sAA2/8AANv/QADb/4AA3AAAANwAgADcAMAA3AEAANwBgADcAcAA3BGAANwSAADcEoAA3BMAANwTwADcFAAA3BRAANwUgADcFMAA3BVAANwVwADcFgAA3BZAANwWwADcFwAA3CbAANwnQADcJ8AA3ChAANwpAADcKUAA3CmAANwpwADcKgAA3CqAANwrAADcK0AA3CuAANwsAADcLEAA3DwAANw8gADcPQAA3D2AANw+QADcPoAA3D7AANw/AADcP0AA3D/AANxAQADcQIAA3EDAANxBQADcQYAA3FFAANxRwADcUkAA3FLAANxTgADcU8AA3FQAANxUQADcVIAA3FUAANxVgADcVcAA3FYAANxWgADcVsAA3GmAANxyQADcekAA3IJAANyCwADcg0AA3IPAANyEQADchQAA3IVAANyFgADchkAA3IaAANyHAADch0AA3IfAANyIgADciMAA3IkAANyJwADcigAA3ItAANyOgADcj8AA3JBAANyQwADckgAA3JLAANyTgADclAAA3J1AANymQADcsAAA3LkAANy5wADcukAA3LrAANy7QADcu8AA3LxAANy8gADcvUAA3MCAANzEwADcxUAA3MXAANzGQADcxsAA3MdAANzHwADcyEAA3MjAANzNAADczcAA3M6AANzPQADc0AAA3NDAANzRgADc0kAA3NMAANzTgADc40AA3OPAANzkQADc5MAA3OWAANzlwADc5gAA3OZAANzmgADc5wAA3OeAANznwADc6AAA3OiAANzowADc+IAA3PkAANz5gADc+gAA3PrAANz7AADc+0AA3PuAANz7wADc/EAA3PzAANz9AADc/UAA3P3AANz+AADdDcAA3Q5AAN0PAADdD4AA3RBAAN0QgADdEMAA3REAAN0RQADdEcAA3RJAAN0SgADdEsAA3RNAAN0TgADdFsAA3RcAAN0XQADdF8AA3SeAAN0oAADdKIAA3SkAAN0pwADdKgAA3SpAAN0qgADdKsAA3StAAN0rwADdLAAA3SxAAN0swADdLQAA3TzAAN09QADdPcAA3T5AAN0/AADdP0AA3T+AAN0/wADdQAAA3UCAAN1BAADdQUAA3UGAAN1CAADdQkAA3VIAAN1SgADdUwAA3VOAAN1UQADdVIAA3VTAAN1VAADdVUAA3VXAAN1WQADdVoAA3VbAAN1XQADdV4AA3WdAAN1nwADdaEAA3WjAAN1pgADdacAA3WoAAN1qQADdaoAA3WsAAN1rgADda8AA3WwAAN1sgADdbMAA3XyAAN19AADdfYAA3X4AAN1+wADdfwAA3X9AAN1/gADdf8AA3YBAAN2AwADdgQAA3YFAAN2BwADdggAA3YtAAN2UQADdngAA3acAAN2nwADdqEAA3ajAAN2pQADdqcAA3apAAN2qgADdq0AA3a6AAN2yQADdssAA3bNAAN2zwADdtEAA3bTAAN21QADdtcAA3bmAAN26QADduwAA3bvAAN28gADdvUAA3b4AAN2+wADdv0AA3c8AAN3PgADd0AAA3dCAAN3RQADd0YAA3dHAAN3SAADd0kAA3dLAAN3TQADd04AA3dPAAN3UQADd1IAA3eRAAN3kwADd5UAA3eXAAN3mgADd5sAA3ecAAN3nQADd54AA3egAAN3ogADd6MAA3ekAAN3pgADd6cAA3fmAAN36AADd+oAA3fsAAN37wADd/AAA3fxAAN38gADd/MAA3f1AAN39wADd/gAA3f5AAN3+wADd/wAA3g7AAN4PQADeD8AA3hBAAN4RAADeEUAA3hGAAN4RwADeEgAA3hKAAN4TAADeE0AA3hOAAN4UAADeFEAA3iQAAN4kgADeJQAA3iWAAN4mQADeJoAA3ibAAN4nAADeJ0AA3ifAAN4oQADeKIAA3ijAAN4pQADeKYAA3jlAAN45wADeOkAA3jrAAN47gADeO8AA3jwAAN48QADePIAA3j0AAN49gADePcAA3j4AAN4+gADePsAA3k6AAN5PAADeT4AA3lAAAN5QwADeUQAA3lFAAN5RgADeUcAA3lJAAN5SwADeUwAA3lNAAN5TwADeVAAA3mbAAN5vgADed4AA3n+AAN6AAADegIAA3oEAAN6BgADegkAA3oKAAN6CwADeg4AA3oPAAN6EQADehIAA3oUAAN6FwADehgAA3oZAAN6HAADeh0AA3oiAAN6LwADejQAA3o2AAN6OAADej0AA3pAAAN6QwADekUAA3pqAAN6jgADerUAA3rZAAN63AADet4AA3rgAAN64gADeuQAA3rmAAN65wADeuoAA3r3AAN7CAADewoAA3sMAAN7DgADexAAA3sSAAN7FAADexYAA3sYAAN7KQADeywAA3svAAN7MgADezUAA3s4AAN7OwADez4AA3tBAAN7QwADe4IAA3uEAAN7hgADe4gAA3uLAAN7jAADe40AA3uOAAN7jwADe5EAA3uTAAN7lAADe5UAA3uXAAN7mAADe9cAA3vZAAN72wADe90AA3vgAAN74QADe+IAA3vjAAN75AADe+YAA3voAAN76QADe+oAA3vsAAN77QADfCwAA3wuAAN8MQADfDMAA3w2AAN8NwADfDgAA3w5AAN8OgADfDwAA3w+AAN8PwADfEAAA3xCAAN8QwADfFAAA3xRAAN8UgADfFQAA3yTAAN8lQADfJcAA3yZAAN8nAADfJ0AA3yeAAN8nwADfKAAA3yiAAN8pAADfKUAA3ymAAN8qAADfKkAA3zoAAN86gADfOwAA3zuAAN88QADfPIAA3zzAAN89AADfPUAA3z3AAN8+QADfPoAA3z7AAN8/QADfP4AA309AAN9PwADfUEAA31DAAN9RgADfUcAA31IAAN9SQADfUoAA31MAAN9TgADfU8AA31QAAN9UgADfVMAA32SAAN9lAADfZYAA32YAAN9mwADfZwAA32dAAN9ngADfZ8AA32hAAN9owADfaQAA32lAAN9pwADfagAA33nAAN96QADfesAA33tAAN98AADffEAA33yAAN98wADffQAA332AAN9+AADffkAA336AAN9/AADff0AA34iAAN+RgADfm0AA36RAAN+lAADfpYAA36YAAN+mgADfpwAA36eAAN+nwADfqIAA36vAAN+vgADfsAAA37CAAN+xAADfsYAA37IAAN+ygADfswAA37bAAN+3gADfuEAA37kAAN+5wADfuoAA37tAAN+8AADfvIAA38xAAN/MwADfzUAA383AAN/OgADfzsAA388AAN/PQADfz4AA39AAAN/QgADf0MAA39EAAN/RgADf0cAA3+GAAN/iAADf4oAA3+MAAN/jwADf5AAA3+RAAN/kgADf5MAA3+VAAN/lwADf5gAA3+ZAAN/mwADf5wAA3/bAAN/3QADf98AA3/hAAN/5AADf+UAA3/mAAN/5wADf+gAA3/qAAN/7AADf+0AA3/uAAN/8AADf/EAA4AwAAOAMgADgDUAA4A3AAOAOgADgDsAA4A8AAOAPQADgD4AA4BAAAOAQgADgEMAA4BEAAOARgADgEcAA4BKAAOAiQADgIsAA4CNAAOAjwADgJIAA4CTAAOAlAADgJUAA4CWAAOAmAADgJoAA4CbAAOAnAADgJ4AA4CfAAOA3gADgOAAA4DiAAOA5AADgOcAA4DoAAOA6QADgOoAA4DrAAOA7QADgO8AA4DwAAOA8QADgPMAA4D0AAOBMwADgTUAA4E3AAOBOQADgTwAA4E9AAOBPgADgT8AA4FAAAOBQgADgUQAA4FFAAOBRgADgUgAA4FJAAOBlAADgbcAA4HXAAOB9wADgfkAA4H7AAOB/QADgf8AA4ICAAOCAwADggQAA4IHAAOCCAADggoAA4ILAAOCDQADghAAA4IRAAOCEgADghUAA4IWAAOCGwADgigAA4ItAAOCLwADgjEAA4I2AAOCOQADgjwAA4I+AAOCYwADgocAA4KuAAOC0gADgtUAA4LXAAOC2QADgtsAA4LdAAOC3wADguAAA4LjAAOC8AADgwEAA4MDAAODBQADgwcAA4MJAAODCwADgw0AA4MPAAODEQADgyIAA4MlAAODKAADgysAA4MuAAODMQADgzQAA4M3AAODOgADgzwAA4N7AAODfQADg38AA4OBAAODhAADg4UAA4OGAAODhwADg4gAA4OKAAODjAADg40AA4OOAAODkAADg5EAA4PQAAOD0gADg9QAA4PWAAOD2QADg9oAA4PbAAOD3AADg90AA4PfAAOD4QADg+IAA4PjAAOD5QADg+YAA4QlAAOEJwADhCoAA4QsAAOELwADhDAAA4QxAAOEMgADhDMAA4Q1AAOENwADhDgAA4Q5AAOEOwADhDwAA4RJAAOESgADhEsAA4RNAAOEjAADhI4AA4SQAAOEkgADhJUAA4SWAAOElwADhJgAA4SZAAOEmwADhJ0AA4SeAAOEnwADhKEAA4SiAAOE4QADhOMAA4TlAAOE5wADhOoAA4TrAAOE7AADhO0AA4TuAAOE8AADhPIAA4TzAAOE9AADhPYAA4T3AAOFNgADhTgAA4U6AAOFPAADhT8AA4VAAAOFQQADhUIAA4VDAAOFRQADhUcAA4VIAAOFSQADhUsAA4VMAAOFiwADhY0AA4WPAAOFkQADhZQAA4WVAAOFlgADhZcAA4WYAAOFmgADhZwAA4WdAAOFngADhaAAA4WhAAOF4AADheIAA4XkAAOF5gADhekAA4XqAAOF6wADhewAA4XtAAOF7wADhfEAA4XyAAOF8wADhfUAA4X2AAOGGwADhj8AA4ZmAAOGigADho0AA4aPAAOGkQADhpMAA4aVAAOGlwADhpgAA4abAAOGqAADhrcAA4a5AAOGuwADhr0AA4a/AAOGwQADhsMAA4bFAAOG1AADhtcAA4baAAOG3QADhuAAA4bjAAOG5gADhukAA4brAAOHKgADhywAA4cuAAOHMAADhzMAA4c0AAOHNQADhzYAA4c3AAOHOQADhzsAA4c8AAOHPQADhz8AA4dAAAOHfwADh4EAA4eDAAOHhQADh4gAA4eJAAOHigADh4sAA4eMAAOHjgADh5AAA4eRAAOHkgADh5QAA4eVAAOH1AADh9YAA4fYAAOH2gADh90AA4feAAOH3wADh+AAA4fhAAOH4wADh+UAA4fmAAOH5wADh+kAA4fqAAOIKQADiCsAA4guAAOIMAADiDMAA4g0AAOINQADiDYAA4g3AAOIOQADiDsAA4g8AAOIPQADiD8AA4hAAAOIfwADiIEAA4iDAAOIhQADiIgAA4iJAAOIigADiIsAA4iMAAOIjgADiJAAA4iRAAOIkgADiJQAA4iVAAOI1AADiNYAA4jYAAOI2gADiN0AA4jeAAOI3wADiOAAA4jhAAOI4wADiOUAA4jmAAOI5wADiOkAA4jqAAOJKQADiSsAA4ktAAOJLwADiTIAA4kzAAOJNAADiTUAA4k2AAOJOAADiToAA4k7AAOJPAADiT4AA4k/AAOJigADia0AA4nNAAOJ7QADie8AA4nxAAOJ8wADifUAA4n4AAOJ+QADifoAA4n9AAOJ/gADigAAA4oBAAOKAwADigYAA4oHAAOKCAADigsAA4oMAAOKFQADiiIAA4onAAOKKQADiisAA4owAAOKMwADijYAA4o4AAOKXQADioEAA4qoAAOKzAADis8AA4rRAAOK0wADitUAA4rXAAOK2QADitoAA4rdAAOK6gADivsAA4r9AAOK/wADiwEAA4sDAAOLBQADiwcAA4sJAAOLCwADixwAA4sfAAOLIgADiyUAA4soAAOLKwADiy4AA4sxAAOLNAADizYAA4t1AAOLdwADi3kAA4t7AAOLfgADi38AA4uAAAOLgQADi4IAA4uEAAOLhgADi4cAA4uIAAOLigADi4sAA4vKAAOLzAADi84AA4vQAAOL0wADi9QAA4vVAAOL1gADi9cAA4vZAAOL2wADi9wAA4vdAAOL3wADi+AAA4wfAAOMIQADjCQAA4wmAAOMKQADjCoAA4wrAAOMLAADjC0AA4wvAAOMMQADjDIAA4wzAAOMNQADjDYAA4xDAAOMRAADjEUAA4xHAAOMhgADjIgAA4yKAAOMjAADjI8AA4yQAAOMkQADjJIAA4yTAAOMlQADjJcAA4yYAAOMmQADjJsAA4ycAAOM2wADjN0AA4zfAAOM4QADjOQAA4zlAAOM5gADjOcAA4zoAAOM6gADjOwAA4ztAAOM7gADjPAAA4zxAAONMAADjTIAA400AAONNgADjTkAA406AAONOwADjTwAA409AAONPwADjUEAA41CAAONQwADjUUAA41GAAONhQADjYcAA42JAAONiwADjY4AA42PAAONkAADjZEAA42SAAONlAADjZYAA42XAAONmAADjZoAA42bAAON2gADjdwAA43eAAON4AADjeMAA43kAAON5QADjeYAA43nAAON6QADjesAA43sAAON7QADje8AA43wAAOOFQADjjkAA45gAAOOhAADjocAA46JAAOOiwADjo0AA46PAAOOkQADjpIAA46VAAOOogADjrEAA46zAAOOtQADjrcAA465AAOOuwADjr0AA46/AAOOzgADjtEAA47UAAOO1wADjtoAA47dAAOO4AADjuMAA47lAAOPJAADjyYAA48oAAOPKgADjy0AA48uAAOPLwADjzAAA48xAAOPMwADjzUAA482AAOPNwADjzkAA486AAOPeQADj3sAA499AAOPfwADj4IAA4+DAAOPhAADj4UAA4+GAAOPiAADj4oAA4+LAAOPjAADj44AA4+PAAOPzgADj9AAA4/SAAOP1AADj9cAA4/YAAOP2QADj9oAA4/bAAOP3QADj98AA4/gAAOP4QADj+MAA4/kAAOQIwADkCUAA5AnAAOQKQADkCwAA5AtAAOQLgADkC8AA5AwAAOQMgADkDQAA5A1AAOQNgADkDgAA5A5AAOQeAADkHoAA5B8AAOQfgADkIEAA5CCAAOQgwADkIQAA5CFAAOQhwADkIkAA5CKAAOQiwADkI0AA5COAAOQzQADkM8AA5DRAAOQ0wADkNYAA5DXAAOQ2AADkNkAA5DaAAOQ3AADkN4AA5DfAAOQ4AADkOIAA5DjAAORIgADkSQAA5EmAAORKAADkSsAA5EsAAORLQADkS4AA5EvAAORMQADkTMAA5E0AAORNQADkTcAA5E4AAORQQADkUIAA5FEAAORhwADkasAA5HPAAOR8gADkhkAA5I5AAOSYAADkocAA5KnAAOSywADku8AA5LxAAOS9AADkvYAA5L4AAOS+gADkv0AA5L/AAOTAQADkwMAA5MFAAOTBwADkwkAA5MMAAOTDwADkxAAA5MVAAOTIgADkyUAA5MnAAOTKgADky0AA5MvAAOTVAADk3gAA5OfAAOTwwADk8YAA5PIAAOTygADk8wAA5POAAOT0AADk9EAA5PUAAOT4QADk/QAA5P2AAOT+AADk/oAA5P8AAOT/gADlAAAA5QCAAOUBAADlAYAA5QZAAOUHAADlB8AA5QiAAOUJQADlCgAA5QrAAOULgADlDEAA5Q0AAOUNgADlHUAA5R3AAOUegADlHwAA5R/AAOUgAADlIEAA5SCAAOUgwADlIUAA5SHAAOUiAADlIkAA5SLAAOUjAADlJUAA5SWAAOUmAADlNcAA5TZAAOU2wADlN0AA5TgAAOU4QADlOIAA5TjAAOU5AADlOYAA5ToAAOU6QADlOoAA5TsAAOU7QADlSwAA5UuAAOVMQADlTMAA5U2AAOVNwADlTgAA5U5AAOVOgADlTwAA5U+AAOVPwADlUAAA5VCAAOVQwADlUwAA5VNAAOVTwADlY4AA5WQAAOVkgADlZQAA5WXAAOVmAADlZkAA5WaAAOVmwADlZ0AA5WfAAOVoAADlaEAA5WjAAOVpAADleMAA5XlAAOV6AADleoAA5XtAAOV7gADle8AA5XwAAOV8QADlfMAA5X1AAOV9gADlfcAA5X5AAOV+gADlgMAA5YEAAOWBgADlkUAA5ZHAAOWSQADlksAA5ZOAAOWTwADllAAA5ZRAAOWUgADllQAA5ZWAAOWVwADllgAA5ZaAAOWWwADlpoAA5acAAOWnwADlqEAA5akAAOWpQADlqYAA5anAAOWqAADlqoAA5asAAOWrQADlq4AA5awAAOWsQADlr4AA5a/AAOWwAADlsIAA5cBAAOXAwADlwUAA5cHAAOXCgADlwsAA5cMAAOXDQADlw4AA5cQAAOXEgADlxMAA5cUAAOXFgADlxcAA5dWAAOXWAADl1sAA5ddAAOXYAADl2EAA5diAAOXYwADl2QAA5dmAAOXaAADl2kAA5dqAAOXbAADl20AA5d4AAOXhQADl44AA5eRAAOXlAADl5cAA5eaAAOXowADl6YAA5epAAOXrAADl68AA5exAAOXuQADl8EAA5gMAAOYLwADmE8AA5hvAAOYcQADmHMAA5h1AAOYdwADmHoAA5h7AAOYfAADmH8AA5iAAAOYggADmIMAA5iFAAOYiAADmIkAA5iKAAOYjQADmI4AA5iTAAOYoAADmKUAA5inAAOYqQADmK4AA5ixAAOYtAADmLYAA5jbAAOY/wADmSYAA5lKAAOZTQADmU8AA5lRAAOZUwADmVUAA5lXAAOZWAADmVsAA5loAAOZeQADmXsAA5l9AAOZfwADmYEAA5mDAAOZhQADmYcAA5mJAAOZmgADmZ0AA5mgAAOZowADmaYAA5mpAAOZrAADma8AA5myAAOZtAADmfMAA5n1AAOZ9wADmfkAA5n8AAOZ/QADmf4AA5n/AAOaAAADmgIAA5oEAAOaBQADmgYAA5oIAAOaCQADmkgAA5pKAAOaTAADmk4AA5pRAAOaUgADmlMAA5pUAAOaVQADmlcAA5pZAAOaWgADmlsAA5pdAAOaXgADmp0AA5qfAAOaogADmqQAA5qnAAOaqAADmqkAA5qqAAOaqwADmq0AA5qvAAOasAADmrEAA5qzAAOatAADmsEAA5rCAAOawwADmsUAA5sEAAObBgADmwgAA5sKAAObDQADmw4AA5sPAAObEAADmxEAA5sTAAObFQADmxYAA5sXAAObGQADmxoAA5tZAAObWwADm10AA5tfAAObYgADm2MAA5tkAAObZQADm2YAA5toAAObagADm2sAA5tsAAObbgADm28AA5uuAAObsAADm7IAA5u0AAObtwADm7gAA5u5AAObugADm7sAA5u9AAObvwADm8AAA5vBAAObwwADm8QAA5wDAAOcBQADnAcAA5wJAAOcDAADnA0AA5wOAAOcDwADnBAAA5wSAAOcFAADnBUAA5wWAAOcGAADnBkAA5xYAAOcWgADnFwAA5xeAAOcYQADnGIAA5xjAAOcZAADnGUAA5xnAAOcaQADnGoAA5xrAAOcbQADnG4AA5yTAAOctwADnN4AA50CAAOdBQADnQcAA50JAAOdCwADnQ0AA50PAAOdEAADnRMAA50gAAOdLwADnTEAA50zAAOdNQADnTcAA505AAOdOwADnT0AA51MAAOdTwADnVIAA51VAAOdWAADnVsAA51eAAOdYQADnWMAA52iAAOdpAADnaYAA52oAAOdqwADnawAA52tAAOdrgADna8AA52xAAOdswADnbQAA521AAOdtwADnbgAA533AAOd+QADnfsAA539AAOeAAADngEAA54CAAOeAwADngQAA54GAAOeCAADngkAA54KAAOeDAADng0AA55MAAOeTgADnlAAA55SAAOeVQADnlYAA55XAAOeWAADnlkAA55bAAOeXQADnl4AA55fAAOeYQADnmIAA56hAAOeowADnqUAA56nAAOeqgADnqsAA56sAAOerQADnq4AA56wAAOesgADnrMAA560AAOetgADnrcAA572AAOe+AADnvoAA578AAOe/wADnwAAA58BAAOfAgADnwMAA58FAAOfBwADnwgAA58JAAOfCwADnwwAA59LAAOfTQADn08AA59RAAOfVAADn1UAA59WAAOfVwADn1gAA59aAAOfXAADn10AA59eAAOfYAADn2EAA5+gAAOfogADn6QAA5+mAAOfqQADn6oAA5+rAAOfrAADn60AA5+vAAOfsQADn7IAA5+zAAOftQADn7YAA6ABAAOgJAADoEQAA6BkAAOgZgADoGgAA6BqAAOgbAADoG8AA6BwAAOgcQADoHQAA6B1AAOgdwADoHgAA6B6AAOgfQADoH4AA6B/AAOgggADoIMAA6CIAAOglQADoJoAA6CcAAOgngADoKMAA6CmAAOgqQADoKsAA6DQAAOg9AADoRsAA6E/AAOhQgADoUQAA6FGAAOhSAADoUoAA6FMAAOhTQADoVAAA6FdAAOhbgADoXAAA6FyAAOhdAADoXYAA6F4AAOhegADoXwAA6F+AAOhjwADoZIAA6GVAAOhmAADoZsAA6GeAAOhoQADoaQAA6GnAAOhqQADoegAA6HqAAOh7AADoe4AA6HxAAOh8gADofMAA6H0AAOh9QADofcAA6H5AAOh+gADofsAA6H9AAOh/gADoj0AA6I/AAOiQQADokMAA6JGAAOiRwADokgAA6JJAAOiSgADokwAA6JOAAOiTwADolAAA6JSAAOiUwADopIAA6KUAAOilwADopkAA6KcAAOinQADop4AA6KfAAOioAADoqIAA6KkAAOipQADoqYAA6KoAAOiqQADorYAA6K3AAOiuAADoroAA6L5AAOi+wADov0AA6L/AAOjAgADowMAA6MEAAOjBQADowYAA6MIAAOjCgADowsAA6MMAAOjDgADow8AA6NOAAOjUAADo1IAA6NUAAOjVwADo1gAA6NZAAOjWgADo1sAA6NdAAOjXwADo2AAA6NhAAOjYwADo2QAA6OjAAOjpQADo6cAA6OpAAOjrAADo60AA6OuAAOjrwADo7AAA6OyAAOjtAADo7UAA6O2AAOjuAADo7kAA6P4AAOj+gADo/wAA6P+AAOkAQADpAIAA6QDAAOkBAADpAUAA6QHAAOkCQADpAoAA6QLAAOkDQADpA4AA6RNAAOkTwADpFEAA6RTAAOkVgADpFcAA6RYAAOkWQADpFoAA6RcAAOkXgADpF8AA6RgAAOkYgADpGMAA6SIAAOkrAADpNMAA6T3AAOk+gADpPwAA6T+AAOlAAADpQIAA6UEAAOlBQADpQgAA6UVAAOlJAADpSYAA6UoAAOlKgADpSwAA6UuAAOlMAADpTIAA6VBAAOlRAADpUcAA6VKAAOlTQADpVAAA6VTAAOlVgADpVgAA6WXAAOlmQADpZsAA6WdAAOloAADpaEAA6WiAAOlowADpaQAA6WmAAOlqAADpakAA6WqAAOlrAADpa0AA6XsAAOl7gADpfAAA6XyAAOl9QADpfYAA6X3AAOl+AADpfkAA6X7AAOl/QADpf4AA6X/AAOmAQADpgIAA6ZBAAOmQwADpkUAA6ZHAAOmSgADpksAA6ZMAAOmTQADpk4AA6ZQAAOmUgADplMAA6ZUAAOmVgADplcAA6aWAAOmmAADppoAA6acAAOmnwADpqAAA6ahAAOmogADpqMAA6alAAOmpwADpqgAA6apAAOmqwADpqwAA6brAAOm7QADpu8AA6bxAAOm9AADpvUAA6b2AAOm9wADpvgAA6b6AAOm/AADpv0AA6b+AAOnAAADpwEAA6dAAAOnQgADp0QAA6dGAAOnSQADp0oAA6dLAAOnTAADp00AA6dPAAOnUQADp1IAA6dTAAOnVQADp1YAA6eVAAOnlwADp5kAA6ebAAOnngADp58AA6egAAOnoQADp6IAA6ekAAOnpgADp6cAA6eoAAOnqgADp6sAA6f2AAOoGQADqDkAA6hZAAOoWwADqF0AA6hfAAOoYQADqGQAA6hlAAOoZgADqGkAA6hqAAOobAADqG0AA6hvAAOocgADqHMAA6h0AAOodwADqHgAA6h9AAOoigADqI8AA6iRAAOokwADqJgAA6ibAAOongADqKAAA6jFAAOo6QADqRAAA6k0AAOpNwADqTkAA6k7AAOpPQADqT8AA6lBAAOpQgADqUUAA6lSAAOpYwADqWUAA6lnAAOpaQADqWsAA6ltAAOpbwADqXEAA6lzAAOphAADqYcAA6mKAAOpjQADqZAAA6mTAAOplgADqZkAA6mcAAOpngADqd0AA6nfAAOp4QADqeMAA6nmAAOp5wADqegAA6npAAOp6gADqewAA6nuAAOp7wADqfAAA6nyAAOp8wADqjIAA6o0AAOqNgADqjgAA6o7AAOqPAADqj0AA6o+AAOqPwADqkEAA6pDAAOqRAADqkUAA6pHAAOqSAADqocAA6qJAAOqjAADqo4AA6qRAAOqkgADqpMAA6qUAAOqlQADqpcAA6qZAAOqmgADqpsAA6qdAAOqngADqqsAA6qsAAOqrQADqq8AA6ruAAOq8AADqvIAA6r0AAOq9wADqvgAA6r5AAOq+gADqvsAA6r9AAOq/wADqwAAA6sBAAOrAwADqwQAA6tDAAOrRQADq0cAA6tJAAOrTAADq00AA6tOAAOrTwADq1AAA6tSAAOrVAADq1UAA6tWAAOrWAADq1kAA6uYAAOrmgADq5wAA6ueAAOroQADq6IAA6ujAAOrpAADq6UAA6unAAOrqQADq6oAA6urAAOrrQADq64AA6vtAAOr7wADq/EAA6vzAAOr9gADq/cAA6v4AAOr+QADq/oAA6v8AAOr/gADq/8AA6wAAAOsAgADrAMAA6xCAAOsRAADrEYAA6xIAAOsSwADrEwAA6xNAAOsTgADrE8AA6xRAAOsUwADrFQAA6xVAAOsVwADrFgAA6x9AAOsoQADrMgAA6zsAAOs7wADrPEAA6zzAAOs9QADrPcAA6z5AAOs+gADrP0AA60KAAOtGQADrRsAA60dAAOtHwADrSEAA60jAAOtJQADrScAA602AAOtOQADrTwAA60/AAOtQgADrUUAA61IAAOtSwADrU0AA62MAAOtjgADrZAAA62SAAOtlQADrZYAA62XAAOtmAADrZkAA62bAAOtnQADrZ4AA62fAAOtoQADraIAA63hAAOt4wADreUAA63nAAOt6gADresAA63sAAOt7QADre4AA63wAAOt8gADrfMAA630AAOt9gADrfcAA642AAOuOAADrjoAA648AAOuPwADrkAAA65BAAOuQgADrkMAA65FAAOuRwADrkgAA65JAAOuSwADrkwAA66LAAOujQADro8AA66RAAOulAADrpUAA66WAAOulwADrpgAA66aAAOunAADrp0AA66eAAOuoAADrqEAA67gAAOu4gADruQAA67mAAOu6QADruoAA67rAAOu7AADru0AA67vAAOu8QADrvIAA67zAAOu9QADrvYAA681AAOvNwADrzkAA687AAOvPgADrz8AA69AAAOvQQADr0IAA69EAAOvRgADr0cAA69IAAOvSgADr0sAA6+KAAOvjAADr44AA6+QAAOvkwADr5QAA6+VAAOvlgADr5cAA6+ZAAOvmwADr5wAA6+dAAOvnwADr6AAA6/rAAOwDgADsC4AA7BOAAOwUAADsFIAA7BUAAOwVgADsFkAA7BaAAOwWwADsF4AA7BfAAOwYQADsGIAA7BkAAOwZwADsGgAA7BpAAOwbAADsG0AA7B2AAOwgwADsIgAA7CKAAOwjAADsJEAA7CUAAOwlwADsJkAA7C+AAOw4gADsQkAA7EtAAOxMAADsTIAA7E0AAOxNgADsTgAA7E6AAOxOwADsT4AA7FLAAOxXAADsV4AA7FgAAOxYgADsWQAA7FmAAOxaAADsWoAA7FsAAOxfQADsYAAA7GDAAOxhgADsYkAA7GMAAOxjwADsZIAA7GVAAOxlwADsdYAA7HYAAOx2gADsdwAA7HfAAOx4AADseEAA7HiAAOx4wADseUAA7HnAAOx6AADsekAA7HrAAOx7AADsisAA7ItAAOyLwADsjEAA7I0AAOyNQADsjYAA7I3AAOyOAADsjoAA7I8AAOyPQADsj4AA7JAAAOyQQADsoAAA7KCAAOyhQADsocAA7KKAAOyiwADsowAA7KNAAOyjgADspAAA7KSAAOykwADspQAA7KWAAOylwADsqQAA7KlAAOypgADsqgAA7LnAAOy6QADsusAA7LtAAOy8AADsvEAA7LyAAOy8wADsvQAA7L2AAOy+AADsvkAA7L6AAOy/AADsv0AA7M8AAOzPgADs0AAA7NCAAOzRQADs0YAA7NHAAOzSAADs0kAA7NLAAOzTQADs04AA7NPAAOzUQADs1IAA7ORAAOzkwADs5UAA7OXAAOzmgADs5sAA7OcAAOznQADs54AA7OgAAOzogADs6MAA7OkAAOzpgADs6cAA7PmAAOz6AADs+oAA7PsAAOz7wADs/AAA7PxAAOz8gADs/MAA7P1AAOz9wADs/gAA7P5AAOz+wADs/wAA7Q7AAO0PQADtD8AA7RBAAO0RAADtEUAA7RGAAO0RwADtEgAA7RKAAO0TAADtE0AA7ROAAO0UAADtFEAA7R2AAO0mgADtMEAA7TlAAO06AADtOoAA7TsAAO07gADtPAAA7TyAAO08wADtPYAA7UDAAO1EgADtRQAA7UWAAO1GAADtRoAA7UcAAO1HgADtSAAA7UvAAO1MgADtTUAA7U4AAO1OwADtT4AA7VBAAO1RAADtUYAA7WFAAO1hwADtYkAA7WLAAO1jgADtY8AA7WQAAO1kQADtZIAA7WUAAO1lgADtZcAA7WYAAO1mgADtZsAA7XaAAO13AADtd4AA7XgAAO14wADteQAA7XlAAO15gADtecAA7XpAAO16wADtewAA7XtAAO17wADtfAAA7YvAAO2MQADtjMAA7Y1AAO2OAADtjkAA7Y6AAO2OwADtjwAA7Y+AAO2QAADtkEAA7ZCAAO2RAADtkUAA7aEAAO2hgADtogAA7aKAAO2jQADto4AA7aPAAO2kAADtpEAA7aTAAO2lQADtpYAA7aXAAO2mQADtpoAA7bZAAO22wADtt0AA7bfAAO24gADtuMAA7bkAAO25QADtuYAA7boAAO26gADtusAA7bsAAO27gADtu8AA7cuAAO3MAADtzIAA7c0AAO3NwADtzgAA7c5AAO3OgADtzsAA7c9AAO3PwADt0AAA7dBAAO3QwADt0QAA7eDAAO3hQADt4cAA7eJAAO3jAADt40AA7eOAAO3jwADt5AAA7eSAAO3lAADt5UAA7eWAAO3mAADt5kAA7eiAAO3owADt6UAA7foAAO4DAADuDAAA7hTAAO4egADuJoAA7jBAAO46AADuQgAA7ksAAO5UAADuVIAA7lVAAO5VwADuVkAA7lbAAO5XgADuWAAA7liAAO5ZAADuWYAA7loAAO5agADuW0AA7lwAAO5cQADuXYAA7mDAAO5hgADuYgAA7mLAAO5jgADuZAAA7m1AAO52QADugAAA7okAAO6JwADuikAA7orAAO6LQADui8AA7oxAAO6MgADujUAA7pCAAO6VQADulcAA7pZAAO6WwADul0AA7pfAAO6YQADumMAA7plAAO6ZwADunoAA7p9AAO6gAADuoMAA7qGAAO6iQADuowAA7qPAAO6kgADupUAA7qXAAO61gADutgAA7rbAAO63QADuuAAA7rhAAO64gADuuMAA7rkAAO65gADuugAA7rpAAO66gADuuwAA7rtAAO69gADuvcAA7r5AAO7OAADuzoAA7s8AAO7PgADu0EAA7tCAAO7QwADu0QAA7tFAAO7RwADu0kAA7tKAAO7SwADu00AA7tOAAO7jQADu48AA7uSAAO7lAADu5cAA7uYAAO7mQADu5oAA7ubAAO7nQADu58AA7ugAAO7oQADu6MAA7ukAAO7rQADu64AA7uwAAO77wADu/EAA7vzAAO79QADu/gAA7v5AAO7+gADu/sAA7v8AAO7/gADvAAAA7wBAAO8AgADvAQAA7wFAAO8RAADvEYAA7xJAAO8SwADvE4AA7xPAAO8UAADvFEAA7xSAAO8VAADvFYAA7xXAAO8WAADvFoAA7xbAAO8ZAADvGUAA7xnAAO8pgADvKgAA7yqAAO8rAADvK8AA7ywAAO8sQADvLIAA7yzAAO8tQADvLcAA7y4AAO8uQADvLsAA7y8AAO8+wADvP0AA70AAAO9AgADvQUAA70GAAO9BwADvQgAA70JAAO9CwADvQ0AA70OAAO9DwADvREAA70SAAO9HwADvSAAA70hAAO9IwADvWIAA71kAAO9ZgADvWgAA71rAAO9bAADvW0AA71uAAO9bwADvXEAA71zAAO9dAADvXUAA713AAO9eAADvbcAA725AAO9vAADvb4AA73BAAO9wgADvcMAA73EAAO9xQADvccAA73JAAO9ygADvcsAA73NAAO9zgADvekAA732AAO+DQADvhAAA74TAAO+FgADvhkAA74cAAO+HwADviIAA74lAAO+KAADvisAA74uAAO+RQADvkgAA75LAAO+TgADvlEAA75UAAO+VwADvloAA75dAAO+YAADvmMAA75mAAO+aAADvm8AA752AAO+fwADvoQAA76PAAO+mwADvqQAA76oAAO+sgADvroAA78FAAO/KAADv0gAA79oAAO/agADv2wAA79uAAO/cAADv3MAA790AAO/dQADv3gAA795AAO/ewADv3wAA79+AAO/gQADv4IAA7+DAAO/hgADv4cAA7+MAAO/mQADv54AA7+gAAO/ogADv6cAA7+qAAO/rQADv68AA7/UAAO/+AADwB8AA8BDAAPARgADwEgAA8BKAAPATAADwE4AA8BQAAPAUQADwFQAA8BhAAPAcgADwHQAA8B2AAPAeAADwHoAA8B8AAPAfgADwIAAA8CCAAPAkwADwJYAA8CZAAPAnAADwJ8AA8CiAAPApQADwKgAA8CrAAPArQADwOwAA8DuAAPA8AADwPIAA8D1AAPA9gADwPcAA8D4AAPA+QADwPsAA8D9AAPA/gADwP8AA8EBAAPBAgADwUEAA8FDAAPBRQADwUcAA8FKAAPBSwADwUwAA8FNAAPBTgADwVAAA8FSAAPBUwADwVQAA8FWAAPBVwADwZYAA8GYAAPBmwADwZ0AA8GgAAPBoQADwaIAA8GjAAPBpAADwaYAA8GoAAPBqQADwaoAA8GsAAPBrQADwboAA8G7AAPBvAADwb4AA8H9AAPB/wADwgEAA8IDAAPCBgADwgcAA8IIAAPCCQADwgoAA8IMAAPCDgADwg8AA8IQAAPCEgADwhMAA8JSAAPCVAADwlYAA8JYAAPCWwADwlwAA8JdAAPCXgADwl8AA8JhAAPCYwADwmQAA8JlAAPCZwADwmgAA8KnAAPCqQADwqsAA8KtAAPCsAADwrEAA8KyAAPCswADwrQAA8K2AAPCuAADwrkAA8K6AAPCvAADwr0AA8L8AAPC/gADwwAAA8MCAAPDBQADwwYAA8MHAAPDCAADwwkAA8MLAAPDDQADww4AA8MPAAPDEQADwxIAA8NRAAPDUwADw1UAA8NXAAPDWgADw1sAA8NcAAPDXQADw14AA8NgAAPDYgADw2MAA8NkAAPDZgADw2cAA8OMAAPDsAADw9cAA8P7AAPD/gADxAAAA8QCAAPEBAADxAYAA8QIAAPECQADxAwAA8QZAAPEKAADxCoAA8QsAAPELgADxDAAA8QyAAPENAADxDYAA8RFAAPESAADxEsAA8ROAAPEUQADxFQAA8RXAAPEWgADxFwAA8SbAAPEnQADxJ8AA8ShAAPEpAADxKUAA8SmAAPEpwADxKgAA8SqAAPErAADxK0AA8SuAAPEsAADxLEAA8TwAAPE8gADxPQAA8T2AAPE+QADxPoAA8T7AAPE/AADxP0AA8T/AAPFAQADxQIAA8UDAAPFBQADxQYAA8VFAAPFRwADxUkAA8VLAAPFTgADxU8AA8VQAAPFUQADxVIAA8VUAAPFVgADxVcAA8VYAAPFWgADxVsAA8WaAAPFnAADxZ4AA8WgAAPFowADxaQAA8WlAAPFpgADxacAA8WpAAPFqwADxawAA8WtAAPFrwADxbAAA8XvAAPF8QADxfMAA8X1AAPF+AADxfkAA8X6AAPF+wADxfwAA8X+AAPGAAADxgEAA8YCAAPGBAADxgUAA8ZEAAPGRgADxkgAA8ZKAAPGTQADxk4AA8ZPAAPGUAADxlEAA8ZTAAPGVQADxlYAA8ZXAAPGWQADxloAA8aZAAPGmwADxp0AA8afAAPGogADxqMAA8akAAPGpQADxqYAA8aoAAPGqgADxqsAA8asAAPGrgADxq8AA8b6AAPHHQADxz0AA8ddAAPHXwADx2EAA8djAAPHZQADx2gAA8dpAAPHagADx20AA8duAAPHcAADx3EAA8dzAAPHdgADx3cAA8d4AAPHewADx3wAA8eBAAPHjgADx5MAA8eVAAPHlwADx5wAA8efAAPHogADx6QAA8fJAAPH7QADyBQAA8g4AAPIOwADyD0AA8g/AAPIQQADyEMAA8hFAAPIRgADyEkAA8hWAAPIZwADyGkAA8hrAAPIbQADyG8AA8hxAAPIcwADyHUAA8h3AAPIiAADyIsAA8iOAAPIkQADyJQAA8iXAAPImgADyJ0AA8igAAPIogADyOEAA8jjAAPI5QADyOcAA8jqAAPI6wADyOwAA8jtAAPI7gADyPAAA8jyAAPI8wADyPQAA8j2AAPI9wADyTYAA8k4AAPJOgADyTwAA8k/AAPJQAADyUEAA8lCAAPJQwADyUUAA8lHAAPJSAADyUkAA8lLAAPJTAADyYsAA8mNAAPJkAADyZIAA8mVAAPJlgADyZcAA8mYAAPJmQADyZsAA8mdAAPJngADyZ8AA8mhAAPJogADya8AA8mwAAPJsQADybMAA8nyAAPJ9AADyfYAA8n4AAPJ+wADyfwAA8n9AAPJ/gADyf8AA8oBAAPKAwADygQAA8oFAAPKBwADyggAA8pHAAPKSQADyksAA8pNAAPKUAADylEAA8pSAAPKUwADylQAA8pWAAPKWAADylkAA8paAAPKXAADyl0AA8qcAAPKngADyqAAA8qiAAPKpQADyqYAA8qnAAPKqAADyqkAA8qrAAPKrQADyq4AA8qvAAPKsQADyrIAA8rxAAPK8wADyvUAA8r3AAPK+gADyvsAA8r8AAPK/QADyv4AA8sAAAPLAgADywMAA8sEAAPLBgADywcAA8tGAAPLSAADy0oAA8tMAAPLTwADy1AAA8tRAAPLUgADy1MAA8tVAAPLVwADy1gAA8tZAAPLWwADy1wAA8uBAAPLpQADy8wAA8vwAAPL8wADy/UAA8v3AAPL+QADy/sAA8v9AAPL/gADzAEAA8wOAAPMHQADzB8AA8whAAPMIwADzCUAA8wnAAPMKQADzCsAA8w6AAPMPQADzEAAA8xDAAPMRgADzEkAA8xMAAPMTwADzFEAA8yQAAPMkgADzJUAA8yXAAPMmgADzJsAA8ycAAPMnQADzJ4AA8ygAAPMogADzKMAA8ykAAPMpgADzKcAA8zmAAPM6AADzOoAA8zsAAPM7wADzPAAA8zxAAPM8gADzPMAA8z1AAPM9wADzPgAA8z5AAPM+wADzPwAA807AAPNPQADzT8AA81BAAPNRAADzUUAA81GAAPNRwADzUgAA81KAAPNTAADzU0AA81OAAPNUAADzVEAA82QAAPNkgADzZUAA82XAAPNmgADzZsAA82cAAPNnQADzZ4AA82gAAPNogADzaMAA82kAAPNpgADzacAA83mAAPN6AADzeoAA83sAAPN7wADzfAAA83xAAPN8gADzfMAA831AAPN9wADzfgAA835AAPN+wADzfwAA847AAPOPQADzj8AA85BAAPORAADzkUAA85GAAPORwADzkgAA85KAAPOTAADzk0AA85OAAPOUAADzlEAA86QAAPOkgADzpQAA86WAAPOmQADzpoAA86bAAPOnAADzp0AA86fAAPOoQADzqIAA86jAAPOpQADzqYAA87xAAPPFAADzzQAA89UAAPPVgADz1gAA89aAAPPXAADz18AA89gAAPPYQADz2QAA89lAAPPZwADz2gAA89qAAPPbQADz24AA89vAAPPcgADz3MAA894AAPPhQADz4oAA8+MAAPPjgADz5MAA8+WAAPPmQADz5sAA8/AAAPP5AAD0AsAA9AvAAPQMgAD0DQAA9A2AAPQOAAD0DoAA9A8AAPQPQAD0EAAA9BNAAPQXgAD0GAAA9BiAAPQZAAD0GYAA9BoAAPQagAD0GwAA9BuAAPQfwAD0IIAA9CFAAPQiAAD0IsAA9COAAPQkQAD0JQAA9CXAAPQmQAD0NgAA9DaAAPQ3AAD0N4AA9DhAAPQ4gAD0OMAA9DkAAPQ5QAD0OcAA9DpAAPQ6gAD0OsAA9DtAAPQ7gAD0S0AA9EvAAPRMQAD0TMAA9E2AAPRNwAD0TgAA9E5AAPROgAD0TwAA9E+AAPRPwAD0UAAA9FCAAPRQwAD0YIAA9GEAAPRhwAD0YkAA9GMAAPRjQAD0Y4AA9GPAAPRkAAD0ZIAA9GUAAPRlQAD0ZYAA9GYAAPRmQAD0aYAA9GnAAPRqAAD0aoAA9HpAAPR6wAD0e0AA9HvAAPR8gAD0fMAA9H0AAPR9QAD0fYAA9H4AAPR+gAD0fsAA9H8AAPR/gAD0f8AA9I+AAPSQAAD0kIAA9JEAAPSRwAD0kgAA9JJAAPSSgAD0ksAA9JNAAPSTwAD0lAAA9JRAAPSUwAD0lQAA9KTAAPSlQAD0pcAA9KZAAPSnAAD0p0AA9KeAAPSnwAD0qAAA9KiAAPSpAAD0qUAA9KmAAPSqAAD0qkAA9LoAAPS6gAD0uwAA9LuAAPS8QAD0vIAA9LzAAPS9AAD0vUAA9L3AAPS+QAD0voAA9L7AAPS/QAD0v4AA9M9AAPTPwAD00EAA9NDAAPTRgAD00cAA9NIAAPTSQAD00oAA9NMAAPTTgAD008AA9NQAAPTUgAD01MAA9N4AAPTnAAD08MAA9PnAAPT6gAD0+wAA9PuAAPT8AAD0/IAA9P0AAPT9QAD0/gAA9QFAAPUFAAD1BYAA9QYAAPUGgAD1BwAA9QeAAPUIAAD1CIAA9QxAAPUNAAD1DcAA9Q6AAPUPQAD1EAAA9RDAAPURgAD1EgAA9SHAAPUiQAD1IsAA9SNAAPUkAAD1JEAA9SSAAPUkwAD1JQAA9SWAAPUmAAD1JkAA9SaAAPUnAAD1J0AA9TcAAPU3gAD1OAAA9TiAAPU5QAD1OYAA9TnAAPU6AAD1OkAA9TrAAPU7QAD1O4AA9TvAAPU8QAD1PIAA9UxAAPVMwAD1TUAA9U3AAPVOgAD1TsAA9U8AAPVPQAD1T4AA9VAAAPVQgAD1UMAA9VEAAPVRgAD1UcAA9WGAAPViAAD1YoAA9WMAAPVjwAD1ZAAA9WRAAPVkgAD1ZMAA9WVAAPVlwAD1ZgAA9WZAAPVmwAD1ZwAA9XbAAPV3QAD1d8AA9XhAAPV5AAD1eUAA9XmAAPV5wAD1egAA9XqAAPV7AAD1e0AA9XuAAPV8AAD1fEAA9YwAAPWMgAD1jQAA9Y2AAPWOQAD1joAA9Y7AAPWPAAD1j0AA9Y/AAPWQQAD1kIAA9ZDAAPWRQAD1kYAA9aFAAPWhwAD1okAA9aLAAPWjgAD1o8AA9aQAAPWkQAD1pIAA9aUAAPWlgAD1pcAA9aYAAPWmgAD1psAA9bmAAPXCQAD1ykAA9dJAAPXSwAD100AA9dPAAPXUQAD11QAA9dVAAPXVgAD11kAA9daAAPXXAAD110AA9dfAAPXYgAD12MAA9dkAAPXZwAD12gAA9dtAAPXegAD138AA9eBAAPXgwAD14gAA9eLAAPXjgAD15AAA9e1AAPX2QAD2AAAA9gkAAPYJwAD2CkAA9grAAPYLQAD2C8AA9gxAAPYMgAD2DUAA9hCAAPYUwAD2FUAA9hXAAPYWQAD2FsAA9hdAAPYXwAD2GEAA9hjAAPYdAAD2HcAA9h6AAPYfQAD2IAAA9iDAAPYhgAD2IkAA9iMAAPYjgAD2M0AA9jPAAPY0QAD2NMAA9jWAAPY1wAD2NgAA9jZAAPY2gAD2NwAA9jeAAPY3wAD2OAAA9jiAAPY4wAD2SIAA9kkAAPZJgAD2SgAA9krAAPZLAAD2S0AA9kuAAPZLwAD2TEAA9kzAAPZNAAD2TUAA9k3AAPZOAAD2XcAA9l5AAPZfAAD2X4AA9mBAAPZggAD2YMAA9mEAAPZhQAD2YcAA9mJAAPZigAD2YsAA9mNAAPZjgAD2ZsAA9mcAAPZnQAD2Z8AA9neAAPZ4AAD2eIAA9nkAAPZ5wAD2egAA9npAAPZ6gAD2esAA9ntAAPZ7wAD2fAAA9nxAAPZ8wAD2fQAA9ozAAPaNQAD2jcAA9o5AAPaPAAD2j0AA9o+AAPaPwAD2kAAA9pCAAPaRAAD2kUAA9pGAAPaSAAD2kkAA9qIAAPaigAD2owAA9qOAAPakQAD2pIAA9qTAAPalAAD2pUAA9qXAAPamQAD2poAA9qbAAPanQAD2p4AA9rdAAPa3wAD2uEAA9rjAAPa5gAD2ucAA9roAAPa6QAD2uoAA9rsAAPa7gAD2u8AA9rwAAPa8gAD2vMAA9syAAPbNAAD2zYAA9s4AAPbOwAD2zwAA9s9AAPbPgAD2z8AA9tBAAPbQwAD20QAA9tFAAPbRwAD20gAA9ttAAPbkQAD27gAA9vcAAPb3wAD2+EAA9vjAAPb5QAD2+cAA9vpAAPb6gAD2+0AA9v6AAPcCQAD3AsAA9wNAAPcDwAD3BEAA9wTAAPcFQAD3BcAA9wmAAPcKQAD3CwAA9wvAAPcMgAD3DUAA9w4AAPcOwAD3D0AA9x8AAPcfgAD3IAAA9yCAAPchQAD3IYAA9yHAAPciAAD3IkAA9yLAAPcjQAD3I4AA9yPAAPckQAD3JIAA9zRAAPc0wAD3NUAA9zXAAPc2gAD3NsAA9zcAAPc3QAD3N4AA9zgAAPc4gAD3OMAA9zkAAPc5gAD3OcAA90mAAPdKAAD3SoAA90sAAPdLwAD3TAAA90xAAPdMgAD3TMAA901AAPdNwAD3TgAA905AAPdOwAD3TwAA917AAPdfQAD3YAAA92CAAPdhQAD3YYAA92HAAPdiAAD3YkAA92LAAPdjQAD3Y4AA92PAAPdkQAD3ZIAA93RAAPd0wAD3dUAA93XAAPd2gAD3dsAA93cAAPd3QAD3d4AA93gAAPd4gAD3eMAA93kAAPd5gAD3ecAA94mAAPeKAAD3ioAA94sAAPeLwAD3jAAA94xAAPeMgAD3jMAA941AAPeNwAD3jgAA945AAPeOwAD3jwAA957AAPefQAD3n8AA96BAAPehAAD3oUAA96GAAPehwAD3ogAA96KAAPejAAD3o0AA96OAAPekAAD3pEAA97cAAPe/wAD3x8AA98/AAPfQQAD30MAA99FAAPfRwAD30oAA99LAAPfTAAD308AA99QAAPfUgAD31MAA99VAAPfWAAD31kAA99aAAPfXQAD314AA99jAAPfcAAD33UAA993AAPfeQAD334AA9+BAAPfhAAD34YAA9+rAAPfzwAD3/YAA+AaAAPgHQAD4B8AA+AhAAPgIwAD4CUAA+AnAAPgKAAD4CsAA+A4AAPgSQAD4EsAA+BNAAPgTwAD4FEAA+BTAAPgVQAD4FcAA+BZAAPgagAD4G0AA+BwAAPgcwAD4HYAA+B5AAPgfAAD4H8AA+CCAAPghAAD4MMAA+DFAAPgxwAD4MkAA+DMAAPgzQAD4M4AA+DPAAPg0AAD4NIAA+DUAAPg1QAD4NYAA+DYAAPg2QAD4RgAA+EaAAPhHAAD4R4AA+EhAAPhIgAD4SMAA+EkAAPhJQAD4ScAA+EpAAPhKgAD4SsAA+EtAAPhLgAD4W0AA+FvAAPhcgAD4XQAA+F3AAPheAAD4XkAA+F6AAPhewAD4X0AA+F/AAPhgAAD4YEAA+GDAAPhhAAD4ZEAA+GSAAPhkwAD4ZUAA+HUAAPh1gAD4dgAA+HaAAPh3QAD4d4AA+HfAAPh4AAD4eEAA+HjAAPh5QAD4eYAA+HnAAPh6QAD4eoAA+IpAAPiKwAD4i0AA+IvAAPiMgAD4jMAA+I0AAPiNQAD4jYAA+I4AAPiOgAD4jsAA+I8AAPiPgAD4j8AA+J+AAPigAAD4oIAA+KEAAPihwAD4ogAA+KJAAPiigAD4osAA+KNAAPijwAD4pAAA+KRAAPikwAD4pQAA+LTAAPi1QAD4tcAA+LZAAPi3AAD4t0AA+LeAAPi3wAD4uAAA+LiAAPi5AAD4uUAA+LmAAPi6AAD4ukAA+MoAAPjKgAD4ywAA+MuAAPjMQAD4zIAA+MzAAPjNAAD4zUAA+M3AAPjOQAD4zoAA+M7AAPjPQAD4z4AA+NjAAPjhwAD464AA+PSAAPj1QAD49cAA+PZAAPj2wAD490AA+PfAAPj4AAD4+MAA+PwAAPj/wAD5AEAA+QDAAPkBQAD5AcAA+QJAAPkCwAD5A0AA+QcAAPkHwAD5CIAA+QlAAPkKAAD5CsAA+QuAAPkMQAD5DMAA+RyAAPkdAAD5HYAA+R4AAPkewAD5HwAA+R9AAPkfgAD5H8AA+SBAAPkgwAD5IQAA+SFAAPkhwAD5IgAA+THAAPkyQAD5MsAA+TNAAPk0AAD5NEAA+TSAAPk0wAD5NQAA+TWAAPk2AAD5NkAA+TaAAPk3AAD5N0AA+UcAAPlHgAD5SAAA+UiAAPlJQAD5SYAA+UnAAPlKAAD5SkAA+UrAAPlLQAD5S4AA+UvAAPlMQAD5TIAA+VxAAPlcwAD5XUAA+V3AAPlegAD5XsAA+V8AAPlfQAD5X4AA+WAAAPlggAD5YMAA+WEAAPlhgAD5YcAA+XGAAPlyAAD5coAA+XMAAPlzwAD5dAAA+XRAAPl0gAD5dMAA+XVAAPl1wAD5dgAA+XZAAPl2wAD5dwAA+YbAAPmHQAD5h8AA+YhAAPmJAAD5iUAA+YmAAPmJwAD5igAA+YqAAPmLAAD5i0AA+YuAAPmMAAD5jEAA+ZwAAPmcgAD5nQAA+Z2AAPmeQAD5noAA+Z7AAPmfAAD5n0AA+Z/AAPmgQAD5oIAA+aDAAPmhQAD5oYAA+bRAAPm9AAD5xQAA+c0AAPnNgAD5zgAA+c6AAPnPAAD5z8AA+dAAAPnQQAD50QAA+dFAAPnRwAD50gAA+dKAAPnTQAD504AA+dPAAPnUgAD51MAA+dYAAPnZQAD52oAA+dsAAPnbgAD53MAA+d2AAPneQAD53sAA+egAAPnxAAD5+sAA+gPAAPoEgAD6BQAA+gWAAPoGAAD6BoAA+gcAAPoHQAD6CAAA+gtAAPoPgAD6EAAA+hCAAPoRAAD6EYAA+hIAAPoSgAD6EwAA+hOAAPoXwAD6GIAA+hlAAPoaAAD6GsAA+huAAPocQAD6HQAA+h3AAPoeQAD6LgAA+i6AAPovAAD6L4AA+jBAAPowgAD6MMAA+jEAAPoxQAD6McAA+jJAAPoygAD6MsAA+jNAAPozgAD6Q0AA+kPAAPpEQAD6RMAA+kWAAPpFwAD6RgAA+kZAAPpGgAD6RwAA+keAAPpHwAD6SAAA+kiAAPpIwAD6WIAA+lkAAPpZwAD6WkAA+lsAAPpbQAD6W4AA+lvAAPpcAAD6XIAA+l0AAPpdQAD6XYAA+l4AAPpeQAD6YYAA+mHAAPpiAAD6YoAA+nJAAPpywAD6c0AA+nPAAPp0gAD6dMAA+nUAAPp1QAD6dYAA+nYAAPp2gAD6dsAA+ncAAPp3gAD6d8AA+oeAAPqIAAD6iIAA+okAAPqJwAD6igAA+opAAPqKgAD6isAA+otAAPqLwAD6jAAA+oxAAPqMwAD6jQAA+pzAAPqdQAD6ncAA+p5AAPqfAAD6n0AA+p+AAPqfwAD6oAAA+qCAAPqhAAD6oUAA+qGAAPqiAAD6okAA+rIAAPqygAD6swAA+rOAAPq0QAD6tIAA+rTAAPq1AAD6tUAA+rXAAPq2QAD6toAA+rbAAPq3QAD6t4AA+sdAAPrHwAD6yEAA+sjAAPrJgAD6ycAA+soAAPrKQAD6yoAA+ssAAPrLgAD6y8AA+swAAPrMgAD6zMAA+tYAAPrfAAD66MAA+vHAAPrygAD68wAA+vOAAPr0AAD69IAA+vUAAPr1QAD69gAA+vlAAPr9AAD6/YAA+v4AAPr+gAD6/wAA+v+AAPsAAAD7AIAA+wRAAPsFAAD7BcAA+waAAPsHQAD7CAAA+wjAAPsJgAD7CgAA+xnAAPsaQAD7GsAA+xtAAPscAAD7HEAA+xyAAPscwAD7HQAA+x2AAPseAAD7HkAA+x6AAPsfAAD7H0AA+y8AAPsvgAD7MAAA+zCAAPsxQAD7MYAA+zHAAPsyAAD7MkAA+zLAAPszQAD7M4AA+zPAAPs0QAD7NIAA+0RAAPtEwAD7RUAA+0XAAPtGgAD7RsAA+0cAAPtHQAD7R4AA+0gAAPtIgAD7SMAA+0kAAPtJgAD7ScAA+1mAAPtaAAD7WsAA+1tAAPtcAAD7XEAA+1yAAPtcwAD7XQAA+12AAPteAAD7XkAA+16AAPtfAAD7X0AA+2AAAPtvwAD7cEAA+3DAAPtxQAD7cgAA+3JAAPtygAD7csAA+3MAAPtzgAD7dAAA+3RAAPt0gAD7dQAA+3VAAPuFAAD7hYAA+4YAAPuGgAD7h0AA+4eAAPuHwAD7iAAA+4hAAPuIwAD7iUAA+4mAAPuJwAD7ikAA+4qAAPuaQAD7msAA+5tAAPubwAD7nIAA+5zAAPudAAD7nUAA+52AAPueAAD7noAA+57AAPufAAD7n4AA+5/AAPuygAD7u0AA+8NAAPvLQAD7y8AA+8xAAPvMwAD7zUAA+84AAPvOQAD7zoAA+89AAPvPgAD70AAA+9BAAPvQwAD70YAA+9HAAPvSAAD70sAA+9MAAPvUQAD714AA+9jAAPvZQAD72cAA+9sAAPvbwAD73IAA+90AAPvmQAD770AA+/kAAPwCAAD8AsAA/ANAAPwDwAD8BEAA/ATAAPwFQAD8BYAA/AZAAPwJgAD8DcAA/A5AAPwOwAD8D0AA/A/AAPwQQAD8EMAA/BFAAPwRwAD8FgAA/BbAAPwXgAD8GEAA/BkAAPwZwAD8GoAA/BtAAPwcAAD8HIAA/CxAAPwswAD8LUAA/C3AAPwugAD8LsAA/C8AAPwvQAD8L4AA/DAAAPwwgAD8MMAA/DEAAPwxgAD8McAA/EGAAPxCAAD8QoAA/EMAAPxDwAD8RAAA/ERAAPxEgAD8RMAA/EVAAPxFwAD8RgAA/EZAAPxGwAD8RwAA/FbAAPxXQAD8WAAA/FiAAPxZQAD8WYAA/FnAAPxaAAD8WkAA/FrAAPxbQAD8W4AA/FvAAPxcQAD8XIAA/F/AAPxgAAD8YEAA/GDAAPxwgAD8cQAA/HGAAPxyAAD8csAA/HMAAPxzQAD8c4AA/HPAAPx0QAD8dMAA/HUAAPx1QAD8dcAA/HYAAPyFwAD8hkAA/IbAAPyHQAD8iAAA/IhAAPyIgAD8iMAA/IkAAPyJgAD8igAA/IpAAPyKgAD8iwAA/ItAAPybAAD8m4AA/JwAAPycgAD8nUAA/J2AAPydwAD8ngAA/J5AAPyewAD8n0AA/J+AAPyfwAD8oEAA/KCAAPywQAD8sMAA/LFAAPyxwAD8soAA/LLAAPyzAAD8s0AA/LOAAPy0AAD8tIAA/LTAAPy1AAD8tYAA/LXAAPzFgAD8xgAA/MaAAPzHAAD8x8AA/MgAAPzIQAD8yIAA/MjAAPzJQAD8ycAA/MoAAPzKQAD8ysAA/MsAAPzUQAD83UAA/OcAAPzwAAD88MAA/PFAAPzxwAD88kAA/PLAAPzzQAD884AA/PRAAPz3gAD8+0AA/PvAAPz8QAD8/MAA/P1AAPz9wAD8/kAA/P7AAP0CgAD9A0AA/QQAAP0EwAD9BYAA/QZAAP0HAAD9B8AA/QhAAP0YAAD9GIAA/RkAAP0ZgAD9GkAA/RqAAP0awAD9GwAA/RtAAP0bwAD9HEAA/RyAAP0cwAD9HUAA/R2AAP0tQAD9LcAA/S5AAP0uwAD9L4AA/S/AAP0wAAD9MEAA/TCAAP0xAAD9MYAA/THAAP0yAAD9MoAA/TLAAP1CgAD9QwAA/UOAAP1EAAD9RMAA/UUAAP1FQAD9RYAA/UXAAP1GQAD9RsAA/UcAAP1HQAD9R8AA/UgAAP1XwAD9WEAA/VjAAP1ZQAD9WgAA/VpAAP1agAD9WsAA/VsAAP1bgAD9XAAA/VxAAP1cgAD9XQAA/V1AAP1tAAD9bYAA/W4AAP1ugAD9b0AA/W+AAP1vwAD9cAAA/XBAAP1wwAD9cUAA/XGAAP1xwAD9ckAA/XKAAP2CQAD9gsAA/YNAAP2DwAD9hIAA/YTAAP2FAAD9hUAA/YWAAP2GAAD9hoAA/YbAAP2HAAD9h4AA/YfAAP2XgAD9mAAA/ZiAAP2ZAAD9mcAA/ZoAAP2aQAD9moAA/ZrAAP2bQAD9m8AA/ZwAAP2cQAD9nMAA/Z0AAP2vwAD9uIAA/cCAAP3IgAD9yQAA/cmAAP3KAAD9yoAA/ctAAP3LgAD9y8AA/cyAAP3MwAD9zUAA/c2AAP3OAAD9zsAA/c8AAP3PQAD90AAA/dBAAP3RgAD91MAA/dYAAP3WgAD91wAA/dhAAP3ZAAD92cAA/dpAAP3jgAD97IAA/fZAAP3/QAD+AAAA/gCAAP4BAAD+AYAA/gIAAP4CgAD+AsAA/gOAAP4GwAD+CwAA/guAAP4MAAD+DIAA/g0AAP4NgAD+DgAA/g6AAP4PAAD+E0AA/hQAAP4UwAD+FYAA/hZAAP4XAAD+F8AA/hiAAP4ZQAD+GcAA/imAAP4qAAD+KoAA/isAAP4rwAD+LAAA/ixAAP4sgAD+LMAA/i1AAP4twAD+LgAA/i5AAP4uwAD+LwAA/j7AAP4/QAD+P8AA/kBAAP5BAAD+QUAA/kGAAP5BwAD+QgAA/kKAAP5DAAD+Q0AA/kOAAP5EAAD+REAA/lQAAP5UgAD+VUAA/lXAAP5WgAD+VsAA/lcAAP5XQAD+V4AA/lgAAP5YgAD+WMAA/lkAAP5ZgAD+WcAA/l0AAP5dQAD+XYAA/l4AAP5twAD+bkAA/m7AAP5vQAD+cAAA/nBAAP5wgAD+cMAA/nEAAP5xgAD+cgAA/nJAAP5ygAD+cwAA/nNAAP6DAAD+g4AA/oQAAP6EgAD+hUAA/oWAAP6FwAD+hgAA/oZAAP6GwAD+h0AA/oeAAP6HwAD+iEAA/oiAAP6YQAD+mMAA/plAAP6ZwAD+moAA/prAAP6bAAD+m0AA/puAAP6cAAD+nIAA/pzAAP6dAAD+nYAA/p3AAP6tgAD+rgAA/q6AAP6vAAD+r8AA/rAAAP6wQAD+sIAA/rDAAP6xQAD+scAA/rIAAP6yQAD+ssAA/rMAAP7CwAD+w0AA/sPAAP7EQAD+xQAA/sVAAP7FgAD+xcAA/sYAAP7GgAD+xwAA/sdAAP7HgAD+yAAA/shAAP7RgAD+2oAA/uRAAP7tQAD+7gAA/u6AAP7vAAD+74AA/vAAAP7wgAD+8MAA/vGAAP70wAD++IAA/vkAAP75gAD++gAA/vqAAP77AAD++4AA/vwAAP7/wAD/AIAA/wFAAP8CAAD/AsAA/wOAAP8EQAD/BQAA/wWAAP8VQAD/FcAA/xZAAP8WwAD/F4AA/xfAAP8YAAD/GEAA/xiAAP8ZAAD/GYAA/xnAAP8aAAD/GoAA/xrAAP8qgAD/KwAA/yuAAP8sAAD/LMAA/y0AAP8tQAD/LYAA/y3AAP8uQAD/LsAA/y8AAP8vQAD/L8AA/zAAAP8/wAD/QEAA/0DAAP9BQAD/QgA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BAhMAAQITwAECFEABAiQAAQIkgAECJQABAiWAAQImQAECJoABAibAAQInAAECJ0ABAifAAQIoQAECKIABAijAAQIpQAECKYABAjlAAQI5wAECOkABAjrAAQI7gAECO8ABAjwAAQI8QAECPIABAj0AAQI9gAECPcABAj4AAQI+gAECPsABAk6AAQJPAAECT8ABAlBAAQJRAAECUUABAlGAAQJRwAECUgABAlKAAQJTAAECU0ABAlOAAQJUAAECVEABAleAAQJXwAECWAABAliAAQJoQAECaMABAmlAAQJpwAECaoABAmrAAQJrAAECa0ABAmuAAQJsAAECbIABAmzAAQJtAAECbYABAm3AAQJ9gAECfgABAn6AAQJ/AAECf8ABAoAAAQKAQAECgIABAoDAAQKBQAECgcABAoIAAQKCQAECgsABAoMAAQKSwAECk0ABApPAAQKUQAEClQABApVAAQKVgAEClcABApYAAQKWgAEClwABApdAAQKXgAECmAABAphAAQKoAAECqIABAqkAAQKpgAECqkABAqqAAQKqwAECqwABAqtAAQKrwAECrEABAqyAAQKswAECrUABAq2AAQK9QAECvcABAr5AAQK+wAECv4ABAr/AAQLAAAECwEABAsCAAQLBAAECwYABAsHAAQLCAAECwoABAsLAAQLMAAEC1QABAt7AAQLnwAEC6IABAukAAQLpgAEC6gABAuqAAQLrAAEC60ABAuwAAQLvQAEC8wABAvOAAQL0AAEC9IABAvUAAQL1gAEC9gABAvaAAQL6QAEC+wABAvvAAQL8gAEC/UABAv4AAQL+wAEC/4ABAwAAAQMPwAEDEEABAxEAAQMRgAEDEkABAxKAAQMSwAEDEwABAxNAAQMTwAEDFEABAxSAAQMUwAEDFUABAxWAAQMlQAEDJcABAyZAAQMmwAEDJ4ABAyfAAQMoAAEDKEABAyiAAQMpAAEDKYABAynAAQMqAAEDKoABAyrAAQM6gAEDOwABAzuAAQM8AAEDPMABAz0AAQM9QAEDPYABAz3AAQM+QAEDPsABAz8AAQM/QAEDP8ABA0AAAQNPwAEDUEABA1EAAQNRgAEDUkABA1KAAQNSwAEDUwABA1NAAQNTwAEDVEABA1SAAQNUwAEDVUABA1WAAQNlQAEDZcABA2ZAAQNmwAEDZ4ABA2fAAQNoAAEDaEABA2iAAQNpAAEDaYABA2nAAQNqAAEDaoABA2rAAQN6gAEDewABA3uAAQN8AAEDfMABA30AAQN9QAEDfYABA33AAQN+QAEDfsABA38AAQN/QAEDf8ABA4AAAQOPwAEDkEABA5DAAQORQAEDkgABA5JAAQOSgAEDksABA5MAAQOTgAEDlAABA5RAAQOUgAEDlQABA5VAAQOoAAEDsMABA7jAAQPAwAEDwUABA8HAAQPCQAEDwsABA8OAAQPDwAEDxAABA8TAAQPFAAEDxYABA8XAAQPGQAEDxwABA8dAAQPHgAEDyEABA8iAAQPJwAEDzQABA85AAQPOwAEDz0ABA9CAAQPRQAED0gABA9KAAQPbwAED5MABA+6AAQP3gAED+EABA/jAAQP5QAED+cABA/pAAQP6wAED+wABA/vAAQP/AAEEA0ABBAPAAQQEQAEEBMABBAVAAQQFwAEEBkABBAbAAQQHQAEEC4ABBAxAAQQNAAEEDcABBA6AAQQPQAEEEAABBBDAAQQRgAEEEgABBCHAAQQiQAEEIsABBCNAAQQkAAEEJEABBCSAAQQkwAEEJQABBCWAAQQmAAEEJkABBCaAAQQnAAEEJ0ABBDcAAQQ3gAEEOAABBDiAAQQ5QAEEOYABBDnAAQQ6AAEEOkABBDrAAQQ7QAEEO4ABBDvAAQQ8QAEEPIABBExAAQRMwAEETYABBE4AAQROwAEETwABBE9AAQRPgAEET8ABBFBAAQRQwAEEUQABBFFAAQRRwAEEUgABBFVAAQRVgAEEVcABBFZAAQRmAAEEZoABBGcAAQRngAEEaEABBGiAAQRowAEEaQABBGlAAQRpwAEEakABBGqAAQRqwAEEa0ABBGuAAQR7QAEEe8ABBHxAAQR8wAEEfYABBH3AAQR+AAEEfkABBH6AAQR/AAEEf4ABBH/AAQSAAAEEgIABBIDAAQSQgAEEkQABBJGAAQSSAAEEksABBJMAAQSTQAEEk4ABBJPAAQSUQAEElMABBJUAAQSVQAEElcABBJYAAQSlwAEEpkABBKbAAQSnQAEEqAABBKhAAQSogAEEqMABBKkAAQSpgAEEqgABBKpAAQSqgAEEqwABBKtAAQS7AAEEu4ABBLwAAQS8gAEEvUABBL2AAQS9wAEEvgABBL5AAQS+wAEEv0ABBL+AAQS/wAEEwEABBMCAAQTJwAEE0sABBNyAAQTlgAEE5kABBObAAQTnQAEE58ABBOhAAQTowAEE6QABBOnAAQTtAAEE8MABBPFAAQTxwAEE8kABBPLAAQTzQAEE88ABBPRAAQT4AAEE+MABBPmAAQT6QAEE+wABBPvAAQT8gAEE/UABBP3AAQUNgAEFDgABBQ6AAQUPAAEFD8ABBRAAAQUQQAEFEIABBRDAAQURQAEFEcABBRIAAQUSQAEFEsABBRMAAQUiwAEFI0ABBSPAAQUkQAEFJQABBSVAAQUlgAEFJcABBSYAAQUmgAEFJwABBSdAAQUngAEFKAABBShAAQU4AAEFOIABBTkAAQU5gAEFOkABBTqAAQU6wAEFOwABBTtAAQU7wAEFPEABBTyAAQU8wAEFPUABBT2AAQVNQAEFTcABBU6AAQVPAAEFT8ABBVAAAQVQQAEFUIABBVDAAQVRQAEFUcABBVIAAQVSQAEFUsABBVMAAQViwAEFY0ABBWPAAQVkQAEFZQABBWVAAQVlgAEFZcABBWYAAQVmgAEFZwABBWdAAQVngAEFaAABBWhAAQV4AAEFeIABBXkAAQV5gAEFekABBXqAAQV6wAEFewABBXtAAQV7wAEFfEABBXyAAQV8wAEFfUABBX2AAQWNQAEFjcABBY5AAQWOwAEFj4ABBY/AAQWQAAEFkEABBZCAAQWRAAEFkYABBZHAAQWSAAEFkoABBZLAAQWVAAEFlUABBZXAAQWmgAEFr4ABBbiAAQXBQAEFywABBdMAAQXcwAEF5oABBe6AAQX3gAEGAIABBgEAAQYBwAEGAkABBgLAAQYDQAEGBAABBgSAAQYFAAEGBYABBgYAAQYGgAEGBwABBgfAAQYIgAEGCMABBgoAAQYNQAEGDgABBg6AAQYPQAEGEAABBhCAAQYZwAEGIsABBiyAAQY1gAEGNkABBjbAAQY3QAEGN8ABBjhAAQY4wAEGOQABBjnAAQY9AAEGQcABBkJAAQZCwAEGQ0ABBkPAAQZEQAEGRMABBkVAAQZFwAEGRkABBksAAQZLwAEGTIABBk1AAQZOAAEGTsABBk+AAQZQQAEGUQABBlHAAQZSQAEGYgABBmKAAQZjQAEGY8ABBmSAAQZkwAEGZQABBmVAAQZlgAEGZgABBmaAAQZmwAEGZwABBmeAAQZnwAEGagABBmpAAQZqwAEGeoABBnsAAQZ7gAEGfAABBnzAAQZ9AAEGfUABBn2AAQZ9wAEGfkABBn7AAQZ/AAEGf0ABBn/AAQaAAAEGj8ABBpBAAQaRAAEGkYABBpJAAQaSgAEGksABBpMAAQaTQAEGk8ABBpRAAQaUgAEGlMABBpVAAQaVgAEGl8ABBpgAAQaYgAEGqEABBqjAAQapQAEGqcABBqqAAQaqwAEGqwABBqtAAQargAEGrAABBqyAAQaswAEGrQABBq2AAQatwAEGvYABBr4AAQa+wAEGv0ABBsAAAQbAQAEGwIABBsDAAQbBAAEGwYABBsIAAQbCQAEGwoABBsMAAQbDQAEGxYABBsXAAQbGQAEG1gABBtaAAQbXAAEG14ABBthAAQbYgAEG2MABBtkAAQbZQAEG2cABBtpAAQbagAEG2sABBttAAQbbgAEG60ABBuvAAQbsgAEG7QABBu3AAQbuAAEG7kABBu6AAQbuwAEG70ABBu/AAQbwAAEG8EABBvDAAQbxAAEG9EABBvSAAQb0wAEG9UABBwUAAQcFgAEHBgABBwaAAQcHQAEHB4ABBwfAAQcIAAEHCEABBwjAAQcJQAEHCYABBwnAAQcKQAEHCoABBxpAAQcawAEHG4ABBxwAAQccwAEHHQABBx1AAQcdgAEHHcABBx5AAQcewAEHHwABBx9AAQcfwAEHIAABByVAAQcogAEHKcABByqAAQcrQAEHLIABBy1AAQcuAAEHLoABBy/AAQdCgAEHS0ABB1NAAQdbQAEHW8ABB1xAAQdcwAEHXUABB14AAQdeQAEHXoABB19AAQdfgAEHYAABB2BAAQdgwAEHYYABB2HAAQdiAAEHYsABB2MAAQdkQAEHZ4ABB2jAAQdpQAEHacABB2sAAQdrwAEHbIABB20AAQd2QAEHf0ABB4kAAQeSAAEHksABB5NAAQeTwAEHlEABB5TAAQeVQAEHlYABB5ZAAQeZgAEHncABB55AAQeewAEHn0ABB5/AAQegQAEHoMABB6FAAQehwAEHpgABB6bAAQengAEHqEABB6kAAQepwAEHqoABB6tAAQesAAEHrIABB7xAAQe8wAEHvUABB73AAQe+gAEHvsABB78AAQe/QAEHv4ABB8AAAQfAgAEHwMABB8EAAQfBgAEHwcABB9GAAQfSAAEH0oABB9MAAQfTwAEH1AABB9RAAQfUgAEH1MABB9VAAQfVwAEH1gABB9ZAAQfWwAEH1wABB+bAAQfnQAEH6AABB+iAAQfpQAEH6YABB+nAAQfqAAEH6kABB+rAAQfrQAEH64ABB+vAAQfsQAEH7IABB+/AAQfwAAEH8EABB/DAAQgAgAEIAQABCAGAAQgCAAEIAsABCAMAAQgDQAEIA4ABCAPAAQgEQAEIBMABCAUAAQgFQAEIBcABCAYAAQgVwAEIFkABCBbAAQgXQAEIGAABCBhAAQgYgAEIGMABCBkAAQgZgAEIGgABCBpAAQgagAEIGwABCBtAAQgrAAEIK4ABCCwAAQgsgAEILUABCC2AAQgtwAEILgABCC5AAQguwAEIL0ABCC+AAQgvwAEIMEABCDCAAQhAQAEIQMABCEFAAQhBwAEIQoABCELAAQhDAAEIQ0ABCEOAAQhEAAEIRIABCETAAQhFAAEIRYABCEXAAQhVgAEIVgABCFaAAQhXAAEIV8ABCFgAAQhYQAEIWIABCFjAAQhZQAEIWcABCFoAAQhaQAEIWsABCFsAAQhkQAEIbUABCHcAAQiAAAEIgMABCIFAAQiBwAEIgkABCILAAQiDQAEIg4ABCIRAAQiHgAEIi0ABCIvAAQiMQAEIjMABCI1AAQiNwAEIjkABCI7AAQiSgAEIk0ABCJQAAQiUwAEIlYABCJZAAQiXAAEIl8ABCJhAAQioAAEIqIABCKkAAQipgAEIqkABCKqAAQiqwAEIqwABCKtAAQirwAEIrEABCKyAAQiswAEIrUABCK2AAQi9QAEIvcABCL5AAQi+wAEIv4ABCL/AAQjAAAEIwEABCMCAAQjBAAEIwYABCMHAAQjCAAEIwoABCMLAAQjSgAEI0wABCNOAAQjUAAEI1MABCNUAAQjVQAEI1YABCNXAAQjWQAEI1sABCNcAAQjXQAEI18ABCNgAAQjnwAEI6EABCOkAAQjpgAEI6kABCOqAAQjqwAEI6wABCOtAAQjrwAEI7EABCOyAAQjswAEI7UABCO2AAQj9QAEI/cABCP5AAQj+wAEI/4ABCP/AAQkAAAEJAEABCQCAAQkBAAEJAYABCQHAAQkCAAEJAoABCQLAAQkSgAEJEwABCROAAQkUAAEJFMABCRUAAQkVQAEJFYABCRXAAQkWQAEJFsABCRcAAQkXQAEJF8ABCRgAAQknwAEJKEABCSjAAQkpQAEJKgABCSpAAQkqgAEJKsABCSsAAQkrgAEJLAABCSxAAQksgAEJLQABCS1AAQlAAAEJSMABCVDAAQlYwAEJWUABCVnAAQlaQAEJWsABCVuAAQlbwAEJXAABCVzAAQldAAEJXYABCV3AAQleQAEJXwABCV9AAQlfgAEJYEABCWCAAQliwAEJZgABCWdAAQlnwAEJaEABCWmAAQlqQAEJawABCWuAAQl0wAEJfcABCYeAAQmQgAEJkUABCZHAAQmSQAEJksABCZNAAQmTwAEJlAABCZTAAQmYAAEJnEABCZzAAQmdQAEJncABCZ5AAQmewAEJn0ABCZ/AAQmgQAEJpIABCaVAAQmmAAEJpsABCaeAAQmoQAEJqQABCanAAQmqgAEJqwABCbrAAQm7QAEJu8ABCbxAAQm9AAEJvUABCb2AAQm9wAEJvgABCb6AAQm/AAEJv0ABCb+AAQnAAAEJwEABCdAAAQnQgAEJ0QABCdGAAQnSQAEJ0oABCdLAAQnTAAEJ00ABCdPAAQnUQAEJ1IABCdTAAQnVQAEJ1YABCeVAAQnlwAEJ5oABCecAAQnnwAEJ6AABCehAAQnogAEJ6MABCelAAQnpwAEJ6gABCepAAQnqwAEJ6wABCe5AAQnugAEJ7sABCe9AAQn/AAEJ/4ABCgAAAQoAgAEKAUABCgGAAQoBwAEKAgABCgJAAQoCwAEKA0ABCgOAAQoDwAEKBEABCgSAAQoUQAEKFMABChVAAQoVwAEKFoABChbAAQoXAAEKF0ABCheAAQoYAAEKGIABChjAAQoZAAEKGYABChnAAQopgAEKKgABCiqAAQorAAEKK8ABCiwAAQosQAEKLIABCizAAQotQAEKLcABCi4AAQouQAEKLsABCi8AAQo+wAEKP0ABCj/AAQpAQAEKQQABCkFAAQpBgAEKQcABCkIAAQpCgAEKQwABCkNAAQpDgAEKRAABCkRAAQpUAAEKVIABClUAAQpVgAEKVkABClaAAQpWwAEKVwABCldAAQpXwAEKWEABCliAAQpYwAEKWUABClmAAQpiwAEKa8ABCnWAAQp+gAEKf0ABCn/AAQqAQAEKgMABCoFAAQqBwAEKggABCoLAAQqGAAEKicABCopAAQqKwAEKi0ABCovAAQqMQAEKjMABCo1AAQqRAAEKkcABCpKAAQqTQAEKlAABCpTAAQqVgAEKlkABCpbAAQqmgAEKpwABCqeAAQqoAAEKqMABCqkAAQqpQAEKqYABCqnAAQqqQAEKqsABCqsAAQqrQAEKq8ABCqwAAQq7wAEKvEABCrzAAQq9QAEKvgABCr5AAQq+gAEKvsABCr8AAQq/gAEKwAABCsBAAQrAgAEKwQABCsFAAQrRAAEK0YABCtIAAQrSgAEK00ABCtOAAQrTwAEK1AABCtRAAQrUwAEK1UABCtWAAQrVwAEK1kABCtaAAQrmQAEK5sABCudAAQrnwAEK6IABCujAAQrpAAEK6UABCumAAQrqAAEK6oABCurAAQrrAAEK64ABCuvAAQr7gAEK/AABCvyAAQr9AAEK/cABCv4AAQr+QAEK/oABCv7AAQr/QAEK/8ABCwAAAQsAQAELAMABCwEAAQsQwAELEUABCxHAAQsSQAELEwABCxNAAQsTgAELE8ABCxQAAQsUgAELFQABCxVAAQsVgAELFgABCxZAAQsmAAELJoABCycAAQsngAELKEABCyiAAQsowAELKQABCylAAQspwAELKkABCyqAAQsqwAELK0ABCyuAAQstwAELLgABCy6AAQs/QAELSEABC1FAAQtaAAELY8ABC2vAAQt1gAELf0ABC4dAAQuQQAELmUABC5nAAQuagAELmwABC5uAAQucAAELnMABC51AAQudwAELnkABC57AAQufQAELn8ABC6CAAQuhQAELoYABC6LAAQumAAELpsABC6dAAQuoAAELqMABC6lAAQuygAELu4ABC8VAAQvOQAELzwABC8+AAQvQAAEL0IABC9EAAQvRgAEL0cABC9KAAQvVwAEL2oABC9sAAQvbgAEL3AABC9yAAQvdAAEL3YABC94AAQvegAEL3wABC+PAAQvkgAEL5UABC+YAAQvmwAEL54ABC+hAAQvpAAEL6cABC+qAAQvrAAEL+sABC/tAAQv8AAEL/IABC/1AAQv9gAEL/cABC/4AAQv+QAEL/sABC/9AAQv/gAEL/8ABDABAAQwAgAEMAsABDAMAAQwDgAEME0ABDBPAAQwUQAEMFMABDBWAAQwVwAEMFgABDBZAAQwWgAEMFwABDBeAAQwXwAEMGAABDBiAAQwYwAEMKIABDCkAAQwpwAEMKkABDCsAAQwrQAEMK4ABDCvAAQwsAAEMLIABDC0AAQwtQAEMLYABDC4AAQwuQAEMMIABDDDAAQwxQAEMQQABDEGAAQxCAAEMQoABDENAAQxDgAEMQ8ABDEQAAQxEQAEMRMABDEVAAQxFgAEMRcABDEZAAQxGgAEMVkABDFbAAQxXgAEMWAABDFjAAQxZAAEMWUABDFmAAQxZwAEMWkABDFrAAQxbAAEMW0ABDFvAAQxcAAEMXkABDF6AAQxfAAEMbsABDG9AAQxvwAEMcEABDHEAAQxxQAEMcYABDHHAAQxyAAEMcoABDHMAAQxzQAEMc4ABDHQAAQx0QAEMhAABDISAAQyFQAEMhcABDIaAAQyGwAEMhwABDIdAAQyHgAEMiAABDIiAAQyIwAEMiQABDImAAQyJwAEMjQABDI1AAQyNgAEMjgABDJ3AAQyeQAEMnsABDJ9AAQygAAEMoEABDKCAAQygwAEMoQABDKGAAQyiAAEMokABDKKAAQyjAAEMo0ABDLMAAQyzgAEMtEABDLTAAQy1gAEMtcABDLYAAQy2QAEMtoABDLcAAQy3gAEMt8ABDLgAAQy4gAEMuMABDL7AAQzCAAEMxMABDMWAAQzGQAEMxwABDMfAAQzIgAEMy0ABDMwAAQzMwAEMzYABDM5AAQzPAAEMz4ABDNHAAQzUAAEM1oABDNiAAQzrQAEM9AABDPwAAQ0EAAENBIABDQUAAQ0FgAENBgABDQbAAQ0HAAENB0ABDQgAAQ0IQAENCMABDQkAAQ0JgAENCkABDQqAAQ0KwAENC4ABDQvAAQ0OAAENEUABDRKAAQ0TAAENE4ABDRTAAQ0VgAENFkABDRbAAQ0gAAENKQABDTLAAQ07wAENPIABDT0AAQ09gAENPgABDT6AAQ0/AAENP0ABDUAAAQ1DQAENR4ABDUgAAQ1IgAENSQABDUmAAQ1KAAENSoABDUsAAQ1LgAENT8ABDVCAAQ1RQAENUgABDVLAAQ1TgAENVEABDVUAAQ1VwAENVkABDWYAAQ1mgAENZwABDWeAAQ1oQAENaIABDWjAAQ1pAAENaUABDWnAAQ1qQAENaoABDWrAAQ1rQAENa4ABDXtAAQ17wAENfEABDXzAAQ19gAENfcABDX4AAQ1+QAENfoABDX8AAQ1/gAENf8ABDYAAAQ2AgAENgMABDZCAAQ2RAAENkcABDZJAAQ2TAAENk0ABDZOAAQ2TwAENlAABDZSAAQ2VAAENlUABDZWAAQ2WAAENlkABDZmAAQ2ZwAENmgABDZqAAQ2qQAENqsABDatAAQ2rwAENrIABDazAAQ2tAAENrUABDa2AAQ2uAAENroABDa7AAQ2vAAENr4ABDa/AAQ2/gAENwAABDcCAAQ3BAAENwcABDcIAAQ3CQAENwoABDcLAAQ3DQAENw8ABDcQAAQ3EQAENxMABDcUAAQ3UwAEN1UABDdXAAQ3WQAEN1wABDddAAQ3XgAEN18ABDdgAAQ3YgAEN2QABDdlAAQ3ZgAEN2gABDdpAAQ3qAAEN6oABDesAAQ3rgAEN7EABDeyAAQ3swAEN7QABDe1AAQ3twAEN7kABDe6AAQ3uwAEN70ABDe+AAQ3/QAEN/8ABDgBAAQ4AwAEOAYABDgHAAQ4CAAEOAkABDgKAAQ4DAAEOA4ABDgPAAQ4EAAEOBIABDgTAAQ4OAAEOFwABDiDAAQ4pwAEOKoABDisAAQ4rgAEOLAABDiyAAQ4tAAEOLUABDi4AAQ4xQAEONQABDjWAAQ42AAEONoABDjcAAQ43gAEOOAABDjiAAQ48QAEOPQABDj3AAQ4+gAEOP0ABDkAAAQ5AwAEOQYABDkIAAQ5RwAEOUkABDlLAAQ5TQAEOVAABDlRAAQ5UgAEOVMABDlUAAQ5VgAEOVgABDlZAAQ5WgAEOVwABDldAAQ5nAAEOZ4ABDmgAAQ5ogAEOaUABDmmAAQ5pwAEOagABDmpAAQ5qwAEOa0ABDmuAAQ5rwAEObEABDmyAAQ58QAEOfMABDn1AAQ59wAEOfoABDn7AAQ5/AAEOf0ABDn+AAQ6AAAEOgIABDoDAAQ6BAAEOgYABDoHAAQ6RgAEOkgABDpLAAQ6TQAEOlAABDpRAAQ6UgAEOlMABDpUAAQ6VgAEOlgABDpZAAQ6WgAEOlwABDpdAAQ6nAAEOp4ABDqgAAQ6ogAEOqUABDqmAAQ6pwAEOqgABDqpAAQ6qwAEOq0ABDquAAQ6rwAEOrEABDqyAAQ68QAEOvMABDr1AAQ69wAEOvoABDr7AAQ6/AAEOv0ABDr+AAQ7AAAEOwIABDsDAAQ7BAAEOwYABDsHAAQ7RgAEO0gABDtKAAQ7TAAEO08ABDtQAAQ7UQAEO1IABDtTAAQ7VQAEO1cABDtYAAQ7WQAEO1sABDtcAAQ7pwAEO8oABDvqAAQ8CgAEPAwABDwOAAQ8EAAEPBIABDwVAAQ8FgAEPBcABDwaAAQ8GwAEPB0ABDweAAQ8IAAEPCMABDwkAAQ8JQAEPCgABDwpAAQ8LgAEPDsABDxAAAQ8QgAEPEQABDxJAAQ8TAAEPE8ABDxRAAQ8dgAEPJoABDzBAAQ85QAEPOgABDzqAAQ87AAEPO4ABDzwAAQ88gAEPPMABDz2AAQ9AwAEPRQABD0WAAQ9GAAEPRoABD0cAAQ9HgAEPSAABD0iAAQ9JAAEPTUABD04AAQ9OwAEPT4ABD1BAAQ9RAAEPUcABD1KAAQ9TQAEPU8ABD2OAAQ9kAAEPZIABD2UAAQ9lwAEPZgABD2ZAAQ9mgAEPZsABD2dAAQ9nwAEPaAABD2hAAQ9owAEPaQABD3jAAQ95QAEPecABD3pAAQ97AAEPe0ABD3uAAQ97wAEPfAABD3yAAQ99AAEPfUABD32AAQ9+AAEPfkABD44AAQ+OgAEPj0ABD4/AAQ+QgAEPkMABD5EAAQ+RQAEPkYABD5IAAQ+SgAEPksABD5MAAQ+TgAEPk8ABD5cAAQ+XQAEPl4ABD5gAAQ+nwAEPqEABD6jAAQ+pQAEPqgABD6pAAQ+qgAEPqsABD6sAAQ+rgAEPrAABD6xAAQ+sgAEPrQABD61AAQ+9AAEPvYABD74AAQ++gAEPv0ABD7+AAQ+/wAEPwAABD8BAAQ/AwAEPwUABD8GAAQ/BwAEPwkABD8KAAQ/SQAEP0sABD9NAAQ/TwAEP1IABD9TAAQ/VAAEP1UABD9WAAQ/WAAEP1oABD9bAAQ/XAAEP14ABD9fAAQ/ngAEP6AABD+iAAQ/pAAEP6cABD+oAAQ/qQAEP6oABD+rAAQ/rQAEP68ABD+wAAQ/sQAEP7MABD+0AAQ/8wAEP/UABD/3AAQ/+QAEP/wABD/9AAQ//gAEP/8ABEAAAARAAgAEQAQABEAFAARABgAEQAgABEAJAARALgAEQFIABEB5AARAnQAEQKAABECiAARApAAEQKYABECoAARAqgAEQKsABECuAARAuwAEQMoABEDMAARAzgAEQNAABEDSAARA1AAEQNYABEDYAARA5wAEQOoABEDtAARA8AAEQPMABED2AARA+QAEQPwABED+AARBPQAEQT8ABEFBAARBQwAEQUYABEFHAARBSAAEQUkABEFKAARBTAAEQU4ABEFPAARBUAAEQVIABEFTAARBkgAEQZQABEGWAARBmAAEQZsABEGcAARBnQAEQZ4ABEGfAARBoQAEQaMABEGkAARBpQAEQacABEGoAARB5wAEQekABEHrAARB7QAEQfAABEHxAARB8gAEQfMABEH0AARB9gAEQfgABEH5AARB+gAEQfwABEH9AARCPAAEQj4ABEJBAARCQwAEQkYABEJHAARCSAAEQkkABEJKAARCTAAEQk4ABEJPAARCUAAEQlIABEJTAARCkgAEQpQABEKWAARCmAAEQpsABEKcAARCnQAEQp4ABEKfAARCoQAEQqMABEKkAARCpQAEQqcABEKoAARC5wAEQukABELrAARC7QAEQvAABELxAARC8gAEQvMABEL0AARC9gAEQvgABEL5AARC+gAEQvwABEL9AARDPAAEQz4ABENAAARDQgAEQ0UABENGAARDRwAEQ0gABENJAARDSwAEQ00ABENOAARDTwAEQ1EABENSAARDnQAEQ8AABEPgAAREAAAERAIABEQEAAREBgAERAgABEQLAAREDAAERA0ABEQQAAREEQAERBMABEQUAAREFgAERBkABEQaAAREGwAERB4ABEQfAAREJAAERDEABEQ2AAREOAAERDoABEQ/AAREQgAEREUABERHAAREbAAERJAABES3AARE2wAERN4ABETgAARE4gAEROQABETmAARE6AAEROkABETsAARE+QAERQoABEUMAARFDgAERRAABEUSAARFFAAERRYABEUYAARFGgAERSsABEUuAARFMQAERTQABEU3AARFOgAERT0ABEVAAARFQwAERUUABEWEAARFhgAERYgABEWKAARFjQAERY4ABEWPAARFkAAERZEABEWTAARFlQAERZYABEWXAARFmQAERZoABEXZAARF2wAERd0ABEXfAARF4gAEReMABEXkAARF5QAEReYABEXoAARF6gAEResABEXsAARF7gAERe8ABEYuAARGMAAERjMABEY1AARGOAAERjkABEY6AARGOwAERjwABEY+AARGQAAERkEABEZCAARGRAAERkUABEZSAARGUwAERlQABEZWAARGlQAERpcABEaZAARGmwAERp4ABEafAARGoAAERqEABEaiAARGpAAERqYABEanAARGqAAERqoABEarAARG6gAERuwABEbuAARG8AAERvMABEb0AARG9QAERvYABEb3AARG+QAERvsABEb8AARG/QAERv8ABEcAAARHPwAER0EABEdDAARHRQAER0gABEdJAARHSgAER0sABEdMAARHTgAER1AABEdRAARHUgAER1QABEdVAARHlAAER5YABEeYAARHmgAER50ABEeeAARHnwAER6AABEehAARHowAER6UABEemAARHpwAER6kABEeqAARH6QAER+sABEftAARH7wAER/IABEfzAARH9AAER/UABEf2AARH+AAER/oABEf7AARH/AAER/4ABEf/AARIJAAESEgABEhvAARIkwAESJYABEiYAARImgAESJwABEieAARIoAAESKEABEikAARIsQAESMAABEjCAARIxAAESMYABEjIAARIygAESMwABEjOAARI3QAESOAABEjjAARI5gAESOkABEjsAARI7wAESPIABEj0AARJMwAESTUABEk3AARJOQAESTwABEk9AARJPgAEST8ABElAAARJQgAESUQABElFAARJRgAESUgABElJAARJiAAESYoABEmMAARJjgAESZEABEmSAARJkwAESZQABEmVAARJlwAESZkABEmaAARJmwAESZ0ABEmeAARJ3QAESd8ABEnhAARJ4wAESeYABEnnAARJ6AAESekABEnqAARJ7AAESe4ABEnvAARJ8AAESfIABEnzAARKMgAESjQABEo2AARKOAAESjsABEo8AARKPQAESj4ABEo/AARKQQAESkMABEpEAARKRQAESkcABEpIAARKhwAESokABEqLAARKjQAESpAABEqRAARKkgAESpMABEqUAARKlgAESpgABEqZAARKmgAESpwABEqdAARK3AAESt4ABErgAARK4gAESuUABErmAARK5wAESugABErpAARK6wAESu0ABEruAARK7wAESvEABEryAARLMQAESzMABEs1AARLNwAESzoABEs7AARLPAAESz0ABEs+AARLQAAES0IABEtDAARLRAAES0YABEtHAARLkgAES7UABEvVAARL9QAES/cABEv5AARL+wAES/0ABEwAAARMAQAETAIABEwFAARMBgAETAgABEwJAARMCwAETA4ABEwPAARMEAAETBMABEwUAARMGQAETCYABEwrAARMLQAETC8ABEw0AARMNwAETDoABEw8AARMYQAETIUABEysAARM0AAETNMABEzVAARM1wAETNkABEzbAARM3QAETN4ABEzhAARM7gAETP8ABE0BAARNAwAETQUABE0HAARNCQAETQsABE0NAARNDwAETSAABE0jAARNJgAETSkABE0sAARNLwAETTIABE01AARNOAAETToABE15AARNewAETX0ABE1/AARNggAETYMABE2EAARNhQAETYYABE2IAARNigAETYsABE2MAARNjgAETY8ABE3OAARN0AAETdIABE3UAARN1wAETdgABE3ZAARN2gAETdsABE3dAARN3wAETeAABE3hAARN4wAETeQABE4jAAROJQAETigABE4qAAROLQAETi4ABE4vAAROMAAETjEABE4zAARONQAETjYABE43AAROOQAETjoABE5HAAROSAAETkkABE5LAAROigAETowABE6OAAROkAAETpMABE6UAAROlQAETpYABE6XAAROmQAETpsABE6cAAROnQAETp8ABE6gAARO3wAETuEABE7jAARO5QAETugABE7pAARO6gAETusABE7sAARO7gAETvAABE7xAARO8gAETvQABE71AARPNAAETzYABE84AARPOgAETz0ABE8+AARPPwAET0AABE9BAARPQwAET0UABE9GAARPRwAET0kABE9KAARPiQAET4sABE+NAARPjwAET5IABE+TAARPlAAET5UABE+WAARPmAAET5oABE+bAARPnAAET54ABE+fAARP3gAET+AABE/iAARP5AAET+cABE/oAARP6QAET+oABE/rAARP7QAET+8ABE/wAARP8QAET/MABE/0AARQGQAEUD0ABFBkAARQiAAEUIsABFCNAARQjwAEUJEABFCTAARQlQAEUJYABFCZAARQpgAEULUABFC3AARQuQAEULsABFC9AARQvwAEUMEABFDDAARQ0gAEUNUABFDYAARQ2wAEUN4ABFDhAARQ5AAEUOcABFDpAARRKAAEUSoABFEtAARRLwAEUTIABFEzAARRNAAEUTUABFE2AARROAAEUToABFE7AARRPAAEUT4ABFE/AARRfgAEUYAABFGCAARRhAAEUYcABFGIAARRiQAEUYoABFGLAARRjQAEUY8ABFGQAARRkQAEUZMABFGUAARR0wAEUdUABFHXAARR2QAEUdwABFHdAARR3gAEUd8ABFHgAARR4gAEUeQABFHlAARR5gAEUegABFHpAARSKAAEUioABFItAARSLwAEUjIABFIzAARSNAAEUjUABFI2AARSOAAEUjoABFI7AARSPAAEUj4ABFI/AARSQQAEUoAABFKCAARShAAEUoYABFKJAARSigAEUosABFKMAARSjQAEUo8ABFKRAARSkgAEUpMABFKVAARSlgAEUtUABFLXAARS2QAEUtsABFLeAARS3wAEUuAABFLhAARS4gAEUuQABFLmAARS5wAEUugABFLqAARS6wAEUyoABFMsAARTLgAEUzAABFMzAARTNAAEUzUABFM2AARTNwAEUzkABFM7AARTPAAEUz0ABFM/AARTQAAEU4sABFOuAARTzgAEU+4ABFPwAART8gAEU/QABFP2AART+QAEU/oABFP7AART/gAEU/8ABFQBAARUAgAEVAQABFQHAARUCAAEVAkABFQMAARUDQAEVBIABFQfAARUJAAEVCYABFQoAARULQAEVDAABFQzAARUNQAEVFoABFR+AARUpQAEVMkABFTMAARUzgAEVNAABFTSAARU1AAEVNYABFTXAARU2gAEVOcABFT4AARU+gAEVPwABFT+AARVAAAEVQIABFUEAARVBgAEVQgABFUZAARVHAAEVR8ABFUiAARVJQAEVSgABFUrAARVLgAEVTEABFUzAARVcgAEVXQABFV2AARVeAAEVXsABFV8AARVfQAEVX4ABFV/AARVgQAEVYMABFWEAARVhQAEVYcABFWIAARVxwAEVckABFXLAARVzQAEVdAABFXRAARV0gAEVdMABFXUAARV1gAEVdgABFXZAARV2gAEVdwABFXdAARWHAAEVh4ABFYhAARWIwAEViYABFYnAARWKAAEVikABFYqAARWLAAEVi4ABFYvAARWMAAEVjIABFYzAARWQAAEVkEABFZCAARWRAAEVoMABFaFAARWhwAEVokABFaMAARWjQAEVo4ABFaPAARWkAAEVpIABFaUAARWlQAEVpYABFaYAARWmQAEVtgABFbaAARW3AAEVt4ABFbhAARW4gAEVuMABFbkAARW5QAEVucABFbpAARW6gAEVusABFbtAARW7gAEVy0ABFcvAARXMQAEVzMABFc2AARXNwAEVzgABFc5AARXOgAEVzwABFc+AARXPwAEV0AABFdCAARXQwAEV4IABFeEAARXhgAEV4gABFeLAARXjAAEV40ABFeOAARXjwAEV5EABFeTAARXlAAEV5UABFeXAARXmAAEV9cABFfZAARX2wAEV90ABFfgAARX4QAEV+IABFfjAARX5AAEV+YABFfoAARX6QAEV+oABFfsAARX7QAEWBIABFg2AARYXQAEWIEABFiEAARYhgAEWIgABFiKAARYjAAEWI4ABFiPAARYkgAEWJ8ABFiuAARYsAAEWLIABFi0AARYtgAEWLgABFi6AARYvAAEWMsABFjOAARY0QAEWNQABFjXAARY2gAEWN0ABFjgAARY4gAEWSEABFkjAARZJgAEWSgABFkrAARZLAAEWS0ABFkuAARZLwAEWTEABFkzAARZNAAEWTUABFk3AARZOAAEWXcABFl5AARZewAEWX0ABFmAAARZgQAEWYIABFmDAARZhAAEWYYABFmIAARZiQAEWYoABFmMAARZjQAEWcwABFnOAARZ0AAEWdIABFnVAARZ1gAEWdcABFnYAARZ2QAEWdsABFndAARZ3gAEWd8ABFnhAARZ4gAEWiEABFojAARaJgAEWigABForAARaLAAEWi0ABFouAARaLwAEWjEABFozAARaNAAEWjUABFo3AARaOAAEWncABFp5AARaewAEWn0ABFqAAARagQAEWoIABFqDAARahAAEWoYABFqIAARaiQAEWooABFqMAARajQAEWswABFrOAARa0AAEWtIABFrVAARa1gAEWtcABFrYAARa2QAEWtsABFrdAARa3gAEWt8ABFrhAARa4gAEWyEABFsjAARbJQAEWycABFsqAARbKwAEWywABFstAARbLgAEWzAABFsyAARbMwAEWzQABFs2AARbNwAEW0AABFtBAARbQwAEW4YABFuqAARbzgAEW/EABFwYAARcOAAEXF8ABFyGAARcpgAEXMoABFzuAARc8AAEXPMABFz1AARc9wAEXPkABFz8AARc/gAEXQAABF0CAARdBAAEXQYABF0IAARdCwAEXQ4ABF0PAARdFAAEXSEABF0kAARdJgAEXSkABF0sAARdLgAEXVMABF13AARdngAEXcIABF3FAARdxwAEXckABF3LAARdzQAEXc8ABF3QAARd0wAEXeAABF3zAARd9QAEXfcABF35AARd+wAEXf0ABF3/AAReAQAEXgMABF4FAAReGAAEXhsABF4eAAReIQAEXiQABF4nAAReKgAEXi0ABF4wAAReMwAEXjUABF50AARedgAEXnkABF57AARefgAEXn8ABF6AAARegQAEXoIABF6EAARehgAEXocABF6IAAReigAEXosABF6UAARelQAEXpcABF7WAARe2AAEXtoABF7cAARe3wAEXuAABF7hAARe4gAEXuMABF7lAARe5wAEXugABF7pAARe6wAEXuwABF8rAARfLQAEXzAABF8yAARfNQAEXzYABF83AARfOAAEXzkABF87AARfPQAEXz4ABF8/AARfQQAEX0IABF9LAARfTAAEX04ABF+NAARfjwAEX5EABF+TAARflgAEX5cABF+YAARfmQAEX5oABF+cAARfngAEX58ABF+gAARfogAEX6MABF/iAARf5AAEX+cABF/pAARf7AAEX+0ABF/uAARf7wAEX/AABF/yAARf9AAEX/UABF/2AARf+AAEX/kABGACAARgAwAEYAUABGBEAARgRgAEYEgABGBKAARgTQAEYE4ABGBPAARgUAAEYFEABGBTAARgVQAEYFYABGBXAARgWQAEYFoABGCZAARgmwAEYJ4ABGCgAARgowAEYKQABGClAARgpgAEYKcABGCpAARgqwAEYKwABGCtAARgrwAEYLAABGC9AARgvgAEYL8ABGDBAARhAAAEYQIABGEEAARhBgAEYQkABGEKAARhCwAEYQwABGENAARhDwAEYREABGESAARhEwAEYRUABGEWAARhVQAEYVcABGFaAARhXAAEYV8ABGFgAARhYQAEYWIABGFjAARhZQAEYWcABGFoAARhaQAEYWsABGFsAARhiAAEYZUABGGgAARhowAEYaYABGGpAARhrAAEYa8ABGG6AARhvQAEYcAABGHDAARhxgAEYckABGHLAARh3gAEYewABGH1AARiBwAEYlIABGJ1AARilQAEYrUABGK3AARiuQAEYrsABGK9AARiwAAEYsEABGLCAARixQAEYsYABGLIAARiyQAEYssABGLOAARizwAEYtAABGLTAARi1AAEYtkABGLmAARi6wAEYu0ABGLvAARi9AAEYvcABGL6AARi/AAEYyEABGNFAARjbAAEY5AABGOTAARjlQAEY5cABGOZAARjmwAEY50ABGOeAARjoQAEY64ABGO/AARjwQAEY8MABGPFAARjxwAEY8kABGPLAARjzQAEY88ABGPgAARj4wAEY+YABGPpAARj7AAEY+8ABGPyAARj9QAEY/gABGP6AARkOQAEZDsABGQ9AARkPwAEZEIABGRDAARkRAAEZEUABGRGAARkSAAEZEoABGRLAARkTAAEZE4ABGRPAARkjgAEZJAABGSSAARklAAEZJcABGSYAARkmQAEZJoABGSbAARknQAEZJ8ABGSgAARkoQAEZKMABGSkAARk4wAEZOUABGToAARk6gAEZO0ABGTuAARk7wAEZPAABGTxAARk8wAEZPUABGT2AARk9wAEZPkABGT6AARlBwAEZQgABGUJAARlCwAEZUoABGVMAARlTgAEZVAABGVTAARlVAAEZVUABGVWAARlVwAEZVkABGVbAARlXAAEZV0ABGVfAARlYAAEZZ8ABGWhAARlowAEZaUABGWoAARlqQAEZaoABGWrAARlrAAEZa4ABGWwAARlsQAEZbIABGW0AARltQAEZfQABGX2AARl+AAEZfoABGX9AARl/gAEZf8ABGYAAARmAQAEZgMABGYFAARmBgAEZgcABGYJAARmCgAEZkkABGZLAARmTQAEZk8ABGZSAARmUwAEZlQABGZVAARmVgAEZlgABGZaAARmWwAEZlwABGZeAARmXwAEZp4ABGagAARmogAEZqQABGanAARmqAAEZqkABGaqAARmqwAEZq0ABGavAARmsAAEZrEABGazAARmtAAEZtkABGb9AARnJAAEZ0gABGdLAARnTQAEZ08ABGdRAARnUwAEZ1UABGdWAARnWQAEZ2YABGd1AARndwAEZ3kABGd7AARnfQAEZ38ABGeBAARngwAEZ5IABGeVAARnmAAEZ5sABGeeAARnoQAEZ6QABGenAARnqQAEZ+gABGfqAARn7AAEZ+4ABGfxAARn8gAEZ/MABGf0AARn9QAEZ/cABGf5AARn+gAEZ/sABGf9AARn/gAEaD0ABGg/AARoQQAEaEMABGhGAARoRwAEaEgABGhJAARoSgAEaEwABGhOAARoTwAEaFAABGhSAARoUwAEaJIABGiUAARolgAEaJgABGibAARonAAEaJ0ABGieAARonwAEaKEABGijAARopAAEaKUABGinAARoqAAEaOcABGjpAARo7AAEaO4ABGjxAARo8gAEaPMABGj0AARo9QAEaPcABGj5AARo+gAEaPsABGj9AARo/gAEaT0ABGk/AARpQQAEaUMABGlGAARpRwAEaUgABGlJAARpSgAEaUwABGlOAARpTwAEaVAABGlSAARpUwAEaZIABGmUAARplwAEaZkABGmcAARpnQAEaZ4ABGmfAARpoAAEaaIABGmkAARppQAEaaYABGmoAARpqQAEadAABGoPAARqEQAEahMABGoVAARqGAAEahkABGoaAARqGwAEahwABGoeAARqIAAEaiEABGoiAARqJAAEaiUABGpwAARqkwAEarMABGrTAARq1QAEatcABGrZAARq2wAEat4ABGrfAARq4AAEauMABGrkAARq5gAEaucABGrpAARq7AAEau0ABGruAARq8QAEavIABGr3AARrBAAEawkABGsLAARrDQAEaxIABGsVAARrGAAEaxoABGs/AARrYwAEa4oABGuuAARrsQAEa7MABGu1AARrtwAEa7kABGu7AARrvAAEa78ABGvMAARr3QAEa98ABGvhAARr4wAEa+UABGvnAARr6QAEa+sABGvtAARr/gAEbAEABGwEAARsBwAEbAoABGwNAARsEAAEbBMABGwWAARsGAAEbFcABGxZAARsWwAEbF0ABGxgAARsYQAEbGIABGxjAARsZAAEbGYABGxoAARsaQAEbGoABGxsAARsbQAEbKwABGyuAARssAAEbLIABGy1AARstgAEbLcABGy4AARsuQAEbLsABGy9AARsvgAEbL8ABGzBAARswgAEbQEABG0DAARtBgAEbQgABG0LAARtDAAEbQ0ABG0OAARtDwAEbREABG0TAARtFAAEbRUABG0XAARtGAAEbSUABG0mAARtJwAEbSkABG1oAARtagAEbWwABG1uAARtcQAEbXIABG1zAARtdAAEbXUABG13AARteQAEbXoABG17AARtfQAEbX4ABG29AARtvwAEbcEABG3DAARtxgAEbccABG3IAARtyQAEbcoABG3MAARtzgAEbc8ABG3QAARt0gAEbdMABG4SAARuFAAEbhYABG4YAARuGwAEbhwABG4dAARuHgAEbh8ABG4hAARuIwAEbiQABG4lAARuJwAEbigABG5nAARuaQAEbmsABG5tAARucAAEbnEABG5yAARucwAEbnQABG52AARueAAEbnkABG56AARufAAEbn0ABG68AARuvgAEbsAABG7CAARuxQAEbsYABG7HAARuyAAEbskABG7LAARuzQAEbs4ABG7PAARu0QAEbtIABG73AARvGwAEb0IABG9mAARvaQAEb2sABG9tAARvbwAEb3EABG9zAARvdAAEb3cABG+EAARvkwAEb5UABG+XAARvmQAEb5sABG+dAARvnwAEb6EABG+wAARvswAEb7YABG+5AARvvAAEb78ABG/CAARvxQAEb8cABHAGAARwCAAEcAoABHAMAARwDwAEcBAABHARAARwEgAEcBMABHAVAARwFwAEcBgABHAZAARwGwAEcBwABHBbAARwXQAEcF8ABHBhAARwZAAEcGUABHBmAARwZwAEcGgABHBqAARwbAAEcG0ABHBuAARwcAAEcHEABHCwAARwsgAEcLQABHC2AARwuQAEcLoABHC7AARwvAAEcL0ABHC/AARwwQAEcMIABHDDAARwxQAEcMYABHEFAARxBwAEcQoABHEMAARxDwAEcRAABHERAARxEgAEcRMABHEVAARxFwAEcRgABHEZAARxGwAEcRwABHFbAARxXQAEcV8ABHFhAARxZAAEcWUABHFmAARxZwAEcWgABHFqAARxbAAEcW0ABHFuAARxcAAEcXEABHGwAARxsgAEcbUABHG3AARxugAEcbsABHG8AARxvQAEcb4ABHHAAARxwgAEccMABHHEAARxxgAEcccABHHuAARyLQAEci8ABHIxAARyMwAEcjYABHI3AARyOAAEcjkABHI6AARyPAAEcj4ABHI/AARyQAAEckIABHJDAARyjgAEcrEABHLRAARy8QAEcvMABHL1AARy9wAEcvkABHL8AARy/QAEcv4ABHMBAARzAgAEcwQABHMFAARzBwAEcwoABHMLAARzDAAEcw8ABHMQAARzGQAEcyYABHMrAARzLQAEcy8ABHM0AARzNwAEczoABHM8AARzYQAEc4UABHOsAARz0AAEc9MABHPVAARz1wAEc9kABHPbAARz3QAEc94ABHPhAARz7gAEc/8ABHQBAAR0AwAEdAUABHQHAAR0CQAEdAsABHQNAAR0DwAEdCAABHQjAAR0JgAEdCkABHQsAAR0LwAEdDIABHQ1AAR0OAAEdDoABHR5AAR0ewAEdH0ABHR/AAR0ggAEdIMABHSEAAR0hQAEdIYABHSIAAR0igAEdIsABHSMAAR0jgAEdI8ABHTOAAR00AAEdNIABHTUAAR01wAEdNgABHTZAAR02gAEdNsABHTdAAR03wAEdOAABHThAAR04wAEdOQABHUjAAR1JQAEdSgABHUqAAR1LQAEdS4ABHUvAAR1MAAEdTEABHUzAAR1NQAEdTYABHU3AAR1OQAEdToABHVHAAR1SAAEdUkABHVLAAR1igAEdYwABHWOAAR1kAAEdZMABHWUAAR1lQAEdZYABHWXAAR1mQAEdZsABHWcAAR1nQAEdZ8ABHWgAAR13wAEdeEABHXjAAR15QAEdegABHXpAAR16gAEdesABHXsAAR17gAEdfAABHXxAAR18gAEdfQABHX1AAR2NAAEdjYABHY4AAR2OgAEdj0ABHY+AAR2PwAEdkAABHZBAAR2QwAEdkUABHZGAAR2RwAEdkkABHZKAAR2iQAEdosABHaNAAR2jwAEdpIABHaTAAR2lAAEdpUABHaWAAR2mAAEdpoABHabAAR2nAAEdp4ABHafAAR23gAEduAABHbiAAR25AAEducABHboAAR26QAEduoABHbrAAR27QAEdu8ABHbwAAR28QAEdvMABHb0AAR3GQAEdz0ABHdkAAR3iAAEd4sABHeNAAR3jwAEd5EABHeTAAR3lQAEd5YABHeZAAR3pgAEd7UABHe3AAR3uQAEd7sABHe9AAR3vwAEd8EABHfDAAR30gAEd9UABHfYAAR32wAEd94ABHfhAAR35AAEd+cABHfpAAR4KAAEeCoABHgsAAR4LgAEeDEABHgyAAR4MwAEeDQABHg1AAR4NwAEeDkABHg6AAR4OwAEeD0ABHg+AAR4fQAEeH8ABHiBAAR4gwAEeIYABHiHAAR4iAAEeIkABHiKAAR4jAAEeI4ABHiPAAR4kAAEeJIABHiTAAR40gAEeNQABHjWAAR42AAEeNsABHjcAAR43QAEeN4ABHjfAAR44QAEeOMABHjkAAR45QAEeOcABHjoAAR5JwAEeSkABHkrAAR5LQAEeTAABHkxAAR5MgAEeTMABHk0AAR5NgAEeTgABHk5AAR5OgAEeTwABHk9AAR5fAAEeX4ABHmAAAR5ggAEeYUABHmGAAR5hwAEeYgABHmJAAR5iwAEeY0ABHmOAAR5jwAEeZEABHmSAAR50QAEedMABHnVAAR51wAEedoABHnbAAR53AAEed0ABHneAAR54AAEeeIABHnjAAR55AAEeeYABHnnAAR6JgAEeigABHoqAAR6LAAEei8ABHowAAR6MQAEejIABHozAAR6NQAEejcABHo4AAR6OQAEejsABHo8AAR6hwAEeqoABHrKAAR66gAEeuwABHruAAR68AAEevIABHr1AAR69gAEevcABHr6AAR6+wAEev0ABHr+AAR7AQAEewQABHsFAAR7BgAEewkABHsKAAR7DwAEexwABHshAAR7IwAEeyYABHsrAAR7LgAEezEABHszAAR7WAAEe3wABHujAAR7xwAEe8oABHvMAAR7zgAEe9AABHvSAAR71AAEe9UABHvYAAR75QAEe/YABHv4AAR7+gAEe/wABHv+AAR8AAAEfAIABHwEAAR8BgAEfBcABHwaAAR8HQAEfCAABHwjAAR8JgAEfCkABHwsAAR8LwAEfDEABHxwAAR8cgAEfHQABHx2AAR8eQAEfHoABHx7AAR8fAAEfH0ABHx/AAR8gQAEfIIABHyDAAR8hQAEfIYABHzFAAR8xwAEfMkABHzLAAR8zgAEfM8ABHzQAAR80QAEfNIABHzUAAR81gAEfNcABHzYAAR82gAEfNsABH0aAAR9HAAEfR8ABH0hAAR9JAAEfSUABH0mAAR9JwAEfSgABH0qAAR9LAAEfS0ABH0uAAR9MAAEfTEABH0+AAR9PwAEfUAABH1CAAR9gQAEfYMABH2FAAR9hwAEfYoABH2LAAR9jAAEfY0ABH2OAAR9kAAEfZIABH2TAAR9lAAEfZYABH2XAAR91gAEfdgABH3aAAR93AAEfd8ABH3gAAR94QAEfeIABH3jAAR95QAEfecABH3oAAR96QAEfesABH3sAAR+KwAEfi0ABH4vAAR+MQAEfjQABH41AAR+NgAEfjcABH44AAR+OgAEfjwABH49AAR+PgAEfkAABH5BAAR+gAAEfoIABH6EAAR+hgAEfokABH6KAAR+iwAEfowABH6NAAR+jwAEfpEABH6SAAR+kwAEfpUABH6WAAR+1QAEftcABH7ZAAR+2wAEft4ABH7fAAR+4AAEfuEABH7iAAR+5AAEfuYABH7nAAR+6AAEfuoABH7rAAR/EAAEfzQABH9bAAR/fwAEf4IABH+FAAR/hwAEf4kABH+LAAR/jQAEf44ABH+RAAR/ngAEf6sABH+uAAR/sQAEf7QABH+3AAR/ugAEf70ABH/KAAR/zQAEf9AABH/TAAR/1gAEf9kABH/cAAR/3gAEgB0ABIAfAASAIgAEgCQABIAnAASAKAAEgCkABIAqAASAKwAEgC0ABIAwAASAMQAEgDIABIA0AASANQAEgHgABICcAASAwAAEgOMABIEKAASBKgAEgVEABIF4AASBmAAEgbwABIHgAASB4gAEgeUABIHnAASB6QAEgesABIHuAASB8AAEgfIABIH0AASB9gAEgfgABIH6AASB/QAEggAABIIBAASCBgAEghMABIIWAASCGAAEghsABIIeAASCIAAEgkUABIJpAASCkAAEgrQABIK3AASCuQAEgrsABIK9AASCvwAEgsEABILCAASCxQAEgtIABILlAASC5wAEgukABILrAASC7QAEgu8ABILxAASC8wAEgvUABIL3AASDCgAEgw0ABIMQAASDEwAEgxYABIMZAASDHAAEgx8ABIMiAASDJQAEgycABINmAASDaAAEg2sABINtAASDcAAEg3EABINyAASDcwAEg3QABIN2AASDeAAEg3kABIN6AASDfAAEg30ABIOGAASDhwAEg4kABIPIAASDygAEg8wABIPOAASD0QAEg9IABIPTAASD1AAEg9UABIPXAASD2QAEg9oABIPbAASD3QAEg94ABIQdAASEHwAEhCIABIQkAASEJwAEhCgABIQpAASEKgAEhCsABIQtAASELwAEhDAABIQxAASEMwAEhDQABIQ9AASEPgAEhEAABIR/AASEgQAEhIMABISFAASEiAAEhIkABISKAASEiwAEhIwABISOAASEkAAEhJEABISSAASElAAEhJUABITUAASE1gAEhNkABITbAASE3gAEhN8ABITgAASE4QAEhOIABITkAASE5gAEhOcABIToAASE6gAEhOsABIT0AASE9QAEhPcABIU2AASFOAAEhToABIU8AASFPwAEhUAABIVBAASFQgAEhUMABIVFAASFRwAEhUgABIVJAASFSwAEhUwABIWLAASFjQAEhZAABIWSAASFlQAEhZYABIWXAASFmAAEhZkABIWbAASFnQAEhZ4ABIWfAASFoQAEhaIABIWvAASFsAAEhbEABIWzAASF8gAEhfQABIX2AASF+AAEhfsABIX8AASF/QAEhf4ABIX/AASGAQAEhgMABIYEAASGBQAEhgcABIYIAASGRwAEhkkABIZMAASGTgAEhlEABIZSAASGUwAEhlQABIZVAASGVwAEhlkABIZaAASGWwAEhl0ABIZeAASGbQAEhnoABIaBAASGhAAEhocABIaKAASGkQAEhpQABIaXAASGmgAEhpwABIakAASGqQAEhvQABIcXAASHNwAEh1cABIdZAASHWwAEh10ABIdfAASHYgAEh2MABIdkAASHZwAEh2gABIdqAASHawAEh20ABIdwAASHcQAEh3IABId1AASHdgAEh3sABIeIAASHjQAEh48ABIeRAASHlgAEh5kABIecAASHngAEh8MABIfnAASIDgAEiDIABIg1AASINwAEiDkABIg7AASIPQAEiD8ABIhAAASIQwAEiFAABIhhAASIYwAEiGUABIhnAASIaQAEiGsABIhtAASIbwAEiHEABIiCAASIhQAEiIgABIiLAASIjgAEiJEABIiUAASIlwAEiJoABIicAASI2wAEiN0ABIjfAASI4QAEiOQABIjlAASI5gAEiOcABIjoAASI6gAEiOwABIjtAASI7gAEiPAABIjxAASJMAAEiTIABIk0AASJNgAEiTkABIk6AASJOwAEiTwABIk9AASJPwAEiUEABIlCAASJQwAEiUUABIlGAASJhQAEiYcABImKAASJjAAEiY8ABImQAASJkQAEiZIABImTAASJlQAEiZcABImYAASJmQAEiZsABImcAASJqQAEiaoABImrAASJrQAEiewABInuAASJ8AAEifIABIn1AASJ9gAEifcABIn4AASJ+QAEifsABIn9AASJ/gAEif8ABIoBAASKAgAEikEABIpDAASKRQAEikcABIpKAASKSwAEikwABIpNAASKTgAEilAABIpSAASKUwAEilQABIpWAASKVwAEipYABIqYAASKmgAEipwABIqfAASKoAAEiqEABIqiAASKowAEiqUABIqnAASKqAAEiqkABIqrAASKrAAEiusABIrtAASK7wAEivEABIr0AASK9QAEivYABIr3AASK+AAEivoABIr8AASK/QAEiv4ABIsAAASLAQAEi0AABItCAASLRAAEi0YABItJAASLSgAEi0sABItMAASLTQAEi08ABItRAASLUgAEi1MABItVAASLVgAEi3sABIufAASLxgAEi+oABIvtAASL7wAEi/EABIvzAASL9QAEi/cABIv4AASL+wAEjAgABIwXAASMGQAEjBsABIwdAASMHwAEjCEABIwjAASMJQAEjDQABIw3AASMOgAEjD0ABIxAAASMQwAEjEYABIxJAASMSwAEjIoABIyMAASMjgAEjJAABIyTAASMlAAEjJUABIyWAASMlwAEjJkABIybAASMnAAEjJ0ABIyfAASMoAAEjN8ABIzhAASM4wAEjOUABIzoAASM6QAEjOoABIzrAASM7AAEjO4ABIzwAASM8QAEjPIABIz0AASM9QAEjTQABI02AASNOAAEjToABI09AASNPgAEjT8ABI1AAASNQQAEjUMABI1FAASNRgAEjUcABI1JAASNSgAEjYkABI2LAASNjQAEjY8ABI2SAASNkwAEjZQABI2VAASNlgAEjZgABI2aAASNmwAEjZwABI2eAASNnwAEjd4ABI3gAASN4gAEjeQABI3nAASN6AAEjekABI3qAASN6wAEje0ABI3vAASN8AAEjfEABI3zAASN9AAEjjMABI41AASONwAEjjkABI48AASOPQAEjj4ABI4/AASOQAAEjkIABI5EAASORQAEjkYABI5IAASOSQAEjogABI6KAASOjAAEjo4ABI6RAASOkgAEjpMABI6UAASOlQAEjpcABI6ZAASOmgAEjpsABI6dAASOngAEjukABI8MAASPLAAEj0wABI9OAASPUAAEj1IABI9UAASPVwAEj1gABI9ZAASPXAAEj10ABI9fAASPYAAEj2IABI9lAASPZgAEj2cABI9qAASPawAEj3AABI99AASPggAEj4QABI+GAASPiwAEj44ABI+RAASPkwAEj7gABI/cAASQAwAEkCcABJAqAASQLAAEkC4ABJAwAASQMgAEkDQABJA1AASQOAAEkEUABJBWAASQWAAEkFoABJBcAASQXgAEkGAABJBiAASQZAAEkGYABJB3AASQegAEkH0ABJCAAASQgwAEkIYABJCJAASQjAAEkI8ABJCRAASQ0AAEkNIABJDUAASQ1gAEkNkABJDaAASQ2wAEkNwABJDdAASQ3wAEkOEABJDiAASQ4wAEkOUABJDmAASRJQAEkScABJEpAASRKwAEkS4ABJEvAASRMAAEkTEABJEyAASRNAAEkTYABJE3AASROAAEkToABJE7AASRegAEkXwABJF/AASRgQAEkYQABJGFAASRhgAEkYcABJGIAASRigAEkYwABJGNAASRjgAEkZAABJGRAASRngAEkZ8ABJGgAASRogAEkeEABJHjAASR5QAEkecABJHqAASR6wAEkewABJHtAASR7gAEkfAABJHyAASR8wAEkfQABJH2AASR9wAEkjYABJI4AASSOgAEkjwABJI/AASSQAAEkkEABJJCAASSQwAEkkUABJJHAASSSAAEkkkABJJLAASSTAAEkosABJKNAASSjwAEkpEABJKUAASSlQAEkpYABJKXAASSmAAEkpoABJKcAASSnQAEkp4ABJKgAASSoQAEkuAABJLiAASS5AAEkuYABJLpAASS6gAEkusABJLsAASS7QAEku8ABJLxAASS8gAEkvMABJL1AASS9gAEkzUABJM3AASTOQAEkzsABJM+AASTPwAEk0AABJNBAASTQgAEk0QABJNGAASTRwAEk0gABJNKAASTSwAEk3AABJOUAASTuwAEk98ABJPiAAST5AAEk+YABJPoAAST6gAEk+wABJPtAAST8AAEk/0ABJQMAASUDgAElBAABJQSAASUFAAElBYABJQYAASUGgAElCkABJQsAASULwAElDIABJQ1AASUOAAElDsABJQ+AASUQAAElH8ABJSBAASUgwAElIUABJSIAASUiQAElIoABJSLAASUjAAElI4ABJSQAASUkQAElJIABJSUAASUlQAElNQABJTWAASU2AAElNoABJTdAASU3gAElN8ABJTgAASU4QAElOMABJTlAASU5gAElOcABJTpAASU6gAElSkABJUrAASVLQAElS8ABJUyAASVMwAElTQABJU1AASVNgAElTgABJU6AASVOwAElTwABJU+AASVPwAElX4ABJWAAASVggAElYQABJWHAASViAAElYkABJWKAASViwAElY0ABJWPAASVkAAElZEABJWTAASVlAAEldMABJXVAASV1wAEldkABJXcAASV3QAEld4ABJXfAASV4AAEleIABJXkAASV5QAEleYABJXoAASV6QAEligABJYqAASWLAAEli4ABJYxAASWMgAEljMABJY0AASWNQAEljcABJY5AASWOgAEljsABJY9AASWPgAEln0ABJZ/AASWgQAEloMABJaGAASWhwAElogABJaJAASWigAElowABJaOAASWjwAElpAABJaSAASWkwAElt4ABJcBAASXIQAEl0EABJdDAASXRQAEl0cABJdJAASXTAAEl00ABJdOAASXUQAEl1IABJdUAASXVQAEl1cABJdaAASXWwAEl1wABJdfAASXYAAEl2UABJdyAASXdwAEl3kABJd7AASXgAAEl4MABJeGAASXiAAEl60ABJfRAASX+AAEmBwABJgfAASYIQAEmCMABJglAASYJwAEmCkABJgqAASYLQAEmDoABJhLAASYTQAEmE8ABJhRAASYUwAEmFUABJhXAASYWQAEmFsABJhsAASYbwAEmHIABJh1AASYeAAEmHsABJh+AASYgQAEmIQABJiGAASYxQAEmMcABJjJAASYywAEmM4ABJjPAASY0AAEmNEABJjSAASY1AAEmNYABJjXAASY2AAEmNoABJjbAASZGgAEmRwABJkeAASZIAAEmSMABJkkAASZJQAEmSYABJknAASZKQAEmSsABJksAASZLQAEmS8ABJkwAASZbwAEmXEABJl0AASZdgAEmXkABJl6AASZewAEmXwABJl9AASZfwAEmYEABJmCAASZgwAEmYUABJmGAASZkwAEmZQABJmVAASZlwAEmdYABJnYAASZ2gAEmdwABJnfAASZ4AAEmeEABJniAASZ4wAEmeUABJnnAASZ6AAEmekABJnrAASZ7AAEmisABJotAASaLwAEmjEABJo0AASaNQAEmjYABJo3AASaOAAEmjoABJo8AASaPQAEmj4ABJpAAASaQQAEmoAABJqCAASahAAEmoYABJqJAASaigAEmosABJqMAASajQAEmo8ABJqRAASakgAEmpMABJqVAASalgAEmtUABJrXAASa2QAEmtsABJreAASa3wAEmuAABJrhAASa4gAEmuQABJrmAASa5wAEmugABJrqAASa6wAEmyoABJssAASbLgAEmzAABJszAASbNAAEmzUABJs2AASbNwAEmzkABJs7AASbPAAEmz0ABJs/AASbQAAEm2UABJuJAASbsAAEm9QABJvXAASb2QAEm9sABJvdAASb3wAEm+EABJviAASb5QAEm/IABJwBAAScAwAEnAUABJwHAAScCQAEnAsABJwNAAScDwAEnB4ABJwhAAScJAAEnCcABJwqAAScLQAEnDAABJwzAAScNQAEnHQABJx2AASceQAEnHsABJx+AAScfwAEnIAABJyBAAScggAEnIQABJyGAASchwAEnIgABJyKAASciwAEnMoABJzMAASczgAEnNAABJzTAASc1AAEnNUABJzWAASc1wAEnNkABJzbAASc3AAEnN0ABJzfAASc4AAEnR8ABJ0hAASdIwAEnSUABJ0oAASdKQAEnSoABJ0rAASdLAAEnS4ABJ0wAASdMQAEnTIABJ00AASdNQAEnXQABJ12AASdeQAEnXsABJ1+AASdfwAEnYAABJ2BAASdggAEnYQABJ2GAASdhwAEnYgABJ2KAASdiwAEncoABJ3MAASdzgAEndAABJ3TAASd1AAEndUABJ3WAASd1wAEndkABJ3bAASd3AAEnd0ABJ3fAASd4AAEnh8ABJ4hAASeIwAEniUABJ4oAASeKQAEnioABJ4rAASeLAAEni4ABJ4wAASeMQAEnjIABJ40AASeNQAEnnQABJ52AASeeAAEnnoABJ59AASefgAEnn8ABJ6AAASegQAEnoMABJ6FAASehgAEnocABJ6JAASeigAEnpMABJ6UAASelgAEntUABJ7XAASe2QAEntsABJ7eAASe3wAEnuAABJ7hAASe4gAEnuQABJ7nAASe6AAEnukABJ7rAASe7AAEnysABJ8tAASfMAAEnzIABJ81AASfNgAEnzcABJ84AASfOQAEnzsABJ8+AASfPwAEn0AABJ9CAASfQwAEn4IABJ+EAASfhwAEn4kABJ+MAASfjQAEn44ABJ+PAASfkAAEn5IABJ+VAASflgAEn5cABJ+ZAASfmgAEn9kABJ/bAASf3gAEn+AABJ/jAASf5AAEn+UABJ/mAASf5wAEn+kABJ/sAASf7QAEn+4ABJ/wAASf8QAEoDAABKAyAASgNAAEoDYABKA5AASgOgAEoDsABKA8AASgPQAEoD8ABKBCAASgQwAEoEQABKBGAASgRwAEoJIABKC1AASg1QAEoPUABKD3AASg+QAEoPsABKD9AAShAAAEoQEABKECAAShBQAEoQYABKEIAAShCQAEoQsABKEOAAShDwAEoRAABKETAAShFAAEoRkABKEmAAShKwAEoS0ABKEvAAShNAAEoTcABKE6AAShPAAEoWEABKGFAAShrAAEodAABKHTAASh1QAEodcABKHZAASh2wAEod0ABKHeAASh4QAEoe4ABKH/AASiAQAEogMABKIFAASiBwAEogkABKILAASiDQAEog8ABKIgAASiIwAEoiYABKIpAASiLAAEoi8ABKIyAASiNQAEojgABKI6AASieQAEonsABKJ9AASifwAEooIABKKDAASihAAEooUABKKGAASiiAAEoooABKKLAASijAAEoo4ABKKPAASizgAEotAABKLSAASi1AAEotcABKLYAASi2QAEotoABKLbAASi3QAEot8ABKLgAASi4QAEouMABKLkAASjIwAEoyUABKMoAASjKgAEoy0ABKMuAASjLwAEozAABKMxAASjMwAEozUABKM2AASjNwAEozkABKM6AASjRwAEo0gABKNJAASjSwAEo4oABKOMAASjjgAEo5AABKOTAASjlAAEo5UABKOWAASjlwAEo5kABKObAASjnAAEo50ABKOfAASjoAAEo98ABKPhAASj4wAEo+UABKPoAASj6QAEo+oABKPrAASj7AAEo+4ABKPwAASj8QAEo/IABKP0AASj9QAEpDQABKQ2AASkOAAEpDoABKQ9AASkPgAEpD8ABKRAAASkQQAEpEMABKRFAASkRgAEpEcABKRJAASkSgAEpIkABKSLAASkjQAEpI8ABKSSAASkkwAEpJQABKSVAASklgAEpJgABKSaAASkmwAEpJwABKSeAASknwAEpN4ABKTgAASk4gAEpOQABKTnAASk6AAEpOkABKTqAASk6wAEpO0ABKTvAASk8AAEpPEABKTzAASk9AAEpRkABKU9AASlZAAEpYgABKWLAASljQAEpY8ABKWRAASlkwAEpZUABKWWAASlmQAEpaYABKW1AASltwAEpbkABKW7AASlvQAEpb8ABKXBAASlwwAEpdIABKXVAASl2AAEpdsABKXeAASl4QAEpeQABKXnAASl6QAEpigABKYqAASmLAAEpi4ABKYxAASmMgAEpjMABKY0AASmNQAEpjcABKY5AASmOgAEpjsABKY9AASmPgAEpn0ABKZ/AASmgQAEpoMABKaGAASmhwAEpogABKaJAASmigAEpowABKaOAASmjwAEppAABKaSAASmkwAEptIABKbUAASm1gAEptgABKbbAASm3AAEpt0ABKbeAASm3wAEpuEABKbjAASm5AAEpuUABKbnAASm6AAEpycABKcpAASnKwAEpy0ABKcwAASnMQAEpzIABKczAASnNAAEpzYABKc4AASnOQAEpzoABKc8AASnPQAEp3wABKd+AASngAAEp4IABKeFAASnhgAEp4cABKeIAASniQAEp4sABKeNAASnjgAEp48ABKeRAASnkgAEp9EABKfTAASn1QAEp9cABKfaAASn2wAEp9wABKfdAASn3gAEp+AABKfiAASn4wAEp+QABKfmAASn5wAEqCYABKgoAASoKgAEqCwABKgvAASoMAAEqDEABKgyAASoMwAEqDUABKg3AASoOAAEqDkABKg7AASoPAAEqEUABKhGAASoSAAEqIsABKivAASo0wAEqPYABKkdAASpPQAEqWQABKmLAASpqwAEqc8ABKnzAASp9QAEqfgABKn6AASp/AAEqf4ABKoBAASqAwAEqgUABKoHAASqCQAEqgsABKoNAASqEAAEqhMABKoUAASqGQAEqiYABKopAASqKwAEqi4ABKoxAASqMwAEqlgABKp8AASqowAEqscABKrKAASqzAAEqs4ABKrQAASq0gAEqtQABKrVAASq2AAEquUABKr4AASq+gAEqvwABKr+AASrAAAEqwIABKsEAASrBgAEqwgABKsKAASrHQAEqyAABKsjAASrJgAEqykABKssAASrLwAEqzIABKs1AASrOAAEqzoABKt5AASrewAEq34ABKuAAASrgwAEq4QABKuFAASrhgAEq4cABKuJAASriwAEq4wABKuNAASrjwAEq5AABKuZAASrmgAEq5wABKvbAASr3QAEq98ABKvhAASr5AAEq+UABKvmAASr5wAEq+gABKvqAASr7AAEq+0ABKvuAASr8AAEq/EABKwwAASsMgAErDUABKw3AASsOgAErDsABKw8AASsPQAErD4ABKxAAASsQgAErEMABKxEAASsRgAErEcABKxQAASsUQAErFMABKySAASslAAErJYABKyYAASsmwAErJwABKydAASsngAErJ8ABKyhAASsowAErKQABKylAASspwAErKgABKznAASs6QAErOwABKzuAASs8QAErPIABKzzAASs9AAErPUABKz3AASs+QAErPoABKz7AASs/QAErP4ABK0HAAStCAAErQoABK1JAAStSwAErU0ABK1PAAStUgAErVMABK1UAAStVQAErVYABK1YAAStWgAErVsABK1cAAStXgAErV8ABK2eAAStoAAEraMABK2lAAStqAAErakABK2qAAStqwAErawABK2uAAStsAAErbEABK2yAASttAAErbUABK3CAAStwwAErcQABK3GAASuBQAErgcABK4JAASuCwAErg4ABK4PAASuEAAErhEABK4SAASuFAAErhYABK4XAASuGAAErhoABK4bAASuWgAErlwABK5eAASuYAAErmMABK5kAASuZQAErmYABK5nAASuaQAErmsABK5sAASubQAErm8ABK5wAASufQAEroQABK6HAASuiQAErowABK6TAASulgAErpkABK6cAASungAErukABK8MAASvLAAEr0wABK9OAASvUAAEr1IABK9UAASvVwAEr1gABK9ZAASvXAAEr10ABK9fAASvYAAEr2IABK9lAASvZgAEr2cABK9qAASvawAEr3AABK99AASvggAEr4QABK+GAASviwAEr44ABK+RAASvkwAEr7gABK/cAASwAwAEsCcABLAqAASwLAAEsC4ABLAwAASwMgAEsDQABLA1AASwOAAEsEUABLBWAASwWAAEsFoABLBcAASwXgAEsGAABLBiAASwZAAEsGYABLB3AASwegAEsH0ABLCAAASwgwAEsIYABLCJAASwjAAEsI8ABLCRAASw0AAEsNIABLDUAASw1gAEsNkABLDaAASw2wAEsNwABLDdAASw3wAEsOEABLDiAASw4wAEsOUABLDmAASxJQAEsScABLEpAASxKwAEsS4ABLEvAASxMAAEsTEABLEyAASxNAAEsTYABLE3AASxOAAEsToABLE7AASxegAEsXwABLF/AASxgQAEsYQABLGFAASxhgAEsYcABLGIAASxigAEsYwABLGNAASxjgAEsZAABLGRAASxngAEsZ8ABLGgAASxogAEseEABLHjAASx5QAEsecABLHqAASx6wAEsewABLHtAASx7gAEsfAABLHyAASx8wAEsfQABLH2AASx9wAEsjYABLI4AASyOgAEsjwABLI/AASyQAAEskEABLJCAASyQwAEskUABLJHAASySAAEskkABLJLAASyTAAEsosABLKNAASyjwAEspEABLKUAASylQAEspYABLKXAASymAAEspoABLKcAASynQAEsp4ABLKgAASyoQAEsuAABLLiAASy5AAEsuYABLLpAASy6gAEsusABLLsAASy7QAEsu8ABLLxAASy8gAEsvMABLL1AASy9gAEszUABLM3AASzOQAEszsABLM+AASzPwAEs0AABLNBAASzQgAEs0QABLNGAASzRwAEs0gABLNKAASzSwAEs3AABLOUAASzuwAEs98ABLPiAASz5AAEs+YABLPoAASz6gAEs+wABLPtAASz8AAEs/0ABLQMAAS0DgAEtBAABLQSAAS0FAAEtBYABLQYAAS0GgAEtCkABLQsAAS0LwAEtDIABLQ1AAS0OAAEtDsABLQ+AAS0QAAEtH8ABLSBAAS0gwAEtIUABLSIAAS0iQAEtIoABLSLAAS0jAAEtI4ABLSQAAS0kQAEtJIABLSUAAS0lQAEtNQABLTWAAS02AAEtNoABLTdAAS03gAEtN8ABLTgAAS04QAEtOMABLTlAAS05gAEtOcABLTpAAS06gAEtSkABLUrAAS1LQAEtS8ABLUyAAS1MwAEtTQABLU1AAS1NgAEtTgABLU6AAS1OwAEtTwABLU+AAS1PwAEtX4ABLWAAAS1ggAEtYQABLWHAAS1iAAEtYkABLWKAAS1iwAEtY0ABLWPAAS1kAAEtZEABLWTAAS1lAAEtdMABLXVAAS11wAEtdkABLXcAAS13QAEtd4ABLXfAAS14AAEteIABLXkAAS15QAEteYABLXoAAS16QAEtigABLYqAAS2LAAEti4ABLYxAAS2MgAEtjMABLY0AAS2NQAEtjcABLY5AAS2OgAEtjsABLY9AAS2PgAEtn0ABLZ/AAS2gQAEtoMABLaGAAS2hwAEtogABLaJAAS2igAEtowABLaOAAS2jwAEtpAABLaSAAS2kwAEtt4ABLcBAAS3IQAEt0EABLdDAAS3RQAEt0cABLdJAAS3TAAEt00ABLdOAAS3UQAEt1IABLdUAAS3VQAEt1cABLdZAAS3WgAEt1sABLdeAAS3XwAEt2QABLdxAAS3dgAEt3gABLd6AAS3fwAEt4IABLeFAAS3hwAEt6wABLfQAAS39wAEuBsABLgeAAS4IAAEuCIABLgkAAS4JgAEuCgABLgpAAS4LAAEuDkABLhKAAS4TAAEuE4ABLhQAAS4UgAEuFQABLhWAAS4WAAEuFoABLhrAAS4bgAEuHEABLh0AAS4dwAEuHoABLh9AAS4gAAEuIMABLiFAAS4xAAEuMYABLjIAAS4ygAEuM0ABLjOAAS4zwAEuNAABLjRAAS40wAEuNUABLjWAAS41wAEuNkABLjaAAS5GQAEuRsABLkdAAS5HwAEuSIABLkjAAS5JAAEuSUABLkmAAS5KAAEuSoABLkrAAS5LAAEuS4ABLkvAAS5bgAEuXAABLlzAAS5dQAEuXgABLl5AAS5egAEuXsABLl8AAS5fgAEuYAABLmBAAS5ggAEuYQABLmFAAS5kgAEuZMABLmUAAS5lgAEudUABLnXAAS52QAEudsABLneAAS53wAEueAABLnhAAS54gAEueQABLnmAAS55wAEuegABLnqAAS56wAEuioABLosAAS6LgAEujAABLozAAS6NAAEujUABLo2AAS6NwAEujkABLo7AAS6PAAEuj0ABLo/AAS6QAAEun8ABLqBAAS6gwAEuoUABLqIAAS6iQAEuooABLqLAAS6jAAEuo4ABLqQAAS6kQAEupIABLqUAAS6lQAEutQABLrWAAS62AAEutoABLrdAAS63gAEut8ABLrgAAS64QAEuuMABLrlAAS65gAEuucABLrpAAS66gAEuykABLsrAAS7LQAEuy8ABLsyAAS7MwAEuzQABLs1AAS7NgAEuzgABLs6AAS7OwAEuzwABLs+AAS7PwAEu2QABLuIAAS7rwAEu9MABLvWAAS72AAEu9oABLvcAAS73gAEu+AABLvhAAS75AAEu/EABLwAAAS8AgAEvAQABLwGAAS8CAAEvAoABLwMAAS8DgAEvB0ABLwgAAS8IwAEvCYABLwpAAS8LAAEvC8ABLwyAAS8NAAEvHMABLx1AAS8dwAEvHkABLx8AAS8fQAEvH4ABLx/AAS8gAAEvIIABLyEAAS8hQAEvIYABLyIAAS8iQAEvMgABLzKAAS8zAAEvM4ABLzRAAS80gAEvNMABLzUAAS81QAEvNcABLzZAAS82gAEvNsABLzdAAS83gAEvR0ABL0fAAS9IQAEvSMABL0mAAS9JwAEvSgABL0pAAS9KgAEvSwABL0uAAS9LwAEvTAABL0yAAS9MwAEvXIABL10AAS9dgAEvXgABL17AAS9fAAEvX0ABL1+AAS9fwAEvYEABL2DAAS9hAAEvYUABL2HAAS9iAAEvccABL3JAAS9ywAEvc0ABL3QAAS90QAEvdIABL3TAAS91AAEvdYABL3YAAS92QAEvdoABL3cAAS93QAEvhwABL4eAAS+IAAEviIABL4lAAS+JgAEvicABL4oAAS+KQAEvisABL4tAAS+LgAEvi8ABL4xAAS+MgAEvnEABL5zAAS+dQAEvncABL56AAS+ewAEvnwABL59AAS+fgAEvoAABL6CAAS+gwAEvoQABL6GAAS+hwAEvtIABL71AAS/FQAEvzUABL83AAS/OQAEvzsABL89AAS/QAAEv0EABL9CAAS/RQAEv0YABL9IAAS/SQAEv0sABL9OAAS/TwAEv1AABL9TAAS/VAAEv1kABL9mAAS/awAEv20ABL9vAAS/dAAEv3cABL96AAS/fAAEv6EABL/FAAS/7AAEwBAABMATAATAFQAEwBcABMAZAATAGwAEwB0ABMAeAATAIQAEwC4ABMA/AATAQQAEwEMABMBFAATARwAEwEkABMBLAATATQAEwE8ABMBgAATAYwAEwGYABMBpAATAbAAEwG8ABMByAATAdQAEwHgABMB6AATAuQAEwLsABMC9AATAvwAEwMIABMDDAATAxAAEwMUABMDGAATAyAAEwMoABMDLAATAzAAEwM4ABMDPAATBDgAEwRAABMESAATBFAAEwRcABMEYAATBGQAEwRoABMEbAATBHQAEwR8ABMEgAATBIQAEwSMABMEkAATBYwAEwWUABMFoAATBagAEwW0ABMFuAATBbwAEwXAABMFxAATBcwAEwXUABMF2AATBdwAEwXkABMF6AATBhwAEwYgABMGJAATBiwAEwcoABMHMAATBzgAEwdAABMHTAATB1AAEwdUABMHWAATB1wAEwdkABMHbAATB3AAEwd0ABMHfAATB4AAEwh8ABMIhAATCIwAEwiUABMIoAATCKQAEwioABMIrAATCLAAEwi4ABMIwAATCMQAEwjIABMI0AATCNQAEwnQABMJ2AATCeAAEwnoABMJ9AATCfgAEwn8ABMKAAATCgQAEwoMABMKFAATChgAEwocABMKJAATCigAEwskABMLLAATCzQAEws8ABMLSAATC0wAEwtQABMLVAATC1gAEwtgABMLaAATC2wAEwtwABMLeAATC3wAEwx4ABMMgAATDIgAEwyQABMMnAATDKAAEwykABMMqAATDKwAEwy0ABMMvAATDMAAEwzEABMMzAATDNAAEw1kABMN9AATDpAAEw8gABMPLAATDzQAEw88ABMPRAATD0wAEw9UABMPWAATD2QAEw+YABMP1AATD9wAEw/kABMP7AATD/QAEw/8ABMQBAATEAwAExBIABMQVAATEGAAExBsABMQeAATEIQAExCQABMQnAATEKQAExGgABMRqAATEbAAExG4ABMRxAATEcgAExHMABMR0AATEdQAExHcABMR5AATEegAExHsABMR9AATEfgAExL0ABMS/AATEwQAExMMABMTGAATExwAExMgABMTJAATEygAExMwABMTOAATEzwAExNAABMTSAATE0wAExRIABMUUAATFFgAExRgABMUbAATFHAAExR0ABMUeAATFHwAExSEABMUjAATFJAAExSUABMUnAATFKAAExWcABMVpAATFawAExW0ABMVwAATFcQAExXIABMVzAATFdAAExXYABMV4AATFeQAExXoABMV8AATFfQAExbwABMW+AATFwAAExcIABMXFAATFxgAExccABMXIAATFyQAExcsABMXNAATFzgAExc8ABMXRAATF0gAExhEABMYTAATGFQAExhcABMYaAATGGwAExhwABMYdAATGHgAExiAABMYiAATGIwAExiQABMYmAATGJwAExmYABMZoAATGagAExmwABMZvAATGcAAExnEABMZyAATGcwAExnUABMZ3AATGeAAExnkABMZ7AATGfAAExoUABMaGAATGiAAExssABMbvAATHEwAExzYABMddAATHfQAEx6QABMfLAATH6wAEyA8ABMgzAATINQAEyDgABMg6AATIPAAEyD4ABMhBAATIQwAEyEUABMhHAATISQAEyEsABMhNAATIUAAEyFMABMhUAATIWQAEyGYABMhpAATIawAEyG4ABMhxAATIcwAEyJgABMi8AATI4wAEyQcABMkKAATJDAAEyQ4ABMkQAATJEgAEyRQABMkVAATJGAAEySUABMk4AATJOgAEyTwABMk+AATJQAAEyUIABMlEAATJRgAEyUgABMlKAATJXQAEyWAABMljAATJZgAEyWkABMlsAATJbwAEyXIABMl1AATJeAAEyXoABMm5AATJuwAEyb4ABMnAAATJwwAEycQABMnFAATJxgAEyccABMnJAATJywAEycwABMnNAATJzwAEydAABMnZAATJ2gAEydwABMobAATKHQAEyh8ABMohAATKJAAEyiUABMomAATKJwAEyigABMoqAATKLAAEyi0ABMouAATKMAAEyjEABMpwAATKcgAEynUABMp3AATKegAEynsABMp8AATKfQAEyn4ABMqAAATKggAEyoMABMqEAATKhgAEyocABMqQAATKkQAEypMABMrSAATK1AAEytYABMrYAATK2wAEytwABMrdAATK3gAEyt8ABMrhAATK4wAEyuQABMrlAATK5wAEyugABMsnAATLKQAEyywABMsuAATLMQAEyzIABMszAATLNAAEyzUABMs3AATLOQAEyzoABMs7AATLPQAEyz4ABMtHAATLSAAEy0oABMuJAATLiwAEy40ABMuPAATLkgAEy5MABMuUAATLlQAEy5YABMuYAATLmgAEy5sABMucAATLngAEy58ABMveAATL4AAEy+MABMvlAATL6AAEy+kABMvqAATL6wAEy+wABMvuAATL8AAEy/EABMvyAATL9AAEy/UABMwCAATMAwAEzAQABMwGAATMRQAEzEcABMxJAATMSwAEzE4ABMxPAATMUAAEzFEABMxSAATMVAAEzFYABMxXAATMWAAEzFoABMxbAATMmgAEzJwABMyfAATMoQAEzKQABMylAATMpgAEzKcABMyoAATMqgAEzKwABMytAATMrgAEzLAABMyxAATMvwAEzMwABMzXAATM2gAEzN0ABMzgAATM4wAEzOYABMzxAATM9AAEzPcABMz6AATM/QAEzQAABM0CAATNDgAEzRwABM0mAATNLwAEzXoABM2dAATNvQAEzd0ABM3fAATN4QAEzeMABM3lAATN6AAEzekABM3qAATN7QAEze4ABM3wAATN8QAEzfMABM32AATN9wAEzfgABM37AATN/AAEzgEABM4OAATOEwAEzhUABM4XAATOHAAEzh8ABM4iAATOJAAEzkkABM5tAATOlAAEzrgABM67AATOvQAEzr8ABM7BAATOwwAEzsUABM7GAATOyQAEztYABM7nAATO6QAEzusABM7tAATO7wAEzvEABM7zAATO9QAEzvcABM8IAATPCwAEzw4ABM8RAATPFAAEzxcABM8aAATPHQAEzyAABM8iAATPYQAEz2MABM9lAATPZwAEz2oABM9rAATPbAAEz20ABM9uAATPcAAEz3IABM9zAATPdAAEz3YABM93AATPtgAEz7gABM+6AATPvAAEz78ABM/AAATPwQAEz8IABM/DAATPxQAEz8cABM/IAATPyQAEz8sABM/MAATQCwAE0A0ABNAQAATQEgAE0BUABNAWAATQFwAE0BgABNAZAATQGwAE0B0ABNAeAATQHwAE0CEABNAiAATQLwAE0DAABNAxAATQMwAE0HIABNB0AATQdgAE0HgABNB7AATQfAAE0H0ABNB+AATQfwAE0IEABNCDAATQhAAE0IUABNCHAATQiAAE0McABNDJAATQywAE0M0ABNDQAATQ0QAE0NIABNDTAATQ1AAE0NYABNDYAATQ2QAE0NoABNDcAATQ3QAE0RwABNEeAATRIAAE0SIABNElAATRJgAE0ScABNEoAATRKQAE0SsABNEtAATRLgAE0S8ABNExAATRMgAE0XEABNFzAATRdQAE0XcABNF6AATRewAE0XwABNF9AATRfgAE0YAABNGCAATRgwAE0YQABNGGAATRhwAE0cYABNHIAATRygAE0cwABNHPAATR0AAE0dEABNHSAATR0wAE0dUABNHXAATR2AAE0dkABNHbAATR3AAE0gEABNIlAATSTAAE0nAABNJzAATSdQAE0ncABNJ5AATSewAE0n0ABNJ+AATSgQAE0o4ABNKdAATSnwAE0qEABNKjAATSpQAE0qcABNKpAATSqwAE0roABNK9AATSwAAE0sMABNLGAATSyQAE0swABNLPAATS0QAE0xAABNMSAATTFAAE0xYABNMZAATTGgAE0xsABNMcAATTHQAE0x8ABNMhAATTIgAE0yMABNMlAATTJgAE02UABNNnAATTaQAE02sABNNuAATTbwAE03AABNNxAATTcgAE03QABNN2AATTdwAE03gABNN6AATTewAE07oABNO8AATTvgAE08AABNPDAATTxAAE08UABNPGAATTxwAE08kABNPLAATTzAAE080ABNPPAATT0AAE1A8ABNQRAATUEwAE1BUABNQYAATUGQAE1BoABNQbAATUHAAE1B4ABNQgAATUIQAE1CIABNQkAATUJQAE1GQABNRmAATUaAAE1GoABNRtAATUbgAE1G8ABNRwAATUcQAE1HMABNR1AATUdgAE1HcABNR5AATUegAE1LkABNS7AATUvQAE1L8ABNTCAATUwwAE1MQABNTFAATUxgAE1MgABNTKAATUywAE1MwABNTOAATUzwAE1Q4ABNUQAATVEgAE1RQABNUXAATVGAAE1RkABNUaAATVGwAE1R0ABNUfAATVIAAE1SEABNUjAATVJAAE1W8ABNWSAATVsgAE1dIABNXUAATV1gAE1dgABNXaAATV3QAE1d4ABNXfAATV4gAE1eMABNXlAATV5gAE1egABNXrAATV7AAE1e0ABNXwAATV8QAE1fYABNYDAATWCAAE1goABNYMAATWEQAE1hQABNYXAATWGQAE1j4ABNZiAATWiQAE1q0ABNawAATWsgAE1rQABNa2AATWuAAE1roABNa7AATWvgAE1ssABNbcAATW3gAE1uAABNbiAATW5AAE1uYABNboAATW6gAE1uwABNb9AATXAAAE1wMABNcGAATXCQAE1wwABNcPAATXEgAE1xUABNcXAATXVgAE11gABNdaAATXXAAE118ABNdgAATXYQAE12IABNdjAATXZQAE12cABNdoAATXaQAE12sABNdsAATXqwAE160ABNevAATXsQAE17QABNe1AATXtgAE17cABNe4AATXugAE17wABNe9AATXvgAE18AABNfBAATYAAAE2AIABNgFAATYBwAE2AoABNgLAATYDAAE2A0ABNgOAATYEAAE2BIABNgTAATYFAAE2BYABNgXAATYJAAE2CUABNgmAATYKAAE2GcABNhpAATYawAE2G0ABNhwAATYcQAE2HIABNhzAATYdAAE2HYABNh4AATYeQAE2HoABNh8AATYfQAE2LwABNi+AATYwAAE2MIABNjFAATYxgAE2McABNjIAATYyQAE2MsABNjNAATYzgAE2M8ABNjRAATY0gAE2REABNkTAATZFQAE2RcABNkaAATZGwAE2RwABNkdAATZHgAE2SAABNkiAATZIwAE2SQABNkmAATZJwAE2WYABNloAATZagAE2WwABNlvAATZcAAE2XEABNlyAATZcwAE2XUABNl3AATZeAAE2XkABNl7AATZfAAE2bsABNm9AATZvwAE2cEABNnEAATZxQAE2cYABNnHAATZyAAE2coABNnMAATZzQAE2c4ABNnQAATZ0QAE2fYABNoaAATaQQAE2mUABNpoAATaagAE2mwABNpuAATacAAE2nIABNpzAATadgAE2oMABNqSAATalAAE2pYABNqYAATamgAE2pwABNqeAATaoAAE2q8ABNqyAATatQAE2rgABNq7AATavgAE2sEABNrEAATaxgAE2wUABNsHAATbCQAE2wsABNsOAATbDwAE2xAABNsRAATbEgAE2xQABNsWAATbFwAE2xgABNsaAATbGwAE21oABNtcAATbXgAE22AABNtjAATbZAAE22UABNtmAATbZwAE22kABNtrAATbbAAE220ABNtvAATbcAAE268ABNuxAATbswAE27UABNu4AATbuQAE27oABNu7AATbvAAE274ABNvAAATbwQAE28IABNvEAATbxQAE3AQABNwGAATcCAAE3AoABNwNAATcDgAE3A8ABNwQAATcEQAE3BMABNwVAATcFgAE3BcABNwZAATcGgAE3FkABNxbAATcXQAE3F8ABNxiAATcYwAE3GQABNxlAATcZgAE3GgABNxqAATcawAE3GwABNxuAATcbwAE3K4ABNywAATcsgAE3LQABNy3AATcuAAE3LkABNy6AATcuwAE3L0ABNy/AATcwAAE3MEABNzDAATcxAAE3QMABN0FAATdBwAE3QkABN0MAATdDQAE3Q4ABN0PAATdEAAE3RIABN0UAATdFQAE3RYABN0YAATdGQAE3WQABN2HAATdpwAE3ccABN3JAATdywAE3c0ABN3PAATd0gAE3dMABN3UAATd1wAE3dgABN3aAATd2wAE3d0ABN3gAATd4QAE3eIABN3lAATd5gAE3esABN34AATd/QAE3f8ABN4BAATeBgAE3gkABN4MAATeDgAE3jMABN5XAATefgAE3qIABN6lAATepwAE3qkABN6rAATerQAE3q8ABN6wAATeswAE3sAABN7RAATe0wAE3tUABN7XAATe2QAE3tsABN7dAATe3wAE3uEABN7yAATe9QAE3vgABN77AATe/gAE3wEABN8EAATfBwAE3woABN8MAATfSwAE300ABN9PAATfUQAE31QABN9VAATfVgAE31cABN9YAATfWgAE31wABN9dAATfXgAE32AABN9hAATfoAAE36IABN+kAATfpgAE36kABN+qAATfqwAE36wABN+tAATfrwAE37EABN+yAATfswAE37UABN+2AATf9QAE3/cABN/6AATf/AAE3/8ABOAAAATgAQAE4AIABOADAATgBQAE4AcABOAIAATgCQAE4AsABOAMAATgGQAE4BoABOAbAATgHQAE4FwABOBeAATgYAAE4GIABOBlAATgZgAE4GcABOBoAATgaQAE4GsABOBtAATgbgAE4G8ABOBxAATgcgAE4LEABOCzAATgtQAE4LcABOC6AATguwAE4LwABOC9AATgvgAE4MAABODCAATgwwAE4MQABODGAATgxwAE4QYABOEIAAThCgAE4QwABOEPAAThEAAE4REABOESAAThEwAE4RUABOEXAAThGAAE4RkABOEbAAThHAAE4VsABOFdAAThXwAE4WEABOFkAAThZQAE4WYABOFnAAThaAAE4WoABOFsAAThbQAE4W4ABOFwAAThcQAE4bAABOGyAAThtAAE4bYABOG5AAThugAE4bsABOG8AAThvQAE4b8ABOHBAAThwgAE4cMABOHFAAThxgAE4esABOIPAATiNgAE4loABOJdAATiXwAE4mEABOJjAATiZQAE4mcABOJoAATiawAE4ngABOKHAATiiQAE4osABOKNAATijwAE4pEABOKTAATilQAE4qQABOKnAATiqgAE4q0ABOKwAATiswAE4rYABOK5AATiuwAE4voABOL8AATi/wAE4wEABOMEAATjBQAE4wYABOMHAATjCAAE4woABOMMAATjDQAE4w4ABOMQAATjEQAE41AABONSAATjVAAE41YABONZAATjWgAE41sABONcAATjXQAE418ABONhAATjYgAE42MABONlAATjZgAE46UABOOnAATjqQAE46sABOOuAATjrwAE47AABOOxAATjsgAE47QABOO2AATjtwAE47gABOO6AATjuwAE4/oABOP8AATj/wAE5AEABOQEAATkBQAE5AYABOQHAATkCAAE5AoABOQMAATkDQAE5A4ABOQQAATkEQAE5FAABORSAATkVAAE5FYABORZAATkWgAE5FsABORcAATkXQAE5F8ABORhAATkYgAE5GMABORlAATkZgAE5KUABOSnAATkqQAE5KsABOSuAATkrwAE5LAABOSxAATksgAE5LQABOS2AATktwAE5LgABOS6AATkuwAE5PoABOT8AATk/gAE5QAABOUDAATlBAAE5QUABOUGAATlBwAE5QkABOULAATlDAAE5Q0ABOUPAATlEAAE5VsABOV+AATlngAE5b4ABOXAAATlwgAE5cQABOXGAATlyQAE5coABOXLAATlzgAE5c8ABOXRAATl0gAE5dQABOXXAATl2AAE5dkABOXcAATl3QAE5eIABOXvAATl9AAE5fYABOX4AATl/QAE5gAABOYDAATmBQAE5ioABOZOAATmdQAE5pkABOacAATmngAE5qAABOaiAATmpAAE5qYABOanAATmqgAE5rcABObIAATmygAE5swABObOAATm0AAE5tIABObUAATm1gAE5tgABObpAATm7AAE5u8ABObyAATm9QAE5vgABOb7AATm/gAE5wEABOcDAATnQgAE50QABOdGAATnSAAE50sABOdMAATnTQAE504ABOdPAATnUQAE51MABOdUAATnVQAE51cABOdYAATnlwAE55kABOebAATnnQAE56AABOehAATnogAE56MABOekAATnpgAE56gABOepAATnqgAE56wABOetAATn7AAE5+4ABOfxAATn8wAE5/YABOf3AATn+AAE5/kABOf6AATn/AAE5/4ABOf/AAToAAAE6AIABOgDAAToEAAE6BEABOgSAAToFAAE6FMABOhVAAToVwAE6FkABOhcAAToXQAE6F4ABOhfAAToYAAE6GIABOhkAAToZQAE6GYABOhoAAToaQAE6KgABOiqAATorAAE6K4ABOixAATosgAE6LMABOi0AATotQAE6LcABOi5AATougAE6LsABOi9AATovgAE6P0ABOj/AATpAQAE6QMABOkGAATpBwAE6QgABOkJAATpCgAE6QwABOkOAATpDwAE6RAABOkSAATpEwAE6VIABOlUAATpVgAE6VgABOlbAATpXAAE6V0ABOleAATpXwAE6WEABOljAATpZAAE6WUABOlnAATpaAAE6acABOmpAATpqwAE6a0ABOmwAATpsQAE6bIABOmzAATptAAE6bYABOm4AATpuQAE6boABOm8AATpvQAE6eIABOoGAATqLQAE6lEABOpUAATqVgAE6lgABOpaAATqXAAE6l4ABOpfAATqYgAE6m8ABOp+AATqgAAE6oIABOqEAATqhgAE6ogABOqKAATqjAAE6psABOqeAATqoQAE6qQABOqnAATqqgAE6q0ABOqwAATqsgAE6vEABOrzAATq9QAE6vcABOr6AATq+wAE6vwABOr9AATq/gAE6wAABOsCAATrAwAE6wQABOsGAATrBwAE60YABOtIAATrSgAE60wABOtPAATrUAAE61EABOtSAATrUwAE61UABOtXAATrWAAE61kABOtbAATrXAAE65sABOudAATrnwAE66EABOukAATrpQAE66YABOunAATrqAAE66oABOusAATrrQAE664ABOuwAATrsQAE6/AABOvyAATr9AAE6/YABOv5AATr+gAE6/sABOv8AATr/QAE6/8ABOwBAATsAgAE7AMABOwFAATsBgAE7EUABOxHAATsSQAE7EsABOxOAATsTwAE7FAABOxRAATsUgAE7FQABOxWAATsVwAE7FgABOxaAATsWwAE7JoABOycAATsngAE7KAABOyjAATspAAE7KUABOymAATspwAE7KkABOyrAATsrAAE7K0ABOyvAATssAAE7O8ABOzxAATs8wAE7PUABOz4AATs+QAE7PoABOz7AATs/AAE7P4ABO0AAATtAQAE7QIABO0EAATtBQAE7VAABO1zAATtkwAE7bMABO21AATttwAE7bkABO27AATtvgAE7b8ABO3AAATtwwAE7cQABO3GAATtxwAE7ckABO3MAATtzQAE7c4ABO3RAATt0gAE7dcABO3kAATt6QAE7esABO3tAATt8gAE7fUABO34AATt+gAE7h8ABO5DAATuagAE7o4ABO6RAATukwAE7pUABO6XAATumQAE7psABO6cAATunwAE7qwABO69AATuvwAE7sEABO7DAATuxQAE7scABO7JAATuywAE7s0ABO7eAATu4QAE7uQABO7nAATu6gAE7u0ABO7wAATu8wAE7vYABO74AATvNwAE7zkABO87AATvPQAE70AABO9BAATvQgAE70MABO9EAATvRgAE70gABO9JAATvSgAE70wABO9NAATvjAAE744ABO+QAATvkgAE75UABO+WAATvlwAE75gABO+ZAATvmwAE750ABO+eAATvnwAE76EABO+iAATv4QAE7+MABO/mAATv6AAE7+sABO/sAATv7QAE7+4ABO/vAATv8QAE7/MABO/0AATv9QAE7/cABO/4AATwBQAE8AYABPAHAATwCQAE8EgABPBKAATwTAAE8E4ABPBRAATwUgAE8FMABPBUAATwVQAE8FcABPBZAATwWgAE8FsABPBdAATwXgAE8J0ABPCfAATwoQAE8KMABPCmAATwpwAE8KgABPCpAATwqgAE8KwABPCuAATwrwAE8LAABPCyAATwswAE8PIABPD0AATw9gAE8PgABPD7AATw/AAE8P0ABPD+AATw/wAE8QEABPEDAATxBAAE8QUABPEHAATxCAAE8UcABPFJAATxSwAE8U0ABPFQAATxUQAE8VIABPFTAATxVAAE8VYABPFYAATxWQAE8VoABPFcAATxXQAE8ZwABPGeAATxoAAE8aIABPGlAATxpgAE8acABPGoAATxqQAE8asABPGtAATxrgAE8a8ABPGxAATxsgAE8dcABPH7AATyIgAE8kYABPJJAATySwAE8k0ABPJPAATyUQAE8lMABPJUAATyVwAE8mQABPJzAATydQAE8ncABPJ5AATyewAE8n0ABPJ/AATygQAE8pAABPKTAATylgAE8pkABPKcAATynwAE8qIABPKlAATypwAE8uYABPLoAATy6gAE8uwABPLvAATy8AAE8vEABPLyAATy8wAE8vUABPL3AATy+AAE8vkABPL7AATy/AAE8zsABPM9AATzPwAE80EABPNEAATzRQAE80YABPNHAATzSAAE80oABPNMAATzTQAE804ABPNQAATzUQAE85AABPOSAATzlAAE85YABPOZAATzmgAE85sABPOcAATznQAE858ABPOhAATzogAE86MABPOlAATzpgAE8+UABPPnAATz6QAE8+sABPPuAATz7wAE8/AABPPxAATz8gAE8/QABPP2AATz9wAE8/gABPP6AATz+wAE9DoABPQ8AAT0PgAE9EAABPRDAAT0RAAE9EUABPRGAAT0RwAE9EkABPRLAAT0TAAE9E0ABPRPAAT0UAAE9I8ABPSRAAT0kwAE9JUABPSYAAT0mQAE9JoABPSbAAT0nAAE9J4ABPSgAAT0oQAE9KIABPSkAAT0pQAE9OQABPTmAAT06AAE9OoABPTtAAT07gAE9O8ABPTwAAT08QAE9PMABPT1AAT09gAE9PcABPT5AAT0+gAE9QMABPUEAAT1BgAE9UkABPVtAAT1kQAE9bQABPXbAAT1+wAE9iIABPZJAAT2aQAE9o0ABPaxAAT2swAE9rYABPa4AAT2ugAE9rwABPa/AAT2wQAE9sMABPbFAAT2xwAE9skABPbLAAT2zgAE9tEABPbSAAT21wAE9uQABPbnAAT26QAE9uwABPbvAAT28QAE9xYABPc6AAT3YQAE94UABPeIAAT3igAE94wABPeOAAT3kAAE95IABPeTAAT3lgAE96MABPe2AAT3uAAE97oABPe8AAT3vgAE98AABPfCAAT3xAAE98YABPfIAAT32wAE994ABPfhAAT35AAE9+cABPfqAAT37QAE9/AABPfzAAT39gAE9/gABPg3AAT4OQAE+DwABPg+AAT4QQAE+EIABPhDAAT4RAAE+EUABPhHAAT4SQAE+EoABPhLAAT4TQAE+E4ABPhXAAT4WAAE+FoABPiZAAT4mwAE+J0ABPifAAT4ogAE+KMABPikAAT4pQAE+KYABPioAAT4qgAE+KsABPisAAT4rgAE+K8ABPjuAAT48AAE+PMABPj1AAT4+AAE+PkABPj6AAT4+wAE+PwABPj+AAT5AAAE+QEABPkCAAT5BAAE+QUABPkOAAT5DwAE+REABPlQAAT5UgAE+VQABPlWAAT5WQAE+VoABPlbAAT5XAAE+V0ABPlfAAT5YQAE+WIABPljAAT5ZQAE+WYABPmlAAT5pwAE+aoABPmsAAT5rwAE+bAABPmxAAT5sgAE+bMABPm1AAT5twAE+bgABPm5AAT5uwAE+bwABPnFAAT5xgAE+cgABPoHAAT6CQAE+gsABPoNAAT6EAAE+hEABPoSAAT6EwAE+hQABPoWAAT6GAAE+hkABPoaAAT6HAAE+h0ABPpcAAT6XgAE+mEABPpjAAT6ZgAE+mcABPpoAAT6aQAE+moABPpsAAT6bgAE+m8ABPpwAAT6cgAE+nMABPqAAAT6gQAE+oIABPqEAAT6wwAE+sUABPrHAAT6yQAE+swABPrNAAT6zgAE+s8ABPrQAAT60gAE+tQABPrVAAT61gAE+tgABPrZAAT7GAAE+xoABPsdAAT7HwAE+yIABPsjAAT7JAAE+yUABPsmAAT7KAAE+yoABPsrAAT7LAAE+y4ABPsvAAT7PgAE+0sABPtSAAT7VQAE+1gABPtbAAT7YgAE+2UABPtoAAT7awAE+20ABPt0AAT7vwAE++IABPwCAAT8IgAE/CQABPwmAAT8KAAE/CoABPwtAAT8LgAE/C8ABPwyAAT8MwAE/DUABPw2AAT8OAAE/DsABPw8AAT8PQAE/EAABPxBAAT8RgAE/FMABPxYAAT8WgAE/FwABPxhAAT8ZAAE/GcABPxpAAT8jgAE/LIABPzZAAT8/QAE/QAABP0CAAT9BAAE/QYABP0IAAT9CgAE/QsABP0OAAT9GwAE/SwABP0uAAT9MAAE/TIABP00AAT9NgAE/TgABP06AAT9PAAE/U0ABP1QAAT9UwAE/VYABP1ZAAT9XAAE/V8ABP1iAAT9ZQAE/WcABP2mAAT9qAAE/aoABP2sAAT9rwAE/bAABP2xAAT9sgAE/bMABP21AAT9twAE/bgABP25AAT9uwAE/bwABP37AAT9/QAE/f8ABP4BAAT+BAAE/gUABP4GAAT+BwAE/ggABP4KAAT+DAAE/g0ABP4OAAT+EAAE/hEABP5QAAT+UgAE/lUABP5XAAT+WgAE/lsABP5cAAT+XQAE/l4ABP5gAAT+YgAE/mMABP5kAAT+ZgAE/mcABP50AAT+dQAE/nYABP54AAT+twAE/rkABP67AAT+vQAE/sAABP7BAAT+wgAE/sMABP7EAAT+xgAE/sgABP7JAAT+ygAE/swABP7NAAT/DAAE/w4ABP8QAAT/EgAE/xUABP8WAAT/FwAE/xgABP8ZAAT/GwAE/x0ABP8eAAT/HwAE/yEABP8iAAT/YQAE/2MABP9lAAT/ZwAE/2oABP9rAAT/bAAE/20ABP9uAAT/cAAE/3IABP9zAAT/dAAE/3YABP93AAT/tgAE/7gABP+6AAT/vAAE/78ABP/AAAT/wQAE/8IABP/DAAT/xQAE/8cABP/IAAT/yQAE/8sABP/MAAUACwAFAA0ABQAPAAUAEQAFABQABQAVAAUAFgAFABcABQAYAAUAGgAFABwABQAdAAUAHgAFACAABQAhAAUARgAFAGoABQCRAAUAtQAFALgABQC6AAUAvAAFAL4ABQDAAAUAwgAFAMMABQDGAAUA0wAFAOIABQDkAAUA5gAFAOgABQDqAAUA7AAFAO4ABQDwAAUA/wAFAQIABQEFAAUBCAAFAQsABQEOAAUBEQAFARQABQEWAAUBVQAFAVcABQFZAAUBWwAFAV4ABQFfAAUBYAAFAWEABQFiAAUBZAAFAWYABQFnAAUBaAAFAWoABQFrAAUBqgAFAawABQGuAAUBsAAFAbMABQG0AAUBtQAFAbYABQG3AAUBuQAFAbsABQG8AAUBvQAFAb8ABQHAAAUB/wAFAgEABQIDAAUCBQAFAggABQIJAAUCCgAFAgsABQIMAAUCDgAFAhAABQIRAAUCEgAFAhQABQIVAAUCVAAFAlYABQJYAAUCWgAFAl0ABQJeAAUCXwAFAmAABQJhAAUCYwAFAmUABQJmAAUCZwAFAmkABQJqAAUCqQAFAqsABQKtAAUCrwAFArIABQKzAAUCtAAFArUABQK2AAUCuAAFAroABQK7AAUCvAAFAr4ABQK/AAUC/gAFAwAABQMCAAUDBAAFAwcABQMIAAUDCQAFAwoABQMLAAUDDQAFAw8ABQMQAAUDEQAFAxMABQMUAAUDUwAFA1UABQNXAAUDWQAFA1wABQNdAAUDXgAFA18ABQNgAAUDYgAFA2QABQNlAAUDZgAFA2gABQNpAAUDtAAFA9cABQP3AAUEFwAFBBkABQQbAAUEHQAFBB8ABQQiAAUEIwAFBCQABQQnAAUEKAAFBCoABQQrAAUELQAFBDAABQQxAAUEMgAFBDUABQQ2AAUEPwAFBEwABQRRAAUEUwAFBFUABQRaAAUEXQAFBGAABQRiAAUEhwAFBKsABQTSAAUE9gAFBPkABQT7AAUE/QAFBP8ABQUBAAUFAwAFBQQABQUHAAUFFAAFBSUABQUnAAUFKQAFBSsABQUtAAUFLwAFBTEABQUzAAUFNQAFBUYABQVJAAUFTAAFBU8ABQVSAAUFVQAFBVgABQVbAAUFXgAFBWAABQWfAAUFoQAFBaMABQWlAAUFqAAFBakABQWqAAUFqwAFBawABQWuAAUFsAAFBbEABQWyAAUFtAAFBbUABQX0AAUF9gAFBfgABQX6AAUF/QAFBf4ABQX/AAUGAAAFBgEABQYDAAUGBQAFBgYABQYHAAUGCQAFBgoABQZJAAUGSwAFBk4ABQZQAAUGUwAFBlQABQZVAAUGVgAFBlcABQZZAAUGWwAFBlwABQZdAAUGXwAFBmAABQZtAAUGbgAFBm8ABQZxAAUGsAAFBrIABQa0AAUGtgAFBrkABQa6AAUGuwAFBrwABQa9AAUGvwAFBsEABQbCAAUGwwAFBsUABQbGAAUHBQAFBwcABQcJAAUHCwAFBw4ABQcPAAUHEAAFBxEABQcSAAUHFAAFBxYABQcXAAUHGAAFBxoABQcbAAUHWgAFB1wABQdeAAUHYAAFB2MABQdkAAUHZQAFB2YABQdnAAUHaQAFB2sABQdsAAUHbQAFB28ABQdwAAUHrwAFB7EABQezAAUHtQAFB7gABQe5AAUHugAFB7sABQe8AAUHvgAFB8AABQfBAAUHwgAFB8QABQfFAAUIBAAFCAYABQgIAAUICgAFCA0ABQgOAAUIDwAFCBAABQgRAAUIEwAFCBUABQgWAAUIFwAFCBkABQgaAAUIPwAFCGMABQiKAAUIrgAFCLEABQizAAUItQAFCLcABQi5AAUIuwAFCLwABQi/AAUIzAAFCNsABQjdAAUI3wAFCOEABQjjAAUI5QAFCOcABQjpAAUI+AAFCPsABQj+AAUJAQAFCQQABQkHAAUJCgAFCQ0ABQkPAAUJTgAFCVAABQlSAAUJVAAFCVcABQlYAAUJWQAFCVoABQlbAAUJXQAFCV8ABQlgAAUJYQAFCWMABQlkAAUJowAFCaUABQmnAAUJqQAFCawABQmtAAUJrgAFCa8ABQmwAAUJsgAFCbQABQm1AAUJtgAFCbgABQm5AAUJ+AAFCfoABQn8AAUJ/gAFCgEABQoCAAUKAwAFCgQABQoFAAUKBwAFCgkABQoKAAUKCwAFCg0ABQoOAAUKTQAFCk8ABQpRAAUKUwAFClYABQpXAAUKWAAFClkABQpaAAUKXAAFCl4ABQpfAAUKYAAFCmIABQpjAAUKogAFCqQABQqmAAUKqAAFCqsABQqsAAUKrQAFCq4ABQqvAAUKsQAFCrMABQq0AAUKtQAFCrcABQq4AAUK9wAFCvkABQr7AAUK/QAFCwAABQsBAAULAgAFCwMABQsEAAULBgAFCwgABQsJAAULCgAFCwwABQsNAAULTAAFC04ABQtQAAULUgAFC1UABQtWAAULVwAFC1gABQtZAAULWwAFC10ABQteAAULXwAFC2EABQtiAAULrQAFC9AABQvwAAUMEAAFDBIABQwUAAUMFgAFDBgABQwbAAUMHAAFDB0ABQwgAAUMIQAFDCMABQwkAAUMJgAFDCkABQwqAAUMKwAFDC4ABQwvAAUMNAAFDEEABQxGAAUMSAAFDEoABQxPAAUMUgAFDFUABQxXAAUMfAAFDKAABQzHAAUM6wAFDO4ABQzwAAUM8gAFDPQABQz2AAUM+AAFDPkABQz8AAUNCQAFDRoABQ0cAAUNHgAFDSAABQ0iAAUNJAAFDSYABQ0oAAUNKgAFDTsABQ0+AAUNQQAFDUQABQ1HAAUNSgAFDU0ABQ1QAAUNUwAFDVUABQ2UAAUNlgAFDZgABQ2aAAUNnQAFDZ4ABQ2fAAUNoAAFDaEABQ2jAAUNpQAFDaYABQ2nAAUNqQAFDaoABQ3pAAUN6wAFDe0ABQ3vAAUN8gAFDfMABQ30AAUN9QAFDfYABQ34AAUN+gAFDfsABQ38AAUN/gAFDf8ABQ4+AAUOQAAFDkMABQ5FAAUOSAAFDkkABQ5KAAUOSwAFDkwABQ5OAAUOUAAFDlEABQ5SAAUOVAAFDlUABQ5iAAUOYwAFDmQABQ5mAAUOpQAFDqcABQ6pAAUOqwAFDq4ABQ6vAAUOsAAFDrEABQ6yAAUOtAAFDrYABQ63AAUOuAAFDroABQ67AAUO+gAFDvwABQ7+AAUPAAAFDwMABQ8EAAUPBQAFDwYABQ8HAAUPCQAFDwsABQ8MAAUPDQAFDw8ABQ8QAAUPTwAFD1EABQ9TAAUPVQAFD1gABQ9ZAAUPWgAFD1sABQ9cAAUPXgAFD2AABQ9hAAUPYgAFD2QABQ9lAAUPpAAFD6YABQ+oAAUPqgAFD60ABQ+uAAUPrwAFD7AABQ+xAAUPswAFD7UABQ+2AAUPtwAFD7kABQ+6AAUP+QAFD/sABQ/9AAUP/wAFEAIABRADAAUQBAAFEAUABRAGAAUQCAAFEAoABRALAAUQDAAFEA4ABRAPAAUQNAAFEFgABRB/AAUQowAFEKYABRCoAAUQqgAFEKwABRCuAAUQsAAFELEABRC0AAUQwQAFENAABRDSAAUQ1AAFENYABRDYAAUQ2gAFENwABRDeAAUQ7QAFEPAABRDzAAUQ9gAFEPkABRD8AAUQ/wAFEQIABREEAAURQwAFEUUABRFHAAURSQAFEUwABRFNAAURTgAFEU8ABRFQAAURUgAFEVQABRFVAAURVgAFEVgABRFZAAURmAAFEZoABRGcAAURngAFEaEABRGiAAURowAFEaQABRGlAAURpwAFEakABRGqAAURqwAFEa0ABRGuAAUR7QAFEe8ABRHxAAUR8wAFEfYABRH3AAUR+AAFEfkABRH6AAUR/AAFEf4ABRH/AAUSAAAFEgIABRIDAAUSQgAFEkQABRJGAAUSSAAFEksABRJMAAUSTQAFEk4ABRJPAAUSUQAFElMABRJUAAUSVQAFElcABRJYAAUSlwAFEpkABRKbAAUSnQAFEqAABRKhAAUSogAFEqMABRKkAAUSpgAFEqgABRKpAAUSqgAFEqwABRKtAAUS7AAFEu4ABRLwAAUS8gAFEvUABRL2AAUS9wAFEvgABRL5AAUS+wAFEv0ABRL+AAUS/wAFEwEABRMCAAUTQQAFE0MABRNFAAUTRwAFE0oABRNLAAUTTAAFE00ABRNOAAUTUAAFE1IABRNTAAUTVAAFE1YABRNXAAUTYAAFE2EABRNjAAUTcAAFE3EABRNyAAUTdAAFE4EABROCAAUTgwAFE4UABROSAAUTkwAFE5QABROWAAUTnwAFE64ABRO7AAUTygAFE9wABRPwAAUUBwAFFBkABRQiAAUUIwAFFCUABRQyAAUUMwAFFDQABRQ2AAUUPwAFFEkABRRQAAAAAAAABAIAAAAAAADEKgAAAAAAAAAAAAAAAAAFFFg= - - - - - symbol - - - - CDExternalApi - Undefined - 15 - CDExternalApi - 1 - - - - - - CDChainXcmConfig - Undefined - 2 - CDChainXcmConfig - 1 - - - - - - CDRuntimeMetadataItem - Undefined - 11 - CDRuntimeMetadataItem - 1 - - - - - - CDChainNode - Undefined - 19 - CDChainNode - 1 - - - - - - CDChainStorageItem - Undefined - 7 - CDChainStorageItem - 1 - - - - - - chainId - - - - disabled - - - - historyApiUrl - - - - isOrml - - - - name - - - - pricingApiType - - - - stakingApiUrl - - - - 1 - assets - - - - precision - - - - blockNumber - - - - identifier - - - - status - - - - chains - - - - name - - - - identifier - - - - price - - - - id - - - - peerAddress - - - - name - - - - url - - - - staking - - - - color - - - - apiQueryName - - - - purchaseProviders - - - - version - - - - 1 - availableDexIds - - - - isNative - - - - identifier - - - - name - - - - 1 - config - - - - identifier - - - - type - - - - address - - - - updatedAt - - - - fearless.ChainSubstrateV8MigrationPolicy - CDChain - Undefined - 1 - CDChain - 1 - - - - - - CDContactItem - Undefined - 10 - CDContactItem - 1 - - - - - - CDPolkaswapDex - Undefined - 18 - CDPolkaswapDex - 1 - - - - - - CDTransactionHistoryItem - Undefined - 5 - CDTransactionHistoryItem - 1 - - - - - - CDPhishingItem - Undefined - 14 - CDPhishingItem - 1 - - - - - - addressPrefix - - - - 1 - assets - - - \ No newline at end of file diff --git a/fearless/Common/Storage/MigrationMappings/SubstrateV8.xcmappingmodel/xcmapping.xml b/fearless/Common/Storage/MigrationMappings/SubstrateV8.xcmappingmodel/xcmapping.xml new file mode 100644 index 0000000000..af7f629bcf --- /dev/null +++ b/fearless/Common/Storage/MigrationMappings/SubstrateV8.xcmappingmodel/xcmapping.xml @@ -0,0 +1,853 @@ + + + + + + 134481920 + 3B8F7B38-9024-4E61-A927-14E19A7D73D4 + 264 + + + + NSPersistenceFrameworkVersion + 1414 + NSStoreModelVersionChecksumKey + bMpud663vz0bXQE24C6Rh4MvJ5jVnzsD2sI3njZkKbc= + NSStoreModelVersionHashes + + XDDevAttributeMapping + + 0plcXXRN7XHKl5CcF+fwriFmUpON3ZtcI/AfK748aWc= + + XDDevEntityMapping + + qeN1Ym3TkWN1G6dU9RfX6Kd2ccEvcDVWHpd3LpLgboI= + + XDDevMappingModel + + EqtMzvRnVZWkXwBHu4VeVGy8UyoOe+bi67KC79kphlQ= + + XDDevPropertyMapping + + XN33V44TTGY4JETlMoOB5yyTKxB+u4slvDIinv0rtGA= + + XDDevRelationshipMapping + + akYY9LhehVA/mCb4ATLWuI9XGLcjpm14wWL1oEBtIcs= + + + NSStoreModelVersionHashesDigest + +Hmc2uYZK6og+Pvx5GUJ7oW75UG4V/ksQanTjfTKUnxyGWJRMtB5tIRgVwGsrd7lz/QR57++wbvWsr6nxwyS0A== + NSStoreModelVersionHashesVersion + 3 + NSStoreModelVersionIdentifiers + + + + + + + + + icon + + + + identifier + + + + options + + + + isTestnet + + + + tonBridgeUrl + + + + pricingApiUrl + + + + 1 + assets + + + + updatedAt + + + + xcmVersion + + + + price + + + + stash + + + + 1 + asset + + + + callName + + + + receiver + + + + txIndex + + + + chains + + + + name + + + + identifier + + + + chainId + + + + subtype + + + + id + + + + CDExternalApi + Undefined + 1 + CDExternalApi + 1 + + + + + + CDChainXcmConfig + Undefined + 9 + CDChainXcmConfig + 1 + + + + + + CDRuntimeMetadataItem + Undefined + 18 + CDRuntimeMetadataItem + 1 + + + + + + CDChainNode + Undefined + 5 + CDChainNode + 1 + + + + + + CDChainStorageItem + Undefined + 13 + CDChainStorageItem + 1 + + + + + + types + + + + symbol + + + + currencyId + + + + id + + + + precision + + + + symbol + + + + 1 + priceData + + + + availableSources + + + + 1 + availableDexIds + + + + name + + + + url + + + + chainId + + + + iconUrl + + + + publicKey + + + + version + + + + hasCrowdloans + + + + crowdloansApiType + + + + isTipRequired + + + + Undefined + 14 + CDTonDapp + 1 + + + + + + rank + + + + identityChain + + + + 1 + customNodes + + + + paraId + + + + 1 + xcmConfig + + + + identifier + + + + 1 + chain + + + + types + + + + type + + + + 1 + nodes + + + + sender + + + + data + + + + icon + + + + poster + + + + publicKey + + + + 1 + availableAssets + + + + id + + + + fee + + + + priceId + + + + fearless.ChainSubstrateV8MigrationPolicy + CDChain + Undefined + 8 + CDChain + 1 + + + + + + CDContactItem + Undefined + 17 + CDContactItem + 1 + + + + + + CDPolkaswapDex + Undefined + 4 + CDPolkaswapDex + 1 + + + + + + CDTransactionHistoryItem + Undefined + 12 + CDTransactionHistoryItem + 1 + + + + + + CDPhishingItem + Undefined + 21 + CDPhishingItem + 1 + + + + + + url + + + + 1 + chain + + + + isNative + + + + fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v7.xcdatamodel + YnBsaXN0MDDUAAEAAgADAAQABQAGAAcAClgkdmVyc2lvblkkYXJjaGl2ZXJUJHRvcFgkb2JqZWN0 +cxIAAYagXxAPTlNLZXllZEFyY2hpdmVy0QAIAAlUcm9vdIABrxEMzgALAAwAGQA1ADYANwBhAGIAYwBkAGUAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAcgBzAI4AjwCQAJYAlwCjALkAugC7ALwAvQC+AL8AwADBAMIA2wDeAOUA6wD6AQkBDAEbASoBLQCNAT0BTAFQAVQBYwFpAWoBcgGBAYIBiwGXAZgBmQGaAZsBsAGxAbkBugG7AccB2wHcAd0B3gHfAeAB4QHiAeMB8gIBAhACFAIjAjICMwJCAlECYAJsAn4CfwKAAoECggKDAoQChQAvApQCowKkArMCwgLcAt0C4wLvAwUDFAMXAyYDNQM5Az0DPgNNA1wDXwNuA30DgQOQA58D4wPkA+UD5gPnA+gD6QPqA+sD7APtA+4D7wPwA/ED8gPzA/QD9QP2A/cD+AP5A/oD+wP8A/0D/gP/BAAEAQQWBBcEHwQgBCwEQARPBF4EbQRxBIAEjwSeBK0EvATIBNoE2wTcBN0E3gTfBOAE4QTwBP8FDgUdBR4FLQU8BUsFUwVoBWkFcQV9BZEFoAWvBb4FwgXRBeAF7wX+Bg0GGQYrBjoGSQZYBmcGdgaFBpQGnAaxBrIGugbGBtoG6Qb4BwcHCwcaBykHOAdHB1YHYgd0B4MHhAeTB6IHsQeyB8EH0AffB/QH9Qf9CAkIHQgsCDsISghOCF0IbAh7CIoImQilCLcIxgjVCOQI8wkCCREJIAk1CTYJPglKCV4JbQl8CYsJjwmeCa0JvAnLCdoJ5gn4CgcKFgolCjQKQwpSCmEKdgp3Cn8KiwqfCq4KvQrMCtAK3wruCv0LDAsbCycLOQtIC1cLZgt1C3YLhQuUC5ULpAu5C7oLwgvOC+IL8QwADA8MEwwiDDEMQAxPDF4Magx8DIsMmgypDLgMuQzIDNcM5gz7DPwNBA0QDSQNMw1CDVENVQ1kDXMNgg2RDaANrA2+Dc0Nzg3dDewN+w38DgsOGg4pDj4OPw5HDlMOZw52DoUOlA6YDqcOtg7FDtQO4w7vDwEPEA8fDy4PPQ9MD1sPag9/D4APiA+UD6gPtw/GD9UP2Q/oD/cQBhAVECQQMBBCEFEQYBBvEH4QjRCcEKsQwBDBEMkQ1RDpEPgRBxEWERoRKRE4EUcRVhFlEXERgxGSEaERsBG/Ec4R3RH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uWPFZAFkPWRJZIVkwWTNZQllRWVVZZFlzWXRZgFmBWYJZl1mYWaBZrFnAWc9Z3lntWfFaAFoPWh5aLVo8WkhaWlppWnhah1qWWqVatFrDWtha2VrhWu1bAVsQWx9bLlsyW0FbUFtfW25bfVuJW5lbqFu3W8Zb1VvkW/NcCFwJXBFcHVwxXEBcT1xeXGJccVyAXI9cnlytXLlcy1zaXOlc+F0HXRZdJV00XUldSl1SXV5dcl2BXZBdn12jXbJdwV3QXd9d7l36XgxeG14qXjleSF5XXmZedV54Xodell6lXqhet17GXtVe6l7rXvNe/18TXyJfMV9AX0RfU19iX3FfgF+PX5tfrV+8X8tf2l/pX/hgB2AWYCtgLGA0YEBgVGBjYHJggWCFYJRgo2CyYMFg0GDcYO5g/WEMYRthKmE5YUhhV2FsYW1hdWGBYZVhpGGzYcJhxmHVYeRh82ICYhFiHWItYjxiS2JaYmlieGKHYopimWKoYrdizGLNYtVi4WL1YwRjE2MiYyZjNWNEY1NjYmNxY31jj2OeY61jvGPLY9pj6WPqY/lkDmQPZBdkI2Q3ZEZkVWRkZGhkd2SGZJVkpGSzZL9k0WTgZO9k/mUNZRxlK2U6ZU9lUGVYZWRleGWHZZZlpWWpZbhlx2XWZeVl9GYAZhJmIWYwZj9mTmZdZmxme2Z+ZphmmWafZqtmwWbQZtNm4mbxZvRnA2cSZxVnJGczZzdnRmdVZ1ZnZGdlZ2ZnZ2doZ2lnfmd/Z4dnk2enZ7ZnxWfUZ9hn52f2aAVoFGgjaC9oQWhQaF9obmh9aIxom2iqaL9owGjIaNRo6Gj3aQZpFWkZaShpN2lGaVVpZGlwaYJpkWmgaa9pvmnNadxp62oAagFqCWoVailqOGpHalZqWmppanhqh2qWaqVqsWrDatJq4Wrwav9rAGsPax5rLWtCa0NrS2tXa2tremuJa5hrnGura7pryWvYa+dr82wFbBRsI2wybEFsUGxfbG5sg2yEbIxsmGysbLtsymzZbN1s7Gz7bQptGW0obTRtRm1VbWRtc22CbZFtoG2vbbJtzG3NbdNt3231bgRuB24WbiVuKG43bkZuSW5Ybmdua256boluim6Ybplumm6bbpxunW6ybrNuu27Hbttu6m75bwhvDG8bbypvOW9Ib1dvY291b4Rvk2+ib7FvwG/Pb9Bv32/0b/Vv/XAJcB1wLHA7cEpwTnBdcGxwe3CKcJlwpXC3cMZw1XDkcPNxAnERcRJxIXE2cTdxP3FLcV9xbnF9cYxxkHGfca5xvXHMcdtx53H5cghyF3ImcjVyRHJTcmJyd3J4coByjHKgcq9yvnLNctFy4HLvcv5zDXMccyhzOHNHc2FzYnNoc3RzinOZc5xzq3O6c71zzHPbc95z7XP8dAB0D3QedB90KXQqdCt0QHRBdEl0VXRpdHh0h3SWdJp0qXS4dMd01nTldPF1A3USdSF1MHU/dU51XXVsdYF1gnWKdZZ1qnW5dch113Xbdep1+XYIdhd2JnYydkR2U3ZidnF2gHaPdp52rXbCdsN2y3bXdut2+ncJdxh3HHcrdzp3SXdYd2d3c3eFd5R3o3eyd8F3wnfRd+B373fyeAF4EHgfeC54PXhSeFN4W3hneHt4iniZeKh4rHi7eMp42XjoePd5A3kVeSR5M3lCeVF5YHlveX55gXmbeZx5onmuecR503nWeeV59Hn3egZ6FXoYeid6Nno6ekl6WHpZemF6Ynpjenh6eXqBeo16oXqwer96znrSeuF68Hr/ew57HXspezt7SntZe2h7d3uGe5V7pHu5e7p7wnvOe+J78XwAfA98E3wifDF8QHxPfF58anx8fIt8mnypfLh8x3zWfOV86H0CfQN9CX0VfSt9On09fUx9W31efW19fH1/fY59nX2hfbB9v33Afc59z33QfdF95n3nfe99+34Pfh5+LX48fkB+T35efm1+fH6Lfpd+qX64fsd+1n7lfuZ+9X8EfxN/KH8pfzF/PX9Rf2B/b39+f4J/kX+gf69/vn/Nf9l/63/6gAmAGIAngDaARYBUgGmAaoBygH6AkoChgLCAv4DDgNKA4YDwgP+BDoEagSyBO4FKgVmBaIF3gYaBlYGqgauBs4G/gdOB4oHxggCCBIITgiKCMYJAgk+CW4JtgnyCi4KagqmCuILHgtaC64LsgvSDAIMUgyODMoNBg0WDVINjg3KDgYOQg5yDroO9g8yD24Pqg/mECIQXhBqENIQ1hDuER4RdhGyEb4R+hI2EkISfhK6EsYTAhM+E04TihPGE8oT+hP+FAIUVhRaFHoUqhT6FTYVchWuFb4V+hY2FnIWrhbqFxoXYheeF9oYFhhSGI4YyhkGGVoZXhl+Ga4Z/ho6GnYashrCGv4bOht2G7Ib7hweHGYcohzeHRodVh2SHc4eCh5eHmIegh6yHwIfPh96H7YfxiACID4geiC2IPIhIiFqIaYh4iIeIloiliLSIw4jYiNmI4YjtiQGJEIkfiS6JMolBiVCJX4luiX2JiYmbiaqJuYnIideJ5on1igSKB4ohiiKKKIo0ikqKWYpcimuKeop9ioyKm4qeiq2KvIrAis+K3orfivmK+or7ivyK/Yr+iv+LAIsBiwKLA4sYixmLIYsti0GLUItfi26LcouBi5CLn4uui72LyYvbi+qL+YwIjBeMJow1jESMWYxajGKMboyCjJGMoIyvjLOMwozRjOCM74z+jQqNHI0rjTqNSY1YjWeNdo2FjZqNm42jja+Nw43SjeGN8I30jgOOEo4hjjCOP45Ljl2ObI57joqOmY6ojreOxo7bjtyO5I7wjwSPE48ijzGPNY9Ej1OPYo9xj4CPjI+ej62PvI/Lj9qP6Y/4kAeQHJAdkCWQMZBFkFSQY5BykHaQhZCUkKOQspDBkM2Q35DukP2RDJEbkSqROZFIkV2RXpFmkXKRhpGVkaSRs5G3kcaR1ZHkkfOSApIOkiCSL5I+kk2SXJJrknqSiZKekp+Sp5KzkseS1pLlkvSS+JMHkxaTJZM0k0OTT5Nhk3CTf5OOk52TrJO7k8qT35Pgk+iT9JQIlBeUJpQ1lDmUSJRXlGaUdZSElJCUopSxlMCUz5TelO2U/JULlSCVIZUplTWVSZVYlWeVdpV6lYmVmJWnlbaVxZXRleOV8pYBlhCWH5Yulj2WTJZhlmKWapZ2loqWmZaolreWu5bKltmW6Jb3lwaXEpcklzOXQpdRl2CXb5d+l42Xopejl6uXt5fLl9qX6Zf4l/yYC5gamCmYOJhHmFOYZZh0mIOYkpihmLCYv5jOmNGY65jsmPKY/pkUmSOZJpk1mUSZR5lWmWWZaJl3mYaZipmZmaiZspnHmciZ0JncmfCZ/5oOmh2aIZowmj+aTppdmmyaeJqKmpmaqJq3msaa1ZrkmvObCJsJmxGbHZsxm0CbT5tem2KbcZuAm4+bnputm7mby5vam+mb+JwHnBacJZw0nEmcSpxSnF6ccpyBnJCcn5yjnLKcwZzQnN+c7pz6nQydG50qnTmdSJ1XnWaddZ14nZKdk52ZnaWdu53Knc2d3J3rne6d/Z4Mng+eHp4tnjGeQJ5PnlCeWp5bnlyecZ5ynnqehp6anqmeuJ7Hnsue2p7pnvifB58WnyKfNJ9Dn1KfYZ9wn3+fjp+dn7Kfs5+7n8ef25/qn/mgCKAMoBugKqA5oEigV6BjoHWghKCToKKgsaDAoM+g3qDzoPSg/KEIoRyhK6E6oUmhTaFcoWuheqGJoZihpKG2ocWh1KHjofKiAaIQoh+iIqI8oj2iQ6JPomWidKJ3ooailaKYoqeitqK5osii16Lbouqi+aL6owKjA6MYoxmjIaMto0GjUKNfo26jcqOBo5Cjn6Ouo72jyaPbo+qj+aQIpBekJqQ1pESkWaRapGKkbqSCpJGkoKSvpLOkwqTRpOCk76T+pQqlHKUrpTqlSaVYpWeldqWFpYiljKWQpZSlnKWfpaNVJG51bGzWAA0ADgAPABAAEQASABMAFAAVABYAFwAYXxAPX3hkX3Jvb3RQYWNrYWdlViRjbGFzc11feGRfbW9kZWxOYW1lXF94ZF9jb21tZW50c18QFV9jb25maWd1cmF0aW9uc0J5TmFtZV8QF19tb2RlbFZlcnNpb25JZGVudGlmaWVygAKBDM2AAIEMy4EMzIEFTN4AGgAbABwAHQAeAB8AIAAOACEAIgAjACQAJQAmACcAKAApAAkAJwAVAC0ALgAvADAAMQAnACcAFV8QHFhEQnVja2V0Rm9yQ2xhc3Nlc3dhc0VuY29kZWRfEBpYREJ1Y2tldEZvclBhY2thZ2Vzc3RvcmFnZV8QHFhEQnVja2V0Rm9ySW50ZXJmYWNlc3N0b3JhZ2VfEA9feGRfb3duaW5nTW9kZWxfEB1YREJ1Y2tldEZvclBhY2thZ2Vzd2FzRW5jb2RlZFZfb3duZXJfEBtYREJ1Y2tldEZvckRhdGFUeXBlc3N0b3JhZ2VbX3Zpc2liaWxpdHlfEBlYREJ1Y2tldEZvckNsYXNzZXNzdG9yYWdlVV9uYW1lXxAfWERCdWNrZXRGb3JJbnRlcmZhY2Vzd2FzRW5jb2RlZF8QHlhEQnVja2V0Rm9yRGF0YVR5cGVzd2FzRW5jb2RlZF8QEF91bmlxdWVFbGVtZW50SUSABIEMyYEMx4ABgASAAIEMyIEMyhAAgAWAA4AEgASAAFBTWUVT0wA4ADkADgA6AE0AYFdOUy5rZXlzWk5TLm9iamVjdHOvEBIAOwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEyABoAHgAiACYAKgAuADIANgA6AD4AQgBGAEoATgBSAFYAWgBevEBIATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF+AGIBrgQZigQIDgQf1gQiDgQYLgQlugQmzgQj0gQJ+gQo/gQT2gQqygQbtgQvOgQwngQyDgDZdQ0RFeHRlcm5hbEFwaVdDRENoYWluXxATQ0RYY21BdmFpbGFibGVBc3NldFdDREFzc2V0XUNEQ29udGFjdEl0ZW1fEBlDRFBvbGthc3dhcFJlbW90ZVNldHRpbmdzXxAQQ0RDaGFpblhjbUNvbmZpZ1tDRFN0YXNoSXRlbV8QFUNEUnVudGltZU1ldGFkYXRhSXRlbV5DRFBvbGthc3dhcERleF8QD0NEUHJpY2VQcm92aWRlclpDRFNjYW1JbmZvW0NEQ2hhaW5Ob2RlXxAYQ0RUcmFuc2FjdGlvbkhpc3RvcnlJdGVtXxAZQ0RYY21BdmFpbGFibGVEZXN0aW5hdGlvbllDRENvbnRhY3ReQ0RQaGlzaGluZ0l0ZW1fEBJDRENoYWluU3RvcmFnZUl0ZW3fEBAAdAB1AHYAdwAfAHgAeQAhAHoAewAOACMAfAB9ACYAfgB/AIAAJwAnABMAhACFAC8AJwB/AIgAOwB/AIsAjACNXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zZHVwbGljYXRlc18QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNzdG9yYWdlW19pc0Fic3RyYWN0gBqAPoAEgASAAoAbgQLvgASAGoEC8YAGgBqBB/SAGQgSTkZam1dvcmRlcmVk0wA4ADkADgCRAJMAYKEAkoAcoQCUgB2ANl5YRF9QU3RlcmVvdHlwZdkAHwAjAJgADgAmAJkAIQB+AJoATgCSAH8AngAVACcALwCNAKJfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WAGIAcgBqAPYAAgAQIgB7TADgAOQAOAKQArgBgqQClAKYApwCoAKkAqgCrAKwArYAfgCCAIYAigCOAJIAlgCaAJ6kArwCwALEAsgCzALQAtQC2ALeAKIAsgC2AL4AwgDKANIA3gDuANl8QE1hEUE1Db21wb3VuZEluZGV4ZXNfEBBYRF9QU0tfZWxlbWVudElEXxAZWERQTVVuaXF1ZW5lc3NDb25zdHJhaW50c18QGlhEX1BTS192ZXJzaW9uSGFzaE1vZGlmaWVyXxAZWERfUFNLX2ZldGNoUmVxdWVzdHNBcnJheV8QEVhEX1BTS19pc0Fic3RyYWN0XxAPWERfUFNLX3VzZXJJbmZvXxATWERfUFNLX2NsYXNzTWFwcGluZ18QFlhEX1BTS19lbnRpdHlDbGFzc05hbWXfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQDOABUAlACNAI0AjQAvAI0A1QClAI0AjQAVAI1VX3R5cGVYX2RlZmF1bHRcX2Fzc29jaWF0aW9uW19pc1JlYWRPbmx5WV9pc1N0YXRpY1lfaXNVbmlxdWVaX2lzRGVyaXZlZFpfaXNPcmRlcmVkXF9pc0NvbXBvc2l0ZVdfaXNMZWFmgACAKYAAgB0ICAgIgCuAHwgIgAAI0gA5AA4A3ADdoIAq0gDfAOAA4QDiWiRjbGFzc25hbWVYJGNsYXNzZXNeTlNNdXRhYmxlQXJyYXmjAOEA4wDkV05TQXJyYXlYTlNPYmplY3TSAN8A4ADmAOdfEBBYRFVNTFByb3BlcnR5SW1wpADoAOkA6gDkXxAQWERVTUxQcm9wZXJ0eUltcF8QFFhEVU1MTmFtZWRFbGVtZW50SW1wXxAPWERVTUxFbGV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IACEAyQAOACMAygDLACYAzAAVAFQAFUwKAI0AjQCNAC8AjQDVAnEAjQCNABUAjYAAgQYLgACBBgUICAgIgCuAYQgIgAAI3xAQTQNNBE0FTQYAH00HTQgAIU0JTQoADgAjTQtNDAAmAH4Af00OACcAJwATTRIAhQAvACcAfwCIAEEAf00ZTRoAjV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc2R1cGxpY2F0ZXNfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zc3RvcmFnZYAagQYegASABIACgQYNgQLvgASAGoEC8YAMgBqBB2KBBgwIEsQ/FO/TADgAOQAOTR5NIABgoQCSgByhTSGBBg6ANtkAHwAjTSQADgAmTSUAIQB+TSYAVACSAH8AngAVACcALwCNTS5fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBBguAHIAagD2AAIAECIEGD9MAOAA5AA5NME06AGCpAKUApgCnAKgAqQCqAKsArACtgB+AIIAhgCKAI4AkgCWAJoAnqU07TTxNPU0+TT9NQE1BTUJNQ4EGEIEGEoEGE4EGFYEGFoEGGIEGGYEGG4EGHIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABVNRwAVTSEAjQCNAI0ALwCNANUApQCNAI0AFQCNgACBBhGAAIEGDgg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CdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQZRgEeAGoA9gACABAiBBmDTADgAOQAOUTVRPABgpgJxAnMCbgJvAnACcoBhgGOAXoBfgGCAYqZRPVE+UT9RQFFBUUKBBmGBBr2BBr6BBr+BBsCBBsGANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAFAAFVCKAI0AjQCNAC8AjQDVAnEAjQCNABUAjYAAgQZigACBBl8ICAgIgCuAYQgIgAAI3xAQUVRRVVFWUVcAH1FYUVkAIVFaUVsADgAjUVxRXQAmAH4Af1FfACcAJwATUWMAhQAvACcAfwCIAD0Af1FqUWsAjV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc2R1cGxpY2F0ZXNfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zc3RvcmFnZYAagQZ1gASABIACgQZkgQLvgASAGoEC8YAIgBqBBryBBmMIEkZN6r7TADgAOQAOUW9RcQBgoQCSgByhUXKBBmWANtkAHwAjUXUADgAmUXYAIQB+UXcAUACSAH8AngAVACcALwCNUX9fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBBmKAHIAagD2AAIAECIEGZtMAOAA5AA5RgVGLAGCpAKUApgCnAKgAqQCqAKsArACtgB+AIIAhgCKAI4AkgCWAJoAnqVGMUY1RjlGPUZBRkVGSUZNRlIEGZ4EGaYEGaoEGbIEGbYEGb4EGcIEGcoEGc4A23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABVRmAAVUXIAjQCNAI0ALwCNANUApQCNAI0AFQCNgACBBmiAAIEGZQgICAiAK4AfCAiAAAjSADkADlGmAN2ggCrfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVRcgCNAI0AjQAvAI0A1QCmAI0AjQAVAI2AAIAAgACBBmUICAgIgCuAIAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABVRuQAVUXIAjQCNAI0ALwCNANUApwCNAI0AFQCNgACBBmuAAIEGZQgICAiAK4AhCAiAAAjSADkADlHHAN2ggCrfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVRcgCNAI0AjQAvAI0A1QCoAI0AjQAVAI2AAIAAgACBBmUICAgIgCuAIggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABVR2gAVUXIAjQCNAI0ALwCNANUAqQCNAI0AFQCNgACBBm6AAIEGZQgICAiAK4AjCAiAAAjSADkADlHoAN2ggCrfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVRcgCNAI0AjQAvAI0A1QCqAI0AjQAVAI2AAIAzgACBBmUICAgIgCuAJAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABVR+wAVUXIAjQCNAI0ALwCNANUAqwCNAI0AFQCNgACBBnGAAIEGZQgICAiAK4AlCAiAAAjTADgAOQAOUglSCgBgoKCANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAVYAFVFyAI0AjQCNAC8AjQDVAKwAjQCNABUAjYAAgDiAAIEGZQgICAiAK4AmCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFVIdABVRcgCNAI0AjQAvAI0A1QCtAI0AjQAVAI2AAIEGdIAAgQZlCAgICIArgCcICIAACF8QE0NEWGNtQXZhaWxhYmxlQXNzZXTTADgAOQAOUixSMABgoxdtF3FSL4ECFoECGYEGdqNSMVIyUjOBBneBBo6BBqWANlltaW5BbW91bnTfEBIAwwDEAMVSNwAfAMcAyFI4ACEAxlI5AMkADgAjAMoAywAmAMwAFQAVABUAJwBQAI0AjVJBAC8AjQB/AI0EEBdtAI0AjVJJAI1fECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEGYggIgQZ5CIAaCIC+gQIWCAiBBngIEs+RXDrTADgAOQAOUk1SUABgogGzBBqARoCholJRUlKBBnqBBoWANtkAHwAjUlUADgAmUlYAIQB+UldSMQGzAH8AngAVACcALwCNUl9fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBBneARoAagD2AAIAECIEGe9MAOAA5AA5SYVJqAGCoAckBygHLAcwBzQHOAc8B0IBKgEuATIBNgE6AT4BQgFGoUmtSbFJtUm5Sb1JwUnFScoEGfIEGfYEGfoEGgIEGgYEGgoEGg4EGhIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVUlEAjQCNAI0ALwCNANUByQCNAI0AFQCNgACAM4AAgQZ6CAgICIArgEoICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFVJRAI0AjQCNAC8AjQDVAcoAjQCNABUAjYAAgACAAIEGeggICAiAK4BLCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFVKUABVSUQCNAI0AjQAvAI0A1QHLAI0AjQAVAI2AAIEGf4AAgQZ6CAgICIArgEwICIAACNMAOAA5AA5SolKjAGCgoIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVUlEAjQCNAI0ALwCNANUBzACNAI0AFQCNgACAM4AAgQZ6CAgICIArgE0ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAiUAFVJRAI0AjQCNAC8AjQDVAc0AjQCNABUAjYAAgFiAAIEGeggICAiAK4BOCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVSUQCNAI0AjQAvAI0A1QHOAI0AjQAVAI2AAIAzgACBBnoICAgIgCuATwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVUlEAjQCNAI0ALwCNANUBzwCNAI0AFQCNgACAAIAAgQZ6CAgICIArgFAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFVJRAI0AjQCNAC8AjQDVAdAAjQCNABUAjYAAgDOAAIEGeggICAiAK4BRCAiAAAjZAB8AI1LxAA4AJlLyACEAflLzUjEEGgB/AJ4AFQAnAC8AjVL7XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQZ3gKGAGoA9gACABAiBBobTADgAOQAOUv1TBQBgpwTKBMsEzATNBM4EzwTQgK+AsICxgLKAs4C0gLWnUwZTB1MIUwlTClMLUwyBBoeBBoiBBomBBoqBBouBBoyBBo2ANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFVJSAI0AjQCNAC8AjQDVBMoAjQCNABUAjYAAgACAAIEGhQgICAiAK4CvCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVSUgCNAI0AjQAvAI0A1QTLAI0AjQAVAI2AAIAzgACBBoUICAgIgCuAsAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVUlIAjQCNAI0ALwCNANUEzACNAI0AFQCNgACAAIAAgQaFCAgICIArgLEICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVBRAAFVJSAI0AjQCNAC8AjQDVBM0AjQCNABUAjYAAgLqAAIEGhQgICAiAK4CyCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVSUgCNAI0AjQAvAI0A1QTOAI0AjQAVAI2AAIAAgACBBoUICAgIgCuAswgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVUlIAjQCNAI0ALwCNANUEzwCNAI0AFQCNgACAAIAAgQaFCAgICIArgLQICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFVJSAI0AjQCNAC8AjQDVBNAAjQCNABUAjYAAgACAAIEGhQgICAiAK4C1CAiAAAjfEBIAwwDEAMVTeAAfAMcAyFN5ACEAxlN6AMkADgAjAMoAywAmAMwAFQAVABUAJwBQAI0AjVOCAC8AjQB/AI0EEBdxAI0AjVOKAI1fECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEGYggIgQaQCIAaCIC+gQIZCAiBBo8IEi3KdQbTADgAOQAOU45TkQBgogGzBBqARoCholOSU5OBBpGBBpyANtkAHwAjU5YADgAmU5cAIQB+U5hSMgGzAH8AngAVACcALwCNU6BfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBBo6ARoAagD2AAIAECIEGktMAOAA5AA5TolOrAGCoAckBygHLAcwBzQHOAc8B0IBKgEuATIBNgE6AT4BQgFGoU6xTrVOuU69TsFOxU7JTs4EGk4EGlIEGlYEGl4EGmIEGmYEGmoEGm4A23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVU5IAjQCNAI0ALwCNANUByQCNAI0AFQCNgACAM4AAgQaRCAgICIArgEoICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFVOSAI0AjQCNAC8AjQDVAcoAjQCNABUAjYAAgACAAIEGkQgICAiAK4BLCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFVPVABVTkgCNAI0AjQAvAI0A1QHLAI0AjQAVAI2AAIEGloAAgQaRCAgICIArgEwICIAACNMAOAA5AA5T41PkAGCgoIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVU5IAjQCNAI0ALwCNANUBzACNAI0AFQCNgACAM4AAgQaRCAgICIArgE0ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAiUAFVOSAI0AjQCNAC8AjQDVAc0AjQCNABUAjYAAgFiAAIEGkQgICAiAK4BOCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVTkgCNAI0AjQAvAI0A1QHOAI0AjQAVAI2AAIAzgACBBpEICAgIgCuATwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVU5IAjQCNAI0ALwCNANUBzwCNAI0AFQCNgACAAIAAgQaRCAgICIArgFAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFVOSAI0AjQCNAC8AjQDVAdAAjQCNABUAjYAAgDOAAIEGkQgICAiAK4BRCAiAAAjZAB8AI1QyAA4AJlQzACEAflQ0UjIEGgB/AJ4AFQAnAC8AjVQ8XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQaOgKGAGoA9gACABAiBBp3TADgAOQAOVD5URgBgpwTKBMsEzATNBM4EzwTQgK+AsICxgLKAs4C0gLWnVEdUSFRJVEpUS1RMVE2BBp6BBp+BBqCBBqGBBqKBBqOBBqSANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFVOTAI0AjQCNAC8AjQDVBMoAjQCNABUAjYAAgACAAIEGnAgICAiAK4CvCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVTkwCNAI0AjQAvAI0A1QTLAI0AjQAVAI2AAIAzgACBBpwICAgIgCuAsAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVU5MAjQCNAI0ALwCNANUEzACNAI0AFQCNgACAAIAAgQacCAgICIArgLEICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVBRAAFVOTAI0AjQCNAC8AjQDVBM0AjQCNABUAjYAAgLqAAIEGnAgICAiAK4CyCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVTkwCNAI0AjQAvAI0A1QTOAI0AjQAVAI2AAIAAgACBBpwICAgIgCuAswgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVU5MAjQCNAI0ALwCNANUEzwCNAI0AFQCNgACAAIAAgQacCAgICIArgLQICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFVOTAI0AjQCNAC8AjQDVBNAAjQCNABUAjYAAgACAAIEGnAgICAiAK4C1CAiAAAjfEBIAwwDEAMVUuQAfAMcAyFS6ACEAxlS7AMkADgAjAMoAywAmAMwAFQAVABUAJwBQAI0AjVTDAC8AjQB/AI0EEFIvAI0AjVTLAI1fECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEGYggIgQanCIAaCIC+gQZ2CAiBBqYIErqYc4vTADgAOQAOVM9U0gBgogGzBBqARoCholTTVNSBBqiBBrOANtkAHwAjVNcADgAmVNgAIQB+VNlSMwGzAH8AngAVACcALwCNVOFfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBBqWARoAagD2AAIAECIEGqdMAOAA5AA5U41TsAGCoAckBygHLAcwBzQHOAc8B0IBKgEuATIBNgE6AT4BQgFGoVO1U7lTvVPBU8VTyVPNU9IEGqoEGq4EGrIEGroEGr4EGsIEGsYEGsoA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVVNMAjQCNAI0ALwCNANUByQCNAI0AFQCNgACAM4AAgQaoCAgICIArgEoICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFVTTAI0AjQCNAC8AjQDVAcoAjQCNABUAjYAAgACAAIEGqAgICAiAK4BLCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFVUWABVU0wCNAI0AjQAvAI0A1QHLAI0AjQAVAI2AAIEGrYAAgQaoCAgICIArgEwICIAACNMAOAA5AA5VJFUlAGCgoIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVVNMAjQCNAI0ALwCNANUBzACNAI0AFQCNgACAM4AAgQaoCAgICIArgE0ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAiUAFVTTAI0AjQCNAC8AjQDVAc0AjQCNABUAjYAAgFiAAIEGqAgICAiAK4BOCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVU0wCNAI0AjQAvAI0A1QHOAI0AjQAVAI2AAIAzgACBBqgICAgIgCuATwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVVNMAjQCNAI0ALwCNANUBzwCNAI0AFQCNgACAAIAAgQaoCAgICIArgFAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFVTTAI0AjQCNAC8AjQDVAdAAjQCNABUAjYAAgDOAAIEGqAgICAiAK4BRCAiAAAjZAB8AI1VzAA4AJlV0ACEAflV1UjMEGgB/AJ4AFQAnAC8AjVV9XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQalgKGAGoA9gACABAiBBrTTADgAOQAOVX9VhwBgpwTKBMsEzATNBM4EzwTQgK+AsICxgLKAs4C0gLWnVYhViVWKVYtVjFWNVY6BBrWBBraBBreBBriBBrmBBrqBBruANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFVTUAI0AjQCNAC8AjQDVBMoAjQCNABUAjYAAgACAAIEGswgICAiAK4CvCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVU1ACNAI0AjQAvAI0A1QTLAI0AjQAVAI2AAIAzgACBBrMICAgIgCuAsAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVVNQAjQCNAI0ALwCNANUEzACNAI0AFQCNgACAAIAAgQazCAgICIArgLEICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVBRAAFVTUAI0AjQCNAC8AjQDVBM0AjQCNABUAjYAAgLqAAIEGswgICAiAK4CyCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVU1ACNAI0AjQAvAI0A1QTOAI0AjQAVAI2AAIAAgACBBrMICAgIgCuAswgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVVNQAjQCNAI0ALwCNANUEzwCNAI0AFQCNgACAAIAAgQazCAgICIArgLQICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFVTUAI0AjQCNAC8AjQDVBNAAjQCNABUAjYAAgACAAIEGswgICAiAK4C1CAiAAAjSADkADlX6AN2ggCrfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVQigCNAI0AjQAvAI0A1QJzAI0AjQAVAI2AAIAzgACBBl8ICAgIgCuAYwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUChwAVUIoAjQCNAI0ALwCNANUCbgCNAI0AFQCNgACAZoAAgQZfCAgICIArgF4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVApYAFVCKAI0AjQCNAC8AjQDVAm8AjQCNABUAjYAAgGiAAIEGXwgICAiAK4BfCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQKHABVQigCNAI0AjQAvAI0A1QJwAI0AjQAVAI2AAIBmgACBBl8ICAgIgCuAYAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUCJQAVUIoAjQCNAI0ALwCNANUCcgCNAI0AFQCNgACAWIAAgQZfCAgICIArgGIICIAACN8QEgDDAMQAxVZIAB8AxwDIVkkAIQDGVkoAyQAOACMAygDLACYAzAAVABUAFQAnAFQAjQCNVlIALwCNAH8AjQQQTd8AjQCNVloAjV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQYLCAiBBsQIgBoIgL6BBiEICIEGwwgSQ2l6m9MAOAA5AA5WXlZhAGCiAbMEGoBGgKGiVmJWY4EGxYEG0IA22QAfACNWZgAOACZWZwAhAH5WaE3lAbMAfwCeABUAJwAvAI1WcF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEGwoBGgBqAPYAAgAQIgQbG0wA4ADkADlZyVnsAYKgByQHKAcsBzAHNAc4BzwHQgEqAS4BMgE2AToBPgFCAUahWfFZ9Vn5Wf1aAVoFWglaDgQbHgQbIgQbJgQbLgQbMgQbNgQbOgQbPgDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVWYgCNAI0AjQAvAI0A1QHJAI0AjQAVAI2AAIAzgACBBsUICAgIgCuASggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVVmIAjQCNAI0ALwCNANUBygCNAI0AFQCNgACAAIAAgQbFCAgICIArgEsICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVVqUAFVZiAI0AjQCNAC8AjQDVAcsAjQCNABUAjYAAgQbKgACBBsUICAgIgCuATAgIgAAI0wA4ADkADlazVrQAYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVWYgCNAI0AjQAvAI0A1QHMAI0AjQAVAI2AAIAzgACBBsUICAgIgCuATQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUCJQAVVmIAjQCNAI0ALwCNANUBzQCNAI0AFQCNgACAWIAAgQbFCAgICIArgE4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFVZiAI0AjQCNAC8AjQDVAc4AjQCNABUAjYAAgDOAAIEGxQgICAiAK4BPCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVWYgCNAI0AjQAvAI0A1QHPAI0AjQAVAI2AAIAAgACBBsUICAgIgCuAUAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVVmIAjQCNAI0ALwCNANUB0ACNAI0AFQCNgACAM4AAgQbFCAgICIArgFEICIAACNkAHwAjVwIADgAmVwMAIQB+VwRN5QQaAH8AngAVACcALwCNVwxfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBBsKAoYAagD2AAIAECIEG0dMAOAA5AA5XDlcWAGCnBMoEywTMBM0EzgTPBNCAr4CwgLGAsoCzgLSAtadXF1cYVxlXGlcbVxxXHYEG0oEG04EG1IEG1YEG1oEG14EG2IA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVVmMAjQCNAI0ALwCNANUEygCNAI0AFQCNgACAAIAAgQbQCAgICIArgK8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFVZjAI0AjQCNAC8AjQDVBMsAjQCNABUAjYAAgDOAAIEG0AgICAiAK4CwCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVWYwCNAI0AjQAvAI0A1QTMAI0AjQAVAI2AAIAAgACBBtAICAgIgCuAsQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUFEAAVVmMAjQCNAI0ALwCNANUEzQCNAI0AFQCNgACAuoAAgQbQCAgICIArgLIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFVZjAI0AjQCNAC8AjQDVBM4AjQCNABUAjYAAgACAAIEG0AgICAiAK4CzCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVWYwCNAI0AjQAvAI0A1QTPAI0AjQAVAI2AAIAAgACBBtAICAgIgCuAtAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVVmMAjQCNAI0ALwCNANUE0ACNAI0AFQCNgACAAIAAgQbQCAgICIArgLUICIAACN8QEgDDAMQAxVeJAB8AxwDIV4oAIQDGV4sAyQAOACMAygDLACYAzAAVABUAFQAnAFQAjQCNV5MALwCNAH8AjQGqTeAAjQCNV5sAjV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQYLCAiBBtsIgBoIgNaBBiIICIEG2ggTAAAAARIS/izTADgAOQAOV59XogBgogGzAbSARoBHolejV6SBBtyBBueANtkAHwAjV6cADgAmV6gAIQB+V6lN5gGzAH8AngAVACcALwCNV7FfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBBtmARoAagD2AAIAECIEG3dMAOAA5AA5Xs1e8AGCoAckBygHLAcwBzQHOAc8B0IBKgEuATIBNgE6AT4BQgFGoV71Xvle/V8BXwVfCV8NXxIEG3oEG34EG4IEG4oEG44EG5IEG5YEG5oA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVV6MAjQCNAI0ALwCNANUByQCNAI0AFQCNgACAM4AAgQbcCAgICIArgEoICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFVejAI0AjQCNAC8AjQDVAcoAjQCNABUAjYAAgACAAIEG3AgICAiAK4BLCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFVfmABVXowCNAI0AjQAvAI0A1QHLAI0AjQAVAI2AAIEG4YAAgQbcCAgICIArgEwICIAACNMAOAA5AA5X9Ff1AGCgoIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVV6MAjQCNAI0ALwCNANUBzACNAI0AFQCNgACAM4AAgQbcCAgICIArgE0ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAiUAFVejAI0AjQCNAC8AjQDVAc0AjQCNABUAjYAAgFiAAIEG3AgICAiAK4BOCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVXowCNAI0AjQAvAI0A1QHOAI0AjQAVAI2AAIAzgACBBtwICAgIgCuATwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVV6MAjQCNAI0ALwCNANUBzwCNAI0AFQCNgACAAIAAgQbcCAgICIArgFAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFVejAI0AjQCNAC8AjQDVAdAAjQCNABUAjYAAgDOAAIEG3AgICAiAK4BRCAiAAAjZAB8AI1hDAA4AJlhEACEAflhFTeYBtAB/AJ4AFQAnAC8AjVhNXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQbZgEeAGoA9gACABAiBBujTADgAOQAOWE9YVwBgpwJuAm8CcAJxAnICcwJ0gF6AX4BggGGAYoBjgGSnWFhYWVhaWFtYXFhdWF6BBumBBuqBBuuBBuyBB1+BB2CBB2GANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAocAFVekAI0AjQCNAC8AjQDVAm4AjQCNABUAjYAAgGaAAIEG5wgICAiAK4BeCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQKWABVXpACNAI0AjQAvAI0A1QJvAI0AjQAVAI2AAIBogACBBucICAgIgCuAXwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUChwAVV6QAjQCNAI0ALwCNANUCcACNAI0AFQCNgACAZoAAgQbnCAgICIArgGAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAFwAFVekAI0AjQCNAC8AjQDVAnEAjQCNABUAjYAAgQbtgACBBucICAgIgCuAYQgIgAAI3xAQWJ1YnlifWKAAH1ihWKIAIVijWKQADgAjWKVYpgAmAH4Af1ioACcAJwATWKwAhQAvACcAfwCIAEkAf1izWLQAjV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc2R1cGxpY2F0ZXNfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zc3RvcmFnZYAagQcAgASABIACgQbvgQLvgASAGoEC8YAUgBqBB16BBu4IEsmcPoPTADgAOQAOWLhYugBgoQCSgByhWLuBBvCANtkAHwAjWL4ADgAmWL8AIQB+WMAAXACSAH8AngAVACcALwCNWMhfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBBu2AHIAagD2AAIAECIEG8dMAOAA5AA5YyljUAGCpAKUApgCnAKgAqQCqAKsArACtgB+AIIAhgCKAI4AkgCWAJoAnqVjVWNZY11jYWNlY2ljbWNxY3YEG8oEG9IEG9YEG94EG+IEG+oEG+4EG/YEG/oA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABVY4QAVWLsAjQCNAI0ALwCNANUApQCNAI0AFQCNgACBBvOAAIEG8AgICAiAK4AfCAiAAAjSADkADljvAN2ggCrfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVYuwCNAI0AjQAvAI0A1QCmAI0AjQAVAI2AAIAAgACBBvAICAgIgCuAIAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABVZAgAVWLsAjQCNAI0ALwCNANUApwCNAI0AFQCNgACBBvaAAIEG8AgICAiAK4AhCAiAAAjSADkADlkQAN2ggCrfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVYuwCNAI0AjQAvAI0A1QCoAI0AjQAVAI2AAIAAgACBBvAICAgIgCuAIggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABVZIwAVWLsAjQCNAI0ALwCNANUAqQCNAI0AFQCNgACBBvmAAIEG8AgICAiAK4AjCAiAAAjSADkADlkxAN2ggCrfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVYuwCNAI0AjQAvAI0A1QCqAI0AjQAVAI2AAIAzgACBBvAICAgIgCuAJAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABVZRAAVWLsAjQCNAI0ALwCNANUAqwCNAI0AFQCNgACBBvyAAIEG8AgICAiAK4AlCAiAAAjTADgAOQAOWVJZUwBgoKCANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAVYAFVi7AI0AjQCNAC8AjQDVAKwAjQCNABUAjYAAgDiAAIEG8AgICAiAK4AmCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFVlmABVYuwCNAI0AjQAvAI0A1QCtAI0AjQAVAI2AAIEG/4AAgQbwCAgICIArgCcICIAACF8QGUNEWGNtQXZhaWxhYmxlRGVzdGluYXRpb27TADgAOQAOWXVZegBgpAM7A69ZeFl5gHaAjYEHAYEHAqRZe1l8WX1ZfoEHA4EHGoEHMIEHR4A2XxARYnJpZGdlUGFyYWNoYWluSWRWY29uZmln3xASAMMAxADFWYMAHwDHAMhZhAAhAMZZhQDJAA4AIwDKAMsAJgDMABUAFQAVACcAXACNAI1ZjQAvAI0AfwCNBBADOwCNAI1ZlQCNXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBBu0ICIEHBQiAGgiAvoB2CAiBBwQIEnYRxebTADgAOQAOWZlZnABgogGzBBqARoCholmdWZ6BBwaBBxGANtkAHwAjWaEADgAmWaIAIQB+WaNZewGzAH8AngAVACcALwCNWatfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBBwOARoAagD2AAIAECIEHB9MAOAA5AA5ZrVm2AGCoAckBygHLAcwBzQHOAc8B0IBKgEuATIBNgE6AT4BQgFGoWbdZuFm5WbpZu1m8Wb1ZvoEHCIEHCYEHCoEHDIEHDYEHDoEHD4EHEIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVWZ0AjQCNAI0ALwCNANUByQCNAI0AFQCNgACAM4AAgQcGCAgICIArgEoICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFVmdAI0AjQCNAC8AjQDVAcoAjQCNABUAjYAAgACAAIEHBggICAiAK4BLCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFVngABVZnQCNAI0AjQAvAI0A1QHLAI0AjQAVAI2AAIEHC4AAgQcGCAgICIArgEwICIAACNMAOAA5AA5Z7lnvAGCgoIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVWZ0AjQCNAI0ALwCNANUBzACNAI0AFQCNgACAM4AAgQcGCAgICIArgE0ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAiUAFVmdAI0AjQCNAC8AjQDVAc0AjQCNABUAjYAAgFiAAIEHBggICAiAK4BOCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVZnQCNAI0AjQAvAI0A1QHOAI0AjQAVAI2AAIAzgACBBwYICAgIgCuATwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVWZ0AjQCNAI0ALwCNANUBzwCNAI0AFQCNgACAAIAAgQcGCAgICIArgFAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFVmdAI0AjQCNAC8AjQDVAdAAjQCNABUAjYAAgDOAAIEHBggICAiAK4BRCAiAAAjZAB8AI1o9AA4AJlo+ACEAflo/WXsEGgB/AJ4AFQAnAC8AjVpHXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQcDgKGAGoA9gACABAiBBxLTADgAOQAOWklaUQBgpwTKBMsEzATNBM4EzwTQgK+AsICxgLKAs4C0gLWnWlJaU1pUWlVaVlpXWliBBxOBBxSBBxWBBxaBBxeBBxiBBxmANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFVmeAI0AjQCNAC8AjQDVBMoAjQCNABUAjYAAgACAAIEHEQgICAiAK4CvCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVZngCNAI0AjQAvAI0A1QTLAI0AjQAVAI2AAIAzgACBBxEICAgIgCuAsAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVWZ4AjQCNAI0ALwCNANUEzACNAI0AFQCNgACAAIAAgQcRCAgICIArgLEICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVBRAAFVmeAI0AjQCNAC8AjQDVBM0AjQCNABUAjYAAgLqAAIEHEQgICAiAK4CyCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVZngCNAI0AjQAvAI0A1QTOAI0AjQAVAI2AAIAAgACBBxEICAgIgCuAswgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVWZ4AjQCNAI0ALwCNANUEzwCNAI0AFQCNgACAAIAAgQcRCAgICIArgLQICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFVmeAI0AjQCNAC8AjQDVBNAAjQCNABUAjYAAgACAAIEHEQgICAiAK4C1CAiAAAjfEBIAwwDEAMVaxAAfAMcAyFrFACEAxlrGAMkADgAjAMoAywAmAMwAFQAVABUAJwBcAI0AjVrOAC8AjQB/AI0BqgOvAI0AjVrWAI1fECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEG7QgIgQccCIAaCIDWgI0ICIEHGwgSRc2JQ9MAOAA5AA5a2lrdAGCiAbMBtIBGgEeiWt5a34EHHYEHKIA22QAfACNa4gAOACZa4wAhAH5a5Fl8AbMAfwCeABUAJwAvAI1a7F8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEHGoBGgBqAPYAAgAQIgQce0wA4ADkADlruWvcAYKgByQHKAcsBzAHNAc4BzwHQgEqAS4BMgE2AToBPgFCAUaha+Fr5Wvpa+1r8Wv1a/lr/gQcfgQcggQchgQcjgQckgQclgQcmgQcngDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVa3gCNAI0AjQAvAI0A1QHJAI0AjQAVAI2AAIAzgACBBx0ICAgIgCuASggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVWt4AjQCNAI0ALwCNANUBygCNAI0AFQCNgACAAIAAgQcdCAgICIArgEsICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVWyEAFVreAI0AjQCNAC8AjQDVAcsAjQCNABUAjYAAgQcigACBBx0ICAgIgCuATAgIgAAI0wA4ADkADlsvWzAAYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVa3gCNAI0AjQAvAI0A1QHMAI0AjQAVAI2AAIAzgACBBx0ICAgIgCuATQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUCJQAVWt4AjQCNAI0ALwCNANUBzQCNAI0AFQCNgACAWIAAgQcdCAgICIArgE4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFVreAI0AjQCNAC8AjQDVAc4AjQCNABUAjYAAgDOAAIEHHQgICAiAK4BPCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVa3gCNAI0AjQAvAI0A1QHPAI0AjQAVAI2AAIAAgACBBx0ICAgIgCuAUAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVWt4AjQCNAI0ALwCNANUB0ACNAI0AFQCNgACAM4AAgQcdCAgICIArgFEICIAACNkAHwAjW34ADgAmW38AIQB+W4BZfAG0AH8AngAVACcALwCNW4hfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBBxqAR4AagD2AAIAECIEHKdMAOAA5AA5biluRAGCmAnECcwJuAm8CcAJygGGAY4BegF+AYIBipluSW5NblFuVW5Zbl4EHKoEHK4EHLIEHLYEHLoEHL4A23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAUAAVWt8AjQCNAI0ALwCNANUCcQCNAI0AFQCNgACBBmKAAIEHKAgICAiAK4BhCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVa3wCNAI0AjQAvAI0A1QJzAI0AjQAVAI2AAIAzgACBBygICAgIgCuAYwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUChwAVWt8AjQCNAI0ALwCNANUCbgCNAI0AFQCNgACAZoAAgQcoCAgICIArgF4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVApYAFVrfAI0AjQCNAC8AjQDVAm8AjQCNABUAjYAAgGiAAIEHKAgICAiAK4BfCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQKHABVa3wCNAI0AjQAvAI0A1QJwAI0AjQAVAI2AAIBmgACBBygICAgIgCuAYAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUCJQAVWt8AjQCNAI0ALwCNANUCcgCNAI0AFQCNgACAWIAAgQcoCAgICIArgGIICIAACN8QEgDDAMQAxVv0AB8AxwDIW/UAIQDGW/YAyQAOACMAygDLACYAzAAVABUAFQAnAFwAjQCNW/4ALwCNAH8AjQQQWXgAjQCNXAYAjV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQbtCAiBBzIIgBoIgL6BBwEICIEHMQgS55WmJdMAOAA5AA5cClwNAGCiAbMEGoBGgKGiXA5cD4EHM4EHPoA22QAfACNcEgAOACZcEwAhAH5cFFl9AbMAfwCeABUAJwAvAI1cHF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEHMIBGgBqAPYAAgAQIgQc00wA4ADkADlweXCcAYKgByQHKAcsBzAHNAc4BzwHQgEqAS4BMgE2AToBPgFCAUahcKFwpXCpcK1wsXC1cLlwvgQc1gQc2gQc3gQc5gQc6gQc7gQc8gQc9gDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVcDgCNAI0AjQAvAI0A1QHJAI0AjQAVAI2AAIAzgACBBzMICAgIgCuASggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVXA4AjQCNAI0ALwCNANUBygCNAI0AFQCNgACAAIAAgQczCAgICIArgEsICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVXFEAFVwOAI0AjQCNAC8AjQDVAcsAjQCNABUAjYAAgQc4gACBBzMICAgIgCuATAgIgAAI0wA4ADkADlxfXGAAYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVcDgCNAI0AjQAvAI0A1QHMAI0AjQAVAI2AAIAzgACBBzMICAgIgCuATQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUCJQAVXA4AjQCNAI0ALwCNANUBzQCNAI0AFQCNgACAWIAAgQczCAgICIArgE4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFVwOAI0AjQCNAC8AjQDVAc4AjQCNABUAjYAAgDOAAIEHMwgICAiAK4BPCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVcDgCNAI0AjQAvAI0A1QHPAI0AjQAVAI2AAIAAgACBBzMICAgIgCuAUAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVXA4AjQCNAI0ALwCNANUB0ACNAI0AFQCNgACAM4AAgQczCAgICIArgFEICIAACNkAHwAjXK4ADgAmXK8AIQB+XLBZfQQaAH8AngAVACcALwCNXLhfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBBzCAoYAagD2AAIAECIEHP9MAOAA5AA5culzCAGCnBMoEywTMBM0EzgTPBNCAr4CwgLGAsoCzgLSAtadcw1zEXMVcxlzHXMhcyYEHQIEHQYEHQoEHQ4EHRIEHRYEHRoA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVXA8AjQCNAI0ALwCNANUEygCNAI0AFQCNgACAAIAAgQc+CAgICIArgK8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFVwPAI0AjQCNAC8AjQDVBMsAjQCNABUAjYAAgDOAAIEHPggICAiAK4CwCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVcDwCNAI0AjQAvAI0A1QTMAI0AjQAVAI2AAIAAgACBBz4ICAgIgCuAsQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUFEAAVXA8AjQCNAI0ALwCNANUEzQCNAI0AFQCNgACAuoAAgQc+CAgICIArgLIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFVwPAI0AjQCNAC8AjQDVBM4AjQCNABUAjYAAgACAAIEHPggICAiAK4CzCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVcDwCNAI0AjQAvAI0A1QTPAI0AjQAVAI2AAIAAgACBBz4ICAgIgCuAtAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVXA8AjQCNAI0ALwCNANUE0ACNAI0AFQCNgACAAIAAgQc+CAgICIArgLUICIAACN8QEgDDAMQAxV01AB8AxwDIXTYAIQDGXTcAyQAOACMAygDLACYAzAAVABUAFQAnAFwAjQCNXT8ALwCNAH8AjQGqWXkAjQCNXUcAjV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQbtCAiBB0kIgBoIgNaBBwIICIEHSAgSwfNJZdMAOAA5AA5dS11OAGCiAbMBtIBGgEeiXU9dUIEHSoEHVYA22QAfACNdUwAOACZdVAAhAH5dVVl+AbMAfwCeABUAJwAvAI1dXV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEHR4BGgBqAPYAAgAQIgQdL0wA4ADkADl1fXWgAYKgByQHKAcsBzAHNAc4BzwHQgEqAS4BMgE2AToBPgFCAUahdaV1qXWtdbF1tXW5db11wgQdMgQdNgQdOgQdQgQdRgQdSgQdTgQdUgDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVdTwCNAI0AjQAvAI0A1QHJAI0AjQAVAI2AAIAzgACBB0oICAgIgCuASggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVXU8AjQCNAI0ALwCNANUBygCNAI0AFQCNgACAAIAAgQdKCAgICIArgEsICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVXZIAFV1PAI0AjQCNAC8AjQDVAcsAjQCNABUAjYAAgQdPgACBB0oICAgIgCuATAgIgAAI0wA4ADkADl2gXaEAYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVdTwCNAI0AjQAvAI0A1QHMAI0AjQAVAI2AAIAzgACBB0oICAgIgCuATQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUCJQAVXU8AjQCNAI0ALwCNANUBzQCNAI0AFQCNgACAWIAAgQdKCAgICIArgE4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFV1PAI0AjQCNAC8AjQDVAc4AjQCNABUAjYAAgDOAAIEHSggICAiAK4BPCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVdTwCNAI0AjQAvAI0A1QHPAI0AjQAVAI2AAIAAgACBB0oICAgIgCuAUAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVXU8AjQCNAI0ALwCNANUB0ACNAI0AFQCNgACAM4AAgQdKCAgICIArgFEICIAACNkAHwAjXe8ADgAmXfAAIQB+XfFZfgG0AH8AngAVACcALwCNXflfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBB0eAR4AagD2AAIAECIEHVtMAOAA5AA5d+14DAGCnAm4CbwJwAnECcgJzAnSAXoBfgGCAYYBigGOAZKdeBF4FXgZeB14IXgleCoEHV4EHWIEHWYEHWoEHW4EHXIEHXYA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUChwAVXVAAjQCNAI0ALwCNANUCbgCNAI0AFQCNgACAZoAAgQdVCAgICIArgF4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVApYAFV1QAI0AjQCNAC8AjQDVAm8AjQCNABUAjYAAgGiAAIEHVQgICAiAK4BfCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQKWABVdUACNAI0AjQAvAI0A1QJwAI0AjQAVAI2AAIBogACBB1UICAgIgCuAYAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAVAAVXVAAjQCNAI0ALwCNANUCcQCNAI0AFQCNgACBBguAAIEHVQgICAiAK4BhCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVdUACNAI0AjQAvAI0A1QJyAI0AjQAVAI2AAIAzgACBB1UICAgIgCuAYggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVXVAAjQCNAI0ALwCNANUCcwCNAI0AFQCNgACAM4AAgQdVCAgICIArgGMICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVTeYAFV1QAI0AjQCNAC8AjQDVAnQAjQCNABUAjYAAgQbZgACBB1UICAgIgCuAZAgIgAAI0gA5AA5edgDdoIAq3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUCJQAVV6QAjQCNAI0ALwCNANUCcgCNAI0AFQCNgACAWIAAgQbnCAgICIArgGIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFVekAI0AjQCNAC8AjQDVAnMAjQCNABUAjYAAgDOAAIEG5wgICAiAK4BjCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFVl+ABVXpACNAI0AjQAvAI0A1QJ0AI0AjQAVAI2AAIEHR4AAgQbnCAgICIArgGQICIAACNIAOQAOXqYA3aCAKt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFUwKAI0AjQCNAC8AjQDVAnIAjQCNABUAjYAAgDOAAIEGBQgICAiAK4BiCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVMCgCNAI0AjQAvAI0A1QJzAI0AjQAVAI2AAIAzgACBBgUICAgIgCuAYwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABVN4wAVTAoAjQCNAI0ALwCNANUCdACNAI0AFQCNgACBBjqAAIEGBQgICAiAK4BkCAiAAAjfEBIAwwDEAMVe1gAfAMcAyF7XACEAxl7YAMkADgAjAMoAywAmAMwAFQAVABUAJwBPAI0AjV7gAC8AjQB/AI0EEAO+AI0AjV7oAI1fECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIBrCAiBB2gIgBoIgL6AmwgIgQdnCBJlHp310wA4ADkADl7sXu8AYKIBswQagEaAoaJe8F7xgQdpgQd0gDbZAB8AI170AA4AJl71ACEAfl72A98BswB/AJ4AFQAnAC8AjV7+XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQdmgEaAGoA9gACABAiBB2rTADgAOQAOXwBfCQBgqAHJAcoBywHMAc0BzgHPAdCASoBLgEyATYBOgE+AUIBRqF8KXwtfDF8NXw5fD18QXxGBB2uBB2yBB22BB2+BB3CBB3GBB3KBB3OANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFV7wAI0AjQCNAC8AjQDVAckAjQCNABUAjYAAgDOAAIEHaQgICAiAK4BKCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVe8ACNAI0AjQAvAI0A1QHKAI0AjQAVAI2AAIAAgACBB2kICAgIgCuASwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABVfMwAVXvAAjQCNAI0ALwCNANUBywCNAI0AFQCNgACBB26AAIEHaQgICAiAK4BMCAiAAAjTADgAOQAOX0FfQgBgoKCANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFV7wAI0AjQCNAC8AjQDVAcwAjQCNABUAjYAAgDOAAIEHaQgICAiAK4BNCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVe8ACNAI0AjQAvAI0A1QHNAI0AjQAVAI2AAIAzgACBB2kICAgIgCuATggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVXvAAjQCNAI0ALwCNANUBzgCNAI0AFQCNgACAM4AAgQdpCAgICIArgE8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFV7wAI0AjQCNAC8AjQDVAc8AjQCNABUAjYAAgACAAIEHaQgICAiAK4BQCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVe8ACNAI0AjQAvAI0A1QHQAI0AjQAVAI2AAIAzgACBB2kICAgIgCuAUQgIgAAI2QAfACNfkAAOACZfkQAhAH5fkgPfBBoAfwCeABUAJwAvAI1fml8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEHZoChgBqAPYAAgAQIgQd10wA4ADkADl+cX6QAYKcEygTLBMwEzQTOBM8E0ICvgLCAsYCygLOAtIC1p1+lX6Zfp1+oX6lfql+rgQd2gQd3gQd4gQd5gQd6gQd7gQd8gDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQ3AABVe8QCNAI0AjQAvAI0A1QTKAI0AjQAVAI2AAIEBYIAAgQd0CAgICIArgK8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFV7xAI0AjQCNAC8AjQDVBMsAjQCNABUAjYAAgDOAAIEHdAgICAiAK4CwCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVe8QCNAI0AjQAvAI0A1QTMAI0AjQAVAI2AAIAAgACBB3QICAgIgCuAsQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUN7gAVXvEAjQCNAI0ALwCNANUEzQCNAI0AFQCNgACBAWSAAIEHdAgICAiAK4CyCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVe8QCNAI0AjQAvAI0A1QTOAI0AjQAVAI2AAIAAgACBB3QICAgIgCuAswgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVXvEAjQCNAI0ALwCNANUEzwCNAI0AFQCNgACAAIAAgQd0CAgICIArgLQICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFV7xAI0AjQCNAC8AjQDVBNAAjQCNABUAjYAAgACAAIEHdAgICAiAK4C1CAiAAAjfEBIAwwDEAMVgFwAfAMcAyGAYACEAxmAZAMkADgAjAMoAywAmAMwAFQAVABUAJwBPAI0AjWAhAC8AjQB/AI0EEAO/AI0AjWApAI1fECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIBrCAiBB38IgBoIgL6AnAgIgQd+CBJgXptB0wA4ADkADmAtYDAAYKIBswQagEaAoaJgMWAygQeAgQeLgDbZAB8AI2A1AA4AJmA2ACEAfmA3A+ABswB/AJ4AFQAnAC8AjWA/XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQd9gEaAGoA9gACABAiBB4HTADgAOQAOYEFgSgBgqAHJAcoBywHMAc0BzgHPAdCASoBLgEyATYBOgE+AUIBRqGBLYExgTWBOYE9gUGBRYFKBB4KBB4OBB4SBB4aBB4eBB4iBB4mBB4qANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFWAxAI0AjQCNAC8AjQDVAckAjQCNABUAjYAAgDOAAIEHgAgICAiAK4BKCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVgMQCNAI0AjQAvAI0A1QHKAI0AjQAVAI2AAIAAgACBB4AICAgIgCuASwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABVgdAAVYDEAjQCNAI0ALwCNANUBywCNAI0AFQCNgACBB4WAAIEHgAgICAiAK4BMCAiAAAjTADgAOQAOYIJggwBgoKCANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFWAxAI0AjQCNAC8AjQDVAcwAjQCNABUAjYAAgDOAAIEHgAgICAiAK4BNCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQIlABVgMQCNAI0AjQAvAI0A1QHNAI0AjQAVAI2AAIBYgACBB4AICAgIgCuATggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVYDEAjQCNAI0ALwCNANUBzgCNAI0AFQCNgACAM4AAgQeACAgICIArgE8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFWAxAI0AjQCNAC8AjQDVAc8AjQCNABUAjYAAgACAAIEHgAgICAiAK4BQCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVgMQCNAI0AjQAvAI0A1QHQAI0AjQAVAI2AAIAzgACBB4AICAgIgCuAUQgIgAAI2QAfACNg0QAOACZg0gAhAH5g0wPgBBoAfwCeABUAJwAvAI1g218QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEHfYChgBqAPYAAgAQIgQeM0wA4ADkADmDdYOUAYKcEygTLBMwEzQTOBM8E0ICvgLCAsYCygLOAtIC1p2DmYOdg6GDpYOpg62DsgQeNgQeOgQePgQeQgQeRgQeSgQeTgDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVgMgCNAI0AjQAvAI0A1QTKAI0AjQAVAI2AAIAAgACBB4sICAgIgCuArwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVYDIAjQCNAI0ALwCNANUEywCNAI0AFQCNgACAM4AAgQeLCAgICIArgLAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFWAyAI0AjQCNAC8AjQDVBMwAjQCNABUAjYAAgACAAIEHiwgICAiAK4CxCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQyrABVgMgCNAI0AjQAvAI0A1QTNAI0AjQAVAI2AAIEBS4AAgQeLCAgICIArgLIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFWAyAI0AjQCNAC8AjQDVBM4AjQCNABUAjYAAgACAAIEHiwgICAiAK4CzCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVgMgCNAI0AjQAvAI0A1QTPAI0AjQAVAI2AAIAAgACBB4sICAgIgCuAtAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVYDIAjQCNAI0ALwCNANUE0ACNAI0AFQCNgACAAIAAgQeLCAgICIArgLUICIAACN8QEgDDAMQAxWFYAB8AxwDIYVkAIQDGYVoAyQAOACMAygDLACYAzAAVABUAFQAnAE8AjQCNYWIALwCNAH8AjQGqA8AAjQCNYWoAjV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgGsICIEHlgiAGgiA1oCdCAiBB5UIEwAAAAEnCxaP0wA4ADkADmFuYXEAYKIBswG0gEaAR6JhcmFzgQeXgQeigDbZAB8AI2F2AA4AJmF3ACEAfmF4A+EBswB/AJ4AFQAnAC8AjWGAXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQeUgEaAGoA9gACABAiBB5jTADgAOQAOYYJhiwBgqAHJAcoBywHMAc0BzgHPAdCASoBLgEyATYBOgE+AUIBRqGGMYY1hjmGPYZBhkWGSYZOBB5mBB5qBB5uBB52BB56BB5+BB6CBB6GANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFWFyAI0AjQCNAC8AjQDVAckAjQCNABUAjYAAgDOAAIEHlwgICAiAK4BKCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVhcgCNAI0AjQAvAI0A1QHKAI0AjQAVAI2AAIAAgACBB5cICAgIgCuASwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABVhtQAVYXIAjQCNAI0ALwCNANUBywCNAI0AFQCNgACBB5yAAIEHlwgICAiAK4BMCAiAAAjTADgAOQAOYcNhxABgoKCANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFWFyAI0AjQCNAC8AjQDVAcwAjQCNABUAjYAAgDOAAIEHlwgICAiAK4BNCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQIlABVhcgCNAI0AjQAvAI0A1QHNAI0AjQAVAI2AAIBYgACBB5cICAgIgCuATggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVYXIAjQCNAI0ALwCNANUBzgCNAI0AFQCNgACAM4AAgQeXCAgICIArgE8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFWFyAI0AjQCNAC8AjQDVAc8AjQCNABUAjYAAgACAAIEHlwgICAiAK4BQCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVhcgCNAI0AjQAvAI0A1QHQAI0AjQAVAI2AAIAzgACBB5cICAgIgCuAUQgIgAAI2QAfACNiEgAOACZiEwAhAH5iFAPhAbQAfwCeABUAJwAvAI1iHF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEHlIBHgBqAPYAAgAQIgQej0wA4ADkADmIeYiUAYKYCcQJzAm4CbwJwAnKAYYBjgF6AX4BggGKmYiZiJ2IoYiliKmIrgQekgQelgQemgQengQeogQepgDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQBaABVhcwCNAI0AjQAvAI0A1QJxAI0AjQAVAI2AAIEE9oAAgQeiCAgICIArgGEICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFWFzAI0AjQCNAC8AjQDVAnMAjQCNABUAjYAAgDOAAIEHoggICAiAK4BjCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQKHABVhcwCNAI0AjQAvAI0A1QJuAI0AjQAVAI2AAIBmgACBB6IICAgIgCuAXggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABU+KwAVYXMAjQCNAI0ALwCNANUCbwCNAI0AFQCNgACBBPOAAIEHoggICAiAK4BfCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQKHABVhcwCNAI0AjQAvAI0A1QJwAI0AjQAVAI2AAIBmgACBB6IICAgIgCuAYAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUCJQAVYXMAjQCNAI0ALwCNANUCcgCNAI0AFQCNgACAWIAAgQeiCAgICIArgGIICIAACNIAOQAOYogA3aCAKt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFQG3AI0AjQCNAC8AjQDVAnIAjQCNABUAjYAAgDOAAIBcCAgICIArgGIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFQG3AI0AjQCNAC8AjQDVAnMAjQCNABUAjYAAgDOAAIBcCAgICIArgGMICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVA8MAFQG3AI0AjQCNAC8AjQDVAnQAjQCNABUAjYAAgL+AAIBcCAgICIArgGQICIAACN8QEgDDAMQAxWK4AB8AxwDIYrkAIQDGYroAyQAOACMAygDLACYAzAAVABUAFQAnAE4AjQCNYsIALwCNAH8AjQQQAY4AjQCNYsoAjV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgBgICIEHsAiAGgiAvoBACAiBB68IEpY4CSLTADgAOQAOYs5i0QBgogGzBBqARoChomLSYtOBB7GBB7yANtkAHwAjYtYADgAmYtcAIQB+YtgBkwGzAH8AngAVACcALwCNYuBfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBB66ARoAagD2AAIAECIEHstMAOAA5AA5i4mLrAGCoAckBygHLAcwBzQHOAc8B0IBKgEuATIBNgE6AT4BQgFGoYuxi7WLuYu9i8GLxYvJi84EHs4EHtIEHtYEHt4EHuIEHuYEHuoEHu4A23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVYtIAjQCNAI0ALwCNANUByQCNAI0AFQCNgACAM4AAgQexCAgICIArgEoICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFWLSAI0AjQCNAC8AjQDVAcoAjQCNABUAjYAAgACAAIEHsQgICAiAK4BLCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFWMVABVi0gCNAI0AjQAvAI0A1QHLAI0AjQAVAI2AAIEHtoAAgQexCAgICIArgEwICIAACNMAOAA5AA5jI2MkAGCgoIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVYtIAjQCNAI0ALwCNANUBzACNAI0AFQCNgACAM4AAgQexCAgICIArgE0ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAiUAFWLSAI0AjQCNAC8AjQDVAc0AjQCNABUAjYAAgFiAAIEHsQgICAiAK4BOCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVi0gCNAI0AjQAvAI0A1QHOAI0AjQAVAI2AAIAzgACBB7EICAgIgCuATwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVYtIAjQCNAI0ALwCNANUBzwCNAI0AFQCNgACAAIAAgQexCAgICIArgFAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFWLSAI0AjQCNAC8AjQDVAdAAjQCNABUAjYAAgDOAAIEHsQgICAiAK4BRCAiAAAjZAB8AI2NyAA4AJmNzACEAfmN0AZMEGgB/AJ4AFQAnAC8AjWN8XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQeugKGAGoA9gACABAiBB73TADgAOQAOY35jhgBgpwTKBMsEzATNBM4EzwTQgK+AsICxgLKAs4C0gLWnY4djiGOJY4pji2OMY42BB76BB7+BB8CBB8GBB8KBB8OBB8WANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFWLTAI0AjQCNAC8AjQDVBMoAjQCNABUAjYAAgACAAIEHvAgICAiAK4CvCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVi0wCNAI0AjQAvAI0A1QTLAI0AjQAVAI2AAIAzgACBB7wICAgIgCuAsAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVYtMAjQCNAI0ALwCNANUEzACNAI0AFQCNgACAAIAAgQe8CAgICIArgLEICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVC2gAFWLTAI0AjQCNAC8AjQDVBM0AjQCNABUAjYAAgQEygACBB7wICAgIgCuAsggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVYtMAjQCNAI0ALwCNANUEzgCNAI0AFQCNgACAAIAAgQe8CAgICIArgLMICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVY9wAFWLTAI0AjQCNAC8AjQDVBM8AjQCNABUAjYAAgQfEgACBB7wICAgIgCuAtAgIgAAIXxAZTlNTZWN1cmVVbmFyY2hpdmVGcm9tRGF0Yd8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFWLTAI0AjQCNAC8AjQDVBNAAjQCNABUAjYAAgACAAIEHvAgICAiAK4C1CAiAAAjfEBIAwwDEAMVj+gAfAMcAyGP7ACEAxmP8AMkADgAjAMoAywAmAMwAFQAVABUAJwBOAI0AjWQEAC8AjQB/AI0EEAGPAI0AjWQMAI1fECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIAYCAiBB8gIgBoIgL6AQQgIgQfHCBMAAAABEmfDXdMAOAA5AA5kEGQTAGCiAbMEGoBGgKGiZBRkFYEHyYEH1IA22QAfACNkGAAOACZkGQAhAH5kGgGUAbMAfwCeABUAJwAvAI1kIl8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEHxoBGgBqAPYAAgAQIgQfK0wA4ADkADmQkZC0AYKgByQHKAcsBzAHNAc4BzwHQgEqAS4BMgE2AToBPgFCAUahkLmQvZDBkMWQyZDNkNGQ1gQfLgQfMgQfNgQfPgQfQgQfRgQfSgQfTgDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVkFACNAI0AjQAvAI0A1QHJAI0AjQAVAI2AAIAzgACBB8kICAgIgCuASggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVZBQAjQCNAI0ALwCNANUBygCNAI0AFQCNgACAAIAAgQfJCAgICIArgEsICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVZFcAFWQUAI0AjQCNAC8AjQDVAcsAjQCNABUAjYAAgQfOgACBB8kICAgIgCuATAgIgAAI0wA4ADkADmRlZGYAYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVkFACNAI0AjQAvAI0A1QHMAI0AjQAVAI2AAIAzgACBB8kICAgIgCuATQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUCJQAVZBQAjQCNAI0ALwCNANUBzQCNAI0AFQCNgACAWIAAgQfJCAgICIArgE4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFWQUAI0AjQCNAC8AjQDVAc4AjQCNABUAjYAAgDOAAIEHyQgICAiAK4BPCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVkFACNAI0AjQAvAI0A1QHPAI0AjQAVAI2AAIAAgACBB8kICAgIgCuAUAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVZBQAjQCNAI0ALwCNANUB0ACNAI0AFQCNgACAM4AAgQfJCAgICIArgFEICIAACNkAHwAjZLQADgAmZLUAIQB+ZLYBlAQaAH8AngAVACcALwCNZL5fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBB8aAoYAagD2AAIAECIEH1dMAOAA5AA5kwGTIAGCnBMoEywTMBM0EzgTPBNCAr4CwgLGAsoCzgLSAtadkyWTKZMtkzGTNZM5kz4EH1oEH14EH2IEH2YEH2oEH24EH3IA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVZBUAjQCNAI0ALwCNANUEygCNAI0AFQCNgACAAIAAgQfUCAgICIArgK8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFWQVAI0AjQCNAC8AjQDVBMsAjQCNABUAjYAAgDOAAIEH1AgICAiAK4CwCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVkFQCNAI0AjQAvAI0A1QTMAI0AjQAVAI2AAIAAgACBB9QICAgIgCuAsQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUFEAAVZBUAjQCNAI0ALwCNANUEzQCNAI0AFQCNgACAuoAAgQfUCAgICIArgLIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFWQVAI0AjQCNAC8AjQDVBM4AjQCNABUAjYAAgACAAIEH1AgICAiAK4CzCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVkFQCNAI0AjQAvAI0A1QTPAI0AjQAVAI2AAIAAgACBB9QICAgIgCuAtAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVZBUAjQCNAI0ALwCNANUE0ACNAI0AFQCNgACAAIAAgQfUCAgICIArgLUICIAACN8QEgDDAMQAxWU7AB8AxwDIZTwAIQDGZT0AyQAOACMAygDLACYAzAAVABUAFQAnAE4AjQCNZUUALwCNAH8AjQQQAZAAjQCNZU0AjV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgBgICIEH3wiAGgiAvoBCCAiBB94IEq/qui7TADgAOQAOZVFlVABgogGzBBqARoChomVVZVaBB+CBB+uANtkAHwAjZVkADgAmZVoAIQB+ZVsBlQGzAH8AngAVACcALwCNZWNfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBB92ARoAagD2AAIAECIEH4dMAOAA5AA5lZWVuAGCoAckBygHLAcwBzQHOAc8B0IBKgEuATIBNgE6AT4BQgFGoZW9lcGVxZXJlc2V0ZXVldoEH4oEH44EH5IEH5oEH54EH6IEH6YEH6oA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVZVUAjQCNAI0ALwCNANUByQCNAI0AFQCNgACAM4AAgQfgCAgICIArgEoICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFWVVAI0AjQCNAC8AjQDVAcoAjQCNABUAjYAAgACAAIEH4AgICAiAK4BLCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFWWYABVlVQCNAI0AjQAvAI0A1QHLAI0AjQAVAI2AAIEH5YAAgQfgCAgICIArgEwICIAACNMAOAA5AA5lpmWnAGCgoIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVZVUAjQCNAI0ALwCNANUBzACNAI0AFQCNgACAM4AAgQfgCAgICIArgE0ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAiUAFWVVAI0AjQCNAC8AjQDVAc0AjQCNABUAjYAAgFiAAIEH4AgICAiAK4BOCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVlVQCNAI0AjQAvAI0A1QHOAI0AjQAVAI2AAIAzgACBB+AICAgIgCuATwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVZVUAjQCNAI0ALwCNANUBzwCNAI0AFQCNgACAAIAAgQfgCAgICIArgFAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFWVVAI0AjQCNAC8AjQDVAdAAjQCNABUAjYAAgDOAAIEH4AgICAiAK4BRCAiAAAjZAB8AI2X1AA4AJmX2ACEAfmX3AZUEGgB/AJ4AFQAnAC8AjWX/XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQfdgKGAGoA9gACABAiBB+zTADgAOQAOZgFmCQBgpwTKBMsEzATNBM4EzwTQgK+AsICxgLKAs4C0gLWnZgpmC2YMZg1mDmYPZhCBB+2BB+6BB++BB/CBB/GBB/KBB/OANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFWVWAI0AjQCNAC8AjQDVBMoAjQCNABUAjYAAgACAAIEH6wgICAiAK4CvCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVlVgCNAI0AjQAvAI0A1QTLAI0AjQAVAI2AAIAzgACBB+sICAgIgCuAsAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVZVYAjQCNAI0ALwCNANUEzACNAI0AFQCNgACAAIAAgQfrCAgICIArgLEICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVBRAAFWVWAI0AjQCNAC8AjQDVBM0AjQCNABUAjYAAgLqAAIEH6wgICAiAK4CyCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVlVgCNAI0AjQAvAI0A1QTOAI0AjQAVAI2AAIAAgACBB+sICAgIgCuAswgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVZVYAjQCNAI0ALwCNANUEzwCNAI0AFQCNgACAAIAAgQfrCAgICIArgLQICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFWVWAI0AjQCNAC8AjQDVBNAAjQCNABUAjYAAgACAAIEH6wgICAiAK4C1CAiAAAjSADkADmZ8AN2ggCrfEBBmf2aAZoFmggAfZoNmhAAhZoVmhgAOACNmh2aIACYAfgB/ZooAJwAnABNmjgCFAC8AJwB/AIgAPwB/ZpVmlgCNXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zZHVwbGljYXRlc18QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNzdG9yYWdlgBqBCAiABIAEgAKBB/eBAu+ABIAagQLxgAqAGoEIgoEH9ggSoFFOzNMAOAA5AA5mmmacAGChAJKAHKFmnYEH+IA22QAfACNmoAAOACZmoQAhAH5mogBSAJIAfwCeABUAJwAvAI1mql8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEH9YAcgBqAPYAAgAQIgQf50wA4ADkADmasZrYAYKkApQCmAKcAqACpAKoAqwCsAK2AH4AggCGAIoAjgCSAJYAmgCepZrdmuGa5Zrpmu2a8Zr1mvma/gQf6gQf8gQf9gQf/gQgAgQgCgQgDgQgFgQgGgDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFWbDABVmnQCNAI0AjQAvAI0A1QClAI0AjQAVAI2AAIEH+4AAgQf4CAgICIArgB8ICIAACNIAOQAOZtEA3aCAKt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFWadAI0AjQCNAC8AjQDVAKYAjQCNABUAjYAAgACAAIEH+AgICAiAK4AgCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFWbkABVmnQCNAI0AjQAvAI0A1QCnAI0AjQAVAI2AAIEH/oAAgQf4CAgICIArgCEICIAACNIAOQAOZvIA3aCAKt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFWadAI0AjQCNAC8AjQDVAKgAjQCNABUAjYAAgACAAIEH+AgICAiAK4AiCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFWcFABVmnQCNAI0AjQAvAI0A1QCpAI0AjQAVAI2AAIEIAYAAgQf4CAgICIArgCMICIAACNIAOQAOZxMA3aCAKt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFWadAI0AjQCNAC8AjQDVAKoAjQCNABUAjYAAgDOAAIEH+AgICAiAK4AkCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFWcmABVmnQCNAI0AjQAvAI0A1QCrAI0AjQAVAI2AAIEIBIAAgQf4CAgICIArgCUICIAACNMAOAA5AA5nNGc1AGCgoIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBVgAVZp0AjQCNAI0ALwCNANUArACNAI0AFQCNgACAOIAAgQf4CAgICIArgCYICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVZ0gAFWadAI0AjQCNAC8AjQDVAK0AjQCNABUAjYAAgQgHgACBB/gICAgIgCuAJwgIgAAIXUNEQ29udGFjdEl0ZW3TADgAOQAOZ1dnXQBgpWdYZ1lnWmdbZ1yBCAmBCAqBCAuBCAyBCA2lZ15nX2dgZ2FnYoEIDoEIJYEIPIEIVIEIa4A2W3BlZXJBZGRyZXNzXXRhcmdldEFkZHJlc3NZdXBkYXRlZEF0WmlkZW50aWZpZXJYcGVlck5hbWXfEBIAwwDEAMVnagAfAMcAyGdrACEAxmdsAMkADgAjAMoAywAmAMwAFQAVABUAJwBSAI0AjWd0AC8AjQB/AI0EEGdYAI0AjWd8AI1fECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEH9QgIgQgQCIAaCIC+gQgJCAiBCA8IElhLJF/TADgAOQAOZ4BngwBgogGzBBqARoChomeEZ4WBCBGBCByANtkAHwAjZ4gADgAmZ4kAIQB+Z4pnXgGzAH8AngAVACcALwCNZ5JfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCA6ARoAagD2AAIAECIEIEtMAOAA5AA5nlGedAGCoAckBygHLAcwBzQHOAc8B0IBKgEuATIBNgE6AT4BQgFGoZ55nn2egZ6FnomejZ6RnpYEIE4EIFIEIFYEIF4EIGIEIGYEIGoEIG4A23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVZ4QAjQCNAI0ALwCNANUByQCNAI0AFQCNgACAM4AAgQgRCAgICIArgEoICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFWeEAI0AjQCNAC8AjQDVAcoAjQCNABUAjYAAgACAAIEIEQgICAiAK4BLCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFWfHABVnhACNAI0AjQAvAI0A1QHLAI0AjQAVAI2AAIEIFoAAgQgRCAgICIArgEwICIAACNMAOAA5AA5n1WfWAGCgoIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVZ4QAjQCNAI0ALwCNANUBzACNAI0AFQCNgACAM4AAgQgRCAgICIArgE0ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAiUAFWeEAI0AjQCNAC8AjQDVAc0AjQCNABUAjYAAgFiAAIEIEQgICAiAK4BOCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVnhACNAI0AjQAvAI0A1QHOAI0AjQAVAI2AAIAzgACBCBEICAgIgCuATwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVZ4QAjQCNAI0ALwCNANUBzwCNAI0AFQCNgACAAIAAgQgRCAgICIArgFAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFWeEAI0AjQCNAC8AjQDVAdAAjQCNABUAjYAAgDOAAIEIEQgICAiAK4BRCAiAAAjZAB8AI2gkAA4AJmglACEAfmgmZ14EGgB/AJ4AFQAnAC8AjWguXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQgOgKGAGoA9gACABAiBCB3TADgAOQAOaDBoOABgpwTKBMsEzATNBM4EzwTQgK+AsICxgLKAs4C0gLWnaDloOmg7aDxoPWg+aD+BCB6BCB+BCCCBCCGBCCKBCCOBCCSANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFWeFAI0AjQCNAC8AjQDVBMoAjQCNABUAjYAAgACAAIEIHAgICAiAK4CvCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVnhQCNAI0AjQAvAI0A1QTLAI0AjQAVAI2AAIAzgACBCBwICAgIgCuAsAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVZ4UAjQCNAI0ALwCNANUEzACNAI0AFQCNgACAAIAAgQgcCAgICIArgLEICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVBRAAFWeFAI0AjQCNAC8AjQDVBM0AjQCNABUAjYAAgLqAAIEIHAgICAiAK4CyCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVnhQCNAI0AjQAvAI0A1QTOAI0AjQAVAI2AAIAAgACBCBwICAgIgCuAswgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVZ4UAjQCNAI0ALwCNANUEzwCNAI0AFQCNgACAAIAAgQgcCAgICIArgLQICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFWeFAI0AjQCNAC8AjQDVBNAAjQCNABUAjYAAgACAAIEIHAgICAiAK4C1CAiAAAjfEBIAwwDEAMVoqwAfAMcAyGisACEAxmitAMkADgAjAMoAywAmAMwAFQAVABUAJwBSAI0AjWi1AC8AjQB/AI0EEGdZAI0AjWi9AI1fECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEH9QgIgQgnCIAaCIC+gQgKCAiBCCYIErtlBv3TADgAOQAOaMFoxABgogGzBBqARoChomjFaMaBCCiBCDOANtkAHwAjaMkADgAmaMoAIQB+aMtnXwGzAH8AngAVACcALwCNaNNfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCCWARoAagD2AAIAECIEIKdMAOAA5AA5o1WjeAGCoAckBygHLAcwBzQHOAc8B0IBKgEuATIBNgE6AT4BQgFGoaN9o4GjhaOJo42jkaOVo5oEIKoEIK4EILIEILoEIL4EIMIEIMYEIMoA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVaMUAjQCNAI0ALwCNANUByQCNAI0AFQCNgACAM4AAgQgoCAgICIArgEoICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFWjFAI0AjQCNAC8AjQDVAcoAjQCNABUAjYAAgACAAIEIKAgICAiAK4BLCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFWkIABVoxQCNAI0AjQAvAI0A1QHLAI0AjQAVAI2AAIEILYAAgQgoCAgICIArgEwICIAACNMAOAA5AA5pFmkXAGCgoIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVaMUAjQCNAI0ALwCNANUBzACNAI0AFQCNgACAM4AAgQgoCAgICIArgE0ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAiUAFWjFAI0AjQCNAC8AjQDVAc0AjQCNABUAjYAAgFiAAIEIKAgICAiAK4BOCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVoxQCNAI0AjQAvAI0A1QHOAI0AjQAVAI2AAIAzgACBCCgICAgIgCuATwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVaMUAjQCNAI0ALwCNANUBzwCNAI0AFQCNgACAAIAAgQgoCAgICIArgFAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFWjFAI0AjQCNAC8AjQDVAdAAjQCNABUAjYAAgDOAAIEIKAgICAiAK4BRCAiAAAjZAB8AI2llAA4AJmlmACEAfmlnZ18EGgB/AJ4AFQAnAC8AjWlvXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQglgKGAGoA9gACABAiBCDTTADgAOQAOaXFpeQBgpwTKBMsEzATNBM4EzwTQgK+AsICxgLKAs4C0gLWnaXppe2l8aX1pfml/aYCBCDWBCDaBCDeBCDiBCDmBCDqBCDuANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFWjGAI0AjQCNAC8AjQDVBMoAjQCNABUAjYAAgACAAIEIMwgICAiAK4CvCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVoxgCNAI0AjQAvAI0A1QTLAI0AjQAVAI2AAIAzgACBCDMICAgIgCuAsAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVaMYAjQCNAI0ALwCNANUEzACNAI0AFQCNgACAAIAAgQgzCAgICIArgLEICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVBRAAFWjGAI0AjQCNAC8AjQDVBM0AjQCNABUAjYAAgLqAAIEIMwgICAiAK4CyCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVoxgCNAI0AjQAvAI0A1QTOAI0AjQAVAI2AAIAAgACBCDMICAgIgCuAswgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVaMYAjQCNAI0ALwCNANUEzwCNAI0AFQCNgACAAIAAgQgzCAgICIArgLQICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFWjGAI0AjQCNAC8AjQDVBNAAjQCNABUAjYAAgACAAIEIMwgICAiAK4C1CAiAAAjfEBIAwwDEAMVp7AAfAMcAyGntACEAxmnuAMkADgAjAMoAywAmAMwAFQAVABUAJwBSAI0AjWn2AC8AjQB/AI0EEGdaAI0AjWn+AI1fECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEH9QgIgQg+CIAaCIC+gQgLCAiBCD0IEusnqYvTADgAOQAOagJqBQBgogGzBBqARoChomoGageBCD+BCEqANtkAHwAjagoADgAmagsAIQB+agxnYAGzAH8AngAVACcALwCNahRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCDyARoAagD2AAIAECIEIQNMAOAA5AA5qFmofAGCoAckBygHLAcwBzQHOAc8B0IBKgEuATIBNgE6AT4BQgFGoaiBqIWoiaiNqJGolaiZqJ4EIQYEIQoEIQ4EIRYEIRoEIR4EISIEISYA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVagYAjQCNAI0ALwCNANUByQCNAI0AFQCNgACAM4AAgQg/CAgICIArgEoICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFWoGAI0AjQCNAC8AjQDVAcoAjQCNABUAjYAAgACAAIEIPwgICAiAK4BLCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFWpJABVqBgCNAI0AjQAvAI0A1QHLAI0AjQAVAI2AAIEIRIAAgQg/CAgICIArgEwICIAACNMAOAA5AA5qV2pYAGCgoIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVagYAjQCNAI0ALwCNANUBzACNAI0AFQCNgACAM4AAgQg/CAgICIArgE0ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAiUAFWoGAI0AjQCNAC8AjQDVAc0AjQCNABUAjYAAgFiAAIEIPwgICAiAK4BOCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVqBgCNAI0AjQAvAI0A1QHOAI0AjQAVAI2AAIAzgACBCD8ICAgIgCuATwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVagYAjQCNAI0ALwCNANUBzwCNAI0AFQCNgACAAIAAgQg/CAgICIArgFAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFWoGAI0AjQCNAC8AjQDVAdAAjQCNABUAjYAAgDOAAIEIPwgICAiAK4BRCAiAAAjZAB8AI2qmAA4AJmqnACEAfmqoZ2AEGgB/AJ4AFQAnAC8AjWqwXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQg8gKGAGoA9gACABAiBCEvTADgAOQAOarJqugBgpwTKBMsEzATNBM4EzwTQgK+AsICxgLKAs4C0gLWnartqvGq9ar5qv2rAasGBCEyBCE2BCE6BCE+BCFGBCFKBCFOANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVB3YAFWoHAI0AjQCNAC8AjQDVBMoAjQCNABUAjYAAgOiAAIEISggICAiAK4CvCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVqBwCNAI0AjQAvAI0A1QTLAI0AjQAVAI2AAIAzgACBCEoICAgIgCuAsAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVagcAjQCNAI0ALwCNANUEzACNAI0AFQCNgACAAIAAgQhKCAgICIArgLEICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVavIAFWoHAI0AjQCNAC8AjQDVBM0AjQCNABUAjYAAgQhQgACBCEoICAgIgCuAsggIgAAIEQEs3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVagcAjQCNAI0ALwCNANUEzgCNAI0AFQCNgACAAIAAgQhKCAgICIArgLMICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFWoHAI0AjQCNAC8AjQDVBM8AjQCNABUAjYAAgACAAIEISggICAiAK4C0CAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVqBwCNAI0AjQAvAI0A1QTQAI0AjQAVAI2AAIAAgACBCEoICAgIgCuAtQgIgAAI3xASAMMAxADFay4AHwDHAMhrLwAhAMZrMADJAA4AIwDKAMsAJgDMABUAFQAVACcAUgCNAI1rOAAvAI0AfwCNBBBnWwCNAI1rQACNXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBB/UICIEIVgiAGgiAvoEIDAgIgQhVCBMAAAABJXGvo9MAOAA5AA5rRGtHAGCiAbMEGoBGgKGia0hrSYEIV4EIYoA22QAfACNrTAAOACZrTQAhAH5rTmdhAbMAfwCeABUAJwAvAI1rVl8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEIVIBGgBqAPYAAgAQIgQhY0wA4ADkADmtYa2EAYKgByQHKAcsBzAHNAc4BzwHQgEqAS4BMgE2AToBPgFCAUahrYmtja2RrZWtma2draGtpgQhZgQhagQhbgQhdgQhegQhfgQhggQhhgDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVrSACNAI0AjQAvAI0A1QHJAI0AjQAVAI2AAIAzgACBCFcICAgIgCuASggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVa0gAjQCNAI0ALwCNANUBygCNAI0AFQCNgACAAIAAgQhXCAgICIArgEsICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVa4sAFWtIAI0AjQCNAC8AjQDVAcsAjQCNABUAjYAAgQhcgACBCFcICAgIgCuATAgIgAAI0wA4ADkADmuZa5oAYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVrSACNAI0AjQAvAI0A1QHMAI0AjQAVAI2AAIAzgACBCFcICAgIgCuATQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUCJQAVa0gAjQCNAI0ALwCNANUBzQCNAI0AFQCNgACAWIAAgQhXCAgICIArgE4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFWtIAI0AjQCNAC8AjQDVAc4AjQCNABUAjYAAgDOAAIEIVwgICAiAK4BPCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVrSACNAI0AjQAvAI0A1QHPAI0AjQAVAI2AAIAAgACBCFcICAgIgCuAUAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVa0gAjQCNAI0ALwCNANUB0ACNAI0AFQCNgACAM4AAgQhXCAgICIArgFEICIAACNkAHwAja+gADgAma+kAIQB+a+pnYQQaAH8AngAVACcALwCNa/JfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCFSAoYAagD2AAIAECIEIY9MAOAA5AA5r9Gv8AGCnBMoEywTMBM0EzgTPBNCAr4CwgLGAsoCzgLSAtadr/Wv+a/9sAGwBbAJsA4EIZIEIZYEIZoEIZ4EIaIEIaYEIaoA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVa0kAjQCNAI0ALwCNANUEygCNAI0AFQCNgACAAIAAgQhiCAgICIArgK8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFWtJAI0AjQCNAC8AjQDVBMsAjQCNABUAjYAAgDOAAIEIYggICAiAK4CwCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVrSQCNAI0AjQAvAI0A1QTMAI0AjQAVAI2AAIAAgACBCGIICAgIgCuAsQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUFEAAVa0kAjQCNAI0ALwCNANUEzQCNAI0AFQCNgACAuoAAgQhiCAgICIArgLIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFWtJAI0AjQCNAC8AjQDVBM4AjQCNABUAjYAAgACAAIEIYggICAiAK4CzCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVrSQCNAI0AjQAvAI0A1QTPAI0AjQAVAI2AAIAAgACBCGIICAgIgCuAtAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVa0kAjQCNAI0ALwCNANUE0ACNAI0AFQCNgACAAIAAgQhiCAgICIArgLUICIAACN8QEgDDAMQAxWxvAB8AxwDIbHAAIQDGbHEAyQAOACMAygDLACYAzAAVABUAFQAnAFIAjQCNbHkALwCNAH8AjQQQZ1wAjQCNbIEAjV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQf1CAiBCG0IgBoIgL6BCA0ICIEIbAgSoERHUdMAOAA5AA5shWyIAGCiAbMEGoBGgKGibIlsioEIboEIeYA22QAfACNsjQAOACZsjgAhAH5sj2diAbMAfwCeABUAJwAvAI1sl18QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEIa4BGgBqAPYAAgAQIgQhv0wA4ADkADmyZbKIAYKgByQHKAcsBzAHNAc4BzwHQgEqAS4BMgE2AToBPgFCAUahso2ykbKVspmynbKhsqWyqgQhwgQhxgQhygQh0gQh1gQh2gQh3gQh4gDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVsiQCNAI0AjQAvAI0A1QHJAI0AjQAVAI2AAIAzgACBCG4ICAgIgCuASggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVbIkAjQCNAI0ALwCNANUBygCNAI0AFQCNgACAAIAAgQhuCAgICIArgEsICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVbMwAFWyJAI0AjQCNAC8AjQDVAcsAjQCNABUAjYAAgQhzgACBCG4ICAgIgCuATAgIgAAI0wA4ADkADmzabNsAYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVsiQCNAI0AjQAvAI0A1QHMAI0AjQAVAI2AAIAzgACBCG4ICAgIgCuATQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUCJQAVbIkAjQCNAI0ALwCNANUBzQCNAI0AFQCNgACAWIAAgQhuCAgICIArgE4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFWyJAI0AjQCNAC8AjQDVAc4AjQCNABUAjYAAgDOAAIEIbggICAiAK4BPCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVsiQCNAI0AjQAvAI0A1QHPAI0AjQAVAI2AAIAAgACBCG4ICAgIgCuAUAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVbIkAjQCNAI0ALwCNANUB0ACNAI0AFQCNgACAM4AAgQhuCAgICIArgFEICIAACNkAHwAjbSkADgAmbSoAIQB+bStnYgQaAH8AngAVACcALwCNbTNfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCGuAoYAagD2AAIAECIEIetMAOAA5AA5tNW09AGCnBMoEywTMBM0EzgTPBNCAr4CwgLGAsoCzgLSAtadtPm0/bUBtQW1CbUNtRIEIe4EIfIEIfYEIfoEIf4EIgIEIgYA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVbIoAjQCNAI0ALwCNANUEygCNAI0AFQCNgACAAIAAgQh5CAgICIArgK8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFWyKAI0AjQCNAC8AjQDVBMsAjQCNABUAjYAAgDOAAIEIeQgICAiAK4CwCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVsigCNAI0AjQAvAI0A1QTMAI0AjQAVAI2AAIAAgACBCHkICAgIgCuAsQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUFEAAVbIoAjQCNAI0ALwCNANUEzQCNAI0AFQCNgACAuoAAgQh5CAgICIArgLIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFWyKAI0AjQCNAC8AjQDVBM4AjQCNABUAjYAAgACAAIEIeQgICAiAK4CzCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVsigCNAI0AjQAvAI0A1QTPAI0AjQAVAI2AAIAAgACBCHkICAgIgCuAtAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVbIoAjQCNAI0ALwCNANUE0ACNAI0AFQCNgACAAIAAgQh5CAgICIArgLUICIAACNIAOQAObbAA3aCAKt8QEG2zbbRttW22AB9tt224ACFtuW26AA4AI227bbwAJgB+AH9tvgAnACcAE23CAIUALwAnAH8AiABAAH9tyW3KAI1fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2VfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNkdXBsaWNhdGVzXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3N0b3JhZ2WAGoEIloAEgASAAoEIhYEC74AEgBqBAvGAC4AagQltgQiECBLnTawM0wA4ADkADm3ObdAAYKEAkoAcoW3RgQiGgDbZAB8AI23UAA4AJm3VACEAfm3WAFMAkgB/AJ4AFQAnAC8AjW3eXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQiDgByAGoA9gACABAiBCIfTADgAOQAObeBt6gBgqQClAKYApwCoAKkAqgCrAKwArYAfgCCAIYAigCOAJIAlgCaAJ6lt623sbe1t7m3vbfBt8W3ybfOBCIiBCIqBCIuBCI2BCI6BCJCBCJGBCJOBCJSANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVbfcAFW3RAI0AjQCNAC8AjQDVAKUAjQCNABUAjYAAgQiJgACBCIYICAgIgCuAHwgIgAAI0gA5AA5uBQDdoIAq3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVbdEAjQCNAI0ALwCNANUApgCNAI0AFQCNgACAAIAAgQiGCAgICIArgCAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVbhgAFW3RAI0AjQCNAC8AjQDVAKcAjQCNABUAjYAAgQiMgACBCIYICAgIgCuAIQgIgAAI0gA5AA5uJgDdoIAq3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVbdEAjQCNAI0ALwCNANUAqACNAI0AFQCNgACAAIAAgQiGCAgICIArgCIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVbjkAFW3RAI0AjQCNAC8AjQDVAKkAjQCNABUAjYAAgQiPgACBCIYICAgIgCuAIwgIgAAI0gA5AA5uRwDdoIAq3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVbdEAjQCNAI0ALwCNANUAqgCNAI0AFQCNgACAM4AAgQiGCAgICIArgCQICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVbloAFW3RAI0AjQCNAC8AjQDVAKsAjQCNABUAjYAAgQiSgACBCIYICAgIgCuAJQgIgAAI0wA4ADkADm5obmkAYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQFWABVt0QCNAI0AjQAvAI0A1QCsAI0AjQAVAI2AAIA4gACBCIYICAgIgCuAJggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABVufAAVbdEAjQCNAI0ALwCNANUArQCNAI0AFQCNgACBCJWAAIEIhggICAiAK4AnCAiAAAhfEBlDRFBvbGthc3dhcFJlbW90ZVNldHRpbmdz0wA4ADkADm6LbpEAYKVujG6Nbo5uj26QgQiXgQiYgQiZgQiagQibpW6SbpNulG6VbpaBCJyBCLSBCMyBCOOBCVaANl8QEGF2YWlsYWJsZVNvdXJjZXNdZm9yY2VTbWFydElkc1h4c3R1c2RJZF8QD2F2YWlsYWJsZURleElkc1d2ZXJzaW9u3xASAMMAxADFbp4AHwDHAMhunwAhAMZuoADJAA4AIwDKAMsAJgDMABUAFQAVACcAUwCNAI1uqAAvAI0AfwCNBBBujACNAI1usACNXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBCIMICIEIngiAGgiAvoEIlwgIgQidCBKUBmKV0wA4ADkADm60brcAYKIBswQagEaAoaJuuG65gQifgQiqgDbZAB8AI268AA4AJm69ACEAfm6+bpIBswB/AJ4AFQAnAC8AjW7GXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQicgEaAGoA9gACABAiBCKDTADgAOQAObshu0QBgqAHJAcoBywHMAc0BzgHPAdCASoBLgEyATYBOgE+AUIBRqG7SbtNu1G7VbtZu127YbtmBCKGBCKKBCKOBCKWBCKaBCKeBCKiBCKmANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFW64AI0AjQCNAC8AjQDVAckAjQCNABUAjYAAgDOAAIEInwgICAiAK4BKCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVuuACNAI0AjQAvAI0A1QHKAI0AjQAVAI2AAIAAgACBCJ8ICAgIgCuASwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABVu+wAVbrgAjQCNAI0ALwCNANUBywCNAI0AFQCNgACBCKSAAIEInwgICAiAK4BMCAiAAAjTADgAOQAObwlvCgBgoKCANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFW64AI0AjQCNAC8AjQDVAcwAjQCNABUAjYAAgDOAAIEInwgICAiAK4BNCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVuuACNAI0AjQAvAI0A1QHNAI0AjQAVAI2AAIAzgACBCJ8ICAgIgCuATggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVbrgAjQCNAI0ALwCNANUBzgCNAI0AFQCNgACAM4AAgQifCAgICIArgE8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFW64AI0AjQCNAC8AjQDVAc8AjQCNABUAjYAAgACAAIEInwgICAiAK4BQCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVuuACNAI0AjQAvAI0A1QHQAI0AjQAVAI2AAIAzgACBCJ8ICAgIgCuAUQgIgAAI2QAfACNvWAAOACZvWQAhAH5vWm6SBBoAfwCeABUAJwAvAI1vYl8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEInIChgBqAPYAAgAQIgQir0wA4ADkADm9kb2wAYKcEygTLBMwEzQTOBM8E0ICvgLCAsYCygLOAtIC1p29tb25vb29wb3Fvcm9zgQisgQitgQiugQivgQiwgQixgQizgDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVuuQCNAI0AjQAvAI0A1QTKAI0AjQAVAI2AAIAAgACBCKoICAgIgCuArwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVbrkAjQCNAI0ALwCNANUEywCNAI0AFQCNgACAM4AAgQiqCAgICIArgLAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFW65AI0AjQCNAC8AjQDVBMwAjQCNABUAjYAAgACAAIEIqggICAiAK4CxCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQtoABVuuQCNAI0AjQAvAI0A1QTNAI0AjQAVAI2AAIEBMoAAgQiqCAgICIArgLIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFW65AI0AjQCNAC8AjQDVBM4AjQCNABUAjYAAgACAAIEIqggICAiAK4CzCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFW/CABVuuQCNAI0AjQAvAI0A1QTPAI0AjQAVAI2AAIEIsoAAgQiqCAgICIArgLQICIAACF8QJE5TU2VjdXJlVW5hcmNoaXZlRnJvbURhdGFUcmFuc2Zvcm1lct8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFW65AI0AjQCNAC8AjQDVBNAAjQCNABUAjYAAgACAAIEIqggICAiAK4C1CAiAAAjfEBIAwwDEAMVv4AAfAMcAyG/hACEAxm/iAMkADgAjAMoAywAmAMwAFQAVABUAJwBTAI0AjW/qAC8AjQB/AI0EEG6NAI0AjW/yAI1fECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEIgwgIgQi2CIAaCIC+gQiYCAiBCLUIEmi02brTADgAOQAOb/Zv+QBgogGzBBqARoChom/6b/uBCLeBCMKANtkAHwAjb/4ADgAmb/8AIQB+cABukwGzAH8AngAVACcALwCNcAhfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCLSARoAagD2AAIAECIEIuNMAOAA5AA5wCnATAGCoAckBygHLAcwBzQHOAc8B0IBKgEuATIBNgE6AT4BQgFGocBRwFXAWcBdwGHAZcBpwG4EIuYEIuoEIu4EIvYEIvoEIv4EIwIEIwYA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVb/oAjQCNAI0ALwCNANUByQCNAI0AFQCNgACAM4AAgQi3CAgICIArgEoICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFW/6AI0AjQCNAC8AjQDVAcoAjQCNABUAjYAAgACAAIEItwgICAiAK4BLCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFXA9ABVv+gCNAI0AjQAvAI0A1QHLAI0AjQAVAI2AAIEIvIAAgQi3CAgICIArgEwICIAACNMAOAA5AA5wS3BMAGCgoIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVb/oAjQCNAI0ALwCNANUBzACNAI0AFQCNgACAM4AAgQi3CAgICIArgE0ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFW/6AI0AjQCNAC8AjQDVAc0AjQCNABUAjYAAgDOAAIEItwgICAiAK4BOCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVv+gCNAI0AjQAvAI0A1QHOAI0AjQAVAI2AAIAzgACBCLcICAgIgCuATwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVb/oAjQCNAI0ALwCNANUBzwCNAI0AFQCNgACAAIAAgQi3CAgICIArgFAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFW/6AI0AjQCNAC8AjQDVAdAAjQCNABUAjYAAgDOAAIEItwgICAiAK4BRCAiAAAjZAB8AI3CaAA4AJnCbACEAfnCcbpMEGgB/AJ4AFQAnAC8AjXCkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQi0gKGAGoA9gACABAiBCMPTADgAOQAOcKZwrgBgpwTKBMsEzATNBM4EzwTQgK+AsICxgLKAs4C0gLWncK9wsHCxcLJws3C0cLWBCMSBCMWBCMaBCMeBCMiBCMmBCMuANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFW/7AI0AjQCNAC8AjQDVBMoAjQCNABUAjYAAgACAAIEIwggICAiAK4CvCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVv+wCNAI0AjQAvAI0A1QTLAI0AjQAVAI2AAIAzgACBCMIICAgIgCuAsAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVb/sAjQCNAI0ALwCNANUEzACNAI0AFQCNgACAAIAAgQjCCAgICIArgLEICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVC2gAFW/7AI0AjQCNAC8AjQDVBM0AjQCNABUAjYAAgQEygACBCMIICAgIgCuAsggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVb/sAjQCNAI0ALwCNANUEzgCNAI0AFQCNgACAAIAAgQjCCAgICIArgLMICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVcQQAFW/7AI0AjQCNAC8AjQDVBM8AjQCNABUAjYAAgQjKgACBCMIICAgIgCuAtAgIgAAIXxAkTlNTZWN1cmVVbmFyY2hpdmVGcm9tRGF0YVRyYW5zZm9ybWVy3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVb/sAjQCNAI0ALwCNANUE0ACNAI0AFQCNgACAAIAAgQjCCAgICIArgLUICIAACN8QEgDDAMQAxXEiAB8AxwDIcSMAIQDGcSQAyQAOACMAygDLACYAzAAVABUAFQAnAFMAjQCNcSwALwCNAH8AjQQQbo4AjQCNcTQAjV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQiDCAiBCM4IgBoIgL6BCJkICIEIzQgSr/ZKY9MAOAA5AA5xOHE7AGCiAbMEGoBGgKGicTxxPYEIz4EI2oA22QAfACNxQAAOACZxQQAhAH5xQm6UAbMAfwCeABUAJwAvAI1xSl8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEIzIBGgBqAPYAAgAQIgQjQ0wA4ADkADnFMcVUAYKgByQHKAcsBzAHNAc4BzwHQgEqAS4BMgE2AToBPgFCAUahxVnFXcVhxWXFacVtxXHFdgQjRgQjSgQjTgQjVgQjWgQjXgQjYgQjZgDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVxPACNAI0AjQAvAI0A1QHJAI0AjQAVAI2AAIAzgACBCM8ICAgIgCuASggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVcTwAjQCNAI0ALwCNANUBygCNAI0AFQCNgACAAIAAgQjPCAgICIArgEsICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVcX8AFXE8AI0AjQCNAC8AjQDVAcsAjQCNABUAjYAAgQjUgACBCM8ICAgIgCuATAgIgAAI0wA4ADkADnGNcY4AYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVxPACNAI0AjQAvAI0A1QHMAI0AjQAVAI2AAIAzgACBCM8ICAgIgCuATQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUCJQAVcTwAjQCNAI0ALwCNANUBzQCNAI0AFQCNgACAWIAAgQjPCAgICIArgE4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFXE8AI0AjQCNAC8AjQDVAc4AjQCNABUAjYAAgDOAAIEIzwgICAiAK4BPCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVxPACNAI0AjQAvAI0A1QHPAI0AjQAVAI2AAIAAgACBCM8ICAgIgCuAUAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVcTwAjQCNAI0ALwCNANUB0ACNAI0AFQCNgACAM4AAgQjPCAgICIArgFEICIAACNkAHwAjcdwADgAmcd0AIQB+cd5ulAQaAH8AngAVACcALwCNceZfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCMyAoYAagD2AAIAECIEI29MAOAA5AA5x6HHwAGCnBMoEywTMBM0EzgTPBNCAr4CwgLGAsoCzgLSAtadx8XHycfNx9HH1cfZx94EI3IEI3YEI3oEI34EI4IEI4YEI4oA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVcT0AjQCNAI0ALwCNANUEygCNAI0AFQCNgACAAIAAgQjaCAgICIArgK8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFXE9AI0AjQCNAC8AjQDVBMsAjQCNABUAjYAAgDOAAIEI2ggICAiAK4CwCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVxPQCNAI0AjQAvAI0A1QTMAI0AjQAVAI2AAIAAgACBCNoICAgIgCuAsQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUFEAAVcT0AjQCNAI0ALwCNANUEzQCNAI0AFQCNgACAuoAAgQjaCAgICIArgLIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFXE9AI0AjQCNAC8AjQDVBM4AjQCNABUAjYAAgACAAIEI2ggICAiAK4CzCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVxPQCNAI0AjQAvAI0A1QTPAI0AjQAVAI2AAIAAgACBCNoICAgIgCuAtAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVcT0AjQCNAI0ALwCNANUE0ACNAI0AFQCNgACAAIAAgQjaCAgICIArgLUICIAACN8QEgDDAMQAxXJjAB8AxwDIcmQAIQDGcmUAyQAOACMAygDLACYAzAAVABUAFQAnAFMAjQCNcm0ALwCNAH8AjQGqbo8AjQCNcnUAjV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQiDCAiBCOUIgBoIgNaBCJoICIEI5AgSsgUE+NMAOAA5AA5yeXJ8AGCiAbMBtIBGgEeicn1yfoEI5oEI8YA22QAfACNygQAOACZyggAhAH5yg26VAbMAfwCeABUAJwAvAI1yi18QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEI44BGgBqAPYAAgAQIgQjn0wA4ADkADnKNcpYAYKgByQHKAcsBzAHNAc4BzwHQgEqAS4BMgE2AToBPgFCAUahyl3KYcplymnKbcpxynXKegQjogQjpgQjqgQjsgQjtgQjugQjvgQjwgDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVyfQCNAI0AjQAvAI0A1QHJAI0AjQAVAI2AAIAzgACBCOYICAgIgCuASggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVcn0AjQCNAI0ALwCNANUBygCNAI0AFQCNgACAAIAAgQjmCAgICIArgEsICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVcsAAFXJ9AI0AjQCNAC8AjQDVAcsAjQCNABUAjYAAgQjrgACBCOYICAgIgCuATAgIgAAI0wA4ADkADnLOcs8AYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVyfQCNAI0AjQAvAI0A1QHMAI0AjQAVAI2AAIAzgACBCOYICAgIgCuATQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVcn0AjQCNAI0ALwCNANUBzQCNAI0AFQCNgACAM4AAgQjmCAgICIArgE4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFXJ9AI0AjQCNAC8AjQDVAc4AjQCNABUAjYAAgDOAAIEI5ggICAiAK4BPCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABVyfQCNAI0AjQAvAI0A1QHPAI0AjQAVAI2AAIAAgACBCOYICAgIgCuAUAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVcn0AjQCNAI0ALwCNANUB0ACNAI0AFQCNgACAM4AAgQjmCAgICIArgFEICIAACNkAHwAjcx0ADgAmcx4AIQB+cx9ulQG0AH8AngAVACcALwCNcydfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCOOAR4AagD2AAIAECIEI8tMAOAA5AA5zKXMwAGCmAnECcwJuAm8CcAJygGGAY4BegF+AYIBipnMxczJzM3M0czVzNoEI84EJUYEJUoEJU4EJVIEJVYA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAVwAVcn4AjQCNAI0ALwCNANUCcQCNAI0AFQCNgACBCPSAAIEI8QgICAiAK4BhCAiAAAjfEBBzSHNJc0pzSwAfc0xzTQAhc05zTwAOACNzUHNRACYAfgB/c1MAJwAnABNzVwCFAC8AJwB/AIgARAB/c15zXwCNXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zZHVwbGljYXRlc18QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNzdG9yYWdlgBqBCQeABIAEgAKBCPaBAu+ABIAagQLxgA+AGoEJUIEI9QgS0HKBqtMAOAA5AA5zY3NlAGChAJKAHKFzZoEI94A22QAfACNzaQAOACZzagAhAH5zawBXAJIAfwCeABUAJwAvAI1zc18QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEI9IAcgBqAPYAAgAQIgQj40wA4ADkADnN1c38AYKkApQCmAKcAqACpAKoAqwCsAK2AH4AggCGAIoAjgCSAJYAmgCepc4BzgXOCc4NzhHOFc4Zzh3OIgQj5gQj7gQj8gQj+gQj/gQkBgQkCgQkEgQkFgDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFXOMABVzZgCNAI0AjQAvAI0A1QClAI0AjQAVAI2AAIEI+oAAgQj3CAgICIArgB8ICIAACNIAOQAOc5oA3aCAKt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFXNmAI0AjQCNAC8AjQDVAKYAjQCNABUAjYAAgACAAIEI9wgICAiAK4AgCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFXOtABVzZgCNAI0AjQAvAI0A1QCnAI0AjQAVAI2AAIEI/YAAgQj3CAgICIArgCEICIAACNIAOQAOc7sA3aCAKt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFXNmAI0AjQCNAC8AjQDVAKgAjQCNABUAjYAAgACAAIEI9wgICAiAK4AiCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFXPOABVzZgCNAI0AjQAvAI0A1QCpAI0AjQAVAI2AAIEJAIAAgQj3CAgICIArgCMICIAACNIAOQAOc9wA3aCAKt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFXNmAI0AjQCNAC8AjQDVAKoAjQCNABUAjYAAgDOAAIEI9wgICAiAK4AkCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFXPvABVzZgCNAI0AjQAvAI0A1QCrAI0AjQAVAI2AAIEJA4AAgQj3CAgICIArgCUICIAACNMAOAA5AA5z/XP+AGCgoIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBVgAVc2YAjQCNAI0ALwCNANUArACNAI0AFQCNgACAOIAAgQj3CAgICIArgCYICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVdBEAFXNmAI0AjQCNAC8AjQDVAK0AjQCNABUAjYAAgQkGgACBCPcICAgIgCuAJwgIgAAIXkNEUG9sa2Fzd2FwRGV40wA4ADkADnQgdCQAYKN0IQOtdCOBCQiAi4EJCaN0JXQmdCeBCQqBCSGBCTiANldhc3NldElkVGNvZGXfEBIAwwDEAMV0LAAfAMcAyHQtACEAxnQuAMkADgAjAMoAywAmAMwAFQAVABUAJwBXAI0AjXQ2AC8AjQB/AI0EEHQhAI0AjXQ+AI1fECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEI9AgIgQkMCIAaCIC+gQkICAiBCQsIEwAAAAEaQ3Bt0wA4ADkADnRCdEUAYKIBswQagEaAoaJ0RnRHgQkNgQkYgDbZAB8AI3RKAA4AJnRLACEAfnRMdCUBswB/AJ4AFQAnAC8AjXRUXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQkKgEaAGoA9gACABAiBCQ7TADgAOQAOdFZ0XwBgqAHJAcoBywHMAc0BzgHPAdCASoBLgEyATYBOgE+AUIBRqHRgdGF0YnRjdGR0ZXRmdGeBCQ+BCRCBCRGBCROBCRSBCRWBCRaBCReANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFXRGAI0AjQCNAC8AjQDVAckAjQCNABUAjYAAgDOAAIEJDQgICAiAK4BKCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABV0RgCNAI0AjQAvAI0A1QHKAI0AjQAVAI2AAIAAgACBCQ0ICAgIgCuASwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABV0iQAVdEYAjQCNAI0ALwCNANUBywCNAI0AFQCNgACBCRKAAIEJDQgICAiAK4BMCAiAAAjTADgAOQAOdJd0mABgoKCANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFXRGAI0AjQCNAC8AjQDVAcwAjQCNABUAjYAAgDOAAIEJDQgICAiAK4BNCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQIlABV0RgCNAI0AjQAvAI0A1QHNAI0AjQAVAI2AAIBYgACBCQ0ICAgIgCuATggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVdEYAjQCNAI0ALwCNANUBzgCNAI0AFQCNgACAM4AAgQkNCAgICIArgE8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFXRGAI0AjQCNAC8AjQDVAc8AjQCNABUAjYAAgACAAIEJDQgICAiAK4BQCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABV0RgCNAI0AjQAvAI0A1QHQAI0AjQAVAI2AAIAzgACBCQ0ICAgIgCuAUQgIgAAI2QAfACN05gAOACZ05wAhAH506HQlBBoAfwCeABUAJwAvAI108F8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEJCoChgBqAPYAAgAQIgQkZ0wA4ADkADnTydPoAYKcEygTLBMwEzQTOBM8E0ICvgLCAsYCygLOAtIC1p3T7dPx0/XT+dP91AHUBgQkagQkbgQkcgQkdgQkegQkfgQkggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABV0RwCNAI0AjQAvAI0A1QTKAI0AjQAVAI2AAIAAgACBCRgICAgIgCuArwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVdEcAjQCNAI0ALwCNANUEywCNAI0AFQCNgACAM4AAgQkYCAgICIArgLAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFXRHAI0AjQCNAC8AjQDVBMwAjQCNABUAjYAAgACAAIEJGAgICAiAK4CxCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQUQABV0RwCNAI0AjQAvAI0A1QTNAI0AjQAVAI2AAIC6gACBCRgICAgIgCuAsggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVdEcAjQCNAI0ALwCNANUEzgCNAI0AFQCNgACAAIAAgQkYCAgICIArgLMICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFXRHAI0AjQCNAC8AjQDVBM8AjQCNABUAjYAAgACAAIEJGAgICAiAK4C0CAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABV0RwCNAI0AjQAvAI0A1QTQAI0AjQAVAI2AAIAAgACBCRgICAgIgCuAtQgIgAAI3xASAMMAxADFdW0AHwDHAMh1bgAhAMZ1bwDJAA4AIwDKAMsAJgDMABUAFQAVACcAVwCNAI11dwAvAI0AfwCNBBADrQCNAI11fwCNXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBCPQICIEJIwiAGgiAvoCLCAiBCSIIEtHj2TPTADgAOQAOdYN1hgBgogGzBBqARoChonWHdYiBCSSBCS+ANtkAHwAjdYsADgAmdYwAIQB+dY10JgGzAH8AngAVACcALwCNdZVfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCSGARoAagD2AAIAECIEJJdMAOAA5AA51l3WgAGCoAckBygHLAcwBzQHOAc8B0IBKgEuATIBNgE6AT4BQgFGodaF1onWjdaR1pXWmdad1qIEJJoEJJ4EJKIEJKoEJK4EJLIEJLYEJLoA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVdYcAjQCNAI0ALwCNANUByQCNAI0AFQCNgACAM4AAgQkkCAgICIArgEoICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFXWHAI0AjQCNAC8AjQDVAcoAjQCNABUAjYAAgACAAIEJJAgICAiAK4BLCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFXXKABV1hwCNAI0AjQAvAI0A1QHLAI0AjQAVAI2AAIEJKYAAgQkkCAgICIArgEwICIAACNMAOAA5AA512HXZAGCgoIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVdYcAjQCNAI0ALwCNANUBzACNAI0AFQCNgACAM4AAgQkkCAgICIArgE0ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAiUAFXWHAI0AjQCNAC8AjQDVAc0AjQCNABUAjYAAgFiAAIEJJAgICAiAK4BOCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABV1hwCNAI0AjQAvAI0A1QHOAI0AjQAVAI2AAIAzgACBCSQICAgIgCuATwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVdYcAjQCNAI0ALwCNANUBzwCNAI0AFQCNgACAAIAAgQkkCAgICIArgFAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFXWHAI0AjQCNAC8AjQDVAdAAjQCNABUAjYAAgDOAAIEJJAgICAiAK4BRCAiAAAjZAB8AI3YnAA4AJnYoACEAfnYpdCYEGgB/AJ4AFQAnAC8AjXYxXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQkhgKGAGoA9gACABAiBCTDTADgAOQAOdjN2OwBgpwTKBMsEzATNBM4EzwTQgK+AsICxgLKAs4C0gLWndjx2PXY+dj92QHZBdkKBCTGBCTKBCTOBCTSBCTWBCTaBCTeANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFXWIAI0AjQCNAC8AjQDVBMoAjQCNABUAjYAAgACAAIEJLwgICAiAK4CvCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABV1iACNAI0AjQAvAI0A1QTLAI0AjQAVAI2AAIAzgACBCS8ICAgIgCuAsAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVdYgAjQCNAI0ALwCNANUEzACNAI0AFQCNgACAAIAAgQkvCAgICIArgLEICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVBRAAFXWIAI0AjQCNAC8AjQDVBM0AjQCNABUAjYAAgLqAAIEJLwgICAiAK4CyCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABV1iACNAI0AjQAvAI0A1QTOAI0AjQAVAI2AAIAAgACBCS8ICAgIgCuAswgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVdYgAjQCNAI0ALwCNANUEzwCNAI0AFQCNgACAAIAAgQkvCAgICIArgLQICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFXWIAI0AjQCNAC8AjQDVBNAAjQCNABUAjYAAgACAAIEJLwgICAiAK4C1CAiAAAjfEBIAwwDEAMV2rgAfAMcAyHavACEAxnawAMkADgAjAMoAywAmAMwAFQAVABUAJwBXAI0AjXa4AC8AjQB/AI0EEHQjAI0AjXbAAI1fECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEI9AgIgQk6CIAaCIC+gQkJCAiBCTkIEkG/PiTTADgAOQAOdsR2xwBgogGzBBqARoChonbIdsmBCTuBCUaANtkAHwAjdswADgAmds0AIQB+ds50JwGzAH8AngAVACcALwCNdtZfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCTiARoAagD2AAIAECIEJPNMAOAA5AA522HbhAGCoAckBygHLAcwBzQHOAc8B0IBKgEuATIBNgE6AT4BQgFGoduJ243bkduV25nbnduh26YEJPYEJPoEJP4EJQYEJQoEJQ4EJRIEJRYA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVdsgAjQCNAI0ALwCNANUByQCNAI0AFQCNgACAM4AAgQk7CAgICIArgEoICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFXbIAI0AjQCNAC8AjQDVAcoAjQCNABUAjYAAgACAAIEJOwgICAiAK4BLCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFXcLABV2yACNAI0AjQAvAI0A1QHLAI0AjQAVAI2AAIEJQIAAgQk7CAgICIArgEwICIAACNMAOAA5AA53GXcaAGCgoIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVdsgAjQCNAI0ALwCNANUBzACNAI0AFQCNgACAM4AAgQk7CAgICIArgE0ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAiUAFXbIAI0AjQCNAC8AjQDVAc0AjQCNABUAjYAAgFiAAIEJOwgICAiAK4BOCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABV2yACNAI0AjQAvAI0A1QHOAI0AjQAVAI2AAIAzgACBCTsICAgIgCuATwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVdsgAjQCNAI0ALwCNANUBzwCNAI0AFQCNgACAAIAAgQk7CAgICIArgFAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFXbIAI0AjQCNAC8AjQDVAdAAjQCNABUAjYAAgDOAAIEJOwgICAiAK4BRCAiAAAjZAB8AI3doAA4AJndpACEAfndqdCcEGgB/AJ4AFQAnAC8AjXdyXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQk4gKGAGoA9gACABAiBCUfTADgAOQAOd3R3fABgpwTKBMsEzATNBM4EzwTQgK+AsICxgLKAs4C0gLWnd313fnd/d4B3gXeCd4OBCUiBCUmBCUqBCUuBCU2BCU6BCU+ANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVB3YAFXbJAI0AjQCNAC8AjQDVBMoAjQCNABUAjYAAgOiAAIEJRggICAiAK4CvCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABV2yQCNAI0AjQAvAI0A1QTLAI0AjQAVAI2AAIAzgACBCUYICAgIgCuAsAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVdskAjQCNAI0ALwCNANUEzACNAI0AFQCNgACAAIAAgQlGCAgICIArgLEICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVd7QAFXbJAI0AjQCNAC8AjQDVBM0AjQCNABUAjYAAgQlMgACBCUYICAgIgCuAsggIgAAIEMjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABV2yQCNAI0AjQAvAI0A1QTOAI0AjQAVAI2AAIAAgACBCUYICAgIgCuAswgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVdskAjQCNAI0ALwCNANUEzwCNAI0AFQCNgACAAIAAgQlGCAgICIArgLQICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFXbJAI0AjQCNAC8AjQDVBNAAjQCNABUAjYAAgACAAIEJRggICAiAK4C1CAiAAAjSADkADnfwAN2ggCrfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABVyfgCNAI0AjQAvAI0A1QJzAI0AjQAVAI2AAIAzgACBCPEICAgIgCuAYwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUChwAVcn4AjQCNAI0ALwCNANUCbgCNAI0AFQCNgACAZoAAgQjxCAgICIArgF4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVApYAFXJ+AI0AjQCNAC8AjQDVAm8AjQCNABUAjYAAgGiAAIEI8QgICAiAK4BfCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQKHABVyfgCNAI0AjQAvAI0A1QJwAI0AjQAVAI2AAIBmgACBCPEICAgIgCuAYAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUCJQAVcn4AjQCNAI0ALwCNANUCcgCNAI0AFQCNgACAWIAAgQjxCAgICIArgGIICIAACN8QEgDDAMQAxXg+AB8AxwDIeD8AIQDGeEAAyQAOACMAygDLACYAzAAVABUAFQAnAFMAjQCNeEgALwCNAH8AjQQQbpAAjQCNeFAAjV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQiDCAiBCVgIgBoIgL6BCJsICIEJVwgS193VldMAOAA5AA54VHhXAGCiAbMEGoBGgKGieFh4WYEJWYEJZIA22QAfACN4XAAOACZ4XQAhAH54Xm6WAbMAfwCeABUAJwAvAI14Zl8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEJVoBGgBqAPYAAgAQIgQla0wA4ADkADnhoeHEAYKgByQHKAcsBzAHNAc4BzwHQgEqAS4BMgE2AToBPgFCAUah4cnhzeHR4dXh2eHd4eHh5gQlbgQlcgQldgQlfgQlggQlhgQligQljgDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABV4WACNAI0AjQAvAI0A1QHJAI0AjQAVAI2AAIAzgACBCVkICAgIgCuASggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVeFgAjQCNAI0ALwCNANUBygCNAI0AFQCNgACAAIAAgQlZCAgICIArgEsICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVeJsAFXhYAI0AjQCNAC8AjQDVAcsAjQCNABUAjYAAgQlegACBCVkICAgIgCuATAgIgAAI0wA4ADkADnipeKoAYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABV4WACNAI0AjQAvAI0A1QHMAI0AjQAVAI2AAIAzgACBCVkICAgIgCuATQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVeFgAjQCNAI0ALwCNANUBzQCNAI0AFQCNgACAM4AAgQlZCAgICIArgE4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFXhYAI0AjQCNAC8AjQDVAc4AjQCNABUAjYAAgDOAAIEJWQgICAiAK4BPCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABV4WACNAI0AjQAvAI0A1QHPAI0AjQAVAI2AAIAAgACBCVkICAgIgCuAUAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVeFgAjQCNAI0ALwCNANUB0ACNAI0AFQCNgACAM4AAgQlZCAgICIArgFEICIAACNkAHwAjePgADgAmePkAIQB+ePpulgQaAH8AngAVACcALwCNeQJfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCVaAoYAagD2AAIAECIEJZdMAOAA5AA55BHkMAGCnBMoEywTMBM0EzgTPBNCAr4CwgLGAsoCzgLSAtad5DXkOeQ95EHkReRJ5E4EJZoEJZ4EJaIEJaYEJaoEJa4EJbIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVeFkAjQCNAI0ALwCNANUEygCNAI0AFQCNgACAAIAAgQlkCAgICIArgK8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFXhZAI0AjQCNAC8AjQDVBMsAjQCNABUAjYAAgDOAAIEJZAgICAiAK4CwCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABV4WQCNAI0AjQAvAI0A1QTMAI0AjQAVAI2AAIAAgACBCWQICAgIgCuAsQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUFEAAVeFkAjQCNAI0ALwCNANUEzQCNAI0AFQCNgACAuoAAgQlkCAgICIArgLIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFXhZAI0AjQCNAC8AjQDVBM4AjQCNABUAjYAAgACAAIEJZAgICAiAK4CzCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABV4WQCNAI0AjQAvAI0A1QTPAI0AjQAVAI2AAIAAgACBCWQICAgIgCuAtAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVeFkAjQCNAI0ALwCNANUE0ACNAI0AFQCNgACAAIAAgQlkCAgICIArgLUICIAACNIAOQAOeX8A3aCAKt8QEHmCeYN5hHmFAB95hnmHACF5iHmJAA4AI3mKeYsAJgB+AH95jQAnACcAE3mRAIUALwAnAH8AiABCAH95mHmZAI1fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2VfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNkdXBsaWNhdGVzXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3N0b3JhZ2WAGoEJgYAEgASAAoEJcIEC74AEgBqBAvGADYAagQmygQlvCBJRWCJi0wA4ADkADnmdeZ8AYKEAkoAcoXmggQlxgDbZAB8AI3mjAA4AJnmkACEAfnmlAFUAkgB/AJ4AFQAnAC8AjXmtXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQlugByAGoA9gACABAiBCXLTADgAOQAOea95uQBgqQClAKYApwCoAKkAqgCrAKwArYAfgCCAIYAigCOAJIAlgCaAJ6l5unm7ebx5vXm+eb95wHnBecKBCXOBCXWBCXaBCXiBCXmBCXuBCXyBCX6BCX+ANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVecYAFXmgAI0AjQCNAC8AjQDVAKUAjQCNABUAjYAAgQl0gACBCXEICAgIgCuAHwgIgAAI0gA5AA551ADdoIAq3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVeaAAjQCNAI0ALwCNANUApgCNAI0AFQCNgACAAIAAgQlxCAgICIArgCAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVeecAFXmgAI0AjQCNAC8AjQDVAKcAjQCNABUAjYAAgQl3gACBCXEICAgIgCuAIQgIgAAI0gA5AA559QDdoIAq3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVeaAAjQCNAI0ALwCNANUAqACNAI0AFQCNgACAAIAAgQlxCAgICIArgCIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVeggAFXmgAI0AjQCNAC8AjQDVAKkAjQCNABUAjYAAgQl6gACBCXEICAgIgCuAIwgIgAAI0gA5AA56FgDdoIAq3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVeaAAjQCNAI0ALwCNANUAqgCNAI0AFQCNgACAM4AAgQlxCAgICIArgCQICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVeikAFXmgAI0AjQCNAC8AjQDVAKsAjQCNABUAjYAAgQl9gACBCXEICAgIgCuAJQgIgAAI0wA4ADkADno3ejgAYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQFWABV5oACNAI0AjQAvAI0A1QCsAI0AjQAVAI2AAIA4gACBCXEICAgIgCuAJggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABV6SwAVeaAAjQCNAI0ALwCNANUArQCNAI0AFQCNgACBCYCAAIEJcQgICAiAK4AnCAiAAAhbQ0RTdGFzaEl0ZW3TADgAOQAOelp6XQBgonpbelyBCYKBCYOiel56X4EJhIEJm4A2VXN0YXNoWmNvbnRyb2xsZXLfEBIAwwDEAMV6ZAAfAMcAyHplACEAxnpmAMkADgAjAMoAywAmAMwAFQAVABUAJwBVAI0AjXpuAC8AjQB/AI0EEHpbAI0AjXp2AI1fECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEJbggIgQmGCIAaCIC+gQmCCAiBCYUIEwAAAAEbjZyb0wA4ADkADnp6en0AYKIBswQagEaAoaJ6fnp/gQmHgQmSgDbZAB8AI3qCAA4AJnqDACEAfnqEel4BswB/AJ4AFQAnAC8AjXqMXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQmEgEaAGoA9gACABAiBCYjTADgAOQAOeo56lwBgqAHJAcoBywHMAc0BzgHPAdCASoBLgEyATYBOgE+AUIBRqHqYepl6mnqbepx6nXqeep+BCYmBCYqBCYuBCY2BCY6BCY+BCZCBCZGANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFXp+AI0AjQCNAC8AjQDVAckAjQCNABUAjYAAgDOAAIEJhwgICAiAK4BKCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABV6fgCNAI0AjQAvAI0A1QHKAI0AjQAVAI2AAIAAgACBCYcICAgIgCuASwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABV6wQAVen4AjQCNAI0ALwCNANUBywCNAI0AFQCNgACBCYyAAIEJhwgICAiAK4BMCAiAAAjTADgAOQAOes960ABgoKCANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFXp+AI0AjQCNAC8AjQDVAcwAjQCNABUAjYAAgDOAAIEJhwgICAiAK4BNCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQIlABV6fgCNAI0AjQAvAI0A1QHNAI0AjQAVAI2AAIBYgACBCYcICAgIgCuATggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVen4AjQCNAI0ALwCNANUBzgCNAI0AFQCNgACAM4AAgQmHCAgICIArgE8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFXp+AI0AjQCNAC8AjQDVAc8AjQCNABUAjYAAgACAAIEJhwgICAiAK4BQCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABV6fgCNAI0AjQAvAI0A1QHQAI0AjQAVAI2AAIAzgACBCYcICAgIgCuAUQgIgAAI2QAfACN7HgAOACZ7HwAhAH57IHpeBBoAfwCeABUAJwAvAI17KF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEJhIChgBqAPYAAgAQIgQmT0wA4ADkADnsqezIAYKcEygTLBMwEzQTOBM8E0ICvgLCAsYCygLOAtIC1p3szezR7NXs2ezd7OHs5gQmUgQmVgQmWgQmXgQmYgQmZgQmagDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABV6fwCNAI0AjQAvAI0A1QTKAI0AjQAVAI2AAIAAgACBCZIICAgIgCuArwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVen8AjQCNAI0ALwCNANUEywCNAI0AFQCNgACAM4AAgQmSCAgICIArgLAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFXp/AI0AjQCNAC8AjQDVBMwAjQCNABUAjYAAgACAAIEJkggICAiAK4CxCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQUQABV6fwCNAI0AjQAvAI0A1QTNAI0AjQAVAI2AAIC6gACBCZIICAgIgCuAsggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVen8AjQCNAI0ALwCNANUEzgCNAI0AFQCNgACAAIAAgQmSCAgICIArgLMICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFXp/AI0AjQCNAC8AjQDVBM8AjQCNABUAjYAAgACAAIEJkggICAiAK4C0CAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABV6fwCNAI0AjQAvAI0A1QTQAI0AjQAVAI2AAIAAgACBCZIICAgIgCuAtQgIgAAI3xASAMMAxADFe6UAHwDHAMh7pgAhAMZ7pwDJAA4AIwDKAMsAJgDMABUAFQAVACcAVQCNAI17rwAvAI0AfwCNBBB6XACNAI17twCNXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBCW4ICIEJnQiAGgiAvoEJgwgIgQmcCBJunkat0wA4ADkADnu7e74AYKIBswQagEaAoaJ7v3vAgQmegQmpgDbZAB8AI3vDAA4AJnvEACEAfnvFel8BswB/AJ4AFQAnAC8AjXvNXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQmbgEaAGoA9gACABAiBCZ/TADgAOQAOe8972ABgqAHJAcoBywHMAc0BzgHPAdCASoBLgEyATYBOgE+AUIBRqHvZe9p723vce9173nvfe+CBCaCBCaGBCaKBCaSBCaWBCaaBCaeBCaiANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFXu/AI0AjQCNAC8AjQDVAckAjQCNABUAjYAAgDOAAIEJnggICAiAK4BKCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABV7vwCNAI0AjQAvAI0A1QHKAI0AjQAVAI2AAIAAgACBCZ4ICAgIgCuASwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABV8AgAVe78AjQCNAI0ALwCNANUBywCNAI0AFQCNgACBCaOAAIEJnggICAiAK4BMCAiAAAjTADgAOQAOfBB8EQBgoKCANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFXu/AI0AjQCNAC8AjQDVAcwAjQCNABUAjYAAgDOAAIEJnggICAiAK4BNCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQIlABV7vwCNAI0AjQAvAI0A1QHNAI0AjQAVAI2AAIBYgACBCZ4ICAgIgCuATggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVe78AjQCNAI0ALwCNANUBzgCNAI0AFQCNgACAM4AAgQmeCAgICIArgE8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFXu/AI0AjQCNAC8AjQDVAc8AjQCNABUAjYAAgACAAIEJnggICAiAK4BQCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABV7vwCNAI0AjQAvAI0A1QHQAI0AjQAVAI2AAIAzgACBCZ4ICAgIgCuAUQgIgAAI2QAfACN8XwAOACZ8YAAhAH58YXpfBBoAfwCeABUAJwAvAI18aV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEJm4ChgBqAPYAAgAQIgQmq0wA4ADkADnxrfHMAYKcEygTLBMwEzQTOBM8E0ICvgLCAsYCygLOAtIC1p3x0fHV8dnx3fHh8eXx6gQmrgQmsgQmtgQmugQmvgQmwgQmxgDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABV7wACNAI0AjQAvAI0A1QTKAI0AjQAVAI2AAIAAgACBCakICAgIgCuArwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVe8AAjQCNAI0ALwCNANUEywCNAI0AFQCNgACAM4AAgQmpCAgICIArgLAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFXvAAI0AjQCNAC8AjQDVBMwAjQCNABUAjYAAgACAAIEJqQgICAiAK4CxCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQUQABV7wACNAI0AjQAvAI0A1QTNAI0AjQAVAI2AAIC6gACBCakICAgIgCuAsggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVe8AAjQCNAI0ALwCNANUEzgCNAI0AFQCNgACAAIAAgQmpCAgICIArgLMICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFXvAAI0AjQCNAC8AjQDVBM8AjQCNABUAjYAAgACAAIEJqQgICAiAK4C0CAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABV7wACNAI0AjQAvAI0A1QTQAI0AjQAVAI2AAIAAgACBCakICAgIgCuAtQgIgAAI0gA5AA585gDdoIAq3xAQfOl86nzrfOwAH3ztfO4AIXzvfPAADgAjfPF88gAmAH4Af3z0ACcAJwATfPgAhQAvACcAfwCIAEMAf3z/fQAAjV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc2R1cGxpY2F0ZXNfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zc3RvcmFnZYAagQnGgASABIACgQm1gQLvgASAGoEC8YAOgBqBCj6BCbQIEkNn2SDTADgAOQAOfQR9BgBgoQCSgByhfQeBCbaANtkAHwAjfQoADgAmfQsAIQB+fQwAVgCSAH8AngAVACcALwCNfRRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCbOAHIAagD2AAIAECIEJt9MAOAA5AA59Fn0gAGCpAKUApgCnAKgAqQCqAKsArACtgB+AIIAhgCKAI4AkgCWAJoAnqX0hfSJ9I30kfSV9Jn0nfSh9KYEJuIEJuoEJu4EJvYEJvoEJwIEJwYEJw4EJxIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABV9LQAVfQcAjQCNAI0ALwCNANUApQCNAI0AFQCNgACBCbmAAIEJtggICAiAK4AfCAiAAAjSADkADn07AN2ggCrfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABV9BwCNAI0AjQAvAI0A1QCmAI0AjQAVAI2AAIAAgACBCbYICAgIgCuAIAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABV9TgAVfQcAjQCNAI0ALwCNANUApwCNAI0AFQCNgACBCbyAAIEJtggICAiAK4AhCAiAAAjSADkADn1cAN2ggCrfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABV9BwCNAI0AjQAvAI0A1QCoAI0AjQAVAI2AAIAAgACBCbYICAgIgCuAIggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABV9bwAVfQcAjQCNAI0ALwCNANUAqQCNAI0AFQCNgACBCb+AAIEJtggICAiAK4AjCAiAAAjSADkADn19AN2ggCrfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABV9BwCNAI0AjQAvAI0A1QCqAI0AjQAVAI2AAIAzgACBCbYICAgIgCuAJAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABV9kAAVfQcAjQCNAI0ALwCNANUAqwCNAI0AFQCNgACBCcKAAIEJtggICAiAK4AlCAiAAAjTADgAOQAOfZ59nwBgoKCANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAVYAFX0HAI0AjQCNAC8AjQDVAKwAjQCNABUAjYAAgDiAAIEJtggICAiAK4AmCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFX2yABV9BwCNAI0AjQAvAI0A1QCtAI0AjQAVAI2AAIEJxYAAgQm2CAgICIArgCcICIAACF8QFUNEUnVudGltZU1ldGFkYXRhSXRlbdMAOAA5AA59wX3HAGClfcJ9w2dbfcVukIEJx4EJyIEIDIEJyYEIm6V9yH3Jfcp9y33MgQnKgQnigQn5gQoQgQongDZYbWV0YWRhdGFYcmVzb2x2ZXJZdHhWZXJzaW9u3xASAMMAxADFfdIAHwDHAMh90wAhAMZ91ADJAA4AIwDKAMsAJgDMABUAFQAVACcAVgCNAI193AAvAI0AfwCNBBB9wgCNAI195ACNXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBCbMICIEJzAiAGgiAvoEJxwgIgQnLCBLQwtSJ0wA4ADkADn3ofesAYKIBswQagEaAoaJ97H3tgQnNgQnYgDbZAB8AI33wAA4AJn3xACEAfn3yfcgBswB/AJ4AFQAnAC8AjX36XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQnKgEaAGoA9gACABAiBCc7TADgAOQAOffx+BQBgqAHJAcoBywHMAc0BzgHPAdCASoBLgEyATYBOgE+AUIBRqH4Gfgd+CH4Jfgp+C34Mfg2BCc+BCdCBCdGBCdOBCdSBCdWBCdaBCdeANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFX3sAI0AjQCNAC8AjQDVAckAjQCNABUAjYAAgDOAAIEJzQgICAiAK4BKCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABV97ACNAI0AjQAvAI0A1QHKAI0AjQAVAI2AAIAAgACBCc0ICAgIgCuASwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABV+LwAVfewAjQCNAI0ALwCNANUBywCNAI0AFQCNgACBCdKAAIEJzQgICAiAK4BMCAiAAAjTADgAOQAOfj1+PgBgoKCANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFX3sAI0AjQCNAC8AjQDVAcwAjQCNABUAjYAAgDOAAIEJzQgICAiAK4BNCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQIlABV97ACNAI0AjQAvAI0A1QHNAI0AjQAVAI2AAIBYgACBCc0ICAgIgCuATggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVfewAjQCNAI0ALwCNANUBzgCNAI0AFQCNgACAM4AAgQnNCAgICIArgE8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFX3sAI0AjQCNAC8AjQDVAc8AjQCNABUAjYAAgACAAIEJzQgICAiAK4BQCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABV97ACNAI0AjQAvAI0A1QHQAI0AjQAVAI2AAIAzgACBCc0ICAgIgCuAUQgIgAAI2QAfACN+jAAOACZ+jQAhAH5+jn3IBBoAfwCeABUAJwAvAI1+ll8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEJyoChgBqAPYAAgAQIgQnZ0wA4ADkADn6YfqAAYKcEygTLBMwEzQTOBM8E0ICvgLCAsYCygLOAtIC1p36hfqJ+o36kfqV+pn6ngQnagQnbgQncgQndgQnfgQnggQnhgDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABV97QCNAI0AjQAvAI0A1QTKAI0AjQAVAI2AAIAAgACBCdgICAgIgCuArwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVfe0AjQCNAI0ALwCNANUEywCNAI0AFQCNgACAM4AAgQnYCAgICIArgLAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFX3tAI0AjQCNAC8AjQDVBMwAjQCNABUAjYAAgACAAIEJ2AgICAiAK4CxCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFX7YABV97QCNAI0AjQAvAI0A1QTNAI0AjQAVAI2AAIEJ3oAAgQnYCAgICIArgLIICIAACBED6N8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFX3tAI0AjQCNAC8AjQDVBM4AjQCNABUAjYAAgACAAIEJ2AgICAiAK4CzCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABV97QCNAI0AjQAvAI0A1QTPAI0AjQAVAI2AAIAAgACBCdgICAgIgCuAtAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVfe0AjQCNAI0ALwCNANUE0ACNAI0AFQCNgACAAIAAgQnYCAgICIArgLUICIAACN8QEgDDAMQAxX8UAB8AxwDIfxUAIQDGfxYAyQAOACMAygDLACYAzAAVABUAFQAnAFYAjQCNfx4ALwCNAH8AjQQQfcMAjQCNfyYAjV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQmzCAiBCeQIgBoIgL6BCcgICIEJ4wgSxdWgFtMAOAA5AA5/Kn8tAGCiAbMEGoBGgKGify5/L4EJ5YEJ8IA22QAfACN/MgAOACZ/MwAhAH5/NH3JAbMAfwCeABUAJwAvAI1/PF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEJ4oBGgBqAPYAAgAQIgQnm0wA4ADkADn8+f0cAYKgByQHKAcsBzAHNAc4BzwHQgEqAS4BMgE2AToBPgFCAUah/SH9Jf0p/S39Mf01/Tn9PgQnngQnogQnpgQnrgQnsgQntgQnugQnvgDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABV/LgCNAI0AjQAvAI0A1QHJAI0AjQAVAI2AAIAzgACBCeUICAgIgCuASggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVfy4AjQCNAI0ALwCNANUBygCNAI0AFQCNgACAAIAAgQnlCAgICIArgEsICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVf3EAFX8uAI0AjQCNAC8AjQDVAcsAjQCNABUAjYAAgQnqgACBCeUICAgIgCuATAgIgAAI0wA4ADkADn9/f4AAYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABV/LgCNAI0AjQAvAI0A1QHMAI0AjQAVAI2AAIAzgACBCeUICAgIgCuATQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUCJQAVfy4AjQCNAI0ALwCNANUBzQCNAI0AFQCNgACAWIAAgQnlCAgICIArgE4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFX8uAI0AjQCNAC8AjQDVAc4AjQCNABUAjYAAgDOAAIEJ5QgICAiAK4BPCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABV/LgCNAI0AjQAvAI0A1QHPAI0AjQAVAI2AAIAAgACBCeUICAgIgCuAUAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVfy4AjQCNAI0ALwCNANUB0ACNAI0AFQCNgACAM4AAgQnlCAgICIArgFEICIAACNkAHwAjf84ADgAmf88AIQB+f9B9yQQaAH8AngAVACcALwCNf9hfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCeKAoYAagD2AAIAECIEJ8dMAOAA5AA5/2n/iAGCnBMoEywTMBM0EzgTPBNCAr4CwgLGAsoCzgLSAtad/43/kf+V/5n/nf+h/6YEJ8oEJ84EJ9IEJ9YEJ9oEJ94EJ+IA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVfy8AjQCNAI0ALwCNANUEygCNAI0AFQCNgACAAIAAgQnwCAgICIArgK8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFX8vAI0AjQCNAC8AjQDVBMsAjQCNABUAjYAAgDOAAIEJ8AgICAiAK4CwCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABV/LwCNAI0AjQAvAI0A1QTMAI0AjQAVAI2AAIAAgACBCfAICAgIgCuAsQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABV+2AAVfy8AjQCNAI0ALwCNANUEzQCNAI0AFQCNgACBCd6AAIEJ8AgICAiAK4CyCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABV/LwCNAI0AjQAvAI0A1QTOAI0AjQAVAI2AAIAAgACBCfAICAgIgCuAswgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVfy8AjQCNAI0ALwCNANUEzwCNAI0AFQCNgACAAIAAgQnwCAgICIArgLQICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFX8vAI0AjQCNAC8AjQDVBNAAjQCNABUAjYAAgACAAIEJ8AgICAiAK4C1CAiAAAjfEBIAwwDEAMWAVQAfAMcAyIBWACEAxoBXAMkADgAjAMoAywAmAMwAFQAVABUAJwBWAI0AjYBfAC8AjQB/AI0EEGdbAI0AjYBnAI1fECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEJswgIgQn7CIAaCIC+gQgMCAiBCfoIEmOKJxbTADgAOQAOgGuAbgBgogGzBBqARoChooBvgHCBCfyBCgeANtkAHwAjgHMADgAmgHQAIQB+gHV9ygGzAH8AngAVACcALwCNgH1fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCfmARoAagD2AAIAECIEJ/dMAOAA5AA6Af4CIAGCoAckBygHLAcwBzQHOAc8B0IBKgEuATIBNgE6AT4BQgFGogImAioCLgIyAjYCOgI+AkIEJ/oEJ/4EKAIEKAoEKA4EKBIEKBYEKBoA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVgG8AjQCNAI0ALwCNANUByQCNAI0AFQCNgACAM4AAgQn8CAgICIArgEoICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFYBvAI0AjQCNAC8AjQDVAcoAjQCNABUAjYAAgACAAIEJ/AgICAiAK4BLCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFYCyABWAbwCNAI0AjQAvAI0A1QHLAI0AjQAVAI2AAIEKAYAAgQn8CAgICIArgEwICIAACNMAOAA5AA6AwIDBAGCgoIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVgG8AjQCNAI0ALwCNANUBzACNAI0AFQCNgACAM4AAgQn8CAgICIArgE0ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAiUAFYBvAI0AjQCNAC8AjQDVAc0AjQCNABUAjYAAgFiAAIEJ/AgICAiAK4BOCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWAbwCNAI0AjQAvAI0A1QHOAI0AjQAVAI2AAIAzgACBCfwICAgIgCuATwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVgG8AjQCNAI0ALwCNANUBzwCNAI0AFQCNgACAAIAAgQn8CAgICIArgFAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFYBvAI0AjQCNAC8AjQDVAdAAjQCNABUAjYAAgDOAAIEJ/AgICAiAK4BRCAiAAAjZAB8AI4EPAA4AJoEQACEAfoERfcoEGgB/AJ4AFQAnAC8AjYEZXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQn5gKGAGoA9gACABAiBCgjTADgAOQAOgRuBIwBgpwTKBMsEzATNBM4EzwTQgK+AsICxgLKAs4C0gLWngSSBJYEmgSeBKIEpgSqBCgmBCgqBCguBCgyBCg2BCg6BCg+ANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFYBwAI0AjQCNAC8AjQDVBMoAjQCNABUAjYAAgACAAIEKBwgICAiAK4CvCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWAcACNAI0AjQAvAI0A1QTLAI0AjQAVAI2AAIAzgACBCgcICAgIgCuAsAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVgHAAjQCNAI0ALwCNANUEzACNAI0AFQCNgACAAIAAgQoHCAgICIArgLEICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVBRAAFYBwAI0AjQCNAC8AjQDVBM0AjQCNABUAjYAAgLqAAIEKBwgICAiAK4CyCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWAcACNAI0AjQAvAI0A1QTOAI0AjQAVAI2AAIAAgACBCgcICAgIgCuAswgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVgHAAjQCNAI0ALwCNANUEzwCNAI0AFQCNgACAAIAAgQoHCAgICIArgLQICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFYBwAI0AjQCNAC8AjQDVBNAAjQCNABUAjYAAgACAAIEKBwgICAiAK4C1CAiAAAjfEBIAwwDEAMWBlgAfAMcAyIGXACEAxoGYAMkADgAjAMoAywAmAMwAFQAVABUAJwBWAI0AjYGgAC8AjQB/AI0EEH3FAI0AjYGoAI1fECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEJswgIgQoSCIAaCIC+gQnJCAiBChEIEltO/avTADgAOQAOgayBrwBgogGzBBqARoChooGwgbGBChOBCh6ANtkAHwAjgbQADgAmgbUAIQB+gbZ9ywGzAH8AngAVACcALwCNgb5fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBChCARoAagD2AAIAECIEKFNMAOAA5AA6BwIHJAGCoAckBygHLAcwBzQHOAc8B0IBKgEuATIBNgE6AT4BQgFGogcqBy4HMgc2BzoHPgdCB0YEKFYEKFoEKF4EKGYEKGoEKG4EKHIEKHYA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVgbAAjQCNAI0ALwCNANUByQCNAI0AFQCNgACAM4AAgQoTCAgICIArgEoICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFYGwAI0AjQCNAC8AjQDVAcoAjQCNABUAjYAAgACAAIEKEwgICAiAK4BLCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFYHzABWBsACNAI0AjQAvAI0A1QHLAI0AjQAVAI2AAIEKGIAAgQoTCAgICIArgEwICIAACNMAOAA5AA6CAYICAGCgoIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVgbAAjQCNAI0ALwCNANUBzACNAI0AFQCNgACAM4AAgQoTCAgICIArgE0ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAiUAFYGwAI0AjQCNAC8AjQDVAc0AjQCNABUAjYAAgFiAAIEKEwgICAiAK4BOCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWBsACNAI0AjQAvAI0A1QHOAI0AjQAVAI2AAIAzgACBChMICAgIgCuATwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVgbAAjQCNAI0ALwCNANUBzwCNAI0AFQCNgACAAIAAgQoTCAgICIArgFAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFYGwAI0AjQCNAC8AjQDVAdAAjQCNABUAjYAAgDOAAIEKEwgICAiAK4BRCAiAAAjZAB8AI4JQAA4AJoJRACEAfoJSfcsEGgB/AJ4AFQAnAC8AjYJaXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQoQgKGAGoA9gACABAiBCh/TADgAOQAOglyCZABgpwTKBMsEzATNBM4EzwTQgK+AsICxgLKAs4C0gLWngmWCZoJngmiCaYJqgmuBCiCBCiGBCiKBCiOBCiSBCiWBCiaANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVB3YAFYGxAI0AjQCNAC8AjQDVBMoAjQCNABUAjYAAgOiAAIEKHggICAiAK4CvCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWBsQCNAI0AjQAvAI0A1QTLAI0AjQAVAI2AAIAzgACBCh4ICAgIgCuAsAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVgbEAjQCNAI0ALwCNANUEzACNAI0AFQCNgACAAIAAgQoeCAgICIArgLEICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVd7QAFYGxAI0AjQCNAC8AjQDVBM0AjQCNABUAjYAAgQlMgACBCh4ICAgIgCuAsggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVgbEAjQCNAI0ALwCNANUEzgCNAI0AFQCNgACAAIAAgQoeCAgICIArgLMICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFYGxAI0AjQCNAC8AjQDVBM8AjQCNABUAjYAAgACAAIEKHggICAiAK4C0CAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWBsQCNAI0AjQAvAI0A1QTQAI0AjQAVAI2AAIAAgACBCh4ICAgIgCuAtQgIgAAI3xASAMMAxADFgtcAHwDHAMiC2AAhAMaC2QDJAA4AIwDKAMsAJgDMABUAFQAVACcAVgCNAI2C4QAvAI0AfwCNBBBukACNAI2C6QCNXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBCbMICIEKKQiAGgiAvoEImwgIgQooCBL/8npE0wA4ADkADoLtgvAAYKIBswQagEaAoaKC8YLygQoqgQo1gDbZAB8AI4L1AA4AJoL2ACEAfoL3fcwBswB/AJ4AFQAnAC8AjYL/XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQongEaAGoA9gACABAiBCivTADgAOQAOgwGDCgBgqAHJAcoBywHMAc0BzgHPAdCASoBLgEyATYBOgE+AUIBRqIMLgwyDDYMOgw+DEIMRgxKBCiyBCi2BCi6BCjCBCjGBCjKBCjOBCjSANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFYLxAI0AjQCNAC8AjQDVAckAjQCNABUAjYAAgDOAAIEKKggICAiAK4BKCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWC8QCNAI0AjQAvAI0A1QHKAI0AjQAVAI2AAIAAgACBCioICAgIgCuASwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABWDNAAVgvEAjQCNAI0ALwCNANUBywCNAI0AFQCNgACBCi+AAIEKKggICAiAK4BMCAiAAAjTADgAOQAOg0KDQwBgoKCANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFYLxAI0AjQCNAC8AjQDVAcwAjQCNABUAjYAAgDOAAIEKKggICAiAK4BNCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQIlABWC8QCNAI0AjQAvAI0A1QHNAI0AjQAVAI2AAIBYgACBCioICAgIgCuATggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVgvEAjQCNAI0ALwCNANUBzgCNAI0AFQCNgACAM4AAgQoqCAgICIArgE8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFYLxAI0AjQCNAC8AjQDVAc8AjQCNABUAjYAAgACAAIEKKggICAiAK4BQCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWC8QCNAI0AjQAvAI0A1QHQAI0AjQAVAI2AAIAzgACBCioICAgIgCuAUQgIgAAI2QAfACODkQAOACaDkgAhAH6Dk33MBBoAfwCeABUAJwAvAI2Dm18QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEKJ4ChgBqAPYAAgAQIgQo20wA4ADkADoOdg6UAYKcEygTLBMwEzQTOBM8E0ICvgLCAsYCygLOAtIC1p4Omg6eDqIOpg6qDq4OsgQo3gQo4gQo5gQo6gQo7gQo8gQo9gDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQd2ABWC8gCNAI0AjQAvAI0A1QTKAI0AjQAVAI2AAIDogACBCjUICAgIgCuArwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVgvIAjQCNAI0ALwCNANUEywCNAI0AFQCNgACAM4AAgQo1CAgICIArgLAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFYLyAI0AjQCNAC8AjQDVBMwAjQCNABUAjYAAgACAAIEKNQgICAiAK4CxCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFXe0ABWC8gCNAI0AjQAvAI0A1QTNAI0AjQAVAI2AAIEJTIAAgQo1CAgICIArgLIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFYLyAI0AjQCNAC8AjQDVBM4AjQCNABUAjYAAgACAAIEKNQgICAiAK4CzCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWC8gCNAI0AjQAvAI0A1QTPAI0AjQAVAI2AAIAAgACBCjUICAgIgCuAtAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVgvIAjQCNAI0ALwCNANUE0ACNAI0AFQCNgACAAIAAgQo1CAgICIArgLUICIAACNIAOQAOhBgA3aCAKt8QEIQbhByEHYQeAB+EH4QgACGEIYQiAA4AI4QjhCQAJgB+AH+EJgAnACcAE4QqAIUALwAnAH8AiABGAH+EMYQyAI1fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2VfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNkdXBsaWNhdGVzXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3N0b3JhZ2WAGoEKUoAEgASAAoEKQYEC74AEgBqBAvGAEYAagQqxgQpACBKEM4/80wA4ADkADoQ2hDgAYKEAkoAcoYQ5gQpCgDbZAB8AI4Q8AA4AJoQ9ACEAfoQ+AFkAkgB/AJ4AFQAnAC8AjYRGXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQo/gByAGoA9gACABAiBCkPTADgAOQAOhEiEUgBgqQClAKYApwCoAKkAqgCrAKwArYAfgCCAIYAigCOAJIAlgCaAJ6mEU4RUhFWEVoRXhFiEWYRahFuBCkSBCkaBCkeBCkmBCkqBCkyBCk2BCk+BClCANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVhF8AFYQ5AI0AjQCNAC8AjQDVAKUAjQCNABUAjYAAgQpFgACBCkIICAgIgCuAHwgIgAAI0gA5AA6EbQDdoIAq3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVhDkAjQCNAI0ALwCNANUApgCNAI0AFQCNgACAAIAAgQpCCAgICIArgCAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVhIAAFYQ5AI0AjQCNAC8AjQDVAKcAjQCNABUAjYAAgQpIgACBCkIICAgIgCuAIQgIgAAI0gA5AA6EjgDdoIAq3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVhDkAjQCNAI0ALwCNANUAqACNAI0AFQCNgACAAIAAgQpCCAgICIArgCIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVhKEAFYQ5AI0AjQCNAC8AjQDVAKkAjQCNABUAjYAAgQpLgACBCkIICAgIgCuAIwgIgAAI0gA5AA6ErwDdoIAq3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVhDkAjQCNAI0ALwCNANUAqgCNAI0AFQCNgACAM4AAgQpCCAgICIArgCQICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVhMIAFYQ5AI0AjQCNAC8AjQDVAKsAjQCNABUAjYAAgQpOgACBCkIICAgIgCuAJQgIgAAI0wA4ADkADoTQhNEAYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQFWABWEOQCNAI0AjQAvAI0A1QCsAI0AjQAVAI2AAIA4gACBCkIICAgIgCuAJggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABWE5AAVhDkAjQCNAI0ALwCNANUArQCNAI0AFQCNgACBClGAAIEKQggICAiAK4AnCAiAAAhaQ0RTY2FtSW5mb9MAOAA5AA6E84T4AGCkAY8DrYT2hPeAQYCLgQpTgQpUpIT5hPqE+4T8gQpVgQpsgQqDgQqagDZXc3VidHlwZVdhZGRyZXNz3xASAMMAxADFhQEAHwDHAMiFAgAhAMaFAwDJAA4AIwDKAMsAJgDMABUAFQAVACcAWQCNAI2FCwAvAI0AfwCNBBABjwCNAI2FEwCNXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBCj8ICIEKVwiAGgiAvoBBCAiBClYIEi7k7/rTADgAOQAOhReFGgBgogGzBBqARoChooUbhRyBCliBCmOANtkAHwAjhR8ADgAmhSAAIQB+hSGE+QGzAH8AngAVACcALwCNhSlfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBClWARoAagD2AAIAECIEKWdMAOAA5AA6FK4U0AGCoAckBygHLAcwBzQHOAc8B0IBKgEuATIBNgE6AT4BQgFGohTWFNoU3hTiFOYU6hTuFPIEKWoEKW4EKXIEKXoEKX4EKYIEKYYEKYoA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVhRsAjQCNAI0ALwCNANUByQCNAI0AFQCNgACAM4AAgQpYCAgICIArgEoICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFYUbAI0AjQCNAC8AjQDVAcoAjQCNABUAjYAAgACAAIEKWAgICAiAK4BLCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFYVeABWFGwCNAI0AjQAvAI0A1QHLAI0AjQAVAI2AAIEKXYAAgQpYCAgICIArgEwICIAACNMAOAA5AA6FbIVtAGCgoIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVhRsAjQCNAI0ALwCNANUBzACNAI0AFQCNgACAM4AAgQpYCAgICIArgE0ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAiUAFYUbAI0AjQCNAC8AjQDVAc0AjQCNABUAjYAAgFiAAIEKWAgICAiAK4BOCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWFGwCNAI0AjQAvAI0A1QHOAI0AjQAVAI2AAIAzgACBClgICAgIgCuATwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVhRsAjQCNAI0ALwCNANUBzwCNAI0AFQCNgACAAIAAgQpYCAgICIArgFAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFYUbAI0AjQCNAC8AjQDVAdAAjQCNABUAjYAAgDOAAIEKWAgICAiAK4BRCAiAAAjZAB8AI4W7AA4AJoW8ACEAfoW9hPkEGgB/AJ4AFQAnAC8AjYXFXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQpVgKGAGoA9gACABAiBCmTTADgAOQAOhceFzwBgpwTKBMsEzATNBM4EzwTQgK+AsICxgLKAs4C0gLWnhdCF0YXShdOF1IXVhdaBCmWBCmaBCmeBCmiBCmmBCmqBCmuANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFYUcAI0AjQCNAC8AjQDVBMoAjQCNABUAjYAAgACAAIEKYwgICAiAK4CvCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWFHACNAI0AjQAvAI0A1QTLAI0AjQAVAI2AAIAzgACBCmMICAgIgCuAsAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVhRwAjQCNAI0ALwCNANUEzACNAI0AFQCNgACAAIAAgQpjCAgICIArgLEICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVBRAAFYUcAI0AjQCNAC8AjQDVBM0AjQCNABUAjYAAgLqAAIEKYwgICAiAK4CyCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWFHACNAI0AjQAvAI0A1QTOAI0AjQAVAI2AAIAAgACBCmMICAgIgCuAswgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVhRwAjQCNAI0ALwCNANUEzwCNAI0AFQCNgACAAIAAgQpjCAgICIArgLQICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFYUcAI0AjQCNAC8AjQDVBNAAjQCNABUAjYAAgACAAIEKYwgICAiAK4C1CAiAAAjfEBIAwwDEAMWGQgAfAMcAyIZDACEAxoZEAMkADgAjAMoAywAmAMwAFQAVABUAJwBZAI0AjYZMAC8AjQB/AI0EEAOtAI0AjYZUAI1fECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEKPwgIgQpuCIAaCIC+gIsICIEKbQgS1hZCftMAOAA5AA6GWIZbAGCiAbMEGoBGgKGihlyGXYEKb4EKeoA22QAfACOGYAAOACaGYQAhAH6GYoT6AbMAfwCeABUAJwAvAI2Gal8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEKbIBGgBqAPYAAgAQIgQpw0wA4ADkADoZshnUAYKgByQHKAcsBzAHNAc4BzwHQgEqAS4BMgE2AToBPgFCAUaiGdoZ3hniGeYZ6hnuGfIZ9gQpxgQpygQpzgQp1gQp2gQp3gQp4gQp5gDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWGXACNAI0AjQAvAI0A1QHJAI0AjQAVAI2AAIAzgACBCm8ICAgIgCuASggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVhlwAjQCNAI0ALwCNANUBygCNAI0AFQCNgACAAIAAgQpvCAgICIArgEsICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVhp8AFYZcAI0AjQCNAC8AjQDVAcsAjQCNABUAjYAAgQp0gACBCm8ICAgIgCuATAgIgAAI0wA4ADkADoathq4AYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWGXACNAI0AjQAvAI0A1QHMAI0AjQAVAI2AAIAzgACBCm8ICAgIgCuATQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUCJQAVhlwAjQCNAI0ALwCNANUBzQCNAI0AFQCNgACAWIAAgQpvCAgICIArgE4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFYZcAI0AjQCNAC8AjQDVAc4AjQCNABUAjYAAgDOAAIEKbwgICAiAK4BPCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWGXACNAI0AjQAvAI0A1QHPAI0AjQAVAI2AAIAAgACBCm8ICAgIgCuAUAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVhlwAjQCNAI0ALwCNANUB0ACNAI0AFQCNgACAM4AAgQpvCAgICIArgFEICIAACNkAHwAjhvwADgAmhv0AIQB+hv6E+gQaAH8AngAVACcALwCNhwZfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCmyAoYAagD2AAIAECIEKe9MAOAA5AA6HCIcQAGCnBMoEywTMBM0EzgTPBNCAr4CwgLGAsoCzgLSAtaeHEYcShxOHFIcVhxaHF4EKfIEKfYEKfoEKf4EKgIEKgYEKgoA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVhl0AjQCNAI0ALwCNANUEygCNAI0AFQCNgACAAIAAgQp6CAgICIArgK8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFYZdAI0AjQCNAC8AjQDVBMsAjQCNABUAjYAAgDOAAIEKeggICAiAK4CwCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWGXQCNAI0AjQAvAI0A1QTMAI0AjQAVAI2AAIAAgACBCnoICAgIgCuAsQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUFEAAVhl0AjQCNAI0ALwCNANUEzQCNAI0AFQCNgACAuoAAgQp6CAgICIArgLIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFYZdAI0AjQCNAC8AjQDVBM4AjQCNABUAjYAAgACAAIEKeggICAiAK4CzCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWGXQCNAI0AjQAvAI0A1QTPAI0AjQAVAI2AAIAAgACBCnoICAgIgCuAtAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVhl0AjQCNAI0ALwCNANUE0ACNAI0AFQCNgACAAIAAgQp6CAgICIArgLUICIAACN8QEgDDAMQAxYeDAB8AxwDIh4QAIQDGh4UAyQAOACMAygDLACYAzAAVABUAFQAnAFkAjQCNh40ALwCNAH8AjQQQhPYAjQCNh5UAjV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQo/CAiBCoUIgBoIgL6BClMICIEKhAgSX+W76NMAOAA5AA6HmYecAGCiAbMEGoBGgKGih52HnoEKhoEKkYA22QAfACOHoQAOACaHogAhAH6Ho4T7AbMAfwCeABUAJwAvAI2Hq18QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEKg4BGgBqAPYAAgAQIgQqH0wA4ADkADoeth7YAYKgByQHKAcsBzAHNAc4BzwHQgEqAS4BMgE2AToBPgFCAUaiHt4e4h7mHuoe7h7yHvYe+gQqIgQqJgQqKgQqMgQqNgQqOgQqPgQqQgDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWHnQCNAI0AjQAvAI0A1QHJAI0AjQAVAI2AAIAzgACBCoYICAgIgCuASggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVh50AjQCNAI0ALwCNANUBygCNAI0AFQCNgACAAIAAgQqGCAgICIArgEsICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVh+AAFYedAI0AjQCNAC8AjQDVAcsAjQCNABUAjYAAgQqLgACBCoYICAgIgCuATAgIgAAI0wA4ADkADofuh+8AYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWHnQCNAI0AjQAvAI0A1QHMAI0AjQAVAI2AAIAzgACBCoYICAgIgCuATQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUCJQAVh50AjQCNAI0ALwCNANUBzQCNAI0AFQCNgACAWIAAgQqGCAgICIArgE4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFYedAI0AjQCNAC8AjQDVAc4AjQCNABUAjYAAgDOAAIEKhggICAiAK4BPCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWHnQCNAI0AjQAvAI0A1QHPAI0AjQAVAI2AAIAAgACBCoYICAgIgCuAUAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVh50AjQCNAI0ALwCNANUB0ACNAI0AFQCNgACAM4AAgQqGCAgICIArgFEICIAACNkAHwAjiD0ADgAmiD4AIQB+iD+E+wQaAH8AngAVACcALwCNiEdfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCoOAoYAagD2AAIAECIEKktMAOAA5AA6ISYhRAGCnBMoEywTMBM0EzgTPBNCAr4CwgLGAsoCzgLSAtaeIUohTiFSIVYhWiFeIWIEKk4EKlIEKlYEKloEKl4EKmIEKmYA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVh54AjQCNAI0ALwCNANUEygCNAI0AFQCNgACAAIAAgQqRCAgICIArgK8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFYeeAI0AjQCNAC8AjQDVBMsAjQCNABUAjYAAgDOAAIEKkQgICAiAK4CwCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWHngCNAI0AjQAvAI0A1QTMAI0AjQAVAI2AAIAAgACBCpEICAgIgCuAsQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUFEAAVh54AjQCNAI0ALwCNANUEzQCNAI0AFQCNgACAuoAAgQqRCAgICIArgLIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFYeeAI0AjQCNAC8AjQDVBM4AjQCNABUAjYAAgACAAIEKkQgICAiAK4CzCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWHngCNAI0AjQAvAI0A1QTPAI0AjQAVAI2AAIAAgACBCpEICAgIgCuAtAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVh54AjQCNAI0ALwCNANUE0ACNAI0AFQCNgACAAIAAgQqRCAgICIArgLUICIAACN8QEgDDAMQAxYjEAB8AxwDIiMUAIQDGiMYAyQAOACMAygDLACYAzAAVABUAFQAnAFkAjQCNiM4ALwCNAH8AjQQQhPcAjQCNiNYAjV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQo/CAiBCpwIgBoIgL6BClQICIEKmwgS03q0SNMAOAA5AA6I2ojdAGCiAbMEGoBGgKGiiN6I34EKnYEKqIA22QAfACOI4gAOACaI4wAhAH6I5IT8AbMAfwCeABUAJwAvAI2I7F8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEKmoBGgBqAPYAAgAQIgQqe0wA4ADkADojuiPcAYKgByQHKAcsBzAHNAc4BzwHQgEqAS4BMgE2AToBPgFCAUaiI+Ij5iPqI+4j8iP2I/oj/gQqfgQqggQqhgQqjgQqkgQqlgQqmgQqngDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWI3gCNAI0AjQAvAI0A1QHJAI0AjQAVAI2AAIAzgACBCp0ICAgIgCuASggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAViN4AjQCNAI0ALwCNANUBygCNAI0AFQCNgACAAIAAgQqdCAgICIArgEsICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAViSEAFYjeAI0AjQCNAC8AjQDVAcsAjQCNABUAjYAAgQqigACBCp0ICAgIgCuATAgIgAAI0wA4ADkADokviTAAYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWI3gCNAI0AjQAvAI0A1QHMAI0AjQAVAI2AAIAzgACBCp0ICAgIgCuATQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUCJQAViN4AjQCNAI0ALwCNANUBzQCNAI0AFQCNgACAWIAAgQqdCAgICIArgE4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFYjeAI0AjQCNAC8AjQDVAc4AjQCNABUAjYAAgDOAAIEKnQgICAiAK4BPCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWI3gCNAI0AjQAvAI0A1QHPAI0AjQAVAI2AAIAAgACBCp0ICAgIgCuAUAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAViN4AjQCNAI0ALwCNANUB0ACNAI0AFQCNgACAM4AAgQqdCAgICIArgFEICIAACNkAHwAjiX4ADgAmiX8AIQB+iYCE/AQaAH8AngAVACcALwCNiYhfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCpqAoYAagD2AAIAECIEKqdMAOAA5AA6JiomSAGCnBMoEywTMBM0EzgTPBNCAr4CwgLGAsoCzgLSAtaeJk4mUiZWJlomXiZiJmYEKqoEKq4EKrIEKrYEKroEKr4EKsIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAViN8AjQCNAI0ALwCNANUEygCNAI0AFQCNgACAAIAAgQqoCAgICIArgK8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFYjfAI0AjQCNAC8AjQDVBMsAjQCNABUAjYAAgDOAAIEKqAgICAiAK4CwCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWI3wCNAI0AjQAvAI0A1QTMAI0AjQAVAI2AAIAAgACBCqgICAgIgCuAsQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUFEAAViN8AjQCNAI0ALwCNANUEzQCNAI0AFQCNgACAuoAAgQqoCAgICIArgLIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFYjfAI0AjQCNAC8AjQDVBM4AjQCNABUAjYAAgACAAIEKqAgICAiAK4CzCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWI3wCNAI0AjQAvAI0A1QTPAI0AjQAVAI2AAIAAgACBCqgICAgIgCuAtAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAViN8AjQCNAI0ALwCNANUE0ACNAI0AFQCNgACAAIAAgQqoCAgICIArgLUICIAACNIAOQAOigUA3aCAKt8QEIoIigmKCooLAB+KDIoNACGKDooPAA4AI4oQihEAJgB+AH+KEwAnACcAE4oXAIUALwAnAH8AiABIAH+KHoofAI1fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2VfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNkdXBsaWNhdGVzXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3N0b3JhZ2WAGoEKxYAEgASAAoEKtIEC74AEgBqBAvGAE4AagQvNgQqzCBJ2irKU0wA4ADkADoojiiUAYKEAkoAcoYomgQq1gDbZAB8AI4opAA4AJooqACEAfoorAFsAkgB/AJ4AFQAnAC8AjYozXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQqygByAGoA9gACABAiBCrbTADgAOQAOijWKPwBgqQClAKYApwCoAKkAqgCrAKwArYAfgCCAIYAigCOAJIAlgCaAJ6mKQIpBikKKQ4pEikWKRopHikiBCreBCrmBCrqBCryBCr2BCr+BCsCBCsKBCsOANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVikwAFYomAI0AjQCNAC8AjQDVAKUAjQCNABUAjYAAgQq4gACBCrUICAgIgCuAHwgIgAAI0gA5AA6KWgDdoIAq3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAViiYAjQCNAI0ALwCNANUApgCNAI0AFQCNgACAAIAAgQq1CAgICIArgCAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVim0AFYomAI0AjQCNAC8AjQDVAKcAjQCNABUAjYAAgQq7gACBCrUICAgIgCuAIQgIgAAI0gA5AA6KewDdoIAq3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAViiYAjQCNAI0ALwCNANUAqACNAI0AFQCNgACAAIAAgQq1CAgICIArgCIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVio4AFYomAI0AjQCNAC8AjQDVAKkAjQCNABUAjYAAgQq+gACBCrUICAgIgCuAIwgIgAAI0gA5AA6KnADdoIAq3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAViiYAjQCNAI0ALwCNANUAqgCNAI0AFQCNgACAM4AAgQq1CAgICIArgCQICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAViq8AFYomAI0AjQCNAC8AjQDVAKsAjQCNABUAjYAAgQrBgACBCrUICAgIgCuAJQgIgAAI0wA4ADkADoq9ir4AYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQFWABWKJgCNAI0AjQAvAI0A1QCsAI0AjQAVAI2AAIA4gACBCrUICAgIgCuAJggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABWK0QAViiYAjQCNAI0ALwCNANUArQCNAI0AFQCNgACBCsSAAIEKtQgICAiAK4AnCAiAAAhfEBhDRFRyYW5zYWN0aW9uSGlzdG9yeUl0ZW3TADgAOQAOiuCK7ABgq4rhiuKK44rkiuWK5ornZ1uK6YrqiuuBCsaBCseBCsiBCsmBCsqBCsuBCsyBCAyBCs2BCs6BCs+riu2K7orvivCK8YryivOK9Ir1ivaK94EK0IEK54EK/oELFYELLIELQ4ELWoELcYELiIELn4ELtoA2VnNlbmRlclZzdGF0dXNYcmVjZWl2ZXJUY2FsbFptb2R1bGVOYW1lW2Jsb2NrTnVtYmVyWGNhbGxOYW1lU2ZlZVl0aW1lc3RhbXBXdHhJbmRleN8QEgDDAMQAxYsEAB8AxwDIiwUAIQDGiwYAyQAOACMAygDLACYAzAAVABUAFQAnAFsAjQCNiw4ALwCNAH8AjQQQiuEAjQCNixYAjV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQqyCAiBCtIIgBoIgL6BCsYICIEK0QgSPCIzfNMAOAA5AA6LGosdAGCiAbMEGoBGgKGiix6LH4EK04EK3oA22QAfACOLIgAOACaLIwAhAH6LJIrtAbMAfwCeABUAJwAvAI2LLF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEK0IBGgBqAPYAAgAQIgQrU0wA4ADkADosuizcAYKgByQHKAcsBzAHNAc4BzwHQgEqAS4BMgE2AToBPgFCAUaiLOIs5izqLO4s8iz2LPos/gQrVgQrWgQrXgQrZgQragQrbgQrcgQrdgDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWLHgCNAI0AjQAvAI0A1QHJAI0AjQAVAI2AAIAzgACBCtMICAgIgCuASggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVix4AjQCNAI0ALwCNANUBygCNAI0AFQCNgACAAIAAgQrTCAgICIArgEsICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVi2EAFYseAI0AjQCNAC8AjQDVAcsAjQCNABUAjYAAgQrYgACBCtMICAgIgCuATAgIgAAI0wA4ADkADotvi3AAYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWLHgCNAI0AjQAvAI0A1QHMAI0AjQAVAI2AAIAzgACBCtMICAgIgCuATQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUCJQAVix4AjQCNAI0ALwCNANUBzQCNAI0AFQCNgACAWIAAgQrTCAgICIArgE4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFYseAI0AjQCNAC8AjQDVAc4AjQCNABUAjYAAgDOAAIEK0wgICAiAK4BPCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWLHgCNAI0AjQAvAI0A1QHPAI0AjQAVAI2AAIAAgACBCtMICAgIgCuAUAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVix4AjQCNAI0ALwCNANUB0ACNAI0AFQCNgACAM4AAgQrTCAgICIArgFEICIAACNkAHwAji74ADgAmi78AIQB+i8CK7QQaAH8AngAVACcALwCNi8hfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCtCAoYAagD2AAIAECIEK39MAOAA5AA6LyovSAGCnBMoEywTMBM0EzgTPBNCAr4CwgLGAsoCzgLSAtaeL04vUi9WL1ovXi9iL2YEK4IEK4YEK4oEK44EK5IEK5YEK5oA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVix8AjQCNAI0ALwCNANUEygCNAI0AFQCNgACAAIAAgQreCAgICIArgK8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFYsfAI0AjQCNAC8AjQDVBMsAjQCNABUAjYAAgDOAAIEK3ggICAiAK4CwCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWLHwCNAI0AjQAvAI0A1QTMAI0AjQAVAI2AAIAAgACBCt4ICAgIgCuAsQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUFEAAVix8AjQCNAI0ALwCNANUEzQCNAI0AFQCNgACAuoAAgQreCAgICIArgLIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFYsfAI0AjQCNAC8AjQDVBM4AjQCNABUAjYAAgACAAIEK3ggICAiAK4CzCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWLHwCNAI0AjQAvAI0A1QTPAI0AjQAVAI2AAIAAgACBCt4ICAgIgCuAtAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVix8AjQCNAI0ALwCNANUE0ACNAI0AFQCNgACAAIAAgQreCAgICIArgLUICIAACN8QEgDDAMQAxYxFAB8AxwDIjEYAIQDGjEcAyQAOACMAygDLACYAzAAVABUAFQAnAFsAjQCNjE8ALwCNAH8AjQQQiuIAjQCNjFcAjV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQqyCAiBCukIgBoIgL6BCscICIEK6AgSlssEW9MAOAA5AA6MW4xeAGCiAbMEGoBGgKGijF+MYIEK6oEK9YA22QAfACOMYwAOACaMZAAhAH6MZYruAbMAfwCeABUAJwAvAI2MbV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEK54BGgBqAPYAAgAQIgQrr0wA4ADkADoxvjHgAYKgByQHKAcsBzAHNAc4BzwHQgEqAS4BMgE2AToBPgFCAUaiMeYx6jHuMfIx9jH6Mf4yAgQrsgQrtgQrugQrwgQrxgQrygQrzgQr0gDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWMXwCNAI0AjQAvAI0A1QHJAI0AjQAVAI2AAIAzgACBCuoICAgIgCuASggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVjF8AjQCNAI0ALwCNANUBygCNAI0AFQCNgACAAIAAgQrqCAgICIArgEsICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVjKIAFYxfAI0AjQCNAC8AjQDVAcsAjQCNABUAjYAAgQrvgACBCuoICAgIgCuATAgIgAAI0wA4ADkADoywjLEAYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWMXwCNAI0AjQAvAI0A1QHMAI0AjQAVAI2AAIAzgACBCuoICAgIgCuATQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUCJQAVjF8AjQCNAI0ALwCNANUBzQCNAI0AFQCNgACAWIAAgQrqCAgICIArgE4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFYxfAI0AjQCNAC8AjQDVAc4AjQCNABUAjYAAgDOAAIEK6ggICAiAK4BPCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWMXwCNAI0AjQAvAI0A1QHPAI0AjQAVAI2AAIAAgACBCuoICAgIgCuAUAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVjF8AjQCNAI0ALwCNANUB0ACNAI0AFQCNgACAM4AAgQrqCAgICIArgFEICIAACNkAHwAjjP8ADgAmjQAAIQB+jQGK7gQaAH8AngAVACcALwCNjQlfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCueAoYAagD2AAIAECIEK9tMAOAA5AA6NC40TAGCnBMoEywTMBM0EzgTPBNCAr4CwgLGAsoCzgLSAtaeNFI0VjRaNF40YjRmNGoEK94EK+IEK+YEK+oEK+4EK/IEK/YA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUHdgAVjGAAjQCNAI0ALwCNANUEygCNAI0AFQCNgACA6IAAgQr1CAgICIArgK8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFYxgAI0AjQCNAC8AjQDVBMsAjQCNABUAjYAAgDOAAIEK9QgICAiAK4CwCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWMYACNAI0AjQAvAI0A1QTMAI0AjQAVAI2AAIAAgACBCvUICAgIgCuAsQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUHpAAVjGAAjQCNAI0ALwCNANUEzQCNAI0AFQCNgACA7IAAgQr1CAgICIArgLIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFYxgAI0AjQCNAC8AjQDVBM4AjQCNABUAjYAAgACAAIEK9QgICAiAK4CzCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWMYACNAI0AjQAvAI0A1QTPAI0AjQAVAI2AAIAAgACBCvUICAgIgCuAtAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVjGAAjQCNAI0ALwCNANUE0ACNAI0AFQCNgACAAIAAgQr1CAgICIArgLUICIAACN8QEgDDAMQAxY2GAB8AxwDIjYcAIQDGjYgAyQAOACMAygDLACYAzAAVABUAFQAnAFsAjQCNjZAALwCNAH8AjQQQiuMAjQCNjZgAjV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQqyCAiBCwAIgBoIgL6BCsgICIEK/wgSqEouDNMAOAA5AA6NnI2fAGCiAbMEGoBGgKGijaCNoYELAYELDIA22QAfACONpAAOACaNpQAhAH6NporvAbMAfwCeABUAJwAvAI2Nrl8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEK/oBGgBqAPYAAgAQIgQsC0wA4ADkADo2wjbkAYKgByQHKAcsBzAHNAc4BzwHQgEqAS4BMgE2AToBPgFCAUaiNuo27jbyNvY2+jb+NwI3BgQsDgQsEgQsFgQsHgQsIgQsJgQsKgQsLgDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWNoACNAI0AjQAvAI0A1QHJAI0AjQAVAI2AAIAzgACBCwEICAgIgCuASggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVjaAAjQCNAI0ALwCNANUBygCNAI0AFQCNgACAAIAAgQsBCAgICIArgEsICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVjeMAFY2gAI0AjQCNAC8AjQDVAcsAjQCNABUAjYAAgQsGgACBCwEICAgIgCuATAgIgAAI0wA4ADkADo3xjfIAYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWNoACNAI0AjQAvAI0A1QHMAI0AjQAVAI2AAIAzgACBCwEICAgIgCuATQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUCJQAVjaAAjQCNAI0ALwCNANUBzQCNAI0AFQCNgACAWIAAgQsBCAgICIArgE4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFY2gAI0AjQCNAC8AjQDVAc4AjQCNABUAjYAAgDOAAIELAQgICAiAK4BPCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWNoACNAI0AjQAvAI0A1QHPAI0AjQAVAI2AAIAAgACBCwEICAgIgCuAUAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVjaAAjQCNAI0ALwCNANUB0ACNAI0AFQCNgACAM4AAgQsBCAgICIArgFEICIAACNkAHwAjjkAADgAmjkEAIQB+jkKK7wQaAH8AngAVACcALwCNjkpfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCv6AoYAagD2AAIAECIELDdMAOAA5AA6OTI5UAGCnBMoEywTMBM0EzgTPBNCAr4CwgLGAsoCzgLSAtaeOVY5WjleOWI5ZjlqOW4ELDoELD4ELEIELEYELEoELE4ELFIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVjaEAjQCNAI0ALwCNANUEygCNAI0AFQCNgACAAIAAgQsMCAgICIArgK8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFY2hAI0AjQCNAC8AjQDVBMsAjQCNABUAjYAAgDOAAIELDAgICAiAK4CwCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWNoQCNAI0AjQAvAI0A1QTMAI0AjQAVAI2AAIAAgACBCwwICAgIgCuAsQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUFEAAVjaEAjQCNAI0ALwCNANUEzQCNAI0AFQCNgACAuoAAgQsMCAgICIArgLIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFY2hAI0AjQCNAC8AjQDVBM4AjQCNABUAjYAAgACAAIELDAgICAiAK4CzCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWNoQCNAI0AjQAvAI0A1QTPAI0AjQAVAI2AAIAAgACBCwwICAgIgCuAtAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVjaEAjQCNAI0ALwCNANUE0ACNAI0AFQCNgACAAIAAgQsMCAgICIArgLUICIAACN8QEgDDAMQAxY7HAB8AxwDIjsgAIQDGjskAyQAOACMAygDLACYAzAAVABUAFQAnAFsAjQCNjtEALwCNAH8AjQQQiuQAjQCNjtkAjV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQqyCAiBCxcIgBoIgL6BCskICIELFggSl6f7OdMAOAA5AA6O3Y7gAGCiAbMEGoBGgKGijuGO4oELGIELI4A22QAfACOO5QAOACaO5gAhAH6O54rwAbMAfwCeABUAJwAvAI2O718QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYELFYBGgBqAPYAAgAQIgQsZ0wA4ADkADo7xjvoAYKgByQHKAcsBzAHNAc4BzwHQgEqAS4BMgE2AToBPgFCAUaiO+478jv2O/o7/jwCPAY8CgQsagQsbgQscgQsegQsfgQsggQshgQsigDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWO4QCNAI0AjQAvAI0A1QHJAI0AjQAVAI2AAIAzgACBCxgICAgIgCuASggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVjuEAjQCNAI0ALwCNANUBygCNAI0AFQCNgACAAIAAgQsYCAgICIArgEsICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVjyQAFY7hAI0AjQCNAC8AjQDVAcsAjQCNABUAjYAAgQsdgACBCxgICAgIgCuATAgIgAAI0wA4ADkADo8yjzMAYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWO4QCNAI0AjQAvAI0A1QHMAI0AjQAVAI2AAIAzgACBCxgICAgIgCuATQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUCJQAVjuEAjQCNAI0ALwCNANUBzQCNAI0AFQCNgACAWIAAgQsYCAgICIArgE4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFY7hAI0AjQCNAC8AjQDVAc4AjQCNABUAjYAAgDOAAIELGAgICAiAK4BPCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWO4QCNAI0AjQAvAI0A1QHPAI0AjQAVAI2AAIAAgACBCxgICAgIgCuAUAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVjuEAjQCNAI0ALwCNANUB0ACNAI0AFQCNgACAM4AAgQsYCAgICIArgFEICIAACNkAHwAjj4EADgAmj4IAIQB+j4OK8AQaAH8AngAVACcALwCNj4tfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCxWAoYAagD2AAIAECIELJNMAOAA5AA6PjY+VAGCnBMoEywTMBM0EzgTPBNCAr4CwgLGAsoCzgLSAtaePlo+Xj5iPmY+aj5uPnIELJYELJoELJ4ELKIELKYELKoELK4A23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVjuIAjQCNAI0ALwCNANUEygCNAI0AFQCNgACAAIAAgQsjCAgICIArgK8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFY7iAI0AjQCNAC8AjQDVBMsAjQCNABUAjYAAgDOAAIELIwgICAiAK4CwCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWO4gCNAI0AjQAvAI0A1QTMAI0AjQAVAI2AAIAAgACBCyMICAgIgCuAsQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABV+2AAVjuIAjQCNAI0ALwCNANUEzQCNAI0AFQCNgACBCd6AAIELIwgICAiAK4CyCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWO4gCNAI0AjQAvAI0A1QTOAI0AjQAVAI2AAIAAgACBCyMICAgIgCuAswgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVjuIAjQCNAI0ALwCNANUEzwCNAI0AFQCNgACAAIAAgQsjCAgICIArgLQICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFY7iAI0AjQCNAC8AjQDVBNAAjQCNABUAjYAAgACAAIELIwgICAiAK4C1CAiAAAjfEBIAwwDEAMWQCAAfAMcAyJAJACEAxpAKAMkADgAjAMoAywAmAMwAFQAVABUAJwBbAI0AjZASAC8AjQB/AI0EEIrlAI0AjZAaAI1fECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEKsggIgQsuCIAaCIC+gQrKCAiBCy0IEjvxxFXTADgAOQAOkB6QIQBgogGzBBqARoChopAikCOBCy+BCzqANtkAHwAjkCYADgAmkCcAIQB+kCiK8QGzAH8AngAVACcALwCNkDBfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBCyyARoAagD2AAIAECIELMNMAOAA5AA6QMpA7AGCoAckBygHLAcwBzQHOAc8B0IBKgEuATIBNgE6AT4BQgFGokDyQPZA+kD+QQJBBkEKQQ4ELMYELMoELM4ELNYELNoELN4ELOIELOYA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVkCIAjQCNAI0ALwCNANUByQCNAI0AFQCNgACAM4AAgQsvCAgICIArgEoICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFZAiAI0AjQCNAC8AjQDVAcoAjQCNABUAjYAAgACAAIELLwgICAiAK4BLCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFZBlABWQIgCNAI0AjQAvAI0A1QHLAI0AjQAVAI2AAIELNIAAgQsvCAgICIArgEwICIAACNMAOAA5AA6Qc5B0AGCgoIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVkCIAjQCNAI0ALwCNANUBzACNAI0AFQCNgACAM4AAgQsvCAgICIArgE0ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFZAiAI0AjQCNAC8AjQDVAc0AjQCNABUAjYAAgDOAAIELLwgICAiAK4BOCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWQIgCNAI0AjQAvAI0A1QHOAI0AjQAVAI2AAIAzgACBCy8ICAgIgCuATwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVkCIAjQCNAI0ALwCNANUBzwCNAI0AFQCNgACAAIAAgQsvCAgICIArgFAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFZAiAI0AjQCNAC8AjQDVAdAAjQCNABUAjYAAgDOAAIELLwgICAiAK4BRCAiAAAjZAB8AI5DCAA4AJpDDACEAfpDEivEEGgB/AJ4AFQAnAC8AjZDMXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQssgKGAGoA9gACABAiBCzvTADgAOQAOkM6Q1gBgpwTKBMsEzATNBM4EzwTQgK+AsICxgLKAs4C0gLWnkNeQ2JDZkNqQ25DckN2BCzyBCz2BCz6BCz+BC0CBC0GBC0KANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFZAjAI0AjQCNAC8AjQDVBMoAjQCNABUAjYAAgACAAIELOggICAiAK4CvCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWQIwCNAI0AjQAvAI0A1QTLAI0AjQAVAI2AAIAzgACBCzoICAgIgCuAsAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVkCMAjQCNAI0ALwCNANUEzACNAI0AFQCNgACAAIAAgQs6CAgICIArgLEICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVBRAAFZAjAI0AjQCNAC8AjQDVBM0AjQCNABUAjYAAgLqAAIELOggICAiAK4CyCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWQIwCNAI0AjQAvAI0A1QTOAI0AjQAVAI2AAIAAgACBCzoICAgIgCuAswgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVkCMAjQCNAI0ALwCNANUEzwCNAI0AFQCNgACAAIAAgQs6CAgICIArgLQICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFZAjAI0AjQCNAC8AjQDVBNAAjQCNABUAjYAAgACAAIELOggICAiAK4C1CAiAAAjfEBIAwwDEAMWRSQAfAMcAyJFKACEAxpFLAMkADgAjAMoAywAmAMwAFQAVABUAJwBbAI0AjZFTAC8AjQB/AI0EEIrmAI0AjZFbAI1fECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEKsggIgQtFCIAaCIC+gQrLCAiBC0QIEwAAAAEKztU00wA4ADkADpFfkWIAYKIBswQagEaAoaKRY5FkgQtGgQtRgDbZAB8AI5FnAA4AJpFoACEAfpFpivIBswB/AJ4AFQAnAC8AjZFxXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQtDgEaAGoA9gACABAiBC0fTADgAOQAOkXORfABgqAHJAcoBywHMAc0BzgHPAdCASoBLgEyATYBOgE+AUIBRqJF9kX6Rf5GAkYGRgpGDkYSBC0iBC0mBC0qBC0yBC02BC06BC0+BC1CANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFZFjAI0AjQCNAC8AjQDVAckAjQCNABUAjYAAgDOAAIELRggICAiAK4BKCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWRYwCNAI0AjQAvAI0A1QHKAI0AjQAVAI2AAIAAgACBC0YICAgIgCuASwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABWRpgAVkWMAjQCNAI0ALwCNANUBywCNAI0AFQCNgACBC0uAAIELRggICAiAK4BMCAiAAAjTADgAOQAOkbSRtQBgoKCANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFZFjAI0AjQCNAC8AjQDVAcwAjQCNABUAjYAAgDOAAIELRggICAiAK4BNCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQIlABWRYwCNAI0AjQAvAI0A1QHNAI0AjQAVAI2AAIBYgACBC0YICAgIgCuATggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVkWMAjQCNAI0ALwCNANUBzgCNAI0AFQCNgACAM4AAgQtGCAgICIArgE8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFZFjAI0AjQCNAC8AjQDVAc8AjQCNABUAjYAAgACAAIELRggICAiAK4BQCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWRYwCNAI0AjQAvAI0A1QHQAI0AjQAVAI2AAIAzgACBC0YICAgIgCuAUQgIgAAI2QAfACOSAwAOACaSBAAhAH6SBYryBBoAfwCeABUAJwAvAI2SDV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYELQ4ChgBqAPYAAgAQIgQtS0wA4ADkADpIPkhcAYKcEygTLBMwEzQTOBM8E0ICvgLCAsYCygLOAtIC1p5IYkhmSGpIbkhySHZIegQtTgQtUgQtVgQtWgQtXgQtYgQtZgDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWRZACNAI0AjQAvAI0A1QTKAI0AjQAVAI2AAIAAgACBC1EICAgIgCuArwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVkWQAjQCNAI0ALwCNANUEywCNAI0AFQCNgACAM4AAgQtRCAgICIArgLAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFZFkAI0AjQCNAC8AjQDVBMwAjQCNABUAjYAAgACAAIELUQgICAiAK4CxCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFWryABWRZACNAI0AjQAvAI0A1QTNAI0AjQAVAI2AAIEIUIAAgQtRCAgICIArgLIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFZFkAI0AjQCNAC8AjQDVBM4AjQCNABUAjYAAgACAAIELUQgICAiAK4CzCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWRZACNAI0AjQAvAI0A1QTPAI0AjQAVAI2AAIAAgACBC1EICAgIgCuAtAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVkWQAjQCNAI0ALwCNANUE0ACNAI0AFQCNgACAAIAAgQtRCAgICIArgLUICIAACN8QEgDDAMQAxZKKAB8AxwDIkosAIQDGkowAyQAOACMAygDLACYAzAAVABUAFQAnAFsAjQCNkpQALwCNAH8AjQQQiucAjQCNkpwAjV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQqyCAiBC1wIgBoIgL6BCswICIELWwgSUx4S3NMAOAA5AA6SoJKjAGCiAbMEGoBGgKGikqSSpYELXYELaIA22QAfACOSqAAOACaSqQAhAH6SqorzAbMAfwCeABUAJwAvAI2Ssl8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYELWoBGgBqAPYAAgAQIgQte0wA4ADkADpK0kr0AYKgByQHKAcsBzAHNAc4BzwHQgEqAS4BMgE2AToBPgFCAUaiSvpK/ksCSwZLCksOSxJLFgQtfgQtggQthgQtjgQtkgQtlgQtmgQtngDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWSpACNAI0AjQAvAI0A1QHJAI0AjQAVAI2AAIAzgACBC10ICAgIgCuASggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVkqQAjQCNAI0ALwCNANUBygCNAI0AFQCNgACAAIAAgQtdCAgICIArgEsICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVkucAFZKkAI0AjQCNAC8AjQDVAcsAjQCNABUAjYAAgQtigACBC10ICAgIgCuATAgIgAAI0wA4ADkADpL1kvYAYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWSpACNAI0AjQAvAI0A1QHMAI0AjQAVAI2AAIAzgACBC10ICAgIgCuATQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVkqQAjQCNAI0ALwCNANUBzQCNAI0AFQCNgACAM4AAgQtdCAgICIArgE4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFZKkAI0AjQCNAC8AjQDVAc4AjQCNABUAjYAAgDOAAIELXQgICAiAK4BPCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWSpACNAI0AjQAvAI0A1QHPAI0AjQAVAI2AAIAAgACBC10ICAgIgCuAUAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVkqQAjQCNAI0ALwCNANUB0ACNAI0AFQCNgACAM4AAgQtdCAgICIArgFEICIAACNkAHwAjk0QADgAmk0UAIQB+k0aK8wQaAH8AngAVACcALwCNk05fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBC1qAoYAagD2AAIAECIELadMAOAA5AA6TUJNYAGCnBMoEywTMBM0EzgTPBNCAr4CwgLGAsoCzgLSAtaeTWZNak1uTXJNdk16TX4ELaoELa4ELbIELbYELboELb4ELcIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVkqUAjQCNAI0ALwCNANUEygCNAI0AFQCNgACAAIAAgQtoCAgICIArgK8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFZKlAI0AjQCNAC8AjQDVBMsAjQCNABUAjYAAgDOAAIELaAgICAiAK4CwCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWSpQCNAI0AjQAvAI0A1QTMAI0AjQAVAI2AAIAAgACBC2gICAgIgCuAsQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUFEAAVkqUAjQCNAI0ALwCNANUEzQCNAI0AFQCNgACAuoAAgQtoCAgICIArgLIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFZKlAI0AjQCNAC8AjQDVBM4AjQCNABUAjYAAgACAAIELaAgICAiAK4CzCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWSpQCNAI0AjQAvAI0A1QTPAI0AjQAVAI2AAIAAgACBC2gICAgIgCuAtAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVkqUAjQCNAI0ALwCNANUE0ACNAI0AFQCNgACAAIAAgQtoCAgICIArgLUICIAACN8QEgDDAMQAxZPLAB8AxwDIk8wAIQDGk80AyQAOACMAygDLACYAzAAVABUAFQAnAFsAjQCNk9UALwCNAH8AjQQQZ1sAjQCNk90AjV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQqyCAiBC3MIgBoIgL6BCAwICIELcggS4VOzy9MAOAA5AA6T4ZPkAGCiAbMEGoBGgKGik+WT5oELdIELf4A22QAfACOT6QAOACaT6gAhAH6T64r0AbMAfwCeABUAJwAvAI2T818QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYELcYBGgBqAPYAAgAQIgQt10wA4ADkADpP1k/4AYKgByQHKAcsBzAHNAc4BzwHQgEqAS4BMgE2AToBPgFCAUaiT/5QAlAGUApQDlASUBZQGgQt2gQt3gQt4gQt6gQt7gQt8gQt9gQt+gDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWT5QCNAI0AjQAvAI0A1QHJAI0AjQAVAI2AAIAzgACBC3QICAgIgCuASggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVk+UAjQCNAI0ALwCNANUBygCNAI0AFQCNgACAAIAAgQt0CAgICIArgEsICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVlCgAFZPlAI0AjQCNAC8AjQDVAcsAjQCNABUAjYAAgQt5gACBC3QICAgIgCuATAgIgAAI0wA4ADkADpQ2lDcAYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWT5QCNAI0AjQAvAI0A1QHMAI0AjQAVAI2AAIAzgACBC3QICAgIgCuATQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUCJQAVk+UAjQCNAI0ALwCNANUBzQCNAI0AFQCNgACAWIAAgQt0CAgICIArgE4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFZPlAI0AjQCNAC8AjQDVAc4AjQCNABUAjYAAgDOAAIELdAgICAiAK4BPCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWT5QCNAI0AjQAvAI0A1QHPAI0AjQAVAI2AAIAAgACBC3QICAgIgCuAUAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVk+UAjQCNAI0ALwCNANUB0ACNAI0AFQCNgACAM4AAgQt0CAgICIArgFEICIAACNkAHwAjlIUADgAmlIYAIQB+lIeK9AQaAH8AngAVACcALwCNlI9fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBC3GAoYAagD2AAIAECIELgNMAOAA5AA6UkZSZAGCnBMoEywTMBM0EzgTPBNCAr4CwgLGAsoCzgLSAtaeUmpSblJyUnZSelJ+UoIELgYELgoELg4ELhIELhYELhoELh4A23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVk+YAjQCNAI0ALwCNANUEygCNAI0AFQCNgACAAIAAgQt/CAgICIArgK8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFZPmAI0AjQCNAC8AjQDVBMsAjQCNABUAjYAAgDOAAIELfwgICAiAK4CwCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWT5gCNAI0AjQAvAI0A1QTMAI0AjQAVAI2AAIAAgACBC38ICAgIgCuAsQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUFEAAVk+YAjQCNAI0ALwCNANUEzQCNAI0AFQCNgACAuoAAgQt/CAgICIArgLIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFZPmAI0AjQCNAC8AjQDVBM4AjQCNABUAjYAAgACAAIELfwgICAiAK4CzCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWT5gCNAI0AjQAvAI0A1QTPAI0AjQAVAI2AAIAAgACBC38ICAgIgCuAtAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVk+YAjQCNAI0ALwCNANUE0ACNAI0AFQCNgACAAIAAgQt/CAgICIArgLUICIAACN8QEgDDAMQAxZUMAB8AxwDIlQ0AIQDGlQ4AyQAOACMAygDLACYAzAAVABUAFQAnAFsAjQCNlRYALwCNAH8AjQQQiukAjQCNlR4AjV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQqyCAiBC4oIgBoIgL6BCs0ICIELiQgSjUW2FdMAOAA5AA6VIpUlAGCiAbMEGoBGgKGilSaVJ4ELi4ELloA22QAfACOVKgAOACaVKwAhAH6VLIr1AbMAfwCeABUAJwAvAI2VNF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYELiIBGgBqAPYAAgAQIgQuM0wA4ADkADpU2lT8AYKgByQHKAcsBzAHNAc4BzwHQgEqAS4BMgE2AToBPgFCAUaiVQJVBlUKVQ5VElUWVRpVHgQuNgQuOgQuPgQuRgQuSgQuTgQuUgQuVgDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWVJgCNAI0AjQAvAI0A1QHJAI0AjQAVAI2AAIAzgACBC4sICAgIgCuASggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVlSYAjQCNAI0ALwCNANUBygCNAI0AFQCNgACAAIAAgQuLCAgICIArgEsICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVlWkAFZUmAI0AjQCNAC8AjQDVAcsAjQCNABUAjYAAgQuQgACBC4sICAgIgCuATAgIgAAI0wA4ADkADpV3lXgAYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWVJgCNAI0AjQAvAI0A1QHMAI0AjQAVAI2AAIAzgACBC4sICAgIgCuATQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUCJQAVlSYAjQCNAI0ALwCNANUBzQCNAI0AFQCNgACAWIAAgQuLCAgICIArgE4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFZUmAI0AjQCNAC8AjQDVAc4AjQCNABUAjYAAgDOAAIELiwgICAiAK4BPCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWVJgCNAI0AjQAvAI0A1QHPAI0AjQAVAI2AAIAAgACBC4sICAgIgCuAUAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVlSYAjQCNAI0ALwCNANUB0ACNAI0AFQCNgACAM4AAgQuLCAgICIArgFEICIAACNkAHwAjlcYADgAmlccAIQB+lciK9QQaAH8AngAVACcALwCNldBfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBC4iAoYAagD2AAIAECIELl9MAOAA5AA6V0pXaAGCnBMoEywTMBM0EzgTPBNCAr4CwgLGAsoCzgLSAtaeV25Xcld2V3pXfleCV4YELmIELmYELmoELm4ELnIELnYELnoA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVlScAjQCNAI0ALwCNANUEygCNAI0AFQCNgACAAIAAgQuWCAgICIArgK8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFZUnAI0AjQCNAC8AjQDVBMsAjQCNABUAjYAAgDOAAIELlggICAiAK4CwCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWVJwCNAI0AjQAvAI0A1QTMAI0AjQAVAI2AAIAAgACBC5YICAgIgCuAsQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUFEAAVlScAjQCNAI0ALwCNANUEzQCNAI0AFQCNgACAuoAAgQuWCAgICIArgLIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFZUnAI0AjQCNAC8AjQDVBM4AjQCNABUAjYAAgACAAIELlggICAiAK4CzCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWVJwCNAI0AjQAvAI0A1QTPAI0AjQAVAI2AAIAAgACBC5YICAgIgCuAtAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVlScAjQCNAI0ALwCNANUE0ACNAI0AFQCNgACAAIAAgQuWCAgICIArgLUICIAACN8QEgDDAMQAxZZNAB8AxwDIlk4AIQDGlk8AyQAOACMAygDLACYAzAAVABUAFQAnAFsAjQCNllcALwCNAH8AjQQQiuoAjQCNll8AjV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQqyCAiBC6EIgBoIgL6BCs4ICIELoAgSkeKvv9MAOAA5AA6WY5ZmAGCiAbMEGoBGgKGilmeWaIELooELrYA22QAfACOWawAOACaWbAAhAH6WbYr2AbMAfwCeABUAJwAvAI2WdV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYELn4BGgBqAPYAAgAQIgQuj0wA4ADkADpZ3loAAYKgByQHKAcsBzAHNAc4BzwHQgEqAS4BMgE2AToBPgFCAUaiWgZaCloOWhJaFloaWh5aIgQukgQulgQumgQuogQupgQuqgQurgQusgDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWWZwCNAI0AjQAvAI0A1QHJAI0AjQAVAI2AAIAzgACBC6IICAgIgCuASggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVlmcAjQCNAI0ALwCNANUBygCNAI0AFQCNgACAAIAAgQuiCAgICIArgEsICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVlqoAFZZnAI0AjQCNAC8AjQDVAcsAjQCNABUAjYAAgQungACBC6IICAgIgCuATAgIgAAI0wA4ADkADpa4lrkAYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWWZwCNAI0AjQAvAI0A1QHMAI0AjQAVAI2AAIAzgACBC6IICAgIgCuATQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUCJQAVlmcAjQCNAI0ALwCNANUBzQCNAI0AFQCNgACAWIAAgQuiCAgICIArgE4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFZZnAI0AjQCNAC8AjQDVAc4AjQCNABUAjYAAgDOAAIELoggICAiAK4BPCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWWZwCNAI0AjQAvAI0A1QHPAI0AjQAVAI2AAIAAgACBC6IICAgIgCuAUAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVlmcAjQCNAI0ALwCNANUB0ACNAI0AFQCNgACAM4AAgQuiCAgICIArgFEICIAACNkAHwAjlwcADgAmlwgAIQB+lwmK9gQaAH8AngAVACcALwCNlxFfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBC5+AoYAagD2AAIAECIELrtMAOAA5AA6XE5cbAGCnBMoEywTMBM0EzgTPBNCAr4CwgLGAsoCzgLSAtaeXHJcdlx6XH5cglyGXIoELr4ELsIELsYELsoELs4ELtIELtYA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUHdgAVlmgAjQCNAI0ALwCNANUEygCNAI0AFQCNgACA6IAAgQutCAgICIArgK8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFZZoAI0AjQCNAC8AjQDVBMsAjQCNABUAjYAAgDOAAIELrQgICAiAK4CwCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWWaACNAI0AjQAvAI0A1QTMAI0AjQAVAI2AAIAAgACBC60ICAgIgCuAsQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABVq8gAVlmgAjQCNAI0ALwCNANUEzQCNAI0AFQCNgACBCFCAAIELrQgICAiAK4CyCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWWaACNAI0AjQAvAI0A1QTOAI0AjQAVAI2AAIAAgACBC60ICAgIgCuAswgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVlmgAjQCNAI0ALwCNANUEzwCNAI0AFQCNgACAAIAAgQutCAgICIArgLQICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFZZoAI0AjQCNAC8AjQDVBNAAjQCNABUAjYAAgACAAIELrQgICAiAK4C1CAiAAAjfEBIAwwDEAMWXjgAfAMcAyJePACEAxpeQAMkADgAjAMoAywAmAMwAFQAVABUAJwBbAI0AjZeYAC8AjQB/AI0EEIrrAI0AjZegAI1fECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEKsggIgQu4CIAaCIC+gQrPCAiBC7cIEo5A5rTTADgAOQAOl6SXpwBgogGzBBqARoChopeol6mBC7mBC8SANtkAHwAjl6wADgAml60AIQB+l66K9wGzAH8AngAVACcALwCNl7ZfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBC7aARoAagD2AAIAECIELutMAOAA5AA6XuJfBAGCoAckBygHLAcwBzQHOAc8B0IBKgEuATIBNgE6AT4BQgFGol8KXw5fEl8WXxpfHl8iXyYELu4ELvIELvYELv4ELwIELwYELwoELw4A23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVl6gAjQCNAI0ALwCNANUByQCNAI0AFQCNgACAM4AAgQu5CAgICIArgEoICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFZeoAI0AjQCNAC8AjQDVAcoAjQCNABUAjYAAgACAAIELuQgICAiAK4BLCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFZfrABWXqACNAI0AjQAvAI0A1QHLAI0AjQAVAI2AAIELvoAAgQu5CAgICIArgEwICIAACNMAOAA5AA6X+Zf6AGCgoIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVl6gAjQCNAI0ALwCNANUBzACNAI0AFQCNgACAM4AAgQu5CAgICIArgE0ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAiUAFZeoAI0AjQCNAC8AjQDVAc0AjQCNABUAjYAAgFiAAIELuQgICAiAK4BOCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWXqACNAI0AjQAvAI0A1QHOAI0AjQAVAI2AAIAzgACBC7kICAgIgCuATwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVl6gAjQCNAI0ALwCNANUBzwCNAI0AFQCNgACAAIAAgQu5CAgICIArgFAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFZeoAI0AjQCNAC8AjQDVAdAAjQCNABUAjYAAgDOAAIELuQgICAiAK4BRCAiAAAjZAB8AI5hIAA4AJphJACEAfphKivcEGgB/AJ4AFQAnAC8AjZhSXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQu2gKGAGoA9gACABAiBC8XTADgAOQAOmFSYXABgpwTKBMsEzATNBM4EzwTQgK+AsICxgLKAs4C0gLWnmF2YXphfmGCYYZhimGOBC8aBC8eBC8iBC8mBC8qBC8uBC8yANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFZepAI0AjQCNAC8AjQDVBMoAjQCNABUAjYAAgACAAIELxAgICAiAK4CvCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWXqQCNAI0AjQAvAI0A1QTLAI0AjQAVAI2AAIAzgACBC8QICAgIgCuAsAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVl6kAjQCNAI0ALwCNANUEzACNAI0AFQCNgACAAIAAgQvECAgICIArgLEICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVB6QAFZepAI0AjQCNAC8AjQDVBM0AjQCNABUAjYAAgOyAAIELxAgICAiAK4CyCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWXqQCNAI0AjQAvAI0A1QTOAI0AjQAVAI2AAIAAgACBC8QICAgIgCuAswgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVl6kAjQCNAI0ALwCNANUEzwCNAI0AFQCNgACAAIAAgQvECAgICIArgLQICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFZepAI0AjQCNAC8AjQDVBNAAjQCNABUAjYAAgACAAIELxAgICAiAK4C1CAiAAAjSADkADpjPAN2ggCrfEBCY0pjTmNSY1QAfmNaY1wAhmNiY2QAOACOY2pjbACYAfgB/mN0AJwAnABOY4QCFAC8AJwB/AIgASgB/mOiY6QCNXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zZHVwbGljYXRlc18QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNzdG9yYWdlgBqBC+CABIAEgAKBC9CBAu+ABIAagQLxgBWAGoEMJoELzwgSL53u5NMAOAA5AA6Y7ZjvAGChAJKAHKGY8IEL0YA22QAfACOY8wAOACaY9AAhAH6Y9QBdAJIAfwCeABUAJwAvAI2Y/V8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYELzoAcgBqAPYAAgAQIgQvS0wA4ADkADpj/mQkAYKkApQCmAKcAqACpAKoAqwCsAK2AH4AggCGAIoAjgCSAJYAmgCepmQqZC5kMmQ2ZDpkPmRCZEZkSgQvTgQvVgQvWgQvYgQvZgQvbgQvcgQvegQvfgDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFZkWABWY8ACNAI0AjQAvAI0A1QClAI0AjQAVAI2AAIEL1IAAgQvRCAgICIArgB8ICIAACNIAOQAOmSQA3aCAKt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFZjwAI0AjQCNAC8AjQDVAKYAjQCNABUAjYAAgACAAIEL0QgICAiAK4AgCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFZk3ABWY8ACNAI0AjQAvAI0A1QCnAI0AjQAVAI2AAIEL14AAgQvRCAgICIArgCEICIAACNIAOQAOmUUA3aCAKt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFZjwAI0AjQCNAC8AjQDVAKgAjQCNABUAjYAAgACAAIEL0QgICAiAK4AiCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFZlYABWY8ACNAI0AjQAvAI0A1QCpAI0AjQAVAI2AAIEL2oAAgQvRCAgICIArgCMICIAACNIAOQAOmWYA3aCAKt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFZjwAI0AjQCNAC8AjQDVAKoAjQCNABUAjYAAgDOAAIEL0QgICAiAK4AkCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFZl5ABWY8ACNAI0AjQAvAI0A1QCrAI0AjQAVAI2AAIEL3YAAgQvRCAgICIArgCUICIAACNMAOAA5AA6Zh5mIAGCgoIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBVgAVmPAAjQCNAI0ALwCNANUArACNAI0AFQCNgACAOIAAgQvRCAgICIArgCYICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAEoAFZjwAI0AjQCNAC8AjQDVAK0AjQCNABUAjYAAgBWAAIEL0QgICAiAK4AnCAiAAAjTADgAOQAOmamZrQBgo4T3AzsDrYEKVIB2gIujma6Zr5mwgQvhgQv4gQwPgDbfEBIAwwDEAMWZswAfAMcAyJm0ACEAxpm1AMkADgAjAMoAywAmAMwAFQAVABUAJwBdAI0AjZm9AC8AjQB/AI0EEIT3AI0AjZnFAI1fECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIELzggIgQvjCIAaCIC+gQpUCAiBC+IIElq1NibTADgAOQAOmcmZzABgogGzBBqARoChopnNmc6BC+SBC++ANtkAHwAjmdEADgAmmdIAIQB+mdOZrgGzAH8AngAVACcALwCNmdtfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBC+GARoAagD2AAIAECIEL5dMAOAA5AA6Z3ZnmAGCoAckBygHLAcwBzQHOAc8B0IBKgEuATIBNgE6AT4BQgFGomeeZ6JnpmeqZ65nsme2Z7oEL5oEL54EL6IEL6oEL64EL7IEL7YEL7oA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVmc0AjQCNAI0ALwCNANUByQCNAI0AFQCNgACAM4AAgQvkCAgICIArgEoICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFZnNAI0AjQCNAC8AjQDVAcoAjQCNABUAjYAAgACAAIEL5AgICAiAK4BLCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFZoQABWZzQCNAI0AjQAvAI0A1QHLAI0AjQAVAI2AAIEL6YAAgQvkCAgICIArgEwICIAACNMAOAA5AA6aHpofAGCgoIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVmc0AjQCNAI0ALwCNANUBzACNAI0AFQCNgACAM4AAgQvkCAgICIArgE0ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAiUAFZnNAI0AjQCNAC8AjQDVAc0AjQCNABUAjYAAgFiAAIEL5AgICAiAK4BOCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWZzQCNAI0AjQAvAI0A1QHOAI0AjQAVAI2AAIAzgACBC+QICAgIgCuATwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVmc0AjQCNAI0ALwCNANUBzwCNAI0AFQCNgACAAIAAgQvkCAgICIArgFAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFZnNAI0AjQCNAC8AjQDVAdAAjQCNABUAjYAAgDOAAIEL5AgICAiAK4BRCAiAAAjZAB8AI5ptAA4AJppuACEAfppvma4EGgB/AJ4AFQAnAC8AjZp3XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQvhgKGAGoA9gACABAiBC/DTADgAOQAOmnmagQBgpwTKBMsEzATNBM4EzwTQgK+AsICxgLKAs4C0gLWnmoKag5qEmoWahpqHmoiBC/GBC/KBC/OBC/SBC/WBC/aBC/eANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFZnOAI0AjQCNAC8AjQDVBMoAjQCNABUAjYAAgACAAIEL7wgICAiAK4CvCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWZzgCNAI0AjQAvAI0A1QTLAI0AjQAVAI2AAIAzgACBC+8ICAgIgCuAsAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVmc4AjQCNAI0ALwCNANUEzACNAI0AFQCNgACAAIAAgQvvCAgICIArgLEICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVBRAAFZnOAI0AjQCNAC8AjQDVBM0AjQCNABUAjYAAgLqAAIEL7wgICAiAK4CyCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWZzgCNAI0AjQAvAI0A1QTOAI0AjQAVAI2AAIAAgACBC+8ICAgIgCuAswgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVmc4AjQCNAI0ALwCNANUEzwCNAI0AFQCNgACAAIAAgQvvCAgICIArgLQICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFZnOAI0AjQCNAC8AjQDVBNAAjQCNABUAjYAAgACAAIEL7wgICAiAK4C1CAiAAAjfEBIAwwDEAMWa9AAfAMcAyJr1ACEAxpr2AMkADgAjAMoAywAmAMwAFQAVABUAJwBdAI0AjZr+AC8AjQB/AI0EEAM7AI0AjZsGAI1fECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIELzggIgQv6CIAaCIC+gHYICIEL+QgTAAAAARdAUxXTADgAOQAOmwqbDQBgogGzBBqARoChopsOmw+BC/uBDAaANtkAHwAjmxIADgAmmxMAIQB+mxSZrwGzAH8AngAVACcALwCNmxxfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBC/iARoAagD2AAIAECIEL/NMAOAA5AA6bHpsnAGCoAckBygHLAcwBzQHOAc8B0IBKgEuATIBNgE6AT4BQgFGomyibKZsqmyubLJstmy6bL4EL/YEL/oEL/4EMAYEMAoEMA4EMBIEMBYA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVmw4AjQCNAI0ALwCNANUByQCNAI0AFQCNgACAM4AAgQv7CAgICIArgEoICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFZsOAI0AjQCNAC8AjQDVAcoAjQCNABUAjYAAgACAAIEL+wgICAiAK4BLCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFZtRABWbDgCNAI0AjQAvAI0A1QHLAI0AjQAVAI2AAIEMAIAAgQv7CAgICIArgEwICIAACNMAOAA5AA6bX5tgAGCgoIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVmw4AjQCNAI0ALwCNANUBzACNAI0AFQCNgACAM4AAgQv7CAgICIArgE0ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAiUAFZsOAI0AjQCNAC8AjQDVAc0AjQCNABUAjYAAgFiAAIEL+wgICAiAK4BOCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWbDgCNAI0AjQAvAI0A1QHOAI0AjQAVAI2AAIAzgACBC/sICAgIgCuATwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVmw4AjQCNAI0ALwCNANUBzwCNAI0AFQCNgACAAIAAgQv7CAgICIArgFAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFZsOAI0AjQCNAC8AjQDVAdAAjQCNABUAjYAAgDOAAIEL+wgICAiAK4BRCAiAAAjZAB8AI5uuAA4AJpuvACEAfpuwma8EGgB/AJ4AFQAnAC8AjZu4XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQv4gKGAGoA9gACABAiBDAfTADgAOQAOm7qbwgBgpwTKBMsEzATNBM4EzwTQgK+AsICxgLKAs4C0gLWnm8ObxJvFm8abx5vIm8mBDAiBDAmBDAqBDAuBDAyBDA2BDA6ANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFZsPAI0AjQCNAC8AjQDVBMoAjQCNABUAjYAAgACAAIEMBggICAiAK4CvCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWbDwCNAI0AjQAvAI0A1QTLAI0AjQAVAI2AAIAzgACBDAYICAgIgCuAsAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVmw8AjQCNAI0ALwCNANUEzACNAI0AFQCNgACAAIAAgQwGCAgICIArgLEICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVBRAAFZsPAI0AjQCNAC8AjQDVBM0AjQCNABUAjYAAgLqAAIEMBggICAiAK4CyCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWbDwCNAI0AjQAvAI0A1QTOAI0AjQAVAI2AAIAAgACBDAYICAgIgCuAswgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVmw8AjQCNAI0ALwCNANUEzwCNAI0AFQCNgACAAIAAgQwGCAgICIArgLQICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFZsPAI0AjQCNAC8AjQDVBNAAjQCNABUAjYAAgACAAIEMBggICAiAK4C1CAiAAAjfEBIAwwDEAMWcNQAfAMcAyJw2ACEAxpw3AMkADgAjAMoAywAmAMwAFQAVABUAJwBdAI0AjZw/AC8AjQB/AI0EEAOtAI0AjZxHAI1fECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIELzggIgQwRCIAaCIC+gIsICIEMEAgS2YUAN9MAOAA5AA6cS5xOAGCiAbMEGoBGgKGinE+cUIEMEoEMHYA22QAfACOcUwAOACacVAAhAH6cVZmwAbMAfwCeABUAJwAvAI2cXV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEMD4BGgBqAPYAAgAQIgQwT0wA4ADkADpxfnGgAYKgByQHKAcsBzAHNAc4BzwHQgEqAS4BMgE2AToBPgFCAUaicaZxqnGucbJxtnG6cb5xwgQwUgQwVgQwWgQwYgQwZgQwagQwbgQwcgDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWcTwCNAI0AjQAvAI0A1QHJAI0AjQAVAI2AAIAzgACBDBIICAgIgCuASggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVnE8AjQCNAI0ALwCNANUBygCNAI0AFQCNgACAAIAAgQwSCAgICIArgEsICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVnJIAFZxPAI0AjQCNAC8AjQDVAcsAjQCNABUAjYAAgQwXgACBDBIICAgIgCuATAgIgAAI0wA4ADkADpygnKEAYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWcTwCNAI0AjQAvAI0A1QHMAI0AjQAVAI2AAIAzgACBDBIICAgIgCuATQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUCJQAVnE8AjQCNAI0ALwCNANUBzQCNAI0AFQCNgACAWIAAgQwSCAgICIArgE4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFZxPAI0AjQCNAC8AjQDVAc4AjQCNABUAjYAAgDOAAIEMEggICAiAK4BPCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWcTwCNAI0AjQAvAI0A1QHPAI0AjQAVAI2AAIAAgACBDBIICAgIgCuAUAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVnE8AjQCNAI0ALwCNANUB0ACNAI0AFQCNgACAM4AAgQwSCAgICIArgFEICIAACNkAHwAjnO8ADgAmnPAAIQB+nPGZsAQaAH8AngAVACcALwCNnPlfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBDA+AoYAagD2AAIAECIEMHtMAOAA5AA6c+50DAGCnBMoEywTMBM0EzgTPBNCAr4CwgLGAsoCzgLSAtaedBJ0FnQadB50InQmdCoEMH4EMIIEMIYEMIoEMI4EMJIEMJYA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVnFAAjQCNAI0ALwCNANUEygCNAI0AFQCNgACAAIAAgQwdCAgICIArgK8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFZxQAI0AjQCNAC8AjQDVBMsAjQCNABUAjYAAgDOAAIEMHQgICAiAK4CwCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWcUACNAI0AjQAvAI0A1QTMAI0AjQAVAI2AAIAAgACBDB0ICAgIgCuAsQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUFEAAVnFAAjQCNAI0ALwCNANUEzQCNAI0AFQCNgACAuoAAgQwdCAgICIArgLIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFZxQAI0AjQCNAC8AjQDVBM4AjQCNABUAjYAAgACAAIEMHQgICAiAK4CzCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWcUACNAI0AjQAvAI0A1QTPAI0AjQAVAI2AAIAAgACBDB0ICAgIgCuAtAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVnFAAjQCNAI0ALwCNANUE0ACNAI0AFQCNgACAAIAAgQwdCAgICIArgLUICIAACNIAOQAOnXYA3aCAKt8QEJ15nXqde518AB+dfZ1+ACGdf52AAA4AI52BnYIAJgB+AH+dhAAnACcAE52IAIUALwAnAH8AiABLAH+dj52QAI1fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2VfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNkdXBsaWNhdGVzXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3N0b3JhZ2WAGoEMOoAEgASAAoEMKYEC74AEgBqBAvGAFoAagQyCgQwoCBLbMl2N0wA4ADkADp2UnZYAYKEAkoAcoZ2XgQwqgDbZAB8AI52aAA4AJp2bACEAfp2cAF4AkgB/AJ4AFQAnAC8AjZ2kXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQwngByAGoA9gACABAiBDCvTADgAOQAOnaadsABgqQClAKYApwCoAKkAqgCrAKwArYAfgCCAIYAigCOAJIAlgCaAJ6mdsZ2ynbOdtJ21nbadt524nbmBDCyBDC6BDC+BDDGBDDKBDDSBDDWBDDeBDDiANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVnb0AFZ2XAI0AjQCNAC8AjQDVAKUAjQCNABUAjYAAgQwtgACBDCoICAgIgCuAHwgIgAAI0gA5AA6dywDdoIAq3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVnZcAjQCNAI0ALwCNANUApgCNAI0AFQCNgACAAIAAgQwqCAgICIArgCAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVnd4AFZ2XAI0AjQCNAC8AjQDVAKcAjQCNABUAjYAAgQwwgACBDCoICAgIgCuAIQgIgAAI0gA5AA6d7ADdoIAq3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVnZcAjQCNAI0ALwCNANUAqACNAI0AFQCNgACAAIAAgQwqCAgICIArgCIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVnf8AFZ2XAI0AjQCNAC8AjQDVAKkAjQCNABUAjYAAgQwzgACBDCoICAgIgCuAIwgIgAAI0gA5AA6eDQDdoIAq3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVnZcAjQCNAI0ALwCNANUAqgCNAI0AFQCNgACAM4AAgQwqCAgICIArgCQICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVniAAFZ2XAI0AjQCNAC8AjQDVAKsAjQCNABUAjYAAgQw2gACBDCoICAgIgCuAJQgIgAAI0wA4ADkADp4uni8AYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQFWABWdlwCNAI0AjQAvAI0A1QCsAI0AjQAVAI2AAIA4gACBDCoICAgIgCuAJggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABWeQgAVnZcAjQCNAI0ALwCNANUArQCNAI0AFQCNgACBDDmAAIEMKggICAiAK4AnCAiAAAheQ0RQaGlzaGluZ0l0ZW3TADgAOQAOnlGeVQBgo55SnlNnW4EMO4EMPIEIDKOeVp5XnliBDD2BDFSBDGuANlZzb3VyY2VZcHVibGljS2V53xASAMMAxADFnl0AHwDHAMieXgAhAMaeXwDJAA4AIwDKAMsAJgDMABUAFQAVACcAXgCNAI2eZwAvAI0AfwCNBBCeUgCNAI2ebwCNXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBDCcICIEMPwiAGgiAvoEMOwgIgQw+CBMAAAABEpyLWdMAOAA5AA6ec552AGCiAbMEGoBGgKGinneeeIEMQIEMS4A22QAfACOeewAOACaefAAhAH6efZ5WAbMAfwCeABUAJwAvAI2ehV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEMPYBGgBqAPYAAgAQIgQxB0wA4ADkADp6HnpAAYKgByQHKAcsBzAHNAc4BzwHQgEqAS4BMgE2AToBPgFCAUaiekZ6SnpOelJ6Vnpael56YgQxCgQxDgQxEgQxGgQxHgQxIgQxJgQxKgDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWedwCNAI0AjQAvAI0A1QHJAI0AjQAVAI2AAIAzgACBDEAICAgIgCuASggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVnncAjQCNAI0ALwCNANUBygCNAI0AFQCNgACAAIAAgQxACAgICIArgEsICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVnroAFZ53AI0AjQCNAC8AjQDVAcsAjQCNABUAjYAAgQxFgACBDEAICAgIgCuATAgIgAAI0wA4ADkADp7InskAYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWedwCNAI0AjQAvAI0A1QHMAI0AjQAVAI2AAIAzgACBDEAICAgIgCuATQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUCJQAVnncAjQCNAI0ALwCNANUBzQCNAI0AFQCNgACAWIAAgQxACAgICIArgE4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFZ53AI0AjQCNAC8AjQDVAc4AjQCNABUAjYAAgDOAAIEMQAgICAiAK4BPCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWedwCNAI0AjQAvAI0A1QHPAI0AjQAVAI2AAIAAgACBDEAICAgIgCuAUAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVnncAjQCNAI0ALwCNANUB0ACNAI0AFQCNgACAM4AAgQxACAgICIArgFEICIAACNkAHwAjnxcADgAmnxgAIQB+nxmeVgQaAH8AngAVACcALwCNnyFfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBDD2AoYAagD2AAIAECIEMTNMAOAA5AA6fI58rAGCnBMoEywTMBM0EzgTPBNCAr4CwgLGAsoCzgLSAtaefLJ8tny6fL58wnzGfMoEMTYEMToEMT4EMUIEMUYEMUoEMU4A23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVnngAjQCNAI0ALwCNANUEygCNAI0AFQCNgACAAIAAgQxLCAgICIArgK8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFZ54AI0AjQCNAC8AjQDVBMsAjQCNABUAjYAAgDOAAIEMSwgICAiAK4CwCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWeeACNAI0AjQAvAI0A1QTMAI0AjQAVAI2AAIAAgACBDEsICAgIgCuAsQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUFEAAVnngAjQCNAI0ALwCNANUEzQCNAI0AFQCNgACAuoAAgQxLCAgICIArgLIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFZ54AI0AjQCNAC8AjQDVBM4AjQCNABUAjYAAgACAAIEMSwgICAiAK4CzCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWeeACNAI0AjQAvAI0A1QTPAI0AjQAVAI2AAIAAgACBDEsICAgIgCuAtAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVnngAjQCNAI0ALwCNANUE0ACNAI0AFQCNgACAAIAAgQxLCAgICIArgLUICIAACN8QEgDDAMQAxZ+eAB8AxwDIn58AIQDGn6AAyQAOACMAygDLACYAzAAVABUAFQAnAF4AjQCNn6gALwCNAH8AjQQQnlMAjQCNn7AAjV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQwnCAiBDFYIgBoIgL6BDDwICIEMVQgSU52mzdMAOAA5AA6ftJ+3AGCiAbMEGoBGgKGin7ifuYEMV4EMYoA22QAfACOfvAAOACafvQAhAH6fvp5XAbMAfwCeABUAJwAvAI2fxl8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEMVIBGgBqAPYAAgAQIgQxY0wA4ADkADp/In9EAYKgByQHKAcsBzAHNAc4BzwHQgEqAS4BMgE2AToBPgFCAUaif0p/Tn9Sf1Z/Wn9ef2J/ZgQxZgQxagQxbgQxdgQxegQxfgQxggQxhgDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWfuACNAI0AjQAvAI0A1QHJAI0AjQAVAI2AAIAzgACBDFcICAgIgCuASggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVn7gAjQCNAI0ALwCNANUBygCNAI0AFQCNgACAAIAAgQxXCAgICIArgEsICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVn/sAFZ+4AI0AjQCNAC8AjQDVAcsAjQCNABUAjYAAgQxcgACBDFcICAgIgCuATAgIgAAI0wA4ADkADqAJoAoAYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWfuACNAI0AjQAvAI0A1QHMAI0AjQAVAI2AAIAzgACBDFcICAgIgCuATQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUCJQAVn7gAjQCNAI0ALwCNANUBzQCNAI0AFQCNgACAWIAAgQxXCAgICIArgE4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFZ+4AI0AjQCNAC8AjQDVAc4AjQCNABUAjYAAgDOAAIEMVwgICAiAK4BPCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWfuACNAI0AjQAvAI0A1QHPAI0AjQAVAI2AAIAAgACBDFcICAgIgCuAUAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVn7gAjQCNAI0ALwCNANUB0ACNAI0AFQCNgACAM4AAgQxXCAgICIArgFEICIAACNkAHwAjoFgADgAmoFkAIQB+oFqeVwQaAH8AngAVACcALwCNoGJfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBDFSAoYAagD2AAIAECIEMY9MAOAA5AA6gZKBsAGCnBMoEywTMBM0EzgTPBNCAr4CwgLGAsoCzgLSAtaegbaBuoG+gcKBxoHKgc4EMZIEMZYEMZoEMZ4EMaIEMaYEMaoA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVn7kAjQCNAI0ALwCNANUEygCNAI0AFQCNgACAAIAAgQxiCAgICIArgK8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFZ+5AI0AjQCNAC8AjQDVBMsAjQCNABUAjYAAgDOAAIEMYggICAiAK4CwCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWfuQCNAI0AjQAvAI0A1QTMAI0AjQAVAI2AAIAAgACBDGIICAgIgCuAsQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUFEAAVn7kAjQCNAI0ALwCNANUEzQCNAI0AFQCNgACAuoAAgQxiCAgICIArgLIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFZ+5AI0AjQCNAC8AjQDVBM4AjQCNABUAjYAAgACAAIEMYggICAiAK4CzCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWfuQCNAI0AjQAvAI0A1QTPAI0AjQAVAI2AAIAAgACBDGIICAgIgCuAtAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVn7kAjQCNAI0ALwCNANUE0ACNAI0AFQCNgACAAIAAgQxiCAgICIArgLUICIAACN8QEgDDAMQAxaDfAB8AxwDIoOAAIQDGoOEAyQAOACMAygDLACYAzAAVABUAFQAnAF4AjQCNoOkALwCNAH8AjQQQZ1sAjQCNoPEAjV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQwnCAiBDG0IgBoIgL6BCAwICIEMbAgSh03JVtMAOAA5AA6g9aD4AGCiAbMEGoBGgKGioPmg+oEMboEMeYA22QAfACOg/QAOACag/gAhAH6g/55YAbMAfwCeABUAJwAvAI2hB18QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEMa4BGgBqAPYAAgAQIgQxv0wA4ADkADqEJoRIAYKgByQHKAcsBzAHNAc4BzwHQgEqAS4BMgE2AToBPgFCAUaihE6EUoRWhFqEXoRihGaEagQxwgQxxgQxygQx0gQx1gQx2gQx3gQx4gDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWg+QCNAI0AjQAvAI0A1QHJAI0AjQAVAI2AAIAzgACBDG4ICAgIgCuASggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVoPkAjQCNAI0ALwCNANUBygCNAI0AFQCNgACAAIAAgQxuCAgICIArgEsICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVoTwAFaD5AI0AjQCNAC8AjQDVAcsAjQCNABUAjYAAgQxzgACBDG4ICAgIgCuATAgIgAAI0wA4ADkADqFKoUsAYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWg+QCNAI0AjQAvAI0A1QHMAI0AjQAVAI2AAIAzgACBDG4ICAgIgCuATQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUCJQAVoPkAjQCNAI0ALwCNANUBzQCNAI0AFQCNgACAWIAAgQxuCAgICIArgE4ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFaD5AI0AjQCNAC8AjQDVAc4AjQCNABUAjYAAgDOAAIEMbggICAiAK4BPCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWg+QCNAI0AjQAvAI0A1QHPAI0AjQAVAI2AAIAAgACBDG4ICAgIgCuAUAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVoPkAjQCNAI0ALwCNANUB0ACNAI0AFQCNgACAM4AAgQxuCAgICIArgFEICIAACNkAHwAjoZkADgAmoZoAIQB+oZueWAQaAH8AngAVACcALwCNoaNfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBDGuAoYAagD2AAIAECIEMetMAOAA5AA6hpaGtAGCnBMoEywTMBM0EzgTPBNCAr4CwgLGAsoCzgLSAtaehrqGvobChsaGyobOhtIEMe4EMfIEMfYEMfoEMf4EMgIEMgYA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVoPoAjQCNAI0ALwCNANUEygCNAI0AFQCNgACAAIAAgQx5CAgICIArgK8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFaD6AI0AjQCNAC8AjQDVBMsAjQCNABUAjYAAgDOAAIEMeQgICAiAK4CwCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWg+gCNAI0AjQAvAI0A1QTMAI0AjQAVAI2AAIAAgACBDHkICAgIgCuAsQgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUFEAAVoPoAjQCNAI0ALwCNANUEzQCNAI0AFQCNgACAuoAAgQx5CAgICIArgLIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFaD6AI0AjQCNAC8AjQDVBM4AjQCNABUAjYAAgACAAIEMeQgICAiAK4CzCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWg+gCNAI0AjQAvAI0A1QTPAI0AjQAVAI2AAIAAgACBDHkICAgIgCuAtAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVoPoAjQCNAI0ALwCNANUE0ACNAI0AFQCNgACAAIAAgQx5CAgICIArgLUICIAACNIAOQAOoiAA3aCAKt8QEKIjoiSiJaImAB+iJ6IoACGiKaIqAA4AI6IroiwAJgB+AH+iLgAnACcAE6IyAIUALwAnAH8AiABMAH+iOaI6AI1fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2VfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNkdXBsaWNhdGVzXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3N0b3JhZ2WAGoEMloAEgASAAoEMhYEC74AEgBqBAvGAF4AagQzGgQyECBJ3WOFN0wA4ADkADqI+okAAYKEAkoAcoaJBgQyGgDbZAB8AI6JEAA4AJqJFACEAfqJGAF8AkgB/AJ4AFQAnAC8AjaJOXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQyDgByAGoA9gACABAiBDIfTADgAOQAOolCiWgBgqQClAKYApwCoAKkAqgCrAKwArYAfgCCAIYAigCOAJIAlgCaAJ6miW6Jcol2iXqJfomCiYaJiomOBDIiBDIqBDIuBDI2BDI6BDJCBDJGBDJOBDJSANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVomcAFaJBAI0AjQCNAC8AjQDVAKUAjQCNABUAjYAAgQyJgACBDIYICAgIgCuAHwgIgAAI0gA5AA6idQDdoIAq3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVokEAjQCNAI0ALwCNANUApgCNAI0AFQCNgACAAIAAgQyGCAgICIArgCAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVoogAFaJBAI0AjQCNAC8AjQDVAKcAjQCNABUAjYAAgQyMgACBDIYICAgIgCuAIQgIgAAI0gA5AA6ilgDdoIAq3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVokEAjQCNAI0ALwCNANUAqACNAI0AFQCNgACAAIAAgQyGCAgICIArgCIICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVoqkAFaJBAI0AjQCNAC8AjQDVAKkAjQCNABUAjYAAgQyPgACBDIYICAgIgCuAIwgIgAAI0gA5AA6itwDdoIAq3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVokEAjQCNAI0ALwCNANUAqgCNAI0AFQCNgACAM4AAgQyGCAgICIArgCQICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVosoAFaJBAI0AjQCNAC8AjQDVAKsAjQCNABUAjYAAgQySgACBDIYICAgIgCuAJQgIgAAI0wA4ADkADqLYotkAYKCggDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQFWABWiQQCNAI0AjQAvAI0A1QCsAI0AjQAVAI2AAIA4gACBDIYICAgIgCuAJggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABWi7AAVokEAjQCNAI0ALwCNANUArQCNAI0AFQCNgACBDJWAAIEMhggICAiAK4AnCAiAAAhfEBJDRENoYWluU3RvcmFnZUl0ZW3TADgAOQAOovui/gBgoqL8Z1uBDJeBCAyiov+jAIEMmIEMr4A2VGRhdGHfEBIAwwDEAMWjBAAfAMcAyKMFACEAxqMGAMkADgAjAMoAywAmAMwAFQAVABUAJwBfAI0AjaMOAC8AjQB/AI0EEKL8AI0AjaMWAI1fECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEMgwgIgQyaCIAaCIC+gQyXCAiBDJkIEr0IESXTADgAOQAOoxqjHQBgogGzBBqARoChoqMeox+BDJuBDKaANtkAHwAjoyIADgAmoyMAIQB+oySi/wGzAH8AngAVACcALwCNoyxfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBDJiARoAagD2AAIAECIEMnNMAOAA5AA6jLqM3AGCoAckBygHLAcwBzQHOAc8B0IBKgEuATIBNgE6AT4BQgFGoozijOaM6ozujPKM9oz6jP4EMnYEMnoEMn4EMoYEMooEMo4EMpIEMpYA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVox4AjQCNAI0ALwCNANUByQCNAI0AFQCNgACAM4AAgQybCAgICIArgEoICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFaMeAI0AjQCNAC8AjQDVAcoAjQCNABUAjYAAgACAAIEMmwgICAiAK4BLCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFaNhABWjHgCNAI0AjQAvAI0A1QHLAI0AjQAVAI2AAIEMoIAAgQybCAgICIArgEwICIAACNMAOAA5AA6jb6NwAGCgoIA23xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVox4AjQCNAI0ALwCNANUBzACNAI0AFQCNgACAM4AAgQybCAgICIArgE0ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAiUAFaMeAI0AjQCNAC8AjQDVAc0AjQCNABUAjYAAgFiAAIEMmwgICAiAK4BOCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWjHgCNAI0AjQAvAI0A1QHOAI0AjQAVAI2AAIAzgACBDJsICAgIgCuATwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVox4AjQCNAI0ALwCNANUBzwCNAI0AFQCNgACAAIAAgQybCAgICIArgFAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFaMeAI0AjQCNAC8AjQDVAdAAjQCNABUAjYAAgDOAAIEMmwgICAiAK4BRCAiAAAjZAB8AI6O+AA4AJqO/ACEAfqPAov8EGgB/AJ4AFQAnAC8AjaPIXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQyYgKGAGoA9gACABAiBDKfTADgAOQAOo8qj0gBgpwTKBMsEzATNBM4EzwTQgK+AsICxgLKAs4C0gLWno9Oj1KPVo9aj16PYo9mBDKiBDKmBDKqBDKuBDKyBDK2BDK6ANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFaMfAI0AjQCNAC8AjQDVBMoAjQCNABUAjYAAgACAAIEMpggICAiAK4CvCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWjHwCNAI0AjQAvAI0A1QTLAI0AjQAVAI2AAIAzgACBDKYICAgIgCuAsAgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVox8AjQCNAI0ALwCNANUEzACNAI0AFQCNgACAAIAAgQymCAgICIArgLEICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVftgAFaMfAI0AjQCNAC8AjQDVBM0AjQCNABUAjYAAgQnegACBDKYICAgIgCuAsggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVox8AjQCNAI0ALwCNANUEzgCNAI0AFQCNgACAAIAAgQymCAgICIArgLMICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFaMfAI0AjQCNAC8AjQDVBM8AjQCNABUAjYAAgACAAIEMpggICAiAK4C0CAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWjHwCNAI0AjQAvAI0A1QTQAI0AjQAVAI2AAIAAgACBDKYICAgIgCuAtQgIgAAI3xASAMMAxADFpEUAHwDHAMikRgAhAMakRwDJAA4AIwDKAMsAJgDMABUAFQAVACcAXwCNAI2kTwAvAI0AfwCNBBBnWwCNAI2kVwCNXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASBDIMICIEMsQiAGgiAvoEIDAgIgQywCBLwgbTE0wA4ADkADqRbpF4AYKIBswQagEaAoaKkX6RggQyygQy9gDbZAB8AI6RjAA4AJqRkACEAfqRlowABswB/AJ4AFQAnAC8AjaRtXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQyvgEaAGoA9gACABAiBDLPTADgAOQAOpG+keABgqAHJAcoBywHMAc0BzgHPAdCASoBLgEyATYBOgE+AUIBRqKR5pHqke6R8pH2kfqR/pICBDLSBDLWBDLaBDLiBDLmBDLqBDLuBDLyANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFaRfAI0AjQCNAC8AjQDVAckAjQCNABUAjYAAgDOAAIEMsggICAiAK4BKCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWkXwCNAI0AjQAvAI0A1QHKAI0AjQAVAI2AAIAAgACBDLIICAgIgCuASwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABWkogAVpF8AjQCNAI0ALwCNANUBywCNAI0AFQCNgACBDLeAAIEMsggICAiAK4BMCAiAAAjTADgAOQAOpLCksQBgoKCANt8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVAS8AFaRfAI0AjQCNAC8AjQDVAcwAjQCNABUAjYAAgDOAAIEMsggICAiAK4BNCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQIlABWkXwCNAI0AjQAvAI0A1QHNAI0AjQAVAI2AAIBYgACBDLIICAgIgCuATggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVpF8AjQCNAI0ALwCNANUBzgCNAI0AFQCNgACAM4AAgQyyCAgICIArgE8ICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFaRfAI0AjQCNAC8AjQDVAc8AjQCNABUAjYAAgACAAIEMsggICAiAK4BQCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQEvABWkXwCNAI0AjQAvAI0A1QHQAI0AjQAVAI2AAIAzgACBDLIICAgIgCuAUQgIgAAI2QAfACOk/wAOACalAAAhAH6lAaMABBoAfwCeABUAJwAvAI2lCV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEMr4ChgBqAPYAAgAQIgQy+0wA4ADkADqULpRMAYKcEygTLBMwEzQTOBM8E0ICvgLCAsYCygLOAtIC1p6UUpRWlFqUXpRilGaUagQy/gQzAgQzBgQzCgQzDgQzEgQzFgDbfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWkYACNAI0AjQAvAI0A1QTKAI0AjQAVAI2AAIAAgACBDL0ICAgIgCuArwgIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUBLwAVpGAAjQCNAI0ALwCNANUEywCNAI0AFQCNgACAM4AAgQy9CAgICIArgLAICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFaRgAI0AjQCNAC8AjQDVBMwAjQCNABUAjYAAgACAAIEMvQgICAiAK4CxCAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQUQABWkYACNAI0AjQAvAI0A1QTNAI0AjQAVAI2AAIC6gACBDL0ICAgIgCuAsggIgAAI3xAPAMMAxADFAB8AxgDHAMgAIQDJAA4AIwDKAMsAJgDMABUAFQAVpGAAjQCNAI0ALwCNANUEzgCNAI0AFQCNgACAAIAAgQy9CAgICIArgLMICIAACN8QDwDDAMQAxQAfAMYAxwDIACEAyQAOACMAygDLACYAzAAVABUAFaRgAI0AjQCNAC8AjQDVBM8AjQCNABUAjYAAgACAAIEMvQgICAiAK4C0CAiAAAjfEA8AwwDEAMUAHwDGAMcAyAAhAMkADgAjAMoAywAmAMwAFQAVABWkYACNAI0AjQAvAI0A1QTQAI0AjQAVAI2AAIAAgACBDL0ICAgIgCuAtQgIgAAI0gA5AA6lhgDdoIAq0wA4ADkADqWJpYoAYKCggDbTADgAOQAOpY2ljgBgoKCANtMAOAA5AA6lkaWSAGCgoIA20gDfAOCllaWWXlhETW9kZWxQYWNrYWdlpqWXpZilmaWapZsA5F5YRE1vZGVsUGFja2FnZV8QD1hEVU1MUGFja2FnZUltcF8QEVhEVU1MTmFtZXNwYWNlSW1wXxAUWERVTUxOYW1lZEVsZW1lbnRJbXBfEA9YRFVNTEVsZW1lbnRJbXDSADkADqWdAN2ggCrTADgAOQAOpaCloQBgoKCANtIA3wDgpaSlpVlYRFBNTW9kZWyjpaSlpgDkV1hETW9kZWwAAAAIAAAAGQAAACIAAAAsAAAAMQAAADoAAAA/AAAAUQAAAFYAAABbAAAAXQAAGf0AABoDAAAaHAAAGi4AABo1AAAaQwAAGlAAABpoAAAaggAAGoQAABqHAAAaiQAAGowAABqPAAAakgAAGssAABrqAAAbBwAAGyYAABs4AAAbWAAAG18AABt9AAAbiQAAG6UAABurAAAbzQAAG+4AABwBAAAcAwAAHAYAABwJAAAcCwAAHA0AABwPAAAcEgAAHBUAABwXAAAcGQAAHBsAABwdAAAcHwAAHCEAABwiAAAcJgAAHDMAABw7AAAcRgAAHG0AABxvAAAccQAAHHMAABx1AAAcdwAAHHkAABx7AAAcfQAAHH8AAByBAAAcgwAAHIUAAByHAAAciQAAHIsAAByNAAAcjwAAHJEAABy4AAAcugAAHLwAABy/AAAcwgAAHMUAABzIAAAcywAAHM4AABzRAAAc1AAAHNcAABzaAAAc3QAAHOAAABzjAAAc5gAAHOkAABzsAAAc7gAAHPwAAB0EAAAdGgAAHSIAAB0wAAAdTAAAHV8AAB1rAAAdgwAAHZIAAB2kAAAdrwAAHbsAAB3WAAAd8gAAHfwAAB4LAAAeIAAAHmMAAB6HAAAeqwAAHs4AAB71AAAfFQAAHzwAAB9jAAAfgwAAH6cAAB/LAAAf1wAAH9kAAB/bAAAf3QAAH98AAB/hAAAf4wAAH+YAAB/oAAAf6gAAH+0AAB/vAAAf8QAAH/QAAB/2AAAf9wAAH/wAACAEAAAgEQAAIBQAACAWAAAgGQAAIBsAACAdAAAgLAAAIFEAACB1AAAgnAAAIMAAACDCAAAgxAAAIMYAACDIAAAgygAAIMwAACDNAAAgzwAAINwAACDvAAAg8QAAIPMAACD1AAAg9wAAIPkAACD7AAAg/QAAIP8AACEBAAAhFAAAIRYAACEYAAAhGgAAIRwAACEeAAAhIAAAISIAACEkAAAhJgAAISgAACE+AAAhUQAAIW0AACGKAAAhpgAAIboAACHMAAAh4gAAIfsAACI6AAAiQAAAIkkAACJWAAAiYgAAImwAACJ2AAAigQAAIowAACKZAAAioQAAIqMAACKlAAAipwAAIqkAACKqAAAiqwAAIqwAACKtAAAirwAAIrEAACKyAAAiswAAIrUAACK2AAAivwAAIsAAACLCAAAiywAAItYAACLfAAAi7gAAIvUAACL9AAAjBgAAIw8AACMiAAAjKwAAIz4AACNVAAAjZwAAI6YAACOoAAAjqgAAI6wAACOuAAAjrwAAI7AAACOxAAAjsgAAI7QAACO2AAAjtwAAI7gAACO6AAAjuwAAI/oAACP8AAAj/gAAJAAAACQCAAAkAwAAJAQAACQFAAAkBgAAJAgAACQKAAAkCwAAJAwAACQOAAAkDwAAJBgAACQZAAAkGwAAJFoAACRcAAAkXgAAJGAAACRiAAAkYwAAJGQAACRlAAAkZgAAJGgAACRqAAAkawAAJGwAACRuAAAkbwAAJK4AACSwAAAksgAAJLQAACS2AAAktwAAJLgAACS5AAAkugAAJLwAACS+AAAkvwAAJMAAACTCAAAkwwAAJMwAACTNAAAkzwAAJQ4AACUQAAAlEgAAJRQAACUWAAAlFwAAJRgAACUZAAAlGgAAJRwAACUeAAAlHwAAJSAAACUiAAAlIwAAJSQAACVjAAAlZQAAJWcAACVpAAAlawAAJWwAACVtAAAlbgAAJW8AACVxAAAlcwAAJXQAACV1AAAldwAAJXgAACWFAAAlhgAAJYcAACWJAAAlkgAAJagAACWvAAAlvAAAJfsAACX9AAAl/wAAJgEAACYDAAAmBAAAJgUAACYGAAAmBwAAJgkAACYLAAAmDAAAJg0AACYPAAAmEAAAJikAACYrAAAmLQAAJi8AACYwAAAmMgAAJkkAACZSAAAmYAAAJm0AACZ7AAAmkAAAJqQAACa7AAAmzQAAJwwAACcOAAAnEAAAJxIAACcUAAAnFQAAJxYAACcXAAAnGAAAJxoAACccAAAnHQAAJx4AACcgAAAnIQAAJy8AACc4AAAnTQAAJ1wAACdxAAAnfwAAJ5QAACeoAAAnvwAAJ9EAACfeAAAn5wAAJ+kAACfrAAAn7QAAJ+8AACf4AAAn+gAAJ/0AACgAAAAoAwAAKAUAACgLAAAoEQAAKBYAACgaAAAoZQAAKIgAACioAAAoyAAAKMoAACjMAAAozgAAKNAAACjSAAAo0wAAKNQAACjWAAAo1wAAKNkAACjaAAAo3AAAKN4AACjfAAAo4AAAKOIAACjjAAAo6AAAKPUAACj6AAAo/AAAKP4AACkDAAApBQAAKQcAACkJAAApHgAAKTEAAClWAAApegAAKaEAACnFAAApxwAAKckAACnLAAApzQAAKc8AACnRAAAp0gAAKdQAACnhAAAp8gAAKfQAACn2AAAp+AAAKfoAACn8AAAp/gAAKgAAACoCAAAqEwAAKhUAACoXAAAqGQAAKhsAACodAAAqHwAAKiEAACojAAAqJQAAKkMAACphAAAqdAAAKogAACqdAAAqugAAKs4AACrkAAArIwAAKyUAACsnAAArKQAAKysAACssAAArLQAAKy4AACsvAAArMQAAKzMAACs0AAArNQAAKzcAACs4AAArdwAAK3kAACt7AAArfQAAK38AACuAAAArgQAAK4IAACuDAAArhQAAK4cAACuIAAAriQAAK4sAACuMAAArywAAK80AACvPAAAr0QAAK9MAACvUAAAr1QAAK9YAACvXAAAr2QAAK9sAACvcAAAr3QAAK98AACvgAAAr7QAAK+4AACvvAAAr8QAALDAAACwyAAAsNAAALDYAACw4AAAsOQAALDoAACw7AAAsPAAALD4AACxAAAAsQQAALEIAACxEAAAsRQAALIQAACyGAAAsiAAALIoAACyMAAAsjQAALI4AACyPAAAskAAALJIAACyUAAAslQAALJYAACyYAAAsmQAALJoAACzZAAAs2wAALN0AACzfAAAs4QAALOIAACzjAAAs5AAALOUAACznAAAs6QAALOoAACzrAAAs7QAALO4AAC0tAAAtLwAALTEAAC0zAAAtNQAALTYAAC03AAAtOAAALTkAAC07AAAtPQAALT4AAC0/AAAtQQAALUIAAC2BAAAtgwAALYUAAC2HAAAtiQAALYoAAC2LAAAtjAAALY0AAC2PAAAtkQAALZIAAC2TAAAtlQAALZYAAC27AAAt3wAALgYAAC4qAAAuLAAALi4AAC4wAAAuMgAALjQAAC42AAAuNwAALjkAAC5GAAAuVQAALlcAAC5ZAAAuWwAALl0AAC5fAAAuYQAALmMAAC5yAAAudAAALnYAAC54AAAuegAALn0AAC6AAAAugwAALoUAAC6XAAAuqwAALr0AAC7SAAAu5AAALvMAAC8QAAAvTwAAL1EAAC9TAAAvVQAAL1cAAC9YAAAvWQAAL1oAAC9bAAAvXQAAL18AAC9gAAAvYQAAL2MAAC9kAAAvowAAL6UAAC+nAAAvqQAAL6sAAC+sAAAvrQAAL64AAC+vAAAvsQAAL7MAAC+0AAAvtQAAL7cAAC+4AAAvugAAL/kAAC/7AAAv/QAAL/8AADABAAAwAgAAMAMAADAEAAAwBQAAMAcAADAJAAAwCgAAMAsAADANAAAwDgAAME0AADBPAAAwUQAAMFMAADBVAAAwVgAAMFcAADBYAAAwWQAAMFsAADBdAAAwXgAAMF8AADBhAAAwYgAAMKUAADDJAAAw7QAAMRAAADE3AAAxVwAAMX4AADGlAAAxxQAAMekAADINAAAyDwAAMhEAADITAAAyFQAAMhcAADIZAAAyHAAAMh4AADIgAAAyIwAAMiUAADInAAAyKgAAMiwAADItAAAyMgAAMj8AADJCAAAyRAAAMkcAADJJAAAySwAAMnAAADKUAAAyuwAAMt8AADLhAAAy4wAAMuUAADLnAAAy6QAAMusAADLsAAAy7gAAMvsAADMOAAAzEAAAMxIAADMUAAAzFgAAMxgAADMaAAAzHAAAMx4AADMgAAAzMwAAMzUAADM3AAAzOQAAMzsAADM9AAAzPwAAM0EAADNDAAAzRQAAM0cAADOGAAAziAAAM4oAADOMAAAzjgAAM48AADOQAAAzkQAAM5IAADOUAAAzlgAAM5cAADOYAAAzmgAAM5sAADOkAAAzpQAAM6cAADPmAAAz6AAAM+oAADPsAAAz7gAAM+8AADPwAAAz8QAAM/IAADP0AAAz9gAAM/cAADP4AAAz+gAAM/sAADQ6AAA0PAAAND4AADRAAAA0QgAANEMAADREAAA0RQAANEYAADRIAAA0SgAANEsAADRMAAA0TgAANE8AADRYAAA0WwAANF0AADRfAAA0aAAANGsAADRtAAA0bwAANHcAADS2AAA0uAAANLoAADS8AAA0vgAANL8AADTAAAA0wQAANMIAADTEAAA0xgAANMcAADTIAAA0ygAANMsAADUKAAA1DAAANQ4AADUQAAA1EgAANRMAADUUAAA1FQAANRYAADUYAAA1GgAANRsAADUcAAA1HgAANR8AADUoAAA1KQAANSsAADVqAAA1bAAANW4AADVwAAA1cgAANXMAADV0AAA1dQAANXYAADV4AAA1egAANXsAADV8AAA1fgAANX8AADW+AAA1wAAANcIAADXEAAA1xgAANccAADXIAAA1yQAANcoAADXMAAA1zgAANc8AADXQAAA10gAANdMAADXgAAA14QAANeIAADXkAAA2IwAANiUAADYnAAA2KQAANisAADYsAAA2LQAANi4AADYvAAA2MQAANjMAADY0AAA2NQAANjcAADY4AAA2dwAANnkAADZ7AAA2fQAANn8AADaAAAA2gQAANoIAADaDAAA2hQAANocAADaIAAA2iQAANosAADaMAAA2mQAANtwAADbeAAA24AAANuIAADbkAAA25gAANugAADbqAAA27AAANu4AADbwAAA28gAANvQAADb2AAA2+AAANvoAADb8AAA2/gAANwAAADcCAAA3BAAANwYAADcIAAA3CgAANwwAADcOAAA3EAAANxIAADcUAAA3FgAANxgAADcaAAA3HAAAN18AADdhAAA3YwAAN2UAADdnAAA3agAAN20AADdwAAA3cwAAN3YAADd5AAA3fAAAN38AADeCAAA3hQAAN4gAADeLAAA3jgAAN5EAADeUAAA3lwAAN5oAADedAAA3oAAAN6MAADemAAA3qQAAN6wAADevAAA3sgAAN7UAADe4AAA3uwAAN70AADfCAAA3zAAAN9oAADfpAAA38QAAN/8AADgNAAA4EgAAOCEAADgvAAA4PQAAOEIAADhWAAA4XQAAOGQAADhyAAA4fAAAOIsAADihAAA4qgAAOLAAADi3AAA4wAAAOM0AADjhAAA49AAAOP4AADkQAAA5HgAAOSoAADl1AAA5mAAAObgAADnYAAA52gAAOdwAADneAAA54AAAOeIAADnjAAA55AAAOeYAADnnAAA56QAAOeoAADnsAAA57gAAOe8AADnwAAA58gAAOfMAADn4AAA6BQAAOgoAADoMAAA6DgAAOhMAADoVAAA6FwAAOhkAADouAAA6UwAAOncAADqeAAA6wgAAOsQAADrGAAA6yAAAOsoAADrMAAA6zgAAOs8AADrRAAA63gAAOu8AADrxAAA68wAAOvUAADr3AAA6+QAAOvsAADr9AAA6/wAAOxAAADsSAAA7FAAAOxYAADsYAAA7GgAAOxwAADseAAA7IAAAOyIAADthAAA7YwAAO2UAADtnAAA7aQAAO2oAADtrAAA7bAAAO20AADtvAAA7cQAAO3IAADtzAAA7dQAAO3YAADu1AAA7twAAO7kAADu7AAA7vQAAO74AADu/AAA7wAAAO8EAADvDAAA7xQAAO8YAADvHAAA7yQAAO8oAADwJAAA8CwAAPA0AADwPAAA8EQAAPBIAADwTAAA8FAAAPBUAADwXAAA8GQAAPBoAADwbAAA8HQAAPB4AADwrAAA8LAAAPC0AADwvAAA8bgAAPHAAADxyAAA8dAAAPHYAADx3AAA8eAAAPHkAADx6AAA8fAAAPH4AADx/AAA8gAAAPIIAADyDAAA8wgAAPMQAADzGAAA8yAAAPMoAADzLAAA8zAAAPM0AADzOAAA80AAAPNIAADzTAAA81AAAPNYAADzXAAA9FgAAPRgAAD0aAAA9HAAAPR4AAD0fAAA9IAAAPSEAAD0iAAA9JAAAPSYAAD0nAAA9KAAAPSoAAD0rAAA9agAAPWwAAD1uAAA9cAAAPXIAAD1zAAA9dAAAPXUAAD12AAA9eAAAPXoAAD17AAA9fAAAPX4AAD1/AAA9vgAAPcAAAD3CAAA9xAAAPcYAAD3HAAA9yAAAPckAAD3KAAA9zAAAPc4AAD3PAAA90AAAPdIAAD3TAAA9+AAAPhwAAD5DAAA+ZwAAPmkAAD5rAAA+bQAAPm8AAD5xAAA+cwAAPnQAAD52AAA+gwAAPpIAAD6UAAA+lgAAPpgAAD6aAAA+nAAAPp4AAD6gAAA+rwAAPrEAAD6zAAA+tQAAPrcAAD65AAA+uwAAPr0AAD6/AAA+3wAAPwoAAD8kAAA/PQAAP1cAAD93AAA/mgAAP9kAAD/bAAA/3QAAP98AAD/hAAA/4gAAP+MAAD/kAAA/5QAAP+cAAD/pAAA/6gAAP+sAAD/tAAA/7gAAQC0AAEAvAABAMQAAQDMAAEA1AABANgAAQDcAAEA4AABAOQAAQDsAAEA9AABAPgAAQD8AAEBBAABAQgAAQIEAAECDAABAhQAAQIcAAECJAABAigAAQIsAAECMAABAjQAAQI8AAECRAABAkgAAQJMAAECVAABAlgAAQNUAAEDXAABA2QAAQNsAAEDdAABA3gAAQN8AAEDgAABA4QAAQOMAAEDlAABA5gAAQOcAAEDpAABA6gAAQO0AAEEsAABBLgAAQTAAAEEyAABBNAAAQTUAAEE2AABBNwAAQTgAAEE6AABBPAAAQT0AAEE+AABBQAAAQUEAAEGAAABBggAAQYQAAEGGAABBiAAAQYkAAEGKAABBiwAAQYwAAEGOAABBkAAAQZEAAEGSAABBlAAAQZUAAEHUAABB1gAAQdgAAEHaAABB3AAAQd0AAEHeAABB3wAAQeAAAEHiAABB5AAAQeUAAEHmAABB6AAAQekAAEHyAABCAAAAQg0AAEIbAABCKAAAQjsAAEJSAABCZAAAQq8AAELSAABC8gAAQxIAAEMUAABDFgAAQxgAAEMaAABDHAAAQx0AAEMeAABDIAAAQyEAAEMjAABDJAAAQyYAAEMoAABDKQAAQyoAAEMsAABDLQAAQzYAAENDAABDSAAAQ0oAAENMAABDUQAAQ1MAAENVAABDVwAAQ3wAAEOgAABDxwAAQ+sAAEPtAABD7wAAQ/EAAEPzAABD9QAAQ/cAAEP4AABD+gAARAcAAEQYAABEGgAARBwAAEQeAABEIAAARCIAAEQkAABEJgAARCgAAEQ5AABEOwAARD0AAEQ/AABEQQAAREMAAERFAABERwAAREkAAERLAABEigAARIwAAESOAABEkAAARJIAAESTAABElAAARJUAAESWAABEmAAARJoAAESbAABEnAAARJ4AAESfAABE3gAAROAAAETiAABE5AAAROYAAETnAABE6AAAROkAAETqAABE7AAARO4AAETvAABE8AAARPIAAETzAABFMgAARTQAAEU2AABFOAAARToAAEU7AABFPAAART0AAEU+AABFQAAARUIAAEVDAABFRAAARUYAAEVHAABFVAAARVUAAEVWAABFWAAARZcAAEWZAABFmwAARZ0AAEWfAABFoAAARaEAAEWiAABFowAARaUAAEWnAABFqAAARakAAEWrAABFrAAAResAAEXtAABF7wAARfEAAEXzAABF9AAARfUAAEX2AABF9wAARfkAAEX7AABF/AAARf0AAEX/AABGAAAARj8AAEZBAABGQwAARkUAAEZHAABGSAAARkkAAEZKAABGSwAARk0AAEZPAABGUAAARlEAAEZTAABGVAAARpMAAEaVAABGlwAARpkAAEabAABGnAAARp0AAEaeAABGnwAARqEAAEajAABGpAAARqUAAEanAABGqAAARucAAEbpAABG6wAARu0AAEbvAABG8AAARvEAAEbyAABG8wAARvUAAEb3AABG+AAARvkAAEb7AABG/AAARyEAAEdFAABHbAAAR5AAAEeSAABHlAAAR5YAAEeYAABHmgAAR5wAAEedAABHnwAAR6wAAEe7AABHvQAAR78AAEfBAABHwwAAR8UAAEfHAABHyQAAR9gAAEfaAABH3AAAR94AAEfgAABH4gAAR+QAAEfmAABH6AAASCcAAEgpAABIKwAASC0AAEgvAABIMAAASDEAAEgyAABIMwAASDUAAEg3AABIOAAASDkAAEg7AABIPAAASHsAAEh9AABIfwAASIEAAEiDAABIhAAASIUAAEiGAABIhwAASIkAAEiLAABIjAAASI0AAEiPAABIkAAASM8AAEjRAABI0wAASNUAAEjXAABI2AAASNkAAEjaAABI2wAASN0AAEjfAABI4AAASOEAAEjjAABI5AAASSMAAEklAABJJwAASSkAAEkrAABJLAAASS0AAEkuAABJLwAASTEAAEkzAABJNAAASTUAAEk3AABJOAAASXcAAEl5AABJewAASX0AAEl/AABJgAAASYEAAEmCAABJgwAASYUAAEmHAABJiAAASYkAAEmLAABJjAAAScsAAEnNAABJzwAASdEAAEnTAABJ1AAASdUAAEnWAABJ1wAASdkAAEnbAABJ3AAASd0AAEnfAABJ4AAASh8AAEohAABKIwAASiUAAEonAABKKAAASikAAEoqAABKKwAASi0AAEovAABKMAAASjEAAEozAABKNAAASj0AAEpQAABKXQAASnAAAEp9AABKkAAASqcAAEq5AABLBAAASycAAEtHAABLZwAAS2kAAEtrAABLbQAAS28AAEtxAABLcgAAS3MAAEt1AABLdgAAS3gAAEt5AABLewAAS30AAEt+AABLfwAAS4EAAEuCAABLhwAAS5QAAEuZAABLmwAAS50AAEuiAABLpAAAS6YAAEuoAABLzQAAS/EAAEwYAABMPAAATD4AAExAAABMQgAATEQAAExGAABMSAAATEkAAExLAABMWAAATGkAAExrAABMbQAATG8AAExxAABMcwAATHUAAEx3AABMeQAATIoAAEyMAABMjgAATJAAAEySAABMlAAATJYAAEyYAABMmgAATJwAAEzbAABM3QAATN8AAEzhAABM4wAATOQAAEzlAABM5gAATOcAAEzpAABM6wAATOwAAEztAABM7wAATPAAAE0vAABNMQAATTMAAE01AABNNwAATTgAAE05AABNOgAATTsAAE09AABNPwAATUAAAE1BAABNQwAATUQAAE2DAABNhQAATYcAAE2JAABNiwAATYwAAE2NAABNjgAATY8AAE2RAABNkwAATZQAAE2VAABNlwAATZgAAE2lAABNpgAATacAAE2pAABN6AAATeoAAE3sAABN7gAATfAAAE3xAABN8gAATfMAAE30AABN9gAATfgAAE35AABN+gAATfwAAE39AABOPAAATj4AAE5AAABOQgAATkQAAE5FAABORgAATkcAAE5IAABOSgAATkwAAE5NAABOTgAATlAAAE5RAABOkAAATpIAAE6UAABOlgAATpgAAE6ZAABOmgAATpsAAE6cAABOngAATqAAAE6hAABOogAATqQAAE6lAABO5AAATuYAAE7oAABO6gAATuwAAE7tAABO7gAATu8AAE7wAABO8gAATvQAAE71AABO9gAATvgAAE75AABPOAAATzoAAE88AABPPgAAT0AAAE9BAABPQgAAT0MAAE9EAABPRgAAT0gAAE9JAABPSgAAT0wAAE9NAABPcgAAT5YAAE+9AABP4QAAT+MAAE/lAABP5wAAT+kAAE/rAABP7QAAT+4AAE/wAABP/QAAUAwAAFAOAABQEAAAUBIAAFAUAABQFgAAUBgAAFAaAABQKQAAUCsAAFAtAABQLwAAUDEAAFAzAABQNQAAUDcAAFA5AABQeAAAUHoAAFB8AABQfgAAUIAAAFCBAABQggAAUIMAAFCEAABQhgAAUIgAAFCJAABQigAAUIwAAFCNAABQjwAAUM4AAFDQAABQ0gAAUNQAAFDWAABQ1wAAUNgAAFDZAABQ2gAAUNwAAFDeAABQ3wAAUOAAAFDiAABQ4wAAUSIAAFEkAABRJgAAUSgAAFEqAABRKwAAUSwAAFEtAABRLgAAUTAAAFEyAABRMwAAUTQAAFE2AABRNwAAUXYAAFF4AABRegAAUXwAAFF+AABRfwAAUYAAAFGBAABRggAAUYQAAFGGAABRhwAAUYgAAFGKAABRiwAAUY0AAFHMAABRzgAAUdAAAFHSAABR1AAAUdUAAFHWAABR1wAAUdgAAFHaAABR3AAAUd0AAFHeAABR4AAAUeEAAFIgAABSIgAAUiQAAFImAABSKAAAUikAAFIqAABSKwAAUiwAAFIuAABSMAAAUjEAAFIyAABSNAAAUjUAAFJ0AABSdgAAUngAAFJ6AABSfAAAUn0AAFJ+AABSfwAAUoAAAFKCAABShAAAUoUAAFKGAABSiAAAUokAAFLUAABS9wAAUxcAAFM3AABTOQAAUzsAAFM9AABTPwAAU0EAAFNCAABTQwAAU0UAAFNGAABTSAAAU0kAAFNLAABTTQAAU04AAFNPAABTUQAAU1IAAFNXAABTZAAAU2kAAFNrAABTbQAAU3IAAFN0AABTdgAAU3gAAFOdAABTwQAAU+gAAFQMAABUDgAAVBAAAFQSAABUFAAAVBYAAFQYAABUGQAAVBsAAFQoAABUOQAAVDsAAFQ9AABUPwAAVEEAAFRDAABURQAAVEcAAFRJAABUWgAAVFwAAFReAABUYAAAVGIAAFRkAABUZgAAVGgAAFRqAABUbAAAVKsAAFStAABUrwAAVLEAAFSzAABUtAAAVLUAAFS2AABUtwAAVLkAAFS7AABUvAAAVL0AAFS/AABUwAAAVP8AAFUBAABVAwAAVQUAAFUHAABVCAAAVQkAAFUKAABVCwAAVQ0AAFUPAABVEAAAVREAAFUTAABVFAAAVVMAAFVVAABVVwAAVVkAAFVbAABVXAAAVV0AAFVeAABVXwAAVWEAAFVjAABVZAAAVWUAAFVnAABVaAAAVXUAAFV2AABVdwAAVXkAAFW4AABVugAAVbwAAFW+AABVwAAAVcEAAFXCAABVwwAAVcQAAFXGAABVyAAAVckAAFXKAABVzAAAVc0AAFYMAABWDgAAVhAAAFYSAABWFAAAVhUAAFYWAABWFwAAVhgAAFYaAABWHAAAVh0AAFYeAABWIAAAViEAAFZgAABWYgAAVmQAAFZmAABWaAAAVmkAAFZqAABWawAAVmwAAFZuAABWcAAAVnEAAFZyAABWdAAAVnUAAFa0AABWtgAAVrgAAFa6AABWvAAAVr0AAFa+AABWvwAAVsAAAFbCAABWxAAAVsUAAFbGAABWyAAAVskAAFcIAABXCgAAVwwAAFcOAABXEAAAVxEAAFcSAABXEwAAVxQAAFcWAABXGAAAVxkAAFcaAABXHAAAVx0AAFdCAABXZgAAV40AAFexAABXswAAV7UAAFe3AABXuQAAV7sAAFe9AABXvgAAV8AAAFfNAABX3AAAV94AAFfgAABX4gAAV+QAAFfmAABX6AAAV+oAAFf5AABX/AAAV/8AAFgCAABYBQAAWAgAAFgLAABYDgAAWBAAAFhPAABYUQAAWFMAAFhVAABYVwAAWFgAAFhZAABYWgAAWFsAAFhdAABYXwAAWGAAAFhhAABYYwAAWGQAAFijAABYpQAAWKcAAFipAABYqwAAWKwAAFitAABYrgAAWK8AAFixAABYswAAWLQAAFi1AABYtwAAWLgAAFj3AABY+QAAWPsAAFj9AABY/wAAWQAAAFkBAABZAgAAWQMAAFkFAABZBwAAWQgAAFkJAABZCwAAWQwAAFlLAABZTQAAWU8AAFlRAABZUwAAWVQAAFlVAABZVgAAWVcAAFlZAABZWwAAWVwAAFldAABZXwAAWWAAAFmfAABZoQAAWaMAAFmlAABZpwAAWagAAFmpAABZqgAAWasAAFmtAABZrwAAWbAAAFmxAABZswAAWbQAAFnzAABZ9QAAWfcAAFn5AABZ+wAAWfwAAFn9AABZ/gAAWf8AAFoBAABaAwAAWgQAAFoFAABaBwAAWggAAFpHAABaSQAAWksAAFpNAABaTwAAWlAAAFpRAABaUgAAWlMAAFpVAABaVwAAWlgAAFpZAABaWwAAWlwAAFqnAABaygAAWuoAAFsKAABbDAAAWw4AAFsQAABbEgAAWxQAAFsVAABbFgAAWxkAAFsaAABbHAAAWx0AAFsfAABbIQAAWyIAAFsjAABbJgAAWycAAFssAABbOQAAWz4AAFtAAABbQgAAW0cAAFtKAABbTQAAW08AAFt0AABbmAAAW78AAFvjAABb5gAAW+gAAFvqAABb7AAAW+4AAFvwAABb8QAAW/QAAFwBAABcEgAAXBQAAFwWAABcGAAAXBoAAFwcAABcHgAAXCAAAFwiAABcMwAAXDYAAFw5AABcPAAAXD8AAFxCAABcRQAAXEgAAFxLAABcTQAAXIwAAFyOAABckAAAXJIAAFyVAABclgAAXJcAAFyYAABcmQAAXJsAAFydAABcngAAXJ8AAFyhAABcogAAXOEAAFzjAABc5QAAXOcAAFzqAABc6wAAXOwAAFztAABc7gAAXPAAAFzyAABc8wAAXPQAAFz2AABc9wAAXTYAAF04AABdOwAAXT0AAF1AAABdQQAAXUIAAF1DAABdRAAAXUYAAF1IAABdSQAAXUoAAF1MAABdTQAAXVoAAF1bAABdXAAAXV4AAF2dAABdnwAAXaEAAF2jAABdpgAAXacAAF2oAABdqQAAXaoAAF2sAABdrgAAXa8AAF2wAABdsgAAXbMAAF3yAABd9AAAXfYAAF34AABd+wAAXfwAAF39AABd/gAAXf8AAF4BAABeAwAAXgQAAF4FAABeBwAAXggAAF5HAABeSQAAXksAAF5NAABeUAAAXlEAAF5SAABeUwAAXlQAAF5WAABeWAAAXlkAAF5aAABeXAAAXl0AAF6cAABengAAXqAAAF6iAABepQAAXqYAAF6nAABeqAAAXqkAAF6rAABerQAAXq4AAF6vAABesQAAXrIAAF7xAABe8wAAXvUAAF73AABe+gAAXvsAAF78AABe/QAAXv4AAF8AAABfAgAAXwMAAF8EAABfBgAAXwcAAF8sAABfUAAAX3cAAF+bAABfngAAX6AAAF+iAABfpAAAX6YAAF+oAABfqQAAX6wAAF+5AABfyAAAX8oAAF/MAABfzgAAX9AAAF/SAABf1AAAX9YAAF/lAABf6AAAX+sAAF/uAABf8QAAX/QAAF/3AABf+gAAX/wAAGA7AABgPQAAYD8AAGBBAABgRAAAYEUAAGBGAABgRwAAYEgAAGBKAABgTAAAYE0AAGBOAABgUAAAYFEAAGCQAABgkgAAYJQAAGCWAABgmQAAYJoAAGCbAABgnAAAYJ0AAGCfAABgoQAAYKIAAGCjAABgpQAAYKYAAGDlAABg5wAAYOkAAGDrAABg7gAAYO8AAGDwAABg8QAAYPIAAGD0AABg9gAAYPcAAGD4AABg+gAAYPsAAGE6AABhPAAAYT4AAGFAAABhQwAAYUQAAGFFAABhRgAAYUcAAGFJAABhSwAAYUwAAGFNAABhTwAAYVAAAGGPAABhkQAAYZMAAGGVAABhmAAAYZkAAGGaAABhmwAAYZwAAGGeAABhoAAAYaEAAGGiAABhpAAAYaUAAGHkAABh5gAAYegAAGHqAABh7QAAYe4AAGHvAABh8AAAYfEAAGHzAABh9QAAYfYAAGH3AABh+QAAYfoAAGI5AABiOwAAYj0AAGI/AABiQgAAYkMAAGJEAABiRQAAYkYAAGJIAABiSgAAYksAAGJMAABiTgAAYk8AAGKaAABivQAAYt0AAGL9AABi/wAAYwEAAGMDAABjBQAAYwcAAGMIAABjCQAAYwwAAGMNAABjDwAAYxAAAGMSAABjFAAAYxUAAGMWAABjGQAAYxoAAGMfAABjLAAAYzEAAGMzAABjNQAAYzoAAGM9AABjQAAAY0IAAGNnAABjiwAAY7IAAGPWAABj2QAAY9sAAGPdAABj3wAAY+EAAGPjAABj5AAAY+cAAGP0AABkBQAAZAcAAGQJAABkCwAAZA0AAGQPAABkEQAAZBMAAGQVAABkJgAAZCkAAGQsAABkLwAAZDIAAGQ1AABkOAAAZDsAAGQ+AABkQAAAZH8AAGSBAABkgwAAZIUAAGSIAABkiQAAZIoAAGSLAABkjAAAZI4AAGSQAABkkQAAZJIAAGSUAABklQAAZNQAAGTWAABk2AAAZNoAAGTdAABk3gAAZN8AAGTgAABk4QAAZOMAAGTlAABk5gAAZOcAAGTpAABk6gAAZSkAAGUrAABlLgAAZTAAAGUzAABlNAAAZTUAAGU2AABlNwAAZTkAAGU7AABlPAAAZT0AAGU/AABlQAAAZU0AAGVOAABlTwAAZVEAAGWQAABlkgAAZZQAAGWWAABlmQAAZZoAAGWbAABlnAAAZZ0AAGWfAABloQAAZaIAAGWjAABlpQAAZaYAAGXlAABl5wAAZekAAGXrAABl7gAAZe8AAGXwAABl8QAAZfIAAGX0AABl9gAAZfcAAGX4AABl+gAAZfsAAGY6AABmPAAAZj4AAGZAAABmQwAAZkQAAGZFAABmRgAAZkcAAGZJAABmSwAAZkwAAGZNAABmTwAAZlAAAGaPAABmkQAAZpMAAGaVAABmmAAAZpkAAGaaAABmmwAAZpwAAGaeAABmoAAAZqEAAGaiAABmpAAAZqUAAGbkAABm5gAAZugAAGbqAABm7QAAZu4AAGbvAABm8AAAZvEAAGbzAABm9QAAZvYAAGb3AABm+QAAZvoAAGcfAABnQwAAZ2oAAGeOAABnkQAAZ5MAAGeVAABnlwAAZ5kAAGebAABnnAAAZ58AAGesAABnuwAAZ70AAGe/AABnwQAAZ8MAAGfFAABnxwAAZ8kAAGfYAABn2wAAZ94AAGfhAABn5AAAZ+cAAGfqAABn7QAAZ+8AAGguAABoMAAAaDIAAGg0AABoNwAAaDgAAGg5AABoOgAAaDsAAGg9AABoPwAAaEAAAGhBAABoQwAAaEQAAGiDAABohQAAaIcAAGiJAABojAAAaI0AAGiOAABojwAAaJAAAGiSAABolAAAaJUAAGiWAABomAAAaJkAAGjYAABo2gAAaNwAAGjeAABo4QAAaOIAAGjjAABo5AAAaOUAAGjnAABo6QAAaOoAAGjrAABo7QAAaO4AAGktAABpLwAAaTIAAGk0AABpNwAAaTgAAGk5AABpOgAAaTsAAGk9AABpPwAAaUAAAGlBAABpQwAAaUQAAGlHAABphgAAaYgAAGmKAABpjAAAaY8AAGmQAABpkQAAaZIAAGmTAABplQAAaZcAAGmYAABpmQAAaZsAAGmcAABp2wAAad0AAGngAABp4gAAaeUAAGnmAABp5wAAaegAAGnpAABp6wAAae0AAGnuAABp7wAAafEAAGnyAABqGQAAalgAAGpaAABqXAAAal4AAGphAABqYgAAamMAAGpkAABqZQAAamcAAGppAABqagAAamsAAGptAABqbgAAarkAAGrcAABq/AAAaxwAAGseAABrIAAAayIAAGskAABrJgAAaycAAGsoAABrKwAAaywAAGsuAABrLwAAazEAAGszAABrNAAAazUAAGs4AABrOQAAaz4AAGtLAABrUAAAa1IAAGtUAABrWQAAa1wAAGtfAABrYQAAa4YAAGuqAABr0QAAa/UAAGv4AABr+gAAa/wAAGv+AABsAAAAbAIAAGwDAABsBgAAbBMAAGwkAABsJgAAbCgAAGwqAABsLAAAbC4AAGwwAABsMgAAbDQAAGxFAABsSAAAbEsAAGxOAABsUQAAbFQAAGxXAABsWgAAbF0AAGxfAABsngAAbKAAAGyiAABspAAAbKcAAGyoAABsqQAAbKoAAGyrAABsrQAAbK8AAGywAABssQAAbLMAAGy0AABs8wAAbPUAAGz3AABs+QAAbPwAAGz9AABs/gAAbP8AAG0AAABtAgAAbQQAAG0FAABtBgAAbQgAAG0JAABtSAAAbUoAAG1NAABtTwAAbVIAAG1TAABtVAAAbVUAAG1WAABtWAAAbVoAAG1bAABtXAAAbV4AAG1fAABtbAAAbW0AAG1uAABtcAAAba8AAG2xAABtswAAbbUAAG24AABtuQAAbboAAG27AABtvAAAbb4AAG3AAABtwQAAbcIAAG3EAABtxQAAbgQAAG4GAABuCAAAbgoAAG4NAABuDgAAbg8AAG4QAABuEQAAbhMAAG4VAABuFgAAbhcAAG4ZAABuGgAAblkAAG5bAABuXQAAbl8AAG5iAABuYwAAbmQAAG5lAABuZgAAbmgAAG5qAABuawAAbmwAAG5uAABubwAAbq4AAG6wAABusgAAbrQAAG63AABuuAAAbrkAAG66AABuuwAAbr0AAG6/AABuwAAAbsEAAG7DAABuxAAAbwMAAG8FAABvBwAAbwkAAG8MAABvDQAAbw4AAG8PAABvEAAAbxIAAG8UAABvFQAAbxYAAG8YAABvGQAAbz4AAG9iAABviQAAb60AAG+wAABvsgAAb7QAAG+2AABvuAAAb7oAAG+7AABvvgAAb8sAAG/aAABv3AAAb94AAG/gAABv4gAAb+QAAG/mAABv6AAAb/cAAG/6AABv/QAAcAAAAHADAABwBgAAcAkAAHAMAABwDgAAcE0AAHBPAABwUQAAcFMAAHBWAABwVwAAcFgAAHBZAABwWgAAcFwAAHBeAABwXwAAcGAAAHBiAABwYwAAcKIAAHCkAABwpgAAcKgAAHCrAABwrAAAcK0AAHCuAABwrwAAcLEAAHCzAABwtAAAcLUAAHC3AABwuAAAcPcAAHD5AABw+wAAcP0AAHEAAABxAQAAcQIAAHEDAABxBAAAcQYAAHEIAABxCQAAcQoAAHEMAABxDQAAcUwAAHFOAABxUQAAcVMAAHFWAABxVwAAcVgAAHFZAABxWgAAcVwAAHFeAABxXwAAcWAAAHFiAABxYwAAcWYAAHGlAABxpwAAcakAAHGrAABxrgAAca8AAHGwAABxsQAAcbIAAHG0AABxtgAAcbcAAHG4AABxugAAcbsAAHH6AABx/AAAcf4AAHIAAAByAwAAcgQAAHIFAAByBgAAcgcAAHIJAAByCwAAcgwAAHINAAByDwAAchAAAHJPAAByUQAAclMAAHJVAAByWAAAclkAAHJaAAByWwAAclwAAHJeAAByYAAAcmEAAHJiAAByZAAAcmUAAHK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uAACI7wAAiPAAAIjyAACI8wAAiTIAAIk0AACJNgAAiTgAAIk7AACJPAAAiT0AAIk+AACJPwAAiUEAAIlDAACJRAAAiUUAAIlHAACJSAAAiYcAAImJAACJiwAAiY0AAImQAACJkQAAiZIAAImTAACJlAAAiZYAAImYAACJmQAAiZoAAImcAACJnQAAidwAAIneAACJ4AAAieIAAInlAACJ5gAAiecAAInoAACJ6QAAiesAAIntAACJ7gAAie8AAInxAACJ8gAAijEAAIozAACKNQAAijcAAIo6AACKOwAAijwAAIo9AACKPgAAikAAAIpCAACKQwAAikQAAIpGAACKRwAAipIAAIq1AACK1QAAivUAAIr3AACK+QAAivsAAIr9AACK/wAAiwAAAIsBAACLBAAAiwUAAIsHAACLCAAAiwoAAIsMAACLDQAAiw4AAIsRAACLEgAAixcAAIskAACLKQAAiysAAIstAACLMgAAizUAAIs4AACLOgAAi18AAIuDAACLqgAAi84AAIvRAACL0wAAi9UAAIvXAACL2QAAi9sAAIvcAACL3wAAi+wAAIv9AACL/wAAjAEAAIwDAACMBQAAjAcAAIwJAACMCwAAjA0AAIweAACMIQAAjCQAAIwnAACMKgAAjC0AAIwwAACMMwAAjDYAAIw4AACMdwAAjHkAAIx7AACMfQAAjIAAAIyBAACMggAAjIMAAIyEAACMhgAAjIgAAIyJAACMigAAjIwAAIyNAACMzAAAjM4AAIzQAACM0gAAjNUAAIzWAACM1wAAjNgAAIzZAACM2wAAjN0AAIzeAACM3wAAjOEAAIziAACNIQAAjSMAAI0mAACNKAAAjSsAAI0sAACNLQAAjS4AAI0vAACNMQAAjTMAAI00AACNNQAAjTcAAI04AACNRQAAjUYAAI1HAACNSQAAjYgAAI2KAACNjAAAjY4AAI2RAACNkgAAjZMAAI2UAACNlQAAjZcAAI2ZAACNmgAAjZsAAI2dAACNngAAjd0AAI3fAACN4QAAjeMAAI3mAACN5wAAjegAAI3pAACN6gAAjewAAI3uAACN7wAAjfAAAI3yAACN8wAAjjIAAI40AACONgAAjjgAAI47AACOPAAAjj0AAI4+AACOPwAAjkEAAI5DAACORAAAjkUAAI5HAACOSAAAjocAAI6JAACOiwAAjo0AAI6QAACOkQAAjpIAAI6TAACOlAAAjpYAAI6YAACOmQAAjpoAAI6cAACOnQAAjtwAAI7eAACO4AAAjuIAAI7lAACO5gAAjucAAI7oAACO6QAAjusAAI7tAACO7gAAju8AAI7xAACO8gAAjxcAAI87AACPYgAAj4YAAI+JAACPiwAAj40AAI+PAACPkQAAj5MAAI+UAACPlwAAj6QAAI+zAACPtQAAj7cAAI+5AACPuwAAj70AAI+/AACPwQAAj9AAAI/TAACP1gAAj9kAAI/cAACP3wAAj+IAAI/lAACP5wAAkCYAAJAoAACQKgAAkCwAAJAvAACQMAAAkDEAAJAyAACQMwAAkDUAAJA3AACQOAAAkDkAAJA7AACQPAAAkHsAAJB9AACQfwAAkIEAAJCEAACQhQAAkIYAAJCHAACQiAAAkIoAAJCMAACQjQAAkI4AAJCQAACQkQAAkNAAAJDSAACQ1AAAkNYAAJDZAACQ2gAAkNsAAJDcAACQ3QAAkN8AAJDhAACQ4gAAkOMAAJDlAACQ5gAAkSUAAJEnAACRKgAAkSwAAJEvAACRMAAAkTEAAJEyAACRMwAAkTUAAJE3AACROAAAkTkAAJE7AACRPAAAkXsAAJF9AACRfwAAkYEAAJGEAACRhQAAkYYAAJGHAACRiAAAkYoAAJGMAACRjQAAkY4AAJGQAACRkQAAkdAAAJHSAACR1AAAkdYAAJHZAACR2gAAkdsAAJHcAACR3QAAkd8AAJHhAACR4gAAkeMAAJHlAACR5gAAkiUAAJInAACSKQAAkisAAJIuAACSLwAAkjAAAJIxAACSMgAAkjQAAJI2AACSNwAAkjgAAJI6AACSOwAAkoYAAJKpAACSyQAAkukAAJLrAACS7QAAku8AAJLxAACS8wAAkvQAAJL1AACS+AAAkvkAAJL7AACS/AAAkv4AAJMAAACTAQAAkwIAAJMFAACTBgAAkwsAAJMYAACTHQAAkx8AAJMhAACTJgAAkykAAJMsAACTLgAAk1MAAJN3AACTngAAk8IAAJPFAACTxwAAk8kAAJPLAACTzQAAk88AAJPQAACT0wAAk+AAAJPxAACT8wAAk/UAAJP3AACT+QAAk/sAAJP9AACT/wAAlAEAAJQSAACUFQAAlBgAAJQbAACUHgAAlCEAAJQkAACUJwAAlCoAAJQsAACUawAAlG0AAJRvAACUcQAAlHQAAJR1AACUdgAAlHcAAJR4AACUegAAlHwAAJR9AACUfgAAlIAAAJSBAACUwAAAlMIAAJTEAACUxgAAlMkAAJTKAACUywAAlMwAAJTNAACUzwAAlNEAAJTSAACU0wAAlNUAAJTWAACVFQAAlRcAAJUaAACVHAAAlR8AAJUgAACVIQAAlSIAAJUjAACVJQAAlScAAJUoAACVKQAAlSsAAJUsAACVOQAAlToAAJU7AACVPQAAlXwAAJV+AACVgAAAlYIAAJWFAACVhgAAlYcAAJWIAACViQAAlYsAAJWNAACVjgAAlY8AAJWRAACVkgAAldEAAJXTAACV1QAAldcAAJXaAACV2wAAldwAAJXdAACV3gAAleAAAJXiAACV4wAAleQAAJXmAACV5wAAliYAAJYoAACWKgAAliwAAJYvAACWMAAAljEAAJYyAACWMwAAljUAAJY3AACWOAAAljkAAJY7AACWPAAAlnsAAJZ9AACWfwAAloEAAJaEAACWhQAAloYAAJaHAACWiAAAlooAAJaMAACWjQAAlo4AAJaQAACWkQAAltAAAJbSAACW1AAAltYAAJbZAACW2gAAltsAAJbcAACW3QAAlt8AAJbhAACW4gAAluMAAJblAACW5gAAlwsAAJcvAACXVgAAl3oAAJd9AACXfwAAl4EAAJeDAACXhQAAl4cAAJeIAACXiwAAl5gAAJenAACXqQAAl6sAAJetAACXrwAAl7EAAJezAACXtQAAl8QAAJfHAACXygAAl80AAJfQAACX0wAAl9YAAJfZAACX2wAAmBoAAJgcAACYHgAAmCAAAJgjAACYJAAAmCUAAJgmAACYJwAAmCkAAJgrAACYLAAAmC0AAJgvAACYMAAAmG8AAJhxAACYcwAAmHUAAJh4AACYeQAAmHoAAJh7AACYfAAAmH4AAJiAAACYgQAAmIIAAJiEAACYhQAAmMQAAJjGAACYyAAAmMoAAJjNAACYzgAAmM8AAJjQAACY0QAAmNMAAJjVAACY1gAAmNcAAJjZAACY2gAAmRkAAJkbAACZHgAAmSAAAJkjAACZJAAAmSUAAJkmAACZJwAAmSkAAJkrAACZLAAAmS0AAJkvAACZMAAAmW8AAJlxAACZcwAAmXUAAJl4AACZeQAAmXoAAJl7AACZfAAAmX4AAJmAAACZgQAAmYIAAJmEAACZhQAAmcQAAJnGAACZyAAAmcoAAJnNAACZzgAAmc8AAJnQAACZ0QAAmdMAAJnVAACZ1gAAmdcAAJnZAACZ2gAAmhkAAJobAACaHQAAmh8AAJoiAACaIwAAmiQAAJolAACaJgAAmigAAJoqAACaKwAAmiwAAJouAACaLwAAmnoAAJqdAACavQAAmt0AAJrfAACa4QAAmuMAAJrlAACa5wAAmugAAJrpAACa7AAAmu0AAJrvAACa8AAAmvIAAJr0AACa9QAAmvYAAJr5AACa+gAAmv8AAJsMAACbEQAAmxMAAJsVAACbGgAAmx0AAJsgAACbIgAAm0cAAJtrAACbkgAAm7YAAJu5AACbuwAAm70AAJu/AACbwQAAm8MAAJvEAACbxwAAm9QAAJvlAACb5wAAm+kAAJvrAACb7QAAm+8AAJvxAACb8wAAm/UAAJwGAACcCQAAnAwAAJwPAACcEgAAnBUAAJwYAACcGwAAnB4AAJwgAACcXwAAnGEAAJxjAACcZQAAnGgAAJxpAACcagAAnGsAAJxsAACcbgAAnHAAAJxxAACccgAAnHQAAJx1AACctAAAnLYAAJy4AACcugAAnL0AAJy+AACcvwAAnMAAAJzBAACcwwAAnMUAAJzGAACcxwAAnMkAAJzKAACdCQAAnQsAAJ0OAACdEAAAnRMAAJ0UAACdFQAAnRYAAJ0XAACdGQAAnRsAAJ0cAACdHQAAnR8AAJ0gAACdLQAAnS4AAJ0vAACdMQAAnXAAAJ1yAACddAAAnXYAAJ15AACdegAAnXsAAJ18AACdfQAAnX8AAJ2BAACdggAAnYMAAJ2FAACdhgAAncUAAJ3HAACdyQAAncsAAJ3OAACdzwAAndAAAJ3RAACd0gAAndQAAJ3WAACd1wAAndgAAJ3aAACd2wAAnhoAAJ4cAACeHgAAniAAAJ4jAACeJAAAniUAAJ4mAACeJwAAnikAAJ4rAACeLAAAni0AAJ4vAACeMAAAnm8AAJ5xAACecwAAnnUAAJ54AACeeQAAnnoAAJ57AACefAAAnn4AAJ6AAACegQAAnoIAAJ6EAACehQAAnsQAAJ7GAACeyAAAnsoAAJ7NAACezgAAns8AAJ7QAACe0QAAntMAAJ7VAACe1gAAntcAAJ7ZAACe2gAAnv8AAJ8jAACfSgAAn24AAJ9xAACfcwAAn3UAAJ93AACfeQAAn3sAAJ98AACffwAAn4wAAJ+bAACfnQAAn58AAJ+hAACfowAAn6UAAJ+nAACfqQAAn7gAAJ+7AACfvgAAn8EAAJ/EAACfxwAAn8oAAJ/NAACfzwAAoA4AAKAQAACgEgAAoBQAAKAXAACgGAAAoBkAAKAaAACgGwAAoB0AAKAfAACgIAAAoCEAAKAjAACgJAAAoGMAAKBlAACgZwAAoGkAAKBsAACgbQAAoG4AAKBvAACgcAAAoHIAAKB0AACgdQAAoHYAAKB4AACgeQAAoLgAAKC6AACgvAAAoL4AAKDBAACgwgAAoMMAAKDEAACgxQAAoMcAAKDJAACgygAAoMsAAKDNAACgzgAAoQ0AAKEPAAChEQAAoRMAAKEWAAChFwAAoRgAAKEZAAChGgAAoRwAAKEeAAChHwAAoSAAAKEiAAChIwAAoWIAAKFkAAChZgAAoWgAAKFrAAChbAAAoW0AAKFuAAChbwAAoXEAAKFzAAChdAAAoXUAAKF3AACheAAAobcAAKG5AAChuwAAob0AAKHAAAChwQAAocIAAKHDAAChxAAAocYAAKHIAAChyQAAocoAAKHMAAChzQAAogwAAKIOAACiEAAAohIAAKIVAACiFgAAohcAAKIYAACiGQAAohsAAKIdAACiHgAAoh8AAKIhAACiIgAAom0AAKKQAACisAAAotAAAKLSAACi1AAAotYAAKLYAACi2gAAotsAAKLcAACi3wAAouAAAKLiAACi4wAAouUAAKLnAACi6AAAoukAAKLsAACi7QAAovIAAKL/AACjBAAAowYAAKMIAACjDQAAoxAAAKMTAACjFQAAozoAAKNeAACjhQAAo6kAAKOsAACjrgAAo7AAAKOyAACjtAAAo7YAAKO3AACjugAAo8cAAKPYAACj2gAAo9wAAKPeAACj4AAAo+IAAKPkAACj5gAAo+gAAKP5AACj/AAAo/8AAKQCAACkBQAApAgAAKQLAACkDgAApBEAAKQTAACkUgAApFQAAKRWAACkWAAApFsAAKRcAACkXQAApF4AAKRfAACkYQAApGMAAKRkAACkZQAApGcAAKRoAACkpwAApKkAAKSrAACkrQAApLAAAKSxAACksgAApLMAAKS0AACktgAApLgAAKS5AACkugAApLwAAKS9AACk/AAApP4AAKUBAAClAwAApQYAAKUHAAClCAAApQkAAKUKAAClDAAApQ4AAKUPAAClEAAApRIAAKUTAAClIAAApSEAAKUiAAClJAAApWMAAKVlAAClZwAApWkAAKVsAAClbQAApW4AAKVvAAClcAAApXIAAKV0AACldQAApXYAAKV4AACleQAApbgAAKW6AAClvAAApb4AAKXBAAClwgAApcMAAKXEAAClxQAApccAAKXJAAClygAApcsAAKXNAAClzgAApg0AAKYPAACmEQAAphMAAKYWAACmFwAAphgAAKYZAACmGgAAphwAAKYeAACmHwAApiAAAKYiAACmIwAApmIAAKZkAACmZgAApmgAAKZrAACmbAAApm0AAKZuAACmbwAApnEAAKZzAACmdAAApnUAAKZ3AACmeAAAprcAAKa5AACmuwAApr0AAKbAAACmwQAApsIAAKbDAACmxAAApsYAAKbIAACmyQAApsoAAKbMAACmzQAApvIAAKcWAACnPQAAp2EAAKdkAACnZgAAp2gAAKdqAACnbAAAp24AAKdvAACncgAAp38AAKeOAACnkAAAp5IAAKeUAACnlgAAp5gAAKeaAACnnAAAp6sAAKeuAACnsQAAp7QAAKe3AACnugAAp70AAKfAAACnwgAAqAEAAKgDAACoBQAAqAcAAKgKAACoCwAAqAwAAKgNAACoDgAAqBAAAKgSAACoEwAAqBQAAKgWAACoFwAAqFYAAKhYAACoWgAAqFwAAKhfAACoYAAAqGEAAKhiAACoYwAAqGUAAKhnAACoaAAAqGkAAKhrAACobAAAqKsAAKitAACorwAAqLEAAKi0AACotQAAqLYAAKi3AACouAAAqLoAAKi8AACovQAAqL4AAKjAAACowQAAqQAAAKkCAACpBAAAqQYAAKkJAACpCgAAqQsAAKkMAACpDQAAqQ8AAKkRAACpEgAAqRMAAKkVAACpFgAAqVUAAKlXAACpWQAAqVsAAKleAACpXwAAqWAAAKlhAACpYgAAqWQAAKlmAACpZwAAqWgAAKlqAACpawAAqaoAAKmsAACprgAAqbAAAKmzAACptAAAqbUAAKm2AACptwAAqbkAAKm7AACpvAAAqb0AAKm/AACpwAAAqf8AAKoBAACqAwAAqgUAAKoIAACqCQAAqgoAAKoLAACqDAAAqg4AAKoQAACqEQAAqhIAAKoUAACqFQAAqmAAAKqDAACqowAAqsMAAKrFAACqxwAAqskAAKrLAACqzQAAqs4AAKrPAACq0gAAqtMAAKrVAACq1gAAqtgAAKraAACq2wAAqtwAAKrfAACq4AAAqukAAKr2AACq+wAAqv0AAKr/AACrBAAAqwcAAKsKAACrDAAAqzEAAKtVAACrfAAAq6AAAKujAACrpQAAq6cAAKupAACrqwAAq60AAKuuAACrsQAAq74AAKvPAACr0QAAq9MAAKvVAACr1wAAq9kAAKvbAACr3QAAq98AAKvwAACr8wAAq/YAAKv5AACr/AAAq/8AAKwCAACsBQAArAgAAKwKAACsSQAArEsAAKxNAACsTwAArFIAAKxTAACsVAAArFUAAKxWAACsWAAArFoAAKxbAACsXAAArF4AAKxfAACsngAArKAAAKyiAACspAAArKcAAKyoAACsqQAArKoAAKyrAACsrQAArK8AAKywAACssQAArLMAAKy0AACs8wAArPUAAKz4AACs+gAArP0AAKz+AACs/wAArQAAAK0BAACtAwAArQUAAK0GAACtBwAArQkAAK0KAACtFwAArRgAAK0ZAACtGwAArVoAAK1cAACtXgAArWAAAK1jAACtZAAArWUAAK1mAACtZwAArWkAAK1rAACtbAAArW0AAK1vAACtcAAAra8AAK2xAACtswAArbUAAK24AACtuQAArboAAK27AACtvAAArb4AAK3AAACtwQAArcIAAK3EAACtxQAArgQAAK4GAACuCAAArgoAAK4NAACuDgAArg8AAK4QAACuEQAArhMAAK4VAACuFgAArhcAAK4ZAACuGgAArlkAAK5bAACuXQAArl8AAK5iAACuYwAArmQAAK5lAACuZgAArmgAAK5qAACuawAArmwAAK5uAACubwAArq4AAK6wAACusgAArrQAAK63AACuuAAArrkAAK66AACuuwAArr0AAK6/AACuwAAArsEAAK7DAACuxAAArukAAK8NAACvNAAAr1gAAK9bAACvXQAAr18AAK9hAACvYwAAr2UAAK9mAACvaQAAr3YAAK+DAACvhQAAr4cAAK+JAACviwAAr40AAK+PAACvnAAAr58AAK+iAACvpQAAr6gAAK+rAACvrgAAr7AAAK/vAACv8QAAr/QAAK/2AACv+QAAr/oAAK/7AACv/AAAr/0AAK//AACwAQAAsAIAALADAACwBQAAsAYAALBJAACwbQAAsJEAALC0AACw2wAAsPsAALEiAACxSQAAsWkAALGNAACxsQAAsbMAALG2AACxuAAAsboAALG8AACxvwAAscIAALHEAACxxgAAsckAALHLAACxzQAAsdAAALHTAACx1AAAsdkAALHmAACx6QAAsesAALHuAACx8QAAsfMAALIYAACyPAAAsmMAALKHAACyigAAsowAALKOAACykAAAspIAALKUAACylQAAspgAALKlAACyuAAAsroAALK8AACyvgAAssAAALLCAACyxAAAssYAALLIAACyygAAst0AALLgAACy4wAAsuYAALLpAACy7AAAsu8AALLyAACy9QAAsvgAALL6AACzOQAAszsAALM+AACzQAAAs0MAALNEAACzRQAAs0YAALNHAACzSQAAs0sAALNMAACzTQAAs08AALNQAACzWQAAs1oAALNcAACzmwAAs50AALOfAACzoQAAs6QAALOlAACzpgAAs6cAALOoAACzqgAAs6wAALOtAACzrgAAs7AAALOxAACz8AAAs/IAALP1AACz9wAAs/oAALP7AACz/AAAs/0AALP+AAC0AAAAtAIAALQDAAC0BAAAtAYAALQHAAC0EAAAtBEAALQTAAC0UgAAtFQAALRWAAC0WAAAtFsAALRcAAC0XQAAtF4AALRfAAC0YQAAtGMAALRkAAC0ZQAAtGcAALRoAAC0pwAAtKkAALSsAAC0rgAAtLEAALSyAAC0swAAtLQAALS1AAC0twAAtLkAALS6AAC0uwAAtL0AALS+AAC0xwAAtMgAALTKAAC1CQAAtQsAALUNAAC1DwAAtRIAALUTAAC1FAAAtRUAALUWAAC1GAAAtRoAALUbAAC1HAAAtR4AALUfAAC1XgAAtWAAALVjAAC1ZQAAtWgAALVpAAC1agAAtWsAALVsAAC1bgAAtXAAALVxAAC1cgAAtXQAALV1AAC1ggAAtYMAALWEAAC1hgAAtcUAALXHAAC1yQAAtcsAALXOAAC1zwAAtdAAALXRAAC10gAAtdQAALXWAAC11wAAtdgAALXaAAC12wAAthoAALYcAAC2HgAAtiAAALYjAAC2JAAAtiUAALYmAAC2JwAAtikAALYrAAC2LAAAti0AALYvAAC2MAAAtj0AALZkAAC2ZwAAtmoAALZsAAC2bwAAtnIAALZ1AAC2eAAAtnsAALZ+AAC2gQAAtoQAALaHAAC2iQAAtowAALaPAAC2kgAAtpQAALaXAAC2vgAAtsEAALbEAAC2xwAAtsoAALbNAAC20AAAttMAALbWAAC22QAAttwAALbfAAC24gAAtuUAALboAAC26wAAtu4AALbxAAC29AAAtvYAALb5AAC3AQAAtw8AALcWAAC3JAAAtyoAALcwAAC3OAAAt0MAALdNAAC3VgAAt2MAALd4AAC3ggAAt5YAALfhAAC4BAAAuCQAALhEAAC4RgAAuEgAALhKAAC4TAAAuE8AALhQAAC4UQAAuFQAALhVAAC4VwAAuFgAALhaAAC4XQAAuF4AALhfAAC4YgAAuGMAALhoAAC4dQAAuHoAALh8AAC4fgAAuIMAALiGAAC4iQAAuIsAALiwAAC41AAAuPsAALkfAAC5IgAAuSQAALkmAAC5KAAAuSoAALksAAC5LQAAuTAAALk9AAC5TgAAuVAAALlSAAC5VAAAuVYAALlYAAC5WgAAuVwAALleAAC5bwAAuXIAALl1AAC5eAAAuXsAALl+AAC5gQAAuYQAALmHAAC5iQAAucgAALnKAAC5zAAAuc4AALnRAAC50gAAudMAALnUAAC51QAAudcAALnZAAC52gAAudsAALndAAC53gAAuh0AALofAAC6IQAAuiMAALomAAC6JwAAuigAALopAAC6KgAAuiwAALouAAC6LwAAujAAALoyAAC6MwAAunIAALp0AAC6dwAAunkAALp8AAC6fQAAun4AALp/AAC6gAAAuoIAALqEAAC6hQAAuoYAALqIAAC6iQAAupYAALqXAAC6mAAAupoAALrZAAC62wAAut0AALrfAAC64gAAuuMAALrkAAC65QAAuuYAALroAAC66gAAuusAALrsAAC67gAAuu8AALsuAAC7MAAAuzIAALs0AAC7NwAAuzgAALs5AAC7OgAAuzsAALs9AAC7PwAAu0AAALtBAAC7QwAAu0QAALuDAAC7hQAAu4cAALuJAAC7jAAAu40AALuOAAC7jwAAu5AAALuSAAC7lAAAu5UAALuWAAC7mAAAu5kAALvYAAC72gAAu9wAALveAAC74QAAu+IAALvjAAC75AAAu+UAALvnAAC76QAAu+oAALvrAAC77QAAu+4AALwtAAC8LwAAvDEAALwzAAC8NgAAvDcAALw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TAADNFgAAzRkAAM0cAADNHwAAzSEAAM1gAADNYgAAzWQAAM1mAADNaQAAzWoAAM1rAADNbAAAzW0AAM1vAADNcQAAzXIAAM1zAADNdQAAzXYAAM21AADNtwAAzbkAAM27AADNvgAAzb8AAM3AAADNwQAAzcIAAM3EAADNxgAAzccAAM3IAADNygAAzcsAAM4KAADODAAAzg4AAM4QAADOEwAAzhQAAM4VAADOFgAAzhcAAM4ZAADOGwAAzhwAAM4dAADOHwAAziAAAM5fAADOYQAAzmMAAM5lAADOaAAAzmkAAM5qAADOawAAzmwAAM5uAADOcAAAznEAAM5yAADOdAAAznUAAM60AADOtgAAzrgAAM66AADOvQAAzr4AAM6/AADOwAAAzsEAAM7DAADOxQAAzsYAAM7HAADOyQAAzsoAAM8JAADPCwAAzw0AAM8PAADPEgAAzxMAAM8UAADPFQAAzxYAAM8YAADPGgAAzxsAAM8cAADPHgAAzx8AAM9eAADPYAAAz2IAAM9kAADPZwAAz2gAAM9pAADPagAAz2sAAM9tAADPbwAAz3AAAM9xAADPcwAAz3QAAM+/AADP4gAA0AIAANAiAADQJAAA0CYAANAoAADQKgAA0C0AANAuAADQLwAA0DIAANAzAADQNQAA0DYAANA4AADQOwAA0DwAANA9AADQQAAA0EEAANBKAADQVwAA0FwAANBeAADQYAAA0GUAANBoAADQawAA0G0AANCSAADQtgAA0N0AANEBAADRBAAA0QYAANEIAADRCgAA0QwAANEOAADRDwAA0RIAANEfAADRMAAA0TIAANE0AADRNgAA0TgAANE6AADRPAAA0T4AANFAAADRUQAA0VQAANFXAADRWgAA0V0AANFgAADRYwAA0WYAANFpAADRawAA0aoAANGsAADRrgAA0bAAANGzAADRtAAA0bUAANG2AADRtwAA0bkAANG7AADRvAAA0b0AANG/AADRwAAA0f8AANIBAADSAwAA0gUAANIIAADSCQAA0goAANILAADSDAAA0g4AANIQAADSEQAA0hIAANIUAADSFQAA0lQAANJWAADSWQAA0lsAANJeAADSXwAA0mAAANJhAADSYgAA0mQAANJmAADSZwAA0mgAANJqAADSawAA0ngAANJ5AADSegAA0nwAANK7AADSvQAA0r8AANLBAADSxAAA0sUAANLGAADSxwAA0sgAANLKAADSzAAA0s0AANLOAADS0AAA0tEAANMQAADTEgAA0xQAANMWAADTGQAA0xoAANMbAADTHAAA0x0AANMfAADTIQAA0yIAANMjAADTJQAA0yYAANNlAADTZwAA02kAANNrAADTbgAA028AANNwAADTcQAA03IAANN0AADTdgAA03cAANN4AADTegAA03sAANO6AADTvAAA074AANPAAADTwwAA08QAANPFAADTxgAA08cAANPJAADTywAA08wAANPNAADTzwAA09AAANQPAADUEQAA1BMAANQVAADUGAAA1BkAANQaAADUGwAA1BwAANQeAADUIAAA1CEAANQiAADUJAAA1CUAANRKAADUbgAA1JUAANS5AADUvAAA1L4AANTAAADUwgAA1MQAANTGAADUxwAA1MoAANTXAADU5gAA1OgAANTqAADU7AAA1O4AANTwAADU8gAA1PQAANUDAADVBgAA1QkAANUMAADVDwAA1RIAANUVAADVGAAA1RoAANVZAADVWwAA1V0AANVfAADVYgAA1WMAANVkAADVZQAA1WYAANVoAADVagAA1WsAANVsAADVbgAA1W8AANWuAADVsAAA1bIAANW0AADVtwAA1bgAANW5AADVugAA1bsAANW9AADVvwAA1cAAANXBAADVwwAA1cQAANYDAADWBQAA1gcAANYJAADWDAAA1g0AANYOAADWDwAA1hAAANYSAADWFAAA1hUAANYWAADWGAAA1hkAANZYAADWWgAA1l0AANZfAADWYgAA1mMAANZkAADWZQAA1mYAANZoAADWagAA1msAANZsAADWbgAA1m8AANayAADW1gAA1voAANcdAADXRAAA12QAANeLAADXsgAA19IAANf2AADYGgAA2BwAANgfAADYIQAA2CMAANglAADYKAAA2CsAANgtAADYLwAA2DIAANg0AADYNgAA2DkAANg8AADYPQAA2EYAANhTAADYVgAA2FgAANhbAADYXgAA2GAAANiFAADYqQAA2NAAANj0AADY9wAA2PkAANj7AADY/QAA2P8AANkBAADZAgAA2QUAANkSAADZJQAA2ScAANkpAADZKwAA2S0AANkvAADZMQAA2TMAANk1AADZNwAA2UoAANlNAADZUAAA2VMAANlWAADZWQAA2VwAANlfAADZYgAA2WUAANlnAADZpgAA2agAANmrAADZrQAA2bAAANmxAADZsgAA2bMAANm0AADZtgAA2bgAANm5AADZugAA2bwAANm9AADZxgAA2ccAANnJAADaCAAA2goAANoMAADaDgAA2hEAANoSAADaEwAA2hQAANoVAADaFwAA2hkAANoaAADaGwAA2h0AANoeAADaXQAA2l8AANpiAADaZAAA2mcAANpoAADaaQAA2moAANprAADabQAA2m8AANpwAADacQAA2nMAANp0AADafQAA2n4AANqAAADavwAA2sEAANrDAADaxQAA2sgAANrJAADaygAA2ssAANrMAADazgAA2tAAANrRAADa0gAA2tQAANrVAADbFAAA2xYAANsZAADbGwAA2x4AANsfAADbIAAA2yEAANsiAADbJAAA2yYAANsnAADbKAAA2yoAANsrAADbNAAA2zUAANs3AADbdgAA23gAANt6AADbfAAA238AANuAAADbgQAA24IAANuDAADbhQAA24cAANuIAADbiQAA24sAANuMAADbywAA280AANvQAADb0gAA29UAANvWAADb1wAA29gAANvZAADb2wAA290AANveAADb3wAA2+EAANviAADb7wAA2/AAANvxAADb8wAA3DIAANw0AADcNgAA3DgAANw7AADcPAAA3D0AANw+AADcPwAA3EEAANxDAADcRAAA3EUAANxHAADcSAAA3IcAANyJAADcjAAA3I4AANyRAADckgAA3JMAANyUAADclQAA3JcAANyZAADcmgAA3JsAANydAADcngAA3LAAANy9AADcxgAA3MkAANzMAADczgAA3NEAANzaAADc3QAA3OAAANzjAADc5gAA3OgAANzuAADdOQAA3VwAAN18AADdnAAA3Z4AAN2gAADdogAA3aQAAN2nAADdqAAA3akAAN2sAADdrQAA3a8AAN2wAADdsgAA3bUAAN22AADdtwAA3boAAN27AADdxAAA3dEAAN3WAADd2AAA3doAAN3fAADd4gAA3eUAAN3nAADeDAAA3jAAAN5XAADeewAA3n4AAN6AAADeggAA3oQAAN6GAADeiAAA3okAAN6MAADemQAA3qoAAN6sAADergAA3rAAAN6yAADetAAA3rYAAN64AADeugAA3ssAAN7OAADe0QAA3tQAAN7XAADe2gAA3t0AAN7gAADe4wAA3uUAAN8kAADfJgAA3ygAAN8qAADfLQAA3y4AAN8vAADfMAAA3zEAAN8zAADfNQAA3zYAAN83AADfOQAA3zoAAN95AADfewAA330AAN9/AADfggAA34MAAN+EAADfhQAA34YAAN+IAADfigAA34sAAN+MAADfjgAA348AAN/OAADf0AAA39MAAN/VAADf2AAA39kAAN/aAADf2wAA39wAAN/eAADf4AAA3+EAAN/iAADf5AAA3+UAAN/yAADf8wAA3/QAAN/2AADgNQAA4DcAAOA5AADgOwAA4D4AAOA/AADgQAAA4EEAAOBCAADgRAAA4EYAAOBHAADgSAAA4EoAAOBLAADgigAA4IwAAOCOAADgkAAA4JMAAOCUAADglQAA4JYAAOCXAADgmQAA4JsAAOCcAADgnQAA4J8AAOCgAADg3wAA4OEAAODjAADg5QAA4OgAAODpAADg6gAA4OsAAODsAADg7gAA4PAAAODxAADg8gAA4PQAAOD1AADhNAAA4TYAAOE4AADhOgAA4T0AAOE+AADhPwAA4UAAAOFBAADhQwAA4UUAAOFGAADhRwAA4UkAAOFKAADhiQAA4YsAAOGNAADhjwAA4ZIAAOGTAADhlAAA4ZUAAOGWAADhmAAA4ZoAAOGbAADhnAAA4Z4AAOGfAADhxAAA4egAAOIPAADiMwAA4jYAAOI4AADiOgAA4jwAAOI+AADiQAAA4kEAAOJEAADiUQAA4mAAAOJiAADiZAAA4mYAAOJoAADiagAA4mwAAOJuAADifQAA4oAAAOKDAADihgAA4okAAOKMAADijwAA4pIAAOKUAADi0wAA4tUAAOLXAADi2QAA4twAAOLdAADi3gAA4t8AAOLgAADi4gAA4uQAAOLlAADi5gAA4ugAAOLpAADjKAAA4yoAAOMsAADjLgAA4zEAAOMyAADjMwAA4zQAAOM1AADjNwAA4zkAAOM6AADjOwAA4z0AAOM+AADjfQAA438AAOOBAADjgwAA44YAAOOHAADjiAAA44kAAOOKAADjjAAA444AAOOPAADjkAAA45IAAOOTAADj0gAA49QAAOPWAADj2AAA49sAAOPcAADj3QAA494AAOPfAADj4QAA4+MAAOPkAADj5QAA4+cAAOPoAADkJwAA5CkAAOQrAADkLQAA5DAAAOQxAADkMgAA5DMAAOQ0AADkNgAA5DgAAOQ5AADkOgAA5DwAAOQ9AADkfAAA5H4AAOSAAADkggAA5IUAAOSGAADkhwAA5IgAAOSJAADkiwAA5I0AAOSOAADkjwAA5JEAAOSSAADk0QAA5NMAAOTVAADk1wAA5NoAAOTbAADk3AAA5N0AAOTeAADk4AAA5OIAAOTjAADk5AAA5OYAAOTnAADlMgAA5VUAAOV1AADllQAA5ZcAAOWZAADlmwAA5Z0AAOWgAADloQAA5aIAAOWlAADlpgAA5agAAOWpAADlqwAA5a4AAOWvAADlsAAA5bMAAOW0AADluQAA5cYAAOXLAADlzQAA5c8AAOXUAADl1wAA5doAAOXcAADmAQAA5iUAAOZMAADmcAAA5nMAAOZ1AADmdwAA5nkAAOZ7AADmfQAA5n4AAOaBAADmjgAA5p8AAOahAADmowAA5qUAAOanAADmqQAA5qsAAOatAADmrwAA5sAAAObDAADmxgAA5skAAObMAADmzwAA5tIAAObVAADm2AAA5toAAOcZAADnGwAA5x0AAOcfAADnIgAA5yMAAOckAADnJQAA5yYAAOcoAADnKgAA5ysAAOcsAADnLgAA5y8AAOduAADncAAA53IAAOd0AADndwAA53gAAOd5AADnegAA53sAAOd9AADnfwAA54AAAOeBAADngwAA54QAAOfDAADnxQAA58gAAOfKAADnzQAA584AAOfPAADn0AAA59EAAOfTAADn1QAA59YAAOfXAADn2QAA59oAAOfnAADn6AAA5+kAAOfrAADoKgAA6CwAAOguAADoMAAA6DMAAOg0AADoNQAA6DYAAOg3AADoOQAA6DsAAOg8AADoPQAA6D8AAOhAAADofwAA6IEAAOiDAADohQAA6IgAAOiJAADoigAA6IsAAOiMAADojgAA6JAAAOiRAADokgAA6JQAAOiVAADo1AAA6NYAAOjYAADo2gAA6N0AAOjeAADo3wAA6OAAAOjhAADo4wAA6OUAAOjmAADo5wAA6OkAAOjqAADpKQAA6SsAAOktAADpLwAA6TIAAOkzAADpNAAA6TUAAOk2AADpOAAA6ToAAOk7AADpPAAA6T4AAOk/AADpfgAA6YAAAOmCAADphAAA6YcAAOmIAADpiQAA6YoAAOmLAADpjQAA6Y8AAOmQAADpkQAA6ZMAAOmUAADpuQAA6d0AAOoEAADqKAAA6isAAOotAADqLwAA6jEAAOozAADqNQAA6jYAAOo5AADqRgAA6lUAAOpXAADqWQAA6lsAAOpdAADqXwAA6mEAAOpjAADqcgAA6nUAAOp4AADqewAA6n4AAOqBAADqhAAA6ocAAOqJAADqyAAA6soAAOrMAADqzgAA6tEAAOrSAADq0wAA6tQAAOrVAADq1wAA6tkAAOraAADq2wAA6t0AAOreAADrHQAA6x8AAOshAADrIwAA6yYAAOsnAADrKAAA6ykAAOsqAADrLAAA6y4AAOsvAADrMAAA6zIAAOszAADrcgAA63QAAOt2AADreAAA63sAAOt8AADrfQAA634AAOt/AADrgQAA64MAAOuEAADrhQAA64cAAOuIAADrxwAA68kAAOvLAADrzQAA69AAAOvRAADr0gAA69MAAOvUAADr1gAA69gAAOvZAADr2gAA69wAAOvdAADsHAAA7B4AAOwgAADsIgAA7CUAAOwmAADsJwAA7CgAAOwpAADsKwAA7C0AAOwuAADsLwAA7DEAAOwyAADscQAA7HMAAOx1AADsdwAA7HoAAOx7AADsfAAA7H0AAOx+AADsgAAA7IIAAOyDAADshAAA7IYAAOyHAADsxgAA7MgAAOzKAADszAAA7M8AAOzQAADs0QAA7NIAAOzTAADs1QAA7NcAAOzYAADs2QAA7NsAAOzcAADtJwAA7UoAAO1qAADtigAA7YwAAO2OAADtkAAA7ZIAAO2VAADtlgAA7ZcAAO2aAADtmwAA7Z0AAO2eAADtoAAA7aIAAO2jAADtpAAA7acAAO2oAADtrQAA7boAAO2/AADtwQAA7cMAAO3IAADtywAA7c4AAO3QAADt9QAA7hkAAO5AAADuZAAA7mcAAO5pAADuawAA7m0AAO5vAADucQAA7nIAAO51AADuggAA7pMAAO6VAADulwAA7pkAAO6bAADunQAA7p8AAO6hAADuowAA7rQAAO63AADuugAA7r0AAO7AAADuwwAA7sYAAO7JAADuzAAA7s4AAO8NAADvDwAA7xEAAO8TAADvFgAA7xcAAO8YAADvGQAA7xoAAO8cAADvHgAA7x8AAO8gAADvIgAA7yMAAO9iAADvZAAA72YAAO9oAADvawAA72wAAO9tAADvbgAA728AAO9xAADvcwAA73QAAO91AADvdwAA73gAAO+3AADvuQAA77wAAO++AADvwQAA78IAAO/DAADvxAAA78UAAO/HAADvyQAA78oAAO/LAADvzQAA784AAO/bAADv3AAA790AAO/fAADwHgAA8CAAAPAiAADwJAAA8CcAAPAoAADwKQAA8CoAAPArAADwLQAA8C8AAPAwAADwMQAA8DMAAPA0AADwcwAA8HUAAPB3AADweQAA8HwAAPB9AADwfgAA8H8AAPCAAADwggAA8IQAAPCFAADwhgAA8IgAAPCJAADwyAAA8MoAAPDMAADwzgAA8NEAAPDSAADw0wAA8NQAAPDVAADw1wAA8NkAAPDaAADw2wAA8N0AAPDeAADxHQAA8R8AAPEhAADxIwAA8SYAAPEnAADxKAAA8SkAAPEqAADxLAAA8S4AAPEvAADxMAAA8TIAAPEzAADxcgAA8XQAAPF2AADxeAAA8XsAAPF8AADxfQAA8X4AAPF/AADxgQAA8YMAAPGEAADxhQAA8YcAAPGIAADxrQAA8dEAAPH4AADyHAAA8h8AAPIhAADyIwAA8iUAAPInAADyKQAA8ioAAPItAADyOgAA8kkAAPJLAADyTQAA8k8AAPJRAADyUwAA8lUAAPJXAADyZgAA8mkAAPJsAADybwAA8nIAAPJ1AADyeAAA8nsAAPJ9AADyvAAA8r4AAPLAAADywgAA8sUAAPLGAADyxwAA8sgAAPLJAADyywAA8s0AAPLOAADyzwAA8tEAAPLSAADzEQAA8xMAAPMVAADzFwAA8xoAAPMbAADzHAAA8x0AAPMeAADzIAAA8yIAAPMjAADzJAAA8yYAAPMnAADzZgAA82gAAPNqAADzbAAA828AAPNwAADzcQAA83IAAPNzAADzdQAA83cAAPN4AADzeQAA83sAAPN8AADzuwAA870AAPO/AADzwQAA88QAAPPFAADzxgAA88cAAPPIAADzygAA88wAAPPNAADzzgAA89AAAPPRAAD0EAAA9BIAAPQUAAD0FgAA9BkAAPQaAAD0GwAA9BwAAPQdAAD0HwAA9CEAAPQiAAD0IwAA9CUAAPQmAAD0ZQAA9GcAAPRpAAD0awAA9G4AAPRvAAD0cAAA9HEAAPRyAAD0dAAA9HYAAPR3AAD0eAAA9HoAAPR7AAD0ugAA9LwAAPS+AAD0wAAA9MMAAPTEAAD0xQAA9MYAAPTHAAD0yQAA9MsAAPT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LAAERTAABEU0AARFPAAERUQABEVIAARFTAAERVQABEVYAARFjAAERZAABEWUAARFnAAERpgABEagAARGqAAERrAABEa8AARGwAAERsQABEbIAARGzAAERtQABEbcAARG4AAERuQABEbsAARG8AAER+wABEf0AARH/AAESAQABEgQAARIFAAESBgABEgcAARIIAAESCgABEgwAARINAAESDgABEhAAARIRAAESUAABElIAARJUAAESVgABElkAARJaAAESWwABElwAARJdAAESXwABEmEAARJiAAESYwABEmUAARJmAAESpQABEqcAARKpAAESqwABEq4AARKvAAESsAABErEAARKyAAEStAABErYAARK3AAESuAABEroAARK7AAES+gABEvwAARL+AAETAAABEwMAARMEAAETBQABEwYAARMHAAETCQABEwsAARMMAAETDQABEw8AARMQAAETNQABE1kAAROAAAETpAABE6cAAROpAAETqwABE60AAROvAAETsQABE7IAARO1AAETwgABE9EAARPTAAET1QABE9cAARPZAAET2wABE90AARPfAAET7gABE/EAARP0AAET9wABE/oAARP9AAEUAAABFAMAARQFAAEURAABFEYAARRIAAEUSgABFE0AARROAAEUTwABFFAAARRRAAEUUwABFFUAARRWAAEUVwABFFkAARRaAAEUmQABFJsAARSdAAEUnwABFKIAARSjAAEUpAABFKUAARSmAAEUqAABFKoAARSrAAEUrAABFK4AARSvAAEU7gABFPAAARTyAAEU9AABFPcAART4AAEU+QABFPoAART7AAEU/QABFP8AARUAAAEVAQABFQMAARUEAAEVQwABFUUAARVHAAEVSQABFUwAARVNAAEVTgABFU8AARVQAAEVUgABFVQAARVVAAEVVgABFVgAARVZAAEVmAABFZoAARWcAAEVngABFaEAARWiAAEVowABFaQAARWlAAEVpwABFakAARWqAAEVqwABFa0AARWuAAEV7QABFe8AARXxAAEV8wABFfYAARX3AAEV+AABFfkAARX6AAEV/AABFf4AARX/AAEWAAABFgIAARYDAAEWQgABFkQAARZGAAEWSAABFksAARZMAAEWTQABFk4AARZPAAEWUQABFlMAARZUAAEWVQABFlcAARZYAAEWowABFsYAARbmAAEXBgABFwgAARcKAAEXDAABFw4AARcRAAEXEgABFxMAARcWAAEXFwABFxkAARcaAAEXHAABFx8AARcgAAEXIQABFyQAARclAAEXKgABFzcAARc8AAEXPgABF0AAARdFAAEXSAABF0sAARdNAAEXcgABF5YAARe9AAEX4QABF+QAARfmAAEX6AABF+oAARfsAAEX7gABF+8AARfyAAEX/wABGBAAARgSAAEYFAABGBYAARgYAAEYGgABGBwAARgeAAEYIAABGDEAARg0AAEYNwABGDoAARg9AAEYQAABGEMAARhGAAEYSQABGEsAARiKAAEYjAABGI4AARiQAAEYkwABGJQAARiVAAEYlgABGJcAARiZAAEYmwABGJwAARidAAEYnwABGKAAARjfAAEY4QABGOMAARjlAAEY6AABGOkAARjqAAEY6wABGOwAARjuAAEY8AABGPEAARjyAAEY9AABGPUAARk0AAEZNgABGTkAARk7AAEZPgABGT8AARlAAAEZQQABGUIAARlEAAEZRgABGUcAARlIAAEZSgABGUsAARlYAAEZWQABGVoAARlcAAEZmwABGZ0AARmfAAEZoQABGaQAARmlAAEZpgABGacAARmoAAEZqgABGawAARmtAAEZrgABGbAAARmxAAEZ8AABGfIAARn0AAEZ9gABGfkAARn6AAEZ+wABGfwAARn9AAEZ/wABGgEAARoCAAEaAwABGgUAARoGAAEaRQABGkcAARpJAAEaSwABGk4AARpPAAEaUAABGlEAARpSAAEaVAABGlYAARpXAAEaWAABGloAARpbAAEamgABGpwAARqeAAEaoAABGqMAARqkAAEapQABGqYAARqnAAEaqQABGqsAARqsAAEarQABGq8AARqwAAEa7wABGvEAARrzAAEa9QABGvgAARr5AAEa+gABGvsAARr8AAEa/gABGwAAARsBAAEbAgABGwQAARsFAAEbKgABG04AARt1AAEbmQABG5wAARueAAEboAABG6IAARukAAEbpgABG6cAARuqAAEbtwABG8YAARvIAAEbygABG8wAARvOAAEb0AABG9IAARvUAAEb4wABG+YAARvpAAEb7AABG+8AARvyAAEb9QABG/gAARv6AAEcOQABHDsAARw+AAEcQAABHEMAARxEAAEcRQABHEYAARxHAAEcSQABHEsAARxMAAEcTQABHE8AARxQAAEcjwABHJEAARyTAAEclQABHJgAARyZAAEcmgABHJsAARycAAEcngABHKAAARyhAAEcogABHKQAARylAAEc5AABHOYAARzoAAEc6gABHO0AARzuAAEc7wABHPAAARzxAAEc8wABHPUAARz2AAEc9wABHPkAARz6AAEdOQABHTsAAR0+AAEdQAABHUMAAR1EAAEdRQABHUYAAR1HAAEdSQABHUsAAR1MAAEdTQABHU8AAR1QAAEdjwABHZEAAR2TAAEdlQABHZgAAR2ZAAEdmgABHZsAAR2cAAEdngABHaAAAR2hAAEdogABHaQAAR2lAAEd5AABHeYAAR3oAAEd6gABHe0AAR3uAAEd7wABHfAAAR3xAAEd8wABHfUAAR32AAEd9wABHfkAAR36AAEeOQABHjsAAR49AAEePwABHkIAAR5DAAEeRAABHkUAAR5GAAEeSAABHkoAAR5LAAEeTAABHk4AAR5PAAEemgABHr0AAR7dAAEe/QABHv8AAR8BAAEfAwABHwUAAR8IAAEfCQABHwoAAR8NAAEfDgABHxAAAR8RAAEfEwABHxYAAR8XAAEfGAABHxsAAR8cAAEfIQABHy4AAR8zAAEfNQABHzcAAR88AAEfPwABH0IAAR9EAAEfaQABH40AAR+0AAEf2AABH9sAAR/dAAEf3wABH+EAAR/jAAEf5QABH+YAAR/pAAEf9gABIAcAASAJAAEgCwABIA0AASAPAAEgEQABIBMAASAVAAEgFwABICgAASArAAEgLgABIDEAASA0AAEgNwABIDoAASA9AAEgQAABIEIAASCBAAEggwABIIUAASCHAAEgigABIIsAASCMAAEgjQABII4AASCQAAEgkgABIJMAASCUAAEglgABIJcAASDWAAEg2AABINoAASDcAAEg3wABIOAAASDhAAEg4gABIOMAASDlAAEg5wABIOgAASDpAAEg6wABIOwAASErAAEhLQABITAAASEyAAEhNQABITYAASE3AAEhOAABITkAASE7AAEhPQABIT4AASE/AAEhQQABIUIAASFPAAEhUAABIVEAASFTAAEhkgABIZQAASGWAAEhmAABIZsAASGcAAEhnQABIZ4AASGfAAEhoQABIaMAASGkAAEhpQABIacAASGoAAEh5wABIekAASHrAAEh7QABIfAAASHxAAEh8gABIfMAASH0AAEh9gABIfgAASH5AAEh+gABIfwAASH9AAEiPAABIj4AASJAAAEiQgABIkUAASJGAAEiRwABIkgAASJJAAEiSwABIk0AASJOAAEiTwABIlEAASJSAAEikQABIpMAASKVAAEilwABIpoAASKbAAEinAABIp0AASKeAAEioAABIqIAASKjAAEipAABIqYAASKnAAEi5gABIugAASLqAAEi7AABIu8AASLwAAEi8QABIvIAASLzAAEi9QABIvcAASL4AAEi+QABIvsAASL8AAEjIQABI0UAASNsAAEjkAABI5MAASOVAAEjlwABI5kAASObAAEjnQABI54AASOhAAEjrgABI70AASO/AAEjwQABI8MAASPFAAEjxwABI8kAASPLAAEj2gABI90AASPgAAEj4wABI+YAASPpAAEj7AABI+8AASPxAAEkMAABJDIAASQ0AAEkNgABJDkAASQ6AAEkOwABJDwAASQ9AAEkPwABJEEAASRCAAEkQwABJEUAASRGAAEkhQABJIcAASSJAAEkiwABJI4AASSPAAEkkAABJJEAASSSAAEklAABJJYAASSXAAEkmAABJJoAASSbAAEk2gABJNwAASTeAAEk4AABJOMAASTkAAEk5QABJOYAASTnAAEk6QABJOsAASTsAAEk7QABJO8AASTwAAElLwABJTEAASUzAAElNQABJTgAASU5AAElOgABJTsAASU8AAElPgABJUAAASVBAAElQgABJUQAASVFAAElhAABJYYAASWIAAEligABJY0AASWOAAEljwABJZAAASWRAAElkwABJZUAASWWAAEllwABJZkAASWaAAEl2QABJdsAASXdAAEl3wABJeIAASXjAAEl5AABJeUAASXmAAEl6AABJeoAASXrAAEl7AABJe4AASXvAAEmLgABJjAAASYyAAEmNAABJjcAASY4AAEmOQABJjoAASY7AAEmPQABJj8AASZAAAEmQQABJkMAASZEAAEmjwABJrIAASbSAAEm8gABJvQAASb2AAEm+AABJvoAASb9AAEm/gABJv8AAScCAAEnAwABJwUAAScGAAEnCAABJwsAAScMAAEnDQABJxAAAScRAAEnFgABJyMAAScoAAEnKgABJywAAScxAAEnNAABJzcAASc5AAEnXgABJ4IAASepAAEnzQABJ9AAASfSAAEn1AABJ9YAASfYAAEn2gABJ9sAASfeAAEn6wABJ/wAASf+AAEoAAABKAIAASgEAAEoBgABKAgAASgKAAEoDAABKB0AASggAAEoIwABKCYAASgpAAEoLAABKC8AASgyAAEoNQABKDcAASh2AAEoeAABKHoAASh8AAEofwABKIAAASiBAAEoggABKIMAASiFAAEohwABKIgAASiJAAEoiwABKIwAASjLAAEozQABKM8AASjRAAEo1AABKNUAASjWAAEo1wABKNgAASjaAAEo3AABKN0AASjeAAEo4AABKOEAASkgAAEpIgABKSUAASknAAEpKgABKSsAASksAAEpLQABKS4AASkwAAEpMgABKTMAASk0AAEpNgABKTcAASlEAAEpRQABKUYAASlIAAEphwABKYkAASmLAAEpjQABKZAAASmRAAEpkgABKZMAASmUAAEplgABKZgAASmZAAEpmgABKZwAASmdAAEp3AABKd4AASngAAEp4gABKeUAASnmAAEp5wABKegAASnpAAEp6wABKe0AASnuAAEp7wABKfEAASnyAAEqMQABKjMAASo1AAEqNwABKjoAASo7AAEqPAABKj0AASo+AAEqQAABKkIAASpDAAEqRAABKkYAASpHAAEqhgABKogAASqKAAEqjAABKo8AASqQAAEqkQABKpIAASqTAAEqlQABKpcAASqYAAEqmQABKpsAASqcAAEq2wABKt0AASrfAAEq4QABKuQAASrlAAEq5gABKucAASroAAEq6gABKuwAASrtAAEq7gABKvAAASrxAAErFgABKzoAASthAAErhQABK4gAASuKAAErjAABK44AASuQAAErkgABK5MAASuWAAErowABK7IAASu0AAErtgABK7gAASu6AAErvAABK74AASvAAAErzwABK9IAASvVAAEr2AABK9sAASveAAEr4QABK+QAASvmAAEsJQABLCcAASwpAAEsKwABLC4AASwvAAEsMAABLDEAASwyAAEsNAABLDYAASw3AAEsOAABLDoAASw7AAEsegABLHwAASx+AAEsgAABLIMAASyEAAEshQABLIYAASyHAAEsiQABLIsAASyMAAEsjQABLI8AASyQAAEszwABLNEAASzTAAEs1QABLNgAASzZAAEs2gABLNsAASzcAAEs3gABLOAAASzhAAEs4gABLOQAASzlAAEtJAABLSYAAS0oAAEtKgABLS0AAS0uAAEtLwABLTAAAS0xAAEtMwABLTUAAS02AAEtNwABLTkAAS06AAEteQABLXsAAS19AAEtfwABLYIAAS2DAAEthAABLYUAAS2GAAEtiAABLYoAAS2LAAEtjAABLY4AAS2PAAEtzgABLdAAAS3SAAEt1AABLdcAAS3YAAEt2QABLdoAAS3bAAEt3QABLd8AAS3gAAEt4QABLeMAAS3kAAEuIwABLiUAAS4nAAEuKQABLiwAAS4tAAEuLgABLi8AAS4wAAEuMgABLjQAAS41AAEuNgABLjgAAS45AAEuhAABLqcAAS7HAAEu5wABLukAAS7rAAEu7QABLu8AAS7yAAEu8wABLvQAAS73AAEu+AABLvoAAS77AAEu/QABLwAAAS8BAAEvAgABLwUAAS8GAAEvCwABLxgAAS8dAAEvHwABLyEAAS8mAAEvKQABLywAAS8uAAEvUwABL3cAAS+eAAEvwgABL8UAAS/HAAEvyQABL8sAAS/NAAEvzwABL9AAAS/TAAEv4AABL/EAAS/zAAEv9QABL/cAAS/5AAEv+wABL/0AAS//AAEwAQABMBIAATAVAAEwGAABMBsAATAeAAEwIQABMCQAATAnAAEwKgABMCwAATBrAAEwbQABMG8AATBxAAEwdAABMHUAATB2AAEwdwABMHgAATB6AAEwfAABMH0AATB+AAEwgAABMIEAATDAAAEwwgABMMQAATDGAAEwyQABMMoAATDLAAEwzAABMM0AATDPAAEw0QABMNIAATDTAAEw1QABMNYAATEVAAExFwABMRoAATEcAAExHwABMSAAATEhAAExIgABMSMAATElAAExJwABMSgAATEpAAExKwABMSwAATE5AAExOgABMTsAATE9AAExfAABMX4AATGAAAExggABMYUAATGGAAExhwABMYgAATGJAAExiwABMY0AATGOAAExjwABMZEAATGSAAEx0QABMdMAATHVAAEx1wABMdoAATHbAAEx3AABMd0AATHeAAEx4AABMeIAATHjAAEx5AABMeYAATHnAAEyJgABMigAATIqAAEyLAABMi8AATIwAAEyMQABMjIAATIzAAEyNQABMjcAATI4AAEyOQABMjsAATI8AAEyewABMn0AATJ/AAEygQABMoQAATKFAAEyhgABMocAATKIAAEyigABMowAATKNAAEyjgABMpAAATKRAAEy0AABMtIAATLUAAEy1gABMtkAATLaAAEy2wABMtwAATLdAAEy3wABMuEAATLiAAEy4wABMuUAATLmAAEzCwABMy8AATNWAAEzegABM30AATN/AAEzgQABM4MAATOFAAEzhwABM4gAATOLAAEzmAABM6cAATOpAAEzqwABM60AATOvAAEzsQABM7MAATO1AAEzxAABM8cAATPKAAEzzQABM9AAATPTAAEz1gABM9kAATPbAAE0GgABNBwAATQeAAE0IAABNCMAATQkAAE0JQABNCYAATQnAAE0KQABNCsAATQsAAE0LQABNC8AATQwAAE0bwABNHEAATRzAAE0dQABNHgAATR5AAE0egABNHsAATR8AAE0fgABNIAAATSBAAE0ggABNIQAATSFAAE0xAABNMYAATTIAAE0ygABNM0AATTOAAE0zwABNNAAATTRAAE00wABNNUAATTWAAE01wABNNkAATTaAAE1GQABNRsAATUdAAE1HwABNSIAATUjAAE1JAABNSUAATUmAAE1KAABNSoAATUrAAE1LAABNS4AATUvAAE1bgABNXAAATVyAAE1dAABNXcAATV4AAE1eQABNXoAATV7AAE1fQABNX8AATWAAAE1gQABNYMAATWEAAE1wwABNcUAATXHAAE1yQABNcwAATXNAAE1zgABNc8AATXQAAE10gABNdQAATXVAAE11gABNdgAATXZAAE2GAABNhoAATYcAAE2HgABNiEAATYiAAE2IwABNiQAATYlAAE2JwABNikAATYqAAE2KwABNi0AATYuAAE2eQABNpwAATa8AAE23AABNt4AATbgAAE24gABNuQAATbnAAE26AABNukAATbsAAE27QABNu8AATbwAAE28gABNvUAATb2AAE29wABNvoAATb7AAE3BAABNxEAATcWAAE3GAABNxoAATcfAAE3IgABNyUAATcnAAE3TAABN3AAATeXAAE3uwABN74AATfAAAE3wgABN8QAATfGAAE3yAABN8kAATfMAAE32QABN+oAATfsAAE37gABN/AAATfyAAE39AABN/YAATf4AAE3+gABOAsAATgOAAE4EQABOBQAATgXAAE4GgABOB0AATggAAE4IwABOCUAAThkAAE4ZgABOGgAAThqAAE4bQABOG4AAThvAAE4cAABOHEAAThzAAE4dQABOHYAATh3AAE4eQABOHoAATi5AAE4uwABOL0AATi/AAE4wgABOMMAATjEAAE4xQABOMYAATjIAAE4ygABOMsAATjMAAE4zgABOM8AATkOAAE5EAABORMAATkVAAE5GAABORkAATkaAAE5GwABORwAATkeAAE5IAABOSEAATkiAAE5JAABOSUAATkyAAE5MwABOTQAATk2AAE5dQABOXcAATl5AAE5ewABOX4AATl/AAE5gAABOYEAATmCAAE5hAABOYYAATmHAAE5iAABOYoAATmLAAE5ygABOcwAATnOAAE50AABOdMAATnUAAE51QABOdYAATnXAAE52QABOdsAATncAAE53QABOd8AATngAAE6HwABOiEAATojAAE6JQABOigAATopAAE6KgABOisAATosAAE6LgABOjAAAToxAAE6MgABOjQAATo1AAE6dAABOnYAATp4AAE6egABOn0AATp+AAE6fwABOoAAATqBAAE6gwABOoUAATqGAAE6hwABOokAATqKAAE6yQABOssAATrNAAE6zwABOtIAATrTAAE61AABOtUAATrWAAE62AABOtoAATrbAAE63AABOt4AATrfAAE7BAABOygAATtPAAE7cwABO3YAATt4AAE7egABO3wAATt+AAE7gAABO4EAATuEAAE7kQABO6AAATuiAAE7pAABO6YAATuoAAE7qgABO6wAATuuAAE7vQABO8AAATvDAAE7xgABO8kAATvMAAE7zwABO9IAATvUAAE8EwABPBUAATwXAAE8GQABPBwAATwdAAE8HgABPB8AATwgAAE8IgABPCQAATwlAAE8JgABPCgAATwpAAE8aAABPGoAATxsAAE8bgABPHEAATxyAAE8cwABPHQAATx1AAE8dwABPHkAATx6AAE8ewABPH0AATx+AAE8vQABPL8AATzBAAE8wwABPMYAATzHAAE8yAABPMkAATzKAAE8zAABPM4AATzPAAE80AABPNIAATzTAAE9EgABPRQAAT0XAAE9GQABPRwAAT0dAAE9HgABPR8AAT0gAAE9IgABPSQAAT0lAAE9JgABPSgAAT0pAAE9aAABPWoAAT1sAAE9bgABPXEAAT1yAAE9cwABPXQAAT11AAE9dwABPXkAAT16AAE9ewABPX0AAT1+AAE9vQABPb8AAT3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JAAFJCwABSQwAAUkNAAFJDwABSRAAAUkdAAFJHgABSR8AAUkhAAFJYAABSWIAAUlkAAFJZgABSWkAAUlqAAFJawABSWwAAUltAAFJbwABSXEAAUlyAAFJcwABSXUAAUl2AAFJtQABSbcAAUm5AAFJuwABSb4AAUm/AAFJwAABScEAAUnCAAFJxAABScYAAUnHAAFJyAABScoAAUnLAAFKCgABSgwAAUoOAAFKEAABShMAAUoUAAFKFQABShYAAUoXAAFKGQABShsAAUocAAFKHQABSh8AAUogAAFKXwABSmEAAUpjAAFKZQABSmgAAUppAAFKagABSmsAAUpsAAFKbgABSnAAAUpxAAFKcgABSnQAAUp1AAFKtAABSrYAAUq4AAFKugABSr0AAUq+AAFKvwABSsAAAUrBAAFKwwABSsUAAUrGAAFKxwABSskAAUrKAAFK7wABSxMAAUs6AAFLXgABS2EAAUtjAAFLZQABS2cAAUtpAAFLawABS2wAAUtvAAFLfAABS4sAAUuNAAFLjwABS5EAAUuTAAFLlQABS5cAAUuZAAFLqAABS6sAAUuuAAFLsQABS7QAAUu3AAFLugABS70AAUu/AAFL/gABTAAAAUwCAAFMBAABTAcAAUwIAAFMCQABTAoAAUwLAAFMDQABTA8AAUwQAAFMEQABTBMAAUwUAAFMUwABTFUAAUxXAAFMWQABTFwAAUxdAAFMXgABTF8AAUxgAAFMYgABTGQAAUxlAAFMZgABTGgAAUxpAAFMqAABTKoAAUysAAFMrgABTLEAAUyyAAFMswABTLQAAUy1AAFMtwABTLkAAUy6AAFMuwABTL0AAUy+AAFM/QABTP8AAU0BAAFNAwABTQYAAU0HAAFNCAABTQkAAU0KAAFNDAABTQ4AAU0PAAFNEAABTRIAAU0TAAFNUgABTVQAAU1WAAFNWAABTVsAAU1cAAFNXQABTV4AAU1fAAFNYQABTWMAAU1kAAFNZQABTWcAAU1oAAFNpwABTakAAU2rAAFNrQABTbAAAU2xAAFNsgABTbMAAU20AAFNtgABTbgAAU25AAFNugABTbwAAU29AAFN/AABTf4AAU4AAAFOAgABTgUAAU4GAAFOBwABTggAAU4JAAFOCwABTg0AAU4OAAFODwABThEAAU4SAAFOXQABToAAAU6gAAFOwAABTsIAAU7EAAFOxgABTsgAAU7LAAFOzAABTs0AAU7QAAFO0QABTtMAAU7UAAFO1gABTtkAAU7aAAFO2wABTt4AAU7fAAFO5AABTvEAAU72AAFO+AABTvoAAU7/AAFPAgABTwUAAU8HAAFPLAABT1AAAU93AAFPmwABT54AAU+gAAFPogABT6QAAU+mAAFPqAABT6kAAU+sAAFPuQABT8oAAU/MAAFPzgABT9AAAU/SAAFP1AABT9YAAU/YAAFP2gABT+sAAU/uAAFP8QABT/QAAU/3AAFP+gABT/0AAVAAAAFQAwABUAUAAVBEAAFQRgABUEgAAVBKAAFQTQABUE4AAVBPAAFQUAABUFEAAVBTAAFQVQABUFYAAVBXAAFQWQABUFoAAVCZAAFQmwABUJ0AAVCfAAFQogABUKMAAVCkAAFQpQABUKYAAVCoAAFQqgABUKsAAVCsAAFQrgABUK8AAVDuAAFQ8AABUPMAAVD1AAFQ+AABUPkAAVD6AAFQ+wABUPwAAVD+AAFRAAABUQEAAVECAAFRBAABUQUAAVESAAFREwABURQAAVEWAAFRVQABUVcAAVFZAAFRWwABUV4AAVFfAAFRYAABUWEAAVFiAAFRZAABUWYAAVFnAAFRaAABUWoAAVFrAAFRqgABUawAAVGuAAFRsAABUbMAAVG0AAFRtQABUbYAAVG3AAFRuQABUbsAAVG8AAFRvQABUb8AAVHAAAFR/wABUgEAAVIDAAFSBQABUggAAVIJAAFSCgABUgsAAVIMAAFSDgABUhAAAVIRAAFSEgABUhQAAVIVAAFSVAABUlYAAVJYAAFSWgABUl0AAVJeAAFSXwABUmAAAVJhAAFSYwABUmUAAVJmAAFSZwABUmkAAVJqAAFSqQABUqsAAVKtAAFSrwABUrIAAVKzAAFStAABUrUAAVK2AAFSuAABUroAAVK7AAFSvAABUr4AAVK/AAFS5AABUwgAAVMvAAFTUwABU1YAAVNYAAFTWgABU1wAAVNeAAFTYAABU2EAAVNkAAFTcQABU4AAAVOCAAFThAABU4YAAVOIAAFTigABU4wAAVOOAAFTnQABU6AAAVOjAAFTpgABU6kAAVOsAAFTrwABU7IAAVO0AAFT8wABU/UAAVP3AAFT+QABU/wAAVP9AAFT/gABU/8AAVQAAAFUAgABVAQAAVQFAAFUBgABVAgAAVQJAAFUSAABVEoAAVRMAAFUTgABVFEAAVRSAAFUUwABVFQAAVRVAAFUVwABVFkAAVRaAAFUWwABVF0AAVReAAFUnQABVJ8AAVShAAFUowABVKYAAVSnAAFUqAABVKkAAVSqAAFUrAABVK4AAVSvAAFUsAABVLIAAVSzAAFU8gABVPQAAVT2AAFU+AABVPsAAVT8AAFU/QABVP4AAVT/AAFVAQABVQMAAVUEAAFVBQABVQcAAVUIAAFVRwABVUkAAVVLAAFVTQABVVAAAVVRAAFVUgABVVMAAVVUAAFVVgABVVgAAVVZAAFVWgABVVwAAVVdAAFVnAABVZ4AAVWgAAFVogABVaUAAVWmAAFVpwABVagAAVWpAAFVqwABVa0AAVWuAAFVrwABVbEAAVWyAAFV8QABVfMAAVX1AAFV9wABVfoAAVX7AAFV/AABVf0AAVX+AAFWAAABVgIAAVYDAAFWBAABVgYAAVYHAAFWUgABVnUAAVaVAAFWtQABVrcAAVa5AAFWuwABVr0AAVbAAAFWwQABVsIAAVbFAAFWxgABVsgAAVbJAAFWywABVs4AAVbPAAFW0AABVtMAAVbUAAFW2QABVuYAAVbrAAFW7QABVu8AAVb0AAFW9wABVvoAAVb8AAFXIQABV0UAAVdsAAFXkAABV5MAAVeVAAFXlwABV5kAAVebAAFXnQABV54AAVehAAFXrgABV78AAVfBAAFXwwABV8UAAVfHAAFXyQABV8sAAVfNAAFXzwABV+AAAVfjAAFX5gABV+kAAVfsAAFX7wABV/IAAVf1AAFX+AABV/oAAVg5AAFYOwABWD0AAVg/AAFYQgABWEMAAVhEAAFYRQABWEYAAVhIAAFYSgABWEsAAVhMAAFYTgABWE8AAViOAAFYkAABWJIAAViUAAFYlwABWJgAAViZAAFYmgABWJsAAVidAAFYnwABWKAAAVihAAFYowABWKQAAVjjAAFY5QABWOgAAVjqAAFY7QABWO4AAVjvAAFY8AABWPEAAVjzAAFY9QABWPYAAVj3AAFY+QABWPoAAVkHAAFZCAABWQkAAVkLAAFZSgABWUwAAVlOAAFZUAABWVMAAVlUAAFZVQABWVYAAVlXAAFZWQABWVsAAVlcAAFZXQABWV8AAVlgAAFZnwABWaEAAVmjAAFZpQABWagAAVmpAAFZqgABWasAAVmsAAFZrgABWbAAAVmxAAFZsgABWbQAAVm1AAFZ9AABWfYAAVn4AAFZ+gABWf0AAVn+AAFZ/wABWgAAAVoBAAFaAwABWgUAAVoGAAFaBwABWgkAAVoKAAFaSQABWksAAVpNAAFaTwABWlIAAVpTAAFaVAABWlUAAVpWAAFaWAABWloAAVpbAAFaXAABWl4AAVpfAAFangABWqAAAVqiAAFapAABWqcAAVqoAAFaqQABWqoAAVqrAAFarQABWq8AAVqwAAFasQABWrMAAVq0AAFa2QABWv0AAVskAAFbSAABW0sAAVtNAAFbTwABW1EAAVtTAAFbVQABW1YAAVtZAAFbZgABW3UAAVt3AAFbeQABW3sAAVt9AAFbfwABW4EAAVuDAAFbkgABW5UAAVuYAAFbmwABW54AAVuhAAFbpAABW6cAAVupAAFb6AABW+oAAVvsAAFb7gABW/EAAVvyAAFb8wABW/QAAVv1AAFb9wABW/kAAVv6AAFb+wABW/0AAVv+AAFcPQABXD8AAVxBAAFcQwABXEYAAVxHAAFcSAABXEkAAVxKAAFcTAABXE4AAVxPAAFcUAABXFIAAVxTAAFckgABXJQAAVyWAAFcmAABXJsAAVycAAFcnQABXJ4AAVyfAAFcoQABXKMAAVykAAFcpQABXKcAAVyoAAFc5wABXOkAAVzsAAFc7gABXPEAAVzyAAFc8wABXPQAAVz1AAFc9wABXPkAAVz6AAFc+wABXP0AAVz+AAFdPQABXT8AAV1BAAFdQwABXUYAAV1HAAFdSAABXUkAAV1KAAFdTAABXU4AAV1PAAFdUAABXVIAAV1TAAFdkgABXZQAAV2WAAFdmAABXZsAAV2cAAFdnQABXZ4AAV2fAAFdoQABXaMAAV2kAAFdpQABXacAAV2oAAFd5wABXekAAV3rAAFd7QABXfAAAV3xAAFd8gABXfMAAV30AAFd9gABXfgAAV35AAFd+gABXfwAAV39AAFeSAABXmsAAV6LAAFeqwABXq0AAV6vAAFesQABXrMAAV62AAFetwABXrgAAV67AAFevAABXr4AAV6/AAFewQABXsMAAV7EAAFexQABXsgAAV7JAAFe0gABXt8AAV7kAAFe5gABXugAAV7tAAFe8AABXvMAAV71AAFfGgABXz4AAV9lAAFfiQABX4wAAV+OAAFfkAABX5IAAV+UAAFflgABX5cAAV+aAAFfpwABX7gAAV+6AAFfvAABX74AAV/AAAFfwgABX8QAAV/GAAFfyAABX9kAAV/cAAFf3wABX+IAAV/lAAFf6AABX+sAAV/uAAFf8QABX/MAAWAyAAFgNAABYDYAAWA4AAFgOwABYDwAAWA9AAFgPgABYD8AAWBBAAFgQwABYEQAAWBFAAFgRwABYEgAAWCHAAFgiQABYIsAAWCNAAFgkAABYJEAAWCSAAFgkwABYJQAAWCWAAFgmAABYJkAAWCaAAFgnAABYJ0AAWDcAAFg3gABYOEAAWDjAAFg5gABYOcAAWDoAAFg6QABYOoAAWDsAAFg7gABYO8AAWDwAAFg8gABYPMAAWEAAAFhAQABYQIAAWEEAAFhQwABYUUAAWFHAAFhSQABYUwAAWFNAAFhTgABYU8AAWFQAAFhUgABYVQAAWFVAAFhVgABYVgAAWFZAAFhmAABYZoAAWGcAAFhngABYaEAAWGiAAFhowABYaQAAWGlAAFhpwABYakAAWGqAAFhqwABYa0AAWGuAAFh7QABYe8AAWHxAAFh8wABYfYAAWH3AAFh+AABYfkAAWH6AAFh/AABYf4AAWH/AAFiAAABYgIAAWIDAAFiQgABYkQAAWJGAAFiSAABYksAAWJMAAFiTQABYk4AAWJPAAFiUQABYlMAAWJUAAFiVQABYlcAAWJYAAFilwABYpkAAWKbAAFinQABYqAAAWKhAAFiogABYqMAAWKkAAFipgABYqgAAWKpAAFiqgABYqwAAWKtAAFi0gABYvYAAWMdAAFjQQABY0QAAWNGAAFjSAABY0oAAWNMAAFjTgABY08AAWNSAAFjXwABY24AAWNwAAFjcgABY3QAAWN2AAFjeAABY3oAAWN8AAFjiwABY44AAWORAAFjlAABY5cAAWOaAAFjnQABY6AAAWOiAAFj4QABY+MAAWPlAAFj5wABY+oAAWPrAAFj7AABY+0AAWPuAAFj8AABY/IAAWPzAAFj9AABY/YAAWP3AAFkNgABZDgAAWQ6AAFkPAABZD8AAWRAAAFkQQABZEIAAWRDAAFkRQABZEcAAWRIAAFkSQABZEsAAWRMAAFkiwABZI0AAWSPAAFkkQABZJQAAWSVAAFklgABZJcAAWSYAAFkmgABZJwAAWSdAAFkngABZKAAAWShAAFk4AABZOIAAWTkAAFk5gABZOkAAWTqAAFk6wABZOwAAWTtAAFk7wABZPEAAWTyAAFk8wABZPUAAWT2AAFlNQABZTcAAWU5AAFlOwABZT4AAWU/AAFlQAABZUEAAWVCAAFlRAABZUYAAWVHAAFlSAABZUoAAWVLAAFligABZYwAAWWOAAFlkAABZZMAAWWUAAFllQABZZYAAWWXAAFlmQABZZsAAWWcAAFlnQABZZ8AAWWgAAFl3wABZeEAAWXjAAFl5QABZegAAWXpAAFl6gABZesAAWXsAAFl7gABZfAAAWXxAAFl8gABZfQAAWX1AAFmQAABZmMAAWaDAAFmowABZqUAAWanAAFmqQABZqsAAWauAAFmrwABZrAAAWazAAFmtAABZrYAAWa3AAFmuQABZrwAAWa9AAFmvgABZsEAAWbCAAFmxwABZtQAAWbZAAFm2wABZt0AAWbiAAFm5QABZugAAWbqAAFnDwABZzMAAWdaAAFnfgABZ4EAAWeDAAFnhQABZ4cAAWeJAAFniwABZ4wAAWePAAFnnAABZ60AAWevAAFnsQABZ7MAAWe1AAFntwABZ7kAAWe7AAFnvQABZ84AAWfRAAFn1AABZ9cAAWfaAAFn3QABZ+AAAWfjAAFn5gABZ+gAAWgnAAFoKQABaCsAAWgtAAFoMAABaDEAAWgyAAFoMwABaDQAAWg2AAFoOAABaDkAAWg6AAFoPAABaD0AAWh8AAFofgABaIAAAWiCAAFohQABaIYAAWiHAAFoiAABaIkAAWiLAAFojQABaI4AAWiPAAFokQABaJIAAWjRAAFo0wABaNYAAWjYAAFo2wABaNwAAWjdAAFo3gABaN8AAWjhAAFo4wABaOQAAWjlAAFo5wABaOgAAWj1AAFo9gABaPcAAWj5AAFpOAABaToAAWk8AAFpPgABaUEAAWlCAAFpQwABaUQAAWlFAAFpRwABaUkAAWlKAAFpSwABaU0AAWlOAAFpjQABaY8AAWmRAAFpkwABaZYAAWmXAAFpmAABaZkAAWmaAAFpnAABaZ4AAWmfAAFpoAABaaIAAWmjAAFp4gABaeQAAWnmAAFp6AABaesAAWnsAAFp7QABae4AAWnvAAFp8QABafMAAWn0AAFp9QABafcAAWn4AAFqNwABajkAAWo7AAFqPQABakAAAWpBAAFqQgABakMAAWpEAAFqRgABakgAAWpJAAFqSgABakwAAWpNAAFqjAABao4AAWqQAAFqkgABapUAAWqWAAFqlwABapgAAWqZAAFqmwABap0AAWqeAAFqnwABaqEAAWqiAAFqxwABausAAWsSAAFrNgABazkAAWs7AAFrPQABaz8AAWtBAAFrQwABa0QAAWtHAAFrVAABa2MAAWtlAAFrZwABa2kAAWtrAAFrbQABa28AAWtxAAFrgAABa4MAAWuGAAFriQABa4wAAWuPAAFrkgABa5UAAWuXAAFr1gABa9gAAWvaAAFr3AABa98AAWvgAAFr4QABa+IAAWvjAAFr5QABa+cAAWvoAAFr6QABa+sAAWvsAAFsKwABbC0AAWwvAAFsMQABbDQAAWw1AAFsNgABbDcAAWw4AAFsOgABbDwAAWw9AAFsPgABbEAAAWxBAAFsgAABbIIAAWyEAAFshgABbIkAAWyKAAFsiwABbIwAAWyNAAFsjwABbJEAAWySAAFskwABbJUAAWyWAAFs1QABbNcAAWzaAAFs3AABbN8AAWzgAAFs4QABbOIAAWzjAAFs5QABbOcAAWzoAAFs6QABbOsAAWzsAAFtKwABbS0AAW0vAAFtMQABbTQAAW01AAFtNgABbTcAAW04AAFtOgABbTwAAW09AAFtPgABbUAAAW1BAAFtgAABbYIAAW2FAAFthwABbYoAAW2LAAFtjAABbY0AAW2OAAFtkAABbZIAAW2TAAFtlAABbZYAAW2XAAFtvgABbf0AAW3/AAFuAQABbgMAAW4GAAFuBwABbggAAW4JAAFuCgABbgwAAW4OAAFuDwABbhAAAW4SAAFuEwABbhwAAW4dAAFuHwABbl4AAW5gAAFuYgABbmQAAW5nAAFuaAABbmkAAW5qAAFuawABbm0AAW5vAAFucAABbnEAAW5zAAFudAABbrMAAW61AAFutwABbrkAAW68AAFuvQABbr4AAW6/AAFuwAABbsIAAW7EAAFuxQABbsYAAW7IAAFuyQABbwgAAW8KAAFvDAABbw4AAW8RAAFvEgABbxMAAW8UAAFvFQABbxcAAW8ZAAFvGgABbxsAAW8dAAFvHgABb10AAW9fAAFvYQABb2MAAW9mAAFvZwABb2gAAW9pAAFvagABb2wAAW9uAAFvbwABb3AAAW9yAAFvcwABb7IAAW+0AAFvtgABb7gAAW+7AAFvvAABb70AAW++AAFvvwABb8EAAW/DAAFvxAABb8UAAW/HAAFvyAABcBMAAXA2AAFwVgABcHYAAXB4AAFwegABcHwAAXB+AAFwgAABcIEAAXCCAAFwhQABcIYAAXCIAAFwiQABcIsAAXCNAAFwjgABcI8AAXCSAAFwkwABcJgAAXClAAFwqgABcKwAAXCuAAFwswABcLYAAXC5AAFwuwABcOAAAXEEAAFxKwABcU8AAXFSAAFxVAABcVYAAXFYAAFxWgABcVwAAXFdAAFxYAABcW0AAXF+AAFxgAABcYIAAXGEAAFxhgABcYgAAXGKAAFxjAABcY4AAXGfAAFxogABcaUAAXGoAAFxqwABca4AAXGxAAFxtAABcbcAAXG5AAFx+AABcfoAAXH8AAFx/gABcgEAAXICAAFyAwABcgQAAXIFAAFyBwABcgkAAXIKAAFyCwABcg0AAXIOAAFyTQABck8AAXJRAAFyUwABclYAAXJXAAFyWAABclkAAXJaAAFyXAABcl4AAXJfAAFyYAABcmIAAXJjAAFyogABcqQAAXKnAAFyqQABcqwAAXKtAAFyrgABcq8AAXKwAAFysgABcrQAAXK1AAFytgABcrgAAXK5AAFyxgABcscAAXLIAAFyygABcwkAAXMLAAFzDQABcw8AAXMSAAFzEwABcxQAAXMVAAFzFgABcxgAAXMaAAFzGwABcxwAAXMeAAFzHwABc14AAXNgAAFzYgABc2QAAXNnAAFzaAABc2kAAXNqAAFzawABc20AAXNvAAFzcAABc3EAAXNzAAFzdAABc7MAAXO1AAFztwABc7kAAXO8AAFzvQABc74AAXO/AAFzwAABc8IAAXPEAAFzxQABc8YAAXPIAAFzyQABdAgAAXQKAAF0DAABdA4AAXQRAAF0EgABdBMAAXQUAAF0FQABdBcAAXQZAAF0GgABdBsAAXQdAAF0HgABdF0AAXRfAAF0YQABdGMAAXRmAAF0ZwABdGgAAXRpAAF0agABdGwAAXRuAAF0bwABdHAAAXRyAAF0cwABdJgAAXS8AAF04wABdQcAAXUKAAF1DAABdQ4AAXUQAAF1EgABdRQAAXUVAAF1GAABdSUAAXU0AAF1NgABdTgAAXU6AAF1PAABdT4AAXVAAAF1QgABdVEAAXVUAAF1VwABdVoAAXVdAAF1YAABdWMAAXVmAAF1aAABdacAAXWpAAF1qwABda0AAXWwAAF1sQABdbIAAXWzAAF1tAABdbYAAXW4AAF1uQABdboAAXW8AAF1vQABdfwAAXX+AAF2AAABdgIAAXYFAAF2BgABdgcAAXYIAAF2CQABdgsAAXYNAAF2DgABdg8AAXYRAAF2EgABdlEAAXZTAAF2VQABdlcAAXZaAAF2WwABdlwAAXZdAAF2XgABdmAAAXZiAAF2YwABdmQAAXZmAAF2ZwABdqYAAXaoAAF2qwABdq0AAXawAAF2sQABdrIAAXazAAF2tAABdrYAAXa4AAF2uQABdroAAXa8AAF2vQABdvwAAXb+AAF3AAABdwIAAXcFAAF3BgABdwcAAXcIAAF3CQABdwsAAXcNAAF3DgABdw8AAXcRAAF3EgABd1EAAXdTAAF3VQABd1cAAXdaAAF3WwABd1wAAXddAAF3XgABd2AAAXdiAAF3YwABd2QAAXdmAAF3ZwABd6YAAXeoAAF3qgABd6wAAXevAAF3sAABd7EAAXeyAAF3swABd7UAAXe3AAF3uAABd7kAAXe7AAF3vAABeAcAAXgqAAF4SgABeGoAAXhsAAF4bgABeHAAAXhyAAF4dAABeHUAAXh2AAF4eQABeHoAAXh8AAF4fQABeH8AAXiBAAF4ggABeIMAAXiGAAF4hwABeIwAAXiZAAF4ngABeKAAAXiiAAF4pwABeKoAAXitAAF4rwABeNQAAXj4AAF5HwABeUMAAXlGAAF5SAABeUoAAXlMAAF5TgABeVAAAXlRAAF5VAABeWEAAXlyAAF5dAABeXYAAXl4AAF5egABeXwAAXl+AAF5gAABeYIAAXmTAAF5lgABeZkAAXmcAAF5nwABeaIAAXmlAAF5qAABeasAAXmtAAF57AABee4AAXnwAAF58gABefUAAXn2AAF59wABefgAAXn5AAF5+wABef0AAXn+AAF5/wABegEAAXoCAAF6QQABekMAAXpFAAF6RwABekoAAXpLAAF6TAABek0AAXpOAAF6UAABelIAAXpTAAF6VAABelYAAXpXAAF6lgABepgAAXqbAAF6nQABeqAAAXqhAAF6ogABeqMAAXqkAAF6pgABeqgAAXqpAAF6qgABeqwAAXqtAAF6ugABersAAXq8AAF6vgABev0AAXr/AAF7AQABewMAAXsGAAF7BwABewgAAXsJAAF7CgABewwAAXsOAAF7DwABexAAAXsSAAF7EwABe1IAAXtUAAF7VgABe1gAAXtbAAF7XAABe10AAXteAAF7XwABe2EAAXtjAAF7ZAABe2UAAXtnAAF7aAABe6cAAXupAAF7qwABe60AAXuwAAF7sQABe7IAAXuzAAF7tAABe7YAAXu4AAF7uQABe7oAAXu8AAF7vQABe/wAAXv+AAF8AAABfAIAAXwFAAF8BgABfAcAAXwIAAF8CQABfAsAAXwNAAF8DgABfA8AAXwRAAF8EgABfFEAAXxTAAF8VQABfFcAAXxaAAF8WwABfFwAAXxdAAF8XgABfGAAAXxiAAF8YwABfGQAAXxmAAF8ZwABfIwAAXywAAF81wABfPsAAXz+AAF9AAABfQIAAX0EAAF9BgABfQgAAX0JAAF9DAABfRkAAX0oAAF9KgABfSwAAX0uAAF9MAABfTIAAX00AAF9NgABfUUAAX1IAAF9SwABfU4AAX1RAAF9VAABfVcAAX1aAAF9XAABfZsAAX2dAAF9nwABfaEAAX2kAAF9pQABfaYAAX2nAAF9qAABfaoAAX2sAAF9rQABfa4AAX2wAAF9sQABffAAAX3yAAF99AABffYAAX35AAF9+gABffsAAX38AAF9/QABff8AAX4BAAF+AgABfgMAAX4FAAF+BgABfkUAAX5HAAF+SQABfksAAX5OAAF+TwABflAAAX5RAAF+UgABflQAAX5WAAF+VwABflgAAX5aAAF+WwABfpoAAX6cAAF+ngABfqAAAX6jAAF+pAABfqUAAX6mAAF+pwABfqkAAX6rAAF+rAABfq0AAX6vAAF+sAABfu8AAX7xAAF+8wABfvUAAX74AAF++QABfvoAAX77AAF+/AABfv4AAX8AAAF/AQABfwIAAX8EAAF/BQABf0QAAX9GAAF/SAABf0oAAX9NAAF/TgABf08AAX9QAAF/UQABf1MAAX9VAAF/VgABf1cAAX9ZAAF/WgABf5kAAX+bAAF/nQABf58AAX+iAAF/owABf6QAAX+lAAF/pgABf6gAAX+qAAF/qwABf6wAAX+uAAF/rwABf/oAAYAdAAGAPQABgF0AAYBfAAGAYQABgGMAAYBlAAGAZwABgGgAAYBpAAGAbAABgG0AAYBvAAGAcAABgHIAAYB0AAGAdQABgHYAAYB5AAGAegABgH8AAYCMAAGAkQABgJMAAYCVAAGAmgABgJ0AAYCgAAGAogABgMcAAYDrAAGBEgABgTYAAYE5AAGBOwABgT0AAYE/AAGBQQABgUMAAYFEAAGBRwABgVQAAYFlAAGBZwABgWkAAYFrAAGBbQABgW8AAYFxAAGBcwABgXUAAYGGAAGBiQABgYwAAYGPAAGBkgABgZUAAYGYAAGBmwABgZ4AAYGgAAGB3wABgeEAAYHjAAGB5QABgegAAYHpAAGB6gABgesAAYHsAAGB7gABgfAAAYHxAAGB8gABgfQAAYH1AAGCNAABgjYAAYI4AAGCOgABgj0AAYI+AAGCPwABgkAAAYJBAAGCQwABgkUAAYJGAAGCRwABgkkAAYJKAAGCiQABgosAAYKOAAGCkAABgpMAAYKUAAGClQABgpYAAYKXAAGCmQABgpsAAYKcAAGCnQABgp8AAYKgAAGCrQABgq4AAYKvAAGCsQABgvAAAYLyAAGC9AABgvYAAYL5AAGC+gABgvsAAYL8AAGC/QABgv8AAYMBAAGDAgABgwMAAYMFAAGDBgABg0UAAYNHAAGDSQABg0sAAYNOAAGDTwABg1AAAYNRAAGDUgABg1QAAYNWAAGDVwABg1gAAYNaAAGDWwABg5oAAYOcAAGDngABg6AAAYOjAAGDpAABg6UAAYOmAAGDpwABg6kAAYOrAAGDrAABg60AAYOvAAGDsAABg+8AAYPxAAGD8wABg/UAAYP4AAGD+QABg/oAAYP7AAGD/AABg/4AAYQAAAGEAQABhAIAAYQEAAGEBQABhEQAAYRGAAGESAABhEoAAYRNAAGETgABhE8AAYRQAAGEUQABhFMAAYRVAAGEVgABhFcAAYRZAAGEWgABhH8AAYSjAAGEygABhO4AAYTxAAGE8wABhPUAAYT3AAGE+QABhPsAAYT8AAGE/wABhQwAAYUbAAGFHQABhR8AAYUhAAGFIwABhSUAAYUnAAGFKQABhTgAAYU7AAGFPgABhUEAAYVEAAGFRwABhUoAAYVNAAGFTwABhY4AAYWQAAGFkgABhZQAAYWXAAGFmAABhZkAAYWaAAGFmwABhZ0AAYWfAAGFoAABhaEAAYWjAAGFpAABheMAAYXlAAGF5wABhekAAYXsAAGF7QABhe4AAYXvAAGF8AABhfIAAYX0AAGF9QABhfYAAYX4AAGF+QABhjgAAYY6AAGGPAABhj4AAYZBAAGGQgABhkMAAYZEAAGGRQABhkcAAYZJAAGGSgABhksAAYZNAAGGTgABho0AAYaPAAGGkQABhpMAAYaWAAGGlwABhpgAAYaZAAGGmgABhpwAAYaeAAGGnwABhqAAAYaiAAGGowABhuIAAYbkAAGG5gABhugAAYbrAAGG7AABhu0AAYbuAAGG7wABhvEAAYbzAAGG9AABhvUAAYb3AAGG+AABhzcAAYc5AAGHOwABhz0AAYdAAAGHQQABh0IAAYdDAAGHRAABh0YAAYdIAAGHSQABh0oAAYdMAAGHTQABh4wAAYeOAAGHkAABh5IAAYeVAAGHlgABh5cAAYeYAAGHmQABh5sAAYedAAGHngABh58AAYehAAGHogABh+0AAYgQAAGIMAABiFAAAYhSAAGIVAABiFYAAYhYAAGIWgABiFsAAYhcAAGIXwABiGAAAYhiAAGIYwABiGUAAYhnAAGIaAABiGkAAYhsAAGIbQABiHYAAYiDAAGIiAABiIoAAYiMAAGIkQABiJQAAYiXAAGImQABiL4AAYjiAAGJCQABiS0AAYkwAAGJMgABiTQAAYk2AAGJOAABiToAAYk7AAGJPgABiUsAAYlcAAGJXgABiWAAAYliAAGJZAABiWYAAYloAAGJagABiWwAAYl9AAGJgAABiYMAAYmGAAGJiQABiYwAAYmPAAGJkgABiZUAAYmXAAGJ1gABidgAAYnaAAGJ3AABid8AAYngAAGJ4QABieIAAYnjAAGJ5QABiecAAYnoAAGJ6QABiesAAYnsAAGKKwABii0AAYovAAGKMQABijQAAYo1AAGKNgABijcAAYo4AAGKOgABijwAAYo9AAGKPgABikAAAYpBAAGKgAABioIAAYqFAAGKhwABiooAAYqLAAGKjAABio0AAYqOAAGKkAABipIAAYqTAAGKlAABipYAAYqXAAGKpAABiqUAAYqmAAGKqAABiucAAYrpAAGK6wABiu0AAYrwAAGK8QABivIAAYrzAAGK9AABivYAAYr4AAGK+QABivoAAYr8AAGK/QABizwAAYs+AAGLQAABi0IAAYtFAAGLRgABi0cAAYtIAAGLSQABi0sAAYtNAAGLTgABi08AAYtRAAGLUgABi5EAAYuTAAGLlQABi5cAAYuaAAGLmwABi5wAAYudAAGLngABi6AAAYuiAAGLowABi6QAAYu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aAAGW2wABlt0AAZbfAAGW4AABluEAAZbjAAGW5AABlyMAAZclAAGXJwABlykAAZcsAAGXLQABly4AAZcvAAGXMAABlzIAAZc0AAGXNQABlzYAAZc4AAGXOQABl3gAAZd6AAGXfAABl34AAZeBAAGXggABl4MAAZeEAAGXhQABl4cAAZeJAAGXigABl4sAAZeNAAGXjgABl9kAAZf8AAGYHAABmDwAAZg+AAGYQAABmEIAAZhEAAGYRgABmEcAAZhIAAGYSwABmEwAAZhOAAGYTwABmFEAAZhTAAGYVAABmFUAAZhYAAGYWQABmF4AAZhrAAGYcAABmHIAAZh0AAGYeQABmHwAAZh/AAGYgQABmKYAAZjKAAGY8QABmRUAAZkYAAGZGgABmRwAAZkeAAGZIAABmSIAAZkjAAGZJgABmTMAAZlEAAGZRgABmUgAAZlKAAGZTAABmU4AAZlQAAGZUgABmVQAAZllAAGZaAABmWsAAZluAAGZcQABmXQAAZl3AAGZegABmX0AAZl/AAGZvgABmcAAAZnCAAGZxAABmccAAZnIAAGZyQABmcoAAZnLAAGZzQABmc8AAZnQAAGZ0QABmdMAAZnUAAGaEwABmhUAAZoXAAGaGQABmhwAAZodAAGaHgABmh8AAZogAAGaIgABmiQAAZolAAGaJgABmigAAZopAAGaaAABmmoAAZptAAGabwABmnIAAZpzAAGadAABmnUAAZp2AAGaeAABmnoAAZp7AAGafAABmn4AAZp/AAGajAABmo0AAZqOAAGakAABms8AAZrRAAGa0wABmtUAAZrYAAGa2QABmtoAAZrbAAGa3AABmt4AAZrgAAGa4QABmuIAAZrkAAGa5QABmyQAAZsmAAGbKAABmyoAAZstAAGbLgABmy8AAZswAAGbMQABmzMAAZs1AAGbNgABmzcAAZs5AAGbOgABm3kAAZt7AAGbfQABm38AAZuCAAGbgwABm4QAAZuFAAGbhgABm4gAAZuKAAGbiwABm4wAAZuOAAGbjwABm84AAZvQAAGb0gABm9QAAZvXAAGb2AABm9kAAZvaAAGb2wABm90AAZvfAAGb4AABm+EAAZvjAAGb5AABnCMAAZwlAAGcJwABnCkAAZwsAAGcLQABnC4AAZwvAAGcMAABnDIAAZw0AAGcNQABnDYAAZw4AAGcOQABnF4AAZyCAAGcqQABnM0AAZzQAAGc0gABnNQAAZzWAAGc2AABnNoAAZzbAAGc3gABnOsAAZz6AAGc/AABnP4AAZ0AAAGdAgABnQQAAZ0GAAGdCAABnRcAAZ0aAAGdHQABnSAAAZ0jAAGdJgABnSkAAZ0sAAGdLgABnW0AAZ1vAAGdcQABnXMAAZ12AAGddwABnXgAAZ15AAGdegABnXwAAZ1+AAGdfwABnYAAAZ2CAAGdgwABncIAAZ3EAAGdxgABncgAAZ3LAAGdzAABnc0AAZ3OAAGdzwABndEAAZ3TAAGd1AABndUAAZ3XAAGd2AABnhcAAZ4ZAAGeGwABnh0AAZ4gAAGeIQABniIAAZ4jAAGeJAABniYAAZ4oAAGeKQABnioAAZ4sAAGeLQABnmwAAZ5uAAGecQABnnMAAZ52AAGedwABnngAAZ55AAGeegABnnwAAZ5+AAGefwABnoAAAZ6CAAGegwABnsIAAZ7EAAGexgABnsgAAZ7LAAGezAABns0AAZ7OAAGezwABntEAAZ7TAAGe1AABntUAAZ7XAAGe2AABnxcAAZ8ZAAGfGwABnx0AAZ8gAAGfIQABnyIAAZ8jAAGfJAABnyYAAZ8oAAGfKQABnyoAAZ8sAAGfLQABn2wAAZ9uAAGfcAABn3IAAZ91AAGfdgABn3cAAZ94AAGfeQABn3sAAZ99AAGffgABn38AAZ+BAAGfggABn80AAZ/wAAGgEAABoDAAAaAyAAGgNAABoDYAAaA4AAGgOgABoDsAAaA8AAGgPwABoEAAAaBCAAGgQwABoEUAAaBHAAGgSAABoEkAAaBMAAGgTQABoFIAAaBfAAGgZAABoGYAAaBoAAGgbQABoHAAAaBzAAGgdQABoJoAAaC+AAGg5QABoQkAAaEMAAGhDgABoRAAAaESAAGhFAABoRYAAaEXAAGhGgABoScAAaE4AAGhOgABoTwAAaE+AAGhQAABoUIAAaFEAAGhRgABoUgAAaFZAAGhXAABoV8AAaFiAAGhZQABoWgAAaFrAAGhbgABoXEAAaFzAAGhsgABobQAAaG2AAGhuAABobsAAaG8AAGhvQABob4AAaG/AAGhwQABocMAAaHEAAGhxQABoccAAaHIAAGiBwABogkAAaILAAGiDQABohAAAaIRAAGiEgABohMAAaIUAAGiFgABohgAAaIZAAGiGgABohwAAaIdAAGiXAABol4AAaJhAAGiYwABomYAAaJnAAGiaAABomkAAaJqAAGibAABom4AAaJvAAGicAABonIAAaJzAAGigAABooEAAaKCAAGihAABosMAAaLFAAGixwABoskAAaLMAAGizQABos4AAaLPAAGi0AABotIAAaLUAAGi1QABotYAAaLYAAGi2QABoxgAAaMaAAGjHAABox4AAaMhAAGjIgABoyMAAaMkAAGjJQABoycAAaMpAAGjKgABoysAAaMtAAGjLgABo20AAaNvAAGjcQABo3MAAaN2AAGjdwABo3gAAaN5AAGjegABo3wAAaN+AAGjfwABo4AAAaOCAAGjgwABo8IAAaPEAAGjxgABo8gAAaPLAAGjzAABo80AAaPOAAGjzwABo9EAAaPTAAGj1AABo9UAAaPXAAGj2AABpBcAAaQZAAGkGwABpB0AAaQgAAGkIQABpCIAAaQjAAGkJAABpCYAAaQoAAGkKQABpCoAAaQsAAGkLQABpFIAAaR2AAGknQABpMEAAaTEAAGkxgABpMgAAaTKAAGkzAABpM4AAaTPAAGk0gABpN8AAaTuAAGk8AABpPIAAaT0AAGk9gABpPgAAaT6AAGk/AABpQsAAaUOAAGlEQABpRQAAaUXAAGlGgABpR0AAaUgAAGlIgABpWEAAaVjAAGlZQABpWcAAaVqAAGlawABpWwAAaVtAAGlbgABpXAAAaVyAAGlcwABpXQAAaV2AAGldwABpbYAAaW4AAGlugABpbwAAaW/AAGlwAABpcEAAaXCAAGlwwABpcUAAaXHAAGlyAABpckAAaXLAAGlzAABpgsAAaYNAAGmDwABphEAAaYUAAGmFQABphYAAaYXAAGmGAABphoAAaYcAAGmHQABph4AAaYgAAGmIQABpmAAAaZiAAGmZAABpmYAAaZpAAGmagABpmsAAaZsAAGmbQABpm8AAaZxAAGmcgABpnMAAaZ1AAGmdgABprUAAaa3AAGmuQABprsAAaa+AAGmvwABpsAAAabBAAGmwgABpsQAAabGAAGmxwABpsgAAabKAAGmywABpwoAAacMAAGnDgABpxAAAacTAAGnFAABpxUAAacWAAGnFwABpxkAAacbAAGnHAABpx0AAacfAAGnIAABp18AAadhAAGnYwABp2UAAadoAAGnaQABp2oAAadrAAGnbAABp24AAadwAAGncQABp3IAAad0AAGndQABp8AAAafjAAGoAwABqCMAAaglAAGoJwABqCkAAagrAAGoLQABqC4AAagvAAGoMgABqDMAAag1AAGoNgABqDgAAag6AAGoOwABqDwAAag/AAGoQAABqEUAAahSAAGoVwABqFkAAahbAAGoYAABqGMAAahmAAGoaAABqI0AAaixAAGo2AABqPwAAaj/AAGpAQABqQMAAakFAAGpBwABqQkAAakKAAGpDQABqRoAAakrAAGpLQABqS8AAakxAAGpMwABqTUAAak3AAGpOQABqTsAAalMAAGpTwABqVIAAalVAAGpWAABqVsAAaleAAGpYQABqWQAAalmAAGppQABqacAAampAAGpqwABqa4AAamvAAGpsAABqbEAAamyAAGptAABqbYAAam3AAGpuAABqboAAam7AAGp+gABqfwAAan+AAGqAAABqgMAAaoEAAGqBQABqgYAAaoHAAGqCQABqgsAAaoMAAGqDQABqg8AAaoQAAGqTwABqlEAAapUAAGqVgABqlkAAapaAAGqWwABqlwAAapdAAGqXwABqmEAAapiAAGqYwABqmUAAapmAAGqcwABqnQAAap1AAGqdwABqrYAAaq4AAGqugABqrwAAaq/AAGqwAABqsEAAarCAAGqwwABqsUAAarHAAGqyAABqskAAarLAAGqzAABqwsAAasNAAGrDwABqxEAAasUAAGrFQABqxYAAasXAAGrGAABqxoAAascAAGrHQABqx4AAasgAAGrIQABq2AAAatiAAGrZAABq2YAAatpAAGragABq2sAAatsAAGrbQABq28AAatxAAGrcgABq3MAAat1AAGrdgABq7UAAau3AAGruQABq7sAAau+AAGrvwABq8AAAavBAAGrwgABq8QAAavGAAGrxwABq8gAAavKAAGrywABrAoAAawMAAGsDgABrBAAAawTAAGsFAABrBUAAawWAAGsFwABrBkAAawbAAGsHAABrB0AAawfAAGsIAABrEUAAaxpAAGskAABrLQAAay3AAGsuQABrLsAAay9AAGsvwABrMEAAazCAAGsxQABrNIAAazhAAGs4wABrOUAAaznAAGs6QABrOsAAaztAAGs7wABrP4AAa0BAAGtBAABrQcAAa0KAAGtDQABrRAAAa0TAAGtFQABrVQAAa1WAAGtWAABrVoAAa1dAAGtXgABrV8AAa1gAAGtYQABrWMAAa1lAAGtZgABrWcAAa1pAAGtagABrakAAa2rAAGtrgABrbAAAa2zAAGttAABrbUAAa22AAGttwABrbkAAa27AAGtvAABrb0AAa2/AAGtwAABrcIAAa4BAAGuAwABrgUAAa4HAAGuCgABrgsAAa4MAAGuDQABrg4AAa4QAAGuEgABrhMAAa4UAAGuFgABrhcAAa5WAAGuWAABrlsAAa5dAAGuYAABrmEAAa5iAAGuYwABrmQAAa5mAAGuaAABrmkAAa5qAAGubAABrm0AAa6wAAGu1AABrvgAAa8bAAGvQgABr2IAAa+JAAGvsAABr9AAAa/0AAGwGAABsBoAAbAdAAGwHwABsCEAAbAjAAGwJgABsCkAAbArAAGwLQABsDAAAbAyAAGwNAABsDcAAbA6AAGwOwABsEQAAbBRAAGwVAABsFYAAbBZAAGwXAABsF4AAbCDAAGwpwABsM4AAbDyAAGw9QABsPcAAbD5AAGw+wABsP0AAbD/AAGxAAABsQMAAbEQAAGxIwABsSUAAbEnAAGxKQABsSsAAbEtAAGxLwABsTEAAbEzAAGxNQABsUgAAbFLAAGxTgABsVEAAbFUAAGxVwABsVoAAbFdAAGxYAABsWMAAbFlAAGxpAABsaYAAbGpAAGxqwABsa4AAbGvAAGxsAABsbEAAbGyAAGxtAABsbYAAbG3AAGxuAABsboAAbG7AAGxxAABscUAAbHHAAGyBgABsggAAbIKAAGyDAABsg8AAbIQAAGyEQABshIAAbITAAGyFQABshcAAbIYAAGyGQABshsAAbIcAAGyWwABsl0AAbJgAAGyYgABsmUAAbJmAAGyZwABsmgAAbJpAAGyawABsm0AAbJuAAGybwABsnEAAbJyAAGyewABsn4AAbKBAAGygwABsowAAbKPAAGykQABspMAAbLSAAGy1AABstYAAbLYAAGy2wABstwAAbLdAAGy3gABst8AAbLhAAGy4wABsuQAAbLlAAGy5wABsugAAbMnAAGzKQABsywAAbMuAAGzMQABszIAAbMzAAGzNAABszUAAbM3AAGzOQABszoAAbM7AAGzPQABsz4AAbNHAAGzSAABs0oAAbOJAAGziwABs40AAbOPAAGzkgABs5MAAbOUAAGzlQABs5YAAbOYAAGzmgABs5sAAbO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NAAHETwABxFAAAcRRAAHEUwABxFQAAcSTAAHElQABxJcAAcSZAAHEnAABxJ0AAcSeAAHEnwABxKAAAcSiAAHEpAABxKUAAcSmAAHEqAABxKkAAcToAAHE6gABxO0AAcTvAAHE8gABxPMAAcT0AAHE9QABxPYAAcT4AAHE+gABxPsAAcT8AAHE/gABxP8AAcVKAAHFbQABxY0AAcWtAAHFrwABxbEAAcWzAAHFtQABxbgAAcW5AAHFugABxb0AAcW+AAHFwAABxcEAAcXDAAHFxQABxcYAAcXHAAHFygABxcsAAcXQAAHF3QABxeIAAcXkAAHF5gABxesAAcXuAAHF8QABxfMAAcYYAAHGPAABxmMAAcaHAAHGigABxowAAcaOAAHGkAABxpIAAcaUAAHGlQABxpgAAcalAAHGtgABxrgAAca6AAHGvAABxr4AAcbAAAHGwgABxsQAAcbGAAHG1wABxtoAAcbdAAHG4AABxuMAAcbmAAHG6QABxuwAAcbvAAHG8QABxzAAAccyAAHHNAABxzYAAcc5AAHHOgABxzsAAcc8AAHHPQABxz8AAcdBAAHHQgABx0MAAcdFAAHHRgABx4UAAceHAAHHiQABx4sAAceOAAHHjwABx5AAAceRAAHHkgABx5QAAceWAAHHlwABx5gAAceaAAHHmwABx9oAAcfcAAHH3wABx+EAAcfkAAHH5QABx+YAAcfnAAHH6AABx+oAAcfsAAHH7QABx+4AAcfwAAHH8QABx/4AAcf/AAHIAAAByAIAAchBAAHIQwAByEUAAchHAAHISgAByEsAAchMAAHITQAByE4AAchQAAHIUgAByFMAAchUAAHIVgAByFcAAciWAAHImAAByJoAAcicAAHInwAByKAAAcihAAHIogAByKMAAcilAAHIpwAByKgAAcipAAHIqwAByKwAAcjrAAHI7QAByO8AAcjxAAHI9AAByPUAAcj2AAHI9wAByPgAAcj6AAHI/AAByP0AAcj+AAHJAAAByQEAAclAAAHJQgAByUQAAclGAAHJSQAByUoAAclLAAHJTAAByU0AAclPAAHJUQAByVIAAclTAAHJVQAByVYAAcmVAAHJlwAByZkAAcmbAAHJngAByZ8AAcmgAAHJoQAByaIAAcmkAAHJpgAByacAAcmoAAHJqgAByasAAcnQAAHJ9AAByhsAAco/AAHKQgABykQAAcpGAAHKSAABykoAAcpMAAHKTQABylAAAcpdAAHKbAABym4AAcpwAAHKcgABynQAAcp2AAHKeAABynoAAcqJAAHKjAAByo8AAcqSAAHKlQABypgAAcqbAAHKngAByqAAAcrfAAHK4QAByuQAAcrmAAHK6QAByuoAAcrrAAHK7AAByu0AAcrvAAHK8QAByvIAAcrzAAHK9QAByvYAAcr3AAHLNgAByzgAAcs6AAHLPAAByz8AActAAAHLQQABy0IAActDAAHLRQABy0cAActIAAHLSQABy0sAActMAAHLiwABy40AAcuPAAHLkQABy5QAAcuVAAHLlgABy5cAAcuYAAHLmgABy5wAAcudAAHLngABy6AAAcuhAAHL4AABy+IAAcvkAAHL5gABy+kAAcvqAAHL6wABy+wAAcvtAAHL7wABy/EAAcvyAAHL8wABy/UAAcv2AAHMNQABzDcAAcw5AAHMOwABzD4AAcw/AAHMQAABzEEAAcxCAAHMRAABzEYAAcxHAAHMSAABzEoAAcxLAAHMigABzIwAAcyOAAHMkAABzJMAAcyUAAHMlQABzJYAAcyXAAHMmQABzJsAAcycAAHMnQABzJ8AAcygAAHM3wABzOEAAczjAAHM5QABzOgAAczpAAHM6gABzOsAAczsAAHM7gABzPAAAczxAAHM8gABzPQAAcz1AAHNQAABzWMAAc2DAAHNowABzaUAAc2nAAHNqQABzasAAc2uAAHNrwABzbAAAc2zAAHNtAABzbYAAc23AAHNuQABzbwAAc29AAHNvgABzcEAAc3CAAHNywABzdgAAc3dAAHN3wABzeEAAc3mAAHN6QABzewAAc3uAAHOEwABzjcAAc5eAAHOggABzoUAAc6HAAHOiQABzosAAc6NAAHOjwABzpAAAc6TAAHOoAABzrEAAc6zAAHOtQABzrcAAc65AAHOuwABzr0AAc6/AAHOwQABztIAAc7VAAHO2AABztsAAc7eAAHO4QABzuQAAc7nAAHO6gABzuwAAc8rAAHPLQABzy8AAc8xAAHPNAABzzUAAc82AAHPNwABzzgAAc86AAHPPAABzz0AAc8+AAHPQAABz0EAAc+AAAHPggABz4QAAc+GAAHPiQABz4oAAc+LAAHPjAABz40AAc+PAAHPkQABz5IAAc+TAAHPlQABz5YAAc/VAAHP1wABz9oAAc/cAAHP3wABz+AAAc/hAAHP4gABz+MAAc/lAAHP5wABz+gAAc/pAAHP6wABz+wAAc/5AAHP+gABz/sAAc/9AAHQPAAB0D4AAdBAAAHQQgAB0EUAAdBGAAHQRwAB0EgAAdBJAAHQSwAB0E0AAdBOAAHQTwAB0FEAAdBSAAHQkQAB0JMAAdCVAAHQlwAB0JoAAdCbAAHQnAAB0J0AAdCeAAHQoAAB0KIAAdCjAAHQpAAB0KYAAdCnAAHQ5gAB0OgAAdDqAAHQ7AAB0O8AAdDwAAHQ8QAB0PIAAdDzAAHQ9QAB0PcAAdD4AAHQ+QAB0PsAAdD8AAHROwAB0T0AAdE/AAHRQQAB0UQAAdFFAAHRRgAB0UcAAdFIAAHRSgAB0UwAAdFNAAHRTgAB0VAAAdFRAAHRkAAB0ZIAAdGUAAHRlgAB0ZkAAdGaAAHRmwAB0ZwAAdGdAAHRnwAB0aEAAdGiAAHRowAB0aUAAdGmAAHRywAB0e8AAdIWAAHSOgAB0j0AAdI/AAHSQQAB0kMAAdJFAAHSRwAB0kgAAdJLAAHSWAAB0mcAAdJpAAHSawAB0m0AAdJvAAHScQAB0nMAAdJ1AAHShAAB0ocAAdKKAAHSjQAB0pAAAdKTAAHSlgAB0pkAAdKbAAHS2gAB0twAAdLeAAHS4AAB0uMAAdLkAAHS5QAB0uYAAdLnAAHS6QAB0usAAdLsAAHS7QAB0u8AAdLwAAHTLwAB0zEAAdMzAAHTNQAB0zgAAdM5AAHTOgAB0zsAAdM8AAHTPgAB00AAAdNBAAHTQgAB00QAAdNFAAHThAAB04YAAdOIAAHTigAB040AAdOOAAHTjwAB05AAAdORAAHTkwAB05UAAdOWAAHTlwAB05kAAdOaAAHT2QAB09sAAdPdAAHT3wAB0+IAAdPjAAHT5AAB0+UAAdPmAAHT6AAB0+oAAdPrAAHT7AAB0+4AAdPvAAHULgAB1DAAAdQyAAHUNAAB1DcAAdQ4AAHUOQAB1DoAAdQ7AAHUPQAB1D8AAdRAAAHUQQAB1EMAAdREAAHUgwAB1IUAAdSHAAHUiQAB1IwAAdSNAAHUjgAB1I8AAdSQAAHUkgAB1JQAAdSVAAHUlgAB1JgAAdSZAAHU2AAB1NoAAdTcAAHU3gAB1OEAAdTiAAHU4wAB1OQAAdTlAAHU5wAB1OkAAdTqAAHU6wAB1O0AAdTuAAHVOQAB1VwAAdV8AAHVnAAB1Z4AAdWgAAHVogAB1aQAAdWnAAHVqAAB1akAAdWsAAHVrQAB1a8AAdWwAAHVsgAB1bUAAdW2AAHVtwAB1boAAdW7AAHVwAAB1c0AAdXSAAHV1AAB1dYAAdXbAAHV3gAB1eEAAdXjAAHWCAAB1iwAAdZTAAHWdwAB1noAAdZ8AAHWfgAB1oAAAdaCAAHWhAAB1oUAAdaIAAHWlQAB1qYAAdaoAAHWqgAB1qwAAdauAAHWsAAB1rIAAda0AAHWtgAB1scAAdbKAAHWzQAB1tAAAdbTAAHW1gAB1tkAAdbcAAHW3wAB1uEAAdcgAAHXIgAB1yQAAdcmAAHXKQAB1yoAAdcrAAHXLAAB1y0AAdcvAAHXMQAB1zIAAdczAAHXNQAB1zYAAdd1AAHXdwAB13kAAdd7AAHXfgAB138AAdeAAAHXgQAB14IAAdeEAAHXhgAB14cAAdeIAAHXigAB14sAAdfKAAHXzAAB188AAdfRAAHX1AAB19UAAdfWAAHX1wAB19gAAdfaAAHX3AAB190AAdfeAAHX4AAB1+EAAdfuAAHX7wAB1/AAAdfyAAHYMQAB2DMAAdg1AAHYNwAB2DoAAdg7AAHYPAAB2D0AAdg+AAHYQAAB2EIAAdhDAAHYRAAB2EYAAdhHAAHYhgAB2IgAAdiKAAHYjAAB2I8AAdiQAAHYkQAB2JIAAdiTAAHYlQAB2JcAAdiYAAHYmQAB2JsAAdicAAHY2wAB2N0AAdjfAAHY4QAB2OQAAdjlAAHY5gAB2OcAAdjoAAHY6gAB2OwAAdjtAAHY7gAB2PAAAdjxAAHZMAAB2TIAAdk0AAHZNgAB2TkAAdk6AAHZOwAB2TwAAdk9AAHZPwAB2UEAAdlCAAHZQwAB2UUAAdlGAAHZhQAB2YcAAdmJAAHZiwAB2Y4AAdmPAAHZkAAB2ZEAAdmSAAHZlAAB2ZYAAdmXAAHZmAAB2ZoAAdmbAAHZwAAB2eQAAdoLAAHaLwAB2jIAAdo0AAHaNgAB2jgAAdo6AAHaPAAB2j0AAdpAAAHaTQAB2lwAAdpeAAHaYAAB2mIAAdpkAAHaZgAB2mgAAdpqAAHaeQAB2nwAAdp/AAHaggAB2oUAAdqIAAHaiwAB2o4AAdqQAAHazwAB2tEAAdrTAAHa1QAB2tgAAdrZAAHa2gAB2tsAAdrcAAHa3gAB2uAAAdrhAAHa4gAB2uQAAdrlAAHbJAAB2yYAAdsoAAHbKgAB2y0AAdsuAAHbLwAB2zAAAdsxAAHbMwAB2zUAAds2AAHbNwAB2zkAAds6AAHbeQAB23sAAdt9AAHbfwAB24IAAduDAAHbhAAB24UAAduGAAHbiAAB24oAAduLAAHbjAAB244AAduPAAHbzgAB29AAAdvSAAHb1AAB29cAAdvYAAHb2QAB29oAAdvbAAHb3QAB298AAdvgAAHb4QAB2+MAAdvkAAHcIwAB3CUAAdwnAAHcKQAB3CwAAdwtAAHcLgAB3C8AAdwwAAHcMgAB3DQAAdw1AAHcNgAB3DgAAdw5AAHceAAB3HoAAdx8AAHcfgAB3IEAAdyCAAHcgwAB3IQAAdyFAAHchwAB3IkAAdyKAAHciwAB3I0AAdyOAAHczQAB3M8AAdzRAAHc0wAB3NYAAdzXAAHc2AAB3NkAAdzaAAHc3AAB3N4AAdzfAAHc4AAB3OIAAdzjAAHc7AAB3O0AAdzvAAHdLgAB3TAAAd0yAAHdNAAB3TcAAd04AAHdOQAB3ToAAd07AAHdPQAB3T8AAd1AAAHdQQAB3UMAAd1EAAHdgwAB3YUAAd2HAAHdiQAB3YwAAd2NAAHdjgAB3Y8AAd2QAAHdkgAB3ZQAAd2VAAHdlgAB3ZgAAd2ZAAHd2AAB3doAAd3dAAHd3wAB3eIAAd3jAAHd5AAB3eUAAd3mAAHd6AAB3eoAAd3rAAHd7AAB3e4AAd3vAAHeOgAB3l0AAd59AAHenQAB3p8AAd6hAAHeowAB3qUAAd6nAAHeqAAB3qkAAd6sAAHerQAB3q8AAd6wAAHesgAB3rQAAd61AAHetgAB3rkAAd66AAHevwAB3swAAd7RAAHe0wAB3tUAAd7aAAHe3QAB3uAAAd7iAAHfBwAB3ysAAd9SAAHfdgAB33kAAd97AAHffQAB338AAd+BAAHfgwAB34QAAd+HAAHflAAB36UAAd+nAAHfqQAB36sAAd+tAAHfrwAB37EAAd+zAAHftQAB38YAAd/JAAHfzAAB388AAd/SAAHf1QAB39gAAd/bAAHf3gAB3+AAAeAfAAHgIQAB4CMAAeAlAAHgKAAB4CkAAeAqAAHgKwAB4CwAAeAuAAHgMAAB4DEAAeAyAAHgNAAB4DUAAeB0AAHgdgAB4HgAAeB6AAHgfQAB4H4AAeB/AAHggAAB4IEAAeCDAAHghQAB4IYAAeCHAAHgiQAB4IoAAeDJAAHgywAB4M4AAeDQAAHg0wAB4NQAAeDVAAHg1gAB4NcAAeDZAAHg2wAB4NwAAeDdAAHg3wAB4OAAAeDtAAHg7gAB4O8AAeDxAAHhMAAB4TIAAeE0AAHhNgAB4TkAAeE6AAHhOwAB4TwAAeE9AAHhPwAB4UEAAeFCAAHhQwAB4UUAAeFGAAHhhQAB4YcAAeGJAAHhiwAB4Y4AAeGPAAHhkAAB4ZEAAeGSAAHhlAAB4ZYAAeGXAAHhmAAB4ZoAAeGbAAHh2gAB4dwAAeHeAAHh4AAB4eMAAeHkAAHh5QAB4eYAAeHnAAHh6QAB4esAAeHsAAHh7QAB4e8AAeHwAAHiLwAB4jEAAeIzAAHiNQAB4jgAAeI5AAHiOgAB4jsAAeI8AAHiPgAB4kAAAeJBAAHiQgAB4kQAAeJFAAHihAAB4oYAAeKIAAHiigAB4o0AAeKOAAHijwAB4pAAAeKRAAHikwAB4pUAAeKWAAHilwAB4pkAAeKaAAHivwAB4uMAAeMKAAHjLgAB4zEAAeMzAAHjNQAB4zcAAeM5AAHjOwAB4zwAAeM/AAHjTAAB41sAAeNdAAHjXwAB42EAAeNjAAHjZQAB42cAAeNpAAHjeAAB43sAAeN+AAHjgQAB44QAAeOHAAHjigAB440AAeOPAAHjzgAB49AAAePTAAHj1QAB49gAAePZAAHj2gAB49sAAePcAAHj3gAB4+AAAePhAAHj4gAB4+QAAePlAAHkJAAB5CYAAeQoAAHkKgAB5C0AAeQuAAHkLwAB5DAAAeQxAAHkMwAB5DUAAeQ2AAHkNwAB5DkAAeQ6AAHkeQAB5HsAAeR9AAHkfwAB5IIAAeSDAAHkhAAB5IUAAeSGAAHkiAAB5IoAAeSLAAHkjAAB5I4AAeSPAAHkzgAB5NAAAeTTAAHk1QAB5NgAAeTZAAHk2gAB5NsAAeTcAAHk3gAB5OAAAeThAAHk4gAB5OQAAeTlAAHlJAAB5SYAAeUoAAHlKgAB5S0AAeUuAAHlLwAB5TAAAeUxAAHlMwAB5TUAAeU2AAHlNwAB5TkAAeU6AAHleQAB5XsAAeV9AAHlfwAB5YIAAeWDAAHlhAAB5YUAAeWGAAHliAAB5YoAAeWLAAHljAAB5Y4AAeWPAAHlzgAB5dAAAeXSAAHl1AAB5dcAAeXYAAHl2QAB5doAAeXbAAHl3QAB5d8AAeXgAAHl4QAB5eMAAeXkAAHmLwAB5lIAAeZyAAHmkgAB5pQAAeaWAAHmmAAB5poAAeacAAHmnQAB5p4AAeahAAHmogAB5qQAAealAAHmpwAB5qkAAeaqAAHmqwAB5q4AAeavAAHmtAAB5sEAAebGAAHmyAAB5soAAebPAAHm0gAB5tUAAebXAAHm/AAB5yAAAedHAAHnawAB524AAedwAAHncgAB53QAAed2AAHneAAB53kAAed8AAHniQAB55oAAeecAAHnngAB56AAAeeiAAHnpAAB56YAAeeoAAHnqgAB57sAAee+AAHnwQAB58QAAefHAAHnygAB580AAefQAAHn0wAB59UAAegUAAHoFgAB6BgAAegaAAHoHQAB6B4AAegfAAHoIAAB6CEAAegjAAHoJQAB6CYAAegnAAHoKQAB6CoAAehpAAHoawAB6G0AAehvAAHocgAB6HMAAeh0AAHodQAB6HYAAeh4AAHoegAB6HsAAeh8AAHofgAB6H8AAei+AAHowAAB6MMAAejFAAHoyAAB6MkAAejKAAHoywAB6MwAAejOAAHo0AAB6NEAAejSAAHo1AAB6NUAAejiAAHo4wAB6OQAAejmAAHpJQAB6ScAAekpAAHpKwAB6S4AAekvAAHpMAAB6TEAAekyAAHpNAAB6TYAAek3AAHpOAAB6ToAAek7AAHpegAB6XwAAel+AAHpgAAB6YMAAemEAAHphQAB6YYAAemHAAHpiQAB6YsAAemMAAHpjQAB6Y8AAemQAAHpzwAB6dEAAenTAAHp1QAB6dgAAenZAAHp2gAB6dsAAencAAHp3gAB6eAAAenhAAHp4gAB6eQAAenlAAHqJAAB6iYAAeooAAHqKgAB6i0AAeouAAHqLwAB6jAAAeoxAAHqMwAB6jUAAeo2AAHqNwAB6jkAAeo6AAHqeQAB6nsAAep9AAHqfwAB6oIAAeqDAAHqhAAB6oUAAeqGAAHqiAAB6ooAAeqLAAHqjAAB6o4AAeqPAAHqtAAB6tgAAer/AAHrIwAB6yYAAesoAAHrKgAB6ywAAesuAAHrMAAB6zEAAes0AAHrQQAB61AAAetSAAHrVAAB61YAAetYAAHrWgAB61wAAeteAAHrbQAB63AAAetzAAHrdgAB63kAAet8AAHrfwAB64IAAeuEAAHrwwAB68UAAevHAAHryQAB68wAAevNAAHrzgAB688AAevQAAHr0gAB69QAAevVAAHr1gAB69gAAevZAAHsGAAB7BoAAewcAAHsHgAB7CEAAewiAAHsIwAB7CQAAewlAAHsJwAB7CkAAewqAAHsKwAB7C0AAewuAAHsbQAB7G8AAexxAAHscwAB7HYAAex3AAHseAAB7HkAAex6AAHsfAAB7H4AAex/AAHsgAAB7IIAAeyDAAHswgAB7MQAAezHAAHsyQAB7MwAAezNAAHszgAB7M8AAezQAAHs0gAB7NQAAezVAAHs1gAB7NgAAezZAAHtGAAB7RoAAe0cAAHtHgAB7SEAAe0iAAHtIwAB7SQAAe0lAAHtJwAB7SkAAe0qAAHtKwAB7S0AAe0uAAHtbQAB7W8AAe1xAAHtcwAB7XYAAe13AAHteAAB7XkAAe16AAHtfAAB7X4AAe1/AAHtgAAB7YIAAe2DAAHtwgAB7cQAAe3GAAHtyAAB7csAAe3MAAHtzQAB7c4AAe3PAAHt0QAB7dMAAe3UAAHt1QAB7dcAAe3YAAHuIwAB7kYAAe5mAAHuhgAB7ogAAe6KAAHujAAB7o4AAe6QAAHukQAB7pIAAe6VAAHulgAB7pgAAe6ZAAHumwAB7p0AAe6eAAHunwAB7qIAAe6jAAHurAAB7rkAAe6+AAHuwAAB7sIAAe7HAAHuygAB7s0AAe7PAAHu9AAB7xgAAe8/AAHvYwAB72YAAe9oAAHvagAB72wAAe9uAAHvcAAB73EAAe90AAHvgQAB75IAAe+UAAHvlgAB75gAAe+aAAHvnAAB754AAe+gAAHvogAB77MAAe+2AAHvuQAB77wAAe+/AAHvwgAB78UAAe/IAAHvywAB780AAfAMAAHwDgAB8BAAAfASAAHwFQAB8BYAAfAXAAHwGAAB8BkAAfAbAAHwHQAB8B4AAfAfAAHwIQAB8CIAAfBhAAHwYwAB8GUAAfBnAAHwagAB8GsAAfBsAAHwbQAB8G4AAfBwAAHwcgAB8HMAAfB0AAHwdgAB8HcAAfC2AAHwuAAB8LsAAfC9AAHwwAAB8MEAAfDCAAHwwwAB8MQAAfDGAAHwyAAB8MkAAfDKAAHwzAAB8M0AAfDaAAHw2wAB8NwAAfD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RAAIHkwACB5YAAgeXAAIHmAACB5kAAgeaAAIHnAACB54AAgefAAIHoAACB6IAAgejAAIH4gACB+QAAgfmAAIH6AACB+sAAgfsAAIH7QACB+4AAgfvAAIH8QACB/MAAgf0AAIH9QACB/cAAgf4AAIINwACCDkAAgg8AAIIPgACCEEAAghCAAIIQwACCEQAAghFAAIIRwACCEkAAghKAAIISwACCE0AAghOAAIIWwACCFwAAghdAAIIXwACCJ4AAgigAAIIogACCKQAAginAAIIqAACCKkAAgiqAAIIqwACCK0AAgivAAIIsAACCLEAAgizAAIItAACCPMAAgj1AAII9wACCPkAAgj8AAII/QACCP4AAgj/AAIJAAACCQIAAgkEAAIJBQACCQYAAgkIAAIJCQACCUgAAglKAAIJTAACCU4AAglRAAIJUgACCVMAAglUAAIJVQACCVcAAglZAAIJWgACCVsAAgldAAIJXgACCZ0AAgmfAAIJoQACCaMAAgmmAAIJpwACCagAAgmpAAIJqgACCawAAgmuAAIJrwACCbAAAgmyAAIJswACCfIAAgn0AAIJ9gACCfgAAgn7AAIJ/AACCf0AAgn+AAIJ/wACCgEAAgoDAAIKBAACCgUAAgoHAAIKCAACCi0AAgpRAAIKeAACCpwAAgqfAAIKoQACCqMAAgqlAAIKpwACCqkAAgqqAAIKrQACCroAAgrJAAIKywACCs0AAgrPAAIK0QACCtMAAgrVAAIK1wACCuYAAgrpAAIK7AACCu8AAgryAAIK9QACCvgAAgr7AAIK/QACCzwAAgs+AAILQAACC0IAAgtFAAILRgACC0cAAgtIAAILSQACC0sAAgtNAAILTgACC08AAgtRAAILUgACC5EAAguTAAILlQACC5cAAguaAAILmwACC5wAAgudAAILngACC6AAAguiAAILowACC6QAAgumAAILpwACC+YAAgvoAAIL6gACC+wAAgvvAAIL8AACC/EAAgvyAAIL8wACC/UAAgv3AAIL+AACC/kAAgv7AAIL/AACDDsAAgw9AAIMQAACDEIAAgxFAAIMRgACDEcAAgxIAAIMSQACDEsAAgxNAAIMTgACDE8AAgxRAAIMUgACDJUAAgy5AAIM3QACDQAAAg0nAAINRwACDW4AAg2VAAINtQACDdkAAg39AAIN/wACDgIAAg4EAAIOBgACDggAAg4LAAIODgACDhAAAg4SAAIOFQACDhcAAg4ZAAIOHAACDh8AAg4gAAIOJQACDjIAAg41AAIONwACDjoAAg49AAIOPwACDmQAAg6IAAIOrwACDtMAAg7WAAIO2AACDtoAAg7cAAIO3gACDuAAAg7hAAIO5AACDvEAAg8EAAIPBgACDwgAAg8KAAIPDAACDw4AAg8QAAIPEgACDxQAAg8WAAIPKQACDywAAg8vAAIPMgACDzUAAg84AAIPOwACDz4AAg9BAAIPRAACD0YAAg+FAAIPhwACD4oAAg+MAAIPjwACD5AAAg+RAAIPkgACD5MAAg+VAAIPlwACD5gAAg+ZAAIPmwACD5wAAg+lAAIPpgACD6gAAg/nAAIP6QACD+sAAg/tAAIP8AACD/EAAg/yAAIP8wACD/QAAg/2AAIP+AACD/kAAg/6AAIP/AACD/0AAhA8AAIQPgACEEEAAhBDAAIQRgACEEcAAhBIAAIQSQACEEoAAhBMAAIQTgACEE8AAhBQAAIQUgACEFMAAhBcAAIQXQACEF8AAhCeAAIQoAACEKIAAhCkAAIQpwACEKgAAhCpAAIQqgACEKsAAhCtAAIQrwACELAAAhCxAAIQswACELQAAhDzAAIQ9QACEPgAAhD6AAIQ/QACEP4AAhD/AAIRAAACEQEAAhEDAAIRBQACEQYAAhEHAAIRCQACEQoAAhETAAIRFAACERYAAhFVAAIRVwACEVkAAhFbAAIRXgACEV8AAhFgAAIRYQACEWIAAhFkAAIRZgACEWcAAhFoAAIRagACEWsAAhGqAAIRrAACEa8AAhGxAAIRtAACEbUAAhG2AAIRtwACEbgAAhG6AAIRvAACEb0AAhG+AAIRwAACEcEAAhHOAAIRzwACEdAAAhHSAAISEQACEhMAAhIVAAISFwACEhoAAhIbAAISHAACEh0AAhIeAAISIAACEiIAAhIjAAISJAACEiYAAhInAAISZgACEmgAAhJrAAISbQACEnAAAhJxAAIScgACEnMAAhJ0AAISdgACEngAAhJ5AAISegACEnwAAhJ9AAISkAACEp0AAhKoAAISqwACEq0AAhKwAAISswACErYAAhLBAAISxAACEscAAhLKAAISzQACEtAAAhLSAAIS6gACEvwAAhMHAAITHwACE2oAAhONAAITrQACE80AAhPPAAIT0QACE9MAAhPVAAIT2AACE9kAAhPaAAIT3QACE94AAhPgAAIT4QACE+MAAhPmAAIT5wACE+gAAhPrAAIT7AACE/EAAhP+AAIUAwACFAUAAhQHAAIUDAACFA8AAhQSAAIUFAACFDkAAhRdAAIUhAACFKgAAhSrAAIUrQACFK8AAhSxAAIUswACFLUAAhS2AAIUuQACFMYAAhTXAAIU2QACFNsAAhTdAAIU3wACFOEAAhTjAAIU5QACFOcAAhT4AAIU+wACFP4AAhUBAAIVBAACFQcAAhUKAAIVDQACFRAAAhUSAAIVUQACFVMAAhVVAAIVVwACFVoAAhVbAAIVXAACFV0AAhVeAAIVYAACFWIAAhVjAAIVZAACFWYAAhVnAAIVpgACFagAAhWqAAIVrAACFa8AAhWwAAIVsQACFbIAAhWzAAIVtQACFbcAAhW4AAIVuQACFbsAAhW8AAIV+wACFf0AAhYAAAIWAgACFgUAAhYGAAIWBwACFggAAhYJAAIWCwACFg0AAhYOAAIWDwACFhEAAhYSAAIWHwACFiAAAhYhAAIWIwACFmIAAhZkAAIWZgACFmgAAhZrAAIWbAACFm0AAhZuAAIWbwACFnEAAhZzAAIWdAACFnUAAhZ3AAIWeAACFrcAAha5AAIWuwACFr0AAhbAAAIWwQACFsIAAhbDAAIWxAACFsYAAhbIAAIWyQACFsoAAhbMAAIWzQACFwwAAhcOAAIXEAACFxIAAhcVAAIXFgACFxcAAhcYAAIXGQACFxsAAhcdAAIXHgACFx8AAhchAAIXIgACF2EAAhdjAAIXZQACF2cAAhdqAAIXawACF2wAAhdtAAIXbgACF3AAAhdyAAIXcwACF3QAAhd2AAIXdwACF7YAAhe4AAIXugACF7wAAhe/AAIXwAACF8EAAhfCAAIXwwACF8UAAhfHAAIXyAACF8kAAhfLAAIXzAACF/EAAhgVAAIYPAACGGAAAhhjAAIYZQACGGcAAhhpAAIYawACGG0AAhhuAAIYcQACGH4AAhiNAAIYjwACGJEAAhiTAAIYlQACGJcAAhiZAAIYmwACGKoAAhitAAIYsAACGLMAAhi2AAIYuQACGLwAAhi/AAIYwQACGQAAAhkCAAIZBAACGQYAAhkJAAIZCgACGQsAAhkMAAIZDQACGQ8AAhkRAAIZEgACGRMAAhkVAAIZFgACGVUAAhlXAAIZWQACGVsAAhleAAIZXwACGWAAAhlhAAIZYgACGWQAAhlmAAIZZwACGWgAAhlqAAIZawACGaoAAhmsAAIZrgACGbAAAhmzAAIZtAACGbUAAhm2AAIZtwACGbkAAhm7AAIZvAACGb0AAhm/AAIZwAACGf8AAhoBAAIaBAACGgYAAhoJAAIaCgACGgsAAhoMAAIaDQACGg8AAhoRAAIaEgACGhMAAhoVAAIaFgACGlUAAhpXAAIaWQACGlsAAhpeAAIaXwACGmAAAhphAAIaYgACGmQAAhpmAAIaZwACGmgAAhpqAAIaawACGqoAAhqsAAIargACGrAAAhqzAAIatAACGrUAAhq2AAIatwACGrkAAhq7AAIavAACGr0AAhq/AAIawAACGv8AAhsBAAIbAwACGwUAAhsIAAIbCQACGwoAAhsLAAIbDAACGw4AAhsQAAIbEQACGxIAAhsUAAIbFQACG2AAAhuDAAIbowACG8MAAhvFAAIbxwACG8kAAhvLAAIbzgACG88AAhvQAAIb0wACG9QAAhvWAAIb1wACG9kAAhvbAAIb3AACG90AAhvgAAIb4QACG+YAAhvzAAIb+AACG/oAAhv8AAIcAQACHAQAAhwHAAIcCQACHC4AAhxSAAIceQACHJ0AAhygAAIcogACHKQAAhymAAIcqAACHKoAAhyrAAIcrgACHLsAAhzMAAIczgACHNAAAhzSAAIc1AACHNYAAhzYAAIc2gACHNwAAhztAAIc8AACHPMAAhz2AAIc+QACHPwAAhz/AAIdAgACHQUAAh0HAAIdRgACHUgAAh1KAAIdTAACHU8AAh1QAAIdUQACHVIAAh1TAAIdVQACHVcAAh1YAAIdWQACHVsAAh1cAAIdmwACHZ0AAh2fAAIdoQACHaQAAh2lAAIdpgACHacAAh2oAAIdqgACHawAAh2tAAIdrgACHbAAAh2xAAId8AACHfIAAh31AAId9wACHfoAAh37AAId/AACHf0AAh3+AAIeAAACHgIAAh4DAAIeBAACHgYAAh4HAAIeFAACHhUAAh4WAAIeGAACHlcAAh5ZAAIeWwACHl0AAh5gAAIeYQACHmIAAh5jAAIeZAACHmYAAh5oAAIeaQACHmoAAh5sAAIebQACHqwAAh6uAAIesAACHrIAAh61AAIetgACHrcAAh64AAIeuQACHrsAAh69AAIevgACHr8AAh7BAAIewgACHwEAAh8DAAIfBQACHwcAAh8KAAIfCwACHwwAAh8NAAIfDgACHxAAAh8SAAIfEwACHxQAAh8WAAIfFwACH1YAAh9YAAIfWgACH1wAAh9fAAIfYAACH2EAAh9iAAIfYwACH2UAAh9nAAIfaAACH2kAAh9rAAIfbAACH6sAAh+tAAIfrwACH7EAAh+0AAIftQACH7YAAh+3AAIfuAACH7oAAh+8AAIfvQACH74AAh/AAAIfwQACH+YAAiAKAAIgMQACIFUAAiBYAAIgWgACIFwAAiBeAAIgYAACIGIAAiBjAAIgZgACIHMAAiCCAAIghAACIIYAAiCIAAIgigACIIwAAiCOAAIgkAACIJ8AAiCiAAIgpQACIKgAAiCrAAIgrgACILEAAiC0AAIgtgACIPUAAiD3AAIg+QACIPsAAiD+AAIg/wACIQAAAiEBAAIhAgACIQQAAiEGAAIhBwACIQgAAiEKAAIhCwACIUoAAiFMAAIhTgACIVAAAiFTAAIhVAACIVUAAiFWAAIhVwACIVkAAiFbAAIhXAACIV0AAiFfAAIhYAACIZ8AAiGhAAIhowACIaUAAiGoAAIhqQACIaoAAiGrAAIhrAACIa4AAiGwAAIhsQACIbIAAiG0AAIhtQACIfQAAiH2AAIh+AACIfoAAiH9AAIh/gACIf8AAiIAAAIiAQACIgMAAiIFAAIiBgACIgcAAiIJAAIiCgACIkkAAiJLAAIiTQACIk8AAiJSAAIiUwACIlQAAiJVAAIiVgACIlgAAiJaAAIiWwACIlwAAiJeAAIiXwACIp4AAiKgAAIiogACIqQAAiKnAAIiqAACIqkAAiKqAAIiqwACIq0AAiKvAAIisAACIrEAAiKzAAIitAACIvMAAiL1AAIi+AACIvoAAiL9AAIi/gACIv8AAiMAAAIjAQACIwMAAiMFAAIjBgACIwcAAiMJAAIjCgACI1UAAiN4AAIjmAACI7gAAiO6AAIjvAACI74AAiPAAAIjwwACI8QAAiPFAAIjyAACI8kAAiPLAAIjzAACI84AAiPRAAIj0gACI9MAAiPWAAIj1wACI9wAAiPpAAIj7gACI/AAAiPyAAIj9wACI/oAAiP9AAIj/wACJCQAAiRIAAIkbwACJJMAAiSWAAIkmAACJJoAAiScAAIkngACJKAAAiShAAIkpAACJLEAAiTCAAIkxAACJMYAAiTIAAIkygACJMwAAiTOAAIk0AACJNIAAiTjAAIk5gACJOkAAiTsAAIk7wACJPIAAiT1AAIk+AACJPsAAiT9AAIlPAACJT4AAiVAAAIlQgACJUUAAiVGAAIlRwACJUgAAiVJAAIlSwACJU0AAiVOAAIlTwACJVEAAiVSAAIlkQACJZMAAiWVAAIllwACJZoAAiWbAAIlnAACJZ0AAiWeAAIloAACJaIAAiWjAAIlpAACJaYAAiWnAAIl5gACJegAAiXrAAIl7QACJfAAAiXxAAIl8gACJfMAAiX0AAIl9gACJfgAAiX5AAIl+gACJfwAAiX9AAImCgACJgsAAiYMAAImDgACJk0AAiZPAAImUQACJlMAAiZWAAImVwACJlgAAiZZAAImWgACJlwAAiZeAAImXwACJmAAAiZiAAImYwACJqIAAiakAAImpgACJqgAAiarAAImrAACJq0AAiauAAImrwACJrEAAiazAAImtAACJrUAAia3AAImuAACJvcAAib5AAIm+wACJv0AAicAAAInAQACJwIAAicDAAInBAACJwYAAicIAAInCQACJwoAAicMAAInDQACJ0wAAidOAAInUAACJ1IAAidVAAInVgACJ1cAAidYAAInWQACJ1sAAiddAAInXgACJ18AAidhAAInYgACJ6EAAiejAAInpQACJ6cAAieqAAInqwACJ6wAAietAAInrgACJ7AAAieyAAInswACJ7QAAie2AAIntwACJ9wAAigAAAIoJwACKEsAAihOAAIoUAACKFIAAihUAAIoVgACKFgAAihZAAIoXAACKGkAAih2AAIoeAACKHoAAih8AAIofgACKIAAAiiCAAIojwACKJIAAiiVAAIomAACKJsAAiieAAIooQACKKMAAijiAAIo5AACKOcAAijpAAIo7AACKO0AAijuAAIo7wACKPAAAijyAAIo9AACKPUAAij2AAIo+AACKPkAAik8AAIpYAACKYQAAimnAAIpzgACKe4AAioVAAIqPAACKlwAAiqAAAIqpAACKqYAAiqpAAIqqwACKq0AAiqvAAIqsgACKrUAAiq3AAIquQACKrwAAiq+AAIqwAACKsMAAirGAAIqxwACKswAAirZAAIq3AACKt4AAirhAAIq5AACKuYAAisLAAIrLwACK1YAAit6AAIrfQACK38AAiuBAAIrgwACK4UAAiuHAAIriAACK4sAAiuYAAIrqwACK60AAiuvAAIrsQACK7MAAiu1AAIrtwACK7kAAiu7AAIrvQACK9AAAivTAAIr1gACK9kAAivcAAIr3wACK+IAAivlAAIr6AACK+sAAivtAAIsLAACLC4AAiwxAAIsMwACLDYAAiw3AAIsOAACLDkAAiw6AAIsPAACLD4AAiw/AAIsQAACLEIAAixDAAIsTAACLE0AAixPAAIsjgACLJAAAiySAAIslAACLJcAAiyYAAIsmQACLJoAAiybAAIsnQACLJ8AAiygAAIsoQACLKMAAiykAAIs4wACLOUAAizoAAIs6gACLO0AAizuAAIs7wACLPAAAizxAAIs8wACLPUAAiz2AAIs9wACLPkAAiz6AAItAwACLQQAAi0GAAItRQACLUcAAi1JAAItSwACLU4AAi1PAAItUAACLVEAAi1SAAItVAACLVYAAi1XAAItWAACLVoAAi1bAAItmgACLZwAAi2fAAItoQACLaQAAi2lAAItpgACLacAAi2oAAItqgACLawAAi2tAAItrgACLbAAAi2xAAItugACLbsAAi29AAIt/AACLf4AAi4AAAIuAgACLgUAAi4GAAIuBwACLggAAi4JAAIuCwACLg0AAi4OAAIuDwACLhEAAi4SAAIuUQACLlMAAi5WAAIuWAACLlsAAi5cAAIuXQACLl4AAi5fAAIuYQACLmMAAi5kAAIuZQACLmcAAi5oAAIudQACLnYAAi53AAIueQACLrgAAi66AAIuvAACLr4AAi7BAAIuwgACLsMAAi7EAAIuxQACLscAAi7JAAIuygACLssAAi7NAAIuzgACLw0AAi8PAAIvEgACLxQAAi8XAAIvGAACLxkAAi8aAAIvGwACLx0AAi8fAAIvIAACLyEAAi8jAAIvJAACLzoAAi9HAAIvTgACL1EAAi9UAAIvVwACL14AAi9hAAIvZAACL2cAAi9pAAIvcwACL74AAi/hAAIwAQACMCEAAjAjAAIwJQACMCcAAjApAAIwLAACMC0AAjAuAAIwMQACMDIAAjA0AAIwNQACMDcAAjA6AAIwOwACMDwAAjA/AAIwQAACMEUAAjBSAAIwVwACMFkAAjBbAAIwYAACMGMAAjBmAAIwaAACMI0AAjCxAAIw2AACMPwAAjD/AAIxAQACMQMAAjEFAAIxBwACMQkAAjEKAAIxDQACMRoAAjErAAIxLQACMS8AAjExAAIxMwACMTUAAjE3AAIxOQACMTsAAjFMAAIxTwACMVIAAjFVAAIxWAACMVsAAjFeAAIxYQACMWQAAjFmAAIxpQACMacAAjGpAAIxqwACMa4AAjGvAAIxsAACMbEAAjGyAAIxtAACMbYAAjG3AAIxuAACMboAAjG7AAIx+gACMfwAAjH+AAIyAAACMgMAAjIEAAIyBQACMgYAAjIHAAIyCQACMgsAAjIMAAIyDQACMg8AAjIQAAIyTwACMlEAAjJUAAIyVgACMlkAAjJaAAIyWwACMlwAAjJdAAIyXwACMmEAAjJiAAIyYwACMmUAAjJmAAIycwACMnQAAjJ1AAIydwACMrYAAjK4AAIyugACMrwAAjK/AAIywAACMsEAAjLCAAIywwACMsUAAjLHAAIyyAACMskAAjLLAAIyzAACMwsAAjMNAAIzDwACMxEAAjMUAAIzFQACMxYAAjMXAAIzGAACMxoAAjMcAAIzHQACMx4AAjMgAAIzIQACM2AAAjNiAAIzZAACM2YAAjNpAAIzagACM2sAAjNsAAIzbQACM28AAjNxAAIzcgACM3MAAjN1AAIzdgACM7UAAjO3AAIzuQACM7sAAjO+AAIzvwACM8AAAjPBAAIzwgACM8QAAjPGAAIzxwACM8gAAjPKAAIzywACNAoAAjQMAAI0DgACNBAAAjQTAAI0FAACNBUAAjQWAAI0FwACNBkAAjQbAAI0HAACNB0AAjQfAAI0IAACNEUAAjRpAAI0kAACNLQAAjS3AAI0uQACNLsAAjS9AAI0vwACNMEAAjTCAAI0xQACNNIAAjThAAI04wACNOUAAjTnAAI06QACNOsAAjTtAAI07wACNP4AAjUBAAI1BAACNQcAAjUKAAI1DQACNRAAAjUTAAI1FQACNVQAAjVWAAI1WAACNVoAAjVdAAI1XgACNV8AAjVgAAI1YQACNWMAAjVlAAI1ZgACNWcAAjVpAAI1agACNakAAjWrAAI1rQACNa8AAjWyAAI1swACNbQAAjW1AAI1tgACNbgAAjW6AAI1uwACNbwAAjW+AAI1vwACNf4AAjYAAAI2AgACNgQAAjYHAAI2CAACNgkAAjYKAAI2CwACNg0AAjY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nAAJGqAACRucAAkbpAAJG6wACRu0AAkbwAAJG8QACRvIAAkbzAAJG9AACRvYAAkb4AAJG+QACRvoAAkb8AAJG/QACRzwAAkc+AAJHQAACR0IAAkdFAAJHRgACR0cAAkdIAAJHSQACR0sAAkdNAAJHTgACR08AAkdRAAJHUgACR1sAAkdcAAJHXgACR50AAkefAAJHoQACR6MAAkemAAJHpwACR6gAAkepAAJHqgACR6wAAkeuAAJHrwACR7AAAkeyAAJHswACR/IAAkf0AAJH9gACR/gAAkf7AAJH/AACR/0AAkf+AAJH/wACSAEAAkgDAAJIBAACSAUAAkgHAAJICAACSEcAAkhJAAJISwACSE0AAkhQAAJIUQACSFIAAkhTAAJIVAACSFYAAkhYAAJIWQACSFoAAkhcAAJIXQACSJwAAkieAAJIoAACSKIAAkilAAJIpgACSKcAAkioAAJIqQACSKsAAkitAAJIrgACSK8AAkixAAJIsgACSPEAAkjzAAJI9QACSPcAAkj6AAJI+wACSPwAAkj9AAJI/gACSQAAAkkCAAJJAwACSQQAAkkGAAJJBwACSVIAAkl1AAJJlQACSbUAAkm3AAJJuQACSbsAAkm9AAJJwAACScEAAknCAAJJxQACScYAAknIAAJJyQACScsAAknOAAJJzwACSdAAAknTAAJJ1AACSdkAAknmAAJJ6wACSe0AAknvAAJJ9AACSfcAAkn6AAJJ/AACSiEAAkpFAAJKbAACSpAAAkqTAAJKlQACSpcAAkqZAAJKmwACSp0AAkqeAAJKoQACSq4AAkq/AAJKwQACSsMAAkrFAAJKxwACSskAAkrLAAJKzQACSs8AAkrgAAJK4wACSuYAAkrpAAJK7AACSu8AAkryAAJK9QACSvgAAkr6AAJLOQACSzsAAks9AAJLPwACS0IAAktDAAJLRAACS0UAAktGAAJLSAACS0oAAktLAAJLTAACS04AAktPAAJLjgACS5AAAkuSAAJLlAACS5cAAkuYAAJLmQACS5oAAkubAAJLnQACS58AAkugAAJLoQACS6MAAkukAAJL4wACS+UAAkvoAAJL6gACS+0AAkvuAAJL7wACS/AAAkvxAAJL8wACS/UAAkv2AAJL9wACS/kAAkv6AAJMBwACTAgAAkwJAAJMCwACTEoAAkxMAAJMTgACTFAAAkx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LAAJXTAACV4sAAleNAAJXjwACV5EAAleUAAJXlQACV5YAAleXAAJXmAACV5oAAlecAAJXnQACV54AAlegAAJXoQACV+AAAlfiAAJX5QACV+cAAlfqAAJX6wACV+wAAlftAAJX7gACV/AAAlfyAAJX8wACV/QAAlf2AAJX9wACWDoAAlheAAJYggACWKUAAljMAAJY7AACWRMAAlk6AAJZWgACWX4AAlmiAAJZpAACWacAAlmpAAJZqwACWa0AAlmwAAJZswACWbUAAlm3AAJZugACWbwAAlm+AAJZwQACWcQAAlnFAAJZygACWdcAAlnaAAJZ3AACWd8AAlniAAJZ5AACWgkAAlotAAJaVAACWngAAlp7AAJafQACWn8AAlqBAAJagwACWoUAAlqGAAJaiQACWpYAAlqpAAJaqwACWq0AAlqvAAJasQACWrMAAlq1AAJatwACWrkAAlq7AAJazgACWtEAAlrUAAJa1wACWtoAAlrdAAJa4AACWuMAAlrmAAJa6QACWusAAlsqAAJbLAACWy8AAlsxAAJbNAACWzUAAls2AAJbNwACWzgAAls6AAJbPAACWz0AAls+AAJbQAACW0EAAltKAAJbSwACW00AAluMAAJbjgACW5AAAluSAAJblQACW5YAAluXAAJbmAACW5kAAlubAAJbnQACW54AAlufAAJboQACW6IAAlvhAAJb4wACW+YAAlvoAAJb6wACW+wAAlvtAAJb7gACW+8AAlvxAAJb8wACW/QAAlv1AAJb9wACW/gAAlwBAAJcAgACXAQAAlxDAAJcRQACXEcAAlxJAAJcTAACXE0AAlxOAAJcTwACXFAAAlxSAAJcVAACXFUAAlxWAAJcWAACXFkAAlyYAAJcmgACXJ0AAlyfAAJcogACXKMAAlykAAJcpQACXKYAAlyoAAJcqgACXKsAAlysAAJcrgACXK8AAly4AAJcuQACXLsAAlz6AAJc/AACXP4AAl0AAAJdAwACXQQAAl0FAAJdBgACXQcAAl0JAAJdCwACXQwAAl0NAAJdDwACXRAAAl1PAAJdUQACXVQAAl1WAAJdWQACXVoAAl1bAAJdXAACXV0AAl1fAAJdYQACXWIAAl1jAAJdZQACXWYAAl1zAAJddAACXXUAAl13AAJdtgACXbgAAl26AAJdvAACXb8AAl3AAAJdwQACXcIAAl3DAAJdxQACXccAAl3IAAJdyQACXcsAAl3MAAJeCwACXg0AAl4QAAJeEgACXhUAAl4WAAJeFwACXhgAAl4ZAAJeGwACXh0AAl4eAAJeHwACXiEAAl4iAAJePgACXksAAl5UAAJeVgACXlgAAl5bAAJeXgACXmcAAl5qAAJebQACXnAAAl5zAAJedQACXokAAl6QAAJe2wACXv4AAl8eAAJfPgACX0AAAl9CAAJfRAACX0YAAl9JAAJfSgACX0sAAl9OAAJfTwACX1EAAl9SAAJfVAACX1YAAl9XAAJfWAACX1sAAl9cAAJfYQACX24AAl9zAAJfdQACX3cAAl98AAJffwACX4IAAl+EAAJfqQACX80AAl/0AAJgGAACYBsAAmAdAAJgHwACYCEAAmAjAAJgJQACYCYAAmApAAJgNgACYEcAAmBJAAJgSwACYE0AAmBPAAJgUQACYFMAAmBVAAJgVwACYGgAAmBrAAJgbgACYHEAAmB0AAJgdwACYHoAAmB9AAJggAACYIIAAmDBAAJgwwACYMUAAmDHAAJgygACYMsAAmDMAAJgzQACYM4AAmDQAAJg0gACYNMAAmDUAAJg1gACYNcAAmEWAAJhGAACYRoAAmEcAAJhHwACYSAAAmEhAAJhIgACYSMAAmElAAJhJwACYSgAAmEpAAJhKwACYSwAAmFrAAJhbQACYXAAAmFyAAJhdQACYXYAAmF3AAJheAACYXkAAmF7AAJhfQACYX4AAmF/AAJhgQACYYIAAmGPAAJhkAACYZEAAmGTAAJh0gACYdQAAmHWAAJh2AACYdsAAmHcAAJh3QACYd4AAmHfAAJh4QACYeMAAmHkAAJh5QACYecAAmHoAAJiJwACYikAAmIrAAJiLQACYjAAAmIxAAJiMgACYjMAAmI0AAJiNgACYjgAAmI5AAJiOgACYjwAAmI9AAJifAACYn4AAmKAAAJiggACYoUAAmKGAAJihwACYogAAmKJAAJiiwACYo0AAmKOAAJijwACYpEAAmKSAAJi0QACYtMAAmLVAAJi1wACYtoAAmLbAAJi3AACYt0AAmLeAAJi4AACYuIAAmLjAAJi5AACYuYAAmLnAAJjJgACYygAAmMqAAJjLAACYy8AAmMwAAJjMQACYzIAAmMzAAJjNQACYzcAAmM4AAJjOQACYzsAAmM8AAJjYQACY4UAAmOsAAJj0AACY9MAAmPVAAJj1wACY9kAAmPbAAJj3QACY94AAmPhAAJj7gACY/0AAmP/AAJkAQACZAMAAmQFAAJkBwACZAkAAmQLAAJkGgACZB0AAmQgAAJkIwACZCYAAmQpAAJkLAACZC8AAmQxAAJkcAACZHIAAmR0AAJkdgACZHkAAmR6AAJkewACZHwAAmR9AAJkfwACZIEAAmSCAAJkgwACZIUAAmSGAAJkxQACZMcAAmTJAAJkywACZM4AAmTPAAJk0AACZNEAAmTSAAJk1AACZNYAAmTXAAJk2AACZNoAAmTbAAJlGgACZRwAAmUeAAJlIAACZSMAAmUkAAJlJQACZSYAAmUnAAJlKQACZSsAAmUsAAJlLQACZS8AAmUwAAJlbwACZXEAAmVzAAJldQACZXgAAmV5AAJlegACZXsAAmV8AAJlfgACZYAAAmWBAAJlggACZYQAAmWFAAJlxAACZcYAAmXIAAJlygACZc0AAmXOAAJlzwACZdAAAmXRAAJl0wACZdUAAmXWAAJl1wACZdkAAmXaAAJmGQACZhsAAmYdAAJmHwACZiIAAmYjAAJmJAACZiUAAmYmAAJmKAACZioAAmYrAAJmLAACZi4AAmYvAAJmbgACZnAAAmZyAAJmdAACZncAAmZ4AAJmeQACZnoAAmZ7AAJmfQACZn8AAmaAAAJmgQACZoMAAmaEAAJmzwACZvIAAmcSAAJnMgACZzQAAmc2AAJnOAACZzoAAmc9AAJnPgACZz8AAmdCAAJnQwACZ0UAAmdGAAJnSAACZ0oAAmdLAAJnTAACZ08AAmdQAAJnVQACZ2IAAmdnAAJnaQACZ2sAAmdwAAJncwACZ3YAAmd4AAJnnQACZ8EAAmfoAAJoDAACaA8AAmgRAAJoEwACaBUAAmgXAAJoGQACaBoAAmgdAAJoKgACaDsAAmg9AAJoPwACaEEAAmhDAAJoRQACaEcAAmhJAAJoSwACaFwAAmhfAAJoYgACaGUAAmhoAAJoawACaG4AAmhxAAJodAACaHYAAmi1AAJotwACaLkAAmi7AAJovgACaL8AAmjAAAJowQACaMIAAmjEAAJoxgACaMcAAmjIAAJoygACaMsAAmkKAAJpDAACaQ4AAmkQAAJpEwACaRQAAmkVAAJpFgACaRcAAmkZAAJpGwACaRwAAmkdAAJpHwACaSAAAmlfAAJpYQACaWQAAmlmAAJpaQACaWoAAmlrAAJpbAACaW0AAmlvAAJpcQACaXIAAmlzAAJpdQACaXYAAmmDAAJphAACaYUAAmmHAAJpxgACacgAAmnKAAJpzAACac8AAmnQAAJp0QACadIAAmnTAAJp1QACadcAAmnYAAJp2QACadsAAmncAAJqGwACah0AAmofAAJqIQACaiQAAmolAAJqJgACaicAAmooAAJqKgACaiwAAmotAAJqLgACajAAAmoxAAJqcAACanIAAmp0AAJqdgACankAAmp6AAJqewACanwAAmp9AAJqfwACaoEAAmqCAAJqgwACaoUAAmqGAAJqxQACascAAmrJAAJqywACas4AAmrPAAJq0AACatEAAmrSAAJq1AACatYAAmrXAAJq2AACatoAAmrbAAJrGgACaxwAAmseAAJrIAACayMAAmskAAJrJQACayYAAmsnAAJrKQACaysAAmssAAJrLQACay8AAmswAAJrVQACa3kAAmugAAJrxAACa8cAAmvJAAJrywACa80AAmvPAAJr0QACa9IAAmvVAAJr4gACa+8AAmvxAAJr8wACa/UAAmv3AAJr+QACa/sAAmwIAAJsCwACbA4AAmwRAAJsFAACbBcAAmwaAAJsHAACbFsAAmxdAAJsYAACbGIAAmxlAAJsZgACbGcAAmxoAAJsaQACbGsAAmxtAAJsbgACbG8AAmxxAAJscgACbLEAAmyzAAJstQACbLcAAmy6AAJsuwACbLwAAmy9AAJsvgACbMAAAmzCAAJswwACbMQAAmzGAAJsxwACbQYAAm0IAAJtCgACbQwAAm0PAAJtEAACbREAAm0SAAJtEwACbRUAAm0XAAJtGAACbRkAAm0bAAJtHAACbVsAAm1dAAJtXwACbWEAAm1kAAJtZQACbWYAAm1nAAJtaAACbWoAAm1sAAJtbQACbW4AAm1wAAJtcQACbbAAAm2yAAJttAACbbYAAm25AAJtugACbbsAAm28AAJtvQACbb8AAm3BAAJtwgACbcMAAm3FAAJtxgACbgUAAm4HAAJuCQACbgsAAm4OAAJuDwACbhAAAm4RAAJuEgACbhQAAm4WAAJuFwACbhgAAm4aAAJuGwACbmYAAm6JAAJuqQACbskAAm7LAAJuzQACbs8AAm7RAAJu1AACbtUAAm7WAAJu2QACbtoAAm7cAAJu3QACbt8AAm7iAAJu4wACbuQAAm7nAAJu6AACbu0AAm76AAJu/wACbwEAAm8DAAJvCAACbwsAAm8OAAJvEAACbzUAAm9ZAAJvgAACb6QAAm+nAAJvqQACb6sAAm+tAAJvrwACb7EAAm+yAAJvtQACb8IAAm/TAAJv1QACb9cAAm/ZAAJv2wACb90AAm/fAAJv4QACb+MAAm/0AAJv9wACb/oAAm/9AAJwAAACcAMAAnAGAAJwCQACcAwAAnAOAAJwTQACcE8AAnBRAAJwUwACcFYAAnBXAAJwWAACcFkAAnBaAAJwXAACcF4AAnBfAAJwYAACcGIAAnBjAAJwogACcKQAAnCmAAJwqAACcKsAAnCsAAJwrQACcK4AAnCvAAJwsQACcLMAAnC0AAJwtQACcLcAAnC4AAJw9wACcPkAAnD8AAJw/gACcQEAAnECAAJxAwACcQQAAnEFAAJxBwACcQkAAnEKAAJxCwACcQ0AAnEOAAJxGwACcRwAAnEdAAJxHwACcV4AAnFgAAJxYgACcWQAAnFnAAJxaAACcWkAAnFqAAJxawACcW0AAnFvAAJxcAACcXEAAnFzAAJxdAACcbMAAnG1AAJxtwACcbkAAnG8AAJxvQACcb4AAnG/AAJxwAACccIAAnHEAAJxxQACccYAAnHIAAJxyQACcggAAnIKAAJyDAACcg4AAnIRAAJyEgACchMAAnIUAAJyFQACchcAAnIZAAJyGgACchsAAnIdAAJyHgACcl0AAnJfAAJyYQACcmMAAnJmAAJyZwACcmgAAnJpAAJyagACcmwAAnJuAAJybwACcnAAAnJyAAJycwACcrIAAnK0AAJytgACcrgAAnK7AAJyvAACcr0AAnK+AAJyvwACcsEAAnLDAAJyxAACcsUAAnLHAAJyyAACcu0AAnMRAAJzOAACc1wAAnNfAAJzYQACc2MAAnNlAAJzZwACc2kAAnNqAAJzbQACc3oAAnOJAAJziwACc40AAnOPAAJzkQACc5MAAnOVAAJzlwACc6YAAnOpAAJzrAACc68AAnOyAAJztQACc7gAAnO7AAJzvQACc/wAAnP+AAJ0AAACdAIAAnQFAAJ0BgACdAcAAnQIAAJ0CQACdAsAAnQNAAJ0DgACdA8AAnQRAAJ0EgACdFEAAnRTAAJ0VQACdFcAAnRaAAJ0WwACdFwAAnR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9AAKEvgAChL8AAoTAAAKEwQAChMMAAoTFAAKExgAChMcAAoTJAAKEygAChO8AAoUTAAKFOgAChV4AAoVhAAKFYwAChWUAAoVnAAKFaQAChWsAAoVsAAKFbwAChXwAAoWLAAKFjQAChY8AAoWRAAKFkwAChZUAAoWXAAKFmQAChagAAoWrAAKFrgAChbEAAoW0AAKFtwAChboAAoW9AAKFvwAChf4AAoYAAAKGAwAChgUAAoYIAAKGCQAChgoAAoYLAAKGDAAChg4AAoYQAAKGEQAChhIAAoYUAAKGFQAChlQAAoZWAAKGWAAChloAAoZdAAKGXgAChl8AAoZgAAKGYQAChmMAAoZlAAKGZgAChmcAAoZpAAKGagAChqkAAoarAAKGrQAChq8AAoayAAKGswAChrQAAoa1AAKGtgAChrgAAoa6AAKGuwAChrwAAoa+AAKGvwAChv4AAocAAAKHAwAChwUAAocIAAKHCQAChwoAAocLAAKHDAAChw4AAocQAAKHEQAChxIAAocUAAKHFQACh1QAAodWAAKHWAACh1oAAoddAAKHXgACh18AAodgAAKHYQACh2MAAodlAAKHZgACh2cAAodpAAKHagACh6kAAoerAAKHrQACh68AAoeyAAKHswACh7QAAoe1AAKHtgACh7gAAoe6AAKHuwACh7wAAoe+AAKHvwACh/4AAogAAAKIAgACiAQAAogHAAKICAACiAkAAogKAAKICwACiA0AAogPAAKIEAACiBEAAogTAAKIFAACiF8AAoiCAAKIogACiMIAAojEAAKIxgACiMgAAojKAAKIzAACiM0AAojOAAKI0QACiNIAAojUAAKI1QACiNcAAojZAAKI2gACiNsAAojeAAKI3wACiOQAAojxAAKI9gACiPgAAoj6AAKI/wACiQIAAokFAAKJBwACiSwAAolQAAKJdwACiZsAAomeAAKJoAACiaIAAomkAAKJpgACiagAAompAAKJrAACibkAAonKAAKJzAACic4AAonQAAKJ0gACidQAAonWAAKJ2AACidoAAonrAAKJ7gACifEAAon0AAKJ9wACifoAAon9AAKKAAACigMAAooFAAKKRAACikYAAopIAAKKSgACik0AAopOAAKKTwACilAAAopRAAKKUwACilUAAopWAAKKVwACilkAAopaAAKKmQACipsAAoqdAAKKnwACiqIAAoqjAAKKpAACiqUAAoqmAAKKqAACiqoAAoqrAAKKrAACiq4AAoqvAAKK7gACivAAAorzAAKK9QACivgAAor5AAKK+gACivsAAor8AAKK/gACiwAAAosBAAKLAgACiwQAAosFAAKLEgACixMAAosUAAKLFgACi1UAAotXAAKLWQACi1sAAoteAAKLXwACi2AAAothAAKLYgACi2QAAotmAAKLZwACi2gAAotqAAKLawACi6oAAousAAKLrgACi7AAAouzAAKLtAACi7UAAou2AAKLtwACi7kAAou7AAKLvAACi70AAou/AAKLwAACi/8AAowBAAKMAwACjAUAAowIAAKMCQACjAoAAowLAAKMDAACjA4AAowQAAKMEQACjBIAAowUAAKMFQACjFQAAoxWAAKMWAACjFoAAoxdAAKMXgACjF8AAoxgAAKMYQACjGMAAoxlAAKMZgACjGcAAoxpAAKMagACjKkAAoyrAAKMrQACjK8AAoyyAAKMswACjLQAAoy1AAKMtgACjLgAAoy6AAKMuwACjLwAAoy+AAKMvwACjOQAAo0IAAKNLwACjVMAAo1WAAKNWAACjVoAAo1cAAKNXgACjWAAAo1hAAKNZAACjXEAAo2AAAKNggACjYQAAo2GAAKNiAACjYoAAo2MAAKNjgACjZ0AAo2gAAKNowACjaYAAo2pAAKNrAACja8AAo2yAAKNtAACjfMAAo31AAKN9wACjfkAAo38AAKN/QACjf4AAo3/AAKOAAACjgIAAo4EAAKOBQACjgYAAo4IAAKOCQACjkgAAo5KAAKOTAACjk4AAo5RAAKOUgACjlMAAo5UAAKOVQACjlcAAo5ZAAKOWgACjlsAAo5dAAKOXgACjp0AAo6fAAKOoQACjqMAAo6mAAKOpwACjqgAAo6pAAKOqgACjqwAAo6uAAKOrwACjrAAAo6yAAKOswACjvIAAo70AAKO9wACjvkAAo78AAKO/QACjv4AAo7/AAKPAAACjwIAAo8EAAKPBQACjwYAAo8IAAKPCQACj0gAAo9KAAKPTAACj04AAo9RAAKPUgACj1MAAo9UAAKPVQACj1cAAo9ZAAKPWgACj1sAAo9dAAKPXgACj50AAo+fAAKPoQACj6MAAo+mAAKPpwACj6gAAo+pAAKPqgACj6wAAo+uAAKPrwACj7AAAo+yAAKPswACj/IAAo/0AAKP9gACj/gAAo/7AAKP/AACj/0AAo/+AAKP/wACkAEAApADAAKQBAACkAUAApAHAAKQCAACkFMAApB2AAKQlgACkLYAApC4AAKQugACkLwAApC+AAKQwAACkMEAApDCAAKQxQACkMYAApDIAAKQyQACkMsAApDNAAKQzgACkM8AApDSAAKQ0wACkNwAApDpAAKQ7gACkPAAApDyAAKQ9wACkPoAApD9AAKQ/wACkSQAApFIAAKRbwACkZMAApGWAAKRmAACkZoAApGcAAKRngACkaAAApGhAAKRpAACkbEAApHCAAKRxAACkcYAApHIAAKRygACkcwAApHOAAKR0AACkdIAApHjAAKR5gACkekAApHsAAKR7wACkfIAApH1AAKR+AACkfsAApH9AAKSPAACkj4AApJAAAKSQgACkkUAApJGAAKSRwACkkgAApJJAAKSSwACkk0AApJOAAKSTwACklEAApJSAAKSkQACkpMAApKVAAKSlwACkpoAApKbAAKSnAACkp0AApKeAAKSoAACkqIAApKjAAKSpAACkqYAApKnAAKS5gACkugAApLrAAKS7QACkvAAApLxAAKS8gACkvMAApL0AAKS9gACkvgAApL5AAKS+gACkvwAApL9AAKTCgACkwsAApMMAAKTDgACk00AApNPAAKTUQACk1MAApNWAAKTVwACk1gAApNZAAKTWgACk1wAApNeAAKTXwACk2AAApNiAAKTYwACk6IAApOkAAKTpgACk6gAApOrAAKTrAACk60AApOuAAKTrwACk7EAApOzAAKTtAACk7UAApO3AAKTuAACk/cAApP5AAKT+wACk/0AApQAAAKUAQAClAIAApQDAAKUBAAClAYAApQIAAKUCQAClAoAApQMAAKUDQAClEwAApROAAKUUAAClFIAApRVAAKUVgAClFcAApRYAAKUWQAClFsAApRdAAKUXgAClF8AApRhAAKUYgAClKEAApSjAAKUpQAClKcAApSqAAKUqwAClKwAApStAAKUrgAClLAAApSyAAKUswAClLQAApS2AAKUtwAClNwAApUAAAKVJwAClUsAApVOAAKVUAAClVIAApVUAAKVVgAClVgAApVZAAKVXAAClWkAApV2AAKVeAAClXoAApV8AAKVfgAClYAAApWCAAKVjwAClZIAApWVAAKVmAAClZsAApWeAAKVoQAClaMAApXiAAKV5AAClecAApXpAAKV7AACle0AApXuAAKV7wAClfAAApXyAAKV9AAClfUAApX2AAKV+AAClfkAApY4AAKWOgACljwAApY+AAKWQQAClkIAApZDAAKWRAAClkUAApZHAAKWSQAClkoAApZLAAKWTQAClk4AApaNAAKWjwAClpEAApaTAAKWlgAClpcAApaYAAKWmQAClpoAApacAAKWngAClp8AApagAAKWogAClqMAApbiAAKW5AAClucAApbpAAKW7AAClu0AApbuAAKW7wAClvAAApbyAAKW9AAClvUAApb2AAKW+AAClvkAApc4AAKXOgAClzwAApc+AAKXQQACl0IAApdDAAKXRAACl0UAApdHAAKXSQACl0oAApdLAAKXTQACl04AApeNAAKXjwACl5EAApeTAAKXlgACl5cAApeYAAKXmQACl5oAApecAAKXngACl58AApegAAKXogACl6MAApesAAKXrQACl68AApfuAAKX8AACl/IAApf0AAKX9gACl/cAApf4AAKX+QACl/oAApf8AAKX/gACl/8AApgAAAKYAgACmAMAAphCAAKYRAACmEYAAphIAAKYSgACmEsAAphMAAKYTQACmE4AAphQAAKYUgACmFMAAphUAAKYVgACmFcAApiWAAKYmAACmJoAApicAAKYngACmJ8AApigAAKYoQACmKIAApikAAKYpgACmKcAApioAAKYqgACmKsAApj2AAKZGQACmTkAAplZAAKZWwACmV0AAplfAAKZYQACmWMAAplkAAKZZQACmWgAAplpAAKZawACmWwAApluAAKZcAACmXEAAplyAAKZdQACmXYAApl7AAKZiAACmY0AApmPAAKZkQACmZYAApmZAAKZnAACmZ4AApnDAAKZ5wACmg4AApoyAAKaNQACmjcAApo5AAKaOwACmj0AApo/AAKaQAACmkMAAppQAAKaYQACmmMAApplAAKaZwACmmkAApprAAKabQACmm8AAppxAAKaggACmoUAApqIAAKaiwACmo4AApqRAAKalAACmpcAApqaAAKanAACmtsAAprdAAKa3wACmuEAAprkAAKa5QACmuYAAprnAAKa6AACmuoAAprsAAKa7QACmu4AAprwAAKa8QACmzAAApsyAAKbNAACmzYAAps5AAKbOgACmzsAAps8AAKbPQACmz8AAptBAAKbQgACm0MAAptFAAKbRgACm4UAApuHAAKbigACm4wAApuPAAKbkAACm5EAApuSAAKbkwACm5UAApuXAAKbmAACm5kAApubAAKbnAACm6kAApuqAAKbqwACm60AApvsAAKb7gACm/AAApvyAAKb9QACm/YAApv3AAKb+AACm/kAApv7AAKb/QACm/4AApv/AAKcAQACnAIAApxBAAKcQwACnEUAApxHAAKcSgACnEsAApxMAAKcTQACnE4AApxQAAKcUgACnFMAApxUAAKcVgACnFcAApyWAAKcmAACnJoAApycAAKcnwACnKAAApyhAAKcogACnKMAApylAAKcpwACnKgAApypAAKcqwACnKwAApzrAAKc7QACnO8AApzxAAKc9AACnPUAApz2AAKc9wACnPgAApz6AAKc/AACnP0AApz+AAKdAAACnQEAAp1AAAKdQgACnUQAAp1GAAKdSQACnUoAAp1LAAKdTAACnU0AAp1PAAKdUQACnVIAAp1TAAKdVQACnVYAAp17AAKdnwACncYAAp3qAAKd7QACne8AAp3xAAKd8wACnfUAAp33AAKd+AACnfsAAp4IAAKeFwACnhkAAp4bAAKeHQACnh8AAp4hAAKeIwACniUAAp40AAKeNwACnjoAAp49AAKeQAACnkMAAp5GAAKeSQACnksAAp6KAAKejAACno4AAp6QAAKekwACnpQAAp6VAAKelgACnpcAAp6ZAAKemwACnpwAAp6dAAKenwACnqAAAp7fAAKe4QACnuMAAp7lAAKe6AACnukAAp7qAAKe6wACnuwAAp7uAAKe8AACnvEAAp7yAAKe9AACnvUAAp80AAKfNgACnzgAAp86AAKfPQACnz4AAp8/AAKfQAACn0EAAp9DAAKfRQACn0YAAp9HAAKfSQACn0oAAp+JAAKfiwACn44AAp+QAAKfkwACn5QAAp+VAAKflgACn5cAAp+ZAAKfmwACn5wAAp+dAAKfnwACn6AAAp/fAAKf4QACn+MAAp/lAAKf6AACn+kAAp/qAAKf6wACn+wAAp/uAAKf8AACn/EAAp/yAAKf9AACn/UAAqA0AAKgNgACoDkAAqA7AAKgPgACoD8AAqBAAAKgQQACoEIAAqBEAAKgRgACoEcAAqBIAAKgSgACoEsAAqBnAAKgpgACoKgAAqCqAAKgrAACoK8AAqCwAAKgsQACoLIAAqCzAAKgtQACoLcAAqC4AAKguQACoLsAAqC8AAKhBwACoSoAAqFKAAKhagACoWwAAqFuAAKhcAACoXIAAqF0AAKhdQACoXYAAqF5AAKhegACoXwAAqF9AAKhfwACoYEAAqGCAAKhgwACoYYAAqGHAAKhkAACoZ0AAqGiAAKhpAACoaYAAqGrAAKhrgACobEAAqGzAAKh2AACofwAAqIjAAKiRwACokoAAqJMAAKiTgAColAAAqJSAAKiVAAColUAAqJYAAKiZQAConYAAqJ4AAKiegAConwAAqJ+AAKigAACooIAAqKEAAKihgACopcAAqKaAAKinQACoqAAAqKjAAKipgACoqkAAqKsAAKirwACorEAAqLwAAKi8gACovQAAqL2AAKi+QACovoAAqL7AAKi/AACov0AAqL/AAKjAQACowIAAqMDAAKjBQACowYAAqNFAAKjRwACo0kAAqNLAAKjTgACo08AAqNQAAKjUQACo1IAAqNUAAKjVgACo1cAAqNYAAKjWgACo1sAAqOaAAKjnAACo58AAqOhAAKjpAACo6UAAqOmAAKjpwACo6gAAqOqAAKjrAACo60AAqOuAAKjsAACo7EAAqO+AAKjvwACo8AAAqPCAAKkAQACpAMAAqQFAAKkBwACpAoAAqQLAAKkDAACpA0AAqQOAAKkEAACpBIAAqQTAAKkFAACpBYAAqQXAAKkVgACpFgAAqRaAAKkXAACpF8AAqRgAAKkYQACpGIAAqRjAAKkZQACpGcAAqRoAAKkaQACpGsAAqRsAAKkqwACpK0AAqSvAAKksQACpLQAAqS1AAKktgACpLcAAqS4AAKkugACpLwAAqS9AAKkvgACpMAAAqTBAAKlAAACpQIAAqUEAAKlBgACpQkAAqUKAAKlCwACpQwAAqUNAAKlDwACpREAAqUSAAKlEwACpRUAAqUWAAKlVQACpVcAAqVZAAKlWwACpV4AAqVfAAKlYAACpWEAAqViAAKlZAACpWYAAqVnAAKlaAACpWoAAqVrAAKlkAACpbQAAqXbAAKl/wACpgIAAqYEAAKmBgACpggAAqYKAAKmDAACpg0AAqYQAAKmHQACpiwAAqYuAAKmMAACpjIAAqY0AAKmNgACpjgAAqY6AAKmSQACpkwAAqZPAAKmUgACplUAAqZYAAKmWwACpl4AAqZgAAKmnwACpqEAAqajAAKmpQACpqgAAqapAAKmqgACpqsAAqasAAKmrgACprAAAqaxAAKmsgACprQAAqa1AAKm9AACpvYAAqb4AAKm+gACpv0AAqb+AAKm/wACpwAAAqcBAAKnAwACpwUAAqcGAAKnBwACpwkAAqcKAAKnSQACp0sAAqdNAAKnTwACp1IAAqdTAAKnVAACp1UAAqdWAAKnWAACp1oAAqdbAAKnXAACp14AAqdfAAKnngACp6AAAqeiAAKnpAACp6cAAqeoAAKnqQACp6oAAqerAAKnrQACp68AAqewAAKnsQACp7MAAqe0AAKn8wACp/UAAqf3AAKn+QACp/wAAqf9AAKn/gACp/8AAqgAAAKoAgACqAQAAqgFAAKoBgACqAgAAqgJAAKoSAACqEoAAqhMAAKoTgACqFEAAqhSAAKoUwACqFQAAqhVAAKoVwACqFkAAqhaAAKoWwACqF0AAqheAAKonQACqJ8AAqihAAKoowACqKYAAqinAAKoqAACqKkAAqiqAAKorAACqK4AAqivAAKosAACqLIAAqizAAKo/gACqSEAAqlBAAKpYQACqWMAAqllAAKpZwACqWkAAqlrAAKpbAACqW0AAqlwAAKpcQACqXMAAql0AAKpdgACqXgAAql5AAKpegACqX0AAql+AAKpgwACqZAAAqmVAAKplwACqZkAAqmeAAKpoQACqaQAAqmmAAKpywACqe8AAqoWAAKqOgACqj0AAqo/AAKqQQACqkMAAqpFAAKqRwACqkgAAqpLAAKqWAACqmkAAqprAAKqbQACqm8AAqpxAAKqcwACqnUAAqp3AAKqeQACqooAAqqNAAKqkAACqpMAAqqWAAKqmQACqpwAAqqfAAKqogACqqQAAqrjAAKq5QACqucAAqrpAAKq7AACqu0AAqruAAKq7wACqvAAAqryAAKq9AACqvUAAqr2AAKq+AACqvkAAqs4AAKrOgACqzwAAqs+AAKrQQACq0IAAqtDAAKrRAACq0UAAqtHAAKrSQACq0oAAqtLAAKrTQACq04AAquNAAKrjwACq5IAAquUAAKrlwACq5gAAquZAAKrmgACq5sAAqudAAKrnwACq6AAAquhAAKrowACq6QAAquxAAKrsgACq7MAAqu1AAKr9AACq/YAAqv4AAKr+gACq/0AAqv+AAKr/wACrAAAAqwBAAKsAwACrAUAAqwGAAKsBwACrAkAAqwKAAKsSQACrEsAAqxNAAKsTwACrFIAAqxTAAKsVAACrFUAAqxWAAKsWAACrFoAAqxbAAKsXAACrF4AAqxfAAKsngACrKAAAqyiAAKspAACrKcAAqyoAAKsqQACrKoAAqyrAAKsrQACrK8AAqywAAKssQACrLMAAqy0AAKs8wACrPUAAqz3AAKs+QACrPwAAqz9AAKs/gACrP8AAq0AAAKtAgACrQQAAq0FAAKtBgACrQgAAq0JAAKtSAACrUoAAq1MAAKtTgACrVEAAq1SAAKtUwACrVQAAq1VAAKtVwACrVkAAq1aAAKtWwACrV0AAq1eAAKtgwACracAAq3OAAKt8gACrfUAAq33AAKt+QACrfsAAq39AAKt/wACrgAAAq4DAAKuEAACrh8AAq4hAAKuIwACriUAAq4nAAKuKQACrisAAq4tAAKuPAACrj8AAq5CAAKuRQACrkgAAq5LAAKuTgACrlEAAq5TAAKukgACrpQAAq6WAAKumAACrpsAAq6cAAKunQACrp4AAq6fAAKuoQACrqMAAq6kAAKupQACrqcAAq6oAAKu5wACrukAAq7rAAKu7QACrvAAAq7xAAKu8gACrvMAAq70AAKu9gACrvgAAq75AAKu+gACrvwAAq79AAKvPAACrz4AAq9AAAKvQgACr0UAAq9GAAKvRwACr0gAAq9JAAKvSwACr00AAq9OAAKvTwACr1EAAq9SAAKvkQACr5MAAq+VAAKvlwACr5oAAq+bAAKvnAACr50AAq+eAAKvoAACr6IAAq+jAAKvpAACr6YAAq+nAAKv5gACr+gAAq/qAAKv7AACr+8AAq/wAAKv8QACr/IAAq/zAAKv9QACr/cAAq/4AAKv+QACr/sAAq/8AAKwOwACsD0AArA/AAKwQQACsEQAArBFAAKwRgACsEcAArBIAAKwSgACsEwAArBNAAKwTgACsFAAArBRAAKwkAACsJIAArCUAAKwlgACsJkAArCaAAKwmwACsJwAArCdAAKwnwACsKEAArCiAAKwowACsKUAArCmAAKwrwACsLAAArCyAAKw9QACsRkAArE9AAKxYAACsYcAArGnAAKxzgACsfUAArIVAAKyOQACsl0AArJfAAKyYgACsmQAArJmAAKyaAACsmsAArJuAAKycAACsnIAArJ1AAKydwACsnkAArJ8AAKyfwACsoAAArKFAAKykgACspUAArKXAAKymgACsp0AArKfAAKyxAACsugAArMPAAKzMwACszYAArM4AAKzOgACszwAArM+AAKzQAACs0EAArNEAAKzUQACs2QAArNmAAKzaAACs2oAArNsAAKzbgACs3AAArNyAAKzdAACs3YAArOJAAKzjAACs48AArOSAAKzlQACs5gAArObAAKzngACs6EAArOkAAKzpgACs+UAArPnAAKz6gACs+wAArPvAAKz8AACs/EAArPyAAKz8wACs/UAArP3AAKz+AACs/kAArP7AAKz/AACtAUAArQGAAK0CAACtEcAArRJAAK0SwACtE0AArRQAAK0UQACtFIAArRTAAK0VAACtFYAArRYAAK0WQACtFoAArRcAAK0XQACtJwAArSeAAK0oQACtKMAArSmAAK0pwACtKgAArSpAAK0qgACtKwAArSuAAK0rwACtLAAArSyAAK0swACtLwAArS9AAK0vwACtP4AArUAAAK1AgACtQQAArUHAAK1CAACtQkAArUKAAK1CwACtQ0AArUPAAK1EAACtREAArUTAAK1FAACtVMAArVVAAK1WAACtVoAArVdAAK1XgACtV8AArVgAAK1YQACtWMAArVlAAK1ZgACtWcAArVpAAK1agACtXMAArV0AAK1dgACtbUAArW3AAK1uQACtbsAArW+AAK1vwACtcAAArXBAAK1wgACtcQAArXGAAK1xwACtcgAArXKAAK1ywACtgoAArYMAAK2DwACthEAArYUAAK2FQACthYAArYXAAK2GAACthoAArYcAAK2HQACth4AArYgAAK2IQACti4AArYvAAK2MAACtjIAArZxAAK2cwACtnUAArZ3AAK2egACtnsAArZ8AAK2fQACtn4AAraAAAK2ggACtoMAAraEAAK2hgACtocAArbGAAK2yAACtssAArbNAAK20AACttEAArbSAAK20wACttQAArbWAAK22AACttkAArbaAAK23AACtt0AArbrAAK2+AACtwMAArcGAAK3CQACtwwAArcPAAK3EgACtx0AArcgAAK3IwACtyYAArcpAAK3LAACty4AArc6AAK3SAACt1IAArddAAK3ZgACt7EAArfUAAK39AACuBQAArgWAAK4GAACuBoAArgcAAK4HwACuCAAArghAAK4JAACuCUAArgnAAK4KAACuCoAArgtAAK4LgACuC8AArgyAAK4MwACuDgAArhFAAK4SgACuEwAArhOAAK4UwACuFYAArhZAAK4WwACuIAAArikAAK4ywACuO8AArjyAAK49AACuPYAArj4AAK4+gACuPwAArj9AAK5AAACuQ0AArkeAAK5IAACuSIAArkkAAK5JgACuSgAArkqAAK5LAACuS4AArk/AAK5QgACuUUAArlIAAK5SwACuU4AArlRAAK5VAACuVcAArlZAAK5mAACuZoAArmcAAK5ngACuaEAArmiAAK5owACuaQAArmlAAK5pwACuakAArmqAAK5qwACua0AArmuAAK57QACue8AArnxAAK58wACufYAArn3AAK5+AACufkAArn6AAK5/AACuf4AArn/AAK6AAACugIAAroDAAK6QgACukQAArpHAAK6SQACukwAArpNAAK6TgACuk8AArpQAAK6UgACulQAArpVAAK6VgACulgAArpZAAK6ZgACumcAArpoAAK6agACuqkAArqrAAK6rQACuq8AArqyAAK6swACurQAArq1AAK6tgACurgAArq6AAK6uwACurwAArq+AAK6vwACuv4AArsAAAK7AgACuwQAArsHAAK7CAACuwkAArsKAAK7CwACuw0AArsPAAK7EAACuxEAArsTAAK7FAACu1MAArtVAAK7VwACu1kAArtcAAK7XQACu14AArtfAAK7YAACu2IAArtkAAK7ZQACu2YAArtoAAK7aQACu6gAAruqAAK7rAACu64AAruxAAK7sgACu7MAAru0AAK7tQACu7cAAru5AAK7ugACu7sAAru9AAK7vgACu/0AArv/AAK8AQACvAMAArwGAAK8BwACvAgAArwJAAK8CgACvAwAArwOAAK8DwACvBAAArwSAAK8EwACvDgAArxcAAK8gwACvKcAAryqAAK8rAACvK4AArywAAK8sgACvLQAAry1AAK8uAACvMUAArzUAAK81gACvNgAArzaAAK83AACvN4AArzgAAK84gACvPEAArz0AAK89wACvPoAArz9AAK9AAACvQMAAr0GAAK9CAACvUcAAr1JAAK9SwACvU0AAr1QAAK9UQACvVIAAr1TAAK9VAACvVYAAr1YAAK9WQACvVoAAr1cAAK9XQACvZwAAr2eAAK9oAACvaIAAr2lAAK9pgACvacAAr2oAAK9qQACvasAAr2tAAK9rgACva8AAr2xAAK9sgACvfEAAr3zAAK99QACvfcAAr36AAK9+wACvfwAAr39AAK9/gACvgAAAr4CAAK+AwACvgQAAr4GAAK+BwACvkYAAr5IAAK+SgACvkwAAr5PAAK+UAACvlEAAr5SAAK+UwACvlUAAr5XAAK+WAACvlkAAr5bAAK+XAACvpsAAr6dAAK+nwACvqEAAr6kAAK+pQACvqYAAr6nAAK+qAACvqoAAr6sAAK+rQACvq4AAr6wAAK+sQACvvAAAr7yAAK+9AACvvYAAr75AAK++gACvvsAAr78AAK+/QACvv8AAr8BAAK/AgACvwMAAr8FAAK/BgACv0UAAr9HAAK/SQACv0sAAr9OAAK/TwACv1AAAr9RAAK/UgACv1QAAr9WAAK/VwACv1gAAr9aAAK/WwACv6YAAr/JAAK/6QACwAkAAsALAALADQACwA8AAsARAALAFAACwBUAAsAWAALAGQACwBoAAsAcAALAHQACwB8AAsAiAALAIwACwCQAAsAnAALAKAACwC0AAsA6AALAPwACwEEAAsBDAALASAACwEsAAsBOAALAUAACwHUAAsCZAALAwAACwOQAAsDnAALA6QACwOsAAsDtAALA7wACwPEAAsDyAALA9QACwQIAAsETAALBFQACwRcAAsEZAALBGwACwR0AAsEfAALBIQACwSMAAsE0AALBNwACwToAAsE9AALBQAACwUMAAsFGAALBSQACwUwAAsFOAALBjQACwY8AAsGRAALBkwACwZYAAsGXAALBmAACwZkAAsGaAALBnAACwZ4AAsGfAALBoAACwaIAAsGjAALB4gACweQAAsHmAALB6AACwesAAsHsAALB7QACwe4AAsHvAALB8QACwfMAAsH0AALB9QACwfcAAsH4AALCNwACwjkAAsI8AALCPgACwkEAAsJCAALCQwACwkQAAsJFAALCRwACwkkAAsJKAALCSwACwk0AAsJOAALCWwACwlwAAsJdAALCXwACwp4AAsKgAALCogACwqQAAsKnAALCqAACwqkAAsKqAALCqwACwq0AAsKvAALCsAACwrEAAsKzAALCtAACwvMAAsL1AALC9wACwvkAAsL8AALC/QACwv4AAsL/AALDAAACwwIAAsMEAALDBQACwwYAAsMIAALDCQACw0gAAsNKAALDTAACw04AAsNRAALDUgACw1MAAsNUAALDVQACw1cAAsNZAALDWgACw1sAAsNdAALDXgACw50AAsOfAALDoQACw6MAAsOmAALDpwACw6gAAsOpAALDqgACw6wAAsOuAALDrwACw7AAAsOyAALDswACw/IAAsP0AALD9gACw/gAAsP7AALD/AACw/0AAsP+AALD/wACxAEAAsQDAALEBAACxAUAAsQHAALECAACxC0AAsRRAALEeAACxJwAAsSfAALEoQACxKMAAsSlAALEpwACxKkAAsSqAALErQACxLoAAsTJAALEywACxM0AAsTPAALE0QACxNMAAsTVAALE1wACxOYAAsTpAALE7AACxO8AAsTyAALE9QACxPgAAsT7AALE/QACxTwAAsU+AALFQAACxUIAAsVFAALFRgACxUcAAsVIAALFSQACxUsAAsVNAALFTgACxU8AAsVRAALFUgACxZEAAsWTAALFlQACxZcAAsWaAALFmwACxZwAAsWdAALFngACxaAAAsWiAALFowACxaQAAsWmAALFpwACxeYAAsXoAALF6gACxewAAsXvAALF8AACxfEAAsXyAALF8wACxfUAAsX3AALF+AACxfkAAsX7AALF/AACxjsAAsY9AALGPwACxkEAAsZEAALGRQACxkYAAsZHAALGSAACxkoAAsZMAALGTQACxk4AAsZQAALGUQACxpAAAsaSAALGlAACxpYAAsaZAALGmgACxpsAAsacAALGnQACxp8AAsahAALGogACxqMAAsalAALGpgACxuUAAsbnAALG6QACxusAAsbuAALG7wACxvAAAsbxAALG8gACxvQAAsb2AALG9wACxvgAAsb6AALG+wACxzoAAsc8AALHPgACx0AAAsdDAALHRAACx0UAAsdGAALHRwACx0kAAsdLAALHTAACx00AAsdPAALHUAACx5sAAse+AALH3gACx/4AAsgAAALIAgACyAQAAsgGAALICQACyAoAAsgLAALIDgACyA8AAsgRAALIEgACyBQAAsgXAALIGAACyBkAAsgcAALIHQACyCIAAsgvAALINAACyDYAAsg4AALIPQACyEAAAshDAALIRQACyGoAAsiOAALItQACyNkAAsjcAALI3gACyOAAAsjiAALI5AACyOYAAsjnAALI6gACyPcAAskIAALJCgACyQwAAskOAALJEAACyRIAAskUAALJFgACyRgAAskpAALJLAACyS8AAskyAALJNQACyTgAAsk7AALJPgACyUEAAslDAALJggACyYQAAsmGAALJiAACyYsAAsmMAALJjQACyY4AAsmPAALJkQACyZMAAsmUAALJlQACyZcAAsmYAALJ1wACydkAAsnbAALJ3QACyeAAAsnhAALJ4gACyeMAAsnkAALJ5gACyegAAsnpAALJ6gACyewAAsntAALKLAACyi4AAsoxAALKMwACyjYAAso3AALKOAACyjkAAso6AALKPAACyj4AAso/AALKQAACykIAAspDAALKUAACylEAAspSAALKVAACypMAAsqVAALKlwACypkAAsqcAALKnQACyp4AAsqfAALKoAACyqIAAsqkAALKpQACyqYAAsqoAALKqQACyugAAsrqAALK7AACyu4AAsrxAALK8gACyvMAAsr0AALK9QACyvcAAsr5AALK+gACyvsAAsr9AALK/gACyz0AAss/AALLQQACy0MAAstGAALLRwACy0gAAstJAALLSgACy0wAAstOAALLTwACy1AAAstSAALLUwACy5IAAsuUAALLlgACy5gAAsubAALLnAACy50AAsueAALLnwACy6EAAsujAALLpAACy6UAAsunAALLqAACy+cAAsvpAALL6wACy+0AAsvwAALL8QACy/IAAsvzAALL9AACy/YAAsv4AALL+QACy/oAAsv8AALL/QACzCIAAsxGAALMbQACzJEAAsyUAALMlgACzJgAAsyaAALMnAACzJ4AAsyfAALMogACzK8AAsy+AALMwAACzMIAAszEAALMxgACzMgAAszKAALMzAACzNsAAszeAALM4QACzOQAAsznAALM6gACzO0AAszwAALM8gACzTEAAs0zAALNNQACzTcAAs06AALNOwACzTwAAs09AALNPgACzUAAAs1CAALNQwACzUQAAs1GAALNRwACzYYAAs2IAALNigACzYwAAs2PAALNkAACzZEAAs2SAALNkwACzZUAAs2XAALNmAACzZkAAs2bAALNnAACzdsAAs3dAALN3wACzeEAAs3kAALN5QACzeYAAs3nAALN6AACzeoAAs3sAALN7QACze4AAs3wAALN8QACzjAAAs4yAALONQACzjcAAs46AALOOwACzjwAAs49AALOPgACzkAAAs5CAALOQwACzkQAAs5GAALORwACzkoAAs6JAALOiwACzo0AAs6PAALOkgACzpMAAs6UAALOlQACzpYAAs6YAALOmgACzpsAAs6cAALOngACzp8AAs7eAALO4AACzuIAAs7kAALO5wACzugAAs7pAALO6gACzusAAs7tAALO7wACzvAAAs7xAALO8wACzvQAAs8zAALPNQACzzcAAs85AALPPAACzz0AAs8+AALPPwACz0AAAs9CAALPRAACz0UAAs9GAALPSAACz0kAAs+UAALPtwACz9cAAs/3AALP+QACz/sAAs/9AALP/wAC0AIAAtADAALQBAAC0AcAAtAIAALQCgAC0AsAAtANAALQEAAC0BEAAtASAALQFQAC0BYAAtAfAALQLAAC0DEAAtAzAALQNQAC0DoAAtA9AALQQAAC0EIAAtBnAALQiwAC0LIAAtDWAALQ2QAC0NsAAtDdAALQ3wAC0OEAAtDjAALQ5AAC0OcAAtD0AALRBQAC0QcAAtEJAALRCwAC0Q0AAtEPAALREQAC0RMAAtEVAALRJgAC0SkAAtEsAALRLwAC0TIAAtE1AALROAAC0TsAAtE+AALRQAAC0X8AAtGBAALRgwAC0YUAAtGIAALRiQAC0YoAAtGLAALRjAAC0Y4AAtGQAALRkQAC0ZIAAtGUAALRlQAC0dQAAtHWAALR2AAC0doAAtHdAALR3gAC0d8AAtHgAALR4QAC0eMAAtHlAALR5gAC0ecAAtHpAALR6gAC0ikAAtIrAALSLgAC0jAAAtIzAALSNAAC0jUAAtI2AALSNwAC0jkAAtI7AALSPAAC0j0AAtI/AALSQAAC0k0AAtJOAALSTwAC0lEAAtKQAALSkgAC0pQAAtKWAALSmQAC0poAAtKbAALSnAAC0p0AAtKfAALSoQAC0qIAAtKjAALSpQAC0qYAAtLlAALS5wAC0ukAAtLrAALS7gAC0u8AAtLwAALS8QAC0vIAAtL0AALS9gAC0vcAAtL4AALS+gAC0vsAAtM6AALTPAAC0z4AAtNAAALTQwAC00QAAtNFAALTRgAC00cAAtNJAALTSwAC00wAAtNNAALTTwAC01AAAtOPAALTkQAC05MAAtOVAALTmAAC05kAAtOaAALTmwAC05wAAtOeAALToAAC06EAAtOiAALTpAAC06UAAtPkAALT5gAC0+gAAtPqAALT7QAC0+4AAtPvAALT8AAC0/EAAtPzAALT9QAC0/YAAtP3AALT+QAC0/oAAtQfAALUQwAC1GoAAtSOAALUkQAC1JMAAtSVAALUlwAC1JkAAtSbAALUnAAC1J8AAtSsAALUuwAC1L0AAtS/AALUwQAC1MMAAtTFAALUxwAC1MkAAtTYAALU2wAC1N4AAtThAALU5AAC1OcAAtTqAALU7QAC1O8AAtUuAALVMAAC1TIAAtU0AALVNwAC1TgAAtU5AALVOgAC1TsAAtU9AALVPwAC1UAAAtVBAALVQwAC1UQAAtWDAALVhQAC1YcAAtWJAALVjAAC1Y0AAtWOAALVjwAC1ZAAAtWSAALVlAAC1ZUAAtWWAALVmAAC1ZkAAtXYAALV2gAC1dwAAtXeAALV4QAC1eIAAtXjAALV5AAC1eUAAtXnAALV6QAC1eoAAtXrAALV7QAC1e4AAtYtAALWLwAC1jEAAtYzAALWNgAC1jcAAtY4AALWOQAC1joAAtY8AALWPgAC1j8AAtZAAALWQgAC1kMAAtaCAALWhAAC1oYAAtaIAALWiwAC1owAAtaNAALWjgAC1o8AAtaRAALWkwAC1pQAAtaVAALWlwAC1pgAAtbXAALW2QAC1tsAAtbdAALW4AAC1uEAAtbiAALW4wAC1uQAAtbmAALW6AAC1ukAAtbqAALW7AAC1u0AAtcsAALXLgAC1zAAAtcyAALXNQAC1zYAAtc3AALXOAAC1zkAAtc7AALXPQAC1z4AAtc/AALXQQAC10IAAteNAALXsAAC19AAAtfwAALX8gAC1/QAAtf2AALX+AAC1/sAAtf8AALX/QAC2AAAAtgBAALYAwAC2AQAAtgGAALYCQAC2AoAAtgLAALYDgAC2A8AAtgUAALYIQAC2CYAAtgoAALYKgAC2C8AAtgyAALYNQAC2DcAAthcAALYgAAC2KcAAtjLAALYzgAC2NAAAtjSAALY1AAC2NYAAtjYAALY2QAC2NwAAtjpAALY+gAC2PwAAtj+AALZAAAC2QIAAtkEAALZBgAC2QgAAtkKAALZGwAC2R4AAtkhAALZJAAC2ScAAtkqAALZLQAC2TAAAtkzAALZNQAC2XQAAtl2AALZeAAC2XoAAtl9AALZfgAC2X8AAtmAAALZgQAC2YMAAtmFAALZhgAC2YcAAtmJAALZigAC2ckAAtnLAALZzQAC2c8AAtnSAALZ0wAC2dQAAtnVAALZ1gAC2dgAAtnaAALZ2wAC2dwAAtneAALZ3wAC2h4AAtogAALaIwAC2iUAAtooAALaKQAC2ioAAtorAALaLAAC2i4AAtowAALaMQAC2jIAAto0AALaNQAC2kIAAtpDAALaRAAC2kYAAtqFAALahwAC2okAAtqLAALajgAC2o8AAtqQAALakQAC2pIAAtqUAALalgAC2pcAAtqYAALamgAC2psAAtraAALa3AAC2t4AAtrgAALa4wAC2uQAAtrlAALa5gAC2ucAAtrpAALa6wAC2uwAAtrtAALa7wAC2vAAAtsvAALbMQAC2zMAAts1AALbOAAC2zkAAts6AALbOwAC2zwAAts+AALbQAAC20EAAttCAALbRAAC20UAAtuEAALbhgAC24gAAtuKAALbjQAC244AAtuPAALbkAAC25EAAtuTAALblQAC25YAAtuXAALbmQAC25oAAtvZAALb2wAC290AAtvfAALb4gAC2+MAAtvkAALb5QAC2+YAAtvoAALb6gAC2+sAAtvsAALb7gAC2+8AAtwUAALcOAAC3F8AAtyDAALchgAC3IgAAtyKAALcjAAC3I4AAtyQAALckQAC3JQAAtyhAALcsAAC3LIAAty0AALctgAC3LgAAty6AALcvAAC3L4AAtzNAALc0AAC3NMAAtzWAALc2QAC3NwAAtzfAALc4gAC3OQAAt0jAALdJQAC3ScAAt0pAALdLAAC3S0AAt0uAALdLwAC3TAAAt0yAALdNAAC3TUAAt02AALdOAAC3TkAAt14AALdegAC3XwAAt1+AALdgQAC3YIAAt2DAALdhAAC3YUAAt2HAALdiQAC3YoAAt2LAALdjQAC3Y4AAt3NAALdzwAC3dEAAt3TAALd1gAC3dcAAt3YAALd2QAC3doAAt3cAALd3gAC3d8AAt3gAALd4gAC3eMAAt4iAALeJAAC3iYAAt4oAALeKwAC3iwAAt4tAALeLgAC3i8AAt4xAALeMwAC3jQAAt41AALeNwAC3jgAAt53AALeeQAC3nsAAt59AALegAAC3oEAAt6CAALegwAC3oQAAt6GAALeiAAC3okAAt6KAALejAAC3o0AAt7MAALezgAC3tAAAt7SAALe1QAC3tYAAt7XAALe2AAC3tkAAt7bAALe3QAC3t4AAt7fAALe4QAC3uIAAt8hAALfIwAC3yUAAt8nAALfKgAC3ysAAt8sAALfLQAC3y4AAt8wAALfMgAC3zMAAt80AALfNgAC3zcAAt9AAALfQQAC30MAAt+GAALfqgAC384AAt/xAALgGAAC4DgAAuBfAALghgAC4KYAAuDKAALg7gAC4PAAAuDzAALg9QAC4PcAAuD5AALg/AAC4P8AAuEBAALhAwAC4QYAAuEIAALhCgAC4Q0AAuEQAALhEQAC4RYAAuEjAALhJgAC4SgAAuErAALhLgAC4TAAAuFVAALheQAC4aAAAuHEAALhxwAC4ckAAuHLAALhzQAC4c8AAuHRAALh0gAC4dUAAuHiAALh9QAC4fcAAuH5AALh+wAC4f0AAuH/AALiAQAC4gMAAuIFAALiBwAC4hoAAuIdAALiIAAC4iMAAuImAALiKQAC4iwAAuIvAALiMgAC4jUAAuI3AALidgAC4ngAAuJ7AALifQAC4oAAAuKBAALiggAC4oMAAuKEAALihgAC4ogAAuKJAALiigAC4owAAuKNAALilgAC4pcAAuKZAALi2AAC4toAAuLcAALi3gAC4uEAAuLiAALi4wAC4uQAAuLlAALi5wAC4ukAAuLqAALi6wAC4u0AAuLuAALjLQAC4y8AAuMyAALjNAAC4zcAAuM4AALjOQAC4zoAAuM7AALjPQAC4z8AAuNAAALjQQAC40MAAuNEAALjTQAC404AAuNQAALjjwAC45EAAuOTAALjlQAC45gAAuOZAALjmgAC45sAAuOcAALjngAC46AAAuOhAALjogAC46QAAuOlAALj5AAC4+YAAuPpAALj6wAC4+4AAuPvAALj8AAC4/EAAuPyAALj9AAC4/YAAuP3AALj+AAC4/oAAuP7AALkBAAC5AUAAuQHAALkRgAC5EgAAuRKAALkTAAC5E8AAuRQAALkUQAC5FIAAuRTAALkVQAC5FcAAuRYAALkWQAC5FsAAuRcAALkmwAC5J0AAuSgAALkogAC5KUAAuSmAALkpwAC5KgAAuSpAALkqwAC5K0AAuSuAALkrwAC5LEAAuSyAALkvwAC5MAAAuTBAALkwwAC5QIAAuUEAALlBgAC5QgAAuULAALlDAAC5Q0AAuUOAALlDwAC5REAAuUTAALlFAAC5RUAAuUXAALlGAAC5VcAAuVZAALlXAAC5V4AAuVhAALlYgAC5WMAAuVkAALlZQAC5WcAAuVpAALlagAC5WsAAuVtAALlbgAC5YoAAuWXAALlogAC5aUAAuWoAALlqwAC5a4AAuWxAALlvAAC5b8AAuXCAALlxQAC5cgAAuXLAALlzQAC5eAAAuXuAALl9wAC5gkAAuYRAALmXAAC5n8AAuafAALmvwAC5sEAAubDAALmxQAC5scAAubKAALmywAC5swAAubPAALm0AAC5tIAAubTAALm1QAC5tgAAubZAALm2gAC5t0AAubeAALm4wAC5vAAAub1AALm9wAC5vkAAub+AALnAQAC5wQAAucGAALnKwAC508AAud2AALnmgAC550AAuefAALnoQAC56MAAuelAALnpwAC56gAAuerAALnuAAC58kAAufLAALnzQAC588AAufRAALn0wAC59UAAufXAALn2QAC5+oAAuftAALn8AAC5/MAAuf2AALn+QAC5/wAAuf/AALoAgAC6AQAAuhDAALoRQAC6EcAAuhJAALoTAAC6E0AAuhOAALoTwAC6FAAAuhSAALoVAAC6FUAAuhWAALoWAAC6FkAAuiYAALomgAC6JwAAuieAALooQAC6KIAAuijAALopAAC6KUAAuinAALoqQAC6KoAAuirAALorQAC6K4AAujtAALo7wAC6PIAAuj0AALo9wAC6PgAAuj5AALo+gAC6PsAAuj9AALo/wAC6QAAAukBAALpAwAC6QQAAukRAALpEgAC6RMAAukVAALpVAAC6VYAAulYAALpWgAC6V0AAuleAALpXwAC6WAAAulhAALpYwAC6WUAAulmAALpZwAC6WkAAulqAALpqQAC6asAAumtAALprwAC6bIAAumzAALptAAC6bUAAum2AALpuAAC6boAAum7AALpvAAC6b4AAum/AALp/gAC6gAAAuoCAALqBAAC6gcAAuoIAALqCQAC6goAAuoLAALqDQAC6g8AAuoQAALqEQAC6hMAAuoUAALqUwAC6lUAAupXAALqWQAC6lwAAupdAALqXgAC6l8AAupgAALqYgAC6mQAAuplAALqZgAC6mgAAuppAALqqAAC6qoAAuqsAALqrgAC6rEAAuqyAALqswAC6rQAAuq1AALqtwAC6rkAAuq6AALquwAC6r0AAuq+AALq4wAC6wcAAusuAALrUgAC61UAAutXAALrWQAC61sAAutdAALrXwAC62AAAutjAALrcAAC638AAuuBAALrgwAC64UAAuuHAALriQAC64sAAuuNAALrnAAC658AAuuiAALrpQAC66gAAuurAALrrgAC67EAAuuzAALr8gAC6/QAAuv2AALr+AAC6/sAAuv8AALr/QAC6/4AAuv/AALsAQAC7AMAAuwEAALsBQAC7AcAAuwIAALsRwAC7EkAAuxLAALsTQAC7FAAAuxRAALsUgAC7FMAAuxUAALsVgAC7FgAAuxZAALsWgAC7FwAAuxdAALsnAAC7J4AAuygAALsogAC7KUAAuymAALspwAC7KgAAuypAALsqwAC7K0AAuyuAALsrwAC7LEAAuyyAALs8QAC7PMAAuz2AALs+AAC7PsAAuz8AALs/QAC7P4AAuz/AALtAQAC7QMAAu0EAALtBQAC7QcAAu0IAALtRwAC7UkAAu1LAALtTQAC7VAAAu1RAALtUgAC7VMAAu1UAALtVgAC7VgAAu1ZAALtWgAC7VwAAu1dAALtnAAC7Z4AAu2hAALtowAC7aYAAu2nAALtqAAC7akAAu2qAALtrAAC7a4AAu2vAALtsAAC7bIAAu2zAALt2gAC7hkAAu4bAALuHQAC7h8AAu4iAALuIwAC7iQAAu4lAALuJgAC7igAAu4qAALuKwAC7iwAAu4uAALuLwAC7noAAu6dAALuvQAC7t0AAu7fAALu4QAC7uMAAu7lAALu6AAC7ukAAu7qAALu7QAC7u4AAu7wAALu8QAC7vMAAu72AALu9wAC7vgAAu77AALu/AAC7wEAAu8OAALvEwAC7xUAAu8XAALvHAAC7x8AAu8iAALvJAAC70kAAu9tAALvlAAC77gAAu+7AALvvQAC778AAu/BAALvwwAC78UAAu/GAALvyQAC79YAAu/nAALv6QAC7+sAAu/tAALv7wAC7/EAAu/zAALv9QAC7/cAAvAIAALwCwAC8A4AAvARAALwFAAC8BcAAvAaAALwHQAC8CAAAvAiAALwYQAC8GMAAvBlAALwZwAC8GoAAvBrAALwbAAC8G0AAvBuAALwcAAC8HIAAvBzAALwdAAC8HYAAvB3AALwtgAC8LgAAvC6AALwvAAC8L8AAvDAAALwwQAC8MIAAvDDAALwxQAC8McAAvDIAALwyQAC8MsAAvDMAALxCwAC8Q0AAvEQAALxEgAC8RUAAvEWAALxFwAC8RgAAvEZAALxGwAC8R0AAvEeAALxHwAC8SEAAvEiAALxLwAC8TAAAvExAALxMwAC8XIAAvF0AALxdgAC8XgAAvF7AALxfAAC8X0AAvF+AALxfwAC8YEAAvGDAALxhAAC8YUAAvGHAALxiAAC8ccAAvHJAALxywAC8c0AAvHQAALx0QAC8dIAAvHTAALx1AAC8dYAAvHYAALx2QAC8doAAvHcAALx3QAC8hwAAvIeAALyIAAC8iIAAvIlAALyJgAC8icAAvIoAALyKQAC8isAAvItAALyLgAC8i8AAvIxAALyMgAC8nEAAvJzAALydQAC8ncAAvJ6AALyewAC8nwAAvJ9AALyfgAC8oAAAvKCAALygwAC8oQAAvKGAALyhwAC8sYAAvLIAALyygAC8swAAvLPAALy0AAC8tEAAvLSAALy0wAC8tUAAvLXAALy2AAC8tkAAvLbAALy3AAC8wEAAvMlAALzTAAC83AAAvNzAALzdQAC83cAAvN5AALzewAC830AAvN+AALzgQAC844AAvOdAALznwAC86EAAvOjAALzpQAC86cAAvOpAALzqwAC87oAAvO9AALzwAAC88MAAvPGAALzyQAC88wAAvPPAALz0QAC9BAAAvQSAAL0FAAC9BYAAvQZAAL0GgAC9BsAAvQcAAL0HQAC9B8AAvQhAAL0IgAC9CMAAvQlAAL0JgAC9GUAAvRnAAL0aQAC9GsAAvRuAAL0bwAC9HAAAvRxAAL0cgAC9HQAAvR2AAL0dwAC9HgAAvR6AAL0ewAC9LoAAvS8AAL0vgAC9MAAAvTDAAL0xAAC9MUAAvTGAAL0xwAC9MkAAvTLAAL0zAAC9M0AAvTPAAL00AAC9Q8AAvURAAL1FAAC9RYAAvUZAAL1GgAC9RsAAvUcAAL1HQAC9R8AAvUhAAL1IgAC9SMAAvUlAAL1JgAC9WUAAvVnAAL1aQAC9WsAAvVuAAL1bwAC9XAAAvVxAAL1cgAC9XQAAvV2AAL1dwAC9XgAAvV6AAL1ewAC9boAAvW8AAL1vwAC9cEAAvXEAAL1xQAC9cYAAvXHAAL1yAAC9coAAvXMAAL1zQAC9c4AAvXQAAL10QAC9fgAAvY3AAL2OQAC9jsAAvY9AAL2QAAC9kEAAvZ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mAAMTZwADE2oAAxNrAAMTcAADE30AAxOCAAMThAADE4YAAxOLAAMTjgADE5EAAxOTAAMTuAADE9wAAxQDAAMUJwADFCoAAxQsAAMULgADFDAAAxQyAAMUNAADFDUAAxQ4AAMURQADFFYAAxRYAAMUWgADFFwAAxReAAMUYAADFGIAAxRkAAMUZgADFHcAAxR6AAMUfQADFIAAAxSDAAMUhgADFIkAAxSMAAMUjwADFJEAAxTQAAMU0gADFNQAAxTWAAMU2QADFNoAAxTbAAMU3AADFN0AAxTfAAMU4QADFOIAAxTjAAMU5QADFOYAAxUlAAMVJwADFSkAAxUrAAMVLgADFS8AAxUwAAMVMQADFTIAAxU0AAMVNgADFTcAAxU4AAMVOgADFTsAAxV6AAMVfAADFX8AAxWBAAMVhAADFYUAAxWGAAMVhwADFYgAAxWKAAMVjAADFY0AAxWOAAMVkAADFZEAAxWeAAMVnwADFaAAAxWiAAMV4QADFeMAAxXlAAMV5wADFeoAAxXrAAMV7AADFe0AAxXuAAMV8AADFfIAAxXzAAMV9AADFfYAAxX3AAMWNgADFjgAAxY6AAMWPAADFj8AAxZAAAMWQQADFkIAAxZDAAMWRQADFkcAAxZIAAMWSQADFksAAxZMAAMWiwADFo0AAxaPAAMWkQADFpQAAxaVAAMWlgADFpcAAxaYAAMWmgADFpwAAxadAAMWngADFqAAAxahAAMW4AADFuIAAxbkAAMW5gADFukAAxbqAAMW6wADFuwAAxbtAAMW7wADFvEAAxbyAAMW8wADFvUAAxb2AAMXNQADFzcAAxc5AAMXOwADFz4AAxc/AAMXQAADF0EAAxdCAAMXRAADF0YAAxdHAAMXSAADF0oAAxdLAAMXcAADF5QAAxe7AAMX3wADF+IAAxfkAAMX5gADF+gAAxfqAAMX7AADF+0AAxfwAAMX/QADGAwAAxgOAAMYEAADGBIAAxgUAAMYFgADGBgAAxgaAAMYKQADGCwAAxgvAAMYMgADGDUAAxg4AAMYOwADGD4AAxhAAAMYfwADGIEAAxiDAAMYhQADGIgAAxiJAAMYigADGIsAAxiMAAMYjgADGJAAAxiRAAMYkgADGJQAAxiVAAMY1AADGNYAAxjYAAMY2gADGN0AAxjeAAMY3wADGOAAAxjhAAMY4wADGOUAAxjmAAMY5wADGOkAAxjqAAMZKQADGSsAAxktAAMZLwADGTIAAxkzAAMZNAADGTUAAxk2AAMZOAADGToAAxk7AAMZPAADGT4AAxk/AAMZfgADGYAAAxmCAAMZhAADGYcAAxmIAAMZiQADGYoAAxmLAAMZjQADGY8AAxmQAAMZkQADGZMAAxmUAAMZ0wADGdUAAxnXAAMZ2QADGdwAAxndAAMZ3gADGd8AAxngAAMZ4gADGeQAAxnlAAMZ5gADGegAAxnpAAMaKAADGioAAxosAAMaLgADGjEAAxoyAAMaMwADGjQAAxo1AAMaNwADGjkAAxo6AAMaOwADGj0AAxo+AAMafQADGn8AAxqBAAMagwADGoYAAxqHAAMaiAADGokAAxqKAAMajAADGo4AAxqPAAMakAADGpIAAxqTAAMa3gADGwEAAxshAAMbQQADG0MAAxtFAAMbRwADG0kAAxtMAAMbTQADG04AAxtRAAMbUgADG1QAAxtVAAMbVwADG1oAAxtbAAMbXAADG18AAxtgAAMbZQADG3IAAxt3AAMbeQADG3sAAxuAAAMbgwADG4YAAxuIAAMbrQADG9EAAxv4AAMcHAADHB8AAxwhAAMcIwADHCUAAxwnAAMcKQADHCoAAxwtAAMcOgADHEsAAxxNAAMcTwADHFEAAxxTAAMcVQADHFcAAxxZAAMcWwADHGwAAxxvAAMccgADHHUAAxx4AAMcewADHH4AAxyBAAMchAADHIYAAxzFAAMcxwADHMkAAxzLAAMczgADHM8AAxzQAAMc0QADHNIAAxzUAAMc1gADHNcAAxzYAAMc2gADHNsAAx0aAAMdHAADHR4AAx0gAAMdIwADHSQAAx0lAAMdJgADHScAAx0pAAMdKwADHSwAAx0tAAMdLwADHTAAAx1vAAMdcQADHXQAAx12AAMdeQADHXoAAx17AAMdfAADHX0AAx1/AAMdgQADHYIAAx2DAAMdhQADHYYAAx2TAAMdlAADHZUAAx2XAAMd1gADHdgAAx3aAAMd3AADHd8AAx3gAAMd4QADHeIAAx3jAAMd5QADHecAAx3oAAMd6QADHesAAx3sAAMeKwADHi0AAx4vAAMeMQADHjQAAx41AAMeNgADHjcAAx44AAMeOgADHjwAAx49AAMePgADHkAAAx5BAAMegAADHoIAAx6EAAMehgADHokAAx6KAAMeiwADHowAAx6NAAMejwADHpEAAx6SAAMekwADHpUAAx6WAAMe1QADHtcAAx7ZAAMe2wADHt4AAx7fAAMe4AADHuEAAx7iAAMe5AADHuYAAx7nAAMe6AADHuoAAx7rAAMfKgADHywAAx8uAAMfMAADHzMAAx80AAMfNQADHzYAAx83AAMfOQADHzsAAx88AAMfPQADHz8AAx9AAAMfZQADH4kAAx+wAAMf1AADH9cAAx/ZAAMf2wADH90AAx/fAAMf4QADH+IAAx/lAAMf8gADIAEAAyADAAMgBQADIAcAAyAJAAMgCwADIA0AAyAPAAMgHgADICEAAyAkAAMgJwADICoAAyAtAAMgMAADIDMAAyA1AAMgdAADIHYAAyB4AAMgegADIH0AAyB+AAMgfwADIIAAAyCBAAMggwADIIUAAyCGAAMghwADIIkAAyCKAAMgyQADIMsAAyDNAAMgzwADINIAAyDTAAMg1AADINUAAyDWAAMg2AADINoAAyDbAAMg3AADIN4AAyDfAAMhHgADISAAAyEiAAMhJAADIScAAyEoAAMhKQADISoAAyErAAMhLQADIS8AAyEwAAMhMQADITMAAyE0AAMhcwADIXUAAyF4AAMhegADIX0AAyF+AAMhfwADIYAAAyGBAAMhgwADIYUAAyGGAAMhhwADIYkAAyGKAAMhjAADIcsAAyHNAAMhzwADIdEAAyHUAAMh1QADIdYAAyHXAAMh2AADIdoAAyHcAAMh3QADId4AAyHgAAMh4QADIiAAAyIiAAMiJAADIiYAAyIpAAMiKgADIisAAyIsAAMiLQADIi8AAyIxAAMiMgADIjMAAyI1AAMiNgADInUAAyJ3AAMieQADInsAAyJ+AAMifwADIoAAAyKBAAMiggADIoQAAyKGAAMihwADIogAAyKKAAMiiwADIpQAAyKVAAMilwADItYAAyLYAAMi2gADItwAAyLfAAMi4AADIuEAAyLiAAMi4wADIuUAAyLnAAMi6AADIukAAyLrAAMi7AADIysAAyMtAAMjLwADIzEAAyM0AAMjNQADIzYAAyM3AAMjOAADIzoAAyM8AAMjPQADIz4AAyNAAAMjQQADI4AAAyOCAAMjhAADI4YAAyOJAAMjigADI4sAAyOMAAMjjQADI48AAyORAAMjkgADI5MAAyOVAAMjlgADI9UAAyPXAAMj2QADI9sAAyPeAAMj3wADI+AAAyPhAAMj4gADI+QAAyPmAAMj5wADI+gAAyPqAAMj6wADJCoAAyQsAAMkLgADJDAAAyQzAAMkNAADJDUAAyQ2AAMkNwADJDkAAyQ7AAMkPAADJD0AAyQ/AAMkQAADJIsAAySuAAMkzgADJO4AAyTwAAMk8gADJPQAAyT2AAMk+QADJPoAAyT7AAMk/gADJP8AAyUBAAMlAgADJQQAAyUHAAMlCAADJQkAAyUMAAMlDQADJRIAAyUfAAMlJAADJSYAAyUoAAMlLQADJTAAAyUzAAMlNQADJVoAAyV+AAMlpQADJckAAyXMAAMlzgADJdAAAyXSAAMl1AADJdYAAyXXAAMl2gADJecAAyX4AAMl+gADJfwAAyX+AAMmAAADJgIAAyYEAAMmBgADJggAAyYZAAMmHAADJh8AAyYiAAMmJQADJigAAyYrAAMmLgADJjEAAyYzAAMmcgADJnQAAyZ2AAMmeAADJnsAAyZ8AAMmfQADJn4AAyZ/AAMmgQADJoMAAyaEAAMmhQADJocAAyaIAAMmxwADJskAAybLAAMmzQADJtAAAybRAAMm0gADJtMAAybUAAMm1gADJtgAAybZAAMm2gADJtwAAybdAAMnHAADJx4AAychAAMnIwADJyYAAycnAAMnKAADJykAAycqAAMnLAADJy4AAycvAAMnMAADJzIAAyczAAMnQAADJ0EAAydCAAMnRAADJ4MAAyeFAAMnhwADJ4kAAyeMAAMnjQADJ44AAyePAAMnkAADJ5IAAyeUAAMnlQADJ5YAAyeYAAMnmQADJ9gAAyfaAAMn3AADJ94AAyfhAAMn4gADJ+MAAyfkAAMn5QADJ+cAAyfpAAMn6gADJ+sAAyftAAMn7gADKC0AAygvAAMoMQADKDMAAyg2AAMoNwADKDgAAyg5AAMoOgADKDwAAyg+AAMoPwADKEAAAyhCAAMoQwADKIIAAyiEAAMohgADKIgAAyiLAAMojAADKI0AAyiOAAMojwADKJEAAyiTAAMolAADKJUAAyiXAAMomAADKNcAAyjZAAMo2wADKN0AAyjgAAMo4QADKOIAAyjjAAMo5AADKOYAAyjoAAMo6QADKOoAAyjsAAMo7QADKRIAAyk2AAMpXQADKYEAAymEAAMphgADKYgAAymKAAMpjAADKY4AAymPAAMpkgADKZ8AAymuAAMpsAADKbIAAym0AAMptgADKbgAAym6AAMpvAADKcsAAynOAAMp0QADKdQAAynXAAMp2gADKd0AAyngAAMp4gADKiEAAyojAAMqJQADKicAAyoqAAMqKwADKiwAAyotAAMqLgADKjAAAyoyAAMqMwADKjQAAyo2AAMqNwADKnYAAyp4AAMqegADKnwAAyp/AAMqgAADKoEAAyqCAAMqgwADKoUAAyqHAAMqiAADKokAAyqLAAMqjAADKssAAyrNAAMqzwADKtEAAyrUAAMq1QADKtYAAyrXAAMq2AADKtoAAyrcAAMq3QADKt4AAyrgAAMq4QADKyAAAysiAAMrJAADKyYAAyspAAMrKgADKysAAyssAAMrLQADKy8AAysxAAMrMgADKzMAAys1AAMrNgADK3UAAyt3AAMreQADK3sAAyt+AAMrfwADK4AAAyuBAAMrggADK4QAAyuGAAMrhwADK4gAAyuKAAMriwADK8oAAyvMAAMrzgADK9AAAyvTAAMr1AADK9UAAyvWAAMr1wADK9kAAyvbAAMr3AADK90AAyvfAAMr4AADLB8AAywhAAMsIwADLCUAAywoAAMsKQADLCoAAywrAAMsLAADLC4AAywwAAMsMQADLDIAAyw0AAMsNQADLD4AAyw/AAMsQQADLIQAAyyoAAMszAADLO8AAy0WAAMtNgADLV0AAy2EAAMtpAADLcgAAy3sAAMt7gADLfEAAy3zAAMt9QADLfcAAy36AAMt/QADLf8AAy4BAAMuBAADLgYAAy4IAAMuCwADLg4AAy4PAAMuFAADLiEAAy4kAAMuJgADLikAAy4sAAMuLgADLlMAAy53AAMungADLsIAAy7FAAMuxwADLskAAy7LAAMuzQADLs8AAy7QAAMu0wADLuAAAy7zAAMu9QADLvcAAy75AAMu+wADLv0AAy7/AAMvAQADLwMAAy8FAAMvGAADLxsAAy8eAAMvIQADLyQAAy8nAAMvKgADLy0AAy8wAAMvMwADLzUAAy90AAMvdgADL3kAAy97AAMvfgADL38AAy+AAAMvgQADL4IAAy+EAAMvhgADL4cAAy+IAAMvigADL4sAAy+UAAMvlQADL5cAAy/WAAMv2AADL9oAAy/cAAMv3wADL+AAAy/hAAMv4gADL+MAAy/lAAMv5wADL+gAAy/pAAMv6wADL+wAAzArAAMwLQADMDAAAzAyAAMwNQADMDYAAzA3AAMwOAADMDkAAzA7AAMwPQADMD4AAzA/AAMwQQADMEIAAzBLAAMwTAADME4AAzCNAAMwjwADMJEAAzCTAAMwlgADMJcAAzCYAAMwmQADMJoAAzCcAAMwngADMJ8AAzCgAAMwogADMKMAAzDiAAMw5AADMOcAAzDpAAMw7AADMO0AAzDuAAMw7wADMPAAAzDyAAMw9AADMPUAAzD2AAMw+AADMPkAAzECAAMxAwADMQUAAzFEAAMxRgADMUgAAzFKAAMxTQADMU4AAzFPAAMxUAADMVEAAzFTAAMxVQADMVYAAzFXAAMxWQADMVoAAzGZAAMxmwADMZ4AAzGgAAMxowADMaQAAzGlAAMxpgADMacAAzGpAAMxqwADMawAAzGtAAMxrwADMbAAAzG9AAMxvgADMb8AAzHBAAMyAAADMgIAAzIEAAMyBgADMgkAAzIKAAMyCwADMgwAAzINAAMyDwADMhEAAzISAAMyEwADMhUAAzIWAAMyVQADMlcAAzJaAAMyXAADMl8AAzJgAAMyYQADMmIAAzJjAAMyZQADMmcAAzJoAAMyaQADMmsAAzJsAAMyeAADMoUAAzKKAAMyjQADMpAAAzKVAAMymAADMpsAAzKdAAMyowADMq4AAzL5AAMzHAADMzwAAzNcAAMzXgADM2AAAzNiAAMzZAADM2cAAzNoAAMzaQADM2wAAzNtAAMzbwADM3AAAzNyAAMzdQADM3YAAzN3AAMzegADM3sAAzOEAAMzkQADM5YAAzOYAAMzmgADM58AAzOiAAMzpQADM6cAAzPMAAMz8AADNBcAAzQ7AAM0PgADNEAAAzRCAAM0RAADNEYAAzRIAAM0SQADNEwAAzRZAAM0agADNGwAAzRuAAM0cAADNHIAAzR0AAM0dgADNHgAAzR6AAM0iwADNI4AAzSRAAM0lAADNJcAAzSaAAM0nQADNKAAAzSjAAM0pQADNOQAAzTmAAM06AADNOoAAzTtAAM07gADNO8AAzTwAAM08QADNPMAAzT1AAM09gADNPcAAzT5AAM0+gADNTkAAzU7AAM1PQADNT8AAzVCAAM1QwADNUQAAzVFAAM1RgADNUgAAzVKAAM1SwADNUwAAzVOAAM1TwADNY4AAzWQAAM1kwADNZUAAzWYAAM1mQADNZoAAzWbAAM1nAADNZ4AAzWgAAM1oQADNaIAAzWkAAM1pQADNbIAAzWzAAM1tAADNbYAAzX1AAM19wADNfkAAzX7AAM1/gADNf8AAzYAAAM2AQADNgIAAzYEAAM2BgADNgcAAzYIAAM2CgADNgsAAzZKAAM2TAADNk4AAzZQAAM2UwADNlQAAzZVAAM2VgADNlcAAzZZAAM2WwADNlwAAzZdAAM2XwADNmAAAzafAAM2oQADNqMAAzalAAM2qAADNqkAAzaqAAM2qwADNqwAAzauAAM2sAADNrEAAzayAAM2tAADNrUAAzb0AAM29gADNvgAAzb6AAM2/QADNv4AAzb/AAM3AAADNwEAAzcDAAM3BQADNwYAAzcHAAM3CQADNwoAAzdJAAM3SwADN00AAzdPAAM3UgADN1MAAzdUAAM3VQADN1YAAzdYAAM3WgADN1sAAzdcAAM3XgADN18AAzeEAAM3qAADN88AAzfzAAM39gADN/gAAzf6AAM3/AADN/4AAzgAAAM4AQADOAQAAzgRAAM4IAADOCIAAzgkAAM4JgADOCgAAzgqAAM4LAADOC4AAzg9AAM4QAADOEMAAzhGAAM4SQADOEwAAzhPAAM4UgADOFQAAziTAAM4lQADOJcAAziZAAM4nAADOJ0AAzieAAM4nwADOKAAAziiAAM4pAADOKUAAzimAAM4qAADOKkAAzjoAAM46gADOOwAAzjuAAM48QADOPIAAzjzAAM49AADOPUAAzj3AAM4+QADOPoAAzj7AAM4/QADOP4AAzk9AAM5PwADOUEAAzlDAAM5RgADOUcAAzlIAAM5SQADOUoAAzlMAAM5TgADOU8AAzlQAAM5UgADOVMAAzmSAAM5lAADOZYAAzmYAAM5mwADOZwAAzmdAAM5ngADOZ8AAzmhAAM5owADOaQAAzmlAAM5pwADOagAAznnAAM56QADOesAAzntAAM58AADOfEAAznyAAM58wADOfQAAzn2AAM5+AADOfkAAzn6AAM5/AADOf0AAzo8AAM6PgADOkAAAzpCAAM6RQADOkYAAzpHAAM6SAADOkkAAzpLAAM6TQADOk4AAzpPAAM6UQADOlIAAzqRAAM6kwADOpUAAzqXAAM6mgADOpsAAzqcAAM6nQADOp4AAzqgAAM6ogADOqMAAzqkAAM6pgADOqcAAzryAAM7FQADOzUAAztVAAM7VwADO1kAAztbAAM7XQADO2AAAzthAAM7YgADO2UAAztmAAM7aAADO2kAAztrAAM7bgADO28AAztwAAM7cwADO3QAAzt5AAM7hgADO4sAAzuNAAM7jwADO5QAAzuXAAM7mgADO5wAAzvBAAM75QADPAwAAzwwAAM8MwADPDUAAzw3AAM8OQADPDsAAzw9AAM8PgADPEEAAzxOAAM8XwADPGEAAzxjAAM8ZQADPGcAAzxpAAM8awADPG0AAzxvAAM8gAADPIMAAzyGAAM8iQADPIwAAzyPAAM8kgADPJUAAzyYAAM8mgADPNkAAzzbAAM83QADPN8AAzziAAM84wADPOQAAzzlAAM85gADPOgAAzzqAAM86wADPOwAAzzuAAM87wADPS4AAz0wAAM9MgADPTQAAz03AAM9OAADPTkAAz06AAM9OwADPT0AAz0/AAM9QAADPUEAAz1DAAM9RAADPYMAAz2FAAM9iAADPYoAAz2NAAM9jgADPY8AAz2QAAM9kQADPZMAAz2VAAM9lgADPZcAAz2ZAAM9mgADPacAAz2oAAM9qQADPasAAz3qAAM97AADPe4AAz3wAAM98wADPfQAAz31AAM99gADPfcAAz35AAM9+wADPfwAAz39AAM9/wADPgAAAz4/AAM+QQADPkMAAz5FAAM+SAADPkkAAz5KAAM+SwADPkwAAz5OAAM+UAADPlEAAz5SAAM+VAADPlUAAz6UAAM+lgADPpgAAz6aAAM+nQADPp4AAz6fAAM+oAADPqEAAz6jAAM+pQADPqYAAz6nAAM+qQADPqoAAz7pAAM+6wADPu0AAz7vAAM+8gADPvMAAz70AAM+9QADPvYAAz74AAM++gADPvsAAz78AAM+/gADPv8AAz8+AAM/QAADP0IAAz9EAAM/RwADP0gAAz9JAAM/SgADP0sAAz9NAAM/TwADP1AAAz9RAAM/UwADP1QAAz95AAM/nQADP8QAAz/oAAM/6wADP+0AAz/vAAM/8QADP/MAAz/1AAM/9gADP/kAA0AGAANAFQADQBcAA0AZAANAGwADQB0AA0AfAANAIQADQCMAA0AyAANANQADQDgAA0A7AANAPgADQEEAA0BEAANARwADQEkAA0CIAANAigADQIwAA0COAANAkQADQJIAA0CTAANAlAADQJUAA0CXAANAmQADQJoAA0CbAANAnQADQJ4AA0DdAANA3wADQOEAA0DjAANA5gADQOcAA0DoAANA6QADQOoAA0DsAANA7gADQO8AA0DwAANA8gADQPMAA0EyAANBNAADQTYAA0E4AANBOwADQTwAA0E9AANBPgADQT8AA0FBAANBQwADQUQAA0FFAANBRwADQUgAA0GHAANBiQADQYsAA0GNAANBkAADQZEAA0GSAANBkwADQZQAA0GWAANBmAADQZkAA0GaAANBnAADQZ0AA0HcAANB3gADQeAAA0HiAANB5QADQeYAA0HnAANB6AADQekAA0HrAANB7QADQe4AA0HvAANB8QADQfIAA0IxAANCMwADQjUAA0I3AANCOgADQjsAA0I8AANCPQADQj4AA0JAAANCQgADQkMAA0JEAANCRgADQkcAA0KGAANCiAADQooAA0KMAANCjwADQpAAA0KRAANCkgADQpMAA0KVAANClwADQpgAA0KZAANCmwADQpwAA0KlAANCpgADQqgAA0LrAANDDwADQzMAA0NWAANDfQADQ50AA0PEAAND6wADRAsAA0QvAANEUwADRFUAA0RYAANEWgADRFwAA0ReAANEYQADRGQAA0RmAANEaAADRGsAA0RtAANEbwADRHIAA0R1AANEdgADRHsAA0SIAANEiwADRI0AA0SQAANEkwADRJUAA0S6AANE3gADRQUAA0UpAANFLAADRS4AA0UwAANFMgADRTQAA0U2AANFNwADRToAA0VHAANFWgADRVwAA0VeAANFYAADRWIAA0VkAANFZgADRWgAA0VqAANFbAADRX8AA0WCAANFhQADRYgAA0WLAANFjgADRZEAA0WUAANFlwADRZoAA0WcAANF2wADRd0AA0XgAANF4gADReUAA0XmAANF5wADRegAA0XpAANF6wADRe0AA0XuAANF7wADRfEAA0XyAANF+wADRfwAA0X+AANGPQADRj8AA0ZBAANGQwADRkYAA0ZHAANGSAADRkkAA0ZKAANGTAADRk4AA0ZPAANGUAADRlIAA0ZTAANGkgADRpQAA0aXAANGmQADRpwAA0adAANGngADRp8AA0agAANGogADRqQAA0alAANGpgADRqgAA0apAANGsgADRrMAA0a1AANG9AADRvYAA0b4AANG+gADRv0AA0b+AANG/wADRwAAA0cBAANHAwADRwUAA0cGAANHBwADRwkAA0cKAANHSQADR0sAA0dOAANHUAADR1MAA0dUAANHVQADR1YAA0dXAANHWQADR1sAA0dcAANHXQADR18AA0dgAANHaQADR2oAA0dsAANHqwADR60AA0evAANHsQADR7QAA0e1AANHtgADR7cAA0e4AANHugADR7wAA0e9AANHvgADR8AAA0fBAANIAAADSAIAA0gFAANIBwADSAoAA0gLAANIDAADSA0AA0gOAANIEAADSBIAA0gTAANIFAADSBYAA0gXAANIJAADSCUAA0gmAANIKAADSGcAA0hpAANIawADSG0AA0hwAANIcQADSHIAA0hzAANIdAADSHYAA0h4AANIeQADSHoAA0h8AANIfQADSLwAA0i+AANIwQADSMMAA0jGAANIxwADSMgAA0jJAANIygADSMwAA0jOAANIzwADSNAAA0jSAANI0wADSOsAA0j4AANJAwADSQYAA0kJAANJDAADSQ8AA0kSAANJHQADSSAAA0kjAANJJgADSSkAA0ksAANJLgADSTcAA0lAAANJSgADSZUAA0m4AANJ2AADSfgAA0n6AANJ/AADSf4AA0oAAANKAwADSgQAA0oFAANKCAADSgkAA0oLAANKDAADSg4AA0oRAANKEgADShMAA0oWAANKFwADShwAA0opAANKLgADSjAAA0oyAANKNwADSjoAA0o9AANKPwADSmQAA0qIAANKrwADStMAA0rWAANK2AADStoAA0rcAANK3gADSuAAA0rhAANK5AADSvEAA0sCAANLBAADSwYAA0sIAANLCgADSwwAA0sOAANLEAADSxIAA0sjAANLJgADSykAA0ssAANLLwADSzIAA0s1AANLOAADSzsAA0s9AANLfAADS34AA0uAAANLggADS4UAA0uGAANLhwADS4gAA0uJAANLiwADS40AA0uOAANLjwADS5EAA0uSAANL0QADS9MAA0vVAANL1wADS9oAA0vbAANL3AADS90AA0veAANL4AADS+IAA0vjAANL5AADS+YAA0vnAANMJgADTCgAA0wrAANMLQADTDAAA0wxAANMMgADTDMAA0w0AANMNgADTDgAA0w5AANMOgADTDwAA0w9AANMSgADTEsAA0xMAANMTgADTI0AA0yPAANMkQADTJMAA0yWAANMlwADTJgAA0yZAANMmgADTJwAA0yeAANMnwADTKAAA0yiAANMowADTOIAA0zkAANM5gADTOgAA0zrAANM7AADTO0AA0zuAANM7wADTPEAA0zzAANM9AADTPUAA0z3AANM+AADTTcAA005AANNOwADTT0AA01AAANNQQADTUIAA01DAANNRAADTUYAA01IAANNSQADTUoAA01MAANNTQADTYwAA02OAANNkAADTZIAA02VAANNlgADTZcAA02YAANNmQADTZsAA02dAANNngADTZ8AA02hAANNogADTeEAA03jAANN5QADTecAA03qAANN6wADTewAA03tAANN7gADTfAAA03yAANN8wADTfQAA032AANN9wADThwAA05AAANOZwADTosAA06OAANOkAADTpIAA06UAANOlgADTpgAA06ZAANOnAADTqkAA064AANOugADTrwAA06+AANOwAADTsIAA07EAANOxgADTtUAA07YAANO2wADTt4AA07hAANO5AADTucAA07qAANO7AADTysAA08tAANPLwADTzEAA080AANPNQADTzYAA083AANPOAADTzoAA088AANPPQADTz4AA09AAANPQQADT4AAA0+CAANPhAADT4YAA0+JAANPigADT4sAA0+MAANPjQADT48AA0+RAANPkgADT5MAA0+VAANPlgADT9UAA0/XAANP2QADT9sAA0/eAANP3wADT+AAA0/hAANP4gADT+QAA0/mAANP5wADT+gAA0/qAANP6wADUCoAA1AsAANQLwADUDEAA1A0AANQNQADUDYAA1A3AANQOAADUDoAA1A8AANQPQADUD4AA1BAAANQQQADUEQAA1CDAANQhQADUIcAA1CJAANQjAADUI0AA1COAANQjwADUJAAA1CSAANQlAADUJUAA1CWAANQmAADUJkAA1DYAANQ2gADUNwAA1DeAANQ4QADUOIAA1DjAANQ5AADUOUAA1DnAANQ6QADUOoAA1DrAANQ7QADUO4AA1EtAANRLwADUTEAA1EzAANRNgADUTcAA1E4AANROQADUToAA1E8AANRPgADUT8AA1FAAANRQgADUUMAA1GOAANRsQADUdEAA1HxAANR8wADUfUAA1H3AANR+QADUfwAA1H9AANR/gADUgEAA1ICAANSBAADUgUAA1IHAANSCgADUgsAA1IMAANSDwADUhAAA1IVAANSIgADUicAA1IpAANSKwADUjAAA1IzAANSNgADUjgAA1JdAANSgQADUqgAA1LMAANSzwADUtEAA1LTAANS1QADUtcAA1LZAANS2gADUt0AA1LqAANS+wADUv0AA1L/AANTAQADUwMAA1MFAANTBwADUwkAA1MLAANTHAADUx8AA1MiAANTJQADUygAA1MrAANTLgADUzEAA1M0AANTNgADU3UAA1N3AANTeQADU3sAA1N+AANTfwADU4AAA1OBAANTggADU4QAA1OGAANThwADU4gAA1OKAANTiwADU8oAA1PMAANTzgADU9AAA1PTAANT1AADU9UAA1PWAANT1wADU9kAA1PbAANT3AADU90AA1PfAANT4AADVB8AA1QhAANUJAADVCYAA1QpAANUKgADVCsAA1QsAANULQADVC8AA1QxAANUMgADVDMAA1Q1AANUNgADVEMAA1REAANURQADVEcAA1SGAANUiAADVIoAA1SMAANUjwADVJAAA1SRAANUkgADVJMAA1SVAANUlwADVJgAA1SZAANUmwADVJwAA1TbAANU3QADVN8AA1ThAANU5AADVOUAA1TmAANU5wADVOgAA1TqAANU7AADVO0AA1TuAANU8AADVPEAA1UwAANVMgADVTQAA1U2AANVOQADVToAA1U7AANVPAADVT0AA1U/AANVQQADVUIAA1VDAANVRQADVUYAA1WFAANVhwADVYkAA1WLAANVjgADVY8AA1WQAANVkQADVZIAA1WUAANVlgADVZcAA1WYAANVmgADVZsAA1XaAANV3AADVd4AA1XgAANV4wADVeQAA1XlAANV5gADVecAA1XpAANV6wADVewAA1XtAANV7wADVfAAA1YVAANWOQADVmAAA1aEAANWhwADVokAA1aLAANWjQADVo8AA1aRAANWkgADVpUAA1aiAANWsQADVrMAA1a1AANWtwADVrkAA1a7AANWvQADVr8AA1bOAANW0QADVtQAA1bXAANW2gADVt0AA1bgAANW4wADVuUAA1ckAANXJgADVygAA1cqAANXLQADVy4AA1cvAANXMAADVzEAA1czAANXNQADVzYAA1c3AANXOQADVzoAA1d5AANXewADV30AA1d/AANXggADV4MAA1eEAANXhQADV4YAA1eIAANXigADV4sAA1eMAANXjgADV48AA1fOAANX0AADV9IAA1fUAANX1wADV9gAA1fZAANX2gADV9sAA1fdAANX3wADV+AAA1fhAANX4wADV+QAA1gjAANYJQADWCgAA1gqAANYLQADWC4AA1gvAANYMAADWDEAA1gzAANYNQADWDYAA1g3AANYOQADWDoAA1h5AANYewADWH0AA1h/AANYggADWIMAA1iEAANYhQADWIYAA1iIAANYigADWIsAA1iMAANYjgADWI8AA1jOAANY0AADWNIAA1jUAANY1wADWNgAA1jZAANY2gADWNsAA1jdAANY3wADWOAAA1jhAANY4wADWOQAA1kjAANZJQADWScAA1kpAANZLAADWS0AA1kuAANZLwADWTAAA1kyAANZNAADWTUAA1k2AANZOAADWTkAA1mEAANZpwADWccAA1nnAANZ6QADWesAA1ntAANZ7wADWfIAA1nzAANZ9AADWfcAA1n4AANZ+gADWfsAA1n9AANaAAADWgEAA1oCAANaBQADWgYAA1oLAANaGAADWh0AA1ofAANaIQADWiYAA1opAANaLAADWi4AA1pTAANadwADWp4AA1rCAANaxQADWscAA1rJAANaywADWs0AA1rPAANa0AADWtMAA1rgAANa8QADWvMAA1r1AANa9wADWvkAA1r7AANa/QADWv8AA1sBAANbEgADWxUAA1sYAANbGwADWx4AA1shAANbJAADWycAA1sqAANbLAADW2sAA1ttAANbbwADW3EAA1t0AANbdQADW3YAA1t3AANbeAADW3oAA1t8AANbfQADW34AA1uAAANbgQADW8AAA1vCAANbxAADW8YAA1vJAANbygADW8sAA1vMAANbzQADW88AA1vRAANb0gADW9MAA1vVAANb1gADXBUAA1wXAANcGgADXBwAA1wfAANcIAADXCEAA1wiAANcIwADXCUAA1wnAANcKAADXCkAA1wrAANcLAADXDkAA1w6AANcOwADXD0AA1x8AANcfgADXIAAA1yCAANchQADXIYAA1yHAANciAADXIkAA1yLAANcjQADXI4AA1yPAANckQADXJIAA1zRAANc0wADXNUAA1zXAANc2gADXNsAA1zcAANc3QADXN4AA1zgAANc4gADXOMAA1zkAANc5gADXOcAA10mAANdKAADXSoAA10sAANdLwADXTAAA10xAANdMgADXTMAA101AANdNwADXTgAA105AANdOwADXTwAA117AANdfQADXX8AA12BAANdhAADXYUAA12GAANdhwADXYgAA12KAANdjAADXY0AA12OAANdkAADXZEAA13QAANd0gADXdQAA13WAANd2QADXdoAA13bAANd3AADXd0AA13fAANd4QADXeIAA13jAANd5QADXeYAA14LAANeLwADXlYAA156AANefQADXn8AA16BAANegwADXoUAA16HAANeiAADXosAA16YAANepwADXqkAA16rAANerQADXq8AA16xAANeswADXrUAA17EAANexwADXsoAA17NAANe0AADXtMAA17WAANe2QADXtsAA18aAANfHAADXx4AA18gAANfIwADXyQAA18lAANfJgADXycAA18pAANfKwADXywAA18tAANfLwADXzAAA19vAANfcQADX3MAA191AANfeAADX3kAA196AANfewADX3wAA19+AANfgAADX4EAA1+CAANfhAADX4UAA1/EAANfxgADX8gAA1/KAANfzQADX84AA1/PAANf0AADX9EAA1/TAANf1QADX9YAA1/XAANf2QADX9oAA2AZAANgGwADYB0AA2AfAANgIgADYCMAA2AkAANgJQADYCYAA2AoAANgKgADYCsAA2AsAANgLgADYC8AA2BuAANgcAADYHIAA2B0AANgdwADYHgAA2B5AANgegADYHsAA2B9AANgfwADYIAAA2CBAANggwADYIQAA2DDAANgxQADYMcAA2DJAANgzAADYM0AA2DOAANgzwADYNAAA2DSAANg1AADYNUAA2DWAANg2AADYNkAA2EYAANhGgADYRwAA2EeAANhIQADYSIAA2EjAANhJAADYSUAA2EnAANhKQADYSoAA2ErAANhLQADYS4AA2F5AANhnAADYbwAA2HcAANh3gADYeAAA2HiAANh5AADYecAA2HoAANh6QADYewAA2HtAANh7wADYfAAA2HyAANh9QADYfYAA2H3AANh+gADYfsAA2IAAANiDQADYhIAA2IUAANiFgADYhsAA2IeAANiIQADYiMAA2JIAANibAADYpMAA2K3AANiugADYrwAA2K+AANiwAADYsIAA2LEAANixQADYsgAA2LVAANi5gADYugAA2LqAANi7AADYu4AA2LwAANi8gADYvQAA2L2AANjBwADYwoAA2MNAANjEAADYxMAA2MWAANjGQADYxwAA2MfAANjIQADY2AAA2NiAANjZAADY2YAA2NpAANjagADY2sAA2NsAANjbQADY28AA2NxAANjcgADY3MAA2N1AANjdgADY7UAA2O3AANjuQADY7sAA2O+AANjvwADY8AAA2PBAANjwgADY8QAA2PGAANjxwADY8gAA2PKAANjywADZAoAA2QMAANkDwADZBEAA2QUAANkFQADZBYAA2QXAANkGAADZBoAA2QcAANkHQADZB4AA2QgAANkIQADZC4AA2QvAANkMAADZDIAA2RxAANkcwADZHUAA2R3AANkegADZHsAA2R8AANkfQADZH4AA2SAAANkggADZIMAA2SEAANkhgADZIcAA2TGAANkyAADZMoAA2TMAANkzwADZNAAA2TRAANk0gADZNMAA2TVAANk1wADZNgAA2TZAANk2wADZNwAA2UbAANlHQADZR8AA2UhAANlJAADZSUAA2UmAANlJwADZSgAA2UqAANlLAADZS0AA2UuAANlMAADZTEAA2VwAANlcgADZXQAA2V2AANleQADZXoAA2V7AANlfAADZX0AA2V/AANlgQADZYIAA2WDAANlhQADZYYAA2XFAANlxwADZckAA2XLAANlzgADZc8AA2XQAANl0QADZdIAA2XUAANl1gADZdcAA2XYAANl2gADZdsAA2YAAANmJAADZksAA2ZvAANmcgADZnQAA2Z2AANmeAADZnoAA2Z8AANmfQADZoAAA2aNAANmnAADZp4AA2agAANmogADZqQAA2amAANmqAADZqoAA2a5AANmvAADZr8AA2bCAANmxQADZsgAA2bLAANmzgADZtAAA2cPAANnEQADZxMAA2cVAANnGAADZxkAA2caAANnGwADZxwAA2ceAANnIAADZyEAA2ciAANnJAADZyUAA2dkAANnZgADZ2gAA2dqAANnbQADZ24AA2dvAANncAADZ3EAA2dzAANndQADZ3YAA2d3AANneQADZ3oAA2e5AANnuwADZ70AA2e/AANnwgADZ8MAA2fEAANnxQADZ8YAA2fIAANnygADZ8sAA2fMAANnzgADZ88AA2gOAANoEAADaBMAA2gVAANoGAADaBkAA2gaAANoGwADaBwAA2geAANoIAADaCEAA2giAANoJAADaCUAA2hkAANoZgADaGgAA2hqAANobQADaG4AA2hvAANocAADaHEAA2hzAANodQADaHYAA2h3AANoeQADaHoAA2i5AANouwADaL0AA2i/AANowgADaMMAA2jEAANoxQADaMYAA2jIAANoygADaMsAA2jMAANozgADaM8AA2kOAANpEAADaRIAA2kUAANpFwADaRgAA2kZAANpGgADaRsAA2kdAANpHwADaSAAA2khAANpIwADaSQAA2lvAANpkgADabIAA2nSAANp1AADadYAA2nYAANp2gADad0AA2neAANp3wADaeIAA2njAANp5QADaeYAA2noAANp6wADaewAA2ntAANp8AADafEAA2n2AANqAwADaggAA2oKAANqDAADahEAA2oUAANqFwADahkAA2o+AANqYgADaokAA2qtAANqsAADarIAA2q0AANqtgADargAA2q6AANquwADar4AA2rLAANq3AADat4AA2rgAANq4gADauQAA2rmAANq6AADauoAA2rsAANq/QADawAAA2sDAANrBgADawkAA2sMAANrDwADaxIAA2sVAANrFwADa1YAA2tYAANrWgADa1wAA2tfAANrYAADa2EAA2tiAANrYwADa2UAA2tnAANraAADa2kAA2trAANrbAADa6sAA2utAANrrwADa7EAA2u0AANrtQADa7YAA2u3AANruAADa7oAA2u8AANrvQADa74AA2vAAANrwQADbAAAA2wCAANsBQADbAcAA2wKAANsCwADbAwAA2wNAANsDgADbBAAA2wSAANsEwADbBQAA2wWAANsFwADbCQAA2wlAANsJgADbCgAA2xnAANsaQADbGsAA2xtAANscAADbHEAA2xyAANscwADbHQAA2x2AANseAADbHkAA2x6AANsfAADbH0AA2y8AANsvgADbMAAA2zCAANsxQADbMYAA2zHAANsyAADbMkAA2zLAANszQADbM4AA2zPAANs0QADbNIAA20RAANtEwADbRUAA20XAANtGgADbRsAA20cAANtHQADbR4AA20gAANtIgADbSMAA20kAANtJgADbScAA21mAANtaAADbWoAA21sAANtbwADbXAAA21xAANtcgADbXMAA211AANtdwADbXgAA215AANtewADbXwAA227AANtvQADbb8AA23BAANtxAADbcUAA23GAANtxwADbcgAA23KAANtzAADbc0AA23OAANt0AADbdEAA232AANuGgADbkEAA25lAANuaAADbmoAA25sAANubgADbnAAA25yAANucwADbnYAA26DAANukgADbpQAA26WAANumAADbpoAA26cAANungADbqAAA26vAANusgADbrUAA264AANuuwADbr4AA27BAANuxAADbsYAA28FAANvBwADbwkAA28LAANvDgADbw8AA28QAANvEQADbxIAA28UAANvFgADbxcAA28YAANvGgADbxsAA29aAANvXAADb14AA29gAANvYwADb2QAA29lAANvZgADb2cAA29pAANvawADb2wAA29tAANvbwADb3AAA2+vAANvsQADb7MAA2+1AANvuAADb7kAA2+6AANvuwADb7wAA2++AANvwAADb8EAA2/CAANvxAADb8UAA3AEAANwBgADcAkAA3ALAANwDgADcA8AA3AQAANwEQADcBIAA3AUAANwFgADcBcAA3AYAANwGgADcBsAA3BaAANwXAADcF4AA3BgAANwYwADcGQAA3BlAANwZgADcGcAA3BpAANwawADcGwAA3BtAANwbwADcHAAA3CvAANwsQADcLMAA3C1AANwuAADcLkAA3C6AANwuwADcLwAA3C+AANwwAADcMEAA3DCAANwxAADcMUAA3EEAANxBgADcQgAA3EKAANxDQADcQ4AA3EPAANxEAADcREAA3ETAANxFQADcRYAA3EXAANxGQADcRoAA3EjAANxJAADcSYAA3FpAANxjQADcbEAA3HUAANx+wADchsAA3JCAANyaQADcokAA3KtAANy0QADctMAA3LWAANy2AADctoAA3LcAANy3wADcuIAA3LkAANy5gADcukAA3LrAANy7QADcvAAA3LzAANy9AADcvkAA3MGAANzCQADcwsAA3MOAANzEQADcxMAA3M4AANzXAADc4MAA3OnAANzqgADc6wAA3OuAANzsAADc7IAA3O0AANztQADc7gAA3PFAANz2AADc9oAA3PcAANz3gADc+AAA3PiAANz5AADc+YAA3PoAANz6gADc/0AA3QAAAN0AwADdAYAA3QJAAN0DAADdA8AA3QSAAN0FQADdBgAA3QaAAN0WQADdFsAA3ReAAN0YAADdGMAA3RkAAN0ZQADdGYAA3RnAAN0aQADdGsAA3RsAAN0bQADdG8AA3RwAAN0eQADdHoAA3R8AAN0uwADdL0AA3S/AAN0wQADdMQAA3TFAAN0xgADdMcAA3TIAAN0ygADdMwAA3TNAAN0zgADdNAAA3TRAAN1EAADdRIAA3UVAAN1FwADdRoAA3UbAAN1HAADdR0AA3UeAAN1IAADdSIAA3UjAAN1JAADdSYAA3UnAAN1MAADdTEAA3UzAAN1cgADdXQAA3V2AAN1eAADdXsAA3V8AAN1fQADdX4AA3V/AAN1gQADdYMAA3WEAAN1hQADdYcAA3WIAAN1xwADdckAA3XMAAN1zgADddEAA3XSAAN10wADddQAA3XVAAN11wADddkAA3XaAAN12wADdd0AA3XeAAN15wADdegAA3XqAAN2KQADdisAA3YtAAN2LwADdjIAA3YzAAN2NAADdjUAA3Y2AAN2OAADdjoAA3Y7AAN2PAADdj4AA3Y/AAN2fgADdoAAA3aDAAN2hQADdogAA3aJAAN2igADdosAA3aMAAN2jgADdpAAA3aRAAN2kgADdpQAA3aVAAN2ogADdqMAA3akAAN2pgADduUAA3bnAAN26QADdusAA3buAAN27wADdvAAA3bxAAN28gADdvQAA3b2AAN29wADdvgAA3b6AAN2+wADdzoAA3c8AAN3PwADd0EAA3dEAAN3RQADd0YAA3dHAAN3SAADd0oAA3dMAAN3TQADd04AA3dQAAN3UQADd1wAA3dpAAN3cgADd3QAA3d2AAN3eQADd3wAA3eFAAN3iAADd4sAA3eOAAN3kQADd5MAA3ebAAN3owADd+4AA3gRAAN4MQADeFEAA3hTAAN4VQADeFcAA3hZAAN4XAADeF0AA3heAAN4YQADeGIAA3hkAAN4ZQADeGcAA3hpAAN4agADeGsAA3huAAN4bwADeHQAA3iBAAN4hgADeIgAA3iKAAN4jwADeJIAA3iVAAN4lwADeLwAA3jgAAN5BwADeSsAA3kuAAN5MAADeTIAA3k0AAN5NgADeTgAA3k5AAN5PAADeUkAA3laAAN5XAADeV4AA3lgAAN5YgADeWQAA3lmAAN5aAADeWoAA3l7AAN5fgADeYEAA3mEAAN5hwADeYoAA3mNAAN5kAADeZMAA3mVAAN51AADedYAA3nYAAN52gADed0AA3neAAN53wADeeAAA3nhAAN54wADeeUAA3nmAAN55wADeekAA3nqAAN6KQADeisAA3otAAN6LwADejIAA3ozAAN6NAADejUAA3o2AAN6OAADejoAA3o7AAN6PAADej4AA3o/AAN6fgADeoAAA3qDAAN6hQADeogAA3qJAAN6igADeosAA3qMAAN6jgADepAAA3qRAAN6kgADepQAA3qVAAN6ogADeqMAA3qkAAN6pgADeuUAA3rnAAN66QADeusAA3ruAAN67wADevAAA3rxAAN68gADevQAA3r2AAN69wADevgAA3r6AAN6+wADezoAA3s8AAN7PgADe0AAA3tDAAN7RAADe0UAA3tGAAN7RwADe0kAA3tLAAN7TAADe00AA3tPAAN7UAADe48AA3uRAAN7kwADe5UAA3uYAAN7mQADe5oAA3ubAAN7nAADe54AA3ugAAN7oQADe6IAA3ukAAN7pQADe+QAA3vmAAN76AADe+oAA3vtAAN77gADe+8AA3vwAAN78QADe/MAA3v1AAN79gADe/cAA3v5AAN7+gADfDkAA3w7AAN8PQADfD8AA3xCAAN8QwADfEQAA3xFAAN8RgADfEgAA3xKAAN8SwADfEwAA3xOAAN8TwADfHQAA3yYAAN8vwADfOMAA3zmAAN86AADfOoAA3zsAAN87gADfPAAA3zxAAN89AADfQEAA30QAAN9EgADfRQAA30WAAN9GAADfRoAA30cAAN9HgADfS0AA30wAAN9MwADfTYAA305AAN9PAADfT8AA31CAAN9RAADfYMAA32FAAN9hwADfYkAA32MAAN9jQADfY4AA32PAAN9kAADfZIAA32UAAN9lQADfZYAA32YAAN9mQADfdgAA33aAAN93AADfd4AA33hAAN94gADfeMAA33kAAN95QADfecAA33pAAN96gADfesAA33tAAN97gADfi0AA34vAAN+MQADfjMAA342AAN+NwADfjgAA345AAN+OgADfjwAA34+AAN+PwADfkAAA35CAAN+QwADfoIAA36EAAN+hgADfogAA36LAAN+jAADfo0AA36OAAN+jwADfpEAA36TAAN+lAADfpUAA36XAAN+mAADftcAA37ZAAN+2wADft0AA37gAAN+4QADfuIAA37jAAN+5AADfuYAA37oAAN+6QADfuoAA37sAAN+7QADfywAA38uAAN/MAADfzIAA381AAN/NgADfzcAA384AAN/OQADfzsAA389AAN/PgADfz8AA39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QAAOK0gADitQAA4rXAAOK2AADitkAA4raAAOK2wADit0AA4rfAAOK4AADiuEAA4rjAAOK5AADiyMAA4slAAOLJwADiykAA4ssAAOLLQADiy4AA4svAAOLMAADizIAA4s0AAOLNQADizYAA4s4AAOLOQADi3gAA4t6AAOLfAADi34AA4uBAAOLggADi4MAA4uEAAOLhQADi4cAA4uJAAOLigADi4sAA4uNAAOLjgADi80AA4vPAAOL0QADi9MAA4vWAAOL1wADi9gAA4vZAAOL2gADi9wAA4veAAOL3wADi+AAA4viAAOL4wADjCIAA4wkAAOMJgADjCgAA4wrAAOMLAADjC0AA4wuAAOMLwADjDEAA4wzAAOMNAADjDUAA4w3AAOMOAADjF0AA4yBAAOMqAADjMwAA4zPAAOM0QADjNMAA4zVAAOM1wADjNkAA4zaAAOM3QADjOoAA4z5AAOM+wADjP0AA4z/AAONAQADjQMAA40FAAONBwADjRYAA40ZAAONHAADjR8AA40iAAONJQADjSgAA40rAAONLQADjWwAA41uAAONcAADjXIAA411AAONdgADjXcAA414AAONeQADjXsAA419AAONfgADjX8AA42BAAONggADjcEAA43DAAONxQADjccAA43KAAONywADjcwAA43NAAONzgADjdAAA43SAAON0wADjdQAA43WAAON1wADjhYAA44YAAOOGgADjhwAA44fAAOOIAADjiEAA44iAAOOIwADjiUAA44nAAOOKAADjikAA44rAAOOLAADjmsAA45tAAOObwADjnEAA450AAOOdQADjnYAA453AAOOeAADjnoAA458AAOOfQADjn4AA46AAAOOgQADjsAAA47CAAOOxAADjsYAA47JAAOOygADjssAA47MAAOOzQADjs8AA47RAAOO0gADjtMAA47VAAOO1gADjxUAA48XAAOPGQADjxsAA48eAAOPHwADjyAAA48hAAOPIgADjyQAA48mAAOPJwADjygAA48qAAOPKwADj2oAA49sAAOPbgADj3AAA49zAAOPdAADj3UAA492AAOPdwADj3kAA497AAOPfAADj30AA49/AAOPgAADj8sAA4/uAAOQDgADkC4AA5AwAAOQMgADkDQAA5A2AAOQOQADkDoAA5A7AAOQPgADkD8AA5BBAAOQQgADkEQAA5BHAAOQSAADkEkAA5BMAAOQTQADkFIAA5BfAAOQZAADkGYAA5BoAAOQbQADkHAAA5BzAAOQdQADkJoAA5C+AAOQ5QADkQkAA5EMAAORDgADkRAAA5ESAAORFAADkRYAA5EXAAORGgADkScAA5E4AAOROgADkTwAA5E+AAORQAADkUIAA5FEAAORRgADkUgAA5FZAAORXAADkV8AA5FiAAORZQADkWgAA5FrAAORbgADkXEAA5FzAAORsgADkbQAA5G2AAORuAADkbsAA5G8AAORvQADkb4AA5G/AAORwQADkcMAA5HEAAORxQADkccAA5HIAAOSBwADkgkAA5ILAAOSDQADkhAAA5IRAAOSEgADkhMAA5IUAAOSFgADkhgAA5IZAAOSGgADkhwAA5IdAAOSXAADkl4AA5JhAAOSYwADkmYAA5JnAAOSaAADkmkAA5JqAAOSbAADkm4AA5JvAAOScAADknIAA5JzAAOSgAADkoEAA5KCAAOShAADksMAA5LFAAOSxwADkskAA5LMAAOSzQADks4AA5LPAAOS0AADktIAA5LUAAOS1QADktYAA5LYAAOS2QADkxgAA5MaAAOTHAADkx4AA5MhAAOTIgADkyMAA5MkAAOTJQADkycAA5MpAAOTKgADkysAA5MtAAOTLgADk20AA5NvAAOTcQADk3MAA5N2AAOTdwADk3gAA5N5AAOTegADk3wAA5N+AAOTfwADk4AAA5OCAAOTgwADk8IAA5PEAAOTxgADk8gAA5PLAAOTzAADk80AA5POAAOTzwADk9EAA5PTAAOT1AADk9UAA5PXAAOT2AADlBcAA5QZAAOUGwADlB0AA5QgAAOUIQADlCIAA5QjAAOUJAADlCYAA5QoAAOUKQADlCoAA5QsAAOULQADlFIAA5R2AAOUnQADlMEAA5TEAAOUxgADlMgAA5TKAAOUzAADlM4AA5TPAAOU0gADlN8AA5TuAAOU8AADlPIAA5T0AAOU9gADlPgAA5T6AAOU/AADlQsAA5UOAAOVEQADlRQAA5UXAAOVGgADlR0AA5UgAAOVIgADlWEAA5VjAAOVZQADlWcAA5VqAAOVawADlWwAA5VtAAOVbgADlXAAA5VyAAOVcwADlXQAA5V2AAOVdwADlbYAA5W4AAOVugADlbwAA5W/AAOVwAADlcEAA5XCAAOVwwADlcUAA5XHAAOVyAADlckAA5XLAAOVzAADlgsAA5YNAAOWDwADlhEAA5YUAAOWFQADlhYAA5YXAAOWGAADlhoAA5YcAAOWHQADlh4AA5YgAAOWIQADlmAAA5ZiAAOWZAADlmYAA5ZpAAOWagADlmsAA5ZsAAOWbQADlm8AA5ZxAAOWcgADlnMAA5Z1AAOWdgADlrUAA5a3AAOWuQADlrsAA5a+AAOWvwADlsAAA5bBAAOWwgADlsQAA5bGAAOWxwADlsgAA5bKAAOWywADlwoAA5cMAAOXDgADlxAAA5cTAAOXFAADlxUAA5cWAAOXFwADlxkAA5cbAAOXHAADlx0AA5cfAAOXIAADl18AA5dhAAOXYwADl2UAA5doAAOXaQADl2oAA5drAAOXbAADl24AA5dwAAOXcQADl3IAA5d0AAOXdQADl34AA5d/AAOXgQADl8QAA5foAAOYDAADmC8AA5hWAAOYdgADmJ0AA5jEAAOY5AADmQgAA5ksAAOZLgADmTEAA5kzAAOZNQADmTcAA5k6AAOZPQADmT8AA5lBAAOZRAADmUYAA5lIAAOZSwADmU4AA5lPAAOZVAADmWEAA5lkAAOZZgADmWkAA5lsAAOZbgADmZMAA5m3AAOZ3gADmgIAA5oFAAOaBwADmgkAA5oLAAOaDQADmg8AA5oQAAOaEwADmiAAA5ozAAOaNQADmjcAA5o5AAOaOwADmj0AA5o/AAOaQQADmkMAA5pFAAOaWAADmlsAA5peAAOaYQADmmQAA5pnAAOaagADmm0AA5pwAAOacwADmnUAA5q0AAOatgADmrkAA5q7AAOavgADmr8AA5rAAAOawQADmsIAA5rEAAOaxgADmscAA5rIAAOaygADmssAA5rUAAOa1QADmtcAA5sWAAObGAADmxoAA5scAAObHwADmyAAA5shAAObIgADmyMAA5slAAObJwADmygAA5spAAObKwADmywAA5trAAObbQADm3AAA5tyAAObdQADm3YAA5t3AAObeAADm3kAA5t7AAObfQADm34AA5t/AAObgQADm4IAA5uLAAObjAADm44AA5vNAAObzwADm9EAA5vTAAOb1gADm9cAA5vYAAOb2QADm9oAA5vcAAOb3gADm98AA5vgAAOb4gADm+MAA5wiAAOcJAADnCcAA5wpAAOcLAADnC0AA5wuAAOcLwADnDAAA5wyAAOcNAADnDUAA5w2AAOcOAADnDkAA5xCAAOcQwADnEUAA5yEAAOchgADnIgAA5yKAAOcjQADnI4AA5yPAAOckAADnJEAA5yTAAOclQADnJYAA5yXAAOcmQADnJoAA5zZAAOc2wADnN4AA5zgAAOc4wADnOQAA5zlAAOc5gADnOcAA5zpAAOc6wADnOwAA5ztAAOc7wADnPAAA5z9AAOc/gADnP8AA50BAAOdQAADnUIAA51EAAOdRgADnUkAA51KAAOdSwADnUwAA51NAAOdTwADnVEAA51SAAOdUwADnVUAA51WAAOdlQADnZcAA52aAAOdnAADnZ8AA52gAAOdoQADnaIAA52jAAOdpQADnacAA52oAAOdqQADnasAA52sAAOdxwADndQAA53rAAOd7gADnfEAA530AAOd9wADnfoAA539AAOeAAADngMAA54GAAOeCQADngwAA54jAAOeJgADnikAA54sAAOeLwADnjIAA541AAOeOAADnjsAA54+AAOeQQADnkQAA55GAAOeTQADnlQAA55dAAOeYgADnm0AA555AAOeggADnoYAA56QAAOemAADnuMAA58GAAOfJgADn0YAA59IAAOfSgADn0wAA59OAAOfUQADn1IAA59TAAOfVgADn1cAA59ZAAOfWgADn1wAA59fAAOfYAADn2EAA59kAAOfZQADn2oAA593AAOffAADn34AA5+AAAOfhQADn4gAA5+LAAOfjQADn7IAA5/WAAOf/QADoCEAA6AkAAOgJgADoCgAA6AqAAOgLAADoC4AA6AvAAOgMgADoD8AA6BQAAOgUgADoFQAA6BWAAOgWAADoFoAA6BcAAOgXgADoGAAA6BxAAOgdAADoHcAA6B6AAOgfQADoIAAA6CDAAOghgADoIkAA6CLAAOgygADoMwAA6DOAAOg0AADoNMAA6DUAAOg1QADoNYAA6DXAAOg2QADoNsAA6DcAAOg3QADoN8AA6DgAAOhHwADoSEAA6EjAAOhJQADoSgAA6EpAAOhKgADoSsAA6EsAAOhLgADoTAAA6ExAAOhMgADoTQAA6E1AAOhdAADoXYAA6F5AAOhewADoX4AA6F/AAOhgAADoYEAA6GCAAOhhAADoYYAA6GHAAOhiAADoYoAA6GLAAOhmAADoZkAA6GaAAOhnAADodsAA6HdAAOh3wADoeEAA6HkAAOh5QADoeYAA6HnAAOh6AADoeoAA6HsAAOh7QADoe4AA6HwAAOh8QADojAAA6IyAAOiNAADojYAA6I5AAOiOgADojsAA6I8AAOiPQADoj8AA6JBAAOiQgADokMAA6JFAAOiRgADooUAA6KHAAOiiQADoosAA6KOAAOijwADopAAA6KRAAOikgADopQAA6KWAAOilwADopgAA6KaAAOimwADotoAA6LcAAOi3gADouAAA6LjAAOi5AADouUAA6LmAAOi5wADoukAA6LrAAOi7AADou0AA6LvAAOi8AADoy8AA6MxAAOjMwADozUAA6M4AAOjOQADozoAA6M7AAOjPAADoz4AA6NAAAOjQQADo0IAA6NEAAOjRQADo2oAA6OOAAOjtQADo9kAA6PcAAOj3gADo+AAA6PiAAOj5AADo+YAA6PnAAOj6gADo/cAA6QGAAOkCAADpAoAA6QMAAOkDgADpBAAA6QSAAOkFAADpCMAA6QmAAOkKQADpCwAA6QvAAOkMgADpDUAA6Q4AAOkOgADpHkAA6R7AAOkfQADpH8AA6SCAAOkgwADpIQAA6SFAAOkhgADpIgAA6SKAAOkiwADpIwAA6SOAAOkjwADpM4AA6TQAAOk0gADpNQAA6TXAAOk2AADpNkAA6TaAAOk2wADpN0AA6TfAAOk4AADpOEAA6TjAAOk5AADpSMAA6UlAAOlJwADpSkAA6UsAAOlLQADpS4AA6UvAAOlMAADpTIAA6U0AAOlNQADpTYAA6U4AAOlOQADpXgAA6V6AAOlfAADpX4AA6WBAAOlggADpYMAA6WEAAOlhQADpYcAA6WJAAOligADpYsAA6WNAAOljgADpc0AA6XPAAOl0QADpdMAA6XWAAOl1wADpdgAA6XZAAOl2gADpdwAA6XeAAOl3wADpeAAA6XiAAOl4wADpiIAA6YkAAOmJgADpigAA6YrAAOmLAADpi0AA6YuAAOmLwADpjEAA6YzAAOmNAADpjUAA6Y3AAOmOAADpncAA6Z5AAOmewADpn0AA6aAAAOmgQADpoIAA6aDAAOmhAADpoYAA6aIAAOmiQADpooAA6aMAAOmjQADptgAA6b7AAOnGwADpzsAA6c9AAOnPwADp0EAA6dDAAOnRgADp0cAA6dIAAOnSwADp0wAA6dOAAOnTwADp1EAA6dUAAOnVQADp1YAA6dZAAOnWgADp18AA6dsAAOncQADp3MAA6d1AAOnegADp30AA6eAAAOnggADp6cAA6fLAAOn8gADqBYAA6gZAAOoGwADqB0AA6gfAAOoIQADqCMAA6gkAAOoJwADqDQAA6hFAAOoRwADqEkAA6hLAAOoTQADqE8AA6hRAAOoUwADqFUAA6hmAAOoaQADqGwAA6hvAAOocgADqHUAA6h4AAOoewADqH4AA6iAAAOovwADqMEAA6jDAAOoxQADqMgAA6jJAAOoygADqMsAA6jMAAOozgADqNAAA6jRAAOo0gADqNQAA6jVAAOpFAADqRYAA6kYAAOpGgADqR0AA6keAAOpHwADqSAAA6khAAOpIwADqSUAA6kmAAOpJwADqSkAA6kqAAOpaQADqWsAA6luAAOpcAADqXMAA6l0AAOpdQADqXYAA6l3AAOpeQADqXsAA6l8AAOpfQADqX8AA6mAAAOpjQADqY4AA6mPAAOpkQADqdAAA6nSAAOp1AADqdYAA6nZAAOp2gADqdsAA6ncAAOp3QADqd8AA6nhAAOp4gADqeMAA6nlAAOp5gADqiUAA6onAAOqKQADqisAA6ouAAOqLwADqjAAA6oxAAOqMgADqjQAA6o2AAOqNwADqjgAA6o6AAOqOwADqnoAA6p8AAOqfgADqoAAA6qDAAOqhAADqoUAA6qGAAOqhwADqokAA6qLAAOqjAADqo0AA6qPAAOqkAADqs8AA6rRAAOq0wADqtUAA6rYAAOq2QADqtoAA6rbAAOq3AADqt4AA6rgAAOq4QADquIAA6rkAAOq5QADqyQAA6smAAOrKAADqyoAA6stAAOrLgADqy8AA6swAAOrMQADqzMAA6s1AAOrNgADqzcAA6s5AAOrOgADq18AA6uDAAOrqgADq84AA6vRAAOr0wADq9UAA6vXAAOr2QADq9sAA6vcAAOr3wADq+wAA6v7AAOr/QADq/8AA6wBAAOsAwADrAUAA6wHAAOsCQADrBgAA6wbAAOsHgADrCEAA6wkAAOsJwADrCoAA6wtAAOsLwADrG4AA6xwAAOscgADrHQAA6x3AAOseAADrHkAA6x6AAOsewADrH0AA6x/AAOsgAADrIEAA6yDAAOshAADrMMAA6zFAAOsxwADrMkAA6zMAAOszQADrM4AA6zPAAOs0AADrNIAA6zUAAOs1QADrNYAA6zYAAOs2QADrRgAA60aAAOtHAADrR4AA60hAAOtIgADrSMAA60kAAOtJQADrScAA60pAAOtKgADrSsAA60tAAOtLgADrW0AA61vAAOtcQADrXMAA612AAOtdwADrXgAA615AAOtegADrXwAA61+AAOtfwADrYAAA62CAAOtgwADrcIAA63EAAOtxgADrcgAA63LAAOtzAADrc0AA63OAAOtzwADrdEAA63TAAOt1AADrdUAA63XAAOt2AADrhcAA64ZAAOuGwADrh0AA64gAAOuIQADriIAA64jAAOuJAADriYAA64oAAOuKQADrioAA64sAAOuLQADrmwAA65uAAOucAADrnIAA651AAOudgADrncAA654AAOueQADrnsAA659AAOufgADrn8AA66BAAOuggADrs0AA67wAAOvEAADrzAAA68yAAOvNAADrzYAA684AAOvOwADrzwAA689AAOvQAADr0EAA69DAAOvRAADr0YAA69JAAOvSgADr0sAA69OAAOvTwADr1QAA69hAAOvZgADr2gAA69qAAOvbwADr3IAA691AAOvdwADr5wAA6/AAAOv5wADsAsAA7AOAAOwEAADsBIAA7AUAAOwFgADsBgAA7AZAAOwHAADsCkAA7A6AAOwPAADsD4AA7BAAAOwQgADsEQAA7BGAAOwSAADsEoAA7BbAAOwXgADsGEAA7BkAAOwZwADsGoAA7BtAAOwcAADsHMAA7B1AAOwtAADsLYAA7C4AAOwugADsL0AA7C+AAOwvwADsMAAA7DBAAOwwwADsMUAA7DGAAOwxwADsMkAA7DKAAOxCQADsQsAA7ENAAOxDwADsRIAA7ETAAOxFAADsRUAA7EWAAOxGAADsRoAA7EbAAOxHAADsR4AA7EfAAOxXgADsWAAA7FjAAOxZQADsWgAA7FpAAOxagADsWsAA7FsAAOxbgADsXAAA7FxAAOxcgADsXQAA7F1AAOxggADsYMAA7GEAAOxhgADscUAA7HHAAOxyQADscsAA7HOAAOxzwADsdAAA7HRAAOx0gADsdQAA7HWAAOx1wADsdgAA7HaAAOx2wADshoAA7IcAAOyHgADsiAAA7IjAAOyJAADsiUAA7ImAAOyJwADsikAA7IrAAOyLAADsi0AA7IvAAOyMAADsm8AA7JxAAOycwADsnUAA7J4AAOyeQADsnoAA7J7AAOyfAADsn4AA7KAAAOygQADsoIAA7KEAAOyhQADssQAA7LGAAOyyAADssoAA7LNAAOyzgADss8AA7LQAAOy0QADstMAA7LVAAOy1gADstcAA7LZAAOy2gADsxkAA7MbAAOzHQADsx8AA7MiAAOzIwADsyQAA7MlAAOzJgADsygAA7MqAAOzKwADsywAA7MuAAOzLwADs1QAA7N4AAOznwADs8MAA7PGAAOzyAADs8oAA7PMAAOzzgADs9AAA7PRAAOz1AADs+EAA7PwAAOz8gADs/QAA7P2AAOz+AADs/oAA7P8AAOz/gADtA0AA7QQAAO0EwADtBYAA7QZAAO0HAADtB8AA7QiAAO0JAADtGMAA7RlAAO0ZwADtGkAA7RsAAO0bQADtG4AA7RvAAO0cAADtHIAA7R0AAO0dQADtHYAA7R4AAO0eQADtLgAA7S6AAO0vAADtL4AA7TBAAO0wgADtMMAA7TEAAO0xQADtMcAA7TJAAO0ygADtMsAA7TNAAO0zgADtQ0AA7UPAAO1EQADtRMAA7UWAAO1FwADtRgAA7UZAAO1GgADtRwAA7UeAAO1HwADtSAAA7UiAAO1IwADtWIAA7VkAAO1ZgADtWgAA7VrAAO1bAADtW0AA7VuAAO1bwADtXEAA7VzAAO1dAADtXUAA7V3AAO1eAADtbcAA7W5AAO1uwADtb0AA7XAAAO1wQADtcIAA7XDAAO1xAADtcYAA7XIAAO1yQADtcoAA7XMAAO1zQADtgwAA7YOAAO2EAADthIAA7YVAAO2FgADthcAA7YYAAO2GQADthsAA7YdAAO2HgADth8AA7YhAAO2IgADtmEAA7ZjAAO2ZQADtmcAA7ZqAAO2awADtmwAA7ZtAAO2bgADtnAAA7ZyAAO2cwADtnQAA7Z2AAO2dwADtsIAA7blAAO3BQADtyUAA7cnAAO3KQADtysAA7ctAAO3MAADtzEAA7cyAAO3NQADtzYAA7c4AAO3OQADtzsAA7c+AAO3PwADt0AAA7dDAAO3RAADt0kAA7dWAAO3WwADt10AA7dfAAO3ZAADt2cAA7dqAAO3bAADt5EAA7e1AAO33AADuAAAA7gDAAO4BQADuAcAA7gJAAO4CwADuA0AA7gOAAO4EQADuB4AA7gvAAO4MQADuDMAA7g1AAO4NwADuDkAA7g7AAO4PQADuD8AA7hQAAO4UwADuFYAA7hZAAO4XAADuF8AA7hiAAO4ZQADuGgAA7hqAAO4qQADuKsAA7itAAO4rwADuLIAA7izAAO4tAADuLUAA7i2AAO4uAADuLoAA7i7AAO4vAADuL4AA7i/AAO4/gADuQAAA7kCAAO5BAADuQcAA7kIAAO5CQADuQoAA7kLAAO5DQADuQ8AA7kQAAO5EQADuRMAA7kUAAO5UwADuVUAA7lYAAO5WgADuV0AA7leAAO5XwADuWAAA7lhAAO5YwADuWUAA7lmAAO5ZwADuWkAA7lqAAO5dwADuXgAA7l5AAO5ewADuboAA7m8AAO5vgADucAAA7nDAAO5xAADucUAA7nGAAO5xwADuckAA7nLAAO5zAADuc0AA7nPAAO50AADug8AA7oRAAO6EwADuhUAA7oYAAO6GQADuhoAA7obAAO6HAADuh4AA7ogAAO6IQADuiIAA7okAAO6JQADumQAA7pmAAO6aAADumoAA7ptAAO6bgADum8AA7pwAAO6cQADunMAA7p1AAO6dgADuncAA7p5AAO6egADurkAA7q7AAO6vQADur8AA7rCAAO6wwADusQAA7rFAAO6xgADusgAA7rKAAO6ywADuswAA7rOAAO6zwADuw4AA7sQAAO7EgADuxQAA7sXAAO7GAADuxkAA7saAAO7GwADux0AA7sfAAO7IAADuyEAA7sjAAO7JAADu0kAA7ttAAO7lAADu7gAA7u7AAO7vQADu78AA7vBAAO7wwADu8UAA7vGAAO7yQADu9YAA7vlAAO75wADu+kAA7vrAAO77QADu+8AA7vxAAO78wADvAIAA7wFAAO8CAADvAsAA7wOAAO8EQADvBQAA7wXAAO8GQADvFgAA7xaAAO8XAADvF4AA7xhAAO8YgADvGMAA7xkAAO8ZQADvGcAA7xpAAO8agADvGsAA7xtAAO8bgADvK0AA7yvAAO8sQADvLMAA7y2AAO8twADvLgAA7y5AAO8ugADvLwAA7y+AAO8vwADvMAAA7zCAAO8wwADvQIAA70EAAO9BgADvQgAA70LAAO9DAADvQ0AA70OAAO9DwADvREAA70TAAO9FAADvRUAA70XAAO9GAADvVcAA71ZAAO9XAADvV4AA71hAAO9YgADvWMAA71kAAO9ZQADvWcAA71pAAO9agADvWsAA71tAAO9bgADva0AA72vAAO9sQADvbMAA722AAO9twADvbgAA725AAO9ugADvbwAA72+AAO9vwADvcAAA73CAAO9wwADvgIAA74EAAO+BgADvggAA74LAAO+DAADvg0AA74OAAO+DwADvhEAA74TAAO+FAADvhUAA74XAAO+GAADvlcAA75ZAAO+WwADvl0AA75gAAO+YQADvmIAA75jAAO+ZAADvmYAA75oAAO+aQADvmoAA75sAAO+bQADvrgAA77bAAO++wADvxsAA78dAAO/HwADvyEAA78jAAO/JgADvycAA78oAAO/KwADvywAA78uAAO/LwADvzEAA780AAO/NQADvzYAA785AAO/OgADvz8AA79MAAO/UQADv1MAA79VAAO/WgADv10AA79gAAO/YgADv4cAA7+rAAO/0gADv/YAA7/5AAO/+wADv/0AA7//AAPAAQADwAMAA8AEAAPABwADwBQAA8AlAAPAJwADwCkAA8ArAAPALQADwC8AA8AxAAPAMwADwDUAA8BGAAPASQADwEwAA8BPAAPAUgADwFUAA8BYAAPAWwADwF4AA8BgAAPAnwADwKEAA8CjAAPApQADwKgAA8CpAAPAqgADwKsAA8CsAAPArgADwLAAA8CxAAPAsgADwLQAA8C1AAPA9AADwPYAA8D4AAPA+gADwP0AA8D+AAPA/wADwQAAA8EBAAPBAwADwQUAA8EGAAPBBwADwQkAA8EKAAPBSQADwUsAA8FOAAPBUAADwVMAA8FUAAPBVQADwVYAA8FXAAPBWQADwVsAA8FcAAPBXQADwV8AA8FgAAPBbQADwW4AA8FvAAPBcQADwbAAA8GyAAPBtAADwbYAA8G5AAPBugADwbsAA8G8AAPBvQADwb8AA8HBAAPBwgADwcMAA8HFAAPBxgADwgUAA8IHAAPCCQADwgsAA8IOAAPCDwADwhAAA8IRAAPCEgADwhQAA8IWAAPCFwADwhgAA8IaAAPCGwADwloAA8JcAAPCXgADwmAAA8JjAAPCZAADwmUAA8JmAAPCZwADwmkAA8JrAAPCbAADwm0AA8JvAAPCcAADwq8AA8KxAAPCswADwrUAA8K4AAPCuQADwroAA8K7AAPCvAADwr4AA8LAAAPCwQADwsIAA8LEAAPCxQADwwQAA8MGAAPDCAADwwoAA8MNAAPDDgADww8AA8MQAAPDEQADwxMAA8MVAAPDFgADwxcAA8MZAAPDGgADwz8AA8NjAAPDigADw64AA8OxAAPDswADw7UAA8O3AAPDuQADw7sAA8O8AAPDvwADw8wAA8PbAAPD3QADw98AA8PhAAPD4wADw+UAA8PnAAPD6QADw/gAA8P7AAPD/gADxAEAA8QEAAPEBwADxAoAA8QNAAPEDwADxE4AA8RQAAPEUgADxFQAA8RXAAPEWAADxFkAA8RaAAPEWwADxF0AA8RfAAPEYAADxGEAA8RjAAPEZAADxKMAA8SlAAPEpwADxKkAA8SsAAPErQADxK4AA8SvAAPEsAADxLIAA8S0AAPEtQADxLYAA8S4AAPEuQADxPgAA8T6AAPE/AADxP4AA8UBAAPFAgADxQMAA8UEAAPFBQADxQcAA8UJAAPFCgADxQsAA8UNAAPFDgADxU0AA8VPAAPFUQADxVMAA8VWAAPFVwADxVgAA8VZAAPFWgADxVwAA8VeAAPFXwADxWAAA8ViAAPFYwADxaIAA8WkAAPFpgADxagAA8WrAAPFrAADxa0AA8WuAAPFrwADxbEAA8WzAAPFtAADxbUAA8W3AAPFuAADxfcAA8X5AAPF+wADxf0AA8YAAAPGAQADxgIAA8YDAAPGBAADxgYAA8YIAAPGCQADxgoAA8YMAAPGDQADxkwAA8ZOAAPGUAADxlIAA8ZVAAPGVgADxlcAA8ZYAAPGWQADxlsAA8ZdAAPGXgADxl8AA8ZhAAPGYgADxq0AA8bQAAPG8AADxxAAA8cSAAPHFAADxxYAA8cYAAPHGwADxxwAA8cdAAPHIAADxyEAA8cjAAPHJAADxyYAA8cpAAPHKgADxysAA8cuAAPHLwADxzgAA8dFAAPHSgADx0wAA8dOAAPHUwADx1YAA8dZAAPHWwADx4AAA8ekAAPHywADx+8AA8fyAAPH9AADx/YAA8f4AAPH+gADx/wAA8f9AAPIAAADyA0AA8geAAPIIAADyCIAA8gkAAPIJgADyCgAA8gqAAPILAADyC4AA8g/AAPIQgADyEUAA8hIAAPISwADyE4AA8hRAAPIVAADyFcAA8hZAAPImAADyJoAA8icAAPIngADyKEAA8iiAAPIowADyKQAA8ilAAPIpwADyKkAA8iqAAPIqwADyK0AA8iuAAPI7QADyO8AA8jxAAPI8wADyPYAA8j3AAPI+AADyPkAA8j6AAPI/AADyP4AA8j/AAPJAAADyQIAA8kDAAPJQgADyUQAA8lHAAPJSQADyUwAA8lNAAPJTgADyU8AA8lQAAPJUgADyVQAA8lVAAPJVgADyVgAA8lZAAPJZgADyWcAA8loAAPJagADyakAA8mrAAPJrQADya8AA8myAAPJswADybQAA8m1AAPJtgADybgAA8m6AAPJuwADybwAA8m+AAPJvwADyf4AA8oAAAPKAgADygQAA8oHAAPKCAADygkAA8oKAAPKCwADyg0AA8oPAAPKEAADyhEAA8oTAAPKFAADylMAA8pVAAPKVwADylkAA8pcAAPKXQADyl4AA8pfAAPKYAADymIAA8pkAAPKZQADymYAA8poAAPKaQADyqgAA8qqAAPKrAADyq4AA8qxAAPKsgADyrMAA8q0AAPKtQADyrcAA8q5AAPKugADyrsAA8q9AAPKvgADyv0AA8r/AAPLAQADywMAA8sGAAPLBwADywgAA8sJAAPLCgADywwAA8sOAAPLDwADyxAAA8sSAAPLEwADyzgAA8tcAAPLgwADy6cAA8uqAAPLrAADy64AA8uwAAPLsgADy7QAA8u1AAPLuAADy8UAA8vUAAPL1gADy9gAA8vaAAPL3AADy94AA8vgAAPL4gADy/EAA8v0AAPL9wADy/oAA8v9AAPMAAADzAMAA8wGAAPMCAADzEcAA8xJAAPMSwADzE0AA8xQAAPMUQADzFIAA8xTAAPMVAADzFYAA8xYAAPMWQADzFoAA8xcAAPMXQADzJwAA8yeAAPMoAADzKIAA8ylAAPMpgADzKcAA8yoAAPMqQADzKsAA8ytAAPMrgADzK8AA8yxAAPMsgADzPEAA8zzAAPM9QADzPcAA8z6AAPM+wADzPwAA8z9AAPM/gADzQAAA80CAAPNAwADzQQAA80GAAPNBwADzUYAA81IAAPNSwADzU0AA81QAAPNUQADzVIAA81TAAPNVAADzVYAA81YAAPNWQADzVoAA81cAAPNXQADzZwAA82eAAPNoAADzaIAA82lAAPNpgADzacAA82oAAPNqQADzasAA82tAAPNrgADza8AA82xAAPNsgADzfEAA83zAAPN9QADzfcAA836AAPN+wADzfwAA839AAPN/gADzgAAA84CAAPOAwADzgQAA84GAAPOBwADzkYAA85IAAPOSgADzkwAA85PAAPOUAADzlEAA85SAAPOUwADzlUAA85XAAPOWAADzlkAA85bAAPOXAADzqcAA87KAAPO6gADzwoAA88MAAPPDgADzxAAA88SAAPPFQADzxYAA88XAAPPGgADzxsAA88dAAPPHgADzyAAA88jAAPPJAADzyUAA88oAAPPKQADzy4AA887AAPPQAADz0IAA89EAAPPSQADz0wAA89PAAPPUQADz3YAA8+aAAPPwQADz+UAA8/oAAPP6gADz+wAA8/uAAPP8AADz/IAA8/zAAPP9gAD0AMAA9AUAAPQFgAD0BgAA9AaAAPQHAAD0B4AA9AgAAPQIgAD0CQAA9A1AAPQOAAD0DsAA9A+AAPQQQAD0EQAA9BHAAPQSgAD0E0AA9BPAAPQjgAD0JAAA9CSAAPQlAAD0JcAA9CYAAPQmQAD0JoAA9CbAAPQnQAD0J8AA9CgAAPQoQAD0KMAA9CkAAPQ4wAD0OUAA9DnAAPQ6QAD0OwAA9DtAAPQ7gAD0O8AA9DwAAPQ8gAD0PQAA9D1AAPQ9gAD0PgAA9D5AAPROAAD0ToAA9E9AAPRPwAD0UIAA9FDAAPRRAAD0UUAA9FGAAPRSAAD0UoAA9FLAAPRTAAD0U4AA9FPAAPRXAAD0V0AA9FeAAPRYAAD0Z8AA9GhAAPRowAD0aUAA9GoAAPRqQAD0aoAA9GrAAPRrAAD0a4AA9GwAAPRsQAD0bIAA9G0AAPRtQAD0fQAA9H2AAPR+AAD0foAA9H9AAPR/gAD0f8AA9IAAAPSAQAD0gMAA9IFAAPSBgAD0gcAA9IJAAPSCgAD0kkAA9JLAAPSTQAD0k8AA9JSAAPSUwAD0lQAA9JVAAPSVgAD0lgAA9JaAAPSWwAD0lwAA9JeAAPSXwAD0p4AA9KgAAPSogAD0qQAA9KnAAPSqAAD0qkAA9KqAAPSqwAD0q0AA9KvAAPSsAAD0rEAA9KzAAPStAAD0vMAA9L1AAPS9wAD0vkAA9L8AAPS/QAD0v4AA9L/AAPTAAAD0wIAA9MEAAPTBQAD0wYAA9MIAAPTCQAD0y4AA9NSAAPTeQAD050AA9OgAAPTogAD06QAA9OmAAPTqAAD06oAA9OrAAPTrgAD07sAA9PKAAPTzAAD084AA9PQAAPT0gAD09QAA9PWAAPT2AAD0+cAA9PqAAPT7QAD0/AAA9PzAAPT9gAD0/kAA9P8AAPT/gAD1D0AA9Q/AAPUQQAD1EMAA9RGAAPURwAD1EgAA9RJAAPUSgAD1EwAA9ROAAPUTwAD1FAAA9RSAAPUUwAD1JIAA9SUAAPUlgAD1JgAA9SbAAPUnAAD1J0AA9SeAAPUnwAD1KEAA9SjAAPUpAAD1KUAA9SnAAPUqAAD1OcAA9TpAAPU6wAD1O0AA9TwAAPU8QAD1PIAA9TzAAPU9AAD1PYAA9T4AAPU+QAD1PoAA9T8AAPU/QAD1TwAA9U+AAPVQAAD1UIAA9VFAAPVRgAD1UcAA9VIAAPVSQAD1UsAA9VNAAPVTgAD1U8AA9VRAAPVUgAD1ZEAA9WTAAPVlQAD1ZcAA9WaAAPVmwAD1ZwAA9WdAAPVngAD1aAAA9WiAAPVowAD1aQAA9WmAAPVpwAD1eYAA9XoAAPV6gAD1ewAA9XvAAPV8AAD1fEAA9XyAAPV8wAD1fUAA9X3AAPV+AAD1fkAA9X7AAPV/AAD1jsAA9Y9AAPWPwAD1kEAA9ZEAAPWRQAD1kYAA9ZHAAPWSAAD1koAA9ZMAAPWTQAD1k4AA9ZQAAPWUQAD1pwAA9a/AAPW3wAD1v8AA9cBAAPXAwAD1wUAA9cHAAPXCgAD1wsAA9cMAAPXDwAD1xAAA9cSAAPXEwAD1xUAA9cYAAPXGQAD1xoAA9cdAAPXHgAD1yMAA9cwAAPXNQAD1zcAA9c5AAPXPgAD10EAA9dEAAPXRgAD12sAA9ePAAPXtgAD19oAA9fdAAPX3wAD1+EAA9fjAAPX5QAD1+cAA9foAAPX6wAD1/gAA9gJAAPYCwAD2A0AA9gPAAPYEQAD2BMAA9gVAAPYFwAD2BkAA9gqAAPYLQAD2DAAA9gzAAPYNgAD2DkAA9g8AAPYPwAD2EIAA9hEAAPYgwAD2IUAA9iHAAPYiQAD2IwAA9iNAAPYjgAD2I8AA9iQAAPYkgAD2JQAA9iVAAPYlgAD2JgAA9iZAAPY2AAD2NoAA9jcAAPY3gAD2OEAA9jiAAPY4wAD2OQAA9jlAAPY5wAD2OkAA9jqAAPY6wAD2O0AA9juAAPZLQAD2S8AA9kyAAPZNAAD2TcAA9k4AAPZOQAD2ToAA9k7AAPZPQAD2T8AA9lAAAPZQQAD2UMAA9lEAAPZUQAD2VIAA9lTAAPZVQAD2ZQAA9mWAAPZmAAD2ZoAA9mdAAPZngAD2Z8AA9mgAAPZoQAD2aMAA9mlAAPZpgAD2acAA9mpAAPZqgAD2ekAA9nrAAPZ7QAD2e8AA9nyAAPZ8wAD2fQAA9n1AAPZ9gAD2fgAA9n6AAPZ+wAD2fwAA9n+AAPZ/wAD2j4AA9pAAAPaQgAD2kQAA9pHAAPaSAAD2kkAA9pKAAPaSwAD2k0AA9pPAAPaUAAD2lEAA9pTAAPaVAAD2pMAA9qVAAPalwAD2pkAA9qcAAPanQAD2p4AA9qfAAPaoAAD2qIAA9qkAAPapQAD2qYAA9qoAAPaqQAD2ugAA9rqAAPa7AAD2u4AA9rxAAPa8gAD2vMAA9r0AAPa9QAD2vcAA9r5AAPa+gAD2vsAA9r9AAPa/gAD2yMAA9tHAAPbbgAD25IAA9uVAAPblwAD25kAA9ubAAPbnQAD258AA9ugAAPbowAD27AAA9u/AAPbwQAD28MAA9vFAAPbxwAD28kAA9vLAAPbzQAD29wAA9vfAAPb4gAD2+UAA9voAAPb6wAD2+4AA9vxAAPb8wAD3DIAA9w0AAPcNgAD3DgAA9w7AAPcPAAD3D0AA9w+AAPcPwAD3EEAA9xDAAPcRAAD3EUAA9xHAAPcSAAD3IcAA9yJAAPciwAD3I0AA9yQAAPckQAD3JIAA9yTAAPclAAD3JYAA9yYAAPcmQAD3JoAA9ycAAPcnQAD3NwAA9zeAAPc4AAD3OIAA9zlAAPc5gAD3OcAA9zoAAPc6QAD3OsAA9ztAAPc7gAD3O8AA9zxAAPc8gAD3TEAA90zAAPdNQAD3TcAA906AAPdOwAD3TwAA909AAPdPgAD3UAAA91CAAPdQwAD3UQAA91GAAPdRwAD3YYAA92IAAPdigAD3YwAA92PAAPdkAAD3ZEAA92SAAPdkwAD3ZUAA92XAAPdmAAD3ZkAA92bAAPdnAAD3dsAA93dAAPd3wAD3eEAA93kAAPd5QAD3eYAA93nAAPd6AAD3eoAA93sAAPd7QAD3e4AA93wAAPd8QAD3jAAA94yAAPeNAAD3jYAA945AAPeOgAD3jsAA948AAPePQAD3j8AA95BAAPeQgAD3kMAA95FAAPeRgAD3pEAA960AAPe1AAD3vQAA972AAPe+AAD3voAA978AAPe/wAD3wAAA98BAAPfBAAD3wUAA98HAAPfCAAD3woAA98NAAPfDgAD3w8AA98SAAPfEwAD3xgAA98lAAPfKgAD3ywAA98uAAPfMwAD3zYAA985AAPfOwAD32AAA9+EAAPfqwAD388AA9/SAAPf1AAD39YAA9/YAAPf2gAD39wAA9/dAAPf4AAD3+0AA9/+AAPgAAAD4AIAA+AEAAPgBgAD4AgAA+AKAAPgDAAD4A4AA+AfAAPgIgAD4CUAA+AoAAPgKwAD4C4AA+AxAAPgNAAD4DcAA+A5AAPgeAAD4HoAA+B8AAPgfgAD4IEAA+CCAAPggwAD4IQAA+CFAAPghwAD4IkAA+CKAAPgiwAD4I0AA+COAAPgzQAD4M8AA+DRAAPg0wAD4NYAA+DXAAPg2AAD4NkAA+DaAAPg3AAD4N4AA+DfAAPg4AAD4OIAA+DjAAPhIgAD4SQAA+EnAAPhKQAD4SwAA+EtAAPhLgAD4S8AA+EwAAPhMgAD4TQAA+E1AAPhNgAD4TgAA+E5AAPhRgAD4UcAA+FIAAPhSgAD4YkAA+GLAAPhjQAD4Y8AA+GSAAPhkwAD4ZQAA+GVAAPhlgAD4ZgAA+GaAAPhmwAD4ZwAA+GeAAPhnwAD4d4AA+HgAAPh4gAD4eQAA+HnAAPh6AAD4ekAA+HqAAPh6wAD4e0AA+HvAAPh8AAD4fEAA+HzAAPh9AAD4jMAA+I1AAPiNwAD4jkAA+I8AAPiPQAD4j4AA+I/AAPiQAAD4kIAA+JEAAPiRQAD4kYAA+JIAAPiSQAD4ogAA+KKAAPijAAD4o4AA+KRAAPikgAD4pMAA+KUAAPilQAD4pcAA+KZAAPimgAD4psAA+KdAAPingAD4t0AA+LfAAPi4QAD4uMAA+LmAAPi5wAD4ugAA+LpAAPi6gAD4uwAA+LuAAPi7wAD4vAAA+LyAAPi8wAD4xgAA+M8AAPjYwAD44cAA+OKAAPjjAAD444AA+OQAAPjkgAD45QAA+OVAAPjmAAD46UAA+O0AAPjtgAD47gAA+O6AAPjvAAD474AA+PAAAPjwgAD49EAA+PUAAPj1wAD49oAA+PdAAPj4AAD4+MAA+PmAAPj6AAD5CcAA+QpAAPkKwAD5C0AA+QwAAPkMQAD5DIAA+QzAAPkNAAD5DYAA+Q4AAPkOQAD5DoAA+Q8AAPkPQAD5HwAA+R+AAPkgAAD5IIAA+SFAAPkhgAD5IcAA+SIAAPkiQAD5IsAA+SNAAPkjgAD5I8AA+SRAAPkkgAD5NEAA+TTAAPk1QAD5NcAA+TaAAPk2wAD5NwAA+TdAAPk3gAD5OAAA+TiAAPk4wAD5OQAA+TmAAPk5wAD5SYAA+UoAAPlKgAD5SwAA+UvAAPlMAAD5TEAA+UyAAPlMwAD5TUAA+U3AAPlOAAD5TkAA+U7AAPlPAAD5XsAA+V9AAPlfwAD5YEAA+WEAAPlhQAD5YYAA+WHAAPliAAD5YoAA+WMAAPljQAD5Y4AA+WQAAPlkQAD5dAAA+XSAAPl1AAD5dYAA+XZAAPl2gAD5dsAA+XcAAPl3QAD5d8AA+XhAAPl4gAD5eMAA+XlAAPl5gAD5iUAA+YnAAPmKQAD5isAA+YuAAPmLwAD5jAAA+YxAAPmMgAD5jQAA+Y2AAPmNwAD5jgAA+Y6AAPmOwAD5oYAA+apAAPmyQAD5ukAA+brAAPm7QAD5u8AA+bxAAPm9AAD5vUAA+b2AAPm+QAD5voAA+b8AAPm/QAD5v8AA+cCAAPnAwAD5wQAA+cHAAPnCAAD5w0AA+caAAPnHwAD5yEAA+cjAAPnKAAD5ysAA+cuAAPnMAAD51UAA+d5AAPnoAAD58QAA+fHAAPnyQAD58sAA+fNAAPnzwAD59EAA+fSAAPn1QAD5+IAA+fzAAPn9QAD5/cAA+f5AAPn+wAD5/0AA+f/AAPoAQAD6AMAA+gUAAPoFwAD6BoAA+gdAAPoIAAD6CMAA+gmAAPoKQAD6CwAA+guAAPobQAD6G8AA+hxAAPocwAD6HYAA+h3AAPoeAAD6HkAA+h6AAPofAAD6H4AA+h/AAPogAAD6IIAA+iDAAPowgAD6MQAA+jGAAPoyAAD6MsAA+jMAAPozQAD6M4AA+jPAAPo0QAD6NMAA+jUAAPo1QAD6NcAA+jYAAPpFwAD6RkAA+kcAAPpHgAD6SEAA+kiAAPpIwAD6SQAA+klAAPpJwAD6SkAA+kqAAPpKwAD6S0AA+kuAAPpOwAD6TwAA+k9AAPpPwAD6X4AA+mAAAPpggAD6YQAA+mHAAPpiAAD6YkAA+mKAAPpiwAD6Y0AA+mPAAPpkAAD6ZEAA+mTAAPplAAD6dMAA+nVAAPp1wAD6dkAA+ncAAPp3QAD6d4AA+nfAAPp4AAD6eIAA+nkAAPp5QAD6eYAA+noAAPp6QAD6igAA+oqAAPqLAAD6i4AA+oxAAPqMgAD6jMAA+o0AAPqNQAD6jcAA+o5AAPqOgAD6jsAA+o9AAPqPgAD6n0AA+p/AAPqgQAD6oMAA+qGAAPqhwAD6ogAA+qJAAPqigAD6owAA+qOAAPqjwAD6pAAA+qSAAPqkwAD6tIAA+rUAAPq1gAD6tgAA+rbAAPq3AAD6t0AA+reAAPq3wAD6uEAA+rjAAPq5AAD6uUAA+rnAAPq6AAD6w0AA+sxAAPrWAAD63wAA+t/AAPrgQAD64MAA+uFAAPrhwAD64kAA+uKAAPrjQAD65oAA+upAAPrqwAD660AA+uvAAPrsQAD67MAA+u1AAPrtwAD68YAA+vJAAPrzAAD688AA+vSAAPr1QAD69gAA+vbAAPr3QAD7BwAA+weAAPsIAAD7CIAA+wlAAPsJgAD7CcAA+woAAPsKQAD7CsAA+wtAAPsLgAD7C8AA+wxAAPsMgAD7HEAA+xzAAPsdQAD7HcAA+x6AAPsewAD7HwAA+x9AAPsfgAD7IAAA+yCAAPsgwAD7IQAA+yGAAPshwAD7MYAA+zIAAPsygAD7MwAA+zPAAPs0AAD7NEAA+zSAAPs0wAD7NUAA+zXAAPs2AAD7NkAA+zbAAPs3AAD7RsAA+0dAAPtIAAD7SIAA+0lAAPtJgAD7ScAA+0oAAPtKQAD7SsAA+0tAAPtLgAD7S8AA+0xAAPtMgAD7XEAA+1zAAPtdQAD7XcAA+16AAPtewAD7XwAA+19AAPtfgAD7YAAA+2CAAPtgwAD7YQAA+2GAAPthwAD7cYAA+3IAAPtygAD7cwAA+3PAAPt0AAD7dEAA+3SAAPt0wAD7dUAA+3XAAPt2AAD7dkAA+3bAAPt3AAD7hsAA+4dAAPuHwAD7iEAA+4kAAPuJQAD7iYAA+4nAAPuKAAD7ioAA+4sAAPuLQAD7i4AA+4wAAPuMQAD7nwAA+6fAAPuvwAD7t8AA+7hAAPu4wAD7uUAA+7nAAPu6gAD7usAA+7sAAPu7wAD7vAAA+7yAAPu8wAD7vUAA+74AAPu+QAD7voAA+79AAPu/gAD7wMAA+8QAAPvFQAD7xcAA+8ZAAPvHgAD7yEAA+8kAAPvJgAD70sAA+9vAAPvlgAD77oAA++9AAPvvwAD78EAA+/DAAPvxQAD78cAA+/IAAPvywAD79gAA+/pAAPv6wAD7+0AA+/vAAPv8QAD7/MAA+/1AAPv9wAD7/kAA/AKAAPwDQAD8BAAA/ATAAPwFgAD8BkAA/AcAAPwHwAD8CIAA/AkAAPwYwAD8GUAA/BnAAPwaQAD8GwAA/BtAAPwbgAD8G8AA/BwAAPwcgAD8HQAA/B1AAPwdgAD8HgAA/B5AAPwuAAD8LoAA/C8AAPwvgAD8MEAA/DCAAPwwwAD8MQAA/DFAAPwxwAD8MkAA/DKAAPwywAD8M0AA/DOAAPxDQAD8Q8AA/ESAAPxFAAD8RcAA/EYAAPxGQAD8RoAA/EbAAPxHQAD8R8AA/EgAAPxIQAD8SMAA/EkAAPxMQAD8TIAA/EzAAPxNQAD8XQAA/F2AAPxeAAD8XoAA/F9AAPxfgAD8X8AA/GAAAPxgQAD8YMAA/GFAAPxhgAD8YcAA/GJAAPxigAD8ckAA/HLAAPxzQAD8c8AA/HSAAPx0wAD8dQAA/HVAAPx1gAD8dgAA/HaAAPx2wAD8dwAA/HeAAPx3wAD8h4AA/IgAAPyIgAD8iQAA/InAAPyKAAD8ikAA/IqAAPyKwAD8i0AA/IvAAPyMAAD8jEAA/IzAAPyNAAD8nMAA/J1AAPydwAD8nkAA/J8AAPyfQAD8n4AA/J/AAPygAAD8oIAA/KEAAPyhQAD8oYAA/KIAAPyiQAD8sgAA/LKAAPyzAAD8s4AA/LRAAPy0gAD8tMAA/LUAAPy1QAD8tcAA/LZAAPy2gAD8tsAA/LdAAPy3gAD8wMAA/MnAAPzTgAD83IAA/N1AAPzdwAD83kAA/N7AAPzfQAD838AA/OAAAPzgwAD85AAA/OfAAPzoQAD86MAA/OlAAPzpwAD86kAA/OrAAPzrQAD87wAA/O/AAPzwgAD88UAA/PIAAPzywAD884AA/PRAAPz0wAD9BIAA/QUAAP0FgAD9BgAA/QbAAP0HAAD9B0AA/QeAAP0HwAD9CEAA/QjAAP0JAAD9CUAA/QnAAP0KAAD9GcAA/RpAAP0awAD9G0AA/RwAAP0cQAD9HIAA/RzAAP0dAAD9HYAA/R4AAP0eQAD9HoAA/R8AAP0fQAD9LwAA/S+AAP0wAAD9MIAA/TFAAP0xgAD9McAA/TIAAP0yQAD9MsAA/TNAAP0zgAD9M8AA/TRAAP00gAD9REAA/UTAAP1FQAD9RcAA/UaAAP1GwAD9RwAA/UdAAP1HgAD9SAAA/UiAAP1IwAD9SQAA/UmAAP1JwAD9WYAA/VoAAP1agAD9WwAA/V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VAAQHFwAEBxkABAcaAAQHGwAEBx0ABAceAAQHXQAEB18ABAdiAAQHZAAEB2cABAdoAAQHaQAEB2oABAdrAAQHbQAEB28ABAdwAAQHcQAEB3MABAd0AAQHgQAEB4IABAeDAAQHhQAEB8QABAfGAAQHyAAEB8oABAfNAAQHzgAEB88ABAfQAAQH0QAEB9MABAfVAAQH1gAEB9cABAfZAAQH2gAECBkABAgbAAQIHQAECB8ABAgiAAQIIwAECCQABAglAAQIJgAECCgABAgqAAQIKwAECCwABAguAAQILwAECG4ABAhwAAQIcgAECHQABAh3AAQIeAAECHkABAh6AAQIewAECH0ABAh/AAQIgAAECIEABAiDAAQIhAAECMMABAjFAAQIxwAECMkABAjMAAQIzQAECM4ABAjPAAQI0AAECNIABAjUAAQI1QAECNYABAjYAAQI2QAECRgABAkaAAQJHAAECR4ABAkhAAQJIgAECSMABAkkAAQJJQAECScABAkpAAQJKgAECSsABAktAAQJLgAECVMABAl3AAQJngAECcIABAnFAAQJxwAECckABAnLAAQJzQAECc8ABAnQAAQJ0wAECeAABAnvAAQJ8QAECfMABAn1AAQJ9wAECfkABAn7AAQJ/QAECgwABAoPAAQKEgAEChUABAoYAAQKGwAECh4ABAohAAQKIwAECmIABApkAAQKZgAECmgABAprAAQKbAAECm0ABApuAAQKbwAECnEABApzAAQKdAAECnUABAp3AAQKeAAECrcABAq5AAQKuwAECr0ABArAAAQKwQAECsIABArDAAQKxAAECsYABArIAAQKyQAECsoABArMAAQKzQAECwwABAsOAAQLEAAECxIABAsVAAQLFgAECxcABAsYAAQLGQAECxsABAsdAAQLHgAECx8ABAshAAQLIgAEC2EABAtjAAQLZQAEC2cABAtqAAQLawAEC2wABAttAAQLbgAEC3AABAtyAAQLcwAEC3QABAt2AAQLdwAEC7YABAu4AAQLugAEC7wABAu/AAQLwAAEC8EABAvCAAQLwwAEC8UABAvHAAQLyAAEC8kABAvLAAQLzAAEDAsABAwNAAQMDwAEDBEABAwUAAQMFQAEDBYABAwXAAQMGAAEDBoABAwcAAQMHQAEDB4ABAwgAAQMIQAEDGAABAxiAAQMZAAEDGYABAxpAAQMagAEDGsABAxsAAQMbQAEDG8ABAxxAAQMcgAEDHMABAx1AAQMdgAEDMEABAzkAAQNBAAEDSQABA0mAAQNKAAEDSoABA0sAAQNLwAEDTAABA0xAAQNNAAEDTUABA03AAQNOAAEDToABA08AAQNPQAEDT4ABA1BAAQNQgAEDUcABA1UAAQNWQAEDVsABA1dAAQNYgAEDWUABA1oAAQNagAEDY8ABA2zAAQN2gAEDf4ABA4BAAQOAwAEDgUABA4HAAQOCQAEDgsABA4MAAQODwAEDhwABA4tAAQOLwAEDjEABA4zAAQONQAEDjcABA45AAQOOwAEDj0ABA5OAAQOUQAEDlQABA5XAAQOWgAEDl0ABA5gAAQOYwAEDmYABA5oAAQOpwAEDqkABA6rAAQOrQAEDrAABA6xAAQOsgAEDrMABA60AAQOtgAEDrgABA65AAQOugAEDrwABA69AAQO/AAEDv4ABA8AAAQPAgAEDwUABA8GAAQPBwAEDwgABA8JAAQPCwAEDw0ABA8OAAQPDwAEDxEABA8SAAQPUQAED1MABA9WAAQPWAAED1sABA9cAAQPXQAED14ABA9fAAQPYQAED2MABA9kAAQPZQAED2cABA9oAAQPdQAED3YABA93AAQPeQAED7gABA+6AAQPvAAED74ABA/BAAQPwgAED8MABA/EAAQPxQAED8cABA/JAAQPygAED8sABA/NAAQPzgAEEA0ABBAPAAQQEQAEEBMABBAWAAQQFwAEEBgABBAZAAQQGgAEEBwABBAeAAQQHwAEECAABBAiAAQQIwAEEGIABBBkAAQQZgAEEGgABBBrAAQQbAAEEG0ABBBuAAQQbwAEEHEABBBzAAQQdAAEEHUABBB3AAQQeAAEELcABBC5AAQQuwAEEL0ABBDAAAQQwQAEEMIABBDDAAQQxAAEEMYABBDIAAQQyQAEEMoABBDMAAQQzQAEEQwABBEOAAQREAAEERIABBEVAAQRFgAEERcABBEYAAQRGQAEERsABBEdAAQRHgAEER8ABBEhAAQRIgAEEUcABBFrAAQRkgAEEbYABBG5AAQRuwAEEb0ABBG/AAQRwQAEEcMABBHEAAQRxwAEEdQABBHjAAQR5QAEEecABBHpAAQR6wAEEe0ABBHvAAQR8QAEEgAABBIDAAQSBgAEEgkABBIMAAQSDwAEEhIABBIVAAQSFwAEElYABBJYAAQSWgAEElwABBJfAAQSYAAEEmEABBJiAAQSYwAEEmUABBJnAAQSaAAEEmkABBJrAAQSbAAEEqsABBKtAAQSrwAEErEABBK0AAQStQAEErYABBK3AAQSuAAEEroABBK8AAQSvQAEEr4ABBLAAAQSwQAEEwAABBMCAAQTBAAEEwYABBMJAAQTCgAEEwsABBMMAAQTDQAEEw8ABBMRAAQTEgAEExMABBMVAAQTFgAEE1UABBNXAAQTWQAEE1sABBNeAAQTXwAEE2AABBNhAAQTYgAEE2QABBNmAAQTZwAEE2gABBNqAAQTawAEE6oABBOsAAQTrgAEE7AABBOzAAQTtAAEE7UABBO2AAQTtwAEE7kABBO7AAQTvAAEE70ABBO/AAQTwAAEE/8ABBQBAAQUAwAEFAUABBQIAAQUCQAEFAoABBQLAAQUDAAEFA4ABBQQAAQUEQAEFBIABBQUAAQUFQAEFFQABBRWAAQUWAAEFFoABBRdAAQUXgAEFF8ABBRgAAQUYQAEFGMABBRlAAQUZgAEFGcABBRpAAQUagAEFHMABBR0AAQUdgAEFLkABBTdAAQVAQAEFSQABBVLAAQVawAEFZIABBW5AAQV2QAEFf0ABBYhAAQWIwAEFiYABBYoAAQWKgAEFiwABBYvAAQWMgAEFjQABBY2AAQWOQAEFjsABBY9AAQWQAAEFkMABBZEAAQWSQAEFlYABBZZAAQWWwAEFl4ABBZhAAQWYwAEFogABBasAAQW0wAEFvcABBb6AAQW/AAEFv4ABBcAAAQXAgAEFwQABBcFAAQXCAAEFxUABBcoAAQXKgAEFywABBcuAAQXMAAEFzIABBc0AAQXNgAEFzgABBc6AAQXTQAEF1AABBdTAAQXVgAEF1kABBdcAAQXXwAEF2IABBdlAAQXaAAEF2oABBepAAQXqwAEF64ABBewAAQXswAEF7QABBe1AAQXtgAEF7cABBe5AAQXuwAEF7wABBe9AAQXvwAEF8AABBfJAAQXygAEF8wABBgLAAQYDQAEGA8ABBgRAAQYFAAEGBUABBgWAAQYFwAEGBgABBgaAAQYHAAEGB0ABBgeAAQYIAAEGCEABBhgAAQYYgAEGGUABBhnAAQYagAEGGsABBhsAAQYbQAEGG4ABBhwAAQYcgAEGHMABBh0AAQYdgAEGHcABBiAAAQYgQAEGIMABBjCAAQYxAAEGMYABBjIAAQYywAEGMwABBjNAAQYzgAEGM8ABBjRAAQY0wAEGNQABBjVAAQY1wAEGNgABBkXAAQZGQAEGRwABBkeAAQZIQAEGSIABBkjAAQZJAAEGSUABBknAAQZKQAEGSoABBkrAAQZLQAEGS4ABBk3AAQZOAAEGToABBl5AAQZewAEGX0ABBl/AAQZggAEGYMABBmEAAQZhQAEGYYABBmIAAQZigAEGYsABBmMAAQZjgAEGY8ABBnOAAQZ0AAEGdMABBnVAAQZ2AAEGdkABBnaAAQZ2wAEGdwABBneAAQZ4AAEGeEABBniAAQZ5AAEGeUABBnyAAQZ8wAEGfQABBn2AAQaNQAEGjcABBo5AAQaOwAEGj4ABBo/AAQaQAAEGkEABBpCAAQaRAAEGkYABBpHAAQaSAAEGkoABBpLAAQaigAEGowABBqPAAQakQAEGpQABBqVAAQalgAEGpcABBqYAAQamgAEGpwABBqdAAQangAEGqAABBqhAAQasAAEGr0ABBrEAAQaxwAEGsoABBrNAAQa1AAEGtcABBraAAQa3QAEGt8ABBrmAAQa8AAEGzsABBteAAQbfgAEG54ABBugAAQbogAEG6QABBumAAQbqQAEG6oABBurAAQbrgAEG68ABBuxAAQbsgAEG7QABBu3AAQbuAAEG7kABBu8AAQbvQAEG8YABBvTAAQb2AAEG9oABBvcAAQb4QAEG+QABBvnAAQb6QAEHA4ABBwyAAQcWQAEHH0ABByAAAQcggAEHIQABByGAAQciAAEHIoABByLAAQcjgAEHJsABBysAAQcrgAEHLAABByyAAQctAAEHLYABBy4AAQcugAEHLwABBzNAAQc0AAEHNMABBzWAAQc2QAEHNwABBzfAAQc4gAEHOUABBznAAQdJgAEHSgABB0qAAQdLAAEHS8ABB0wAAQdMQAEHTIABB0zAAQdNQAEHTcABB04AAQdOQAEHTsABB08AAQdewAEHX0ABB1/AAQdgQAEHYQABB2FAAQdhgAEHYcABB2IAAQdigAEHYwABB2NAAQdjgAEHZAABB2RAAQd0AAEHdIABB3VAAQd1wAEHdoABB3bAAQd3AAEHd0ABB3eAAQd4AAEHeIABB3jAAQd5AAEHeYABB3nAAQd9AAEHfUABB32AAQd+AAEHjcABB45AAQeOwAEHj0ABB5AAAQeQQAEHkIABB5DAAQeRAAEHkYABB5IAAQeSQAEHkoABB5MAAQeTQAEHowABB6OAAQekAAEHpIABB6VAAQelgAEHpcABB6YAAQemQAEHpsABB6dAAQengAEHp8ABB6hAAQeogAEHuEABB7jAAQe5QAEHucABB7qAAQe6wAEHuwABB7tAAQe7gAEHvAABB7yAAQe8wAEHvQABB72AAQe9wAEHzYABB84AAQfOgAEHzwABB8/AAQfQAAEH0EABB9CAAQfQwAEH0UABB9HAAQfSAAEH0kABB9LAAQfTAAEH4sABB+NAAQfjwAEH5EABB+UAAQflQAEH5YABB+XAAQfmAAEH5oABB+cAAQfnQAEH54ABB+gAAQfoQAEH8YABB/qAAQgEQAEIDUABCA4AAQgOgAEIDwABCA+AAQgQAAEIEIABCBDAAQgRgAEIFMABCBiAAQgZAAEIGYABCBoAAQgagAEIGwABCBuAAQgcAAEIH8ABCCCAAQghQAEIIgABCCLAAQgjgAEIJEABCCUAAQglgAEINUABCDXAAQg2QAEINsABCDeAAQg3wAEIOAABCDhAAQg4gAEIOQABCDmAAQg5wAEIOgABCDqAAQg6wAEISoABCEsAAQhLgAEITAABCEzAAQhNAAEITUABCE2AAQhNwAEITkABCE7AAQhPAAEIT0ABCE/AAQhQAAEIX8ABCGBAAQhgwAEIYUABCGIAAQhiQAEIYoABCGLAAQhjAAEIY4ABCGQAAQhkQAEIZIABCGUAAQhlQAEIdQABCHWAAQh2AAEIdoABCHdAAQh3gAEId8ABCHgAAQh4QAEIeMABCHlAAQh5gAEIecABCHpAAQh6gAEIikABCIrAAQiLQAEIi8ABCIyAAQiMwAEIjQABCI1AAQiNgAEIjgABCI6AAQiOwAEIjwABCI+AAQiPwAEIn4ABCKAAAQiggAEIoQABCKHAAQiiAAEIokABCKKAAQiiwAEIo0ABCKPAAQikAAEIpEABCKTAAQilAAEItMABCLVAAQi1wAEItkABCLcAAQi3QAEIt4ABCLfAAQi4AAEIuIABCLkAAQi5QAEIuYABCLoAAQi6QAEIzQABCNXAAQjdwAEI5cABCOZAAQjmwAEI50ABCOfAAQjogAEI6MABCOkAAQjpwAEI6gABCOqAAQjqwAEI60ABCOwAAQjsQAEI7IABCO1AAQjtgAEI7sABCPIAAQjzQAEI88ABCPRAAQj1gAEI9kABCPcAAQj3gAEJAMABCQnAAQkTgAEJHIABCR1AAQkdwAEJHkABCR7AAQkfQAEJH8ABCSAAAQkgwAEJJAABCShAAQkowAEJKUABCSnAAQkqQAEJKsABCStAAQkrwAEJLEABCTCAAQkxQAEJMgABCTLAAQkzgAEJNEABCTUAAQk1wAEJNoABCTcAAQlGwAEJR0ABCUfAAQlIQAEJSQABCUlAAQlJgAEJScABCUoAAQlKgAEJSwABCUtAAQlLgAEJTAABCUxAAQlcAAEJXIABCV0AAQldgAEJXkABCV6AAQlewAEJXwABCV9AAQlfwAEJYEABCWCAAQlgwAEJYUABCWGAAQlxQAEJccABCXKAAQlzAAEJc8ABCXQAAQl0QAEJdIABCXTAAQl1QAEJdcABCXYAAQl2QAEJdsABCXcAAQl6QAEJeoABCXrAAQl7QAEJiwABCYuAAQmMAAEJjIABCY1AAQmNgAEJjcABCY4AAQmOQAEJjsABCY9AAQmPgAEJj8ABCZBAAQmQgAEJoEABCaDAAQmhQAEJocABCaKAAQmiwAEJowABCaNAAQmjgAEJpAABCaSAAQmkwAEJpQABCaWAAQmlwAEJtYABCbYAAQm2gAEJtwABCbfAAQm4AAEJuEABCbiAAQm4wAEJuUABCbnAAQm6AAEJukABCbrAAQm7AAEJysABCctAAQnLwAEJzEABCc0AAQnNQAEJzYABCc3AAQnOAAEJzoABCc8AAQnPQAEJz4ABCdAAAQnQQAEJ4AABCeCAAQnhAAEJ4YABCeJAAQnigAEJ4sABCeMAAQnjQAEJ48ABCeRAAQnkgAEJ5MABCeVAAQnlgAEJ7sABCffAAQoBgAEKCoABCgtAAQoLwAEKDEABCgzAAQoNQAEKDcABCg4AAQoOwAEKEgABChXAAQoWQAEKFsABChdAAQoXwAEKGEABChjAAQoZQAEKHQABCh3AAQoegAEKH0ABCiAAAQogwAEKIYABCiJAAQoiwAEKMoABCjMAAQozgAEKNAABCjTAAQo1AAEKNUABCjWAAQo1wAEKNkABCjbAAQo3AAEKN0ABCjfAAQo4AAEKR8ABCkhAAQpIwAEKSUABCkoAAQpKQAEKSoABCkrAAQpLAAEKS4ABCkwAAQpMQAEKTIABCk0AAQpNQAEKXQABCl2AAQpeAAEKXoABCl9AAQpfgAEKX8ABCmAAAQpgQAEKYMABCmFAAQphgAEKYcABCmJAAQpigAEKckABCnLAAQpzQAEKc8ABCnSAAQp0wAEKdQABCnVAAQp1gAEKdgABCnaAAQp2wAEKdwABCneAAQp3wAEKh4ABCogAAQqIgAEKiQABConAAQqKAAEKikABCoqAAQqKwAEKi0ABCovAAQqMAAEKjEABCozAAQqNAAEKnMABCp1AAQqdwAEKnkABCp8AAQqfQAEKn4ABCp/AAQqgAAEKoIABCqEAAQqhQAEKoYABCqIAAQqiQAEKsgABCrKAAQqzAAEKs4ABCrRAAQq0gAEKtMABCrUAAQq1QAEKtcABCrZAAQq2gAEKtsABCrdAAQq3gAEKykABCtMAAQrbAAEK4wABCuOAAQrkAAEK5IABCuUAAQrlwAEK5gABCuZAAQrnAAEK50ABCufAAQroAAEK6IABCulAAQrpgAEK6cABCuqAAQrqwAEK7AABCu9AAQrwgAEK8QABCvGAAQrywAEK84ABCvRAAQr0wAEK/gABCwcAAQsQwAELGcABCxqAAQsbAAELG4ABCxwAAQscgAELHQABCx1AAQseAAELIUABCyWAAQsmAAELJoABCycAAQsngAELKAABCyiAAQspAAELKYABCy3AAQsugAELL0ABCzAAAQswwAELMYABCzJAAQszAAELM8ABCzRAAQtEAAELRIABC0UAAQtFgAELRkABC0aAAQtGwAELRwABC0dAAQtHwAELSEABC0iAAQtIwAELSUABC0mAAQtZQAELWcABC1pAAQtawAELW4ABC1vAAQtcAAELXEABC1yAAQtdAAELXYABC13AAQteAAELXoABC17AAQtugAELbwABC2/AAQtwQAELcQABC3FAAQtxgAELccABC3IAAQtygAELcwABC3NAAQtzgAELdAABC3RAAQt3gAELd8ABC3gAAQt4gAELiEABC4jAAQuJQAELicABC4qAAQuKwAELiwABC4tAAQuLgAELjAABC4yAAQuMwAELjQABC42AAQuNwAELnYABC54AAQuegAELnwABC5/AAQugAAELoEABC6CAAQugwAELoUABC6HAAQuiAAELokABC6LAAQujAAELssABC7NAAQuzwAELtEABC7UAAQu1QAELtYABC7XAAQu2AAELtoABC7cAAQu3QAELt4ABC7gAAQu4QAELyAABC8iAAQvJAAELyYABC8pAAQvKgAELysABC8sAAQvLQAELy8ABC8xAAQvMgAELzMABC81AAQvNgAEL3UABC93AAQveQAEL3sABC9+AAQvfwAEL4AABC+BAAQvggAEL4QABC+GAAQvhwAEL4gABC+KAAQviwAEL7AABC/UAAQv+wAEMB8ABDAiAAQwJAAEMCYABDAoAAQwKgAEMCwABDAtAAQwMAAEMD0ABDBMAAQwTgAEMFAABDBSAAQwVAAEMFYABDBYAAQwWgAEMGkABDBsAAQwbwAEMHIABDB1AAQweAAEMHsABDB+AAQwgAAEML8ABDDBAAQwwwAEMMUABDDIAAQwyQAEMMoABDDLAAQwzAAEMM4ABDDQAAQw0QAEMNIABDDUAAQw1QAEMRQABDEWAAQxGAAEMRoABDEdAAQxHgAEMR8ABDEgAAQxIQAEMSMABDElAAQxJgAEMScABDEpAAQxKgAEMWkABDFrAAQxbQAEMW8ABDFyAAQxcwAEMXQABDF1AAQxdgAEMXgABDF6AAQxewAEMXwABDF+AAQxfwAEMb4ABDHAAAQxwgAEMcQABDHHAAQxyAAEMckABDHKAAQxywAEMc0ABDHPAAQx0AAEMdEABDHTAAQx1AAEMhMABDIVAAQyFwAEMhkABDIcAAQyHQAEMh4ABDIfAAQyIAAEMiIABDIkAAQyJQAEMiYABDIoAAQyKQAEMmgABDJqAAQybAAEMm4ABDJxAAQycgAEMnMABDJ0AAQydQAEMncABDJ5AAQyegAEMnsABDJ9AAQyfgAEMr0ABDK/AAQywQAEMsMABDLGAAQyxwAEMsgABDLJAAQyygAEMswABDLOAAQyzwAEMtAABDLSAAQy0wAEMtwABDLdAAQy3wAEMyIABDNGAAQzagAEM40ABDO0AAQz1AAEM/sABDQiAAQ0QgAENGYABDSKAAQ0jAAENI8ABDSRAAQ0kwAENJUABDSYAAQ0mwAENJ0ABDSfAAQ0ogAENKQABDSmAAQ0qQAENKwABDStAAQ0sgAENL8ABDTCAAQ0xAAENMcABDTKAAQ0zAAENPEABDUVAAQ1PAAENWAABDVjAAQ1ZQAENWcABDVpAAQ1awAENW0ABDVuAAQ1cQAENX4ABDW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7AARAPAAEQD0ABEA/AARAQAAEQH8ABECBAARAgwAEQIUABECIAARAiQAEQIoABECLAARAjAAEQI4ABECQAARAkQAEQJIABECUAARAlQAEQNQABEDWAARA2AAEQNoABEDdAARA3gAEQN8ABEDgAARA4QAEQOMABEDlAARA5gAEQOcABEDpAARA6gAEQSkABEErAARBLQAEQS8ABEEyAARBMwAEQTQABEE1AARBNgAEQTgABEE6AARBOwAEQTwABEE+AARBPwAEQYoABEGtAARBzQAEQe0ABEHvAARB8QAEQfMABEH1AARB+AAEQfkABEH6AARB/QAEQf4ABEIAAARCAQAEQgMABEIGAARCBwAEQggABEILAARCDAAEQhEABEIeAARCIwAEQiUABEInAARCLAAEQi8ABEIyAARCNAAEQlkABEJ9AARCpAAEQsgABELLAARCzQAEQs8ABELRAARC0wAEQtUABELWAARC2QAEQuYABEL3AARC+QAEQvsABEL9AARC/wAEQwEABEMDAARDBQAEQwcABEMYAARDGwAEQx4ABEMhAARDJAAEQycABEMqAARDLQAEQzAABEMyAARDcQAEQ3MABEN1AARDdwAEQ3oABEN7AARDfAAEQ30ABEN+AARDgAAEQ4IABEODAARDhAAEQ4YABEOHAARDxgAEQ8gABEPKAARDzAAEQ88ABEPQAARD0QAEQ9IABEPTAARD1QAEQ9cABEPYAARD2QAEQ9sABEPcAAREGwAERB0ABEQgAAREIgAERCUABEQmAAREJwAERCgABEQpAAREKwAERC0ABEQuAARELwAERDEABEQyAAREPwAEREAABERBAAREQwAERIIABESEAAREhgAERIgABESLAAREjAAERI0ABESOAAREjwAERJEABESTAARElAAERJUABESXAAREmAAERNcABETZAARE2wAERN0ABETgAARE4QAEROIABETjAARE5AAEROYABEToAARE6QAEROoABETsAARE7QAERSwABEUuAARFMAAERTIABEU1AARFNgAERTcABEU4AARFOQAERTsABEU9AARFPgAERT8ABEVBAARFQgAERYEABEWDAARFhQAERYcABEWKAARFiwAERYwABEWNAARFjgAERZAABEWSAARFkwAERZQABEWWAARFlwAERdYABEXYAARF2gAERdwABEXfAARF4AAEReEABEXiAARF4wAEReUABEXnAARF6AAERekABEXrAARF7AAERhEABEY1AARGXAAERoAABEaDAARGhQAERocABEaJAARGiwAERo0ABEaOAARGkQAERp4ABEatAARGrwAERrEABEazAARGtQAERrcABEa5AARGuwAERsoABEbNAARG0AAERtMABEbWAARG2QAERtwABEbfAARG4QAERyAABEciAARHJAAERyYABEcpAARHKgAERysABEcsAARHLQAERy8ABEcxAARHMgAERzMABEc1AARHNgAER3UABEd3AARHeQAER3sABEd+AARHfwAER4AABEeBAARHggAER4QABEeGAARHhwAER4gABEeKAARHiwAER8oABEfMAARHzgAER9AABEfTAARH1AAER9UABEfWAARH1wAER9kABEfbAARH3AAER90ABEffAARH4AAESB8ABEghAARIIwAESCUABEgoAARIKQAESCoABEgrAARILAAESC4ABEgwAARIMQAESDIABEg0AARINQAESHQABEh2AARIeAAESHoABEh9AARIfgAESH8ABEiAAARIgQAESIMABEiFAARIhgAESIcABEiJAARIigAESMkABEjLAARIzQAESM8ABEjSAARI0wAESNQABEjVAARI1gAESNgABEjaAARI2wAESNwABEjeAARI3wAESR4ABEkgAARJIgAESSQABEknAARJKAAESSkABEkqAARJKwAESS0ABEkvAARJMAAESTEABEkzAARJNAAEST0ABEk+AARJQAAESU0ABElOAARJTwAESVEABEleAARJXwAESWAABEliAARJbwAESXAABElxAARJcwAESXwABEmLAARJmAAESacABEm5AARJzQAESeQABEn2AARJ/wAESgAABEoCAARKDwAEShAABEoRAARKEwAEShwABEomAARKLQAAAAAAAAQCAAAAAAAApacAAAAAAAAAAAAAAAAABEo1 + + fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel + YnBsaXN0MDDUAAEAAgADAAQABQAGAAcAClgkdmVyc2lvblkkYXJjaGl2ZXJUJHRvcFgkb2JqZWN0 +cxIAAYagXxAPTlNLZXllZEFyY2hpdmVy0QAIAAlUcm9vdIABrxEPLQALAAwAGQA1ADYANwBnAGgAaQBqAGsAbABtAG4AbwBwAHEAcgBzAHQAdQB2AHcAeAB5AHoAewB8AJcAmACZAJ8AoACsAMIAwwDEAMUAxgDHAMgAyQDKAMsA5ADnAO4A9AEDARIBFQEkATMBNgCWAUYBVQFZAV0BbAFyAXMBewGKAYsBlAGcAZ0BngGzAbQBvAG9Ab4BygHeAd8B4AHhAeIB4wHkAeUB5gH1AgQCEwIXAiYCNQI2AkUCVAJjAm8CgQKCAoMChAKFAoYChwKIApcCpgK1AsQCxQLUAuMC8gL6Aw8DEAMYAyQDOANHA1YDZQNpA3gDhwOWA6UDtAPAA9ID4QPwA/8EDgQdBCwEOwQ8BD8ESARiBGMEaQR1BIsEmgSdBKwEuwS+BM0E3ATfBO4E/QUBBRAFHwUgBSoFKwUsBS0FQgVDBUsFVwVrBXoFiQWYBZwFqwW6BckF2AXnBfMGBQYUBiMGMgZBBlAGXwZuBoMGhAaMBpgGrAa7BsoG2QbdBuwG+wcKBxkHKAc0B0YHVQdkB3MHggeRB6AHrwfEB8UHzQfZB+0H/AgLCBoIHggtCDwISwhaCGkIdQiHCJYIpQi0CMMI0gjhCPAI8wkNCQ4JFAkgCTYJRQlICVcJZglqCW4Jbwl+CY0JkAmfCa4JsgnBCdAKGAoZChoKGwocCh0KHgofCiAKIQoiCiMKJAolCiYKJwooCikKKgorCiwKLQouCi8KMAoxCjIKMwo0CjUKNgo3CjgKOQpOCk8KVwpjCncKhgqVCqQKqAq3CsYK1QrkCvMK/wsRCyALLws+C00LTgtdC2wLewuQC5ELmQulC7kLyAvXC+YL6gv5DAgMFwwmDDUMQQxTDGIMcQyADI8MngytDLwM0QzSDNoM5gz6DQkNGA0nDSsNOg1JDVgNZw12DYINlA2jDaQNsw3CDdEN0g3hDfAN/w4UDhUOHQ4pDj0OTA5bDmoObg59DowOmw6qDrkOxQ7XDuYO9Q8EDxMPIg8xD0APVQ9WD14Pag9+D40PnA+rD68Pvg/ND9wP6w/6EAYQGBAnEDYQRRBUEGMQchCBEJYQlxCfEKsQvxDOEN0Q7BDwEP8RDhEdESwROxFHEVkRaBF3EYYRlRGkEbMRwhHXEdgR4BH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QV9FX2VflV/lYCFgXWCZYKlg5WEhYV1hmWHVYgViTWKJYsVjAWM9Y3ljtWPxZEVkSWRpZJlk6WUlZWFlnWWtZelmJWZhZp1m2WcJZ1FnjWfJaAVoQWh9aLlo9WlJaU1pbWmdae1qKWplaqFqsWrtaylrZWuha91sDWxVbJFszW0JbUVtgW29bfluTW5RbnFuoW7xby1vaW+lb7Vv8XAtcGlwpXDhcRFxWXGVcdFyDXJJcoVywXL9c1FzVXN1c6Vz9XQxdG10qXS5dPV1MXVtdal15XYVdl12mXbVdxF3TXeJd8V4AXhVeFl4eXipePl5NXlxea15vXn5ejV6cXqteul7GXthe5172XwVfFF8jXzJfQV9EX1NfYl9xX4Zfh1+PX5tfr1++X81f3F/gX+9f/mANYBxgK2A3YElgWGBnYHZghWCUYKNgsmDHYMhg0GDcYPBg/2EOYR1hIWEwYT9hTmFdYWxheGGKYZlhqGG3YcZh1WHkYfNiCGIJYhFiHWIxYkBiT2JeYmJicWKAYo9inmKtYrliy2LaYuli+GMHYxZjJWM0Y0ljSmNSY15jcmOBY5Bjn2OjY7JjwWPQY99j7mP6ZAxkG2QqZDlkSGRXZGZkdWSKZItkk2SfZLNkwmTRZOBk5GTzZQJlEWUgZS9lO2VNZVxla2V6ZYllmGWnZbZly2XMZdRl4GX0ZgNmEmYhZiVmNGZDZlJmYWZwZnxmjmadZqxmu2bKZtlm6Gb3ZwxnDWcVZyFnNWdEZ1NnYmdmZ3VnhGeTZ6JnsWe9Z89n3mftZ/xoC2gaaCloOGhNaE5oVmhiaHZohWiUaKNop2i2aMVo1GjjaPJo/mkQaR9pLmk9aUxpW2lqaWtpemmPaZBpmGmkabhpx2nWaeVp6Wn4agdqFmolajRqQGpSamFqcGp/ao5qnWqsartq0GrRatlq5Wr5awhrF2smayprOWtIa1drZmt1a4Frk2uia7FrwGvPa95r7Wv8bBFsEmwabCZsOmxJbFhsZ2xrbHpsiWyYbKdstmzCbNRs42zybQFtEG0fbS5tPW1SbVNtW21nbXttim2ZbahtrG27bcpt2W3obfduA24VbiRuM25CblFuYG5vbn5ugW6Qbp9urm7DbsRuzG7Ybuxu+28KbxlvHW8sbztvSm9Zb2hvdG+Gb5VvpG+zb8Jv0W/gb+9wBHAFcA1wGXAtcDxwS3BacF5wbXB8cItwmnCpcLVwx3DWcOVw9HEDcRJxIXEwcUVxRnFOcVpxbnF9cYxxm3Gfca5xvXHMcdtx6nH2cghyF3ImcjVyRHJTcmJycXKGcodyj3Kbcq9yvnLNctxy4HLvcv5zDXMccytzN3NJc1hzZ3N2c4VzlHOjc7JztXPPc9Bz1nPic/h0B3QKdBl0KHQrdDp0SXRMdFt0anRudH10jHSgdKF0onSjdKR0pXS6dLt0w3TPdON08nUBdRB1FHUjdTJ1QXVQdV91a3V9dYx1m3Wqdbl1yHXXdeZ1+3X8dgR2EHYkdjN2QnZRdlV2ZHZzdoJ2kXagdqx2vnbNdtx263b6dwl3GHcZdyh3PXc+d0Z3Undmd3V3hHeTd5d3pne1d8R303fid+54AHgPeB54LXg8eEt4WnhpeH54f3iHeJN4p3i2eMV41HjYeOd49nkFeRR5I3kveUF5UHlfeW55fXmMeZt5qnm/ecB5yHnUeeh593oGehV6GXooejd6RnpVemR6cHqCepF6oHqver56zXrceut7AHsBewl7FXspezh7R3tWe1p7aXt4e4d7lnule7F7w3vSe+F78Hv/fA58HXwsfEF8QnxKfFZ8anx5fIh8l3ybfKp8uXzIfNd85nzyfQR9E30ifTF9QH1PfV59bX2CfYN9i32Xfat9un3Jfdh93H3rffp+CX4Yfid+M35FflR+Y35yfoF+kH6ffq5+sX7Lfsx+0n7efvR/A38GfxV/JH8nfzZ/RX9If1d/Zn9qf3l/iH+Jf51/nn+ff6B/oX+if6N/uH+5f8F/zX/hf/B//4AOgBKAIYAwgD+AToBdgGmAe4CKgJmAqIC3gMaA1YDkgPmA+oECgQ6BIoExgUCBT4FTgWKBcYGAgY+BnoGqgbyBy4HagemB+IIHghaCJYI6gjuCQ4JPgmOCcoKBgpCClIKjgrKCwYLQgt+C64L9gwyDG4MqgzmDSINXg2aDe4N8g4SDkIOkg7ODwoPRg9WD5IPzhAKEEYQghCyEPoRNhFyEa4R6hImEmISnhLyEvYTFhNGE5YT0hQOFEoUWhSWFNIVDhVKFYYVthX+FjoWdhayFu4XKhdmF6IX9hf6GBoYShiaGNYZEhlOGV4ZmhnWGhIaThqKGrobAhs+G3obthvyG/YcMhxuHKoc/h0CHSIdUh2iHd4eGh5WHmYeoh7eHxofVh+SH8IgCiBGIIIgviD6ITYhciGuIgIiBiImIlYipiLiIx4jWiNqI6Yj4iQeJFokliTGJQ4lSiWGJcIl/iY6JnYmsia+JyYnKidCJ3InyigGKBIoTiiKKJYo0ikOKRopVimSKaIp3ioaKh4qTipSKlYqqiquKs4q/itOK4orxiwCLBIsTiyKLMYtAi0+LW4tti3yLi4uai6mLuIvHi9aL64vsi/SMAIwUjCOMMoxBjEWMVIxjjHKMgYyQjJyMroy9jMyM24zqjPmNCI0XjSyNLY01jUGNVY1kjXONgo2GjZWNpI2zjcKN0Y3dje+N/o4NjhyOK446jkmOWI5tjm6Odo6CjpaOpY60jsOOx47WjuWO9I8DjxKPHo8wjz+PTo9dj2yPe4+Kj5mPnI+2j7ePvY/Jj9+P7o/xkACQD5ASkCGQMJAzkEKQUZBVkGSQc5B0kI6Qj5CQkJGQkpCTkJSQlZCWkJeQmJCtkK6QtpDCkNaQ5ZD0kQORB5EWkSWRNJFDkVKRXpFwkX+RjpGdkayRu5HKkdmR7pHvkfeSA5IXkiaSNZJEkkiSV5JmknWShJKTkp+SsZLAks+S3pLtkvyTC5Maky+TMJM4k0STWJNnk3aThZOJk5iTp5O2k8WT1JPgk/KUAZQQlB+ULpQ9lEyUW5RwlHGUeZSFlJmUqJS3lMaUypTZlOiU95UGlRWVIZUzlUKVUZVglW+VfpWNlZyVsZWylbqVxpXalemV+JYHlguWGpYpljiWR5ZWlmKWdJaDlpKWoZawlr+WzpbdlvKW85b7lweXG5cqlzmXSJdMl1uXapd5l4iXl5ejl7WXxJfTl+KX8ZfymAGYEJgfmDSYNZg9mEmYXZhsmHuYipiOmJ2YrJi7mMqY2ZjlmPeZBpkVmSSZM5lCmVGZYJl1mXaZfpmKmZ6ZrZm8mcuZz5neme2Z/JoLmhqaJpo4mkeaVpplmnSag5qSmqGatpq3mr+ay5rfmu6a/ZsMmxCbH5sumz2bTJtbm2ebeZuIm5ebppu1m8Sb05vim/eb+JwAnAycIJwvnD6cTZxRnGCcb5x+nI2cnJyonLqcyZzYnOec9p0FnRSdI504nTmdQZ1NnWGdcJ1/nY6dkp2hnbCdv53Ond2d6Z37ngqeGZ4onjeeRp5VnmSeZ56BnoKeiJ6UnqqeuZ68nsue2p7dnuye+57+nw2fHJ8gny+fPp8/n0efSJ9dn16fZp9yn4aflZ+kn7Oft5/Gn9Wf5J/zoAKgDqAgoC+gPqBNoFyga6B6oImgnqCfoKegs6DHoNag5aD0oPihB6EWoSWhNKFDoU+hYaFwoX+hjqGdoayhu6HKoc2h56Hooe6h+qIQoh+iIqIxokCiQ6JSomGiZKJzooKihqKVoqSipaKzorSitaK2oreizKLNotWi4aL1owSjE6MioyajNaNEo1OjYqNxo32jj6Oeo62jvKPLo9qj6aP4pA2kDqQWpCKkNqRFpFSkY6RnpHakhaSUpKOksqS+pNCk36TupP2lDKUbpSqlOaVOpU+lV6VjpXelhqWVpaSlqKW3pcal1aXkpfOl/6YRpiCmL6Y+pk2mXKZrpnqmj6aQppimpKa4psem1qblpumm+KcHpxanJac0p0CnUqdhp3Cnf6eOp4+nnqetp7yn0afSp9qn5qf6qAmoGKgnqCuoOqhJqFioZ6h2qIKolKijqLKowajQqN+o7qj9qQCpGqkbqSGpLalDqVKpValkqXOpdqmFqZSpl6mmqbWpuanIqdep2Knmqeep6Knpqeqp/6oAqgiqFKooqjeqRqpVqlmqaKp3qoaqlaqkqrCqwqrRquCq76r+qw2rHKsdqyyrQatCq0qrVqtqq3mriKuXq5urqqu5q8ir16vmq/KsBKwTrCKsMaxArE+sXqxfrG6sg6yErIysmKysrLusyqzZrN2s7Kz7rQqtGa0orTStRq1VrWStc62CrZGtoK2vrcStxa3Nrdmt7a38rguuGq4eri2uPK5Lrlquaa51roWulK6urq+uta7Brteu5q7prvivB68KrxmvKK8rrzqvSa9Nr1yva69sr3avd694r42vjq+Wr6Kvtq/Fr9Sv46/nr/awBbAUsCOwMrA+sFCwX7BusH2wjLCbsKqwubDOsM+w17DjsPexBrEVsSSxKLE3sUaxVbFksXOxf7GRsaCxr7G+sc2x3LHrsfqyD7IQshiyJLI4skeyVrJlsmmyeLKHspaypbK0ssCy0rLhsvCy/7MOsx2zLLM7sz6zTbNcs2uzerOJs56zn7Ons7Ozx7PWs+Wz9LP4tAe0FrQltDS0Q7RPtGG0cLR/tI60nbSstLu0yrTNtOe06LTutPq1ELUftSK1MbVAtUO1UrVhtWS1c7WCtYa1lbWkta61w7XEtcy12LXstfu2CrYZth22LLY7tkq2WbZotnS2hraVtqS2s7bCttG24LbvtwS3BbcNtxm3Lbc8t0u3Wrdet223fLeLt5q3qbe1t8e31rflt/S4A7gSuCG4MLhFuEa4TrhauG64fbiMuJu4n7iuuL24zLjbuOq49rkIuRe5Jrk1uUS5U7liuXG5dLmOuY+5lbmhube5xrnJudi557nqufm6CLoLuhq6Kbotujy6S7pMulq6W7pcul26XrpzunS6fLqIupy6q7q6usm6zbrcuuu6+rsJuxi7JLs2u0W7VLtju3K7gbuQu5+7tLu1u727ybvdu+y7+7wKvA68HbwsvDu8SrxZvGW8d7yGvJW8pLyzvMK80bzgvPW89rz+vQq9Hr0tvTy9S71PvV69bb18vYu9mr2mvbi9x73WveW99L4DvhK+Ib42vje+P75Lvl++br59voy+kL6fvq6+vb7Mvtu+5775vwi/F78mvzW/RL9Tv2K/d794v4C/jL+gv6+/vr/Nv9G/4L/vv/7ADcAcwCjAOsBJwFjAZ8B2wIXAlMCjwKbAwMDBwMfA08DpwPjA+8EKwRnBHMErwTrBPcFMwVvBX8FuwX3BfsGIwYnBnsGfwafBs8HHwdbB5cH0wfjCB8IWwiXCNMJDwk/CYcJwwn/CjsKdwqzCu8LKwt/C4MLowvTDCMMXwybDNcM5w0jDV8Nmw3XDhMOQw6LDscPAw8/D3sPtw/zEC8QgxCHEKcQ1xEnEWMRnxHbEesSJxJjEp8S2xMXE0cTjxPLFAcUQxR/FLsU9xUzFT8VTxVfFW8VjxWbFalUkbnVsbNYADQAOAA8AEAARABIAEwAUABUAFgAXABhfEA9feGRfcm9vdFBhY2thZ2VWJGNsYXNzXV94ZF9tb2RlbE5hbWVcX3hkX2NvbW1lbnRzXxAVX2NvbmZpZ3VyYXRpb25zQnlOYW1lXxAXX21vZGVsVmVyc2lvbklkZW50aWZpZXKAAoEPLIAAgQ8qgQ8rgQJM3gAaABsAHAAdAB4AHwAgAA4AIQAiACMAJAAlACYAJwAoACkACQAnABUALQAuAC8AMAAxACcAJwAVXxAcWERCdWNrZXRGb3JDbGFzc2Vzd2FzRW5jb2RlZF8QGlhEQnVja2V0Rm9yUGFja2FnZXNzdG9yYWdlXxAcWERCdWNrZXRGb3JJbnRlcmZhY2Vzc3RvcmFnZV8QD194ZF9vd25pbmdNb2RlbF8QHVhEQnVja2V0Rm9yUGFja2FnZXN3YXNFbmNvZGVkVl9vd25lcl8QG1hEQnVja2V0Rm9yRGF0YVR5cGVzc3RvcmFnZVtfdmlzaWJpbGl0eV8QGVhEQnVja2V0Rm9yQ2xhc3Nlc3N0b3JhZ2VVX25hbWVfEB9YREJ1Y2tldEZvckludGVyZmFjZXN3YXNFbmNvZGVkXxAeWERCdWNrZXRGb3JEYXRhVHlwZXN3YXNFbmNvZGVkXxAQX3VuaXF1ZUVsZW1lbnRJRIAEgQ8ogQ8mgAGABIAAgQ8ngQ8pEACABYADgASABIAAUFNZRVPTADgAOQAOADoAUABmV05TLmtleXNaTlMub2JqZWN0c68QFQA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4AT4AGgAeACIAJgAqAC4AMgA2ADoAPgBCAEYASgBOAFIAVgBaAF4AYgBmAGq8QFQBRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEAYgBjAGQAZYAbgImA5oEGOoEI9oEJyIEKnIELD4EMLIEMcIEM/YEB2IEN5oEG2oEOP4ED4IEOy4EF2oEFC4EEZ4ENbYA5W0NEU3Rhc2hJdGVtXxATQ0RYY21BdmFpbGFibGVBc3NldFdDRENoYWluXxAPQ0RQcmljZVByb3ZpZGVyWUNEVG9uRGFwcF8QEUNEVG9uQ29ubmVjdGVkQXBwWkNEU2NhbUluZm9fEBhDRFRyYW5zYWN0aW9uSGlzdG9yeUl0ZW1fEBJDRENoYWluU3RvcmFnZUl0ZW1fEBVDRFJ1bnRpbWVNZXRhZGF0YUl0ZW1fEBlDRFBvbGthc3dhcFJlbW90ZVNldHRpbmdzW0NEQ2hhaW5Ob2RlWUNEQ29udGFjdFtDRFByaWNlRGF0YV1DRENvbnRhY3RJdGVtXxAQQ0RDaGFpblhjbUNvbmZpZ15DRFBoaXNoaW5nSXRlbVdDREFzc2V0XUNERXh0ZXJuYWxBcGlfEBlDRFhjbUF2YWlsYWJsZURlc3RpbmF0aW9uXkNEUG9sa2Fzd2FwRGV43xAQAH0AfgB/AIAAHwCBAIIAIQCDAIQADgAjAIUAhgAmAIcAiACJACcAJwATAI0AjgAvACcAiACRADsAiACUAJUAll8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc2R1cGxpY2F0ZXNfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zc3RvcmFnZVtfaXNBYnN0cmFjdIAdgEGABIAEgAKAHoCGgASAHYCIgAaAHYCHgBwIElL5LtlXb3JkZXJlZNMAOAA5AA4AmgCcAGahAJuAH6EAnYAggDleWERfUFN0ZXJlb3R5cGXZAB8AIwChAA4AJgCiACEAhwCjAFEAmwCIAKcAFQAnAC8AlgCrXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgBuAH4AdgECAAIAECIAh0wA4ADkADgCtALcAZqkArgCvALAAsQCyALMAtAC1ALaAIoAjgCSAJYAmgCeAKIApgCqpALgAuQC6ALsAvAC9AL4AvwDAgCuAL4AwgDKAM4A1gDeAOoA+gDlfEBNYRFBNQ29tcG91bmRJbmRleGVzXxAQWERfUFNLX2VsZW1lbnRJRF8QGVhEUE1VbmlxdWVuZXNzQ29uc3RyYWludHNfEBpYRF9QU0tfdmVyc2lvbkhhc2hNb2RpZmllcl8QGVhEX1BTS19mZXRjaFJlcXVlc3RzQXJyYXlfEBFYRF9QU0tfaXNBYnN0cmFjdF8QD1hEX1BTS191c2VySW5mb18QE1hEX1BTS19jbGFzc01hcHBpbmdfEBZ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AH05mTmcAIU5oTmkADgAjTmpOawAmAIcAiE5tACcAJwATTnEAjgAvACcAiACRAD4AiE54TnkAll8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZV8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc2R1cGxpY2F0ZXNfECRYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zb3JkZXJlZF8QIVhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zc3RvcmFnZYAdgQZNgASABIACgQY8gIaABIAdgIiACYAdgQargQY7CBLCxbSG0wA4ADkADk59Tn8AZqEAm4AfoU6AgQY9gDnZAB8AI06DAA4AJk6EACEAh06FAFQAmwCIAKcAFQAnAC8Alk6NXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQY6gB+AHYBAgACABAiBBj7TADgAOQAOTo9OmQBmqQCuAK8AsACxALIAswC0ALUAtoAigCOAJIAlgCaAJ4AogCmAKqlOmk6bTpxOnU6eTp9OoE6hTqKBBj+BBkGBBkKBBkSBBkWBBkeBBkiBBkqBBkuAOd8QDwDMAM0AzgAfAM8A0ADRACEA0gAOACMA0wDUACYA1QAVTqYAFU6AAJYAlgCWAC8AlgDeAK4AlgCWABUAloAAgQZAgACBBj0ICAgIgC6AIggIgAAI0gA5AA5OtADmoIAt3xAPAMwAzQDOAB8AzwDQANEAIQDSAA4AIwDTANQAJgDVABUAFQAVToAAlgCWAJYALwCWAN4ArwCWAJY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AACbLAAAm4QAAJvoAACc5AAAnPwAAJ0gAACdVAAAnYQAAJ2sAACd1AAAngAAAJ4sAACeYAAAnoAAAJ6IAACekAAAnpgAAJ6gAACepAAAnqgAAJ6sAACesAAAnrgAAJ7AAACexAAAnsgAAJ7QAACe1AAAnvgAAJ78AACfBAAAnygAAJ9UAACfeAAAn7QAAJ/QAACf8AAAoBQAAKA4AACghAAAoKgAAKD0AAChUAAAoZgAAKKUAACinAAAoqQAAKKsAACitAAAorgAAKK8AACiwAAAosQAAKLMAACi1AAAotgAAKLcAACi5AAAougAAKPkAACj7AAAo/QAAKP8AACkBAAApAgAAKQMAACkEAAApBQAAKQcAACkJAAApCgAAKQsAACkNAAApDgAAKRcAACkYAAApGgAAKVkAAClbAAApXQAAKV8AAClhAAApYgAAKWMAAClkAAApZQAAKWcAAClpAAApagAAKWsAACltAAApbgAAKa0AACmvAAApsQAAKbMAACm1AAAptgAAKbcAACm4AAApuQAAKbsAACm9AAApvgAAKb8AACnBAAApwgAAKcsAACnMAAApzgAAKg0AACoPAAAqEQAAKhMAACoVAAAqFgAAKhcAACoYAAAqGQAAKhsAACodAAAqHgAAKh8AACohAAAqIgAAKiMAACpiAAAqZAAAKmYAACpoAAAqagAAKmsAACpsAAAqbQAAKm4AACpwAAAqcgAAKnMAACp0AAAqdgAAKncAACqEAAAqhQAAKoYAACqIAAAqkQAAKqcAACquAAAquwAAKvoAACr8AAAq/gAAKwAAACsCAAArAwAAKwQAACsFAAArBgAAKwgAACsKAAArCwAAKwwAACsOAAArDwAAKygAACsqAAArLAAAKy4AACsvAAArMQAAK0gAACtRAAArXwAAK2wAACt6AAArjwAAK6MAACu6AAArzAAALAsAACwNAAAsDwAALBEAACwTAAAsFAAALBUAACwWAAAsFwAALBkAACwbAAAsHAAALB0AACwfAAAsIAAALCwAACw1AAAsSgAALFkAACxuAAAsfAAALJEAACylAAAsvAAALM4AACzbAAAs4AAALOIAACzkAAAs6QAALOsAACztAAAs7wAALPUAAC0AAAAtSwAALW4AAC2OAAAtrgAALbAAAC2yAAAttAAALbYAAC24AAAtuQAALboAAC28AAAtvQAALb8AAC3AAAAtwgAALcQAAC3FAAAtxgAALcgAAC3JAAAtzgAALdsAAC3gAAAt4gAALeQAAC3pAAAt6wAALe0AAC3vAAAuBAAALhkAAC4+AAAuYgAALokAAC6tAAAurwAALrEAAC6zAAAutQAALrcAAC65AAAuugAALrwAAC7JAAAu2gAALtwAAC7eAAAu4AAALuIAAC7kAAAu5gAALugAAC7qAAAu+wAALv0AAC7/AAAvAQAALwMAAC8FAAAvBwAALwkAAC8LAAAvDQAALysAAC9JAAAvXAAAL3AAAC+FAAAvogAAL7YAAC/MAAAwCwAAMA0AADAPAAAwEQAAMBMAADAUAAAwFQAAMBYAADAXAAAwGQAAMBsAADAcAAAwHQAAMB8AADAgAAAwXwAAMGEAADBjAAAwZQAAMGcAADBoAAAwaQAAMGoAADBrAAAwbQAAMG8AADBwAAAwcQAAMHMAADB0AAAwswAAMLUAADC3AAAwuQAAMLsAADC8AAAwvQAAML4AADC/AAAwwQAAMMMAADDEAAAwxQAAMMcAADDIAAAw1QAAMNYAADDXAAAw2QAAMRgAADEaAAAxHAAAMR4AADEgAAAxIQAAMSIAADEjAAAxJAAAMSYAADEoAAAxKQAAMSoAADEsAAAxLQAAMWwAADFuAAAxcAAAMXIAADF0AAAxdQAAMXYAADF3AAAxeAAAMXoAADF8AAAxfQAAMX4AADGAAAAxgQAAMYIAADHBAAAxwwAAMcUAADHHAAAxyQAAMcoAADHLAAAxzAAAMc0AADHPAAAx0QAAMdIAADHTAAAx1QAAMdYAADIVAAAyFwAAMhkAADIbAAAyHQAAMh4AADIfAAAyIAAAMiEAADIjAAAyJQAAMiYAADInAAAyKQAAMioAADJpAAAyawAAMm0AADJvAAAycQAAMnIAADJzAAAydAAAMnUAADJ3AAAyeQAAMnoAADJ7AAAyfQAAMn4AADKjAAAyxwAAMu4AADMSAAAzFAAAMxYAADMYAAAzGgAAMxwAADMeAAAzHwAAMyEAADMuAAAzPQAAMz8AADNBAAAzQwAAM0UAADNHAAAzSQAAM0sAADNaAAAzXAAAM14AADNgAAAzYgAAM2QAADNmAAAzaAAAM2oAADOKAAAztQAAM88AADPoAAA0AgAANCIAADRFAAA0hAAANIYAADSIAAA0igAANIwAADSNAAA0jgAANI8AADSQAAA0kgAANJQAADSVAAA0lgAANJgAADSZAAA02AAANNoAADTcAAA03gAANOAAADThAAA04gAANOMAADTkAAA05gAANOgAADTpAAA06gAANOwAADTtAAA1LAAANS4AADUwAAA1MgAANTQAADU1AAA1NgAANTcAADU4AAA1OgAANTwAADU9AAA1PgAANUAAADVBAAA1gAAANYIAADWEAAA1hgAANYgAADWJAAA1igAANYsAADWMAAA1jgAANZAAADWRAAA1kgAANZQAADWVAAA1mAAANdcAADXZAAA12wAANd0AADXfAAA14AAANeEAADXiAAA14wAANeUAADXnAAA16AAANekAADXrAAA17AAANisAADYtAAA2LwAANjEAADYzAAA2NAAANjUAADY2AAA2NwAANjkAADY7AAA2PAAANj0AADY/AAA2QAAANn8AADaBAAA2gwAANoUAADaHAAA2iAAANokAADaKAAA2iwAANo0AADaPAAA2kAAANpEAADaTAAA2lAAANp0AADarAAA2uAAANsYAADbTAAA25gAANv0AADcPAAA3WgAAN30AADedAAA3vQAAN78AADfBAAA3wwAAN8UAADfHAAA3yAAAN8kAADfLAAA3zAAAN84AADfPAAA30QAAN9MAADfUAAA31QAAN9cAADfYAAA33QAAN+oAADfvAAA38QAAN/MAADf4AAA3+gAAN/wAADf+AAA4IwAAOEcAADhuAAA4kgAAOJQAADiWAAA4mAAAOJoAADicAAA4ngAAOJ8AADihAAA4rgAAOL8AADjBAAA4wwAAOMUAADjHAAA4yQAAOMsAADjNAAA4zwAAOOAAADjiAAA45AAAOOYAADjoAAA46gAAOOwAADjuAAA48AAAOPIAADkxAAA5MwAAOTUAADk3AAA5OQAAOToAADk7AAA5PAAAOT0AADk/AAA5QQAAOUIAADlDAAA5RQAAOUYAADmFAAA5hwAAOYkAADmLAAA5jQAAOY4AADmPAAA5kAAAOZEAADmTAAA5lQAAOZYAADmXAAA5mQAAOZoAADnZAAA52wAAOd0AADnfAAA54QAAOeIAADnjAAA55AAAOeUAADnnAAA56QAAOeoAADnrAAA57QAAOe4AADn7AAA5/AAAOf0AADn/AAA6PgAAOkAAADpCAAA6RAAAOkYAADpHAAA6SAAAOkkAADpKAAA6TAAAOk4AADpPAAA6UAAAOlIAADpTAAA6kgAAOpQAADqWAAA6mAAAOpoAADqbAAA6nAAAOp0AADqeAAA6oAAAOqIAADqjAAA6pAAAOqYAADqnAAA65gAAOugAADrqAAA67AAAOu4AADrvAAA68AAAOvEAADryAAA69AAAOvYAADr3AAA6+AAAOvoAADr7AAA7OgAAOzwAADs+AAA7QAAAO0IAADtDAAA7RAAAO0UAADtGAAA7SAAAO0oAADtLAAA7TAAAO04AADtPAAA7jgAAO5AAADuSAAA7lAAAO5YAADuXAAA7mAAAO5kAADuaAAA7nAAAO54AADufAAA7oAAAO6IAADujAAA7yAAAO+wAADwTAAA8NwAAPDkAADw7AAA8PQAAPD8AADxBAAA8QwAAPEQAADxGAAA8UwAAPGIAADxkAAA8ZgAAPGgAADxqAAA8bAAAPG4AADxwAAA8fwAAPIEAADyDAAA8hQAAPIcAADyJAAA8iwAAPI0AADyPAAA8zgAAPNAAADzSAAA81AAAPNYAADzXAAA82AAAPNkAADzaAAA83AAAPN4AADzfAAA84AAAPOIAADzjAAA9IgAAPSQAAD0mAAA9KAAAPSoAAD0rAAA9LAAAPS0AAD0uAAA9MAAAPTIAAD0zAAA9NAAAPTYAAD03AAA9dgAAPXgAAD16AAA9fAAAPX4AAD1/AAA9gAAAPYEAAD2CAAA9hAAAPYYAAD2HAAA9iAAAPYoAAD2LAAA9ygAAPcwAAD3OAAA90AAAPdIAAD3TAAA91AAAPdUAAD3WAAA92AAAPdoAAD3bAAA93AAAPd4AAD3fAAA+HgAAPiAAAD4iAAA+JAAAPiYAAD4nAAA+KAAAPikAAD4qAAA+LAAAPi4AAD4vAAA+MAAAPjIAAD4zAAA+cgAAPnQAAD52AAA+eAAAPnoAAD57AAA+fAAAPn0AAD5+AAA+gAAAPoIAAD6DAAA+hAAAPoYAAD6HAAA+xgAAPsgAAD7KAAA+zAAAPs4AAD7PAAA+0AAAPtEAAD7SAAA+1AAAPtYAAD7XAAA+2AAAPtoAAD7bAAA+5gAAPu8AAD7wAAA+8gAAPvsAAD8GAAA/FQAAPyAAAD8uAAA/QwAAP1cAAD9uAAA/gAAAP8MAAD/nAABACwAAQC4AAEBVAABAdQAAQJwAAEDDAABA4wAAQQcAAEErAABBLQAAQS8AAEExAABBMwAAQTUAAEE3AABBOQAAQTsAAEE9AABBPwAAQUEAAEFDAABBRQAAQUcAAEFIAABBTQAAQVoAAEFdAABBXwAAQWIAAEFkAABBZgAAQYsAAEGvAABB1gAAQfoAAEH8AABB/gAAQgAAAEICAABCBAAAQgYAAEIHAABCCQAAQhYAAEIpAABCKwAAQi0AAEIvAABCMQAAQjMAAEI1AABCNwAAQjkAAEI7AABCTgAAQlAAAEJSAABCVAAAQlYAAEJYAABCWgAAQlwAAEJeAABCYAAAQmIAAEKhAABCowAAQqUAAEKnAABCqQAAQqoAAEKrAABCrAAAQq0AAEKvAABCsQAAQrIAAEKzAABCtQAAQrYAAEK/AABCwAAAQsIAAEMBAABDAwAAQwUAAEMHAABDCQAAQwoAAEMLAABDDAAAQw0AAEMPAABDEQAAQxIAAEMTAABDFQAAQxYAAENVAABDVwAAQ1kAAENbAABDXQAAQ14AAENfAABDYAAAQ2EAAENjAABDZQAAQ2YAAENnAABDaQAAQ2oAAENzAABDdAAAQ3YAAEO1AABDtwAAQ7kAAEO7AABDvQAAQ74AAEO/AABDwAAAQ8EAAEPDAABDxQAAQ8YAAEPHAABDyQAAQ8oAAEQJAABECwAARA0AAEQPAABEEQAARBIAAEQTAABEFAAARBUAAEQXAABEGQAARBoAAEQbAABEHQAARB4AAEQnAABEKAAARCoAAERpAABEawAARG0AAERvAABEcQAARHIAAERzAABEdAAARHUAAER3AABEeQAARHoAAER7AABEfQAARH4AAES9AABEvwAARMEAAETDAABExQAARMYAAETHAABEyAAARMkAAETLAABEzQAARM4AAETPAABE0QAARNIAAETfAABE4AAAROEAAETjAABFIgAARSQAAEUmAABFKAAARSoAAEUrAABFLAAARS0AAEUuAABFMAAARTIAAEUzAABFNAAARTYAAEU3AABFdgAARXgAAEV6AABFfAAARX4AAEV/AABFgAAARYEAAEWCAABFhAAARYYAAEWHAABFiAAARYoAAEWLAABFoQAARa4AAEW1AABFtwAARbkAAEW7AABFwgAARcQAAEXGAABFyAAARcoAAEXNAABF1AAARd4AAEYpAABGTAAARmwAAEaMAABGjgAARpAAAEaSAABGlAAARpYAAEaXAABGmAAARpoAAEabAABGnQAARp4AAEagAABGogAARqMAAEakAABGpgAARqcAAEasAABGuQAARr4AAEbAAABGwgAARscAAEbJAABGywAARs0AAEbyAABHFgAARz0AAEdhAABHYwAAR2UAAEdnAABHaQAAR2sAAEdtAABHbgAAR3AAAEd9AABHjgAAR5AAAEeSAABHlAAAR5YAAEeYAABHmgAAR5wAAEeeAABHrwAAR7EAAEezAABHtQAAR7cAAEe5AABHuwAAR70AAEe/AABHwQAASAAAAEgCAABIBAAASAYAAEgIAABICQAASAoAAEgLAABIDAAASA4AAEgQAABIEQAASBIAAEgUAABIFQAASFQAAEhWAABIWAAASFoAAEhcAABIXQAASF4AAEhfAABIYAAASGIAAEhkAABIZQAASGYAAEhoAABIaQAASKgAAEiqAABIrAAASK4AAEiwAABIsQAASLIAAEizAABItAAASLYAAEi4AABIuQAASLoAAEi8AABIvQAASMoAAEjLAABIzAAASM4AAEkNAABJDwAASREAAEkTAABJFQAASRYAAEkXAABJGAAASRkAAEkbAABJHQAASR4AAEkfAABJIQAASSIAAElhAABJYwAASWUAAElnAABJaQAASWoAAElrAABJbAAASW0AAElvAABJcQAASXIAAElzAABJdQAASXYAAEm1AABJtwAASbkAAEm7AABJvQAASb4AAEm/AABJwAAAScEAAEnDAABJxQAAScYAAEnHAABJyQAAScoAAEoJAABKCwAASg0AAEoPAABKEQAAShIAAEoTAABKFAAAShUAAEoXAABKGQAAShoAAEobAABKHQAASh4AAEpdAABKXwAASmEAAEpjAABKZQAASmYAAEpnAABKaAAASmkAAEprAABKbQAASm4AAEpvAABKcQAASnIAAEqXAABKuwAASuIAAEsGAABLCAAASwoAAEsMAABLDgAASxAAAEsSAABLEwAASxUAAEsiAABLMQAASzMAAEs1AABLNwAASzkAAEs7AABLPQAASz8AAEtOAABLUAAAS1IAAEtUAABLVgAAS1gAAEtaAABLXAAAS14AAEudAABLnwAAS6EAAEujAABLpQAAS6YAAEunAABLqAAAS6kAAEurAABLrQAAS64AAEuvAABLsQAAS7IAAEvxAABL8wAAS/UAAEv3AABL+QAAS/oAAEv7AABL/AAAS/0AAEv/AABMAQAATAIAAEwDAABMBQAATAYAAExFAABMRwAATEkAAExLAABMTQAATE4AAExPAABMUAAATFEAAExTAABMVQAATFYAAExXAABMWQAATFoAAEyZAABMmwAATJ0AAEyfAABMoQAATKIAAEyjAABMpAAATKUAAEynAABMqQAATKoAAEyrAABMrQAATK4AAEztAABM7wAATPEAAEzzAABM9QAATPYAAEz3AABM+AAATPkAAEz7AABM/QAATP4AAEz/AABNAQAATQIAAE1BAABNQwAATUUAAE1HAABNSQAATUoAAE1LAABNTAAATU0AAE1PAABNUQAATVIAAE1TAABNVQAATVYAAE2VAABNlwAATZkAAE2bAABNnQAATZ4AAE2fAABNoAAATaEAAE2jAABNpQAATaYAAE2nAABNqQAATaoAAE31AABOGAAATjgAAE5YAABOWgAATlwAAE5eAABOYAAATmIAAE5jAABOZAAATmYAAE5nAABOaQAATmoAAE5sAABObgAATm8AAE5wAABOcgAATnMAAE54AABOhQAATooAAE6MAABOjgAATpMAAE6VAABOlwAATpkAAE6+AABO4gAATwkAAE8tAABPLwAATzEAAE8zAABPNQAATzcAAE85AABPOgAATzwAAE9JAABPWgAAT1wAAE9eAABPYAAAT2IAAE9kAABPZgAAT2gAAE9qAABPewAAT30AAE9/AABPgQAAT4MAAE+FAABPhwAAT4kAAE+LAABPjQAAT8wAAE/OAABP0AAAT9IAAE/UAABP1QAAT9YAAE/XAABP2AAAT9oAAE/cAABP3QAAT94AAE/gAABP4QAAUCAAAFAiAABQJAAAUCYAAFAoAABQKQAAUCoAAFArAABQLAAAUC4AAFAwAABQMQAAUDIAAFA0AABQNQAAUHQAAFB2AABQeAAAUHoAAFB8AABQfQAAUH4AAFB/AABQgAAAUIIAAFCEAABQhQAAUIYAAFCIAABQiQAAUJYAAFCXAABQmAAAUJoAAFDZAABQ2wAAUN0AAFDfAABQ4QAAUOIAAFDjAABQ5AAAUOUAAFDnAABQ6QAAUOoAAFDrAABQ7QAAUO4AAFEtAABRLwAAUTEAAFEzAABRNQAAUTYAAFE3AABROAAAUTkAAFE7AABRPQAAUT4AAFE/AABRQQAAUUIAAFGBAABRgwAAUYUAAFGHAABRiQAAUYoAAFGLAABRjAAAUY0AAFGPAABRkQAAUZIAAFGTAABRlQAAUZYAAFHVAABR1wAAUdkAAFHbAABR3QAAUd4AAFHfAABR4AAAUeEAAFHjAABR5QAAUeYAAFHnAABR6QAAUeoAAFIpAABSKwAAUi0AAFIvAABSMQAAUjIAAFIzAABSNAAAUjUAAFI3AABSOQAAUjoAAFI7AABSPQAAUj4AAFJjAABShwAAUq4AAFLSAABS1AAAUtYAAFLYAABS2gAAUtwAAFLeAABS3wAAUuEAAFLuAABS/QAAUv8AAFMBAABTAwAAUwUAAFMHAABTCQAAUwsAAFMaAABTHAAAUx4AAFMgAABTIgAAUyQAAFMmAABTKAAAUyoAAFNpAABTawAAU20AAFNvAABTcQAAU3IAAFNzAABTdAAAU3UAAFN3AABTeQAAU3oAAFN7AABTfQAAU34AAFO9AABTvwAAU8EAAFPDAABTxQAAU8YAAFPHAABTyAAAU8kAAFPLAABTzQAAU84AAFPPAABT0QAAU9IAAFQRAABUEwAAVBUAAFQXAABUGQAAVBoAAFQbAABUHAAAVB0AAFQfAABUIQAAVCIAAFQjAABUJQAAVCYAAFRlAABUZwAAVGkAAFRrAABUbQAAVG4AAFRvAABUcAAAVHEAAFRzAABUdQAAVHYAAFR3AABUeQAAVHoAAFS5AABUuwAAVL0AAFS/AABUwQAAVMIAAFTDAABUxAAAVMUAAFTHAABUyQAAVMoAAFTLAABUzQAAVM4AAFUNAABVDwAAVREAAFUTAABVFQAAVRYAAFUXAABVGAAAVRkAAFUbAABVHQAAVR4AAFUfAABVIQAAVSIAAFVhAABVYwAAVWUAAFVnAABVaQAAVWoAAFVrAABVbAAAVW0AAFVvAABVcQAAVXIAAFVzAABVdQAAVXYAAFXBAABV5AAAVgQAAFYkAABWJgAAVigAAFYqAABWLAAAVi4AAFYvAABWMAAAVjIAAFYzAABWNQAAVjYAAFY4AABWOgAAVjsAAFY8AABWPgAAVj8AAFZEAABWUQAAVlYAAFZYAABWWgAAVl8AAFZhAABWYwAAVmUAAFaKAABWrgAAVtUAAFb5AABW+wAAVv0AAFb/AABXAQAAVwMAAFcFAABXBgAAVwgAAFcVAABXJgAAVygAAFcqAABXLAAAVy4AAFcwAABXMgAAVzQAAFc2AABXRwAAV0kAAFdLAABXTQAAV08AAFdRAABXUwAAV1UAAFdXAABXWQAAV5gAAFeaAABXnAAAV54AAFegAABXoQAAV6IAAFejAABXpAAAV6YAAFeoAABXqQAAV6oAAFesAABXrQAAV+wAAFfuAABX8AAAV/IAAFf0AABX9QAAV/YAAFf3AABX+AAAV/oAAFf8AABX/QAAV/4AAFgAAABYAQAAWEAAAFhCAABYRAAAWEYAAFhIAABYSQAAWEoAAFhLAABYTAAAWE4AAFhQAABYUQAAWFIAAFhUAABYVQAAWGIAAFhjAABYZAAAWGYAAFilAABYpwAAWKkAAFirAABYrQAAWK4AAFivAABYsAAAWLEAAFizAABYtQAAWLYAAFi3AABYuQAAWLoAAFj5AABY+wAAWP0AAFj/AABZAQAAWQIAAFkDAABZBAAAWQUAAFkHAABZCQAAWQoAAFkLAABZDQAAWQ4AAFlNAABZTwAAWVEAAFlTAABZVQAAWVYAAFlXAABZWAAAWVkAAFlbAABZXQAAWV4AAFlfAABZYQAAWWIAAFmhAABZowAAWaUAAFmnAABZqQAAWaoAAFmrAABZrAAAWa0AAFmvAABZsQAAWbIAAFmzAABZtQAAWbYAAFn1AABZ9wAAWfkAAFn7AABZ/QAAWf4AAFn/AABaAAAAWgEAAFoDAABaBQAAWgYAAFoHAABaCQAAWgoAAFovAABaUwAAWnoAAFqeAABaoAAAWqIAAFqkAABapgAAWqgAAFqqAABaqwAAWq0AAFq6AABayQAAWssAAFrNAABazwAAWtEAAFrTAABa1QAAWtcAAFrmAABa6AAAWuoAAFrsAABa7gAAWvAAAFryAABa9AAAWvYAAFs1AABbNwAAWzkAAFs7AABbPQAAWz4AAFs/AABbQAAAW0EAAFtDAABbRQAAW0YAAFtHAABbSQAAW0oAAFuJAABbiwAAW40AAFuPAABbkQAAW5IAAFuTAABblAAAW5UAAFuXAABbmQAAW5oAAFubAABbnQAAW54AAFvdAABb3wAAW+EAAFvjAABb5QAAW+YAAFvnAABb6AAAW+kAAFvrAABb7QAAW+4AAFvvAABb8QAAW/IAAFwxAABcMwAAXDUAAFw3AABcOQAAXDoAAFw7AABcPAAAXD0AAFw/AABcQQAAXEIAAFxDAABcRQAAXEYAAFyFAABchwAAXIkAAFyLAABcjQAAXI4AAFyPAABckAAAXJEAAFyTAABclQAAXJYAAFyXAABcmQAAXJoAAFzZAABc2wAAXN0AAFzfAABc4QAAXOIAAFzjAABc5AAAXOUAAFznAABc6QAAXOoAAFzrAABc7QAAXO4AAF0tAABdLwAAXTEAAF0zAABdNQAAXTYAAF03AABdOAAAXTkAAF07AABdPQAAXT4AAF0/AABdQQAAXUIAAF1LAABdTAAAXU4AAF2RAABdtQAAXdkAAF38AABeIwAAXkMAAF5qAABekQAAXrEAAF7VAABe+QAAXvsAAF79AABe/wAAXwEAAF8DAABfBQAAXwcAAF8JAABfCwAAXw0AAF8PAABfEQAAXxQAAF8WAABfFwAAXyAAAF8tAABfMAAAXzIAAF81AABfNwAAXzkAAF9eAABfggAAX6kAAF/NAABfzwAAX9EAAF/TAABf1QAAX9cAAF/ZAABf2gAAX9wAAF/pAABf/AAAX/4AAGAAAABgAgAAYAQAAGAGAABgCAAAYAoAAGAMAABgDgAAYCEAAGAjAABgJQAAYCcAAGApAABgKwAAYC0AAGAvAABgMQAAYDMAAGA1AABgdAAAYHYAAGB4AABgegAAYHwAAGB9AABgfgAAYH8AAGCAAABgggAAYIQAAGCFAABghgAAYIgAAGCJAABgkgAAYJMAAGCVAABg1AAAYNYAAGDYAABg2gAAYNwAAGDdAABg3gAAYN8AAGDgAABg4gAAYOQAAGDlAABg5gAAYOgAAGDpAABhKAAAYSoAAGEsAABhLgAAYTAAAGExAABhMgAAYTMAAGE0AABhNgAAYTgAAGE5AABhOgAAYTwAAGE9AABhRgAAYUkAAGFLAABhTQAAYVYAAGFZAABhWwAAYV0AAGFlAABhpAAAYaYAAGGoAABhqgAAYawAAGGtAABhrgAAYa8AAGGwAABhsgAAYbQAAGG1AABhtgAAYbgAAGG5AABh+AAAYfoAAGH8AABh/gAAYgAAAGIBAABiAgAAYgMAAGIEAABiBgAAYggAAGIJAABiCgAAYgwAAGINAABiFgAAYhcAAGIZAABiWAAAYloAAGJcAABiXgAAYmAAAGJhAABiYgAAYmMAAGJkAABiZgAAYmgAAGJpAABiagAAYmwAAGJtAABirAAAYq4AAGKwAABisgAAYrQAAGK1AABitgAAYrcAAGK4AABiugAAYrwAAGK9AABivgAAYsAAAGLBAABizgAAYs8AAGLQAABi0gAAYxEAAGMTAABjFQAAYxcAAGMZAABjGgAAYxsAAGMcAABjHQAAYx8AAGMhAABjIgAAYyMAAGMlAABjJgAAY2UAAGNnAABjaQAAY2sAAGNtAABjbgAAY28AAGNwAABjcQAAY3MAAGN1AABjdgAAY3cAAGN5AABjegAAY4cAAGPOAABj0AAAY9IAAGPUAABj1gAAY9gAAGPbAABj3gAAY+EAAGPkAABj5wAAY+oAAGPtAABj8AAAY/MAAGP2AABj+QAAY/wAAGP/AABkAgAAZAUAAGQIAABkCwAAZA4AAGQRAABkFAAAZBcAAGQaAABkHQAAZB8AAGQiAABkJQAAZCgAAGQrAABkLgAAZHUAAGR4AABkewAAZH4AAGSBAABkhAAAZIcAAGSKAABkjQAAZJAAAGSTAABklgAAZJkAAGScAABknwAAZKIAAGSlAABkqAAAZKsAAGSuAABksQAAZLQAAGS3AABkugAAZL0AAGTAAABkwwAAZMYAAGTJAABkzAAAZM8AAGTSAABk1QAAZNgAAGTbAABk3QAAZOIAAGTxAABlAwAAZREAAGUWAABlIAAAZSkAAGU1AABlRAAAZVcAAGVlAABlcwAAZYEAAGWIAABlkAAAZZ0AAGWqAABlvgAAZcMAAGXKAABl2AAAZeYAAGXwAABl9gAAZgQAAGYOAABmHQAAZjMAAGY6AABmRAAAZk0AAGZhAABmZwAAZrIAAGbVAABm9QAAZxUAAGcXAABnGQAAZxsAAGcdAABnHwAAZyAAAGchAABnJAAAZyUAAGcnAABnKAAAZyoAAGcsAABnLQAAZy4AAGcxAABnMgAAZzcAAGdEAABnSQAAZ0sAAGdNAABnUgAAZ1UAAGdYAABnWgAAZ38AAGejAABnygAAZ+4AAGfxAABn8wAAZ/UAAGf3AABn+QAAZ/sAAGf8AABn/wAAaAwAAGgdAABoHwAAaCEAAGgjAABoJQAAaCcAAGgpAABoKwAAaC0AAGg+AABoQQAAaEQAAGhHAABoSgAAaE0AAGhQAABoUwAAaFYAAGhYAABolwAAaJkAAGibAABonQAAaKAAAGihAABoogAAaKMAAGikAABopgAAaKgAAGipAABoqgAAaKwAAGitAABo7AAAaO4AAGjwAABo8gAAaPUAAGj2AABo9wAAaPgAAGj5AABo+wAAaP0AAGj+AABo/wAAaQEAAGkCAABpQQAAaUMAAGlGAABpSAAAaUsAAGlMAABpTQAAaU4AAGlPAABpUQAAaVMAAGlUAABpVQAAaVcAAGlYAABpZQAAaWYAAGlnAABpaQAAaagAAGmqAABprAAAaa4AAGmxAABpsgAAabMAAGm0AABptQAAabcAAGm5AABpugAAabsAAGm9AABpvgAAaf0AAGn/AABqAQAAagMAAGoGAABqBwAAaggAAGoJAABqCgAAagwAAGoOAABqDwAAahAAAGoSAABqEwAAalIAAGpUAABqVgAAalgAAGpbAABqXAAAal0AAGpeAABqXwAAamEAAGpjAABqZAAAamUAAGpnAABqaAAAaqcAAGqpAABqqwAAaq0AAGqwAABqsQAAarIAAGqzAABqtAAAarYAAGq4AABquQAAaroAAGq8AABqvQAAavwAAGr+AABrAAAAawIAAGsFAABrBgAAawcAAGsIAABrCQAAawsAAGsNAABrDgAAaw8AAGsRAABrEgAAazcAAGtbAABrggAAa6YAAGupAABrqwAAa60AAGuvAABrsQAAa7MAAGu0AABrtwAAa8QAAGvTAABr1QAAa9cAAGvZAABr2wAAa90AAGvfAABr4QAAa/AAAGvzAABr9gAAa/kAAGv8AABr/wAAbAIAAGwFAABsBwAAbEYAAGxIAABsSgAAbEwAAGxPAABsUAAAbFEAAGxSAABsUwAAbFUAAGxXAABsWAAAbFkAAGxbAABsXAAAbJsAAGydAABsnwAAbKEAAGykAABspQAAbKYAAGynAABsqAAAbKoAAGysAABsrQAAbK4AAGywAABssQAAbPAAAGzyAABs9AAAbPYAAGz5AABs+gAAbPsAAGz8AABs/QAAbP8AAG0BAABtAgAAbQMAAG0FAABtBgAAbUUAAG1HAABtSgAAbUwAAG1PAABtUAAAbVEAAG1SAABtUwAAbVUAAG1XAABtWAAAbVkAAG1bAABtXAAAbV8AAG2eAABtoAAAbaIAAG2kAABtpwAAbagAAG2pAABtqgAAbasAAG2tAABtrwAAbbAAAG2xAABtswAAbbQAAG3zAABt9QAAbfcAAG35AABt/AAAbf0AAG3+AABt/wAAbgAAAG4CAABuBAAAbgUAAG4GAABuCAAAbgkAAG5IAABuSgAAbkwAAG5OAABuUQAAblIAAG5TAABuVAAAblUAAG5XAABuWQAAbloAAG5bAABuXQAAbl4AAG6pAABuzAAAbuwAAG8MAABvDgAAbxAAAG8SAABvFAAAbxYAAG8XAABvGAAAbxsAAG8cAABvHgAAbx8AAG8hAABvIwAAbyQAAG8lAABvKAAAbykAAG8uAABvOwAAb0AAAG9CAABvRAAAb0kAAG9MAABvTwAAb1EAAG92AABvmgAAb8EAAG/lAABv6AAAb+oAAG/sAABv7gAAb/AAAG/yAABv8wAAb/YAAHADAABwFAAAcBYAAHAYAABwGgAAcBwAAHAeAABwIAAAcCIAAHAkAABwNQAAcDgAAHA7AABwPgAAcEEAAHBEAABwRwAAcEoAAHBNAABwTwAAcI4AAHCQAABwkgAAcJQAAHCXAABwmAAAcJkAAHCaAABwmwAAcJ0AAHCfAABwoAAAcKEAAHCjAABwpAAAcOMAAHDlAABw5wAAcOkAAHDsAABw7QAAcO4AAHDvAABw8AAAcPIAAHD0AABw9QAAcPYAAHD4AABw+QAAcTgAAHE6AABxPQAAcT8AAHFCAABxQwAAcUQAAHFFAABxRgAAcUgAAHFKAABxSwAAcUwAAHFOAABxTwAAcVwAAHFdAABxXgAAcWAAAHGfAABxoQAAcaMAAHGlAABxqAAAcakAAHGqAABxqwAAcawAAHGuAABxsAAAcbEAAHGyAABxtAAAcbUAAHH0AABx9gAAcfgAAHH6AABx/QAAcf4AAHH/AAByAAAAcgEAAHIDAAByBQAAcgYAAHIHAAByCQAAcgoAAHJJAABySwAAck0AAHJPAAByUgAAclMAAHJUAAByVQAAclYAAHJYAAByWgAAclsAAHJcAAByXgAAcl8AAHKeAAByoAAAcqIAAHKkAABypwAAcqgAAHKpAAByqgAAcqsAAHKtAAByrwAAcrAAAHKxAAByswAAcrQAAHLzAABy9QAAcvcAAHL5AABy/AAAcv0AAHL+AABy/wAAcwAAAHMCAABzBAAAcwUAAHMGAABzCAAAcwkAAHMuAABzUgAAc3kAAHOdAABzoAAAc6IAAHOkAABzpgAAc6gAAHOqAABzqwAAc64AAHO7AABzygAAc8wAAHPOAABz0AAAc9IAAHPUAABz1gAAc9gAAHPnAABz6gAAc+0AAHPwAABz8wAAc/YAAHP5AABz/AAAc/4AAHQ9AAB0PwAAdEEAAHRDAAB0RgAAdEcAAHRIAAB0SQAAdEoAAHRMAAB0TgAAdE8AAHRQAAB0UgAAdFMAAHSSAAB0lAAAdJYAAHSYAAB0mwAAdJwAAHSdAAB0ngAAdJ8AAHShAAB0owAAdKQAAHSlAAB0pwAAdKgAAHTnAAB06QAAdOsAAHTtAAB08AAAdPEAAHTyAAB08wAAdPQAAHT2AAB0+AAAdPkAAHT6AAB0/AAAdP0AAHU8AAB1PgAAdUAAAHVCAAB1RQAAdUYAAHVHAAB1SAAAdUkAAHVLAAB1TQAAdU4AAHVPAAB1UQAAdVIAAHWRAAB1kwAAdZUAAHWXAAB1mgAAdZsAAHWcAAB1nQAAdZ4AAHWgAAB1ogAAdaMAAHWkAAB1pgAAdacAAHXmAAB16AAAdeoAAHXsAAB17wAAdfAAAHXxAAB18gAAdfMAAHX1AAB19wAAdfgAAHX5AAB1+wAAdfwAAHY7AAB2PQAAdj8AAHZBAAB2RAAAdkUAAHZGAAB2RwAAdkgAAHZKAAB2TAAAdk0AAHZOAAB2UAAAdlEAAHacAAB2vwAAdt8AAHb/AAB3AQAAdwMAAHcFAAB3BwAAdwkAAHcKAAB3CwAAdw4AAHcPAAB3EQAAdxIAAHcUAAB3FgAAdxcAAHcYAAB3GwAAdxwAAHchAAB3LgAAdzMAAHc1AAB3NwAAdzwAAHc/AAB3QgAAd0QAAHdpAAB3jQAAd7QAAHfYAAB32wAAd90AAHffAAB34QAAd+MAAHflAAB35gAAd+kAAHf2AAB4BwAAeAkAAHgLAAB4DQAAeA8AAHgRAAB4EwAAeBUAAHgXAAB4KAAAeCsAAHguAAB4MQAAeDQAAHg3AAB4OgAAeD0AAHhAAAB4QgAAeIEAAHiDAAB4hQAAeIcAAHiKAAB4iwAAeIwAAHiNAAB4jgAAeJAAAHiSAAB4kwAAeJQAAHiWAAB4lwAAeNYAAHjYAAB42gAAeNwAAHjfAAB44AAAeOEAAHjiAAB44wAAeOUAAHjnAAB46AAAeOkAAHjrAAB47AAAeSsAAHktAAB5MAAAeTIAAHk1AAB5NgAAeTcAAHk4AAB5OQAAeTsAAHk9AAB5PgAAeT8AAHlBAAB5QgAAeU8AAHlQAAB5UQAAeVMAAHmSAAB5lAAAeZYAAHmYAAB5mwAAeZwAAHmdAAB5ngAAeZ8AAHmhAAB5owAAeaQAAHmlAAB5pwAAeagAAHnnAAB56QAAeesAAHntAAB58AAAefEAAHnyAAB58wAAefQAAHn2AAB5+AAAefkAAHn6AAB5/AAAef0AAHo8AAB6PgAAekAAAHpCAAB6RQAAekYAAHpHAAB6SAAAekkAAHpLAAB6TQAAek4AAHpPAAB6UQAAelIAAHqRAAB6kwAAepUAAHqXAAB6mgAAepsAAHqcAAB6nQAAep4AAHqgAAB6ogAAeqMAAHqkAAB6pgAAeqcAAHrmAAB66AAAeuoAAHrsAAB67wAAevAAAHrxAAB68gAAevMAAHr1AAB69wAAevgAAHr5AAB6+wAAevwAAHshAAB7RQAAe2wAAHuQAAB7kwAAe5UAAHuXAAB7mQAAe5sAAHudAAB7ngAAe6EAAHuuAAB7vQAAe78AAHvBAAB7wwAAe8UAAHvHAAB7yQAAe8sAAHvaAAB73QAAe+AAAHvjAAB75gAAe+kAAHvsAAB77wAAe/EAAHwwAAB8MgAAfDUAAHw3AAB8OgAAfDsAAHw8AAB8PQAAfD4AAHxAAAB8QgAAfEMAAHxEAAB8RgAAfEcAAHxKAAB8iQAAfIsAAHyNAAB8jwAAfJIAAHyTAAB8lAAAfJUAAHyWAAB8mAAAfJoAAHybAAB8nAAAfJ4AAHyfAAB83gAAfOAAAHziAAB85AAAfOcAAHzoAAB86QAAfOoAAHzrAAB87QAAfO8AAHzwAAB88QAAfPMAAHz0AAB9MwAAfTUAAH04AAB9OgAAfT0AAH0+AAB9PwAAfUAAAH1BAAB9QwAAfUUAAH1GAAB9RwAAfUkAAH1KAAB9TQAAfYwAAH2OAAB9kAAAfZIAAH2VAAB9lgAAfZcAAH2YAAB9mQAAfZsAAH2dAAB9ngAAfZ8AAH2hAAB9ogAAfeEAAH3jAAB95QAAfecAAH3qAAB96wAAfewAAH3tAAB97gAAffAAAH3yAAB98wAAffQAAH32AAB99wAAfjYAAH44AAB+OgAAfjwAAH4/AAB+QAAAfkEAAH5CAAB+QwAAfkUAAH5HAAB+SAAAfkkAAH5LAAB+TAAAfpcAAH66AAB+2gAAfvoAAH78AAB+/gAAfwAAAH8CAAB/BAAAfwUAAH8GAAB/CQAAfwoAAH8MAAB/DQAAfw8AAH8RAAB/EgAAfxMAAH8WAAB/FwAAfxwAAH8pAAB/LgAAfzAAAH8yAAB/NwAAfzoAAH89AAB/PwAAf2QAAH+IAAB/rwAAf9MAAH/WAAB/2AAAf9oAAH/cAAB/3gAAf+AAAH/hAAB/5AAAf/EAAIACAACABAAAgAYAAIAIAACACgAAgAwAAIAOAACAEAAAgBIAAIAjAACAJgAAgCkAAIAsAACALwAAgDIAAIA1AACAOAAAgDsAAIA9AACAfAAAgH4AAICAAACAggAAgIUAAICGAACAhwAAgIgAAICJAACAiwAAgI0AAICOAACAjwAAgJEAAICSAACA0QAAgNMAAIDVAACA1wAAgNoAAIDbAACA3AAAgN0AAIDeAACA4AAAgOIAAIDjAACA5AAAgOYAAIDnAACBJgAAgSgAAIErAACBLQAAgTAAAIExAACBMgAAgTMAAIE0AACBNgAAgTgAAIE5AACBOgAAgTwAAIE9AACBSgAAgUsAAIFMAACBTgAAgY0AAIGPAACBkQAAgZMAAIGWAACBlwAAgZgAAIGZAACBmgAAgZwAAIGeAACBnwAAgaAAAIGiAACBowAAgeIAAIHkAACB5gAAgegAAIHrAACB7AAAge0AAIHuAACB7wAAgfEAAIHzAACB9AAAgfUAAIH3AACB+AAAgjcAAII5AACCOwAAgj0AAIJAAACCQQAAgkIAAIJDAACCRAAAgkYAAIJIAACCSQAAgkoAAIJMAACCTQAAgowAAIKOAACCkAAAgpIAAIKVAACClgAAgpcAAIKYAACCmQAAgpsAAIKdAACCngAAgp8AAIKhAACCogAAguEAAILjAACC5QAAgucAAILqAACC6wAAguwAAILtAACC7gAAgvAAAILyAACC8wAAgvQAAIL2AACC9wAAgxwAAINAAACDZwAAg4sAAIOOAACDkAAAg5IAAIOUAACDlgAAg5gAAIOZAACDnAAAg6kAAIO4AACDugAAg7wAAIO+AACDwAAAg8IAAIPEAACDxgAAg9UAAIPYAACD2wAAg94AAIPhAACD5AAAg+cAAIPqAACD7AAAhCsAAIQtAACELwAAhDEAAIQ0AACENQAAhDYAAIQ3AACEOAAAhDoAAIQ8AACEPQAAhD4AAIRAAACEQQAAhIAAAISCAACEhAAAhIYAAISJAACEigAAhIsAAISMAACEjQAAhI8AAISRAACEkgAAhJMAAISVAACElgAAhNUAAITXAACE2QAAhNsAAITeAACE3wAAhOAAAIThAACE4gAAhOQAAITmAACE5wAAhOgAAITqAACE6wAAhSoAAIUsAACFLwAAhTEAAIU0AACFNQAAhTYAAIU3AACFOAAAhToAAIU8AACFPQAAhT4AAIVAAACFQQAAhYAAAIWCAACFhAAAhYYAAIWJAACFigAAhYsAAIWMAACFjQAAhY8AAIWRAACFkgAAhZMAAIWVAACFlgAAhdUAAIXXAACF2QAAhdsAAIXeAACF3wAAheAAAIXhAACF4gAAheQAAIXmAACF5wAAhegAAIXqAACF6wAAhioAAIYsAACGLgAAhjAAAIYzAACGNAAAhjUAAIY2AACGNwAAhjkAAIY7AACGPAAAhj0AAIY/AACGQAAAhosAAIauAACGzgAAhu4AAIbwAACG8gAAhvQAAIb2AACG+AAAhvkAAIb6AACG/QAAhv4AAIcAAACHAQAAhwMAAIcFAACHBgAAhwcAAIcKAACHCwAAhxAAAIcdAACHIgAAhyQAAIcmAACHKwAAhy4AAIcxAACHMwAAh1gAAId8AACHowAAh8cAAIfKAACHzAAAh84AAIfQAACH0gAAh9QAAIfVAACH2AAAh+UAAIf2AACH+AAAh/oAAIf8AACH/gAAiAAAAIgCAACIBAAAiAYAAIgXAACIGgAAiB0AAIggAACIIwAAiCYAAIgpAACILAAAiC8AAIgxAACIcAAAiHIAAIh0AACIdgAAiHkAAIh6AACIewAAiHwAAIh9AACIfwAAiIEAAIiCAACIgwAAiIUAAIiGAACIxQAAiMcAAIjJAACIywAAiM4AAIjPAACI0AAAiNEAAIjSAACI1AAAiNYAAIjXAACI2AAAiNoAAIjbAACJGgAAiRwAAIkfAACJIQAAiSQAAIklAACJJgAAiScAAIkoAACJKgAAiSwAAIktAACJLgAAiTAAAIkxAACJPgAAiT8AAIlAAACJQgAAiYEAAImDAACJhQAAiYcAAImKAACJiwAAiYwAAImNAACJjgAAiZAAAImSAACJkwAAiZQAAImWAACJlwAAidYAAInYAACJ2gAAidwAAInfAACJ4AAAieEAAIniAACJ4wAAieUAAInnAACJ6AAAiekAAInrAACJ7AAAiisAAIotAACKLwAAijEAAIo0AACKNQAAijYAAIo3AACKOAAAijoAAIo8AACKPQAAij4AAIpAAACKQQAAioAAAIqCAACKhAAAioYAAIqJAACKigAAiosAAIqMAACKjQAAio8AAIqRAACKkgAAipMAAIqVAACKlgAAitUAAIrXAACK2QAAitsAAIreAACK3wAAiuAAAIrhAACK4gAAiuQAAIrmAACK5wAAiugAAIrqAACK6wAAixAAAIs0AACLWwAAi38AAIuCAACLhAAAi4YAAIuIAACLigAAi4wAAIuNAACLkAAAi50AAIusAACLrgAAi7AAAIuyAACLtAAAi7YAAIu4AACLugAAi8kAAIvMAACLzwAAi9IAAIvVAACL2AAAi9sAAIveAACL4AAAjB8AAIwhAACMIwAAjCUAAIwoAACMKQAAjCoAAIwrAACMLAAAjC4AAIwwAACMMQAAjDIAAIw0AACMNQAAjHQAAIx2AACMeAAAjHoAAIx9AACMfgAAjH8AAIyAAACMgQAAjIMAAIyFAACMhgAAjIcAAIyJAACMigAAjMkAAIzLAACMzQAAjM8AAIzSAACM0wAAjNQAAIzVAACM1gAAjNgAAIzaAACM2wAAjNwAAIzeAACM3wAAjR4AAI0gAACNIgAAjSQAAI0nAACNKAAAjSkAAI0qAACNKwAAjS0AAI0vAACNMAAAjTEAAI0zAACNNAAAjXMAAI11AACNdwAAjXkAAI18AACNfQAAjX4AAI1/AACNgAAAjYIAAI2EAACNhQAAjYYAAI2IAACNiQAAjcgAAI3KAACNzAAAjc4AAI3RAACN0gAAjdMAAI3UAACN1QAAjdcAAI3ZAACN2gAAjdsAAI3dAACN3gAAjh0AAI4fAACOIQAAjiMAAI4mAACOJwAAjigAAI4pAACOKgAAjiwAAI4uAACOLwAAjjAAAI4yAACOMwAAjn4AAI6hAACOwQAAjuEAAI7jAACO5QAAjucAAI7pAACO6wAAjuwAAI7tAACO8AAAjvEAAI7zAACO9AAAjvYAAI75AACO+gAAjvsAAI7+AACO/wAAjwQAAI8RAACPFgAAjxgAAI8aAACPHwAAjyIAAI8lAACPJwAAj0wAAI9wAACPlwAAj7sAAI++AACPwAAAj8IAAI/EAACPxgAAj8gAAI/JAACPzAAAj9kAAI/qAACP7AAAj+4AAI/wAACP8gAAj/QAAI/2AACP+AAAj/oAAJALAACQDgAAkBEAAJAUAACQFwAAkBoAAJAdAACQIAAAkCMAAJAlAACQZAAAkGYAAJBoAACQagAAkG0AAJBuAACQbwAAkHAAAJBxAACQcwAAkHUAAJB2AACQdwAAkHkAAJB6AACQuQAAkLsAAJC9AACQvwAAkMIAAJDDAACQxAAAkMUAAJDGAACQyAAAkMoAAJDLAACQzAAAkM4AAJDPAACRDgAAkRAAAJETAACRFQAAkRgAAJEZAACRGgAAkRsAAJEcAACRHgAAkSAAAJEhAACRIgAAkSQAAJElAACRMgAAkTMAAJE0AACRNgAAkXUAAJF3AACReQAAkXsAAJF+AACRfwAAkYAAAJGBAACRggAAkYQAAJGGAACRhwAAkYgAAJGKAACRiwAAkcoAAJHMAACRzgAAkdAAAJHTAACR1AAAkdUAAJHWAACR1wAAkdkAAJHbAACR3AAAkd0AAJHfAACR4AAAkh8AAJIhAACSIwAAkiUAAJIoAACSKQAAkioAAJIrAACSLAAAki4AAJIwAACSMQAAkjIAAJI0AACSNQAAknQAAJJ2AACSeAAAknoAAJJ9AACSfgAAkn8AAJKAAACSgQAAkoMAAJKFAACShgAAkocAAJKJAACSigAAkskAAJLLAACSzQAAks8AAJLSAACS0wAAktQAAJLVAACS1gAAktgAAJLaAACS2wAAktwAAJLeAACS3wAAkwQAAJMoAACTTwAAk3MAAJN2AACTeAAAk3oAAJN8AACTfgAAk4AAAJOBAACThAAAk5EAAJOgAACTogAAk6QAAJOmAACTqAAAk6oAAJOsAACTrgAAk70AAJPAAACTwwAAk8YAAJPJAACTzAAAk88AAJPSAACT1AAAlBMAAJQVAACUFwAAlBkAAJQcAACUHQAAlB4AAJQfAACUIAAAlCIAAJQkAACUJQAAlCYAAJQoAACUKQAAlGgAAJRqAACUbAAAlG4AAJRxAACUcgAAlHMAAJR0AACUdQAAlHcAAJR5AACUegAAlHsAAJR9AACUfgAAlL0AAJS/AACUwQAAlMMAAJTGAACUxwAAlMgAAJTJAACUygAAlMwAAJTOAACUzwAAlNAAAJTSAACU0wAAlRIAAJUUAACVFgAAlRgAAJUbAACVHAAAlR0AAJUeAACVHwAAlSEAAJUjAACVJAAAlSUAAJUnAACVKAAAlWcAAJVpAACVawAAlW0AAJVwAACVcQAAlXIAAJVzAACVdAAAlXYAAJV4AACVeQAAlXoAAJV8AACVfQAAlbwAAJW+AACVwAAAlcIAAJXFAACVxgAAlccAAJXIAACVyQAAlcsAAJXNAACVzgAAlc8AAJXRAACV0gAAlhEAAJYTAACWFQAAlhcAAJYaAACWGwAAlhwAAJYdAACWHgAAliAAAJYiAACWIwAAliQAAJYmAACWJwAAlnIAAJaVAACWtQAAltUAAJbXAACW2QAAltsAAJbdAACW3wAAluAAAJbhAACW5AAAluUAAJbnAACW6AAAluoAAJbtAACW7gAAlu8AAJbyAACW8wAAlvgAAJcFAACXCgAAlwwAAJcOAACXEwAAlxYAAJcZAACXGwAAl0AAAJdkAACXiwAAl68AAJeyAACXtAAAl7YAAJe4AACXugAAl7wAAJe9AACXwAAAl80AAJfeAACX4AAAl+IAAJfkAACX5gAAl+gAAJfqAACX7AAAl+4AAJf/AACYAgAAmAUAAJgIAACYCwAAmA4AAJgRAACYFAAAmBcAAJgZAACYWAAAmFoAAJhcAACYXgAAmGEAAJhiAACYYwAAmGQAAJhlAACYZwAAmGkAAJhqAACYawAAmG0AAJhuAACYrQAAmK8AAJixAACYswAAmLYAAJi3AACYuAAAmLkAAJi6AACYvAAAmL4AAJi/AACYwAAAmMIAAJjDAACZAgAAmQQAAJkHAACZCQAAmQwAAJkNAACZDgAAmQ8AAJkQAACZEgAAmRQAAJkVAACZFgAAmRgAAJkZAACZJgAAmScAAJkoAACZKgAAmWkAAJlrAACZbQAAmW8AAJlyAACZcwAAmXQAAJl1AACZdgAAmXgAAJl6AACZewAAmXwAAJl+AACZfwAAmb4AAJnAAACZwgAAmcQAAJnHAACZyAAAmckAAJnKAACZywAAmc0AAJnPAACZ0AAAmdEAAJnTAACZ1AAAmhMAAJoVAACaFwAAmhkAAJocAACaHQAAmh4AAJofAACaIAAAmiIAAJokAACaJQAAmiYAAJooAACaKQAAmmgAAJpqAACabAAAmm4AAJpxAACacgAAmnMAAJp0AACadQAAmncAAJp5AACaegAAmnsAAJp9AACafgAAmr0AAJq/AACawQAAmsMAAJrGAACaxwAAmsgAAJrJAACaygAAmswAAJrOAACazwAAmtAAAJrSAACa0wAAmvgAAJscAACbQwAAm2cAAJtqAACbbAAAm24AAJtwAACbcgAAm3QAAJt1AACbeAAAm4UAAJuUAACblgAAm5gAAJuaAACbnAAAm54AAJugAACbogAAm7EAAJu0AACbtwAAm7oAAJu9AACbwAAAm8MAAJvGAACbyAAAnAcAAJwJAACcCwAAnA0AAJwQAACcEQAAnBIAAJwTAACcFAAAnBYAAJwYAACcGQAAnBoAAJwcAACcHQAAnFwAAJxeAACcYAAAnGIAAJxlAACcZgAAnGcAAJxoAACcaQAAnGsAAJxtAACcbgAAnG8AAJxxAACccgAAnLEAAJyzAACctQAAnLcAAJy6AACcuwAAnLwAAJy9AACcvgAAnMAAAJzCAACcwwAAnMQAAJzGAACcxwAAnQYAAJ0IAACdCwAAnQ0AAJ0QAACdEQAAnRIAAJ0TAACdFAAAnRYAAJ0YAACdGQAAnRoAAJ0cAACdHQAAnVwAAJ1eAACdYAAAnWIAAJ1lAACdZgAAnWcAAJ1oAACdaQAAnWsAAJ1tAACdbgAAnW8AAJ1xAACdcgAAnbEAAJ2zAACdtQAAnbcAAJ26AACduwAAnbwAAJ29AACdvgAAncAAAJ3CAACdwwAAncQAAJ3GAACdxwAAngYAAJ4IAACeCgAAngwAAJ4PAACeEAAAnhEAAJ4SAACeEwAAnhUAAJ4XAACeGAAAnhkAAJ4bAACeHAAAnmcAAJ6KAACeqgAAnsoAAJ7MAACezgAAntAAAJ7SAACe1AAAntUAAJ7WAACe2QAAntoAAJ7cAACe3QAAnuAAAJ7jAACe5AAAnuUAAJ7oAACe6QAAnu4AAJ77AACfAAAAnwIAAJ8FAACfCgAAnw0AAJ8QAACfEgAAnyUAAJ9KAACfbgAAn5UAAJ+5AACfvAAAn74AAJ/AAACfwgAAn8QAAJ/GAACfxwAAn8oAAJ/XAACf6AAAn+oAAJ/sAACf7gAAn/AAAJ/yAACf9AAAn/YAAJ/4AACgCQAAoAwAAKAPAACgEgAAoBUAAKAYAACgGwAAoB4AAKAhAACgIwAAoGIAAKBkAACgZgAAoGgAAKBrAACgbAAAoG0AAKBuAACgbwAAoHEAAKBzAACgdAAAoHUAAKB3AACgeAAAoLcAAKC5AACguwAAoL0AAKDAAACgwQAAoMIAAKDDAACgxAAAoMYAAKDIAACgyQAAoMoAAKDMAACgzQAAoQwAAKEOAAChEQAAoRMAAKEWAAChFwAAoRgAAKEZAAChGgAAoRwAAKEeAAChHwAAoSAAAKEiAAChIwAAoTAAAKExAAChMgAAoTQAAKFzAAChdQAAoXcAAKF5AAChfAAAoX0AAKF+AAChfwAAoYAAAKGCAAChhAAAoYUAAKGGAAChiAAAoYkAAKHIAAChygAAocwAAKHOAACh0QAAodIAAKHTAACh1AAAodUAAKHXAACh2QAAodoAAKHbAACh3QAAod4AAKIdAACiHwAAoiEAAKIjAACiJgAAoicAAKIoAACiKQAAoioAAKIsAACiLgAAoi8AAKIwAACiMgAAojMAAKJyAACidAAAonYAAKJ4AACiewAAonwAAKJ9AACifgAAon8AAKKBAACigwAAooQAAKKFAACihwAAoogAAKLHAACiyQAAossAAKLNAACi0AAAotEAAKLSAACi0wAAotQAAKLWAACi2AAAotkAAKLaAACi3AAAot0AAKMCAACjJgAAo00AAKNxAACjdAAAo3cAAKN5AACjewAAo30AAKN/AACjgAAAo4MAAKOQAACjnQAAo6AAAKOjAACjpgAAo6kAAKOsAACjrwAAo7wAAKO/AACjwgAAo8UAAKPIAACjywAAo84AAKPQAACj5QAAo/QAAKQGAACkGgAApCwAAKQ+AACkfQAApH8AAKSCAACkhAAApIcAAKSIAACkiQAApIoAAKSLAACkjQAApJAAAKSRAACkkgAApJQAAKSVAACk2AAApPwAAKUgAAClQwAApWoAAKWKAAClsQAApdgAAKX4AACmHAAApkAAAKZCAACmRQAApkcAAKZJAACmSwAApk4AAKZQAACmUgAAplQAAKZWAACmWAAAploAAKZdAACmYAAApmEAAKZmAACmcwAApnYAAKZ4AACmewAApn4AAKaAAACmpQAApskAAKbwAACnFAAApxcAAKcZAACnGwAApx0AAKcfAACnIQAApyIAAKclAACnMgAAp0UAAKdHAACnSQAAp0sAAKdNAACnTwAAp1EAAKdTAACnVQAAp1cAAKdqAACnbQAAp3AAAKdzAACndgAAp3kAAKd8AACnfwAAp4IAAKeFAACnhwAAp8YAAKfIAACnywAAp80AAKfQAACn0QAAp9IAAKfTAACn1AAAp9YAAKfYAACn2QAAp9oAAKfcAACn3QAAp+YAAKfnAACn6QAAqCgAAKgqAACoLAAAqC4AAKgxAACoMgAAqDMAAKg0AACoNQAAqDcAAKg5AACoOgAAqDsAAKg9AACoPgAAqH0AAKh/AACoggAAqIQAAKiHAACoiAAAqIkAAKiKAACoiwAAqI0AAKiPAACokAAAqJEAAKiTAAColAAAqJ0AAKigAACoowAAqKUAAKiuAACosQAAqLQAAKi2AACougAAqPkAAKj7AACo/QAAqP8AAKkCAACpAwAAqQQAAKkFAACpBgAAqQgAAKkKAACpCwAAqQwAAKkOAACpDwAAqU4AAKlQAACpUwAAqVUAAKlYAACpWQAAqVoAAKlbAACpXAAAqV4AAKlgAACpYQAAqWIAAKlkAACpZQAAqW4AAKlvAACpcQAAqbAAAKmyAACptAAAqbYAAKm5AACpugAAqbsAAKm8AACpvQAAqb8AAKnBAACpwgAAqcMAAKnFAACpxgAAqgUAAKoHAACqCgAAqgwAAKoPAACqEAAAqhEAAKoSAACqEwAAqhUAAKoXAACqGAAAqhkAAKobAACqHAAAqikAAKoqAACqKwAAqi0AAKpsAACqbgAAqnAAAKpyAACqdQAAqnYAAKp3AACqeAAAqnkAAKp7AACqfQAAqn4AAKp/AACqgQAAqoIAAKrBAACqwwAAqsYAAKrIAACqywAAqswAAKrNAACqzgAAqs8AAKrRAACq0wAAqtQAAKrVAACq1wAAqtgAAKrkAACq8QAAqvwAAKr/AACrAgAAqwUAAKsIAACrCwAAqxYAAKsZAACrHAAAqx8AAKsiAACrJQAAqycAAKstAACrOAAAq0UAAKuQAACrswAAq9MAAKvzAACr9QAAq/cAAKv5AACr+wAAq/4AAKv/AACsAAAArAMAAKwEAACsBgAArAcAAKwJAACsDAAArA0AAKwOAACsEQAArBIAAKwbAACsKAAArC0AAKwvAACsMQAArDYAAKw5AACsPAAArD4AAKxjAACshwAArK4AAKzSAACs1QAArNcAAKzZAACs2wAArN0AAKzfAACs4AAArOMAAKzwAACtAQAArQMAAK0FAACtBwAArQkAAK0LAACtDQAArQ8AAK0RAACtIgAArSUAAK0oAACtKwAArS4AAK0xAACtNAAArTcAAK06AACtPAAArXsAAK19AACtfwAArYEAAK2EAACthQAArYYAAK2HAACtiAAArYoAAK2MAACtjQAArY4AAK2QAACtkQAArdAAAK3SAACt1AAArdYAAK3ZAACt2gAArdsAAK3cAACt3QAArd8AAK3hAACt4gAAreMAAK3lAACt5gAAriUAAK4nAACuKgAAriwAAK4vAACuMAAArjEAAK4yAACuMwAArjUAAK43AACuOAAArjkAAK47AACuPAAArkkAAK5KAACuSwAArk0AAK6MAACujgAArpAAAK6SAACulQAArpYAAK6XAACumAAArpkAAK6bAACunQAArp4AAK6fAACuoQAArqIAAK7hAACu4wAAruUAAK7nAACu6gAArusAAK7sAACu7QAAru4AAK7wAACu8gAArvMAAK70AACu9gAArvcAAK82AACvOAAArzoAAK88AACvPwAAr0AAAK9BAACvQgAAr0MAAK9FAACvRwAAr0gAAK9JAACvSwAAr0wAAK+LAACvjQAAr48AAK+RAACvlAAAr5UAAK+WAACvlwAAr5gAAK+aAACvnAAAr50AAK+eAACvoAAAr6EAAK/gAACv4gAAr+QAAK/mAACv6QAAr+oAAK/rAACv7AAAr+0AAK/vAACv8QAAr/IAAK/zAACv9QAAr/YAALAbAACwPwAAsGYAALCKAACwjQAAsI8AALCRAACwkwAAsJUAALCXAACwmAAAsJsAALCoAACwtwAAsLkAALC7AACwvQAAsL8AALDBAACwwwAAsMUAALDUAACw1wAAsNoAALDdAACw4AAAsOMAALDmAACw6QAAsOsAALEqAACxLAAAsS4AALEwAACxMwAAsTQAALE1AACxNgAAsTcAALE5AACxOwAAsTwAALE9AACxPwAAsUAAALF/AACxgQAAsYMAALGFAACxiAAAsYkAALGKAACxiwAAsYwAALGOAACxkAAAsZEAALGSAACxlAAAsZUAALHUAACx1gAAsdgAALHaAACx3QAAsd4AALHfAACx4AAAseEAALHjAACx5QAAseYAALHnAACx6QAAseoAALIpAACyKwAAsi4AALIwAACyMwAAsjQAALI1AACyNgAAsjcAALI5AACyOwAAsjwAALI9AACyPwAAskAAALJ/AACygQAAsoMAALKFAACyiAAAsokAALKKAACyiwAAsowAALKOAACykAAAspEAALKSAACylAAAspUAALLUAACy1gAAstgAALLaAACy3QAAst4AALLfAACy4AAAsuEAALLjAACy5QAAsuYAALLnAACy6QAAsuoAALMpAACzKwAAsy0AALMvAACzMgAAszMAALM0AACzNQAAszYAALM4AACzOgAAszsAALM8AACzPgAAsz8AALOKAACzrQAAs80AALPtAACz7wAAs/EAALPzAACz9QAAs/gAALP5AACz+gAAs/0AALP+AAC0AAAAtAEAALQEAAC0BwAAtAgAALQJAAC0DAAAtA0AALQSAAC0HwAAtCQAALQmAAC0KQAAtC4AALQxAAC0NAAAtDYAALRbAAC0fwAAtKYAALTKAAC0zQAAtM8AALTRAAC00wAAtNUAALTXAAC02AAAtNsAALToAAC0+QAAtPsAALT9AAC0/wAAtQEAALUDAAC1BQAAtQcAALUJAAC1GgAAtR0AALUgAAC1IwAAtSYAALUpAAC1LAAAtS8AALUyAAC1NAAAtXMAALV1AAC1dwAAtXkAALV8AAC1fQAAtX4AALV/AAC1gAAAtYIAALWEAAC1hQAAtYYAALWIAAC1iQAAtcgAALXKAAC1zAAAtc4AALXRAAC10gAAtdMAALXUAAC11QAAtdcAALXZAAC12gAAtdsAALXdAAC13gAAth0AALYfAAC2IgAAtiQAALYnAAC2KAAAtikAALYqAAC2KwAAti0AALYvAAC2MAAAtjEAALYzAAC2NAAAtkEAALZCAAC2QwAAtkUAALaEAAC2hgAAtogAALaKAAC2jQAAto4AALaPAAC2kAAAtpEAALaTAAC2lQAAtpYAALaXAAC2mQAAtpoAALbZAAC22wAAtt0AALbfAAC24gAAtuMAALbkAAC25QAAtuYAALboAAC26gAAtusAALbsAAC27gAAtu8AALcuAAC3MAAAtzIAALc0AAC3NwAAtzgAALc5AAC3OgAAtzsAALc9AAC3PwAAt0AAALdBAAC3QwAAt0QAALeDAAC3hQAAt4cAALeJAAC3jAAAt40AALeOAAC3jwAAt5AAALeSAAC3lAAAt5UAALeWAAC3mAAAt5kAALfYAAC32gAAt9wAALfeAAC34QAAt+IAALfjAAC35AAAt+UAALfnAAC36QAAt+oAALfrAAC37QAAt+4AALgTAAC4NwAAuF4AALiCAAC4hQAAuIgAALiKAAC4jAAAuI4AALiQAAC4kQAAuJQAALihAAC4sAAAuLMAALi2AAC4uQAAuLwAALi/AAC4wgAAuMUAALjUAAC41wAAuNoAALjdAAC44AAAuOMAALjmAAC46QAAuOsAALkIAAC5RwAAuUkAALlMAAC5TgAAuVEAALlSAAC5UwAAuVQAALlVAAC5VwAAuVoAALlbAAC5XAAAuV4AALlfAAC5ngAAuaAAALmjAAC5pQAAuagAALmpAAC5qgAAuasAALmsAAC5rgAAubEAALmyAAC5swAAubUAALm2AAC5uAAAufcAALn5AAC5/AAAuf4AALoBAAC6AgAAugMAALoEAAC6BQAAugcAALoKAAC6CwAAugwAALoOAAC6DwAAuhEAALpQAAC6UgAAulQAALpWAAC6WQAAuloAALpbAAC6XAAAul0AALpfAAC6YgAAumMAALpkAAC6ZgAAumcAALqmAAC6qAAAuqoAALqsAAC6rwAAurAAALqxAAC6sgAAurMAALq1AAC6uAAAurkAALq6AAC6vAAAur0AALr8AAC6/gAAuwAAALsCAAC7BQAAuwYAALsHAAC7CAAAuwkAALsLAAC7DgAAuw8AALsQAAC7EgAAuxMAALtSAAC7VAAAu1cAALtZAAC7XAAAu10AALteAAC7XwAAu2AAALtiAAC7ZQAAu2YAALtnAAC7aQAAu2oAALu1AAC72AAAu/gAALwYAAC8GgAAvBwAALweAAC8IAAAvCIAALwjAAC8JAAAvCcAALwoAAC8KgAAvCsAALwuAAC8MQAAvDIAALwzAAC8NgAAvDcAALw8AAC8SQAAvE4AALxQAAC8UwAAvFgAALxbAAC8XgAAvGAAALyFAAC8qQAAvNAAALz0AAC89wAAvPkAALz7AAC8/QAAvP8AAL0BAAC9AgAAvQUAAL0SAAC9IwAAvSUAAL0nAAC9KQAAvSsAAL0tAAC9LwAAvTEAAL0zAAC9RAAAvUcAAL1KAAC9TQAAvVAAAL1TAAC9VgAAvVkAAL1cAAC9XgAAvZ0AAL2fAAC9oQAAvaMAAL2mAAC9pwAAvagAAL2pAAC9qgAAvawAAL2uAAC9rwAAvbAAAL2yAAC9swAAvfIAAL30AAC99gAAvfgAAL37AAC9/AAAvf0AAL3+AAC9/wAAvgEAAL4DAAC+BAAAvgUAAL4HAAC+CAAAvkcAAL5JAAC+TAAAvk4AAL5RAAC+UgAAvlMAAL5UAAC+VQAAvlcAAL5ZAAC+WgAAvlsAAL5dAAC+XgAAvmsAAL5sAAC+bQAAvm8AAL6uAAC+sAAAvrIAAL60AAC+twAAvrgAAL65AAC+ugAAvrsAAL69AAC+vwAAvsAAAL7BAAC+wwAAvsQAAL8DAAC/BQAAvwcAAL8JAAC/DAAAvw0AAL8OAAC/DwAAvxAAAL8SAAC/FAAAvxUAAL8WAAC/GAAAvxkAAL9YAAC/WgAAv1wAAL9eAAC/YQAAv2IAAL9jAAC/ZAAAv2UAAL9nAAC/aQAAv2oAAL9rAAC/bQAAv24AAL+tAAC/rwAAv7EAAL+zAAC/tgAAv7cAAL+4AAC/uQAAv7oAAL+8AAC/vgAAv78AAL/AAAC/wgAAv8MAAMACAADABAAAwAYAAMAIAADACwAAwAwAAMANAADADgAAwA8AAMARAADAEwAAwBQAAMAVAADAFwAAwBgAAMA9AADAYQAAwIgAAMCsAADArwAAwLIAAMC0AADAtgAAwLgAAMC6AADAuwAAwL4AAMDLAADA2gAAwN0AAMDgAADA4wAAwOYAAMDpAADA7AAAwO8AAMD+AADBAQAAwQQAAMEHAADBCgAAwQ0AAMEQAADBEwAAwRUAAMFUAADBVgAAwVkAAMFbAADBXgAAwV8AAMFgAADBYQAAwWIAAMFkAADBZwAAwWgAAMFpAADBawAAwWwAAMGrAADBrQAAwbAAAMGyAADBtQAAwbYAAMG3AADBuAAAwbkAAMG7AADBvgAAwb8AAMHAAADBwgAAwcMAAMICAADCBAAAwgcAAMIJAADCDAAAwg0AAMIOAADCDwAAwhAAAMISAADCFQAAwhYAAMIXAADCGQAAwhoAAMJZAADCWwAAwl4AAMJgAADCYwAAwmQAAMJlAADCZgAAwmcAAMJpAADCbAAAwm0AAMJuAADCcAAAwnEAAMKwAADCsgAAwrQAAMK2AADCuQAAwroAAMK7AADCvAAAwr0AAMK/AADCwgAAwsMAAMLEAADCxgAAwscAAMMGAADDCAAAwwoAAMMMAADDDwAAwxAAAMMRAADDEgAAwxMAAMMVAADDGAAAwxkAAMMaAADDHAAAwx0AAMNcAADDXgAAw2EAAMNjAADDZgAAw2cAAMNoAADDaQAAw2oAAMNsAADDbwAAw3AAAMNxAADDcwAAw3QAAMN9AADDkAAAw50AAMOwAADDvQAAw9AAAMPnAADD+QAAxEQAAMRnAADEhwAAxKcAAMSpAADEqwAAxK0AAMSvAADEsgAAxLMAAMS0AADEtwAAxLgAAMS6AADEuwAAxL0AAMTAAADEwQAAxMIAAMTFAADExgAAxMsAAMTYAADE3QAAxN8AAMThAADE5gAAxOkAAMTsAADE7gAAxRMAAMU3AADFXgAAxYIAAMWFAADFhwAAxYkAAMWLAADFjQAAxY8AAMWQAADFkwAAxaAAAMWxAADFswAAxbUAAMW3AADFuQAAxbsAAMW9AADFvwAAxcEAAMXSAADF1QAAxdgAAMXbAADF3gAAxeEAAMXkAADF5wAAxeoAAMXsAADGKwAAxi0AAMYvAADGMQAAxjQAAMY1AADGNgAAxjcAAMY4AADGOgAAxjwAAMY9AADGPgAAxkAAAMZBAADGgAAAxoIAAMaEAADGhgAAxokAAMaKAADGiwAAxowAAMaNAADGjwAAxpEAAMaSAADGkwAAxpUAAMaWAADG1QAAxtcAAMbaAADG3AAAxt8AAMbgAADG4QAAxuIAAMbjAADG5QAAxucAAMboAADG6QAAxusAAMbsAADG+QAAxvoAAMb7AADG/QAAxzwAAMc+AADHQAAAx0IAAMdFAADHRgAAx0cAAMdIAADHSQAAx0sAAMdNAADHTgAAx08AAMdRAADHUgAAx5EAAMeTAADHlQAAx5cAAMeaAADHmwAAx5wAAMedAADHngAAx6AAAMeiAADHowAAx6QAAMemAADHpwAAx+YAAMfoAADH6gAAx+wAAMfvAADH8AAAx/EAAMfyAADH8wAAx/UAAMf3AADH+AAAx/kAAMf7AADH/AAAyDsAAMg9AADIPwAAyEEAAMhEAADIRQAAyEYAAMhHAADISAAAyEoAAMhMAADITQAAyE4AAMhQAADIUQAAyJAAAMiSAADIlAAAyJYAAMiZAADImgAAyJsAAMicAADInQAAyJ8AAMihAADIogAAyKMAAMilAADIpgAAyMsAAMjvAADJFgAAyToAAMk9AADJPwAAyUEAAMlDAADJRQAAyUcAAMlIAADJSwAAyVgAAMlnAADJaQAAyWsAAMltAADJbwAAyXEAAMlzAADJdQAAyYQAAMmHAADJigAAyY0AAMmQAADJkwAAyZYAAMmZAADJmwAAydoAAMncAADJ3wAAyeEAAMnkAADJ5QAAyeYAAMnnAADJ6AAAyeoAAMnsAADJ7QAAye4AAMnwAADJ8QAAyfIAAMoxAADKMwAAyjUAAMo3AADKOgAAyjsAAMo8AADKPQAAyj4AAMpAAADKQgAAykMAAMpEAADKRgAAykcAAMqGAADKiAAAyooAAMqMAADKjwAAypAAAMqRAADKkgAAypMAAMqVAADKlwAAypgAAMqZAADKmwAAypwAAMrbAADK3QAAyt8AAMrhAADK5AAAyuUAAMrmAADK5wAAyugAAMrqAADK7AAAyu0AAMruAADK8AAAyvEAAMswAADLMgAAyzQAAMs2AADLOQAAyzoAAMs7AADLPAAAyz0AAMs/AADLQQAAy0IAAMtDAADLRQAAy0YAAMuFAADLhwAAy4kAAMuLAADLjgAAy48AAMuQAADLkQAAy5IAAMuUAADLlgAAy5cAAMuYAADLmgAAy5sAAMvaAADL3AAAy94AAMvgAADL4wAAy+QAAMvlAADL5gAAy+cAAMvpAADL6wAAy+wAAMvtAADL7wAAy/AAAMw7AADMXgAAzH4AAMyeAADMoAAAzKIAAMykAADMpgAAzKkAAMyqAADMqwAAzK4AAMyvAADMsQAAzLIAAMy0AADMtwAAzLgAAMy5AADMvAAAzL0AAMzCAADMzwAAzNQAAMzWAADM2AAAzN0AAMzgAADM4wAAzOUAAM0KAADNLgAAzVUAAM15AADNfAAAzX4AAM2AAADNggAAzYQAAM2GAADNhwAAzYoAAM2XAADNqAAAzaoAAM2sAADNrgAAzbAAAM2yAADNtAAAzbYAAM24AADNyQAAzcwAAM3PAADN0gAAzdUAAM3YAADN2wAAzd4AAM3hAADN4wAAziIAAM4kAADOJgAAzigAAM4rAADOLAAAzi0AAM4uAADOLwAAzjEAAM4zAADONAAAzjUAAM43AADOOAAAzncAAM55AADOewAAzn0AAM6AAADOgQAAzoIAAM6DAADOhAAAzoYAAM6IAADOiQAAzooAAM6MAADOjQAAzswAAM7OAADO0QAAztMAAM7WAADO1wAAztgAAM7ZAADO2gAAztwAAM7eAADO3wAAzuAAAM7iAADO4wAAzvAAAM7xAADO8gAAzvQAAM8zAADPNQAAzzcAAM85AADPPAAAzz0AAM8+AADPPwAAz0AAAM9CAADPRAAAz0UAAM9GAADPSAAAz0kAAM+IAADPigAAz4wAAM+OAADPkQAAz5IAAM+TAADPlAAAz5UAAM+XAADPmQAAz5oAAM+bAADPnQAAz54AAM/dAADP3wAAz+EAAM/jAADP5gAAz+cAAM/oAADP6QAAz+oAAM/sAADP7gAAz+8AAM/wAADP8gAAz/MAANAyAADQNAAA0DYAANA4AADQOwAA0DwAANA9AADQPgAA0D8AANBBAADQQwAA0EQAANBFAADQRwAA0EgAANCHAADQiQAA0IsAANCNAADQkAAA0JEAANCSAADQkwAA0JQAANCWAADQmAAA0JkAANCaAADQnAAA0J0AANDCAADQ5gAA0Q0AANExAADRNAAA0TYAANE4AADROgAA0TwAANE+AADRPwAA0UIAANFPAADRXgAA0WAAANFiAADRZAAA0WYAANFoAADRagAA0WwAANF7AADRfgAA0YEAANGEAADRhwAA0YoAANGNAADRkAAA0ZIAANHRAADR0wAA0dUAANHXAADR2gAA0dsAANHcAADR3QAA0d4AANHgAADR4gAA0eMAANHkAADR5gAA0ecAANImAADSKAAA0ioAANIsAADSLwAA0jAAANIxAADSMgAA0jMAANI1AADSNwAA0jgAANI5AADSOwAA0jwAANJ7AADSfQAA0n8AANKBAADShAAA0oUAANKGAADShwAA0ogAANKKAADSjAAA0o0AANKOAADSkAAA0pEAANLQAADS0gAA0tQAANLWAADS2QAA0toAANLbAADS3AAA0t0AANLfAADS4QAA0uIAANLjAADS5QAA0uYAANMlAADTJwAA0ykAANMrAADTLgAA0y8AANMwAADTMQAA0zIAANM0AADTNgAA0zcAANM4AADTOgAA0zsAANN6AADTfAAA034AANOAAADTgwAA04QAANOFAADThgAA04cAANOJAADTiwAA04wAANONAADTjwAA05AAANPPAADT0QAA09MAANPVAADT2AAA09kAANPaAADT2wAA09wAANPeAADT4AAA0+EAANPiAADT5AAA0+UAANQwAADUUwAA1HMAANSTAADUlQAA1JcAANSZAADUmwAA1J4AANSfAADUoAAA1KMAANSkAADUpgAA1KcAANSpAADUrAAA1K0AANSuAADUsQAA1LIAANS3AADUxAAA1MkAANTLAADUzQAA1NIAANTVAADU2AAA1NoAANT/AADVIwAA1UoAANVuAADVcQAA1XMAANV1AADVdwAA1XkAANV7AADVfAAA1X8AANWMAADVnQAA1Z8AANWhAADVowAA1aUAANWnAADVqQAA1asAANWtAADVvgAA1cEAANXEAADVxwAA1coAANXNAADV0AAA1dMAANXWAADV2AAA1hcAANYZAADWGwAA1h0AANYgAADWIQAA1iIAANYjAADWJAAA1iYAANYoAADWKQAA1ioAANYsAADWLQAA1mwAANZuAADWcAAA1nIAANZ1AADWdgAA1ncAANZ4AADWeQAA1nsAANZ9AADWfgAA1n8AANaBAADWggAA1sEAANbDAADWxgAA1sgAANbLAADWzAAA1s0AANbOAADWzwAA1tEAANbTAADW1AAA1tUAANbXAADW2AAA1uUAANbmAADW5wAA1ukAANcoAADXKgAA1ywAANcuAADXMQAA1zIAANczAADXNAAA1zUAANc3AADXOQAA1zoAANc7AADXPQAA1z4AANd9AADXfwAA14EAANeDAADXhgAA14cAANeIAADXiQAA14oAANeMAADXjgAA148AANeQAADXkgAA15MAANfSAADX1AAA19YAANfYAADX2wAA19wAANfdAADX3gAA198AANfhAADX4wAA1+QAANflAADX5wAA1+gAANgnAADYKQAA2CsAANgtAADYMAAA2DEAANgyAADYMwAA2DQAANg2AADYOAAA2DkAANg6AADYPAAA2D0AANh8AADYfgAA2IAAANiCAADYhQAA2IYAANiHAADYiAAA2IkAANiLAADYjQAA2I4AANiPAADYkQAA2JIAANi3AADY2wAA2QIAANkmAADZKQAA2SsAANktAADZLwAA2TEAANkzAADZNAAA2TcAANlEAADZUwAA2VUAANlXAADZWQAA2VsAANldAADZXwAA2WEAANlwAADZcwAA2XYAANl5AADZfAAA2X8AANmCAADZhQAA2YcAANnGAADZyAAA2coAANnMAADZzwAA2dAAANnRAADZ0gAA2dMAANnVAADZ1wAA2dgAANnZAADZ2wAA2dwAANobAADaHQAA2h8AANohAADaJAAA2iUAANomAADaJwAA2igAANoqAADaLAAA2i0AANouAADaMAAA2jEAANpwAADacgAA2nQAANp2AADaeQAA2noAANp7AADafAAA2n0AANp/AADagQAA2oIAANqDAADahQAA2oYAANrFAADaxwAA2skAANrLAADazgAA2s8AANrQAADa0QAA2tIAANrUAADa1gAA2tcAANrYAADa2gAA2tsAANsaAADbHAAA2x4AANsgAADbIwAA2yQAANslAADbJgAA2ycAANspAADbKwAA2ywAANstAADbLwAA2zAAANtvAADbcQAA23MAANt1AADbeAAA23kAANt6AADbewAA23wAANt+AADbgAAA24EAANuCAADbhAAA24UAANvEAADbxgAA28gAANvKAADbzQAA284AANvPAADb0AAA29EAANvTAADb1QAA29YAANvXAADb2QAA29oAANvjAADb5AAA2+YAANwlAADcJwAA3CkAANwrAADcLgAA3C8AANwwAADcMQAA3DIAANw0AADcNwAA3DgAANw5AADcOwAA3DwAANx7AADcfQAA3IAAANyCAADchQAA3IYAANyHAADciAAA3IkAANyLAADcjgAA3I8AANyQAADckgAA3JMAANzSAADc1AAA3NcAANzZAADc3AAA3N0AANzeAADc3wAA3OAAANziAADc5QAA3OYAANznAADc6QAA3OoAAN0pAADdKwAA3S4AAN0wAADdMwAA3TQAAN01AADdNgAA3TcAAN05AADdPAAA3T0AAN0+AADdQAAA3UEAAN2AAADdggAA3YQAAN2GAADdiQAA3YoAAN2LAADdjAAA3Y0AAN2PAADdkgAA3ZMAAN2UAADdlgAA3ZcAAN3iAADeBQAA3iUAAN5FAADeRwAA3kkAAN5LAADeTQAA3k8AAN5QAADeUQAA3lQAAN5VAADeVwAA3lgAAN5aAADeXQAA3l4AAN5fAADeYgAA3mMAAN5oAADedQAA3noAAN58AADefgAA3oMAAN6GAADeiQAA3osAAN6wAADe1AAA3vsAAN8fAADfIgAA3yQAAN8mAADfKAAA3yoAAN8sAADfLQAA3zA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AAOohAADqIwAA6iUAAOonAADqKgAA6isAAOosAADqLQAA6i4AAOowAADqMgAA6jMAAOo0AADqNgAA6jcAAOpcAADqgAAA6qcAAOrLAADqzgAA6tAAAOrSAADq1AAA6tYAAOrYAADq2QAA6twAAOrpAADq+AAA6voAAOr8AADq/gAA6wAAAOsCAADrBAAA6wYAAOsVAADrGAAA6xsAAOseAADrIQAA6yQAAOsnAADrKgAA6ywAAOtrAADrbQAA628AAOtxAADrdAAA63UAAOt2AADrdwAA63gAAOt6AADrfAAA630AAOt+AADrgAAA64EAAOvAAADrwgAA68QAAOvGAADryQAA68oAAOvLAADrzAAA680AAOvPAADr0QAA69IAAOvTAADr1QAA69YAAOwVAADsFwAA7BkAAOwbAADsHgAA7B8AAOwgAADsIQAA7CIAAOwkAADsJgAA7CcAAOwoAADsKgAA7CsAAOxqAADsbAAA7G8AAOxxAADsdAAA7HUAAOx2AADsdwAA7HgAAOx6AADsfAAA7H0AAOx+AADsgAAA7IEAAOzAAADswgAA7MQAAOzGAADsyQAA7MoAAOzLAADszAAA7M0AAOzPAADs0QAA7NIAAOzTAADs1QAA7NYAAO0VAADtFwAA7RkAAO0bAADtHgAA7R8AAO0gAADtIQAA7SIAAO0kAADtJgAA7ScAAO0oAADtKgAA7SsAAO1qAADtbAAA7W4AAO1wAADtcwAA7XQAAO11AADtdgAA7XcAAO15AADtewAA7XwAAO19AADtfwAA7YAAAO3LAADt7gAA7g4AAO4uAADuMAAA7jIAAO40AADuNgAA7jgAAO45AADuOgAA7j0AAO4+AADuQAAA7kEAAO5DAADuRgAA7kcAAO5IAADuSwAA7kwAAO5RAADuXgAA7mMAAO5lAADuZwAA7mwAAO5vAADucgAA7nQAAO6ZAADuvQAA7uQAAO8IAADvCwAA7w0AAO8PAADvEQAA7xMAAO8VAADvFgAA7xkAAO8mAADvNwAA7zkAAO87AADvPQAA7z8AAO9BAADvQwAA70UAAO9HAADvWAAA71sAAO9eAADvYQAA72QAAO9nAADvagAA720AAO9wAADvcgAA77EAAO+zAADvtQAA77cAAO+6AADvuwAA77wAAO+9AADvvgAA78AAAO/CAADvwwAA78Q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AAQYeAAEGIQABBiIAAQYkAAEGJQABBicAAQYqAAEGKwABBiwAAQYvAAEGMAABBjUAAQZCAAEGRwABBkkAAQZLAAEGUAABBlMAAQZWAAEGWAABBn0AAQahAAEGyAABBuwAAQbvAAEG8QABBvMAAQb1AAEG9wABBvkAAQb6AAEG/QABBwoAAQcbAAEHHQABBx8AAQchAAEHIwABByUAAQcnAAEHKQABBysAAQc8AAEHPwABB0IAAQdFAAEHSAABB0sAAQdOAAEHUQABB1QAAQdWAAEHlQABB5cAAQeZAAEHmwABB54AAQefAAEHoAABB6EAAQeiAAEHpAABB6YAAQenAAEHqAABB6oAAQerAAEH6gABB+wAAQfuAAEH8AABB/MAAQf0AAEH9QABB/YAAQf3AAEH+QABB/sAAQf8AAEH/QABB/8AAQgAAAEIPwABCEEAAQhEAAEIRgABCEkAAQhKAAEISwABCEwAAQhNAAEITwABCFEAAQhSAAEIUwABCFUAAQhWAAEIYwABCGQAAQhlAAEIZwABCKYAAQioAAEIqgABCKwAAQivAAEIsAABCLEAAQiyAAEIswABCLUAAQi3AAEIuAABCLkAAQi7AAEIvAABCPsAAQj9AAEI/wABCQEAAQkEAAEJBQABCQYAAQkHAAEJCAABCQoAAQkMAAEJDQABCQ4AAQkQAAEJEQABCVAAAQlSAAEJVAABCVYAAQlZAAEJWgABCVsAAQlcAAEJXQABCV8AAQlhAAEJYgABCWMAAQllAAEJZgABCaUAAQmnAAEJqQABCasAAQmuAAEJrwABCbAAAQmxAAEJsgABCbQAAQm2AAEJtwABCbgAAQm6AAEJuwABCfoAAQn8AAEJ/gABCgAAAQoDAAEKBAABCgUAAQoGAAEKBwABCgkAAQoLAAEKDAABCg0AAQoPAAEKEAABCjUAAQpZAAEKgAABCqQAAQqnAAEKqQABCqsAAQqtAAEKrwABCrEAAQqyAAEKtQABCsIAAQrRAAEK0wABCtUAAQrXAAEK2QABCtsAAQrdAAEK3wABCu4AAQrxAAEK9AABCvcAAQr6AAEK/QABCwAAAQsDAAELBQABC0QAAQtGAAELSQABC0sAAQtOAAELTwABC1AAAQtRAAELUgABC1QAAQtWAAELVwABC1gAAQtaAAELWwABC5oAAQucAAELngABC6AAAQujAAELpAABC6UAAQumAAELpwABC6kAAQurAAELrAABC60AAQuvAAELsAABC+8AAQvxAAEL8wABC/UAAQv4AAEL+QABC/oAAQv7AAEL/AABC/4AAQwAAAEMAQABDAIAAQwEAAEMBQABDEQAAQxGAAEMSQABDEsAAQxOAAEMTwABDFAAAQxRAAEMUgABDFQAAQxWAAEMVwABDFgAAQxaAAEMWwABDJoAAQycAAEMngABDKAAAQyjAAEMpAABDKUAAQymAAEMpwABDKkAAQyrAAEMrAABDK0AAQyvAAEMsAABDO8AAQzxAAEM8wABDPUAAQz4AAEM+QABDPoAAQz7AAEM/AABDP4AAQ0AAAENAQABDQIAAQ0EAAENBQABDUQAAQ1GAAENSAABDUoAAQ1NAAENTgABDU8AAQ1QAAENUQABDVMAAQ1VAAENVgABDVcAAQ1ZAAENWgABDaUAAQ3IAAEN6AABDggAAQ4KAAEODAABDg4AAQ4QAAEOEgABDhMAAQ4UAAEOFwABDhgAAQ4aAAEOGwABDh0AAQ4gAAEOIQABDiIAAQ4lAAEOJgABDisAAQ44AAEOPQABDj8AAQ5BAAEORgABDkkAAQ5MAAEOTgABDnMAAQ6XAAEOvgABDuIAAQ7lAAEO5wABDukAAQ7rAAEO7QABDu8AAQ7wAAEO8wABDwAAAQ8RAAEPEwABDxUAAQ8XAAEPGQABDxsAAQ8dAAEPHwABDyEAAQ8yAAEPNQABDzgAAQ87AAEPPgABD0EAAQ9EAAEPRwABD0oAAQ9MAAEPiwABD40AAQ+PAAEPkQABD5QAAQ+VAAEPlgABD5cAAQ+YAAEPmgABD5wAAQ+dAAEPngABD6AAAQ+hAAEP4AABD+IAAQ/kAAEP5gABD+kAAQ/qAAEP6wABD+wAAQ/tAAEP7wABD/EAAQ/yAAEP8wABD/UAAQ/2AAEQNQABEDcAARA6AAEQPAABED8AARBAAAEQQQABEEIAARBDAAEQRQABEEcAARBIAAEQSQABEEsAARBMAAEQWQABEFoAARBbAAEQXQABEJwAARCeAAEQoAABEKIAARClAAEQpgABEKcAARCoAAEQqQABEKsAARCtAAEQrgABEK8AARCxAAEQsgABEPEAARDzAAEQ9QABEPcAARD6AAEQ+wABEPwAARD9AAEQ/gABEQAAARECAAERAwABEQQAAREGAAERBwABEUYAARFIAAERSgABEUwAARFPAAERUAABEVEAARFSAAERUwABEVUAARFXAAERWAABEVkAARFbAAERXAABEZsAARGdAAERnwABEaEAARGkAAERpQABEaYAARGnAAERqAABEaoAARGsAAERrQABEa4AARGwAAERsQABEfAAARHyAAER9AABEfYAARH5AAER+gABEfsAARH8AAER/QABEf8AARIBAAESAgABEgMAARIFAAESBgABEisAARJPAAESdgABEpoAARKdAAESnwABEqEAARKjAAESpQABEqcAARKoAAESqwABErgAARLHAAESyQABEssAARLNAAESzwABEtEAARLTAAES1QABEuQAARLnAAES6gABEu0AARLwAAES8wABEvYAARL5AAES+wABEzoAARM8AAETPgABE0AAARNDAAETRAABE0UAARNGAAETRwABE0kAARNLAAETTAABE00AARNPAAETUAABE48AARORAAETkwABE5UAAROYAAETmQABE5oAARObAAETnAABE54AAROgAAEToQABE6IAAROkAAETpQABE+QAARPmAAET6AABE+oAARPtAAET7gABE+8AARPwAAET8QABE/MAARP1AAET9gABE/cAARP5AAET+gABFDkAARQ7AAEUPgABFEAAARRDAAEURAABFEUAARRGAAEURwABFEkAARRLAAEUTAABFE0AARRPAAEUUAABFFMAARSSAAEUlAABFJYAARSYAAEUmwABFJwAARSdAAEUngABFJ8AARShAAEUowABFKQAARSlAAEUpwABFKgAARTnAAEU6QABFOwAARTuAAEU8QABFPIAARTzAAEU9AABFPUAART3AAEU+QABFPoAART7AAEU/QABFP4AARUlAAEVZAABFWYAARVoAAEVagABFW0AARVuAAEVbwABFXAAARVxAAEVcwABFXUAARV2AAEVdwABFXkAARV6AAEVxQABFegAARYIAAEWKAABFioAARYsAAEWLgABFjAAARYyAAEWMwABFjQAARY3AAEWOAABFjoAARY7AAEWPQABFkAAARZBAAEWQgABFkUAARZGAAEWSwABFlgAARZdAAEWXwABFmEAARZmAAEWaQABFmwAARZuAAEWkwABFrcAARbeAAEXAgABFwUAARcHAAEXCQABFwsAARcNAAEXDwABFxAAARcTAAEXIAABFzEAARczAAEXNQABFzcAARc5AAEXOwABFz0AARc/AAEXQQABF1IAARdVAAEXWAABF1sAARdeAAEXYQABF2QAARdnAAEXagABF2wAARerAAEXrQABF68AARexAAEXtAABF7UAARe2AAEXtwABF7gAARe6AAEXvAABF70AARe+AAEXwAABF8EAARgAAAEYAgABGAQAARgGAAEYCQABGAoAARgLAAEYDAABGA0AARgPAAEYEQABGBIAARgTAAEYFQABGBYAARhVAAEYVwABGFoAARhcAAEYXwABGGAAARhhAAEYYgABGGMAARhlAAEYZwABGGgAARhpAAEYawABGGwAARh5AAEYegABGHsAARh9AAEYvAABGL4AARjAAAEYwgABGMUAARjGAAEYxwABGMgAARjJAAEYywABGM0AARjOAAEYzwABGNEAARjSAAEZEQABGRMAARkVAAEZFwABGRoAARkbAAEZHAABGR0AARkeAAEZIAABGSIAARkjAAEZJAABGSYAARknAAEZZgABGWgAARlqAAEZbAABGW8AARlwAAEZcQABGXIAARlzAAEZdQABGXcAARl4AAEZeQABGXsAARl8AAEZuwABGb0AARm/AAEZwQABGcQAARnFAAEZxgABGccAARnIAAEZygABGcwAARnNAAEZzgABGdAAARnRAAEaEAABGhIAARoUAAEaFgABGhkAARoaAAEaGwABGhwAARodAAEaHwABGiEAARoiAAEaIwABGiUAARomAAEaSwABGm8AARqWAAEaugABGr0AARq/AAEawQABGsMAARrFAAEaxwABGsgAARrLAAEa2AABGucAARrpAAEa6wABGu0AARrvAAEa8QABGvMAARr1AAEbBAABGwcAARsKAAEbDQABGxAAARsTAAEbFgABGxkAARsbAAEbWgABG1wAARteAAEbYAABG2MAARtkAAEbZQABG2YAARtnAAEbaQABG2sAARtsAAEbbQABG28AARtwAAEbrwABG7EAARuzAAEbtQABG7gAARu5AAEbugABG7sAARu8AAEbvgABG8AAARvBAAEbwgABG8QAARvFAAEcBAABHAYAARwIAAEcCgABHA0AARwOAAEcDwABHBAAARwRAAEcEwABHBUAARwWAAEcFwABHBkAARwaAAEcWQABHFsAARxeAAEcYAABHGMAARxkAAEcZQABHGYAARxnAAEcaQABHGsAARxsAAEcbQABHG8AARxwAAEcrwABHLEAARyzAAEctQABHLgAARy5AAEcugABHLsAARy8AAEcvgABHMAAARzBAAEcwgABHMQAARzFAAEdBAABHQYAAR0IAAEdCgABHQ0AAR0OAAEdDwABHRAAAR0RAAEdEwABHRUAAR0WAAEdFwABHRkAAR0aAAEdWQABHVsAAR1dAAEdXwABHWIAAR1jAAEdZAABHWUAAR1mAAEdaAABHWoAAR1rAAEdbAABHW4AAR1vAAEdugABHd0AAR39AAEeHQABHh8AAR4hAAEeIwABHiUAAR4nAAEeKAABHikAAR4sAAEeLQABHi8AAR4wAAEeMwABHjYAAR43AAEeOAABHjsAAR48AAEeQQABHk4AAR5TAAEeVQABHlgAAR5dAAEeYAABHmMAAR5lAAEeigABHq4AAR7VAAEe+QABHvwAAR7+AAEfAAABHwIAAR8EAAEfBgABHwcAAR8KAAEfFwABHygAAR8qAAEfLAABHy4AAR8wAAEfMgABHzQAAR82AAEfOAABH0kAAR9MAAEfTwABH1IAAR9VAAEfWAABH1sAAR9eAAEfYQABH2MAAR+iAAEfpAABH6YAAR+oAAEfqwABH6wAAR+tAAEfrgABH68AAR+xAAEfswABH7QAAR+1AAEftwABH7gAAR/3AAEf+QABH/sAAR/9AAEgAAABIAEAASACAAEgAwABIAQAASAGAAEgCAABIAkAASAKAAEgDAABIA0AASBMAAEgTgABIFEAASBTAAEgVgABIFcAASBYAAEgWQABIFoAASBcAAEgXgABIF8AASBgAAEgYgABIGMAASBwAAEgcQABIHIAASB0AAEgswABILUAASC3AAEguQABILwAASC9AAEgvgABIL8AASDAAAEgwgABIMQAASDFAAEgxgABIMgAASDJAAEhCAABIQoAASEMAAEhDgABIREAASESAAEhEwABIRQAASEVAAEhFwABIRkAASEaAAEhGwABIR0AASEeAAEhXQABIV8AASFhAAEhYwABIWYAASFnAAEhaAABIWkAASFqAAEhbAABIW4AASFvAAEhcAABIXIAASFzAAEhsgABIbQAASG2AAEhuAABIbsAASG8AAEhvQABIb4AASG/AAEhwQABIcMAASHEAAEhxQABIccAASHIAAEiBwABIgkAASILAAEiDQABIhAAASIRAAEiEgABIhMAASIUAAEiFgABIhgAASIZAAEiGgABIhwAASIdAAEiQgABImYAASKNAAEisQABIrQAASK3AAEiuQABIrsAASK9AAEivwABIsAAASLDAAEi0AABIt0AASLgAAEi4wABIuYAASLpAAEi7AABIu8AASL8AAEi/wABIwIAASMFAAEjCAABIwsAASMOAAEjEAABI08AASNRAAEjVAABI1YAASNZAAEjWgABI1sAASNcAAEjXQABI18AASNiAAEjYwABI2QAASNmAAEjZwABI6YAASOoAAEjqgABI6wAASOvAAEjsAABI7EAASOyAAEjswABI7UAASO4AAEjuQABI7oAASO8AAEjvQABI/wAASP+AAEkAQABJAMAASQGAAEkBwABJAgAASQJAAEkCgABJAwAASQPAAEkEAABJBEAASQTAAEkFAABJFMAASRVAAEkWAABJFoAASRdAAEkXgABJF8AASRgAAEkYQABJGMAASRmAAEkZwABJGgAASRqAAEkawABJKoAASSsAAEkrwABJLEAASS0AAEktQABJLYAASS3AAEkuAABJLoAASS9AAEkvgABJL8AASTBAAEkwgABJQEAASUDAAElBQABJQcAASUKAAElCwABJQwAASUNAAElDgABJRAAASUTAAElFAABJRUAASUXAAElGAABJWMAASWGAAElpgABJcYAASXIAAElygABJcwAASXOAAEl0AABJdEAASXSAAEl1QABJdYAASXYAAEl2QABJdsAASXeAAEl3wABJeAAASXjAAEl5AABJe0AASX6AAEl/wABJgEAASYDAAEmCAABJgsAASYOAAEmEAABJjUAASZZAAEmgAABJqQAASanAAEmqQABJqsAASatAAEmrwABJrEAASayAAEmtQABJsIAASbTAAEm1QABJtcAASbZAAEm2wABJt0AASbfAAEm4QABJuMAASb0AAEm9wABJvoAASb9AAEnAAABJwMAAScGAAEnCQABJwwAAScOAAEnTQABJ08AASdRAAEnUwABJ1YAASdXAAEnWAABJ1kAASdaAAEnXAABJ14AASdfAAEnYAABJ2IAASdjAAEnogABJ6QAASemAAEnqAABJ6sAASesAAEnrQABJ64AASevAAEnsQABJ7MAASe0AAEntQABJ7cAASe4AAEn9wABJ/kAASf8AAEn/gABKAEAASgCAAEoAwABKAQAASgFAAEoBwABKAkAASgKAAEoCwABKA0AASgOAAEoGwABKBwAASgdAAEoHwABKF4AAShgAAEoYgABKGQAAShnAAEoaAABKGkAAShqAAEoawABKG0AAShvAAEocAABKHEAAShzAAEodAABKLMAASi1AAEotwABKLkAASi8AAEovQABKL4AASi/AAEowAABKMIAASjEAAEoxQABKMYAASjIAAEoyQABKQgAASkKAAEpDAABKQ4AASkRAAEpEgABKRMAASkUAAEpFQABKRcAASkZAAEpGgABKRsAASkdAAEpHgABKV0AASlfAAEpYQABKWMAASlmAAEpZwABKWgAASlpAAEpagABKWwAASluAAEpbwABKXAAASlyAAEpcwABKbIAASm0AAEptgABKbgAASm7AAEpvAABKb0AASm+AAEpvwABKcEAASnDAAEpxAABKcUAASnHAAEpyAABKe0AASoRAAEqOAABKlwAASpfAAEqYQABKmMAASplAAEqZwABKmkAASpqAAEqbQABKnoAASqJAAEqiwABKo0AASqPAAEqkQABKpMAASqVAAEqlwABKqYAASqpAAEqrAABKq8AASqyAAEqtQABKrgAASq7AAEqvQABKvwAASr+AAErAAABKwIAASsFAAErBgABKwcAASsIAAErCQABKwsAASsNAAErDgABKw8AASsRAAErEgABK1EAAStTAAErVQABK1cAAStaAAErWwABK1wAAStdAAErXgABK2AAAStiAAErYwABK2QAAStmAAErZwABK6YAASuoAAErqgABK6wAASuvAAErsAABK7EAASuyAAErswABK7UAASu3AAEruAABK7kAASu7AAErvAABK/sAASv9AAEr/wABLAEAASwEAAEsBQABLAYAASwHAAEsCAABLAoAASwMAAEsDQABLA4AASwQAAEsEQABLFAAASxSAAEsVAABLFYAASxZAAEsWgABLFsAASxcAAEsXQABLF8AASxhAAEsYgABLGMAASxlAAEsZgABLKUAASynAAEsqQABLKsAASyuAAEsrwABLLAAASyxAAEssgABLLQAASy2AAEstwABLLgAASy6AAEsuwABLPoAASz8AAEs/gABLQAAAS0DAAEtBAABLQUAAS0GAAEtBwABLQkAAS0LAAEtDAABLQ0AAS0PAAEtEAABLVsAAS1+AAEtngABLb4AAS3AAAEtwgABLcQAAS3GAAEtyAABLckAAS3KAAEtzQABLc4AAS3QAAEt0QABLdMAAS3WAAEt1wABLdgAAS3bAAEt3AABLeEAAS3uAAEt8wABLfUAAS33AAEt/AABLf8AAS4CAAEuBAABLikAAS5NAAEudAABLpgAAS6bAAEunQABLp8AAS6hAAEuowABLqUAAS6mAAEuqQABLrYAAS7HAAEuyQABLssAAS7NAAEuzwABLtEAAS7TAAEu1QABLtcAAS7oAAEu6wABLu4AAS7xAAEu9AABLvcAAS76AAEu/QABLwAAAS8CAAEvQQABL0MAAS9FAAEvRwABL0oAAS9LAAEvTAABL00AAS9OAAEvUAABL1IAAS9TAAEvVAABL1YAAS9XAAEvlgABL5gAAS+aAAEvnAABL58AAS+gAAEvoQABL6IAAS+jAAEvpQABL6cAAS+oAAEvqQABL6sAAS+sAAEv6wABL+0AAS/wAAEv8gABL/UAAS/2AAEv9wABL/gAAS/5AAEv+wABL/0AAS/+AAEv/wABMAEAATACAAEwDwABMBAAATARAAEwEwABMFIAATBUAAEwVgABMFgAATBbAAEwXAABMF0AATBeAAEwXwABMGEAATBjAAEwZAABMGUAATBnAAEwaAABMKcAATCpAAEwqwABMK0AATCwAAEwsQABMLIAATCzAAEwtAABMLYAATC4AAEwuQABMLoAATC8AAEwvQABMPwAATD+AAExAAABMQIAATEFAAExBgABMQcAATEIAAExCQABMQsAATENAAExDgABMQ8AATERAAExEgABMVEAATFTAAExVQABMVcAATFaAAExWwABMVwAATFdAAExXgABMWAAATFiAAExYwABMWQAATFmAAExZwABMaYAATGoAAExqgABMawAATGvAAExsAABMbEAATGyAAExswABMbUAATG3AAExuAABMbkAATG7AAExvAABMeEAATIFAAEyLAABMlAAATJTAAEyVQABMlcAATJZAAEyWwABMl0AATJeAAEyYQABMm4AATJ9AAEyfwABMoEAATKDAAEyhQABMocAATKJAAEyiwABMpoAATKdAAEyoAABMqMAATKmAAEyqQABMqwAATKvAAEysQABMvAAATLyAAEy9AABMvYAATL5AAEy+gABMvsAATL8AAEy/QABMv8AATMBAAEzAgABMwMAATMFAAEzBgABM0UAATNHAAEzSQABM0sAATNOAAEzTwABM1AAATNRAAEzUgABM1QAATNWAAEzVwABM1gAATNaAAEzWwABM5oAATOcAAEzngABM6AAATOjAAEzpAABM6UAATOmAAEzpwABM6kAATOrAAEzrAABM60AATOvAAEzsAABM+8AATPxAAEz8wABM/UAATP4AAEz+QABM/oAATP7AAEz/AABM/4AATQAAAE0AQABNAIAATQEAAE0BQABNEQAATRGAAE0SAABNEoAATRNAAE0TgABNE8AATRQAAE0UQABNFMAATRVAAE0VgABNFcAATRZAAE0WgABNJkAATSbAAE0nQABNJ8AATSiAAE0owABNKQAATSlAAE0pgABNKgAATSqAAE0qwABNKwAATSuAAE0rwABNO4AATTwAAE08gABNPQAATT3AAE0+AABNPkAATT6AAE0+wABNP0AATT/AAE1AAABNQEAATUDAAE1BAABNU8AATVyAAE1kgABNbIAATW0AAE1tgABNbgAATW6AAE1vAABNb0AATW+AAE1wQABNcIAATXEAAE1xQABNccAATXKAAE1ywABNcwAATXPAAE10AABNdUAATXiAAE15wABNekAATXrAAE18AABNfMAATX2AAE1+AABNh0AATZBAAE2aAABNowAATaPAAE2kQABNpMAATaVAAE2lwABNpkAATaaAAE2nQABNqoAATa7AAE2vQABNr8AATbBAAE2wwABNsUAATbHAAE2yQABNssAATbcAAE23wABNuIAATblAAE26AABNusAATbuAAE28QABNvQAATb2AAE3NQABNzcAATc5AAE3OwABNz4AATc/AAE3QAABN0EAATdCAAE3RAABN0YAATdHAAE3SAABN0oAATdLAAE3igABN4wAATeOAAE3kAABN5MAATeUAAE3lQABN5YAATeXAAE3mQABN5sAATecAAE3nQABN58AATegAAE33wABN+EAATfkAAE35gABN+kAATfqAAE36wABN+wAATftAAE37wABN/EAATfyAAE38wABN/UAATf2AAE4AwABOAQAATgFAAE4BwABOEYAAThIAAE4SgABOEwAAThPAAE4UAABOFEAAThSAAE4UwABOFUAAThXAAE4WAABOFkAAThbAAE4XAABOJsAATidAAE4nwABOKEAATikAAE4pQABOKYAATinAAE4qAABOKoAATisAAE4rQABOK4AATiwAAE4sQABOPAAATjyAAE49AABOPYAATj5AAE4+gABOPsAATj8AAE4/QABOP8AATkBAAE5AgABOQMAATkFAAE5BgABOUUAATlHAAE5SQABOUsAATlOAAE5TwABOVAAATlRAAE5UgABOVQAATlWAAE5VwABOVgAATlaAAE5WwABOZoAATmcAAE5ngABOaAAATmjAAE5pAABOaUAATmmAAE5pwABOakAATmrAAE5rAABOa0AATmvAAE5sAABOdUAATn5AAE6IAABOkQAATpHAAE6SQABOksAATpNAAE6TwABOlEAATpSAAE6VQABOmIAATpxAAE6cwABOnUAATp3AAE6eQABOnsAATp9AAE6fwABOo4AATqRAAE6lAABOpcAATqaAAE6nQABOqAAATqjAAE6pQABOuQAATrmAAE66AABOuoAATrtAAE67gABOu8AATrwAAE68QABOvMAATr1AAE69gABOvcAATr5AAE6+gABOzkAATs7AAE7PQABOz8AATtCAAE7QwABO0QAATtFAAE7RgABO0gAATtKAAE7SwABO0wAATtOAAE7TwABO44AATuQAAE7kgABO5QAATuXAAE7mAABO5kAATuaAAE7mwABO50AATufAAE7oAABO6EAATujAAE7pAABO+MAATvlAAE75wABO+kAATvsAAE77QABO+4AATvvAAE78AABO/IAATv0AAE79QABO/YAATv4AAE7+QABPDgAATw6AAE8PAABPD4AATxBAAE8QgABPEMAATxEAAE8RQABPEcAATxJAAE8SgABPEsAATxNAAE8TgABPI0AATyPAAE8kQABPJMAATyWAAE8lwABPJgAATyZAAE8mgABPJwAATyeAAE8nwABPKAAATyiAAE8owABPOIAATzkAAE85gABPOgAATzrAAE87AABPO0AATzuAAE87wABPPEAATzzAAE89AABPPUAATz3AAE8+AABPUMAAT1mAAE9hgABPaYAAT2oAAE9qgABPawAAT2uAAE9sAABPbEAAT2yAAE9tQABPbYAAT24AAE9uQABPbsAAT2+AAE9vwABPcAAAT3DAAE9xAABPckAAT3WAAE92wABPd0AAT3fAAE95AABPec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AAU7aAAFPGQABTxsAAU8dAAFPHwABTyIAAU8jAAFPJAABTyUAAU8mAAFPKAABTyoAAU8rAAFPLAABTy4AAU8vAAFPbgABT3AAAU9yAAFPdAABT3cAAU94AAFPeQABT3oAAU97AAFPfQABT38AAU+AAAFPgQABT4MAAU+EAAFPwwABT8UAAU/IAAFPygABT80AAU/OAAFPzwABT9AAAU/RAAFP0wABT9UAAU/WAAFP1wABT9kAAU/aAAFP5wABT+gAAU/pAAFP6wABUCoAAVAsAAFQLgABUDAAAVAzAAFQNAABUDUAAVA2AAFQNwABUDkAAVA7AAFQPAABUD0AAVA/AAFQQAABUH8AAVCBAAFQgwABUIUAAVCIAAFQiQABUIoAAVCLAAFQjAABUI4AAVCQAAFQkQABUJIAAVCUAAFQlQABUNQAAVDWAAFQ2AABUNoAAVDdAAFQ3gABUN8AAVDgAAFQ4QABUOMAAVDlAAFQ5gABUOcAAVDpAAFQ6gABUSkAAVErAAFRLQABUS8AAVEyAAFRMwABUTQAAVE1AAFRNgABUTgAAVE6AAFROwABUTwAAVE+AAFRPwABUX4AAVGAAAFRggABUYQAAVGHAAFRiAABUYkAAVGKAAFRiwABUY0AAVGPAAFRkAABUZEAAVGTAAFRlAABUbkAAVHdAAFSBAABUigAAVIrAAFSLgABUjAAAVIyAAFSNAABUjYAAVI3AAFSOgABUkcAAVJWAAFSWQABUlwAAVJfAAFSYgABUmUAAVJoAAFSawABUnoAAVJ9AAFSgAABUoMAAVKGAAFSiQABUowAAVKPAAFSkQABUtAAAVLSAAFS1QABUtcAAVLaAAFS2wABUtwAAVLdAAFS3gABUuAAAVLjAAFS5AABUuUAAVLnAAFS6AABUycAAVMpAAFTLAABUy4AAVMxAAFTMgABUzMAAVM0AAFTNQABUzcAAVM6AAFTOwABUzwAAVM+AAFTPwABU34AAVOAAAFTgwABU4UAAVOIAAFTiQABU4oAAVOLAAFTjAABU44AAVORAAFTkgABU5MAAVOVAAFTlgABU9UAAVPXAAFT2gABU9wAAVPfAAFT4AABU+EAAVPiAAFT4wABU+UAAVPoAAFT6QABU+oAAVPsAAFT7QABVDAAAVRUAAFUeAABVJsAAVTCAAFU4gABVQkAAVUwAAFVUAABVXQAAVWYAAFVmgABVZ0AAVWfAAFVoQABVaMAAVWmAAFVqAABVaoAAVWsAAFVrgABVbAAAVWyAAFVtQABVbgAAVW5AAFVvgABVcsAAVXOAAFV0AABVdMAAVXWAAFV2AABVf0AAVYhAAFWSAABVmwAAVZvAAFWcQABVnMAAVZ1AAFWdwABVnkAAVZ6AAFWfQABVooAAVadAAFWnwABVqEAAVajAAFWpQABVqcAAVapAAFWqwABVq0AAVavAAFWwgABVsUAAVbIAAFWywABVs4AAVbRAAFW1AABVtcAAVbaAAFW3QABVt8AAVceAAFXIAABVyMAAVclAAFXKAABVykAAVcqAAFXKwABVywAAVcuAAFXMAABVzEAAVcyAAFXNAABVzUAAVc+AAFXPwABV0EAAVeAAAFXggABV4QAAVeGAAFXiQABV4oAAVeLAAFXjAABV40AAVePAAFXkQABV5IAAVeTAAFXlQABV5YAAVfVAAFX1wABV9oAAVfcAAFX3wABV+AAAVfhAAFX4gABV+MAAVflAAFX5wABV+gAAVfpAAFX6wABV+wAAVf1AAFX9gABV/gAAVg3AAFYOQABWDsAAVg9AAFYQAABWEEAAVhCAAFYQwABWEQAAVhGAAFYSAABWEkAAVhKAAFYTAABWE0AAViMAAFYjgABWJEAAViTAAFYlgABWJcAAViYAAFYmQABWJoAAVicAAFYngABWJ8AAVigAAFYogABWKMAAVisAAFYrQABWK8AAVjuAAFY8AABWPIAAVj0AAFY9wABWPgAAVj5AAFY+gABWPsAAVj9AAFY/wABWQAAAVkBAAFZAwABWQQAAVlDAAFZRQABWUgAAVlKAAFZTQABWU4AAVlPAAFZUAABWVEAAVlTAAFZVQABWVYAAVlXAAFZWQABWVoAAVlnAAFZaAABWWkAAVlrAAFZqgABWawAAVmuAAFZsAABWbMAAVm0AAFZtQABWbYAAVm3AAFZuQABWbsAAVm8AAFZvQABWb8AAVnAAAFZ/wABWgEAAVoEAAFaBgABWgkAAVoKAAFaCwABWgwAAVoNAAFaDwABWhEAAVoSAAFaEwABWhUAAVoWAAFaKQABWjYAAVpBAAFaRAABWkcAAVpKAAFaTQABWlAAAVpbAAFaXgABWmEAAVpkAAFaZwABWmoAAVpsAAFahAABWpYAAVqhAAFauQABWwQAAVsnAAFbRwABW2cAAVtpAAFbawABW20AAVtvAAFbcgABW3MAAVt0AAFbdwABW3gAAVt6AAFbewABW30AAVuAAAFbgQABW4IAAVuFAAFbhgABW4sAAVuYAAFbnQABW58AAVuhAAFbpgABW6kAAVusAAFbrgABW9MAAVv3AAFcHgABXEIAAVxFAAFcRwABXEkAAVxLAAFcTQABXE8AAVxQAAFcUwABXGAAAVxxAAFccwABXHUAAVx3AAFceQABXHsAAVx9AAFcfwABXIEAAVySAAFclQABXJgAAVybAAFcngABXKEAAVykAAFcpwABXKoAAVysAAFc6wABXO0AAVzvAAFc8QABXPQAAVz1AAFc9gABXPcAAVz4AAFc+gABXPwAAVz9AAFc/gABXQAAAV0BAAFdQAABXUIAAV1EAAFdRgABXUkAAV1KAAFdSwABXUwAAV1NAAFdTwABXVEAAV1SAAFdUwABXVUAAV1WAAFdlQABXZcAAV2aAAFdnAABXZ8AAV2gAAFdoQABXaIAAV2jAAFdpQABXacAAV2oAAFdqQABXasAAV2sAAFduQABXboAAV27AAFdvQABXfwAAV3+AAFeAAABXgIAAV4FAAFeBgABXgcAAV4IAAFeCQABXgsAAV4NAAFeDgABXg8AAV4RAAFeEgABXlEAAV5TAAFeVQABXlcAAV5aAAFeWwABXlwAAV5dAAFeXgABXmAAAV5iAAFeYwABXmQAAV5mAAFeZwABXqYAAV6oAAFeqgABXqwAAV6vAAFesAABXrEAAV6yAAFeswABXrUAAV63AAFeuAABXrkAAV67AAFevAABXvsAAV79AAFe/wABXwEAAV8EAAFfBQABXwYAAV8HAAFfCAABXwoAAV8MAAFfDQABXw4AAV8QAAFfEQABX1AAAV9SAAFfVAABX1YAAV9ZAAFfWgABX1sAAV9cAAFfXQABX18AAV9hAAFfYgABX2MAAV9lAAFfZgABX4sAAV+vAAFf1gABX/oAAV/9AAFf/wABYAEAAWADAAFgBQABYAcAAWAIAAFgCwABYBgAAWAnAAFgKQABYCsAAWAtAAFgLwABYDEAAWAzAAFgNQABYEQAAWBHAAFgSgABYE0AAWBQAAFgUwABYFYAAWBZAAFgWwABYJoAAWCcAAFgngABYKAAAWCjAAFgpAABYKUAAWCmAAFgpwABYKkAAWCrAAFgrAABYK0AAWCvAAFgsAABYO8AAWDxAAFg8wABYPUAAWD4AAFg+QABYPoAAWD7AAFg/AABYP4AAWEAAAFhAQABYQIAAWEEAAFhBQABYUQAAWFGAAFhSAABYUoAAWFNAAFhTgABYU8AAWFQAAFhUQABYVMAAWFVAAFhVgABYVcAAWFZAAFhWgABYZkAAWGbAAFhngABYaAAAWGjAAFhpAABYaUAAWGmAAFhpwABYakAAWGrAAFhrAABYa0AAWGvAAFhsAABYe8AAWHxAAFh8wABYfUAAWH4AAFh+QABYfoAAWH7AAFh/AABYf4AAWIAAAFiAQABYgIAAWIEAAFiBQABYkQAAWJGAAFiSAABYkoAAWJNAAFiTgABYk8AAWJQAAFiUQABYlMAAWJVAAFiVgABYlcAAWJZAAFiWgABYpkAAWKbAAFinQABYp8AAWKiAAFiowABYqQAAWKlAAFipgABYqgAAWKqAAFiqwABYqwAAWKuAAFirwABYvoAAWMdAAFjPQABY10AAWNfAAFjYQABY2MAAWNlAAFjaAABY2kAAWNqAAFjbQABY24AAWNwAAFjcQABY3QAAWN3AAFjeAABY3kAAWN8AAFjfQABY4IAAWOPAAFjlAABY5YAAWOZAAFjngABY6EAAWOkAAFjpgABY8sAAWPvAAFkFgABZDoAAWQ9AAFkPwABZEEAAWRDAAFkRQABZEcAAWRIAAFkSwABZFgAAWRpAAFkawABZG0AAWRvAAFkcQABZHMAAWR1AAFkdwABZHkAAWSKAAFkjQABZJAAAWSTAAFklgABZJkAAWScAAFknwABZKIAAWSkAAFk4wABZOUAAWTnAAFk6QABZOwAAWTtAAFk7gABZO8AAWTwAAFk8gABZPQAAWT1AAFk9gABZPgAAWT5AAFlOAABZToAAWU8AAFlPgABZUEAAWVCAAFlQwABZUQAAWVFAAFlRwABZUkAAWVKAAFlSwABZU0AAWVOAAFljQABZY8AAWWSAAFllAABZZcAAWWYAAFlmQABZZoAAWWbAAFlnQABZZ8AAWWgAAFloQABZaMAAWWkAAFlsQABZbIAAWWzAAFltQABZfQAAWX2AAFl+AABZfoAAWX9AAFl/gABZf8AAWYAAAFmAQABZgMAAWYFAAFmBgABZgcAAWYJAAFmCgABZkkAAWZLAAFmTQABZk8AAWZSAAFmUwABZlQAAWZVAAFmVgABZlgAAWZaAAFmWwABZlwAAWZeAAFmXwABZp4AAWagAAFmogABZqQAAWanAAFmqAABZqkAAWaqAAFmqwABZq0AAWavAAFmsAABZrEAAWazAAFmtAABZvMAAWb1AAFm9wABZvkAAWb8AAFm/QABZv4AAWb/AAFnAAABZwIAAWcEAAFnBQABZwYAAWcIAAFnCQABZ0gAAWdKAAFnTAABZ04AAWdRAAFnUgABZ1MAAWdUAAFnVQABZ1cAAWdZAAFnWgABZ1sAAWddAAFnXgABZ4MAAWenAAFnzgABZ/IAAWf1AAFn+AABZ/oAAWf8AAFn/gABaAAAAWgBAAFoBAABaBEAAWggAAFoIwABaCYAAWgpAAFoLAABaC8AAWgyAAFoNQABaEQAAWhHAAFoSgABaE0AAWhQAAFoUwABaFYAAWhZAAFoWwABaJoAAWicAAFonwABaKEAAWikAAFopQABaKYAAWinAAFoqAABaKoAAWitAAForgABaK8AAWixAAFosgABaPEAAWjzAAFo9gABaPgAAWj7AAFo/AABaP0AAWj+AAFo/wABaQEAAWkEAAFpBQABaQYAAWkIAAFpCQABaUgAAWlKAAFpTQABaU8AAWlSAAFpUwABaVQAAWlVAAFpVgABaVgAAWlbAAFpXAABaV0AAWlfAAFpYAABaZ8AAWmhAAFpowABaaUAAWmoAAFpqQABaaoAAWmrAAFprAABaa4AAWmxAAFpsgABabMAAWm1AAFptgABafUAAWn3AAFp+QABafsAAWn+AAFp/wABagAAAWoBAAFqAgABagQAAWoHAAFqCAABagkAAWoLAAFqDAABaksAAWpNAAFqTwABalEAAWpUAAFqVQABalYAAWpXAAFqWAABaloAAWpdAAFqXgABal8AAWphAAFqYgABaqEAAWqjAAFqpgABaqgAAWqrAAFqrAABaq0AAWquAAFqrwABarEAAWq0AAFqtQABarYAAWq4AAFquQABawQAAWsnAAFrRwABa2cAAWtpAAFrawABa20AAWtvAAFrcgABa3MAAWt0AAFrdwABa3gAAWt6AAFrewABa34AAWuBAAFrggABa4MAAWuGAAFrhwABa4wAAWuZAAFrngABa6AAAWujAAFrqAABa6sAAWuuAAFrsAABa9UAAWv5AAFsIAABbEQAAWxHAAFsSQABbEsAAWxNAAFsTwABbFEAAWxSAAFsVQABbGIAAWxzAAFsdQABbHcAAWx5AAFsewABbH0AAWx/AAFsgQABbIMAAWyUAAFslwABbJoAAWydAAFsoAABbKMAAWymAAFsqQABbKwAAWyuAAFs7QABbO8AAWzxAAFs8wABbPYAAWz3AAFs+AABbPkAAWz6AAFs/AABbP4AAWz/AAFtAAABbQIAAW0DAAFtQgABbUQAAW1GAAFtSAABbUsAAW1MAAFtTQABbU4AAW1PAAFtUQABbVMAAW1UAAFtVQABbVcAAW1YAAFtlwABbZkAAW2cAAFtngABbaEAAW2iAAFtowABbaQAAW2lAAFtpwABbakAAW2qAAFtqwABba0AAW2uAAFtuwABbbwAAW29AAFtvwABbf4AAW4AAAFuAgABbgQAAW4HAAFuCAABbgkAAW4KAAFuCwABbg0AAW4PAAFuEAABbhEAAW4TAAFuFAABblMAAW5VAAFuVwABblkAAW5cAAFuXQABbl4AAW5fAAFuYAABbmIAAW5kAAFuZQABbmYAAW5oAAFuaQABbqgAAW6qAAFurAABbq4AAW6xAAFusgABbrMAAW60AAFutQABbrcAAW65AAFuugABbrsAAW69AAFuvgABbv0AAW7/AAFvAQABbwMAAW8GAAFvBwABbwgAAW8JAAFvCgABbwwAAW8OAAFvDwABbxAAAW8SAAFvEwABb1IAAW9UAAFvVgABb1gAAW9bAAFvXAABb10AAW9eAAFvXwABb2EAAW9jAAFvZAABb2UAAW9nAAFvaAABb40AAW+xAAFv2AABb/wAAW//AAFwAgABcAQAAXAGAAFwCAABcAoAAXALAAFwDgABcBsAAXAoAAFwKwABcC4AAXAxAAFwNAABcDcAAXA6AAFwRwABcEoAAXBNAAFwUAABcFMAAXBWAAFwWQABcFsAAXCaAAFwnAABcJ4AAXCgAAFwowABcKQAAXClAAFwpgABcKcAAXCpAAFwrAABcK0AAXCuAAFwsAABcLEAAXDwAAFw8gABcPQAAXD2AAFw+QABcPoAAXD7AAFw/AABcP0AAXD/AAFxAgABcQMAAXEEAAFxBgABcQcAAXFGAAFxSAABcUsAAXFNAAFxUAABcVEAAXFSAAFxUwABcVQAAXFWAAFxWQABcVoAAXFbAAFxXQABcV4AAXGdAAFxnwABcaIAAXGkAAFxpwABcagAAXGpAAFxqgABcasAAXGtAAFxsAABcbEAAXGyAAFxtAABcbUAAXH0AAFx9gABcfkAAXH7AAFx/gABcf8AAXIAAAFyAQABcgIAAXIEAAFyBwABcggAAXIJAAFyCwABcgwAAXJLAAFyTQABck8AAXJRAAFyVAABclUAAXJWAAFyVwABclgAAXJaAAFyXQABcl4AAXJfAAFyYQABcmIAAXKtAAFy0AABcvAAAXMQAAFzEgABcxQAAXMWAAFzGAABcxsAAXMcAAFzHQABcyAAAXMhAAFzIwABcyQAAXMmAAFzKQABcyoAAXMrAAFzLgABcy8AAXM4AAFzRQABc0oAAXNMAAFzTgABc1MAAXNWAAFzWQABc1sAAXOAAAFzpAABc8sAAXPvAAFz8gABc/QAAXP2AAFz+AABc/oAAXP8AAFz/QABdAAAAXQNAAF0HgABdCAAAXQiAAF0JAABdCYAAXQoAAF0KgABdCwAAXQuAAF0PwABdEIAAXRFAAF0SAABdEsAAXROAAF0UQABdFQAAXRXAAF0WQABdJgAAXSaAAF0nAABdJ4AAXShAAF0ogABdKMAAXSkAAF0pQABdKcAAXSpAAF0qgABdKsAAXStAAF0rgABdO0AAXTvAAF08QABdPMAAXT2AAF09wABdPgAAXT5AAF0+gABdPwAAXT+AAF0/wABdQAAAXUCAAF1AwABdUIAAXVEAAF1RwABdUkAAXVMAAF1TQABdU4AAXVPAAF1UAABdVIAAXVUAAF1VQABdVYAAXVYAAF1WQABdWYAAXVnAAF1aAABdWoAAXWpAAF1qwABda0AAXWvAAF1sgABdbMAAXW0AAF1tQABdbYAAXW4AAF1ugABdbsAAXW8AAF1vgABdb8AAXX+AAF2AAABdgIAAXYEAAF2BwABdggAAXYJAAF2CgABdgsAAXYNAAF2DwABdhAAAXYRAAF2EwABdhQAAXZTAAF2VQABdlcAAXZZAAF2XAABdl0AAXZeAAF2XwABdmAAAXZiAAF2ZAABdmUAAXZmAAF2aAABdmkAAXaoAAF2qgABdqwAAXauAAF2sQABdrIAAXazAAF2tAABdrUAAXa3AAF2uQABdroAAXa7AAF2vQABdr4AAXb9AAF2/wABdwEAAXcDAAF3BgABdwcAAXcIAAF3CQABdwoAAXcMAAF3DgABdw8AAXcQAAF3EgABdxMAAXc4AAF3XAABd4MAAXenAAF3qgABd6wAAXeuAAF3sAABd7IAAXe0AAF3tQABd7gAAXfFAAF31AABd9YAAXfYAAF32gABd9wAAXfeAAF34AABd+IAAXfxAAF39AABd/cAAXf6AAF3/QABeAAAAXgDAAF4BgABeAgAAXhHAAF4SQABeEsAAXhNAAF4UAABeFEAAXhSAAF4UwABeFQAAXhWAAF4WAABeFkAAXhaAAF4XAABeF0AAXicAAF4ngABeKAAAXiiAAF4pQABeKYAAXinAAF4qAABeKkAAXirAAF4rQABeK4AAXivAAF4sQABeLIAAXjxAAF48wABePUAAXj3AAF4+gABePsAAXj8AAF4/QABeP4AAXkAAAF5AgABeQMAAXkEAAF5BgABeQcAAXlGAAF5SAABeUoAAXlMAAF5TwABeVAAAXlRAAF5UgABeVMAAXlVAAF5VwABeVgAAXlZAAF5WwABeVwAAXmbAAF5nQABeZ8AAXmhAAF5pAABeaUAAXmmAAF5pwABeagAAXmqAAF5rAABea0AAXmuAAF5sAABebEAAXnwAAF58gABefQAAXn2AAF5+QABefoAAXn7AAF5/AABef0AAXn/AAF6AQABegIAAXoDAAF6BQABegYAAXpFAAF6RwABekkAAXpLAAF6TgABek8AAXpQAAF6UQABelIAAXpUAAF6VgABelcAAXpYAAF6WgABelsAAXqmAAF6yQABeukAAXsJAAF7CwABew0AAXsPAAF7EQABexQAAXsVAAF7FgABexkAAXsaAAF7HAABex0AAXsgAAF7IwABeyQAAXslAAF7KAABeykAAXsuAAF7OwABe0AAAXtCAAF7RQABe0oAAXtNAAF7UAABe1IAAXt3AAF7mwABe8IAAXvmAAF76QABe+sAAXvtAAF77wABe/EAAXvzAAF79AABe/cAAXwEAAF8FQABfBcAAXwZAAF8GwABfB0AAXwfAAF8IQABfCMAAXwlAAF8NgABfDkAAXw8AAF8PwABfEIAAXxFAAF8SAABfEsAAXxOAAF8UAABfI8AAXyRAAF8kwABfJUAAXyYAAF8mQABfJoAAXybAAF8nAABfJ4AAXygAAF8oQABfKIAAXykAAF8pQABfOQAAXzmAAF86AABfOoAAXztAAF87gABfO8AAXzwAAF88QABfPMAAXz1AAF89gABfPcAAXz5AAF8+gABfTkAAX07AAF9PgABfUAAAX1DAAF9RAABfUUAAX1GAAF9RwABfUkAAX1LAAF9TAABfU0AAX1PAAF9UAABfV0AAX1eAAF9XwABfWEAAX2gAAF9ogABfaQAAX2mAAF9qQABfaoAAX2rAAF9rAABfa0AAX2vAAF9sQABfbIAAX2zAAF9tQABfbYAAX31AAF99wABffkAAX37AAF9/gABff8AAX4AAAF+AQABfgIAAX4EAAF+BgABfgcAAX4IAAF+CgABfgsAAX5KAAF+TAABfk4AAX5QAAF+UwABflQAAX5VAAF+VgABflcAAX5ZAAF+WwABflwAAX5dAAF+XwABfmAAAX6fAAF+oQABfqMAAX6lAAF+qAABfqkAAX6qAAF+qwABfqwAAX6uAAF+sAABfrEAAX6yAAF+tAABfrUAAX70AAF+9gABfvgAAX76AAF+/QABfv4AAX7/AAF/AAABfwEAAX8DAAF/BQABfwYAAX8HAAF/CQABfwoAAX8vAAF/UwABf3oAAX+eAAF/oQABf6QAAX+mAAF/qAABf6oAAX+sAAF/rQABf7AAAX+9AAF/zAABf88AAX/SAAF/1QABf9gAAX/bAAF/3gABf+EAAX/wAAF/8wABf/YAAX/5AAF//AABf/8AAYACAAGABQABgAcAAYBGAAGASAABgEsAAYBNAAGAUAABgFEAAYBSAAGAUwABgFQAAYBWAAGAWQABgFoAAYBbAAGAXQABgF4AAYCdAAGAnwABgKIAAYCkAAGApwABgKgAAYCpAAGAqgABgKsAAYCtAAGAsAABgLEAAYCyAAGAtAABgLUAAYD0AAGA9gABgPkAAYD7AAGA/gABgP8AAYEAAAGBAQABgQIAAYEEAAGBBwABgQgAAYEJAAGBCwABgQwAAYFLAAGBTQABgVAAAYFSAAGBVQABgVYAAYFXAAGBWAABgVkAAYFbAAGBXgABgV8AAYFgAAGBYgABgWMAAYGmAAGBygABge4AAYIRAAGCOAABglgAAYJ/AAGCpgABgsYAAYLqAAGDDgABgxAAAYMTAAGDFQABgxcAAYMZAAGDHAABgx4AAYMgAAGDIgABgyQAAYMmAAGDKAABgysAAYMuAAGDLwABgzQAAYNBAAGDRAABg0YAAYNJAAGDTAABg04AAYNzAAGDlwABg74AAYPiAAGD5QABg+cAAYPpAAGD6wABg+0AAYPvAAGD8AABg/MAAYQAAAGEEwABhBUAAYQXAAGEGQABhBsAAYQdAAGEHwABhCEAAYQjAAGEJQABhDgAAYQ7AAGEPgABhEEAAYREAAGERwABhEoAAYRNAAGEUAABhFMAAYRVAAGElAABhJYAAYSZAAGEmwABhJ4AAYSfAAGEoAABhKEAAYSiAAGEpAABhKYAAYSnAAGEqAABhKoAAYSrAAGEtAABhLUAAYS3AAGE9gABhPgAAYT6AAGE/AABhP8AAYUAAAGFAQABhQIAAYUDAAGFBQABhQcAAYUIAAGFCQABhQsAAYUMAAGFSwABhU0AAYVQAAGFUgABhVUAAYVWAAGFVwABhVgAAYVZAAGFWwABhV0AAYVeAAGFXwABhWEAAYViAAGFawABhWwAAYVuAAGFrQABha8AAYWxAAGFswABhbYAAYW3AAGFuAABhbkAAYW6AAGFvAABhb4AAYW/AAGFwAABhcIAAYXDAAGGAgABhgQAAYYHAAGGCQABhgwAAYYNAAGGDgABhg8AAYYQAAGGEgABhhQAAYYVAAGGFgABhhgAAYYZAAGGIgABhiMAAYYlAAGGZAABhmYAAYZoAAGGagABhm0AAYZuAAGGbwABhnAAAYZxAAGGcwABhnUAAYZ2AAGGdwABhnkAAYZ6AAGGuQABhrsAAYa+AAGGwAABhsMAAYbEAAGGxQABhsYAAYbHAAGGyQABhssAAYbMAAGGzQABhs8AAYbQAAGG3QABht4AAYbfAAGG4QABhyAAAYciAAGHJAABhyYAAYcpAAGHKgABhysAAYcsAAGHLQABhy8AAYcxAAGHMgABhzMAAYc1AAGHNgABh3UAAYd3AAGHegABh3wAAYd/AAGHgAABh4EAAYeCAAGHgwABh4UAAYeHAAGHiAABh4kAAYeLAAGHjAABh6gAAYe1AAGHvgABh8AAAYfDAAGHxgABh8kAAYfSAAGH1QABh9gAAYfbAAGH3gABh+AAAYf0AAGH+wABiEYAAYhpAAGIiQABiKkAAYirAAGIrQABiK8AAYixAAGItAABiLUAAYi2AAGIuQABiLoAAYi8AAGIvQABiL8AAYjBAAGIwgABiMMAAYjGAAGIxwABiMwAAYjZAAGI3gABiOAAAYjiAAGI5wABiOoAAYjtAAGI7wABiRQAAYk4AAGJXwABiYMAAYmGAAGJiAABiYoAAYmMAAGJjgABiZAAAYmRAAGJlAABiaEAAYmyAAGJtAABibYAAYm4AAGJugABibwAAYm+AAGJwAABicIAAYnTAAGJ1gABidkAAYncAAGJ3wABieIAAYnlAAGJ6AABiesAAYntAAGKLAABii4AAYowAAGKMgABijUAAYo2AAGKNwABijgAAYo5AAGKOwABij0AAYo+AAGKPwABikEAAYpCAAGKgQABioMAAYqFAAGKhwABiooAAYqLAAGKjAABio0AAYqOAAGKkAABipIAAYqTAAGKlAABipYAAYqXAAGK1gABitgAAYrbAAGK3QABiuAAAYrhAAGK4gABiuMAAYrkAAGK5gABiugAAYrpAAGK6gABiuwAAYrtAAGK+gABivsAAYr8AAGK/gABiz0AAYs/AAGLQQABi0MAAYtGAAGLRwABi0gAAYtJAAGLSgABi0wAAYtOAAGLTwABi1AAAYtSAAGLUwABi5IAAYuUAAGLlgABi5gAAYubAAGLnAABi50AAYueAAGLnwABi6EAAYujAAGLpAABi6UAAYunAAGLqAABi+cAAYvpAAGL6wABi+0AAYvwAAGL8QABi/IAAYvzAAGL9AABi/YAAYv4AAGL+QABi/oAAYv8AAGL/QABjDwAAYw+AAGMQAABjEIAAYxFAAGMRgABjEcAAYxIAAGMSQABjEsAAYxNAAGMTgABjE8AAYxRAAGMUgABjJEAAYyTAAGMlQABjJcAAYyaAAGMmwABjJwAAYydAAGMngABjKAAAYyiAAGMowABjKQAAYymAAGMpwABjMwAAYzwAAGNFwABjTsAAY0+AAGNQAABjUIAAY1EAAGNRgABjUgAAY1JAAGNTAABjVkAAY1oAAGNagABjWwAAY1uAAGNcAABjXIAAY10AAGNdgABjYUAAY2IAAGNiwABjY4AAY2RAAGNlAABjZcAAY2aAAGNnAABjdsAAY3dAAGN3wABjeEAAY3kAAGN5QABjeYAAY3nAAGN6AABjeoAAY3sAAGN7QABje4AAY3wAAGN8QABjjAAAY4yAAGONAABjjYAAY45AAGOOgABjjsAAY48AAGOPQABjj8AAY5BAAGOQgABjkMAAY5FAAGORgABjoUAAY6HAAGOiQABjosAAY6OAAGOjwABjpAAAY6RAAGOkgABjpQAAY6WAAGOlwABjpgAAY6aAAGOmwABjtoAAY7cAAGO3gABjuAAAY7jAAGO5AABjuUAAY7mAAGO5wABjukAAY7rAAGO7AABju0AAY7vAAGO8AABjy8AAY8xAAGPMwABjzUAAY84AAGPOQABjzoAAY87AAGPPAABjz4AAY9AAAGPQQABj0IAAY9EAAGPRQABj4QAAY+GAAGPiAABj4oAAY+NAAGPjgABj48AAY+QAAGPkQABj5MAAY+VAAGPlgABj5cAAY+ZAAGPmgABj9kAAY/bAAGP3QABj98AAY/iAAGP4wABj+QAAY/lAAGP5gABj+gAAY/qAAGP6wABj+wAAY/uAAGP7wABkDoAAZBdAAGQfQABkJ0AAZCfAAGQoQABkKMAAZClAAGQqAABkKkAAZCqAAGQrQABkK4AAZCwAAGQsQABkLQAAZC3AAGQuAABkLkAAZC8AAGQvQABkMIAAZDPAAGQ1AABkNYAAZDZAAGQ3gABkOEAAZDkAAGQ5gABkQsAAZEvAAGRVgABkXoAAZF9AAGRfwABkYEAAZGDAAGRhQABkYcAAZGIAAGRiwABkZgAAZGpAAGRqwABka0AAZGvAAGRsQABkbMAAZG1AAGRtwABkbkAAZHKAAGRzQABkdAAAZHTAAGR1gABkdkAAZHcAAGR3wABkeIAAZHkAAGSIwABkiUAAZInAAGSKQABkiwAAZItAAGSLgABki8AAZIwAAGSMgABkjQAAZI1AAGSNgABkjgAAZI5AAGSeAABknoAAZJ8AAGSfgABkoEAAZKCAAGSgwABkoQAAZKFAAGShwABkokAAZKKAAGSiwABko0AAZKOAAGSzQABks8AAZLSAAGS1AABktcAAZLYAAGS2QABktoAAZLbAAGS3QABkt8AAZLgAAGS4QABkuMAAZLkAAGS8QABkvIAAZLzAAGS9QABkzQAAZM2AAGTOAABkzoAAZM9AAGTPgABkz8AAZNAAAGTQQABk0MAAZNFAAGTRgABk0cAAZNJAAGTSgABk4kAAZOLAAGTjQABk48AAZOSAAGTkwABk5QAAZOVAAGTlgABk5gAAZOaAAGTmwABk5wAAZOeAAGTnwABk94AAZPgAAGT4gABk+QAAZPnAAGT6AABk+kAAZPqAAGT6wABk+0AAZPvAAGT8AABk/EAAZPzAAGT9AABlDMAAZQ1AAGUNwABlDkAAZQ8AAGUPQABlD4AAZQ/AAGUQAABlEIAAZREAAGURQABlEYAAZRIAAGUSQABlIgAAZSKAAGUjAABlI4AAZSRAAGUkgABlJMAAZSUAAGUlQABlJcAAZSZAAGUmgABlJsAAZSdAAGUngABlMMAAZTnAAGVDgABlTIAAZU1AAGVOAABlToAAZU8AAGVPgABlUAAAZVBAAGVRAABlVEAAZVeAAGVYQABlWQAAZVnAAGVagABlW0AAZVwAAGVfQABlYAAAZWDAAGVhgABlYkAAZWMAAGVjwABlZEAAZXQAAGV0gABldQAAZXWAAGV2QABldoAAZXbAAGV3AABld0AAZXfAAGV4gABleMAAZXkAAGV5gABlecAAZYmAAGWKAABlioAAZYsAAGWLwABljAAAZYxAAGWMgABljMAAZY1AAGWOAABljkAAZY6AAGWPAABlj0AAZZ8AAGWfgABloEAAZaDAAGWhgABlocAAZaIAAGWiQABlooAAZaMAAGWjwABlpAAAZaRAAGWkwABlpQAAZbTAAGW1QABltgAAZbaAAGW3QABlt4AAZbfAAGW4AABluEAAZbjAAGW5gABlucAAZboAAGW6gABlusAAZcqAAGXLAABly8AAZcxAAGXNAABlzUAAZc2AAGXNwABlzgAAZc6AAGXPQABlz4AAZc/AAGXQQABl0IAAZeBAAGXgwABl4UAAZeHAAGXigABl4sAAZeMAAGXjQABl44AAZeQAAGXkwABl5QAAZeVAAGXlwABl5gAAZfjAAGYBgABmCYAAZhGAAGYSAABmEoAAZhMAAGYTgABmFEAAZhSAAGYUwABmFYAAZhXAAGYWQABmFoAAZhcAAGYXwABmGAAAZhhAAGYZAABmGUAAZhuAAGYewABmIAAAZiCAAGYhAABmIkAAZiMAAGYjwABmJEAAZi2AAGY2gABmQEAAZklAAGZKAABmSoAAZksAAGZLgABmTAAAZkyAAGZMwABmTYAAZlDAAGZVAABmVYAAZlYAAGZWgABmVwAAZleAAGZYAABmWIAAZlkAAGZdQABmXgAAZl7AAGZfgABmYEAAZmEAAGZhwABmYoAAZmNAAGZjwABmc4AAZnQAAGZ0gABmdQAAZnXAAGZ2AABmdkAAZnaAAGZ2wABmd0AAZnfAAGZ4AABmeEAAZnjAAGZ5AABmiMAAZolAAGaJwABmikAAZosAAGaLQABmi4AAZovAAGaMAABmjIAAZo0AAGaNQABmjYAAZo4AAGaOQABmngAAZp6AAGafQABmn8AAZqCAAGagwABmoQAAZqFAAGahgABmogAAZqKAAGaiwABmowAAZqOAAGajwABmpwAAZqdAAGangABmqAAAZrfAAGa4QABmuMAAZrlAAGa6AABmukAAZrqAAGa6wABmuwAAZruAAGa8AABmvEAAZryAAGa9AABmvUAAZs0AAGbNgABmzgAAZs6AAGbPQABmz4AAZs/AAGbQAABm0EAAZtDAAGbRQABm0YAAZtHAAGbSQABm0oAAZuJAAGbiwABm40AAZuPAAGbkgABm5MAAZuUAAGblQABm5YAAZuYAAGbmgABm5sAAZucAAGbngABm58AAZveAAGb4AABm+IAAZvkAAGb5wABm+gAAZvpAAGb6gABm+sAAZvtAAGb7wABm/AAAZvxAAGb8wABm/QAAZwzAAGcNQABnDcAAZw5AAGcPAABnD0AAZw+AAGcPwABnEAAAZxCAAGcRAABnEUAAZxGAAGcSAABnEkAAZxuAAGckgABnLkAAZzdAAGc4AABnOIAAZzkAAGc5gABnOgAAZzqAAGc6wABnO4AAZz7AAGdCgABnQwAAZ0OAAGdEAABnRIAAZ0UAAGdFgABnRgAAZ0nAAGdKgABnS0AAZ0wAAGdMwABnTYAAZ05AAGdPAABnT4AAZ19AAGdfwABnYEAAZ2DAAGdhgABnYcAAZ2IAAGdiQABnYoAAZ2MAAGdjgABnY8AAZ2QAAGdkgABnZMAAZ3SAAGd1AABndYAAZ3YAAGd2wABndwAAZ3dAAGd3gABnd8AAZ3hAAGd4wABneQAAZ3lAAGd5wABnegAAZ4nAAGeKQABnisAAZ4tAAGeMAABnjEAAZ4yAAGeMwABnjQAAZ42AAGeOAABnjkAAZ46AAGePAABnj0AAZ58AAGefgABnoAAAZ6CAAGehQABnoYAAZ6HAAGeiAABnokAAZ6LAAGejQABno4AAZ6PAAGekQABnpIAAZ7RAAGe0wABntUAAZ7XAAGe2gABntsAAZ7cAAGe3QABnt4AAZ7gAAGe4gABnuMAAZ7kAAGe5gABnucAAZ8mAAGfKAABnyoAAZ8sAAGfLwABnzAAAZ8xAAGfMgABnzMAAZ81AAGfNwABnzgAAZ85AAGfOwABnzwAAZ97AAGffQABn38AAZ+BAAGfhAABn4UAAZ+GAAGfhwABn4gAAZ+KAAGfjAABn40AAZ+OAAGfkAABn5EAAZ/cAAGf/wABoB8AAaA/AAGgQQABoEMAAaBFAAGgRwABoEoAAaBLAAGgTAABoE8AAaBQAAGgUgABoFMAAaBWAAGgWQABoFoAAaBbAAGgXgABoF8AAaBkAAGgcQABoHYAAaB4AAGgewABoIAAAaCDAAGghgABoIgAAaCtAAGg0QABoPgAAaEcAAGhHwABoSEAAaEjAAGhJQABoScAAaEpAAGhKgABoS0AAaE6AAGhSwABoU0AAaFPAAGhUQABoVMAAaFVAAGhVwABoVkAAaFbAAGhbAABoW8AAaFyAAGhdQABoXgAAaF7AAGhfgABoYEAAaGEAAGhhgABocUAAaHHAAGhyQABocsAAaHOAAGhzwABodAAAaHRAAGh0gABodQAAaHWAAGh1wABodgAAaHaAAGh2wABohoAAaIcAAGiHgABoiAAAaIjAAGiJAABoiUAAaImAAGiJwABoikAAaIrAAGiLAABoi0AAaIvAAGiMAABom8AAaJxAAGidAABonYAAaJ5AAGiegABonsAAaJ8AAGifQABon8AAaKBAAGiggABooMAAaKFAAGihgABopMAAaKUAAGilQABopcAAaLWAAGi2AABotoAAaLcAAGi3wABouAAAaLhAAGi4gABouMAAaLlAAGi5wABougAAaLpAAGi6wABouwAAaMrAAGjLQABoy8AAaMxAAGjNAABozUAAaM2AAGjNwABozgAAaM6AAGjPAABoz0AAaM+AAGjQAABo0EAAaOAAAGjggABo4QAAaOGAAGjiQABo4oAAaOLAAGjjAABo40AAaOPAAGjkQABo5IAAaOTAAGjlQABo5YAAaPVAAGj1wABo9kAAaPbAAGj3gABo98AAaPgAAGj4QABo+IAAaPkAAGj5gABo+cAAaPoAAGj6gABo+sAAaQqAAGkLAABpC4AAaQwAAGkMwABpDQAAaQ1AAGkNgABpDcAAaQ5AAGkOwABpDwAAaQ9AAGkPwABpEAAAaRlAAGkiQABpLAAAaTUAAGk1wABpNoAAaTcAAGk3gABpOAAAaTiAAGk4wABpOYAAaTzAAGlAgABpQUAAaUIAAGlCwABpQ4AAaURAAGlFAABpRcAAaUmAAGlKQABpSwAAaUvAAGlMgABpTUAAaU4AAGlOwABpT0AAaV8AAGlfgABpYEAAaWDAAGlhgABpYcAAaWIAAGliQABpYoAAaWMAAGljwABpZAAAaWRAAGlkwABpZQAAaXTAAGl1QABpdgAAaXaAAGl3QABpd4AAaXfAAGl4AABpeEAAaXjAAGl5gABpecAAaXoAAGl6gABpesAAaYqAAGmLAABpi8AAaYxAAGmNAABpjUAAaY2AAGmNwABpjgAAaY6AAGmPQABpj4AAaY/AAGmQQABpkIAAaaBAAGmgwABpoYAAaaIAAGmiwABpowAAaaNAAGmjgABpo8AAaaRAAGmlAABppUAAaaWAAGmmAABppkAAabYAAGm2gABptwAAabeAAGm4QABpuIAAabjAAGm5AABpuUAAabnAAGm6gABpusAAabsAAGm7gABpu8AAacuAAGnMAABpzIAAac0AAGnNwABpzgAAac5AAGnOgABpzsAAac9AAGnQAABp0EAAadCAAGnRAABp0UAAaeEAAGnhgABp4kAAaeLAAGnjgABp48AAaeQAAGnkQABp5IAAaeUAAGnlwABp5gAAaeZAAGnmwABp5wAAaelAAGnpgABp6gAAafnAAGn6QABp+sAAaftAAGn8AABp/EAAafyAAGn8wABp/QAAaf2AAGn+QABp/oAAaf7AAGn/QABp/4AAag9AAGoPwABqEEAAahDAAGoRgABqEcAAahIAAGoSQABqEoAAahMAAGoTwABqFAAAahRAAGoUwABqFQAAaiTAAGolQABqJgAAaiaAAGonQABqJ4AAaifAAGooAABqKEAAaijAAGopgABqKcAAaioAAGoqgABqKsAAai0AAGotQABqLcAAaj2AAGo+AABqPoAAaj8AAGo/wABqQAAAakBAAGpAgABqQMAAakFAAGpCAABqQkAAakKAAGpDAABqQ0AAalMAAGpTgABqVAAAalSAAGpVQABqVYAAalXAAGpWAABqVkAAalbAAGpXgABqV8AAalgAAGpYgABqWMAAamiAAGppAABqacAAampAAGprAABqa0AAamuAAGprwABqbAAAamyAAGptQABqbYAAam3AAGpuQABqboAAaoFAAGqKAABqkgAAapoAAGqagABqmwAAapuAAGqcAABqnIAAapzAAGqdAABqncAAap4AAGqegABqnsAAap9AAGqgAABqoEAAaqCAAGqhQABqoYAAaqLAAGqmAABqp0AAaqfAAGqoQABqqYAAaqpAAGqrAABqq4AAarTAAGq9wABqx4AAatCAAGrRQABq0cAAatJAAGrSwABq00AAatPAAGrUAABq1MAAatgAAGrcQABq3MAAat1AAGrdwABq3kAAat7AAGrfQABq38AAauBAAGrkgABq5UAAauYAAGrmwABq54AAauhAAGrpAABq6cAAauqAAGrrAABq+sAAavtAAGr7wABq/EAAav0AAGr9QABq/YAAav3AAGr+AABq/oAAav8AAGr/QABq/4AAawAAAGsAQABrEAAAaxCAAGsRAABrEYAAaxJAAGsSgABrEsAAaxMAAGsTQABrE8AAaxRAAGsUgABrFMAAaxVAAGsVgABrJUAAayXAAGsmgABrJwAAayfAAGsoAABrKEAAayiAAGsowABrKUAAaynAAGsqAABrKkAAayrAAGsrAABrLkAAay6AAGsuwABrL0AAaz8AAGs/gABrQAAAa0CAAGtBQABrQYAAa0HAAGtCAABrQkAAa0LAAGtDQABrQ4AAa0PAAGtEQABrRIAAa1RAAGtUwABrVUAAa1XAAGtWgABrVsAAa1cAAGtXQABrV4AAa1gAAGtYgABrWMAAa1kAAGtZgABrWcAAa2mAAGtqAABraoAAa2sAAGtrwABrbAAAa2xAAGtsgABrbMAAa21AAGttwABrbgAAa25AAGtuwABrbwAAa37AAGt/QABrf8AAa4BAAGuBAABrgUAAa4GAAGuBwABrggAAa4KAAGuDAABrg0AAa4OAAGuEAABrhEAAa5QAAGuUgABrlQAAa5WAAGuWQABrloAAa5bAAGuXAABrl0AAa5fAAGuYQABrmIAAa5jAAGuZQABrmYAAa6LAAGurwABrtYAAa76AAGu/QABrv8AAa8BAAGvAwABrwUAAa8HAAGvCAABrwsAAa8YAAGvJwABrykAAa8rAAGvLQABry8AAa8xAAGvMwABrzUAAa9EAAGvRwABr0oAAa9NAAGvUAABr1MAAa9WAAGvWQABr1sAAa+aAAGvnAABr54AAa+gAAGvowABr6QAAa+lAAGvpgABr6cAAa+pAAGvqwABr6wAAa+tAAGvrwABr7AAAa/vAAGv8QABr/MAAa/1AAGv+AABr/kAAa/6AAGv+wABr/wAAa/+AAGwAAABsAEAAbACAAGwBAABsAUAAbBEAAGwRgABsEgAAbBKAAGwTQABsE4AAbBPAAGwUAABsFEAAbBTAAGwVQABsFYAAbBXAAGwWQABsFoAAbCZAAGwmwABsJ4AAbCgAAGwowABsKQAAbClAAGwpgABsKcAAbCpAAGwqwABsKwAAbCtAAGwrwABsLAAAbDvAAGw8QABsPMAAbD1AAGw+AABsPkAAbD6AAGw+wABsPwAAbD+AAGxAAABsQEAAbECAAGxBAABsQUAAbFEAAGxRgABsUgAAbFKAAGxTQABsU4AAbFPAAGxUAABsVEAAbFTAAGxVQABsVYAAbFXAAGxWQABsVoAAbGZAAGxmwABsZ0AAbGfAAGxogABsaMAAbGkAAGxpQABsaYAAbGoAAGxqgABsasAAbGsAAGxrgABsa8AAbH6AAGyHQABsj0AAbJdAAGyXwABsmEAAbJjAAGyZQABsmcAAbJoAAGyaQABsmwAAbJtAAGybwABsnAAAbJzAAGydgABsncAAbJ4AAGyewABsnwAAbKBAAGyjgABspMAAbKVAAGymAABsp0AAbKgAAGyowABsqUAAbLKAAGy7gABsxUAAbM5AAGzPAABsz4AAbNAAAGzQgABs0QAAbNGAAGzRwABs0oAAbNXAAGzaAABs2oAAbNsAAGzbgABs3AAAbNyAAGzdAABs3YAAbN4AAGziQABs4wAAbOPAAGzkgABs5UAAbOYAAGzmwABs54AAbOhAAGzowABs+IAAbPkAAGz5gABs+gAAbPrAAGz7AABs+0AAbPuAAGz7wABs/EAAbPzAAGz9AABs/UAAbP3AAGz+AABtDcAAbQ5AAG0OwABtD0AAbRAAAG0QQABtEIAAbRDAAG0RAABtEYAAbRIAAG0SQABtEoAAbRMAAG0TQABtIwAAbSOAAG0kQABtJMAAbSWAAG0lwABtJgAAbSZAAG0mgABtJwAAbSeAAG0nwABtKAAAbSiAAG0owABtLAAAbSxAAG0sgABtLQAAbTzAAG09QABtPcAAbT5AAG0/AABtP0AAbT+AAG0/wABtQAAAbUCAAG1BAABtQUAAbUGAAG1CAABtQkAAbVIAAG1SgABtUwAAbVOAAG1UQABtVIAAbVTAAG1VAABtVUAAbVXAAG1WQABtVoAAbVbAAG1XQABtV4AAbWdAAG1nwABtaEAAbWjAAG1pgABtacAAbWoAAG1qQABtaoAAbWsAAG1rgABta8AAbWwAAG1sgABtbMAAbXyAAG19AABtfYAAbX4AAG1+wABtfwAAbX9AAG1/gABtf8AAbYBAAG2AwABtgQAAbYFAAG2BwABtggAAbZHAAG2SQABtksAAbZNAAG2UAABtlEAAbZSAAG2UwABtlQAAbZWAAG2WAABtlkAAbZaAAG2XAABtl0AAbaCAAG2pgABts0AAbbxAAG29AABtvcAAbb5AAG2+wABtv0AAbb/AAG3AAABtwMAAbcQAAG3HwABtyIAAbclAAG3KAABtysAAbcuAAG3MQABtzQAAbdDAAG3RgABt0kAAbdMAAG3TwABt1IAAbdVAAG3WAABt1oAAbeZAAG3mwABt54AAbegAAG3owABt6QAAbelAAG3pgABt6cAAbepAAG3rAABt60AAbeuAAG3sAABt7EAAbfwAAG38gABt/UAAbf3AAG3+gABt/sAAbf8AAG3/QABt/4AAbgAAAG4AwABuAQAAbgFAAG4BwABuAgAAbhHAAG4SQABuEwAAbhOAAG4UQABuFIAAbhTAAG4VAABuFUAAbhXAAG4WgABuFsAAbhcAAG4XgABuF8AAbieAAG4oAABuKMAAbilAAG4qAABuKkAAbiqAAG4qwABuKwAAbiuAAG4sQABuLIAAbizAAG4tQABuLYAAbj5AAG5HQABuUEAAblkAAG5iwABuasAAbnSAAG5+QABuhkAAbo9AAG6YQABumMAAbpmAAG6aAABumoAAbpsAAG6bwABunEAAbpzAAG6dQABuncAAbp5AAG6ewABun4AAbqBAAG6ggABuocAAbqUAAG6lwABupkAAbqcAAG6nwABuqEAAbrGAAG66gABuxEAAbs1AAG7OAABuzoAAbs8AAG7PgABu0AAAbtCAAG7QwABu0YAAbtTAAG7ZgABu2gAAbtqAAG7bAABu24AAbtwAAG7cgABu3QAAbt2AAG7eAABu4sAAbuOAAG7kQABu5QAAbuXAAG7mgABu50AAbugAAG7owABu6YAAbuoAAG75wABu+kAAbvsAAG77gABu/EAAbvyAAG78wABu/QAAbv1AAG79wABu/kAAbv6AAG7+wABu/0AAbv+AAG8BwABvAgAAbwKAAG8SQABvEsAAbxNAAG8TwABvFIAAbxTAAG8VAABvFUAAbxWAAG8WAABvFoAAbxbAAG8XAABvF4AAbxfAAG8ngABvKAAAbyjAAG8pQABvKgAAbypAAG8qgABvKsAAbysAAG8rgABvLAAAbyxAAG8sgABvLQAAby1AAG8vgABvL8AAbzBAAG9AAABvQIAAb0EAAG9BgABvQkAAb0KAAG9CwABvQwAAb0NAAG9DwABvREAAb0SAAG9EwABvRUAAb0WAAG9VQABvVcAAb1aAAG9XAABvV8AAb1gAAG9YQABvWIAAb1jAAG9ZQABvWcAAb1oAAG9aQABvWsAAb1sAAG9dQABvXYAAb14AAG9twABvbkAAb27AAG9vQABvcAAAb3BAAG9wgABvcMAAb3EAAG9xgABvcgAAb3JAAG9ygABvcwAAb3NAAG+DAABvg4AAb4RAAG+EwABvhYAAb4XAAG+GAABvhkAAb4aAAG+HAABvh4AAb4fAAG+IAABviIAAb4jAAG+MAABvjEAAb4yAAG+NAABvnMAAb51AAG+dwABvnkAAb58AAG+fQABvn4AAb5/AAG+gAABvoIAAb6EAAG+hQABvoYAAb6IAAG+iQABvsgAAb7KAAG+zQABvs8AAb7SAAG+0wABvtQAAb7VAAG+1gABvtgAAb7aAAG+2wABvtwAAb7eAAG+3wABvu0AAb76AAG/AwABvwYAAb8JAAG/DAABvw8AAb8YAAG/GwABvx4AAb8hAAG/JAABvyYAAb8rAAG/dgABv5kAAb+5AAG/2QABv9sAAb/dAAG/3wABv+EAAb/kAAG/5QABv+YAAb/pAAG/6gABv+wAAb/tAAG/8AABv/MAAb/0AAG/9QABv/gAAb/5AAG//gABwAsAAcAQAAHAEgABwBUAAcAaAAHAHQABwCAAAcAiAAHARwABwGsAAcCSAAHAtgABwLkAAcC7AAHAvQABwL8AAcDBAAHAwwABwMQAAcDHAAHA1AABwOUAAcDnAAHA6QABwOsAAcDtAAHA7wABwPEAAcDzAAHA9QABwQYAAcEJAAHBDAABwQ8AAcESAAHBFQABwRgAAcEbAAHBHgABwSAAAcFfAAHBYQABwWMAAcFlAAHBaAABwWkAAcFqAAHBawABwWwAAcFuAAHBcAABwXEAAcFyAAHBdAABwXUAAcG0AAHBtgABwbgAAcG6AAHBvQABwb4AAcG/AAHBwAABwcEAAcHDAAHBxQABwcYAAcHHAAHByQABwcoAAcIJAAHCCwABwg4AAcIQAAHCEwABwhQAAcIVAAHCFgABwhcAAcIZAAHCGwABwhwAAcIdAAHCHwABwiAAAcItAAHCLgABwi8AAcIxAAHCcAABwnIAAcJ0AAHCdgABwnkAAcJ6AAHCewABwnwAAcJ9AAHCfwABwoEAAcKCAAHCgwABwoUAAcKGAAHCxQABwscAAcLJAAHCywABws4AAcLPAAHC0AABwtEAAcLSAAHC1AABwtYAAcLXAAHC2AABwtoAAcLbAAHDGgABwxwAAcMeAAHDIAABwyMAAcMkAAHDJQABwyYAAcMnAAHDKQABwysAAcMsAAHDLQABwy8AAcMwAAHDbwABw3EAAcNzAAHDdQABw3gAAcN5AAHDegABw3sAAcN8AAHDfgABw4AAAcOBAAHDggABw4QAAcOFAAHDxAABw8YAAcPIAAHDygABw80AAcPOAAHDzwABw9AAAcPRAAHD0wABw9UAAcPWAAHD1wABw9kAAcPaAAHD/wABxCMAAcRKAAHEbgABxHEAAcR0AAHEdgABxHgAAcR6AAHEfAABxH0AAcSAAAHEjQABxJwAAcSfAAHEogABxKUAAcSoAAHEqwABxK4AAcSxAAHEwAABxMMAAcTGAAHEyQABxMwAAcTPAAHE0gABxNUAAcTXAAHFFgABxRgAAcUbAAHFHQABxSAAAcUhAAHFIgABxSMAAcUkAAHFJgABxSkAAcUqAAHFKwABxS0AAcUuAAHFbQABxW8AAcVyAAHFdAABxXcAAcV4AAHFeQABxXoAAcV7AAHFfQABxYAAAcWBAAHFggABxYQAAcWFAAHFxAABxcYAAcXJAAHFywABxc4AAcXPAAHF0AABxdEAAcXSAAHF1AABxdcAAcXYAAHF2QABxdsAAcXcAAHGGwABxh0AAcYfAAHGIQABxiQAAcYlAAHGJgABxicAAcYoAAHGKgABxi0AAcYuAAHGLwABxjEAAcYyAAHGcQABxnMAAcZ1AAHGdwABxnoAAcZ7AAHGfAABxn0AAcZ+AAHGgAABxoMAAcaEAAHGhQABxocAAcaIAAHGxwABxskAAcbLAAHGzQABxtAAAcbRAAHG0gABxtMAAcbUAAHG1gABxtkAAcbaAAHG2wABxt0AAcbeAAHHHQABxx8AAcciAAHHJAABxycAAccoAAHHKQABxyoAAccrAAHHLQABxzAAAccxAAHHMgABxzQAAcc1AAHHgAABx6MAAcfDAAHH4wABx+UAAcfnAAHH6QABx+sAAcfuAAHH7wABx/AAAcfzAAHH9AABx/YAAcf3AAHH+QABx/wAAcf9AAHH/gAByAEAAcgCAAHIBwAByBQAAcgZAAHIGwAByB0AAcgiAAHIJQAByCgAAcgqAAHITwAByHMAAciaAAHIvgAByMEAAcjDAAHIxQAByMcAAcjJAAHIywAByMwAAcjPAAHI3AAByO0AAcjvAAHI8QAByPMAAcj1AAHI9wAByPkAAcj7AAHI/QAByQ4AAckRAAHJFAAByRcAAckaAAHJHQABySAAAckjAAHJJgABySgAAclnAAHJaQAByWsAAcltAAHJcAAByXEAAclyAAHJcwAByXQAAcl2AAHJeAAByXkAAcl6AAHJfAAByX0AAcm8AAHJvgABycAAAcnCAAHJxQABycYAAcnHAAHJyAAByckAAcnLAAHJzQAByc4AAcnPAAHJ0QABydIAAcoRAAHKEwAByhYAAcoYAAHKGwAByhwAAcodAAHKHgAByh8AAcohAAHKIwAByiQAAcolAAHKJwAByigAAco1AAHKNgAByjcAAco5AAHKeAABynoAAcp8AAHKfgAByoEAAcqCAAHKgwAByoQAAcqFAAHKhwAByokAAcqKAAHKiwAByo0AAcqOAAHKzQABys8AAcrRAAHK0wABytYAAcrXAAHK2AABytkAAcraAAHK3AAByt4AAcrfAAHK4AAByuIAAcrjAAHLIgAByyQAAcsmAAHLKAAByysAAcssAAHLLQAByy4AAcsvAAHLMQAByzMAAcs0AAHLNQAByzcAAcs4AAHLdwABy3kAAct7AAHLfQABy4AAAcuBAAHLggABy4MAAcuEAAHLhgABy4gAAcuJAAHLigABy4wAAcuNAAHLzAABy84AAcvQAAHL0gABy9UAAcvWAAHL1wABy9gAAcvZAAHL2wABy90AAcveAAHL3wABy+EAAcviAAHMBwABzCsAAcxSAAHMdgABzHkAAcx7AAHMfQABzH8AAcyBAAHMgwABzIQAAcyHAAHMlAABzKMAAcylAAHMpwABzKkAAcyrAAHMrQABzK8AAcyxAAHMwAABzMMAAczGAAHMyQABzMwAAczPAAHM0gABzNUAAczXAAHNFgABzRgAAc0aAAHNHAABzR8AAc0gAAHNIQABzSIAAc0jAAHNJQABzScAAc0oAAHNKQABzSsAAc0sAAHNawABzW0AAc1vAAHNcQABzXQAAc11AAHNdgABzXcAAc14AAHNegABzXwAAc19AAHNfgABzYAAAc2BAAHNwAABzcIAAc3EAAHNxgABzckAAc3KAAHNywABzcwAAc3NAAHNzwABzdEAAc3SAAHN0wABzdUAAc3WAAHOFQABzhcAAc4aAAHOHAABzh8AAc4gAAHOIQABziIAAc4jAAHOJQABzicAAc4oAAHOKQABzisAAc4sAAHOawABzm0AAc5vAAHOcQABznQAAc51AAHOdgABzncAAc54AAHOegABznwAAc59AAHOfgABzoAAAc6BAAHOwAABzsIAAc7FAAHOxwABzsoAAc7LAAHOzAABzs0AAc7OAAHO0AABztIAAc7TAAHO1AABztYAAc7XAAHO8wABzzIAAc80AAHPNgABzzgAAc87AAHPPAABzz0AAc8+AAHPPwABz0EAAc9DAAHPRAABz0UAAc9HAAHPSAABz5MAAc+2AAHP1gABz/YAAc/4AAHP+gABz/wAAc/+AAHQAQAB0AIAAdADAAHQBgAB0AcAAdAJAAHQCgAB0AwAAdAPAAHQEAAB0BEAAdAUAAHQFQAB0BoAAdAnAAHQLAAB0C4AAdAwAAHQNQAB0DgAAdA7AAHQPQAB0GIAAdCGAAHQrQAB0NEAAdDUAAHQ1gAB0NgAAdDaAAHQ3AAB0N4AAdDfAAHQ4gAB0O8AAdEAAAHRAgAB0QQAAdEGAAHRCAAB0QoAAdEMAAHRDgAB0RAAAdEhAAHRJAAB0ScAAdEqAAHRLQAB0TAAAdEzAAHRNgAB0TkAAdE7AAHRegAB0XwAAdF+AAHRgAAB0YMAAdGEAAHRhQAB0YYAAdGHAAHRiQAB0YsAAdGMAAHRjQAB0Y8AAdGQAAHRzwAB0dEAAdHTAAHR1QAB0dgAAdHZAAHR2gAB0dsAAdHcAAHR3gAB0eAAAdHhAAHR4gAB0eQAAdHlAAHSJAAB0iYAAdIpAAHSKwAB0i4AAdIvAAHSMAAB0jEAAdIyAAHSNAAB0jYAAdI3AAHSOAAB0joAAdI7AAHSSAAB0kkAAdJKAAHSTAAB0osAAdKNAAHSjwAB0pEAAdKUAAHSlQAB0pYAAdKXAAHSmAAB0poAAdKcAAHSnQAB0p4AAdKgAAHSoQAB0uAAAdLiAAHS5AAB0uYAAdLpAAHS6gAB0usAAdLsAAHS7QAB0u8AAdLxAAHS8gAB0vMAAdL1AAHS9gAB0zUAAdM3AAHTOQAB0zsAAdM+AAHTPwAB00AAAdNBAAHTQgAB00QAAdNGAAHTRwAB00gAAdNKAAHTSwAB04oAAdOMAAHTjgAB05AAAdOTAAHTlAAB05UAAdOWAAHTlwAB05kAAdObAAHTnAAB050AAdOfAAHToAAB098AAdPhAAHT4wAB0+UAAdPoAAHT6QAB0+oAAdPrAAHT7AAB0+4AAdPwAAHT8QAB0/IAAdP0AAHT9QAB1BoAAdQ+AAHUZQAB1IkAAdSMAAHUjgAB1JAAAdSSAAHUlAAB1JYAAdSXAAHUmgAB1KcAAdS2AAHUuAAB1LoAAdS8AAHUvgAB1MAAAdTCAAHUxAAB1NMAAdTWAAHU2QAB1NwAAdTfAAHU4gAB1OUAAdToAAHU6gAB1SkAAdUrAAHVLQAB1S8AAdUyAAHVMwAB1TQAAdU1AAHVNgAB1TgAAdU6AAHVOwAB1TwAAdU+AAHVPwAB1X4AAdWAAAHVggAB1YQAAdWHAAHViAAB1YkAAdWKAAHViwAB1Y0AAdWPAAHVkAAB1ZEAAdWTAAHVlAAB1dMAAdXVAAHV1wAB1dkAAdXcAAHV3QAB1d4AAdXfAAHV4AAB1eIAAdXkAAHV5QAB1eYAAdXoAAHV6QAB1igAAdYqAAHWLAAB1i4AAdYxAAHWMgAB1jMAAdY0AAHWNQAB1jcAAdY5AAHWOgAB1jsAAdY9AAHWPgAB1n0AAdZ/AAHWgQAB1oMAAdaGAAHWhwAB1ogAAdaJAAHWigAB1owAAdaOAAHWjwAB1pAAAdaSAAHWkwAB1tIAAdbUAAHW1gAB1tgAAdbbAAHW3AAB1t0AAdbeAAHW3wAB1uEAAdbjAAHW5AAB1uUAAdbnAAHW6AAB1ycAAdcpAAHXKwAB1y0AAdcwAAHXMQAB1zIAAdczAAHXNAAB1zYAAdc4AAHXOQAB1zoAAdc8AAHXPQAB14gAAderAAHXywAB1+sAAdftAAHX7wAB1/EAAdfzAAHX9gAB1/cAAdf4AAHX+wAB1/wAAdf+AAHX/wAB2AEAAdgEAAHYBQAB2AYAAdgJAAHYCgAB2BMAAdggAAHYJQAB2CcAAdgpAAHYLgAB2DEAAdg0AAHYNgAB2FsAAdh/AAHYpgAB2MoAAdjNAAHYzwAB2NEAAdjTAAHY1QAB2NcAAdjYAAHY2wAB2OgAAdj5AAHY+wAB2P0AAdj/AAHZAQAB2QMAAdkFAAHZBwAB2QkAAdkaAAHZHQAB2SAAAdkjAAHZJgAB2SkAAdksAAHZLwAB2TIAAdk0AAHZcwAB2XUAAdl3AAHZeQAB2XwAAdl9AAHZfgAB2X8AAdmAAAHZggAB2YQAAdmFAAHZhgAB2YgAAdmJAAHZyAAB2coAAdnMAAHZzgAB2dEAAdnSAAHZ0wAB2dQAAdnVAAHZ1wAB2dkAAdnaAAHZ2wAB2d0AAdneAAHaHQAB2h8AAdoiAAHaJAAB2icAAdooAAHaKQAB2ioAAdorAAHaLQAB2i8AAdowAAHaMQAB2jMAAdo0AAHaQQAB2kIAAdpDAAHaRQAB2oQAAdqGAAHaiAAB2ooAAdqNAAHajgAB2o8AAdqQAAHakQAB2pMAAdqVAAHalgAB2pcAAdqZAAHamgAB2tkAAdrbAAHa3QAB2t8AAdriAAHa4wAB2uQAAdrlAAHa5gAB2ugAAdrqAAHa6wAB2uwAAdruAAHa7wAB2y4AAdswAAHbMgAB2zQAAds3AAHbOAAB2zkAAds6AAHbOwAB2z0AAds/AAHbQAAB20EAAdtDAAHbRAAB24MAAduFAAHbhwAB24kAAduMAAHbjQAB244AAduPAAHbkAAB25IAAduUAAHblQAB25YAAduYAAHbmQAB29gAAdvaAAHb3AAB294AAdvhAAHb4gAB2+MAAdvkAAHb5QAB2+cAAdvpAAHb6gAB2+sAAdvtAAHb7gAB3BMAAdw3AAHcXgAB3IIAAdyFAAHchwAB3IkAAdyLAAHcjQAB3I8AAdyQAAHckwAB3KAAAdyvAAHcsQAB3LMAAdy1AAHctwAB3LkAAdy7AAHcvQAB3MwAAdzPAAHc0gAB3NUAAdzYAAHc2wAB3N4AAdzhAAHc4wAB3SIAAd0kAAHdJgAB3SgAAd0rAAHdLAAB3S0AAd0uAAHdLwAB3TEAAd0zAAHdNAAB3TUAAd03AAHdOAAB3XcAAd15AAHdewAB3X0AAd2AAAHdgQAB3YIAAd2DAAHdhAAB3YYAAd2IAAHdiQAB3YoAAd2MAAHdjQAB3cwAAd3OAAHd0AAB3dIAAd3VAAHd1gAB3dcAAd3YAAHd2QAB3dsAAd3dAAHd3gAB3d8AAd3hAAHd4gAB3iEAAd4jAAHeJQAB3icAAd4qAAHeKwAB3iwAAd4tAAHeLgAB3jAAAd4yAAHeMwAB3jQAAd42AAHeNwAB3nYAAd54AAHeegAB3nwAAd5/AAHegAAB3oEAAd6CAAHegwAB3oUAAd6HAAHeiAAB3okAAd6LAAHejAAB3ssAAd7NAAHezwAB3tEAAd7UAAHe1QAB3tYAAd7XAAHe2AAB3toAAd7cAAHe3QAB3t4AAd7gAAHe4QAB3yAAAd8iAAHfJAAB3yYAAd8pAAHfKgAB3ysAAd8sAAHfLQAB3y8AAd8xAAHfMgAB3zMAAd81AAHfNgAB3z8AAd9AAAHfQgAB34EAAd+DAAHfhQAB34cAAd+KAAHfiwAB34wAAd+NAAHfjgAB35AAAd+TAAHflAAB35UAAd+XAAHfmAAB39cAAd/ZAAHf2wAB390AAd/gAAHf4QAB3+IAAd/jAAHf5AAB3+YAAd/pAAHf6gAB3+sAAd/tAAHf7gAB4C0AAeAvAAHgMgAB4DQAAeA3AAHgOAAB4DkAAeA6AAHgOwAB4D0AAeBAAAHgQQAB4EIAAeBEAAHgRQAB4JAAAeCzAAHg0wAB4PMAAeD1AAHg9wAB4PkAAeD7AAHg/QAB4P4AAeD/AAHhAgAB4QMAAeEFAAHhBgAB4QgAAeELAAHhDAAB4Q0AAeEQAAHhEQAB4RYAAeEjAAHhKAAB4SoAAeEsAAHhMQAB4TQAAeE3AAHhOQAB4V4AAeGCAAHhqQAB4c0AAeHQAAHh0gAB4dQAAeHWAAHh2AAB4doAAeHbAAHh3gAB4esAAeH8AAHh/gAB4gAAAeICAAHiBAAB4gYAAeIIAAHiCgAB4gwAAeIdAAHiIAAB4iMAAeImAAHiKQAB4iwAAeIvAAHiMgAB4jUAAeI3AAHidgAB4ngAAeJ6AAHifAAB4n8AAeKAAAHigQAB4oIAAeKDAAHihQAB4ocAAeKIAAHiiQAB4osAAeKMAAHiywAB4s0AAeLPAAHi0QAB4tQAAeLVAAHi1gAB4tcAAeLYAAHi2gAB4twAAeLdAAHi3gAB4uAAAeLhAAHjIAAB4yIAAeMlAAHjJwAB4yoAAeMrAAHjLAAB4y0AAeMuAAHjMAAB4zIAAeMzAAHjNAAB4zYAAeM3AAHjRAAB40UAAeNGAAHjSAAB44cAAeOJAAHjiwAB440AAeOQAAHjkQAB45IAAeOTAAHjlAAB45YAAeOYAAHjmQAB45oAAeOcAAHjnQAB49wAAePeAAHj4AAB4+IAAePlAAHj5gAB4+cAAePoAAHj6QAB4+sAAePtAAHj7gAB4+8AAePxAAHj8gAB5DEAAeQzAAHkNQAB5DcAAeQ6AAHkOwAB5DwAAeQ9AAHkPgAB5EAAAeRCAAHkQwAB5EQAAeRGAAHkRwAB5IYAAeSIAAHkigAB5IwAAeSPAAHkkAAB5JEAAeSSAAHkkwAB5JUAAeSXAAHkmAAB5JkAAeSbAAHknAAB5NsAAeTdAAHk3wAB5OEAAeTkAAHk5QAB5OYAAeTnAAHk6AAB5OoAAeTsAAHk7QAB5O4AAeTwAAHk8QAB5RYAAeU6AAHlYQAB5YUAAeWIAAHligAB5YwAAeWOAAHlkAAB5ZIAAeWTAAHllgAB5aMAAeWyAAHltAAB5bYAAeW4AAHlugAB5bwAAeW+AAHlwAAB5c8AAeXSAAHl1QAB5dgAAeXbAAHl3gAB5eEAAeXkAAHl5gAB5iUAAeYnAAHmKQAB5isAAeYuAAHmLwAB5jAAAeYxAAHmMgAB5jQAAeY2AAHmNwAB5jgAAeY6AAHmOwAB5noAAeZ8AAHmfgAB5oAAAeaDAAHmhAAB5oUAAeaGAAHmhwAB5okAAeaLAAHmjAAB5o0AAeaPAAHmkAAB5s8AAebRAAHm0wAB5tUAAebYAAHm2QAB5toAAebbAAHm3AAB5t4AAebgAAHm4QAB5uIAAebkAAHm5QAB5yQAAecmAAHnKAAB5yoAAectAAHnLgAB5y8AAecwAAHnMQAB5zMAAec1AAHnNgAB5zcAAec5AAHnOgAB53kAAed7AAHnfQAB538AAeeCAAHngwAB54QAAeeFAAHnhgAB54gAAeeKAAHniwAB54wAAeeOAAHnjwAB584AAefQAAHn0gAB59QAAefXAAHn2AAB59kAAefaAAHn2wAB590AAeffAAHn4AAB5+EAAefjAAHn5AAB6CMAAeglAAHoJwAB6CkAAegsAAHoLQAB6C4AAegvAAHoMAAB6DIAAeg0AAHoNQAB6DYAAeg4AAHoOQAB6IQAAeinAAHoxwAB6OcAAejpAAHo6wAB6O0AAejvAAHo8QAB6PIAAejzAAHo9gAB6PcAAej5AAHo+gAB6PwAAej/AAHpAAAB6QEAAekEAAHpBQAB6QoAAekXAAHpHAAB6R4AAekgAAHpJQAB6SgAAekrAAHpLQAB6VIAAel2AAHpnQAB6cEAAenEAAHpxgAB6cgAAenKAAHpzAAB6c4AAenPAAHp0gAB6d8AAenwAAHp8gAB6fQAAen2AAHp+AAB6foAAen8AAHp/gAB6gAAAeoRAAHqFAAB6hcAAeoaAAHqHQAB6iAAAeojAAHqJgAB6ikAAeorAAHqagAB6mwAAepuAAHqcAAB6nMAAep0AAHqdQAB6nYAAep3AAHqeQAB6nsAAep8AAHqfQAB6n8AAeqAAAHqvwAB6sEAAerDAAHqxQAB6sgAAerJAAHqygAB6ssAAerMAAHqzgAB6tAAAerRAAHq0gAB6tQAAerVAAHrFAAB6xYAAesZAAHrGwAB6x4AAesfAAHrIAAB6yEAAesiAAHrJAAB6yYAAesnAAHrKAAB6yoAAesrAAHrOAAB6zkAAes6AAHrPAAB63sAAet9AAHrfwAB64EAAeuEAAHrhQAB64YAAeuHAAHriAAB64oAAeuMAAHrjQAB644AAeuQAAHrkQAB69AAAevSAAHr1AAB69YAAevZAAHr2gAB69sAAevcAAHr3QAB698AAevhAAHr4gAB6+MAAevlAAHr5gAB7CUAAewnAAHsKQAB7CsAAewuAAHsLwAB7DAAAewxAAHsMgAB7DQAAew2AAHsNwAB7DgAAew6AAHsOwAB7HoAAex8AAHsfgAB7IAAAeyDAAHshAAB7IUAAeyGAAHshwAB7IkAAeyLAAHsjAAB7I0AAeyPAAHskAAB7M8AAezRAAHs0wAB7NUAAezYAAHs2QAB7NoAAezbAAHs3AAB7N4AAezgAAHs4QAB7OIAAezkAAHs5QAB7QoAAe0uAAHtVQAB7XkAAe18AAHtfgAB7YAAAe2CAAHthAAB7YYAAe2HAAHtigAB7ZcAAe2mAAHtqAAB7aoAAe2sAAHtrgAB7bAAAe2yAAHttAAB7cMAAe3GAAHtyQAB7cwAAe3PAAHt0gAB7dUAAe3YAAHt2gAB7hkAAe4bAAHuHQAB7h8AAe4iAAHuIwAB7iQAAe4lAAHuJgAB7igAAe4qAAHuKwAB7iwAAe4uAAHuLwAB7m4AAe5wAAHucgAB7nQAAe53AAHueAAB7nkAAe56AAHuewAB7n0AAe5/AAHugAAB7oEAAe6DAAHuhAAB7sMAAe7FAAHuxwAB7skAAe7MAAHuzQAB7s4AAe7PAAHu0AAB7tIAAe7UAAHu1QAB7tYAAe7YAAHu2QAB7xgAAe8aAAHvHQAB7x8AAe8iAAHvIwAB7yQAAe8lAAHvJgAB7ygAAe8qAAHvKwAB7ywAAe8uAAHvLwAB724AAe9wAAHvcgAB73QAAe93AAHveAAB73kAAe96AAHvewAB730AAe9/AAHvgAAB74EAAe+DAAHvhAAB78MAAe/FAAHvxwAB78kAAe/MAAHvzQAB784AAe/PAAHv0AAB79IAAe/UAAHv1QAB79YAAe/YAAHv2QAB8BgAAfAaAAHwHAAB8B4AAfAhAAHwIgAB8CMAAfAkAAHwJQAB8CcAAfApAAHwKgAB8CsAAfAtAAHwLgAB8HkAAfCcAAHwvAAB8NwAAfDeAAHw4AAB8OIAAfDkAAHw5gAB8OcAAfDoAAHw6wAB8OwAAfDuAAHw7wAB8PEAAfDzAAHw9AAB8PUAAfD4AAHw+QAB8P4AAfELAAHxEAAB8RIAAfEUAAHxGQAB8RwAAfEfAAHxIQAB8UYAAfFqAAHxkQAB8bUAAfG4AAHxugAB8bwAAfG+AAHxwAAB8cIAAfHDAAHxxgAB8dMAAfHkAAHx5gAB8egAAfHqAAHx7AAB8e4AAfHwAAHx8gAB8fQAAfIFAAHyCAAB8gsAAfIOAAHyEQAB8hQAAfIXAAHyGgAB8h0AAfIfAAHyXgAB8mAAAfJiAAHyZAAB8mcAAfJoAAHyaQAB8moAAfJrAAHybQAB8m8AAfJwAAHycQAB8nMAAfJ0AAHyswAB8rUAAfK3AAHyuQAB8rwAAfK9AAHyvgAB8r8AAfLAAAHywgAB8sQAAfLFAAHyxgAB8sgAAfLJAAHzCAAB8woAAfMNAAHzDwAB8xIAAfMTAAHzFAAB8xUAAfMWAAHzGAAB8xoAAfMbAAHzHAAB8x4AAfMfAAHzLAAB8y0AAfMuAAHzMAAB828AAfNxAAHzcwAB83UAAfN4AAHzeQAB83oAAfN7AAHzfAAB834AAfOAAAHzgQAB84IAAfOEAAHzhQAB88QAAfPGAAHzyAAB88oAAfPNAAHzzgAB888AAfPQAAHz0QAB89MAAfPVAAHz1gAB89cAAfPZAAHz2gAB9BkAAfQbAAH0HQAB9B8AAfQiAAH0IwAB9CQAAfQlAAH0JgAB9CgAAfQqAAH0KwAB9CwAAfQuAAH0LwAB9G4AAfRwAAH0cgAB9HQAAfR3AAH0eAAB9HkAAfR6AAH0ewAB9H0AAfR/AAH0gAAB9IEAAfSDAAH0hAAB9MMAAfTFAAH0xwAB9MkAAfTMAAH0zQAB9M4AAfTPAAH00AAB9NIAAfTUAAH01QAB9NYAAfTYAAH02QAB9P4AAfUiAAH1SQAB9W0AAfVwAAH1cgAB9XQAAfV2AAH1eAAB9XoAAfV7AAH1fgAB9YsAAfWaAAH1nAAB9Z4AAfWgAAH1ogAB9aQAAfWmAAH1qAAB9bcAAfW6AAH1vQAB9cAAAfXDAAH1xgAB9ckAAfXMAAH1zgAB9g0AAfYPAAH2EQAB9hMAAfYWAAH2FwAB9hgAAfYZAAH2GgAB9hwAAfYeAAH2HwAB9iAAAfYiAAH2IwAB9mIAAfZkAAH2ZgAB9mgAAfZrAAH2bAAB9m0AAfZuAAH2bwAB9nEAAfZzAAH2dAAB9nUAAfZ3AAH2eAAB9rcAAfa5AAH2uwAB9r0AAfbAAAH2wQAB9sIAAfbDAAH2xAAB9sYAAfbIAAH2yQAB9soAAfbMAAH2zQAB9wwAAfcOAAH3EAAB9xIAAfcVAAH3FgAB9xcAAfcYAAH3GQAB9xsAAfcdAAH3HgAB9x8AAfchAAH3IgAB92EAAfdjAAH3ZQAB92cAAfdqAAH3awAB92wAAfdtAAH3bgAB93AAAfdyAAH3cwAB93QAAfd2AAH3dwAB97YAAfe4AAH3ugAB97wAAfe/AAH3wAAB98EAAffCAAH3wwAB98UAAffHAAH3yAAB98kAAffLAAH3zAAB+AsAAfgNAAH4DwAB+BEAAfgUAAH4FQAB+BYAAfgXAAH4GAAB+BoAAfgcAAH4HQAB+B4AAfggAAH4IQAB+GwAAfiPAAH4rwAB+M8AAfjRAAH40wAB+NUAAfjXAAH42QAB+NoAAfjbAAH43gAB+N8AAfjhAAH44gAB+OUAAfjoAAH46QAB+OoAAfjtAAH47gAB+PcAAfkEAAH5CQAB+QsAAfkOAAH5EwAB+RYAAfkZAAH5GwAB+UAAAflkAAH5iwAB+a8AAfmyAAH5tAAB+bYAAfm4AAH5ugAB+bwAAfm9AAH5wAAB+c0AAfneAAH54AAB+eIAAfnkAAH55gAB+egAAfnqAAH57AAB+e4AAfn/AAH6AgAB+gUAAfoIAAH6CwAB+g4AAfoRAAH6FAAB+hcAAfoZAAH6WAAB+loAAfpcAAH6XgAB+mEAAfpiAAH6YwAB+mQAAfplAAH6ZwAB+mkAAfpqAAH6awAB+m0AAfpuAAH6rQAB+q8AAfqxAAH6swAB+rYAAfq3AAH6uAAB+rkAAfq6AAH6vAAB+r4AAfq/AAH6wAAB+sIAAfrDAAH7AgAB+wQAAfsHAAH7CQAB+wwAAfsNAAH7DgAB+w8AAfsQAAH7EgAB+xQAAfsVAAH7FgAB+xgAAfsZAAH7JgAB+ycAAfsoAAH7KgAB+2kAAftrAAH7bQAB+28AAftyAAH7cwAB+3QAAft1AAH7dgAB+3gAAft6AAH7ewAB+3wAAft+AAH7fwAB+74AAfvAAAH7wgAB+8QAAfvHAAH7yAAB+8kAAfvKAAH7ywAB+80AAfvPAAH70AAB+9EAAfvTAAH71AAB/BMAAfwVAAH8FwAB/BkAAfwcAAH8HQAB/B4AAfwfAAH8IAAB/CIAAfwkAAH8JQAB/CYAAfwoAAH8KQAB/GgAAfxqAAH8bAAB/G4AAfxxAAH8cgAB/HMAAfx0AAH8dQAB/HcAAfx5AAH8egAB/HsAAfx9AAH8fgAB/L0AAfy/AAH8wQAB/MMAAfzGAAH8xwAB/MgAAfzJAAH8ygAB/MwAAfzOAAH8zwAB/NAAAfzSAAH80wAB/PgAAf0cAAH9QwAB/WcAAf1qAAH9bQAB/W8AAf1xAAH9cwAB/XUAAf12AAH9eQAB/YYAAf2VAAH9mAAB/ZsAAf2eAAH9oQAB/aQAAf2nAAH9qgAB/bkAAf28AAH9vwAB/cIAAf3FAAH9yAAB/csAAf3OAAH90AAB/g8AAf4RAAH+FAAB/hYAAf4ZAAH+GgAB/hsAAf4cAAH+HQAB/h8AAf4iAAH+IwAB/iQAAf4mAAH+JwAB/mYAAf5oAAH+awAB/m0AAf5wAAH+cQAB/nIAAf5zAAH+dAAB/nYAAf55AAH+egAB/nsAAf59AAH+fgAB/r0AAf6/AAH+wgAB/sQAAf7HAAH+yAAB/skAAf7KAAH+ywAB/s0AAf7QAAH+0QAB/tIAAf7UAAH+1QAB/xQAAf8WAAH/GQAB/xsAAf8eAAH/HwAB/yAAAf8hAAH/IgAB/yQAAf8nAAH/KAAB/ykAAf8rAAH/LAAB/28AAf+TAAH/twAB/9oAAgABAAIAIQACAEgAAgBvAAIAjwACALMAAgDXAAIA2QACANwAAgDeAAIA4AACAOIAAgDlAAIA5wACAOkAAgDrAAIA7QACAO8AAgDxAAIA9AACAPcAAgD4AAIA/QACAQoAAgENAAIBDwACARIAAgEVAAIBFwACATwAAgFgAAIBhwACAasAAgGuAAIBsAACAbIAAgG0AAIBtgACAbgAAgG5AAIBvAACAckAAgHcAAIB3gACAeAAAgHiAAIB5AACAeYAAgHoAAIB6gACAewAAgHuAAICAQACAgQAAgIHAAICCgACAg0AAgIQAAICEwACAhYAAgIZAAICHAACAh4AAgJdAAICXwACAmIAAgJkAAICZwACAmgAAgJpAAICagACAmsAAgJtAAICbwACAnAAAgJxAAICcwACAnQAAgJ9AAICfgACAoAAAgK/AAICwQACAsMAAgLFAAICyAACAskAAgLKAAICywACAswAAgLOAAIC0AACAtEAAgLSAAIC1AACAtUAAgMUAAIDFgACAxkAAgMbAAIDHgACAx8AAgMgAAIDIQACAyIAAgMkAAIDJgACAycAAgMoAAIDKgACAysAAgM0AAIDNQACAzcAAgN2AAIDeAACA3oAAgN8AAIDfwACA4AAAgOBAAIDggACA4MAAgOFAAIDhwACA4gAAgOJAAIDiwACA4wAAgPLAAIDzQACA9AAAgPSAAID1QACA9YAAgPXAAID2AACA9kAAgPbAAID3QACA94AAgPfAAID4QACA+IAAgPrAAID7AACA+4AAgQtAAIELwACBDEAAgQzAAIENgACBDcAAgQ4AAIEOQACBDoAAgQ8AAIEPgACBD8AAgRAAAIEQgACBEMAAgSCAAIEhAACBIcAAgSJAAIEjAACBI0AAgSOAAIEjwACBJAAAgSSAAIElAACBJUAAgSWAAIEmAACBJkAAgSmAAIEpwACBKgAAgSqAAIE6QACBOsAAgTtAAIE7wACBPIAAgTzAAIE9AACBPUAAgT2AAIE+AACBPoAAgT7AAIE/AACBP4AAgT/AAIFPgACBUAAAgVCAAIFRAACBUcAAgVIAAIFSQACBUoAAgVLAAIFTQACBU8AAgVQAAIFUQACBVMAAgVUAAIFYQACBYYAAgWIAAIFiwACBY4AAgWQAAIFkwACBZYAAgWZAAIFnAACBZ8AAgWiAAIFpQACBagAAgWrAAIFrgACBbAAAgWzAAIFtgACBdsAAgXeAAIF4QACBeQAAgXnAAIF6gACBe0AAgXwAAIF8wACBfYAAgX5AAIF/AACBf8AAgYCAAIGBQACBggAAgYLAAIGDgACBhAAAgYeAAIGKAACBi4AAgY2AAIGQQACBkkAAgZSAAIGXAACBnAAAgaFAAIGjwACBtoAAgb9AAIHHQACBz0AAgc/AAIHQQACB0MAAgdFAAIHSAACB0kAAgdKAAIHTQACB04AAgdQAAIHUQACB1MAAgdVAAIHVgACB1cAAgdaAAIHWwACB2AAAgdtAAIHcgACB3QAAgd2AAIHewACB34AAgeBAAIHgwACB6gAAgfMAAIH8wACCBcAAggaAAIIHAACCB4AAgggAAIIIgACCCQAAgglAAIIKAACCDUAAghGAAIISAACCEoAAghMAAIITgACCFAAAghSAAIIVAACCFYAAghnAAIIagACCG0AAghwAAIIcwACCHYAAgh5AAIIfAACCH8AAgiBAAIIwAACCMIAAgjEAAIIxgACCMkAAgjKAAIIywACCMwAAgjNAAIIzwACCNEAAgjSAAII0wACCNUAAgjWAAIJFQACCRcAAgkZAAIJGwACCR4AAgkfAAIJIAACCSEAAgkiAAIJJAACCSYAAgknAAIJKAACCSoAAgkrAAIJagACCWwAAglvAAIJcQACCXQAAgl1AAIJdgACCXcAAgl4AAIJegACCXwAAgl9AAIJfgACCYAAAgmBAAIJjgACCY8AAgmQAAIJkgACCdEAAgnTAAIJ1QACCdcAAgnaAAIJ2wACCdwAAgndAAIJ3gACCeAAAgniAAIJ4wACCeQAAgnmAAIJ5wACCiYAAgooAAIKKgACCiwAAgovAAIKMAACCjEAAgoyAAIKMwACCjUAAgo3AAIKOAACCjkAAgo7AAIKPAACCnsAAgp9AAIKfwACCoEAAgqEAAIKhQACCoYAAgqHAAIKiAACCooAAgqMAAIKjQACCo4AAgqQAAIKkQACCtAAAgrSAAIK1AACCtYAAgrZAAIK2gACCtsAAgrcAAIK3QACCt8AAgrhAAIK4gACCuMAAgrlAAIK5gACCyUAAgsnAAILKQACCysAAgsuAAILLwACCzAAAgsxAAILMgACCzQAAgs2AAILNwACCzgAAgs6AAILOwACC2AAAguEAAILqwACC88AAgvSAAIL1AACC9YAAgvYAAIL2gACC9wAAgvdAAIL4AACC+0AAgv8AAIL/gACDAAAAgwCAAIMBAACDAYAAgwIAAIMCgACDBkAAgwcAAIMHwACDCIAAgwlAAIMKAACDCsAAgwuAAIMMAACDG8AAgxxAAIMcwACDHUAAgx4AAIMeQACDHoAAgx7AAIMfAACDH4AAgyAAAIMgQACDIIAAgyEAAIMhQACDMQAAgzGAAIMyAACDMoAAgzNAAIMzgACDM8AAgzQAAIM0QACDNMAAgzVAAIM1gACDNcAAgzZAAIM2gACDRkAAg0bAAINHQACDR8AAg0iAAINIwACDSQAAg0lAAINJgACDSgAAg0qAAINKwACDSwAAg0uAAINLwACDW4AAg1wAAINcgACDXQAAg13AAINeAACDXkAAg16AAINewACDX0AAg1/AAINgAACDYEAAg2DAAINhAACDcMAAg3FAAINxwACDckAAg3MAAINzQACDc4AAg3PAAIN0AACDdIAAg3UAAIN1QACDdYAAg3YAAIN2QACDhgAAg4aAAIOHAACDh4AAg4hAAIOIgACDiMAAg4kAAIOJQACDicAAg4pAAIOKgACDisAAg4tAAIOLgACDm0AAg5vAAIOcQACDnMAAg52AAIOdwACDngAAg55AAIOegACDnwAAg5+AAIOfwACDoAAAg6CAAIOgwACDs4AAg7xAAIPEQACDzEAAg8zAAIPNQACDzcAAg85AAIPPAACDz0AAg8+AAIPQQACD0IAAg9EAAIPRQACD0gAAg9LAAIPTAACD00AAg9QAAIPUQACD1YAAg9jAAIPaAACD2oAAg9tAAIPcgACD3UAAg94AAIPegACD58AAg/DAAIP6gACEA4AAhARAAIQEwACEBUAAhAXAAIQGQACEBsAAhAcAAIQHwACECwAAhA9AAIQPwACEEEAAhBDAAIQRQACEEcAAhBJAAIQSwACEE0AAhBeAAIQYQACEGQAAhBnAAIQagACEG0AAhBwAAIQcwACEHYAAhB4AAIQtwACELkAAhC7AAIQvQACEMAAAhDBAAIQwgACEMMAAhDEAAIQxgACEMgAAhDJAAIQygACEMwAAhDNAAIRDAACEQ4AAhEQAAIREgACERUAAhEWAAIRFwACERgAAhEZAAIRGwACER0AAhEeAAIRHwACESEAAhEiAAIRYQACEWMAAhFmAAIRaAACEWsAAhFsAAIRbQACEW4AAhFvAAIRcQACEXMAAhF0AAIRdQACEXcAAhF4AAIRhQACEYYAAhGHAAIRiQACEcgAAhHKAAIRzAACEc4AAhHRAAIR0gACEdMAAhHUAAIR1QACEdcAAhHZAAIR2gACEdsAAhHdAAIR3gACEh0AAhIfAAISIQACEiMAAhImAAISJwACEigAAhIpAAISKgACEiwAAhIuAAISLwACEjAAAhIyAAISMwACEnIAAhJ0AAISdgACEngAAhJ7AAISfAACEn0AAhJ+AAISfwACEoEAAhKDAAIShAACEoUAAhKHAAISiAACEscAAhLJAAISywACEs0AAhLQAAIS0QACEtIAAhLTAAIS1AACEtYAAhLYAAIS2QACEtoAAhLcAAIS3QACExwAAhMeAAITIAACEyIAAhMlAAITJgACEycAAhMoAAITKQACEysAAhMtAAITLgACEy8AAhMxAAITMgACE1cAAhN7AAITogACE8YAAhPJAAITzAACE84AAhPQAAIT0gACE9QAAhPVAAIT2AACE+UAAhP0AAIT9wACE/oAAhP9AAIUAAACFAMAAhQGAAIUCQACFBgAAhQbAAIUHgACFCEAAhQkAAIUJwACFCoAAhQtAAIULwACFG4AAhRwAAIUcwACFHUAAhR4AAIUeQACFHoAAhR7AAIUfAACFH4AAhSBAAIUggACFIMAAhSFAAIUhgACFMUAAhTHAAIUygACFMwAAhTPAAIU0AACFNEAAhTSAAIU0wACFNUAAhTYAAIU2QACFNoAAhTcAAIU3QACFRwAAhUeAAIVIQACFSMAAhUmAAIVJwACFSgAAhUpAAIVKgACFSwAAhUvAAIVMAACFTEAAhUzAAIVNAACFXMAAhV1AAIVdwACFXkAAhV8AAIVfQACFX4AAhV/AAIVgAACFYIAAhWFAAIVhgACFYcAAhWJAAIVigACFckAAhXLAAIVzQACFc8AAhXSAAIV0wACFdQAAhXVAAIV1gACFdgAAhXbAAIV3AACFd0AAhXfAAIV4AACFh8AAhYhAAIWIwACFiUAAhYoAAIWKQACFioAAhYrAAIWLAACFi4AAhYxAAIWMgACFjMAAhY1AAIWNgACFnUAAhZ3AAIWegACFnwAAhZ/AAIWgAACFoEAAhaCAAIWgwACFoUAAhaIAAIWiQACFooAAhaMAAIWjQACFtgAAhb7AAIXGwACFzsAAhc9AAIXPwACF0EAAhdDAAIXRgACF0cAAhdIAAIXSwACF0wAAhdOAAIXTwACF1IAAhdVAAIXVgACF1cAAhdaAAIXWwACF2AAAhdtAAIXcgACF3QAAhd3AAIXfAACF38AAheCAAIXhAACF6kAAhfNAAIX9AACGBgAAhgbAAIYHQACGB8AAhghAAIYIwACGCUAAhgmAAIYKQACGDYAAhhHAAIYSQACGEsAAhhNAAIYTwACGFEAAhhTAAIYVQACGFcAAhhoAAIYawACGG4AAhhxAAIYdAACGHcAAhh6AAIYfQACGIAAAhiCAAIYwQACGMMAAhjFAAIYxwACGMoAAhjLAAIYzAACGM0AAhjOAAIY0AACGNIAAhjTAAIY1AACGNYAAhjXAAIZFgACGRgAAhkaAAIZHAACGR8AAhkgAAIZIQACGSIAAhkjAAIZJQACGScAAhkoAAIZKQACGSsAAhksAAIZawACGW0AAhlwAAIZcgACGXUAAhl2AAIZdwACGXgAAhl5AAIZewACGX0AAhl+AAIZfwACGYEAAhmCAAIZjwACGZAAAhmRAAIZkwACGdIAAhnUAAIZ1gACGdgAAhnbAAIZ3AACGd0AAhneAAIZ3wACGeEAAhnjAAIZ5AACGeUAAhnnAAIZ6AACGicAAhopAAIaKwACGi0AAhowAAIaMQACGjIAAhozAAIaNAACGjYAAho4AAIaOQACGjoAAho8AAIaPQACGnwAAhp+AAIagAACGoIAAhqFAAIahgACGocAAhqIAAIaiQACGosAAhqNAAIajgACGo8AAhqRAAIakgACGtEAAhrTAAIa1QACGtcAAhraAAIa2wACGtwAAhrdAAIa3gACGuAAAhriAAIa4wACGuQAAhrmAAIa5wACGyYAAhsoAAIbKgACGywAAhsvAAIbMAACGzEAAhsyAAIbMwACGzUAAhs3AAIbOAACGzkAAhs7AAIbPAACG2EAAhuFAAIbrAACG9AAAhvTAAIb1gACG9gAAhvaAAIb3AACG94AAhvfAAIb4gACG+8AAhv+AAIcAQACHAQAAhwHAAIcCgACHA0AAhwQAAIcEwACHCIAAhwlAAIcKAACHCsAAhwuAAIcMQACHDQAAhw3AAIcOQACHHgAAhx6AAIcfQACHH8AAhyCAAIcgwACHIQAAhyFAAIchgACHIgAAhyLAAIcjAACHI0AAhyPAAIckAACHM8AAhzRAAIc1AACHNYAAhzZAAIc2gACHNsAAhzcAAIc3QACHN8AAhziAAIc4wACHOQAAhzmAAIc5wACHSYAAh0oAAIdKwACHS0AAh0wAAIdMQACHTIAAh0zAAIdNAACHTYAAh05AAIdOgACHTsAAh09AAIdPgACHX0AAh1/AAIdggACHYQAAh2HAAIdiAACHYkAAh2KAAIdiwACHY0AAh2QAAIdkQACHZIAAh2UAAIdlQACHdgAAh38AAIeIAACHkMAAh5qAAIeigACHrEAAh7YAAIe+AACHxwAAh9AAAIfQgACH0UAAh9HAAIfSQACH0sAAh9OAAIfUAACH1IAAh9UAAIfVgACH1gAAh9aAAIfXQACH2AAAh9hAAIfZgACH3MAAh92AAIfeAACH3sAAh9+AAIfgAACH6UAAh/JAAIf8AACIBQAAiAXAAIgGQACIBsAAiAdAAIgHwACICEAAiAiAAIgJQACIDIAAiBFAAIgRwACIEkAAiBLAAIgTQACIE8AAiBRAAIgUwACIFUAAiBXAAIgagACIG0AAiBwAAIgcwACIHYAAiB5AAIgfAACIH8AAiCCAAIghQACIIcAAiDGAAIgyAACIMsAAiDNAAIg0AACINEAAiDSAAIg0wACINQAAiDWAAIg2AACINkAAiDaAAIg3AACIN0AAiDmAAIg5wACIOkAAiEoAAIhKgACISwAAiEuAAIhMQACITIAAiEzAAIhNAACITUAAiE3AAIhOQACIToAAiE7AAIhPQACIT4AAiF9AAIhfwACIYIAAiGEAAIhhwACIYgAAiGJAAIhigACIYsAAiGNAAIhjwACIZAAAiGRAAIhkwACIZQAAiGdAAIhngACIaAAAiHfAAIh4QACIeMAAiHlAAIh6AACIekAAiHqAAIh6wACIewAAiHuAAIh8AACIfEAAiHyAAIh9AACIfUAAiI0AAIiNgACIjkAAiI7AAIiPgACIj8AAiJAAAIiQQACIkIAAiJEAAIiRgACIkcAAiJIAAIiSgACIksAAiJUAAIiVQACIlcAAiKWAAIimAACIpoAAiKcAAIinwACIqAAAiKhAAIiogACIqMAAiKlAAIipwACIqgAAiKpAAIiqwACIqwAAiLrAAIi7QACIvAAAiLyAAIi9QACIvYAAiL3AAIi+AACIvkAAiL7AAIi/QACIv4AAiL/AAIjAQACIwIAAiMPAAIjEAACIxEAAiMTAAIjUgACI1QAAiNWAAIjWAACI1sAAiNcAAIjXQACI14AAiNfAAIjYQACI2MAAiNkAAIjZQACI2cAAiNoAAIjpwACI6kAAiOsAAIjrgACI7EAAiOyAAIjswACI7QAAiO1AAIjtwACI7kAAiO6AAIjuwACI70AAiO+AAIj0AACI90AAiPmAAIj6AACI+sAAiPuAAIj8QACI/oAAiP9AAIkAAACJAMAAiQGAAIkCAACJA4AAiRZAAIkfAACJJwAAiS8AAIkvgACJMAAAiTCAAIkxAACJMcAAiTIAAIkyQACJMwAAiTNAAIkzwACJNAAAiTSAAIk1AACJNUAAiTWAAIk2QACJNoAAiTfAAIk7AACJPEAAiTzAAIk9QACJPoAAiT9AAIlAAACJQIAAiUnAAIlSwACJXIAAiWWAAIlmQACJZsAAiWdAAIlnwACJaEAAiWjAAIlpAACJacAAiW0AAIlxQACJccAAiXJAAIlywACJc0AAiXPAAIl0QACJdMAAiXVAAIl5gACJekAAiXsAAIl7wACJfIAAiX1AAIl+AACJfsAAiX+AAImAAACJj8AAiZBAAImQwACJkUAAiZIAAImSQACJkoAAiZLAAImTAACJk4AAiZQAAImUQACJlIAAiZUAAImVQACJpQAAiaWAAImmAACJpoAAiadAAImngACJp8AAiagAAImoQACJqMAAialAAImpgACJqcAAiapAAImqgACJukAAibrAAIm7gACJvAAAibzAAIm9AACJvUAAib2AAIm9wACJvkAAib7AAIm/AACJv0AAib/AAInAAACJw0AAicOAAInDwACJxEAAidQAAInUgACJ1QAAidWAAInWQACJ1oAAidbAAInXAACJ10AAidfAAInYQACJ2IAAidjAAInZQACJ2YAAielAAInpwACJ6kAAierAAInrgACJ68AAiewAAInsQACJ7IAAie0AAIntgACJ7cAAie4AAInugACJ7sAAif6AAIn/AACJ/4AAigAAAIoAwACKAQAAigFAAIoBgACKAcAAigJAAIoCwACKAwAAigNAAIoDwACKBAAAihPAAIoUQACKFMAAihVAAIoWAACKFkAAihaAAIoWwACKFwAAiheAAIoYAACKGEAAihiAAIoZAACKGUAAiikAAIopgACKKgAAiiqAAIorQACKK4AAiivAAIosAACKLEAAiizAAIotQACKLYAAii3AAIouQACKLoAAijfAAIpAwACKSoAAilOAAIpUQACKVMAAilVAAIpVwACKVkAAilbAAIpXAACKV8AAilsAAIpewACKX0AAil/AAIpgQACKYMAAimFAAIphwACKYkAAimYAAIpmwACKZ4AAimhAAIppAACKacAAimqAAIprQACKa8AAinuAAIp8AACKfIAAin0AAIp9wACKfgAAin5AAIp+gACKfsAAin9AAIp/wACKgAAAioBAAIqAwACKgQAAipDAAIqRQACKkcAAipJAAIqTAACKk0AAipOAAIqTwACKlAAAipSAAIqVAACKlUAAipWAAIqWAACKlkAAiqYAAIqmgACKpwAAiqeAAIqoQACKqIAAiqjAAIqpAACKqUAAiqnAAIqqQACKqoAAiqrAAIqrQACKq4AAirtAAIq7wACKvEAAirzAAIq9gACKvcAAir4AAIq+QACKvoAAir8AAIq/gACKv8AAisAAAIrAgACKwMAAitCAAIrRAACK0YAAitIAAIrSwACK0wAAitNAAIrTgACK08AAitRAAIrUwACK1QAAitVAAIrVwACK1gAAiuXAAIrmQACK5sAAiudAAIroAACK6EAAiuiAAIrowACK6QAAiumAAIrqAACK6kAAiuqAAIrrAACK60AAivsAAIr7gACK/AAAivyAAIr9QACK/YAAiv3AAIr+AACK/kAAiv7AAIr/QACK/4AAiv/AAIsAQACLAIAAixNAAIscAACLJAAAiywAAIssgACLLQAAiy2AAIsuAACLLsAAiy8AAIsvQACLMAAAizBAAIswwACLMQAAizGAAIsyQACLMoAAizLAAIszgACLM8AAizUAAIs4QACLOYAAizoAAIs6gACLO8AAizyAAIs9QACLPcAAi0cAAItQAACLWcAAi2LAAItjgACLZAAAi2SAAItlAACLZYAAi2YAAItmQACLZwAAi2pAAItugACLbwAAi2+AAItwAACLcIAAi3EAAItxgACLcgAAi3KAAIt2wACLd4AAi3hAAIt5AACLecAAi3qAAIt7QACLfA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AAjk4AAI5OwACOT0AAjk/AAI5QQACOUMAAjlFAAI5RgACOUkAAjlWAAI5ZQACOWcAAjlpAAI5awACOW0AAjlvAAI5cQACOXMAAjmCAAI5hQACOYgAAjmLAAI5jgACOZEAAjmUAAI5lwACOZkAAjnYAAI52gACOdwAAjneAAI54QACOeIAAjnjAAI55AACOeUAAjnnAAI56QACOeoAAjnrAAI57QACOe4AAjotAAI6LwACOjEAAjozAAI6NgACOjcAAjo4AAI6OQACOjoAAjo8AAI6PgACOj8AAjpAAAI6QgACOkMAAjqCAAI6hAACOoYAAjqIAAI6iwACOowAAjqNAAI6jgACOo8AAjqRAAI6kwACOpQAAjqVAAI6lwACOpgAAjrXAAI62QACOtsAAjrdAAI64AACOuEAAjriAAI64wACOuQAAjrmAAI66AACOukAAjrqAAI67AACOu0AAjssAAI7LgACOzAAAjsyAAI7NQACOzYAAjs3AAI7OAACOzkAAjs7AAI7PQACOz4AAjs/AAI7QQACO0IAAjuBAAI7gwACO4UAAjuHAAI7igACO4sAAjuMAAI7jQACO44AAjuQAAI7kgACO5MAAjuUAAI7lgACO5cAAjvWAAI72AACO9oAAjvcAAI73wACO+AAAjvhAAI74gACO+MAAjvlAAI75wACO+gAAjvpAAI76wACO+wAAjw3AAI8WgACPHoAAjyaAAI8nAACPJ4AAjygAAI8ogACPKUAAjymAAI8pwACPKoAAjyrAAI8rQACPK4AAjyxAAI8tAACPLUAAjy2AAI8uQACPLoAAjy/AAI8zAACPNEAAjzTAAI81gACPNsAAjzeAAI84QACPOMAAj0IAAI9LAACPVMAAj13AAI9egACPXwAAj1+AAI9gAACPYIAAj2EAAI9hQACPYgAAj2VAAI9pgACPagAAj2qAAI9rAACPa4AAj2wAAI9sgACPbQAAj22AAI9xwACPcoAAj3NAAI90AACPdMAAj3WAAI92QACPdwAAj3fAAI94QACPiAAAj4iAAI+JAACPiYAAj4pAAI+KgACPisAAj4sAAI+LQACPi8AAj4xAAI+MgACPjMAAj41AAI+NgACPnUAAj53AAI+eQACPnsAAj5+AAI+fwACPoAAAj6BAAI+ggACPoQAAj6GAAI+hwACPogAAj6KAAI+iwACPsoAAj7MAAI+zwACPtEAAj7UAAI+1QACPtYAAj7XAAI+2AACPtoAAj7cAAI+3QACPt4AAj7gAAI+4QACPu4AAj7vAAI+8AACPvIAAj8xAAI/MwACPzUAAj83AAI/OgACPzsAAj88AAI/PQACPz4AAj9AAAI/QgACP0MAAj9EAAI/RgACP0cAAj+GAAI/iAACP4oAAj+MAAI/jwACP5AAAj+RAAI/kgACP5MAAj+VAAI/lwACP5gAAj+ZAAI/mwACP5wAAj/bAAI/3QACP98AAj/hAAI/5AACP+UAAj/mAAI/5wACP+gAAj/qAAI/7AACP+0AAj/uAAI/8AACP/EAAkAwAAJAMgACQDQAAkA2AAJAOQACQDoAAkA7AAJAPAACQD0AAkA/AAJAQQACQEIAAkBDAAJARQACQEYAAkCFAAJAhwACQIkAAkCLAAJAjgACQI8AAkCQAAJAkQACQJIAAkCUAAJAlgACQJcAAkCYAAJAmgACQJsAAkDAAAJA5AACQQsAAkEvAAJBMgACQTUAAkE3AAJBOQACQTsAAkE9AAJBPgACQUEAAkFOAAJBXQACQWAAAkFjAAJBZgACQWkAAkFsAAJBbwACQXIAAkGBAAJBhAACQYcAAkGKAAJBjQACQZAAAkGTAAJBlgACQZgAAkHXAAJB2QACQdwAAkHeAAJB4QACQeIAAkHjAAJB5AACQeUAAkHnAAJB6gACQesAAkHsAAJB7gACQe8AAkIuAAJCMAACQjMAAkI1AAJCOAACQjkAAkI6AAJCOwACQjwAAkI+AAJCQQACQkIAAkJDAAJCRQACQkYAAkKFAAJChwACQooAAkKMAAJCjwACQpAAAkKRAAJCkgACQpMAAkKVAAJCmAACQpkAAkKaAAJCnAACQp0AAkLcAAJC3gACQuEAAkLjAAJC5gACQucAAkLoAAJC6QACQuoAAkLsAAJC7wACQvAAAkLxAAJC8wACQvQAAkMzAAJDNQACQzcAAkM5AAJDPAACQz0AAkM+AAJDPwACQ0AAAkNCAAJDRQACQ0YAAkNHAAJDSQACQ0oAAkOJAAJDiwACQ40AAkOPAAJDkgACQ5MAAkOUAAJDlQACQ5YAAkOYAAJDmwACQ5wAAkOdAAJDnwACQ6AAAkPfAAJD4QACQ+QAAkPmAAJD6QACQ+oAAkPrAAJD7AACQ+0AAkPvAAJD8gACQ/MAAkP0AAJD9gACQ/cAAkQAAAJEAQACRAMAAkRCAAJERAACREYAAkRIAAJESwACREwAAkRNAAJETgACRE8AAkRRAAJEVAACRFUAAkRWAAJEWAACRFkAAkSYAAJEmgACRJwAAkSeAAJEoQACRKIAAkSjAAJEpAACRKUAAkSnAAJEqgACRKsAAkSsAAJErgACRK8AAkTuAAJE8AACRPMAAkT1AAJE+AACRPkAAkT6AAJE+wACRPwAAkT+AAJFAQACRQIAAkUDAAJFBQACRQYAAkVRAAJFdAACRZQAAkW0AAJFtgACRbgAAkW6AAJFvAACRb8AAkXAAAJFwQACRcQAAkXFAAJFxwACRcgAAkXKAAJFzAACRc0AAkXOAAJF0QACRdIAAkXXAAJF5AACRekAAkXrAAJF7QACRfIAAkX1AAJF+AACRfoAAkYfAAJGQwACRmoAAkaOAAJGkQACRpMAAkaVAAJGlwACRpkAAkabAAJGnAACRp8AAkasAAJGvQACRr8AAkbBAAJGwwACRsUAAkbHAAJGyQACRssAAkbNAAJG3gACRuEAAkbkAAJG5wACRuoAAkbtAAJG8AACRvMAAkb2AAJG+AACRzcAAkc5AAJHOwACRz0AAkdAAAJHQQACR0IAAkdDAAJHRAACR0YAAkdIAAJHSQACR0oAAkdMAAJHTQACR4wAAkeOAAJHkAACR5IAAkeVAAJHlgACR5cAAkeYAAJHmQACR5sAAkedAAJHngACR58AAkehAAJHogACR+EAAkfjAAJH5gACR+gAAkfrAAJH7AACR+0AAkfuAAJH7wACR/EAAkfzAAJH9AACR/UAAkf3AAJH+AACSAUAAkgGAAJIBwACSAkAAkhIAAJISgACSEwAAkhOAAJIUQACSFIAAkhTAAJIVAACSFUAAkhXAAJIWQACSFoAAkhbAAJIXQACSF4AAkidAAJInwACSKEAAkijAAJIpgACSKcAAkioAAJIqQACSKoAAkisAAJIrgACSK8AAkiwAAJIsgACSLMAAkjyAAJI9AACSPYAAkj4AAJI+wACSPwAAkj9AAJI/gACSP8AAkkBAAJJAwACSQQAAkkFAAJJBwACSQgAAklHAAJJSQACSUsAAklNAAJJUAACSVEAAklSAAJJUwACSVQAAklWAAJJWAACSVkAAklaAAJJXAACSV0AAkmcAAJJngACSaAAAkmiAAJJpQACSaYAAkmnAAJJqAACSakAAkmrAAJJrQACSa4AAkmvAAJJsQACSbIAAknXAAJJ+wACSiIAAkpGAAJKSQACSksAAkpNAAJKTwACSlEAAkpTAAJKVAACSlcAAkpkAAJKcwACSnUAAkp3AAJKeQACSnsAAkp9AAJKfwACSoEAAkqQAAJKkwACSpYAAkqZAAJKnAACSp8AAkqiAAJKpQACSqcAAkrmAAJK6AACSuoAAkrsAAJK7wACSvAAAkrxAAJK8gACSvMAAkr1AAJK9wACSvgAAkr5AAJK+wACSvwAAks7AAJLPQACSz8AAktBAAJLRAACS0UAAktGAAJLRwACS0gAAktKAAJLTAACS00AAktOAAJLUAACS1EAAkuQAAJLkgACS5QAAkuWAAJLmQACS5oAAkubAAJLnAACS50AAkufAAJLoQACS6IAAkujAAJLpQACS6YAAkvlAAJL5wACS+kAAkvrAAJL7gACS+8AAkvwAAJL8QACS/IAAkv0AAJL9gACS/cAAkv4AAJL+gACS/sAAkw6AAJMPAACTD4AAkxAAAJMQwACTEQAAkxFAAJMRgACTEcAAkxJAAJMSwACTEwAAkxNAAJMTwACTFAAAkyPAAJMkQACTJMAAkyVAAJMmAACTJkAAkyaAAJMmwACTJwAAkyeAAJMoAACTKEAAkyiAAJMpAACTKUAAkzkAAJM5gACTOgAAkzqAAJM7QACTO4AAkzvAAJM8AACTPEAAkzzAAJM9QACTPYAAkz3AAJM+QACTPoAAk1FAAJNaAACTYgAAk2oAAJNqgACTawAAk2uAAJNsAACTbMAAk20AAJNtQACTbgAAk25AAJNuwACTbwAAk2/AAJNwgACTcMAAk3EAAJNxwACTcgAAk3NAAJN2gACTd8AAk3hAAJN5AACTekAAk3sAAJN7wACTfEAAk4WAAJOOgACTmEAAk6FAAJOiAACTooAAk6MAAJOjgACTpAAAk6SAAJOkwACTpYAAk6jAAJOtAACTrYAAk64AAJOugACTrwAAk6+AAJOwAACTsIAAk7EAAJO1QACTtgAAk7bAAJO3gACTuEAAk7kAAJO5wACTuoAAk7tAAJO7wACTy4AAk8wAAJPMgACTzQAAk83AAJPOAACTzkAAk86AAJPOwACTz0AAk8/AAJPQAACT0EAAk9DAAJPRAACT4MAAk+FAAJPhwACT4kAAk+MAAJPjQACT44AAk+PAAJPkAACT5IAAk+UAAJPlQACT5YAAk+YAAJPmQACT9gAAk/aAAJP3QACT98AAk/iAAJP4wACT+QAAk/lAAJP5gACT+gAAk/qAAJP6wACT+wAAk/uAAJP7wACT/wAAk/9AAJP/gACUAAAAlA/AAJQQQACUEMAAlBFAAJQSAACUEkAAlBKAAJQSwACUEwAAlBOAAJQUAACUFEAAlBSAAJQVAACUFUAAlCUAAJQlgACUJgAAlCaAAJQnQACUJ4AAlCfAAJQoAACUKEAAlCjAAJQpQACUKYAAlCnAAJQqQACUKoAAlDpAAJQ6wACUO0AAlDvAAJQ8gACUPMAAlD0AAJQ9QACUPYAAlD4AAJQ+gACUPsAAlD8AAJQ/gACUP8AAlE+AAJRQAACUUIAAlFEAAJRRwACUUgAAlFJAAJRSgACUUsAAlFNAAJRTwACUVAAAlFRAAJRUwACUVQAAlGTAAJRlQACUZcAAlGZAAJRnAACUZ0AAlGeAAJRnwACUaAAAlGiAAJRpAACUaUAAlGmAAJRqAACUakAAlHOAAJR8gACUhkAAlI9AAJSQAACUkMAAlJFAAJSRwACUkkAAlJLAAJSTAACUk8AAlJcAAJSawACUm4AAlJxAAJSdAACUncAAlJ6AAJSfQACUoAAAlKPAAJSkgACUpUAAlKYAAJSmwACUp4AAlKhAAJSpAACUqYAAlLlAAJS5wACUuoAAlLsAAJS7wACUvAAAlLxAAJS8gACUvMAAlL1AAJS+AACUvkAAlL6AAJS/AACUv0AAlM8AAJTPgACU0EAAlNDAAJTRgACU0cAAlNIAAJTSQACU0oAAlNMAAJTTwACU1AAAlNRAAJTUwACU1QAAlOTAAJTlQACU5gAAlOaAAJTnQACU54AAlOfAAJToAACU6EAAlOjAAJTpgACU6cAAlOoAAJTqgACU6sAAlPqAAJT7AACU+8AAlPxAAJT9AACU/UAAlP2AAJT9wACU/gAAlP6AAJT/QACU/4AAlP/AAJUAQACVAIAAlRFAAJUaQACVI0AAlSwAAJU1wACVPcAAlUeAAJVRQACVWUAAlWJAAJVrQACVa8AAlWyAAJVtAACVbYAAlW4AAJVuwACVb0AAlW/AAJVwQACVcMAAlXFAAJVxwACVcoAAlXNAAJVzgACVdMAAlXgAAJV4wACVeUAAlXoAAJV6wACVe0AAlYSAAJWNgACVl0AAlaBAAJWhAACVoYAAlaIAAJWigACVowAAlaOAAJWjwACVpIAAlafAAJWsgACVrQAAla2AAJWuAACVroAAla8AAJWvgACVsAAAlbCAAJWxAACVtcAAlbaAAJW3QACVuAAAlbjAAJW5gACVukAAlbsAAJW7wACVvIAAlb0AAJXMwACVzUAAlc4AAJXOgACVz0AAlc+AAJXPwACV0AAAldBAAJXQwACV0UAAldGAAJXRwACV0kAAldKAAJXUwACV1QAAldWAAJXlQACV5cAAleZAAJXmwACV54AAlefAAJXoAACV6EAAleiAAJXpAACV6YAAlenAAJXqAACV6oAAlerAAJX6gACV+wAAlfvAAJX8QACV/QAAlf1AAJX9gACV/cAAlf4AAJX+gACV/wAAlf9AAJX/gACWAAAAlgBAAJYCgACWAsAAlgNAAJYTAACWE4AAlhQAAJYUgACWFUAAlhWAAJYVwACWFgAAlhZAAJYWwACWF0AAlheAAJYXwACWGEAAlhiAAJYoQACWKMAAlimAAJYqAACWKsAAlisAAJYrQACWK4AAlivAAJYsQACWLMAAli0AAJYtQACWLcAAli4AAJYwQACWMIAAljEAAJZAwACWQUAAlkHAAJZCQACWQwAAlkNAAJZDgACWQ8AAlkQAAJZEgACWRQAAlkVAAJZFgACWRgAAlkZAAJZWAACWVoAAlldAAJZXwACWWIAAlljAAJZZAACWWUAAllmAAJZaAACWWoAAllrAAJZbAACWW4AAllvAAJZfAACWX0AAll+AAJZgAACWb8AAlnBAAJZwwACWcUAAlnIAAJZyQACWcoAAlnLAAJZzAACWc4AAlnQAAJZ0QACWdIAAlnUAAJZ1QACWhQAAloWAAJaGQACWhsAAloeAAJaHwACWiAAAlohAAJaIgACWiQAAlomAAJaJwACWigAAloqAAJaKwACWjcAAlpEAAJaUQACWlQAAlpXAAJaWgACWl0AAlpgAAJaYwACWnAAAlpzAAJadgACWnkAAlp8AAJafwACWoIAAlqEAAJajwACWpUAAlqnAAJaugACWwUAAlsoAAJbSAACW2gAAltqAAJbbAACW24AAltwAAJbcwACW3QAAlt1AAJbeAACW3kAAlt7AAJbfAACW34AAluBAAJbggACW4MAAluGAAJbhwACW4wAAluZAAJbngACW6AAAluiAAJbpwACW6oAAlutAAJbrwACW9QAAlv4AAJcHwACXEMAAlxGAAJcSAACXEoAAlxMAAJcTgACXFAAAlxRAAJcVAACXGEAAlxyAAJcdAACXHYAAlx4AAJcegACXHwAAlx+AAJcgAACXIIAAlyTAAJclgACXJkAAlycAAJcnwACXKIAAlylAAJcqAACXKsAAlytAAJc7AACXO4AAlzwAAJc8gACXPUAAlz2AAJc9wACXPgAAlz5AAJc+wACXP0AAlz+AAJc/wACXQEAAl0CAAJdQQACXUMAAl1FAAJdRwACXUoAAl1LAAJdTAACXU0AAl1OAAJdUAACXVIAAl1TAAJdVAACXVYAAl1XAAJdlgACXZgAAl2bAAJdnQACXaAAAl2hAAJdogACXaMAAl2kAAJdpgACXagAAl2pAAJdqgACXawAAl2tAAJdugACXbsAAl28AAJdvgACXf0AAl3/AAJeAQACXgMAAl4GAAJeBwACXggAAl4JAAJeCgACXgwAAl4OAAJeDwACXhAAAl4SAAJeEwACXlIAAl5UAAJeVgACXlgAAl5bAAJeXAACXl0AAl5eAAJeXwACXmEAAl5jAAJeZAACXmUAAl5nAAJeaAACXqcAAl6pAAJeqwACXq0AAl6wAAJesQACXrIAAl6zAAJetAACXrYAAl64AAJeuQACXroAAl68AAJevQACXvwAAl7+AAJfAAACXwIAAl8FAAJfBgACXwcAAl8IAAJfCQACXwsAAl8NAAJfDgACXw8AAl8RAAJfEgACX1EAAl9TAAJfVQACX1cAAl9aAAJfWwACX1wAAl9dAAJfXgACX2AAAl9iAAJfYwACX2QAAl9mAAJfZwACX4wAAl+wAAJf1wACX/sAAl/+AAJgAAACYAIAAmAEAAJgBgACYAgAAmAJAAJgDAACYBkAAmAoAAJgKgACYCwAAmAuAAJgMAACYDIAAmA0AAJgNgACYEUAAmBIAAJgSwACYE4AAmBRAAJgVAACYFcAAmBaAAJgXAACYJsAAmCdAAJgnwACYKEAAmCkAAJgpQACYKYAAmCnAAJgqAACYKoAAmCsAAJgrQACYK4AAmCwAAJgsQACYPAAAmDyAAJg9AACYPYAAmD5AAJg+gACYPsAAmD8AAJg/QACYP8AAmEBAAJhAgACYQMAAmEFAAJhBgACYUUAAmFHAAJhSQACYUsAAmFOAAJhTwACYVAAAmFRAAJhUgACYVQAAmFWAAJhVwACYVgAAmFaAAJhWwACYZoAAmGcAAJhngACYaAAAmGjAAJhpAACYaUAAmGmAAJhpwACYakAAmGrAAJhrAACYa0AAmGvAAJhsAACYe8AAmHxAAJh8wACYfUAAmH4AAJh+QACYfoAAmH7AAJh/AACYf4AAmIAAAJiAQACYgIAAmIEAAJiBQACYkQAAmJGAAJiSAACYkoAAmJNAAJiTgACYk8AAmJQAAJiUQACYlMAAmJVAAJiVgACYlcAAmJZAAJiWgACYpkAAmKbAAJinQACYp8AAmKiAAJiowACYqQAAmKlAAJipgACYqgAAmKqAAJiqwACYqwAAmKuAAJirwACYvoAAmMdAAJjPQACY10AAmNfAAJjYQACY2MAAmNlAAJjaAACY2kAAmNqAAJjbQACY24AAmNwAAJjcQACY3QAAmN3AAJjeAACY3kAAmN8AAJjfQACY4YAAmOTAAJjmAACY5oAAmOdAAJjogACY6UAAmOoAAJjqgACY88AAmPzAAJkGgACZD4AAmRBAAJkQwACZEUAAmRHAAJkSQACZEsAAmRMAAJkTwACZFwAAmRtAAJkbwACZHEAAmRzAAJkdQACZHcAAmR5AAJkewACZH0AAmSOAAJkkQACZJQAAmSXAAJkmgACZJ0AAmSgAAJkowACZKYAAmSoAAJk5wACZOkAAmTrAAJk7QACZPAAAmTxAAJk8gACZPMAAmT0AAJk9gACZPgAAmT5AAJk+gACZPwAAmT9AAJlPAACZT4AAmVAAAJlQgACZUUAAmVGAAJlRwACZUgAAmVJAAJlSwACZU0AAmVOAAJlTwACZVEAAmVSAAJlkQACZZMAAmWWAAJlmAACZZsAAmWcAAJlnQACZZ4AAmWfAAJloQACZaMAAmWkAAJlpQACZacAAmWoAAJltQACZbYAAmW3AAJluQACZfgAAmX6AAJl/AACZf4AAmYBAAJmAgACZgMAAmYEAAJmBQACZgcAAmYJAAJmCgACZgsAAmYNAAJmDgACZk0AAmZPAAJmUQACZlMAAmZWAAJmVwACZlgAAmZZAAJmWgACZlwAAmZeAAJmXwACZmAAAmZiAAJmYwACZqIAAmakAAJmpgACZqgAAmarAAJmrAACZq0AAmauAAJmrwACZrEAAmazAAJmtAACZrUAAma3AAJmuAACZvcAAmb5AAJm+wACZv0AAmcAAAJnAQACZwIAAmcDAAJnBAACZwYAAmcIAAJnCQACZwoAAmcMAAJnDQACZ0wAAmdOAAJnUAACZ1IAAmdVAAJnVgACZ1cAAmdYAAJnWQACZ1sAAmddAAJnXgACZ18AAmdhAAJnYgACZ4cAAmerAAJn0gACZ/YAAmf5AAJn/AACZ/4AAmgAAAJoAgACaAQAAmgFAAJoCAACaBUAAmgkAAJoJwACaCoAAmgtAAJoMAACaDMAAmg2AAJoOQACaEgAAmhLAAJoTgACaFEAAmhUAAJoVwACaFoAAmhdAAJoXwACaJ4AAmigAAJoowACaKUAAmioAAJoqQACaKoAAmirAAJorAACaK4AAmixAAJosgACaLMAAmi1AAJotgACaPUAAmj3AAJo+gACaPwAAmj/AAJpAAACaQEAAmkCAAJpAwACaQUAAmkIAAJpCQACaQoAAmkMAAJpDQACaUwAAmlOAAJpUQACaVMAAmlWAAJpVwACaVgAAmlZAAJpWgACaVwAAmlfAAJpYAACaWEAAmljAAJpZAACaaMAAmmlAAJpqAACaaoAAmmtAAJprgACaa8AAmmwAAJpsQACabMAAmm2AAJptwACabgAAmm6AAJpuwACafoAAmn8AAJp/gACagAAAmoDAAJqBAACagUAAmoGAAJqBwACagkAAmoMAAJqDQACag4AAmoQAAJqEQACalAAAmpSAAJqVAACalYAAmpZAAJqWgACalsAAmpcAAJqXQACal8AAmpiAAJqYwACamQAAmpmAAJqZwACaqYAAmqoAAJqqwACaq0AAmqwAAJqsQACarIAAmqzAAJqtAACarYAAmq5AAJqugACarsAAmq9AAJqvgACawkAAmssAAJrTAACa2wAAmtuAAJrcAACa3IAAmt0AAJrdwACa3gAAmt5AAJrfAACa30AAmt/AAJrgAACa4IAAmuFAAJrhgACa4cAAmuKAAJriwACa5AAAmudAAJrogACa6QAAmumAAJrqwACa64AAmuxAAJrswACa9gAAmv8AAJsIwACbEcAAmxKAAJsTAACbE4AAmxQAAJsUgACbFQAAmxVAAJsWAACbGUAAmx2AAJseAACbHoAAmx8AAJsfgACbIAAAmyCAAJshAACbIYAAmyXAAJsmgACbJ0AAmygAAJsowACbKYAAmypAAJsrAACbK8AAmyxAAJs8AACbPIAAmz0AAJs9gACbPkAAmz6AAJs+wACbPwAAmz9AAJs/wACbQEAAm0CAAJtAwACbQUAAm0GAAJtRQACbUcAAm1JAAJtSwACbU4AAm1PAAJtUAACbVEAAm1SAAJtVAACbVYAAm1XAAJtWAACbVoAAm1bAAJtmgACbZwAAm2fAAJtoQACbaQAAm2lAAJtpgACbacAAm2oAAJtqgACbawAAm2tAAJtrgACbbAAAm2xAAJtvgACbb8AAm3AAAJtwgACbgEAAm4DAAJuBQACbgcAAm4KAAJuCwACbgwAAm4NAAJuDgACbhAAAm4SAAJuEwACbhQAAm4WAAJuFwACblYAAm5YAAJuWgACblwAAm5fAAJuYAACbmEAAm5iAAJuYwACbmUAAm5nAAJuaAACbmkAAm5rAAJubAACbqsAAm6tAAJurwACbrEAAm60AAJutQACbrYAAm63AAJuuAACbroAAm68AAJuvQACbr4AAm7AAAJuwQACbwAAAm8CAAJvBAACbwYAAm8JAAJvCgACbwsAAm8MAAJvDQACbw8AAm8RAAJvEgACbxMAAm8VAAJvFgACb1UAAm9XAAJvWQACb1sAAm9eAAJvXwACb2AAAm9hAAJvYgACb2QAAm9mAAJvZwACb2gAAm9qAAJvawACb5AAAm+0AAJv2wACb/8AAnACAAJwBAACcAYAAnAIAAJwCgACcAwAAnANAAJwEAACcB0AAnAsAAJwLgACcDAAAnAyAAJwNAACcDYAAnA4AAJwOgACcEkAAnBMAAJwTwACcFIAAnBVAAJwWAACcFsAAnBeAAJwYAACcJ8AAnChAAJwowACcKUAAnCoAAJwqQACcKoAAnCrAAJwrAACcK4AAnCwAAJwsQACcLIAAnC0AAJwtQACcPQAAnD2AAJw+AACcPoAAnD9AAJw/gACcP8AAnEAAAJxAQACcQMAAnEFAAJxBgACcQcAAnEJAAJxCgACcUkAAnFLAAJxTQACcU8AAnFSAAJxUwACcVQAAnFVAAJxVgACcVgAAnFaAAJxWwACcVwAAnFeAAJxXwACcZ4AAnGgAAJxogACcaQAAnGnAAJxqAACcakAAnGqAAJxqwACca0AAnGvAAJxsAACcbEAAnGzAAJxtAACcfMAAnH1AAJx9wACcfkAAnH8AAJx/QACcf4AAnH/AAJyAAACcgIAAnIEAAJyBQACcgYAAnIIAAJyCQACckgAAnJKAAJyTAACck4AAnJRAAJyUgACclMAAnJUAAJyVQACclcAAnJZAAJyWgACclsAAnJdAAJyXgACcp0AAnKfAAJyoQACcqMAAnKmAAJypwACcqgAAnKpAAJyqgACcqwAAnKuAAJyrwACcrAAAnKyAAJyswACcv4AAnMhAAJzQQACc2EAAnNjAAJzZQACc2cAAnNpAAJzbAACc20AAnNuAAJzcQACc3IAAnN0AAJzdQACc3cAAnN6AAJzewACc3wAAnN/AAJzgAACc4UAAnOSAAJzlwACc5kAAnObAAJzoAACc6MAAnOmAAJzqAACc80AAnPxAAJ0GAACdDwAAnQ/AAJ0QQACdEMAAnRFAAJ0RwACdEkAAnRKAAJ0TQACdFoAAnRrAAJ0bQACdG8AAnRxAAJ0cwACdHUAAnR3AAJ0eQACdHsAAnSMAAJ0jwACdJIAAnSVAAJ0mAACdJsAAnSeAAJ0oQACdKQAAnSmAAJ05QACdOcAAnTpAAJ06wACdO4AAnTvAAJ08AACdPEAAnTyAAJ09AACdPYAAnT3AAJ0+AACdPoAAnT7AAJ1OgACdTwAAnU+AAJ1QAACdUMAAnVEAAJ1RQACdUYAAnVHAAJ1SQACdUsAAnVMAAJ1TQACdU8AAnVQAAJ1jwACdZEAAnWUAAJ1lgACdZkAAnWaAAJ1mwACdZwAAnWdAAJ1nwACdaEAAnWiAAJ1owACdaUAAnWmAAJ1swACdbQAAnW1AAJ1twACdfYAAnX4AAJ1+gACdfwAAnX/AAJ2AAACdgEAAnYCAAJ2AwACdgUAAnYHAAJ2CAACdgkAAnYLAAJ2DAACdksAAnZNAAJ2TwACdlEAAnZUAAJ2VQACdlYAAnZXAAJ2WAACdloAAnZcAAJ2XQACdl4AAnZgAAJ2YQACdqAAAnaiAAJ2pAACdqYAAnapAAJ2qgACdqsAAnasAAJ2rQACdq8AAnaxAAJ2sgACdrMAAna1AAJ2tgACdvUAAnb3AAJ2+QACdvsAAnb+AAJ2/wACdwAAAncBAAJ3AgACdwQAAncGAAJ3BwACdwgAAncKAAJ3CwACd0oAAndMAAJ3TgACd1AAAndTAAJ3VAACd1UAAndWAAJ3VwACd1kAAndbAAJ3XAACd10AAndfAAJ3YAACd4UAAnepAAJ30AACd/QAAnf3AAJ3+QACd/sAAnf9AAJ3/wACeAEAAngCAAJ4BQACeBIAAnghAAJ4IwACeCUAAngnAAJ4KQACeCsAAngtAAJ4LwACeD4AAnhBAAJ4RAACeEcAAnhKAAJ4TQACeFAAAnhTAAJ4VQACeJQAAniWAAJ4mAACeJoAAnidAAJ4ngACeJ8AAnigAAJ4oQACeKMAAnilAAJ4pgACeKcAAnipAAJ4qgACeOkAAnjrAAJ47QACeO8AAnjyAAJ48wACePQAAnj1AAJ49gACePgAAnj6AAJ4+wACePwAAnj+AAJ4/wACeT4AAnlAAAJ5QgACeUQAAnlHAAJ5SAACeUkAAnlKAAJ5SwACeU0AAnlPAAJ5UAACeVEAAnlTAAJ5VAACeZMAAnmVAAJ5lwACeZkAAnmcAAJ5nQACeZ4AAnmfAAJ5oAACeaIAAnmkAAJ5pQACeaYAAnmoAAJ5qQACeegAAnnqAAJ57AACee4AAnnxAAJ58gACefMAAnn0AAJ59QACefcAAnn5AAJ5+gACefsAAnn9AAJ5/gACej0AAno/AAJ6QQACekMAAnpGAAJ6RwACekgAAnpJAAJ6SgACekwAAnpOAAJ6TwACelAAAnpSAAJ6UwACepIAAnqUAAJ6lgACepgAAnqbAAJ6nAACep0AAnqeAAJ6nwACeqEAAnqjAAJ6pAACeqUAAnqnAAJ6qAACevMAAnsWAAJ7NgACe1YAAntYAAJ7WgACe1wAAnteAAJ7YQACe2IAAntjAAJ7ZgACe2cAAntpAAJ7agACe2wAAntvAAJ7cAACe3EAAnt0AAJ7dQACe3oAAnuHAAJ7jAACe44AAnuQAAJ7lQACe5gAAnubAAJ7nQACe8IAAnvmAAJ8DQACfDEAAnw0AAJ8NgACfDgAAnw6AAJ8PAACfD4AAnw/AAJ8QgACfE8AAnxgAAJ8YgACfGQAAnxmAAJ8aAACfGoAAnxsAAJ8bgACfHAAAnyBAAJ8hAACfIcAAnyKAAJ8jQACfJAAAnyTAAJ8lgACfJkAAnybAAJ82gACfNwAAnzeAAJ84AACfOMAAnzkAAJ85QACfOYAAnznAAJ86QACfOsAAnzsAAJ87QACfO8AAnzwAAJ9LwACfTEAAn0zAAJ9NQACfTgAAn05AAJ9OgACfTsAAn08AAJ9PgACfUAAAn1BAAJ9QgACfUQAAn1FAAJ9hAACfYYAAn2JAAJ9iwACfY4AAn2PAAJ9kAACfZEAAn2SAAJ9lAACfZYAAn2XAAJ9mAACfZoAAn2bAAJ9qAACfakAAn2qAAJ9rAACfesAAn3tAAJ97wACffEAAn30AAJ99QACffYAAn33AAJ9+AACffoAAn38AAJ9/QACff4AAn4AAAJ+AQACfkAAAn5CAAJ+RAACfkYAAn5JAAJ+SgACfksAAn5MAAJ+TQACfk8AAn5RAAJ+UgACflMAAn5VAAJ+VgACfpUAAn6XAAJ+mQACfpsAAn6eAAJ+nwACfqAAAn6hAAJ+ogACfqQAAn6mAAJ+pwACfqgAAn6qAAJ+qwACfuoAAn7sAAJ+7gACfvAAAn7zAAJ+9AACfvUAAn72AAJ+9wACfvkAAn77AAJ+/AACfv0AAn7/AAJ/AAACfz8AAn9BAAJ/QwACf0UAAn9IAAJ/SQACf0oAAn9LAAJ/TAACf04AAn9QAAJ/UQACf1IAAn9UAAJ/VQACf3oAAn+eAAJ/xQACf+kAAn/sAAJ/7gACf/AAAn/yAAJ/9AACf/YAAn/3AAJ/+gACgAcAAoAWAAKAGAACgBoAAoAcAAKAHgACgCAAAoAiAAKAJAACgDMAAoA2AAKAOQACgDwAAoA/AAKAQgACgEUAAoBIAAKASgACgIkAAoCLAAKAjQACgI8AAoCSAAKAkwACgJQAAoCVAAKAlgACgJgAAoCaAAKAmwACgJwAAoCeAAKAnwACgN4AAoDgAAKA4gACgOQAAoDnAAKA6AACgOkAAoDqAAKA6wACgO0AAoDvAAKA8AACgPEAAoDzAAKA9AACgTMAAoE1AAKBNwACgTkAAoE8AAKBPQACgT4AAoE/AAKBQAACgUIAAoFEAAKBRQACgUYAAoFIAAKBSQACgYgAAoGKAAKBjAACgY4AAoGRAAKBkgACgZMAAoGUAAKBlQACgZcAAoGZAAKBmgACgZsAAoGdAAKBngACgd0AAoHfAAKB4QACgeMAAoHmAAKB5wACgegAAoHpAAKB6gACgewAAoHuAAKB7wACgfAAAoHyAAKB8wACgjIAAoI0AAKCNgACgjgAAoI7AAKCPAACgj0AAoI+AAKCPwACgkEAAoJDAAKCRAACgkUAAoJHAAKCSAACgocAAoKJAAKCiwACgo0AAoKQAAKCkQACgpIAAoKTAAKClAACgpYAAoKYAAKCmQACgpoAAoKcAAKCnQACgugAAoMLAAKDKwACg0sAAoNNAAKDTwACg1EAAoNTAAKDVgACg1cAAoNYAAKDWwACg1wAAoNeAAKDXwACg2EAAoNkAAKDZQACg2YAAoNpAAKDagACg28AAoN8AAKDgQACg4MAAoOFAAKDigACg40AAoOQAAKDkgACg7cAAoPbAAKEAgAChCYAAoQpAAKEKwAChC0AAoQvAAKEMQAChDMAAoQ0AAKENwAChEQAAoRVAAKEVwAChFkAAoRbAAKEXQAChF8AAoRhAAKEYwAChGUAAoR2AAKEeQAChHwAAoR/AAKEggAChIUAAoSIAAKEiwAChI4AAoSQAAKEzwAChNEAAoTTAAKE1QAChNgAAoTZAAKE2gAChNsAAoTcAAKE3gAChOAAAoThAAKE4gAChOQAAoTlAAKFJAAChSYAAoUoAAKFKgAChS0AAoUuAAKFLwAChTAAAoUxAAKFMwAChTUAAoU2AAKFNwAChTkAAoU6AAKFeQAChXsAAoV+AAKFgAAChYMAAoWEAAKFhQAChYYAAoWHAAKFiQAChYsAAoWMAAKFjQAChY8AAoWQAAKFnQAChZ4AAoWfAAKFoQACheAAAoXiAAKF5AACheYAAoXpAAKF6gAChesAAoXsAAKF7QAChe8AAoXxAAKF8gAChfMAAoX1AAKF9gAChjUAAoY3AAKGOQAChjsAAoY+AAKGPwAChkAAAoZBAAKGQgAChkQAAoZGAAKGRwAChkgAAoZKAAKGSwAChooAAoaMAAKGjgAChpAAAoaTAAKGlAAChpUAAoaWAAKGlwAChpkAAoabAAKGnAAChp0AAoafAAKGoAACht8AAobhAAKG4wAChuUAAoboAAKG6QAChuoAAobrAAKG7AAChu4AAobwAAKG8QAChvIAAob0AAKG9QAChzQAAoc2AAKHOAAChzoAAoc9AAKHPgAChz8AAodAAAKHQQACh0MAAodFAAKHRgACh0cAAodJAAKHSgACh28AAoeTAAKHugACh94AAofhAAKH4wACh+UAAofnAAKH6QACh+sAAofsAAKH7wACh/wAAogLAAKIDQACiA8AAogRAAKIEwACiBUAAogXAAKIGQACiCgAAogrAAKILgACiDEAAog0AAKINwACiDoAAog9AAKIPwACiH4AAoiAAAKIggACiIQAAoiHAAKIiAACiIkAAoiKAAKIiwACiI0AAoiPAAKIkAACiJEAAoiTAAKIlAACiNMAAojVAAKI1wACiNkAAojcAAKI3QACiN4AAojfAAKI4AACiOIAAojkAAKI5QACiOYAAojoAAKI6QACiSgAAokqAAKJLAACiS4AAokxAAKJMgACiTMAAok0AAKJNQACiTcAAok5AAKJOgACiTsAAok9AAKJPgACiX0AAol/AAKJgQACiYMAAomGAAKJhwACiYgAAomJAAKJigACiYwAAomOAAKJjwACiZAAAomSAAKJkwACidIAAonUAAKJ1gACidgAAonbAAKJ3AACid0AAoneAAKJ3wACieEAAonjAAKJ5AACieUAAonnAAKJ6AACiicAAoopAAKKKwACii0AAoowAAKKMQACijIAAoozAAKKNAACijYAAoo4AAKKOQACijoAAoo8AAKKPQACinwAAop+AAKKgAACioIAAoqFAAKKhgACiocAAoqIAAKKiQACiosAAoqNAAKKjgACio8AAoqRAAKKkgACipsAAoqcAAKKngACit0AAorfAAKK4QACiuMAAormAAKK5wACiugAAorpAAKK6gACiuwAAorvAAKK8AACivEAAorzAAKK9AACizMAAos1AAKLNwACizkAAos8AAKLPQACiz4AAos/AAKLQAACi0IAAotFAAKLRgACi0cAAotJAAKLSgACi4kAAouLAAKLjgACi5AAAouTAAKLlAACi5UAAouWAAKLlwACi5kAAoucAAKLnQACi54AAougAAKLoQACi+wAAowPAAKMLwACjE8AAoxRAAKMUwACjFUAAoxXAAKMWgACjFsAAoxcAAKMXwACjGAAAoxiAAKMYwACjGUAAoxoAAKMaQACjGoAAoxtAAKMbgACjHMAAoyAAAKMhQACjIcAAoyJAAKMjgACjJEAAoyUAAKMlgACjLsAAozfAAKNBgACjSoAAo0tAAKNLwACjTEAAo0zAAKNNQACjTcAAo04AAKNOwACjUgAAo1ZAAKNWwACjV0AAo1fAAKNYQACjWMAAo1lAAKNZwACjWkAAo16AAKNfQACjYAAAo2DAAKNhgACjYkAAo2MAAKNjwACjZIAAo2UAAKN0wACjdUAAo3XAAKN2QACjdwAAo3dAAKN3gACjd8AAo3gAAKN4gACjeQAAo3lAAKN5gACjegAAo3pAAKOKAACjioAAo4sAAKOLgACjjEAAo4yAAKOMwACjjQAAo41AAKONwACjjkAAo46AAKOOwACjj0AAo4+AAKOfQACjn8AAo6CAAKOhAACjocAAo6IAAKOiQACjooAAo6LAAKOjQACjo8AAo6QAAKOkQACjpMAAo6UAAKOoQACjqIAAo6jAAKOpQACjuQAAo7mAAKO6AACjuoAAo7tAAKO7gACju8AAo7wAAKO8QACjvMAAo71AAKO9gACjvcAAo75AAKO+gACjzkAAo87AAKPPQACjz8AAo9CAAKPQwACj0QAAo9FAAKPRgACj0gAAo9KAAKPSwACj0wAAo9OAAKPTwACj44AAo+QAAKPkgACj5QAAo+XAAKPmAACj5kAAo+aAAKPmwACj50AAo+fAAKPoAACj6EAAo+jAAKPpAACj+MAAo/lAAKP5wACj+kAAo/sAAKP7QACj+4AAo/vAAKP8AACj/IAAo/0AAKP9QACj/YAAo/4AAKP+QACkDgAApA6AAKQPAACkD4AApBBAAKQQgACkEMAApBEAAKQRQACkEcAApBJAAKQSgACkEsAApBNAAKQTgACkHMAApCXAAKQvgACkOIAApDlAAKQ5wACkOkAApDrAAKQ7QACkO8AApDwAAKQ8wACkQAAApEPAAKREQACkRMAApEVAAKRFwACkRkAApEbAAKRHQACkSwAApEvAAKRMgACkTUAApE4AAKROwACkT4AApFBAAKRQwACkYIAApGEAAKRhgACkYgAApGLAAKRjAACkY0AApGOAAKRjwACkZEAApGTAAKRlAACkZUAApGXAAKRmAACkdcAApHZAAKR2wACkd0AApHgAAKR4QACkeIAApHjAAKR5AACkeYAApHoAAKR6QACkeoAApHsAAKR7QACkiwAApIuAAKSMAACkjIAApI1AAKSNgACkjcAApI4AAKSOQACkjsAApI9AAKSPgACkj8AApJBAAKSQgACkoEAApKDAAKShQACkocAApKKAAKSiwACkowAApKNAAKSjgACkpAAApKSAAKSkwACkpQAApKWAAKSlwACktYAApLYAAKS2gACktwAApLfAAKS4AACkuEAApLiAAKS4wACkuUAApLnAAKS6AACkukAApLrAAKS7AACkysAApMtAAKTLwACkzEAApM0AAKTNQACkzYAApM3AAKTOAACkzoAApM8AAKTPQACkz4AApNAAAKTQQACk4AAApOCAAKThAACk4YAApOJAAKTigACk4sAApOMAAKTjQACk48AApORAAKTkgACk5MAApOVAAKTlgACk+EAApQEAAKUJAAClEQAApRGAAKUSAAClEoAApRMAAKUTwAClFAAApRRAAKUVAAClFUAApRXAAKUWAAClFoAApRdAAKUXgAClF8AApRiAAKUYwAClGgAApR1AAKUegAClHwAApR+AAKUgwAClIYAApSJAAKUiwAClLAAApTUAAKU+wAClR8AApUiAAKVJAAClSYAApUoAAKVKgAClSwAApUtAAKVMAAClT0AApVOAAKVUAAClVIAApVUAAKVVgAClVgAApVaAAKVXAAClV4AApVvAAKVcgAClXUAApV4AAKVewAClX4AApWBAAKVhAAClYcAApWJAAKVyAAClcoAApXMAAKVzgACldEAApXSAAKV0wACldQAApXVAAKV1wACldkAApXaAAKV2wACld0AApXeAAKWHQAClh8AApYhAAKWIwACliYAApYnAAKWKAAClikAApYqAAKWLAACli4AApYvAAKWMAACljIAApYzAAKWcgAClnQAApZ3AAKWeQAClnwAApZ9AAKWfgACln8AApaAAAKWggACloQAApaFAAKWhgAClogAApaJAAKWlgAClpcAApaYAAKWmgACltkAApbbAAKW3QAClt8AApbiAAKW4wACluQAApblAAKW5gAClugAApbqAAKW6wACluwAApbuAAKW7wACly4AApcwAAKXMgAClzQAApc3AAKXOAAClzkAApc6AAKXOwAClz0AApc/AAKXQAACl0EAApdDAAKXRAACl4MAApeFAAKXhwACl4kAApeMAAKXjQACl44AApePAAKXkAACl5IAApeUAAKXlQACl5YAApeYAAKXmQACl9gAApfaAAKX3AACl94AApfhAAKX4gACl+MAApfkAAKX5QACl+cAApfpAAKX6gACl+sAApftAAKX7gACmC0AApgvAAKYMQACmDMAApg2AAKYNwACmDgAApg5AAKYOgACmDwAApg+AAKYPwACmEAAAphCAAKYQwACmGgAApiMAAKYswACmNcAApjaAAKY3AACmN4AApjgAAKY4gACmOQAApjlAAKY6AACmPUAApkEAAKZBgACmQgAApkKAAKZDAACmQ4AApkQAAKZEgACmSEAApkkAAKZJwACmSoAApktAAKZMAACmTMAApk2AAKZOAACmXcAApl5AAKZewACmX0AApmAAAKZgQACmYIAApmDAAKZhAACmYYAApmIAAKZiQACmYoAApmMAAKZjQACmcwAApnOAAKZ0AACmdIAApnVAAKZ1gACmdcAApnYAAKZ2QACmdsAApndAAKZ3gACmd8AApnhAAKZ4gACmiEAApojAAKaJQACmicAApoqAAKaKwACmiwAApotAAKaLgACmjAAApoyAAKaMwACmjQAApo2AAKaNwACmnYAApp4AAKaegACmnwAApp/AAKagAACmoEAApqCAAKagwACmoUAApqHAAKaiAACmokAApqLAAKajAACmssAAprNAAKazwACmtEAAprUAAKa1QACmtYAAprXAAKa2AACmtoAAprcAAKa3QACmt4AAprgAAKa4QACmyAAApsiAAKbJAACmyYAApspAAKbKgACmysAApssAAKbLQACmy8AApsxAAKbMgACmzMAAps1AAKbNgACm3UAApt3AAKbeQACm3sAApt+AAKbfwACm4AAApuBAAKbggACm4QAApuGAAKbhwACm4gAApuKAAKbiwACm9YAApv5AAKcGQACnDkAApw7AAKcPQACnD8AApxBAAKcRAACnEUAApxGAAKcSQACnEoAApxMAAKcTQACnE8AApxSAAKcUwACnFQAApxXAAKcWAACnF0AApxqAAKcbwACnHEAApxzAAKceAACnHsAApx+AAKcgAACnKUAApzJAAKc8AACnRQAAp0XAAKdGQACnRsAAp0dAAKdHwACnSEAAp0iAAKdJQACnTIAAp1DAAKdRQACnUcAAp1JAAKdSwACnU0AAp1PAAKdUQACnVMAAp1kAAKdZwACnWoAAp1tAAKdcAACnXMAAp12AAKdeQACnXwAAp1+AAKdvQACnb8AAp3BAAKdwwACncYAAp3HAAKdyAACnckAAp3KAAKdzAACnc4AAp3PAAKd0AACndIAAp3TAAKeEgACnhQAAp4WAAKeGAACnhsAAp4cAAKeHQACnh4AAp4fAAKeIQACniMAAp4kAAKeJQACnicAAp4oAAKeZwACnmkAAp5sAAKebgACnnEAAp5yAAKecwACnnQAAp51AAKedwACnnkAAp56AAKeewACnn0AAp5+AAKeiwACnowAAp6NAAKejwACns4AAp7QAAKe0gACntQAAp7XAAKe2AACntkAAp7aAAKe2wACnt0AAp7fAAKe4AACnuEAAp7jAAKe5AACnyMAAp8lAAKfJwACnykAAp8sAAKfLQACny4AAp8vAAKfMAACnzIAAp80AAKfNQACnzYAAp84AAKfOQACn3gAAp96AAKffAACn34AAp+BAAKfggACn4MAAp+EAAKfhQACn4cAAp+JAAKfigACn4sAAp+NAAKfjgACn80AAp/PAAKf0QACn9MAAp/WAAKf1wACn9gAAp/ZAAKf2gACn9wAAp/eAAKf3wACn+AAAp/iAAKf4wACoCIAAqAkAAKgJgACoCgAAqArAAKgLAACoC0AAqAuAAKgLwACoDEAAqAzAAKgNAACoDUAAqA3AAKgOAACoF0AAqCBAAKgqAACoMwAAqDPAAKg0QACoNMAAqDVAAKg1wACoNkAAqDaAAKg3QACoOoAAqD5AAKg+wACoP0AAqD/AAKhAQACoQMAAqEFAAKhBwACoRYAAqEZAAKhHAACoR8AAqEiAAKhJQACoSgAAqErAAKhLQACoWwAAqFuAAKhcAACoXIAAqF1AAKhdgACoXcAAqF4AAKheQACoXsAAqF9AAKhfgACoX8AAqGBAAKhggACocEAAqHDAAKhxQACoccAAqHKAAKhywACocwAAqHNAAKhzgACodAAAqHSAAKh0wACodQAAqHWAAKh1wACohYAAqIYAAKiGgACohwAAqIfAAKiIAACoiEAAqIiAAKiIwACoiUAAqInAAKiKAACoikAAqIrAAKiLAAComsAAqJtAAKibwAConEAAqJ0AAKidQAConYAAqJ3AAKieAAConoAAqJ8AAKifQACon4AAqKAAAKigQACosAAAqLCAAKixAACosYAAqLJAAKiygACossAAqLMAAKizQACos8AAqLRAAKi0gACotMAAqLVAAKi1gACoxUAAqMXAAKjGQACoxsAAqMeAAKjHwACoyAAAqMhAAKjIgACoyQAAqMmAAKjJwACoygAAqMqAAKjKwACo2oAAqNsAAKjbgACo3AAAqNzAAKjdAACo3UAAqN2AAKjdwACo3kAAqN7AAKjfAACo30AAqN/AAKjgAACo8sAAqPuAAKkDgACpC4AAqQwAAKkMgACpDQAAqQ2AAKkOQACpDoAAqQ7AAKkPgACpD8AAqRBAAKkQgACpEQAAqRHAAKkSAACpEkAAqRMAAKkTQACpFIAAqRfAAKkZAACpGYAAqRoAAKkbQACpHAAAqRzAAKkdQACpJoAAqS+AAKk5QACpQkAAqUMAAKlDgACpRAAAqUSAAKlFAACpRYAAqUXAAKlGgACpScAAqU4AAKlOgACpTwAAqU+AAKlQAACpUIAAqVEAAKlRgACpUgAAqVZAAKlXAACpV8AAqViAAKlZQACpWgAAqVrAAKlbgACpXEAAqVzAAKlsgACpbQAAqW2AAKluAACpbsAAqW8AAKlvQACpb4AAqW/AAKlwQACpcMAAqXEAAKlxQACpccAAqXIAAKmBwACpgkAAqYLAAKmDQACphAAAqYRAAKmEgACphMAAqYUAAKmFgACphgAAqYZAAKmGgACphwAAqYdAAKmXAACpl4AAqZhAAKmYwACpmYAAqZnAAKmaAACpmkAAqZqAAKmbAACpm4AAqZvAAKmcAACpnIAAqZzAAKmgAACpoEAAqaCAAKmhAACpsMAAqbFAAKmxwACpskAAqbMAAKmzQACps4AAqbPAAKm0AACptIAAqbUAAKm1QACptYAAqbYAAKm2QACpxgAAqcaAAKnHAACpx4AAqchAAKnIgACpyMAAqckAAKnJQACpycAAqcpAAKnKgACpysAAqctAAKnLgACp20AAqdvAAKncQACp3MAAqd2AAKndwACp3gAAqd5AAKnegACp3wAAqd+AAKnfwACp4AAAqeCAAKngwACp8IAAqfEAAKnxgACp8gAAqfLAAKnzAACp80AAqfOAAKnzwACp9EAAqfTAAKn1AACp9UAAqfXAAKn2AACqBcAAqgZAAKoGwACqB0AAqggAAKoIQACqCIAAqgjAAKoJAACqCYAAqgoAAKoKQACqCoAAqgsAAKoLQACqFIAAqh2AAKonQACqMEAAqjEAAKoxgACqMgAAqjKAAKozAACqM4AAqjPAAKo0gACqN8AAqjuAAKo8AACqPIAAqj0AAKo9gACqPgAAqj6AAKo/AACqQsAAqkOAAKpEQACqRQAAqkXAAKpGgACqR0AAqkgAAKpIgACqWEAAqljAAKpZQACqWcAAqlqAAKpawACqWwAAqltAAKpbgACqXAAAqlyAAKpcwACqXQAAql2AAKpdwACqbYAAqm4AAKpugACqbwAAqm/AAKpwAACqcEAAqnCAAKpwwACqcUAAqnHAAKpyAACqckAAqnLAAKpzAACqgsAAqoNAAKqDwACqhEAAqoUAAKqFQACqhYAAqoXAAKqGAACqhoAAqocAAKqHQACqh4AAqogAAKqIQACqmAAAqpiAAKqZAACqmYAAqppAAKqagACqmsAAqpsAAKqbQACqm8AAqpxAAKqcgACqnMAAqp1AAKqdgACqrUAAqq3AAKquQACqrsAAqq+AAKqvwACqsAAAqrBAAKqwgACqsQAAqrGAAKqxwACqsgAAqrKAAKqywACqwoAAqsMAAKrDgACqxAAAqsTAAKrFAACqxUAAqsWAAKrFwACqxkAAqsbAAKrHAACqx0AAqsfAAKrIAACq18AAqthAAKrYwACq2UAAqtoAAKraQACq2oAAqtrAAKrbAACq24AAqtwAAKrcQACq3IAAqt0AAKrdQACq8AAAqvjAAKsAwACrCMAAqwlAAKsJwACrCkAAqwrAAKsLgACrC8AAqwwAAKsMwACrDQAAqw2AAKsNwACrDkAAqw8AAKsPQACrD4AAqxBAAKsQgACrEcAAqxUAAKsWQACrFsAAqxdAAKsYgACrGUAAqxoAAKsagACrI8AAqyzAAKs2gACrP4AAq0BAAKtAwACrQUAAq0HAAKtCQACrQsAAq0MAAKtDwACrRwAAq0tAAKtLwACrTEAAq0zAAKtNQACrTcAAq05AAKtOwACrT0AAq1OAAKtUQACrVQAAq1XAAKtWgACrV0AAq1gAAKtYwACrWYAAq1oAAKtpwACrakAAq2rAAKtrQACrbAAAq2xAAKtsgACrbMAAq20AAKttgACrbgAAq25AAKtugACrbwAAq29AAKt/AACrf4AAq4AAAKuAgACrgUAAq4GAAKuBwACrggAAq4JAAKuCwACrg0AAq4OAAKuDwACrhEAAq4SAAKuUQACrlMAAq5WAAKuWAACrlsAAq5cAAKuXQACrl4AAq5fAAKuYQACrmMAAq5kAAKuZQACrmcAAq5oAAKudQACrnYAAq53AAKueQACrrgAAq66AAKuvAACrr4AAq7BAAKuwgACrsMAAq7EAAKuxQACrscAAq7JAAKuygACrssAAq7NAAKuzgACrw0AAq8PAAKvEQACrxMAAq8WAAKvFwACrxgAAq8ZAAKvGgACrxwAAq8eAAKvHwACryAAAq8iAAKvIwACr2IAAq9kAAKvZgACr2gAAq9rAAKvbAACr20AAq9uAAKvbwACr3EAAq9zAAKvdAACr3UAAq93AAKveAACr7cAAq+5AAKvuwACr70AAq/AAAKvwQACr8IAAq/DAAKvxAACr8YAAq/IAAKvyQACr8oAAq/MAAKvzQACsAwAArAOAAKwEAACsBIAArAVAAKwFgACsBcAArAYAAKwGQACsBsAArAdAAKwHgACsB8AArAhAAKwIgACsEcAArBrAAKwkgACsLYAArC5AAKwuwACsL0AArC/AAKwwQACsMMAArDEAAKwxwACsNQAArDjAAKw5QACsOcAArDpAAKw6wACsO0AArDvAAKw8QACsQAAArEDAAKxBgACsQkAArEMAAKxDwACsRIAArEVAAKxFwACsVYAArFYAAKxWgACsVwAArFfAAKxYAACsWEAArFiAAKxYwACsWUAArFnAAKxaAACsWkAArFrAAKxbAACsasAArGtAAKxrwACsbEAArG0AAKxtQACsbYAArG3AAKxuAACsboAArG8AAKxvQACsb4AArHAAAKxwQACsgAAArICAAKyBAACsgYAArIJAAKyCgACsgsAArIMAAKyDQACsg8AArIRAAKyEgACshMAArIVAAKyFgACslUAArJXAAKyWQACslsAArJeAAKyXwACsmAAArJhAAKyYgACsmQAArJmAAKyZwACsmgAArJqAAKyawACsqoAArKsAAKyrgACsrAAArKzAAKytAACsrUAArK2AAKytwACsrkAArK7AAKyvAACsr0AArK/AAKywAACsv8AArMBAAKzAwACswUAArMIAAKzCQACswoAArMLAAKzDAACsw4AArMQAAKzEQACsxIAArMUAAKzFQACs1QAArNWAAKzWAACs1oAArNdAAKzXgACs18AArNgAAKzYQACs2MAArNlAAKzZgACs2cAArNpAAKzagACs7UAArPYAAKz+AACtBgAArQaAAK0HAACtB4AArQgAAK0IwACtCQAArQlAAK0KAACtCkAArQrAAK0LAACtC4AArQxAAK0MgACtDMAArQ2AAK0NwACtDwAArRJAAK0TgACtFAAArRSAAK0VwACtFoAArRdAAK0XwACtIQAArSoAAK0zwACtPMAArT2AAK0+AACtPoAArT8AAK0/gACtQAAArUBAAK1BAACtREAArUiAAK1JAACtSYAArUoAAK1KgACtSwAArUuAAK1MAACtTIAArVDAAK1RgACtUkAArVMAAK1TwACtVIAArVVAAK1WAACtVsAArVdAAK1nAACtZ4AArWgAAK1ogACtaUAArWmAAK1pwACtagAArWpAAK1qwACta0AArWuAAK1rwACtbEAArWyAAK18QACtfMAArX1AAK19wACtfoAArX7AAK1/AACtf0AArX+AAK2AAACtgIAArYDAAK2BAACtgYAArYHAAK2RgACtkgAArZLAAK2TQACtlAAArZRAAK2UgACtlMAArZUAAK2VgACtlgAArZZAAK2WgACtlwAArZdAAK2agACtmsAArZsAAK2bgACtq0AAravAAK2sQACtrMAAra2AAK2twACtrgAAra5AAK2ugACtrwAAra+AAK2vwACtsAAArbCAAK2wwACtwIAArcEAAK3BgACtwgAArcLAAK3DAACtw0AArcOAAK3DwACtxEAArcTAAK3FAACtxUAArcXAAK3GAACt1cAArdZAAK3WwACt10AArdgAAK3YQACt2IAArdjAAK3ZAACt2YAArdoAAK3aQACt2oAArdsAAK3bQACt6wAAreuAAK3sAACt7IAAre1AAK3tgACt7cAAre4AAK3uQACt7sAAre9AAK3vgACt78AArfBAAK3wgACuAEAArgDAAK4BQACuAcAArgKAAK4CwACuAwAArgNAAK4DgACuBAAArgSAAK4EwACuBQAArgWAAK4FwACuDwAArhgAAK4hwACuKsAAriuAAK4sAACuLIAAri0AAK4tgACuLgAAri5AAK4vAACuMkAArjYAAK42gACuNwAArjeAAK44AACuOIAArjkAAK45gACuPUAArj4AAK4+wACuP4AArkBAAK5BAACuQcAArkKAAK5DAACuUsAArlNAAK5TwACuVEAArlUAAK5VQACuVYAArlXAAK5WAACuVoAArlcAAK5XQACuV4AArlgAAK5YQACuaAAArmiAAK5pAACuaYAArmpAAK5qgACuasAArmsAAK5rQACua8AArmxAAK5sgACubMAArm1AAK5tgACufUAArn3AAK5+QACufsAArn+AAK5/wACugAAAroBAAK6AgACugQAAroGAAK6BwACuggAAroKAAK6CwACukoAArpMAAK6TwACulEAArpUAAK6VQACulYAArpXAAK6WAACuloAArpcAAK6XQACul4AArpgAAK6YQACuqAAArqiAAK6pAACuqYAArqpAAK6qgACuqsAArqsAAK6rQACuq8AArqxAAK6sgACurMAArq1AAK6tgACuvUAArr3AAK6+QACuvsAArr+AAK6/wACuwAAArsBAAK7AgACuwQAArsGAAK7BwACuwgAArsKAAK7CwACu0oAArtMAAK7TgACu1AAArtTAAK7VAACu1UAArtWAAK7VwACu1kAArtbAAK7XAACu10AArtfAAK7YAACu6sAArvOAAK77gACvA4AArwQAAK8EgACvBQAArwWAAK8GQACvBoAArwbAAK8HgACvB8AArwhAAK8IgACvCQAArwnAAK8KAACvCkAArwsAAK8LQACvDIAArw/AAK8RAACvEYAArxIAAK8TQACvFAAArxTAAK8VQACvHoAAryeAAK8xQACvOkAArzsAAK87gACvPAAArzyAAK89AACvPYAArz3AAK8+gACvQcAAr0YAAK9GgACvRwAAr0eAAK9IAACvSIAAr0kAAK9JgACvSgAAr05AAK9PAACvT8AAr1CAAK9RQACvUgAAr1LAAK9TgACvVEAAr1TAAK9kgACvZQAAr2WAAK9mAACvZsAAr2cAAK9nQACvZ4AAr2fAAK9oQACvaMAAr2kAAK9pQACvacAAr2oAAK95wACvekAAr3rAAK97QACvfAAAr3xAAK98gACvfMAAr30AAK99gACvfgAAr35AAK9+gACvfwAAr39AAK+PAACvj4AAr5BAAK+QwACvkYAAr5HAAK+SAACvkkAAr5KAAK+TAACvk4AAr5PAAK+UAACvlIAAr5TAAK+YAACvmEAAr5iAAK+ZAACvqMAAr6lAAK+pwACvqkAAr6sAAK+rQACvq4AAr6vAAK+sAACvrIAAr60AAK+tQACvrYAAr64AAK+uQACvvgAAr76AAK+/AACvv4AAr8BAAK/AgACvwMAAr8EAAK/BQACvwcAAr8JAAK/CgACvwsAAr8NAAK/DgACv00AAr9PAAK/UQACv1MAAr9WAAK/VwACv1gAAr9ZAAK/WgACv1wAAr9eAAK/XwACv2AAAr9iAAK/YwACv6IAAr+kAAK/pgACv6gAAr+rAAK/rAACv60AAr+uAAK/rwACv7EAAr+zAAK/tAACv7UAAr+3AAK/uAACv/cAAr/5AAK/+wACv/0AAsAAAALAAQACwAIAAsADAALABAACwAYAAsAIAALACQACwAoAAsAMAALADQACwDIAAsBWAALAfQACwKEAAsCkAALApgACwKgAAsCqAALArAACwK4AAsCvAALAsgACwL8AAsDOAALA0AACwNIAAsDUAALA1gACwNgAAsDaAALA3AACwOsAAsDuAALA8QACwPQAAsD3AALA+gACwP0AAsEAAALBAgACwUEAAsFDAALBRgACwUgAAsFLAALBTAACwU0AAsFOAALBTwACwVEAAsFTAALBVAACwVUAAsFXAALBWAACwZcAAsGZAALBmwACwZ0AAsGgAALBoQACwaIAAsGjAALBpAACwaYAAsGoAALBqQACwaoAAsGsAALBrQACwewAAsHuAALB8AACwfIAAsH1AALB9gACwfcAAsH4AALB+QACwfsAAsH9AALB/gACwf8AAsIBAALCAgACwkEAAsJDAALCRgACwkgAAsJLAALCTAACwk0AAsJOAALCTwACwlEAAsJTAALCVAACwlUAAsJXAALCWAACwpcAAsKZAALCmwACwp0AAsKgAALCoQACwqIAAsKjAALCpAACwqYAAsKoAALCqQACwqoAAsKsAALCrQACwuwAAsLuAALC8AACwvIAAsL1AALC9gACwvcAAsL4AALC+QACwvsAAsL9AALC/gACwv8AAsMBAALDAgACw0EAAsNDAALDRQACw0cAAsNKAALDSwACw0wAAsNNAALDTgACw1AAAsNSAALDUwACw1QAAsNWAALDVwACw6IAAsPFAALD5QACxAUAAsQHAALECQACxAsAAsQNAALEEAACxBEAAsQSAALEFQACxBYAAsQYAALEGQACxBsAAsQeAALEHwACxCAAAsQjAALEJAACxCkAAsQ2AALEOwACxD0AAsQ/AALERAACxEcAAsRKAALETAACxHEAAsSVAALEvAACxOAAAsTjAALE5QACxOcAAsTpAALE6wACxO0AAsTuAALE8QACxP4AAsUPAALFEQACxRMAAsUVAALFFwACxRkAAsUbAALFHQACxR8AAsUwAALFMwACxTYAAsU5AALFPAACxT8AAsVCAALFRQACxUgAAsVKAALFiQACxYsAAsWNAALFjwACxZIAAsWTAALFlAACxZUAAsWWAALFmAACxZoAAsWbAALFnAACxZ4AAsWfAALF3gACxeAAAsXiAALF5AACxecAAsXoAALF6QACxeoAAsXrAALF7QACxe8AAsXwAALF8QACxfMAAsX0AALGMwACxjUAAsY4AALGOgACxj0AAsY+AALGPwACxkAAAsZBAALGQwACxkUAAsZGAALGRwACxkkAAsZKAALGVwACxlgAAsZZAALGWwACxpoAAsacAALGngACxqAAAsajAALGpAACxqUAAsamAALGpwACxqkAAsarAALGrAACxq0AAsavAALGsAACxu8AAsbxAALG8wACxvUAAsb4AALG+QACxvoAAsb7AALG/AACxv4AAscAAALHAQACxwIAAscEAALHBQACx0QAAsdGAALHSAACx0oAAsdNAALHTgACx08AAsdQAALHUQACx1MAAsdVAALHVgACx1cAAsdZAALHWgACx5kAAsebAALHnQACx58AAseiAALHowACx6QAAselAALHpgACx6gAAseqAALHqwACx6wAAseuAALHrwACx+4AAsfwAALH8gACx/QAAsf3AALH+AACx/kAAsf6AALH+wACx/0AAsf/AALIAAACyAEAAsgDAALIBAACyCkAAshNAALIdAACyJgAAsibAALInQACyJ8AAsihAALIowACyKUAAsimAALIqQACyLYAAsjFAALIxwACyMkAAsjLAALIzQACyM8AAsjRAALI0wACyOIAAsjlAALI6AACyOsAAsjuAALI8QACyPQAAsj3AALI+QACyTgAAsk6AALJPAACyT4AAslBAALJQgACyUMAAslEAALJRQACyUcAAslJAALJSgACyUsAAslNAALJTgACyY0AAsmPAALJkQACyZMAAsmWAALJlwACyZgAAsmZAALJmgACyZwAAsmeAALJnwACyaAAAsmiAALJowACyeIAAsnkAALJ5gACyegAAsnrAALJ7AACye0AAsnuAALJ7wACyfEAAsnzAALJ9AACyfUAAsn3AALJ+AACyjcAAso5AALKPAACyj4AAspBAALKQgACykMAAspEAALKRQACykcAAspJAALKSgACyksAAspNAALKTgACyo0AAsqPAALKkQACypMAAsqWAALKlwACypgAAsqZAALKmgACypwAAsqeAALKnwACyqAAAsqiAALKowACyuIAAsrkAALK5wACyukAAsrsAALK7QACyu4AAsrvAALK8AACyvIAAsr0AALK9QACyvYAAsr4AALK+QACyyAAAstfAALLYQACy2MAAstlAALLaAACy2kAAstqAALLawACy2wAAstuAALLcAACy3EAAstyAALLdAACy3UAAsvAAALL4wACzAMAAswjAALMJQACzCcAAswpAALMKwACzC4AAswvAALMMAACzDMAAsw0AALMNgACzDcAAsw5AALMPAACzD0AAsw+AALMQQACzEIAAsxHAALMVAACzFkAAsxbAALMXQACzGIAAsxlAALMaAACzGoAAsyPAALMswACzNoAAsz+AALNAQACzQMAAs0FAALNBwACzQkAAs0LAALNDAACzQ8AAs0cAALNLQACzS8AAs0xAALNMwACzTUAAs03AALNOQACzTsAAs09AALNTgACzVEAAs1UAALNVwACzVoAAs1dAALNYAACzWMAAs1mAALNaAACzacAAs2pAALNqwACza0AAs2wAALNsQACzbIAAs2zAALNtAACzbYAAs24AALNuQACzboAAs28AALNvQACzfwAAs3+AALOAAACzgIAAs4FAALOBgACzgcAAs4IAALOCQACzgsAAs4NAALODgACzg8AAs4RAALOEgACzlEAAs5TAALOVgACzlgAAs5bAALOXAACzl0AAs5eAALOXwACzmEAAs5jAALOZAACzmUAAs5nAALOaAACznUAAs52AALOdwACznkAAs64AALOugACzrwAAs6+AALOwQACzsIAAs7DAALOxAACzsUAAs7HAALOyQACzsoAAs7LAALOzQACzs4AAs8NAALPDwACzxEAAs8TAALPFgACzxcAAs8YAALPGQACzxoAAs8cAALPHgACzx8AAs8gAALPIgACzyMAAs9iAALPZAACz2YAAs9oAALPawACz2wAAs9tAALPbgACz28AAs9xAALPcwACz3QAAs91AALPdwACz3gAAs+3AALPuQACz7sAAs+9AALPwAACz8EAAs/CAALPwwACz8QAAs/GAALPyAACz8kAAs/KAALPzAACz80AAtAMAALQDgAC0BAAAtASAALQFQAC0BYAAtAXAALQGAAC0BkAAtAbAALQHQAC0B4AAtAfAALQIQAC0CIAAtBHAALQawAC0JIAAtC2AALQuQAC0LsAAtC9AALQvwAC0MEAAtDDAALQxAAC0McAAtDUAALQ4wAC0OUAAtDnAALQ6QAC0OsAAtDtAALQ7wAC0PEAAtEAAALRAwAC0QYAAtEJAALRDAAC0Q8AAtESAALRFQAC0RcAAtFWAALRWAAC0VoAAtFcAALRXwAC0WAAAtFhAALRYgAC0WMAAtFlAALRZwAC0WgAAtFpAALRawAC0WwAAtGrAALRrQAC0a8AAtGxAALRtAAC0bUAAtG2AALRtwAC0bgAAtG6AALRvAAC0b0AAtG+AALRwAAC0cEAAtIAAALSAgAC0gQAAtIGAALSCQAC0goAAtILAALSDAAC0g0AAtIPAALSEQAC0hIAAtITAALSFQAC0hYAAtJVAALSVwAC0lkAAtJbAALSXgAC0l8AAtJgAALSYQAC0mIAAtJkAALSZgAC0mcAAtJoAALSagAC0msAAtKqAALSrAAC0q4AAtKwAALSswAC0rQAAtK1AALStgAC0rcAAtK5AALSuwAC0rwAAtK9AALSvwAC0sAAAtL/AALTAQAC0wMAAtMFAALTCAAC0wkAAtMKAALTCwAC0wwAAtMOAALTEAAC0xEAAtMSAALTFAAC0xUAAtNUAALTVgAC01gAAtNaAALTXQAC014AAtNfAALTYAAC02EAAtNjAALTZQAC02YAAtNnAALTaQAC02oAAtO1AALT2AAC0/gAAtQYAALUGgAC1BwAAtQeAALUIAAC1CMAAtQkAALUJQAC1CgAAtQpAALUKwAC1CwAAtQuAALUMAAC1DEAAtQyAALUNQAC1DYAAtQ7AALUSAAC1E0AAtRPAALUUQAC1FYAAtRZAALUXAAC1F4AAtSDAALUpwAC1M4AAtTyAALU9QAC1PcAAtT5AALU+wAC1P0AAtT/AALVAAAC1QMAAtUQAALVIQAC1SMAAtUlAALVJwAC1SkAAtUrAALVLQAC1S8AAtUxAALVQgAC1UUAAtVIAALVSwAC1U4AAtVRAALVVAAC1VcAAtVaAALVXAAC1ZsAAtWdAALVnwAC1aEAAtWkAALVpQAC1aYAAtWnAALVqAAC1aoAAtWsAALVrQAC1a4AAtWwAALVsQAC1fAAAtXyAALV9AAC1fYAAtX5AALV+gAC1fsAAtX8AALV/QAC1f8AAtYBAALWAgAC1gMAAtYFAALWBgAC1kUAAtZHAALWSgAC1kwAAtZPAALWUAAC1lEAAtZSAALWUwAC1lUAAtZXAALWWAAC1lkAAtZbAALWXAAC1mkAAtZqAALWawAC1m0AAtasAALWrgAC1rAAAtayAALWtQAC1rYAAta3AALWuAAC1rkAAta7AALWvQAC1r4AAta/AALWwQAC1sIAAtcBAALXAwAC1wUAAtcHAALXCgAC1wsAAtcMAALXDQAC1w4AAtcQAALXEgAC1xMAAtcUAALXFgAC1xcAAtdWAALXWAAC11oAAtdcAALXXwAC12AAAtdhAALXYgAC12MAAtdlAALXZwAC12gAAtdpAALXawAC12wAAterAALXrQAC168AAtexAALXtAAC17UAAte2AALXtwAC17gAAte6AALXvAAC170AAte+AALXwAAC18EAAtgAAALYAgAC2AQAAtgGAALYCQAC2AoAAtgLAALYDAAC2A0AAtgPAALYEQAC2BIAAtgTAALYFQAC2BYAAtg7AALYXwAC2IYAAtiqAALYrQAC2K8AAtixAALYswAC2LUAAti3AALYuAAC2LsAAtjIAALY1wAC2NkAAtjbAALY3QAC2N8AAtjhAALY4wAC2OUAAtj0AALY9wAC2PoAAtj9AALZAAAC2QMAAtkGAALZCQAC2QsAAtlKAALZTAAC2U4AAtlQAALZUwAC2VQAAtlVAALZVgAC2VcAAtlZAALZWwAC2VwAAtldAALZXwAC2WAAAtmfAALZoQAC2aMAAtmlAALZqAAC2akAAtmqAALZqwAC2awAAtmuAALZsAAC2bEAAtmyAALZtAAC2bUAAtn0AALZ9gAC2fgAAtn6AALZ/QAC2f4AAtn/AALaAAAC2gEAAtoDAALaBQAC2gYAAtoHAALaCQAC2goAAtpJAALaSwAC2k4AAtpQAALaUwAC2lQAAtpVAALaVgAC2lcAAtpZAALaWwAC2lwAAtpdAALaXwAC2mAAAtqfAALaoQAC2qMAAtqlAALaqAAC2qkAAtqqAALaqwAC2qwAAtquAALasAAC2rEAAtqyAALatAAC2rUAAtr0AALa9gAC2vgAAtr6AALa/QAC2v4AAtr/AALbAAAC2wEAAtsDAALbBQAC2wYAAtsHAALbCQAC2woAAttJAALbSwAC200AAttPAALbUgAC21MAAttUAALbVQAC21YAAttYAALbWgAC21sAAttcAALbXgAC218AAtuqAALbzQAC2+0AAtwNAALcDwAC3BE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AAub7AALm/QAC5v4AAub/AALnAQAC5wIAAudBAALnQwAC50UAAudHAALnSgAC50sAAudMAALnTQAC504AAudQAALnUgAC51MAAudUAALnVgAC51cAAueWAALnmAAC55oAAuecAALnnwAC56AAAuehAALnogAC56MAAuelAALnpwAC56gAAuepAALnqwAC56wAAufrAALn7QAC5+8AAufxAALn9AAC5/UAAuf2AALn9wAC5/gAAuf6AALn/AAC5/0AAuf+AALoAAAC6AEAAugmAALoSgAC6HEAAuiVAALomAAC6JoAAuicAALongAC6KAAAuiiAALoowAC6KYAAuizAALowgAC6MQAAujGAALoyAAC6MoAAujMAALozgAC6NAAAujfAALo4gAC6OUAAujoAALo6wAC6O4AAujxAALo9AAC6PYAAuk1AALpNwAC6TkAAuk7AALpPgAC6T8AAulAAALpQQAC6UIAAulEAALpRgAC6UcAAulIAALpSgAC6UsAAumKAALpjAAC6Y4AAumQAALpkwAC6ZQAAumVAALplgAC6ZcAAumZAALpmwAC6ZwAAumdAALpnwAC6aAAAunfAALp4QAC6eMAAunlAALp6AAC6ekAAunqAALp6wAC6ewAAunuAALp8AAC6fEAAunyAALp9AAC6fUAAuo0AALqNgAC6jkAAuo7AALqPgAC6j8AAupAAALqQQAC6kIAAupEAALqRgAC6kcAAupIAALqSgAC6ksAAuqKAALqjAAC6o4AAuqQAALqkwAC6pQAAuqVAALqlgAC6pcAAuqZAALqmwAC6pwAAuqdAALqnwAC6qAAAurfAALq4QAC6uMAAurlAALq6AAC6ukAAurqAALq6wAC6uwAAuruAALq8AAC6vEAAuryAALq9AAC6vUAAus0AALrNgAC6zgAAus6AALrPQAC6z4AAus/AALrQAAC60EAAutDAALrRQAC60YAAutHAALrSQAC60oAAutTAALrVAAC61YAAuuVAALrlwAC65kAAuubAALrngAC658AAuugAALroQAC66IAAuukAALrpwAC66gAAuupAALrqwAC66wAAuvrAALr7QAC6+8AAuvxAALr9AAC6/UAAuv2AALr9wAC6/gAAuv6AALr/QAC6/4AAuv/AALsAQAC7AIAAuxBAALsQwAC7EYAAuxIAALsSwAC7Ew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AAvegAAL3ogAC96MAAvekAAL3pgAC96cAAvfmAAL36AAC9+oAAvfsAAL37wAC9/AAAvfxAAL38gAC9/MAAvf1AAL39wAC9/gAAvf5AAL3+wAC9/wAAvg7AAL4PQAC+D8AAvhBAAL4RAAC+EUAAvhGAAL4RwAC+EgAAvhKAAL4TAAC+E0AAvhOAAL4UAAC+FEAAviQAAL4kgAC+JQAAviWAAL4mQAC+JoAAvibAAL4nAAC+J0AAvifAAL4oQAC+KIAAvijAAL4pQAC+KYAAvjlAAL45wAC+OkAAvjrAAL47gAC+O8AAvjwAAL48QAC+PIAAvj0AAL49gAC+PcAAvj4AAL4+gAC+PsAAvkgAAL5RAAC+WsAAvmPAAL5kgAC+ZQAAvmWAAL5mAAC+ZoAAvmcAAL5nQAC+aAAAvmtAAL5vAAC+b4AAvnAAAL5wgAC+cQAAvnGAAL5yAAC+coAAvnZAAL53AAC+d8AAvniAAL55QAC+egAAvnrAAL57gAC+fAAAvovAAL6MQAC+jMAAvo1AAL6OAAC+jkAAvo6AAL6OwAC+jwAAvo+AAL6QAAC+kEAAvpCAAL6RAAC+kUAAvqEAAL6hgAC+ogAAvqKAAL6jQAC+o4AAvqPAAL6kAAC+pEAAvqTAAL6lQAC+pYAAvqXAAL6mQAC+poAAvrZAAL62wAC+t0AAvrfAAL64gAC+uMAAvrkAAL65QAC+uYAAvroAAL66gAC+usAAvrsAAL67gAC+u8AAvsuAAL7MAAC+zIAAvs0AAL7NwAC+zgAAvs5AAL7OgAC+zsAAvs9AAL7PwAC+0AAAvtBAAL7QwAC+0QAAvuDAAL7hQAC+4cAAvuJAAL7jAAC+40AAvuOAAL7jwAC+5AAAvuSAAL7lAAC+5UAAvuWAAL7mAAC+5kAAvvYAAL72gAC+9wAAvveAAL74QAC++IAAvvjAAL75AAC++UAAvvnAAL76QAC++oAAvvrAAL77QAC++4AAvwtAAL8LwAC/DEAAvwzAAL8NgAC/DcAAvw4AAL8OQAC/DoAAvw8AAL8PgAC/D8AAvxAAAL8QgAC/EMAAvyOAAL8sQAC/NEAAvzxAAL88wAC/PUAAvz3AAL8+QAC/PsAAvz8AAL8/QAC/QAAAv0BAAL9AwAC/QQAAv0GAAL9CQAC/QoAAv0LAAL9DgAC/Q8AAv0UAAL9IQAC/SYAAv0oAAL9KgAC/S8AAv0yAAL9NQAC/TcAAv1cAAL9gAAC/acAAv3LAAL9zgAC/dAAAv3SAAL91AAC/dYAAv3YAAL92QAC/dwAAv3pAAL9+gAC/fwAAv3+AAL+AAAC/gIAAv4EAAL+BgAC/ggAAv4KAAL+GwAC/h4AAv4hAAL+JAAC/icAAv4qAAL+LQAC/jAAAv4zAAL+NQAC/nQAAv52AAL+eAAC/noAAv59AAL+fgAC/n8AAv6AAAL+gQAC/oMAAv6FAAL+hgAC/ocAAv6JAAL+igAC/skAAv7LAAL+zQAC/s8AAv7SAAL+0wAC/tQAAv7VAAL+1gAC/tgAAv7aAAL+2wAC/twAAv7eAAL+3wAC/x4AAv8gAAL/IwAC/yUAAv8oAAL/KQAC/yoAAv8rAAL/LAAC/y4AAv8wAAL/MQAC/zIAAv80AAL/NQAC/0IAAv9DAAL/RAAC/0YAAv+FAAL/hwAC/4kAAv+LAAL/jgAC/48AAv+QAAL/kQAC/5IAAv+UAAL/lgAC/5cAAv+YAAL/mgAC/5sAAv/aAAL/3AAC/94AAv/gAAL/4wAC/+QAAv/lAAL/5gAC/+cAAv/pAAL/6wAC/+wAAv/tAAL/7wAC//AAAwAvAAMAMQADADMAAwA1AAMAOAADADkAAwA6AAMAOwADADwAAwA+AAMAQAADAEEAAwBCAAMARAADAEUAAwCEAAMAhgADAIgAAwCKAAMAjQADAI4AAwCPAAMAkAADAJEAAwCTAAMAlQADAJYAAwCXAAMAmQADAJoAAwDZAAMA2wADAN0AAwDfAAMA4gADAOMAAwDkAAMA5QADAOYAAwDoAAMA6gADAOsAAwDsAAMA7gADAO8AAwEUAAMBOAADAV8AAwGDAAMBhgADAYgAAwGKAAMBjAADAY4AAwGQAAMBkQADAZQAAwGhAAMBsAADAbIAAwG0AAMBtgADAbgAAwG6AAMBvAADAb4AAwHNAAMB0AADAdMAAwHWAAMB2QADAdwAAwHfAAMB4gADAeQAAwIjAAMCJQADAicAAwIpAAMCLAADAi0AAwIuAAMCLwADAjAAAwIyAAMCNAADAjUAAwI2AAMCOAADAjkAAwJ4AAMCegADAnwAAwJ+AAMCgQADAoIAAwKDAAMChAADAoUAAwKHAAMCiQADAooAAwKLAAMCjQADAo4AAwLNAAMCzwADAtEAAwLTAAMC1gADAtcAAwLYAAMC2QADAtoAAwLcAAMC3gADAt8AAwLgAAMC4gADAuMAAwMiAAMDJAADAyYAAwMoAAMDKwADAywAAwMtAAMDLgADAy8AAwMxAAMDMwADAzQAAwM1AAMDNwADAzgAAwN3AAMDeQADA3sAAwN9AAMDgAADA4EAAwOCAAMDgwADA4QAAwOGAAMDiAADA4kAAwOKAAMDjAADA40AAwPMAAMDzgADA9AAAwPSAAMD1QADA9YAAwPXAAMD2AADA9kAAwPbAAMD3QADA94AAwPfAAMD4QADA+IAAwQhAAMEIwADBCUAAwQnAAMEKgADBCsAAwQsAAMELQADBC4AAwQwAAMEMgADBDMAAwQ0AAMENgADBDcAAwSCAAMEpQADBMUAAwTlAAME5wADBOkAAwTrAAME7QADBO8AAwTwAAME8QADBPQAAwT1AAME9wADBPgAAwT6AAME/QADBP4AAwT/AAMFAgADBQMAAwUIAAMFFQADBRoAAwUcAAMFHgADBSMAAwUmAAMFKQADBSsAAwVQAAMFdAADBZsAAwW/AAMFwgADBcQAAwXGAAMFyAADBcoAAwXMAAMFzQADBdAAAwXdAAMF7gADBfAAAwXyAAMF9AADBfYAAwX4AAMF+gADBfwAAwX+AAMGDwADBhIAAwYVAAMGGAADBhsAAwYeAAMGIQADBiQAAwYnAAMGKQADBmgAAwZqAAMGbAADBm4AAwZxAAMGcgADBnMAAwZ0AAMGdQADBncAAwZ5AAMGegADBnsAAwZ9AAMGfgADBr0AAwa/AAMGwQADBsMAAwbGAAMGxwADBsgAAwbJAAMGygADBswAAwbOAAMGzwADBtAAAwbSAAMG0wADBxIAAwcUAAMHFwADBxkAAwccAAMHHQADBx4AAwcfAAMHIAADByIAAwckAAMHJQADByYAAwcoAAMHKQADBzYAAwc3AAMHOAADBzoAAwd5AAMHewADB30AAwd/AAMHggADB4MAAweEAAMHhQADB4YAAweIAAMHigADB4sAAweMAAMHjgADB48AAwfOAAMH0AADB9IAAwfUAAMH1wADB9gAAwfZAAMH2gADB9sAAwfdAAMH3wADB+AAAwfhAAMH4wADB+QAAwgjAAMIJQADCCcAAwgpAAMILAADCC0AAwguAAMILwADCDAAAwgyAAMINAADCDUAAwg2AAMIOAADCDkAAwh4AAMIegADCHwAAwh+AAMIgQADCIIAAwiDAAMIhAADCIUAAwiHAAMIiQADCIoAAwiLAAMIjQADCI4AAwjNAAMIzwADCNEAAwjTAAMI1gADCNcAAwjYAAMI2QADCNoAAwjcAAMI3gADCN8AAwjgAAMI4gADCOMAAwkIAAMJLAADCVMAAwl3AAMJegADCXwAAwl+AAMJgAADCYIAAwmEAAMJhQADCYgAAwmVAAMJpAADCaYAAwmoAAMJqgADCawAAwmuAAMJsAADCbIAAwnBAAMJxAADCccAAwnKAAMJzQADCdAAAwnTAAMJ1gADCdgAAwoXAAMKGQADChsAAwodAAMKIAADCiEAAwoiAAMKIwADCiQAAwomAAMKKAADCikAAwoqAAMKLAADCi0AAwpsAAMKbgADCnAAAwpyAAMKdQADCnYAAwp3AAMKeAADCnkAAwp7AAMKfQADCn4AAwp/AAMKgQADCoIAAwrBAAMKwwADCsUAAwrHAAMKygADCssAAwrMAAMKzQADCs4AAwrQAAMK0gADCtMAAwrUAAMK1gADCtcAAwsWAAMLGAADCxsAAwsdAAMLIAADCyEAAwsiAAMLIwADCyQAAwsmAAMLKAADCykAAwsqAAMLLAADCy0AAwtsAAMLbgADC3AAAwtyAAMLdQADC3YAAwt3AAMLeAADC3kAAwt7AAMLfQADC34AAwt/AAMLgQADC4IAAwvBAAMLwwADC8UAAwvHAAMLygADC8sAAwvMAAMLzQADC84AAwvQAAML0gADC9MAAwvUAAML1gADC9cAAwwWAAMMGAADDBoAAwwcAAMMHwADDCAAAwwhAAMMIgADDCMAAwwlAAMMJwADDCgAAwwpAAMMKwADDCwAAww1AAMMNgADDDgAAwx7AAMMnwADDMMAAwzmAAMNDQADDS0AAw1UAAMNewADDZsAAw2/AAMN4wADDeUAAw3oAAMN6gADDewAAw3uAAMN8QADDfMAAw31AAMN9wADDfkAAw37AAMN/QADDgAAAw4DAAMOBAADDgkAAw4WAAMOGQADDhsAAw4eAAMOIQADDiMAAw5IAAMObAADDpMAAw63AAMOugADDrwAAw6+AAMOwAADDsIAAw7EAAMOxQADDsgAAw7VAAMO6AADDuoAAw7sAAMO7gADDvAAAw7yAAMO9AADDvYAAw74AAMO+gADDw0AAw8QAAMPEwADDxYAAw8ZAAMPHAADDx8AAw8iAAMPJQADDygAAw8qAAMPaQADD2sAAw9uAAMPcAADD3MAAw90AAMPdQADD3YAAw93AAMPeQADD3sAAw98AAMPfQADD38AAw+AAAMPiQADD4oAAw+MAAMPywADD80AAw/PAAMP0QADD9QAAw/VAAMP1gADD9cAAw/YAAMP2gADD9wAAw/dAAMP3gADD+AAAw/hAAMQIAADECIAAxAlAAMQJwADECoAAxArAAMQLAADEC0AAxAuAAMQMAADEDIAAxAzAAMQNAADEDYAAxA3AAMQQAADEEEAAxBDAAMQggADEIQAAxCGAAMQiAADEIsAAxCMAAMQjQADEI4AAxCPAAMQkQADEJMAAxCUAAMQlQADEJcAAxCYAAMQ1wADENkAAxDcAAMQ3gADEOEAAxDiAAMQ4wADEOQAAxDlAAMQ5wADEOkAAxDqAAMQ6wADEO0AAxDuAAMQ9wADEPgAAxD6AAMROQADETsAAxE9AAMRPwADEUIAAxFDAAMRRAADEUUAAxFGAAMRSAADEUoAAxFLAAMRTAADEU4AAxFPAAMRjgADEZAAAxGTAAMRlQADEZgAAxGZAAMRmgADEZsAAxGcAAMRngADEaAAAxGhAAMRogADEaQAAxGlAAMRsgADEbMAAxG0AAMRtgADEfUAAxH3AAMR+QADEfsAAxH+AAMR/wADEgAAAxIBAAMSAgADEgQAAxIGAAMSBwADEggAAxIKAAMSCwADEkoAAxJMAAMSTgADElAAAxJTAAMSVAADElUAAxJWAAMSVwADElkAAxJbAAMSXAADEl0AAxJfAAMSYAADEm0AAxJ+AAMSgQADEoQAAxKHAAMSigADEo0AAxKQAAMSkwADEpUAAxKmAAMSqQADEqwAAxKvAAMSsgADErUAAxK4AAMSuwADEr4AAxLAAAMSxwADEs4AAxLdAAMS6AADEvQAAxM/AAMTYgADE4IAAxOiAAMTpAADE6YAAxOoAAMTqgADE60AAxOuAAMTrwADE7IAAxOzAAMTtQADE7YAAxO4AAMTuwADE7wAAxO9AAMTwAADE8EAAxPGAAMT0wADE9gAAxPaAAMT3AADE+EAAxPkAAMT5wADE+kAAxQOAAMUMgADFFkAAxR9AAMUgAADFIIAAxSEAAMUhgADFIgAAxSKAAMUiwADFI4AAxSbAAMUrAADFK4AAxSwAAMUsgADFLQAAxS2AAMUuAADFLoAAxS8AAMUzQADFNAAAxTTAAMU1gADFNkAAxTcAAMU3wADFOIAAxTlAAMU5wADFSYAAxUoAAMVKgADFSwAAxUvAAMVMAADFTEAAxUyAAMVMwADFTUAAxU3AAMVOAADFTkAAxU7AAMVPAADFXsAAxV9AAMVfwADFYEAAxWEAAMVhQADFYYAAxWHAAMViAADFYoAAxWMAAMVjQADFY4AAxWQAAMVkQADFdAAAxXSAAMV1QADFdcAAxXaAAMV2wADFdwAAxXdAAMV3gADFeAAAxXiAAMV4wADFeQAAxXmAAMV5wADFfQAAxX1AAMV9gADFfgAAxY3AAMWOQADFjsAAxY9AAMWQAADFkEAAxZCAAMWQwADFkQAAxZGAAMWSAADFkkAAxZKAAMWTAADFk0AAxaMAAMWjgADFpAAAxaSAAMWlQADFpYAAxaXAAMWmAADFpkAAxabAAMWnQADFp4AAxafAAMWoQADFqIAAxbhAAMW4wADFuUAAxbnAAMW6gADFusAAxbsAAMW7QADFu4AAxbwAAMW8gADFvMAAxb0AAMW9gADFvcAAxc2AAMXOAADFzoAAxc8AAMXPwADF0AAAxdBAAMXQgADF0MAAxdFAAMXRwADF0gAAxdJAAMXSwADF0wAAxeLAAMXjQADF48AAxeRAAMXlAADF5UAAxeWAAMXlwADF5gAAxeaAAMXnAADF50AAxeeAAMXoAADF6EAAxfGAAMX6gADGBEAAxg1AAMYOAADGDoAAxg8AAMYPgADGEAAAxhCAAMYQwADGEYAAxhTAAMYYgADGGQAAxhmAAMYaAADGGoAAxhsAAMYbgADGHAAAxh/AAMYggADGIUAAxiIAAMYiwADGI4AAxiRAAMYlAADGJYAAxjVAAMY1wADGNkAAxjbAAMY3gADGN8AAxjgAAMY4QADGOIAAxjkAAMY5gADGOcAAxjoAAMY6gADGOsAAxkqAAMZLAADGS4AAxkwAAMZMwADGTQAAxk1AAMZNgADGTcAAxk5AAMZOwADGTwAAxk9AAMZPwADGUAAAxl/AAMZgQADGYMAAxmFAAMZiAADGYkAAxmKAAMZiwADGYwAAxmOAAMZkAADGZEAAxmSAAMZlAADGZUAAxnUAAMZ1gADGdk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AAyU+AAMlQAADJUEAAyVCAAMlRAADJUUAAyWEAAMlhgADJYgAAyWKAAMljQADJY4AAyWPAAMlkAADJZEAAyWTAAMllQADJZYAAyWXAAMlmQADJZoAAyXZAAMl2wADJd4AAyXgAAMl4wADJeQAAyXlAAMl5gADJecAAyXpAAMl6wADJewAAyXtAAMl7wADJfAAAyX9AAMl/gADJf8AAyYBAAMmQAADJkIAAyZEAAMmRgADJkkAAyZKAAMmSwADJkwAAyZNAAMmTwADJlEAAyZSAAMmUwADJlUAAyZWAAMmlQADJpcAAyaZAAMmmwADJp4AAyafAAMmoAADJqEAAyaiAAMmpAADJqYAAyanAAMmqAADJqoAAyarAAMm6gADJuwAAybuAAMm8AADJvMAAyb0AAMm9QADJvYAAyb3AAMm+QADJvsAAyb8AAMm/QADJv8AAycAAAMnPwADJ0EAAydDAAMnRQADJ0gAAydJAAMnSgADJ0sAAydMAAMnTgADJ1AAAydRAAMnUgADJ1QAAydVAAMnlAADJ5YAAyeYAAMnmgADJ50AAyeeAAMnnwADJ6AAAyehAAMnowADJ6UAAyemAAMnpwADJ6kAAyeqAAMnzwADJ/MAAygaAAMoPgADKEEAAyhDAAMoRQADKEcAAyhJAAMoSwADKEwAAyhPAAMoXAADKGsAAyhtAAMobwADKHEAAyhzAAModQADKHcAAyh5AAMoiAADKIsAAyiOAAMokQADKJQAAyiXAAMomgADKJ0AAyifAAMo3gADKOAAAyjiAAMo5AADKOcAAyjoAAMo6QADKOoAAyjrAAMo7QADKO8AAyjwAAMo8QADKPMAAyj0AAMpMwADKTUAAyk3AAMpOQADKTwAAyk9AAMpPgADKT8AAylAAAMpQgADKUQAAylFAAMpRgADKUgAAylJAAMpiAADKYoAAymMAAMpjgADKZEAAymSAAMpkwADKZQAAymVAAMplwADKZkAAymaAAMpmwADKZ0AAymeAAMp3QADKd8AAynhAAMp4wADKeYAAynnAAMp6AADKekAAynqAAMp7AADKe4AAynvAAMp8AADKfIAAynzAAMqMgADKjQAAyo2AAMqOAADKjsAAyo8AAMqPQADKj4AAyo/AAMqQQADKkMAAypEAAMqRQADKkcAAypIAAMqhwADKokAAyqLAAMqjQADKpAAAyqRAAMqkgADKpMAAyqUAAMqlgADKpgAAyqZAAMqmgADKpwAAyqdAAMq3AADKt4AAyrgAAMq4gADKuUAAyrmAAMq5wADKugAAyrpAAMq6wADKu0AAyruAAMq7wADKvEAAyryAAMrPQADK2AAAyuAAAMroAADK6IAAyukAAMrpgADK6gAAyurAAMrrAADK60AAyuwAAMrsQADK7MAAyu0AAMrtgADK7kAAyu6AAMruwADK74AAyu/AAMrxAADK9EAAyvWAAMr2AADK9oAAyvfAAMr4gADK+UAAyvnAAMsDAADLDAAAyxXAAMsewADLH4AAyyAAAMsggADLIQAAyyGAAMsiAADLIkAAyyMAAMsmQADLKoAAyysAAMsrgADLLAAAyyyAAMstAADLLYAAyy4AAMsugADLMsAAyzOAAMs0QADLNQAAyzXAAMs2gADLN0AAyzgAAMs4wADLOUAAy0kAAMtJgADLSgAAy0qAAMtLQADLS4AAy0vAAMtMAADLTEAAy0zAAMtNQADLTYAAy03AAMtOQADLToAAy15AAMtewADLX0AAy1/AAMtggADLYMAAy2EAAMthQADLYYAAy2IAAMtigADLYsAAy2MAAMtjgADLY8AAy3OAAMt0AADLdMAAy3VAAMt2AADLdkAAy3aAAMt2wADLdwAAy3eAAMt4AADLeEAAy3iAAMt5AADLeUAAy3yAAMt8wADLfQAAy32AAMuNQADLjcAAy45AAMuOwADLj4AAy4/AAMuQAADLkEAAy5CAAMuRAADLkYAAy5HAAMuSAADLkoAAy5LAAMuigADLowAAy6OAAMukAADLpMAAy6UAAMulQADLpYAAy6XAAMumQADLpsAAy6cAAMunQADLp8AAy6gAAMu3wADLuEAAy7jAAMu5QADLugAAy7pAAMu6gADLusAAy7sAAMu7gADLvAAAy7xAAMu8gADLvQAAy71AAMvNAADLzYAAy84AAMvOgADLz0AAy8+AAMvPwADL0AAAy9BAAMvQwADL0UAAy9GAAMvRwADL0kAAy9KAAMviQADL4sAAy+NAAMvjwADL5IAAy+TAAMvlAADL5UAAy+WAAMvmAADL5oAAy+bAAMvnAADL54AAy+fAAMvxAADL+gAAzAPAAMwMwADMDYAAzA4AAMwOgADMDwAAzA+AAMwQAADMEEAAzBEAAMwUQADMGAAAzBiAAMwZAADMGYAAzBoAAMwagADMGwAAzBuAAMwfQADMIAAAzCDAAMwhgADMIkAAzCMAAMwjwADMJIAAzCUAAMw0wADMNUAAzDXAAMw2QADMNwAAzDdAAMw3gADMN8AAzDgAAMw4gADMOQAAzDlAAMw5gADMOgAAzDpAAMxKAADMSoAAzEsAAMxLgADMTEAAzEyAAMxMwADMTQAAzE1AAMxNwADMTkAAzE6AAMxOwADMT0AAzE+AAMxfQADMX8AAzGBAAMxgwADMYYAAzGHAAMxiAADMYkAAzGKAAMxjAADMY4AAzGPAAMxkAADMZIAAzGTAAMx0gADMdQAAzHXAAMx2QADMdwAAzHdAAMx3gADMd8AAzHgAAMx4gADMeQAAzHlAAMx5gADMegAAzHpAAMyKAADMioAAzIsAAMyLgADMjEAAzIyAAMyMwADMjQAAzI1AAMyNwADMjkAAzI6AAMyOwADMj0AAzI+AAMyfQADMn8AAzKBAAMygwADMoYAAzKHAAMyiAADMokAAzKKAAMyjAADMo4AAzKPAAMykAADMpIAAzKTAAMy0gADMtQAAzLWAAMy2AADMtsAAzLcAAMy3QADMt4AAzLfAAMy4QADMuMAAzLkAAMy5QADMucAAzLoAAMzMwADM1YAAzN2AAMzlgADM5gAAzOaAAMznAADM54AAzOhAAMzogADM6MAAzOmAAMzpwADM6kAAzOqAAMzrAADM68AAzOwAAMzsQADM7QAAzO1AAMzugADM8cAAzPMAAMzzgADM9AAAzPVAAMz2AADM9sAAzPdAAM0AgADNCYAAzRNAAM0cQADNHQAAzR2AAM0eAADNHoAAzR8AAM0fgADNH8AAzSCAAM0jwADNKAAAzSiAAM0pAADNKYAAzSoAAM0qgADNKwAAzSuAAM0sAADNMEAAzTEAAM0xwADNMoAAzTNAAM00AADNNMAAzTWAAM02QADNNsAAzUaAAM1HAADNR4AAzUgAAM1IwADNSQAAzUlAAM1JgADNScAAzUpAAM1KwADNSwAAzUtAAM1LwADNTAAAzVvAAM1cQADNXMAAzV1AAM1eAADNXkAAzV6AAM1ewADNXwAAzV+AAM1gAADNYEAAzWCAAM1hAADNYUAAzXEAAM1xgADNckAAzXLAAM1zgADNc8AAzXQAAM10QADNdIAAzXUAAM11gADNdcAAzXYAAM12gADNdsAAzXoAAM16QADNeoAAzXsAAM2KwADNi0AAzYvAAM2MQADNjQAAzY1AAM2NgADNjcAAzY4AAM2OgADNjwAAzY9AAM2PgADNkAAAzZBAAM2gAADNoIAAzaEAAM2hgADNokAAzaKAAM2iwADNowAAzaNAAM2jwADNpEAAzaSAAM2kwADNpUAAzaWAAM21QADNtcAAzbZAAM22wADNt4AAzbfAAM24AADNuEAAzbiAAM25AADNuYAAzbnAAM26AADNuoAAzbrAAM3KgADNywAAzcuAAM3MAADNzMAAzc0AAM3NQADNzYAAzc3AAM3OQADNzsAAzc8AAM3PQADNz8AAzdAAAM3fwADN4EAAzeDAAM3hQADN4gAAzeJAAM3igADN4sAAzeMAAM3jgADN5AAAzeRAAM3kgADN5QAAzeVAAM3ugADN94AAzgFAAM4KQADOCwAAzguAAM4MAADODIAAzg0AAM4NgADODcAAzg6AAM4RwADOFYAAzhYAAM4WgADOFwAAzheAAM4YAADOGIAAzhkAAM4cwADOHYAAzh5AAM4fAADOH8AAziCAAM4hQADOIgAAziKAAM4yQADOMsAAzjNAAM4zwADONIAAzjTAAM41AADONUAAzjWAAM42AADONoAAzjbAAM43AADON4AAzjfAAM5HgADOSAAAzkiAAM5JAADOScAAzkoAAM5KQADOSoAAzkrAAM5LQADOS8AAzkwAAM5MQADOTMAAzk0AAM5cwADOXUAAzl3AAM5eQADOXwAAzl9AAM5fgADOX8AAzmAAAM5ggADOYQAAzmFAAM5hgADOYgAAzmJAAM5yAADOcoAAznMAAM5zgADOdEAAznSAAM50wADOdQAAznVAAM51wADOdkAAznaAAM52wADOd0AAzneAAM6HQADOh8AAzohAAM6IwADOiYAAzonAAM6KAADOikAAzoqAAM6LAADOi4AAzovAAM6MAADOjIAAzozAAM6cgADOnQAAzp2AAM6eAADOnsAAzp8AAM6fQADOn4AAzp/AAM6gQADOoMAAzqEAAM6hQADOocAAzqIAAM6xwADOskAAzrLAAM6zQADOtAAAzrRAAM60gADOtMAAzrUAAM61gADOtgAAzrZAAM62gADOtwAAzrdAAM7KAADO0sAAztrAAM7iwADO40AAzuPAAM7kQADO5MAAzuWAAM7lwADO5gAAzubAAM7nAADO54AAzufAAM7oQADO6QAAzulAAM7pgADO6kAAzuqAAM7rwADO7wAAzvBAAM7wwADO8UAAzvKAAM7zQADO9AAAzvSAAM79wADPBsAAzxCAAM8ZgADPGkAAzxrAAM8bQADPG8AAzxxAAM8cwADPHQAAzx3AAM8hAADPJUAAzyXAAM8mQADPJsAAzydAAM8nwADPKEAAzyjAAM8pQADPLYAAzy5AAM8vAADPL8AAzzCAAM8xQADPMgAAzzLAAM8zgADPNAAAz0PAAM9EQADPRMAAz0VAAM9GAADPRkAAz0aAAM9GwADPRwAAz0eAAM9IAADPSEAAz0iAAM9JAADPSUAAz1kAAM9ZgADPWgAAz1qAAM9bQADPW4AAz1vAAM9cAADPXEAAz1zAAM9dQADPXYAAz13AAM9eQADPXoAAz25AAM9uwADPb4AAz3AAAM9wwADPcQAAz3FAAM9xgADPccAAz3JAAM9ywADPcwAAz3NAAM9zwADPdAAAz3dAAM93gADPd8AAz3hAAM+IAADPiIAAz4kAAM+JgADPikAAz4qAAM+KwADPiwAAz4tAAM+LwADPjEAAz4yAAM+MwADPjUAAz42AAM+dQADPncAAz55AAM+ewADPn4AAz5/AAM+gAADPoEAAz6CAAM+hAADPoYAAz6HAAM+iAADPooAAz6LAAM+ygADPswAAz7OAAM+0AADPtMAAz7UAAM+1QADPtYAAz7XAAM+2QADPtsAAz7cAAM+3QADPt8AAz7gAAM/HwADPyEAAz8jAAM/JQADPygAAz8pAAM/KgADPysAAz8sAAM/LgADPzAAAz8xAAM/MgADPzQAAz81AAM/dAADP3YAAz94AAM/egADP30AAz9+AAM/fwADP4AAAz+BAAM/gwADP4UAAz+GAAM/hwADP4kAAz+KAAM/rwADP9MAAz/6AANAHgADQCEAA0AjAANAJQADQCcAA0ApAANAKwADQCwAA0AvAANAPAADQEsAA0BNAANATwADQFEAA0BTAANAVQADQFcAA0BZAANAaAADQGsAA0BuAANAcQADQHQAA0B3AANAegADQH0AA0B/AANAvgADQMAAA0DCAANAxAADQMcAA0DIAANAyQADQMoAA0DLAANAzQADQM8AA0DQAANA0QADQNMAA0DUAANBEwADQRUAA0EXAANBGQADQRwAA0EdAANBHgADQR8AA0EgAANBIgADQSQAA0ElAANBJgADQSgAA0EpAANBaAADQWoAA0FsAANBbgADQXEAA0FyAANBcwADQXQAA0F1AANBdwADQXkAA0F6AANBewADQX0AA0F+AANBvQADQb8AA0HCAANBxAADQccAA0HIAANByQADQcoAA0HLAANBzQADQc8AA0HQAANB0QADQdMAA0HUAANCEwADQhUAA0IXAANCGQADQhwAA0IdAANCHgADQh8AA0IgAANCIgADQiQAA0IlAANCJgADQigAA0IpAANCaAADQmoAA0JsAANCbgADQnEAA0JyAANCcwADQnQAA0J1AANCdwADQnkAA0J6AANCewADQn0AA0J+AANCvQADQr8AA0LBAANCwwADQsYAA0LHAANCyAADQskAA0LKAANCzAADQs4AA0LPAANC0AADQtIAA0LTAANDHgADQ0EAA0NhAANDgQADQ4MAA0OFAANDhwADQ4kAA0OMAANDjQADQ44AA0ORAANDkgADQ5QAA0OVAANDlwADQ5oAA0ObAANDnAADQ58AA0OgAANDpQADQ7IAA0O3AANDuQADQ7sAA0PAAANDwwADQ8YAA0PIAAND7QADRBEAA0Q4AANEXAADRF8AA0RhAANEYwADRGUAA0RnAANEaQADRGoAA0RtAANEegADRIsAA0SNAANEjwADRJEAA0STAANElQADRJcAA0SZAANEmwADRKwAA0SvAANEsgADRLUAA0S4AANEuwADRL4AA0TBAANExAADRMYAA0UFAANFBwADRQkAA0ULAANFDgADRQ8AA0UQAANFEQADRRIAA0UUAANFFgADRRcAA0UYAANFGgADRRsAA0VaAANFXAADRV4AA0VgAANFYwADRWQAA0VlAANFZgADRWcAA0VpAANFawADRWwAA0VtAANFbwADRXAAA0WvAANFsQADRbQAA0W2AANFuQADRboAA0W7AANFvAADRb0AA0W/AANFwQADRcIAA0XDAANFxQADRcYAA0XTAANF1AADRdUAA0XXAANGFgADRhgAA0YaAANGHAADRh8AA0YgAANGIQADRiIAA0YjAANGJQADRicAA0YoAANGKQADRisAA0YsAANGawADRm0AA0ZvAANGcQADRnQAA0Z1AANGdgADRncAA0Z4AANGegADRnwAA0Z9AANGfgADRoAAA0aBAANGwAADRsIAA0bEAANGxgADRskAA0bKAANGywADRswAA0bNAANGzwADRtEAA0bSAANG0wADRtUAA0bWAANHFQADRxcAA0cZAANHGwADRx4AA0cfAANHIAADRyEAA0ciAANHJAADRyYAA0cnAANHKAADRyoAA0crAANHagADR2wAA0duAANHcAADR3MAA0d0AANHdQADR3YAA0d3AANHeQADR3sAA0d8AANHfQADR38AA0eAAANHpQADR8kAA0fwAANIFAADSBcAA0gZAANIGwADSB0AA0gfAANIIQADSCIAA0glAANIMgADSEEAA0hDAANIRQADSEcAA0hJAANISwADSE0AA0hPAANIXgADSGEAA0hkAANIZwADSGoAA0htAANIcAADSHMAA0h1AANItAADSLYAA0i4AANIugADSL0AA0i+AANIvwADSMAAA0jBAANIwwADSMUAA0jGAANIxwADSMkAA0jKAANJCQADSQsAA0kNAANJDwADSRIAA0kTAANJFAADSRUAA0kWAANJGAADSRoAA0kbAANJHAADSR4AA0kfAANJXgADSWAAA0liAANJZAADSWcAA0loAANJaQADSWoAA0lrAANJbQADSW8AA0lwAANJcQADSXMAA0l0AANJswADSbUAA0m3AANJuQADSbwAA0m9AANJvgADSb8AA0nAAANJwgADScQAA0nFAANJxgADScgAA0nJAANKCAADSgoAA0oMAANKDgADShEAA0oSAANKEwADShQAA0oVAANKFwADShkAA0oaAANKGwADSh0AA0oeAANKXQADSl8AA0phAANKYwADSmYAA0pnAANKaAADSmkAA0pqAANKbAADSm4AA0pvAANKcAADSnIAA0pzAANKsgADSrQAA0q2AANKuAADSrsAA0q8AANKvQADSr4AA0q/AANKwQADSsMAA0rEAANKxQADSscAA0rIAANLEwADSzYAA0tWAANLdgADS3gAA0t6AANLfAADS34AA0uBAANLggADS4MAA0uGAANLhwADS4kAA0uKAANLjAADS44AA0uPAANLkAADS5MAA0uUAANLmQADS6YAA0urAANLrQADS68AA0u0AANLtwADS7oAA0u8AANL4QADTAUAA0wsAANMUAADTFMAA0xVAANMVwADTFkAA0xbAANMXQADTF4AA0xhAANMbgADTH8AA0yBAANMgwADTIUAA0yHAANMiQADTIsAA0yNAANMjwADTKAAA0yjAANMpgADTKkAA0ysAANMrwADTLIAA0y1AANMuAADTLoAA0z5AANM+wADTP0AA0z/AANNAgADTQMAA00EAANNBQADTQYAA00IAANNCgADTQsAA00MAANNDgADTQ8AA01OAANNUAADTVIAA01UAANNVwADTVgAA01ZAANNWgADTVsAA01dAANNXwADTWAAA01hAANNYwADTWQAA02jAANNpQADTagAA02qAANNrQADTa4AA02vAANNsAADTbEAA02zAANNtQADTbYAA023AANNuQADTboAA03HAANNyAADTckAA03LAANOCgADTgwAA04OAANOEAADThMAA04UAANOFQADThYAA04XAANOGQADThsAA04cAANOHQADTh8AA04gAANOXwADTmEAA05jAANOZQADTmgAA05pAANOagADTmsAA05sAANObgADTnAAA05xAANOcgADTnQAA051AANOtAADTrYAA064AANOugADTr0AA06+AANOvwADTsAAA07BAANOwwADTsUAA07GAANOxwADTskAA07KAANPCQADTwsAA08NAANPDwADTxIAA08TAANPFAADTxUAA08WAANPGAADTxoAA08bAANPHAADTx4AA08fAANPXgADT2AAA09iAANPZAADT2cAA09oAANPaQADT2oAA09rAANPbQADT28AA09wAANPcQADT3MAA090AANPmQADT70AA0/kAANQCAADUAsAA1ANAANQDwADUBEAA1ATAANQFQADUBYAA1AZAANQJgADUDUAA1A3AANQOQADUDsAA1A9AANQPwADUEEAA1BDAANQUgADUFUAA1BYAANQWwADUF4AA1BhAANQZAADUGcAA1BpAANQqAADUKoAA1CsAANQrgADULEAA1CyAANQswADULQAA1C1AANQtwADULkAA1C6AANQuwADUL0AA1C+AANQ/QADUP8AA1EBAANRAwADUQYAA1EHAANRCAADUQkAA1EKAANRDAADUQ4AA1EPAANREAADURIAA1ETAANRUgADUVQAA1FWAANRWAADUVsAA1FcAANRXQADUV4AA1FfAANRYQADUWMAA1FkAANRZQADUWcAA1FoAANRpwADUakAA1GsAANRrgADUbEAA1GyAANRswADUbQAA1G1AANRtwADUbkAA1G6AANRuwADUb0AA1G+AANR/QADUf8AA1IBAANSAwADUgYAA1IHAANSCAADUgkAA1IKAANSDAADUg4AA1IPAANSEAADUhIAA1ITAANSUgADUlQAA1JWAANSWAADUlsAA1JcAANSXQADUl4AA1JfAANSYQADUmMAA1JkAANSZQADUmcAA1JoAANSpwADUqkAA1KrAANSrQADUrAAA1KxAANSsgADUrMAA1K0AANStgADUrgAA1K5AANSugADUrwAA1K9AANSxgADUscAA1LJAANTDAADUzAAA1NUAANTdwADU54AA1O+AANT5QADVAwAA1QsAANUUAADVHQAA1R2AANUeQADVHsAA1R9AANUfwADVIIAA1SEAANUhgADVIgAA1SKAANUjAADVI4AA1SRAANUlAADVJUAA1SaAANUpwADVKoAA1SsAANUrwADVLIAA1S0AANU2QADVP0AA1UkAANVSAADVUsAA1VNAANVTwADVVEAA1VTAANVVQADVVYAA1VZAANVZgADVXkAA1V7AANVfQADVX8AA1WBAANVgwADVYUAA1WHAANViQADVYsAA1WeAANVoQADVaQAA1WnAANVqgADVa0AA1WwAANVswADVbYAA1W5AANVuwADVfoAA1X8AANV/wADVgEAA1YEAANWBQADVgYAA1YHAANWCAADVgoAA1YMAANWDQADVg4AA1YQAANWEQADVhoAA1YbAANWHQADVlwAA1ZeAANWYAADVmIAA1ZlAANWZgADVmcAA1ZoAANWaQADVmsAA1ZtAANWbgADVm8AA1ZxAANWcgADVrEAA1azAANWtgADVrgAA1a7AANWvAADVr0AA1a+AANWvwADVsEAA1bDAANWxAADVsUAA1bHAANWyAADVtEAA1bSAANW1AADVxMAA1cVAANXFwADVxkAA1ccAANXHQADVx4AA1cfAANXIAADVyIAA1ckAANXJQADVyYAA1coAANXKQADV2gAA1dqAANXbQADV28AA1dyAANXcwADV3QAA1d1AANXdgADV3gAA1d6AANXewADV3wAA1d+AANXfwADV4gAA1eJAANXiwADV8oAA1fMAANXzgADV9AAA1fTAANX1AADV9UAA1fWAANX1wADV9kAA1fbAANX3AADV90AA1ffAANX4AADWB8AA1ghAANYJAADWCYAA1gpAANYKgADWCsAA1gsAANYLQADWC8AA1gxAANYMgADWDMAA1g1AANYNgADWEMAA1hEAANYRQADWEcAA1iGAANYiAADWIoAA1iMAANYjwADWJAAA1iRAANYkgADWJMAA1iVAANYlwADWJgAA1iZAANYmwADWJwAA1jbAANY3QADWOAAA1jiAANY5QADWOYAA1jnAANY6AADWOkAA1jrAANY7QADWO4AA1jvAANY8QADWPIAA1kGAANZEwADWSQAA1knAANZKgADWS0AA1kwAANZMwADWTYAA1k5AANZPAADWU0AA1lQAANZUwADWVYAA1lZAANZXAADWV8AA1liAANZZQADWWcAA1luAANZdwADWX8AA1mIAANZkgADWZ0AA1noAANaCwADWisAA1pLAANaTQADWk8AA1pRAANaUwADWlYAA1pXAANaWAADWlsAA1pcAANaXgADWl8AA1phAANaZAADWmUAA1pmAANaaQADWmoAA1pvAANafAADWoEAA1qDAANahQADWooAA1qNAANakAADWpIAA1q3AANa2wADWwIAA1smAANbKQADWysAA1stAANbLwADWzEAA1szAANbNAADWzcAA1tEAANbVQADW1cAA1tZAANbWwADW10AA1tfAANbYQADW2MAA1tlAANbdgADW3kAA1t8AANbfwADW4IAA1uFAANbiAADW4sAA1uOAANbkAADW88AA1vRAANb0wADW9UAA1vYAANb2QADW9oAA1vbAANb3AADW94AA1vgAANb4QADW+IAA1vkAANb5QADXCQAA1wmAANcKAADXCoAA1wtAANcLgADXC8AA1wwAANcMQADXDMAA1w1AANcNgADXDcAA1w5AANcOgADXHkAA1x7AANcfgADXIAAA1yDAANchAADXIUAA1yGAANchwADXIkAA1yLAANcjAADXI0AA1yPAANckAADXJ0AA1yeAANcnwADXKEAA1zgAANc4gADXOQAA1zmAANc6QADXOoAA1zrAANc7AADXO0AA1zvAANc8QADXPIAA1zzAANc9QADXPYAA101AANdNwADXTkAA107AANdPgADXT8AA11AAANdQQADXUIAA11EAANdRgADXUcAA11IAANdSgADXUsAA12KAANdjAADXY4AA12QAANdkwADXZQAA12VAANdlgADXZcAA12ZAANdmwADXZwAA12dAANdnwADXaAAA13fAANd4QADXeMAA13lAANd6AADXekAA13qAANd6wADXewAA13uAANd8AADXfEAA13yAANd9AADXfUAA140AANeNgADXjgAA146AANePQADXj4AA14/AANeQAADXkEAA15DAANeRQADXkYAA15HAANeSQADXkoAA15vAANekwADXroAA17eAANe4QADXuMAA17lAANe5wADXukAA17rAANe7AADXu8AA178AANfCwADXw0AA18PAANfEQADXxMAA18VAANfFwADXxkAA18oAANfKwADXy4AA18xAANfNAADXzcAA186AANfPQADXz8AA19+AANfgAADX4IAA1+EAANfhwADX4gAA1+JAANfigADX4sAA1+NAANfjwADX5AAA1+RAANfkwADX5QAA1/TAANf1QADX9cAA1/ZAANf3AADX90AA1/eAANf3wADX+AAA1/iAANf5AADX+UAA1/mAANf6AADX+kAA2AoAANgKgADYCwAA2AuAANgMQADYDIAA2AzAANgNAADYDUAA2A3AANgOQADYDoAA2A7AANgPQADYD4AA2B9AANgfwADYIIAA2CEAANghwADYIgAA2CJAANgigADYIsAA2CNAANgjwADYJAAA2CRAANgkwADYJQAA2DTAANg1QADYNcAA2DZAANg3AADYN0AA2DeAANg3wADYOAAA2DiAANg5AADYOUAA2DmAANg6AADYOkAA2EoAANhKgADYSwAA2EuAANhMQADYTIAA2EzAANhNAADYTUAA2E3AANhOQADYToAA2E7AANhPQADYT4AA2F9AANhfwADYYEAA2GDAANhhgADYYcAA2GIAANhiQADYYoAA2GMAANhjgADYY8AA2GQAANhkgADYZMAA2HeAANiAQADYiEAA2JBAANiQwADYkUAA2JHAANiSQADYkwAA2JNAANiTgADYlEAA2JSAANiVAADYlUAA2JXAANiWgADYlsAA2JcAANiXwADYmAAA2JlAANicgADYncAA2J5AANiewADYoAAA2KDAANihgADYogAA2KtAANi0QADYvgAA2McAANjHwADYyEAA2MjAANjJQADYycAA2MpAANjKgADYy0AA2M6AANjSwADY00AA2NPAANjUQADY1MAA2NVAANjVwADY1kAA2NbAANjbAADY28AA2NyAANjdQADY3gAA2N7AANjfgADY4EAA2OEAANjhgADY8UAA2PHAANjyQADY8sAA2POAANjzwADY9AAA2PRAANj0gADY9QAA2PWAANj1wADY9gAA2PaAANj2wADZBoAA2QcAANkHgADZCAAA2QjAANkJAADZCUAA2QmAANkJwADZCkAA2QrAANkLAADZC0AA2QvAANkMAADZG8AA2RxAANkdAADZHYAA2R5AANkegADZHsAA2R8AANkfQADZH8AA2SBAANkggADZIMAA2SFAANkhgADZJMAA2SUAANklQADZJcAA2TWAANk2AADZNoAA2TcAANk3wADZOAAA2ThAANk4gADZOMAA2TlAANk5wADZOgAA2TpAANk6wADZOwAA2UrAANlLQADZS8AA2UxAANlNAADZTUAA2U2AANlNwADZTgAA2U6AANlPAADZT0AA2U+AANlQAADZUEAA2WAAANlggADZYQAA2WGAANliQADZYoAA2WLAANljAADZY0AA2WPAANlkQADZZIAA2WTAANllQADZZYAA2XVAANl1wADZdkAA2XbAANl3gADZd8AA2XgAANl4QADZeIAA2XkAANl5gADZecAA2XoAANl6gADZesAA2YqAANmLAADZi4AA2YwAANmMwADZjQAA2Y1AANmNgADZjcAA2Y5AANmOwADZjwAA2Y9AANmPwADZkAAA2ZlAANmiQADZrAAA2bUAANm1wADZtkAA2bbAANm3QADZt8AA2bhAANm4gADZuUAA2byAANnAQADZwMAA2cFAANnBwADZwkAA2cLAANnDQADZw8AA2ceAANnIQADZyQAA2cnAANnKgADZy0AA2cwAANnMwADZzUAA2d0AANndgADZ3gAA2d6AANnfQADZ34AA2d/AANngAADZ4EAA2eDAANnhQADZ4YAA2eHAANniQADZ4oAA2fJAANnywADZ80AA2fPAANn0gADZ9MAA2fUAANn1QADZ9YAA2fYAANn2gADZ9sAA2fcAANn3gADZ98AA2geAANoIAADaCIAA2gkAANoJwADaCgAA2gpAANoKgADaCsAA2gtAANoLwADaDAAA2gxAANoMwADaDQAA2hzAANodQADaHcAA2h5AANofAADaH0AA2h+AANofwADaIAAA2iCAANohAADaIUAA2iGAANoiAADaIkAA2jIAANoygADaMwAA2jOAANo0QADaNIAA2jTAANo1AADaNUAA2jXAANo2QADaNoAA2jbAANo3QADaN4AA2kdAANpHwADaSEAA2kjAANpJgADaScAA2koAANpKQADaSoAA2ksAANpLgADaS8AA2kwAANpMgADaTMAA2lyAANpdAADaXYAA2l4AANpewADaXwAA2l9AANpfgADaX8AA2mBAANpgwADaYQAA2mFAANphwADaYgAA2nTAANp9gADahYAA2o2AANqOAADajoAA2o8AANqPgADakEAA2pCAANqQwADakYAA2pHAANqSQADakoAA2pMAANqTwADalAAA2pRAANqVAADalUAA2paAANqZwADamwAA2puAANqcAADanUAA2p4AANqewADan0AA2qiAANqxgADau0AA2sRAANrFAADaxYAA2sYAANrGgADaxwAA2seAANrHwADayIAA2svAANrQAADa0IAA2tEAANrRgADa0gAA2tKAANrTAADa04AA2tQAANrYQADa2QAA2tnAANragADa20AA2twAANrcwADa3YAA2t5AANrewADa7oAA2u8AANrvgADa8AAA2vDAANrxAADa8UAA2vGAANrxwADa8kAA2vLAANrzAADa80AA2vPAANr0AADbA8AA2wRAANsEwADbBUAA2wYAANsGQADbBoAA2wbAANsHAADbB4AA2wgAANsIQADbCIAA2wkAANsJQADbGQAA2xmAANsaQADbGsAA2xuAANsbwADbHAAA2xxAANscgADbHQAA2x2AANsdwADbHgAA2x6AANsewADbIgAA2yJAANsigADbIwAA2zLAANszQADbM8AA2zRAANs1AADbNUAA2zWAANs1wADbNgAA2zaAANs3AADbN0AA2zeAANs4AADbOEAA20gAANtIgADbSQAA20mAANtKQADbSoAA20rAANtLAADbS0AA20vAANtMQADbTIAA20zAANtNQADbTYAA211AANtdwADbXkAA217AANtfgADbX8AA22AAANtgQADbYIAA22EAANthgADbYcAA22IAANtigADbYsAA23KAANtzAADbc4AA23QAANt0wADbdQAA23VAANt1gADbdcAA23ZAANt2wADbdwAA23dAANt3wADbeAAA24fAANuIQADbiMAA24lAANuKAADbikAA24qAANuKwADbiwAA24uAANuMAADbjEAA24yAANuNAADbjUAA25aAANufgADbqUAA27JAANuzAADbs4AA27QAANu0gADbtQAA27WAANu1wADbtoAA27nAANu9gADbvgAA276AANu/AADbv4AA28AAANvAgADbwQAA28TAANvFgADbxkAA28cAANvHwADbyIAA28lAANvKAADbyoAA29pAANvawADb20AA29vAANvcgADb3MAA290AANvdQADb3YAA294AANvegADb3sAA298AANvfgADb38AA2++AANvwAADb8IAA2/EAANvxwADb8gAA2/JAANvygADb8sAA2/NAANvzwADb9AAA2/RAANv0wADb9QAA3ATAANwFQADcBcAA3AZAANwHAADcB0AA3AeAANwHwADcCAAA3AiAANwJAADcCUAA3AmAANwKAADcCkAA3BoAANwagADcG0AA3BvAANwcgADcHMAA3B0AANwdQADcHYAA3B4AANwegADcHsAA3B8AANwfgADcH8AA3C+AANwwAADcMIAA3DEAANwxwADcMgAA3DJAANwygADcMsAA3DNAANwzwADcNAAA3DRAANw0wADcNQAA3ETAANxFQADcRcAA3EZAANxHAADcR0AA3EeAANxHwADcSAAA3EiAANxJAADcSUAA3EmAANxKAADcSkAA3FoAANxagADcWwAA3FuAANxcQADcXIAA3FzAANxdAADcXUAA3F3AANxeQADcXoAA3F7AANxfQADcX4AA3HJAANx7AADcgwAA3IsAANyLgADcjAAA3IyAANyNAADcjcAA3I4AANyOQADcjwAA3I9AANyPwADckAAA3JCAANyRQADckYAA3JHAANySgADcksAA3JQAANyXQADcmIAA3JkAANyZgADcmsAA3JuAANycQADcnMAA3KYAANyvAADcuMAA3MHAANzCgADcwwAA3MOAANzEAADcxIAA3MUAANzFQADcxgAA3MlAANzNgADczgAA3M6AANzPAADcz4AA3NAAANzQgADc0QAA3NGAANzVwADc1oAA3NdAANzYAADc2MAA3NmAANzaQADc2wAA3NvAANzcQADc7AAA3OyAANztAADc7YAA3O5AANzugADc7sAA3O8AANzvQADc78AA3PBAANzwgADc8MAA3PFAANzxgADdAUAA3QHAAN0CQADdAsAA3QOAAN0DwADdBAAA3QRAAN0EgADdBQAA3QWAAN0FwADdBgAA3QaAAN0GwADdFoAA3RcAAN0XwADdGEAA3RkAAN0ZQADdGYAA3RnAAN0aAADdGoAA3RsAAN0bQADdG4AA3RwAAN0cQADdH4AA3R/AAN0gAADdIIAA3TBAAN0wwADdMUAA3THAAN0ygADdMsAA3TMAAN0zQADdM4AA3TQAAN00gADdNMAA3TUAAN01gADdNcAA3UWAAN1GAADdRoAA3UcAAN1HwADdSAAA3UhAAN1IgADdSMAA3UlAAN1JwADdSgAA3UpAAN1KwADdSwAA3VrAAN1bQADdW8AA3VxAAN1dAADdXUAA3V2AAN1dwADdXgAA3V6AAN1fAADdX0AA3V+AAN1gAADdYEAA3XAAAN1wgADdcQAA3XGAAN1yQADdcoAA3XLAAN1zAADdc0AA3XPAAN10QADddIAA3XTAAN11QADddYAA3YVAAN2FwADdhkAA3YbAAN2HgADdh8AA3YgAAN2IQADdiIAA3YkAAN2JgADdicAA3YoAAN2KgADdisAA3ZQAAN2dAADdpsAA3a/AAN2wgADdsQAA3bGAAN2yAADdsoAA3bMAAN2zQADdtAAA3bdAAN27AADdu4AA3bwAAN28gADdvQAA3b2AAN2+AADdvoAA3cJAAN3DAADdw8AA3cSAAN3FQADdxgAA3cbAAN3HgADdyAAA3dfAAN3YQADd2MAA3dlAAN3aAADd2kAA3dqAAN3awADd2wAA3duAAN3cAADd3EAA3dyAAN3dAADd3UAA3e0AAN3tgADd7gAA3e6AAN3vQADd74AA3e/AAN3wAADd8EAA3fDAAN3xQADd8YAA3fHAAN3yQADd8oAA3gJAAN4CwADeA0AA3gPAAN4EgADeBMAA3gUAAN4FQADeBYAA3gYAAN4GgADeBsAA3gcAAN4HgADeB8AA3heAAN4YAADeGIAA3hkAAN4ZwADeGgAA3hpAAN4agADeGsAA3htAAN4bwADeHAAA3hxAAN4cwADeHQAA3izAAN4tQADeLcAA3i5AAN4vAADeL0AA3i+AAN4vwADeMAAA3jCAAN4xAADeMUAA3jGAAN4yAADeMkAA3kIAAN5CgADeQwAA3kOAAN5EQADeRIAA3kTAAN5FAADeRUAA3kXAAN5GQADeRoAA3kbAAN5HQADeR4AA3ldAAN5XwADeWEAA3ljAAN5ZgADeWcAA3loAAN5aQADeWoAA3lsAAN5bgADeW8AA3lwAAN5cgADeXMAA3m+AAN54QADegEAA3ohAAN6IwADeiUAA3onAAN6KQADeiwAA3otAAN6LgADejEAA3oyAAN6NAADejUAA3o3AAN6OgADejsAA3o8AAN6PwADekAAA3pFAAN6UgADelcAA3pZAAN6WwADemAAA3pjAAN6ZgADemgAA3qNAAN6sQADetgAA3r8AAN6/wADewEAA3sDAAN7BQADewcAA3sJAAN7CgADew0AA3saAAN7KwADey0AA3svAAN7MQADezMAA3s1AAN7NwADezkAA3s7AAN7TAADe08AA3tSAAN7VQADe1gAA3tbAAN7XgADe2EAA3tkAAN7ZgADe6UAA3unAAN7qQADe6sAA3uuAAN7rwADe7AAA3uxAAN7sgADe7QAA3u2AAN7twADe7gAA3u6AAN7uwADe/oAA3v8AAN7/gADfAAAA3wDAAN8BAADfAUAA3wGAAN8BwADfAkAA3wLAAN8DAADfA0AA3wPAAN8EAADfE8AA3xRAAN8VAADfFYAA3xZAAN8WgADfFsAA3xcAAN8XQADfF8AA3xhAAN8YgADfGMAA3xlAAN8ZgADfHMAA3x0AAN8dQADfHcAA3y2AAN8uAADfLoAA3y8AAN8vwADfMAAA3zBAAN8wgADfMMAA3zFAAN8xwADfMgAA3zJAAN8ywADfMwAA30LAAN9DQADfQ8AA30RAAN9FAADfRUAA30WAAN9FwADfRgAA30aAAN9HAADfR0AA30eAAN9IAADfSEAA31gAAN9YgADfWQAA31mAAN9aQADfWoAA31rAAN9bAADfW0AA31vAAN9cQADfXIAA31zAAN9dQADfXYAA321AAN9twADfbkAA327AAN9vgADfb8AA33AAAN9wQADfcIAA33EAAN9xgADfccAA33IAAN9ygADfcsAA34KAAN+DAADfg4AA34QAAN+EwADfhQAA34VAAN+FgADfhcAA34ZAAN+GwADfhwAA34dAAN+HwADfiAAA35FAAN+aQADfpAAA360AAN+twADfrkAA367AAN+vQADfr8AA37BAAN+wgADfsUAA37SAAN+4QADfuMAA37lAAN+5wADfukAA37rAAN+7QADfu8AA37+AAN/AQADfwQAA38HAAN/CgADfw0AA38QAAN/EwADfxUAA39UAAN/VgADf1gAA39aAAN/XQADf14AA39fAAN/YAADf2EAA39jAAN/ZQADf2YAA39nAAN/aQADf2oAA3+pAAN/qwADf60AA3+vAAN/sgADf7MAA3+0AAN/tQADf7YAA3+4AAN/ugADf7sAA3+8AAN/vgADf78AA3/+AAOAAAADgAIAA4AEAAOABwADgAgAA4AJAAOACgADgAsAA4ANAAOADwADgBAAA4ARAAOAEwADgBQAA4BTAAOAVQADgFcAA4BZAAOAXAADgF0AA4BeAAOAXwADgGAAA4BiAAOAZAADgGUAA4BmAAOAaAADgGkAA4CoAAOAqgADgKwAA4CuAAOAsQADgLIAA4CzAAOAtAADgLUAA4C3AAOAuQADgLoAA4C7AAOAvQADgL4AA4D9AAOA/wADgQEAA4EDAAOBBgADgQcAA4EIAAOBCQADgQoAA4EMAAOBDgADgQ8AA4EQAAOBEgADgRMAA4FSAAOBVAADgVYAA4FYAAOBWwADgVwAA4FdAAOBXgADgV8AA4FhAAOBYwADgWQAA4FlAAOBZwADgWgAA4GzAAOB1gADgfYAA4IWAAOCGAADghoAA4IcAAOCHgADgiEAA4IiAAOCIwADgiYAA4InAAOCKQADgioAA4IsAAOCLwADgjAAA4IxAAOCNAADgjUAA4I6AAOCRwADgkwAA4JOAAOCUAADglUAA4JYAAOCWwADgl0AA4KCAAOCpgADgs0AA4LxAAOC9AADgvYAA4L4AAOC+gADgvwAA4L+AAOC/wADgwIAA4MPAAODIAADgyIAA4MkAAODJgADgygAA4MqAAODLAADgy4AA4MwAAODQQADg0QAA4NHAAODSgADg00AA4NQAAODUwADg1YAA4NZAAODWwADg5oAA4OcAAODngADg6AAA4OjAAODpAADg6UAA4OmAAODpwADg6kAA4OrAAODrAADg60AA4OvAAODsAADg+8AA4PxAAOD8wADg/UAA4P4AAOD+QADg/oAA4P7AAOD/AADg/4AA4QAAAOEAQADhAIAA4QEAAOEBQADhEQAA4RGAAOESQADhEsAA4ROAAOETwADhFAAA4RRAAOEUgADhFQAA4RWAAOEVwADhFgAA4RaAAOEWwADhGgAA4RpAAOEagADhGwAA4SrAAOErQADhK8AA4SxAAOEtAADhLUAA4S2AAOEtwADhLgAA4S6AAOEvAADhL0AA4S+AAOEwAADhMEAA4UAAAOFAgADhQQAA4UGAAOFCQADhQoAA4ULAAOFDAADhQ0AA4UPAAOFEQADhRIAA4UTAAOFFQADhRYAA4VVAAOFVwADhVkAA4VbAAOFXgADhV8AA4VgAAOFYQADhWIAA4VkAAOFZgADhWcAA4VoAAOFagADhWsAA4WqAAOFrAADha4AA4WwAAOFswADhbQAA4W1AAOFtgADhbcAA4W5AAOFuwADhbwAA4W9AAOFvwADhcAAA4X/AAOGAQADhgMAA4YFAAOGCAADhgkAA4YKAAOGCwADhgwAA4YOAAOGEAADhhEAA4YSAAOGFAADhhUAA4Y6AAOGXgADhoUAA4apAAOGrAADhq4AA4awAAOGsgADhrQAA4a2AAOGtwADhroAA4bHAAOG1gADhtgAA4baAAOG3AADht4AA4bgAAOG4gADhuQAA4bzAAOG9gADhvkAA4b8AAOG/wADhwIAA4cFAAOHCAADhwoAA4dJAAOHSwADh00AA4dPAAOHUgADh1MAA4dUAAOHVQADh1YAA4dYAAOHWgADh1sAA4dcAAOHXgADh18AA4eeAAOHoAADh6IAA4ekAAOHpwADh6gAA4epAAOHqgADh6sAA4etAAOHrwADh7AAA4exAAOHswADh7QAA4fzAAOH9QADh/cAA4f5AAOH/AADh/0AA4f+AAOH/wADiAAAA4gCAAOIBAADiAUAA4gGAAOICAADiAkAA4hIAAOISgADiE0AA4hPAAOIUgADiFMAA4hUAAOIVQADiFYAA4hYAAOIWgADiFsAA4hcAAOIXgADiF8AA4hiAAOIoQADiKMAA4ilAAOIpwADiKoAA4irAAOIrAADiK0AA4iuAAOIsAADiLIAA4izAAOItAADiLYAA4i3AAOI9gADiPgAA4j6AAOI/AADiP8AA4kAAAOJAQADiQIAA4kDAAOJBQADiQcAA4kIAAOJCQADiQsAA4kMAAOJSwADiU0AA4lPAAOJUQADiVQAA4lVAAOJVgADiVcAA4lYAAOJWgADiVwAA4ldAAOJXgADiWAAA4lhAAOJrAADic8AA4nvAAOKDwADihEAA4oTAAOKFQADihcAA4oaAAOKGwADihwAA4ofAAOKIAADiiIAA4ojAAOKJQADiigAA4opAAOKKgADii0AA4ouAAOKMwADikAAA4pFAAOKRwADikkAA4pOAAOKUQADilQAA4pWAAOKewADip8AA4rGAAOK6gADiu0AA4rvAAOK8QADivMAA4r1AAOK9wADivgAA4r7AAOLCAADixkAA4sbAAOLHQADix8AA4shAAOLIwADiyUAA4snAAOLKQADizoAA4s9AAOLQAADi0MAA4tGAAOLSQADi0wAA4tPAAOLUgADi1QAA4uTAAOLlQADi5cAA4uZAAOLnAADi50AA4ueAAOLnwADi6AAA4uiAAOLpAADi6UAA4umAAOLqAADi6kAA4voAAOL6gADi+wAA4vuAAOL8QADi/IAA4vzAAOL9AADi/UAA4v3AAOL+QADi/oAA4v7AAOL/QADi/4AA4w9AAOMPwADjEIAA4xEAAOMRwADjEgAA4xJAAOMSgADjEsAA4xNAAOMTwADjFAAA4xRAAOMUwADjFQAA4xhAAOMYgADjGMAA4xlAAOMpAADjKYAA4yoAAOMqgADjK0AA4yuAAOMrwADjLAAA4yxAAOMswADjLUAA4y2AAOMtwADjLkAA4y6AAOM+QADjPsAA4z9AAOM/wADjQIAA40DAAONBAADjQUAA40GAAONCAADjQoAA40LAAONDAADjQ4AA40PAAONTgADjVAAA41SAAONVAADjVcAA41YAAONWQADjVoAA41bAAONXQADjV8AA41gAAONYQADjWMAA41kAAONowADjaUAA42nAAONqQADjawAA42tAAONrgADja8AA42wAAONsgADjbQAA421AAONtgADjbgAA425AAON+AADjfoAA438AAON/gADjgEAA44CAAOOAwADjgQAA44FAAOOBwADjgkAA44KAAOOCwADjg0AA44OAAOOMwADjlcAA45+AAOOogADjqUAA46nAAOOqQADjqsAA46tAAOOrwADjrAAA46zAAOOwAADjs8AA47RAAOO0wADjtUAA47XAAOO2QADjtsAA47dAAOO7AADju8AA47yAAOO9QADjvgAA477AAOO/gADjwEAA48DAAOPQgADj0QAA49GAAOPSAADj0sAA49MAAOPTQADj04AA49PAAOPUQADj1MAA49UAAOPVQADj1cAA49YAAOPlwADj5kAA4+bAAOPnQADj6AAA4+hAAOPogADj6MAA4+kAAOPpgADj6gAA4+pAAOPqgADj6wAA4+tAAOP7AADj+4AA4/wAAOP8gADj/UAA4/2AAOP9wADj/gAA4/5AAOP+wADj/0AA4/+AAOP/wADkAEAA5ACAAOQQQADkEMAA5BGAAOQSAADkEsAA5BMAAOQTQADkE4AA5BPAAOQUQADkFMAA5BUAAOQVQADkFcAA5BYAAOQlwADkJkAA5CbAAOQnQADkKAAA5ChAAOQogADkKMAA5CkAAOQpgADkKgAA5CpAAOQqgADkKwAA5CtAAOQ7AADkO4AA5DwAAOQ8gADkPUAA5D2AAOQ9wADkPgAA5D5AAOQ+wADkP0AA5D+AAOQ/wADkQEAA5ECAAORQQADkUMAA5FFAAORRwADkUoAA5FLAAORTAADkU0AA5FOAAORUAADkVIAA5FTAAORVAADkVYAA5FXAAORogADkcUAA5HlAAOSBQADkgcAA5IJAAOSCwADkg0AA5IQAAOSEQADkhIAA5IVAAOSFgADkhgAA5IZAAOSGwADkh4AA5IfAAOSIAADkiMAA5IkAAOSKQADkjYAA5I7AAOSPQADkj8AA5JEAAOSRwADkkoAA5JMAAOScQADkpUAA5K8AAOS4AADkuMAA5LlAAOS5wADkukAA5LrAAOS7QADku4AA5LxAAOS/gADkw8AA5MRAAOTEwADkxUAA5MXAAOTGQADkxsAA5MdAAOTHwADkzAAA5MzAAOTNgADkzkAA5M8AAOTPwADk0IAA5NFAAOTSAADk0oAA5OJAAOTiwADk40AA5OPAAOTkgADk5MAA5OUAAOTlQADk5YAA5OYAAOTmgADk5sAA5OcAAOTngADk58AA5PeAAOT4AADk+IAA5PkAAOT5wADk+gAA5PpAAOT6gADk+sAA5PtAAOT7wADk/AAA5PxAAOT8wADk/QAA5QzAAOUNQADlDgAA5Q6AAOUPQADlD4AA5Q/AAOUQAADlEEAA5RDAAOURQADlEYAA5RHAAOUSQADlEoAA5RXAAOUWAADlFkAA5RbAAOUmgADlJwAA5SeAAOUoAADlKMAA5SkAAOUpQADlKYAA5SnAAOUqQADlKsAA5SsAAOUrQADlK8AA5SwAAOU7wADlPEAA5TzAAOU9QADlPgAA5T5AAOU+gADlPsAA5T8AAOU/gADlQAAA5UBAAOVAgADlQQAA5UFAAOVRAADlUYAA5VIAAOVSgADlU0AA5VOAAOVTwADlVAAA5VRAAOVUwADlVUAA5VWAAOVVwADlVkAA5VaAAOVmQADlZsAA5WdAAOVnwADlaIAA5WjAAOVpAADlaUAA5WmAAOVqAADlaoAA5WrAAOVrAADla4AA5WvAAOV7gADlfAAA5XyAAOV9AADlfcAA5X4AAOV+QADlfoAA5X7AAOV/QADlf8AA5YAAAOWAQADlgMAA5YEAAOWKQADlk0AA5Z0AAOWmAADlpsAA5adAAOWnwADlqEAA5ajAAOWpQADlqYAA5apAAOWtgADlsUAA5bHAAOWyQADlssAA5bNAAOWzwADltEAA5bTAAOW4gADluUAA5boAAOW6wADlu4AA5bxAAOW9AADlvcAA5b5AAOXOAADlzoAA5c8AAOXPgADl0EAA5dCAAOXQwADl0QAA5dFAAOXRwADl0kAA5dKAAOXSwADl00AA5dOAAOXjQADl48AA5eRAAOXkwADl5YAA5eXAAOXmAADl5kAA5eaAAOXnAADl54AA5efAAOXoAADl6IAA5ejAAOX4gADl+QAA5fmAAOX6AADl+sAA5fsAAOX7QADl+4AA5fvAAOX8QADl/MAA5f0AAOX9QADl/cAA5f4AAOYNwADmDkAA5g7AAOYPQADmEAAA5hBAAOYQgADmEMAA5hEAAOYRgADmEgAA5hJAAOYSgADmEwAA5hNAAOYjAADmI4AA5iQAAOYkgADmJUAA5iWAAOYlwADmJgAA5iZAAOYmwADmJ0AA5ieAAOYnwADmKEAA5iiAAOY4QADmOMAA5jlAAOY5wADmOoAA5jrAAOY7AADmO0AA5juAAOY8AADmPIAA5jzAAOY9AADmPYAA5j3AAOZNgADmTgAA5k6AAOZPAADmT8AA5lAAAOZQQADmUIAA5lDAAOZRQADmUcAA5lIAAOZSQADmUsAA5lMAAOZVQADmVYAA5lYAAOZmwADmb8AA5njAAOaBgADmi0AA5pNAAOadAADmpsAA5q7AAOa3wADmwMAA5sFAAObCAADmwoAA5sMAAObDgADmxEAA5sTAAObFQADmxcAA5sZAAObGwADmx0AA5sgAAObIwADmyQAA5spAAObNgADmzkAA5s7AAObPgADm0EAA5tDAAObaAADm4wAA5uzAAOb1wADm9oAA5vcAAOb3gADm+AAA5viAAOb5AADm+UAA5voAAOb9QADnAgAA5wKAAOcDAADnA4AA5wQAAOcEgADnBQAA5wWAAOcGAADnBoAA5wtAAOcMAADnDMAA5w2AAOcOQADnDwAA5w/AAOcQgADnEUAA5xIAAOcSgADnIkAA5yLAAOcjgADnJAAA5yTAAOclAADnJUAA5yWAAOclwADnJkAA5ybAAOcnAADnJ0AA5yfAAOcoAADnKkAA5yqAAOcrAADnOsAA5ztAAOc7wADnPEAA5z0AAOc9QADnPYAA5z3AAOc+AADnPoAA5z8AAOc/QADnP4AA50AAAOdAQADnUAAA51CAAOdRQADnUcAA51KAAOdSwADnUwAA51NAAOdTgADnVAAA51SAAOdUwADnVQAA51WAAOdVwADnWAAA51hAAOdYwADnaIAA52kAAOdpgADnagAA52rAAOdrAADna0AA52uAAOdrwADnbEAA52zAAOdtAADnbUAA523AAOduAADnfcAA535AAOd/AADnf4AA54BAAOeAgADngMAA54EAAOeBQADngcAA54JAAOeCgADngsAA54NAAOeDgADnhcAA54YAAOeGgADnlkAA55bAAOeXQADnl8AA55iAAOeYwADnmQAA55lAAOeZgADnmgAA55qAAOeawADnmwAA55uAAOebwADnq4AA56wAAOeswADnrUAA564AAOeuQADnroAA567AAOevAADnr4AA57AAAOewQADnsIAA57EAAOexQADntIAA57TAAOe1AADntYAA58VAAOfFwADnxkAA58bAAOfHgADnx8AA58gAAOfIQADnyIAA58kAAOfJgADnycAA58oAAOfKgADnysAA59qAAOfbAADn28AA59xAAOfdAADn3UAA592AAOfdwADn3gAA596AAOffAADn30AA59+AAOfgAADn4EAA5+MAAOfmQADn6IAA5+lAAOfqAADn6sAA5+uAAOftwADn7oAA5+9AAOfwAADn8MAA5/FAAOfzQADn9UAA6AgAAOgQwADoGMAA6CDAAOghQADoIcAA6CJAAOgiwADoI4AA6CPAAOgkAADoJMAA6CUAAOglgADoJcAA6CZAAOgnAADoJ0AA6CeAAOgoQADoKIAA6CnAAOgtAADoLkAA6C7AAOgvQADoMIAA6DFAAOgyAADoMoAA6DvAAOhEwADoToAA6FeAAOhYQADoWMAA6FlAAOhZwADoWkAA6FrAAOhbAADoW8AA6F8AAOhjQADoY8AA6GRAAOhkwADoZUAA6GXAAOhmQADoZsAA6GdAAOhrgADobEAA6G0AAOhtwADoboAA6G9AAOhwAADocMAA6HGAAOhyAADogcAA6IJAAOiCwADog0AA6IQAAOiEQADohIAA6ITAAOiFAADohYAA6IYAAOiGQADohoAA6IcAAOiHQADolwAA6JeAAOiYAADomIAA6JlAAOiZgADomcAA6JoAAOiaQADomsAA6JtAAOibgADom8AA6JxAAOicgADorEAA6KzAAOitgADorgAA6K7AAOivAADor0AA6K+AAOivwADosEAA6LDAAOixAADosUAA6LHAAOiyAADotUAA6LWAAOi1wADotkAA6MYAAOjGgADoxwAA6MeAAOjIQADoyIAA6MjAAOjJAADoyUAA6MnAAOjKQADoyoAA6MrAAOjLQADoy4AA6NtAAOjbwADo3EAA6NzAAOjdgADo3cAA6N4AAOjeQADo3oAA6N8AAOjfgADo38AA6OAAAOjggADo4MAA6PCAAOjxAADo8YAA6PIAAOjywADo8wAA6PNAAOjzgADo88AA6PRAAOj0wADo9QAA6PVAAOj1wADo9gAA6QXAAOkGQADpBsAA6QdAAOkIAADpCEAA6QiAAOkIwADpCQAA6QmAAOkKAADpCkAA6QqAAOkLAADpC0AA6RsAAOkbgADpHAAA6RyAAOkdQADpHYAA6R3AAOkeAADpHkAA6R7AAOkfQADpH4AA6R/AAOkgQADpIIAA6SnAAOkywADpPIAA6UWAAOlGQADpRsAA6UdAAOlHwADpSEAA6UjAAOlJAADpScAA6U0AAOlQwADpUUAA6VHAAOlSQADpUsAA6VNAAOlTwADpVEAA6VgAAOlYwADpWYAA6VpAAOlbAADpW8AA6VyAAOldQADpXcAA6W2AAOluAADpboAA6W8AAOlvwADpcAAA6XBAAOlwgADpcMAA6XFAAOlxwADpcgAA6XJAAOlywADpcwAA6YLAAOmDQADpg8AA6YRAAOmFAADphUAA6YWAAOmFwADphgAA6YaAAOmHAADph0AA6YeAAOmIAADpiEAA6ZgAAOmYgADpmQAA6ZmAAOmaQADpmoAA6ZrAAOmbAADpm0AA6ZvAAOmcQADpnIAA6ZzAAOmdQADpnYAA6a1AAOmtwADprkAA6a7AAOmvgADpr8AA6bAAAOmwQADpsIAA6bEAAOmxgADpscAA6bIAAOmygADpssAA6cKAAOnDAADpw4AA6cQAAOnEwADpxQAA6cVAAOnFgADpxcAA6cZAAOnGwADpxwAA6cdAAOnHwADpyAAA6dfAAOnYQADp2MAA6dlAAOnaAADp2kAA6dqAAOnawADp2wAA6duAAOncAADp3EAA6dyAAOndAADp3UAA6e0AAOntgADp7gAA6e6AAOnvQADp74AA6e/AAOnwAADp8EAA6fDAAOnxQADp8YAA6fHAAOnyQADp8oAA6gVAAOoOAADqFgAA6h4AAOoegADqHwAA6h+AAOogAADqIMAA6iEAAOohQADqIgAA6iJAAOoiwADqIwAA6iOAAOokQADqJIAA6iTAAOolgADqJcAA6icAAOoqQADqK4AA6iwAAOosgADqLcAA6i6AAOovQADqL8AA6jkAAOpCAADqS8AA6lTAAOpVgADqVgAA6laAAOpXAADqV4AA6lgAAOpYQADqWQAA6lxAAOpggADqYQAA6mGAAOpiAADqYoAA6mMAAOpjgADqZAAA6mSAAOpowADqaYAA6mpAAOprAADqa8AA6myAAOptQADqbgAA6m7AAOpvQADqfwAA6n+AAOqAAADqgIAA6oFAAOqBgADqgcAA6oIAAOqCQADqgsAA6oNAAOqDgADqg8AA6oRAAOqEgADqlEAA6pTAAOqVQADqlcAA6paAAOqWwADqlwAA6pdAAOqXgADqmAAA6piAAOqYwADqmQAA6pmAAOqZwADqqYAA6qoAAOqqwADqq0AA6qwAAOqsQADqrIAA6qzAAOqtAADqrYAA6q4AAOquQADqroAA6q8AAOqvQADqsoAA6rLAAOqzAADqs4AA6sNAAOrDwADqxEAA6sTAAOrFgADqxcAA6sYAAOrGQADqxoAA6scAAOrHgADqx8AA6sgAAOrIgADqyMAA6tiAAOrZAADq2YAA6toAAOrawADq2wAA6ttAAOrbgADq28AA6txAAOrcwADq3QAA6t1AAOrdwADq3gAA6u3AAOruQADq7sAA6u9AAOrwAADq8EAA6vCAAOrwwADq8QAA6vGAAOryAADq8kAA6vKAAOrzAADq80AA6wMAAOsDgADrBAAA6wSAAOsFQADrBYAA6wXAAOsGAADrBkAA6wbAAOsHQADrB4AA6wfAAOsIQADrCIAA6xhAAOsYwADrGUAA6xnAAOsagADrGsAA6xsAAOsbQADrG4AA6xwAAOscgADrHMAA6x0AAOsdgADrHcAA6ycAAOswAADrOcAA60LAAOtDgADrRAAA60SAAOtFAADrRYAA60YAAOtGQADrRwAA60pAAOtOAADrToAA608AAOtPgADrUAAA61CAAOtRAADrUYAA61VAAOtWAADrVsAA61eAAOtYQADrWQAA61nAAOtagADrWwAA62rAAOtrQADra8AA62xAAOttAADrbUAA622AAOttwADrbgAA626AAOtvAADrb0AA62+AAOtwAADrcEAA64AAAOuAgADrgQAA64GAAOuCQADrgoAA64LAAOuDAADrg0AA64PAAOuEQADrhIAA64TAAOuFQADrhYAA65VAAOuVwADrlkAA65bAAOuXgADrl8AA65gAAOuYQADrmIAA65kAAOuZgADrmcAA65oAAOuagADrmsAA66qAAOurAADrq4AA66wAAOuswADrrQAA661AAOutgADrrcAA665AAOuuwADrrwAA669AAOuvwADrsAAA67/AAOvAQADrwMAA68FAAOvCAADrwkAA68KAAOvCwADrwwAA68OAAOvEAADrxEAA68SAAOvFAADrxUAA69UAAOvVgADr1gAA69aAAOvXQADr14AA69fAAOvYAADr2EAA69jAAOvZQADr2YAA69nAAOvaQADr2oAA6+pAAOvqwADr60AA6+vAAOvsgADr7MAA6+0AAOvtQADr7YAA6+4AAOvugADr7sAA6+8AAOvvgADr78AA7AKAAOwLQADsE0AA7BtAAOwbwADsHEAA7BzAAOwdQADsHgAA7B5AAOwegADsH0AA7B+AAOwgAADsIEAA7CDAAOwhgADsIcAA7CIAAOwiwADsIwAA7CRAAOwngADsKMAA7ClAAOwpwADsKwAA7CvAAOwsgADsLQAA7DZAAOw/QADsSQAA7FIAAOxSwADsU0AA7FPAAOxUQADsVMAA7FVAAOxVgADsVkAA7FmAAOxdwADsXkAA7F7AAOxfQADsX8AA7GBAAOxgwADsYUAA7GHAAOxmAADsZsAA7GeAAOxoQADsaQAA7GnAAOxqgADsa0AA7GwAAOxsgADsfEAA7HzAAOx9QADsfcAA7H6AAOx+wADsfwAA7H9AAOx/gADsgAAA7ICAAOyAwADsgQAA7IGAAOyBwADskYAA7JIAAOySgADskwAA7JPAAOyUAADslEAA7JSAAOyUwADslUAA7JXAAOyWAADslkAA7JbAAOyXAADspsAA7KdAAOyoAADsqIAA7KlAAOypgADsqcAA7KoAAOyqQADsqsAA7KtAAOyrgADsq8AA7KxAAOysgADsr8AA7LAAAOywQADssMAA7MCAAOzBAADswYAA7MIAAOzCwADswwAA7MNAAOzDgADsw8AA7MRAAOzEwADsxQAA7MVAAOzFwADsxgAA7NXAAOzWQADs1sAA7NdAAOzYAADs2EAA7NiAAOzYwADs2QAA7NmAAOzaAADs2kAA7NqAAOzbAADs20AA7OsAAOzrgADs7AAA7OyAAOztQADs7YAA7O3AAOzuAADs7kAA7O7AAOzvQADs74AA7O/AAOzwQADs8IAA7QBAAO0AwADtAUAA7QHAAO0CgADtAsAA7QMAAO0DQADtA4AA7QQAAO0EgADtBMAA7QUAAO0FgADtBcAA7RWAAO0WAADtFoAA7RcAAO0XwADtGAAA7RhAAO0YgADtGMAA7RlAAO0ZwADtGgAA7RpAAO0awADtGwAA7SRAAO0tQADtNwAA7UAAAO1AwADtQUAA7UHAAO1CQADtQsAA7UNAAO1DgADtREAA7UeAAO1LQADtS8AA7UxAAO1MwADtTUAA7U3AAO1OQADtTsAA7VKAAO1TQADtVAAA7VTAAO1VgADtVkAA7VcAAO1XwADtWEAA7WgAAO1ogADtaQAA7WmAAO1qQADtaoAA7WrAAO1rAADta0AA7WvAAO1sQADtbIAA7WzAAO1tQADtbYAA7X1AAO19wADtfkAA7X7AAO1/gADtf8AA7YAAAO2AQADtgIAA7YEAAO2BgADtgcAA7YIAAO2CgADtgsAA7ZKAAO2TAADtk4AA7ZQAAO2UwADtlQAA7ZVAAO2VgADtlcAA7ZZAAO2WwADtlwAA7ZdAAO2XwADtmAAA7afAAO2oQADtqMAA7alAAO2qAADtqkAA7aqAAO2qwADtqwAA7auAAO2sAADtrEAA7ayAAO2tAADtrUAA7b0AAO29gADtvgAA7b6AAO2/QADtv4AA7b/AAO3AAADtwEAA7cDAAO3BQADtwYAA7cHAAO3CQADtwoAA7dJAAO3SwADt00AA7dPAAO3UgADt1MAA7dUAAO3VQADt1YAA7dYAAO3WgADt1sAA7dcAAO3XgADt18AA7eeAAO3oAADt6IAA7ekAAO3pwADt6gAA7epAAO3qgADt6sAA7etAAO3rwADt7AAA7exAAO3swADt7QAA7f/AAO4IgADuEIAA7hiAAO4ZAADuGYAA7hoAAO4agADuG0AA7huAAO4bwADuHIAA7hzAAO4dQADuHYAA7h4AAO4ewADuHwAA7h9AAO4gAADuIEAA7iGAAO4kwADuJgAA7iaAAO4nAADuKEAA7ikAAO4pwADuKkAA7jOAAO48gADuRkAA7k9AAO5QAADuUIAA7lEAAO5RgADuUgAA7lKAAO5SwADuU4AA7lbAAO5bAADuW4AA7lwAAO5cgADuXQAA7l2AAO5eAADuXoAA7l8AAO5jQADuZAAA7mTAAO5lgADuZkAA7mcAAO5nwADuaIAA7mlAAO5pwADueYAA7noAAO56gADuewAA7nvAAO58AADufEAA7nyAAO58wADufUAA7n3AAO5+AADufkAA7n7AAO5/AADujsAA7o9AAO6PwADukEAA7pEAAO6RQADukYAA7pHAAO6SAADukoAA7pMAAO6TQADuk4AA7pQAAO6UQADupAAA7qSAAO6lQADupcAA7qaAAO6mwADupwAA7qdAAO6ngADuqAAA7qiAAO6owADuqQAA7qmAAO6pwADurQAA7q1AAO6tgADurgAA7r3AAO6+QADuvsAA7r9AAO7AAADuwEAA7sCAAO7AwADuwQAA7sGAAO7CAADuwkAA7sKAAO7DAADuw0AA7tMAAO7TgADu1AAA7tSAAO7VQADu1YAA7tXAAO7WAADu1kAA7tbAAO7XQADu14AA7tfAAO7YQADu2IAA7uhAAO7owADu6UAA7unAAO7qgADu6sAA7usAAO7rQADu64AA7uwAAO7sgADu7MAA7u0AAO7tgADu7cAA7v2AAO7+AADu/oAA7v8AAO7/wADvAAAA7wBAAO8AgADvAMAA7wFAAO8BwADvAgAA7wJAAO8CwADvAwAA7xLAAO8TQADvE8AA7xRAAO8VAADvFUAA7xWAAO8VwADvFgAA7xaAAO8XAADvF0AA7xeAAO8YAADvGEAA7yGAAO8qgADvNEAA7z1AAO8+AADvPoAA7z8AAO8/gADvQAAA70CAAO9AwADvQYAA70TAAO9IgADvSQAA70mAAO9KAADvSoAA70sAAO9LgADvTAAA70/AAO9QgADvUUAA71IAAO9SwADvU4AA71RAAO9VAADvVYAA72VAAO9lwADvZkAA72bAAO9ngADvZ8AA72gAAO9oQADvaIAA72kAAO9pgADvacAA72oAAO9qgADvasAA73qAAO97AADve4AA73wAAO98wADvfQAA731AAO99gADvfcAA735AAO9+wADvfwAA739AAO9/wADvgAAA74/AAO+QQADvkMAA75FAAO+SAADvkkAA75KAAO+SwADvkwAA75OAAO+UAADvlEAA75SAAO+VAADvlUAA76UAAO+lgADvpgAA76aAAO+nQADvp4AA76fAAO+oAADvqEAA76jAAO+pQADvqYAA76nAAO+qQADvqoAA77pAAO+6wADvu0AA77vAAO+8gADvvMAA770AAO+9QADvvYAA774AAO++gADvvsAA778AAO+/gADvv8AA78+AAO/QAADv0IAA79EAAO/RwADv0gAA79JAAO/SgADv0sAA79NAAO/TwADv1AAA79RAAO/UwADv1QAA7+TAAO/lQADv5cAA7+ZAAO/nAADv50AA7+eAAO/nwADv6AAA7+iAAO/pAADv6UAA7+mAAO/qAADv6kAA7+yAAO/swADv7UAA7/4AAPAHAADwEAAA8BjAAPAigADwKoAA8DRAAPA+AADwRgAA8E8AAPBYAADwWIAA8FlAAPBZwADwWkAA8FrAAPBbgADwXAAA8FyAAPBdAADwXYAA8F4AAPBegADwX0AA8GAAAPBgQADwYYAA8GTAAPBlgADwZgAA8GbAAPBngADwaAAA8HFAAPB6QADwhAAA8I0AAPCNwADwjkAA8I7AAPCPQADwj8AA8JBAAPCQgADwkUAA8JSAAPCZQADwmcAA8JpAAPCawADwm0AA8JvAAPCcQADwnMAA8J1AAPCdwADwooAA8KNAAPCkAADwpMAA8KWAAPCmQADwpwAA8KfAAPCogADwqUAA8KnAAPC5gADwugAA8LrAAPC7QADwvAAA8LxAAPC8gADwvMAA8L0AAPC9gADwvgAA8L5AAPC+gADwvwAA8L9AAPDBgADwwcAA8MJAAPDSAADw0oAA8NMAAPDTgADw1EAA8NSAAPDUwADw1QAA8NVAAPDVwADw1kAA8NaAAPDWwADw10AA8NeAAPDnQADw58AA8OiAAPDpAADw6cAA8OoAAPDqQADw6oAA8OrAAPDrQADw68AA8OwAAPDsQADw7MAA8O0AAPDvQADw74AA8PAAAPD/wADxAEAA8QDAAPEBQADxAgAA8QJAAPECgADxAsAA8QMAAPEDgADxBAAA8QRAAPEEgADxBQAA8QVAAPEVAADxFYAA8RZAAPEWwADxF4AA8RfAAPEYAADxGEAA8RiAAPEZAADxGYAA8RnAAPEaAADxGoAA8RrAAPEdAADxHUAA8R3AAPEtgADxLgAA8S6AAPEvAADxL8AA8TAAAPEwQADxMIAA8TDAAPExQADxMcAA8TIAAPEyQADxMsAA8TMAAPFCwADxQ0AA8UQAAPFEgADxRUAA8UWAAPFFwADxRgAA8UZAAPFGwADxR0AA8UeAAPFHwADxSEAA8UiAAPFLwADxTAAA8UxAAPFMwADxXIAA8V0AAPFdgADxXgAA8V7AAPFfAADxX0AA8V+AAPFfwADxYEAA8WDAAPFhAADxYUAA8WHAAPFiAADxccAA8XJAAPFzAADxc4AA8XRAAPF0gADxdMAA8XUAAPF1QADxdcAA8XZAAPF2gADxdsAA8XdAAPF3gADxfkAA8YGAAPGHQADxiAAA8YjAAPGJgADxikAA8YsAAPGLwADxjIAA8Y1AAPGOAADxjsAA8Y+AAPGVQADxlgAA8ZbAAPGXgADxmEAA8ZkAAPGZwADxmoAA8ZtAAPGcAADxnMAA8Z2AAPGeAADxn8AA8aGAAPGjwADxpQAA8afAAPGqwADxrQAA8a4AAPGwgADxsoAA8cVAAPHOAADx1gAA8d4AAPHegADx3wAA8d+AAPHgAADx4MAA8eEAAPHhQADx4gAA8eJAAPHiwADx4wAA8eOAAPHkQADx5IAA8eTAAPHlgADx5cAA8ecAAPHqQADx64AA8ewAAPHsgADx7cAA8e6AAPHvQADx78AA8fkAAPICAADyC8AA8hTAAPIVgADyFgAA8haAAPIXAADyF4AA8hgAAPIYQADyGQAA8hxAAPIggADyIQAA8iGAAPIiAADyIoAA8iMAAPIjgADyJAAA8iSAAPIowADyKYAA8ipAAPIrAADyK8AA8iyAAPItQADyLgAA8i7AAPIvQADyPwAA8j+AAPJAAADyQIAA8kFAAPJBgADyQcAA8kIAAPJCQADyQsAA8kNAAPJDgADyQ8AA8kRAAPJEgADyVEAA8lTAAPJVQADyVcAA8laAAPJWwADyVwAA8ldAAPJXgADyWAAA8liAAPJYwADyWQAA8lmAAPJZwADyaYAA8moAAPJqwADya0AA8mwAAPJsQADybIAA8mzAAPJtAADybYAA8m4AAPJuQADyboAA8m8AAPJvQADycoAA8nLAAPJzAADyc4AA8oNAAPKDwADyhEAA8oTAAPKFgADyhcAA8oYAAPKGQADyhoAA8ocAAPKHgADyh8AA8ogAAPKIgADyiMAA8piAAPKZAADymYAA8poAAPKawADymwAA8ptAAPKbgADym8AA8pxAAPKcwADynQAA8p1AAPKdwADyngAA8q3AAPKuQADyrsAA8q9AAPKwAADysEAA8rCAAPKwwADysQAA8rGAAPKyAADyskAA8rKAAPKzAADys0AA8sMAAPLDgADyxAAA8sSAAPLFQADyxYAA8sXAAPLGAADyxkAA8sbAAPLHQADyx4AA8sfAAPLIQADyyIAA8thAAPLYwADy2UAA8tnAAPLagADy2sAA8tsAAPLbQADy24AA8twAAPLcgADy3MAA8t0AAPLdgADy3cAA8ucAAPLwAADy+cAA8wLAAPMDgADzBAAA8wSAAPMFAADzBYAA8wYAAPMGQADzBwAA8wpAAPMOAADzDoAA8w8AAPMPgADzEAAA8xCAAPMRAADzEYAA8xVAAPMWAADzFsAA8xeAAPMYQADzGQAA8xnAAPMagADzGwAA8yrAAPMrQADzK8AA8yxAAPMtAADzLUAA8y2AAPMtwADzLgAA8y6AAPMvAADzL0AA8y+AAPMwAADzMEAA80AAAPNAgADzQQAA80GAAPNCQADzQoAA80LAAPNDAADzQ0AA80PAAPNEQADzRIAA80TAAPNFQADzRYAA81VAAPNVwADzVkAA81bAAPNXgADzV8AA81gAAPNYQADzWIAA81kAAPNZgADzWcAA81oAAPNagADzWsAA82qAAPNrAADza4AA82wAAPNswADzbQAA821AAPNtgADzbcAA825AAPNuwADzbwAA829AAPNvwADzcAAA83/AAPOAQADzgMAA84FAAPOCAADzgkAA84KAAPOCwADzgwAA84OAAPOEAADzhEAA84SAAPOFAADzhUAA85UAAPOVgADzlgAA85aAAPOXQADzl4AA85fAAPOYAADzmEAA85jAAPOZQADzmYAA85nAAPOaQADzmoAA86pAAPOqwADzq0AA86vAAPOsgADzrMAA860AAPOtQADzrYAA864AAPOugADzrsAA868AAPOvgADzr8AA88KAAPPLQADz00AA89tAAPPbwADz3EAA89zAAPPdQADz3gAA895AAPPegADz30AA89+AAPPgAADz4EAA8+DAAPPhgADz4cAA8+IAAPPiwADz4wAA8+RAAPPngADz6MAA8+lAAPPpwADz6wAA8+vAAPPsgADz7QAA8/ZAAPP/QAD0CQAA9BIAAPQSwAD0E0AA9BPAAPQUQAD0FMAA9BVAAPQVgAD0FkAA9BmAAPQdwAD0HkAA9B7AAPQfQAD0H8AA9CBAAPQgwAD0IUAA9CHAAPQmAAD0JsAA9CeAAPQoQAD0KQAA9CnAAPQqgAD0K0AA9CwAAPQsgAD0PEAA9DzAAPQ9QAD0PcAA9D6AAPQ+wAD0PwAA9D9AAPQ/gAD0QAAA9ECAAPRAwAD0QQAA9EGAAPRBwAD0UYAA9FIAAPRSgAD0UwAA9FPAAPRUAAD0VEAA9FSAAPRUwAD0VUAA9FXAAPRWAAD0VkAA9FbAAPRXAAD0ZsAA9GdAAPRoAAD0aIAA9GlAAPRpgAD0acAA9GoAAPRqQAD0asAA9GtAAPRrgAD0a8AA9GxAAPRsgAD0b8AA9HAAAPRwQAD0cMAA9ICAAPSBAAD0gYAA9IIAAPSCwAD0gwAA9INAAPSDgAD0g8AA9IRAAPSEwAD0hQAA9IVAAPSFwAD0hgAA9JXAAPSWQAD0lsAA9JdAAPSYAAD0mEAA9JiAAPSYwAD0mQAA9JmAAPSaAAD0mkAA9JqAAPSbAAD0m0AA9KsAAPSrgAD0rAAA9KyAAPStQAD0rYAA9K3AAPSuAAD0rkAA9K7AAPSvQAD0r4AA9K/AAPSwQAD0sIAA9MBAAPTAwAD0wUAA9MHAAPTCgAD0wsAA9MMAAPTDQAD0w4AA9MQAAPTEgAD0xMAA9MUAAPTFgAD0xcAA9NWAAPTWAAD01oAA9NcAAPTXwAD02AAA9NhAAPTYgAD02MAA9NlAAPTZwAD02gAA9NpAAPTawAD02wAA9ORAAPTtQAD09wAA9QAAAPUAwAD1AUAA9QHAAPUCQAD1AsAA9QNAAPUDgAD1BEAA9QeAAPULQAD1C8AA9QxAAPUMwAD1DUAA9Q3AAPUOQAD1DsAA9RKAAPUTQAD1FAAA9RTAAPUVgAD1FkAA9RcAAPUXwAD1GEAA9SgAAPUogAD1KUAA9SnAAPUqgAD1KsAA9SsAAPUrQAD1K4AA9SwAAPUsgAD1LMAA9S0AAPUtgAD1LcAA9T2AAPU+AAD1PoAA9T8AAPU/wAD1QAAA9UBAAPVAgAD1QMAA9UFAAPVBwAD1QgAA9UJAAPVCwAD1QwAA9VLAAPVTQAD1U8AA9VRAAPVVAAD1VUAA9VWAAPVVwAD1VgAA9VaAAPVXAAD1V0AA9VeAAPVYAAD1WEAA9WgAAPVogAD1aUAA9WnAAPVqgAD1asAA9WsAAPVrQAD1a4AA9WwAAPVsgAD1bMAA9W0AAPVtgAD1bcAA9X2AAPV+AAD1foAA9X8AAPV/wAD1gAAA9YBAAPWAgAD1gMAA9YFAAPWBwAD1ggAA9YJAAPWCwAD1gwAA9ZLAAPWTQAD1k8AA9ZRAAPWVAAD1lUAA9ZWAAPWVwAD1lgAA9ZaAAPWXAAD1l0AA9ZeAAPWYAAD1mEAA9agAAPWogAD1qQAA9amAAPWqQAD1qoAA9arAAPWrAAD1q0AA9avAAPWsQAD1rIAA9azAAPWtQAD1rYAA9cBAAPXJAAD10QAA9dkAAPXZgAD12gAA9dqAAPXbAAD128AA9dwAAPXcQAD13QAA9d1AAPXdwAD13gAA9d6AAPXfQAD134AA9d/AAPXggAD14MAA9eIAAPXlQAD15oAA9ecAAPXngAD16MAA9emAAPXqQAD16sAA9fQAAPX9AAD2BsAA9g/AAPYQgAD2EQAA9hGAAPYSAAD2EoAA9hMAAPYTQAD2FAAA9hdAAPYbgAD2HAAA9hyAAPYdAAD2HYAA9h4AAPYegAD2HwAA9h+AAPYjwAD2JIAA9iVAAPYmAAD2JsAA9ieAAPYoQAD2KQAA9inAAPYqQAD2OgAA9jqAAPY7AAD2O4AA9jxAAPY8gAD2PMAA9j0AAPY9QAD2PcAA9j5AAPY+gAD2PsAA9j9AAPY/gAD2T0AA9k/AAPZQQAD2UMAA9lGAAPZRwAD2UgAA9lJAAPZSgAD2UwAA9lOAAPZTwAD2VAAA9lSAAPZUwAD2ZIAA9mUAAPZlwAD2ZkAA9mcAAPZnQAD2Z4AA9mfAAPZoAAD2aIAA9mkAAPZpQAD2aYAA9moAAPZqQAD2bYAA9m3AAPZuAAD2boAA9n5AAPZ+wAD2f0AA9n/AAPaAgAD2gM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AA+U2AAPlOAAD5ToAA+U8AAPlPwAD5UAAA+VBAAPlQgAD5UMAA+VFAAPlRwAD5UgAA+VJAAPlSwAD5UwAA+WLAAPljQAD5ZAAA+WSAAPllQAD5ZYAA+WXAAPlmAAD5ZkAA+WbAAPlnQAD5Z4AA+WfAAPloQAD5aIAA+XhAAPl4wAD5eUAA+XnAAPl6gAD5esAA+XsAAPl7QAD5e4AA+XwAAPl8gAD5fMAA+X0AAPl9gAD5fcAA+Y2AAPmOAAD5joAA+Y8AAPmPwAD5kAAA+ZBAAPmQgAD5kMAA+ZFAAPmRwAD5kgAA+ZJAAPmSwAD5kwAA+aLAAPmjQAD5o8AA+aRAAPmlAAD5pUAA+aWAAPmlwAD5pgAA+aaAAPmnAAD5p0AA+aeAAPmoAAD5qEAA+bsAAPnDwAD5y8AA+dPAAPnUQAD51MAA+dVAAPnVwAD51oAA+dbAAPnXAAD518AA+dgAAPnYgAD52MAA+dlAAPnaAAD52kAA+dqAAPnbQAD524AA+dzAAPngAAD54UAA+eHAAPniQAD544AA+eRAAPnlAAD55YAA+e7AAPn3wAD6AYAA+gqAAPoLQAD6C8AA+gxAAPoMwAD6DUAA+g3AAPoOAAD6DsAA+hIAAPoWQAD6FsAA+hdAAPoXwAD6GEAA+hjAAPoZQAD6GcAA+hpAAPoegAD6H0AA+iAAAPogwAD6IYAA+iJAAPojAAD6I8AA+iSAAPolAAD6NMAA+jVAAPo1wAD6NkAA+jcAAPo3QAD6N4AA+jfAAPo4AAD6OIAA+jkAAPo5QAD6OYAA+joAAPo6QAD6SgAA+kqAAPpLAAD6S4AA+kxAAPpMgAD6TMAA+k0AAPpNQAD6TcAA+k5AAPpOgAD6TsAA+k9AAPpPgAD6X0AA+l/AAPpggAD6YQAA+mHAAPpiAAD6YkAA+mKAAPpiwAD6Y0AA+mPAAPpkAAD6ZEAA+mTAAPplAAD6aEAA+miAAPpowAD6aUAA+nkAAPp5gAD6egAA+nqAAPp7QAD6e4AA+nvAAPp8AAD6fEAA+nzAAPp9QAD6fYAA+n3AAPp+QAD6foAA+o5AAPqOwAD6j0AA+o/AAPqQgAD6kMAA+pEAAPqRQAD6kYAA+pIAAPqSgAD6ksAA+pMAAPqTgAD6k8AA+qOAAPqkAAD6pIAA+qUAAPqlwAD6pgAA+qZAAPqmgAD6ps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AA/XTAAP11QAD9dgAA/XZAAP12gAD9dsAA/XcAAP13gAD9eAAA/XhAAP14gAD9eQAA/XlAAP2JAAD9iYAA/YoAAP2KgAD9i0AA/YuAAP2LwAD9jAAA/YxAAP2MwAD9jUAA/Y2AAP2NwAD9jkAA/Y6AAP2eQAD9nsAA/Z9AAP2fwAD9oIAA/aDAAP2hAAD9oUAA/aGAAP2iAAD9ooAA/aLAAP2jAAD9o4AA/aPAAP22gAD9v0AA/cdAAP3PQAD9z8AA/dBAAP3QwAD90UAA/dIAAP3SQAD90oAA/dNAAP3TgAD91AAA/dRAAP3UwAD91YAA/dXAAP3WAAD91sAA/dcAAP3YQAD924AA/dzAAP3dQAD93cAA/d8AAP3fwAD94IAA/eEAAP3qQAD980AA/f0AAP4GAAD+BsAA/gdAAP4HwAD+CEAA/gjAAP4JQAD+CYAA/gpAAP4NgAD+EcAA/hJAAP4SwAD+E0AA/hPAAP4UQAD+FMAA/hVAAP4VwAD+GgAA/hrAAP4bgAD+HEAA/h0AAP4dwAD+HoAA/h9AAP4gAAD+IIAA/jBAAP4wwAD+MUAA/jHAAP4ygAD+MsAA/jMAAP4zQAD+M4AA/jQAAP40gAD+NMAA/jUAAP41gAD+NcAA/kWAAP5GAAD+RoAA/kcAAP5HwAD+SAAA/khAAP5IgAD+SMAA/klAAP5JwAD+SgAA/kpAAP5KwAD+SwAA/lrAAP5bQAD+XAAA/lyAAP5dQAD+XYAA/l3AAP5eAAD+XkAA/l7AAP5fQAD+X4AA/l/AAP5gQAD+YIAA/mPAAP5kAAD+ZEAA/mTAAP50gAD+dQAA/nWAAP52AAD+dsAA/ncAAP53QAD+d4AA/nfAAP54QAD+eMAA/nkAAP55QAD+ecAA/noAAP6JwAD+ikAA/orAAP6LQAD+jAAA/oxAAP6MgAD+jMAA/o0AAP6NgAD+jgAA/o5AAP6OgAD+jwAA/o9AAP6fAAD+n4AA/qAAAP6ggAD+oUAA/qGAAP6hwAD+ogAA/qJAAP6iwAD+o0AA/qOAAP6jwAD+pEAA/qSAAP60QAD+tMAA/rVAAP61wAD+toAA/rbAAP63AAD+t0AA/reAAP64AAD+uIAA/rjAAP65AAD+uYAA/rnAAP7JgAD+ygAA/sqAAP7LAAD+y8AA/swAAP7MQAD+zIAA/szAAP7NQAD+zcAA/s4AAP7OQAD+zsAA/s8AAP7YQAD+4UAA/usAAP70AAD+9MAA/vVAAP71wAD+9kAA/vbAAP73QAD+94AA/vhAAP77gAD+/0AA/v/AAP8AQAD/AMAA/wFAAP8BwAD/AkAA/wLAAP8GgAD/B0AA/wgAAP8IwAD/CYAA/wpAAP8LAAD/C8AA/wxAAP8cAAD/HIAA/x0AAP8dgAD/HkAA/x6AAP8ewAD/HwAA/x9AAP8fwAD/IEAA/yCAAP8gwAD/IUAA/yGAAP8xQAD/McAA/zJAAP8ywAD/M4AA/zPAAP80AAD/NEAA/zSAAP81AAD/NYAA/zXAAP82AAD/NoAA/zbAAP9GgAD/RwAA/0eAAP9IAAD/SMAA/0kAAP9JQAD/SYAA/0nAAP9KQAD/SsAA/0sAAP9LQAD/S8AA/0wAAP9bwAD/XEAA/1zAAP9dQAD/XgAA/15AAP9egAD/XsAA/18AAP9fgAD/YAAA/2BAAP9ggAD/YQAA/2FAAP9xAAD/cYAA/3IAAP9ygAD/c0AA/3OAAP9zwAD/dAAA/3RAAP90wAD/dUAA/3WAAP91wAD/dkAA/3aAAP+GQAD/hsAA/4dAAP+HwAD/iIAA/4jAAP+JAAD/iUAA/4mAAP+KAAD/ioAA/4rAAP+LAAD/i4AA/4vAAP+bgAD/nAAA/5yAAP+dAAD/ncAA/54AAP+eQAD/noAA/57AAP+fQAD/n8AA/6AAAP+gQAD/oMAA/6EAAP+zwAD/vIAA/8SAAP/MgAD/zQAA/82AAP/OAAD/zoAA/89AAP/PgAD/z8AA/9CAAP/QwAD/0UAA/9GAAP/SAAD/0sAA/9MAAP/TQAD/1AAA/9RAAP/VgAD/2MAA/9oAAP/agAD/2wAA/9xAAP/dAAD/3cAA/95AAP/ngAD/8IAA//pAAQADQAEABAABAASAAQAFAAEABYABAAYAAQAGgAEABsABAAeAAQAKwAEADwABAA+AAQAQAAEAEIABABEAAQARgAEAEgABABKAAQATAAEAF0ABABgAAQAYwAEAGYABABpAAQAbAAEAG8ABAByAAQAdQAEAHcABAC2AAQAuAAEALoABAC8AAQAvwAEAMAABADBAAQAwgAEAMMABADFAAQAxwAEAMgABADJAAQAywAEAMwABAELAAQBDQAEAQ8ABAERAAQBFAAEARUABAEWAAQBFwAEARgABAEaAAQBHAAEAR0ABAEeAAQBIAAEASEABAFgAAQBYgAEAWUABAFnAAQBagAEAWsABAFsAAQBbQAEAW4ABAFwAAQBcgAEAXMABAF0AAQBdgAEAXcABAGEAAQBhQAEAYYABAGIAAQBxwAEAckABAHLAAQBzQAEAdAABAHRAAQB0gAEAdMABAHUAAQB1gAEAdgABAHZAAQB2gAEAdwABAHdAAQCHAAEAh4ABAIgAAQCIgAEAiUABAImAAQCJwAEAigABAIpAAQCKwAEAi0ABAIuAAQCLwAEAjEABAIyAAQCcQAEAnMABAJ1AAQCdwAEAnoABAJ7AAQCfAAEAn0ABAJ+AAQCgAAEAoIABAKDAAQChAAEAoYABAKHAAQCxgAEAsgABALKAAQCzAAEAs8ABALQAAQC0QAEAtIABALTAAQC1QAEAtcABALYAAQC2QAEAtsABALcAAQDGwAEAx0ABAMfAAQDIQAEAyQABAMlAAQDJgAEAycABAMoAAQDKgAEAywABAMtAAQDLgAEAzAABAMxAAQDVgAEA3oABAOhAAQDxQAEA8gABAPKAAQDzAAEA84ABAPQAAQD0gAEA9MABAPWAAQD4wAEA/IABAP0AAQD9gAEA/gABAP6AAQD/AAEA/4ABAQAAAQEDwAEBBIABAQVAAQEGAAEBBsABAQeAAQEIQAEBCQABAQmAAQEZQAEBGcABARpAAQEawAEBG4ABARvAAQEcAAEBHEABARyAAQEdAAEBHYABAR3AAQEeAAEBHoABAR7AAQEugAEBLwABAS+AAQEwAAEBMMABATEAAQExQAEBMYABATHAAQEyQAEBMsABATMAAQEzQAEBM8ABATQAAQFDwAEBREABAUTAAQFFQAEBRgABAUZAAQFGgAEBRsABAUcAAQFHgAEBSAABAUhAAQFIgAEBSQABAUlAAQFZAAEBWYABAVoAAQFagAEBW0ABAVuAAQFbwAEBXAABAVxAAQFcwAEBXUABAV2AAQFdwAEBXkABAV6AAQFuQAEBbsABAW9AAQFvwAEBcIABAXDAAQFxAAEBcUABAXGAAQFyAAEBcoABAXLAAQFzAAEBc4ABAXPAAQGDgAEBhAABAYSAAQGFAAEBhcABAYYAAQGGQAEBhoABAYbAAQGHQAEBh8ABAYgAAQGIQAEBiMABAYkAAQGYwAEBmUABAZnAAQGaQAEBmwABAZtAAQGbgAEBm8ABAZwAAQGcgAEBnQABAZ1AAQGdgAEBngABAZ5AAQGxAAEBucABAcHAAQHJwAEBykABAcrAAQHLQAEBy8ABAcyAAQHMwAEBzQABAc3AAQHOAAEBzoABAc7AAQHPQAEB0AABAdBAAQHQgAEB0UABAdGAAQHSwAEB1gABAddAAQHXwAEB2EABAdmAAQHaQAEB2wABAduAAQHkwAEB7cABAfeAAQIAgAECAUABAgHAAQICQAECAsABAgNAAQIDwAECBAABAgTAAQIIAAECDEABAgzAAQINQAECDcABAg5AAQIOwAECD0ABAg/AAQIQQAECFIABAhVAAQIWAAECFsABAheAAQIYQAECGQABAhnAAQIagAECGwABAirAAQIrQAECK8ABAixAAQItAAECLUABAi2AAQItwAECLgABAi6AAQIvAAECL0ABAi+AAQIwAAECMEABAkAAAQJAgAECQQABAkGAAQJCQAECQoABAkLAAQJDAAECQ0ABAkPAAQJEQAECRIABAkTAAQJFQAECRYABAlVAAQJVwAECVoABAlcAAQJXwAECWAABAlhAAQJYgAECWMABAllAAQJZwAECWgABAlpAAQJawAECWwABAl5AAQJegAECXsABAl9AAQJvAAECb4ABAnAAAQJwgAECcUABAnGAAQJxwAECcgABAnJAAQJywAECc0ABAnOAAQJzwAECdEABAnSAAQKEQAEChMABAoVAAQKFwAEChoABAobAAQKHAAECh0ABAoeAAQKIAAECiIABAojAAQKJAAECiYABAonAAQKZgAECmgABApqAAQKbAAECm8ABApwAAQKcQAECnIABApzAAQKdQAECncABAp4AAQKeQAECnsABAp8AAQKuwAECr0ABAq/AAQKwQAECsQABArFAAQKxgAECscABArIAAQKygAECswABArNAAQKzgAECtAABArRAAQLEAAECxIABAsUAAQLFgAECxkABAsaAAQLGwAECxwABAsdAAQLHwAECyEABAsiAAQLIwAECyUABAsmAAQLSwAEC28ABAuWAAQLugAEC70ABAu/AAQLwQAEC8MABAvFAAQLxwAEC8gABAvLAAQL2AAEC+cABAvpAAQL6wAEC+0ABAvvAAQL8QAEC/MABAv1AAQMBAAEDAcABAwKAAQMDQAEDBAABAwTAAQMFgAEDBk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ABBdJAAQXSwAEF00ABBdSAAQXVQAEF1gABBdaAAQXfwAEF6MABBfKAAQX7gAEF/EABBfzAAQX9QAEF/cABBf5AAQX+wAEF/wABBf/AAQYDAAEGB0ABBgfAAQYIQAEGCMABBglAAQYJwAEGCkABBgrAAQYLQAEGD4ABBhBAAQYRAAEGEcABBhKAAQYTQAEGFAABBhTAAQYVgAEGFgABBiXAAQYmQAEGJsABBidAAQYoAAEGKEABBiiAAQYowAEGKQABBimAAQYqAAEGKkABBiqAAQYrAAEGK0ABBjsAAQY7gAEGPAABBjyAAQY9QAEGPYABBj3AAQY+AAEGPkABBj7AAQY/QAEGP4ABBj/AAQZAQAEGQIABBlBAAQZQwAEGUYABBlIAAQZSwAEGUwABBlNAAQZTgAEGU8ABBlRAAQZUwAEGVQABBlVAAQZVwAEGVgABBllAAQZZgAEGWcABBlpAAQZqAAEGaoABBmsAAQZrgAEGbEABBmyAAQZswAEGbQABBm1AAQZtwAEGbkABBm6AAQZuwAEGb0ABBm+AAQZ/QAEGf8ABBoBAAQaAwAEGgYABBoHAAQaCAAEGgkABBoKAAQaDAAEGg4ABBoPAAQaEAAEGhIABBoTAAQaUgAEGlQABBpWAAQaWAAEGlsABBpcAAQaXQAEGl4ABBpfAAQaYQAEGmMABBpkAAQaZQAEGmcABBpoAAQapwAEGqkABBqrAAQarQAEGrAABBqxAAQasgAEGrMABBq0AAQatgAEGrgABBq5AAQaugAEGrwABBq9AAQa/AAEGv4ABBsAAAQbAgAEGwUABBsGAAQbBwAEGwgABBsJAAQbCwAEGw0ABBsOAAQbDwAEGxEABBsSAAQbNwAEG1sABBuCAAQbpgAEG6kABBurAAQbrQAEG68ABBuxAAQbswAEG7QABBu3AAQbxAAEG9MABBvVAAQb1wAEG9kABBvbAAQb3QAEG98ABBvhAAQb8AAEG/MABBv2AAQb+QAEG/wABBv/AAQcAgAEHAUABBwHAAQcRgAEHEgABBxKAAQcTAAEHE8ABBxQAAQcUQAEHFIABBxTAAQcVQAEHFcABBxYAAQcWQAEHFsABBxcAAQcmwAEHJ0ABByfAAQcoQAEHKQABBylAAQcpgAEHKcABByoAAQcqgAEHKwABBytAAQcrgAEHLAABByxAAQc8AAEHPI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ABCjJAAQoywAEKM0ABCjOAAQozwAEKNEABCjSAAQpEQAEKRMABCkVAAQpFwAEKRoABCkbAAQpHAAEKR0ABCkeAAQpIAAEKSIABCkjAAQpJAAEKSYABCknAAQpZgAEKWgABClqAAQpbAAEKW8ABClwAAQpcQAEKXIABClzAAQpdQAEKXcABCl4AAQpeQAEKXsABCl8AAQpoQAEKcUABCnsAAQqEAAEKhMABCoVAAQqFwAEKhkABCobAAQqHQAEKh4ABCohAAQqLgAEKj0ABCo/AAQqQQAEKkMABCpFAAQqRwAEKkkABCpLAAQqWgAEKl0ABCpgAAQqYwAEKmYABCppAAQqbAAEKm8ABCpxAAQqsAAEKrIABCq0AAQqtgAEKrkABCq6AAQquwAEKrwABCq9AAQqvwAEKsEABCrCAAQqwwAEKsUABCrGAAQrBQAEKwcABCsJAAQrCwAEKw4ABCsPAAQrEAAEKxEABCsSAAQrFAAEKxYABCsXAAQrGAAEKxoABCsbAAQrWgAEK1wABCteAAQrYAAEK2MABCtkAAQrZQAEK2YABCtnAAQraQAEK2sABCtsAAQrbQAEK28ABCtwAAQrrwAEK7EABCu0AAQrtgAEK7kABCu6AAQruwAEK7wABCu9AAQrvwAEK8EABCvCAAQrwwAEK8UABCvGAAQsBQAELAcABCwJAAQsCwAELA4ABCwPAAQsEAAELBEABCwSAAQsFAAELBYABCwXAAQsGAAELBoABCwbAAQsWgAELFwABCxeAAQsYAAELGMABCxkAAQsZQAELGYABCxnAAQsaQAELGsABCxsAAQsbQAELG8ABCxwAAQsrwAELLEABCyzAAQstQAELLgABCy5AAQsugAELLsABCy8AAQsvgAELMAABCzBAAQswgAELMQABCzFAAQtEAAELTMABC1TAAQtcwAELXUABC13AAQteQAELXsABC1+AAQtfwAELYAABC2DAAQthAAELYYABC2HAAQtiQAELYwABC2NAAQtjgAELZEABC2SAAQtlwAELaQABC2pAAQtqwAELa0ABC2yAAQttQAELbgABC26AAQt3wAELgMABC4qAAQuTgAELlEABC5TAAQuVQAELlcABC5ZAAQuWwAELlwABC5fAAQubAAELn0ABC5/AAQugQAELoMABC6FAAQuhwAELokABC6LAAQujQAELp4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ABD/GAARABQAEQAcABEAJAARACwAEQA4ABEAPAARAEAAEQBEABEASAARAFAAEQBYABEAXAARAGAAEQBoABEAbAARAQAAEQGQABECLAARArwAEQLIABEC0AARAtgAEQLgABEC6AARAvAAEQL0ABEDAAARAzQAEQNwABEDeAARA4AAEQOIABEDkAARA5gAEQOgABEDqAARA+QAEQPwABED/AARBAgAEQQUABEEIAARBCwAEQQ4ABEEQAARBTwAEQVEABEFTAARBVQAEQVgABEFZAARBWgAEQVsABEFcAARBXgAEQWAABEFhAARBYgAEQWQABEFlAARBpAAEQaYABEGoAARBqgAEQa0ABEGuAARBrwAEQbAABEGxAARBswAEQbUABEG2AARBtwAEQbkABEG6AARB+QAEQfsABEH9AARB/wAEQgIABEIDAARCBAAEQgUABEIGAARCCAAEQgoABEILAARCDAAEQg4ABEIPAARCTgAEQlAABEJTAARCVQAEQlgABEJZAARCWgAEQlsABEJcAARCXgAEQmAABEJhAARCYgAEQmQABEJlAARCpAAEQqYABEKoAARCqgAEQq0ABEKuAARCrwAEQrAABEKxAARCswAEQrUABEK2AARCtwAEQrkABEK6AARC+QAEQvsABEL9AARC/wAEQwIABEMDAARDBAAEQwUABEMGAARDCAAEQwoABEMLAARDDAAEQw4ABEMPAARDTgAEQ1AABENSAARDVAAEQ1cABENYAARDWQAEQ1oABENbAARDXQAEQ18ABENgAARDYQAEQ2MABENkAARDrwAEQ9IABEPyAAREEgAERBQABEQWAAREGAAERBoABEQdAAREHgAERB8ABEQiAAREIwAERCUABEQmAAREKAAERCsABEQsAARELQAERDAABEQxAAREOgAEREcABERMAARETgAERFAABERVAAREWAAERFsABERdAAREggAERKYABETNAARE8QAERPQABET2AARE+AAERPoABET8AARE/gAERP8ABEUCAARFDwAERSAABEUiAARFJAAERSYABEUoAARFKgAERSwABEUuAARFMAAERUEABEVEAARFRwAERUoABEVNAARFUAAERVMABEVWAARFWQAERVsABEWaAARFnAAERZ4ABEWgAARFowAERaQABEWlAARFpgAERacABEWpAARFqwAERawABEWtAARFrwAERbAABEXvAARF8QAERfMABEX1AARF+AAERfkABEX6AARF+wAERfwABEX+AARGAAAERgEABEYCAARGBAAERgUABEZEAARGRgAERkkABEZLAARGTgAERk8ABEZQAARGUQAERlIABEZUAARGVgAERlcABEZYAARGWgAERlsABEZoAARGaQAERmoABEZsAARGqwAERq0ABEavAARGsQAERrQABEa1AARGtgAERrcABEa4AARGugAERrwABEa9AARGvgAERsAABEbBAARHAAAERwIABEcEAARHBgAERwkABEcKAARHCwAERwwABEcNAARHDwAERxEABEcSAARHEwAERxUABEcWAARHVQAER1cABEdZAARHWwAER14ABEdfAARHYAAER2EABEdiAARHZAAER2YABEdnAARHaAAER2oABEdrAARHqgAER6wABEeuAARHsAAER7MABEe0AARHtQAER7YABEe3AARHuQAER7sABEe8AARHvQAER78ABEfAAARH/wAESAEABEgDAARIBQAESAgABEgJAARICgAESAsABEgMAARIDgAESBAABEgRAARIEgAESBQABEgVAARIOgAESF4ABEiFAARIqQAESKwABEiuAARIsAAESLIABEi0AARItgAESLcABEi6AARIxwAESNYABEjYAARI2gAESNwABEjeAARI4AAESOIABEjkAARI8wAESPYABEj5AARI/AAESP8ABEkCAARJBQAESQgABEkKAARJSQAESUsABElNAARJTwAESVIABElTAARJVAAESVUABElWAARJWAAESVoABElbAARJXAAESV4ABElfAARJngAESaAABEmiAARJpAAESacABEmoAARJqQAESaoABEmrAARJrQAESa8ABEmwAARJsQAESbMABEm0AARJ8wAESfUABEn3AARJ+QAESfwABEn9AARJ/gAESf8ABEoAAARKAgAESgQABEoFAARKBgAESggABEoJAARKSAAESkoABEpNAARKTwAESlIABEpTAARKVAAESlUABEpWAARKWAAESloABEpbAARKXAAESl4ABEpfAARKngAESqAABEqiAARKpAAESqcABEqoAARKqQAESqoABEqrAARKrQAESq8ABEqwAARKsQAESrMABEq0AARK8wAESvUABEr3AARK+QAESvwABEr9AARK/gAESv8ABEsAAARLAgAESwQABEsFAARLBgAESwgABEsJAARLSAAES0oABEtMAARLTgAES1EABEtSAARLUwAES1QABEtVAARLVwAES1kABEtaAARLWwAES10ABEteAARLqQAES8wABEvsAARMDAAETA4ABEwQAARMEgAETBQABEwXAARMGAAETBkABEwcAARMHQAETB8ABEwgAARMIgAETCUABEwmAARMJwAETCoABEwrAARMMAAETD0ABExCAARMRAAETEYABExLAARMTgAETFEABExTAARMeAAETJwABEzDAARM5wAETOoABEzsAARM7gAETPAABEzyAARM9AAETPUABEz4AARNBQAETRYABE0YAARNGgAETRwABE0eAARNIAAETSIABE0kAARNJgAETTcABE06AARNPQAETUAABE1DAARNRgAETUkABE1MAARNTwAETVEABE2QAARNkgAETZQABE2WAARNmQAETZoABE2bAARNnAAETZ0ABE2fAARNoQAETaIABE2jAARNpQAETaYABE3lAARN5wAETekABE3rAARN7gAETe8ABE3wAARN8QAETfIABE30AARN9gAETfcABE34AARN+gAETfsABE46AAROPAAETj8ABE5BAARORAAETkUABE5GAARORwAETkgABE5KAAROTAAETk0ABE5OAAROUAAETlEABE5eAAROXwAETmAABE5iAAROoQAETqMABE6lAAROpwAETqoABE6rAAROrAAETq0ABE6uAAROsAAETrIABE6zAAROtAAETrYABE63AARO9gAETvgABE76AARO/AAETv8ABE8AAARPAQAETwIABE8DAARPBQAETwcABE8IAARPCQAETwsABE8MAARPSwAET00ABE9PAARPUQAET1QABE9VAARPVgAET1cABE9YAARPWgAET1wABE9dAARPXgAET2AABE9hAARPoAAET6IABE+kAARPpgAET6kABE+qAARPqwAET6wABE+tAARPrwAET7EABE+yAARPswAET7UABE+2AARP9QAET/cABE/5AARP+wAET/4ABE//AARQAAAEUAEABFACAARQBAAEUAYABFAHAARQCAAEUAoABFALAARQMAAEUFQABFB7AARQnwAEUKIABFCkAARQpgAEUKgABFCqAARQrAAEUK0ABFCwAARQvQAEUMwABFDOAARQ0AAEUNIABFDUAARQ1gAEUNgABFDaAARQ6QAEUOwABFDvAARQ8gAEUPUABFD4AARQ+wAEUP4ABFEAAARRPwAEUUEABFFDAARRRQAEUUgABFFJAARRSgAEUUsABFFMAARRTgAEUVAABFFRAARRUgAEUVQABFFVAARRlAAEUZYABFGYAARRmgAEUZ0ABFGeAARRnwAEUaAABFGhAARRowAEUaUABFGmAARRpwAEUakABFGqAARR6QAEUesABFHtAARR7wAEUfIABFHzAARR9AAEUfUABFH2AARR+AAEUfoABFH7AARR/AAEUf4ABFH/AARSPgAEUkAABFJCAARSRAAEUkcABFJIAARSSQAEUkoABFJLAARSTQAEUk8ABFJQAARSUQAEUlMABFJUAARSkwAEUpUABFKXAARSmQAEUpwABFKdAARSngAEUp8ABFKgAARSogAEUqQABFKlAARSpgAEUqgABFKpAARS6AAEUuoABFLsAARS7gAEUvEABFLyAARS8wAEUvQABFL1AARS9wAEUvkABFL6AARS+wAEUv0ABFL+AARTPQAEUz8ABFNBAARTQwAEU0YABFNHAARTSAAEU0kABFNKAARTTAAEU04ABFNPAARTUAAEU1IABFNTAARTngAEU8EABFPhAARUAQAEVAMABFQFAARUBwAEVAkABFQMAARUDQAEVA4ABFQRAARUEgAEVBQABFQVAARUFwAEVBoABFQbAARUHAAEVB8ABFQgAARUJQAEVDIABFQ3AARUOQAEVDsABFRAAARUQwAEVEYABFRIAARUbQAEVJEABFS4AARU3AAEVN8ABFThAARU4wAEVOUABFTnAARU6QAEVOoABFTtAARU+gAEVQsABFUNAARVDwAEVREABFUTAARVFQAEVRcABFUZAARVGwAEVSwABFUvAARVMgAEVTUABFU4AARVOwAEVT4ABFVBAARVRAAEVUYABFWFAARVhwAEVYkABFWLAARVjgAEVY8ABFWQAARVkQAEVZIABFWUAARVlgAEVZcABFWYAARVmgAEVZsABFXaAARV3AAEVd4ABFXgAARV4wAEVeQABFXlAARV5gAEVecABFXpAARV6wAEVewABFXtAARV7wAEVfAABFYvAARWMQAEVjQABFY2AARWOQAEVjoABFY7AARWPAAEVj0ABFY/AARWQQAEVkIABFZDAARWRQAEVkYABFZTAARWVAAEVlUABFZXAARWlgAEVpgABFaaAARWnAAEVp8ABFagAARWoQAEVqIABFajAARWpQAEVqcABFaoAARWqQAEVqsABFasAARW6wAEVu0ABFbvAARW8QAEVvQABFb1AARW9gAEVvcABFb4AARW+gAEVvwABFb9AARW/gAEVwAABFcBAARXQAAEV0IABFdEAARXRgAEV0kABFdKAARXSwAEV0wABFdNAARXTwAEV1EABFdSAARXUwAEV1UABFdWAARXlQAEV5cABFeZAARXmwAEV54ABFefAARXoAAEV6EABFeiAARXpAAEV6YABFenAARXqAAEV6oABFerAARX6gAEV+wABFfuAARX8AAEV/MABFf0AARX9QAEV/YABFf3AARX+QAEV/sABFf8AARX/QAEV/8ABFgAAARYJQAEWEkABFhwAARYlAAEWJcABFiZAARYmwAEWJ0ABFifAARYoQAEWKIABFilAARYsgAEWMEABFjDAARYxQAEWMcABFjJAARYywAEWM0ABFjPAARY3gAEWOEABFjkAARY5wAEWOoABFjtAARY8AAEWPMABFj1AARZNAAEWTYABFk5AARZOwAEWT4ABFk/AARZQAAEWUEABFlCAARZRAAEWUYABFlHAARZSAAEWUoABFlLAARZigAEWYwABFmOAARZkAAEWZMABFmUAARZlQAEWZYABFmXAARZmQAEWZsABFmcAARZnQAEWZ8ABFmgAARZ3wAEWeEABFnjAARZ5QAEWegABFnpAARZ6gAEWesABFnsAARZ7gAEWfAABFnxAARZ8gAEWfQABFn1AARaNAAEWjYABFo5AARaOwAEWj4ABFo/AARaQAAEWkEABFpCAARaRAAEWkYABFpHAARaSAAEWkoABFpLAARaTQAEWowABFqOAARakAAEWpIABFqVAARalgAEWpcABFqYAARamQAEWpsABFqdAARangAEWp8ABFqhAARaogAEWuEABFrjAARa5QAEWucABFrqAARa6wAEWuwABFrtAARa7gAEWvAABFryAARa8wAEWvQABFr2AARa9wAEWzYABFs4AARbOgAEWzwABFs/AARbQAAEW0EABFtCAARbQwAEW0UABFtHAARbSAAEW0kABFtLAARbTAAEW5cABFu6AARb2gAEW/oABFv8AARb/gAEXAAABFwCAARcBQAEXAYABFwHAARcCgAEXAsABFwNAARcDgAEXBAABFwTAARcFAAEXBUABFwYAARcGQAEXB4ABFwrAARcMAAEXDIABFw0AARcOQAEXDwABFw/AARcQQAEXGYABFyKAARcsQAEXNUABFzYAARc2gAEXNwABFzeAARc4AAEXOIABFzjAARc5gAEXPMABF0EAARdBgAEXQgABF0KAARdDAAEXQ4ABF0QAARdEgAEXRQABF0lAARdKAAEXSsABF0uAARdMQAEXTQABF03AARdOgAEXT0ABF0/AARdfgAEXYAABF2CAARdhAAEXYcABF2IAARdiQAEXYoABF2LAARdjQAEXY8ABF2QAARdkQAEXZMABF2UAARd0wAEXdUABF3XAARd2QAEXdwABF3dAARd3gAEXd8ABF3gAARd4gAEXeQABF3lAARd5gAEXegABF3pAAReKAAEXioABF4tAAReLwAEXjIABF4zAAReNAAEXjUABF42AAReOAAEXjoABF47AARePAAEXj4ABF4/AAReTAAEXk0ABF5OAAReUAAEXo8ABF6RAARekwAEXpUABF6YAARemQAEXpoABF6bAARenAAEXp4ABF6gAAReoQAEXqIABF6kAARepQAEXuQABF7mAARe6AAEXuoABF7tAARe7gAEXu8ABF7wAARe8QAEXvMABF71AARe9gAEXvcABF75AARe+gAEXzkABF87AARfPQAEXz8ABF9CAARfQwAEX0QABF9FAARfRgAEX0gABF9KAARfSwAEX0wABF9OAARfTwAEX44ABF+QAARfkgAEX5QABF+XAARfmAAEX5kABF+aAARfmwAEX50ABF+fAARfoAAEX6EABF+jAARfpAAEX+MABF/lAARf5wAEX+kABF/sAARf7QAEX+4ABF/vAARf8AAEX/IABF/0AARf9QAEX/YABF/4AARf+QAEYB4ABGBCAARgaQAEYI0ABGCQAARgkgAEYJQABGCWAARgmAAEYJoABGCbAARgngAEYKsABGC6AARgvAAEYL4ABGDAAARgwgAEYMQABGDGAARgyAAEYNcABGDaAARg3QAEYOAABGDjAARg5gAEYOkABGDsAARg7gAEYS0ABGEvAARhMgAEYTQABGE3AARhOAAEYTkABGE6AARhOwAEYT0ABGE/AARhQAAEYUEABGFDAARhRAAEYYMABGGFAARhhwAEYYkABGGMAARhjQAEYY4ABGGPAARhkAAEYZIABGGUAARhlQAEYZYABGGYAARhmQAEYdgABGHaAARh3AAEYd4ABGHhAARh4gAEYeMABGHkAARh5QAEYecABGHpAARh6gAEYesABGHtAARh7gAEYi0ABGIvAARiMgAEYjQABGI3AARiOAAEYjkABGI6AARiOwAEYj0ABGI/AARiQAAEYkEABGJDAARiRAAEYoMABGKFAARihwAEYokABGKMAARijQAEYo4ABGKPAARikAAEYpIABGKUAARilQAEYpYABGKYAARimQAEYtgABGLaAARi3AAEYt4ABGLhAARi4gAEYuMABGLkAARi5QAEYucABGLpAARi6gAEYusABGLtAARi7gAEYy0ABGMvAARjMQAEYzMABGM2AARjNwAEYzgABGM5AARjOgAEYzwABGM+AARjPwAEY0AABGNCAARjQwAEY0wABGNNAARjTwAEY5IABGO2AARj2gAEY/0ABGQkAARkRAAEZGsABGSSAARksgAEZNYABGT6AARk/AAEZP8ABGUBAARlAwAEZQUABGUIAARlCgAEZQwABGUOAARlEAAEZRIABGUUAARlFwAEZRoABGUbAARlIAAEZS0ABGUwAARlMgAEZTUABGU4AARlOgAEZV8ABGWDAARlqgAEZc4ABGXRAARl0wAEZdUABGXXAARl2QAEZdsABGXcAARl3wAEZewABGX/AARmAQAEZgMABGYFAARmBwAEZgkABGYLAARmDQAEZg8ABGYRAARmJAAEZicABGYqAARmLQAEZjAABGYzAARmNgAEZjkABGY8AARmPwAEZkEABGaAAARmggAEZoUABGaHAARmigAEZosABGaMAARmjQAEZo4ABGaQAARmkgAEZpMABGaUAARmlgAEZpcABGagAARmoQAEZqMABGbiAARm5AAEZuYABGboAARm6wAEZuwABGbtAARm7gAEZu8ABGbxAARm8wAEZvQABGb1AARm9wAEZvgABGc3AARnOQAEZzwABGc+AARnQQAEZ0IABGdDAARnRAAEZ0UABGdHAARnSQAEZ0oABGdLAARnTQAEZ04ABGdXAARnWAAEZ1oABGeZAARnmwAEZ50ABGefAARnogAEZ6MABGekAARnpQAEZ6YABGeoAARnqgAEZ6sABGesAARnrgAEZ68ABGfuAARn8AAEZ/MABGf1AARn+AAEZ/kABGf6AARn+wAEZ/wABGf+AARoAAAEaAEABGgCAARoBAAEaAUABGgOAARoDwAEaBEABGhQAARoUgAEaFQABGhWAARoWQAEaFoABGhbAARoXAAEaF0ABGhfAARoYQAEaGIABGhjAARoZQAEaGYABGilAARopwAEaKoABGisAARorwAEaLAABGixAARosgAEaLMABGi1AARotwAEaLgABGi5AARouwAEaLwABGjJAARoygAEaMsABGjNAARpDAAEaQ4ABGkQAARpEgAEaRUABGkWAARpFwAEaRgABGkZAARpGwAEaR0ABGkeAARpHwAEaSEABGkiAARpYQAEaWMABGlmAARpaAAEaWsABGlsAARpbQAEaW4ABGlvAARpcQAEaXMABGl0AARpdQAEaXcABGl4AARplAAEaaEABGmsAARprwAEabIABGm1AARpuAAEabsABGnGAARpyQAEacwABGnPAARp0gAEadUABGnXAARp6gAEafgABGoBAARqEwAEal4ABGqBAARqoQAEasEABGrDAARqxQAEascABGrJAARqzAAEas0ABGrOAARq0QAEatIABGrUAARq1QAEatcABGraAARq2wAEatwABGrfAARq4AAEauUABGryAARq9wAEavkABGr7AARrAAAEawMABGsGAARrCAAEay0ABGtRAARreAAEa5wABGufAARroQAEa6MABGulAARrpwAEa6kABGuqAARrrQAEa7oABGvLAARrzQAEa88ABGvRAARr0wAEa9UABGvXAARr2QAEa9sABGvsAARr7wAEa/IABGv1AARr+AAEa/sABGv+AARsAQAEbAQABGwGAARsRQAEbEcABGxJAARsSwAEbE4ABGxPAARsUAAEbFEABGxSAARsVAAEbFYABGxXAARsWAAEbFoABGxbAARsmgAEbJwABGyeAARsoAAEbKMABGykAARspQAEbKYABGynAARsqQAEbKsABGysAARsrQAEbK8ABGywAARs7wAEbPEABGz0AARs9gAEbPkABGz6AARs+wAEbPwABGz9AARs/wAEbQEABG0CAARtAwAEbQUABG0GAARtEwAEbRQABG0VAARtFwAEbVYABG1YAARtWgAEbVwABG1fAARtYAAEbWEABG1iAARtYwAEbWUABG1nAARtaAAEbWkABG1rAARtbAAEbasABG2tAARtrwAEbbEABG20AARttQAEbbYABG23AARtuAAEbboABG28AARtvQAEbb4ABG3AAARtwQAEbgAABG4CAARuBAAEbgYABG4JAARuCgAEbgsABG4MAARuDQAEbg8ABG4RAARuEgAEbhMABG4VAARuFgAEblUABG5XAARuWQAEblsABG5eAARuXwAEbmAABG5hAARuYgAEbmQABG5mAARuZwAEbmgABG5qAARuawAEbqoABG6sAARurgAEbrAABG6zAARutAAEbrUABG62AARutwAEbrkABG67AARuvAAEbr0ABG6/AARuwAAEbuUABG8JAARvMAAEb1QABG9XAARvWQAEb1sABG9dAARvXwAEb2EABG9iAARvZQAEb3IABG+BAARvgwAEb4UABG+HAARviQAEb4sABG+NAARvjwAEb54ABG+hAARvpAAEb6cABG+qAARvrQAEb7AABG+zAARvtQAEb/QABG/2AARv+AAEb/oABG/9AARv/gAEb/8ABHAAAARwAQAEcAMABHAFAARwBgAEcAcABHAJAARwCgAEcEkABHBLAARwTQAEcE8ABHBSAARwUwAEcFQABHBVAARwVgAEcFgABHBaAARwWwAEcFwABHBeAARwXwAEcJ4ABHCgAARwogAEcKQABHCnAARwqAAEcKkABHCqAARwqwAEcK0ABHCvAARwsAAEcLEABHCzAARwtAAEcPMABHD1AARw+AAEcPoABHD9AARw/gAEcP8ABHEAAARxAQAEcQMABHEFAARxBgAEcQcABHEJAARxCgAEcUkABHFLAARxTQAEcU8ABHFSAARxUwAEcVQABHFVAARxVgAEcVgABHFaAARxWwAEcVwABHFeAARxXwAEcZ4ABHGgAARxowAEcaUABHGoAARxqQAEcaoABHGrAARxrAAEca4ABHGwAARxsQAEcbIABHG0AARxtQAEcdwABHIbAARyHQAEch8ABHIhAARyJAAEciUABHImAARyJwAEcigABHIqAARyLAAEci0ABHIuAARyMAAEcjEABHJ8AARynwAEcr8ABHLfAARy4QAEcuMABHLlAARy5wAEcuoABHLrAARy7AAEcu8ABHLwAARy8gAEcvMABHL1AARy+AAEcvkABHL6AARy/QAEcv4ABHMDAARzEAAEcxUABHMXAARzGQAEcx4ABHMhAARzJAAEcyYABHNLAARzbwAEc5YABHO6AARzvQAEc78ABHPBAARzwwAEc8UABHPHAARzyAAEc8sABHPYAARz6QAEc+sABHPtAARz7wAEc/EABHPzAARz9QAEc/cABHP5AAR0CgAEdA0ABHQQAAR0EwAEdBYABHQZAAR0HAAEdB8ABHQiAAR0JAAEdGMABHRlAAR0ZwAEdGkABHRsAAR0bQAEdG4ABHRvAAR0cAAEdHIABHR0AAR0dQAEdHYABHR4AAR0eQAEdLgABHS6AAR0vAAEdL4ABHTBAAR0wgAEdMMABHTEAAR0xQAEdMcABHTJAAR0ygAEdMsABHTNAAR0zgAEdQ0ABHUPAAR1EgAEdRQABHUXAAR1GAAEdRkABHUaAAR1GwAEdR0ABHUfAAR1IAAEdSEABHUjAAR1JAAEdTEABHUyAAR1MwAEdTUABHV0AAR1dgAEdXgABHV6AAR1fQAEdX4ABHV/AAR1gAAEdYEABHWDAAR1hQAEdYYABHWHAAR1iQAEdYoABHXJAAR1ywAEdc0ABHXPAAR10gAEddMABHXUAAR11QAEddYABHXYAAR12gAEddsABHXcAAR13gAEdd8ABHYeAAR2IAAEdiIABHYkAAR2JwAEdigABHYpAAR2KgAEdisABHYtAAR2LwAEdjAABHYxAAR2MwAEdjQABHZzAAR2dQAEdncABHZ5AAR2fAAEdn0ABHZ+AAR2fwAEdoAABHaCAAR2hAAEdoUABHaGAAR2iAAEdokABHbIAAR2ygAEdswABHbOAAR20QAEdtIABHbTAAR21AAEdtUABHbXAAR22QAEdtoABHbbAAR23QAEdt4ABHcDAAR3JwAEd04ABHdyAAR3dQAEd3cABHd5AAR3ewAEd30ABHd/AAR3gAAEd4MABHeQAAR3nwAEd6EABHejAAR3pQAEd6cABHepAAR3qwAEd60ABHe8AAR3vwAEd8IABHfFAAR3yAAEd8sABHfOAAR30QAEd9MABHgSAAR4FAAEeBYABHgYAAR4GwAEeBwABHgdAAR4HgAEeB8ABHghAAR4IwAEeCQABHglAAR4JwAEeCgABHhnAAR4aQAEeGsABHhtAAR4cAAEeHEABHhyAAR4cwAEeHQABHh2AAR4eAAEeHkABHh6AAR4fAAEeH0ABHi8AAR4vgAEeMAABHjCAAR4xQAEeMYABHjHAAR4yAAEeMkABHjLAAR4zQAEeM4ABHjPAAR40QAEeNIABHkRAAR5EwAEeRYABHkYAAR5GwAEeRwABHkdAAR5HgAEeR8ABHkhAAR5IwAEeSQABHklAAR5JwAEeSgABHlnAAR5aQAEeWsABHltAAR5cAAEeXEABHlyAAR5cwAEeXQABHl2AAR5eAAEeXkABHl6AAR5fAAEeX0ABHm8AAR5vgAEecEABHnDAAR5xgAEeccABHnIAAR5yQAEecoABHnMAAR5zgAEec8ABHnQAAR50gAEedMABHn6AAR6OQAEejsABHo9AAR6PwAEekIABHpDAAR6RAAEekUABHpGAAR6SAAEekoABHpLAAR6TAAEek4ABHpPAAR6mgAEer0ABHrdAAR6/QAEev8ABHsBAAR7AwAEewUABHsIAAR7CQAEewoABHsNAAR7DgAEexAABHsRAAR7EwAEexYABHsXAAR7GAAEexsABHscAAR7IQAEey4ABHszAAR7NQAEezcABHs8AAR7PwAEe0IABHtEAAR7aQAEe40ABHu0AAR72AAEe9sABHvdAAR73wAEe+EABHvjAAR75QAEe+YABHvpAAR79gAEfAcABHwJAAR8CwAEfA0ABHwPAAR8EQAEfBMABHwVAAR8FwAEfCgABHwrAAR8LgAEfDEABHw0AAR8NwAEfDoABHw9AAR8QAAEfEIABHyBAAR8gwAEfIUABHyHAAR8igAEfIsABHyMAAR8jQAEfI4ABHyQAAR8kgAEfJMABHyUAAR8lgAEfJcABHzWAAR82AAEfNoABHzcAAR83wAEfOAABHzhAAR84gAEfOMABHzlAAR85wAEfOgABHzpAAR86wAEfOwABH0rAAR9LQAEfTAABH0yAAR9NQAEfTYABH03AAR9OAAEfTkABH07AAR9PQAEfT4ABH0/AAR9QQAEfUIABH1PAAR9UAAEfVEABH1TAAR9kgAEfZQABH2WAAR9mAAEfZsABH2cAAR9nQAEfZ4ABH2fAAR9oQAEfaMABH2kAAR9pQAEfacABH2oAAR95wAEfekABH3rAAR97QAEffAABH3xAAR98gAEffMABH30AAR99gAEffgABH35AAR9+gAEffwABH39AAR+PAAEfj4ABH5AAAR+QgAEfkUABH5GAAR+RwAEfkgABH5JAAR+SwAEfk0ABH5OAAR+TwAEflEABH5SAAR+kQAEfpMABH6VAAR+lwAEfpoABH6bAAR+nAAEfp0ABH6eAAR+oAAEfqIABH6jAAR+pAAEfqYABH6nAAR+5gAEfugABH7qAAR+7AAEfu8ABH7wAAR+8QAEfvIABH7zAAR+9QAEfvcABH74AAR++QAEfvsABH78AAR/IQAEf0UABH9sAAR/kAAEf5MABH+VAAR/lwAEf5kABH+bAAR/nQAEf54ABH+hAAR/rgAEf70ABH+/AAR/wQAEf8MABH/FAAR/xwAEf8kABH/LAAR/2gAEf90ABH/gAAR/4wAEf+YABH/pAAR/7AAEf+8ABH/xAASAMAAEgDIABIA0AASANgAEgDkABIA6AASAOwAEgDwABIA9AASAPwAEgEEABIBCAASAQwAEgEUABIBGAASAhQAEgIcABICJAASAiwAEgI4ABICPAASAkAAEgJEABICSAASAlAAEgJYABICXAASAmAAEgJoABICbAASA2gAEgNwABIDeAASA4AAEgOMABIDkAASA5QAEgOYABIDnAASA6QAEgOsABIDsAASA7QAEgO8ABIDwAASBLwAEgTEABIEzAASBNQAEgTgABIE5AASBOgAEgTsABIE8AASBPgAEgUAABIFBAASBQgAEgUQABIFFAASBhAAEgYYABIGIAASBigAEgY0ABIGOAASBjwAEgZAABIGRAASBkwAEgZUABIGWAASBlwAEgZkABIGaAASB2QAEgdsABIHdAASB3wAEgeIABIHjAASB5AAEgeUABIHmAASB6AAEgeoABIHrAASB7AAEge4ABIHvAASCLgAEgjAABIIyAASCNAAEgjcABII4AASCOQAEgjoABII7AASCPQAEgj8ABIJAAASCQQAEgkMABIJEAASCjwAEgrIABILSAASC8gAEgvQABIL2AASC+AAEgvoABIL9AASC/gAEgv8ABIMCAASDAwAEgwUABIMGAASDCQAEgwwABIMNAASDDgAEgxEABIMSAASDFwAEgyQABIMpAASDKwAEgy4ABIMzAASDNgAEgzkABIM7AASDYAAEg4QABIOrAASDzwAEg9IABIPUAASD1gAEg9gABIPaAASD3AAEg90ABIPgAASD7QAEg/4ABIQAAASEAgAEhAQABIQGAASECAAEhAoABIQMAASEDgAEhB8ABIQiAASEJQAEhCgABIQrAASELgAEhDEABIQ0AASENwAEhDkABIR4AASEegAEhHwABIR+AASEgQAEhIIABISDAASEhAAEhIUABISHAASEiQAEhIoABISLAASEjQAEhI4ABITNAASEzwAEhNEABITTAASE1gAEhNcABITYAASE2QAEhNoABITcAASE3gAEhN8ABITgAASE4gAEhOMABIUiAASFJAAEhScABIUpAASFLAAEhS0ABIUuAASFLwAEhTAABIUyAASFNAAEhTUABIU2AASFOAAEhTkABIVGAASFRwAEhUgABIVKAASFiQAEhYsABIWNAASFjwAEhZIABIWTAASFlAAEhZUABIWWAASFmAAEhZoABIWbAASFnAAEhZ4ABIWfAASF3gAEheAABIXiAASF5AAEhecABIXoAASF6QAEheoABIXrAASF7QAEhe8ABIXwAASF8QAEhfMABIX0AASGMwAEhjUABIY3AASGOQAEhjwABIY9AASGPgAEhj8ABIZAAASGQgAEhkQABIZFAASGRgAEhkgABIZJAASGiAAEhooABIaMAASGjgAEhpEABIaSAASGkwAEhpQABIaVAASGlwAEhpkABIaaAASGmwAEhp0ABIaeAASG3QAEht8ABIbhAASG4wAEhuYABIbnAASG6AAEhukABIbqAASG7AAEhu4ABIbvAASG8AAEhvIABIbzAASHGAAEhzwABIdjAASHhwAEh4oABIeNAASHjwAEh5EABIeTAASHlQAEh5YABIeZAASHpgAEh7MABIe2AASHuQAEh7wABIe/AASHwgAEh8UABIfSAASH1QAEh9gABIfbAASH3gAEh+EABIfkAASH5gAEiCUABIgnAASIKgAEiCwABIgvAASIMAAEiDEABIgyAASIMwAEiDUABIg4AASIOQAEiDoABIg8AASIPQAEiIAABIikAASIyAAEiOsABIkSAASJMgAEiVkABImAAASJoAAEicQABInoAASJ6gAEie0ABInvAASJ8QAEifMABIn2AASJ+AAEifoABIn8AASJ/gAEigAABIoCAASKBQAEiggABIoJAASKDgAEihsABIoeAASKIAAEiiMABIomAASKKAAEik0ABIpxAASKmAAEirwABIq/AASKwQAEisMABIrFAASKxwAEiskABIrKAASKzQAEitoABIrtAASK7wAEivEABIrzAASK9QAEivcABIr5AASK+wAEiv0ABIr/AASLEgAEixUABIsYAASLGwAEix4ABIshAASLJAAEiycABIsqAASLLQAEiy8ABItuAASLcAAEi3MABIt1AASLeAAEi3kABIt6AASLewAEi3wABIt+AASLgAAEi4EABIuCAASLhAAEi4UABIuOAASLjwAEi5EABIvQAASL0gAEi9QABIvWAASL2QAEi9oABIvbAASL3AAEi90ABIvfAASL4QAEi+IABIvjAASL5QAEi+YABIwlAASMJwAEjCoABIwsAASMLwAEjDAABIwxAASMMgAEjDMABIw1AASMNwAEjDgABIw5AASMOwAEjDwABIxFAASMRgAEjEgABIyHAASMiQAEjIsABIyNAASMkAAEjJEABIySAASMkwAEjJQABIyWAASMmAAEjJkABIyaAASMnAAEjJ0ABIzcAASM3gAEjOEABIzjAASM5gAEjOcABIzoAASM6QAEjOoABIzsAASM7gAEjO8ABIzwAASM8gAEjPMABIz8AASM/QAEjP8ABI0+AASNQAAEjUIABI1EAASNRwAEjUgABI1JAASNSgAEjUsABI1NAASNTwAEjVAABI1RAASNUwAEjVQABI2TAASNlQAEjZgABI2aAASNnQAEjZ4ABI2fAASNoAAEjaEABI2jAASNpQAEjaYABI2nAASNqQAEjaoABI23AASNuAAEjbkABI27AASN+gAEjfwABI3+AASOAAAEjgMABI4EAASOBQAEjgYABI4HAASOCQAEjgsABI4MAASODQAEjg8ABI4QAASOTwAEjlEABI5UAASOVgAEjlkABI5aAASOWwAEjlwABI5dAASOXwAEjmEABI5iAASOYwAEjmUABI5mAASOdQAEjoIABI6JAASOjAAEjo8ABI6SAASOmQAEjpwABI6fAASOogAEjqQABI6sAASOsQAEjvwABI8fAASPPwAEj18ABI9hAASPYwAEj2UABI9nAASPagAEj2sABI9sAASPbwAEj3AABI9yAASPcwAEj3UABI94AASPeQAEj3oABI99AASPfgAEj4MABI+QAASPlQAEj5cABI+ZAASPngAEj6EABI+kAASPpgAEj8sABI/vAASQFgAEkDoABJA9AASQPwAEkEEABJBDAASQRQAEkEcABJBIAASQSwAEkFgABJBpAASQawAEkG0ABJBvAASQcQAEkHMABJB1AASQdwAEkHkABJCKAASQjQAEkJAABJCTAASQlgAEkJkABJCcAASQnwAEkKIABJCkAASQ4wAEkOUABJDnAASQ6QAEkOwABJDtAASQ7gAEkO8ABJDwAASQ8gAEkPQABJD1AASQ9gAEkPgABJD5AASROAAEkToABJE8AASRPgAEkUEABJFCAASRQwAEkUQABJFFAASRRwAEkUkABJFKAASRSwAEkU0ABJFOAASRjQAEkY8ABJGSAASRlAAEkZcABJGYAASRmQAEkZoABJGbAASRnQAEkZ8ABJGgAASRoQAEkaMABJGkAASRsQAEkbIABJGzAASRtQAEkfQABJH2AASR+AAEkfoABJH9AASR/gAEkf8ABJIAAASSAQAEkgMABJIFAASSBgAEkgcABJIJAASSCgAEkkkABJJLAASSTQAEkk8ABJJSAASSUwAEklQABJJVAASSVgAEklgABJJaAASSWwAEklwABJJeAASSXwAEkp4ABJKgAASSogAEkqQABJKnAASSqAAEkqkABJKqAASSqwAEkq0ABJKvAASSsAAEkrEABJKzAASStAAEkvMABJL1AASS9wAEkvkABJL8AASS/QAEkv4ABJL/AASTAAAEkwIABJMEAASTBQAEkwYABJMIAASTCQAEk0gABJNKAASTTAAEk04ABJNRAASTUgAEk1MABJNUAASTVQAEk1cABJNZAASTWgAEk1sABJNdAASTXgAEk4MABJOnAASTzgAEk/IABJP1AAST9wAEk/kABJP7AAST/QAEk/8ABJQAAASUAwAElBAABJQfAASUIQAElCMABJQlAASUJwAElCkABJQrAASULQAElDwABJQ/AASUQgAElEUABJRIAASUSwAElE4ABJRRAASUUwAElJIABJSUAASUlgAElJgABJSbAASUnAAElJ0ABJSeAASUnwAElKEABJSjAASUpAAElKUABJSnAASUqAAElOcABJTpAASU6wAElO0ABJTwAASU8QAElPIABJTzAASU9AAElPYABJT4AASU+QAElPoABJT8AASU/QAElTwABJU+AASVQAAElUIABJVFAASVRgAElUcABJVIAASVSQAElUsABJVNAASVTgAElU8ABJVRAASVUgAElZEABJWTAASVlQAElZcABJWaAASVmwAElZwABJWdAASVngAElaAABJWiAASVowAElaQABJWmAASVpwAEleYABJXoAASV6gAElewABJXvAASV8AAElfEABJXyAASV8wAElfUABJX3AASV+AAElfkABJX7AASV/AAEljsABJY9AASWPwAElkEABJZEAASWRQAElkYABJZHAASWSAAElkoABJZMAASWTQAElk4ABJZQAASWUQAElpAABJaSAASWlAAElpYABJaZAASWmgAElpsABJacAASWnQAElp8ABJahAASWogAElqMABJalAASWpgAElvEABJcUAASXNAAEl1QABJdWAASXWAAEl1oABJdcAASXXwAEl2AABJdhAASXZAAEl2UABJdnAASXaAAEl2oABJdtAASXbgAEl28ABJdyAASXcwAEl3gABJeFAASXigAEl4wABJeOAASXkwAEl5YABJeZAASXmwAEl8AABJfkAASYCwAEmC8ABJgyAASYNAAEmDYABJg4AASYOgAEmDwABJg9AASYQAAEmE0ABJheAASYYAAEmGIABJhkAASYZgAEmGgABJhqAASYbAAEmG4ABJh/AASYggAEmIUABJiIAASYiwAEmI4ABJiRAASYlAAEmJcABJiZAASY2AAEmNoABJjcAASY3gAEmOEABJjiAASY4wAEmOQABJjlAASY5wAEmOkABJjqAASY6wAEmO0ABJjuAASZLQAEmS8ABJkxAASZMwAEmTYABJk3AASZOAAEmTkABJk6AASZPAAEmT4ABJk/AASZQAAEmUIABJlDAASZggAEmYQABJmHAASZiQAEmYwABJmNAASZjgAEmY8ABJmQAASZkgAEmZQABJmVAASZlgAEmZgABJmZAASZpgAEmacABJmoAASZqgAEmekABJnrAASZ7QAEme8ABJnyAASZ8wAEmfQABJn1AASZ9gAEmfgABJn6AASZ+wAEmfwABJn+AASZ/wAEmj4ABJpAAASaQgAEmkQABJpHAASaSAAEmkkABJpKAASaSwAEmk0ABJpPAASaUAAEmlEABJpTAASaVAAEmpMABJqVAASalwAEmpkABJqcAASanQAEmp4ABJqfAASaoAAEmqIABJqkAASapQAEmqYABJqoAASaqQAEmugABJrqAASa7AAEmu4ABJrxAASa8gAEmvMABJr0AASa9QAEmvcABJr5AASa+gAEmvsABJr9AASa/gAEmz0ABJs/AASbQQAEm0MABJtGAASbRwAEm0gABJtJAASbSgAEm0wABJtOAASbTwAEm1AABJtSAASbUwAEm3gABJucAASbwwAEm+cABJvqAASb7AAEm+4ABJvwAASb8gAEm/QABJv1AASb+AAEnAUABJwUAAScFgAEnBgABJwaAAScHAAEnB4ABJwgAAScIgAEnDEABJw0AAScNwAEnDoABJw9AAScQAAEnEMABJxGAAScSAAEnIcABJyJAASciwAEnI0ABJyQAASckQAEnJIABJyTAASclAAEnJYABJyYAAScmQAEnJoABJycAAScnQAEnNwABJzeAASc4AAEnOIABJzlAASc5gAEnOcABJzoAASc6QAEnOsABJztAASc7gAEnO8ABJzxAASc8gAEnTEABJ0zAASdNQAEnTcABJ06AASdOwAEnTwABJ09AASdPgAEnUAABJ1CAASdQwAEnUQABJ1GAASdRwAEnYYABJ2IAASdigAEnYwABJ2PAASdkAAEnZEABJ2SAASdkwAEnZUABJ2XAASdmAAEnZkABJ2bAASdnAAEndsABJ3dAASd3wAEneEABJ3kAASd5QAEneYABJ3nAASd6AAEneoABJ3sAASd7QAEne4ABJ3wAASd8QAEnjAABJ4yAASeNAAEnjYABJ45AASeOgAEnjsABJ48AASePQAEnj8ABJ5BAASeQgAEnkMABJ5FAASeRgAEnoUABJ6HAASeiQAEnosABJ6OAASejwAEnpAABJ6RAASekgAEnpQABJ6WAASelwAEnpgABJ6aAASemwAEnuYABJ8JAASfKQAEn0kABJ9LAASfTQAEn08ABJ9RAASfVAAEn1UABJ9WAASfWQAEn1oABJ9cAASfXQAEn18ABJ9iAASfYwAEn2QABJ9nAASfaAAEn20ABJ96AASffwAEn4EABJ+DAASfiAAEn4sABJ+OAASfkAAEn7UABJ/ZAASgAAAEoCQABKAnAASgKQAEoCsABKAtAASgLwAEoDEABKAyAASgNQAEoEIABKBTAASgVQAEoFcABKBZAASgWwAEoF0ABKBfAASgYQAEoGMABKB0AASgdwAEoHoABKB9AASggAAEoIMABKCGAASgiQAEoIwABKCOAASgzQAEoM8ABKDRAASg0wAEoNYABKDXAASg2AAEoNkABKDaAASg3AAEoN4ABKDfAASg4AAEoOIABKDjAAShIgAEoSQABKEmAAShKAAEoSsABKEsAAShLQAEoS4ABKEvAAShMQAEoTMABKE0AAShNQAEoTcABKE4AAShdwAEoXkABKF8AAShfgAEoYEABKGCAAShgwAEoYQABKGFAAShhwAEoYkABKGKAAShiwAEoY0ABKGOAAShmwAEoZwABKGdAAShnwAEod4ABKHgAASh4gAEoeQABKHnAASh6AAEoekABKHqAASh6wAEoe0ABKHvAASh8AAEofEABKHzAASh9AAEojMABKI1AASiNwAEojkABKI8AASiPQAEoj4ABKI/AASiQAAEokIABKJEAASiRQAEokYABKJIAASiSQAEoogABKKKAASijAAEoo4ABKKRAASikgAEopMABKKUAASilQAEopcABKKZAASimgAEopsABKKdAASingAEot0ABKLfAASi4QAEouMABKLmAASi5wAEougABKLpAASi6gAEouwABKLuAASi7wAEovAABKLyAASi8wAEozIABKM0AASjNgAEozgABKM7AASjPAAEoz0ABKM+AASjPwAEo0EABKNDAASjRAAEo0UABKNHAASjSAAEo20ABKORAASjuAAEo9wABKPfAASj4QAEo+MABKPlAASj5wAEo+kABKPqAASj7QAEo/oABKQJAASkCwAEpA0ABKQPAASkEQAEpBMABKQVAASkFwAEpCYABKQpAASkLAAEpC8ABKQyAASkNQAEpDgABKQ7AASkPQAEpHwABKR+AASkgQAEpIMABKSGAASkhwAEpIgABKSJAASkigAEpIwABKSOAASkjwAEpJAABKSSAASkkwAEpNIABKTUAASk1gAEpNgABKTbAASk3AAEpN0ABKTeAASk3wAEpOEABKTjAASk5AAEpOUABKTnAASk6AAEpScABKUpAASlKwAEpS0ABKUwAASlMQAEpTIABKUzAASlNAAEpTYABKU4AASlOQAEpToABKU8AASlPQAEpXwABKV+AASlgQAEpYMABKWGAASlhwAEpYgABKWJAASligAEpYwABKWOAASljwAEpZAABKWSAASlkwAEpdIABKXUAASl1gAEpdgABKXbAASl3AAEpd0ABKXeAASl3wAEpeEABKXjAASl5AAEpeUABKXnAASl6AAEpicABKYpAASmKwAEpi0ABKYwAASmMQAEpjIABKYzAASmNAAEpjYABKY4AASmOQAEpjoABKY8AASmPQAEpnwABKZ+AASmgAAEpoIABKaFAASmhgAEpocABKaIAASmiQAEposABKaNAASmjgAEpo8ABKaRAASmkgAEppsABKacAASmngAEpt0ABKbfAASm4QAEpuMABKbmAASm5wAEpugABKbpAASm6gAEpuwABKbvAASm8AAEpvEABKbzAASm9AAEpzMABKc1AASnOAAEpzoABKc9AASnPgAEpz8ABKdAAASnQQAEp0MABKdGAASnRwAEp0gABKdKAASnSwAEp4oABKeMAASnjwAEp5EABKeUAASnlQAEp5YABKeXAASnmAAEp5oABKedAASnngAEp58ABKehAASnogAEp+EABKfjAASn5gAEp+gABKfrAASn7AAEp+0ABKfuAASn7wAEp/EABKf0AASn9QAEp/YABKf4AASn+QAEqDgABKg6AASoPAAEqD4ABKhBAASoQgAEqEMABKhEAASoRQAEqEcABKhKAASoSwAEqEwABKhOAASoTwAEqJoABKi9AASo3QAEqP0ABKj/AASpAQAEqQMABKkFAASpCAAEqQkABKkKAASpDQAEqQ4ABKkQAASpEQAEqRMABKkWAASpFwAEqRgABKkbAASpHAAEqSEABKkuAASpMwAEqTUABKk3AASpPAAEqT8ABKlCAASpRAAEqWkABKmNAASptAAEqdgABKnbAASp3QAEqd8ABKnhAASp4wAEqeUABKnmAASp6QAEqfYABKoHAASqCQAEqgsABKoNAASqDwAEqhEABKoTAASqFQAEqhcABKooAASqKwAEqi4ABKoxAASqNAAEqjcABKo6AASqPQAEqkAABKpCAASqgQAEqoMABKqFAASqhwAEqooABKqLAASqjAAEqo0ABKqOAASqkAAEqpIABKqTAASqlAAEqpYABKqXAASq1gAEqtgABKraAASq3AAEqt8ABKrgAASq4QAEquIABKrjAASq5QAEqucABKroAASq6QAEqusABKrsAASrKwAEqy0ABKswAASrMgAEqzUABKs2AASrNwAEqzgABKs5AASrOwAEqz0ABKs+AASrPwAEq0EABKtCAASrTwAEq1AABKtRAASrUwAEq5IABKuUAASrlgAEq5gABKubAASrnAAEq50ABKueAASrnwAEq6EABKujAASrpAAEq6UABKunAASrqAAEq+cABKvpAASr6wAEq+0ABKvwAASr8QAEq/IABKvzAASr9AAEq/YABKv4AASr+QAEq/oABKv8AASr/QAErDwABKw+AASsQAAErEIABKxFAASsRgAErEcABKxIAASsSQAErEsABKxNAASsTgAErE8ABKxRAASsUgAErJEABKyTAASslQAErJcABKyaAASsmwAErJwABKydAASsngAErKAABKyiAASsowAErKQABKymAASspwAErOYABKzoAASs6gAErOwABKzvAASs8AAErPEABKzyAASs8wAErPUABKz3AASs+AAErPkABKz7AASs/AAErSEABK1FAAStbAAErZAABK2TAAStlQAErZcABK2ZAAStmwAErZ0ABK2eAAStoQAEra4ABK29AAStvwAErcEABK3DAAStxQAErccABK3JAAStywAErdoABK3dAASt4AAEreMABK3mAASt6QAErewABK3vAASt8QAErjAABK4yAASuNAAErjYABK45AASuOgAErjsABK48AASuPQAErj8ABK5BAASuQgAErkMABK5FAASuRgAEroUABK6HAASuiQAErosABK6OAASujwAErpAABK6RAASukgAErpQABK6WAASulwAErpgABK6aAASumwAErtoABK7cAASu3gAEruAABK7jAASu5AAEruUABK7mAASu5wAErukABK7rAASu7AAEru0ABK7vAASu8AAEry8ABK8xAASvMwAErzUABK84AASvOQAErzoABK87AASvPAAErz4ABK9AAASvQQAEr0IABK9EAASvRQAEr4QABK+GAASviAAEr4oABK+NAASvjgAEr48ABK+QAASvkQAEr5MABK+VAASvlgAEr5cABK+ZAASvmgAEr9kABK/bAASv3QAEr98ABK/iAASv4wAEr+QABK/lAASv5gAEr+gABK/qAASv6wAEr+wABK/uAASv7wAEsC4ABLAwAASwMgAEsDQABLA3AASwOAAEsDkABLA6AASwOwAEsD0ABLA/AASwQAAEsEEABLBDAASwRAAEsE0ABLBOAASwUAAEsJMABLC3AASw2wAEsP4ABLElAASxRQAEsWwABLGTAASxswAEsdcABLH7AASx/QAEsgAABLICAASyBAAEsgYABLIJAASyCwAEsg0ABLIPAASyEQAEshMABLIVAASyGAAEshsABLIcAASyIQAEsi4ABLIxAASyMwAEsjYABLI5AASyOwAEsmAABLKEAASyqwAEss8ABLLSAASy1AAEstYABLLYAASy2gAEstwABLLdAASy4AAEsu0ABLMAAASzAgAEswQABLMGAASzCAAEswoABLMMAASzDgAEsxAABLMSAASzJQAEsygABLMrAASzLgAEszEABLM0AASzNwAEszoABLM9AASzQAAEs0IABLOBAASzgwAEs4YABLOIAASziwAEs4wABLONAASzjgAEs48ABLORAASzkwAEs5QABLOVAASzlwAEs5gABLOhAASzogAEs6QABLPjAASz5QAEs+cABLPpAASz7AAEs+0ABLPuAASz7wAEs/AABLPyAASz9AAEs/UABLP2AASz+AAEs/kABLQ4AAS0OgAEtD0ABLQ/AAS0QgAEtEMABLREAAS0RQAEtEYABLRIAAS0SgAEtEsABLRMAAS0TgAEtE8ABLRYAAS0WQAEtFsABLSaAAS0nAAEtJ4ABLSgAAS0owAEtKQABLSlAAS0pgAEtKcABLSpAAS0qwAEtKwABLStAAS0rwAEtLAABLTvAAS08QAEtPQABLT2AAS0+QAEtPoABLT7AAS0/AAEtP0ABLT/AAS1AQAEtQIABLUDAAS1BQAEtQYABLUPAAS1EAAEtRIABLVRAAS1UwAEtVUABLVXAAS1WgAEtVsABLVcAAS1XQAEtV4ABLVgAAS1YgAEtWMABLVkAAS1ZgAEtWcABLWmAAS1qAAEtasABLWtAAS1sAAEtbEABLWyAAS1swAEtbQABLW2AAS1uAAEtbkABLW6AAS1vAAEtb0ABLXKAAS1ywAEtcwABLXOAAS2DQAEtg8ABLYRAAS2EwAEthYABLYXAAS2GAAEthkABLYaAAS2HAAEth4ABLYfAAS2IAAEtiIABLYjAAS2YgAEtmQABLZmAAS2aAAEtmsABLZsAAS2bQAEtm4ABLZvAAS2cQAEtnMABLZ0AAS2dQAEtncABLZ4AAS2hQAEtowABLaPAAS2kQAEtpQABLabAAS2ngAEtqEABLakAAS2pgAEtvEABLcUAAS3NAAEt1QABLdWAAS3WAAEt1oABLdcAAS3XwAEt2AABLdhAAS3ZAAEt2UABLdnAAS3aAAEt2oABLdtAAS3bgAEt28ABLdyAAS3cwAEt3gABLeFAAS3igAEt4wABLeOAAS3kwAEt5YABLeZAAS3mwAEt8AABLfkAAS4CwAEuC8ABLgyAAS4NAAEuDYABLg4AAS4OgAEuDwABLg9AAS4QAAEuE0ABLheAAS4YAAEuGIABLhkAAS4ZgAEuGgABLhqAAS4bAAEuG4ABLh/AAS4ggAEuIUABLiIAAS4iwAEuI4ABLiRAAS4lAAEuJcABLiZAAS42AAEuNoABLjcAAS43gAEuOEABLjiAAS44wAEuOQABLjlAAS45wAEuOkABLjqAAS46wAEuO0ABLjuAAS5LQAEuS8ABLkxAAS5MwAEuTYABLk3AAS5OAAEuTkABLk6AAS5PAAEuT4ABLk/AAS5QAAEuUIABLlDAAS5ggAEuYQABLmHAAS5iQAEuYwABLmNAAS5jgAEuY8ABLmQAAS5kgAEuZQABLmVAAS5lgAEuZgABLmZAAS5pgAEuacABLmoAAS5qgAEuekABLnrAAS57QAEue8ABLnyAAS58wAEufQABLn1AAS59gAEufgABLn6AAS5+wAEufwABLn+AAS5/wAEuj4ABLpAAAS6QgAEukQABLpHAAS6SAAEukkABLpKAAS6SwAEuk0ABLpPAAS6UAAEulEABLpTAAS6VAAEupMABLqVAAS6lwAEupkABLqcAAS6nQAEup4ABLqfAAS6oAAEuqIABLqkAAS6pQAEuqYABLqoAAS6qQAEuugABLrqAAS67AAEuu4ABLrxAAS68gAEuvMABLr0AAS69QAEuvcABLr5AAS6+gAEuvsABLr9AAS6/gAEuz0ABLs/AAS7QQAEu0MABLtGAAS7RwAEu0gABLtJAAS7SgAEu0wABLtOAAS7TwAEu1AABLtSAAS7UwAEu3gABLucAAS7wwAEu+cABLvqAAS77AAEu+4ABLvwAAS78gAEu/QABLv1AAS7+AAEvAUABLwUAAS8FgAEvBgABLwaAAS8HAAEvB4ABLwgAAS8IgAEvDEABLw0AAS8NwAEvDoABLw9AAS8QAAEvEMABLxGAAS8SAAEvIcABLyJAAS8iwAEvI0ABLyQAAS8kQAEvJIABLyTAAS8lAAEvJYABLyYAAS8mQAEvJoABLycAAS8nQAEvNwABLzeAAS84AAEvOIABLzlAAS85gAEvOcABLzoAAS86QAEvOsABLztAAS87gAEvO8ABLzxAAS88gAEvTEABL0zAAS9NQAEvTcABL06AAS9OwAEvTwABL09AAS9PgAEvUAABL1CAAS9QwAEvUQABL1GAAS9RwAEvYYABL2IAAS9igAEvYwABL2PAAS9kAAEvZEABL2SAAS9kwAEvZUABL2XAAS9mAAEvZkABL2bAAS9nAAEvdsABL3dAAS93wAEveEABL3kAAS95QAEveYABL3nAAS96AAEveoABL3sAAS97QAEve4ABL3wAAS98QAEvjAABL4yAAS+NAAEvjYABL45AAS+OgAEvjsABL48AAS+PQAEvj8ABL5BAAS+QgAEvkMABL5FAAS+RgAEvoUABL6HAAS+iQAEvosABL6OAAS+jwAEvpAABL6RAAS+kgAEvpQABL6WAAS+lwAEvpgABL6aAAS+mwAEvuYABL8JAAS/KQAEv0kABL9LAAS/TQAEv08ABL9RAAS/VAAEv1UABL9WAAS/WQAEv1oABL9cAAS/XQAEv18ABL9hAAS/YgAEv2MABL9mAAS/ZwAEv2wABL95AAS/fgAEv4AABL+CAAS/hwAEv4oABL+NAAS/jwAEv7QABL/YAAS//wAEwCMABMAmAATAKAAEwCoABMAsAATALgAEwDAABMAxAATANAAEwEEABMBSAATAVAAEwFYABMBYAATAWgAEwFwABMBeAATAYAAEwGIABMBzAATAdgAEwHkABMB8AATAfwAEwIIABMCFAATAiAAEwIsABMCNAATAzAAEwM4ABMDQAATA0gAEwNUABMDWAATA1wAEwNgABMDZAATA2wAEwN0ABMDeAATA3wAEwOEABMDiAATBIQAEwSMABMElAATBJwAEwSoABMErAATBLAAEwS0ABMEuAATBMAAEwTIABMEzAATBNAAEwTYABME3AATBdgAEwXgABMF7AATBfQAEwYAABMGBAATBggAEwYMABMGEAATBhgAEwYgABMGJAATBigAEwYwABMGNAATBmgAEwZsABMGcAATBngAEwd0ABMHfAATB4QAEweMABMHmAATB5wAEwegABMHpAATB6gAEwewABMHuAATB7wAEwfAABMHyAATB8wAEwjIABMI0AATCNgAEwjgABMI7AATCPAAEwj0ABMI+AATCPwAEwkEABMJDAATCRAAEwkUABMJHAATCSAAEwocABMKJAATCiwAEwo0ABMKQAATCkQAEwpIABMKTAATClAAEwpYABMKYAATCmQAEwpoABMKcAATCnQAEwtwABMLeAATC4AAEwuIABMLlAATC5gAEwucABMLoAATC6QAEwusABMLtAATC7gAEwu8ABMLxAATC8gAEwzEABMMzAATDNQAEwzcABMM6AATDOwAEwzwABMM9AATDPgAEw0AABMNCAATDQwAEw0QABMNGAATDRwAEw2wABMOQAATDtwAEw9sABMPeAATD4AAEw+IABMPkAATD5gAEw+gABMPpAATD7AAEw/kABMQIAATECgAExAwABMQOAATEEAAExBIABMQUAATEFgAExCUABMQoAATEKwAExC4ABMQxAATENAAExDcABMQ6AATEPAAExHsABMR9AATEfwAExIEABMSEAATEhQAExIYABMSHAATEiAAExIoABMSMAATEjQAExI4ABMSQAATEkQAExNAABMTSAATE1AAExNYABMTZAATE2gAExNsABMTcAATE3QAExN8ABMThAATE4gAExOMABMTlAATE5gAExSUABMUnAATFKQAExSsABMUuAATFLwAExTAABMUxAATFMgAExTQABMU2AATFNwAExTgABMU6AATFOwAExXoABMV8AATFfgAExYAABMWDAATFhAAExYUABMWGAATFhwAExYkABMWLAATFjAAExY0ABMWPAATFkAAExc8ABMXRAATF0wAExdUABMXYAATF2QAExdoABMXbAATF3AAExd4ABMXgAATF4QAExeIABMXkAATF5QAExiQABMYmAATGKAAExioABMYtAATGLgAExi8ABMYwAATGMQAExjMABMY1AATGNgAExjcABMY5AATGOgAExnkABMZ7AATGfQAExn8ABMaCAATGgwAExoQABMaFAATGhgAExogABMaKAATGiwAExowABMaOAATGjwAExtoABMb9AATHHQAExz0ABMc/AATHQQAEx0MABMdFAATHSAAEx0kABMdKAATHTQAEx04ABMdQAATHUQAEx1MABMdWAATHVwAEx1gABMdbAATHXAAEx2EABMduAATHcwAEx3UABMd3AATHfAAEx38ABMeCAATHhAAEx6kABMfNAATH9AAEyBgABMgbAATIHQAEyB8ABMghAATIIwAEyCUABMgmAATIKQAEyDYABMhHAATISQAEyEsABMhNAATITwAEyFEABMhTAATIVQAEyFcABMhoAATIawAEyG4ABMhxAATIdAAEyHcABMh6AATIfQAEyIAABMiCAATIwQAEyMMABMjFAATIxwAEyMoABMjLAATIzAAEyM0ABMjOAATI0AAEyNIABMjTAATI1AAEyNYABMjXAATJFgAEyRgABMkaAATJHAAEyR8ABMkgAATJIQAEySIABMkjAATJJQAEyScABMkoAATJKQAEySsABMksAATJawAEyW0ABMlwAATJcgAEyXUABMl2AATJdwAEyXgABMl5AATJewAEyX0ABMl+AATJfwAEyYEABMmCAATJjwAEyZAABMmRAATJkwAEydIABMnUAATJ1gAEydgABMnbAATJ3AAEyd0ABMneAATJ3wAEyeEABMnjAATJ5AAEyeUABMnnAATJ6AAEyicABMopAATKKwAEyi0ABMowAATKMQAEyjIABMozAATKNAAEyjYABMo4AATKOQAEyjoABMo8AATKPQAEynwABMp+AATKgAAEyoIABMqFAATKhgAEyocABMqIAATKiQAEyosABMqNAATKjgAEyo8ABMqRAATKkgAEytEABMrTAATK1QAEytcABMraAATK2wAEytwABMrdAATK3gAEyuAABMriAATK4wAEyuQABMrmAATK5wAEyyYABMsoAATLKgAEyywABMsvAATLMAAEyzEABMsyAATLMwAEyzUABMs3AATLOAAEyzkABMs7AATLPAAEy2EABMuFAATLrAAEy9AABMvTAATL1QAEy9cABMvZAATL2wAEy90ABMveAATL4QAEy+4ABMv9AATL/wAEzAEABMwDAATMBQAEzAcABMwJAATMCwAEzBoABMwdAATMIAAEzCMABMwmAATMKQAEzCwABMwvAATMMQAEzHAABMxyAATMdAAEzHYABMx5AATMegAEzHsABMx8AATMfQAEzH8ABMyBAATMggAEzIMABMyFAATMhgAEzMUABMzHAATMyQAEzMsABMzOAATMzwAEzNAABMzRAATM0gAEzNQABMzWAATM1wAEzNgABMzaAATM2wAEzRoABM0cAATNHgAEzSAABM0jAATNJAAEzSUABM0mAATNJwAEzSkABM0rAATNLAAEzS0ABM0vAATNMAAEzW8ABM1xAATNcwAEzXUABM14AATNeQAEzXoABM17AATNfAAEzX4ABM2AAATNgQAEzYIABM2EAATNhQAEzcQABM3GAATNyAAEzcoABM3NAATNzgAEzc8ABM3QAATN0QAEzdMABM3VAATN1gAEzdcABM3ZAATN2gAEzhkABM4bAATOHQAEzh8ABM4iAATOIwAEziQABM4lAATOJgAEzigABM4qAATOKwAEziwABM4uAATOLwAEzm4ABM5wAATOcgAEznQABM53AATOeAAEznkABM56AATOewAEzn0ABM5/AATOgAAEzoEABM6DAATOhAAEzo0ABM6OAATOkAAEztMABM73AATPGwAEzz4ABM9lAATPhQAEz6wABM/TAATP8wAE0BcABNA7AATQPQAE0EAABNBCAATQRAAE0EYABNBJAATQSwAE0E0ABNBPAATQUQAE0FMABNBVAATQWAAE0FsABNBcAATQYQAE0G4ABNBxAATQcwAE0HYABNB5AATQewAE0KAABNDEAATQ6wAE0Q8ABNESAATRFAAE0RYABNEYAATRGgAE0RwABNEdAATRIAAE0S0ABNFAAATRQgAE0UQABNFGAATRSAAE0UoABNFMAATRTgAE0VAABNFSAATRZQAE0WgABNFrAATRbgAE0XEABNF0AATRdwAE0XoABNF9AATRgAAE0YIABNHBAATRwwAE0cYABNHIAATRywAE0cwABNHNAATRzgAE0c8ABNHRAATR0wAE0dQABNHVAATR1wAE0dgABNHhAATR4gAE0eQABNIjAATSJQAE0icABNIpAATSLAAE0i0ABNIuAATSLwAE0jAABNIyAATSNAAE0jUABNI2AATSOAAE0jkABNJ4AATSegAE0n0ABNJ/AATSggAE0oMABNKEAATShQAE0oYABNKIAATSigAE0osABNKMAATSjgAE0o8ABNKYAATSmQAE0psABNLaAATS3AAE0t4ABNLgAATS4wAE0uQABNLlAATS5gAE0ucABNLpAATS6wAE0uwABNLtAATS7wAE0vAABNMvAATTMQAE0zQABNM2AATTOQAE0zoABNM7AATTPAAE0z0ABNM/AATTQQAE00IABNNDAATTRQAE00YABNNPAATTUAAE01IABNORAATTkwAE05UABNOXAATTmgAE05sABNOcAATTnQAE054ABNOgAATTogAE06MABNOkAATTpgAE06cABNPmAATT6AAE0+sABNPtAATT8AAE0/EABNPyAATT8wAE0/QABNP2AATT+AAE0/kABNP6AATT/AAE0/0ABNQKAATUCwAE1AwABNQOAATUTQAE1E8ABNRRAATUUwAE1FYABNRXAATUWAAE1FkABNRaAATUXAAE1F4ABNRfAATUYAAE1GIABNRjAATUogAE1KQABNSnAATUqQAE1KwABNStAATUrgAE1K8ABNSwAATUsgAE1LQABNS1AATUtgAE1LgABNS5AATUxwAE1NQABNTfAATU4gAE1OUABNToAATU6wAE1O4ABNT5AATU/AAE1P8ABNUCAATVBQAE1QgABNUKAATVFgAE1SQABNUuAATVNwAE1YIABNWlAATVxQAE1eUABNXnAATV6QAE1esABNXtAATV8AAE1fEABNXyAATV9QAE1fYABNX4AATV+QAE1fsABNX+AATV/wAE1gAABNYDAATWBAAE1g0ABNYaAATWHwAE1iEABNYjAATWKAAE1isABNYuAATWMAAE1lUABNZ5AATWoAAE1sQABNbHAATWyQAE1ssABNbNAATWzwAE1tEABNbSAATW1QAE1uIABNbzAATW9QAE1vcABNb5AATW+wAE1v0ABNb/AATXAQAE1wMABNcUAATXFwAE1xoABNcdAATXIAAE1yMABNcmAATXKQAE1ywABNcuAATXbQAE128ABNdxAATXcwAE13YABNd3AATXeAAE13kABNd6AATXfAAE134ABNd/AATXgAAE14IABNeDAATXwgAE18QABNfGAATXyAAE18sABNfMAATXzQAE184ABNfPAATX0QAE19MABNfUAATX1QAE19cABNfYAATYFwAE2BkABNgcAATYHgAE2CEABNgiAATYIwAE2CQABNglAATYJwAE2CkABNgqAATYKwAE2C0ABNguAATYOwAE2DwABNg9AATYPwAE2H4ABNiAAATYggAE2IQABNiHAATYiAAE2IkABNiKAATYiwAE2I0ABNiPAATYkAAE2JEABNiTAATYlAAE2NMABNjVAATY1wAE2NkABNjcAATY3QAE2N4ABNjfAATY4AAE2OIABNjkAATY5QAE2OYABNjoAATY6QAE2SgABNkqAATZLAAE2S4ABNkxAATZMgAE2TMABNk0AATZNQAE2TcABNk5AATZOgAE2TsABNk9AATZPgAE2X0ABNl/AATZgQAE2YMABNmGAATZhwAE2YgABNmJAATZigAE2YwABNmOAATZjwAE2ZAABNmSAATZkwAE2dIABNnUAATZ1gAE2dgABNnbAATZ3AAE2d0ABNneAATZ3wAE2eEABNnjAATZ5AAE2eUABNnnAATZ6AAE2g0ABNoxAATaWAAE2nwABNp/AATagQAE2oMABNqFAATahwAE2okABNqKAATajQAE2poABNqpAATaqwAE2q0ABNqvAATasQAE2rMABNq1AATatwAE2sYABNrJAATazAAE2s8ABNrSAATa1QAE2tgABNrbAATa3QAE2xwABNseAATbIAAE2yIABNslAATbJgAE2ycABNsoAATbKQAE2ysABNstAATbLgAE2y8ABNsxAATbMgAE23EABNtzAATbdQAE23cABNt6AATbewAE23wABNt9AATbfgAE24AABNuCAATbgwAE24QABNuGAATbhwAE28YABNvIAATbygAE28wABNvPAATb0AAE29EABNvSAATb0wAE29UABNvXAATb2AAE29kABNvbAATb3AAE3BsABNwdAATcHwAE3CEABNwkAATcJQAE3CYABNwnAATcKAAE3CoABNwsAATcLQAE3C4ABNwwAATcMQAE3HAABNxyAATcdAAE3HYABNx5AATcegAE3HsABNx8AATcfQAE3H8ABNyBAATcggAE3IMABNyFAATchgAE3MUABNzHAATcyQAE3MsABNzOAATczwAE3NAABNzRAATc0gAE3NQABNzWAATc1wAE3NgABNzaAATc2wAE3RoABN0cAATdHgAE3SAABN0jAATdJAAE3SUABN0mAATdJwAE3SkABN0rAATdLAAE3S0ABN0vAATdMAAE3XsABN2eAATdvgAE3d4ABN3gAATd4gAE3eQABN3mAATd6QAE3eoABN3rAATd7gAE3e8ABN3xAATd8gAE3fQABN33AATd+AAE3fkABN38AATd/QAE3gIABN4PAATeFAAE3hYABN4YAATeHQAE3iAABN4jAATeJQAE3koABN5uAATelQAE3rkABN68AATevgAE3sAABN7CAATexAAE3sYABN7HAATeygAE3tcABN7oAATe6gAE3uwABN7uAATe8AAE3vIABN70AATe9gAE3vgABN8JAATfDAAE3w8ABN8SAATfFQAE3xgABN8bAATfHgAE3yEABN8jAATfYgAE32QABN9mAATfaAAE32sABN9sAATfbQAE324ABN9vAATfcQAE33MABN90AATfdQAE33cABN94AATftwAE37kABN+7AATfvQAE38AABN/BAATfwgAE38MABN/EAATfxgAE38gABN/JAATfygAE38wABN/NAATgDAAE4A4ABOARAATgEwAE4BYABOAXAATgGAAE4BkABOAaAATgHAAE4B4ABOAfAATgIAAE4CIABOAjAATgMAAE4DEABOAyAATgNAAE4HMABOB1AATgdwAE4HkABOB8AATgfQAE4H4ABOB/AATggAAE4IIABOCEAATghQAE4IYABOCIAATgiQAE4MgABODKAATgzAAE4M4ABODRAATg0gAE4NMABODUAATg1QAE4NcABODZAATg2gAE4NsABODdAATg3gAE4R0ABOEfAAThIQAE4SMABOEmAAThJwAE4SgABOEpAAThKgAE4SwABOEuAAThLwAE4TAABOEyAAThMwAE4XIABOF0AAThdgAE4XgABOF7AAThfAAE4X0ABOF+AAThfwAE4YEABOGDAAThhAAE4YUABOGHAAThiAAE4ccABOHJAAThywAE4c0ABOHQAATh0QAE4dIABOHTAATh1AAE4dYABOHYAATh2QAE4doABOHcAATh3QAE4gIABOImAATiTQAE4nEABOJ0AATidgAE4ngABOJ6AATifAAE4n4ABOJ/AATiggAE4o8ABOKeAATioAAE4qIABOKkAATipgAE4qgABOKqAATirAAE4rsABOK+AATiwQAE4sQABOLHAATiygAE4s0ABOLQAATi0gAE4xEABOMTAATjFQAE4xcABOMaAATjGwAE4xwABOMdAATjHgAE4yAABOMiAATjIwAE4yQABOMmAATjJwAE42YABONoAATjagAE42wABONvAATjcAAE43EABONyAATjcwAE43UABON3AATjeAAE43kABON7AATjfAAE47sABOO9AATjvwAE48EABOPEAATjxQAE48YABOPHAATjyAAE48oABOPMAATjzQAE484ABOPQAATj0QAE5BAABOQSAATkFAAE5BYABOQZAATkGgAE5BsABOQcAATkHQAE5B8ABOQhAATkIgAE5CMABOQlAATkJgAE5GUABORnAATkaQAE5GsABORuAATkbwAE5HAABORxAATkcgAE5HQABOR2AATkdwAE5HgABOR6AATkewAE5LoABOS8AATkvgAE5MAABOTDAATkxAAE5MUABOTGAATkxwAE5MkABOTLAATkzAAE5M0ABOTPAATk0AAE5Q8ABOURAATlEwAE5RUABOUYAATlGQAE5RoABOUbAATlHAAE5R4ABOUgAATlIQAE5SIABOUkAATlJQAE5XAABOWTAATlswAE5dMABOXVAATl1wAE5dkABOXbAATl3gAE5d8ABOXgAATl4wAE5eQABOXmAATl5wAE5ekABOXsAATl7QAE5e4ABOXxAATl8gAE5fcABOYEAATmCQAE5gsABOYNAATmEgAE5hUABOYYAATmGgAE5j8ABOZjAATmigAE5q4ABOaxAATmswAE5rUABOa3AATmuQAE5rsABOa8AATmvwAE5swABObdAATm3wAE5uEABObjAATm5QAE5ucABObpAATm6wAE5u0ABOb+AATnAQAE5wQABOcHAATnCgAE5w0ABOcQAATnEwAE5xYABOcYAATnVwAE51kABOdbAATnXQAE52AABOdhAATnYgAE52MABOdkAATnZgAE52gABOdpAATnagAE52wABOdtAATnrAAE564ABOewAATnsgAE57UABOe2AATntwAE57gABOe5AATnuwAE570ABOe+AATnvwAE58EABOfCAAToAQAE6AMABOgGAAToCAAE6AsABOgMAAToDQAE6A4ABOgPAAToEQAE6BMABOgUAAToFQAE6BcABOgYAAToJQAE6CYABOgnAAToKQAE6GgABOhqAATobAAE6G4ABOhxAATocgAE6HMABOh0AATodQAE6HcABOh5AAToegAE6HsABOh9AATofgAE6L0ABOi/AATowQAE6MMABOjGAAToxwAE6MgABOjJAAToygAE6MwABOjOAATozwAE6NAABOjSAATo0wAE6RIABOkUAATpFgAE6RgABOkbAATpHAAE6R0ABOkeAATpHwAE6SEABOkjAATpJAAE6SUABOknAATpKAAE6WcABOlpAATpawAE6W0ABOlwAATpcQAE6XIABOlzAATpdAAE6XYABOl4AATpeQAE6XoABOl8AATpfQAE6bwABOm+AATpwAAE6cIABOnFAATpxgAE6ccABOnIAATpyQAE6csABOnNAATpzgAE6c8ABOnRAATp0gAE6fcABOobAATqQgAE6mYABOppAATqawAE6m0ABOpvAATqcQAE6nMABOp0AATqdwAE6oQABOqTAATqlQAE6pcABOqZAATqmwAE6p0ABOqfAATqoQAE6rAABOqzAATqtgAE6rkABOq8AATqvwAE6sIABOrFAATqxwAE6wYABOsIAATrCwAE6w0ABOsQAATrEQAE6xIABOsTAATrFAAE6xYABOsYAATrGQAE6xoABOscAATrHQAE61wABOteAATrYAAE62IABOtlAATrZgAE62cABOtoAATraQAE62sABOttAATrbgAE628ABOtxAATrcgAE67EABOuzAATrtQAE67cABOu6AATruwAE67wABOu9AATrvgAE68AABOvCAATrwwAE68QABOvGAATrxwAE7AYABOwIAATsCwAE7A0ABOwQAATsEQAE7BIABOwTAATsFAAE7BYABOwYAATsGQAE7BoABOwcAATsHQAE7FwABOxeAATsYAAE7GIABOxlAATsZgAE7GcABOxoAATsaQAE7GsABOxtAATsbgAE7G8ABOxxAATscgAE7LEABOyzAATstQAE7LcABOy6AATsuwAE7LwABOy9AATsvgAE7MAABOzCAATswwAE7MQABOzGAATsxwAE7QYABO0IAATtCgAE7QwABO0PAATtEAAE7REABO0SAATtEwAE7RUABO0XAATtGAAE7RkABO0bAATtHAAE7WcABO2KAATtqgAE7coABO3MAATtzgAE7dAABO3SAATt1QAE7dYABO3XAATt2gAE7dsABO3dAATt3gAE7eAABO3jAATt5AAE7eUABO3oAATt6QAE7e4ABO37AATuAAAE7gIABO4EAATuCQAE7gwABO4PAATuEQAE7jYABO5aAATugQAE7qUABO6oAATuqgAE7qwABO6uAATusAAE7rIABO6zAATutgAE7sMABO7UAATu1gAE7tgABO7aAATu3AAE7t4ABO7gAATu4gAE7uQABO71AATu+AAE7vsABO7+AATvAQAE7wQABO8HAATvCgAE7w0ABO8PAATvTgAE71AABO9SAATvVAAE71cABO9YAATvWQAE71oABO9bAATvXQAE718ABO9gAATvYQAE72MABO9kAATvowAE76UABO+nAATvqQAE76wABO+tAATvrgAE768ABO+wAATvsgAE77QABO+1AATvtgAE77gABO+5AATv+AAE7/oABO/9AATv/wAE8AIABPADAATwBAAE8AUABPAGAATwCAAE8AoABPALAATwDAAE8A4ABPAPAATwHAAE8B0ABPAeAATwIAAE8F8ABPBhAATwYwAE8GUABPBoAATwaQAE8GoABPBrAATwbAAE8G4ABPBwAATwcQAE8HIABPB0AATwdQAE8LQABPC2AATwuAAE8LoABPC9AATwvgAE8L8ABPDAAATwwQAE8MMABPDFAATwxgAE8McABPDJAATwygAE8QkABPELAATxDQAE8Q8ABPESAATxEwAE8RQABPEVAATxFgAE8RgABPEaAATxGwAE8RwABPEeAATxHwAE8V4ABPFgAATxYgAE8WQABPFnAATxaAAE8WkABPFqAATxawAE8W0ABPFvAATxcAAE8XEABPFzAATxdAAE8bMABPG1AATxtwAE8bkABPG8AATxvQAE8b4ABPG/AATxwAAE8cIABPHEAATxxQAE8cYABPHIAATxyQAE8e4ABPISAATyOQAE8l0ABPJgAATyYgAE8mQABPJmAATyaAAE8moABPJrAATybgAE8nsABPKKAATyjAAE8o4ABPKQAATykgAE8pQABPKWAATymAAE8qcABPKqAATyrQAE8rAABPKzAATytgAE8rkABPK8AATyvgAE8v0ABPL/AATzAQAE8wMABPMGAATzBwAE8wgABPMJAATzCgAE8wwABPMOAATzDwAE8xAABPMSAATzEwAE81IABPNUAATzVgAE81gABPNbAATzXAAE810ABPNeAATzXwAE82EABPNjAATzZAAE82UABPNnAATzaAAE86cABPOpAATzqwAE860ABPOwAATzsQAE87IABPOzAATztAAE87YABPO4AATzuQAE87oABPO8AATzvQAE8/wABPP+AAT0AAAE9AIABPQFAAT0BgAE9AcABPQIAAT0CQAE9AsABPQNAAT0DgAE9A8ABPQRAAT0EgAE9FEABPRTAAT0VQAE9FcABPRaAAT0WwAE9FwABPRdAAT0XgAE9GAABPRiAAT0YwAE9GQABPRmAAT0ZwAE9KYABPSoAAT0qgAE9KwABPSvAAT0sAAE9LEABPSyAAT0swAE9LUABPS3AAT0uAAE9LkABPS7AAT0vAAE9PsABPT9AAT0/wAE9QEABPUEAAT1BQAE9QYABPUHAAT1CAAE9QoABPUMAAT1DQAE9Q4ABPUQAAT1EQAE9VwABPV/AAT1nwAE9b8ABPXBAAT1wwAE9cUABPXHAAT1ygAE9csABPXMAAT1zwAE9dAABPXSAAT10wAE9dUABPXYAAT12QAE9doABPXdAAT13gAE9eMABPXwAAT19QAE9fcABPX5AAT1/gAE9gEABPYEAAT2BgAE9isABPZPAAT2dgAE9poABPadAAT2nwAE9qEABPajAAT2pQAE9qcABPaoAAT2qwAE9rgABPbJAAT2ywAE9s0ABPbPAAT20QAE9tMABPbVAAT21wAE9tkABPbqAAT27QAE9vAABPbzAAT29gAE9vkABPb8AAT2/wAE9wIABPcEAAT3QwAE90UABPdHAAT3SQAE90wABPdNAAT3TgAE908ABPdQAAT3UgAE91QABPdVAAT3VgAE91gABPdZAAT3mAAE95oABPecAAT3ngAE96EABPeiAAT3owAE96QABPelAAT3pwAE96kABPeqAAT3qwAE960ABPeuAAT37QAE9+8ABPfyAAT39AAE9/cABPf4AAT3+QAE9/oABPf7AAT3/QAE9/8ABPgAAAT4AQAE+AMABPgEAAT4EQAE+BIABPgTAAT4FQAE+FQABPhWAAT4WAAE+FoABPhdAAT4XgAE+F8ABPhgAAT4YQAE+GMABPhlAAT4ZgAE+GcABPhpAAT4agAE+KkABPirAAT4rQAE+K8ABPiyAAT4swAE+LQABPi1AAT4tgAE+LgABPi6AAT4uwAE+LwABPi+AAT4vwAE+P4ABPkAAAT5AgAE+QQABPkHAAT5CAAE+QkABPkKAAT5CwAE+Q0ABPkPAAT5EAAE+REABPkTAAT5FAAE+VMABPlVAAT5VwAE+VkABPlcAAT5XQAE+V4ABPlfAAT5YAAE+WIABPlkAAT5ZQAE+WYABPloAAT5aQAE+agABPmqAAT5rAAE+a4ABPmxAAT5sgAE+bMABPm0AAT5tQAE+bcABPm5AAT5ugAE+bsABPm9AAT5vgAE+eMABPoHAAT6LgAE+lIABPpVAAT6VwAE+lkABPpbAAT6XQAE+l8ABPpgAAT6YwAE+nAABPp/AAT6gQAE+oMABPqFAAT6hwAE+okABPqLAAT6jQAE+pwABPqfAAT6ogAE+qUABPqoAAT6qwAE+q4ABPqxAAT6swAE+vIABPr0AAT69gAE+vgABPr7AAT6/AAE+v0ABPr+AAT6/wAE+wEABPsDAAT7BAAE+wUABPsHAAT7CAAE+0cABPtJAAT7SwAE+00ABPtQAAT7UQAE+1IABPtTAAT7VAAE+1YABPtYAAT7WQAE+1oABPtcAAT7XQAE+5wABPueAAT7oAAE+6IABPulAAT7pgAE+6cABPuoAAT7qQAE+6sABPutAAT7rgAE+68ABPuxAAT7sgAE+/EABPvzAAT79QAE+/cABPv6AAT7+wAE+/wABPv9AAT7/gAE/AAABPwCAAT8AwAE/AQABPwGAAT8BwAE/EYABPxIAAT8SgAE/EwABPxPAAT8UAAE/FEABPxSAAT8UwAE/FUABPxXAAT8WAAE/FkABPxbAAT8XAAE/JsABPydAAT8nwAE/KEABPykAAT8pQAE/KYABPynAAT8qAAE/KoABPysAAT8rQAE/K4ABPywAAT8sQAE/PAABPzyAAT89AAE/PYABPz5AAT8+gAE/PsABPz8AAT8/QAE/P8ABP0BAAT9AgAE/QMABP0FAAT9BgAE/Q8ABP0QAAT9EgAE/VUABP15AAT9nQAE/cAABP3nAAT+BwAE/i4ABP5VAAT+dQAE/pkABP69AAT+vwAE/sIABP7EAAT+xgAE/sgABP7LAAT+zQAE/s8ABP7RAAT+0wAE/tUABP7XAAT+2gAE/t0ABP7eAAT+4wAE/vAABP7zAAT+9QAE/vgABP77AAT+/QAE/yIABP9GAAT/bQAE/5EABP+UAAT/lgAE/5gABP+aAAT/nAAE/54ABP+fAAT/ogAE/68ABP/CAAT/xAAE/8YABP/IAAT/ygAE/8wABP/OAAT/0AAE/9IABP/UAAT/5wAE/+oABP/tAAT/8AAE//MABP/2AAT/+QAE//wABP//AAUAAgAFAAQABQBDAAUARQAFAEgABQBKAAUATQAFAE4ABQBPAAUAUAAFAFEABQBTAAUAVQAFAFYABQBXAAUAWQAFAFoABQBjAAUAZAAFAGYABQClAAUApwAFAKkABQCrAAUArgAFAK8ABQCwAAUAsQAFALIABQC0AAUAtgAFALcABQC4AAUAugAFALsABQD6AAUA/AAFAP8ABQEBAAUBBAAFAQUABQEGAAUBBwAFAQgABQEKAAUBDAAFAQ0ABQEOAAUBEAAFAREABQEaAAUBGwAFAR0ABQFcAAUBXgAFAWAABQFiAAUBZQAFAWYABQFnAAUBaAAFAWkABQFrAAUBbQAFAW4ABQFvAAUBcQAFAXIABQGxAAUBswAFAbYABQG4AAUBuwAFAbwABQG9AAUBvgAFAb8ABQHBAAUBwwAFAcQABQHFAAUBxwAFAcgABQHRAAUB0gAFAdQABQITAAUCFQAFAhcABQIZAAUCHAAFAh0ABQIeAAUCHwAFAiAABQIiAAUCJAAFAiUABQImAAUCKAAFAikABQJoAAUCagAFAm0ABQJvAAUCcgAFAnMABQJ0AAUCdQAFAnYABQJ4AAUCegAFAnsABQJ8AAUCfgAFAn8ABQKMAAUCjQAFAo4ABQKQAAUCzwAFAtEABQLTAAUC1QAFAtgABQLZAAUC2gAFAtsABQLcAAUC3gAFAuAABQLhAAUC4gAFAuQABQLlAAUDJAAFAyYABQMpAAUDKwAFAy4ABQMvAAUDMAAFAzEABQMyAAUDNAAFAzYABQM3AAUDOAAFAzoABQM7AAUDSgAFA1cABQNeAAUDYQAFA2QABQNnAAUDbgAFA3EABQN0AAUDdwAFA3kABQOAAAUDywAFA+4ABQQOAAUELgAFBDAABQQyAAUENAAFBDYABQQ5AAUEOgAFBDsABQQ+AAUEPwAFBEEABQRCAAUERAAFBEcABQRIAAUESQAFBEwABQRNAAUEVgAFBGMABQRoAAUEagAFBGwABQRxAAUEdAAFBHcABQR5AAUEngAFBMIABQTpAAUFDQAFBRAABQUSAAUFFAAFBRYABQUYAAUFGgAFBRsABQUeAAUFKwAFBTwABQU+AAUFQAAFBUIABQVEAAUFRgAFBUgABQVKAAUFTAAFBV0ABQVgAAUFYwAFBWYABQVpAAUFbAAFBW8ABQVyAAUFdQAFBXcABQW2AAUFuAAFBboABQW8AAUFvwAFBcAABQXBAAUFwgAFBcMABQXFAAUFxwAFBcgABQXJAAUFywAFBcwABQYLAAUGDQAFBg8ABQYRAAUGFAAFBhUABQYWAAUGFwAFBhgABQYaAAUGHAAFBh0ABQYeAAUGIAAFBiEABQZgAAUGYgAFBmUABQZnAAUGagAFBmsABQZsAAUGbQAFBm4ABQZwAAUGcgAFBnMABQZ0AAUGdgAFBncABQaEAAUGhQAFBoYABQaIAAUGxwAFBskABQbLAAUGzQAFBtAABQbRAAUG0gAFBtMABQbUAAUG1gAFBtgABQbZAAUG2gAFBtwABQbdAAUHHAAFBx4ABQcgAAUHIgAFByUABQcmAAUHJwAFBygABQcpAAUHKwAFBy0ABQcuAAUHLwAFBzEABQcyAAUHcQAFB3MABQd1AAUHdwAFB3oABQd7AAUHfAAFB30ABQd+AAUHgAAFB4IABQeDAAUHhAAFB4YABQeHAAUHxgAFB8gABQfKAAUHzAAFB88ABQfQAAUH0QAFB9IABQfTAAUH1QAFB9cABQfYAAUH2QAFB9sABQfcAAUIGwAFCB0ABQgfAAUIIQAFCCQABQglAAUIJgAFCCcABQgoAAUIKgAFCCwABQgtAAUILgAFCDAABQgxAAUIVgAFCHoABQihAAUIxQAFCMgABQjKAAUIzAAFCM4ABQjQAAUI0gAFCNMABQjWAAUI4wAFCPIABQj0AAUI9gAFCPgABQj6AAUI/AAFCP4ABQkAAAUJDwAFCRIABQkVAAUJGAAFCRsABQkeAAUJIQAFCSQABQkmAAUJZQAFCWcABQlpAAUJawAFCW4ABQlvAAUJcAAFCXEABQlyAAUJdAAFCXYABQl3AAUJeAAFCXoABQl7AAUJugAFCbwABQm+AAUJwAAFCcMABQnEAAUJxQAFCcYABQnHAAUJyQAFCcsABQnMAAUJzQAFCc8ABQnQAAUKDwAFChEABQoTAAUKFQAFChgABQoZAAUKGgAFChsABQocAAUKHgAFCiAABQohAAUKIgAFCiQABQolAAUKZAAFCmYABQpoAAUKagAFCm0ABQpuAAUKbwAFCnAABQpxAAUKcwAFCnUABQp2AAUKdwAFCnkABQp6AAUKuQAFCrsABQq9AAUKvwAFCsIABQrDAAUKxAAFCsUABQrGAAUKyAAFCsoABQrLAAUKzAAFCs4ABQrPAAULDgAFCxAABQsSAAULFAAFCxcABQsYAAULGQAFCxoABQsbAAULHQAFCx8ABQsgAAULIQAFCyMABQskAAULYwAFC2UABQtnAAULaQAFC2wABQttAAULbgAFC28ABQtwAAULcgAFC3QABQt1AAULdgAFC3gABQt5AAULxAAFC+cABQwHAAUMJwAFDCkABQwrAAUMLQAFDC8ABQwyAAUMMwAFDDQABQw3AAUMOAAFDDoABQw7AAUMPQAFDEAABQxBAAUMQgAFDEUABQxGAAUMSwAFDFgABQxdAAUMXwAFDGEABQxmAAUMaQAFDGwABQxuAAUMkwAFDLcABQzeAAUNAgAFDQUABQ0HAAUNCQAFDQsABQ0NAAUNDwAFDRAABQ0TAAUNIAAFDTEABQ0zAAUNNQAFDTcABQ05AAUNOwAFDT0ABQ0/AAUNQQAFDVIABQ1VAAUNWAAFDVsABQ1eAAUNYQAFDWQ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 + + + + + type + + + + priceId + + + + forceSmartIds + + + + apiKeyName + + + + 1 + chain + + + + name + + + + peerName + + + + metadata + + + + walletId + + + + bridgeParachainId + + + + historyApiType + + + + source + + + + parentId + + + + minimalAppVersion + + + + typesOverrideCommon + + + + stakingApiType + + + + address + + + + 1 + config + + + + identifier + + + + crowdloansApiUrl + + + + precision + + + + blockNumber + + + + identifier + + + + status + + + + identifier + + + + identifier + + + + currencyId + + + + url + + + + isEthereumBased + + + + coingeckoPriceId + + + + Undefined + 7 + CDTonConnectedApp + 1 + + + + + + CDXcmAvailableAsset + Undefined + 16 + CDXcmAvailableAsset + 1 + + + + + + CDPolkaswapRemoteSettings + Undefined + 3 + CDPolkaswapRemoteSettings + 1 + + + + + + CDPriceProvider + Undefined + 11 + CDPriceProvider + 1 + + + + + + CDXcmAvailableDestination + Undefined + 20 + CDXcmAvailableDestination + 1 + + + + + + existentialDeposit + + + + isUtility + + + + purchaseProviders + + + + 1 + chain + + + + 1 + priceProvider + + + + version + + + + assetId + + + + apiQueryName + + + + appUrl + + + + name + + + + resolver + + + + disabled + + + + chainId + + + + isOrml + + + + 1 + asset + + + + pricingApiType + + + + addressPrefix + + + + 1 + assets + + + + 1 + explorers + + + + 1 + selectedNode + + + + destWeightIsPrimitive + + + + 1 + availableDestinations + + + + controller + + + + type + + + + call + + + + moduleName + + + + timestamp + + + + appDescription + + + + isConnected + + + + historyApiUrl + + + + minAmount + + + + name + + + + targetAddress + + + + stakingApiUrl + + + + name + + + + Undefined + 15 + CDPriceData + 1 + + + + + + CDAsset + Undefined + 2 + CDAsset + 1 + + + + + + CDStashItem + Undefined + 10 + CDStashItem + 1 + + + + + + CDScamInfo + Undefined + 19 + CDScamInfo + 1 + + + + + + peerAddress + + + + type + + + + CDContact + Undefined + 6 + CDContact + 1 + + + + + + fiatDayByChange + + + + color + + + + icon + + + + name + + + + staking + + + + xstusdId + + + + code + + + + name + + + + address + + + + clientId + + + + privateKey + + + + txVersion + + + + ecosystem + + + \ No newline at end of file diff --git a/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents index a642fb38cc..ed73597651 100644 --- a/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents +++ b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents @@ -1,5 +1,5 @@ - + @@ -65,7 +65,7 @@ - + diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SoraSubqueryHistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SoraSubqueryHistoryOperationFactory.swift index cfd2b9bd95..cf9cffbde5 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SoraSubqueryHistoryOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SoraSubqueryHistoryOperationFactory.swift @@ -74,15 +74,15 @@ class SoraSubqueryHistoryOperationFactory { var filterStrings: [String] = [] if filters.contains(where: { $0.type == .swap && $0.selected }) { - filterStrings.append("{ method:{equalTo:\"swap\"}}") + filterStrings.append("{ method:{equalToInsensitive:\"swap\"}}") } if filters.contains(where: { $0.type == .reward && $0.selected }) { - filterStrings.append("{ method:{ equalTo:\"Rewarded\"}}") + filterStrings.append("{ method:{ equalToInsensitive:\"rewarded\"}}") } if filters.contains(where: { $0.type == .transfer && $0.selected }) { - filterStrings.append("{ method:{ equalTo:\"Transfer\"}}") + filterStrings.append("{ method:{ equalToInsensitive:\"transfer\"}}") } guard filterStrings.isNotEmpty else { From 0ae07a5575bba49236b3437e07e6371c34bdb345 Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Sat, 28 Dec 2024 16:44:40 +0700 Subject: [PATCH 133/156] ton low fee alert text changed --- fearless/Modules/Transfer/Transfer/TonTransferFlowUseCase.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fearless/Modules/Transfer/Transfer/TonTransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/TonTransferFlowUseCase.swift index 9865a60a09..1304c717a7 100644 --- a/fearless/Modules/Transfer/Transfer/TonTransferFlowUseCase.swift +++ b/fearless/Modules/Transfer/Transfer/TonTransferFlowUseCase.swift @@ -180,7 +180,7 @@ final class TonTransferFlowUseCase: TransferFlowUseCase { } if let balance = utilityBalance, balance < 0.005 { - onFeeEstimationFailure?(ConvenienceError(error: "You don't have enough tokens to cover the transaction fee and complete the transfer.")) + onFeeEstimationFailure?(ConvenienceError(error: "Your account is inactive. Top up your balance to calculate the fee.")) return } From a1ff5ca06b2e482363a084bdcd7ac1184cc49f6c Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Thu, 16 Jan 2025 14:20:53 +0700 Subject: [PATCH 134/156] fix socket reconnection --- fearless.xcodeproj/project.pbxproj | 426 ++++++----- .../xcshareddata/swiftpm/Package.resolved | 665 +++++++++--------- .../BalanceLocksFetchingFactory.swift | 3 +- .../ApplicationLayer/ServiceAssembly.swift | 2 +- .../Balance/BalanceLocksFetching.swift | 78 +- .../Balance/RemoteSubscription/Requests.swift | 8 +- .../SubstrateRemoteBalanceFetching.swift | 10 +- .../WalletBalanceSubscriptionAdapter.swift | 213 +++--- .../StorageKeyEncodingOperation.swift | 2 +- .../ChainRegistry/ChainRegistry.swift | 27 +- .../RuntimeProviderPool.swift | 30 +- .../SnapshotHotBootBuilder.swift | 13 +- .../SelectableAmountInputView.swift | 11 +- .../CachedStorageRequestPerformer.swift | 10 +- .../MixStorageRequestsKeysBuilder.swift | 48 ++ ...orageRequestKeyEncodingWorkerFactory.swift | 52 ++ .../StorageRequestWorkerBuilder.swift | 13 +- .../Async/Requests/CachedRequest.swift | 8 + .../Storage/Async/Requests/MixStorage.swift | 49 ++ .../Requests}/MultipleRequest.swift | 3 +- .../Async/Requests/PrefixRequest.swift | 22 + .../{ => Async/Requests}/StorageRequest.swift | 5 +- .../MixStorageDecodingListWorker.swift | 54 ++ ...eSingleStorageResponseValueExtractor.swift | 31 + ...ultipleStorageResponseValueExtractor.swift | 9 + .../PrefixResponseValueExtractor.swift} | 11 +- .../SingleStorageResponseValueExtractor.swift | 0 .../StorageResponseValueExtractor.swift | 0 .../EncodableStorageRequestWorker.swift | 7 +- .../MixStorageRequestsWorker.swift | 32 + .../NMapStorageRequestWorker.swift | 11 +- .../PrefixEncodableStorageRequestWorker.swift | 43 ++ .../PrefixStorageRequestWorker.swift | 7 +- .../SimpleStorageRequestWorker.swift | 7 +- .../StorageRequestWorker.swift | 4 +- ...AsyncStorageRequestFactory+Extension.swift | 2 +- .../AsyncStorageRequestFactory.swift | 2 +- .../AsyncStorageRequestFactoryDefault.swift | 17 +- .../ChildStorageResponseDecodingWorker.swift | 14 +- .../JSONRPCListWorker.swift | 0 .../JSONRPCWorkerDefault.swift | 7 + .../StorageFactoryWorkers/KeyEncoding.swift | 5 + .../MapKeyEncodingWorker.swift | 16 +- .../NMapKeyEncodingWorker.swift | 7 +- .../SimpleKeyEncodingWorker.swift | 27 + .../StorageFallbackDecodingListWorker.swift | 9 +- .../Async/StorageRequestPerformer.swift | 474 +++++++++++++ .../Helpers}/StorageKeyDataExtractor.swift | 15 +- .../Models/CachedStorageResponse.swift | 43 ++ .../Storage/PrefixRequest.swift | 7 - ...eSingleStorageResponseValueExtractor.swift | 7 - ...ultipleStorageResponseValueExtractor.swift | 5 - .../Storage/StorageRequestPerformer.swift | 150 ---- .../ClaimCrowdloanRewardsAssembly.swift | 3 +- .../ClaimCrowdloanRewardsInteractor.swift | 4 +- .../CrossChain/CrossChainAssembly.swift | 8 +- .../CrossChain/CrossChainInteractor.swift | 4 +- .../CrossChainDepsContainer.swift | 11 +- .../LiquidityPoolDetailsInteractor.swift | 4 +- .../LiquidityPoolDetailsPresenter.swift | 6 +- ...LiquidityPoolDetailsViewModelFactory.swift | 4 +- ...vailableLiquidityPoolsListInteractor.swift | 2 +- ...AvailableLiquidityPoolsListPresenter.swift | 4 +- ...leLiquidityPoolsListViewModelFactory.swift | 4 +- .../ChainAccount/ChainAccountInteractor.swift | 2 + .../ChainAccount/ChainAccountPresenter.swift | 9 +- .../ChainAccount/ChainAccountViewLayout.swift | 2 +- .../ChainAccountBalanceViewModel.swift | 2 +- .../SubstrateTransferFlowUseCase.swift | 1 + .../Transfer/TransferInteractor.swift | 23 +- .../Transfer/Transfer/TransferPresenter.swift | 2 + 71 files changed, 1873 insertions(+), 943 deletions(-) rename fearless/CoreLayer/CoreComponents/Storage/{ => Async}/CachedStorageRequestPerformer.swift (58%) create mode 100644 fearless/CoreLayer/CoreComponents/Storage/Async/ComponentFactories/MixStorageRequestsKeysBuilder.swift create mode 100644 fearless/CoreLayer/CoreComponents/Storage/Async/ComponentFactories/StorageRequestKeyEncodingWorkerFactory.swift rename fearless/CoreLayer/{ComponentFactories/Storage => CoreComponents/Storage/Async/ComponentFactories}/StorageRequestWorkerBuilder.swift (81%) create mode 100644 fearless/CoreLayer/CoreComponents/Storage/Async/Requests/CachedRequest.swift create mode 100644 fearless/CoreLayer/CoreComponents/Storage/Async/Requests/MixStorage.swift rename fearless/CoreLayer/CoreComponents/Storage/{ => Async/Requests}/MultipleRequest.swift (84%) create mode 100644 fearless/CoreLayer/CoreComponents/Storage/Async/Requests/PrefixRequest.swift rename fearless/CoreLayer/CoreComponents/Storage/{ => Async/Requests}/StorageRequest.swift (84%) create mode 100644 fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/MixStorageDecodingListWorker.swift create mode 100644 fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/MultipleSingleStorageResponseValueExtractor.swift create mode 100644 fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/MultipleStorageResponseValueExtractor.swift rename fearless/CoreLayer/CoreComponents/Storage/{ResponseDecoders/PrefixStorageResponseValueExtractor.swift => Async/Storage/ResponseDecoders/PrefixResponseValueExtractor.swift} (76%) rename fearless/CoreLayer/CoreComponents/Storage/{ => Async/Storage}/ResponseDecoders/SingleStorageResponseValueExtractor.swift (100%) rename fearless/CoreLayer/CoreComponents/Storage/{ => Async/Storage}/ResponseDecoders/StorageResponseValueExtractor.swift (100%) rename fearless/CoreLayer/CoreComponents/Storage/{ => Async/Storage}/StorageRequestWorkers/EncodableStorageRequestWorker.swift (87%) create mode 100644 fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/MixStorageRequestsWorker.swift rename fearless/CoreLayer/CoreComponents/Storage/{ => Async/Storage}/StorageRequestWorkers/NMapStorageRequestWorker.swift (85%) create mode 100644 fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/PrefixEncodableStorageRequestWorker.swift rename fearless/CoreLayer/CoreComponents/Storage/{ => Async/Storage}/StorageRequestWorkers/PrefixStorageRequestWorker.swift (95%) rename fearless/CoreLayer/CoreComponents/Storage/{ => Async/Storage}/StorageRequestWorkers/SimpleStorageRequestWorker.swift (88%) rename fearless/CoreLayer/CoreComponents/Storage/{ => Async/Storage}/StorageRequestWorkers/StorageRequestWorker.swift (81%) rename fearless/CoreLayer/CoreComponents/Storage/{RequestFactory => Async/StorageFactory}/AsyncStorageRequestFactory+Extension.swift (100%) rename fearless/CoreLayer/CoreComponents/Storage/{RequestFactory => Async/StorageFactory}/AsyncStorageRequestFactory.swift (100%) rename fearless/CoreLayer/CoreComponents/Storage/{RequestFactory => Async/StorageFactory}/AsyncStorageRequestFactoryDefault.swift (96%) rename fearless/CoreLayer/CoreComponents/Storage/{ => Async/StorageFactory}/StorageFactoryWorkers/ChildStorageResponseDecodingWorker.swift (73%) rename fearless/CoreLayer/CoreComponents/Storage/{ => Async/StorageFactory}/StorageFactoryWorkers/JSONRPCListWorker.swift (100%) rename fearless/CoreLayer/CoreComponents/Storage/{ => Async/StorageFactory}/StorageFactoryWorkers/JSONRPCWorkerDefault.swift (84%) create mode 100644 fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/KeyEncoding.swift rename fearless/CoreLayer/CoreComponents/Storage/{ => Async/StorageFactory}/StorageFactoryWorkers/MapKeyEncodingWorker.swift (84%) rename fearless/CoreLayer/CoreComponents/Storage/{ => Async/StorageFactory}/StorageFactoryWorkers/NMapKeyEncodingWorker.swift (91%) create mode 100644 fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/SimpleKeyEncodingWorker.swift rename fearless/CoreLayer/CoreComponents/Storage/{ => Async/StorageFactory}/StorageFactoryWorkers/StorageFallbackDecodingListWorker.swift (89%) create mode 100644 fearless/CoreLayer/CoreComponents/Storage/Async/StorageRequestPerformer.swift rename fearless/{ApplicationLayer => CoreLayer/CoreComponents/Storage/Helpers}/StorageKeyDataExtractor.swift (74%) create mode 100644 fearless/CoreLayer/CoreComponents/Storage/Models/CachedStorageResponse.swift delete mode 100644 fearless/CoreLayer/CoreComponents/Storage/PrefixRequest.swift delete mode 100644 fearless/CoreLayer/CoreComponents/Storage/ResponseDecoders/MultipleSingleStorageResponseValueExtractor.swift delete mode 100644 fearless/CoreLayer/CoreComponents/Storage/ResponseDecoders/MultipleStorageResponseValueExtractor.swift delete mode 100644 fearless/CoreLayer/CoreComponents/Storage/StorageRequestPerformer.swift diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index 4a17d75764..20f158f95c 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -2244,7 +2244,6 @@ FA2FC82628B380C500CC0A42 /* StakingPool.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2FC82228B380C500CC0A42 /* StakingPool.swift */; }; FA2FC82828B380FD00CC0A42 /* RuntimeCall+CallCodingPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2FC82728B380FD00CC0A42 /* RuntimeCall+CallCodingPath.swift */; }; FA2FC82B28B3814000CC0A42 /* DetailsTriangularedViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2FC82A28B3814000CC0A42 /* DetailsTriangularedViewModel.swift */; }; - FA2FC82D28B3816D00CC0A42 /* StorageKeyDataExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2FC82C28B3816D00CC0A42 /* StorageKeyDataExtractor.swift */; }; FA2FC84128B3879900CC0A42 /* InsettedLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2FC84028B3879900CC0A42 /* InsettedLabel.swift */; }; FA2FC84328B3886900CC0A42 /* StakingRewardCalculatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2FC84228B3886900CC0A42 /* StakingRewardCalculatorView.swift */; }; FA2FC85928B389EB00CC0A42 /* StakingChainSelectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2FC85428B389EB00CC0A42 /* StakingChainSelectionViewController.swift */; }; @@ -2621,6 +2620,8 @@ FA887A452C107A1100CA720F /* LiquidityPoolSupplyConfirmViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA887A442C107A1100CA720F /* LiquidityPoolSupplyConfirmViewModel.swift */; }; FA887A472C107A4300CA720F /* LiquidityPoolSupplyConfirmViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA887A462C107A4300CA720F /* LiquidityPoolSupplyConfirmViewModelFactory.swift */; }; FA887A492C1C19DB00CA720F /* WarningView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA887A482C1C19DB00CA720F /* WarningView.swift */; }; + FA8B02112D375A730066F070 /* ErasStakersOverviewKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8B020F2D375A730066F070 /* ErasStakersOverviewKey.swift */; }; + FA8B02132D375A990066F070 /* ErasStakersPagedKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8B02122D375A990066F070 /* ErasStakersPagedKey.swift */; }; FA8ED43328FD960F00EBB712 /* YourValidatorListFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8ED43228FD960F00EBB712 /* YourValidatorListFlow.swift */; }; FA8ED43628FD983A00EBB712 /* YourValidatorListRelaychainStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8ED43528FD983A00EBB712 /* YourValidatorListRelaychainStrategy.swift */; }; FA8ED43828FD984500EBB712 /* YourValidatorListRelaychainViewModelState.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8ED43728FD984500EBB712 /* YourValidatorListRelaychainViewModelState.swift */; }; @@ -2810,28 +2811,6 @@ FAAA290E2B8C8FD10089AFE6 /* StakingErasRewardPointsRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA290D2B8C8FD10089AFE6 /* StakingErasRewardPointsRequest.swift */; }; FAAA29102B8C92E00089AFE6 /* StakingErasTotalStakeRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA290F2B8C92E00089AFE6 /* StakingErasTotalStakeRequest.swift */; }; FAAA29122B8C96CE0089AFE6 /* StakingErasValidatorRewardRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA29112B8C96CE0089AFE6 /* StakingErasValidatorRewardRequest.swift */; }; - FAAA291D2B8DBFEE0089AFE6 /* StorageRequestWorkerBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA291B2B8DBFEE0089AFE6 /* StorageRequestWorkerBuilder.swift */; }; - FAAA29212B8DCE260089AFE6 /* StorageRequestPerformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA291F2B8DCE250089AFE6 /* StorageRequestPerformer.swift */; }; - FAAA29222B8DCE260089AFE6 /* CachedStorageRequestPerformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA29202B8DCE250089AFE6 /* CachedStorageRequestPerformer.swift */; }; - FAAA29272B8DCE3E0089AFE6 /* MultipleStorageResponseValueExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA29232B8DCE3D0089AFE6 /* MultipleStorageResponseValueExtractor.swift */; }; - FAAA29282B8DCE3E0089AFE6 /* MultipleSingleStorageResponseValueExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA29242B8DCE3D0089AFE6 /* MultipleSingleStorageResponseValueExtractor.swift */; }; - FAAA29292B8DCE3E0089AFE6 /* StorageResponseValueExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA29252B8DCE3D0089AFE6 /* StorageResponseValueExtractor.swift */; }; - FAAA292A2B8DCE3E0089AFE6 /* SingleStorageResponseValueExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA29262B8DCE3E0089AFE6 /* SingleStorageResponseValueExtractor.swift */; }; - FAAA29302B8DCE590089AFE6 /* EncodableStorageRequestWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA292C2B8DCE590089AFE6 /* EncodableStorageRequestWorker.swift */; }; - FAAA29312B8DCE590089AFE6 /* SimpleStorageRequestWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA292D2B8DCE590089AFE6 /* SimpleStorageRequestWorker.swift */; }; - FAAA29322B8DCE590089AFE6 /* StorageRequestWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA292E2B8DCE590089AFE6 /* StorageRequestWorker.swift */; }; - FAAA29332B8DCE590089AFE6 /* NMapStorageRequestWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA292F2B8DCE590089AFE6 /* NMapStorageRequestWorker.swift */; }; - FAAA29362B8DCE930089AFE6 /* StorageRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA29342B8DCE930089AFE6 /* StorageRequest.swift */; }; - FAAA29372B8DCE930089AFE6 /* MultipleRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA29352B8DCE930089AFE6 /* MultipleRequest.swift */; }; - FAAA293F2B8DCED90089AFE6 /* MapKeyEncodingWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA29392B8DCED90089AFE6 /* MapKeyEncodingWorker.swift */; }; - FAAA29402B8DCED90089AFE6 /* NMapKeyEncodingWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA293A2B8DCED90089AFE6 /* NMapKeyEncodingWorker.swift */; }; - FAAA29412B8DCED90089AFE6 /* StorageFallbackDecodingListWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA293B2B8DCED90089AFE6 /* StorageFallbackDecodingListWorker.swift */; }; - FAAA29422B8DCED90089AFE6 /* JSONRPCListWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA293C2B8DCED90089AFE6 /* JSONRPCListWorker.swift */; }; - FAAA29432B8DCED90089AFE6 /* JSONRPCWorkerDefault.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA293D2B8DCED90089AFE6 /* JSONRPCWorkerDefault.swift */; }; - FAAA29442B8DCED90089AFE6 /* ChildStorageResponseDecodingWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA293E2B8DCED90089AFE6 /* ChildStorageResponseDecodingWorker.swift */; }; - FAAA29492B8DCF350089AFE6 /* AsyncStorageRequestFactoryDefault.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA29462B8DCF340089AFE6 /* AsyncStorageRequestFactoryDefault.swift */; }; - FAAA294A2B8DCF350089AFE6 /* AsyncStorageRequestFactory+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA29472B8DCF350089AFE6 /* AsyncStorageRequestFactory+Extension.swift */; }; - FAAA294B2B8DCF350089AFE6 /* AsyncStorageRequestFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA29482B8DCF350089AFE6 /* AsyncStorageRequestFactory.swift */; }; FAAA29572B8DED770089AFE6 /* MapKeyType.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA29562B8DED770089AFE6 /* MapKeyType.swift */; }; FAABC46E2845BADA002CF40E /* CustomValidatorParachainListFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAABC46D2845BADA002CF40E /* CustomValidatorParachainListFilter.swift */; }; FAABC4702845BAEE002CF40E /* CustomValidatorParachainListComposer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAABC46F2845BAEE002CF40E /* CustomValidatorParachainListComposer.swift */; }; @@ -2921,6 +2900,42 @@ FAC6CDAD2BA81D680013A17E /* FeeViewProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC6CDAC2BA81D680013A17E /* FeeViewProtocol.swift */; }; FAC6CDAF2BA81FA00013A17E /* WalletLoggerProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC6CDAE2BA81FA00013A17E /* WalletLoggerProtocol.swift */; }; FAC6CDB12BA821B00013A17E /* WalletImageViewModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC6CDB02BA821B00013A17E /* WalletImageViewModelProtocol.swift */; }; + FAC71CDE2D363FFE00122E95 /* MapKeyEncodingWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CBE2D363FFE00122E95 /* MapKeyEncodingWorker.swift */; }; + FAC71CDF2D363FFE00122E95 /* KeyEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CBD2D363FFE00122E95 /* KeyEncoding.swift */; }; + FAC71CE02D363FFE00122E95 /* AsyncStorageRequestFactory+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CC42D363FFE00122E95 /* AsyncStorageRequestFactory+Extension.swift */; }; + FAC71CE12D363FFE00122E95 /* StorageFallbackDecodingListWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CC12D363FFE00122E95 /* StorageFallbackDecodingListWorker.swift */; }; + FAC71CE22D363FFE00122E95 /* PrefixRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CA72D363FFE00122E95 /* PrefixRequest.swift */; }; + FAC71CE32D363FFE00122E95 /* PrefixResponseValueExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CAD2D363FFE00122E95 /* PrefixResponseValueExtractor.swift */; }; + FAC71CE42D363FFE00122E95 /* MixStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CA52D363FFE00122E95 /* MixStorage.swift */; }; + FAC71CE62D363FFE00122E95 /* JSONRPCWorkerDefault.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CBC2D363FFE00122E95 /* JSONRPCWorkerDefault.swift */; }; + FAC71CE72D363FFE00122E95 /* EncodableStorageRequestWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CB12D363FFE00122E95 /* EncodableStorageRequestWorker.swift */; }; + FAC71CE82D363FFE00122E95 /* SimpleKeyEncodingWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CC02D363FFE00122E95 /* SimpleKeyEncodingWorker.swift */; }; + FAC71CE92D363FFE00122E95 /* NMapKeyEncodingWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CBF2D363FFE00122E95 /* NMapKeyEncodingWorker.swift */; }; + FAC71CEA2D363FFE00122E95 /* AsyncStorageRequestFactoryDefault.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CC52D363FFE00122E95 /* AsyncStorageRequestFactoryDefault.swift */; }; + FAC71CEB2D363FFE00122E95 /* NMapStorageRequestWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CB32D363FFE00122E95 /* NMapStorageRequestWorker.swift */; }; + FAC71CEC2D363FFE00122E95 /* StorageRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CA82D363FFE00122E95 /* StorageRequest.swift */; }; + FAC71CED2D363FFE00122E95 /* StorageRequestWorkerBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CA22D363FFE00122E95 /* StorageRequestWorkerBuilder.swift */; }; + FAC71CEF2D363FFE00122E95 /* CachedRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CA42D363FFE00122E95 /* CachedRequest.swift */; }; + FAC71CF02D363FFE00122E95 /* AsyncStorageRequestFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CC32D363FFE00122E95 /* AsyncStorageRequestFactory.swift */; }; + FAC71CF32D363FFE00122E95 /* StorageRequestKeyEncodingWorkerFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CA12D363FFE00122E95 /* StorageRequestKeyEncodingWorkerFactory.swift */; }; + FAC71CF42D363FFE00122E95 /* StorageKeyDataExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CCA2D363FFE00122E95 /* StorageKeyDataExtractor.swift */; }; + FAC71CF62D363FFE00122E95 /* MultipleRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CA62D363FFE00122E95 /* MultipleRequest.swift */; }; + FAC71CF72D363FFE00122E95 /* CachedStorageRequestPerformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CC72D363FFE00122E95 /* CachedStorageRequestPerformer.swift */; }; + FAC71CF82D363FFE00122E95 /* PrefixStorageRequestWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CB52D363FFE00122E95 /* PrefixStorageRequestWorker.swift */; }; + FAC71CFA2D363FFE00122E95 /* JSONRPCListWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CBB2D363FFE00122E95 /* JSONRPCListWorker.swift */; }; + FAC71CFB2D363FFE00122E95 /* CachedStorageResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CCC2D363FFE00122E95 /* CachedStorageResponse.swift */; }; + FAC71CFD2D363FFE00122E95 /* StorageResponseValueExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CAF2D363FFE00122E95 /* StorageResponseValueExtractor.swift */; }; + FAC71CFE2D363FFE00122E95 /* StorageRequestPerformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CC82D363FFE00122E95 /* StorageRequestPerformer.swift */; }; + FAC71D002D363FFE00122E95 /* MixStorageDecodingListWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CAA2D363FFE00122E95 /* MixStorageDecodingListWorker.swift */; }; + FAC71D022D363FFE00122E95 /* SingleStorageResponseValueExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CAE2D363FFE00122E95 /* SingleStorageResponseValueExtractor.swift */; }; + FAC71D032D363FFE00122E95 /* MixStorageRequestsKeysBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CA02D363FFE00122E95 /* MixStorageRequestsKeysBuilder.swift */; }; + FAC71D042D363FFE00122E95 /* MixStorageRequestsWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CB22D363FFE00122E95 /* MixStorageRequestsWorker.swift */; }; + FAC71D062D363FFE00122E95 /* StorageRequestWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CB72D363FFE00122E95 /* StorageRequestWorker.swift */; }; + FAC71D072D363FFE00122E95 /* ChildStorageResponseDecodingWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CBA2D363FFE00122E95 /* ChildStorageResponseDecodingWorker.swift */; }; + FAC71D082D363FFE00122E95 /* MultipleStorageResponseValueExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CAC2D363FFE00122E95 /* MultipleStorageResponseValueExtractor.swift */; }; + FAC71D092D363FFE00122E95 /* SimpleStorageRequestWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CB62D363FFE00122E95 /* SimpleStorageRequestWorker.swift */; }; + FAC71D0A2D363FFE00122E95 /* PrefixEncodableStorageRequestWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CB42D363FFE00122E95 /* PrefixEncodableStorageRequestWorker.swift */; }; + FAC71D0D2D363FFE00122E95 /* MultipleSingleStorageResponseValueExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC71CAB2D363FFE00122E95 /* MultipleSingleStorageResponseValueExtractor.swift */; }; FACACE1427BCF10F005422EE /* MetaAccountImportMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = FACACE1227BCF10E005422EE /* MetaAccountImportMetadata.swift */; }; FACACE1527BCF10F005422EE /* MetaAccountImportPreferredInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = FACACE1327BCF10E005422EE /* MetaAccountImportPreferredInfo.swift */; }; FACD427B2A5BE7C6009975AA /* RuntimeSnapshotReady.swift in Sources */ = {isa = PBXBuildFile; fileRef = FACD42782A5BE7C6009975AA /* RuntimeSnapshotReady.swift */; }; @@ -2966,8 +2981,6 @@ FAD0679E2C2044320050291F /* AssetManagementMigrator.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD0679D2C2044320050291F /* AssetManagementMigrator.swift */; }; FAD067A72C2044490050291F /* SubstrateDataModel.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = FAD0679F2C2044490050291F /* SubstrateDataModel.xcdatamodeld */; }; FAD067A92C20445F0050291F /* ChainAssetListBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD067A82C20445F0050291F /* ChainAssetListBuilder.swift */; }; - FAD067AD2C2044810050291F /* ErasStakersPagedKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD067AB2C2044810050291F /* ErasStakersPagedKey.swift */; }; - FAD067AE2C2044810050291F /* ErasStakersOverviewKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD067AC2C2044810050291F /* ErasStakersOverviewKey.swift */; }; FAD067BD2C2044B10050291F /* AssetManagementViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD067B12C2044B10050291F /* AssetManagementViewModel.swift */; }; FAD067BE2C2044B10050291F /* AssetManagementViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD067B22C2044B10050291F /* AssetManagementViewModelFactory.swift */; }; FAD067BF2C2044B10050291F /* AssetManagementInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD067B32C2044B10050291F /* AssetManagementInteractor.swift */; }; @@ -3074,9 +3087,6 @@ FAD646DC284F6C90007CCB92 /* StakingUnbondSetupRelaychainViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD646DB284F6C90007CCB92 /* StakingUnbondSetupRelaychainViewModelFactory.swift */; }; FAD956772BB2BE8C00A8BF76 /* SystemAccountRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD956762BB2BE8C00A8BF76 /* SystemAccountRequest.swift */; }; FAD9AAC12B8DF62100AA603B /* AsyncMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD9AAC02B8DF62100AA603B /* AsyncMap.swift */; }; - FAD9AAC32B8DFE0200AA603B /* PrefixRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD9AAC22B8DFE0200AA603B /* PrefixRequest.swift */; }; - FAD9AAC52B8DFF6700AA603B /* PrefixStorageRequestWorker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD9AAC42B8DFF6700AA603B /* PrefixStorageRequestWorker.swift */; }; - FAD9AAC72B8E002F00AA603B /* PrefixStorageResponseValueExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD9AAC62B8E002F00AA603B /* PrefixStorageResponseValueExtractor.swift */; }; FADB9DB529D551A100303F7D /* SoraRewardCalculatorService.swift in Sources */ = {isa = PBXBuildFile; fileRef = FADB9DB429D551A100303F7D /* SoraRewardCalculatorService.swift */; }; FADBA5F12B5FD0C200CFCF30 /* ClaimCrowdloanRewardViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FADBA5F02B5FD0C200CFCF30 /* ClaimCrowdloanRewardViewModelFactory.swift */; }; FADBA5F32B5FE36200CFCF30 /* ChainAccountViewMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = FADBA5F22B5FE36200CFCF30 /* ChainAccountViewMode.swift */; }; @@ -5569,7 +5579,6 @@ FA2FC82228B380C500CC0A42 /* StakingPool.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StakingPool.swift; sourceTree = ""; }; FA2FC82728B380FD00CC0A42 /* RuntimeCall+CallCodingPath.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "RuntimeCall+CallCodingPath.swift"; sourceTree = ""; }; FA2FC82A28B3814000CC0A42 /* DetailsTriangularedViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DetailsTriangularedViewModel.swift; sourceTree = ""; }; - FA2FC82C28B3816D00CC0A42 /* StorageKeyDataExtractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StorageKeyDataExtractor.swift; sourceTree = ""; }; FA2FC84028B3879900CC0A42 /* InsettedLabel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InsettedLabel.swift; sourceTree = ""; }; FA2FC84228B3886900CC0A42 /* StakingRewardCalculatorView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StakingRewardCalculatorView.swift; sourceTree = ""; }; FA2FC85428B389EB00CC0A42 /* StakingChainSelectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StakingChainSelectionViewController.swift; sourceTree = ""; }; @@ -5856,10 +5865,6 @@ FA72541D2AC2E48400EC47A6 /* WalletConnectService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletConnectService.swift; sourceTree = ""; }; FA72541E2AC2E48400EC47A6 /* WalletConnectSocketFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletConnectSocketFactory.swift; sourceTree = ""; }; FA72541F2AC2E48500EC47A6 /* WalletConnectPayloadFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletConnectPayloadFactory.swift; sourceTree = ""; }; - FA7336BD2A0E3B7F0096A291 /* NetworkClientFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkClientFactory.swift; sourceTree = ""; }; - FA7336BE2A0E3B7F0096A291 /* RequestConfiguratorFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestConfiguratorFactory.swift; sourceTree = ""; }; - FA7336BF2A0E3B7F0096A291 /* RequestSignerFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestSignerFactory.swift; sourceTree = ""; }; - FA7336C02A0E3B7F0096A291 /* ResponseDecodersFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ResponseDecodersFactory.swift; sourceTree = ""; }; FA7336FC2A132F740096A291 /* AlchemyHistoryOperationFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlchemyHistoryOperationFactory.swift; sourceTree = ""; }; FA7337082A1339890096A291 /* AssetTransactionData+AlchemyHistory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AssetTransactionData+AlchemyHistory.swift"; sourceTree = ""; }; FA740A8C2CC8C03400981508 /* GradientBorderedTriangularedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GradientBorderedTriangularedView.swift; sourceTree = ""; }; @@ -5921,6 +5926,9 @@ FA887A442C107A1100CA720F /* LiquidityPoolSupplyConfirmViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmViewModel.swift; sourceTree = ""; }; FA887A462C107A4300CA720F /* LiquidityPoolSupplyConfirmViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyConfirmViewModelFactory.swift; sourceTree = ""; }; FA887A482C1C19DB00CA720F /* WarningView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WarningView.swift; sourceTree = ""; }; + FA8B020F2D375A730066F070 /* ErasStakersOverviewKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErasStakersOverviewKey.swift; sourceTree = ""; }; + FA8B02122D375A990066F070 /* ErasStakersPagedKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErasStakersPagedKey.swift; sourceTree = ""; }; + FA8B02142D3770760066F070 /* fearless-starscream */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = "fearless-starscream"; path = "../fearless-starscream"; sourceTree = SOURCE_ROOT; }; FA8C34B051607218638BA851 /* FiltersProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FiltersProtocols.swift; sourceTree = ""; }; FA8ED43228FD960F00EBB712 /* YourValidatorListFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YourValidatorListFlow.swift; sourceTree = ""; }; FA8ED43528FD983A00EBB712 /* YourValidatorListRelaychainStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YourValidatorListRelaychainStrategy.swift; sourceTree = ""; }; @@ -6110,28 +6118,6 @@ FAAA290D2B8C8FD10089AFE6 /* StakingErasRewardPointsRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingErasRewardPointsRequest.swift; sourceTree = ""; }; FAAA290F2B8C92E00089AFE6 /* StakingErasTotalStakeRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingErasTotalStakeRequest.swift; sourceTree = ""; }; FAAA29112B8C96CE0089AFE6 /* StakingErasValidatorRewardRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingErasValidatorRewardRequest.swift; sourceTree = ""; }; - FAAA291B2B8DBFEE0089AFE6 /* StorageRequestWorkerBuilder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StorageRequestWorkerBuilder.swift; sourceTree = ""; }; - FAAA291F2B8DCE250089AFE6 /* StorageRequestPerformer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StorageRequestPerformer.swift; sourceTree = ""; }; - FAAA29202B8DCE250089AFE6 /* CachedStorageRequestPerformer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CachedStorageRequestPerformer.swift; sourceTree = ""; }; - FAAA29232B8DCE3D0089AFE6 /* MultipleStorageResponseValueExtractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MultipleStorageResponseValueExtractor.swift; sourceTree = ""; }; - FAAA29242B8DCE3D0089AFE6 /* MultipleSingleStorageResponseValueExtractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MultipleSingleStorageResponseValueExtractor.swift; sourceTree = ""; }; - FAAA29252B8DCE3D0089AFE6 /* StorageResponseValueExtractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StorageResponseValueExtractor.swift; sourceTree = ""; }; - FAAA29262B8DCE3E0089AFE6 /* SingleStorageResponseValueExtractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SingleStorageResponseValueExtractor.swift; sourceTree = ""; }; - FAAA292C2B8DCE590089AFE6 /* EncodableStorageRequestWorker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EncodableStorageRequestWorker.swift; sourceTree = ""; }; - FAAA292D2B8DCE590089AFE6 /* SimpleStorageRequestWorker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpleStorageRequestWorker.swift; sourceTree = ""; }; - FAAA292E2B8DCE590089AFE6 /* StorageRequestWorker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StorageRequestWorker.swift; sourceTree = ""; }; - FAAA292F2B8DCE590089AFE6 /* NMapStorageRequestWorker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NMapStorageRequestWorker.swift; sourceTree = ""; }; - FAAA29342B8DCE930089AFE6 /* StorageRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StorageRequest.swift; sourceTree = ""; }; - FAAA29352B8DCE930089AFE6 /* MultipleRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MultipleRequest.swift; sourceTree = ""; }; - FAAA29392B8DCED90089AFE6 /* MapKeyEncodingWorker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MapKeyEncodingWorker.swift; sourceTree = ""; }; - FAAA293A2B8DCED90089AFE6 /* NMapKeyEncodingWorker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NMapKeyEncodingWorker.swift; sourceTree = ""; }; - FAAA293B2B8DCED90089AFE6 /* StorageFallbackDecodingListWorker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StorageFallbackDecodingListWorker.swift; sourceTree = ""; }; - FAAA293C2B8DCED90089AFE6 /* JSONRPCListWorker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JSONRPCListWorker.swift; sourceTree = ""; }; - FAAA293D2B8DCED90089AFE6 /* JSONRPCWorkerDefault.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JSONRPCWorkerDefault.swift; sourceTree = ""; }; - FAAA293E2B8DCED90089AFE6 /* ChildStorageResponseDecodingWorker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChildStorageResponseDecodingWorker.swift; sourceTree = ""; }; - FAAA29462B8DCF340089AFE6 /* AsyncStorageRequestFactoryDefault.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsyncStorageRequestFactoryDefault.swift; sourceTree = ""; }; - FAAA29472B8DCF350089AFE6 /* AsyncStorageRequestFactory+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AsyncStorageRequestFactory+Extension.swift"; sourceTree = ""; }; - FAAA29482B8DCF350089AFE6 /* AsyncStorageRequestFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AsyncStorageRequestFactory.swift; sourceTree = ""; }; FAAA29562B8DED770089AFE6 /* MapKeyType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapKeyType.swift; sourceTree = ""; }; FAABC46D2845BADA002CF40E /* CustomValidatorParachainListFilter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomValidatorParachainListFilter.swift; sourceTree = ""; }; FAABC46F2845BAEE002CF40E /* CustomValidatorParachainListComposer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomValidatorParachainListComposer.swift; sourceTree = ""; }; @@ -6226,6 +6212,42 @@ FAC6CDAC2BA81D680013A17E /* FeeViewProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeeViewProtocol.swift; sourceTree = ""; }; FAC6CDAE2BA81FA00013A17E /* WalletLoggerProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletLoggerProtocol.swift; sourceTree = ""; }; FAC6CDB02BA821B00013A17E /* WalletImageViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletImageViewModelProtocol.swift; sourceTree = ""; }; + FAC71CA02D363FFE00122E95 /* MixStorageRequestsKeysBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MixStorageRequestsKeysBuilder.swift; sourceTree = ""; }; + FAC71CA12D363FFE00122E95 /* StorageRequestKeyEncodingWorkerFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageRequestKeyEncodingWorkerFactory.swift; sourceTree = ""; }; + FAC71CA22D363FFE00122E95 /* StorageRequestWorkerBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageRequestWorkerBuilder.swift; sourceTree = ""; }; + FAC71CA42D363FFE00122E95 /* CachedRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CachedRequest.swift; sourceTree = ""; }; + FAC71CA52D363FFE00122E95 /* MixStorage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MixStorage.swift; sourceTree = ""; }; + FAC71CA62D363FFE00122E95 /* MultipleRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultipleRequest.swift; sourceTree = ""; }; + FAC71CA72D363FFE00122E95 /* PrefixRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefixRequest.swift; sourceTree = ""; }; + FAC71CA82D363FFE00122E95 /* StorageRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageRequest.swift; sourceTree = ""; }; + FAC71CAA2D363FFE00122E95 /* MixStorageDecodingListWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MixStorageDecodingListWorker.swift; sourceTree = ""; }; + FAC71CAB2D363FFE00122E95 /* MultipleSingleStorageResponseValueExtractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultipleSingleStorageResponseValueExtractor.swift; sourceTree = ""; }; + FAC71CAC2D363FFE00122E95 /* MultipleStorageResponseValueExtractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultipleStorageResponseValueExtractor.swift; sourceTree = ""; }; + FAC71CAD2D363FFE00122E95 /* PrefixResponseValueExtractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefixResponseValueExtractor.swift; sourceTree = ""; }; + FAC71CAE2D363FFE00122E95 /* SingleStorageResponseValueExtractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SingleStorageResponseValueExtractor.swift; sourceTree = ""; }; + FAC71CAF2D363FFE00122E95 /* StorageResponseValueExtractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageResponseValueExtractor.swift; sourceTree = ""; }; + FAC71CB12D363FFE00122E95 /* EncodableStorageRequestWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncodableStorageRequestWorker.swift; sourceTree = ""; }; + FAC71CB22D363FFE00122E95 /* MixStorageRequestsWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MixStorageRequestsWorker.swift; sourceTree = ""; }; + FAC71CB32D363FFE00122E95 /* NMapStorageRequestWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NMapStorageRequestWorker.swift; sourceTree = ""; }; + FAC71CB42D363FFE00122E95 /* PrefixEncodableStorageRequestWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefixEncodableStorageRequestWorker.swift; sourceTree = ""; }; + FAC71CB52D363FFE00122E95 /* PrefixStorageRequestWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefixStorageRequestWorker.swift; sourceTree = ""; }; + FAC71CB62D363FFE00122E95 /* SimpleStorageRequestWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleStorageRequestWorker.swift; sourceTree = ""; }; + FAC71CB72D363FFE00122E95 /* StorageRequestWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageRequestWorker.swift; sourceTree = ""; }; + FAC71CBA2D363FFE00122E95 /* ChildStorageResponseDecodingWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChildStorageResponseDecodingWorker.swift; sourceTree = ""; }; + FAC71CBB2D363FFE00122E95 /* JSONRPCListWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSONRPCListWorker.swift; sourceTree = ""; }; + FAC71CBC2D363FFE00122E95 /* JSONRPCWorkerDefault.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSONRPCWorkerDefault.swift; sourceTree = ""; }; + FAC71CBD2D363FFE00122E95 /* KeyEncoding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyEncoding.swift; sourceTree = ""; }; + FAC71CBE2D363FFE00122E95 /* MapKeyEncodingWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapKeyEncodingWorker.swift; sourceTree = ""; }; + FAC71CBF2D363FFE00122E95 /* NMapKeyEncodingWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NMapKeyEncodingWorker.swift; sourceTree = ""; }; + FAC71CC02D363FFE00122E95 /* SimpleKeyEncodingWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleKeyEncodingWorker.swift; sourceTree = ""; }; + FAC71CC12D363FFE00122E95 /* StorageFallbackDecodingListWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageFallbackDecodingListWorker.swift; sourceTree = ""; }; + FAC71CC32D363FFE00122E95 /* AsyncStorageRequestFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AsyncStorageRequestFactory.swift; sourceTree = ""; }; + FAC71CC42D363FFE00122E95 /* AsyncStorageRequestFactory+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AsyncStorageRequestFactory+Extension.swift"; sourceTree = ""; }; + FAC71CC52D363FFE00122E95 /* AsyncStorageRequestFactoryDefault.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AsyncStorageRequestFactoryDefault.swift; sourceTree = ""; }; + FAC71CC72D363FFE00122E95 /* CachedStorageRequestPerformer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CachedStorageRequestPerformer.swift; sourceTree = ""; }; + FAC71CC82D363FFE00122E95 /* StorageRequestPerformer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageRequestPerformer.swift; sourceTree = ""; }; + FAC71CCA2D363FFE00122E95 /* StorageKeyDataExtractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StorageKeyDataExtractor.swift; sourceTree = ""; }; + FAC71CCC2D363FFE00122E95 /* CachedStorageResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CachedStorageResponse.swift; sourceTree = ""; }; FACACE1027BCF104005422EE /* MetaAccountCreationMetadata.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MetaAccountCreationMetadata.swift; sourceTree = ""; }; FACACE1227BCF10E005422EE /* MetaAccountImportMetadata.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MetaAccountImportMetadata.swift; sourceTree = ""; }; FACACE1327BCF10E005422EE /* MetaAccountImportPreferredInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MetaAccountImportPreferredInfo.swift; sourceTree = ""; }; @@ -6278,8 +6300,6 @@ FAD067A52C2044490050291F /* SubstrateDataModel_v6.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = SubstrateDataModel_v6.xcdatamodel; sourceTree = ""; }; FAD067A62C2044490050291F /* SubstrateDataModel_v3.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = SubstrateDataModel_v3.xcdatamodel; sourceTree = ""; }; FAD067A82C20445F0050291F /* ChainAssetListBuilder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChainAssetListBuilder.swift; sourceTree = ""; }; - FAD067AB2C2044810050291F /* ErasStakersPagedKey.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ErasStakersPagedKey.swift; sourceTree = ""; }; - FAD067AC2C2044810050291F /* ErasStakersOverviewKey.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ErasStakersOverviewKey.swift; sourceTree = ""; }; FAD067B12C2044B10050291F /* AssetManagementViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssetManagementViewModel.swift; sourceTree = ""; }; FAD067B22C2044B10050291F /* AssetManagementViewModelFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssetManagementViewModelFactory.swift; sourceTree = ""; }; FAD067B32C2044B10050291F /* AssetManagementInteractor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssetManagementInteractor.swift; sourceTree = ""; }; @@ -6384,9 +6404,6 @@ FAD646DB284F6C90007CCB92 /* StakingUnbondSetupRelaychainViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingUnbondSetupRelaychainViewModelFactory.swift; sourceTree = ""; }; FAD956762BB2BE8C00A8BF76 /* SystemAccountRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemAccountRequest.swift; sourceTree = ""; }; FAD9AAC02B8DF62100AA603B /* AsyncMap.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AsyncMap.swift; sourceTree = ""; }; - FAD9AAC22B8DFE0200AA603B /* PrefixRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefixRequest.swift; sourceTree = ""; }; - FAD9AAC42B8DFF6700AA603B /* PrefixStorageRequestWorker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefixStorageRequestWorker.swift; sourceTree = ""; }; - FAD9AAC62B8E002F00AA603B /* PrefixStorageResponseValueExtractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefixStorageResponseValueExtractor.swift; sourceTree = ""; }; FADB9DB429D551A100303F7D /* SoraRewardCalculatorService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoraRewardCalculatorService.swift; sourceTree = ""; }; FADBA5EE2B5FD05C00CFCF30 /* ClaimCrowdloanRewardsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClaimCrowdloanRewardsViewModel.swift; sourceTree = ""; }; FADBA5F02B5FD0C200CFCF30 /* ClaimCrowdloanRewardViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClaimCrowdloanRewardViewModelFactory.swift; sourceTree = ""; }; @@ -9922,6 +9939,7 @@ 8490139F24A80984008F705E = { isa = PBXGroup; children = ( + FA8B02142D3770760066F070 /* fearless-starscream */, FA52A7BE2D1E8B1A0054D0C1 /* shared-features-spm */, 849013AA24A80984008F705E /* fearless */, 849013C124A80986008F705E /* fearlessTests */, @@ -13942,47 +13960,11 @@ FA3067292B6246BD006A0BA5 /* Storage */ = { isa = PBXGroup; children = ( - FAD067AA2C2044810050291F /* Keys */, - FAD9AAC22B8DFE0200AA603B /* PrefixRequest.swift */, - FAAA29352B8DCE930089AFE6 /* MultipleRequest.swift */, - FAAA29342B8DCE930089AFE6 /* StorageRequest.swift */, - FAAA29202B8DCE250089AFE6 /* CachedStorageRequestPerformer.swift */, - FAAA291F2B8DCE250089AFE6 /* StorageRequestPerformer.swift */, - FAAA29452B8DCF250089AFE6 /* RequestFactory */, - FAAA29382B8DCED90089AFE6 /* StorageFactoryWorkers */, - FAAA292B2B8DCE590089AFE6 /* StorageRequestWorkers */, - FA3067342B6256E6006A0BA5 /* ResponseDecoders */, - ); - path = Storage; - sourceTree = ""; - }; - FA3067342B6256E6006A0BA5 /* ResponseDecoders */ = { - isa = PBXGroup; - children = ( - FAAA29242B8DCE3D0089AFE6 /* MultipleSingleStorageResponseValueExtractor.swift */, - FAAA29232B8DCE3D0089AFE6 /* MultipleStorageResponseValueExtractor.swift */, - FAAA29262B8DCE3E0089AFE6 /* SingleStorageResponseValueExtractor.swift */, - FAAA29252B8DCE3D0089AFE6 /* StorageResponseValueExtractor.swift */, - FAD9AAC62B8E002F00AA603B /* PrefixStorageResponseValueExtractor.swift */, - ); - path = ResponseDecoders; - sourceTree = ""; - }; - FA3067392B6257F6006A0BA5 /* Network */ = { - isa = PBXGroup; - children = ( - FA7336BD2A0E3B7F0096A291 /* NetworkClientFactory.swift */, - FA7336BE2A0E3B7F0096A291 /* RequestConfiguratorFactory.swift */, - FA7336BF2A0E3B7F0096A291 /* RequestSignerFactory.swift */, - FA7336C02A0E3B7F0096A291 /* ResponseDecodersFactory.swift */, - ); - path = Network; - sourceTree = ""; - }; - FA30673A2B625806006A0BA5 /* Storage */ = { - isa = PBXGroup; - children = ( - FAAA291B2B8DBFEE0089AFE6 /* StorageRequestWorkerBuilder.swift */, + FA8B02102D375A730066F070 /* Keys */, + FAC71CC92D363FFE00122E95 /* Async */, + FAC71CCB2D363FFE00122E95 /* Helpers */, + FAC71CD22D363FFE00122E95 /* Models */, + FAC71CDD2D363FFE00122E95 /* Operation */, ); path = Storage; sourceTree = ""; @@ -14292,7 +14274,6 @@ FA34EE8A2B9870FE0042E73E /* ComponentFactories */, FA7741D32B6A350200358315 /* StakingRewards */, FA9A8F0A2A72573C008FA99F /* Alchemy */, - FA2FC82C28B3816D00CC0A42 /* StorageKeyDataExtractor.swift */, FA17B4D027E9CF21006E0735 /* FearlessApplication.swift */, FA17B4CF27E9CF21006E0735 /* main.swift */, 078E34C028058B9D00DF187A /* DocumentType.swift */, @@ -14733,8 +14714,6 @@ FA7336BC2A0E3B7F0096A291 /* ComponentFactories */ = { isa = PBXGroup; children = ( - FA30673A2B625806006A0BA5 /* Storage */, - FA3067392B6257F6006A0BA5 /* Network */, ); path = ComponentFactories; sourceTree = ""; @@ -14889,6 +14868,15 @@ path = ViewModel; sourceTree = ""; }; + FA8B02102D375A730066F070 /* Keys */ = { + isa = PBXGroup; + children = ( + FA8B02122D375A990066F070 /* ErasStakersPagedKey.swift */, + FA8B020F2D375A730066F070 /* ErasStakersOverviewKey.swift */, + ); + path = Keys; + sourceTree = ""; + }; FA8ED43128FD8D6200EBB712 /* Flows */ = { isa = PBXGroup; children = ( @@ -15516,41 +15504,6 @@ path = StakingPallet; sourceTree = ""; }; - FAAA292B2B8DCE590089AFE6 /* StorageRequestWorkers */ = { - isa = PBXGroup; - children = ( - FAAA292C2B8DCE590089AFE6 /* EncodableStorageRequestWorker.swift */, - FAAA292D2B8DCE590089AFE6 /* SimpleStorageRequestWorker.swift */, - FAAA292E2B8DCE590089AFE6 /* StorageRequestWorker.swift */, - FAAA292F2B8DCE590089AFE6 /* NMapStorageRequestWorker.swift */, - FAD9AAC42B8DFF6700AA603B /* PrefixStorageRequestWorker.swift */, - ); - path = StorageRequestWorkers; - sourceTree = ""; - }; - FAAA29382B8DCED90089AFE6 /* StorageFactoryWorkers */ = { - isa = PBXGroup; - children = ( - FAAA29392B8DCED90089AFE6 /* MapKeyEncodingWorker.swift */, - FAAA293A2B8DCED90089AFE6 /* NMapKeyEncodingWorker.swift */, - FAAA293B2B8DCED90089AFE6 /* StorageFallbackDecodingListWorker.swift */, - FAAA293C2B8DCED90089AFE6 /* JSONRPCListWorker.swift */, - FAAA293D2B8DCED90089AFE6 /* JSONRPCWorkerDefault.swift */, - FAAA293E2B8DCED90089AFE6 /* ChildStorageResponseDecodingWorker.swift */, - ); - path = StorageFactoryWorkers; - sourceTree = ""; - }; - FAAA29452B8DCF250089AFE6 /* RequestFactory */ = { - isa = PBXGroup; - children = ( - FAAA29482B8DCF350089AFE6 /* AsyncStorageRequestFactory.swift */, - FAAA29472B8DCF350089AFE6 /* AsyncStorageRequestFactory+Extension.swift */, - FAAA29462B8DCF340089AFE6 /* AsyncStorageRequestFactoryDefault.swift */, - ); - path = RequestFactory; - sourceTree = ""; - }; FAAB998A27A7C76100CD1A3B /* CoreComponents */ = { isa = PBXGroup; children = ( @@ -15792,6 +15745,126 @@ path = AccountList; sourceTree = ""; }; + FAC71CA32D363FFE00122E95 /* ComponentFactories */ = { + isa = PBXGroup; + children = ( + FAC71CA02D363FFE00122E95 /* MixStorageRequestsKeysBuilder.swift */, + FAC71CA12D363FFE00122E95 /* StorageRequestKeyEncodingWorkerFactory.swift */, + FAC71CA22D363FFE00122E95 /* StorageRequestWorkerBuilder.swift */, + ); + path = ComponentFactories; + sourceTree = ""; + }; + FAC71CA92D363FFE00122E95 /* Requests */ = { + isa = PBXGroup; + children = ( + FAC71CA42D363FFE00122E95 /* CachedRequest.swift */, + FAC71CA52D363FFE00122E95 /* MixStorage.swift */, + FAC71CA62D363FFE00122E95 /* MultipleRequest.swift */, + FAC71CA72D363FFE00122E95 /* PrefixRequest.swift */, + FAC71CA82D363FFE00122E95 /* StorageRequest.swift */, + ); + path = Requests; + sourceTree = ""; + }; + FAC71CB02D363FFE00122E95 /* ResponseDecoders */ = { + isa = PBXGroup; + children = ( + FAC71CAA2D363FFE00122E95 /* MixStorageDecodingListWorker.swift */, + FAC71CAB2D363FFE00122E95 /* MultipleSingleStorageResponseValueExtractor.swift */, + FAC71CAC2D363FFE00122E95 /* MultipleStorageResponseValueExtractor.swift */, + FAC71CAD2D363FFE00122E95 /* PrefixResponseValueExtractor.swift */, + FAC71CAE2D363FFE00122E95 /* SingleStorageResponseValueExtractor.swift */, + FAC71CAF2D363FFE00122E95 /* StorageResponseValueExtractor.swift */, + ); + path = ResponseDecoders; + sourceTree = ""; + }; + FAC71CB82D363FFE00122E95 /* StorageRequestWorkers */ = { + isa = PBXGroup; + children = ( + FAC71CB12D363FFE00122E95 /* EncodableStorageRequestWorker.swift */, + FAC71CB22D363FFE00122E95 /* MixStorageRequestsWorker.swift */, + FAC71CB32D363FFE00122E95 /* NMapStorageRequestWorker.swift */, + FAC71CB42D363FFE00122E95 /* PrefixEncodableStorageRequestWorker.swift */, + FAC71CB52D363FFE00122E95 /* PrefixStorageRequestWorker.swift */, + FAC71CB62D363FFE00122E95 /* SimpleStorageRequestWorker.swift */, + FAC71CB72D363FFE00122E95 /* StorageRequestWorker.swift */, + ); + path = StorageRequestWorkers; + sourceTree = ""; + }; + FAC71CB92D363FFE00122E95 /* Storage */ = { + isa = PBXGroup; + children = ( + FAC71CB02D363FFE00122E95 /* ResponseDecoders */, + FAC71CB82D363FFE00122E95 /* StorageRequestWorkers */, + ); + path = Storage; + sourceTree = ""; + }; + FAC71CC22D363FFE00122E95 /* StorageFactoryWorkers */ = { + isa = PBXGroup; + children = ( + FAC71CBA2D363FFE00122E95 /* ChildStorageResponseDecodingWorker.swift */, + FAC71CBB2D363FFE00122E95 /* JSONRPCListWorker.swift */, + FAC71CBC2D363FFE00122E95 /* JSONRPCWorkerDefault.swift */, + FAC71CBD2D363FFE00122E95 /* KeyEncoding.swift */, + FAC71CBE2D363FFE00122E95 /* MapKeyEncodingWorker.swift */, + FAC71CBF2D363FFE00122E95 /* NMapKeyEncodingWorker.swift */, + FAC71CC02D363FFE00122E95 /* SimpleKeyEncodingWorker.swift */, + FAC71CC12D363FFE00122E95 /* StorageFallbackDecodingListWorker.swift */, + ); + path = StorageFactoryWorkers; + sourceTree = ""; + }; + FAC71CC62D363FFE00122E95 /* StorageFactory */ = { + isa = PBXGroup; + children = ( + FAC71CC22D363FFE00122E95 /* StorageFactoryWorkers */, + FAC71CC32D363FFE00122E95 /* AsyncStorageRequestFactory.swift */, + FAC71CC42D363FFE00122E95 /* AsyncStorageRequestFactory+Extension.swift */, + FAC71CC52D363FFE00122E95 /* AsyncStorageRequestFactoryDefault.swift */, + ); + path = StorageFactory; + sourceTree = ""; + }; + FAC71CC92D363FFE00122E95 /* Async */ = { + isa = PBXGroup; + children = ( + FAC71CA32D363FFE00122E95 /* ComponentFactories */, + FAC71CA92D363FFE00122E95 /* Requests */, + FAC71CB92D363FFE00122E95 /* Storage */, + FAC71CC62D363FFE00122E95 /* StorageFactory */, + FAC71CC72D363FFE00122E95 /* CachedStorageRequestPerformer.swift */, + FAC71CC82D363FFE00122E95 /* StorageRequestPerformer.swift */, + ); + path = Async; + sourceTree = ""; + }; + FAC71CCB2D363FFE00122E95 /* Helpers */ = { + isa = PBXGroup; + children = ( + FAC71CCA2D363FFE00122E95 /* StorageKeyDataExtractor.swift */, + ); + path = Helpers; + sourceTree = ""; + }; + FAC71CD22D363FFE00122E95 /* Models */ = { + isa = PBXGroup; + children = ( + FAC71CCC2D363FFE00122E95 /* CachedStorageResponse.swift */, + ); + path = Models; + sourceTree = ""; + }; + FAC71CDD2D363FFE00122E95 /* Operation */ = { + isa = PBXGroup; + children = ( + ); + path = Operation; + sourceTree = ""; + }; FAC842347BD44065AAC00D29 /* SelectMarket */ = { isa = PBXGroup; children = ( @@ -15874,15 +15947,6 @@ path = RemoteSubscription; sourceTree = ""; }; - FAD067AA2C2044810050291F /* Keys */ = { - isa = PBXGroup; - children = ( - FAD067AB2C2044810050291F /* ErasStakersPagedKey.swift */, - FAD067AC2C2044810050291F /* ErasStakersOverviewKey.swift */, - ); - path = Keys; - sourceTree = ""; - }; FAD067AF2C2044B10050291F /* AssetManagement */ = { isa = PBXGroup; children = ( @@ -17085,7 +17149,6 @@ FA176BBA2851B59000258125 /* StakingBalanceParachainStrategy.swift in Sources */, 8428765524ADDE0200D91AD8 /* ProfileUserViewModel.swift in Sources */, AE9EF2C5260C85370026910A /* StoriesProgressAnimator.swift in Sources */, - FAAA29222B8DCE260089AFE6 /* CachedStorageRequestPerformer.swift in Sources */, FA5137AB29AC6F2F00560EBA /* PolkaswapDisclaimerRouter.swift in Sources */, FA62624E2AC2E35A005D3D95 /* WalletConnectActiveSessionsViewLayout.swift in Sources */, 842876B624AE05C700D91AD8 /* EmailPresentable.swift in Sources */, @@ -17106,6 +17169,42 @@ FA8800582B2C6629000AE5EB /* ReefRewardOperationFactory.swift in Sources */, FA9A8F192A72573C008FA99F /* AlchemyService.swift in Sources */, 07F2B75F28AA183C00280C38 /* PrintTimer.swift in Sources */, + FAC71CDE2D363FFE00122E95 /* MapKeyEncodingWorker.swift in Sources */, + FAC71CDF2D363FFE00122E95 /* KeyEncoding.swift in Sources */, + FAC71CE02D363FFE00122E95 /* AsyncStorageRequestFactory+Extension.swift in Sources */, + FAC71CE12D363FFE00122E95 /* StorageFallbackDecodingListWorker.swift in Sources */, + FAC71CE22D363FFE00122E95 /* PrefixRequest.swift in Sources */, + FAC71CE32D363FFE00122E95 /* PrefixResponseValueExtractor.swift in Sources */, + FAC71CE42D363FFE00122E95 /* MixStorage.swift in Sources */, + FAC71CE62D363FFE00122E95 /* JSONRPCWorkerDefault.swift in Sources */, + FAC71CE72D363FFE00122E95 /* EncodableStorageRequestWorker.swift in Sources */, + FAC71CE82D363FFE00122E95 /* SimpleKeyEncodingWorker.swift in Sources */, + FAC71CE92D363FFE00122E95 /* NMapKeyEncodingWorker.swift in Sources */, + FAC71CEA2D363FFE00122E95 /* AsyncStorageRequestFactoryDefault.swift in Sources */, + FAC71CEB2D363FFE00122E95 /* NMapStorageRequestWorker.swift in Sources */, + FAC71CEC2D363FFE00122E95 /* StorageRequest.swift in Sources */, + FAC71CED2D363FFE00122E95 /* StorageRequestWorkerBuilder.swift in Sources */, + FAC71CEF2D363FFE00122E95 /* CachedRequest.swift in Sources */, + FAC71CF02D363FFE00122E95 /* AsyncStorageRequestFactory.swift in Sources */, + FAC71CF32D363FFE00122E95 /* StorageRequestKeyEncodingWorkerFactory.swift in Sources */, + FAC71CF42D363FFE00122E95 /* StorageKeyDataExtractor.swift in Sources */, + FAC71CF62D363FFE00122E95 /* MultipleRequest.swift in Sources */, + FAC71CF72D363FFE00122E95 /* CachedStorageRequestPerformer.swift in Sources */, + FAC71CF82D363FFE00122E95 /* PrefixStorageRequestWorker.swift in Sources */, + FAC71CFA2D363FFE00122E95 /* JSONRPCListWorker.swift in Sources */, + FAC71CFB2D363FFE00122E95 /* CachedStorageResponse.swift in Sources */, + FAC71CFD2D363FFE00122E95 /* StorageResponseValueExtractor.swift in Sources */, + FAC71CFE2D363FFE00122E95 /* StorageRequestPerformer.swift in Sources */, + FAC71D002D363FFE00122E95 /* MixStorageDecodingListWorker.swift in Sources */, + FAC71D022D363FFE00122E95 /* SingleStorageResponseValueExtractor.swift in Sources */, + FAC71D032D363FFE00122E95 /* MixStorageRequestsKeysBuilder.swift in Sources */, + FAC71D042D363FFE00122E95 /* MixStorageRequestsWorker.swift in Sources */, + FAC71D062D363FFE00122E95 /* StorageRequestWorker.swift in Sources */, + FAC71D072D363FFE00122E95 /* ChildStorageResponseDecodingWorker.swift in Sources */, + FAC71D082D363FFE00122E95 /* MultipleStorageResponseValueExtractor.swift in Sources */, + FAC71D092D363FFE00122E95 /* SimpleStorageRequestWorker.swift in Sources */, + FAC71D0A2D363FFE00122E95 /* PrefixEncodableStorageRequestWorker.swift in Sources */, + FAC71D0D2D363FFE00122E95 /* MultipleSingleStorageResponseValueExtractor.swift in Sources */, FAFFAE3C29AC84480074AF1F /* NumberedLabel.swift in Sources */, FA7A4C802A1F937A0051FB4D /* RelaychainRewardCalculatorEngine.swift in Sources */, 846CD25B265709A800A2E4B6 /* StorageKeySuffixMapper.swift in Sources */, @@ -17114,7 +17213,6 @@ 075E5FCF2C7F1A180044C142 /* TonConnectServiceDelegate.swift in Sources */, 8473D40D2657E9DC00B394B2 /* MultiSigner.swift in Sources */, FA17B4B527E858CB006E0735 /* JsonLoadingFailedAlertConfig.swift in Sources */, - FAD9AAC52B8DFF6700AA603B /* PrefixStorageRequestWorker.swift in Sources */, F477CD26262EAD30004DF739 /* StakingPayoutViewModelFactory.swift in Sources */, 844E1E19266142080076AC59 /* BondedState+Status.swift in Sources */, 8493D0E126FF4F5000A28008 /* ScaleCoder+Extension.swift in Sources */, @@ -17180,7 +17278,6 @@ 845BB8DB25E462B100E5FCDC /* SubstrateConstansts.swift in Sources */, FA34EEDE2B98723C0042E73E /* OnboardingPagesFactory.swift in Sources */, FA6D40812837A4A300A7A4C6 /* SelectedValidatorListRelaychainViewModelFactory.swift in Sources */, - FAD9AAC32B8DFE0200AA603B /* PrefixRequest.swift in Sources */, 849014C824AA8A28008F705E /* BiometryAuth.swift in Sources */, 84690797264154E80030E693 /* SlashesOperationFactory.swift in Sources */, 8424A8C7262EC0E50091BFB1 /* PayoutInfo.swift in Sources */, @@ -17295,7 +17392,6 @@ FAD067CF2C20453E0050291F /* EraStakersFetching.swift in Sources */, F4F3C3CB265BB12200C58400 /* CustomValidatorListViewModelFactory.swift in Sources */, 84B018B026E0450F00C75E28 /* ValidatorStateView.swift in Sources */, - FAAA29302B8DCE590089AFE6 /* EncodableStorageRequestWorker.swift in Sources */, FA286B0E2A3043DB008BD527 /* CrossChainConfirmationViewModel.swift in Sources */, FAD646D8284F58B3007CCB92 /* StakingUnbondSetupRelaychainViewModelState.swift in Sources */, FACD42B72A5BE8F3009975AA /* PolkaswapAdjustmentViewLoadingCollector.swift in Sources */, @@ -17374,10 +17470,8 @@ FAC0BBDF291D0EB000E6F106 /* SelectAssetRouter.swift in Sources */, FAD646CA284DFE4D007CCB92 /* StakingBondMoreRelaychainStrategy.swift in Sources */, 8443FDB6255540570092893D /* ExportMnemonicData.swift in Sources */, - FAD067AD2C2044810050291F /* ErasStakersPagedKey.swift in Sources */, 84893C0724DA890F008F6A3F /* CommonError.swift in Sources */, 849DEC6125EE13CE00C64C19 /* AddressOptionsPresentable.swift in Sources */, - FAAA29272B8DCE3E0089AFE6 /* MultipleStorageResponseValueExtractor.swift in Sources */, 84F13F0826F13898006725FF /* StakingAssetSettings.swift in Sources */, 84F30EF1260001A600039D09 /* DataProviderChange+Helper.swift in Sources */, FA6262492AC2E35A005D3D95 /* WalletConnectActiveSessionsInteractor.swift in Sources */, @@ -17570,7 +17664,6 @@ FA08B3652A31A09E00D9D126 /* BigUInt+StringInitializable.swift in Sources */, 07D05E4928EEFF2C00B66C70 /* SelectValidatorsStartPoolViewModelState.swift in Sources */, 842348E92614F6EA002127AF /* SkeletonLoadable.swift in Sources */, - FAAA294B2B8DCF350089AFE6 /* AsyncStorageRequestFactory.swift in Sources */, 8490147724A94A37008F705E /* RootPresenter.swift in Sources */, FA5137AC29AC6F2F00560EBA /* PolkaswapDisclaimerViewLayout.swift in Sources */, 8428765724ADDE0200D91AD8 /* ProfileTableViewCell.swift in Sources */, @@ -17657,7 +17750,6 @@ 071606C42C7C6C2400C1DF75 /* PricesUpdated.swift in Sources */, F4DCAE4F2620819000CCA6BF /* PayoutRewardsService.swift in Sources */, 8463A70325E2FCD0003B8160 /* WeakWrapper.swift in Sources */, - FAAA29292B8DCE3E0089AFE6 /* StorageResponseValueExtractor.swift in Sources */, 8401620B25E144D50087A5F3 /* AmountInputAccessoryView.swift in Sources */, FAD4290C2A86567F001D6A16 /* BannersProtocols.swift in Sources */, 84D2F45F25EF0599008B914D /* RecommendedValidatorCell.swift in Sources */, @@ -17699,7 +17791,6 @@ FA7254352AC2E48500EC47A6 /* String+Range.swift in Sources */, 844CB57426FA01DD00396E13 /* SubstrateRepositoryFactory.swift in Sources */, 849013DF24A927E2008F705E /* SettingsExtension.swift in Sources */, - FAAA29432B8DCED90089AFE6 /* JSONRPCWorkerDefault.swift in Sources */, 842898CC265A8EC3002D5D65 /* RemoteImageViewModel.swift in Sources */, FAA086CE28470B2100CC2F33 /* SelectValidatorsConfirmParachainStrategy.swift in Sources */, 84DA3B1424C6D7C700B5E27F /* RuntimeDispatchInfo.swift in Sources */, @@ -17883,7 +17974,6 @@ AEA0C8A8267B6B3200F9666F /* SelectedValidatorListPresenter.swift in Sources */, FAFFAE9529AC84B10074AF1F /* GiantsquidTransfer.swift in Sources */, FA256985274CE5A500875A53 /* BalanceLocks+Sort.swift in Sources */, - FAAA29312B8DCE590089AFE6 /* SimpleStorageRequestWorker.swift in Sources */, FA34EEE22B98723C0042E73E /* OnboardingViewLayout.swift in Sources */, C6264C302799DA4500FCA0DB /* WalletDetailsViewModel.swift in Sources */, 8463A71F25E39E07003B8160 /* StorageProviderSource.swift in Sources */, @@ -17969,7 +18059,6 @@ 0701B9982C78FAF000DCD395 /* LiquidityPoolsOverviewInteractor.swift in Sources */, AEA2C1B62681E9B20069492E /* ValidatorSearchViewFactory.swift in Sources */, AEE4E35225E945AA00D6DF31 /* RewardCalculatorFacade.swift in Sources */, - FAAA29412B8DCED90089AFE6 /* StorageFallbackDecodingListWorker.swift in Sources */, 0701B9652C78FAF000DCD395 /* LiquidityPools+ViewModel.swift in Sources */, 0701B9922C78FAF000DCD395 /* LiquidityPoolsListAssembly.swift in Sources */, FA6C176429935DC800A55254 /* SubqueryRewardOperationFactory.swift in Sources */, @@ -18038,7 +18127,6 @@ FAFFAEAC29AC90E50074AF1F /* SubqueryPayoutValidatorsForNominatorFactory.swift in Sources */, FA8800632B31A04C000AE5EB /* StakingAccountResolverAssembly.swift in Sources */, FAA013B328DA1355000A5230 /* StakingPoolRewards.swift in Sources */, - FAAA292A2B8DCE3E0089AFE6 /* SingleStorageResponseValueExtractor.swift in Sources */, FAA0139828DA1312000A5230 /* StakingBondMoreConfirmationPoolStrategy.swift in Sources */, 84CFF1E526526FBC00DB7CF7 /* StakingBondMoreViewController.swift in Sources */, FA1D02012BBE713D005B7071 /* LiquidityPoolsListViewController.swift in Sources */, @@ -18086,7 +18174,6 @@ F40966BA26B297D6008CD244 /* AnalyticsSummaryRewardViewModel.swift in Sources */, 0701B99F2C78FAF000DCD395 /* LiquidityPoolSupplyViewModelFactory.swift in Sources */, FAA0133D28DA12B6000A5230 /* StakingPoolManagementPresenter.swift in Sources */, - FAAA29422B8DCED90089AFE6 /* JSONRPCListWorker.swift in Sources */, 849013DB24A927E2008F705E /* Logger.swift in Sources */, 84443BA226C123F100C33B5D /* Data+Random.swift in Sources */, 07DE95CA28A169A600E9C2CB /* AssetListSearchAssembly.swift in Sources */, @@ -18135,7 +18222,6 @@ 84754C882510BAFE00854599 /* ModalAlertFactory.swift in Sources */, C640416028F5191100845780 /* CreateContactViewModel.swift in Sources */, 8430AACC2602249B005B1066 /* InitialStakingState.swift in Sources */, - FAAA294A2B8DCF350089AFE6 /* AsyncStorageRequestFactory+Extension.swift in Sources */, 84786DA825F9F58E0089DFF7 /* EraValidatorService+Fetch.swift in Sources */, FA740A8D2CC8C03400981508 /* GradientBorderedTriangularedView.swift in Sources */, FAD428FF2A86567F001D6A16 /* BackupRiskWarningsAssembly.swift in Sources */, @@ -18354,6 +18440,7 @@ FAC6CD982BA807D30013A17E /* AccessoryView.swift in Sources */, 84FFE505261290830054EA63 /* NetworkInfoView.swift in Sources */, FAC6CD8C2BA7FA6C0013A17E /* AmountDecimal.swift in Sources */, + FA8B02112D375A730066F070 /* ErasStakersOverviewKey.swift in Sources */, 8490144F24A93E2E008F705E /* UIImage+Drawing.swift in Sources */, FAB16A342A9C9BD000E71F43 /* NftCellViewModel.swift in Sources */, 8444D13F267133CF00AF6D8C /* CrowdloanAddMemo.swift in Sources */, @@ -18388,14 +18475,12 @@ C6CA203D2B06C0D9001503C2 /* NftFiltersInteractor.swift in Sources */, FAFFAE4029AC84850074AF1F /* AccountManagementPresentable.swift in Sources */, FA15BC152823CB7B0037C023 /* ParachainCollatorOperationFactory.swift in Sources */, - FAAA29212B8DCE260089AFE6 /* StorageRequestPerformer.swift in Sources */, F40966B826B297D6008CD244 /* AnalyticsContainerProtocols.swift in Sources */, FAB0EDE227AA9C94003D93C2 /* NodeSelectionTableCellViewModel.swift in Sources */, 0702B35729794BA6003519F5 /* SwapTransactionViewModelFactory.swift in Sources */, AEDD7C0F269C81F500A8405F /* BlockWeights.swift in Sources */, 8428769524AE046300D91AD8 /* AboutViewController.swift in Sources */, AEE4E34D25E915ED00D6DF31 /* RewardCalculatorServiceProtocol.swift in Sources */, - FA2FC82D28B3816D00CC0A42 /* StorageKeyDataExtractor.swift in Sources */, 849013DD24A927E2008F705E /* KeystoreExtensions.swift in Sources */, FAD429062A86567F001D6A16 /* BackupCreatePasswordPresenter.swift in Sources */, FAD0679A2C2043FC0050291F /* ChainConnectionVisibilityHelper.swift in Sources */, @@ -18407,7 +18492,6 @@ 07F67CA52ACFEADB0044047D /* BigUInt+EthereumQuantity.swift in Sources */, FA851FF127917494004F5979 /* WalletTransactionDetailsViewState.swift in Sources */, FAEDC13D2820F59100E6582C /* StakingAmountViewModel.swift in Sources */, - FAD067AE2C2044810050291F /* ErasStakersOverviewKey.swift in Sources */, FA9A8F1A2A72573C008FA99F /* AlchemyEndpoint.swift in Sources */, FA62626D2AC2E35A005D3D95 /* WalletConnectProposalViewLayout.swift in Sources */, F40966CC26B297D6008CD244 /* AnalyticsStakeWireframe.swift in Sources */, @@ -18609,7 +18693,6 @@ FA286B172A3043DB008BD527 /* CrossChainViewController.swift in Sources */, 84D97EC82520D32000F07405 /* PolkadotIcon+Image.swift in Sources */, F4A198F3263299C900CD6E61 /* StakingBalanceData.swift in Sources */, - FAAA29322B8DCE590089AFE6 /* StorageRequestWorker.swift in Sources */, 84CA68D326BE9A35003B9453 /* RuntimeProvider.swift in Sources */, 8401620625E130D60087A5F3 /* ViewAction.swift in Sources */, 84A2C90424E07F400020D3B7 /* AccountOperationFactoryError.swift in Sources */, @@ -18645,7 +18728,6 @@ F4433D5F26C166470002A91E /* AnalyticsValidatorsView.swift in Sources */, FA8ED43F28FD98C800EBB712 /* YourValidatorListPoolViewModelState.swift in Sources */, FA2FC7FB28B3807C00CC0A42 /* StakingPoolJoinChoosePoolViewLayout.swift in Sources */, - FAD9AAC72B8E002F00AA603B /* PrefixStorageResponseValueExtractor.swift in Sources */, FA256A45274CE8BD00875A53 /* StoriesCollectionItem.swift in Sources */, 070B2C5F289CE49700F78F82 /* SelectableListViewController.swift in Sources */, 7D281FEA78E2E5F44990C184 /* AccountImportPresenter.swift in Sources */, @@ -18653,7 +18735,6 @@ FAFFAE8429AC84B10074AF1F /* SoraSubqueryTransfer.swift in Sources */, F4EAC7972642E0D800FBDDC3 /* ControllerAccountViewModelFactory.swift in Sources */, FA2FC81A28B3807D00CC0A42 /* StakingPoolStartProtocols.swift in Sources */, - FAAA29332B8DCE590089AFE6 /* NMapStorageRequestWorker.swift in Sources */, C6267BB228C3879A001E31BF /* BalanceInfoDependencyContainer.swift in Sources */, 849842F426592408006BBB9F /* ActiveCrowdloanTableViewCell.swift in Sources */, 501347BEA67CD30FE484358E /* AccountImportViewFactory.swift in Sources */, @@ -18817,7 +18898,6 @@ 07DE95BD28A1119400E9C2CB /* BalanceInfoViewLayout.swift in Sources */, 070CDD6D2ACAACB900F3F20A /* EthereumRemoteBalanceFetching.swift in Sources */, 0701B98D2C78FAF000DCD395 /* UserLiquidityPoolsListViewModelFactory.swift in Sources */, - FAAA293F2B8DCED90089AFE6 /* MapKeyEncodingWorker.swift in Sources */, FAA086D028470B3200CC2F33 /* SelectValidatorsConfirmParachainViewModelState.swift in Sources */, FA62625B2AC2E35A005D3D95 /* MultiSelectNetworksViewModel.swift in Sources */, FAB707672BB3C1A400A1131C /* AssetAccountInfo.swift in Sources */, @@ -18852,7 +18932,6 @@ FAADC1BC2926597400DA9903 /* ScanQRRouter.swift in Sources */, 076D9D6629507B39002762E3 /* PolkaswapSettingsFactory.swift in Sources */, 07B018D328C714B300E05510 /* ScamServiceOperationFactory.swift in Sources */, - FAAA29372B8DCE930089AFE6 /* MultipleRequest.swift in Sources */, 07E346D4288E616E00A8FAEC /* WalletBalanceBuilder.swift in Sources */, 84F30EA125FD3EE700039D09 /* ChildSubscriptionFactory.swift in Sources */, 8401AEC12642A71D000B03E3 /* StakingRebondConfirmationViewModel.swift in Sources */, @@ -18994,7 +19073,6 @@ FA6C176229935DC700A55254 /* SubsquidRewardOperationFactory.swift in Sources */, FA1D01F92BBE713D005B7071 /* LiquidityPoolListCellModel.swift in Sources */, 84038FF626FFDF4E00C73F3F /* CrowdloanSharedState.swift in Sources */, - FAAA29402B8DCED90089AFE6 /* NMapKeyEncodingWorker.swift in Sources */, FA1D01FC2BBE713D005B7071 /* LiquidityPoolsListRouter.swift in Sources */, 054C4BCDEC29ED5F74A36E8B /* ExportMnemonicPresenter.swift in Sources */, 39218CF5AA701518BD3B0103 /* ExportMnemonicInteractor.swift in Sources */, @@ -19064,7 +19142,6 @@ 076D9D2C29370C33002762E3 /* MarketButton.swift in Sources */, AF8193D9F818638254854232 /* StakingMainProtocols.swift in Sources */, C46EEF6A9A9A601694E72DB1 /* StakingMainWireframe.swift in Sources */, - FAAA29282B8DCE3E0089AFE6 /* MultipleSingleStorageResponseValueExtractor.swift in Sources */, 07DFA44F289A37F50035A8AB /* ModalSheetBlurPresentationDismissAnimator.swift in Sources */, FAC0BBD6291D0EB000E6F106 /* SendFlow.swift in Sources */, FAD428F82A86567F001D6A16 /* BackupPasswordViewController.swift in Sources */, @@ -19163,7 +19240,6 @@ F441BE0E263984DD0096B67B /* BondExtraCall.swift in Sources */, FA8810D52BDCD19D0084CC4B /* UserLiquidityPoolsListViewModelFactory.swift in Sources */, BA7AEE82627CFC0AFD69B299 /* RecommendedValidatorListPresenter.swift in Sources */, - FAAA29492B8DCF350089AFE6 /* AsyncStorageRequestFactoryDefault.swift in Sources */, 8472C5B3265CF9C500E2481B /* StakingRewardDestConfirmViewController.swift in Sources */, FAFFAE8329AC84B10074AF1F /* SubqueryHistory.swift in Sources */, B071927DF8DD5C3CA84494BA /* RecommendedValidatorListViewController.swift in Sources */, @@ -19288,6 +19364,7 @@ F418E891264D318C00699085 /* AlertsView.swift in Sources */, 0701B9AD2C78FAF000DCD395 /* LiquidityPoolSupplyConfirmRouter.swift in Sources */, FAADC19929261F6400DA9903 /* NominationPoolsUpdateRolesCall.swift in Sources */, + FA8B02132D375A990066F070 /* ErasStakersPagedKey.swift in Sources */, CCF5A7CED175D5E43B2C9971 /* StakingUnbondSetupViewController.swift in Sources */, FA1D02002BBE713D005B7071 /* LiquidityPoolListCell.swift in Sources */, FAE39AF12A9DBDDA0011A9D6 /* NftCollectionViewModel.swift in Sources */, @@ -19505,7 +19582,6 @@ FAD429012A86567F001D6A16 /* BackupCreatePasswordViewLayout.swift in Sources */, 3A7BF8FD79B7130241222C35 /* WalletTransactionHistoryProtocols.swift in Sources */, FAC6CD9D2BA8097C0013A17E /* L10n.swift in Sources */, - FAAA291D2B8DBFEE0089AFE6 /* StorageRequestWorkerBuilder.swift in Sources */, 0701B8F32C78F71800DCD395 /* OKXDexAllTokensRequestParameters.swift in Sources */, FA93A2E82833B0F10021330F /* RecommendedValidatorListRelaychainViewModelState.swift in Sources */, FAD429322A865696001D6A16 /* CheckboxButton.swift in Sources */, @@ -19564,7 +19640,6 @@ FEB21960BEBE9863BEC63F50 /* FiltersViewController.swift in Sources */, 3EC834936AEA6088FBC926B4 /* FiltersViewLayout.swift in Sources */, 719B429B58B9A0551381F92F /* FiltersViewFactory.swift in Sources */, - FAAA29362B8DCE930089AFE6 /* StorageRequest.swift in Sources */, FA4CC666281801CB00A7E85F /* StakingUnitInfoView.swift in Sources */, FA6261F42AC2C7A8005D3D95 /* NFTOperationFactoryProtocol.swift in Sources */, 7FC8C78DD68304B05B501F83 /* NodeSelectionProtocols.swift in Sources */, @@ -19704,7 +19779,6 @@ FAFFAE7D29AC84B10074AF1F /* SubqueryPageInfo.swift in Sources */, 7DFB3D265846A31807E1A663 /* StakingPoolCreateConfirmRouter.swift in Sources */, FA34EEEC2B98723C0042E73E /* BalanceLocksDetailViewController.swift in Sources */, - FAAA29442B8DCED90089AFE6 /* ChildStorageResponseDecodingWorker.swift in Sources */, FAFFAE8129AC84B10074AF1F /* SubqueryDelegatorHistoryElement.swift in Sources */, 10B4951F5E0C515EFBDBC32E /* StakingPoolCreateConfirmPresenter.swift in Sources */, FA7254362AC2E48500EC47A6 /* String+EIP55.swift in Sources */, diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 754a02843e..1349bd52ff 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,338 +1,331 @@ { - "pins" : [ - { - "identity" : "appauth-ios", - "kind" : "remoteSourceControl", - "location" : "https://github.com/openid/AppAuth-iOS.git", - "state" : { - "revision" : "2781038865a80e2c425a1da12cc1327bcd56501f", - "version" : "1.7.6" - } - }, - { - "identity" : "bigint", - "kind" : "remoteSourceControl", - "location" : "https://github.com/attaswift/BigInt.git", - "state" : { - "revision" : "0ed110f7555c34ff468e72e1686e59721f2b0da6", - "version" : "5.3.0" - } - }, - { - "identity" : "cosmos", - "kind" : "remoteSourceControl", - "location" : "https://github.com/evgenyneu/Cosmos.git", - "state" : { - "revision" : "40ba10aaf175bf50abefd0e518bd3b40862af3b1", - "version" : "25.0.1" - } - }, - { - "identity" : "cryptoswift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/krzyzanowskim/CryptoSwift.git", - "state" : { - "revision" : "678d442c6f7828def400a70ae15968aef67ef52d", - "version" : "1.8.3" - } - }, - { - "identity" : "fearless-starscream", - "kind" : "remoteSourceControl", - "location" : "https://github.com/soramitsu/fearless-starscream", - "state" : { - "revision" : "3e1de9baeab87de379e0cb01c64d5db18fbf130f", - "version" : "4.0.12" - } - }, - { - "identity" : "google-api-objectivec-client-for-rest", - "kind" : "remoteSourceControl", - "location" : "https://github.com/google/google-api-objectivec-client-for-rest.git", - "state" : { - "revision" : "a8c1e0b1173659d0be452680582c28556372ef74", - "version" : "3.5.5" - } - }, - { - "identity" : "googlesignin-ios", - "kind" : "remoteSourceControl", - "location" : "https://github.com/google/GoogleSignIn-iOS", - "state" : { - "revision" : "a7965d134c5d3567026c523e0a8a583f73b62b0d", - "version" : "7.1.0" - } - }, - { - "identity" : "gtm-session-fetcher", - "kind" : "remoteSourceControl", - "location" : "https://github.com/google/gtm-session-fetcher.git", - "state" : { - "revision" : "a2ab612cb980066ee56d90d60d8462992c07f24b", - "version" : "3.5.0" - } - }, - { - "identity" : "gtmappauth", - "kind" : "remoteSourceControl", - "location" : "https://github.com/google/GTMAppAuth.git", - "state" : { - "revision" : "5d7d66f647400952b1758b230e019b07c0b4b22a", - "version" : "4.1.1" - } - }, - { - "identity" : "nimble", - "kind" : "remoteSourceControl", - "location" : "https://github.com/Quick/Nimble", - "state" : { - "revision" : "e9d769113660769a4d9dd3afb855562c0b7ae7b0", - "version" : "7.3.4" - } - }, - { - "identity" : "promisekit", - "kind" : "remoteSourceControl", - "location" : "https://github.com/mxcl/PromiseKit.git", - "state" : { - "revision" : "8a98e31a47854d3180882c8068cc4d9381bf382d", - "version" : "6.22.1" - } - }, - { - "identity" : "qrcode", - "kind" : "remoteSourceControl", - "location" : "https://github.com/WalletConnect/QRCode", - "state" : { - "revision" : "263f280d2c8144adfb0b6676109846cfc8dd552b", - "version" : "14.3.1" - } - }, - { - "identity" : "quick", - "kind" : "remoteSourceControl", - "location" : "https://github.com/Quick/Quick", - "state" : { - "revision" : "f2b5a06440ea87eba1a167cab37bf6496646c52e", - "version" : "1.3.4" - } - }, - { - "identity" : "reachability.swift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/ashleymills/Reachability.swift", - "state" : { - "revision" : "21d1dc412cfecbe6e34f1f4c4eb88d3f912654a6", - "version" : "5.2.4" - } - }, - { - "identity" : "secp256k1.swift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/Boilertalk/secp256k1.swift.git", - "state" : { - "revision" : "cd187c632fb812fd93711a9f7e644adb7e5f97f0", - "version" : "0.1.7" - } - }, - { - "identity" : "swift-atomics", - "kind" : "remoteSourceControl", - "location" : "https://github.com/apple/swift-atomics.git", - "state" : { - "revision" : "cd142fd2f64be2100422d658e7411e39489da985", - "version" : "1.2.0" - } - }, - { - "identity" : "swift-collections", - "kind" : "remoteSourceControl", - "location" : "https://github.com/apple/swift-collections.git", - "state" : { - "revision" : "671108c96644956dddcd89dd59c203dcdb36cec7", - "version" : "1.1.4" - } - }, - { - "identity" : "swift-http-types", - "kind" : "remoteSourceControl", - "location" : "https://github.com/apple/swift-http-types", - "state" : { - "revision" : "ef18d829e8b92d731ad27bb81583edd2094d1ce3", - "version" : "1.3.1" - } - }, - { - "identity" : "swift-nio", - "kind" : "remoteSourceControl", - "location" : "https://github.com/apple/swift-nio.git", - "state" : { - "revision" : "dca6594f65308c761a9c409e09fbf35f48d50d34", - "version" : "2.77.0" - } - }, - { - "identity" : "swift-nio-extras", - "kind" : "remoteSourceControl", - "location" : "https://github.com/apple/swift-nio-extras.git", - "state" : { - "revision" : "2e9746cfc57554f70b650b021b6ae4738abef3e6", - "version" : "1.24.1" - } - }, - { - "identity" : "swift-nio-http2", - "kind" : "remoteSourceControl", - "location" : "https://github.com/apple/swift-nio-http2.git", - "state" : { - "revision" : "eaa71bb6ae082eee5a07407b1ad0cbd8f48f9dca", - "version" : "1.34.1" - } - }, - { - "identity" : "swift-nio-ssl", - "kind" : "remoteSourceControl", - "location" : "https://github.com/apple/swift-nio-ssl.git", - "state" : { - "revision" : "c7e95421334b1068490b5d41314a50e70bab23d1", - "version" : "2.29.0" - } - }, - { - "identity" : "swift-nio-transport-services", - "kind" : "remoteSourceControl", - "location" : "https://github.com/apple/swift-nio-transport-services.git", - "state" : { - "revision" : "bbd5e63cf949b7db0c9edaf7a21e141c52afe214", - "version" : "1.23.0" - } - }, - { - "identity" : "swift-openapi-runtime", - "kind" : "remoteSourceControl", - "location" : "https://github.com/apple/swift-openapi-runtime", - "state" : { - "revision" : "a51b3bd6f2151e9a6f792ca6937a7242c4758768", - "version" : "0.3.6" - } - }, - { - "identity" : "swift-qrcode-generator", - "kind" : "remoteSourceControl", - "location" : "https://github.com/dagronf/swift-qrcode-generator", - "state" : { - "revision" : "5ca09b6a2ad190f94aa3d6ddef45b187f8c0343b", - "version" : "1.0.3" - } - }, - { - "identity" : "swift-system", - "kind" : "remoteSourceControl", - "location" : "https://github.com/apple/swift-system.git", - "state" : { - "revision" : "c8a44d836fe7913603e246acab7c528c2e780168", - "version" : "1.4.0" - } - }, - { - "identity" : "swiftformat", - "kind" : "remoteSourceControl", - "location" : "https://github.com/nicklockwood/SwiftFormat", - "state" : { - "revision" : "4e92b81311f528cfdca8015d629c650d0aff94ce", - "version" : "0.55.4" - } - }, - { - "identity" : "swiftimagereadwrite", - "kind" : "remoteSourceControl", - "location" : "https://github.com/dagronf/SwiftImageReadWrite", - "state" : { - "revision" : "5596407d1cf61b953b8e658fa8636a471df3c509", - "version" : "1.1.6" - } - }, - { - "identity" : "swiftybeaver", - "kind" : "remoteSourceControl", - "location" : "https://github.com/SwiftyBeaver/SwiftyBeaver.git", - "state" : { - "revision" : "8cba041db09596183331d123f337d0eb2e6e8e91", - "version" : "2.1.1" - } - }, - { - "identity" : "swime", - "kind" : "remoteSourceControl", - "location" : "https://github.com/sendyhalim/Swime", - "state" : { - "revision" : "4e538834483059ceefaaad8cdb3abe0d7d1c5146", - "version" : "3.1.0" - } - }, - { - "identity" : "ton-api-swift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/DRadmir/ton-api-swift.git", - "state" : { - "revision" : "8ddff19a40d3d00503cab7fb9d9eb77459169488", - "version" : "0.5.0" - } - }, - { - "identity" : "ton-swift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/DRadmir/ton-swift", - "state" : { - "branch" : "main", - "revision" : "73c9894e2be8d6d16b87853342eb2755d2e4be8a" - } - }, - { - "identity" : "tweetnacl-swiftwrap", - "kind" : "remoteSourceControl", - "location" : "https://github.com/bitmark-inc/tweetnacl-swiftwrap", - "state" : { - "revision" : "f8fd111642bf2336b11ef9ea828510693106e954", - "version" : "1.1.0" - } - }, - { - "identity" : "walletconnectswiftv2", - "kind" : "remoteSourceControl", - "location" : "https://github.com/WalletConnect/WalletConnectSwiftV2", - "state" : { - "revision" : "58d2b49eeac5cf94432e2647b9107577c156a25c", - "version" : "1.9.9" - } - }, - { - "identity" : "web3.swift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/bnsports/Web3.swift.git", - "state" : { - "revision" : "a526779488e5fe2fa993d9614f11f57b00cc1858", - "version" : "7.7.7" - } - }, - { - "identity" : "websocket-kit", - "kind" : "remoteSourceControl", - "location" : "https://github.com/vapor/websocket-kit", - "state" : { - "revision" : "4232d34efa49f633ba61afde365d3896fc7f8740", - "version" : "2.15.0" - } - }, - { - "identity" : "xxhash-swift", - "kind" : "remoteSourceControl", - "location" : "https://github.com/daisuke-t-jp/xxHash-Swift", - "state" : { - "revision" : "e86a07ab4867f81481d430e1370a5ec97b6e3359", - "version" : "1.1.1" - } - } - ], - "version" : 2 + "object": { + "pins": [ + { + "package": "AppAuth", + "repositoryURL": "https://github.com/openid/AppAuth-iOS.git", + "state": { + "branch": null, + "revision": "2781038865a80e2c425a1da12cc1327bcd56501f", + "version": "1.7.6" + } + }, + { + "package": "BigInt", + "repositoryURL": "https://github.com/attaswift/BigInt.git", + "state": { + "branch": null, + "revision": "0ed110f7555c34ff468e72e1686e59721f2b0da6", + "version": "5.3.0" + } + }, + { + "package": "Cosmos", + "repositoryURL": "https://github.com/evgenyneu/Cosmos.git", + "state": { + "branch": null, + "revision": "40ba10aaf175bf50abefd0e518bd3b40862af3b1", + "version": "25.0.1" + } + }, + { + "package": "CryptoSwift", + "repositoryURL": "https://github.com/krzyzanowskim/CryptoSwift.git", + "state": { + "branch": null, + "revision": "678d442c6f7828def400a70ae15968aef67ef52d", + "version": "1.8.3" + } + }, + { + "package": "google-api-objectivec-client-for-rest", + "repositoryURL": "https://github.com/google/google-api-objectivec-client-for-rest.git", + "state": { + "branch": null, + "revision": "a8c1e0b1173659d0be452680582c28556372ef74", + "version": "3.5.5" + } + }, + { + "package": "GoogleSignIn-iOS", + "repositoryURL": "https://github.com/google/GoogleSignIn-iOS", + "state": { + "branch": null, + "revision": "a7965d134c5d3567026c523e0a8a583f73b62b0d", + "version": "7.1.0" + } + }, + { + "package": "gtm-session-fetcher", + "repositoryURL": "https://github.com/google/gtm-session-fetcher.git", + "state": { + "branch": null, + "revision": "a2ab612cb980066ee56d90d60d8462992c07f24b", + "version": "3.5.0" + } + }, + { + "package": "GTMAppAuth", + "repositoryURL": "https://github.com/google/GTMAppAuth.git", + "state": { + "branch": null, + "revision": "5d7d66f647400952b1758b230e019b07c0b4b22a", + "version": "4.1.1" + } + }, + { + "package": "Nimble", + "repositoryURL": "https://github.com/Quick/Nimble", + "state": { + "branch": null, + "revision": "e9d769113660769a4d9dd3afb855562c0b7ae7b0", + "version": "7.3.4" + } + }, + { + "package": "PromiseKit", + "repositoryURL": "https://github.com/mxcl/PromiseKit.git", + "state": { + "branch": null, + "revision": "8a98e31a47854d3180882c8068cc4d9381bf382d", + "version": "6.22.1" + } + }, + { + "package": "QRCode", + "repositoryURL": "https://github.com/WalletConnect/QRCode", + "state": { + "branch": null, + "revision": "263f280d2c8144adfb0b6676109846cfc8dd552b", + "version": "14.3.1" + } + }, + { + "package": "Quick", + "repositoryURL": "https://github.com/Quick/Quick", + "state": { + "branch": null, + "revision": "f2b5a06440ea87eba1a167cab37bf6496646c52e", + "version": "1.3.4" + } + }, + { + "package": "Reachability", + "repositoryURL": "https://github.com/ashleymills/Reachability.swift", + "state": { + "branch": null, + "revision": "21d1dc412cfecbe6e34f1f4c4eb88d3f912654a6", + "version": "5.2.4" + } + }, + { + "package": "secp256k1.swift", + "repositoryURL": "https://github.com/Boilertalk/secp256k1.swift.git", + "state": { + "branch": null, + "revision": "cd187c632fb812fd93711a9f7e644adb7e5f97f0", + "version": "0.1.7" + } + }, + { + "package": "swift-atomics", + "repositoryURL": "https://github.com/apple/swift-atomics.git", + "state": { + "branch": null, + "revision": "cd142fd2f64be2100422d658e7411e39489da985", + "version": "1.2.0" + } + }, + { + "package": "swift-collections", + "repositoryURL": "https://github.com/apple/swift-collections.git", + "state": { + "branch": null, + "revision": "671108c96644956dddcd89dd59c203dcdb36cec7", + "version": "1.1.4" + } + }, + { + "package": "swift-http-types", + "repositoryURL": "https://github.com/apple/swift-http-types", + "state": { + "branch": null, + "revision": "ef18d829e8b92d731ad27bb81583edd2094d1ce3", + "version": "1.3.1" + } + }, + { + "package": "swift-nio", + "repositoryURL": "https://github.com/apple/swift-nio.git", + "state": { + "branch": null, + "revision": "dca6594f65308c761a9c409e09fbf35f48d50d34", + "version": "2.77.0" + } + }, + { + "package": "swift-nio-extras", + "repositoryURL": "https://github.com/apple/swift-nio-extras.git", + "state": { + "branch": null, + "revision": "2e9746cfc57554f70b650b021b6ae4738abef3e6", + "version": "1.24.1" + } + }, + { + "package": "swift-nio-http2", + "repositoryURL": "https://github.com/apple/swift-nio-http2.git", + "state": { + "branch": null, + "revision": "eaa71bb6ae082eee5a07407b1ad0cbd8f48f9dca", + "version": "1.34.1" + } + }, + { + "package": "swift-nio-ssl", + "repositoryURL": "https://github.com/apple/swift-nio-ssl.git", + "state": { + "branch": null, + "revision": "c7e95421334b1068490b5d41314a50e70bab23d1", + "version": "2.29.0" + } + }, + { + "package": "swift-nio-transport-services", + "repositoryURL": "https://github.com/apple/swift-nio-transport-services.git", + "state": { + "branch": null, + "revision": "bbd5e63cf949b7db0c9edaf7a21e141c52afe214", + "version": "1.23.0" + } + }, + { + "package": "swift-openapi-runtime", + "repositoryURL": "https://github.com/apple/swift-openapi-runtime", + "state": { + "branch": null, + "revision": "a51b3bd6f2151e9a6f792ca6937a7242c4758768", + "version": "0.3.6" + } + }, + { + "package": "swift-qrcode-generator", + "repositoryURL": "https://github.com/dagronf/swift-qrcode-generator", + "state": { + "branch": null, + "revision": "5ca09b6a2ad190f94aa3d6ddef45b187f8c0343b", + "version": "1.0.3" + } + }, + { + "package": "swift-system", + "repositoryURL": "https://github.com/apple/swift-system.git", + "state": { + "branch": null, + "revision": "c8a44d836fe7913603e246acab7c528c2e780168", + "version": "1.4.0" + } + }, + { + "package": "SwiftFormat", + "repositoryURL": "https://github.com/nicklockwood/SwiftFormat", + "state": { + "branch": null, + "revision": "4e92b81311f528cfdca8015d629c650d0aff94ce", + "version": "0.55.4" + } + }, + { + "package": "SwiftImageReadWrite", + "repositoryURL": "https://github.com/dagronf/SwiftImageReadWrite", + "state": { + "branch": null, + "revision": "5596407d1cf61b953b8e658fa8636a471df3c509", + "version": "1.1.6" + } + }, + { + "package": "SwiftyBeaver", + "repositoryURL": "https://github.com/SwiftyBeaver/SwiftyBeaver.git", + "state": { + "branch": null, + "revision": "8cba041db09596183331d123f337d0eb2e6e8e91", + "version": "2.1.1" + } + }, + { + "package": "Swime", + "repositoryURL": "https://github.com/sendyhalim/Swime", + "state": { + "branch": null, + "revision": "4e538834483059ceefaaad8cdb3abe0d7d1c5146", + "version": "3.1.0" + } + }, + { + "package": "TonAPI", + "repositoryURL": "https://github.com/DRadmir/ton-api-swift.git", + "state": { + "branch": null, + "revision": "8ddff19a40d3d00503cab7fb9d9eb77459169488", + "version": "0.5.0" + } + }, + { + "package": "TonSwift", + "repositoryURL": "https://github.com/DRadmir/ton-swift", + "state": { + "branch": "main", + "revision": "73c9894e2be8d6d16b87853342eb2755d2e4be8a", + "version": null + } + }, + { + "package": "tweetnacl-swiftwrap", + "repositoryURL": "https://github.com/bitmark-inc/tweetnacl-swiftwrap", + "state": { + "branch": null, + "revision": "f8fd111642bf2336b11ef9ea828510693106e954", + "version": "1.1.0" + } + }, + { + "package": "WalletConnectSwiftV2", + "repositoryURL": "https://github.com/WalletConnect/WalletConnectSwiftV2", + "state": { + "branch": null, + "revision": "58d2b49eeac5cf94432e2647b9107577c156a25c", + "version": "1.9.9" + } + }, + { + "package": "Web3.swift", + "repositoryURL": "https://github.com/bnsports/Web3.swift.git", + "state": { + "branch": null, + "revision": "a526779488e5fe2fa993d9614f11f57b00cc1858", + "version": "7.7.7" + } + }, + { + "package": "websocket-kit", + "repositoryURL": "https://github.com/vapor/websocket-kit", + "state": { + "branch": null, + "revision": "4232d34efa49f633ba61afde365d3896fc7f8740", + "version": "2.15.0" + } + }, + { + "package": "xxHash-Swift", + "repositoryURL": "https://github.com/daisuke-t-jp/xxHash-Swift", + "state": { + "branch": null, + "revision": "e86a07ab4867f81481d430e1370a5ec97b6e3359", + "version": "1.1.1" + } + } + ] + }, + "version": 1 } diff --git a/fearless/ApplicationLayer/ComponentFactories/BalanceLocksFetchingFactory.swift b/fearless/ApplicationLayer/ComponentFactories/BalanceLocksFetchingFactory.swift index 3649b3f508..1cd3af0298 100644 --- a/fearless/ApplicationLayer/ComponentFactories/BalanceLocksFetchingFactory.swift +++ b/fearless/ApplicationLayer/ComponentFactories/BalanceLocksFetchingFactory.swift @@ -19,8 +19,7 @@ final class BalanceLocksFetchingFactory { operationManager: operationManager ) let storageRequestPerformer = StorageRequestPerformerDefault( - runtimeService: runtimeService, - connection: connection + chainRegistry: chainRegistry ) let crowdloanOperationFactory = CrowdloanOperationFactory( requestOperationFactory: storageRequestFactory, diff --git a/fearless/ApplicationLayer/ServiceAssembly.swift b/fearless/ApplicationLayer/ServiceAssembly.swift index 52466b2417..ac55e0ed13 100644 --- a/fearless/ApplicationLayer/ServiceAssembly.swift +++ b/fearless/ApplicationLayer/ServiceAssembly.swift @@ -80,7 +80,7 @@ final class ServiceAssembly { if let _substrateRemoteBalanceFetching { return _substrateRemoteBalanceFetching } - let storagePerformer = SSFStorageQueryKit.StorageRequestPerformerDefault( + let storagePerformer = StorageRequestPerformerDefault( chainRegistry: chainRegistry ) let service = SubstrateRemoteBalanceFetchingImpl( diff --git a/fearless/ApplicationLayer/Services/Balance/BalanceLocksFetching.swift b/fearless/ApplicationLayer/Services/Balance/BalanceLocksFetching.swift index 7dfe54c086..96bf7158c3 100644 --- a/fearless/ApplicationLayer/Services/Balance/BalanceLocksFetching.swift +++ b/fearless/ApplicationLayer/Services/Balance/BalanceLocksFetching.swift @@ -9,6 +9,8 @@ enum BalanceLocksFetchingError: Error { case unknownChainAssetType case stakingNotFound case noDataFound + case noVestingLocksFound + case noAssetFrozenFound } protocol BalanceLocksFetching { @@ -46,12 +48,12 @@ final class BalanceLocksFetchingDefault { let accountIdVariant = try AccountIdVariant.build(raw: accountId, chain: chainAsset.chain) let controllerRequest = StakingControllerRequest(accountId: accountIdVariant) - let controllerAddress: String? = try? await storageRequestPerformer.performSingle(controllerRequest) + let controllerAddress: String? = try? await storageRequestPerformer.performSingle(controllerRequest, chain: chainAsset.chain) if let controllerAddress { return try controllerAddress.toAccountId(using: chainAsset.chain.chainFormat) } - let controllerAccountId: Data? = try await storageRequestPerformer.performSingle(controllerRequest) + let controllerAccountId: Data? = try await storageRequestPerformer.performSingle(controllerRequest, chain: chainAsset.chain) return controllerAccountId } @@ -78,7 +80,7 @@ final class BalanceLocksFetchingDefault { let accountIdVariant = try AccountIdVariant.build(raw: accountId, chain: chainAsset.chain) let request = AssetsAccountRequest(accountId: accountIdVariant, currencyId: currencyId) - let assetAccountInfo: AssetAccountInfo? = try await storageRequestPerformer.performSingle(request) + let assetAccountInfo: AssetAccountInfo? = try await storageRequestPerformer.performSingle(request, chain: chainAsset.chain) return assetAccountInfo } } @@ -90,14 +92,20 @@ extension BalanceLocksFetchingDefault: BalanceLocksFetching { async let governanceLocks = fetchGovernanceLocks(for: accountId) async let crowdloanLocks = fetchCrowdloanLocks(for: accountId) async let vestingLocks = fetchVestingLocks(for: accountId, currencyId: currencyId) - - return await [ - (try? stakingLocks).or(.zero), - (try? nominationPoolLocks).or(.zero), - (try? governanceLocks).or(.zero), - (try? crowdloanLocks).or(.zero), - (try? vestingLocks).or(.zero) - ].reduce(0, +) + + let values = await [ + (try? stakingLocks), + (try? nominationPoolLocks), + (try? governanceLocks), + (try? crowdloanLocks), + (try? vestingLocks) + ].compactMap { $0 } + + guard values.first != nil else { + throw BalanceLocksFetchingError.noDataFound + } + + return values.reduce(0, +) } func fetchStakingLocks(for accountId: AccountId) async throws -> StakingLocks { @@ -109,8 +117,8 @@ extension BalanceLocksFetchingDefault: BalanceLocksFetching { let ledgerRequest = StakingLedgerRequest(accountId: accountIdVariant) let eraRequest = StakingCurrentEraRequest() - async let asyncActiveEra: StringScaleMapper? = storageRequestPerformer.performSingle(eraRequest) - async let asyncLedger: StakingLedger? = storageRequestPerformer.performSingle(ledgerRequest) + async let asyncActiveEra: StringScaleMapper? = storageRequestPerformer.performSingle(eraRequest, chain: chainAsset.chain) + async let asyncLedger: StakingLedger? = storageRequestPerformer.performSingle(ledgerRequest, chain: chainAsset.chain) let ledger = try await asyncLedger let activeEra = try await asyncActiveEra?.value @@ -159,8 +167,8 @@ extension BalanceLocksFetchingDefault: BalanceLocksFetching { let poolMemberRequest = NominationPoolsPoolMembersRequest(accountId: accountId) let eraRequest = StakingCurrentEraRequest() - async let asyncStakingPoolMember: StakingPoolMember? = storageRequestPerformer.performSingle(poolMemberRequest) - async let asyncActiveEra: StringScaleMapper? = storageRequestPerformer.performSingle(eraRequest) + async let asyncStakingPoolMember: StakingPoolMember? = storageRequestPerformer.performSingle(poolMemberRequest, chain: chainAsset.chain) + async let asyncActiveEra: StringScaleMapper? = storageRequestPerformer.performSingle(eraRequest, chain: chainAsset.chain) async let claimableResponse = try await fetchPoolPendingRewards(for: accountId) let stakingPoolMember = try await asyncStakingPoolMember @@ -213,7 +221,7 @@ extension BalanceLocksFetchingDefault: BalanceLocksFetching { let accountIdVariant = try AccountIdVariant.build(raw: accountId, chain: chainAsset.chain) let balancesLocksRequest = BalancesLocksRequest(accountId: accountIdVariant) - let balanceLocks: BalanceLocks? = try await storageRequestPerformer.performSingle(balancesLocksRequest) + let balanceLocks: BalanceLocks? = try await storageRequestPerformer.performSingle(balancesLocksRequest, chain: chainAsset.chain) let govLocked = balanceLocks?.first(where: { $0.displayId == "pyconvot" })?.amount return Decimal.fromSubstrateAmount(govLocked.or(.zero), precision: Int16(chainAsset.asset.precision)).or(.zero) } @@ -231,37 +239,51 @@ extension BalanceLocksFetchingDefault: BalanceLocksFetching { func fetchVestingLocks(for accountId: AccountId, currencyId: CurrencyId?) async throws -> Decimal { let accountIdVariant = try AccountIdVariant.build(raw: accountId, chain: chainAsset.chain) let balancesLocksRequest = BalancesLocksRequest(accountId: accountIdVariant) - let balanceLocks: BalanceLocks? = try? await storageRequestPerformer.performSingle(balancesLocksRequest) + let balanceLocks: BalanceLocks? = try? await storageRequestPerformer.performSingle(balancesLocksRequest, chain: chainAsset.chain) - let balanceLockedRewardsValue = balanceLocks?.first { $0.lockType?.lowercased().contains("vest") == true }.map { lock in - Decimal.fromSubstrateAmount(lock.amount, precision: Int16(chainAsset.asset.precision)) ?? .zero - } ?? .zero + let balanceLockedRewardsValue = balanceLocks?.first { $0.lockType?.lowercased().contains("vest") == true }.flatMap { lock in + Decimal.fromSubstrateAmount(lock.amount, precision: Int16(chainAsset.asset.precision)) + } guard let currencyId else { + guard let balanceLockedRewardsValue else { + throw BalanceLocksFetchingError.noVestingLocksFound + } + return balanceLockedRewardsValue } let tokensLocksRequest = TokensLocksRequest(accountId: accountIdVariant, currencyId: currencyId) - let tokenLocks: TokenLocks? = try? await storageRequestPerformer.performSingle(tokensLocksRequest) - let tokenLockedRewardsValue = tokenLocks?.first { $0.lockType?.lowercased().contains("vest") == true }.map { lock in - Decimal.fromSubstrateAmount(lock.amount, precision: Int16(chainAsset.asset.precision)) ?? .zero - } ?? .zero + let tokenLocks: TokenLocks? = try? await storageRequestPerformer.performSingle(tokensLocksRequest, chain: chainAsset.chain) + let tokenLockedRewardsValue = tokenLocks?.first { $0.lockType?.lowercased().contains("vest") == true }.flatMap { lock in + Decimal.fromSubstrateAmount(lock.amount, precision: Int16(chainAsset.asset.precision)) + } - return [balanceLockedRewardsValue, tokenLockedRewardsValue].reduce(0, +) + let values = [balanceLockedRewardsValue, tokenLockedRewardsValue].compactMap { $0 } + guard values.first != nil else { + throw BalanceLocksFetchingError.noVestingLocksFound + } + + return values.reduce(0, +) } func fetchAssetLocks(for accountId: AccountId, currencyId: CurrencyId?) async throws -> Decimal { guard let currencyId else { - return .zero + throw BalanceLocksFetchingError.noAssetFrozenFound } let accountIdVariant = try AccountIdVariant.build(raw: accountId, chain: chainAsset.chain) let request = AssetsAccountRequest(accountId: accountIdVariant, currencyId: currencyId) - let assetAccountInfo: AssetAccountInfo? = try await storageRequestPerformer.performSingle(request) + let assetAccountInfo: AssetAccountInfo? = try await storageRequestPerformer.performSingle(request, chain: chainAsset.chain) let locked = assetAccountInfo.flatMap { Decimal.fromSubstrateAmount($0.locked, precision: Int16(chainAsset.asset.precision)) } - return locked.or(.zero) + + guard let locked else { + throw BalanceLocksFetchingError.noAssetFrozenFound + } + + return locked } func fetchAssetFrozen(for accountId: AccountId, currencyId: CurrencyId?) async throws -> Decimal { diff --git a/fearless/ApplicationLayer/Services/Balance/RemoteSubscription/Requests.swift b/fearless/ApplicationLayer/Services/Balance/RemoteSubscription/Requests.swift index 2fb527bfa3..d56aece982 100644 --- a/fearless/ApplicationLayer/Services/Balance/RemoteSubscription/Requests.swift +++ b/fearless/ApplicationLayer/Services/Balance/RemoteSubscription/Requests.swift @@ -12,27 +12,27 @@ enum AccountInfoStorageResponseValueRegistry: String { struct AccountInfoStorageRequest: MixStorageRequest { typealias Response = AccountInfo let parametersType: MixStorageRequestParametersType - let storagePath: any StorageCodingPathProtocol + let storagePath: StorageCodingPath let requestId: String } struct OrmlAccountInfoStorageRequest: MixStorageRequest { typealias Response = OrmlAccountInfo let parametersType: MixStorageRequestParametersType - let storagePath: any StorageCodingPathProtocol + let storagePath: StorageCodingPath let requestId: String } struct EquilibriumAccountInfotorageRequest: MixStorageRequest { typealias Response = EquilibriumAccountInfo let parametersType: MixStorageRequestParametersType - let storagePath: any StorageCodingPathProtocol + let storagePath: StorageCodingPath let requestId: String } struct AssetAccountStorageRequest: MixStorageRequest { typealias Response = AssetAccount let parametersType: MixStorageRequestParametersType - let storagePath: any StorageCodingPathProtocol + let storagePath: StorageCodingPath let requestId: String } diff --git a/fearless/ApplicationLayer/Services/Balance/SubstrateRemoteBalanceFetching.swift b/fearless/ApplicationLayer/Services/Balance/SubstrateRemoteBalanceFetching.swift index 9c8cfeecf3..560cd350fe 100644 --- a/fearless/ApplicationLayer/Services/Balance/SubstrateRemoteBalanceFetching.swift +++ b/fearless/ApplicationLayer/Services/Balance/SubstrateRemoteBalanceFetching.swift @@ -3,9 +3,9 @@ import SSFModels import SSFStorageQueryKit actor SubstrateRemoteBalanceFetchingImpl: AccountInfoRemoteService { - private let storagePerformer: SSFStorageQueryKit.StorageRequestPerformer + private let storagePerformer: StorageRequestPerformer - init(storagePerformer: SSFStorageQueryKit.StorageRequestPerformer) { + init(storagePerformer: StorageRequestPerformer) { self.storagePerformer = storagePerformer } @@ -170,7 +170,7 @@ actor SubstrateRemoteBalanceFetchingImpl: AccountInfoRemoteService { ) return request } else { - let params: [[any SSFStorageQueryKit.NMapKeyParamProtocol]] = [ + let params: [[any NMapKeyParamProtocol]] = [ [NMapKeyParam(value: accountId)], [NMapKeyParam(value: chainAsset.currencyId)] ] @@ -189,7 +189,7 @@ actor SubstrateRemoteBalanceFetchingImpl: AccountInfoRemoteService { ) return request case .assets: - let params: [[any SSFStorageQueryKit.NMapKeyParamProtocol]] = [ + let params: [[any NMapKeyParamProtocol]] = [ [NMapKeyParam(value: chainAsset.currencyId)], [NMapKeyParam(value: accountId)] ] @@ -213,7 +213,7 @@ actor SubstrateRemoteBalanceFetchingImpl: AccountInfoRemoteService { ) return request default: - let params: [[any SSFStorageQueryKit.NMapKeyParamProtocol]] = [ + let params: [[any NMapKeyParamProtocol]] = [ [NMapKeyParam(value: accountId)], [NMapKeyParam(value: chainAsset.currencyId)] ] diff --git a/fearless/ApplicationLayer/Services/Balance/WalletBalanceSubscription/WalletBalanceSubscriptionAdapter.swift b/fearless/ApplicationLayer/Services/Balance/WalletBalanceSubscription/WalletBalanceSubscriptionAdapter.swift index d90f8343d7..f5d9cce6c9 100644 --- a/fearless/ApplicationLayer/Services/Balance/WalletBalanceSubscription/WalletBalanceSubscriptionAdapter.swift +++ b/fearless/ApplicationLayer/Services/Balance/WalletBalanceSubscription/WalletBalanceSubscriptionAdapter.swift @@ -59,7 +59,7 @@ enum WalletBalanceListenerType { case networkManagement(wallet: MetaAccountModel) } -final class WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterProtocol, ChainAssetListBuilder { +final actor WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterProtocol, ChainAssetListBuilder { static let shared = createWalletBalanceAdapter() // MARK: - Private properties @@ -102,12 +102,43 @@ final class WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterPr self.accountInfoFetchingProvider = accountInfoFetchingProvider eventCenter.add(observer: self) - fetchInitialData() + Task { + await fetchInitialData() + } + } + + private func addListener(_ listener: WeakWrapper) async { + listeners.append(listener) + } + + private func removeListener(_ listener: WalletBalanceSubscriptionListener) async { + listeners = listeners.filter { + if let target = $0.target as? WalletBalanceSubscriptionListener { + return target !== listener + } + return true + } + } + + private func saveAccountInfoAdapters(_ accountInfosAdapters: [String: AccountInfoSubscriptionAdapter]) async { + self.accountInfosAdapters = accountInfosAdapters + } + + private func saveWallets(_ wallets: [MetaAccountModel]) async { + self.wallets = wallets + } + + private func saveChainAssets(_ chainAssets: [ChainAsset]) async { + self.chainAssets = chainAssets + } + + private func saveAccountInfos(accountInfos: [ChainAssetKey: AccountInfo?]) async { + self.accountInfos = accountInfos } // MARK: - Public methods - func subscribeWalletBalance( + nonisolated func subscribeWalletBalance( wallet: MetaAccountModel, listener: WalletBalanceSubscriptionListener ) { @@ -115,33 +146,34 @@ final class WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterPr try await updateLocalBalances(wallets: [wallet], chainAssets: chainAssets) let weakListener = WeakWrapper(target: listener) - listenersLock.exclusivelyWrite { [weak self] in - self?.listeners.append(weakListener) + Task { + await addListener(weakListener) } - updateWalletsIfNeeded(with: wallet) - if let balances = buildBalance(for: [wallet], chainAssets: chainAssets) { - notify(listener: listener, result: .success(balances)) + + await updateWalletsIfNeeded(with: wallet) + if let balances = await buildBalance(for: [wallet], chainAssets: chainAssets) { + await notify(listener: listener, result: .success(balances)) } } } - func subscribeWalletsBalances( + nonisolated func subscribeWalletsBalances( listener: WalletBalanceSubscriptionListener ) { Task { try await updateLocalBalances(wallets: wallets, chainAssets: chainAssets) let weakListener = WeakWrapper(target: listener) - listenersLock.exclusivelyWrite { [weak self] in - self?.listeners.append(weakListener) + Task { + await addListener(weakListener) } - if let balances = buildBalance(for: wallets, chainAssets: chainAssets) { - notify(listener: listener, result: .success(balances)) + if let balances = await buildBalance(for: wallets, chainAssets: chainAssets) { + await notify(listener: listener, result: .success(balances)) } } } - func subscribeChainAssetBalance( + nonisolated func subscribeChainAssetBalance( wallet: MetaAccountModel, chainAsset: ChainAsset, listener: WalletBalanceSubscriptionListener @@ -150,16 +182,16 @@ final class WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterPr try await updateLocalBalances(wallets: [wallet], chainAssets: [chainAsset]) let weakListener = WeakWrapper(target: listener) - listenersLock.exclusivelyWrite { [weak self] in - self?.listeners.append(weakListener) + Task { + await addListener(weakListener) } - if let balances = buildBalance(for: [wallet], chainAssets: [chainAsset]) { - notify(listener: listener, result: .success(balances)) + if let balances = await buildBalance(for: [wallet], chainAssets: [chainAsset]) { + await notify(listener: listener, result: .success(balances)) } } } - func subscribeChainAssetsBalance( + nonisolated func subscribeChainAssetsBalance( chainAssets: [ChainAsset], wallet: MetaAccountModel, listener: WalletBalanceSubscriptionListener @@ -168,17 +200,17 @@ final class WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterPr try await updateLocalBalances(wallets: [wallet], chainAssets: chainAssets) let weakListener = WeakWrapper(target: listener) - listenersLock.exclusivelyWrite { [weak self] in - self?.listeners.append(weakListener) + Task { + await addListener(weakListener) } - if let balances = buildBalance(for: [wallet], chainAssets: chainAssets) { - notify(listener: listener, result: .success(balances)) + if let balances = await buildBalance(for: [wallet], chainAssets: chainAssets) { + await notify(listener: listener, result: .success(balances)) } } } - func subscribeNetworkManagementBalance( + nonisolated func subscribeNetworkManagementBalance( wallet: MetaAccountModel, listener: WalletBalanceSubscriptionListener ) { @@ -186,35 +218,26 @@ final class WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterPr try await updateLocalBalances(wallets: [wallet], chainAssets: chainAssets) let weakListener = WeakWrapper(target: listener) - listenersLock.exclusivelyWrite { [weak self] in - self?.listeners.append(weakListener) + Task { + await addListener(weakListener) } - updateWalletsIfNeeded(with: wallet) - let selectedChainAssets = filterChainAssets( + await updateWalletsIfNeeded(with: wallet) + let selectedChainAssets = await filterChainAssets( with: NetworkManagmentFilter(identifier: wallet.networkManagmentFilter), chainAssets: chainAssets, wallet: wallet, search: nil ) - if let balances = buildBalance(for: [wallet], chainAssets: selectedChainAssets) { - notify(listener: listener, result: .success(balances)) + if let balances = await buildBalance(for: [wallet], chainAssets: selectedChainAssets) { + await notify(listener: listener, result: .success(balances)) } } } - func unsubscribe(listener: WalletBalanceSubscriptionListener) { - listenersLock.exclusivelyWrite { [weak self] in - guard let strongSelf = self else { - return - } - - strongSelf.listeners = strongSelf.listeners.filter { - if let target = $0.target as? WalletBalanceSubscriptionListener { - return target !== listener - } - return true - } + nonisolated func unsubscribe(listener: WalletBalanceSubscriptionListener) { + Task { + await removeListener(listener) } } @@ -309,13 +332,16 @@ final class WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterPr listener: WalletBalanceSubscriptionListener, result: WalletBalancesResult ) { - clearIfNeeded() - listener.handle(result: result) + Task { + await clearIfNeeded() + listener.handle(result: result) + } } private func buildAndNotifyIfNeeded(with updatedWalletsIds: [MetaAccountId], updatedChainAssets: [ChainAsset]) { - clearIfNeeded() - + Task { + await clearIfNeeded() + } let unwrappedListeners = listeners.compactMap { if let target = $0.target as? WalletBalanceSubscriptionListener { return target @@ -365,14 +391,8 @@ final class WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterPr } } - private func clearIfNeeded() { - listenersLock.exclusivelyWrite { [weak self] in - guard let strongSelf = self else { - return - } - - strongSelf.listeners = strongSelf.listeners.filter { $0.target != nil } - } + private func clearIfNeeded() async { + listeners = listeners.filter { $0.target != nil } } private func updateWalletsIfNeeded(with wallet: MetaAccountModel) { @@ -393,55 +413,66 @@ final class WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterPr // MARK: - EventVisitorProtocol extension WalletBalanceSubscriptionAdapter: EventVisitorProtocol { - func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { - if let index = wallets.firstIndex(where: { $0.metaId == event.account.metaId }), - let wallet = wallets[safe: index] { - if wallet.selectedCurrency != event.account.selectedCurrency { - wallets[index] = event.account - } - if wallet.networkManagmentFilter != event.account.networkManagmentFilter { + nonisolated func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { + Task { + var wallets = await self.wallets + if let index = wallets.firstIndex(where: { $0.metaId == event.account.metaId }), + let wallet = wallets[safe: index] { + if wallet.selectedCurrency != event.account.selectedCurrency { + wallets[index] = event.account + } + if wallet.networkManagmentFilter != event.account.networkManagmentFilter { + wallets[index] = event.account + await buildAndNotifyIfNeeded(with: [wallet.metaId], updatedChainAssets: chainAssets) + } wallets[index] = event.account - buildAndNotifyIfNeeded(with: [wallet.metaId], updatedChainAssets: chainAssets) + + await saveWallets(wallets) } - wallets[index] = event.account } } - func processSelectedAccountChanged(event: SelectedAccountChanged) { - let existingWalletsIds = wallets.compactMap { $0.metaId } - guard !existingWalletsIds.contains(event.account.metaId) else { - return + nonisolated func processSelectedAccountChanged(event: SelectedAccountChanged) { + Task { + let existingWalletsIds = await wallets.compactMap { $0.metaId } + guard !existingWalletsIds.contains(event.account.metaId) else { + return + } + await handle([event.account], chainAssets) } - handle([event.account], chainAssets) } - func processLogout() { - wallets = [] - accountInfosAdapters.values.forEach { adapter in - adapter.reset() + nonisolated func processLogout() { + Task { + await saveWallets([]) + await accountInfosAdapters.values.forEach { adapter in + adapter.reset() + } + await saveAccountInfoAdapters([:]) } - accountInfosAdapters = [:] } - func processChainSyncDidComplete(event _: ChainSyncDidComplete) { + nonisolated func processChainSyncDidComplete(event _: ChainSyncDidComplete) { Task { let chainAssets = try await chainAssetFetcher.fetchAwait( shouldUseCache: false, filters: [.enabledChains], sortDescriptors: [] ) - subscribeToAccountInfo(for: wallets, chainAssets) + await subscribeToAccountInfo(for: wallets, chainAssets) } } - func processPricesUpdated() { + nonisolated func processPricesUpdated() { Task { - self.chainAssets = try await chainAssetFetcher.fetchAwait( + let chainAssets = try await chainAssetFetcher.fetchAwait( shouldUseCache: false, filters: [.enabledChains], sortDescriptors: [] ) - buildAndNotifyIfNeeded(with: wallets.map { $0.metaId }, updatedChainAssets: chainAssets) + + await saveChainAssets(chainAssets) + await buildAndNotifyIfNeeded(with: wallets.map { $0.metaId }, updatedChainAssets: chainAssets) } } } @@ -449,29 +480,33 @@ extension WalletBalanceSubscriptionAdapter: EventVisitorProtocol { // MARK: - AccountInfoSubscriptionAdapterHandler extension WalletBalanceSubscriptionAdapter: AccountInfoSubscriptionAdapterHandler { - func handleAccountInfo(result: Result, accountId: AccountId, chainAsset: ChainAsset) { + nonisolated func handleAccountInfo(result: Result, accountId: AccountId, chainAsset: ChainAsset) { switch result { case let .success(accountInfo): - accountInfoWorkQueue.async(flags: .barrier) { + Task { let key = chainAsset.uniqueKey(accountId: accountId) - let previousAccountInfo = self.accountInfos[key] ?? nil + let previousAccountInfo = await self.accountInfos[key] ?? nil - self.accountInfos[chainAsset.uniqueKey(accountId: accountId)] = accountInfo + var accountInfos = await self.accountInfos + accountInfos[chainAsset.uniqueKey(accountId: accountId)] = accountInfo + await saveAccountInfos(accountInfos: accountInfos) let bothNil = (previousAccountInfo == nil && accountInfo == nil) guard previousAccountInfo != accountInfo, !bothNil else { return } - self.buildAndNotifyIfNeeded(with: self.wallets.map { $0.metaId }, updatedChainAssets: self.chainAssets) + await self.buildAndNotifyIfNeeded(with: self.wallets.map { $0.metaId }, updatedChainAssets: self.chainAssets) } case let .failure(error): - logger.error(""" - WalletBalanceFetcher error: \(error.localizedDescription) - account: \(accountId), - chainAsset: \(chainAsset.debugName) - """ - ) + Task { + await logger.error(""" + WalletBalanceFetcher error: \(error.localizedDescription) + account: \(accountId), + chainAsset: \(chainAsset.debugName) + """ + ) + } } } } diff --git a/fearless/Common/Operation/StorageKeyEncodingOperation.swift b/fearless/Common/Operation/StorageKeyEncodingOperation.swift index 2601ad8961..3201cbc1e0 100644 --- a/fearless/Common/Operation/StorageKeyEncodingOperation.swift +++ b/fearless/Common/Operation/StorageKeyEncodingOperation.swift @@ -4,7 +4,7 @@ import RobinHood import SSFStorageQueryKit import SSFRuntimeCodingService -protocol NMapKeyParamProtocol { +public protocol NMapKeyParamProtocol { func encode(encoder: DynamicScaleEncoding, type: String) throws -> Data } diff --git a/fearless/Common/Services/ChainRegistry/ChainRegistry.swift b/fearless/Common/Services/ChainRegistry/ChainRegistry.swift index bd92784f3b..c103d736ee 100644 --- a/fearless/Common/Services/ChainRegistry/ChainRegistry.swift +++ b/fearless/Common/Services/ChainRegistry/ChainRegistry.swift @@ -195,13 +195,15 @@ final class ChainRegistry { return } - let connection = try substrateConnectionPool.setupConnection(for: newChain) let chainTypes = chainsTypesMap[newChain.chainId] - - runtimeProviderPool.setupRuntimeProvider(for: newChain, chainTypes: chainTypes) + Task { + await runtimeProviderPool.setupRuntimeProvider(for: newChain, chainTypes: chainTypes) + } + + let connection = try substrateConnectionPool.setupConnection(for: newChain) runtimeSyncService.register(chain: newChain, with: connection) setupRuntimeVersionSubscription(for: newChain, connection: connection) - + chains.append(newChain) } @@ -211,11 +213,13 @@ final class ChainRegistry { } clearRuntimeSubscription(for: updatedChain.chainId) - - let connection = try substrateConnectionPool.setupConnection(for: updatedChain) let chainTypes = chainsTypesMap[updatedChain.chainId] - runtimeProviderPool.setupRuntimeProvider(for: updatedChain, chainTypes: chainTypes) + Task { + await runtimeProviderPool.setupRuntimeProvider(for: updatedChain, chainTypes: chainTypes) + } + + let connection = try substrateConnectionPool.setupConnection(for: updatedChain) setupRuntimeVersionSubscription(for: updatedChain, connection: connection) chains = chains.filter { $0.chainId != updatedChain.chainId } @@ -223,7 +227,9 @@ final class ChainRegistry { } private func handleDeletedSubstrateChain(chainId: ChainModel.Id) { - runtimeProviderPool.destroyRuntimeProvider(for: chainId) + Task { + await runtimeProviderPool.destroyRuntimeProvider(for: chainId) + } clearRuntimeSubscription(for: chainId) runtimeSyncService.unregister(chainId: chainId) chains = chains.filter { $0.chainId != chainId } @@ -490,7 +496,7 @@ extension ChainRegistry: SSFChainRegistry.ChainRegistryProtocol { } let chainTypes = chainsTypesMap[chainId] - let runtimeProvider = runtimeProviderPool.setupRuntimeProvider(for: chain, chainTypes: chainTypes) + let runtimeProvider = await runtimeProviderPool.setupRuntimeProvider(for: chain, chainTypes: chainTypes) return runtimeProvider } @@ -498,6 +504,7 @@ extension ChainRegistry: SSFChainRegistry.ChainRegistryProtocol { guard let substrateConnectionPool = self.substrateConnectionPool else { throw ChainRegistryError.connectionUnavailable } + let connection = try substrateConnectionPool.setupConnection(for: chain) return connection } @@ -529,7 +536,7 @@ extension ChainRegistry: SSFChainRegistry.ChainRegistryProtocol { usedRuntimePaths _: [String: [String]], runtimeItem _: SSFModels.RuntimeMetadataItemProtocol? ) async throws -> SSFRuntimeCodingService.RuntimeSnapshot { - guard let runtimeProvider = getRuntimeProvider(for: chainId) else { + guard let runtimeProvider = await getRuntimeProvider(for: chainId) else { throw RuntimeProviderError.providerUnavailable } guard let runtimeSnapshot = runtimeProvider.snapshot else { diff --git a/fearless/Common/Services/ChainRegistry/RuntimeProviderPool/RuntimeProviderPool.swift b/fearless/Common/Services/ChainRegistry/RuntimeProviderPool/RuntimeProviderPool.swift index 9cd036ec7f..356461c316 100644 --- a/fearless/Common/Services/ChainRegistry/RuntimeProviderPool/RuntimeProviderPool.swift +++ b/fearless/Common/Services/ChainRegistry/RuntimeProviderPool/RuntimeProviderPool.swift @@ -7,18 +7,18 @@ protocol RuntimeProviderPoolProtocol { func setupRuntimeProvider( for chain: ChainModel, chainTypes: Data? - ) -> RuntimeProviderProtocol + ) async -> RuntimeProviderProtocol @discardableResult func setupHotRuntimeProvider( for chain: ChainModel, runtimeItem: RuntimeMetadataItem, chainTypes: Data - ) -> RuntimeProviderProtocol - func destroyRuntimeProvider(for chainId: ChainModel.Id) + ) async -> RuntimeProviderProtocol + func destroyRuntimeProvider(for chainId: ChainModel.Id) async func getRuntimeProvider(for chainId: ChainModel.Id) -> RuntimeProviderProtocol? } -final class RuntimeProviderPool { +final actor RuntimeProviderPool { private let runtimeProviderFactory: RuntimeProviderFactoryProtocol private var usedRuntimeModules = UsedRuntimePaths() @@ -29,9 +29,13 @@ final class RuntimeProviderPool { init(runtimeProviderFactory: RuntimeProviderFactoryProtocol) { self.runtimeProviderFactory = runtimeProviderFactory } + + private func saveRuntimeProvider(provider: RuntimeProviderProtocol?, for chainId: ChainModel.Id) async { + runtimeProviders[chainId] = provider + } } -extension RuntimeProviderPool: RuntimeProviderPoolProtocol { +extension RuntimeProviderPool: @preconcurrency RuntimeProviderPoolProtocol { @discardableResult func setupHotRuntimeProvider( for chain: ChainModel, @@ -45,8 +49,8 @@ extension RuntimeProviderPool: RuntimeProviderPoolProtocol { usedRuntimePaths: usedRuntimeModules.usedRuntimePaths ) - lock.exclusivelyWrite { [weak self] in - self?.runtimeProviders[chain.chainId] = runtimeProvider + Task { + await saveRuntimeProvider(provider: runtimeProvider, for: chain.chainId) } runtimeProvider.setupHot() @@ -68,8 +72,8 @@ extension RuntimeProviderPool: RuntimeProviderPoolProtocol { usedRuntimePaths: usedRuntimeModules.usedRuntimePaths ) - lock.exclusivelyWrite { [weak self] in - self?.runtimeProviders[chain.chainId] = runtimeProvider + Task { + await saveRuntimeProvider(provider: runtimeProvider, for: chain.chainId) } runtimeProvider.setup() @@ -81,14 +85,12 @@ extension RuntimeProviderPool: RuntimeProviderPoolProtocol { let runtimeProvider = lock.concurrentlyRead { runtimeProviders[chainId] } runtimeProvider?.cleanup() - lock.exclusivelyWrite { [weak self] in - self?.runtimeProviders[chainId] = nil + Task { + await saveRuntimeProvider(provider: nil, for: chainId) } } func getRuntimeProvider(for chainId: ChainModel.Id) -> RuntimeProviderProtocol? { - lock.concurrentlyRead { - runtimeProviders[chainId] - } + runtimeProviders[chainId] } } diff --git a/fearless/Common/Services/ChainRegistry/RuntimeProviderPool/SnapshotHotBootBuilder.swift b/fearless/Common/Services/ChainRegistry/RuntimeProviderPool/SnapshotHotBootBuilder.swift index 4536cc6dbc..f9c5875990 100644 --- a/fearless/Common/Services/ChainRegistry/RuntimeProviderPool/SnapshotHotBootBuilder.swift +++ b/fearless/Common/Services/ChainRegistry/RuntimeProviderPool/SnapshotHotBootBuilder.swift @@ -99,12 +99,13 @@ final class SnapshotHotBootBuilder: SnapshotHotBootBuilderProtocol { else { return } - - runtimeProviderPool.setupHotRuntimeProvider( - for: chain, - runtimeItem: runtimeItem, - chainTypes: chainTypes - ) + Task { + await runtimeProviderPool.setupHotRuntimeProvider( + for: chain, + runtimeItem: runtimeItem, + chainTypes: chainTypes + ) + } } } diff --git a/fearless/Common/View/AmountInputView/SelectableAmountInputView.swift b/fearless/Common/View/AmountInputView/SelectableAmountInputView.swift index e6d34b90c4..17d99762bb 100644 --- a/fearless/Common/View/AmountInputView/SelectableAmountInputView.swift +++ b/fearless/Common/View/AmountInputView/SelectableAmountInputView.swift @@ -48,8 +48,8 @@ final class SelectableAmountInputView: UIView { return label }() - private let balanceLabel: UILabel = { - let label = UILabel() + private let balanceLabel: SkeletonLabel = { + let label = SkeletonLabel(skeletonSize: CGSize(width: 60, height: 10)) label.font = .p1Paragraph label.textColor = R.color.colorStrokeGray() label.numberOfLines = 1 @@ -139,7 +139,7 @@ final class SelectableAmountInputView: UIView { if let balance = viewModel.balance { applyType(for: balance) } else { - balanceLabel.text = nil + balanceLabel.updateTextWithLoading(nil) } symbolLabel.text = viewModel.symbol.uppercased() @@ -158,10 +158,11 @@ final class SelectableAmountInputView: UIView { private func applyType(for balance: String) { switch type { case .send, .swapSend, .swapReceive: - balanceLabel.text = R.string.localizable.commonAvailableFormat( + let text = R.string.localizable.commonAvailableFormat( balance, preferredLanguages: locale.rLanguages ) + balanceLabel.updateTextWithLoading(text) } } @@ -237,6 +238,8 @@ final class SelectableAmountInputView: UIView { make.leading.equalTo(titleLabel) make.top.equalTo(symbolStackView.snp.bottom).offset(UIConstants.minimalOffset) make.bottom.equalToSuperview().offset(-LayoutConstants.offset) + make.height.equalTo(15) + make.width.greaterThanOrEqualTo(60) } } diff --git a/fearless/CoreLayer/CoreComponents/Storage/CachedStorageRequestPerformer.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/CachedStorageRequestPerformer.swift similarity index 58% rename from fearless/CoreLayer/CoreComponents/Storage/CachedStorageRequestPerformer.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/CachedStorageRequestPerformer.swift index d8dbb30264..922c8e4f3b 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/CachedStorageRequestPerformer.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/CachedStorageRequestPerformer.swift @@ -4,8 +4,14 @@ public struct CachedStorageRequestTrigger: OptionSet { public typealias RawValue = UInt8 public private(set) var rawValue: UInt8 - public static var onPerform: CachedStorageRequestTrigger { CachedStorageRequestTrigger(rawValue: 1 << 0) } - public static var onCache: CachedStorageRequestTrigger { CachedStorageRequestTrigger(rawValue: 1 << 1) } + public static var onPerform: CachedStorageRequestTrigger { + CachedStorageRequestTrigger(rawValue: 1 << 0) + } + + public static var onCache: CachedStorageRequestTrigger { + CachedStorageRequestTrigger(rawValue: 1 << 1) + } + public static var onAll: CachedStorageRequestTrigger = [.onCache, onPerform] public init(rawValue: CachedStorageRequestTrigger.RawValue) { diff --git a/fearless/CoreLayer/CoreComponents/Storage/Async/ComponentFactories/MixStorageRequestsKeysBuilder.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/ComponentFactories/MixStorageRequestsKeysBuilder.swift new file mode 100644 index 0000000000..5ba862accb --- /dev/null +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/ComponentFactories/MixStorageRequestsKeysBuilder.swift @@ -0,0 +1,48 @@ +import Foundation +import SSFRuntimeCodingService +import SSFUtils + +final class MixStorageRequestsKeysBuilder { + private lazy var storageKeyFactory: StorageKeyFactoryProtocol = StorageKeyFactory() + + private let codingFactory: RuntimeCoderFactoryProtocol + + init(codingFactory: RuntimeCoderFactoryProtocol) { + self.codingFactory = codingFactory + } + + func buildKeys(for request: [any MixStorageRequest]) throws -> [Data] { + let keys = try request.map { request in + switch request.parametersType { + case let .nMap(params): + let keysWorker = NMapKeyEncodingWorker( + codingFactory: codingFactory, + path: request.storagePath, + storageKeyFactory: storageKeyFactory, + keyParams: [params] + ) + let keys = try keysWorker.performEncoding() + return keys + + case let .encodable(params): + let keysWorker = MapKeyEncodingWorker( + codingFactory: codingFactory, + path: request.storagePath, + storageKeyFactory: storageKeyFactory, + keyParams: [params] + ) + let keys = try keysWorker.performEncoding() + return keys + + case .simple: + let key = try storageKeyFactory.createStorageKey( + moduleName: request.storagePath.moduleName, + storageName: request.storagePath.itemName + ) + return [key] + } + } + + return keys.reduce([], +) + } +} diff --git a/fearless/CoreLayer/CoreComponents/Storage/Async/ComponentFactories/StorageRequestKeyEncodingWorkerFactory.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/ComponentFactories/StorageRequestKeyEncodingWorkerFactory.swift new file mode 100644 index 0000000000..a496e92b97 --- /dev/null +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/ComponentFactories/StorageRequestKeyEncodingWorkerFactory.swift @@ -0,0 +1,52 @@ +import Foundation +import SSFModels +import SSFRuntimeCodingService +import SSFUtils + +protocol StorageRequestKeyEncodingWorkerFactory { + func buildFactory( + storageCodingPath: any StorageCodingPathProtocol, + workerType: StorageRequestWorkerType, + codingFactory: RuntimeCoderFactoryProtocol, + storageKeyFactory: StorageKeyFactoryProtocol + ) -> StorageKeyEncoder +} + +final class StorageRequestKeyEncodingWorkerFactoryDefault: StorageRequestKeyEncodingWorkerFactory { + func buildFactory( + storageCodingPath: any StorageCodingPathProtocol, + workerType: StorageRequestWorkerType, + codingFactory: RuntimeCoderFactoryProtocol, + storageKeyFactory: StorageKeyFactoryProtocol + ) -> StorageKeyEncoder { + switch workerType { + case let .encodable(params): + return MapKeyEncodingWorker( + codingFactory: codingFactory, + path: storageCodingPath, + storageKeyFactory: storageKeyFactory, + keyParams: params + ) + case let .nMap(params): + return NMapKeyEncodingWorker( + codingFactory: codingFactory, + path: storageCodingPath, + storageKeyFactory: storageKeyFactory, + keyParams: params + ) + case let .prefixEncodable(params): + return MapKeyEncodingWorker( + codingFactory: codingFactory, + path: storageCodingPath, + storageKeyFactory: storageKeyFactory, + keyParams: params + ) + case .simple, .prefix: + return SimpleKeyEncodingWorker( + codingFactory: codingFactory, + path: storageCodingPath, + storageKeyFactory: storageKeyFactory + ) + } + } +} diff --git a/fearless/CoreLayer/ComponentFactories/Storage/StorageRequestWorkerBuilder.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/ComponentFactories/StorageRequestWorkerBuilder.swift similarity index 81% rename from fearless/CoreLayer/ComponentFactories/Storage/StorageRequestWorkerBuilder.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/ComponentFactories/StorageRequestWorkerBuilder.swift index 7778573e12..61b0b295b8 100644 --- a/fearless/CoreLayer/ComponentFactories/Storage/StorageRequestWorkerBuilder.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/ComponentFactories/StorageRequestWorkerBuilder.swift @@ -1,6 +1,6 @@ import Foundation -import SSFUtils import SSFRuntimeCodingService +import SSFUtils protocol StorageRequestWorkerBuilder { func buildWorker( @@ -11,11 +11,12 @@ protocol StorageRequestWorkerBuilder { ) -> StorageRequestWorker } -enum StorageRequestWorkerType { - case nMap(params: [[any NMapKeyParamProtocol]]) +public enum StorageRequestWorkerType { + case nMap(params: [[[any NMapKeyParamProtocol]]]) case encodable(params: [any Encodable]) case simple case prefix + case prefixEncodable(params: [any Encodable]) } final class StorageRequestWorkerBuilderDefault: StorageRequestWorkerBuilder { @@ -50,6 +51,12 @@ final class StorageRequestWorkerBuilderDefault: StorageRequestWork connection: connection, storageRequestFactory: storageRequestFactory ) + case .prefixEncodable: + return PrefixEncodableStorageRequestWorker( + runtimeService: runtimeService, + connection: connection, + storageRequestFactory: storageRequestFactory + ) } } } diff --git a/fearless/CoreLayer/CoreComponents/Storage/Async/Requests/CachedRequest.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Requests/CachedRequest.swift new file mode 100644 index 0000000000..ba8b1e96b1 --- /dev/null +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Requests/CachedRequest.swift @@ -0,0 +1,8 @@ +import Foundation +import SSFModels + +protocol CacheableKeyedRequest { + var workerType: StorageRequestWorkerType { get } + var storagePath: any StorageCodingPathProtocol { get } + var keyType: MapKeyType { get } +} diff --git a/fearless/CoreLayer/CoreComponents/Storage/Async/Requests/MixStorage.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Requests/MixStorage.swift new file mode 100644 index 0000000000..e489432d46 --- /dev/null +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Requests/MixStorage.swift @@ -0,0 +1,49 @@ +import Foundation +import SSFModels +import SSFUtils + +// MARK: - Request + +protocol MixStorageRequest { + associatedtype Response: Decodable + var responseType: Response.Type { get } + + var parametersType: MixStorageRequestParametersType { get } + var storagePath: StorageCodingPath { get } + + var requestId: String { get } +} + +extension MixStorageRequest { + var responseType: Response.Type { + Response.self + } + + var responseTypeRegistry: String { + String(describing: Response.self) + } +} + +public enum MixStorageRequestParametersType { + case nMap(params: [[any NMapKeyParamProtocol]]) + case encodable(param: any Encodable) + case simple + + var workerType: StorageRequestWorkerType { + switch self { + case let .nMap(params): + return .nMap(params: [params]) + case let .encodable(param): + return .encodable(params: [param]) + case .simple: + return .simple + } + } +} + +// MARK: - Response + +struct MixStorageResponse { + let request: any MixStorageRequest + let json: JSON? +} diff --git a/fearless/CoreLayer/CoreComponents/Storage/MultipleRequest.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Requests/MultipleRequest.swift similarity index 84% rename from fearless/CoreLayer/CoreComponents/Storage/MultipleRequest.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/Requests/MultipleRequest.swift index 2f7c5e5279..28202e4cb7 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/MultipleRequest.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Requests/MultipleRequest.swift @@ -4,10 +4,11 @@ import SSFModels protocol MultipleRequest { var parametersType: MultipleStorageRequestParametersType { get } var storagePath: StorageCodingPath { get } + var keyType: MapKeyType { get } } enum MultipleStorageRequestParametersType { - case multipleNMap(params: [[any NMapKeyParamProtocol]]) + case multipleNMap(params: [[[any NMapKeyParamProtocol]]]) case multipleEncodable(params: [any Encodable]) var workerType: StorageRequestWorkerType { diff --git a/fearless/CoreLayer/CoreComponents/Storage/Async/Requests/PrefixRequest.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Requests/PrefixRequest.swift new file mode 100644 index 0000000000..e4c4024438 --- /dev/null +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Requests/PrefixRequest.swift @@ -0,0 +1,22 @@ +import Foundation +import SSFModels + +protocol PrefixRequest { + var storagePath: StorageCodingPath { get } + var keyType: MapKeyType { get } + var parametersType: PrefixStorageRequestParametersType { get } +} + +enum PrefixStorageRequestParametersType { + case simple + case encodable(params: [any Encodable]) + + var workerType: StorageRequestWorkerType { + switch self { + case .simple: + return .prefix + case let .encodable(params): + return .prefixEncodable(params: params) + } + } +} diff --git a/fearless/CoreLayer/CoreComponents/Storage/StorageRequest.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Requests/StorageRequest.swift similarity index 84% rename from fearless/CoreLayer/CoreComponents/Storage/StorageRequest.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/Requests/StorageRequest.swift index cc04d50f9e..140b55d419 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/StorageRequest.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Requests/StorageRequest.swift @@ -10,15 +10,18 @@ enum StorageRequestParametersType { case nMap(params: [[any NMapKeyParamProtocol]]) case encodable(param: any Encodable) case simple + case prefix var workerType: StorageRequestWorkerType { switch self { case let .nMap(params): - return .nMap(params: params) + return .nMap(params: [params]) case let .encodable(param): return .encodable(params: [param]) case .simple: return .simple + case .prefix: + return .prefix } } } diff --git a/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/MixStorageDecodingListWorker.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/MixStorageDecodingListWorker.swift new file mode 100644 index 0000000000..2d0f41f781 --- /dev/null +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/MixStorageDecodingListWorker.swift @@ -0,0 +1,54 @@ +// +// MixStorageDecodingListWorker.swift +// +// +// Created by Soramitsu on 13.04.2024. +// + +import Foundation +import SSFModels +import SSFRuntimeCodingService +import SSFUtils + +final class MixStorageDecodingListWorker: StorageDecodable, StorageModifierHandling { + private let requests: [any MixStorageRequest] + private let updates: [[StorageUpdate]] + private let codingFactory: RuntimeCoderFactoryProtocol + + init( + requests: [any MixStorageRequest], + updates: [[StorageUpdate]], + codingFactory: RuntimeCoderFactoryProtocol + ) { + self.requests = requests + self.updates = updates + self.codingFactory = codingFactory + } + + func performDecoding() throws -> [MixStorageResponse] { + let dataList = updates + .flatMap { $0 } + .flatMap { StorageUpdateData(update: $0).changes } + .map { $0.value } + + let responses: [MixStorageResponse] = try zip(requests, dataList).map { request, data in + var json: JSON? + if let data = data { + json = try decode( + data: data, + path: request.storagePath, + codingFactory: codingFactory + ) + } else { + json = try handleModifier( + at: request.storagePath, + codingFactory: codingFactory + ) + } + let response = MixStorageResponse(request: request, json: json) + return response + } + + return responses + } +} diff --git a/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/MultipleSingleStorageResponseValueExtractor.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/MultipleSingleStorageResponseValueExtractor.swift new file mode 100644 index 0000000000..72e5a84e7e --- /dev/null +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/MultipleSingleStorageResponseValueExtractor.swift @@ -0,0 +1,31 @@ +import Foundation +import SSFRuntimeCodingService +import SSFUtils + +final class MultipleSingleStorageResponseValueExtractor: MultipleStorageResponseValueExtractor { + private let runtimeService: RuntimeCodingServiceProtocol + + init(runtimeService: RuntimeCodingServiceProtocol) { + self.runtimeService = runtimeService + } + + func extractValue( + request: MultipleRequest, + storageResponse: [StorageResponse] + ) async throws -> [K: T] where K: Decodable & Hashable, T: Decodable { + var dict: [K: T] = [:] + let keyExtractor = StorageKeyDataExtractor(runtimeService: runtimeService) + + try await storageResponse.asyncForEach { + let id: K = try await keyExtractor.extractKey( + storageKey: $0.key, + storagePath: request.storagePath, + type: request.keyType + ) + + dict[id] = $0.value + } + + return dict + } +} diff --git a/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/MultipleStorageResponseValueExtractor.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/MultipleStorageResponseValueExtractor.swift new file mode 100644 index 0000000000..1d8a4704fd --- /dev/null +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/MultipleStorageResponseValueExtractor.swift @@ -0,0 +1,9 @@ +import Foundation +import SSFUtils + +protocol MultipleStorageResponseValueExtractor { + func extractValue( + request: MultipleRequest, + storageResponse: [StorageResponse] + ) async throws -> [K: T] +} diff --git a/fearless/CoreLayer/CoreComponents/Storage/ResponseDecoders/PrefixStorageResponseValueExtractor.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/PrefixResponseValueExtractor.swift similarity index 76% rename from fearless/CoreLayer/CoreComponents/Storage/ResponseDecoders/PrefixStorageResponseValueExtractor.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/PrefixResponseValueExtractor.swift index ab44c3c0a9..32ee1c75d9 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/ResponseDecoders/PrefixStorageResponseValueExtractor.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/PrefixResponseValueExtractor.swift @@ -1,9 +1,12 @@ import Foundation -import SSFUtils import SSFRuntimeCodingService +import SSFUtils protocol PrefixResponseValueExtractor { - func extractValue(request: PrefixRequest, storageResponse: [StorageResponse]) async throws -> [K: T]? + func extractValue( + request: PrefixRequest, + storageResponse: [StorageResponse] + ) async throws -> [K: T]? } final class PrefixStorageResponseValueExtractor: PrefixResponseValueExtractor { @@ -13,10 +16,10 @@ final class PrefixStorageResponseValueExtractor: PrefixResponseValueExtractor { self.runtimeService = runtimeService } - func extractValue( + func extractValue( request: PrefixRequest, storageResponse: [StorageResponse] - ) async throws -> [K: T]? where T: Decodable, K: Decodable & ScaleCodable { + ) async throws -> [K: T]? { var dict: [K: T] = [:] let keyExtractor = StorageKeyDataExtractor(runtimeService: runtimeService) diff --git a/fearless/CoreLayer/CoreComponents/Storage/ResponseDecoders/SingleStorageResponseValueExtractor.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/SingleStorageResponseValueExtractor.swift similarity index 100% rename from fearless/CoreLayer/CoreComponents/Storage/ResponseDecoders/SingleStorageResponseValueExtractor.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/SingleStorageResponseValueExtractor.swift diff --git a/fearless/CoreLayer/CoreComponents/Storage/ResponseDecoders/StorageResponseValueExtractor.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/StorageResponseValueExtractor.swift similarity index 100% rename from fearless/CoreLayer/CoreComponents/Storage/ResponseDecoders/StorageResponseValueExtractor.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/Storage/ResponseDecoders/StorageResponseValueExtractor.swift diff --git a/fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/EncodableStorageRequestWorker.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/EncodableStorageRequestWorker.swift similarity index 87% rename from fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/EncodableStorageRequestWorker.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/EncodableStorageRequestWorker.swift index b927d67965..c3c865d1c1 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/EncodableStorageRequestWorker.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/EncodableStorageRequestWorker.swift @@ -1,7 +1,7 @@ import Foundation +import SSFModels import SSFRuntimeCodingService import SSFUtils -import SSFModels final class EncodableStorageRequestWorker: StorageRequestWorker { private let runtimeService: RuntimeCodingServiceProtocol @@ -23,7 +23,10 @@ final class EncodableStorageRequestWorker: StorageRequestWorker { storagePath: StorageCodingPath ) async throws -> [StorageResponse] where T: Decodable { guard case let StorageRequestWorkerType.encodable(params: params) = params else { - throw StorageRequestWorkerError.invalidParameters + throw StorageRequestWorkerError.invalidParameters( + moduleName: storagePath.moduleName, + itemName: storagePath.itemName + ) } let coderFactory = try await runtimeService.fetchCoderFactory() diff --git a/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/MixStorageRequestsWorker.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/MixStorageRequestsWorker.swift new file mode 100644 index 0000000000..f96c8a9665 --- /dev/null +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/MixStorageRequestsWorker.swift @@ -0,0 +1,32 @@ +import Foundation +import SSFRuntimeCodingService +import SSFUtils + +protocol MixStorageRequestWorker { + func perform(keys: [Data]) async throws -> [[StorageUpdate]] +} + +final class MixStorageRequestsWorkerDefault: MixStorageRequestWorker { + private let runtimeService: RuntimeCodingServiceProtocol + private let connection: JSONRPCEngine + private let storageRequestFactory: AsyncStorageRequestFactory + + init( + runtimeService: RuntimeCodingServiceProtocol, + connection: JSONRPCEngine, + storageRequestFactory: AsyncStorageRequestFactory + ) { + self.runtimeService = runtimeService + self.connection = connection + self.storageRequestFactory = storageRequestFactory + } + + func perform(keys: [Data]) async throws -> [[StorageUpdate]] { + let updates = try await storageRequestFactory.queryWorkersResult( + for: keys, + at: nil, + engine: connection + ) + return updates + } +} diff --git a/fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/NMapStorageRequestWorker.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/NMapStorageRequestWorker.swift similarity index 85% rename from fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/NMapStorageRequestWorker.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/NMapStorageRequestWorker.swift index e1e28b4312..554341a25e 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/NMapStorageRequestWorker.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/NMapStorageRequestWorker.swift @@ -1,7 +1,7 @@ import Foundation -import SSFUtils -import SSFRuntimeCodingService import SSFModels +import SSFRuntimeCodingService +import SSFUtils final class NMapStorageRequestWorker: StorageRequestWorker { private let runtimeService: RuntimeCodingServiceProtocol @@ -23,13 +23,16 @@ final class NMapStorageRequestWorker: StorageRequestWorker { storagePath: StorageCodingPath ) async throws -> [StorageResponse] { guard case let StorageRequestWorkerType.nMap(params: params) = params else { - throw StorageRequestWorkerError.invalidParameters + throw StorageRequestWorkerError.invalidParameters( + moduleName: storagePath.moduleName, + itemName: storagePath.itemName + ) } let coderFactoryOperation = try await runtimeService.fetchCoderFactory() let response: [StorageResponse] = try await storageRequestFactory.queryItems( engine: connection, - keyParams: [params], + keyParams: params, factory: coderFactoryOperation, storagePath: storagePath ) diff --git a/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/PrefixEncodableStorageRequestWorker.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/PrefixEncodableStorageRequestWorker.swift new file mode 100644 index 0000000000..c6f9c1ea3d --- /dev/null +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/PrefixEncodableStorageRequestWorker.swift @@ -0,0 +1,43 @@ +import Foundation +import SSFModels +import SSFRuntimeCodingService +import SSFUtils + +final class PrefixEncodableStorageRequestWorker: StorageRequestWorker { + private let runtimeService: RuntimeCodingServiceProtocol + private let connection: JSONRPCEngine + private let storageRequestFactory: AsyncStorageRequestFactory + + init( + runtimeService: RuntimeCodingServiceProtocol, + connection: JSONRPCEngine, + storageRequestFactory: AsyncStorageRequestFactory + ) { + self.runtimeService = runtimeService + self.connection = connection + self.storageRequestFactory = storageRequestFactory + } + + func perform( + params: StorageRequestWorkerType, + storagePath: StorageCodingPath + ) async throws -> [StorageResponse] { + guard case let .prefixEncodable(params) = params else { + throw StorageRequestWorkerError.invalidParameters( + moduleName: storagePath.moduleName, + itemName: storagePath.itemName + ) + } + + let coderFactoryOperation = try await runtimeService.fetchCoderFactory() + + let response: [StorageResponse] = try await storageRequestFactory.queryItemsByPrefix( + engine: connection, + keyParams: params, + factory: coderFactoryOperation, + storagePath: storagePath, + at: nil + ) + return response + } +} diff --git a/fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/PrefixStorageRequestWorker.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/PrefixStorageRequestWorker.swift similarity index 95% rename from fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/PrefixStorageRequestWorker.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/PrefixStorageRequestWorker.swift index c79918de3f..75f9489acd 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/PrefixStorageRequestWorker.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/PrefixStorageRequestWorker.swift @@ -1,7 +1,7 @@ import Foundation -import SSFUtils -import SSFRuntimeCodingService import SSFModels +import SSFRuntimeCodingService +import SSFUtils final class PrefixStorageRequestWorker: StorageRequestWorker { private let runtimeService: RuntimeCodingServiceProtocol @@ -31,7 +31,8 @@ final class PrefixStorageRequestWorker: StorageRequestWorker { engine: connection, keys: [key], factory: coderFactoryOperation, - storagePath: storagePath + storagePath: storagePath, + at: nil ) return response } diff --git a/fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/SimpleStorageRequestWorker.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/SimpleStorageRequestWorker.swift similarity index 88% rename from fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/SimpleStorageRequestWorker.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/SimpleStorageRequestWorker.swift index 60057da07b..4cb822774d 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/SimpleStorageRequestWorker.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/SimpleStorageRequestWorker.swift @@ -1,7 +1,7 @@ import Foundation +import SSFModels import SSFRuntimeCodingService import SSFUtils -import SSFModels final class SimpleStorageRequestWorker: StorageRequestWorker { private let runtimeService: RuntimeCodingServiceProtocol @@ -23,7 +23,10 @@ final class SimpleStorageRequestWorker: StorageRequestWorker { storagePath: StorageCodingPath ) async throws -> [StorageResponse] where T: Decodable { guard case StorageRequestWorkerType.simple = params else { - throw StorageRequestWorkerError.invalidParameters + throw StorageRequestWorkerError.invalidParameters( + moduleName: storagePath.moduleName, + itemName: storagePath.itemName + ) } let key = try StorageKeyFactory().createStorageKey( diff --git a/fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/StorageRequestWorker.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/StorageRequestWorker.swift similarity index 81% rename from fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/StorageRequestWorker.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/StorageRequestWorker.swift index 0a26e4b0c0..d29f54924e 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/StorageRequestWorkers/StorageRequestWorker.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/Storage/StorageRequestWorkers/StorageRequestWorker.swift @@ -1,9 +1,9 @@ import Foundation -import SSFUtils import SSFModels +import SSFUtils enum StorageRequestWorkerError: Error { - case invalidParameters + case invalidParameters(moduleName: String, itemName: String) } protocol StorageRequestWorker: AnyObject { diff --git a/fearless/CoreLayer/CoreComponents/Storage/RequestFactory/AsyncStorageRequestFactory+Extension.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/AsyncStorageRequestFactory+Extension.swift similarity index 100% rename from fearless/CoreLayer/CoreComponents/Storage/RequestFactory/AsyncStorageRequestFactory+Extension.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/AsyncStorageRequestFactory+Extension.swift index 7e708a52d0..8a7f4069d5 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/RequestFactory/AsyncStorageRequestFactory+Extension.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/AsyncStorageRequestFactory+Extension.swift @@ -1,7 +1,7 @@ import Foundation +import SSFModels import SSFRuntimeCodingService import SSFUtils -import SSFModels extension AsyncStorageRequestFactory { func queryItems( diff --git a/fearless/CoreLayer/CoreComponents/Storage/RequestFactory/AsyncStorageRequestFactory.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/AsyncStorageRequestFactory.swift similarity index 100% rename from fearless/CoreLayer/CoreComponents/Storage/RequestFactory/AsyncStorageRequestFactory.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/AsyncStorageRequestFactory.swift index be05305c1a..804fa6e8ad 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/RequestFactory/AsyncStorageRequestFactory.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/AsyncStorageRequestFactory.swift @@ -1,7 +1,7 @@ import Foundation +import SSFModels import SSFRuntimeCodingService import SSFUtils -import SSFModels protocol AsyncStorageRequestFactory { func queryItems( diff --git a/fearless/CoreLayer/CoreComponents/Storage/RequestFactory/AsyncStorageRequestFactoryDefault.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/AsyncStorageRequestFactoryDefault.swift similarity index 96% rename from fearless/CoreLayer/CoreComponents/Storage/RequestFactory/AsyncStorageRequestFactoryDefault.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/AsyncStorageRequestFactoryDefault.swift index 883e5c0335..78b0a17a36 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/RequestFactory/AsyncStorageRequestFactoryDefault.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/AsyncStorageRequestFactoryDefault.swift @@ -3,10 +3,8 @@ import SSFModels import SSFRuntimeCodingService import SSFUtils -final actor AsyncStorageRequestDefault: AsyncStorageRequestFactory { - private lazy var storageKeyFactory: StorageKeyFactoryProtocol = { - StorageKeyFactory() - }() +final class AsyncStorageRequestDefault: AsyncStorageRequestFactory { + private lazy var storageKeyFactory: StorageKeyFactoryProtocol = StorageKeyFactory() // MARK: - AsyncStorageRequestFactory @@ -23,7 +21,7 @@ final actor AsyncStorageRequestDefault: AsyncStorageRequestFactory { storageKeyFactory: storageKeyFactory, keyParams: keyParams ) - let keys = try await keysWorker.performEncoding() + let keys = try keysWorker.performEncoding() let queryItems: [StorageResponse] = try await queryItems( engine: engine, @@ -105,7 +103,7 @@ final actor AsyncStorageRequestDefault: AsyncStorageRequestFactory { storageKeyFactory: storageKeyFactory, keyParams: keyParams ) - let keys = try await keysWorker.performEncoding() + let keys = try keysWorker.performEncoding() let queryItems: [StorageResponse] = try await queryItems( engine: engine, @@ -167,7 +165,7 @@ final actor AsyncStorageRequestDefault: AsyncStorageRequestFactory { storageKeyFactory: storageKeyFactory, keyParams: keyParams ) - let keys = try await keysWorker.performEncoding() + let keys = try keysWorker.performEncoding() return try await queryItemsByPrefix( engine: engine, @@ -240,7 +238,8 @@ final actor AsyncStorageRequestDefault: AsyncStorageRequestFactory { StorageResponse(key: key, data: keyedEncodedItems[key], value: keyedItems[key]) }.sorted { response1, response2 in guard let index1 = originalIndexedKeys[response1.key], - let index2 = originalIndexedKeys[response2.key] else { + let index2 = originalIndexedKeys[response2.key] else + { return false } @@ -295,7 +294,7 @@ final actor AsyncStorageRequestDefault: AsyncStorageRequestFactory { of: T.self, returning: [T].self, body: { group in - workers.forEach { worker in + for worker in workers { group.addTask { try await worker.performCall() } diff --git a/fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/ChildStorageResponseDecodingWorker.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/ChildStorageResponseDecodingWorker.swift similarity index 73% rename from fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/ChildStorageResponseDecodingWorker.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/ChildStorageResponseDecodingWorker.swift index 6fc780e0c3..7ca7d08ab3 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/ChildStorageResponseDecodingWorker.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/ChildStorageResponseDecodingWorker.swift @@ -30,9 +30,19 @@ final class ChildStorageResponseDecodingWorker { let json = try mapper.accept(decoder: decoder) let value = try json.map(to: T.self) - return ChildStorageResponse(storageKey: storageKey, childKey: childKey, data: data, value: value) + return ChildStorageResponse( + storageKey: storageKey, + childKey: childKey, + data: data, + value: value + ) } else { - return ChildStorageResponse(storageKey: storageKey, childKey: childKey, data: nil, value: nil) + return ChildStorageResponse( + storageKey: storageKey, + childKey: childKey, + data: nil, + value: nil + ) } } } diff --git a/fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/JSONRPCListWorker.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/JSONRPCListWorker.swift similarity index 100% rename from fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/JSONRPCListWorker.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/JSONRPCListWorker.swift diff --git a/fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/JSONRPCWorkerDefault.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/JSONRPCWorkerDefault.swift similarity index 84% rename from fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/JSONRPCWorkerDefault.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/JSONRPCWorkerDefault.swift index 1728dbbca5..5d5b58dd7e 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/JSONRPCWorkerDefault.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/JSONRPCWorkerDefault.swift @@ -31,6 +31,8 @@ class JSONRPCWorker { if let requestId = requestId { engine.cancelForIdentifier(requestId) + } else { + continuation.resume(throwing: JSONRPCWorkerContinuationError()) } } @@ -43,6 +45,7 @@ class JSONRPCWorker { continuation.resume(with: result) } } catch { + timeoutTask.cancel() continuation.resume(throwing: error) } } @@ -53,3 +56,7 @@ class JSONRPCWorker { currentTask?.cancel() } } + +public struct JSONRPCWorkerContinuationError: LocalizedError { + public var errorDescription: String? = "timeout" +} diff --git a/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/KeyEncoding.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/KeyEncoding.swift new file mode 100644 index 0000000000..22cbb956d6 --- /dev/null +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/KeyEncoding.swift @@ -0,0 +1,5 @@ +import Foundation + +protocol StorageKeyEncoder { + func performEncoding() throws -> [Data] +} diff --git a/fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/MapKeyEncodingWorker.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/MapKeyEncodingWorker.swift similarity index 84% rename from fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/MapKeyEncodingWorker.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/MapKeyEncodingWorker.swift index e081ca256e..4d918e3d90 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/MapKeyEncodingWorker.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/MapKeyEncodingWorker.swift @@ -1,17 +1,17 @@ import Foundation -import SSFRuntimeCodingService import SSFModels +import SSFRuntimeCodingService import SSFUtils -actor MapKeyEncodingWorker { +final class MapKeyEncodingWorker: StorageKeyEncoder { private let keyParams: [any Encodable] private let codingFactory: RuntimeCoderFactoryProtocol - private let path: StorageCodingPath + private let path: any StorageCodingPathProtocol private let storageKeyFactory: StorageKeyFactoryProtocol init( codingFactory: RuntimeCoderFactoryProtocol, - path: StorageCodingPath, + path: any StorageCodingPathProtocol, storageKeyFactory: StorageKeyFactoryProtocol, keyParams: [any Encodable] ) { @@ -40,10 +40,10 @@ actor MapKeyEncodingWorker { keyType = doubleMapEntry.key1 hasher = doubleMapEntry.hasher case let .nMap(nMapEntry): - guard - let firstKey = try nMapEntry.keys(using: codingFactory.metadata.schemaResolver).first, - let firstHasher = nMapEntry.hashers.first - else { + guard let firstKey = try nMapEntry.keys(using: codingFactory.metadata.schemaResolver) + .first, + let firstHasher = nMapEntry.hashers.first else + { throw StorageKeyEncodingOperationError.missingRequiredParams } diff --git a/fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/NMapKeyEncodingWorker.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/NMapKeyEncodingWorker.swift similarity index 91% rename from fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/NMapKeyEncodingWorker.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/NMapKeyEncodingWorker.swift index 3e59a42e81..3ab0993251 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/NMapKeyEncodingWorker.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/NMapKeyEncodingWorker.swift @@ -3,7 +3,7 @@ import SSFModels import SSFRuntimeCodingService import SSFUtils -final class NMapKeyEncodingWorker { +final class NMapKeyEncodingWorker: StorageKeyEncoder { private let keyParams: [[[any NMapKeyParamProtocol]]] private let codingFactory: RuntimeCoderFactoryProtocol private let path: any StorageCodingPathProtocol @@ -51,7 +51,10 @@ final class NMapKeyEncodingWorker { let keys: [Data] = try params.map { params in let encodedParams: [Data] = try params.enumerated().map { index, param in - try param.encode(encoder: codingFactory.createEncoder(), type: keyEntries[index]) + try param.encode( + encoder: codingFactory.createEncoder(), + type: keyEntries[index] + ) } return try storageKeyFactory.createStorageKey( diff --git a/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/SimpleKeyEncodingWorker.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/SimpleKeyEncodingWorker.swift new file mode 100644 index 0000000000..5f2ac3938d --- /dev/null +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/SimpleKeyEncodingWorker.swift @@ -0,0 +1,27 @@ +import Foundation +import SSFModels +import SSFRuntimeCodingService +import SSFUtils + +final class SimpleKeyEncodingWorker: StorageKeyEncoder { + private let codingFactory: RuntimeCoderFactoryProtocol + private let path: any StorageCodingPathProtocol + private let storageKeyFactory: StorageKeyFactoryProtocol + + init( + codingFactory: RuntimeCoderFactoryProtocol, + path: any StorageCodingPathProtocol, + storageKeyFactory: StorageKeyFactoryProtocol + ) { + self.codingFactory = codingFactory + self.path = path + self.storageKeyFactory = storageKeyFactory + } + + func performEncoding() throws -> [Data] { + try [storageKeyFactory.createStorageKey( + moduleName: path.moduleName, + storageName: path.itemName + )] + } +} diff --git a/fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/StorageFallbackDecodingListWorker.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/StorageFallbackDecodingListWorker.swift similarity index 89% rename from fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/StorageFallbackDecodingListWorker.swift rename to fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/StorageFallbackDecodingListWorker.swift index 4c6d08ac3f..09a49919dc 100644 --- a/fearless/CoreLayer/CoreComponents/Storage/StorageFactoryWorkers/StorageFallbackDecodingListWorker.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageFactory/StorageFactoryWorkers/StorageFallbackDecodingListWorker.swift @@ -1,8 +1,10 @@ import Foundation -import SSFRuntimeCodingService import SSFModels +import SSFRuntimeCodingService -final class StorageFallbackDecodingListWorker: StorageDecodable, StorageModifierHandling { +final class StorageFallbackDecodingListWorker: StorageDecodable, + StorageModifierHandling +{ private let dataList: [Data?] private let codingFactory: RuntimeCoderFactoryProtocol private let path: StorageCodingPath @@ -20,7 +22,8 @@ final class StorageFallbackDecodingListWorker: StorageDecodable, S func performDecoding() throws -> [T?] { let items: [T?] = try dataList.map { data in if let data = data { - return try decode(data: data, path: path, codingFactory: codingFactory).map(to: T.self) + return try decode(data: data, path: path, codingFactory: codingFactory) + .map(to: T.self) } else { return try handleModifier(at: path, codingFactory: codingFactory)?.map(to: T.self) } diff --git a/fearless/CoreLayer/CoreComponents/Storage/Async/StorageRequestPerformer.swift b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageRequestPerformer.swift new file mode 100644 index 0000000000..a57368dacc --- /dev/null +++ b/fearless/CoreLayer/CoreComponents/Storage/Async/StorageRequestPerformer.swift @@ -0,0 +1,474 @@ +import Foundation +import RobinHood +import SSFChainRegistry +import SSFModels +import SSFRuntimeCodingService +import SSFSingleValueCache +import SSFUtils + +protocol StorageRequestPerformer { + func performSingle( + _ request: StorageRequest, + chain: ChainModel + ) async throws -> T? + + func performSingle( + _ request: StorageRequest, + withCacheOptions: CachedStorageRequestTrigger, + chain: ChainModel + ) async -> AsyncThrowingStream, Error> + + func performMultiple( + _ request: MultipleRequest, + chain: ChainModel + ) async throws -> [K: T]? + + func performMultiple( + _ request: MultipleRequest, + withCacheOptions: CachedStorageRequestTrigger, + chain: ChainModel + ) async -> AsyncThrowingStream, Error> + + func performPrefix( + _ request: PrefixRequest, + withCacheOptions: CachedStorageRequestTrigger, + chain: ChainModel + ) async -> AsyncThrowingStream, Error> + + func performPrefix( + _ request: PrefixRequest, + chain: ChainModel + ) async throws -> [K: T]? + + func perform( + _ requests: [any MixStorageRequest], + chain: ChainModel + ) async throws -> [MixStorageResponse] +} + +actor StorageRequestPerformerDefault: StorageRequestPerformer { + private let chainRegistry: ChainRegistryProtocol + + private lazy var storageRequestFactory: AsyncStorageRequestFactory = + AsyncStorageRequestDefault() + + private lazy var cacheStorage: AsyncSingleValueRepository = + SingleValueCacheRepositoryFactoryDefault().createAsyncSingleValueCacheRepository() + + init(chainRegistry: ChainRegistryProtocol) { + self.chainRegistry = chainRegistry + } + + // MARK: - StorageRequestPerformer + + func performSingle( + _ request: StorageRequest, + chain: ChainModel + ) async throws -> T? { + guard let runtimeService = chainRegistry.getRuntimeProvider( + for: chain.chainId + ) else { + throw RuntimeProviderError.providerUnavailable + } + + guard let connection = chainRegistry.getConnection(for: chain.chainId) else { + throw ConnectionPoolError.noConnection + } + + let worker = StorageRequestWorkerBuilderDefault().buildWorker( + runtimeService: runtimeService, + connection: connection, + storageRequestFactory: storageRequestFactory, + type: request.parametersType.workerType + ) + + let valueExtractor = SingleStorageResponseValueExtractor() + let response: [StorageResponse] = try await worker.perform( + params: request.parametersType.workerType, + storagePath: request.storagePath + ) + let value = try valueExtractor.extractValue(storageResponse: response) + try? save( + response: response, + params: request.parametersType.workerType, + storagePath: request.storagePath, + chain: chain + ) + return value + } + + func performSingle( + _ request: StorageRequest, + withCacheOptions: CachedStorageRequestTrigger, + chain: ChainModel + ) async -> AsyncThrowingStream, Error> { + AsyncThrowingStream, Error> { continuation in + Task { + if withCacheOptions == .onAll || withCacheOptions.isEmpty { + try? await getCacheSingleValue(for: request, with: continuation, chain: chain) + let value: T? = try await performSingle(request, chain: chain) + let response = CachedStorageResponse(value: value, type: .remote) + continuation.yield(response) + continuation.finish() + return + } + if withCacheOptions.contains(.onCache) { + try await getCacheSingleValue(for: request, with: continuation, chain: chain) + continuation.finish() + return + } + if withCacheOptions.contains(.onPerform) { + let value: T? = try await performSingle(request, chain: chain) + let response = CachedStorageResponse(value: value, type: .remote) + continuation.yield(response) + continuation.finish() + return + } + } + } + } + + func performMultiple( + _ request: MultipleRequest, + chain: ChainModel + ) async throws -> [K: T]? { + guard let runtimeService = chainRegistry.getRuntimeProvider( + for: chain.chainId + ) else { + throw RuntimeProviderError.providerUnavailable + } + + guard let connection = chainRegistry.getConnection(for: chain.chainId) else { + throw ConnectionPoolError.noConnection + } + + let worker = StorageRequestWorkerBuilderDefault().buildWorker( + runtimeService: runtimeService, + connection: connection, + storageRequestFactory: storageRequestFactory, + type: request.parametersType.workerType + ) + + let valueExtractor = + MultipleSingleStorageResponseValueExtractor(runtimeService: runtimeService) + let response: [StorageResponse] = try await worker.perform( + params: request.parametersType.workerType, + storagePath: request.storagePath + ) + let values: [K: T]? = try await valueExtractor.extractValue( + request: request, + storageResponse: response + ) + try? save( + response: response, + params: request.parametersType.workerType, + storagePath: request.storagePath, + chain: chain + ) + + return values + } + + func performMultiple( + _ request: MultipleRequest, + withCacheOptions: CachedStorageRequestTrigger, + chain: ChainModel + ) async -> AsyncThrowingStream, Error> { + AsyncThrowingStream, Error> { continuation in + Task { + if withCacheOptions == .onAll || withCacheOptions.isEmpty { + try? await getCacheMultipleValue(for: request, with: continuation, chain: chain) + let value: [K: T]? = try await performMultiple(request, chain: chain) + let response = CachedStorageResponse(value: value, type: .remote) + continuation.yield(response) + continuation.finish() + return + } + if withCacheOptions.contains(.onCache) { + try await getCacheMultipleValue(for: request, with: continuation, chain: chain) + continuation.finish() + return + } + if withCacheOptions.contains(.onPerform) { + let value: [K: T]? = try await performMultiple(request, chain: chain) + let response = CachedStorageResponse(value: value, type: .remote) + continuation.yield(response) + continuation.finish() + return + } + } + } + } + + func performPrefix( + _ request: PrefixRequest, + chain: ChainModel + ) async throws -> [K: T]? { + guard let runtimeService = chainRegistry.getRuntimeProvider( + for: chain.chainId + ) else { + throw RuntimeProviderError.providerUnavailable + } + + guard let connection = chainRegistry.getConnection(for: chain.chainId) else { + throw ConnectionPoolError.noConnection + } + + let worker = StorageRequestWorkerBuilderDefault().buildWorker( + runtimeService: runtimeService, + connection: connection, + storageRequestFactory: storageRequestFactory, + type: request.parametersType.workerType + ) + + let valueExtractor = PrefixStorageResponseValueExtractor(runtimeService: runtimeService) + let response: [StorageResponse] = try await worker.perform( + params: request.parametersType.workerType, + storagePath: request.storagePath + ) + let values: [K: T]? = try await valueExtractor.extractValue( + request: request, + storageResponse: response + ) + try? save( + response: response, + params: request.parametersType.workerType, + storagePath: request.storagePath, + chain: chain + ) + + return values + } + + func performPrefix( + _ request: PrefixRequest, + withCacheOptions: CachedStorageRequestTrigger, + chain: ChainModel + ) async -> AsyncThrowingStream, Error> { + return AsyncThrowingStream, Error> { continuation in + Task { + if withCacheOptions == .onAll || withCacheOptions.isEmpty { + try? await getCachePagedValue(for: request, with: continuation, chain: chain) + let value: [K: T]? = try await performPrefix(request, chain: chain) + let response = CachedStorageResponse(value: value, type: .remote) + continuation.yield(response) + continuation.finish() + return + } + if withCacheOptions.contains(.onCache) { + try await getCachePagedValue(for: request, with: continuation, chain: chain) + continuation.finish() + return + } + if withCacheOptions.contains(.onPerform) { + let value: [K: T]? = try await performPrefix(request, chain: chain) + let response = CachedStorageResponse(value: value, type: .remote) + continuation.yield(response) + continuation.finish() + return + } + } + } + } + + func perform( + _ requests: [any MixStorageRequest], + chain: ChainModel + ) async throws -> [MixStorageResponse] { + guard let runtimeService = chainRegistry.getRuntimeProvider( + for: chain.chainId + ) else { + throw RuntimeProviderError.providerUnavailable + } + + guard let connection = chainRegistry.getConnection(for: chain.chainId) else { + throw ConnectionPoolError.noConnection + } + + let codingFactory = try await runtimeService.fetchCoderFactory() + let keysBuilder = MixStorageRequestsKeysBuilder(codingFactory: codingFactory) + let requesrWorker = MixStorageRequestsWorkerDefault( + runtimeService: runtimeService, + connection: connection, + storageRequestFactory: storageRequestFactory + ) + + let keys = try keysBuilder.buildKeys(for: requests) + let updates = try await requesrWorker.perform(keys: keys) + + let decodingWorker = MixStorageDecodingListWorker( + requests: requests, + updates: updates, + codingFactory: codingFactory + ) + let responses = try decodingWorker.performDecoding() + + return responses + } + + // MARK: - Private methods + + private func getCacheSingleValue( + for request: StorageRequest, + with continuation: AsyncThrowingStream, Error>.Continuation, + chain: ChainModel + ) async throws { + let cache: [Data: T]? = try? await getCache( + params: request.parametersType.workerType, + storagePath: request.storagePath, + chain: chain + ) + guard let decoded = cache?.first?.value else { + return + } + let response = CachedStorageResponse(value: decoded, type: .cache) + continuation.yield(response) + } + + private func getCacheMultipleValue( + for request: MultipleRequest, + with continuation: AsyncThrowingStream, Error>.Continuation, + chain: ChainModel + ) async throws where T: Decodable, K: Decodable & ScaleCodable, K: Hashable { + guard let runtimeService = chainRegistry.getRuntimeProvider( + for: chain.chainId + ) else { + throw RuntimeProviderError.providerUnavailable + } + let keyExtractor = StorageKeyDataExtractor(runtimeService: runtimeService) + + let cache: [Data: T]? = try? await getCache( + params: request.parametersType.workerType, + storagePath: request.storagePath, + chain: chain + ) + guard let cache = cache else { + return + } + + let resultArray: [[K: T]] = try await cache.asyncCompactMap { + let key: K = try await keyExtractor.extractKey( + storageKey: $0.key, + storagePath: request.storagePath, + type: request.keyType + ) + return [key: $0.value] + } + let result = Dictionary(resultArray.flatMap { $0 }, uniquingKeysWith: { _, last in last }) + let response = CachedStorageResponse(value: result, type: .cache) + continuation.yield(response) + } + + private func getCachePagedValue( + for request: PrefixRequest, + with continuation: AsyncThrowingStream, Error>.Continuation, + chain: ChainModel + ) async throws where T: Decodable, K: Decodable & ScaleCodable, K: Hashable { + guard let runtimeService = chainRegistry.getRuntimeProvider( + for: chain.chainId + ) else { + throw RuntimeProviderError.providerUnavailable + } + let keyExtractor = StorageKeyDataExtractor(runtimeService: runtimeService) + + let cache: [Data: T]? = try? await getCache( + params: request.parametersType.workerType, + storagePath: request.storagePath, + chain: chain + ) + guard let cache = cache else { + return + } + + let resultArray: [[K: T]] = try await cache.asyncCompactMap { + let key: K = try await keyExtractor.extractKey( + storageKey: $0.key, + storagePath: request.storagePath, + type: request.keyType + ) + return [key: $0.value] + } + let result = Dictionary(resultArray.flatMap { $0 }, uniquingKeysWith: { _, last in last }) + let response = CachedStorageResponse(value: result, type: .cache) + continuation.yield(response) + } + + private func getCache( + params: StorageRequestWorkerType, + storagePath: StorageCodingPath, + chain: ChainModel + ) async throws -> [Data: T]? { + guard let runtimeService = chainRegistry.getRuntimeProvider( + for: chain.chainId + ) else { + throw RuntimeProviderError.providerUnavailable + } + + let codingFactory = try await runtimeService.fetchCoderFactory() + let keysEncoder = StorageRequestKeyEncodingWorkerFactoryDefault().buildFactory( + storageCodingPath: storagePath, + workerType: params, + codingFactory: codingFactory, + storageKeyFactory: StorageKeyFactory() + ) + let keys = try keysEncoder.performEncoding() + let localKeys = try keys.compactMap { try createKey(from: $0, key: chain.chainId) } + let cache = try await cacheStorage.fetch(by: localKeys, options: RepositoryFetchOptions()) + + let caches = cache.compactMap { + let item: [Data: T]? = try? decode( + object: $0, + codingFactory: codingFactory, + path: storagePath + ) + return item + } + + return Dictionary(caches.flatMap { $0 }, uniquingKeysWith: { _, last in last }) + } + + private func decode( + object: SingleValueProviderObject, + codingFactory: RuntimeCoderFactoryProtocol, + path: StorageCodingPath + ) throws -> [Data: T]? { + let decoder = StorageFallbackDecodingListWorker( + codingFactory: codingFactory, + path: path, + dataList: [object.payload] + ) + guard let value = try decoder.performDecoding().compactMap({ $0 }).first else { + return nil + } + + let key = Data(hex: object.identifier) + + return [key: value] + } + + private func save( + response: [StorageResponse], + params _: StorageRequestWorkerType, + storagePath _: StorageCodingPath, + chain: ChainModel + ) throws { + Task { + let objects: [SingleValueProviderObject] = try response.compactMap { + guard let data = $0.data else { + return nil + } + + let identifier = try createKey(from: $0.key, key: chain.chainId) + + return SingleValueProviderObject(identifier: identifier, payload: data) + } + + await cacheStorage.save(models: objects) + } + } + + private func createKey(from remoteKey: Data, key: String) throws -> String { + let concatData = Data(key.utf8) + remoteKey + return concatData.toHex() + } +} diff --git a/fearless/ApplicationLayer/StorageKeyDataExtractor.swift b/fearless/CoreLayer/CoreComponents/Storage/Helpers/StorageKeyDataExtractor.swift similarity index 74% rename from fearless/ApplicationLayer/StorageKeyDataExtractor.swift rename to fearless/CoreLayer/CoreComponents/Storage/Helpers/StorageKeyDataExtractor.swift index 0f46312e3d..43b87918fb 100644 --- a/fearless/ApplicationLayer/StorageKeyDataExtractor.swift +++ b/fearless/CoreLayer/CoreComponents/Storage/Helpers/StorageKeyDataExtractor.swift @@ -1,11 +1,13 @@ import Foundation -import SSFUtils -import SSFRuntimeCodingService import SSFModels +import SSFRuntimeCodingService +import SSFUtils final class StorageKeyDataExtractor { private let runtimeService: RuntimeCodingServiceProtocol + private lazy var storageKeyFactory = StorageKeyFactory() + init(runtimeService: RuntimeCodingServiceProtocol) { self.runtimeService = runtimeService } @@ -20,9 +22,14 @@ final class StorageKeyDataExtractor { let coderFactory = try await runtimeService.fetchCoderFactory() - let storagePathMetadata = coderFactory.metadata.getStorageMetadata(in: storagePath.moduleName, storageName: storagePath.itemName) + let storagePathMetadata = coderFactory.metadata.getStorageMetadata( + in: storagePath.moduleName, + storageName: storagePath.itemName + ) - guard let keyName = try storagePathMetadata?.type.keyName(schemaResolver: coderFactory.metadata.schemaResolver) else { + guard let keyName = try storagePathMetadata?.type + .keyName(schemaResolver: coderFactory.metadata.schemaResolver) else + { throw ConvenienceError(error: "type not found") } diff --git a/fearless/CoreLayer/CoreComponents/Storage/Models/CachedStorageResponse.swift b/fearless/CoreLayer/CoreComponents/Storage/Models/CachedStorageResponse.swift new file mode 100644 index 0000000000..3cbc91f321 --- /dev/null +++ b/fearless/CoreLayer/CoreComponents/Storage/Models/CachedStorageResponse.swift @@ -0,0 +1,43 @@ +import Foundation + +public enum CachedStorageResponseType { + case cache + case remote +} + +public struct CachedStorageResponse { + public var value: T? + public var type: CachedStorageResponseType + + public init(value: T?, type: CachedStorageResponseType) { + self.value = value + self.type = type + } + + public static var empty: CachedStorageResponse { + CachedStorageResponse(value: nil, type: .cache) + } + + public func merge( + with previous: CachedStorageResponse?, + priorityType: CachedStorageResponseType + ) -> CachedStorageResponse { + var type: CachedStorageResponseType + switch (previous?.type, self.type) { + case (.cache, .cache): + type = .cache + case (.remote, .remote): + type = .remote + case (.cache, .remote): + type = .remote + case (.remote, .cache): + type = priorityType + case (nil, .cache): + type = .cache + case (nil, .remote): + type = .remote + } + + return CachedStorageResponse(value: value, type: type) + } +} diff --git a/fearless/CoreLayer/CoreComponents/Storage/PrefixRequest.swift b/fearless/CoreLayer/CoreComponents/Storage/PrefixRequest.swift deleted file mode 100644 index 935bad1eab..0000000000 --- a/fearless/CoreLayer/CoreComponents/Storage/PrefixRequest.swift +++ /dev/null @@ -1,7 +0,0 @@ -import Foundation -import SSFModels - -protocol PrefixRequest { - var storagePath: StorageCodingPath { get } - var keyType: MapKeyType { get } -} diff --git a/fearless/CoreLayer/CoreComponents/Storage/ResponseDecoders/MultipleSingleStorageResponseValueExtractor.swift b/fearless/CoreLayer/CoreComponents/Storage/ResponseDecoders/MultipleSingleStorageResponseValueExtractor.swift deleted file mode 100644 index 8004c55e20..0000000000 --- a/fearless/CoreLayer/CoreComponents/Storage/ResponseDecoders/MultipleSingleStorageResponseValueExtractor.swift +++ /dev/null @@ -1,7 +0,0 @@ -import Foundation - -final class MultipleSingleStorageResponseValueExtractor: MultipleStorageResponseValueExtractor { - func extractValue(storageResponse: [StorageResponse]) throws -> [T?] where T: Decodable { - storageResponse.map { $0.value } - } -} diff --git a/fearless/CoreLayer/CoreComponents/Storage/ResponseDecoders/MultipleStorageResponseValueExtractor.swift b/fearless/CoreLayer/CoreComponents/Storage/ResponseDecoders/MultipleStorageResponseValueExtractor.swift deleted file mode 100644 index 3c9cbbb40f..0000000000 --- a/fearless/CoreLayer/CoreComponents/Storage/ResponseDecoders/MultipleStorageResponseValueExtractor.swift +++ /dev/null @@ -1,5 +0,0 @@ -import Foundation - -protocol MultipleStorageResponseValueExtractor { - func extractValue(storageResponse: [StorageResponse]) throws -> [T?] -} diff --git a/fearless/CoreLayer/CoreComponents/Storage/StorageRequestPerformer.swift b/fearless/CoreLayer/CoreComponents/Storage/StorageRequestPerformer.swift deleted file mode 100644 index 2591cf409c..0000000000 --- a/fearless/CoreLayer/CoreComponents/Storage/StorageRequestPerformer.swift +++ /dev/null @@ -1,150 +0,0 @@ -import Foundation -import SSFUtils -import SSFRuntimeCodingService -import RobinHood -import SSFModels - -protocol StorageRequestPerformer { - func performSingle( - _ request: StorageRequest - ) async throws -> T? - - func performSingle( - _ request: StorageRequest, - withCacheOptions: CachedStorageRequestTrigger - ) async -> AsyncThrowingStream - - func performMultiple( - _ request: MultipleRequest - ) async throws -> [T?] - - func performMultiple( - _ request: MultipleRequest, - withCacheOptions: CachedStorageRequestTrigger - ) async -> AsyncThrowingStream<[T?], Error> - - func performPrefix( - _ request: PrefixRequest - ) async throws -> [K: T]? -} - -actor StorageRequestPerformerDefault: StorageRequestPerformer { - private let runtimeService: RuntimeCodingServiceProtocol - private let connection: JSONRPCEngine - private lazy var storageRequestFactory: AsyncStorageRequestFactory = { - AsyncStorageRequestDefault() - }() - - init( - runtimeService: RuntimeCodingServiceProtocol, - connection: JSONRPCEngine - ) { - self.runtimeService = runtimeService - self.connection = connection - } - - // MARK: - StorageRequestPerformer - - func performSingle(_ request: StorageRequest) async throws -> T? { - let worker = StorageRequestWorkerBuilderDefault().buildWorker( - runtimeService: runtimeService, - connection: connection, - storageRequestFactory: storageRequestFactory, - type: request.parametersType.workerType - ) - - let valueExtractor = SingleStorageResponseValueExtractor() - let response: [StorageResponse] = try await worker.perform( - params: request.parametersType.workerType, - storagePath: request.storagePath - ) - let value = try valueExtractor.extractValue(storageResponse: response) - return value - } - - func performSingle( - _ request: StorageRequest, - withCacheOptions: CachedStorageRequestTrigger - ) async -> AsyncThrowingStream { - AsyncThrowingStream { continuation in - Task { - if withCacheOptions.contains(.onPerform) { - let value: T? = try await performSingle(request) - continuation.yield(value) - continuation.finish() - return - } - } - } - } - - func performMultiple( - _ request: MultipleRequest - ) async throws -> [T?] { - let worker = StorageRequestWorkerBuilderDefault().buildWorker( - runtimeService: runtimeService, - connection: connection, - storageRequestFactory: storageRequestFactory, - type: request.parametersType.workerType - ) - - let valueExtractor = MultipleSingleStorageResponseValueExtractor() - let response: [StorageResponse] = try await worker.perform( - params: request.parametersType.workerType, - storagePath: request.storagePath - ) - let values = try valueExtractor.extractValue(storageResponse: response) - return values - } - - func performMultiple( - _ request: MultipleRequest, - withCacheOptions: CachedStorageRequestTrigger - ) async -> AsyncThrowingStream<[T?], Error> { - AsyncThrowingStream<[T?], Error> { continuation in - Task { - if withCacheOptions.contains(.onPerform) { - let value: [T?] = try await performMultiple(request) - continuation.yield(value) - continuation.finish() - return - } - } - } - } - - func performPrefix( - _ request: PrefixRequest - ) async throws -> [K: T]? where T: Decodable, K: Decodable & ScaleCodable, K: Hashable { - let worker = StorageRequestWorkerBuilderDefault().buildWorker( - runtimeService: runtimeService, - connection: connection, - storageRequestFactory: storageRequestFactory, - type: .prefix - ) - - let valueExtractor = PrefixStorageResponseValueExtractor(runtimeService: runtimeService) - let response: [StorageResponse] = try await worker.perform( - params: .prefix, - storagePath: request.storagePath - ) - let values: [K: T]? = try await valueExtractor.extractValue(request: request, storageResponse: response) - return values - } - - // MARK: - Private methods - - private func decode( - payload: Data, - codingFactory: RuntimeCoderFactoryProtocol, - path: StorageCodingPath - ) throws -> [T?] { - let data = try JSONDecoder().decode([Data].self, from: payload) - let decoder = StorageFallbackDecodingListWorker( - codingFactory: codingFactory, - path: path, - dataList: data - ) - return try decoder.performDecoding() - } -} diff --git a/fearless/Modules/ClaimCrowdloanRewards/ClaimCrowdloanRewardsAssembly.swift b/fearless/Modules/ClaimCrowdloanRewards/ClaimCrowdloanRewardsAssembly.swift index 1f6a9b407a..4cf70fe3c0 100644 --- a/fearless/Modules/ClaimCrowdloanRewards/ClaimCrowdloanRewardsAssembly.swift +++ b/fearless/Modules/ClaimCrowdloanRewards/ClaimCrowdloanRewardsAssembly.swift @@ -43,8 +43,7 @@ final class ClaimCrowdloanRewardsAssembly { accountResponse: accountResponse ) let storageRequestPerformer = StorageRequestPerformerDefault( - runtimeService: runtimeService, - connection: connection + chainRegistry: chainRegistry ) let substrateRepositoryFactory = SubstrateRepositoryFactory( storageFacade: UserDataStorageFacade.shared diff --git a/fearless/Modules/ClaimCrowdloanRewards/ClaimCrowdloanRewardsInteractor.swift b/fearless/Modules/ClaimCrowdloanRewards/ClaimCrowdloanRewardsInteractor.swift index 472644f490..f154dc6d1c 100644 --- a/fearless/Modules/ClaimCrowdloanRewards/ClaimCrowdloanRewardsInteractor.swift +++ b/fearless/Modules/ClaimCrowdloanRewards/ClaimCrowdloanRewardsInteractor.swift @@ -63,7 +63,7 @@ final class ClaimCrowdloanRewardsInteractor { do { let accountIdVariant = try AccountIdVariant.build(raw: accountId, chain: chainAsset.chain) let tokensLocksRequest = TokensLocksRequest(accountId: accountIdVariant, currencyId: currencyId) - let locks: TokenLocks? = try await storageRequestPerformer.performSingle(tokensLocksRequest) + let locks: TokenLocks? = try await storageRequestPerformer.performSingle(tokensLocksRequest, chain: chainAsset.chain) await MainActor.run { output?.didReceiveTokenLocks(locks) @@ -86,7 +86,7 @@ final class ClaimCrowdloanRewardsInteractor { do { let accountId = try AccountIdVariant.build(raw: accountId, chain: chainAsset.chain) let balancesLocksRequest = BalancesLocksRequest(accountId: accountId) - let locks: BalanceLocks? = try await storageRequestPerformer.performSingle(balancesLocksRequest) + let locks: BalanceLocks? = try await storageRequestPerformer.performSingle(balancesLocksRequest, chain: chainAsset.chain) await MainActor.run { output?.didReceiveBalanceLocks(locks) diff --git a/fearless/Modules/CrossChain/CrossChainAssembly.swift b/fearless/Modules/CrossChain/CrossChainAssembly.swift index 4bb44850ec..4f346deb3a 100644 --- a/fearless/Modules/CrossChain/CrossChainAssembly.swift +++ b/fearless/Modules/CrossChain/CrossChainAssembly.swift @@ -45,13 +45,7 @@ final class CrossChainAssembly { chainRegistry: chainRegistry ) let runtimeService = chainRegistry.getRuntimeProvider(for: chainAsset.chain.chainId) - let storageRequestPerformer: StorageRequestPerformer? = runtimeService.flatMap { - guard let connection = chainRegistry.getConnection(for: chainAsset.chain.chainId) else { - return nil - } - - return StorageRequestPerformerDefault(runtimeService: $0, connection: connection) - } + let storageRequestPerformer = StorageRequestPerformerDefault(chainRegistry: chainRegistry) let interactor = CrossChainInteractor( chainAssetFetching: chainAssetFetching, diff --git a/fearless/Modules/CrossChain/CrossChainInteractor.swift b/fearless/Modules/CrossChain/CrossChainInteractor.swift index d43c880f44..b18184910f 100644 --- a/fearless/Modules/CrossChain/CrossChainInteractor.swift +++ b/fearless/Modules/CrossChain/CrossChainInteractor.swift @@ -203,7 +203,7 @@ final class CrossChainInteractor { do { let accountIdVariant = try AccountIdVariant.build(raw: accountId, chain: chainAsset.chain) let request = AssetsAccountRequest(accountId: accountIdVariant, currencyId: currencyId) - let assetAccountInfo: AssetAccountInfo? = try await storageRequestPerformer?.performSingle(request) + let assetAccountInfo: AssetAccountInfo? = try await storageRequestPerformer?.performSingle(request, chain: chainAsset.chain) await MainActor.run { output?.didReceiveAssetAccountInfo(assetAccountInfo: assetAccountInfo) @@ -323,7 +323,7 @@ extension CrossChainInteractor: CrossChainInteractorInput { let chainAsset = ChainAsset(chain: destinationChain, asset: asset) let accountIdVariant = try AccountIdVariant.build(raw: accountId, chain: chainAsset.chain) let request = SystemAccountRequest(accountId: accountIdVariant, chainAsset: chainAsset) - let accountInfo: AccountInfo? = try await deps?.destinationStorageRequestPerformer?.performSingle(request) + let accountInfo: AccountInfo? = try await deps?.destinationStorageRequestPerformer?.performSingle(request, chain: chainAsset.chain) await MainActor.run { output?.didReceiveDestinationAccountInfo(accountInfo: accountInfo) diff --git a/fearless/Modules/CrossChainConfirmation/CrossChainDepsContainer.swift b/fearless/Modules/CrossChainConfirmation/CrossChainDepsContainer.swift index a2baeac5bb..ee4e351d6c 100644 --- a/fearless/Modules/CrossChainConfirmation/CrossChainDepsContainer.swift +++ b/fearless/Modules/CrossChainConfirmation/CrossChainDepsContainer.swift @@ -45,16 +45,7 @@ final class CrossChainDepsContainer { operationManager: OperationManagerFacade.sharedManager, chainRegistry: chainRegistry ) - let storageRequestPerformer: StorageRequestPerformer? = (destChainModel?.chainId).flatMap { - guard - let runtimeService = chainRegistry.getRuntimeProvider(for: $0), - let connection = chainRegistry.getConnection(for: $0) - else { - return nil - } - - return StorageRequestPerformerDefault(runtimeService: runtimeService, connection: connection) - } + let storageRequestPerformer = StorageRequestPerformerDefault(chainRegistry: chainRegistry) let deps = CrossChainConfirmationDeps( xcmServices: xcmServices, diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/LiquidityPoolDetailsInteractor.swift b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/LiquidityPoolDetailsInteractor.swift index d226b87b3e..10e5b0c2d7 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/LiquidityPoolDetailsInteractor.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/LiquidityPoolDetailsInteractor.swift @@ -2,14 +2,14 @@ import UIKit import SSFModels import SSFPolkaswap import SSFPools -import SSFStorageQueryKit import SSFAccountManagment import SSFCrypto +import SSFStorageQueryKit protocol LiquidityPoolDetailsInteractorOutput: AnyObject { func didReceiveLiquidityPair(liquidityPair: LiquidityPair?) func didReceiveUserPool(pool: AccountPool?) - func didReceivePoolReserves(reserves: CachedStorageResponse?) + func didReceivePoolReserves(reserves: SSFStorageQueryKit.CachedStorageResponse) func didReceivePoolAPY(apy: PoolApyInfo?) func didReceiveLiquidityPairError(error: Error) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/LiquidityPoolDetailsPresenter.swift b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/LiquidityPoolDetailsPresenter.swift index cb138fec23..921c2e859c 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/LiquidityPoolDetailsPresenter.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/LiquidityPoolDetailsPresenter.swift @@ -29,7 +29,7 @@ final class LiquidityPoolDetailsPresenter { private var liquidityPair: LiquidityPair? private var accountPoolInfo: AccountPool? - private var reserves: CachedStorageResponse? + private var reserves: SSFStorageQueryKit.CachedStorageResponse? private var apyInfo: PoolApyInfo? // MARK: - Constructors @@ -69,7 +69,7 @@ final class LiquidityPoolDetailsPresenter { return } - let reserves = reserves ?? CachedStorageResponse(value: input.reserves, type: .remote) + let reserves = reserves ?? SSFStorageQueryKit.CachedStorageResponse(value: input.reserves, type: .remote) let apy = apyInfo ?? input.apyInfo let accountPoolInfo = accountPoolInfo ?? input.accountPool @@ -151,7 +151,7 @@ extension LiquidityPoolDetailsPresenter: LiquidityPoolDetailsInteractorOutput { provideViewModel() } - func didReceivePoolReserves(reserves: CachedStorageResponse?) { + func didReceivePoolReserves(reserves: SSFStorageQueryKit.CachedStorageResponse) { self.reserves = reserves provideViewModel() } diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/ViewModel/LiquidityPoolDetailsViewModelFactory.swift b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/ViewModel/LiquidityPoolDetailsViewModelFactory.swift index 660dd1bec0..7e4e4e0f17 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/ViewModel/LiquidityPoolDetailsViewModelFactory.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/ViewModel/LiquidityPoolDetailsViewModelFactory.swift @@ -8,7 +8,7 @@ import SoraFoundation protocol LiquidityPoolDetailsViewModelFactory { func buildViewModel( liquidityPair: LiquidityPair, - reserves: CachedStorageResponse?, + reserves: SSFStorageQueryKit.CachedStorageResponse?, apyInfo: PoolApyInfo?, chain: ChainModel, locale: Locale, @@ -32,7 +32,7 @@ final class LiquidityPoolDetailsViewModelFactoryDefault: LiquidityPoolDetailsVie func buildViewModel( liquidityPair: LiquidityPair, - reserves: CachedStorageResponse?, + reserves: SSFStorageQueryKit.CachedStorageResponse?, apyInfo: PoolApyInfo?, chain: ChainModel, locale: Locale, diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListInteractor.swift b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListInteractor.swift index 1c54fd856b..37ae913bad 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListInteractor.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListInteractor.swift @@ -7,7 +7,7 @@ import SSFCrypto protocol AvailableLiquidityPoolsListInteractorOutput: AnyObject { func didReceiveLiquidityPairs(pairs: [LiquidityPair]?) - func didReceivePoolsReserves(reserves: CachedStorageResponse<[PolkaswapPoolReservesInfo]>) + func didReceivePoolsReserves(reserves: SSFStorageQueryKit.CachedStorageResponse<[PolkaswapPoolReservesInfo]>) func didReceivePoolsAPY(apy: [PoolApyInfo]?) func didReceiveLiquidityPairsError(error: Error) diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListPresenter.swift b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListPresenter.swift index 845bab6b52..81c14e40b5 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListPresenter.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListPresenter.swift @@ -25,7 +25,7 @@ final class AvailableLiquidityPoolsListPresenter { private let type: LiquidityPoolListType private var pairs: [LiquidityPair]? - private var reserves: CachedStorageResponse<[PolkaswapPoolReservesInfo]>? + private var reserves: SSFStorageQueryKit.CachedStorageResponse<[PolkaswapPoolReservesInfo]>? private var apy: [PoolApyInfo]? private var searchText: String? @@ -133,7 +133,7 @@ extension AvailableLiquidityPoolsListPresenter: AvailableLiquidityPoolsListInter provideViewModel() } - func didReceivePoolsReserves(reserves: CachedStorageResponse<[PolkaswapPoolReservesInfo]>) { + func didReceivePoolsReserves(reserves: SSFStorageQueryKit.CachedStorageResponse<[PolkaswapPoolReservesInfo]>) { self.reserves = reserves.merge(with: self.reserves, priorityType: .remote) provideViewModel() } diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListViewModelFactory.swift b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListViewModelFactory.swift index bb1d4672eb..fae5ff5428 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListViewModelFactory.swift +++ b/fearless/Modules/LiquidityPools/LiquidityPoolsList/Flows/AvailablePools/AvailableLiquidityPoolsListViewModelFactory.swift @@ -10,7 +10,7 @@ import SSFCrypto protocol AvailableLiquidityPoolsListViewModelFactory { func buildViewModel( pairs: [LiquidityPair]?, - reserves: CachedStorageResponse<[PolkaswapPoolReservesInfo]>?, + reserves: SSFStorageQueryKit.CachedStorageResponse<[PolkaswapPoolReservesInfo]>?, apyInfos: [PoolApyInfo]?, chain: ChainModel, locale: Locale, @@ -70,7 +70,7 @@ final class AvailableLiquidityPoolsListViewModelFactoryDefault: AvailableLiquidi func buildViewModel( pairs: [LiquidityPair]?, - reserves: CachedStorageResponse<[PolkaswapPoolReservesInfo]>?, + reserves: SSFStorageQueryKit.CachedStorageResponse<[PolkaswapPoolReservesInfo]>?, apyInfos: [PoolApyInfo]?, chain: ChainModel, locale: Locale, diff --git a/fearless/Modules/NewWallet/ChainAccount/ChainAccountInteractor.swift b/fearless/Modules/NewWallet/ChainAccount/ChainAccountInteractor.swift index fb41040d2b..ab6b9ccd72 100644 --- a/fearless/Modules/NewWallet/ChainAccount/ChainAccountInteractor.swift +++ b/fearless/Modules/NewWallet/ChainAccount/ChainAccountInteractor.swift @@ -198,6 +198,8 @@ extension ChainAccountInteractor: ChainAccountInteractorInputProtocol { } func updateData() { + fetchChainAssetBasedData() + guard remoteFetchTimer == nil, !chainAsset.chain.ecosystem.isSubstrate diff --git a/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift b/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift index 14f41c7558..f5786b0675 100644 --- a/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift +++ b/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift @@ -101,13 +101,16 @@ final class ChainAccountPresenter { let transferrableBalance = freeBalance - frozenValue.or(.zero) let transferrableValue = balanceViewModelFactory.balanceFromPrice(transferrableBalance, priceData: priceData, usageCase: .detailsCrypto) - let totalLocked = balanceLocksValue.or(.zero) + frozenValue.or(.zero) - let lockedValue = balanceViewModelFactory.balanceFromPrice(totalLocked, priceData: priceData, usageCase: .detailsCrypto) + let lockedComponents = [balanceLocksValue, frozenValue].compactMap { $0 } + let totalLocked = lockedComponents.first != nil ? lockedComponents.reduce(0, +) : nil + let lockedValue = totalLocked.flatMap { + balanceViewModelFactory.balanceFromPrice($0, priceData: priceData, usageCase: .detailsCrypto) + } let balanceViewModel = ChainAccountBalanceViewModel( transferrableValue: transferrableValue, lockedValue: lockedValue, - hasLockedTokens: totalLocked > Decimal.zero + hasLockedTokens: totalLocked.or(.zero) > Decimal.zero ) DispatchQueue.main.async { [weak self] in diff --git a/fearless/Modules/NewWallet/ChainAccount/ChainAccountViewLayout.swift b/fearless/Modules/NewWallet/ChainAccount/ChainAccountViewLayout.swift index 3f9dac7bc3..1129a6757d 100644 --- a/fearless/Modules/NewWallet/ChainAccount/ChainAccountViewLayout.swift +++ b/fearless/Modules/NewWallet/ChainAccount/ChainAccountViewLayout.swift @@ -189,7 +189,7 @@ final class ChainAccountViewLayout: UIView { // balanceInfoStackView.isHidden = balanceViewModel == nil transferableBalanceView.bindBalance(viewModel: balanceViewModel?.transferrableValue.value(for: locale)) - balanceLocksView.bindBalance(viewModel: balanceViewModel?.lockedValue.value(for: locale)) + balanceLocksView.bindBalance(viewModel: balanceViewModel?.lockedValue?.value(for: locale)) infoButton.isHidden = !(balanceViewModel?.hasLockedTokens == true) } diff --git a/fearless/Modules/NewWallet/ChainAccount/ViewModels/ChainAccountBalanceViewModel.swift b/fearless/Modules/NewWallet/ChainAccount/ViewModels/ChainAccountBalanceViewModel.swift index acc6f2d4d1..046ce8e9f7 100644 --- a/fearless/Modules/NewWallet/ChainAccount/ViewModels/ChainAccountBalanceViewModel.swift +++ b/fearless/Modules/NewWallet/ChainAccount/ViewModels/ChainAccountBalanceViewModel.swift @@ -3,6 +3,6 @@ import SoraFoundation struct ChainAccountBalanceViewModel { let transferrableValue: LocalizableResource - let lockedValue: LocalizableResource + let lockedValue: LocalizableResource? let hasLockedTokens: Bool } diff --git a/fearless/Modules/Transfer/Transfer/SubstrateTransferFlowUseCase.swift b/fearless/Modules/Transfer/Transfer/SubstrateTransferFlowUseCase.swift index e049f10009..923f8f3a49 100644 --- a/fearless/Modules/Transfer/Transfer/SubstrateTransferFlowUseCase.swift +++ b/fearless/Modules/Transfer/Transfer/SubstrateTransferFlowUseCase.swift @@ -72,6 +72,7 @@ final class SubstrateTransferFlowUseCase: TransferFlowUseCase { utilityChainAsset = chainAsset.chain.utilityChainAssets().first provideNetworkViewModel?() + provideAssetViewModel?() try await fetchRequaredInfo(for: chainAsset) calcFee() diff --git a/fearless/Modules/Transfer/Transfer/TransferInteractor.swift b/fearless/Modules/Transfer/Transfer/TransferInteractor.swift index fd3867045a..6d61500ec0 100644 --- a/fearless/Modules/Transfer/Transfer/TransferInteractor.swift +++ b/fearless/Modules/Transfer/Transfer/TransferInteractor.swift @@ -47,6 +47,23 @@ struct TransferDepsContainer { lazy var addressChainDefiner: AddressChainDefiner = { ServiceAssembly.shared.addressChainDefiner(wallet: wallet) }() + + lazy var accountInfoFetchingProvider: AccountInfoFetching = { + let substrateRepositoryFactory = SubstrateRepositoryFactory( + storageFacade: UserDataStorageFacade.shared + ) + + let accountRepositoryFactory = AccountRepositoryFactory(storageFacade: UserDataStorageFacade.shared) + let accountRepository = accountRepositoryFactory.createMetaAccountRepository(for: nil, sortDescriptors: []) + let accountInfoRepository = substrateRepositoryFactory.createAccountInfoStorageItemRepository() + let chainRegistry = ChainRegistryFacade.sharedRegistry + let accountInfoFetching = AccountInfoFetching( + accountInfoRepository: accountInfoRepository, + chainRegistry: ChainRegistryFacade.sharedRegistry, + operationQueue: OperationQueue() + ) + return accountInfoFetching + }() } actor TransferInteractor: RuntimeConstantFetching { @@ -115,10 +132,8 @@ extension TransferInteractor: TransferInteractorInput { func fetchAccountInfos(for chainAsset: ChainAsset) async throws -> [ChainAssetKey: AccountInfo?] { let chainAssets = getChainAssets(for: chainAsset) - let accountInfos = try await deps - .accountInfoRemoteService - .fetchAccountInfos(for: chainAssets, wallet: deps.wallet) - return accountInfos + return try await deps.accountInfoFetchingProvider.fetchByUniqKey(for: chainAssets, wallet: deps.wallet) + } func fetchExistentialDeposit(for chainAsset: ChainAsset) async throws -> BigUInt { diff --git a/fearless/Modules/Transfer/Transfer/TransferPresenter.swift b/fearless/Modules/Transfer/Transfer/TransferPresenter.swift index 0c04f4df7c..78eac36a50 100644 --- a/fearless/Modules/Transfer/Transfer/TransferPresenter.swift +++ b/fearless/Modules/Transfer/Transfer/TransferPresenter.swift @@ -330,6 +330,8 @@ final class TransferPresenter { currentFlowUseCase = flow } setupBindings() + + await provideAssetVewModel() } private func setCurrentFlow(for implType: TransferFlowDirectionImpl) { From 39ad6d93dca78b000d64b39d47fb2030619504db Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Thu, 16 Jan 2025 14:42:08 +0700 Subject: [PATCH 135/156] packages fix --- fearless.xcodeproj/project.pbxproj | 4 - .../xcshareddata/swiftpm/Package.resolved | 666 +++++++++--------- 2 files changed, 337 insertions(+), 333 deletions(-) diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index 20f158f95c..d46be668f2 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -5725,7 +5725,6 @@ FA5137B529AC76EB00560EBA /* GiantsquidHistoryOperationFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GiantsquidHistoryOperationFactory.swift; sourceTree = ""; }; FA5137B629AC76EB00560EBA /* SubsquidHistoryOperationFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SubsquidHistoryOperationFactory.swift; sourceTree = ""; }; FA5137B729AC76EB00560EBA /* HistoryOperationFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HistoryOperationFactory.swift; sourceTree = ""; }; - FA52A7BE2D1E8B1A0054D0C1 /* shared-features-spm */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = "shared-features-spm"; path = "../shared-features-spm"; sourceTree = SOURCE_ROOT; }; FA53D88F2C084ECA00173ADB /* LiquidityPoolSupplyViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyViewModel.swift; sourceTree = ""; }; FA53D8912C08510000173ADB /* LiquidityPoolSupplyViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiquidityPoolSupplyViewModelFactory.swift; sourceTree = ""; }; FA584C772AB2BCD500F6F020 /* UniversalMediaView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UniversalMediaView.swift; sourceTree = ""; }; @@ -5928,7 +5927,6 @@ FA887A482C1C19DB00CA720F /* WarningView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WarningView.swift; sourceTree = ""; }; FA8B020F2D375A730066F070 /* ErasStakersOverviewKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErasStakersOverviewKey.swift; sourceTree = ""; }; FA8B02122D375A990066F070 /* ErasStakersPagedKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErasStakersPagedKey.swift; sourceTree = ""; }; - FA8B02142D3770760066F070 /* fearless-starscream */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = "fearless-starscream"; path = "../fearless-starscream"; sourceTree = SOURCE_ROOT; }; FA8C34B051607218638BA851 /* FiltersProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FiltersProtocols.swift; sourceTree = ""; }; FA8ED43228FD960F00EBB712 /* YourValidatorListFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YourValidatorListFlow.swift; sourceTree = ""; }; FA8ED43528FD983A00EBB712 /* YourValidatorListRelaychainStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YourValidatorListRelaychainStrategy.swift; sourceTree = ""; }; @@ -9939,8 +9937,6 @@ 8490139F24A80984008F705E = { isa = PBXGroup; children = ( - FA8B02142D3770760066F070 /* fearless-starscream */, - FA52A7BE2D1E8B1A0054D0C1 /* shared-features-spm */, 849013AA24A80984008F705E /* fearless */, 849013C124A80986008F705E /* fearlessTests */, 8438E1D024BFAAD2001BDB13 /* fearlessIntegrationTests */, diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 1349bd52ff..5dda9417d7 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,331 +1,339 @@ { - "object": { - "pins": [ - { - "package": "AppAuth", - "repositoryURL": "https://github.com/openid/AppAuth-iOS.git", - "state": { - "branch": null, - "revision": "2781038865a80e2c425a1da12cc1327bcd56501f", - "version": "1.7.6" - } - }, - { - "package": "BigInt", - "repositoryURL": "https://github.com/attaswift/BigInt.git", - "state": { - "branch": null, - "revision": "0ed110f7555c34ff468e72e1686e59721f2b0da6", - "version": "5.3.0" - } - }, - { - "package": "Cosmos", - "repositoryURL": "https://github.com/evgenyneu/Cosmos.git", - "state": { - "branch": null, - "revision": "40ba10aaf175bf50abefd0e518bd3b40862af3b1", - "version": "25.0.1" - } - }, - { - "package": "CryptoSwift", - "repositoryURL": "https://github.com/krzyzanowskim/CryptoSwift.git", - "state": { - "branch": null, - "revision": "678d442c6f7828def400a70ae15968aef67ef52d", - "version": "1.8.3" - } - }, - { - "package": "google-api-objectivec-client-for-rest", - "repositoryURL": "https://github.com/google/google-api-objectivec-client-for-rest.git", - "state": { - "branch": null, - "revision": "a8c1e0b1173659d0be452680582c28556372ef74", - "version": "3.5.5" - } - }, - { - "package": "GoogleSignIn-iOS", - "repositoryURL": "https://github.com/google/GoogleSignIn-iOS", - "state": { - "branch": null, - "revision": "a7965d134c5d3567026c523e0a8a583f73b62b0d", - "version": "7.1.0" - } - }, - { - "package": "gtm-session-fetcher", - "repositoryURL": "https://github.com/google/gtm-session-fetcher.git", - "state": { - "branch": null, - "revision": "a2ab612cb980066ee56d90d60d8462992c07f24b", - "version": "3.5.0" - } - }, - { - "package": "GTMAppAuth", - "repositoryURL": "https://github.com/google/GTMAppAuth.git", - "state": { - "branch": null, - "revision": "5d7d66f647400952b1758b230e019b07c0b4b22a", - "version": "4.1.1" - } - }, - { - "package": "Nimble", - "repositoryURL": "https://github.com/Quick/Nimble", - "state": { - "branch": null, - "revision": "e9d769113660769a4d9dd3afb855562c0b7ae7b0", - "version": "7.3.4" - } - }, - { - "package": "PromiseKit", - "repositoryURL": "https://github.com/mxcl/PromiseKit.git", - "state": { - "branch": null, - "revision": "8a98e31a47854d3180882c8068cc4d9381bf382d", - "version": "6.22.1" - } - }, - { - "package": "QRCode", - "repositoryURL": "https://github.com/WalletConnect/QRCode", - "state": { - "branch": null, - "revision": "263f280d2c8144adfb0b6676109846cfc8dd552b", - "version": "14.3.1" - } - }, - { - "package": "Quick", - "repositoryURL": "https://github.com/Quick/Quick", - "state": { - "branch": null, - "revision": "f2b5a06440ea87eba1a167cab37bf6496646c52e", - "version": "1.3.4" - } - }, - { - "package": "Reachability", - "repositoryURL": "https://github.com/ashleymills/Reachability.swift", - "state": { - "branch": null, - "revision": "21d1dc412cfecbe6e34f1f4c4eb88d3f912654a6", - "version": "5.2.4" - } - }, - { - "package": "secp256k1.swift", - "repositoryURL": "https://github.com/Boilertalk/secp256k1.swift.git", - "state": { - "branch": null, - "revision": "cd187c632fb812fd93711a9f7e644adb7e5f97f0", - "version": "0.1.7" - } - }, - { - "package": "swift-atomics", - "repositoryURL": "https://github.com/apple/swift-atomics.git", - "state": { - "branch": null, - "revision": "cd142fd2f64be2100422d658e7411e39489da985", - "version": "1.2.0" - } - }, - { - "package": "swift-collections", - "repositoryURL": "https://github.com/apple/swift-collections.git", - "state": { - "branch": null, - "revision": "671108c96644956dddcd89dd59c203dcdb36cec7", - "version": "1.1.4" - } - }, - { - "package": "swift-http-types", - "repositoryURL": "https://github.com/apple/swift-http-types", - "state": { - "branch": null, - "revision": "ef18d829e8b92d731ad27bb81583edd2094d1ce3", - "version": "1.3.1" - } - }, - { - "package": "swift-nio", - "repositoryURL": "https://github.com/apple/swift-nio.git", - "state": { - "branch": null, - "revision": "dca6594f65308c761a9c409e09fbf35f48d50d34", - "version": "2.77.0" - } - }, - { - "package": "swift-nio-extras", - "repositoryURL": "https://github.com/apple/swift-nio-extras.git", - "state": { - "branch": null, - "revision": "2e9746cfc57554f70b650b021b6ae4738abef3e6", - "version": "1.24.1" - } - }, - { - "package": "swift-nio-http2", - "repositoryURL": "https://github.com/apple/swift-nio-http2.git", - "state": { - "branch": null, - "revision": "eaa71bb6ae082eee5a07407b1ad0cbd8f48f9dca", - "version": "1.34.1" - } - }, - { - "package": "swift-nio-ssl", - "repositoryURL": "https://github.com/apple/swift-nio-ssl.git", - "state": { - "branch": null, - "revision": "c7e95421334b1068490b5d41314a50e70bab23d1", - "version": "2.29.0" - } - }, - { - "package": "swift-nio-transport-services", - "repositoryURL": "https://github.com/apple/swift-nio-transport-services.git", - "state": { - "branch": null, - "revision": "bbd5e63cf949b7db0c9edaf7a21e141c52afe214", - "version": "1.23.0" - } - }, - { - "package": "swift-openapi-runtime", - "repositoryURL": "https://github.com/apple/swift-openapi-runtime", - "state": { - "branch": null, - "revision": "a51b3bd6f2151e9a6f792ca6937a7242c4758768", - "version": "0.3.6" - } - }, - { - "package": "swift-qrcode-generator", - "repositoryURL": "https://github.com/dagronf/swift-qrcode-generator", - "state": { - "branch": null, - "revision": "5ca09b6a2ad190f94aa3d6ddef45b187f8c0343b", - "version": "1.0.3" - } - }, - { - "package": "swift-system", - "repositoryURL": "https://github.com/apple/swift-system.git", - "state": { - "branch": null, - "revision": "c8a44d836fe7913603e246acab7c528c2e780168", - "version": "1.4.0" - } - }, - { - "package": "SwiftFormat", - "repositoryURL": "https://github.com/nicklockwood/SwiftFormat", - "state": { - "branch": null, - "revision": "4e92b81311f528cfdca8015d629c650d0aff94ce", - "version": "0.55.4" - } - }, - { - "package": "SwiftImageReadWrite", - "repositoryURL": "https://github.com/dagronf/SwiftImageReadWrite", - "state": { - "branch": null, - "revision": "5596407d1cf61b953b8e658fa8636a471df3c509", - "version": "1.1.6" - } - }, - { - "package": "SwiftyBeaver", - "repositoryURL": "https://github.com/SwiftyBeaver/SwiftyBeaver.git", - "state": { - "branch": null, - "revision": "8cba041db09596183331d123f337d0eb2e6e8e91", - "version": "2.1.1" - } - }, - { - "package": "Swime", - "repositoryURL": "https://github.com/sendyhalim/Swime", - "state": { - "branch": null, - "revision": "4e538834483059ceefaaad8cdb3abe0d7d1c5146", - "version": "3.1.0" - } - }, - { - "package": "TonAPI", - "repositoryURL": "https://github.com/DRadmir/ton-api-swift.git", - "state": { - "branch": null, - "revision": "8ddff19a40d3d00503cab7fb9d9eb77459169488", - "version": "0.5.0" - } - }, - { - "package": "TonSwift", - "repositoryURL": "https://github.com/DRadmir/ton-swift", - "state": { - "branch": "main", - "revision": "73c9894e2be8d6d16b87853342eb2755d2e4be8a", - "version": null - } - }, - { - "package": "tweetnacl-swiftwrap", - "repositoryURL": "https://github.com/bitmark-inc/tweetnacl-swiftwrap", - "state": { - "branch": null, - "revision": "f8fd111642bf2336b11ef9ea828510693106e954", - "version": "1.1.0" - } - }, - { - "package": "WalletConnectSwiftV2", - "repositoryURL": "https://github.com/WalletConnect/WalletConnectSwiftV2", - "state": { - "branch": null, - "revision": "58d2b49eeac5cf94432e2647b9107577c156a25c", - "version": "1.9.9" - } - }, - { - "package": "Web3.swift", - "repositoryURL": "https://github.com/bnsports/Web3.swift.git", - "state": { - "branch": null, - "revision": "a526779488e5fe2fa993d9614f11f57b00cc1858", - "version": "7.7.7" - } - }, - { - "package": "websocket-kit", - "repositoryURL": "https://github.com/vapor/websocket-kit", - "state": { - "branch": null, - "revision": "4232d34efa49f633ba61afde365d3896fc7f8740", - "version": "2.15.0" - } - }, - { - "package": "xxHash-Swift", - "repositoryURL": "https://github.com/daisuke-t-jp/xxHash-Swift", - "state": { - "branch": null, - "revision": "e86a07ab4867f81481d430e1370a5ec97b6e3359", - "version": "1.1.1" - } - } - ] - }, - "version": 1 + "originHash" : "db3e9f7067135f4497b6059ac444951778a2f8ca758335577305759626739473", + "pins" : [ + { + "identity" : "appauth-ios", + "kind" : "remoteSourceControl", + "location" : "https://github.com/openid/AppAuth-iOS.git", + "state" : { + "revision" : "2781038865a80e2c425a1da12cc1327bcd56501f", + "version" : "1.7.6" + } + }, + { + "identity" : "bigint", + "kind" : "remoteSourceControl", + "location" : "https://github.com/attaswift/BigInt.git", + "state" : { + "revision" : "0ed110f7555c34ff468e72e1686e59721f2b0da6", + "version" : "5.3.0" + } + }, + { + "identity" : "cosmos", + "kind" : "remoteSourceControl", + "location" : "https://github.com/evgenyneu/Cosmos.git", + "state" : { + "revision" : "40ba10aaf175bf50abefd0e518bd3b40862af3b1", + "version" : "25.0.1" + } + }, + { + "identity" : "cryptoswift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/krzyzanowskim/CryptoSwift.git", + "state" : { + "revision" : "678d442c6f7828def400a70ae15968aef67ef52d", + "version" : "1.8.3" + } + }, + { + "identity" : "fearless-starscream", + "kind" : "remoteSourceControl", + "location" : "https://github.com/soramitsu/fearless-starscream", + "state" : { + "revision" : "3e1de9baeab87de379e0cb01c64d5db18fbf130f", + "version" : "4.0.12" + } + }, + { + "identity" : "google-api-objectivec-client-for-rest", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/google-api-objectivec-client-for-rest.git", + "state" : { + "revision" : "a8c1e0b1173659d0be452680582c28556372ef74", + "version" : "3.5.5" + } + }, + { + "identity" : "googlesignin-ios", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleSignIn-iOS", + "state" : { + "revision" : "a7965d134c5d3567026c523e0a8a583f73b62b0d", + "version" : "7.1.0" + } + }, + { + "identity" : "gtm-session-fetcher", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/gtm-session-fetcher.git", + "state" : { + "revision" : "a2ab612cb980066ee56d90d60d8462992c07f24b", + "version" : "3.5.0" + } + }, + { + "identity" : "gtmappauth", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GTMAppAuth.git", + "state" : { + "revision" : "5d7d66f647400952b1758b230e019b07c0b4b22a", + "version" : "4.1.1" + } + }, + { + "identity" : "nimble", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Quick/Nimble", + "state" : { + "revision" : "e9d769113660769a4d9dd3afb855562c0b7ae7b0", + "version" : "7.3.4" + } + }, + { + "identity" : "promisekit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/mxcl/PromiseKit.git", + "state" : { + "revision" : "8a98e31a47854d3180882c8068cc4d9381bf382d", + "version" : "6.22.1" + } + }, + { + "identity" : "qrcode", + "kind" : "remoteSourceControl", + "location" : "https://github.com/WalletConnect/QRCode", + "state" : { + "revision" : "263f280d2c8144adfb0b6676109846cfc8dd552b", + "version" : "14.3.1" + } + }, + { + "identity" : "quick", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Quick/Quick", + "state" : { + "revision" : "f2b5a06440ea87eba1a167cab37bf6496646c52e", + "version" : "1.3.4" + } + }, + { + "identity" : "reachability.swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/ashleymills/Reachability.swift", + "state" : { + "revision" : "21d1dc412cfecbe6e34f1f4c4eb88d3f912654a6", + "version" : "5.2.4" + } + }, + { + "identity" : "secp256k1.swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Boilertalk/secp256k1.swift.git", + "state" : { + "revision" : "cd187c632fb812fd93711a9f7e644adb7e5f97f0", + "version" : "0.1.7" + } + }, + { + "identity" : "shared-features-spm", + "kind" : "remoteSourceControl", + "location" : "https://github.com/soramitsu/shared-features-spm.git", + "state" : { + "branch" : "FW-new-ecosystem", + "revision" : "6ad1f937cd2b77f1e6298de53c86108fcef84774" + } + }, + { + "identity" : "swift-atomics", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-atomics.git", + "state" : { + "revision" : "cd142fd2f64be2100422d658e7411e39489da985", + "version" : "1.2.0" + } + }, + { + "identity" : "swift-collections", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-collections.git", + "state" : { + "revision" : "671108c96644956dddcd89dd59c203dcdb36cec7", + "version" : "1.1.4" + } + }, + { + "identity" : "swift-http-types", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-http-types", + "state" : { + "revision" : "ef18d829e8b92d731ad27bb81583edd2094d1ce3", + "version" : "1.3.1" + } + }, + { + "identity" : "swift-nio", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-nio.git", + "state" : { + "revision" : "dca6594f65308c761a9c409e09fbf35f48d50d34", + "version" : "2.77.0" + } + }, + { + "identity" : "swift-nio-extras", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-nio-extras.git", + "state" : { + "revision" : "2e9746cfc57554f70b650b021b6ae4738abef3e6", + "version" : "1.24.1" + } + }, + { + "identity" : "swift-nio-http2", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-nio-http2.git", + "state" : { + "revision" : "eaa71bb6ae082eee5a07407b1ad0cbd8f48f9dca", + "version" : "1.34.1" + } + }, + { + "identity" : "swift-nio-ssl", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-nio-ssl.git", + "state" : { + "revision" : "c7e95421334b1068490b5d41314a50e70bab23d1", + "version" : "2.29.0" + } + }, + { + "identity" : "swift-nio-transport-services", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-nio-transport-services.git", + "state" : { + "revision" : "bbd5e63cf949b7db0c9edaf7a21e141c52afe214", + "version" : "1.23.0" + } + }, + { + "identity" : "swift-openapi-runtime", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-openapi-runtime", + "state" : { + "revision" : "a51b3bd6f2151e9a6f792ca6937a7242c4758768", + "version" : "0.3.6" + } + }, + { + "identity" : "swift-qrcode-generator", + "kind" : "remoteSourceControl", + "location" : "https://github.com/dagronf/swift-qrcode-generator", + "state" : { + "revision" : "5ca09b6a2ad190f94aa3d6ddef45b187f8c0343b", + "version" : "1.0.3" + } + }, + { + "identity" : "swift-system", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-system.git", + "state" : { + "revision" : "c8a44d836fe7913603e246acab7c528c2e780168", + "version" : "1.4.0" + } + }, + { + "identity" : "swiftimagereadwrite", + "kind" : "remoteSourceControl", + "location" : "https://github.com/dagronf/SwiftImageReadWrite", + "state" : { + "revision" : "5596407d1cf61b953b8e658fa8636a471df3c509", + "version" : "1.1.6" + } + }, + { + "identity" : "swiftybeaver", + "kind" : "remoteSourceControl", + "location" : "https://github.com/SwiftyBeaver/SwiftyBeaver.git", + "state" : { + "revision" : "8cba041db09596183331d123f337d0eb2e6e8e91", + "version" : "2.1.1" + } + }, + { + "identity" : "swime", + "kind" : "remoteSourceControl", + "location" : "https://github.com/sendyhalim/Swime", + "state" : { + "revision" : "4e538834483059ceefaaad8cdb3abe0d7d1c5146", + "version" : "3.1.0" + } + }, + { + "identity" : "ton-api-swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/DRadmir/ton-api-swift.git", + "state" : { + "revision" : "8ddff19a40d3d00503cab7fb9d9eb77459169488", + "version" : "0.5.0" + } + }, + { + "identity" : "ton-swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/DRadmir/ton-swift", + "state" : { + "branch" : "main", + "revision" : "73c9894e2be8d6d16b87853342eb2755d2e4be8a" + } + }, + { + "identity" : "tweetnacl-swiftwrap", + "kind" : "remoteSourceControl", + "location" : "https://github.com/bitmark-inc/tweetnacl-swiftwrap", + "state" : { + "revision" : "f8fd111642bf2336b11ef9ea828510693106e954", + "version" : "1.1.0" + } + }, + { + "identity" : "walletconnectswiftv2", + "kind" : "remoteSourceControl", + "location" : "https://github.com/WalletConnect/WalletConnectSwiftV2", + "state" : { + "revision" : "58d2b49eeac5cf94432e2647b9107577c156a25c", + "version" : "1.9.9" + } + }, + { + "identity" : "web3.swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/bnsports/Web3.swift.git", + "state" : { + "revision" : "a526779488e5fe2fa993d9614f11f57b00cc1858", + "version" : "7.7.7" + } + }, + { + "identity" : "websocket-kit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/vapor/websocket-kit", + "state" : { + "revision" : "4232d34efa49f633ba61afde365d3896fc7f8740", + "version" : "2.15.0" + } + }, + { + "identity" : "xxhash-swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/daisuke-t-jp/xxHash-Swift", + "state" : { + "revision" : "e86a07ab4867f81481d430e1370a5ec97b6e3359", + "version" : "1.1.1" + } + } + ], + "version" : 3 } From 66bd990e918b80b395f87fa60915c89367ae46e1 Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Fri, 17 Jan 2025 18:46:56 +0700 Subject: [PATCH 136/156] revert RuntimeProviderPool actor --- .../RuntimeProviderPool/RuntimeProviderPool.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fearless/Common/Services/ChainRegistry/RuntimeProviderPool/RuntimeProviderPool.swift b/fearless/Common/Services/ChainRegistry/RuntimeProviderPool/RuntimeProviderPool.swift index 356461c316..7efa107e8e 100644 --- a/fearless/Common/Services/ChainRegistry/RuntimeProviderPool/RuntimeProviderPool.swift +++ b/fearless/Common/Services/ChainRegistry/RuntimeProviderPool/RuntimeProviderPool.swift @@ -18,7 +18,7 @@ protocol RuntimeProviderPoolProtocol { func getRuntimeProvider(for chainId: ChainModel.Id) -> RuntimeProviderProtocol? } -final actor RuntimeProviderPool { +final class RuntimeProviderPool { private let runtimeProviderFactory: RuntimeProviderFactoryProtocol private var usedRuntimeModules = UsedRuntimePaths() @@ -35,7 +35,7 @@ final actor RuntimeProviderPool { } } -extension RuntimeProviderPool: @preconcurrency RuntimeProviderPoolProtocol { +extension RuntimeProviderPool: RuntimeProviderPoolProtocol { @discardableResult func setupHotRuntimeProvider( for chain: ChainModel, From 227f6f13ed8e085d487771044a5da100e968e099 Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Mon, 20 Jan 2025 15:03:40 +0700 Subject: [PATCH 137/156] revert actors functionality --- .../xcshareddata/swiftpm/Package.resolved | 21 ++-- .../WalletBalanceSubscriptionAdapter.swift | 108 ++++++++---------- .../ChainRegistry/ChainRegistry.swift | 16 +-- .../RuntimeProviderPool.swift | 22 ++-- .../SnapshotHotBootBuilder.swift | 13 +-- fearless/Common/Services/PricesService.swift | 3 + 6 files changed, 81 insertions(+), 102 deletions(-) diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 5dda9417d7..754a02843e 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,5 +1,4 @@ { - "originHash" : "db3e9f7067135f4497b6059ac444951778a2f8ca758335577305759626739473", "pins" : [ { "identity" : "appauth-ios", @@ -136,15 +135,6 @@ "version" : "0.1.7" } }, - { - "identity" : "shared-features-spm", - "kind" : "remoteSourceControl", - "location" : "https://github.com/soramitsu/shared-features-spm.git", - "state" : { - "branch" : "FW-new-ecosystem", - "revision" : "6ad1f937cd2b77f1e6298de53c86108fcef84774" - } - }, { "identity" : "swift-atomics", "kind" : "remoteSourceControl", @@ -244,6 +234,15 @@ "version" : "1.4.0" } }, + { + "identity" : "swiftformat", + "kind" : "remoteSourceControl", + "location" : "https://github.com/nicklockwood/SwiftFormat", + "state" : { + "revision" : "4e92b81311f528cfdca8015d629c650d0aff94ce", + "version" : "0.55.4" + } + }, { "identity" : "swiftimagereadwrite", "kind" : "remoteSourceControl", @@ -335,5 +334,5 @@ } } ], - "version" : 3 + "version" : 2 } diff --git a/fearless/ApplicationLayer/Services/Balance/WalletBalanceSubscription/WalletBalanceSubscriptionAdapter.swift b/fearless/ApplicationLayer/Services/Balance/WalletBalanceSubscription/WalletBalanceSubscriptionAdapter.swift index f5d9cce6c9..ef84d27ce8 100644 --- a/fearless/ApplicationLayer/Services/Balance/WalletBalanceSubscription/WalletBalanceSubscriptionAdapter.swift +++ b/fearless/ApplicationLayer/Services/Balance/WalletBalanceSubscription/WalletBalanceSubscriptionAdapter.swift @@ -59,7 +59,7 @@ enum WalletBalanceListenerType { case networkManagement(wallet: MetaAccountModel) } -final actor WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterProtocol, ChainAssetListBuilder { +final class WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterProtocol, ChainAssetListBuilder { static let shared = createWalletBalanceAdapter() // MARK: - Private properties @@ -332,16 +332,13 @@ final actor WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterPr listener: WalletBalanceSubscriptionListener, result: WalletBalancesResult ) { - Task { - await clearIfNeeded() - listener.handle(result: result) - } + clearIfNeeded() + listener.handle(result: result) } private func buildAndNotifyIfNeeded(with updatedWalletsIds: [MetaAccountId], updatedChainAssets: [ChainAsset]) { - Task { - await clearIfNeeded() - } + clearIfNeeded() + let unwrappedListeners = listeners.compactMap { if let target = $0.target as? WalletBalanceSubscriptionListener { return target @@ -391,8 +388,14 @@ final actor WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterPr } } - private func clearIfNeeded() async { - listeners = listeners.filter { $0.target != nil } + private func clearIfNeeded() { + listenersLock.exclusivelyWrite { [weak self] in + guard let strongSelf = self else { + return + } + + strongSelf.listeners = strongSelf.listeners.filter { $0.target != nil } + } } private func updateWalletsIfNeeded(with wallet: MetaAccountModel) { @@ -413,66 +416,55 @@ final actor WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterPr // MARK: - EventVisitorProtocol extension WalletBalanceSubscriptionAdapter: EventVisitorProtocol { - nonisolated func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { - Task { - var wallets = await self.wallets - if let index = wallets.firstIndex(where: { $0.metaId == event.account.metaId }), - let wallet = wallets[safe: index] { - if wallet.selectedCurrency != event.account.selectedCurrency { - wallets[index] = event.account - } - if wallet.networkManagmentFilter != event.account.networkManagmentFilter { - wallets[index] = event.account - await buildAndNotifyIfNeeded(with: [wallet.metaId], updatedChainAssets: chainAssets) - } + func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { + if let index = wallets.firstIndex(where: { $0.metaId == event.account.metaId }), + let wallet = wallets[safe: index] { + if wallet.selectedCurrency != event.account.selectedCurrency { + wallets[index] = event.account + } + if wallet.networkManagmentFilter != event.account.networkManagmentFilter { wallets[index] = event.account - - await saveWallets(wallets) + buildAndNotifyIfNeeded(with: [wallet.metaId], updatedChainAssets: chainAssets) } + wallets[index] = event.account } } - nonisolated func processSelectedAccountChanged(event: SelectedAccountChanged) { - Task { - let existingWalletsIds = await wallets.compactMap { $0.metaId } - guard !existingWalletsIds.contains(event.account.metaId) else { - return - } - await handle([event.account], chainAssets) + func processSelectedAccountChanged(event: SelectedAccountChanged) { + let existingWalletsIds = wallets.compactMap { $0.metaId } + guard !existingWalletsIds.contains(event.account.metaId) else { + return } + handle([event.account], chainAssets) } - nonisolated func processLogout() { - Task { - await saveWallets([]) - await accountInfosAdapters.values.forEach { adapter in - adapter.reset() - } - await saveAccountInfoAdapters([:]) + func processLogout() { + wallets = [] + accountInfosAdapters.values.forEach { adapter in + adapter.reset() } + accountInfosAdapters = [:] } - nonisolated func processChainSyncDidComplete(event _: ChainSyncDidComplete) { + func processChainSyncDidComplete(event _: ChainSyncDidComplete) { Task { let chainAssets = try await chainAssetFetcher.fetchAwait( shouldUseCache: false, filters: [.enabledChains], sortDescriptors: [] ) - await subscribeToAccountInfo(for: wallets, chainAssets) + subscribeToAccountInfo(for: wallets, chainAssets) } } - nonisolated func processPricesUpdated() { + func processPricesUpdated() { Task { - let chainAssets = try await chainAssetFetcher.fetchAwait( + self.chainAssets = try await chainAssetFetcher.fetchAwait( shouldUseCache: false, filters: [.enabledChains], sortDescriptors: [] ) - - await saveChainAssets(chainAssets) - await buildAndNotifyIfNeeded(with: wallets.map { $0.metaId }, updatedChainAssets: chainAssets) + buildAndNotifyIfNeeded(with: wallets.map { $0.metaId }, updatedChainAssets: chainAssets) } } } @@ -480,33 +472,29 @@ extension WalletBalanceSubscriptionAdapter: EventVisitorProtocol { // MARK: - AccountInfoSubscriptionAdapterHandler extension WalletBalanceSubscriptionAdapter: AccountInfoSubscriptionAdapterHandler { - nonisolated func handleAccountInfo(result: Result, accountId: AccountId, chainAsset: ChainAsset) { + func handleAccountInfo(result: Result, accountId: AccountId, chainAsset: ChainAsset) { switch result { case let .success(accountInfo): - Task { + accountInfoWorkQueue.async(flags: .barrier) { let key = chainAsset.uniqueKey(accountId: accountId) - let previousAccountInfo = await self.accountInfos[key] ?? nil + let previousAccountInfo = self.accountInfos[key] ?? nil - var accountInfos = await self.accountInfos - accountInfos[chainAsset.uniqueKey(accountId: accountId)] = accountInfo - await saveAccountInfos(accountInfos: accountInfos) + self.accountInfos[chainAsset.uniqueKey(accountId: accountId)] = accountInfo let bothNil = (previousAccountInfo == nil && accountInfo == nil) guard previousAccountInfo != accountInfo, !bothNil else { return } - await self.buildAndNotifyIfNeeded(with: self.wallets.map { $0.metaId }, updatedChainAssets: self.chainAssets) + self.buildAndNotifyIfNeeded(with: self.wallets.map { $0.metaId }, updatedChainAssets: self.chainAssets) } case let .failure(error): - Task { - await logger.error(""" - WalletBalanceFetcher error: \(error.localizedDescription) - account: \(accountId), - chainAsset: \(chainAsset.debugName) - """ - ) - } + logger.error(""" + WalletBalanceFetcher error: \(error.localizedDescription) + account: \(accountId), + chainAsset: \(chainAsset.debugName) + """ + ) } } } diff --git a/fearless/Common/Services/ChainRegistry/ChainRegistry.swift b/fearless/Common/Services/ChainRegistry/ChainRegistry.swift index c103d736ee..926b9f7066 100644 --- a/fearless/Common/Services/ChainRegistry/ChainRegistry.swift +++ b/fearless/Common/Services/ChainRegistry/ChainRegistry.swift @@ -196,9 +196,7 @@ final class ChainRegistry { } let chainTypes = chainsTypesMap[newChain.chainId] - Task { - await runtimeProviderPool.setupRuntimeProvider(for: newChain, chainTypes: chainTypes) - } + runtimeProviderPool.setupRuntimeProvider(for: newChain, chainTypes: chainTypes) let connection = try substrateConnectionPool.setupConnection(for: newChain) runtimeSyncService.register(chain: newChain, with: connection) @@ -215,9 +213,7 @@ final class ChainRegistry { clearRuntimeSubscription(for: updatedChain.chainId) let chainTypes = chainsTypesMap[updatedChain.chainId] - Task { - await runtimeProviderPool.setupRuntimeProvider(for: updatedChain, chainTypes: chainTypes) - } + runtimeProviderPool.setupRuntimeProvider(for: updatedChain, chainTypes: chainTypes) let connection = try substrateConnectionPool.setupConnection(for: updatedChain) setupRuntimeVersionSubscription(for: updatedChain, connection: connection) @@ -227,9 +223,7 @@ final class ChainRegistry { } private func handleDeletedSubstrateChain(chainId: ChainModel.Id) { - Task { - await runtimeProviderPool.destroyRuntimeProvider(for: chainId) - } + runtimeProviderPool.destroyRuntimeProvider(for: chainId) clearRuntimeSubscription(for: chainId) runtimeSyncService.unregister(chainId: chainId) chains = chains.filter { $0.chainId != chainId } @@ -496,7 +490,7 @@ extension ChainRegistry: SSFChainRegistry.ChainRegistryProtocol { } let chainTypes = chainsTypesMap[chainId] - let runtimeProvider = await runtimeProviderPool.setupRuntimeProvider(for: chain, chainTypes: chainTypes) + let runtimeProvider = runtimeProviderPool.setupRuntimeProvider(for: chain, chainTypes: chainTypes) return runtimeProvider } @@ -536,7 +530,7 @@ extension ChainRegistry: SSFChainRegistry.ChainRegistryProtocol { usedRuntimePaths _: [String: [String]], runtimeItem _: SSFModels.RuntimeMetadataItemProtocol? ) async throws -> SSFRuntimeCodingService.RuntimeSnapshot { - guard let runtimeProvider = await getRuntimeProvider(for: chainId) else { + guard let runtimeProvider = getRuntimeProvider(for: chainId) else { throw RuntimeProviderError.providerUnavailable } guard let runtimeSnapshot = runtimeProvider.snapshot else { diff --git a/fearless/Common/Services/ChainRegistry/RuntimeProviderPool/RuntimeProviderPool.swift b/fearless/Common/Services/ChainRegistry/RuntimeProviderPool/RuntimeProviderPool.swift index 7efa107e8e..cc14c6c466 100644 --- a/fearless/Common/Services/ChainRegistry/RuntimeProviderPool/RuntimeProviderPool.swift +++ b/fearless/Common/Services/ChainRegistry/RuntimeProviderPool/RuntimeProviderPool.swift @@ -7,14 +7,14 @@ protocol RuntimeProviderPoolProtocol { func setupRuntimeProvider( for chain: ChainModel, chainTypes: Data? - ) async -> RuntimeProviderProtocol + ) -> RuntimeProviderProtocol @discardableResult func setupHotRuntimeProvider( for chain: ChainModel, runtimeItem: RuntimeMetadataItem, chainTypes: Data - ) async -> RuntimeProviderProtocol - func destroyRuntimeProvider(for chainId: ChainModel.Id) async + ) -> RuntimeProviderProtocol + func destroyRuntimeProvider(for chainId: ChainModel.Id) func getRuntimeProvider(for chainId: ChainModel.Id) -> RuntimeProviderProtocol? } @@ -29,10 +29,6 @@ final class RuntimeProviderPool { init(runtimeProviderFactory: RuntimeProviderFactoryProtocol) { self.runtimeProviderFactory = runtimeProviderFactory } - - private func saveRuntimeProvider(provider: RuntimeProviderProtocol?, for chainId: ChainModel.Id) async { - runtimeProviders[chainId] = provider - } } extension RuntimeProviderPool: RuntimeProviderPoolProtocol { @@ -49,8 +45,8 @@ extension RuntimeProviderPool: RuntimeProviderPoolProtocol { usedRuntimePaths: usedRuntimeModules.usedRuntimePaths ) - Task { - await saveRuntimeProvider(provider: runtimeProvider, for: chain.chainId) + lock.exclusivelyWrite { [weak self] in + self?.runtimeProviders[chain.chainId] = runtimeProvider } runtimeProvider.setupHot() @@ -72,8 +68,8 @@ extension RuntimeProviderPool: RuntimeProviderPoolProtocol { usedRuntimePaths: usedRuntimeModules.usedRuntimePaths ) - Task { - await saveRuntimeProvider(provider: runtimeProvider, for: chain.chainId) + lock.exclusivelyWrite { [weak self] in + self?.runtimeProviders[chain.chainId] = runtimeProvider } runtimeProvider.setup() @@ -85,8 +81,8 @@ extension RuntimeProviderPool: RuntimeProviderPoolProtocol { let runtimeProvider = lock.concurrentlyRead { runtimeProviders[chainId] } runtimeProvider?.cleanup() - Task { - await saveRuntimeProvider(provider: nil, for: chainId) + lock.exclusivelyWrite { [weak self] in + self?.runtimeProviders[chainId] = nil } } diff --git a/fearless/Common/Services/ChainRegistry/RuntimeProviderPool/SnapshotHotBootBuilder.swift b/fearless/Common/Services/ChainRegistry/RuntimeProviderPool/SnapshotHotBootBuilder.swift index f9c5875990..4536cc6dbc 100644 --- a/fearless/Common/Services/ChainRegistry/RuntimeProviderPool/SnapshotHotBootBuilder.swift +++ b/fearless/Common/Services/ChainRegistry/RuntimeProviderPool/SnapshotHotBootBuilder.swift @@ -99,13 +99,12 @@ final class SnapshotHotBootBuilder: SnapshotHotBootBuilderProtocol { else { return } - Task { - await runtimeProviderPool.setupHotRuntimeProvider( - for: chain, - runtimeItem: runtimeItem, - chainTypes: chainTypes - ) - } + + runtimeProviderPool.setupHotRuntimeProvider( + for: chain, + runtimeItem: runtimeItem, + chainTypes: chainTypes + ) } } diff --git a/fearless/Common/Services/PricesService.swift b/fearless/Common/Services/PricesService.swift index 05be1ec182..6450687932 100644 --- a/fearless/Common/Services/PricesService.swift +++ b/fearless/Common/Services/PricesService.swift @@ -32,6 +32,9 @@ final class PricesService: PricesServiceProtocol { self.operationQueue = operationQueue self.logger = logger self.eventCenter = eventCenter + eventCenter.add(observer: self) + + subscribe() } func setup() { From 6534968b5bc2aa44b926edc11fe112d40ad3e72e Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Mon, 20 Jan 2025 15:04:02 +0700 Subject: [PATCH 138/156] packages upd --- .../xcshareddata/swiftpm/Package.resolved | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 754a02843e..4ca7a69674 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,4 +1,5 @@ { + "originHash" : "db3e9f7067135f4497b6059ac444951778a2f8ca758335577305759626739473", "pins" : [ { "identity" : "appauth-ios", @@ -135,6 +136,15 @@ "version" : "0.1.7" } }, + { + "identity" : "shared-features-spm", + "kind" : "remoteSourceControl", + "location" : "https://github.com/soramitsu/shared-features-spm.git", + "state" : { + "branch" : "FW-new-ecosystem", + "revision" : "4007d7535b192069adac8693a800fab2a48afe97" + } + }, { "identity" : "swift-atomics", "kind" : "remoteSourceControl", @@ -234,15 +244,6 @@ "version" : "1.4.0" } }, - { - "identity" : "swiftformat", - "kind" : "remoteSourceControl", - "location" : "https://github.com/nicklockwood/SwiftFormat", - "state" : { - "revision" : "4e92b81311f528cfdca8015d629c650d0aff94ce", - "version" : "0.55.4" - } - }, { "identity" : "swiftimagereadwrite", "kind" : "remoteSourceControl", @@ -334,5 +335,5 @@ } } ], - "version" : 2 + "version" : 3 } From ac275acde515802f21756889c55536e7cf7d0a14 Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Tue, 21 Jan 2025 15:05:16 +0700 Subject: [PATCH 139/156] loading balance locks fix sora subquery transfers parsing fix --- fearless.xcodeproj/project.pbxproj | 2 + .../xcshareddata/swiftpm/Package.resolved | 21 +++--- .../Balance/BalanceLocksFetching.swift | 68 ++++++++++++++++--- ...tTransactionData+SoraSubsquidHistory.swift | 2 +- .../ChainAccount/ChainAccountInteractor.swift | 6 ++ 5 files changed, 77 insertions(+), 22 deletions(-) diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index d46be668f2..e3d9f65f64 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -5827,6 +5827,7 @@ FA6ECE732BF49C0C00481B2B /* LiquidityPoolDetailsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsViewModel.swift; sourceTree = ""; }; FA6ECE752BF49D3D00481B2B /* LiquidityPoolDetailsViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsViewModelFactory.swift; sourceTree = ""; }; FA6FC016067C632AF256EB62 /* PolkaswapSwapConfirmationProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapSwapConfirmationProtocols.swift; sourceTree = ""; }; + FA70B23F2D3F8BD800571D30 /* shared-features-spm */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = "shared-features-spm"; path = "../shared-features-spm"; sourceTree = SOURCE_ROOT; }; FA7154C3286B0C7D00100672 /* SelectValidatorsStartTextsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartTextsViewModel.swift; sourceTree = ""; }; FA7253F32AC2E48400EC47A6 /* CryptoProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CryptoProvider.swift; sourceTree = ""; }; FA7253F42AC2E48400EC47A6 /* WalletConnectPayloadSigner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletConnectPayloadSigner.swift; sourceTree = ""; }; @@ -9937,6 +9938,7 @@ 8490139F24A80984008F705E = { isa = PBXGroup; children = ( + FA70B23F2D3F8BD800571D30 /* shared-features-spm */, 849013AA24A80984008F705E /* fearless */, 849013C124A80986008F705E /* fearlessTests */, 8438E1D024BFAAD2001BDB13 /* fearlessIntegrationTests */, diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 4ca7a69674..424f317e2a 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,5 +1,4 @@ { - "originHash" : "db3e9f7067135f4497b6059ac444951778a2f8ca758335577305759626739473", "pins" : [ { "identity" : "appauth-ios", @@ -136,15 +135,6 @@ "version" : "0.1.7" } }, - { - "identity" : "shared-features-spm", - "kind" : "remoteSourceControl", - "location" : "https://github.com/soramitsu/shared-features-spm.git", - "state" : { - "branch" : "FW-new-ecosystem", - "revision" : "4007d7535b192069adac8693a800fab2a48afe97" - } - }, { "identity" : "swift-atomics", "kind" : "remoteSourceControl", @@ -244,6 +234,15 @@ "version" : "1.4.0" } }, + { + "identity" : "swiftformat", + "kind" : "remoteSourceControl", + "location" : "https://github.com/nicklockwood/SwiftFormat", + "state" : { + "revision" : "468a7d32dedc8d352c191594b3b45d9fd8ba291b", + "version" : "0.55.5" + } + }, { "identity" : "swiftimagereadwrite", "kind" : "remoteSourceControl", @@ -335,5 +334,5 @@ } } ], - "version" : 3 + "version" : 2 } diff --git a/fearless/ApplicationLayer/Services/Balance/BalanceLocksFetching.swift b/fearless/ApplicationLayer/Services/Balance/BalanceLocksFetching.swift index 96bf7158c3..8c6ee59221 100644 --- a/fearless/ApplicationLayer/Services/Balance/BalanceLocksFetching.swift +++ b/fearless/ApplicationLayer/Services/Balance/BalanceLocksFetching.swift @@ -11,6 +11,7 @@ enum BalanceLocksFetchingError: Error { case noDataFound case noVestingLocksFound case noAssetFrozenFound + case timeout } protocol BalanceLocksFetching { @@ -93,19 +94,66 @@ extension BalanceLocksFetchingDefault: BalanceLocksFetching { async let crowdloanLocks = fetchCrowdloanLocks(for: accountId) async let vestingLocks = fetchVestingLocks(for: accountId, currencyId: currencyId) - let values = await [ - (try? stakingLocks), - (try? nominationPoolLocks), - (try? governanceLocks), - (try? crowdloanLocks), - (try? vestingLocks) - ].compactMap { $0 } + var stakingLocksValue: Decimal? + var nominationPoolLocksValue: Decimal? + var governanceLocksValue: Decimal? + var crowdloanLocksValue: Decimal? + var vestingLocksValue: Decimal? - guard values.first != nil else { - throw BalanceLocksFetchingError.noDataFound + var errors: [Error] = [] + + do { + if chainAsset.asset.staking == nil { + stakingLocksValue = 0 + } else { + stakingLocksValue = try await stakingLocks + } + } catch { + errors.append(error) } - return values.reduce(0, +) + do { + if chainAsset.chain.options?.contains(.poolStaking) != true { + nominationPoolLocksValue = 0 + } else { + nominationPoolLocksValue = try await nominationPoolLocks + } + } catch { + errors.append(error) + } + + do { + if chainAsset.isUtility { + governanceLocksValue = try await governanceLocks + } else { + governanceLocksValue = 0 + } + } catch { + errors.append(error) + } + + do { + vestingLocksValue = try await vestingLocks + } catch { + errors.append(error) + } + + + let isTimeoutError: Bool = errors.first { $0 as? JSONRPCEngineError == JSONRPCEngineError.clientCancelled } != nil + + guard !isTimeoutError else { + throw BalanceLocksFetchingError.timeout + } + + + return [ + stakingLocksValue, + nominationPoolLocksValue, + governanceLocksValue, + crowdloanLocksValue, + vestingLocksValue + ].compactMap { $0 }.reduce(0, +) + } func fetchStakingLocks(for accountId: AccountId) async throws -> StakingLocks { diff --git a/fearless/Common/Extension/Wallet/AssetTransactionData+SoraSubsquidHistory.swift b/fearless/Common/Extension/Wallet/AssetTransactionData+SoraSubsquidHistory.swift index 5d7a5c8b40..00d9256f8d 100644 --- a/fearless/Common/Extension/Wallet/AssetTransactionData+SoraSubsquidHistory.swift +++ b/fearless/Common/Extension/Wallet/AssetTransactionData+SoraSubsquidHistory.swift @@ -33,7 +33,7 @@ extension AssetTransactionData { fee: transactionFee, status: status ) - case ("assets", "transfer"): + case (.some(_), "transfer"): return createTransferTransaction( from: item, address: address, diff --git a/fearless/Modules/NewWallet/ChainAccount/ChainAccountInteractor.swift b/fearless/Modules/NewWallet/ChainAccount/ChainAccountInteractor.swift index ab6b9ccd72..d164e255b7 100644 --- a/fearless/Modules/NewWallet/ChainAccount/ChainAccountInteractor.swift +++ b/fearless/Modules/NewWallet/ChainAccount/ChainAccountInteractor.swift @@ -108,6 +108,12 @@ final class ChainAccountInteractor { } private func fetchBalanceLocks() { + guard chainAsset.chain.ecosystem == .substrate else { + presenter?.didReceiveBalanceLocks(.zero) + presenter?.didReceiveAssetFrozen(.zero) + return + } + guard let balanceLocksFetcher = currentDependencies?.balanceLocksFetcher, let accountId = wallet.fetch(for: chainAsset.chain.accountRequest())?.accountId From 7bb1b97555c47f5d6924718ec7a5aa5c694c3462 Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Tue, 21 Jan 2025 18:12:55 +0700 Subject: [PATCH 140/156] crowdloan locks added packages update --- fearless.xcodeproj/project.pbxproj | 2 -- .../xcshareddata/swiftpm/Package.resolved | 21 ++++++++++--------- .../Balance/BalanceLocksFetching.swift | 10 +++++++++ 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index e3d9f65f64..d46be668f2 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -5827,7 +5827,6 @@ FA6ECE732BF49C0C00481B2B /* LiquidityPoolDetailsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsViewModel.swift; sourceTree = ""; }; FA6ECE752BF49D3D00481B2B /* LiquidityPoolDetailsViewModelFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiquidityPoolDetailsViewModelFactory.swift; sourceTree = ""; }; FA6FC016067C632AF256EB62 /* PolkaswapSwapConfirmationProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapSwapConfirmationProtocols.swift; sourceTree = ""; }; - FA70B23F2D3F8BD800571D30 /* shared-features-spm */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = "shared-features-spm"; path = "../shared-features-spm"; sourceTree = SOURCE_ROOT; }; FA7154C3286B0C7D00100672 /* SelectValidatorsStartTextsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartTextsViewModel.swift; sourceTree = ""; }; FA7253F32AC2E48400EC47A6 /* CryptoProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CryptoProvider.swift; sourceTree = ""; }; FA7253F42AC2E48400EC47A6 /* WalletConnectPayloadSigner.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletConnectPayloadSigner.swift; sourceTree = ""; }; @@ -9938,7 +9937,6 @@ 8490139F24A80984008F705E = { isa = PBXGroup; children = ( - FA70B23F2D3F8BD800571D30 /* shared-features-spm */, 849013AA24A80984008F705E /* fearless */, 849013C124A80986008F705E /* fearlessTests */, 8438E1D024BFAAD2001BDB13 /* fearlessIntegrationTests */, diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 424f317e2a..64dc0b30a1 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,4 +1,5 @@ { + "originHash" : "db3e9f7067135f4497b6059ac444951778a2f8ca758335577305759626739473", "pins" : [ { "identity" : "appauth-ios", @@ -135,6 +136,15 @@ "version" : "0.1.7" } }, + { + "identity" : "shared-features-spm", + "kind" : "remoteSourceControl", + "location" : "https://github.com/soramitsu/shared-features-spm.git", + "state" : { + "branch" : "FW-new-ecosystem", + "revision" : "7405961791674ec6fb2df6cbf6053d5a71ec42c3" + } + }, { "identity" : "swift-atomics", "kind" : "remoteSourceControl", @@ -234,15 +244,6 @@ "version" : "1.4.0" } }, - { - "identity" : "swiftformat", - "kind" : "remoteSourceControl", - "location" : "https://github.com/nicklockwood/SwiftFormat", - "state" : { - "revision" : "468a7d32dedc8d352c191594b3b45d9fd8ba291b", - "version" : "0.55.5" - } - }, { "identity" : "swiftimagereadwrite", "kind" : "remoteSourceControl", @@ -334,5 +335,5 @@ } } ], - "version" : 2 + "version" : 3 } diff --git a/fearless/ApplicationLayer/Services/Balance/BalanceLocksFetching.swift b/fearless/ApplicationLayer/Services/Balance/BalanceLocksFetching.swift index 8c6ee59221..b3c8d6a396 100644 --- a/fearless/ApplicationLayer/Services/Balance/BalanceLocksFetching.swift +++ b/fearless/ApplicationLayer/Services/Balance/BalanceLocksFetching.swift @@ -138,6 +138,16 @@ extension BalanceLocksFetchingDefault: BalanceLocksFetching { errors.append(error) } + do { + if chainAsset.isUtility { + crowdloanLocksValue = try await crowdloanLocks + } else { + crowdloanLocksValue = 0 + } + } catch { + errors.append(error) + } + let isTimeoutError: Bool = errors.first { $0 as? JSONRPCEngineError == JSONRPCEngineError.clientCancelled } != nil From 05c6dcd24296d8bbf6e77f0aa69d00cf721a9f8f Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Tue, 28 Jan 2025 14:27:01 +0700 Subject: [PATCH 141/156] minor bug fixes --- fearless.xcodeproj/project.pbxproj | 14 +-- .../WalletBalanceSubscriptionAdapter.swift | 28 ++--- .../RuntimeProviderPool.swift | 4 +- .../PayoutValidatorsFactoryProtocol.swift | 2 + ...ryPayoutValidatorForNominatorFactory.swift | 106 ++++++++++++++++++ fearless/Common/Services/PricesService.swift | 5 +- fearless/Common/View/SearchTextField.swift | 1 + .../SoraSubqueryHistoryOperationFactory.swift | 37 +++--- .../ConnectedAccountsAssembly.swift | 6 +- .../ChainAccount/ChainAccountPresenter.swift | 4 +- .../Modules/Profile/ProfileWireframe.swift | 2 +- fearless/Modules/Root/RootInteractor.swift | 7 +- .../Modules/Root/RootPresenterFactory.swift | 3 +- .../SendDataValidatingFactory.swift | 2 +- .../WalletOption/WalletOptionPresenter.swift | 3 +- .../WalletOption/WalletOptionProtocols.swift | 3 +- .../WalletOption/WalletOptionRouter.swift | 2 +- .../WalletOptionViewController.swift | 5 +- .../WalletOption/WalletOptionViewLayout.swift | 1 + 19 files changed, 179 insertions(+), 56 deletions(-) create mode 100644 fearless/Common/Services/PayoutRewardsService/SoraSubqueryPayoutValidatorForNominatorFactory.swift diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index d46be668f2..fedd2e573d 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -2805,6 +2805,7 @@ FAA086D4284759D000CC2F33 /* ParachainStakingCollatorSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAA086D3284759D000CC2F33 /* ParachainStakingCollatorSnapshot.swift */; }; FAA086D628475AF300CC2F33 /* ParachainStakingDelegatorState.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAA086D528475AF300CC2F33 /* ParachainStakingDelegatorState.swift */; }; FAA086D82848AB8600CC2F33 /* YourRewardDestinationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAA086D72848AB8600CC2F33 /* YourRewardDestinationViewModel.swift */; }; + FAA92BB22D4356C5004EA8F7 /* SoraSubqueryPayoutValidatorForNominatorFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAA92BB12D4356BC004EA8F7 /* SoraSubqueryPayoutValidatorForNominatorFactory.swift */; }; FAA9BC412B8F17BA00A875BF /* Collection+Average.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAA9BC402B8F17BA00A875BF /* Collection+Average.swift */; }; FAAA29092B8C77AF0089AFE6 /* ReefRewardCalculatorService.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA29082B8C77AF0089AFE6 /* ReefRewardCalculatorService.swift */; }; FAAA290B2B8C77B80089AFE6 /* ReefRewardCalculatorEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAAA290A2B8C77B80089AFE6 /* ReefRewardCalculatorEngine.swift */; }; @@ -4493,13 +4494,8 @@ 849ABE48262763BB00011A2A /* Longrun.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Longrun.swift; sourceTree = ""; }; 849ABE552627738900011A2A /* Mapping.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Mapping.swift; sourceTree = ""; }; 849ABE5A2627739400011A2A /* ListReducing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListReducing.swift; sourceTree = ""; }; - 849ABE62262785F200011A2A /* ControllerMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ControllerMapper.swift; sourceTree = ""; }; 849ABE6726278A4100011A2A /* NominateMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NominateMapper.swift; sourceTree = ""; }; 849ABE6C2627949E00011A2A /* BatchMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BatchMapper.swift; sourceTree = ""; }; - 849ABE7126280F3800011A2A /* ControllersReducer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ControllersReducer.swift; sourceTree = ""; }; - 849ABE762628103200011A2A /* ControllersListReducer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ControllersListReducer.swift; sourceTree = ""; }; - 849ABE7B2628116F00011A2A /* NominationsReducer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NominationsReducer.swift; sourceTree = ""; }; - 849ABE80262811CF00011A2A /* NominationsListReducer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NominationsListReducer.swift; sourceTree = ""; }; 849ABE852628154900011A2A /* SubscanRawExtrinsicData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscanRawExtrinsicData.swift; sourceTree = ""; }; 849DEBD325ED015C00C64C19 /* SelectValidatorsConfirmViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsConfirmViewModel.swift; sourceTree = ""; }; 849DEC5825ED756F00C64C19 /* SubstrateCallFactoryDefault.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubstrateCallFactoryDefault.swift; sourceTree = ""; }; @@ -6110,6 +6106,7 @@ FAA086D3284759D000CC2F33 /* ParachainStakingCollatorSnapshot.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParachainStakingCollatorSnapshot.swift; sourceTree = ""; }; FAA086D528475AF300CC2F33 /* ParachainStakingDelegatorState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParachainStakingDelegatorState.swift; sourceTree = ""; }; FAA086D72848AB8600CC2F33 /* YourRewardDestinationViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YourRewardDestinationViewModel.swift; sourceTree = ""; }; + FAA92BB12D4356BC004EA8F7 /* SoraSubqueryPayoutValidatorForNominatorFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoraSubqueryPayoutValidatorForNominatorFactory.swift; sourceTree = ""; }; FAA9BC402B8F17BA00A875BF /* Collection+Average.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Collection+Average.swift"; sourceTree = ""; }; FAAA29082B8C77AF0089AFE6 /* ReefRewardCalculatorService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReefRewardCalculatorService.swift; sourceTree = ""; }; FAAA290A2B8C77B80089AFE6 /* ReefRewardCalculatorEngine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReefRewardCalculatorEngine.swift; sourceTree = ""; }; @@ -13352,19 +13349,15 @@ F4DCAE4526207ECD00CCA6BF /* PayoutRewardsService */ = { isa = PBXGroup; children = ( + FAA92BB12D4356BC004EA8F7 /* SoraSubqueryPayoutValidatorForNominatorFactory.swift */, FA7D46CE2AF24A1B005D681B /* SoraSubsquidPayoutValidatorForNominatorFactory.swift */, FAFFAEAA29AC90E50074AF1F /* SubqueryPayoutValidatorsForNominatorFactory.swift */, FAFFAEA929AC90E50074AF1F /* SubsquidPayoutValidatorsForNominatorFactory.swift */, F4DCAE4626207EF900CCA6BF /* PayoutRewardsServiceProtocol.swift */, F4DCAE4E2620819000CCA6BF /* PayoutRewardsService.swift */, F44CD8F326242825005DDF23 /* PayoutRewardsService+Fetch.swift */, - 849ABE62262785F200011A2A /* ControllerMapper.swift */, 849ABE6726278A4100011A2A /* NominateMapper.swift */, 849ABE6C2627949E00011A2A /* BatchMapper.swift */, - 849ABE7126280F3800011A2A /* ControllersReducer.swift */, - 849ABE762628103200011A2A /* ControllersListReducer.swift */, - 849ABE7B2628116F00011A2A /* NominationsReducer.swift */, - 849ABE80262811CF00011A2A /* NominationsListReducer.swift */, 847119D4262EF95A00716580 /* PayoutInfoFactoryProtocol.swift */, 847119EA262EFF3800716580 /* ValidatorPayoutInfoFactory.swift */, 8490386A262E22DC0016D541 /* NominatorPayoutInfoFactory.swift */, @@ -18410,6 +18403,7 @@ 076D9D4A29419745002762E3 /* PolkaswapRemoteSubscriptionService.swift in Sources */, FA4B92B62844D0E60003BCEF /* SelectCurrencyViewLayout.swift in Sources */, FA072C21277B19A900731718 /* ImageGalleryProtocols.swift in Sources */, + FAA92BB22D4356C5004EA8F7 /* SoraSubqueryPayoutValidatorForNominatorFactory.swift in Sources */, 847119CD262EF61F00716580 /* PayoutValidatorForValidatorFactory.swift in Sources */, C6398F38287FE988008EF3BE /* StakingBondMoreViewModelFactory.swift in Sources */, FA176BB52851A96500258125 /* ParachainStakingRoundInfo.swift in Sources */, diff --git a/fearless/ApplicationLayer/Services/Balance/WalletBalanceSubscription/WalletBalanceSubscriptionAdapter.swift b/fearless/ApplicationLayer/Services/Balance/WalletBalanceSubscription/WalletBalanceSubscriptionAdapter.swift index ef84d27ce8..d2dce749a5 100644 --- a/fearless/ApplicationLayer/Services/Balance/WalletBalanceSubscription/WalletBalanceSubscriptionAdapter.swift +++ b/fearless/ApplicationLayer/Services/Balance/WalletBalanceSubscription/WalletBalanceSubscriptionAdapter.swift @@ -103,7 +103,7 @@ final class WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterPr eventCenter.add(observer: self) Task { - await fetchInitialData() + fetchInitialData() } } @@ -150,9 +150,9 @@ final class WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterPr await addListener(weakListener) } - await updateWalletsIfNeeded(with: wallet) - if let balances = await buildBalance(for: [wallet], chainAssets: chainAssets) { - await notify(listener: listener, result: .success(balances)) + updateWalletsIfNeeded(with: wallet) + if let balances = buildBalance(for: [wallet], chainAssets: chainAssets) { + notify(listener: listener, result: .success(balances)) } } } @@ -167,8 +167,8 @@ final class WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterPr Task { await addListener(weakListener) } - if let balances = await buildBalance(for: wallets, chainAssets: chainAssets) { - await notify(listener: listener, result: .success(balances)) + if let balances = buildBalance(for: wallets, chainAssets: chainAssets) { + notify(listener: listener, result: .success(balances)) } } } @@ -185,8 +185,8 @@ final class WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterPr Task { await addListener(weakListener) } - if let balances = await buildBalance(for: [wallet], chainAssets: [chainAsset]) { - await notify(listener: listener, result: .success(balances)) + if let balances = buildBalance(for: [wallet], chainAssets: [chainAsset]) { + notify(listener: listener, result: .success(balances)) } } } @@ -204,8 +204,8 @@ final class WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterPr await addListener(weakListener) } - if let balances = await buildBalance(for: [wallet], chainAssets: chainAssets) { - await notify(listener: listener, result: .success(balances)) + if let balances = buildBalance(for: [wallet], chainAssets: chainAssets) { + notify(listener: listener, result: .success(balances)) } } } @@ -221,16 +221,16 @@ final class WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterPr Task { await addListener(weakListener) } - await updateWalletsIfNeeded(with: wallet) - let selectedChainAssets = await filterChainAssets( + updateWalletsIfNeeded(with: wallet) + let selectedChainAssets = filterChainAssets( with: NetworkManagmentFilter(identifier: wallet.networkManagmentFilter), chainAssets: chainAssets, wallet: wallet, search: nil ) - if let balances = await buildBalance(for: [wallet], chainAssets: selectedChainAssets) { - await notify(listener: listener, result: .success(balances)) + if let balances = buildBalance(for: [wallet], chainAssets: selectedChainAssets) { + notify(listener: listener, result: .success(balances)) } } } diff --git a/fearless/Common/Services/ChainRegistry/RuntimeProviderPool/RuntimeProviderPool.swift b/fearless/Common/Services/ChainRegistry/RuntimeProviderPool/RuntimeProviderPool.swift index cc14c6c466..9cd036ec7f 100644 --- a/fearless/Common/Services/ChainRegistry/RuntimeProviderPool/RuntimeProviderPool.swift +++ b/fearless/Common/Services/ChainRegistry/RuntimeProviderPool/RuntimeProviderPool.swift @@ -87,6 +87,8 @@ extension RuntimeProviderPool: RuntimeProviderPoolProtocol { } func getRuntimeProvider(for chainId: ChainModel.Id) -> RuntimeProviderProtocol? { - runtimeProviders[chainId] + lock.concurrentlyRead { + runtimeProviders[chainId] + } } } diff --git a/fearless/Common/Services/PayoutRewardsService/PayoutValidatorsFactoryProtocol.swift b/fearless/Common/Services/PayoutRewardsService/PayoutValidatorsFactoryProtocol.swift index ba08a36cb1..4f4ff03e4e 100644 --- a/fearless/Common/Services/PayoutRewardsService/PayoutValidatorsFactoryProtocol.swift +++ b/fearless/Common/Services/PayoutRewardsService/PayoutValidatorsFactoryProtocol.swift @@ -17,6 +17,8 @@ enum PayoutValidatorsFactoryAssembly { return SubsquidPayoutValidatorsForNominatorFactory(url: blockExplorer.url, chainAsset: chainAsset) case .sora: return SoraSubsquidPayoutValidatorsForNominatorFactory(url: blockExplorer.url, chainAsset: chainAsset) + case .soraSubquery: + return SoraSubqueryPayoutValidatorsForNominatorFactory(url: blockExplorer.url, chainAsset: chainAsset) default: return SubsquidPayoutValidatorsForNominatorFactory(url: blockExplorer.url, chainAsset: chainAsset) } diff --git a/fearless/Common/Services/PayoutRewardsService/SoraSubqueryPayoutValidatorForNominatorFactory.swift b/fearless/Common/Services/PayoutRewardsService/SoraSubqueryPayoutValidatorForNominatorFactory.swift new file mode 100644 index 0000000000..a2e7cf4b7d --- /dev/null +++ b/fearless/Common/Services/PayoutRewardsService/SoraSubqueryPayoutValidatorForNominatorFactory.swift @@ -0,0 +1,106 @@ +import RobinHood +import Foundation +import SSFUtils +import IrohaCrypto +import SSFModels +import SSFCrypto + +final class SoraSubqueryPayoutValidatorsForNominatorFactory { + private let url: URL + private let chainAsset: ChainAsset + + init(url: URL, chainAsset: ChainAsset) { + self.url = url + self.chainAsset = chainAsset + } + + private func createRequestFactory( + address: AccountAddress, + historyRange: @escaping () -> EraRange? + ) -> NetworkRequestFactoryProtocol { + BlockNetworkRequestFactory { [weak self] in + guard let strongSelf = self else { + throw ConvenienceError(error: "factory unavailable") + } + + var request = URLRequest(url: strongSelf.url) + + let eraRange = historyRange() + let params = strongSelf.requestParams(accountAddress: address, eraRange: eraRange) + let info = JSON.dictionaryValue(["query": JSON.stringValue(params)]) + request.httpBody = try JSONEncoder().encode(info) + request.setValue( + HttpContentType.json.rawValue, + forHTTPHeaderField: HttpHeaderKey.contentType.rawValue + ) + request.httpMethod = HttpMethod.post.rawValue + return request + } + } + + private func createResultFactory() -> AnyNetworkResultFactory<[AccountId]> { + AnyNetworkResultFactory<[AccountId]> { [chainAsset] data in + guard + let resultData = try? JSONDecoder().decode(JSON.self, from: data), + let nodes = resultData.data?.stakingEraNominators?.nodes?.arrayValue + else { return [] } + let addresses = nodes.compactMap { $0.nominations } + .compactMap { $0.nodes } + .compactMap { $0.arrayValue?.first } + .compactMap { $0.validator } + .compactMap { $0.stakerId } + + return try addresses.compactMap { + guard let address = $0.stringValue else { + return nil + } + + return try AddressFactory.accountId(from: address, chain: chainAsset.chain) + } + } + } + + private func requestParams(accountAddress: AccountAddress, eraRange: EraRange?) -> String { + let eraFilter: String = eraRange.map { + "era: {index_gte: \($0.start), index_lte: \($0.end)}," + } ?? "" + + return """ + query MyQuery { + stakingEraNominators( + filter: { + and: { + \(eraFilter) + staker: { + id: {equalTo: "\(accountAddress)"} + } + } + } + ) { + nodes { + nominations { + nodes { + validator { + stakerId + } + } + } + } + } + } + """ + } +} + +extension SoraSubqueryPayoutValidatorsForNominatorFactory: PayoutValidatorsFactoryProtocol { + func createResolutionOperation( + for address: AccountAddress, + eraRangeClosure _: @escaping () throws -> EraRange? + ) -> CompoundOperationWrapper<[AccountId]> { + let requestFactory = createRequestFactory(address: address, historyRange: { nil }) + let resultFactory = createResultFactory() + + let networkOperation = NetworkOperation(requestFactory: requestFactory, resultFactory: resultFactory) + return CompoundOperationWrapper(targetOperation: networkOperation) + } +} diff --git a/fearless/Common/Services/PricesService.swift b/fearless/Common/Services/PricesService.swift index 6450687932..3753f869a2 100644 --- a/fearless/Common/Services/PricesService.swift +++ b/fearless/Common/Services/PricesService.swift @@ -33,8 +33,6 @@ final class PricesService: PricesServiceProtocol { self.logger = logger self.eventCenter = eventCenter eventCenter.add(observer: self) - - subscribe() } func setup() { @@ -93,6 +91,7 @@ extension PricesService: EventVisitorProtocol { let currency = event.account.selectedCurrency observePrices(for: chainAssets, currencies: [currency]) } + } private extension PricesService { @@ -143,7 +142,7 @@ private extension PricesService { } var updatedAssets: [AssetModel] = [] chain.chainAssets.forEach { chainAsset in - let assetPrices = prices.filter { $0.priceId == chainAsset.asset.priceId } + let assetPrices = prices.filter { $0.priceId == chainAsset.asset.priceId || $0.coingeckoPriceId == chainAsset.asset.coingeckoPriceId } let updatedAsset = chainAsset.asset.replacingPrice(assetPrices) updatedAssets.append(updatedAsset) } diff --git a/fearless/Common/View/SearchTextField.swift b/fearless/Common/View/SearchTextField.swift index 53bd6b2238..3501138fcc 100644 --- a/fearless/Common/View/SearchTextField.swift +++ b/fearless/Common/View/SearchTextField.swift @@ -12,6 +12,7 @@ class SearchTextField: BackgroundedContentControl { let textField: UITextField = { let textField = UITextField() textField.borderStyle = .none + textField.autocorrectionType = .no return textField }() diff --git a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SoraSubqueryHistoryOperationFactory.swift b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SoraSubqueryHistoryOperationFactory.swift index cf9cffbde5..fe3115829d 100644 --- a/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SoraSubqueryHistoryOperationFactory.swift +++ b/fearless/CoreLayer/OperationFactory/BlockExplorer/History/Main/SoraSubqueryHistoryOperationFactory.swift @@ -69,28 +69,37 @@ class SoraSubqueryHistoryOperationFactory { } private func prepareFilter( - filters: [WalletTransactionHistoryFilter] + filters: [WalletTransactionHistoryFilter], + address: String ) -> String { var filterStrings: [String] = [] - + + var innerFilters: [String] = [] + var outerFilters: [String] = [] if filters.contains(where: { $0.type == .swap && $0.selected }) { - filterStrings.append("{ method:{equalToInsensitive:\"swap\"}}") + innerFilters.append("{module:{equalTo: \"\("liquidityProxy")\"},method:{equalTo: \"\("swap")\"}}") } if filters.contains(where: { $0.type == .reward && $0.selected }) { - filterStrings.append("{ method:{ equalToInsensitive:\"rewarded\"}}") + innerFilters.append("{module:{equalTo: \"\("staking")\"},method:{equalTo: \"\("Rewarded")\"}}") } if filters.contains(where: { $0.type == .transfer && $0.selected }) { - filterStrings.append("{ method:{ equalToInsensitive:\"transfer\"}}") + innerFilters.append("{module:{equalTo: \"\("assets")\"}, method:{equalTo: \"\("transfer")\"}}") + outerFilters.append("{module:{equalTo: \"\("assets")\"}, method:{equalTo: \"\("transfer")\"},execution:{contains:{success: true}},data:{contains:{to: \"\(address)\"}}}") } - - guard filterStrings.isNotEmpty else { - return "" - } - + + innerFilters.append("{module:{equalTo: \"\("poolXYK")\"},method:{equalTo: \"\("depositLiquidity")\"}},{data:{contains:{method: \"\("depositLiquidity")\"}}}") + innerFilters.append("{module:{equalTo: \"\("poolXYK")\"},method:{equalTo: \"\("withdrawLiquidity")\"}},{data:{contains:{method: \"\("withdrawLiquidity")\"}}}") + innerFilters.append("{module:{equalTo: \"\("referrals")\"}}") + innerFilters.append("{module:{equalTo: \"\("ethBridge")\"},method:{equalTo: \"\("transferToSidechain")\"}}") + outerFilters.append("{module:{equalTo: \"\("referrals")\"},method:{equalTo: \"\("setReferrer")\"},execution:{contains:{success: true}},data:{contains:{to: \"\(address)\"}}}") + let resultFilters = filterStrings.joined(separator: ",") - return resultFilters + + let result = "{or:[{address:{equalTo: \"\(address)\"},or:[\(innerFilters.joined(separator: ","))]},\(outerFilters.joined(separator: ","))]}" + + return result } private func prepareQueryForAddress( @@ -100,7 +109,7 @@ class SoraSubqueryHistoryOperationFactory { filters: [WalletTransactionHistoryFilter] ) -> String { let after = cursor.map { "\"\($0)\"" } ?? "null" - let filter = prepareFilter(filters: filters) + let filter = prepareFilter(filters: filters, address: address) return """ { @@ -108,7 +117,7 @@ class SoraSubqueryHistoryOperationFactory { after: \(after) first: \(count) orderBy: TIMESTAMP_DESC - filter: {or: [\(filter)] address: {equalTo: "\(address)"}} + filter: \(filter) ) { pageInfo { startCursor @@ -217,7 +226,7 @@ class SoraSubqueryHistoryOperationFactory { localItems: localTransactions ) } else { - let transactions: [AssetTransactionData] = filteredTransactions.map { item in + let transactions: [AssetTransactionData] = remoteTransactions.map { item in item.createTransactionForAddress( address, chain: chain, diff --git a/fearless/Modules/ConnectedAccounts/ConnectedAccountsAssembly.swift b/fearless/Modules/ConnectedAccounts/ConnectedAccountsAssembly.swift index 06825402b8..4d41058394 100644 --- a/fearless/Modules/ConnectedAccounts/ConnectedAccountsAssembly.swift +++ b/fearless/Modules/ConnectedAccounts/ConnectedAccountsAssembly.swift @@ -2,12 +2,10 @@ import UIKit import SoraFoundation import SSFNetwork import SoraKeystore +import SSFModels final class ConnectedAccountsAssembly { - static func configureModule() -> ConnectedAccountsModuleCreationResult? { - guard let wallet = SelectedWalletSettings.shared.value else { - return nil - } + static func configureModule(wallet: MetaAccountModel) -> ConnectedAccountsModuleCreationResult? { let localizationManager = LocalizationManager.shared let interactor = ConnectedAccountsInteractor( diff --git a/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift b/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift index f5786b0675..31f1115559 100644 --- a/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift +++ b/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift @@ -100,11 +100,11 @@ final class ChainAccountPresenter { ) ?? Decimal.zero let transferrableBalance = freeBalance - frozenValue.or(.zero) - let transferrableValue = balanceViewModelFactory.balanceFromPrice(transferrableBalance, priceData: priceData, usageCase: .detailsCrypto) + let transferrableValue = balanceViewModelFactory.balanceFromPrice(transferrableBalance, priceData: chainAsset.asset.getPrice(for: wallet.selectedCurrency), usageCase: .detailsCrypto) let lockedComponents = [balanceLocksValue, frozenValue].compactMap { $0 } let totalLocked = lockedComponents.first != nil ? lockedComponents.reduce(0, +) : nil let lockedValue = totalLocked.flatMap { - balanceViewModelFactory.balanceFromPrice($0, priceData: priceData, usageCase: .detailsCrypto) + balanceViewModelFactory.balanceFromPrice($0, priceData: chainAsset.asset.getPrice(for: wallet.selectedCurrency), usageCase: .detailsCrypto) } let balanceViewModel = ChainAccountBalanceViewModel( diff --git a/fearless/Modules/Profile/ProfileWireframe.swift b/fearless/Modules/Profile/ProfileWireframe.swift index 4d7297260a..8801990146 100644 --- a/fearless/Modules/Profile/ProfileWireframe.swift +++ b/fearless/Modules/Profile/ProfileWireframe.swift @@ -9,7 +9,7 @@ final class ProfileWireframe: ProfileWireframeProtocol, AuthorizationPresentable from view: ProfileViewProtocol?, metaAccount: MetaAccountModel ) { - guard let walletDetails = ConnectedAccountsAssembly.configureModule() else { + guard let walletDetails = ConnectedAccountsAssembly.configureModule(wallet: metaAccount) else { return } let navigationController = FearlessNavigationController( diff --git a/fearless/Modules/Root/RootInteractor.swift b/fearless/Modules/Root/RootInteractor.swift index e61e35aea7..4c3d408518 100644 --- a/fearless/Modules/Root/RootInteractor.swift +++ b/fearless/Modules/Root/RootInteractor.swift @@ -17,6 +17,7 @@ final class RootInteractor { private let logger: LoggerProtocol? private let onboardingService: OnboardingServiceProtocol private let onboardingConfigResolver: OnboardingConfigVersionResolver + private let pricesService: PricesServiceProtocol init( settings: SelectedWalletSettings, @@ -25,7 +26,8 @@ final class RootInteractor { migrators: [Migrating], logger: LoggerProtocol? = nil, onboardingService: OnboardingServiceProtocol, - onboardingConfigResolver: OnboardingConfigVersionResolver + onboardingConfigResolver: OnboardingConfigVersionResolver, + pricesService: PricesServiceProtocol ) { self.settings = settings self.applicationConfig = applicationConfig @@ -34,6 +36,7 @@ final class RootInteractor { self.logger = logger self.onboardingService = onboardingService self.onboardingConfigResolver = onboardingConfigResolver + self.pricesService = pricesService } private func setupURLHandlingService() { @@ -66,6 +69,8 @@ final class RootInteractor { extension RootInteractor: RootInteractorInputProtocol { func setup(runMigrations: Bool) { + pricesService.setup() + setupURLHandlingService() if runMigrations { self.runMigrators() diff --git a/fearless/Modules/Root/RootPresenterFactory.swift b/fearless/Modules/Root/RootPresenterFactory.swift index 123e080c7d..2988a98e16 100644 --- a/fearless/Modules/Root/RootPresenterFactory.swift +++ b/fearless/Modules/Root/RootPresenterFactory.swift @@ -57,7 +57,8 @@ final class RootPresenterFactory: RootPresenterFactoryProtocol { migrators: migrators, logger: Logger.shared, onboardingService: service, - onboardingConfigResolver: resolver + onboardingConfigResolver: resolver, + pricesService: PricesService.shared ) let view = RootViewController( diff --git a/fearless/Modules/Transfer/Validators/SendDataValidatingFactory.swift b/fearless/Modules/Transfer/Validators/SendDataValidatingFactory.swift index 29e283b8c8..21cc3b2cad 100644 --- a/fearless/Modules/Transfer/Validators/SendDataValidatingFactory.swift +++ b/fearless/Modules/Transfer/Validators/SendDataValidatingFactory.swift @@ -41,7 +41,7 @@ class SendDataValidatingFactory: NSObject { case let .utility(balance): if let balance = balance, let feeAndTip = feeAndTip { - return sendAmount.or(.zero) + feeAndTip <= balance && sendAmount.or(1) > 0 + return sendAmount.or(.zero) + feeAndTip <= balance } else { return false } diff --git a/fearless/Modules/WalletOption/WalletOptionPresenter.swift b/fearless/Modules/WalletOption/WalletOptionPresenter.swift index fe5edc27a9..c5a134ca08 100644 --- a/fearless/Modules/WalletOption/WalletOptionPresenter.swift +++ b/fearless/Modules/WalletOption/WalletOptionPresenter.swift @@ -86,7 +86,8 @@ extension WalletOptionPresenter: WalletOptionViewOutput { func didLoad(view: WalletOptionViewInput) { self.view = view interactor.setup(with: self) - view.walletDetailsButton(isVisible: wallet.ecosystem.isRegular) + view.setWalletDetailsButton(isVisible: wallet.ecosystem.isRegular) + view.setAccountScoreButton(isVisible: wallet.ecosystem.ethereumPublicKey != nil) } } diff --git a/fearless/Modules/WalletOption/WalletOptionProtocols.swift b/fearless/Modules/WalletOption/WalletOptionProtocols.swift index 222eda5e8c..265db95df4 100644 --- a/fearless/Modules/WalletOption/WalletOptionProtocols.swift +++ b/fearless/Modules/WalletOption/WalletOptionProtocols.swift @@ -4,7 +4,8 @@ typealias WalletOptionModuleCreationResult = (view: WalletOptionViewInput, input protocol WalletOptionViewInput: ControllerBackedProtocol { func setDeleteButtonIsVisible(_ isVisible: Bool) - func walletDetailsButton(isVisible: Bool) + func setWalletDetailsButton(isVisible: Bool) + func setAccountScoreButton(isVisible: Bool) } protocol WalletOptionViewOutput: AnyObject { diff --git a/fearless/Modules/WalletOption/WalletOptionRouter.swift b/fearless/Modules/WalletOption/WalletOptionRouter.swift index cd55d42493..95959a2e38 100644 --- a/fearless/Modules/WalletOption/WalletOptionRouter.swift +++ b/fearless/Modules/WalletOption/WalletOptionRouter.swift @@ -14,7 +14,7 @@ final class WalletOptionRouter: WalletOptionRouterInput { } func showWalletDetails(from view: ControllerBackedProtocol?, for wallet: MetaAccountModel) { - guard let module = ConnectedAccountsAssembly.configureModule() else { + guard let module = ConnectedAccountsAssembly.configureModule(wallet: wallet) else { return } let navigationController = FearlessNavigationController( diff --git a/fearless/Modules/WalletOption/WalletOptionViewController.swift b/fearless/Modules/WalletOption/WalletOptionViewController.swift index 042b6d17c4..f261dcb126 100644 --- a/fearless/Modules/WalletOption/WalletOptionViewController.swift +++ b/fearless/Modules/WalletOption/WalletOptionViewController.swift @@ -64,8 +64,11 @@ extension WalletOptionViewController: WalletOptionViewInput { rootView.deleteWalletButton.isHidden = !isVisible } - func walletDetailsButton(isVisible: Bool) { + func setWalletDetailsButton(isVisible: Bool) { rootView.walletDetailsButton.isHidden = !isVisible + } + + func setAccountScoreButton(isVisible: Bool) { rootView.accountScoreButton.isHidden = !isVisible } } diff --git a/fearless/Modules/WalletOption/WalletOptionViewLayout.swift b/fearless/Modules/WalletOption/WalletOptionViewLayout.swift index d8ab020bac..43408a601f 100644 --- a/fearless/Modules/WalletOption/WalletOptionViewLayout.swift +++ b/fearless/Modules/WalletOption/WalletOptionViewLayout.swift @@ -65,6 +65,7 @@ final class WalletOptionViewLayout: UIView { backupWalletButton, changeWalletNameButton, accountScoreButton, + walletDetailsButton, deleteWalletButton ] }() From 8f09fd0d90ce05c69feb9809cf11655f84c7dfab Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Tue, 28 Jan 2025 16:37:35 +0700 Subject: [PATCH 142/156] TonConnect QR fix --- .../xcshareddata/swiftpm/Package.resolved | 4 +- .../Services/TonConnectServiceImpl.swift | 3 +- .../CDTonConnectedApp+CoreDataDecodable.swift | 2 + .../contents | 3 +- .../WalletConnectProposalCoordinator.swift | 1 + .../DappBrowserViewModelFactory.swift | 2 +- .../ViewModel/ProfileViewModelFactory.swift | 19 ++-- .../TonWebBridge/Models/TonConnectApp.swift | 17 +++ .../TonWebBridge/TonWebBridgePresenter.swift | 3 +- .../WalletConnectActiveSessionsAssembly.swift | 9 +- ...alletConnectActiveSessionsInteractor.swift | 43 +++++-- ...WalletConnectActiveSessionsPresenter.swift | 105 +++++++++++++++--- ...WalletConnectActiveSessionsProtocols.swift | 2 +- .../WalletConnectActiveSessionsRouter.swift | 4 +- ...onnectActiveSessionsViewModelFactory.swift | 16 ++- .../Model/SessionStatus.swift | 25 ++++- ...alletConnectProposalViewModelFactory.swift | 47 ++++++++ .../WalletConnectProposalInteractor.swift | 4 + .../WalletConnectProposalPresenter.swift | 11 ++ .../WalletConnectProposalProtocols.swift | 6 + 20 files changed, 277 insertions(+), 49 deletions(-) diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 64dc0b30a1..e7b77821a6 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -13,7 +13,7 @@ { "identity" : "bigint", "kind" : "remoteSourceControl", - "location" : "https://github.com/attaswift/BigInt.git", + "location" : "https://github.com/attaswift/BigInt", "state" : { "revision" : "0ed110f7555c34ff468e72e1686e59721f2b0da6", "version" : "5.3.0" @@ -142,7 +142,7 @@ "location" : "https://github.com/soramitsu/shared-features-spm.git", "state" : { "branch" : "FW-new-ecosystem", - "revision" : "7405961791674ec6fb2df6cbf6053d5a71ec42c3" + "revision" : "9393b4e87b5dfa71c7af65d5c71050c711220716" } }, { diff --git a/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift b/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift index c7f0df9704..f069ed42b6 100644 --- a/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift +++ b/fearless/ApplicationLayer/Services/TonConnectServiceImpl.swift @@ -274,7 +274,8 @@ actor TonConnectServiceImpl: TonConnectService { name: name, iconUrl: iconUrl, publicKey: sessionCrypto.keyPair.publicKey.data, - privateKey: sessionCrypto.keyPair.privateKey.data + privateKey: sessionCrypto.keyPair.privateKey.data, + connectionType: .http ) await appRepository.save(models: [app]) } diff --git a/fearless/Common/Extension/Storage/CDTonConnectedApp+CoreDataDecodable.swift b/fearless/Common/Extension/Storage/CDTonConnectedApp+CoreDataDecodable.swift index 1c2f178a13..8d7f2581ed 100644 --- a/fearless/Common/Extension/Storage/CDTonConnectedApp+CoreDataDecodable.swift +++ b/fearless/Common/Extension/Storage/CDTonConnectedApp+CoreDataDecodable.swift @@ -14,6 +14,7 @@ extension CDTonConnectedApp: CoreDataCodable { iconUrl = app.iconUrl publicKey = app.publicKey privateKey = app.privateKey + connectionType = app.connectionType.rawValue } public func encode(to encoder: any Encoder) throws { @@ -26,5 +27,6 @@ extension CDTonConnectedApp: CoreDataCodable { try container.encode(iconUrl, forKey: .iconUrl) try container.encode(publicKey, forKey: .publicKey) try container.encode(privateKey, forKey: .privateKey) + try container.encode(connectionType, forKey: .connectionType) } } diff --git a/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents index ed73597651..98daa733cb 100644 --- a/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents +++ b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v8.xcdatamodel/contents @@ -1,5 +1,5 @@ - + @@ -152,6 +152,7 @@ + diff --git a/fearless/Modules/Coordinators/WalletConnectProposalCoordinator.swift b/fearless/Modules/Coordinators/WalletConnectProposalCoordinator.swift index 1230242933..b4b0ad39fe 100644 --- a/fearless/Modules/Coordinators/WalletConnectProposalCoordinator.swift +++ b/fearless/Modules/Coordinators/WalletConnectProposalCoordinator.swift @@ -31,6 +31,7 @@ enum ConnectProposal { enum ActionConnect { case walletConnect(Session) + case tonConnect(app: TonConnectApp, delegate: (any WalletConnectProposalModuleOutput)?) } final class WalletConnectProposalCoordinator: DefaultCoordinator, CoordinatorFinishOutput { diff --git a/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift b/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift index 0404c04fb6..fea88e1e8f 100644 --- a/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift +++ b/fearless/Modules/DappBrowser/DappBrowserViewModelFactory.swift @@ -152,7 +152,7 @@ final class DappBrowserViewModelFactoryImpl: DappBrowserViewModelFactory { locale: Locale ) -> [DappBrowserViewModel] { var viewModel: [DappBrowserViewModel] = [] - let walletApps = connected.filter { $0.walletId == wallet.metaId } + let walletApps = connected.filter { $0.walletId == wallet.metaId && $0.connectionType == .js } if walletApps.isNotEmpty { let apps = connected diff --git a/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift b/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift index 3cfbfb2458..9f326d9d10 100644 --- a/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift +++ b/fearless/Modules/Profile/ViewModel/ProfileViewModelFactory.swift @@ -134,11 +134,7 @@ final class ProfileViewModelFactory: ProfileViewModelFactoryProtocol { let optionViewModels = ProfileOption.allCases.compactMap { (option) -> ProfileOptionViewModel? in switch option { case .walletConnect: - guard ecosystem.isRegular else { - return nil - } - - return createWalletConnectViewModel(locale: locale) + return createWalletConnectViewModel(ecosystem: ecosystem) case .accountList: let missingEthAccount: Bool switch ecosystem { @@ -179,9 +175,16 @@ final class ProfileViewModelFactory: ProfileViewModelFactoryProtocol { return optionViewModels } - private func createWalletConnectViewModel(locale _: Locale) -> ProfileOptionViewModel { - ProfileOptionViewModel( - title: "Wallet connect", + private func createWalletConnectViewModel(ecosystem: WalletEcosystem) -> ProfileOptionViewModel { + let title: String + switch ecosystem { + case .regular: + title = "Wallet connect" + case .ton: + title = "Ton connect" + } + return ProfileOptionViewModel( + title: title, icon: R.image.iconWalletConnect(), accessoryTitle: nil, accessoryImage: nil, diff --git a/fearless/Modules/TonWebBridge/Models/TonConnectApp.swift b/fearless/Modules/TonWebBridge/Models/TonConnectApp.swift index a25ac58779..96607fd882 100644 --- a/fearless/Modules/TonWebBridge/Models/TonConnectApp.swift +++ b/fearless/Modules/TonWebBridge/Models/TonConnectApp.swift @@ -2,6 +2,11 @@ import Foundation import TonSwift import RobinHood +enum TonConnectAppConnectionType: String, Codable { + case js + case http +} + struct TonConnectApp: Codable, Identifiable { var identifier: String { [walletId, appUrl.absoluteString].joined(separator: "-") @@ -14,6 +19,7 @@ struct TonConnectApp: Codable, Identifiable { let iconUrl: URL? let publicKey: Data let privateKey: Data + let connectionType: TonConnectAppConnectionType enum CodingKeys: CodingKey { case walletId @@ -23,6 +29,7 @@ struct TonConnectApp: Codable, Identifiable { case privateKey case name case iconUrl + case connectionType } var keyPair: TonSwift.KeyPair { @@ -32,3 +39,13 @@ struct TonConnectApp: Codable, Identifiable { ) } } + +extension TonConnectApp: WalletConnectActiveSessionsItem { + var url: URL? { + appUrl + } + + var icon: URL? { + iconUrl + } +} diff --git a/fearless/Modules/TonWebBridge/TonWebBridgePresenter.swift b/fearless/Modules/TonWebBridge/TonWebBridgePresenter.swift index f6160cd554..0b12cad6ba 100644 --- a/fearless/Modules/TonWebBridge/TonWebBridgePresenter.swift +++ b/fearless/Modules/TonWebBridge/TonWebBridgePresenter.swift @@ -220,7 +220,8 @@ final class TonWebBridgePresenter: NSObject { name: manifest.name, iconUrl: manifest.iconUrl, publicKey: sessionCrypto.keyPair.publicKey.data, - privateKey: sessionCrypto.keyPair.privateKey.data + privateKey: sessionCrypto.keyPair.privateKey.data, + connectionType: .js ) await interactor.connected(app: connectedApp) } diff --git a/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsAssembly.swift b/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsAssembly.swift index 796873004b..1e745a6949 100644 --- a/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsAssembly.swift +++ b/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsAssembly.swift @@ -3,14 +3,21 @@ import SoraFoundation final class WalletConnectActiveSessionsAssembly { static func configureModule() -> WalletConnectActiveSessionsModuleCreationResult? { + guard let wallet = SelectedWalletSettings.shared.value else { + return nil + } let localizationManager = LocalizationManager.shared let interactor = WalletConnectActiveSessionsInteractor( - walletConnectService: WalletConnectServiceImpl.shared + wallet: wallet, + walletConnectService: WalletConnectServiceImpl.shared, + appRepository: ServiceAssembly.shared.tonConnectAppAsyncRepository(), + tonConnectService: ServiceAssembly.shared.tonConnectService() ) let router = WalletConnectActiveSessionsRouter() let presenter = WalletConnectActiveSessionsPresenter( + wallet: wallet, viewModelFactory: WalletConnectActiveSessionsViewModelFactoryImpl(), interactor: interactor, router: router, diff --git a/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsInteractor.swift b/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsInteractor.swift index 43315bfc15..d72a9dba0a 100644 --- a/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsInteractor.swift +++ b/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsInteractor.swift @@ -1,8 +1,11 @@ import UIKit import WalletConnectSign +import SSFModels +import RobinHood protocol WalletConnectActiveSessionsInteractorOutput: AnyObject { func didReceive(sessions: [Session]) + func didReceive(connectedApps: [TonConnectApp]) } final class WalletConnectActiveSessionsInteractor { @@ -10,17 +13,21 @@ final class WalletConnectActiveSessionsInteractor { private weak var output: WalletConnectActiveSessionsInteractorOutput? + private let wallet: MetaAccountModel private let walletConnectService: WalletConnectService + private let appRepository: AsyncAnyRepository + private let tonConnectService: TonConnectService - init(walletConnectService: WalletConnectService) { + init( + wallet: MetaAccountModel, + walletConnectService: WalletConnectService, + appRepository: AsyncAnyRepository, + tonConnectService: TonConnectService + ) { + self.wallet = wallet self.walletConnectService = walletConnectService - } - - // MARK: - Private methods - - private func getSesstion() { - let sessions = walletConnectService.getSessions() - output?.didReceive(sessions: sessions) + self.appRepository = appRepository + self.tonConnectService = tonConnectService } } @@ -34,7 +41,25 @@ extension WalletConnectActiveSessionsInteractor: WalletConnectActiveSessionsInte } func setupConnection(uri: String) async throws { - try await walletConnectService.connect(uri: uri) + switch wallet.ecosystem { + case .regular: + try await walletConnectService.connect(uri: uri) + case .ton: + try await tonConnectService.establishConnection(with: uri) + } + } + + func getSesstion() { + switch wallet.ecosystem { + case .regular: + let sessions = walletConnectService.getSessions() + output?.didReceive(sessions: sessions) + case .ton: + Task { + let apps = try await appRepository.fetchAll() + output?.didReceive(connectedApps: apps) + } + } } } diff --git a/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsPresenter.swift b/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsPresenter.swift index 80e68a6958..7ea9cfa8e7 100644 --- a/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsPresenter.swift +++ b/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsPresenter.swift @@ -2,6 +2,7 @@ import Foundation import WalletConnectSign import SoraFoundation import SSFQRService +import SSFModels protocol WalletConnectActiveSessionsViewInput: ControllerBackedProtocol, HiddableBarWhenPushed, LoadableViewProtocol { func didReceive(viewModels: [WalletConnectActiveSessionsViewModel]) @@ -10,6 +11,7 @@ protocol WalletConnectActiveSessionsViewInput: ControllerBackedProtocol, Hiddabl protocol WalletConnectActiveSessionsInteractorInput: AnyObject { func setup(with output: WalletConnectActiveSessionsInteractorOutput) func setupConnection(uri: String) async throws + func getSesstion() } final class WalletConnectActiveSessionsPresenter { @@ -19,18 +21,22 @@ final class WalletConnectActiveSessionsPresenter { private let router: WalletConnectActiveSessionsRouterInput private let interactor: WalletConnectActiveSessionsInteractorInput + private let wallet: MetaAccountModel private let viewModelFactory: WalletConnectActiveSessionsViewModelFactory private var sessions: [Session]? + private var tonApps: [TonConnectApp]? // MARK: - Constructors init( + wallet: MetaAccountModel, viewModelFactory: WalletConnectActiveSessionsViewModelFactory, interactor: WalletConnectActiveSessionsInteractorInput, router: WalletConnectActiveSessionsRouterInput, localizationManager: LocalizationManagerProtocol ) { + self.wallet = wallet self.viewModelFactory = viewModelFactory self.interactor = interactor self.router = router @@ -40,12 +46,49 @@ final class WalletConnectActiveSessionsPresenter { // MARK: - Private methods private func provideViewModel() { - guard let sessions = sessions else { - return + let viewModels: [WalletConnectActiveSessionsViewModel] + switch wallet.ecosystem { + case .regular: + guard let sessions = sessions else { + return + } + viewModels = viewModelFactory.createViewModel(from: sessions) + case .ton: + guard let tonApps = tonApps else { + return + } + viewModels = viewModelFactory.createViewModel(from: tonApps) + } + Task { @MainActor in + view?.didReceive(viewModels: viewModels) + view?.didStopLoading() + } + } + + private func filterSession( by text: String?) { + let sessions = sessions?.filter { + guard let text = text else { return false } + if text.isEmpty { + return true + } + return $0.peer.name.lowercased().contains(text.lowercased()) == true } + guard let sessions = sessions else { return } let viewModels = viewModelFactory.createViewModel(from: sessions) view?.didReceive(viewModels: viewModels) - view?.didStopLoading() + } + + private func filterTonApp( by text: String?) { + let tonApps = tonApps?.filter { + guard let text = text else { return false } + if text.isEmpty { + return true + } + return $0.name.lowercased().contains(text.lowercased()) == true + } + guard let tonApps = tonApps else { return } + let viewModels = viewModelFactory.createViewModel(from: tonApps) + view?.didReceive(viewModels: viewModels) } } @@ -57,23 +100,27 @@ extension WalletConnectActiveSessionsPresenter: WalletConnectActiveSessionsViewO } func filterConnection(by text: String?) { - let sessions = sessions?.filter { - guard let text = text else { return false } - if text.isEmpty { - return true - } - return $0.peer.name.lowercased().contains(text.lowercased()) == true + switch wallet.ecosystem { + case .regular: + filterSession(by: text) + case .ton: + filterTonApp(by: text) } - guard let sessions = sessions else { return } - let viewModels = viewModelFactory.createViewModel(from: sessions) - view?.didReceive(viewModels: viewModels) } func didSelectRowAt(_ indexPath: IndexPath) { - guard let session = sessions?[safe: indexPath.row] else { - return + switch wallet.ecosystem { + case .regular: + guard let session = sessions?[safe: indexPath.row] else { + return + } + router.showSession(.walletConnect(session), view: view) + case .ton: + guard let app = tonApps?[safe: indexPath.row] else { + return + } + router.showSession(.tonConnect(app: app, delegate: self), view: view) } - router.showSession(session, view: view) } func backButtonDidTapped() { @@ -90,6 +137,11 @@ extension WalletConnectActiveSessionsPresenter: WalletConnectActiveSessionsViewO // MARK: - WalletConnectActiveSessionsInteractorOutput extension WalletConnectActiveSessionsPresenter: WalletConnectActiveSessionsInteractorOutput { + func didReceive(connectedApps: [TonConnectApp]) { + tonApps = connectedApps.filter { $0.connectionType == .http } + provideViewModel() + } + func didReceive(sessions: [WalletConnectSign.Session]) { self.sessions = sessions provideViewModel() @@ -122,3 +174,26 @@ extension WalletConnectActiveSessionsPresenter: ScanQRModuleOutput { } } } + +extension Session: WalletConnectActiveSessionsItem { + var name: String { + peer.name + } + + var url: URL? { + URL(string: peer.url) + } + + var icon: URL? { + guard let icon = peer.icons.first else { + return nil + } + return URL(string: icon) + } +} + +extension WalletConnectActiveSessionsPresenter: WalletConnectProposalModuleOutput { + func disconnected() { + interactor.getSesstion() + } +} diff --git a/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsProtocols.swift b/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsProtocols.swift index 0f5c119f07..9167e63c72 100644 --- a/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsProtocols.swift +++ b/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsProtocols.swift @@ -6,7 +6,7 @@ typealias WalletConnectActiveSessionsModuleCreationResult = ( protocol WalletConnectActiveSessionsRouterInput: PresentDismissable, SheetAlertPresentable, ErrorPresentable { func showSession( - _ session: Session, + _ action: ActionConnect, view: ControllerBackedProtocol? ) func showScaner( diff --git a/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsRouter.swift b/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsRouter.swift index 042c8d5463..d8abf27b12 100644 --- a/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsRouter.swift +++ b/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsRouter.swift @@ -3,10 +3,10 @@ import WalletConnectSign final class WalletConnectActiveSessionsRouter: WalletConnectActiveSessionsRouterInput { func showSession( - _ session: Session, + _ action: ActionConnect, view: ControllerBackedProtocol? ) { - let module = WalletConnectProposalAssembly.configureModule(status: .active(.walletConnect(session))) + let module = WalletConnectProposalAssembly.configureModule(status: .active(action)) guard let controller = module?.view.controller else { return } diff --git a/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsViewModelFactory.swift b/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsViewModelFactory.swift index 282a0ec6a1..3cee777f1c 100644 --- a/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsViewModelFactory.swift +++ b/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsViewModelFactory.swift @@ -1,21 +1,27 @@ import Foundation import WalletConnectSign +protocol WalletConnectActiveSessionsItem { + var name: String { get } + var url: URL? { get } + var icon: URL? { get } +} + protocol WalletConnectActiveSessionsViewModelFactory { func createViewModel( - from sessions: [Session] + from sessions: [WalletConnectActiveSessionsItem] ) -> [WalletConnectActiveSessionsViewModel] } final class WalletConnectActiveSessionsViewModelFactoryImpl: WalletConnectActiveSessionsViewModelFactory { func createViewModel( - from sessions: [Session] + from sessions: [WalletConnectActiveSessionsItem] ) -> [WalletConnectActiveSessionsViewModel] { sessions.map { WalletConnectActiveSessionsViewModel( - name: $0.peer.name, - host: URL(string: $0.peer.url)?.host, - icon: RemoteImageViewModel(string: $0.peer.icons.first) + name: $0.name, + host: $0.url?.host, + icon: RemoteImageViewModel(url: $0.icon) ) } } diff --git a/fearless/Modules/WalletConnectProposal/Model/SessionStatus.swift b/fearless/Modules/WalletConnectProposal/Model/SessionStatus.swift index 91b9e62d3c..4470de11d9 100644 --- a/fearless/Modules/WalletConnectProposal/Model/SessionStatus.swift +++ b/fearless/Modules/WalletConnectProposal/Model/SessionStatus.swift @@ -43,6 +43,22 @@ enum SessionStatus { switch session { case let .walletConnect(session): return session + case .tonConnect: + return nil + } + } + } + + var tonApp: TonConnectApp? { + switch self { + case .proposal: + return nil + case .active(let active): + switch active { + case .walletConnect: + return nil + case let .tonConnect(tonConnectApp, _): + return tonConnectApp } } } @@ -56,8 +72,13 @@ enum SessionStatus { case let .tonJsBridge(_, _, _, delegate): return delegate } - case .active: - return nil + case let .active(active): + switch active { + case .walletConnect(let session): + return nil + case .tonConnect(let app, let delegate): + return delegate + } } } } diff --git a/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModelFactory.swift b/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModelFactory.swift index 0a0a7e1235..6b6a59ffad 100644 --- a/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModelFactory.swift +++ b/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModelFactory.swift @@ -56,6 +56,12 @@ final class WalletConnectProposalViewModelFactoryImpl: WalletConnectProposalView wallets: wallets, locale: locale ) + case .tonConnect: + return try buildTonConenctActiveSessionViewModel( + chains: chains, + wallets: wallets, + locale: locale + ) } } } @@ -135,6 +141,12 @@ final class WalletConnectProposalViewModelFactoryImpl: WalletConnectProposalView subtitle: URL(string: session.peer.url)?.host ?? session.peer.url, icon: RemoteImageViewModel(string: session.peer.url) ) + case let .tonConnect(app, _): + return WalletConnectProposalCellModel.DetailsViewModel( + title: app.name, + subtitle: app.appUrl.host ?? "", + icon: RemoteImageViewModel(url: app.iconUrl) + ) } } } @@ -442,4 +454,39 @@ final class WalletConnectProposalViewModelFactoryImpl: WalletConnectProposalView expiryDate: nil ) } + + func buildTonConenctActiveSessionViewModel( + chains: [ChainModel], + wallets: [MetaAccountModel], + locale: Locale + ) throws -> WalletConnectProposalViewModel { + guard + let app = status.tonApp, + let tonChain = chains.first(where: { $0.ecosystem == .ton }) + else { + throw ConvenienceError(error: "Missing wallet connect proposal") + } + let dApp = createDAppViewModel() + + let requiredNetworks = WalletConnectProposalCellModel.DetailsViewModel( + title: R.string.localizable.requiredNetworks(preferredLanguages: locale.rLanguages), + subtitle: tonChain.name, + icon: RemoteImageViewModel(url: tonChain.icon) + ) + + let walletCellViewModels = createWalletsCellModels(from: wallets, forActiveSession: false) + + let infoCells = [ + WalletConnectProposalCellModel.dAppInfo(dApp), + WalletConnectProposalCellModel(requiredNetworksViewModel: requiredNetworks) + ].compactMap { $0 } + + let cells = [infoCells, walletCellViewModels].reduce([], +) + + return WalletConnectProposalViewModel( + indexPath: nil, + cells: cells, + expiryDate: nil + ) + } } diff --git a/fearless/Modules/WalletConnectProposal/WalletConnectProposalInteractor.swift b/fearless/Modules/WalletConnectProposal/WalletConnectProposalInteractor.swift index eb53efd536..8a4bbebba1 100644 --- a/fearless/Modules/WalletConnectProposal/WalletConnectProposalInteractor.swift +++ b/fearless/Modules/WalletConnectProposal/WalletConnectProposalInteractor.swift @@ -65,6 +65,10 @@ final class WalletConnectProposalInteractor { // MARK: - WalletConnectProposalInteractorInput extension WalletConnectProposalInteractor: WalletConnectProposalInteractorInput { + func disconnect(app: TonConnectApp) async { + await tonConnectService.saveDisconnected(app: app) + } + func setup(with output: WalletConnectProposalInteractorOutput) { self.output = output fetchWallets() diff --git a/fearless/Modules/WalletConnectProposal/WalletConnectProposalPresenter.swift b/fearless/Modules/WalletConnectProposal/WalletConnectProposalPresenter.swift index d04ebb1111..9483b7094f 100644 --- a/fearless/Modules/WalletConnectProposal/WalletConnectProposalPresenter.swift +++ b/fearless/Modules/WalletConnectProposal/WalletConnectProposalPresenter.swift @@ -17,6 +17,7 @@ protocol WalletConnectProposalInteractorInput: AnyObject { params: TonConnectParameters, manifest: TonConnectManifest ) async throws + func disconnect(app: TonConnectApp) async } final class WalletConnectProposalPresenter { @@ -360,6 +361,14 @@ extension WalletConnectProposalPresenter: WalletConnectProposalViewOutput { case let .walletConnect(session): view?.didStartLoading() submitDisconnect(topic: session.topic, name: session.peer.name) + case let .tonConnect(app, _): + view?.didStartLoading() + Task { + await interactor.disconnect(app: app) + moduleOutput?.disconnected() + let description = R.string.localizable.walletConnectConnectionDissconnected(app.name, preferredLanguages: selectedLocale.rLanguages) + await showAllDone(description: description) + } } } } @@ -380,6 +389,8 @@ extension WalletConnectProposalPresenter: WalletConnectProposalViewOutput { switch active { case .walletConnect: submitReject() + case .tonConnect: + router.dismiss(view: view) } } } diff --git a/fearless/Modules/WalletConnectProposal/WalletConnectProposalProtocols.swift b/fearless/Modules/WalletConnectProposal/WalletConnectProposalProtocols.swift index 621a1f33e5..8efc1accbf 100644 --- a/fearless/Modules/WalletConnectProposal/WalletConnectProposalProtocols.swift +++ b/fearless/Modules/WalletConnectProposal/WalletConnectProposalProtocols.swift @@ -25,4 +25,10 @@ protocol WalletConnectProposalModuleInput: AnyObject {} protocol WalletConnectProposalModuleOutput: AnyObject { func tonConnect(dessision: TonConnectDessision) + func disconnected() +} + +extension WalletConnectProposalModuleOutput { + func tonConnect(dessision: TonConnectDessision) {} + func disconnected() {} } From f67d41bea7654eb4f023067ffdfcbf2ae2c55833 Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Tue, 28 Jan 2025 17:30:34 +0700 Subject: [PATCH 143/156] update packages --- fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index e7b77821a6..08809d7549 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -142,7 +142,7 @@ "location" : "https://github.com/soramitsu/shared-features-spm.git", "state" : { "branch" : "FW-new-ecosystem", - "revision" : "9393b4e87b5dfa71c7af65d5c71050c711220716" + "revision" : "f27477c369b8c634da72883a559dd68152fb588e" } }, { From ae4ebcb5d7af898d7cee7591cf10ed9a48a50b52 Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Wed, 29 Jan 2025 15:12:59 +0700 Subject: [PATCH 144/156] process selected currency changes --- fearless.xcodeproj/project.pbxproj | 6 +++- .../xcshareddata/swiftpm/Package.resolved | 14 ++++----- .../WalletBalanceSubscriptionAdapter.swift | 9 +++++- .../Sources/PriceDataSource.swift | 2 +- .../Common/EventCenter/EventVisitor.swift | 2 ++ .../Events/SelectedCurrencyChanged.swift | 10 +++++++ .../Common/Helpers/ChainAssetsFetching.swift | 5 +++- .../Common/Helpers/WalletAssetsObserver.swift | 20 ++++++------- fearless/Common/Services/PricesService.swift | 3 +- .../AssetManagementInteractor.swift | 6 ++++ .../DappBrowser/DappBrowserInteractor.swift | 4 +++ .../ChainAssetListInteractor.swift | 18 +++++++----- .../Modules/Profile/ProfileInteractor.swift | 4 +++ .../Modules/Profile/ProfilePresenter.swift | 5 +++- .../SelectCurrencyInteractor.swift | 6 +++- .../SelectCurrencyPresenter.swift | 5 +++- .../SelectCurrencyProtocols.swift | 1 + .../ViewModel/BalanceViewModelFactory.swift | 24 +++++++++++---- .../StakingMainInteractor+InputProtocol.swift | 29 +++++++++++++++++++ .../StakingMain/StakingMainPresenter.swift | 29 ++++++++++++++++++- .../StakingMain/StakingMainProtocols.swift | 1 + .../StakingMain/StakingMainViewFactory.swift | 3 +- .../StakingStateViewModelFactory.swift | 12 ++++++++ .../WalletMainContainerInteractor.swift | 5 ++++ 24 files changed, 182 insertions(+), 41 deletions(-) create mode 100644 fearless/Common/EventCenter/Events/SelectedCurrencyChanged.swift diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index fedd2e573d..dda804ccee 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -2353,6 +2353,7 @@ FA402F2F27C7C646008CF986 /* ExportAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA402F2E27C7C646008CF986 /* ExportAction.swift */; }; FA44284229D44E51000142EB /* ChainStakingSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA44284129D44E51000142EB /* ChainStakingSettings.swift */; }; FA4441342BF75FD90067C633 /* LiquidityPoolListType.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4441332BF75FD90067C633 /* LiquidityPoolListType.swift */; }; + FA46449E2D49E14B00E21668 /* SelectedCurrencyChanged.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA46449D2D49E13E00E21668 /* SelectedCurrencyChanged.swift */; }; FA46D2C7283DDD07005A112B /* ParachainStakingCandidateMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA46D2C6283DDD07005A112B /* ParachainStakingCandidateMetadata.swift */; }; FA4889672B7F5E360092ABF8 /* GiantsquidExtrinsic.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4889662B7F5E360092ABF8 /* GiantsquidExtrinsic.swift */; }; FA4B928F284493C60003BCEF /* DelegateCall.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA4B928E284493C60003BCEF /* DelegateCall.swift */; }; @@ -5683,6 +5684,7 @@ FA402F2E27C7C646008CF986 /* ExportAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExportAction.swift; sourceTree = ""; }; FA44284129D44E51000142EB /* ChainStakingSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainStakingSettings.swift; sourceTree = ""; }; FA4441332BF75FD90067C633 /* LiquidityPoolListType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiquidityPoolListType.swift; sourceTree = ""; }; + FA46449D2D49E13E00E21668 /* SelectedCurrencyChanged.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedCurrencyChanged.swift; sourceTree = ""; }; FA46D2C6283DDD07005A112B /* ParachainStakingCandidateMetadata.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParachainStakingCandidateMetadata.swift; sourceTree = ""; }; FA4889662B7F5E360092ABF8 /* GiantsquidExtrinsic.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GiantsquidExtrinsic.swift; sourceTree = ""; }; FA4B928E284493C60003BCEF /* DelegateCall.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DelegateCall.swift; sourceTree = ""; }; @@ -11432,6 +11434,7 @@ 84EBC54824F660A700459D15 /* Events */ = { isa = PBXGroup; children = ( + FA46449D2D49E13E00E21668 /* SelectedCurrencyChanged.swift */, 071606C32C7C6C2400C1DF75 /* PricesUpdated.swift */, 0701B9CC2C78FF7900DCD395 /* AccountScoreSettingsChanged.swift */, FACD42782A5BE7C6009975AA /* RuntimeSnapshotReady.swift */, @@ -19965,6 +19968,7 @@ 36909529AF4B97AE71AD4C24 /* TonWebBridgePresenter.swift in Sources */, 720633807C7746A254866395 /* TonWebBridgeInteractor.swift in Sources */, AA69046E4B7838BE78859A24 /* TonWebBridgeViewController.swift in Sources */, + FA46449E2D49E14B00E21668 /* SelectedCurrencyChanged.swift in Sources */, 0701B8B92C78F69500DCD395 /* BlockExplorerType+Filters.swift in Sources */, DBF246FDD6E70D1DC6529539 /* TonWebBridgeViewLayout.swift in Sources */, 152915F53A2C88A15B2BA725 /* TonWebBridgeAssembly.swift in Sources */, @@ -20770,7 +20774,7 @@ isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/soramitsu/shared-features-spm.git"; requirement = { - branch = "FW-new-ecosystem"; + branch = 53e0a4bbea854ab32e97392365c3e523b9a0dc66; kind = branch; }; }; diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 08809d7549..2e9077e563 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -33,8 +33,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/krzyzanowskim/CryptoSwift.git", "state" : { - "revision" : "678d442c6f7828def400a70ae15968aef67ef52d", - "version" : "1.8.3" + "revision" : "729e01bc9b9dab466ac85f21fb9ee2bc1c61b258", + "version" : "1.8.4" } }, { @@ -142,7 +142,7 @@ "location" : "https://github.com/soramitsu/shared-features-spm.git", "state" : { "branch" : "FW-new-ecosystem", - "revision" : "f27477c369b8c634da72883a559dd68152fb588e" + "revision" : "53e0a4bbea854ab32e97392365c3e523b9a0dc66" } }, { @@ -177,8 +177,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-nio.git", "state" : { - "revision" : "dca6594f65308c761a9c409e09fbf35f48d50d34", - "version" : "2.77.0" + "revision" : "ba72f31e11275fc5bf060c966cf6c1f36842a291", + "version" : "2.79.0" } }, { @@ -195,8 +195,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-nio-http2.git", "state" : { - "revision" : "eaa71bb6ae082eee5a07407b1ad0cbd8f48f9dca", - "version" : "1.34.1" + "revision" : "170f4ca06b6a9c57b811293cebcb96e81b661310", + "version" : "1.35.0" } }, { diff --git a/fearless/ApplicationLayer/Services/Balance/WalletBalanceSubscription/WalletBalanceSubscriptionAdapter.swift b/fearless/ApplicationLayer/Services/Balance/WalletBalanceSubscription/WalletBalanceSubscriptionAdapter.swift index d2dce749a5..744417b76c 100644 --- a/fearless/ApplicationLayer/Services/Balance/WalletBalanceSubscription/WalletBalanceSubscriptionAdapter.swift +++ b/fearless/ApplicationLayer/Services/Balance/WalletBalanceSubscription/WalletBalanceSubscriptionAdapter.swift @@ -416,12 +416,19 @@ final class WalletBalanceSubscriptionAdapter: WalletBalanceSubscriptionAdapterPr // MARK: - EventVisitorProtocol extension WalletBalanceSubscriptionAdapter: EventVisitorProtocol { - func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { + func processSelectedCurrencyChanged(event: SelectedCurrencyChangedEvent) { if let index = wallets.firstIndex(where: { $0.metaId == event.account.metaId }), let wallet = wallets[safe: index] { if wallet.selectedCurrency != event.account.selectedCurrency { wallets[index] = event.account } + } + } + + func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { + if let index = wallets.firstIndex(where: { $0.metaId == event.account.metaId }), + let wallet = wallets[safe: index] { + if wallet.networkManagmentFilter != event.account.networkManagmentFilter { wallets[index] = event.account buildAndNotifyIfNeeded(with: [wallet.metaId], updatedChainAssets: chainAssets) diff --git a/fearless/Common/DataProvider/Sources/PriceDataSource.swift b/fearless/Common/DataProvider/Sources/PriceDataSource.swift index b0611e341d..6661707a45 100644 --- a/fearless/Common/DataProvider/Sources/PriceDataSource.swift +++ b/fearless/Common/DataProvider/Sources/PriceDataSource.swift @@ -205,7 +205,7 @@ final class PriceDataSource: SingleValueProviderSourceProtocol { } extension PriceDataSource: EventVisitorProtocol { - func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { + func processSelectedCurrencyChanged(event: SelectedCurrencyChangedEvent) { currencies = (currencies.or([]) + [event.account.selectedCurrency]).uniq(predicate: { $0.id }) } } diff --git a/fearless/Common/EventCenter/EventVisitor.swift b/fearless/Common/EventCenter/EventVisitor.swift index b105f90fe7..767e44a789 100644 --- a/fearless/Common/EventCenter/EventVisitor.swift +++ b/fearless/Common/EventCenter/EventVisitor.swift @@ -29,6 +29,7 @@ protocol EventVisitorProtocol: AnyObject { func processLogout() func processAccountScoreSettingsChanged() func processPricesUpdated() + func processSelectedCurrencyChanged(event: SelectedCurrencyChangedEvent) } extension EventVisitorProtocol { @@ -60,4 +61,5 @@ extension EventVisitorProtocol { func processLogout() {} func processAccountScoreSettingsChanged() {} func processPricesUpdated() {} + func processSelectedCurrencyChanged(event: SelectedCurrencyChangedEvent) {} } diff --git a/fearless/Common/EventCenter/Events/SelectedCurrencyChanged.swift b/fearless/Common/EventCenter/Events/SelectedCurrencyChanged.swift new file mode 100644 index 0000000000..e30b07a4f4 --- /dev/null +++ b/fearless/Common/EventCenter/Events/SelectedCurrencyChanged.swift @@ -0,0 +1,10 @@ +import Foundation +import SSFModels + +struct SelectedCurrencyChangedEvent: EventProtocol { + let account: MetaAccountModel + + func accept(visitor: EventVisitorProtocol) { + visitor.processSelectedCurrencyChanged(event: self) + } +} diff --git a/fearless/Common/Helpers/ChainAssetsFetching.swift b/fearless/Common/Helpers/ChainAssetsFetching.swift index af34bffa2a..08a0a298f7 100644 --- a/fearless/Common/Helpers/ChainAssetsFetching.swift +++ b/fearless/Common/Helpers/ChainAssetsFetching.swift @@ -36,7 +36,8 @@ final class ChainAssetsFetching: ChainAssetFetchingProtocol { case supportNfts case enabled(wallet: MetaAccountModel) case enabledChains - + case chainAssetId(_ chainAssetId: ChainAssetId) + var searchText: String? { switch self { case let .search(text): @@ -253,6 +254,8 @@ private extension ChainAssetsFetching { return chainAssets.filter { enabled.contains($0.identifier) } case .enabledChains: return chainAssets.filter { !$0.chain.disabled } + case .chainAssetId(let chainAssetId): + return chainAssets.filter { $0.chainAssetId == chainAssetId } } } diff --git a/fearless/Common/Helpers/WalletAssetsObserver.swift b/fearless/Common/Helpers/WalletAssetsObserver.swift index 30fc7a060a..041b4f7089 100644 --- a/fearless/Common/Helpers/WalletAssetsObserver.swift +++ b/fearless/Common/Helpers/WalletAssetsObserver.swift @@ -66,16 +66,16 @@ final class WalletAssetsObserverImpl: WalletAssetsObserver { // MARK: - ApplicationServiceProtocol func setup() { - guard wallet.ecosystem.isRegular else { - return - } - eventCenter.add(observer: self) - chainRegistry.chainsSubscribe( - self, - runningInQueue: walletAssetsObserverQueue - ) { [weak self] changes in - self?.handleChains(changes: changes, accounts: nil) - } +// guard wallet.ecosystem.isRegular else { +// return +// } +// eventCenter.add(observer: self) +// chainRegistry.chainsSubscribe( +// self, +// runningInQueue: walletAssetsObserverQueue +// ) { [weak self] changes in +// self?.handleChains(changes: changes, accounts: nil) +// } } func throttle() { diff --git a/fearless/Common/Services/PricesService.swift b/fearless/Common/Services/PricesService.swift index 3753f869a2..6c43af838d 100644 --- a/fearless/Common/Services/PricesService.swift +++ b/fearless/Common/Services/PricesService.swift @@ -87,11 +87,10 @@ extension PricesService: EventVisitorProtocol { observePrices(for: updatedChainAssets, currencies: currencies) } - func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { + func processSelectedCurrencyChanged(event: SelectedCurrencyChangedEvent) { let currency = event.account.selectedCurrency observePrices(for: chainAssets, currencies: [currency]) } - } private extension PricesService { diff --git a/fearless/Modules/AssetManagement/AssetManagementInteractor.swift b/fearless/Modules/AssetManagement/AssetManagementInteractor.swift index 499db37475..cb30319fcc 100644 --- a/fearless/Modules/AssetManagement/AssetManagementInteractor.swift +++ b/fearless/Modules/AssetManagement/AssetManagementInteractor.swift @@ -122,6 +122,12 @@ extension AssetManagementInteractor: AssetManagementInteractorInput { // MARK: - EventVisitorProtocol extension AssetManagementInteractor: EventVisitorProtocol { + nonisolated func processSelectedCurrencyChanged(event: SelectedCurrencyChangedEvent) { + Task { + await output?.didReceiveUpdated(wallet: event.account) + } + } + nonisolated func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { Task { await output?.didReceiveUpdated(wallet: event.account) diff --git a/fearless/Modules/DappBrowser/DappBrowserInteractor.swift b/fearless/Modules/DappBrowser/DappBrowserInteractor.swift index a3cfe7540b..b1bff6c8a1 100644 --- a/fearless/Modules/DappBrowser/DappBrowserInteractor.swift +++ b/fearless/Modules/DappBrowser/DappBrowserInteractor.swift @@ -94,6 +94,10 @@ extension DappBrowserInteractor: EventVisitorProtocol { func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { output?.didUpdate(wallet: event.account) } + + func processSelectedCurrencyChanged(event: SelectedCurrencyChangedEvent) { + output?.didUpdate(wallet: event.account) + } func processSelectedAccountChanged(event: SelectedAccountChanged) { output?.didUpdate(wallet: event.account) diff --git a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListInteractor.swift b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListInteractor.swift index a38b4e99d2..d620a92b85 100644 --- a/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListInteractor.swift +++ b/fearless/Modules/NewWallet/ChainAssetList/ChainAssetListInteractor.swift @@ -292,16 +292,20 @@ extension ChainAssetListInteractor: AccountInfoSubscriptionAdapterHandler { } extension ChainAssetListInteractor: EventVisitorProtocol { + func processSelectedCurrencyChanged(event: SelectedCurrencyChangedEvent) { + guard event.account.metaId == wallet.metaId else { + return + } + + output?.didReceiveWallet(wallet: event.account) + updateTonPricesIfNeeded() + wallet = event.account + output?.updateViewModel() + } + func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { output?.didReceiveWallet(wallet: event.account) - if wallet.selectedCurrency != event.account.selectedCurrency { - guard let chainAssets = chainAssets else { - return - } - updateTonPricesIfNeeded() - } - if wallet.assetsVisibility != event.account.assetsVisibility { updateChainAssets(using: filters, sorts: sorts, useCashe: false) } diff --git a/fearless/Modules/Profile/ProfileInteractor.swift b/fearless/Modules/Profile/ProfileInteractor.swift index d0dc3162ba..089d413f10 100644 --- a/fearless/Modules/Profile/ProfileInteractor.swift +++ b/fearless/Modules/Profile/ProfileInteractor.swift @@ -140,6 +140,10 @@ extension ProfileInteractor: EventVisitorProtocol { func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { provideUserSettings() } + + func processSelectedCurrencyChanged(event: SelectedCurrencyChangedEvent) { + provideUserSettings() + } } extension ProfileInteractor: WalletBalanceSubscriptionListener { diff --git a/fearless/Modules/Profile/ProfilePresenter.swift b/fearless/Modules/Profile/ProfilePresenter.swift index 1115cea211..b2b9f105a8 100644 --- a/fearless/Modules/Profile/ProfilePresenter.swift +++ b/fearless/Modules/Profile/ProfilePresenter.swift @@ -229,12 +229,15 @@ extension ProfilePresenter: Localizable { } extension ProfilePresenter: EventVisitorProtocol { - func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { + func processSelectedCurrencyChanged(event: SelectedCurrencyChangedEvent) { if selectedCurrency != event.account.selectedCurrency { selectedWallet = event.account let currency = event.account.selectedCurrency interactor.update(currency: currency) } + } + + func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { selectedWallet = event.account } } diff --git a/fearless/Modules/SelectCurrency/SelectCurrencyInteractor.swift b/fearless/Modules/SelectCurrency/SelectCurrencyInteractor.swift index 83e856d1c4..9113341e2d 100644 --- a/fearless/Modules/SelectCurrency/SelectCurrencyInteractor.swift +++ b/fearless/Modules/SelectCurrency/SelectCurrencyInteractor.swift @@ -59,7 +59,11 @@ final class SelectCurrencyInteractor { SelectedWalletSettings.shared.performSave(value: updatedAccount) { [weak self] result in switch result { case let .success(account): - self?.eventCenter.notify(with: MetaAccountModelChangedEvent(account: account)) + self?.eventCenter.notify(with: SelectedCurrencyChangedEvent(account: account)) + + DispatchQueue.main.async { + self?.output?.didComplete() + } case .failure: break } diff --git a/fearless/Modules/SelectCurrency/SelectCurrencyPresenter.swift b/fearless/Modules/SelectCurrency/SelectCurrencyPresenter.swift index 1b05b69287..d74e6885d4 100644 --- a/fearless/Modules/SelectCurrency/SelectCurrencyPresenter.swift +++ b/fearless/Modules/SelectCurrency/SelectCurrencyPresenter.swift @@ -57,7 +57,6 @@ extension SelectCurrencyPresenter: SelectCurrencyViewOutput { guard var currency = supportedСurrencies?.first(where: { $0.id == viewModel.id }) else { return } currency.isSelected = true interactor.didSelect(currency) - router.proceed(from: view) } func back() { @@ -82,6 +81,10 @@ extension SelectCurrencyPresenter: SelectCurrencyInteractorOutput { self.selectedCurrency = selectedCurrency provideViewModel() } + + func didComplete() { + router.proceed(from: view) + } } // MARK: - Localizable diff --git a/fearless/Modules/SelectCurrency/SelectCurrencyProtocols.swift b/fearless/Modules/SelectCurrency/SelectCurrencyProtocols.swift index 986cc065e7..804cf71352 100644 --- a/fearless/Modules/SelectCurrency/SelectCurrencyProtocols.swift +++ b/fearless/Modules/SelectCurrency/SelectCurrencyProtocols.swift @@ -20,6 +20,7 @@ protocol SelectCurrencyInteractorInput: AnyObject { protocol SelectCurrencyInteractorOutput: AnyObject { func didRecieve(supportedСurrencies: Result<[Currency], Error>) func didRecieve(selectedCurrency: Currency) + func didComplete() } protocol SelectCurrencyRouterInput: ErrorPresentable, SheetAlertPresentable { diff --git a/fearless/Modules/Staking/StakingAmount/ViewModel/BalanceViewModelFactory.swift b/fearless/Modules/Staking/StakingAmount/ViewModel/BalanceViewModelFactory.swift index ba70115a8a..68d61de88c 100644 --- a/fearless/Modules/Staking/StakingAmount/ViewModel/BalanceViewModelFactory.swift +++ b/fearless/Modules/Staking/StakingAmount/ViewModel/BalanceViewModelFactory.swift @@ -41,7 +41,7 @@ extension BalanceViewModelFactoryProtocol { final class BalanceViewModelFactory: BalanceViewModelFactoryProtocol { private let targetAssetInfo: AssetBalanceDisplayInfo private let formatterFactory: AssetBalanceFormatterFactoryProtocol - private var selectedMetaAccount: MetaAccountModel + private var wallet: MetaAccountModel private let eventCenter = EventCenter.shared @@ -52,7 +52,7 @@ final class BalanceViewModelFactory: BalanceViewModelFactoryProtocol { ) { self.targetAssetInfo = targetAssetInfo self.formatterFactory = formatterFactory - self.selectedMetaAccount = selectedMetaAccount + self.wallet = selectedMetaAccount eventCenter.add(observer: self, dispatchIn: .main) } @@ -63,7 +63,7 @@ final class BalanceViewModelFactory: BalanceViewModelFactoryProtocol { } let targetAmount = rate * amount - let priceAssetInfo = AssetBalanceDisplayInfo.forCurrency(selectedMetaAccount.selectedCurrency) + let priceAssetInfo = AssetBalanceDisplayInfo.forCurrency(wallet.selectedCurrency) let localizableFormatter = formatterFactory.createTokenFormatter(for: priceAssetInfo, usageCase: .fiat) return LocalizableResource { locale in @@ -97,7 +97,7 @@ final class BalanceViewModelFactory: BalanceViewModelFactoryProtocol { usageCase: NumberFormatterUsageCase ) -> LocalizableResource { let localizableAmountFormatter = formatterFactory.createTokenFormatter(for: targetAssetInfo, usageCase: usageCase) - let priceAssetInfo = AssetBalanceDisplayInfo.forCurrency(selectedMetaAccount.selectedCurrency) + let priceAssetInfo = AssetBalanceDisplayInfo.forCurrency(wallet.selectedCurrency) let localizablePriceFormatter = formatterFactory.createTokenFormatter(for: priceAssetInfo, usageCase: .fiat) return LocalizableResource { locale in @@ -145,7 +145,7 @@ final class BalanceViewModelFactory: BalanceViewModelFactoryProtocol { selectable: Bool ) -> LocalizableResource { let localizableBalanceFormatter = formatterFactory.createPlainTokenFormatter(for: targetAssetInfo, usageCase: .detailsCrypto) - let priceAssetInfo = AssetBalanceDisplayInfo.forCurrency(selectedMetaAccount.selectedCurrency) + let priceAssetInfo = AssetBalanceDisplayInfo.forCurrency(wallet.selectedCurrency) let localizablePriceFormatter = formatterFactory.createTokenFormatter(for: priceAssetInfo, usageCase: .fiat) let symbol = targetAssetInfo.symbol @@ -197,6 +197,18 @@ final class BalanceViewModelFactory: BalanceViewModelFactoryProtocol { extension BalanceViewModelFactory: EventVisitorProtocol { func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { - selectedMetaAccount = event.account + guard wallet.metaId == event.account.metaId else { + return + } + + wallet = event.account + } + + func processSelectedCurrencyChanged(event: SelectedCurrencyChangedEvent) { + guard wallet.metaId == event.account.metaId else { + return + } + + wallet = event.account } } diff --git a/fearless/Modules/Staking/StakingMain/StakingMainInteractor+InputProtocol.swift b/fearless/Modules/Staking/StakingMain/StakingMainInteractor+InputProtocol.swift index 09ce7f4f69..9c33258ce8 100644 --- a/fearless/Modules/Staking/StakingMain/StakingMainInteractor+InputProtocol.swift +++ b/fearless/Modules/Staking/StakingMain/StakingMainInteractor+InputProtocol.swift @@ -307,6 +307,35 @@ extension StakingMainInteractor: EventVisitorProtocol { updateAfterChainAssetSave() updateAfterSelectedAccountChange() } + + func processPricesUpdated() { + guard let selectedChainAsset else { + return + } + + chainAssetFetching.fetch( + shouldUseCache: false, + filters: [.chainAssetId(selectedChainAsset.chainAssetId)], + sortDescriptors: [] + ) { [weak self] result in + switch result { + case .success(let chainAssets): + if let updatedChainAsset = chainAssets.first { + self?.selectedChainAsset = updatedChainAsset + + + DispatchQueue.main.async { + self?.updateAfterChainAssetSave() + self?.presenter?.didUpdate(newChainAsset: updatedChainAsset) + } + } + case .failure(let error): + self?.logger?.error(error.localizedDescription) + case .none: + break + } + } + } } extension StakingMainInteractor: ApplicationHandlerDelegate { diff --git a/fearless/Modules/Staking/StakingMain/StakingMainPresenter.swift b/fearless/Modules/Staking/StakingMain/StakingMainPresenter.swift index 7040c99d43..ddf150f224 100644 --- a/fearless/Modules/Staking/StakingMain/StakingMainPresenter.swift +++ b/fearless/Modules/Staking/StakingMain/StakingMainPresenter.swift @@ -21,6 +21,7 @@ final class StakingMainPresenter { private var stateViewModelFactory: StakingStateViewModelFactoryProtocol private var stateMachine: StakingStateMachineProtocol private weak var moduleOutput: StakingMainModuleOutput? + private let eventCenter: EventCenterProtocol var chainAsset: ChainAsset? { stateMachine.viewState { (state: BaseStakingState) in state.commonData.chainAsset } @@ -55,13 +56,15 @@ final class StakingMainPresenter { dataValidatingFactory: StakingDataValidatingFactoryProtocol, logger: LoggerProtocol?, selectedMetaAccount: MetaAccountModel, - moduleOutput: StakingMainModuleOutput? + moduleOutput: StakingMainModuleOutput?, + eventCenter: EventCenterProtocol ) { self.stateViewModelFactory = stateViewModelFactory self.networkInfoViewModelFactory = networkInfoViewModelFactory self.viewModelFacade = viewModelFacade self.logger = logger self.selectedMetaAccount = selectedMetaAccount + self.eventCenter = eventCenter let stateMachine = StakingStateMachine() self.stateMachine = stateMachine @@ -70,6 +73,9 @@ final class StakingMainPresenter { stateMachine.delegate = self self.moduleOutput = moduleOutput + + eventCenter.add(observer: self, dispatchIn: .main) + } private func provideStakingInfo() { @@ -715,6 +721,13 @@ extension StakingMainPresenter: StakingMainInteractorOutputProtocol { func networkInfoViewExpansion(isExpanded: Bool) { view?.expandNetworkInfoView(isExpanded) } + + func didUpdate(newChainAsset: ChainAsset) { + stateMachine.state.process(chainAsset: newChainAsset) + provideStakingInfo() + provideMainViewModel() + provideState() + } // Parachain @@ -745,6 +758,7 @@ extension StakingMainPresenter: StakingMainInteractorOutputProtocol { func didReceive(rewardChainAsset: ChainAsset?) { stateMachine.state.process(rewardChainAsset: rewardChainAsset) } + } // MARK: - ModalPickerViewControllerDelegate @@ -890,3 +904,16 @@ extension StakingMainPresenter: WalletsManagmentModuleOutput { wireframe.showGetPreinstalledWallet(from: view) } } + +extension StakingMainPresenter: EventVisitorProtocol { + func processSelectedCurrencyChanged(event: SelectedCurrencyChangedEvent) { + guard event.account.metaId == selectedMetaAccount.metaId else { + return + } + + selectedMetaAccount = event.account + provideStakingInfo() + provideMainViewModel() + provideState() + } +} diff --git a/fearless/Modules/Staking/StakingMain/StakingMainProtocols.swift b/fearless/Modules/Staking/StakingMain/StakingMainProtocols.swift index 0b2259d23e..1c6ce140b9 100644 --- a/fearless/Modules/Staking/StakingMain/StakingMainProtocols.swift +++ b/fearless/Modules/Staking/StakingMain/StakingMainProtocols.swift @@ -75,6 +75,7 @@ protocol StakingMainInteractorOutputProtocol: AnyObject { func didReceiveMaxNominatorsCount(result: Result) func didReceive(eraCountdownResult: Result) func didReceive(rewardChainAsset: ChainAsset?) + func didUpdate(newChainAsset: ChainAsset) func didReceiveMaxNominatorsPerValidator(_ maxNominatorsPerValidator: UInt32?) diff --git a/fearless/Modules/Staking/StakingMain/StakingMainViewFactory.swift b/fearless/Modules/Staking/StakingMain/StakingMainViewFactory.swift index 9a4cd84f12..6b2f5ba5db 100644 --- a/fearless/Modules/Staking/StakingMain/StakingMainViewFactory.swift +++ b/fearless/Modules/Staking/StakingMain/StakingMainViewFactory.swift @@ -90,7 +90,8 @@ final class StakingMainViewFactory: StakingMainViewFactoryProtocol { dataValidatingFactory: dataValidatingFactory, logger: logger, selectedMetaAccount: selectedAccount, - moduleOutput: moduleOutput + moduleOutput: moduleOutput, + eventCenter: eventCenter ) view.presenter = presenter diff --git a/fearless/Modules/Staking/StakingMain/ViewModel/StakingStateViewModelFactory.swift b/fearless/Modules/Staking/StakingMain/ViewModel/StakingStateViewModelFactory.swift index 90be261a1a..40ccadb84d 100644 --- a/fearless/Modules/Staking/StakingMain/ViewModel/StakingStateViewModelFactory.swift +++ b/fearless/Modules/Staking/StakingMain/ViewModel/StakingStateViewModelFactory.swift @@ -611,6 +611,18 @@ extension StakingStateViewModelFactory: StakingStateViewModelFactoryProtocol { extension StakingStateViewModelFactory: EventVisitorProtocol { func processMetaAccountChanged(event: MetaAccountModelChangedEvent) { + guard selectedMetaAccount.metaId == event.account.metaId else { + return + } + + selectedMetaAccount = event.account + } + + func processSelectedCurrencyChanged(event: SelectedCurrencyChangedEvent) { + guard selectedMetaAccount.metaId == event.account.metaId else { + return + } + selectedMetaAccount = event.account } } diff --git a/fearless/Modules/WalletMainContainer/WalletMainContainerInteractor.swift b/fearless/Modules/WalletMainContainer/WalletMainContainerInteractor.swift index ceebf6d03b..de2094bcce 100644 --- a/fearless/Modules/WalletMainContainer/WalletMainContainerInteractor.swift +++ b/fearless/Modules/WalletMainContainer/WalletMainContainerInteractor.swift @@ -146,6 +146,11 @@ extension WalletMainContainerInteractor: EventVisitorProtocol { wallet = event.account output?.didReceiveAccount(event.account) } + + func processSelectedCurrencyChanged(event: SelectedCurrencyChangedEvent) { + wallet = event.account + output?.didReceiveAccount(event.account) + } func processSelectedAccountChanged(event _: SelectedAccountChanged) { guard let wallet = SelectedWalletSettings.shared.value else { From 2c3588c3dd130babde3623b91b427803a8efe895 Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Wed, 29 Jan 2025 16:34:34 +0700 Subject: [PATCH 145/156] tonconnect fix --- fearless.xcodeproj/project.pbxproj | 4 ++++ fearless/Common/EventCenter/EventVisitor.swift | 2 ++ .../EventCenter/Events/TonConnectEstablished.swift | 7 +++++++ .../WalletConnectActiveSessionsAssembly.swift | 3 ++- .../WalletConnectActiveSessionsAssembly.swift.rej | 9 +++++++++ .../WalletConnectActiveSessionsInteractor.swift | 12 +++++++++++- .../WalletConnectProposalAssembly.swift | 4 +++- .../WalletConnectProposalInteractor.swift | 6 +++++- 8 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 fearless/Common/EventCenter/Events/TonConnectEstablished.swift create mode 100644 fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsAssembly.swift.rej diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index dda804ccee..9afba04da0 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -377,6 +377,7 @@ 07DFA456289B78E20035A8AB /* CopyableLabelView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07DFA455289B78E10035A8AB /* CopyableLabelView.swift */; }; 07DFA45A289B8D520035A8AB /* WalletBalanceInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07DFA459289B8D520035A8AB /* WalletBalanceInfo.swift */; }; 07E346D4288E616E00A8FAEC /* WalletBalanceBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07E346D3288E616E00A8FAEC /* WalletBalanceBuilder.swift */; }; + 07E77AAB2D49EEB500F25F60 /* TonConnectEstablished.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07E77AAA2D49EEB500F25F60 /* TonConnectEstablished.swift */; }; 07EC555B2CD8A3600074132E /* MultiAssetV12.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = 07EC555A2CD8A3600074132E /* MultiAssetV12.xcmappingmodel */; }; 07ECB7F32C69CF13000E0A14 /* TonConnectDessision.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB7F22C69CF13000E0A14 /* TonConnectDessision.swift */; }; 07ECB7F52C69EDCE000E0A14 /* SessionStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07ECB7F42C69EDCE000E0A14 /* SessionStatus.swift */; }; @@ -3606,6 +3607,7 @@ 07DFA455289B78E10035A8AB /* CopyableLabelView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CopyableLabelView.swift; path = fearless/Common/View/CopyableLabelView.swift; sourceTree = SOURCE_ROOT; }; 07DFA459289B8D520035A8AB /* WalletBalanceInfo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletBalanceInfo.swift; sourceTree = ""; }; 07E346D3288E616E00A8FAEC /* WalletBalanceBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletBalanceBuilder.swift; sourceTree = ""; }; + 07E77AAA2D49EEB500F25F60 /* TonConnectEstablished.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectEstablished.swift; sourceTree = ""; }; 07EC555A2CD8A3600074132E /* MultiAssetV12.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = MultiAssetV12.xcmappingmodel; sourceTree = ""; }; 07ECB7F22C69CF13000E0A14 /* TonConnectDessision.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TonConnectDessision.swift; sourceTree = ""; }; 07ECB7F42C69EDCE000E0A14 /* SessionStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionStatus.swift; sourceTree = ""; }; @@ -11457,6 +11459,7 @@ FA37AE4C28603C37001DCA96 /* StakingUpdatedEvent.swift */, FAE39AF22A9E1A4F0011A9D6 /* ChainsSetupCompleted.swift */, C65C7F6A2AD82B8D0069D877 /* LogoutEvent.swift */, + 07E77AAA2D49EEB500F25F60 /* TonConnectEstablished.swift */, ); path = Events; sourceTree = ""; @@ -19615,6 +19618,7 @@ 3E053332BA9D170FB1569ABB /* WalletTransactionDetailsProtocols.swift in Sources */, 002561414AF1F8F3B4B65538 /* WalletTransactionDetailsWireframe.swift in Sources */, FA88005D2B319F9D000AE5EB /* BaseStakingAccountResolver.swift in Sources */, + 07E77AAB2D49EEB500F25F60 /* TonConnectEstablished.swift in Sources */, 05A6BB4F8F0912404A4D8413 /* WalletTransactionDetailsPresenter.swift in Sources */, 69DE177B9D1745FEE848E870 /* WalletTransactionDetailsInteractor.swift in Sources */, 44B20C179522F7E38DAA2441 /* WalletTransactionDetailsViewController.swift in Sources */, diff --git a/fearless/Common/EventCenter/EventVisitor.swift b/fearless/Common/EventCenter/EventVisitor.swift index 767e44a789..2f0fca55bb 100644 --- a/fearless/Common/EventCenter/EventVisitor.swift +++ b/fearless/Common/EventCenter/EventVisitor.swift @@ -30,6 +30,7 @@ protocol EventVisitorProtocol: AnyObject { func processAccountScoreSettingsChanged() func processPricesUpdated() func processSelectedCurrencyChanged(event: SelectedCurrencyChangedEvent) + func processTonConnectEstablished() } extension EventVisitorProtocol { @@ -62,4 +63,5 @@ extension EventVisitorProtocol { func processAccountScoreSettingsChanged() {} func processPricesUpdated() {} func processSelectedCurrencyChanged(event: SelectedCurrencyChangedEvent) {} + func processTonConnectEstablished() {} } diff --git a/fearless/Common/EventCenter/Events/TonConnectEstablished.swift b/fearless/Common/EventCenter/Events/TonConnectEstablished.swift new file mode 100644 index 0000000000..c095a1884d --- /dev/null +++ b/fearless/Common/EventCenter/Events/TonConnectEstablished.swift @@ -0,0 +1,7 @@ +import Foundation + +struct TonConnectEstablished: EventProtocol { + func accept(visitor: any EventVisitorProtocol) { + visitor.processTonConnectEstablished() + } +} diff --git a/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsAssembly.swift b/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsAssembly.swift index 1e745a6949..c2baf192c8 100644 --- a/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsAssembly.swift +++ b/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsAssembly.swift @@ -12,7 +12,8 @@ final class WalletConnectActiveSessionsAssembly { wallet: wallet, walletConnectService: WalletConnectServiceImpl.shared, appRepository: ServiceAssembly.shared.tonConnectAppAsyncRepository(), - tonConnectService: ServiceAssembly.shared.tonConnectService() + tonConnectService: ServiceAssembly.shared.tonConnectService(), + eventCenter: ServiceAssembly.shared.eventCenter ) let router = WalletConnectActiveSessionsRouter() diff --git a/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsAssembly.swift.rej b/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsAssembly.swift.rej new file mode 100644 index 0000000000..058c4bd0c0 --- /dev/null +++ b/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsAssembly.swift.rej @@ -0,0 +1,9 @@ +diff a/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsAssembly.swift b/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsAssembly.swift (rejected hunks) +@@ -13,6 +13,7 @@ final class WalletConnectActiveSessionsAssembly { + walletConnectService: WalletConnectServiceImpl.shared, + appRepository: ServiceAssembly.shared.tonConnectAppAsyncRepository(), + tonConnectService: ServiceAssembly.shared.tonConnectService(), ++ eventCenter: ServiceAssembly.shared.eventCenter + ) + let router = WalletConnectActiveSessionsRouter() + diff --git a/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsInteractor.swift b/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsInteractor.swift index d72a9dba0a..15ff1cc775 100644 --- a/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsInteractor.swift +++ b/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsInteractor.swift @@ -17,17 +17,21 @@ final class WalletConnectActiveSessionsInteractor { private let walletConnectService: WalletConnectService private let appRepository: AsyncAnyRepository private let tonConnectService: TonConnectService + private let eventCenter: EventCenterProtocol init( wallet: MetaAccountModel, walletConnectService: WalletConnectService, appRepository: AsyncAnyRepository, - tonConnectService: TonConnectService + tonConnectService: TonConnectService, + eventCenter: EventCenterProtocol + ) { self.wallet = wallet self.walletConnectService = walletConnectService self.appRepository = appRepository self.tonConnectService = tonConnectService + self.eventCenter = eventCenter } } @@ -70,3 +74,9 @@ extension WalletConnectActiveSessionsInteractor: WalletConnectServiceDelegate { output?.didReceive(sessions: sessions) } } + +extension WalletConnectActiveSessionsInteractor: EventVisitorProtocol { + func processTonConnectEstablished() { + getSesstion() + } +} diff --git a/fearless/Modules/WalletConnectProposal/WalletConnectProposalAssembly.swift b/fearless/Modules/WalletConnectProposal/WalletConnectProposalAssembly.swift index b2d686ac74..cf25e84ec5 100644 --- a/fearless/Modules/WalletConnectProposal/WalletConnectProposalAssembly.swift +++ b/fearless/Modules/WalletConnectProposal/WalletConnectProposalAssembly.swift @@ -21,7 +21,9 @@ final class WalletConnectProposalAssembly { walletRepository: AnyDataProviderRepository(accountRepository), chainRepository: AnyDataProviderRepository(chainRepository), operationQueue: OperationManagerFacade.sharedDefaultQueue, - tonConnectService: ServiceAssembly.shared.tonConnectService() + tonConnectService: ServiceAssembly.shared.tonConnectService(), + eventCenter: ServiceAssembly.shared.eventCenter + ) let router = WalletConnectProposalRouter() diff --git a/fearless/Modules/WalletConnectProposal/WalletConnectProposalInteractor.swift b/fearless/Modules/WalletConnectProposal/WalletConnectProposalInteractor.swift index 8a4bbebba1..98e9c3a50b 100644 --- a/fearless/Modules/WalletConnectProposal/WalletConnectProposalInteractor.swift +++ b/fearless/Modules/WalletConnectProposal/WalletConnectProposalInteractor.swift @@ -18,19 +18,22 @@ final class WalletConnectProposalInteractor { private let chainRepository: AnyDataProviderRepository private let operationQueue: OperationQueue private let tonConnectService: TonConnectService + private let eventCenter: EventCenterProtocol init( walletConnect: WalletConnectService, walletRepository: AnyDataProviderRepository, chainRepository: AnyDataProviderRepository, operationQueue: OperationQueue, - tonConnectService: TonConnectService + tonConnectService: TonConnectService, + eventCenter: EventCenterProtocol ) { self.walletConnect = walletConnect self.walletRepository = walletRepository self.chainRepository = chainRepository self.operationQueue = operationQueue self.tonConnectService = tonConnectService + self.eventCenter = eventCenter } // MARK: - Private methods @@ -95,5 +98,6 @@ extension WalletConnectProposalInteractor: WalletConnectProposalInteractorInput params: params, manifest: manifest ) + eventCenter.notify(with: TonConnectEstablished()) } } From 515a05471c72117a135775fac67562fbf89ac36f Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Wed, 29 Jan 2025 16:35:03 +0700 Subject: [PATCH 146/156] rej removed --- .../WalletConnectActiveSessionsAssembly.swift.rej | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsAssembly.swift.rej diff --git a/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsAssembly.swift.rej b/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsAssembly.swift.rej deleted file mode 100644 index 058c4bd0c0..0000000000 --- a/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsAssembly.swift.rej +++ /dev/null @@ -1,9 +0,0 @@ -diff a/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsAssembly.swift b/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsAssembly.swift (rejected hunks) -@@ -13,6 +13,7 @@ final class WalletConnectActiveSessionsAssembly { - walletConnectService: WalletConnectServiceImpl.shared, - appRepository: ServiceAssembly.shared.tonConnectAppAsyncRepository(), - tonConnectService: ServiceAssembly.shared.tonConnectService(), -+ eventCenter: ServiceAssembly.shared.eventCenter - ) - let router = WalletConnectActiveSessionsRouter() - From 2547361e18057792d60c544302c0d68c8946a54f Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Wed, 29 Jan 2025 17:36:54 +0700 Subject: [PATCH 147/156] wallet connect as event center observer --- .../WalletConnectActiveSessionsInteractor.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsInteractor.swift b/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsInteractor.swift index 15ff1cc775..75b474f25a 100644 --- a/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsInteractor.swift +++ b/fearless/Modules/WalletConnectActiveSessions/WalletConnectActiveSessionsInteractor.swift @@ -32,6 +32,8 @@ final class WalletConnectActiveSessionsInteractor { self.appRepository = appRepository self.tonConnectService = tonConnectService self.eventCenter = eventCenter + + eventCenter.add(observer: self) } } From 5abd75a37fcaa303831f56be0997c8a2aa1f8c52 Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Thu, 30 Jan 2025 13:56:15 +0700 Subject: [PATCH 148/156] all done text fixed --- fearless/Modules/AllDone/AllDoneViewModelFactory.swift | 4 ++-- fearless/en.lproj/Localizable.strings | 2 ++ fearless/id.lproj/Localizable.strings | 2 ++ fearless/ja.lproj/Localizable.strings | 4 +++- fearless/pt-PT.lproj/Localizable.strings | 2 ++ fearless/ru.lproj/Localizable.strings | 2 ++ fearless/tr.lproj/Localizable.strings | 4 +++- fearless/vi.lproj/Localizable.strings | 4 +++- fearless/zh-Hans.lproj/Localizable.strings | 4 +++- 9 files changed, 22 insertions(+), 6 deletions(-) diff --git a/fearless/Modules/AllDone/AllDoneViewModelFactory.swift b/fearless/Modules/AllDone/AllDoneViewModelFactory.swift index 6c8469bf05..173d6efc5e 100644 --- a/fearless/Modules/AllDone/AllDoneViewModelFactory.swift +++ b/fearless/Modules/AllDone/AllDoneViewModelFactory.swift @@ -19,9 +19,9 @@ final class AllDoneViewModelFactory: AllDoneViewModelFactoryProtocol { isWalletConnectResult: Bool ) -> AllDoneViewModel { let defaultTitle = R.string.localizable - .allDoneAlertAllDoneStub(preferredLanguages: locale.rLanguages) + .commonTransactionSent(preferredLanguages: locale.rLanguages) let defaultDesription = R.string.localizable - .allDoneAlertDescriptionStub(preferredLanguages: locale.rLanguages) + .commonTransactionSentDescription(preferredLanguages: locale.rLanguages) return AllDoneViewModel( title: title ?? defaultTitle, diff --git a/fearless/en.lproj/Localizable.strings b/fearless/en.lproj/Localizable.strings index e5dbc602fd..28a98c403a 100644 --- a/fearless/en.lproj/Localizable.strings +++ b/fearless/en.lproj/Localizable.strings @@ -1254,3 +1254,5 @@ belongs to the right network"; "your.validators.stop.nominating.title" = "Stop nominating"; "your.validators.validator.total.stake" = "Total staked: %@"; "сurrencies.stub.text" = "Currencies"; +"common.transaction.sent" = "Transaction sent"; +"common.transaction.sent.description" = "Your transaction has been successfully sent to the blockchain"; diff --git a/fearless/id.lproj/Localizable.strings b/fearless/id.lproj/Localizable.strings index c5e3a8066c..396053af2b 100644 --- a/fearless/id.lproj/Localizable.strings +++ b/fearless/id.lproj/Localizable.strings @@ -1238,3 +1238,5 @@ akan muncul di sini"; "your.validators.stop.nominating.title" = "berhenti mencalonkan diri"; "your.validators.validator.total.stake" = "Total ditaruhkan: %@"; "сurrencies.stub.text" = "Mata uang"; +"common.transaction.sent" = "Transaction sent"; +"common.transaction.sent.description" = "Your transaction has been successfully sent to the blockchain"; diff --git a/fearless/ja.lproj/Localizable.strings b/fearless/ja.lproj/Localizable.strings index a6c92670fc..1a85281f60 100644 --- a/fearless/ja.lproj/Localizable.strings +++ b/fearless/ja.lproj/Localizable.strings @@ -1243,4 +1243,6 @@ "your.validators.change.validators.title" = "バリデーターの変更"; "your.validators.stop.nominating.title" = "ノミネートを中止"; "your.validators.validator.total.stake" = "総ステーク:%@"; -"сurrencies.stub.text" = "通貨"; \ No newline at end of file +"сurrencies.stub.text" = "通貨"; +"common.transaction.sent" = "Transaction sent"; +"common.transaction.sent.description" = "Your transaction has been successfully sent to the blockchain"; diff --git a/fearless/pt-PT.lproj/Localizable.strings b/fearless/pt-PT.lproj/Localizable.strings index 3c30eb766c..b1dbde191f 100644 --- a/fearless/pt-PT.lproj/Localizable.strings +++ b/fearless/pt-PT.lproj/Localizable.strings @@ -1286,3 +1286,5 @@ To find out more, contact %@"; "profile.account.score.title" = "Nomis multichain score"; "scam.info.nomis.name" = "Nomis multi-chain score"; "scam.info.nomis.subtype.text" = "Proceed with caution"; +"common.transaction.sent" = "Transaction sent"; +"common.transaction.sent.description" = "Your transaction has been successfully sent to the blockchain"; diff --git a/fearless/ru.lproj/Localizable.strings b/fearless/ru.lproj/Localizable.strings index 740ce279cd..4f9a7535bf 100644 --- a/fearless/ru.lproj/Localizable.strings +++ b/fearless/ru.lproj/Localizable.strings @@ -1252,3 +1252,5 @@ "your.validators.stop.nominating.title" = "Прекратить номинирование"; "your.validators.validator.total.stake" = "Всего в стейкинге: %@"; "сurrencies.stub.text" = "Токены"; +"common.transaction.sent" = "Transaction sent"; +"common.transaction.sent.description" = "Your transaction has been successfully sent to the blockchain"; diff --git a/fearless/tr.lproj/Localizable.strings b/fearless/tr.lproj/Localizable.strings index 82078be787..789f56d7d8 100644 --- a/fearless/tr.lproj/Localizable.strings +++ b/fearless/tr.lproj/Localizable.strings @@ -1249,4 +1249,6 @@ ait olduğundan emin olun."; "your.validators.change.validators.title" = "Doğrulayıcıları değiştir"; "your.validators.stop.nominating.title" = "Aday göstermeyi bırak"; "your.validators.validator.total.stake" = "Toplam yatırılan miktar:%@"; -"сurrencies.stub.text" = "Para birimleri"; \ No newline at end of file +"сurrencies.stub.text" = "Para birimleri"; +"common.transaction.sent" = "Transaction sent"; +"common.transaction.sent.description" = "Your transaction has been successfully sent to the blockchain"; diff --git a/fearless/vi.lproj/Localizable.strings b/fearless/vi.lproj/Localizable.strings index dd1d8d3007..02ab3ec678 100644 --- a/fearless/vi.lproj/Localizable.strings +++ b/fearless/vi.lproj/Localizable.strings @@ -1251,4 +1251,6 @@ thuộc đúng mạng"; "your.validators.change.validators.title" = "Thay đổi validator"; "your.validators.stop.nominating.title" = "Dừng đề cử"; "your.validators.validator.total.stake" = "Tổng đã stake: %@"; -"сurrencies.stub.text" = "Tiền tệ"; \ No newline at end of file +"сurrencies.stub.text" = "Tiền tệ"; +"common.transaction.sent" = "Transaction sent"; +"common.transaction.sent.description" = "Your transaction has been successfully sent to the blockchain"; diff --git a/fearless/zh-Hans.lproj/Localizable.strings b/fearless/zh-Hans.lproj/Localizable.strings index 1f9126e057..78f5eb47ab 100644 --- a/fearless/zh-Hans.lproj/Localizable.strings +++ b/fearless/zh-Hans.lproj/Localizable.strings @@ -1248,4 +1248,6 @@ "your.validators.change.validators.title" = "更改验证人"; "your.validators.stop.nominating.title" = "停止提名"; "your.validators.validator.total.stake" = "总质押:%@"; -"сurrencies.stub.text" = "货币"; \ No newline at end of file +"сurrencies.stub.text" = "货币"; +"common.transaction.sent" = "Transaction sent"; +"common.transaction.sent.description" = "Your transaction has been successfully sent to the blockchain"; From 518bf84b9268b0da014fa7e7b859077a0b9c34fb Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Thu, 30 Jan 2025 13:59:41 +0700 Subject: [PATCH 149/156] wallet connect fixes --- .../WalletConnectConfirmationPresenter.swift | 4 +-- .../WalletConnectProposalViewModel.swift | 4 ++- ...alletConnectProposalViewModelFactory.swift | 28 +++++++++++++++++-- ...alletConnectProposalWalletsTableCell.swift | 2 +- 4 files changed, 32 insertions(+), 6 deletions(-) diff --git a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationPresenter.swift b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationPresenter.swift index 81fb0b414b..6cfc7d591e 100644 --- a/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationPresenter.swift +++ b/fearless/Modules/WalletConnectConfirmation/WalletConnectConfirmationPresenter.swift @@ -108,8 +108,8 @@ final class WalletConnectConfirmationPresenter { private func approveTonConnect() async throws { _ = try await interactor.approve() Task { @MainActor in - router.dismiss(view: view) - view?.controller.onInteractionDismiss() + showAllDone(hash: nil) + view?.didStopLoading() } } diff --git a/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModel.swift b/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModel.swift index 41f3f19954..5659bf49ab 100644 --- a/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModel.swift +++ b/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModel.swift @@ -114,12 +114,14 @@ enum WalletConnectProposalCellModel { let metaId: String let walletName: String var isSelected: Bool + let icon: UIImage func toggle() -> Self { WalletViewModel( metaId: metaId, walletName: walletName, - isSelected: !isSelected + isSelected: !isSelected, + icon: icon ) } } diff --git a/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModelFactory.swift b/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModelFactory.swift index 6b6a59ffad..29ff710feb 100644 --- a/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModelFactory.swift +++ b/fearless/Modules/WalletConnectProposal/Model/WalletConnectProposalViewModelFactory.swift @@ -32,6 +32,7 @@ final class WalletConnectProposalViewModelFactoryImpl: WalletConnectProposalView wallets: [MetaAccountModel], locale: Locale ) throws -> WalletConnectProposalViewModel { + let wallets = filterWallets(wallets: wallets) switch status { case let .proposal(connectProposal): switch connectProposal { @@ -109,6 +110,27 @@ final class WalletConnectProposalViewModelFactoryImpl: WalletConnectProposalView } // MARK: - Private methods + + private func filterWallets(wallets: [MetaAccountModel]) -> [MetaAccountModel] { + return wallets.filter { wallet in + switch status { + case .proposal(let connectProposal): + switch connectProposal { + case .walletConnect: + return wallet.ecosystem.isRegular + case .tonJsBridge, .tonConnect: + return wallet.ecosystem.isTon + } + case .active(let actionConnect): + switch actionConnect { + case .walletConnect: + return wallet.ecosystem.isRegular + case .tonConnect: + return wallet.ecosystem.isTon + } + } + } + } private func createDAppViewModel() -> WalletConnectProposalCellModel.DetailsViewModel { switch status { @@ -376,11 +398,13 @@ final class WalletConnectProposalViewModelFactoryImpl: WalletConnectProposalView from wallets: [MetaAccountModel], forActiveSession: Bool ) -> [WalletConnectProposalCellModel] { - wallets.enumerated().map { index, wallet in + let selectedWallet = SelectedWalletSettings.shared.value + return wallets.enumerated().map { index, wallet in let viewModel = WalletConnectProposalCellModel.WalletViewModel( metaId: wallet.metaId, walletName: wallet.name, - isSelected: forActiveSession ? true : index == 0 + isSelected: forActiveSession ? true : wallet.metaId == selectedWallet?.metaId, + icon: wallet.ecosystem.isRegular ? R.image.iconBirdGreen()! : R.image.tonIcon()! ) return WalletConnectProposalCellModel.wallet(viewModel) } diff --git a/fearless/Modules/WalletConnectProposal/WalletConnectProposalWalletsTableCell.swift b/fearless/Modules/WalletConnectProposal/WalletConnectProposalWalletsTableCell.swift index f403b32fa6..9f8b76749c 100644 --- a/fearless/Modules/WalletConnectProposal/WalletConnectProposalWalletsTableCell.swift +++ b/fearless/Modules/WalletConnectProposal/WalletConnectProposalWalletsTableCell.swift @@ -15,7 +15,6 @@ final class WalletConnectProposalWalletsTableCell: UITableViewCell { view.borderWidth = 2 view.layout = .singleTitle view.highlightedStrokeColor = R.color.colorPink()! - view.iconImage = R.image.iconBirdGreen() view.isUserInteractionEnabled = false view.triangularedBackgroundView?.gradientBorderColors = UIColor.walletBorderGradientColors return view @@ -38,6 +37,7 @@ final class WalletConnectProposalWalletsTableCell: UITableViewCell { view.title = viewModel.walletName view.layoutIfNeeded() view.triangularedBackgroundView?.setGradientBorder(highlighted: viewModel.isSelected, animated: true) + view.iconImage = viewModel.icon } // MARK: - Private methods From 090da4cc41dff4d86ebc727ee04e77bb25ea6e16 Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Thu, 30 Jan 2025 15:53:39 +0700 Subject: [PATCH 150/156] subscribe for prices after wallet created --- fearless/Common/Services/PricesService.swift | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fearless/Common/Services/PricesService.swift b/fearless/Common/Services/PricesService.swift index 6c43af838d..2395c4302e 100644 --- a/fearless/Common/Services/PricesService.swift +++ b/fearless/Common/Services/PricesService.swift @@ -78,6 +78,10 @@ extension PricesService: PriceLocalSubscriptionHandler { } extension PricesService: EventVisitorProtocol { + func processSelectedAccountChanged(event: SelectedAccountChanged) { + subscribe() + } + func processChainSyncDidComplete(event: ChainSyncDidComplete) { subscribe() } From d24eac155b9bc17b55f3c5031d30bf3962012edb Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Fri, 31 Jan 2025 00:36:05 +0700 Subject: [PATCH 151/156] icon colors fixed --- .../iconWalletConnect.imageset/Contents.json | 2 +- .../iconWalletConnect.pdf | Bin 1268 -> 0 bytes .../wallet_connect.pdf | Bin 0 -> 4089 bytes .../pinkPolkaswap.imageset/polkaswap.pdf | Bin 2812 -> 4215 bytes 4 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 fearless/Assets.xcassets/iconWalletConnect.imageset/iconWalletConnect.pdf create mode 100644 fearless/Assets.xcassets/iconWalletConnect.imageset/wallet_connect.pdf diff --git a/fearless/Assets.xcassets/iconWalletConnect.imageset/Contents.json b/fearless/Assets.xcassets/iconWalletConnect.imageset/Contents.json index 2cb9c97d37..9f86f7a775 100644 --- a/fearless/Assets.xcassets/iconWalletConnect.imageset/Contents.json +++ b/fearless/Assets.xcassets/iconWalletConnect.imageset/Contents.json @@ -1,7 +1,7 @@ { "images" : [ { - "filename" : "iconWalletConnect.pdf", + "filename" : "wallet_connect.pdf", "idiom" : "universal" } ], diff --git a/fearless/Assets.xcassets/iconWalletConnect.imageset/iconWalletConnect.pdf b/fearless/Assets.xcassets/iconWalletConnect.imageset/iconWalletConnect.pdf deleted file mode 100644 index 1de521c8bf462e7003f3e3f1a7411d17175684be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1268 zcma)6O>dkq5WUZ@n9EAZA;vZz1}Tcv>^4=^R^5``q8=#gY^YdhfmCUKea0*{rW+}p z0~#Ll=F88lwws#^!4!Z%j_vm!fOvU{S685$op}Z6Sub$gOkXywh*)Q+WW+ve4Mfq``g?K)&C%F;B!0|;(6k&d8BFb&uZ1k@~GiNrcS|;LrK}eo2F@p9`C-9(#e9a ze|~BVw#8mgz$d+{itF|X?|juwVwsOv#7vrDGPId;-M5cjse3ecDWB4<+h))WRWujL zg4?1a4C4v%uA70}H4HvfJ8Bip1i7oTZXby&PWtZ&@iHZgOlH8|6`TiO7ei6E`z7_M z)Aztp!EtKy#3YWx7zv(Ca2!2s928QY#%4%~^aP4dh?$^+TN1NWIcVsLs@5Ht(|f<6 ub)5C>L7(GUwL3p9CCJ-$Kr`^T;NZ6UtEv0(|5S9tIF8^^0;|>A&o|HYi4sl# diff --git a/fearless/Assets.xcassets/iconWalletConnect.imageset/wallet_connect.pdf b/fearless/Assets.xcassets/iconWalletConnect.imageset/wallet_connect.pdf new file mode 100644 index 0000000000000000000000000000000000000000..bc7cc50b9517f6a9bdc9e3bd2b6ad17157bfbca6 GIT binary patch literal 4089 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 literal 0 HcmV?d00001 diff --git a/fearless/Assets.xcassets/pinkPolkaswap.imageset/polkaswap.pdf b/fearless/Assets.xcassets/pinkPolkaswap.imageset/polkaswap.pdf index efffa9267b385a8f95da974fca982c7e144f07f3..6e3eebf76835bbba32f04cf8dd3e4722ab036b8c 100644 GIT binary patch literal 4215 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 S|DzMKNLe|MsHld4=KlZ!fNanJ literal 2812 zcmZuzO>Y}F5WVwP@M0i2gyQgbk1u{1w~xmsX#pJ4XPTEB|Y=l|=(RZ1~OD}(anTrhGY$SH55vs!wUg4f#1204{3#)hY5(JCXz2Gd6h&(kic` zPfn6il)%1+2oAJ&S@u^osF2PE;OrvvG4do6lS@9!OJoq2SYZ*OF)}I&HdD{G3LV6g zfMM@5f>Aweu3%9a?X@9hMp`G&(ZUL@7vNRafpl!raookAZI4h+{4#upz zA~pVq({!(6U#(Y>mufB%R^3v^I~S1Tv$O-H9GynkYAJ9UZOWRu#1ko(vUBz<^MpiN zRA6k`%6v{ce+B9CS5L8psT2wmnI<-rs%_ zHIEJ6h?;JIa~x_ME5}P@Xq8h>AxEAlBWN`!HI;qzYQ|fb8&p}et2J$dsAbU9awR%T zwhPJ?p`{YiscB?vNc&O<6~qQ5i6=>jiT4hlqq5dnk9QrgvlgMR5c1)bBa>}tAe7_v zQ|8AzySM`3>XmcV8a|?BMfh)S8-~lw&jz%whEkQ0RW{ZTK6cQ|g`*JBFwrroG2|k6 zjv3`s)M!FgFM(7Dxf45};YJs@;nq{NQ^R>o39YjtH6na(Zt+Z(99kAza^9k#oA{H% z1`VR}YTzaLOJr()5Q(f$jK~MHfxs&NX4hTy%66 zfzEGtlHZEeD8}ZcYP$k)6h4cs_+9XzGEX6=k%gy|X_PS(sZKJefHvVQ-fp+M<3WD> z6B7^C;*bCS9_8YG^*GMJuj9jd^=|h~ew@;Q0&g4RP6gj~Criumu=~0n#)IUUYB`&` z-EEKK79M$^I)V4AJurz1E>JgiF;vH~#n0;pP?fA;DNlZGcVBUrF8CjSbe6)IB^G$7 z4x8}X)p7M@_jrEw+kX5kP%~nB-27Jt@2!`B=Y`~!o!nN)f+w#E850nSXAp*~XOP27 zdjE*|%*^_OukFrO}dx From 504917d9fa3eba22e224a17abc80b1c537618d15 Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Mon, 17 Feb 2025 15:45:04 +0700 Subject: [PATCH 152/156] coinbase provider added --- Podfile | 2 +- Podfile.lock | 8 +- fearless.xcodeproj/project.pbxproj | 380 +++++++++--------- .../xcshareddata/swiftpm/Package.resolved | 15 +- .../Coinbase SVG Icon.pdf | Bin 0 -> 1282 bytes .../iconCoinbase.imageset/Contents.json | 12 + .../Common/Helpers/AssetModelMapper.swift | 4 +- .../CoinbasePurchaseProvider.swift | 46 +++ .../PurchaseAggregator+Default.swift | 7 +- .../PurchaseProvider/PurchaseProvider.swift | 5 + .../PurchaseProviderProtocol.swift | 5 + .../ChainRegistry/ChainSyncService.swift | 2 +- .../EntityToModel/ChainModelMapper.swift | 6 +- .../SubstrateStorageVersion.swift | 3 + .../.xccurrentversion | 2 +- .../contents | 198 +++++++++ .../Storage/SubstrateDataStorageFacade.swift | 2 +- .../Resources/chains.json | 4 +- .../ChainAccount/ChainAccountPresenter.swift | 5 +- 19 files changed, 505 insertions(+), 201 deletions(-) create mode 100644 fearless/Assets.xcassets/iconCoinbase.imageset/Coinbase SVG Icon.pdf create mode 100644 fearless/Assets.xcassets/iconCoinbase.imageset/Contents.json create mode 100644 fearless/Common/PurchaseProvider/CoinbasePurchaseProvider.swift create mode 100644 fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v9.xcdatamodel/contents diff --git a/Podfile b/Podfile index 50b3bcdf35..a14b557c90 100644 --- a/Podfile +++ b/Podfile @@ -20,7 +20,7 @@ abstract_target 'fearlessAll' do pod 'SVGKit' pod 'Charts', '~> 4.1.0' pod 'MediaView', :git => 'https://github.com/bnsports/MediaView.git', :branch => 'dev' - pod 'FearlessKeys', '0.1.4' + pod 'FearlessKeys', '0.1.5' target 'fearlessTests' do inherit! :search_paths diff --git a/Podfile.lock b/Podfile.lock index f325ec2052..84d0880e26 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -9,7 +9,7 @@ PODS: - Cuckoo (2.0.9): - Cuckoo/Swift (= 2.0.9) - Cuckoo/Swift (2.0.9) - - FearlessKeys (0.1.4) + - FearlessKeys (0.1.5) - FireMock (3.1) - Kingfisher (7.10.2) - MediaView (0.2.0) @@ -82,7 +82,7 @@ PODS: DEPENDENCIES: - Charts (~> 4.1.0) - Cuckoo - - FearlessKeys (= 0.1.4) + - FearlessKeys (= 0.1.5) - FireMock - Kingfisher (= 7.10.2) - MediaView (from `https://github.com/bnsports/MediaView.git`, branch `dev`) @@ -140,7 +140,7 @@ SPEC CHECKSUMS: Charts: ce0768268078eee0336f122c3c4ca248e4e204c5 CocoaLumberjack: 6a459bc897d6d80bd1b8c78482ec7ad05dffc3f0 Cuckoo: e2cc9a06a47d3faee7430a261c9c654b79b35f6e - FearlessKeys: 5ec2782533624d237c899677a8c10859fbbc6668 + FearlessKeys: 54697ac7bdb2a16aa4525bed06c8769a351606db FireMock: 3eed872059c12f94855413347da83b9d6d1a6fac Kingfisher: 99edc495d3b7607e6425f0d6f6847b2abd6d716d MediaView: 10ff6a5c7950a7c72c5da9e9b89cc85a981e6abc @@ -158,6 +158,6 @@ SPEC CHECKSUMS: SwiftLint: bd7cfb914762ab5f0cbb632964849571db075706 SwiftyBeaver: ade157e4f857812e7d7f15f2e3396bb8733f8a1c -PODFILE CHECKSUM: 6eca9a23a0e78699b9b76e0f4a5d70c067f5290f +PODFILE CHECKSUM: d50f67e5652b6dc7c25c383940113f88a40d89bc COCOAPODS: 1.15.2 diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index 9afba04da0..2f7c6847ba 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -2126,6 +2126,37 @@ FA1D02092BBE74B7005B7071 /* AvailableLiquidityPoolsListInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA1D02082BBE74B7005B7071 /* AvailableLiquidityPoolsListInteractor.swift */; }; FA1D020D2BBE7690005B7071 /* UserLiquidityPoolsListInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA1D020C2BBE7690005B7071 /* UserLiquidityPoolsListInteractor.swift */; }; FA1D51D72BCFD445001353E7 /* LiquidityPools+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA1D51D62BCFD445001353E7 /* LiquidityPools+ViewModel.swift */; }; + FA1FAD3E2D62FEBE00ECD456 /* IrohaCrypto in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD3D2D62FEBE00ECD456 /* IrohaCrypto */; }; + FA1FAD402D62FEBE00ECD456 /* MPQRCoreSDK in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD3F2D62FEBE00ECD456 /* MPQRCoreSDK */; }; + FA1FAD422D62FEBE00ECD456 /* RobinHood in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD412D62FEBE00ECD456 /* RobinHood */; }; + FA1FAD442D62FEBE00ECD456 /* SSFAccountManagment in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD432D62FEBE00ECD456 /* SSFAccountManagment */; }; + FA1FAD462D62FEBE00ECD456 /* SSFAccountManagmentStorage in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD452D62FEBE00ECD456 /* SSFAccountManagmentStorage */; }; + FA1FAD482D62FEBE00ECD456 /* SSFAssetManagment in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD472D62FEBE00ECD456 /* SSFAssetManagment */; }; + FA1FAD4A2D62FEBE00ECD456 /* SSFChainConnection in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD492D62FEBE00ECD456 /* SSFChainConnection */; }; + FA1FAD4C2D62FEBE00ECD456 /* SSFChainRegistry in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD4B2D62FEBE00ECD456 /* SSFChainRegistry */; }; + FA1FAD4E2D62FEBE00ECD456 /* SSFCloudStorage in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD4D2D62FEBE00ECD456 /* SSFCloudStorage */; }; + FA1FAD502D62FEBE00ECD456 /* SSFCrypto in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD4F2D62FEBE00ECD456 /* SSFCrypto */; }; + FA1FAD522D62FEBE00ECD456 /* SSFEraKit in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD512D62FEBE00ECD456 /* SSFEraKit */; }; + FA1FAD542D62FEBE00ECD456 /* SSFExtrinsicKit in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD532D62FEBE00ECD456 /* SSFExtrinsicKit */; }; + FA1FAD562D62FEBE00ECD456 /* SSFHelpers in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD552D62FEBE00ECD456 /* SSFHelpers */; }; + FA1FAD582D62FEBE00ECD456 /* SSFKeyPair in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD572D62FEBE00ECD456 /* SSFKeyPair */; }; + FA1FAD5A2D62FEBE00ECD456 /* SSFLogger in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD592D62FEBE00ECD456 /* SSFLogger */; }; + FA1FAD5C2D62FEBE00ECD456 /* SSFModels in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD5B2D62FEBE00ECD456 /* SSFModels */; }; + FA1FAD5E2D62FEBE00ECD456 /* SSFNetwork in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD5D2D62FEBE00ECD456 /* SSFNetwork */; }; + FA1FAD602D62FEBE00ECD456 /* SSFPolkaswap in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD5F2D62FEBE00ECD456 /* SSFPolkaswap */; }; + FA1FAD622D62FEBE00ECD456 /* SSFPools in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD612D62FEBE00ECD456 /* SSFPools */; }; + FA1FAD642D62FEBE00ECD456 /* SSFPoolsStorage in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD632D62FEBE00ECD456 /* SSFPoolsStorage */; }; + FA1FAD662D62FEBE00ECD456 /* SSFQRService in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD652D62FEBE00ECD456 /* SSFQRService */; }; + FA1FAD682D62FEBE00ECD456 /* SSFRuntimeCodingService in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD672D62FEBE00ECD456 /* SSFRuntimeCodingService */; }; + FA1FAD6A2D62FEBE00ECD456 /* SSFSigner in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD692D62FEBE00ECD456 /* SSFSigner */; }; + FA1FAD6C2D62FEBE00ECD456 /* SSFSingleValueCache in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD6B2D62FEBE00ECD456 /* SSFSingleValueCache */; }; + FA1FAD6E2D62FEBE00ECD456 /* SSFStorageQueryKit in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD6D2D62FEBE00ECD456 /* SSFStorageQueryKit */; }; + FA1FAD702D62FEBE00ECD456 /* SSFTransferService in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD6F2D62FEBE00ECD456 /* SSFTransferService */; }; + FA1FAD722D62FEBE00ECD456 /* SSFUtils in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD712D62FEBE00ECD456 /* SSFUtils */; }; + FA1FAD742D62FEBE00ECD456 /* SSFXCM in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD732D62FEBE00ECD456 /* SSFXCM */; }; + FA1FAD762D62FEBE00ECD456 /* SoraKeystore in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD752D62FEBE00ECD456 /* SoraKeystore */; }; + FA1FAD782D62FEBE00ECD456 /* TonConnectAPI in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD772D62FEBE00ECD456 /* TonConnectAPI */; }; + FA1FAD7A2D62FEBE00ECD456 /* keccak in Frameworks */ = {isa = PBXBuildFile; productRef = FA1FAD792D62FEBE00ECD456 /* keccak */; }; FA22228D2BD237910031DE04 /* SubqueryPriceFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA22228C2BD237910031DE04 /* SubqueryPriceFetcher.swift */; }; FA22228F2BD237CF0031DE04 /* SoraSubqueryPriceFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA22228E2BD237CF0031DE04 /* SoraSubqueryPriceFetcher.swift */; }; FA2222912BD239500031DE04 /* SoraSubqueryPriceResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2222902BD239500031DE04 /* SoraSubqueryPriceResponse.swift */; }; @@ -2255,6 +2286,7 @@ FA3067222B621540006A0BA5 /* LockProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA3067212B621540006A0BA5 /* LockProtocol.swift */; }; FA30674B2B625DC0006A0BA5 /* BalancesLocksRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA30674A2B625DC0006A0BA5 /* BalancesLocksRequest.swift */; }; FA3067502B627D23006A0BA5 /* TokensLocksRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA30674F2B627D23006A0BA5 /* TokensLocksRequest.swift */; }; + FA30BFEF2D62C85300B0E8F6 /* CoinbasePurchaseProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA1B6EA12D4CF0A90002338F /* CoinbasePurchaseProvider.swift */; }; FA30D4EF28BF32EA00548C1E /* SortPickerTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA30D4EE28BF32EA00548C1E /* SortPickerTableViewCell.swift */; }; FA30D4F128BF32F500548C1E /* SortPickerTableViewCellModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA30D4F028BF32F500548C1E /* SortPickerTableViewCellModel.swift */; }; FA30D4F428BF67DF00548C1E /* StakingPoolInfoViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA30D4F328BF67DF00548C1E /* StakingPoolInfoViewModel.swift */; }; @@ -2588,35 +2620,6 @@ FA8800682B31A335000AE5EB /* StakingAccountSubscriptionV13.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8800672B31A335000AE5EB /* StakingAccountSubscriptionV13.swift */; }; FA88006A2B31A33E000AE5EB /* StakingAccountSubscriptionV14.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8800692B31A33E000AE5EB /* StakingAccountSubscriptionV14.swift */; }; FA88006C2B31A46D000AE5EB /* StakingAccountSubscriptionAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA88006B2B31A46D000AE5EB /* StakingAccountSubscriptionAssembly.swift */; }; - FA8810982BDCAF260084CC4B /* IrohaCrypto in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810972BDCAF260084CC4B /* IrohaCrypto */; }; - FA88109A2BDCAF260084CC4B /* RobinHood in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810992BDCAF260084CC4B /* RobinHood */; }; - FA88109C2BDCAF260084CC4B /* SSFAccountManagment in Frameworks */ = {isa = PBXBuildFile; productRef = FA88109B2BDCAF260084CC4B /* SSFAccountManagment */; }; - FA88109E2BDCAF260084CC4B /* SSFAccountManagmentStorage in Frameworks */ = {isa = PBXBuildFile; productRef = FA88109D2BDCAF260084CC4B /* SSFAccountManagmentStorage */; }; - FA8810A02BDCAF260084CC4B /* SSFAssetManagment in Frameworks */ = {isa = PBXBuildFile; productRef = FA88109F2BDCAF260084CC4B /* SSFAssetManagment */; }; - FA8810A22BDCAF260084CC4B /* SSFChainConnection in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810A12BDCAF260084CC4B /* SSFChainConnection */; }; - FA8810A42BDCAF260084CC4B /* SSFChainRegistry in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810A32BDCAF260084CC4B /* SSFChainRegistry */; }; - FA8810A62BDCAF260084CC4B /* SSFCloudStorage in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810A52BDCAF260084CC4B /* SSFCloudStorage */; }; - FA8810A82BDCAF260084CC4B /* SSFCrypto in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810A72BDCAF260084CC4B /* SSFCrypto */; }; - FA8810AA2BDCAF260084CC4B /* SSFEraKit in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810A92BDCAF260084CC4B /* SSFEraKit */; }; - FA8810AC2BDCAF260084CC4B /* SSFExtrinsicKit in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810AB2BDCAF260084CC4B /* SSFExtrinsicKit */; }; - FA8810AE2BDCAF260084CC4B /* SSFHelpers in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810AD2BDCAF260084CC4B /* SSFHelpers */; }; - FA8810B02BDCAF260084CC4B /* SSFKeyPair in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810AF2BDCAF260084CC4B /* SSFKeyPair */; }; - FA8810B22BDCAF260084CC4B /* SSFLogger in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810B12BDCAF260084CC4B /* SSFLogger */; }; - FA8810B42BDCAF260084CC4B /* SSFModels in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810B32BDCAF260084CC4B /* SSFModels */; }; - FA8810B62BDCAF260084CC4B /* SSFNetwork in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810B52BDCAF260084CC4B /* SSFNetwork */; }; - FA8810B82BDCAF260084CC4B /* SSFPolkaswap in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810B72BDCAF260084CC4B /* SSFPolkaswap */; }; - FA8810BA2BDCAF260084CC4B /* SSFPools in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810B92BDCAF260084CC4B /* SSFPools */; }; - FA8810BC2BDCAF260084CC4B /* SSFPoolsStorage in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810BB2BDCAF260084CC4B /* SSFPoolsStorage */; }; - FA8810BE2BDCAF260084CC4B /* SSFQRService in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810BD2BDCAF260084CC4B /* SSFQRService */; }; - FA8810C02BDCAF260084CC4B /* SSFRuntimeCodingService in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810BF2BDCAF260084CC4B /* SSFRuntimeCodingService */; }; - FA8810C22BDCAF260084CC4B /* SSFSigner in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810C12BDCAF260084CC4B /* SSFSigner */; }; - FA8810C42BDCAF260084CC4B /* SSFSingleValueCache in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810C32BDCAF260084CC4B /* SSFSingleValueCache */; }; - FA8810C62BDCAF260084CC4B /* SSFStorageQueryKit in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810C52BDCAF260084CC4B /* SSFStorageQueryKit */; }; - FA8810C82BDCAF260084CC4B /* SSFTransferService in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810C72BDCAF260084CC4B /* SSFTransferService */; }; - FA8810CA2BDCAF260084CC4B /* SSFUtils in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810C92BDCAF260084CC4B /* SSFUtils */; }; - FA8810CC2BDCAF260084CC4B /* SSFXCM in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810CB2BDCAF260084CC4B /* SSFXCM */; }; - FA8810CE2BDCAF260084CC4B /* SoraKeystore in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810CD2BDCAF260084CC4B /* SoraKeystore */; }; - FA8810D02BDCAF260084CC4B /* keccak in Frameworks */ = {isa = PBXBuildFile; productRef = FA8810CF2BDCAF260084CC4B /* keccak */; }; FA8810D32BDCCF7E0084CC4B /* UserLiquidityPoolsListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8810D22BDCCF7E0084CC4B /* UserLiquidityPoolsListPresenter.swift */; }; FA8810D52BDCD19D0084CC4B /* UserLiquidityPoolsListViewModelFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA8810D42BDCD19D0084CC4B /* UserLiquidityPoolsListViewModelFactory.swift */; }; FA887A452C107A1100CA720F /* LiquidityPoolSupplyConfirmViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA887A442C107A1100CA720F /* LiquidityPoolSupplyConfirmViewModel.swift */; }; @@ -5420,6 +5423,7 @@ FA17B4D327E9CF2C006E0735 /* UtilityConstants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UtilityConstants.swift; sourceTree = ""; }; FA1A023B274F51A900DA07CB /* ChainAccountBalanceTableCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChainAccountBalanceTableCell.swift; sourceTree = ""; }; FA1A023D274F55D900DA07CB /* HorizontalKeyValueView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HorizontalKeyValueView.swift; sourceTree = ""; }; + FA1B6EA12D4CF0A90002338F /* CoinbasePurchaseProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoinbasePurchaseProvider.swift; sourceTree = ""; }; FA1D01EE2BBE713D005B7071 /* LiquidityPoolListCellModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolListCellModel.swift; sourceTree = ""; }; FA1D01EF2BBE713D005B7071 /* LiquidityPoolListViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolListViewModel.swift; sourceTree = ""; }; FA1D01F02BBE713D005B7071 /* LiquidityPoolsListViewLayout.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiquidityPoolsListViewLayout.swift; sourceTree = ""; }; @@ -5588,6 +5592,7 @@ FA3067212B621540006A0BA5 /* LockProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LockProtocol.swift; sourceTree = ""; }; FA30674A2B625DC0006A0BA5 /* BalancesLocksRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BalancesLocksRequest.swift; sourceTree = ""; }; FA30674F2B627D23006A0BA5 /* TokensLocksRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TokensLocksRequest.swift; sourceTree = ""; }; + FA30BFEE2D62C54F00B0E8F6 /* SubstrateDataModel_v9.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = SubstrateDataModel_v9.xcdatamodel; sourceTree = ""; }; FA30D4EE28BF32EA00548C1E /* SortPickerTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SortPickerTableViewCell.swift; sourceTree = ""; }; FA30D4F028BF32F500548C1E /* SortPickerTableViewCellModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SortPickerTableViewCellModel.swift; sourceTree = ""; }; FA30D4F328BF67DF00548C1E /* StakingPoolInfoViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StakingPoolInfoViewModel.swift; sourceTree = ""; }; @@ -6552,51 +6557,53 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FA8810B62BDCAF260084CC4B /* SSFNetwork in Frameworks */, + FA1FAD702D62FEBE00ECD456 /* SSFTransferService in Frameworks */, + FA1FAD5A2D62FEBE00ECD456 /* SSFLogger in Frameworks */, + FA1FAD5E2D62FEBE00ECD456 /* SSFNetwork in Frameworks */, + FA1FAD4C2D62FEBE00ECD456 /* SSFChainRegistry in Frameworks */, FA72546F2AC2F12D00EC47A6 /* Web3Wallet in Frameworks */, - FA8810B02BDCAF260084CC4B /* SSFKeyPair in Frameworks */, - FA8810AE2BDCAF260084CC4B /* SSFHelpers in Frameworks */, 070ED7EF2C4543D900DF4098 /* TonAPI in Frameworks */, - FA8810A22BDCAF260084CC4B /* SSFChainConnection in Frameworks */, - FA8810A02BDCAF260084CC4B /* SSFAssetManagment in Frameworks */, - FA88109A2BDCAF260084CC4B /* RobinHood in Frameworks */, - FA8810C82BDCAF260084CC4B /* SSFTransferService in Frameworks */, + FA1FAD4E2D62FEBE00ECD456 /* SSFCloudStorage in Frameworks */, FA72546B2AC2F12D00EC47A6 /* WalletConnectNetworking in Frameworks */, 070ED7EB2C4543D900DF4098 /* EventSource in Frameworks */, - FA8810CA2BDCAF260084CC4B /* SSFUtils in Frameworks */, + FA1FAD6E2D62FEBE00ECD456 /* SSFStorageQueryKit in Frameworks */, + FA1FAD742D62FEBE00ECD456 /* SSFXCM in Frameworks */, + FA1FAD522D62FEBE00ECD456 /* SSFEraKit in Frameworks */, + FA1FAD642D62FEBE00ECD456 /* SSFPoolsStorage in Frameworks */, + FA1FAD6C2D62FEBE00ECD456 /* SSFSingleValueCache in Frameworks */, FA8FD1882AF4BEDD00354482 /* Swime in Frameworks */, - FA8810BA2BDCAF260084CC4B /* SSFPools in Frameworks */, - FA8810A42BDCAF260084CC4B /* SSFChainRegistry in Frameworks */, + FA1FAD482D62FEBE00ECD456 /* SSFAssetManagment in Frameworks */, + FA1FAD582D62FEBE00ECD456 /* SSFKeyPair in Frameworks */, 070ED7ED2C4543D900DF4098 /* StreamURLSessionTransport in Frameworks */, FA8FD1832AF4B55100354482 /* Web3ContractABI in Frameworks */, - FA8810B82BDCAF260084CC4B /* SSFPolkaswap in Frameworks */, + FA1FAD6A2D62FEBE00ECD456 /* SSFSigner in Frameworks */, + FA1FAD4A2D62FEBE00ECD456 /* SSFChainConnection in Frameworks */, + FA1FAD3E2D62FEBE00ECD456 /* IrohaCrypto in Frameworks */, + FA1FAD442D62FEBE00ECD456 /* SSFAccountManagment in Frameworks */, + FA1FAD722D62FEBE00ECD456 /* SSFUtils in Frameworks */, FA8FD1812AF4B55100354482 /* Web3 in Frameworks */, - FA8810BE2BDCAF260084CC4B /* SSFQRService in Frameworks */, - FA8810CE2BDCAF260084CC4B /* SoraKeystore in Frameworks */, - FA88109E2BDCAF260084CC4B /* SSFAccountManagmentStorage in Frameworks */, - FA8810AC2BDCAF260084CC4B /* SSFExtrinsicKit in Frameworks */, - FA88109C2BDCAF260084CC4B /* SSFAccountManagment in Frameworks */, - FA8810A62BDCAF260084CC4B /* SSFCloudStorage in Frameworks */, - FA8810A82BDCAF260084CC4B /* SSFCrypto in Frameworks */, - FA8810C42BDCAF260084CC4B /* SSFSingleValueCache in Frameworks */, - FA8810AA2BDCAF260084CC4B /* SSFEraKit in Frameworks */, FA8FD1852AF4B55100354482 /* Web3PromiseKit in Frameworks */, - FA8810D02BDCAF260084CC4B /* keccak in Frameworks */, + FA1FAD682D62FEBE00ECD456 /* SSFRuntimeCodingService in Frameworks */, 0701B8A32C78F54200DCD395 /* Cosmos in Frameworks */, - FA8810C62BDCAF260084CC4B /* SSFStorageQueryKit in Frameworks */, - FA8810B42BDCAF260084CC4B /* SSFModels in Frameworks */, + FA1FAD662D62FEBE00ECD456 /* SSFQRService in Frameworks */, FA7254672AC2F12D00EC47A6 /* WalletConnect in Frameworks */, + FA1FAD402D62FEBE00ECD456 /* MPQRCoreSDK in Frameworks */, 070ED7F12C4543D900DF4098 /* TonStreamingAPI in Frameworks */, + FA1FAD782D62FEBE00ECD456 /* TonConnectAPI in Frameworks */, FA72546D2AC2F12D00EC47A6 /* WalletConnectPairing in Frameworks */, + FA1FAD502D62FEBE00ECD456 /* SSFCrypto in Frameworks */, FA7254692AC2F12D00EC47A6 /* WalletConnectAuth in Frameworks */, - FA8810C02BDCAF260084CC4B /* SSFRuntimeCodingService in Frameworks */, - FA8810BC2BDCAF260084CC4B /* SSFPoolsStorage in Frameworks */, - FA8810B22BDCAF260084CC4B /* SSFLogger in Frameworks */, - FA8810C22BDCAF260084CC4B /* SSFSigner in Frameworks */, - FA8810982BDCAF260084CC4B /* IrohaCrypto in Frameworks */, - FA8810CC2BDCAF260084CC4B /* SSFXCM in Frameworks */, + FA1FAD7A2D62FEBE00ECD456 /* keccak in Frameworks */, + FA1FAD762D62FEBE00ECD456 /* SoraKeystore in Frameworks */, + FA1FAD5C2D62FEBE00ECD456 /* SSFModels in Frameworks */, 070ED7D22C3E7DE100DF4098 /* TonSwift in Frameworks */, + FA1FAD562D62FEBE00ECD456 /* SSFHelpers in Frameworks */, + FA1FAD542D62FEBE00ECD456 /* SSFExtrinsicKit in Frameworks */, + FA1FAD622D62FEBE00ECD456 /* SSFPools in Frameworks */, + FA1FAD602D62FEBE00ECD456 /* SSFPolkaswap in Frameworks */, + FA1FAD422D62FEBE00ECD456 /* RobinHood in Frameworks */, 78BCB91F4434229B18C1E524 /* Pods_fearlessAll_fearless.framework in Frameworks */, + FA1FAD462D62FEBE00ECD456 /* SSFAccountManagmentStorage in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -9112,6 +9119,7 @@ 8436EDE0258957B3004D9E97 /* PurchaseProvider */ = { isa = PBXGroup; children = ( + FA1B6EA12D4CF0A90002338F /* CoinbasePurchaseProvider.swift */, 8436EDE125895804004D9E97 /* RampProvider.swift */, 8436EDE625895846004D9E97 /* PurchaseProvider.swift */, 8436EDEE25896722004D9E97 /* PurchaseAggregator+Default.swift */, @@ -16634,41 +16642,43 @@ FA8FD1822AF4B55100354482 /* Web3ContractABI */, FA8FD1842AF4B55100354482 /* Web3PromiseKit */, FA8FD1872AF4BEDD00354482 /* Swime */, - FA8810972BDCAF260084CC4B /* IrohaCrypto */, - FA8810992BDCAF260084CC4B /* RobinHood */, - FA88109B2BDCAF260084CC4B /* SSFAccountManagment */, - FA88109D2BDCAF260084CC4B /* SSFAccountManagmentStorage */, - FA88109F2BDCAF260084CC4B /* SSFAssetManagment */, - FA8810A12BDCAF260084CC4B /* SSFChainConnection */, - FA8810A32BDCAF260084CC4B /* SSFChainRegistry */, - FA8810A52BDCAF260084CC4B /* SSFCloudStorage */, - FA8810A72BDCAF260084CC4B /* SSFCrypto */, - FA8810A92BDCAF260084CC4B /* SSFEraKit */, - FA8810AB2BDCAF260084CC4B /* SSFExtrinsicKit */, - FA8810AD2BDCAF260084CC4B /* SSFHelpers */, - FA8810AF2BDCAF260084CC4B /* SSFKeyPair */, - FA8810B12BDCAF260084CC4B /* SSFLogger */, - FA8810B32BDCAF260084CC4B /* SSFModels */, - FA8810B52BDCAF260084CC4B /* SSFNetwork */, - FA8810B72BDCAF260084CC4B /* SSFPolkaswap */, - FA8810B92BDCAF260084CC4B /* SSFPools */, - FA8810BB2BDCAF260084CC4B /* SSFPoolsStorage */, - FA8810BD2BDCAF260084CC4B /* SSFQRService */, - FA8810BF2BDCAF260084CC4B /* SSFRuntimeCodingService */, - FA8810C12BDCAF260084CC4B /* SSFSigner */, - FA8810C32BDCAF260084CC4B /* SSFSingleValueCache */, - FA8810C52BDCAF260084CC4B /* SSFStorageQueryKit */, - FA8810C72BDCAF260084CC4B /* SSFTransferService */, - FA8810C92BDCAF260084CC4B /* SSFUtils */, - FA8810CB2BDCAF260084CC4B /* SSFXCM */, - FA8810CD2BDCAF260084CC4B /* SoraKeystore */, - FA8810CF2BDCAF260084CC4B /* keccak */, 070ED7D12C3E7DE100DF4098 /* TonSwift */, 070ED7EA2C4543D900DF4098 /* EventSource */, 070ED7EC2C4543D900DF4098 /* StreamURLSessionTransport */, 070ED7EE2C4543D900DF4098 /* TonAPI */, 070ED7F02C4543D900DF4098 /* TonStreamingAPI */, 0701B8A22C78F54200DCD395 /* Cosmos */, + FA1FAD3D2D62FEBE00ECD456 /* IrohaCrypto */, + FA1FAD3F2D62FEBE00ECD456 /* MPQRCoreSDK */, + FA1FAD412D62FEBE00ECD456 /* RobinHood */, + FA1FAD432D62FEBE00ECD456 /* SSFAccountManagment */, + FA1FAD452D62FEBE00ECD456 /* SSFAccountManagmentStorage */, + FA1FAD472D62FEBE00ECD456 /* SSFAssetManagment */, + FA1FAD492D62FEBE00ECD456 /* SSFChainConnection */, + FA1FAD4B2D62FEBE00ECD456 /* SSFChainRegistry */, + FA1FAD4D2D62FEBE00ECD456 /* SSFCloudStorage */, + FA1FAD4F2D62FEBE00ECD456 /* SSFCrypto */, + FA1FAD512D62FEBE00ECD456 /* SSFEraKit */, + FA1FAD532D62FEBE00ECD456 /* SSFExtrinsicKit */, + FA1FAD552D62FEBE00ECD456 /* SSFHelpers */, + FA1FAD572D62FEBE00ECD456 /* SSFKeyPair */, + FA1FAD592D62FEBE00ECD456 /* SSFLogger */, + FA1FAD5B2D62FEBE00ECD456 /* SSFModels */, + FA1FAD5D2D62FEBE00ECD456 /* SSFNetwork */, + FA1FAD5F2D62FEBE00ECD456 /* SSFPolkaswap */, + FA1FAD612D62FEBE00ECD456 /* SSFPools */, + FA1FAD632D62FEBE00ECD456 /* SSFPoolsStorage */, + FA1FAD652D62FEBE00ECD456 /* SSFQRService */, + FA1FAD672D62FEBE00ECD456 /* SSFRuntimeCodingService */, + FA1FAD692D62FEBE00ECD456 /* SSFSigner */, + FA1FAD6B2D62FEBE00ECD456 /* SSFSingleValueCache */, + FA1FAD6D2D62FEBE00ECD456 /* SSFStorageQueryKit */, + FA1FAD6F2D62FEBE00ECD456 /* SSFTransferService */, + FA1FAD712D62FEBE00ECD456 /* SSFUtils */, + FA1FAD732D62FEBE00ECD456 /* SSFXCM */, + FA1FAD752D62FEBE00ECD456 /* SoraKeystore */, + FA1FAD772D62FEBE00ECD456 /* TonConnectAPI */, + FA1FAD792D62FEBE00ECD456 /* keccak */, ); productName = fearless; productReference = 849013A824A80984008F705E /* fearless.app */; @@ -16739,10 +16749,10 @@ FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */, FA8FD17F2AF4B55100354482 /* XCRemoteSwiftPackageReference "Web3.swift" */, FA8FD1862AF4BEDD00354482 /* XCRemoteSwiftPackageReference "Swime" */, - FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */, 070ED7D02C3E7DE100DF4098 /* XCRemoteSwiftPackageReference "ton-swift" */, 070ED7E92C4543D900DF4098 /* XCRemoteSwiftPackageReference "ton-api-swift" */, 0701B8A12C78F54200DCD395 /* XCRemoteSwiftPackageReference "Cosmos" */, + FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */, ); productRefGroup = 849013A924A80984008F705E /* Products */; projectDirPath = ""; @@ -18824,6 +18834,7 @@ 844CB57226F9EB2000396E13 /* RuntimeCodingService.swift in Sources */, 076D9D53294AC0A6002762E3 /* PolkaswapJSON.swift in Sources */, FA17B4D427E9CF2D006E0735 /* UtilityConstants.swift in Sources */, + FA30BFEF2D62C85300B0E8F6 /* CoinbasePurchaseProvider.swift in Sources */, FA256984274CE5A500875A53 /* BalanceLockType.swift in Sources */, FAC0BBE3291D0EB000E6F106 /* SelectAssetPresenter.swift in Sources */, 843910B2253ED4D100E3C217 /* CDChainStorageItem+CoreDataDecodable.swift in Sources */, @@ -20766,20 +20777,20 @@ version = 0.5.0; }; }; - FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */ = { + FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */ = { isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/WalletConnect/WalletConnectSwiftV2"; + repositoryURL = "https://github.com/soramitsu/shared-features-spm.git"; requirement = { - kind = exactVersion; - version = 1.9.9; + kind = revision; + revision = b3e2bf1bc380d0e046b603921cbb63dcefb920cf; }; }; - FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */ = { + FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */ = { isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/soramitsu/shared-features-spm.git"; + repositoryURL = "https://github.com/WalletConnect/WalletConnectSwiftV2"; requirement = { - branch = 53e0a4bbea854ab32e97392365c3e523b9a0dc66; - kind = branch; + kind = exactVersion; + version = 1.9.9; }; }; FA8FD17F2AF4B55100354482 /* XCRemoteSwiftPackageReference "Web3.swift" */ = { @@ -20831,176 +20842,186 @@ package = 070ED7E92C4543D900DF4098 /* XCRemoteSwiftPackageReference "ton-api-swift" */; productName = TonStreamingAPI; }; - FA7254662AC2F12D00EC47A6 /* WalletConnect */ = { - isa = XCSwiftPackageProductDependency; - package = FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */; - productName = WalletConnect; - }; - FA7254682AC2F12D00EC47A6 /* WalletConnectAuth */ = { - isa = XCSwiftPackageProductDependency; - package = FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */; - productName = WalletConnectAuth; - }; - FA72546A2AC2F12D00EC47A6 /* WalletConnectNetworking */ = { - isa = XCSwiftPackageProductDependency; - package = FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */; - productName = WalletConnectNetworking; - }; - FA72546C2AC2F12D00EC47A6 /* WalletConnectPairing */ = { - isa = XCSwiftPackageProductDependency; - package = FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */; - productName = WalletConnectPairing; - }; - FA72546E2AC2F12D00EC47A6 /* Web3Wallet */ = { + FA1FAD3D2D62FEBE00ECD456 /* IrohaCrypto */ = { isa = XCSwiftPackageProductDependency; - package = FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */; - productName = Web3Wallet; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; + productName = IrohaCrypto; }; - FA8810972BDCAF260084CC4B /* IrohaCrypto */ = { + FA1FAD3F2D62FEBE00ECD456 /* MPQRCoreSDK */ = { isa = XCSwiftPackageProductDependency; - package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; - productName = IrohaCrypto; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; + productName = MPQRCoreSDK; }; - FA8810992BDCAF260084CC4B /* RobinHood */ = { + FA1FAD412D62FEBE00ECD456 /* RobinHood */ = { isa = XCSwiftPackageProductDependency; - package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = RobinHood; }; - FA88109B2BDCAF260084CC4B /* SSFAccountManagment */ = { + FA1FAD432D62FEBE00ECD456 /* SSFAccountManagment */ = { isa = XCSwiftPackageProductDependency; - package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFAccountManagment; }; - FA88109D2BDCAF260084CC4B /* SSFAccountManagmentStorage */ = { + FA1FAD452D62FEBE00ECD456 /* SSFAccountManagmentStorage */ = { isa = XCSwiftPackageProductDependency; - package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFAccountManagmentStorage; }; - FA88109F2BDCAF260084CC4B /* SSFAssetManagment */ = { + FA1FAD472D62FEBE00ECD456 /* SSFAssetManagment */ = { isa = XCSwiftPackageProductDependency; - package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFAssetManagment; }; - FA8810A12BDCAF260084CC4B /* SSFChainConnection */ = { + FA1FAD492D62FEBE00ECD456 /* SSFChainConnection */ = { isa = XCSwiftPackageProductDependency; - package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFChainConnection; }; - FA8810A32BDCAF260084CC4B /* SSFChainRegistry */ = { + FA1FAD4B2D62FEBE00ECD456 /* SSFChainRegistry */ = { isa = XCSwiftPackageProductDependency; - package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFChainRegistry; }; - FA8810A52BDCAF260084CC4B /* SSFCloudStorage */ = { + FA1FAD4D2D62FEBE00ECD456 /* SSFCloudStorage */ = { isa = XCSwiftPackageProductDependency; - package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFCloudStorage; }; - FA8810A72BDCAF260084CC4B /* SSFCrypto */ = { + FA1FAD4F2D62FEBE00ECD456 /* SSFCrypto */ = { isa = XCSwiftPackageProductDependency; - package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFCrypto; }; - FA8810A92BDCAF260084CC4B /* SSFEraKit */ = { + FA1FAD512D62FEBE00ECD456 /* SSFEraKit */ = { isa = XCSwiftPackageProductDependency; - package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFEraKit; }; - FA8810AB2BDCAF260084CC4B /* SSFExtrinsicKit */ = { + FA1FAD532D62FEBE00ECD456 /* SSFExtrinsicKit */ = { isa = XCSwiftPackageProductDependency; - package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFExtrinsicKit; }; - FA8810AD2BDCAF260084CC4B /* SSFHelpers */ = { + FA1FAD552D62FEBE00ECD456 /* SSFHelpers */ = { isa = XCSwiftPackageProductDependency; - package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFHelpers; }; - FA8810AF2BDCAF260084CC4B /* SSFKeyPair */ = { + FA1FAD572D62FEBE00ECD456 /* SSFKeyPair */ = { isa = XCSwiftPackageProductDependency; - package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFKeyPair; }; - FA8810B12BDCAF260084CC4B /* SSFLogger */ = { + FA1FAD592D62FEBE00ECD456 /* SSFLogger */ = { isa = XCSwiftPackageProductDependency; - package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFLogger; }; - FA8810B32BDCAF260084CC4B /* SSFModels */ = { + FA1FAD5B2D62FEBE00ECD456 /* SSFModels */ = { isa = XCSwiftPackageProductDependency; - package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFModels; }; - FA8810B52BDCAF260084CC4B /* SSFNetwork */ = { + FA1FAD5D2D62FEBE00ECD456 /* SSFNetwork */ = { isa = XCSwiftPackageProductDependency; - package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFNetwork; }; - FA8810B72BDCAF260084CC4B /* SSFPolkaswap */ = { + FA1FAD5F2D62FEBE00ECD456 /* SSFPolkaswap */ = { isa = XCSwiftPackageProductDependency; - package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFPolkaswap; }; - FA8810B92BDCAF260084CC4B /* SSFPools */ = { + FA1FAD612D62FEBE00ECD456 /* SSFPools */ = { isa = XCSwiftPackageProductDependency; - package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFPools; }; - FA8810BB2BDCAF260084CC4B /* SSFPoolsStorage */ = { + FA1FAD632D62FEBE00ECD456 /* SSFPoolsStorage */ = { isa = XCSwiftPackageProductDependency; - package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFPoolsStorage; }; - FA8810BD2BDCAF260084CC4B /* SSFQRService */ = { + FA1FAD652D62FEBE00ECD456 /* SSFQRService */ = { isa = XCSwiftPackageProductDependency; - package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFQRService; }; - FA8810BF2BDCAF260084CC4B /* SSFRuntimeCodingService */ = { + FA1FAD672D62FEBE00ECD456 /* SSFRuntimeCodingService */ = { isa = XCSwiftPackageProductDependency; - package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFRuntimeCodingService; }; - FA8810C12BDCAF260084CC4B /* SSFSigner */ = { + FA1FAD692D62FEBE00ECD456 /* SSFSigner */ = { isa = XCSwiftPackageProductDependency; - package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFSigner; }; - FA8810C32BDCAF260084CC4B /* SSFSingleValueCache */ = { + FA1FAD6B2D62FEBE00ECD456 /* SSFSingleValueCache */ = { isa = XCSwiftPackageProductDependency; - package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFSingleValueCache; }; - FA8810C52BDCAF260084CC4B /* SSFStorageQueryKit */ = { + FA1FAD6D2D62FEBE00ECD456 /* SSFStorageQueryKit */ = { isa = XCSwiftPackageProductDependency; - package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFStorageQueryKit; }; - FA8810C72BDCAF260084CC4B /* SSFTransferService */ = { + FA1FAD6F2D62FEBE00ECD456 /* SSFTransferService */ = { isa = XCSwiftPackageProductDependency; - package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFTransferService; }; - FA8810C92BDCAF260084CC4B /* SSFUtils */ = { + FA1FAD712D62FEBE00ECD456 /* SSFUtils */ = { isa = XCSwiftPackageProductDependency; - package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFUtils; }; - FA8810CB2BDCAF260084CC4B /* SSFXCM */ = { + FA1FAD732D62FEBE00ECD456 /* SSFXCM */ = { isa = XCSwiftPackageProductDependency; - package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SSFXCM; }; - FA8810CD2BDCAF260084CC4B /* SoraKeystore */ = { + FA1FAD752D62FEBE00ECD456 /* SoraKeystore */ = { isa = XCSwiftPackageProductDependency; - package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = SoraKeystore; }; - FA8810CF2BDCAF260084CC4B /* keccak */ = { + FA1FAD772D62FEBE00ECD456 /* TonConnectAPI */ = { isa = XCSwiftPackageProductDependency; - package = FA8810962BDCAF260084CC4B /* XCRemoteSwiftPackageReference "shared-features-spm" */; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; + productName = TonConnectAPI; + }; + FA1FAD792D62FEBE00ECD456 /* keccak */ = { + isa = XCSwiftPackageProductDependency; + package = FA1FAD3C2D62FEBE00ECD456 /* XCRemoteSwiftPackageReference "shared-features-spm" */; productName = keccak; }; + FA7254662AC2F12D00EC47A6 /* WalletConnect */ = { + isa = XCSwiftPackageProductDependency; + package = FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */; + productName = WalletConnect; + }; + FA7254682AC2F12D00EC47A6 /* WalletConnectAuth */ = { + isa = XCSwiftPackageProductDependency; + package = FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */; + productName = WalletConnectAuth; + }; + FA72546A2AC2F12D00EC47A6 /* WalletConnectNetworking */ = { + isa = XCSwiftPackageProductDependency; + package = FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */; + productName = WalletConnectNetworking; + }; + FA72546C2AC2F12D00EC47A6 /* WalletConnectPairing */ = { + isa = XCSwiftPackageProductDependency; + package = FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */; + productName = WalletConnectPairing; + }; + FA72546E2AC2F12D00EC47A6 /* Web3Wallet */ = { + isa = XCSwiftPackageProductDependency; + package = FA7254652AC2F12D00EC47A6 /* XCRemoteSwiftPackageReference "WalletConnectSwiftV2" */; + productName = Web3Wallet; + }; FA8FD1802AF4B55100354482 /* Web3 */ = { isa = XCSwiftPackageProductDependency; package = FA8FD17F2AF4B55100354482 /* XCRemoteSwiftPackageReference "Web3.swift" */; @@ -21027,6 +21048,7 @@ FAD0679F2C2044490050291F /* SubstrateDataModel.xcdatamodeld */ = { isa = XCVersionGroup; children = ( + FA30BFEE2D62C54F00B0E8F6 /* SubstrateDataModel_v9.xcdatamodel */, 070ED7D62C3FBB8800DF4098 /* SubstrateDataModel_v8.xcdatamodel */, FAD067A02C2044490050291F /* SubstrateDataModel.xcdatamodel */, FAD067A12C2044490050291F /* SubstrateDataModel_v4.xcdatamodel */, @@ -21036,7 +21058,7 @@ FAD067A52C2044490050291F /* SubstrateDataModel_v6.xcdatamodel */, FAD067A62C2044490050291F /* SubstrateDataModel_v3.xcdatamodel */, ); - currentVersion = 070ED7D62C3FBB8800DF4098 /* SubstrateDataModel_v8.xcdatamodel */; + currentVersion = FA30BFEE2D62C54F00B0E8F6 /* SubstrateDataModel_v9.xcdatamodel */; path = SubstrateDataModel.xcdatamodeld; sourceTree = ""; versionGroupType = wrapper.xcdatamodel; diff --git a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved index 2e9077e563..025b3d1242 100644 --- a/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/fearless.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -141,8 +141,7 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/soramitsu/shared-features-spm.git", "state" : { - "branch" : "FW-new-ecosystem", - "revision" : "53e0a4bbea854ab32e97392365c3e523b9a0dc66" + "revision" : "b3e2bf1bc380d0e046b603921cbb63dcefb920cf" } }, { @@ -177,8 +176,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-nio.git", "state" : { - "revision" : "ba72f31e11275fc5bf060c966cf6c1f36842a291", - "version" : "2.79.0" + "revision" : "c51907a839e63ebf0ba2076bba73dd96436bd1b9", + "version" : "2.81.0" } }, { @@ -204,8 +203,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-nio-ssl.git", "state" : { - "revision" : "c7e95421334b1068490b5d41314a50e70bab23d1", - "version" : "2.29.0" + "revision" : "0cc3528ff48129d64ab9cab0b1cd621634edfc6b", + "version" : "2.29.3" } }, { @@ -213,8 +212,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-nio-transport-services.git", "state" : { - "revision" : "bbd5e63cf949b7db0c9edaf7a21e141c52afe214", - "version" : "1.23.0" + "revision" : "3c394067c08d1225ba8442e9cffb520ded417b64", + "version" : "1.23.1" } }, { diff --git a/fearless/Assets.xcassets/iconCoinbase.imageset/Coinbase SVG Icon.pdf b/fearless/Assets.xcassets/iconCoinbase.imageset/Coinbase SVG Icon.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6eb08347543249995dd88a87b775175c4f88f8d4 GIT binary patch literal 1282 zcmah}S!feM7zXh{))NE|6r7^b7BxGwn@!RZl{QDM@d&Bng~~RWrmN|0oSno}ih`(M z#REY_Q4s`1ipNXA-s) z+0$h{S;D7>=iMKDY3umTwewf@eGP8A{iA=;1#8T>&e*N7_Z|@a(WRFwW>wiyfBlZ= zk(0fBGXpJ1s4Tsp_E6E8_ax?Sz;TIA;H~Z+rl?VP9J>6|B zca8SymTikCeH!=uRd4UXt9$O8+qGfhly29DU4b6g-eJ4WJPf97WVmwNg9 zmd00Cv{moYN^WdZYHQE)vpfAS+&8X0dEJ-W)cJee_u-@X$#w1TSNxQynJjh>UxGJ5 zmassV;!(xESgB=J9UjAZ-q_56Llg)I0EVn%SRgrAj|h?zI=q2d*nl@Y#W+ei4w9F4 zWGIqjdWs?!B2L_x&Zx=ZXz9Wh(WId_Sb4M>AdHA#JZl`^pk;D!wvo8;!u2*XE1Rh( zsgS`zOI0>QUZ$INMr2BKl;9@BS(cVoLGTLEoROgM#s&cvI+5elwz4ciZ6x@JSM((+ zE~##yFI$|Iqejw(`bF#Ua_w2sW<>yRMSvKylGz04v^t?1%tFLXyl#xD+c?kIbuy3( zXo~5XHX~uXEtaaOaS{bV#oS^j5D7;j7<+0l_J(0LVC+-Dib>!bgViurz^brTz(<8e z*#fTk!3U<#Q=EW_7-~K2L2NO-|BEkjgP#v#dm*V(>*zst$}}u9B=l1qs#CC{K`|=U z6oSdBnhI8Y6|59!4eDG^TPdesAsxFYmH~<78Eus?@=H*1aUidzsTyiUCCuvqnTvtU zGUicg|G`uZDj4L4$-ie+h(6fQM?kTI&er<<0~lwzk*3V~Q#Bi#DU>Ya61OalMB@cb bH<_B$c|W^ Self { + self.chainName = chainName + return self + } + + func buildPurchaseActions(asset: AssetModel, address: String) -> [PurchaseAction] { + if let url = buildURLForAsset(asset, address: address) { + return [PurchaseAction(title: Constants.title, url: url, icon: Constants.icon!)] + } + return [] + } + + private func buildURLForAsset(_ asset: AssetModel, address: String) -> URL? { + guard let chainName else { + return nil + } + + guard let endpoint = asset.coinbaseUrl?.replacingOccurrences(of: "{address}", with: address) else { + return nil + } + + var components = URLComponents(string: Self.baseUrlString.appending(endpoint)) + + let queryItems = [ + URLQueryItem(name: "appId", value: CoinbaseKeys.coinbaseAppId) + ] + + components?.queryItems = queryItems + + return components?.url + } +} diff --git a/fearless/Common/PurchaseProvider/PurchaseAggregator+Default.swift b/fearless/Common/PurchaseProvider/PurchaseAggregator+Default.swift index cf3a21610c..a0f4293804 100644 --- a/fearless/Common/PurchaseProvider/PurchaseAggregator+Default.swift +++ b/fearless/Common/PurchaseProvider/PurchaseAggregator+Default.swift @@ -1,7 +1,8 @@ import Foundation +import SSFModels extension PurchaseAggregator { - static func defaultAggregator(with purchaseProviders: [PurchaseProviderProtocol]?) -> PurchaseAggregator { + static func defaultAggregator(with purchaseProviders: [PurchaseProviderProtocol]?, chain: ChainModel) -> PurchaseAggregator { let config: ApplicationConfigProtocol = ApplicationConfig.shared let moonpaySecretKeyData = Data(MoonPayKeys.secretKey.utf8) @@ -11,12 +12,14 @@ extension PurchaseAggregator { MoonpayProviderFactory().createProvider( with: moonpaySecretKeyData, apiKey: config.moonPayApiKey - ) + ), + CoinbasePurchaseProvivder() ] return PurchaseAggregator(providers: purchaseProviders ?? defaultProviders) .with(appName: config.purchaseAppName) .with(logoUrl: config.logoURL) .with(colorCode: R.color.colorPink()!.hexRGB) .with(callbackUrl: config.purchaseRedirect) + .with(chainName: chain.name) } } diff --git a/fearless/Common/PurchaseProvider/PurchaseProvider.swift b/fearless/Common/PurchaseProvider/PurchaseProvider.swift index 26be84185b..62827fedcd 100644 --- a/fearless/Common/PurchaseProvider/PurchaseProvider.swift +++ b/fearless/Common/PurchaseProvider/PurchaseProvider.swift @@ -30,6 +30,11 @@ extension PurchaseAggregator: PurchaseProviderProtocol { providers = providers.map { $0.with(callbackUrl: callbackUrl) } return self } + + func with(chainName: String) -> Self { + providers = providers.map { $0.with(chainName: chainName ) } + return self + } func buildPurchaseActions(asset: AssetModel, address: String) -> [PurchaseAction] { providers.flatMap { $0.buildPurchaseActions(asset: asset, address: address) } diff --git a/fearless/Common/PurchaseProvider/PurchaseProviderProtocol.swift b/fearless/Common/PurchaseProvider/PurchaseProviderProtocol.swift index 9853468307..8301d314cb 100644 --- a/fearless/Common/PurchaseProvider/PurchaseProviderProtocol.swift +++ b/fearless/Common/PurchaseProvider/PurchaseProviderProtocol.swift @@ -13,6 +13,7 @@ protocol PurchaseProviderProtocol { func with(logoUrl: URL) -> Self func with(colorCode: String) -> Self func with(callbackUrl: URL) -> Self + func with(chainName: String) -> Self func buildPurchaseActions(asset: AssetModel, address: String) -> [PurchaseAction] } @@ -32,4 +33,8 @@ extension PurchaseProviderProtocol { func with(callbackUrl _: URL) -> Self { self } + + func with(chainName _: String) -> Self { + self + } } diff --git a/fearless/Common/Services/ChainRegistry/ChainSyncService.swift b/fearless/Common/Services/ChainRegistry/ChainSyncService.swift index 70fd2ead12..2c46e73717 100644 --- a/fearless/Common/Services/ChainRegistry/ChainSyncService.swift +++ b/fearless/Common/Services/ChainRegistry/ChainSyncService.swift @@ -14,7 +14,7 @@ enum ChainSyncServiceError: Error { } final class ChainSyncService { - static let fetchLocalData = false + static let fetchLocalData = true struct SyncChanges { let newOrUpdatedItems: [ChainModel] diff --git a/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift b/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift index 0569e9b9ea..4acb8d295c 100644 --- a/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift +++ b/fearless/Common/Storage/EntityToModel/ChainModelMapper.swift @@ -94,6 +94,7 @@ final class ChainModelMapper { } return createPriceData(from: priceData) } + print("CoinbaseURL debug: createAsset: coinbaseUrl: \(entity.coinbaseUrl)") return AssetModel( id: id, name: name, @@ -110,7 +111,8 @@ final class ChainModelMapper { assetType: assetType, priceProvider: priceProvider, coingeckoPriceId: entity.priceId, - priceData: priceDatas + priceData: priceDatas, + coinbaseUrl: entity.coinbaseUrl ) } @@ -150,6 +152,7 @@ final class ChainModelMapper { assetEntity.isUtility = assetModel.isUtility assetEntity.isNative = assetModel.isNative assetEntity.staking = assetModel.staking?.rawValue + assetEntity.coinbaseUrl = assetModel.coinbaseUrl let priceProviderContext = CDPriceProvider(context: context) priceProviderContext.type = assetModel.priceProvider?.type.rawValue @@ -186,6 +189,7 @@ final class ChainModelMapper { } } assetEntity.priceData = Set(priceData) as NSSet + print("CoinbaseURL debug: updateEntityAsset: coinbaseUrl: \(assetEntity.coinbaseUrl)") return assetEntity } diff --git a/fearless/Common/Storage/Migration/SubstrateStorage/SubstrateStorageVersion.swift b/fearless/Common/Storage/Migration/SubstrateStorage/SubstrateStorageVersion.swift index 817bfc8d20..4d5c99a7cb 100644 --- a/fearless/Common/Storage/Migration/SubstrateStorage/SubstrateStorageVersion.swift +++ b/fearless/Common/Storage/Migration/SubstrateStorage/SubstrateStorageVersion.swift @@ -9,6 +9,7 @@ enum SubstrateStorageVersion: String, CaseIterable { case version6 = "SubstrateDataModel_v6" case version7 = "SubstrateDataModel_v7" case version8 = "SubstrateDataModel_v8" + case version9 = "SubstrateDataModel_v9" static var current: SubstrateStorageVersion { guard let currentVersion = allCases.last else { @@ -35,6 +36,8 @@ enum SubstrateStorageVersion: String, CaseIterable { case .version7: return .version8 case .version8: + return .version9 + case .version9: return nil } } diff --git a/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/.xccurrentversion b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/.xccurrentversion index f929d5f67a..4f6767c1f7 100644 --- a/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/.xccurrentversion +++ b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/.xccurrentversion @@ -3,6 +3,6 @@ _XCCurrentVersionName - SubstrateDataModel_v8.xcdatamodel + SubstrateDataModel_v9.xcdatamodel diff --git a/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v9.xcdatamodel/contents b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v9.xcdatamodel/contents new file mode 100644 index 0000000000..26899179e0 --- /dev/null +++ b/fearless/Common/Storage/SubstrateDataModel.xcdatamodeld/SubstrateDataModel_v9.xcdatamodel/contents @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fearless/Common/Storage/SubstrateDataStorageFacade.swift b/fearless/Common/Storage/SubstrateDataStorageFacade.swift index 508cc1a071..fcc499d9fe 100644 --- a/fearless/Common/Storage/SubstrateDataStorageFacade.swift +++ b/fearless/Common/Storage/SubstrateDataStorageFacade.swift @@ -2,7 +2,7 @@ import RobinHood import CoreData enum SubstrateStorageParams { - static let modelVersion: SubstrateStorageVersion = .version8 + static let modelVersion: SubstrateStorageVersion = .version9 static let modelDirectory: String = "SubstrateDataModel.momd" static let databaseName = "SubstrateDataModel.sqlite" diff --git a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/chains.json b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/chains.json index c7575aadc3..7ba1252fe9 100644 --- a/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/chains.json +++ b/fearless/Modules/LiquidityPools/LiquidityPoolDetails/Resources/chains.json @@ -50,9 +50,11 @@ "icon": "https://raw.githubusercontent.com/soramitsu/shared-features-utils/master/icons/tokens/coloured/DOT.svg", "color": "FF0066", "staking": "relaychain", + "coinbaseUrl": "addresses={\"{address}\":[\"polkadot\"]}&assets=[\"DOT\"]", "purchaseProviders": [ "moonpay", - "ramp" + "ramp", + "coinbase" ], "type": "normal", "priceProvider": { diff --git a/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift b/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift index 31f1115559..fa562fe804 100644 --- a/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift +++ b/fearless/Modules/NewWallet/ChainAccount/ChainAccountPresenter.swift @@ -19,6 +19,7 @@ final class ChainAccountPresenter { weak var moduleOutput: ChainAccountModuleOutput? private let balanceInfoModule: BalanceInfoModuleInput + private lazy var coinbaseProvider = CoinbasePurchaseProvivder() private lazy var rampProvider = RampProvider() private lazy var moonpayProvider: PurchaseProviderProtocol = { let config: ApplicationConfigProtocol = ApplicationConfig.shared @@ -132,10 +133,12 @@ final class ChainAccountPresenter { availableProviders.append(moonpayProvider) case .ramp: availableProviders.append(rampProvider) + case .coinbase: + availableProviders.append(coinbaseProvider) } } - let providersAggregator = PurchaseAggregator.defaultAggregator(with: availableProviders) + let providersAggregator = PurchaseAggregator.defaultAggregator(with: availableProviders, chain: chainAsset.chain) actions = providersAggregator.buildPurchaseActions(asset: chainAsset.asset, address: address) } return actions From 097e16b483c1905c31ba3bcb42ba2278b81fc016 Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Fri, 21 Feb 2025 15:50:03 +0700 Subject: [PATCH 153/156] dapp warning, dapp feature toggle --- fearless.xcodeproj/project.pbxproj | 4 +++ .../FeatureToggle/FeatureToggleConfig.swift | 3 +- .../FeatureToggle/FeatureToggleService.swift | 17 ++++++++-- .../Common/EventCenter/EventVisitor.swift | 2 ++ .../FeatureToggleConfigSyncComplete.swift | 10 ++++++ .../Common/Extension/SettingsExtension.swift | 11 +++++++ .../DappBrowser/DappBrowserPresenter.swift | 31 ++++++++++++++++++- .../DappBrowser/DappBrowserProtocols.swift | 2 +- .../DappBrowserListPresenter.swift | 30 ++++++++++++++++-- .../DappBrowserListProtocols.swift | 2 +- .../MainTabBar/MainTabBarPresenter.swift | 1 + .../MainTabBar/MainTabBarProtocol.swift | 6 +++- .../MainTabBar/MainTabBarViewController.swift | 9 +++++- .../MainTabBar/MainTabBarViewFactory.swift | 2 ++ .../OnboardingMainViewFactory.swift | 4 ++- .../WalletMainContainerAssembly.swift | 4 ++- .../WalletsManagmentAssembly.swift | 5 ++- fearless/en.lproj/Localizable.strings | 3 ++ fearless/id.lproj/Localizable.strings | 3 ++ fearless/ja.lproj/Localizable.strings | 3 ++ fearless/pt-PT.lproj/Localizable.strings | 3 ++ fearless/ru.lproj/Localizable.strings | 3 ++ fearless/tr.lproj/Localizable.strings | 3 ++ fearless/vi.lproj/Localizable.strings | 3 ++ 24 files changed, 149 insertions(+), 15 deletions(-) create mode 100644 fearless/Common/EventCenter/Events/FeatureToggleConfigSyncComplete.swift diff --git a/fearless.xcodeproj/project.pbxproj b/fearless.xcodeproj/project.pbxproj index 9afba04da0..4975d3e8b7 100644 --- a/fearless.xcodeproj/project.pbxproj +++ b/fearless.xcodeproj/project.pbxproj @@ -2068,6 +2068,7 @@ F83EA1F4ECE14C390C0B287F /* StakingUnbondSetupInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D101339CC1292531CC4DB0AC /* StakingUnbondSetupInteractor.swift */; }; F865D752EBD2363E971BE267 /* MainNftContainerAssembly.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E69C4F66805399A3DB4ED8 /* MainNftContainerAssembly.swift */; }; F952CDC56E85FA82DDEBE5D3 /* FeatureToggleListRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4EE06DBE885C0467D8929FE /* FeatureToggleListRouter.swift */; }; + FA0025882D68503E00B84297 /* FeatureToggleConfigSyncComplete.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA0025872D68503700B84297 /* FeatureToggleConfigSyncComplete.swift */; }; FA00488F282CC7710032FF49 /* SelectValidatorsStartFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA00488E282CC7710032FF49 /* SelectValidatorsStartFlow.swift */; }; FA004891282CCA400032FF49 /* SelectValidatorsStartParachainStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA004890282CCA400032FF49 /* SelectValidatorsStartParachainStrategy.swift */; }; FA004893282CCA520032FF49 /* SelectValidatorsStartRelaychainStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA004892282CCA520032FF49 /* SelectValidatorsStartRelaychainStrategy.swift */; }; @@ -5374,6 +5375,7 @@ F829E7F8B39EE7D977001510 /* ControllerAccountProtocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerAccountProtocols.swift; sourceTree = ""; }; F9416E68AE4D5613E9434226 /* StakingPoolCreateConfirmViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StakingPoolCreateConfirmViewController.swift; sourceTree = ""; }; F9B5FD28F2B9A0B0D8ED3607 /* PolkaswapSwapConfirmationInteractor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PolkaswapSwapConfirmationInteractor.swift; sourceTree = ""; }; + FA0025872D68503700B84297 /* FeatureToggleConfigSyncComplete.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeatureToggleConfigSyncComplete.swift; sourceTree = ""; }; FA00488E282CC7710032FF49 /* SelectValidatorsStartFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartFlow.swift; sourceTree = ""; }; FA004890282CCA400032FF49 /* SelectValidatorsStartParachainStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartParachainStrategy.swift; sourceTree = ""; }; FA004892282CCA520032FF49 /* SelectValidatorsStartRelaychainStrategy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectValidatorsStartRelaychainStrategy.swift; sourceTree = ""; }; @@ -11436,6 +11438,7 @@ 84EBC54824F660A700459D15 /* Events */ = { isa = PBXGroup; children = ( + FA0025872D68503700B84297 /* FeatureToggleConfigSyncComplete.swift */, FA46449D2D49E13E00E21668 /* SelectedCurrencyChanged.swift */, 071606C32C7C6C2400C1DF75 /* PricesUpdated.swift */, 0701B9CC2C78FF7900DCD395 /* AccountScoreSettingsChanged.swift */, @@ -18927,6 +18930,7 @@ 84DED3F726662CF200A153BB /* TitleValueSelectionControl.swift in Sources */, FAADC1BC2926597400DA9903 /* ScanQRRouter.swift in Sources */, 076D9D6629507B39002762E3 /* PolkaswapSettingsFactory.swift in Sources */, + FA0025882D68503E00B84297 /* FeatureToggleConfigSyncComplete.swift in Sources */, 07B018D328C714B300E05510 /* ScamServiceOperationFactory.swift in Sources */, 07E346D4288E616E00A8FAEC /* WalletBalanceBuilder.swift in Sources */, 84F30EA125FD3EE700039D09 /* ChildSubscriptionFactory.swift in Sources */, diff --git a/fearless/ApplicationLayer/Services/FeatureToggle/FeatureToggleConfig.swift b/fearless/ApplicationLayer/Services/FeatureToggle/FeatureToggleConfig.swift index c2732eed31..3a39b6cc40 100644 --- a/fearless/ApplicationLayer/Services/FeatureToggle/FeatureToggleConfig.swift +++ b/fearless/ApplicationLayer/Services/FeatureToggle/FeatureToggleConfig.swift @@ -3,8 +3,9 @@ import Foundation struct FeatureToggleConfig: Decodable { let pendulumCaseEnabled: Bool? let nftEnabled: Bool? + let dappEnabled: Bool? static var defaultConfig: FeatureToggleConfig { - FeatureToggleConfig(pendulumCaseEnabled: false, nftEnabled: true) + FeatureToggleConfig(pendulumCaseEnabled: false, nftEnabled: true, dappEnabled: true) } } diff --git a/fearless/ApplicationLayer/Services/FeatureToggle/FeatureToggleService.swift b/fearless/ApplicationLayer/Services/FeatureToggle/FeatureToggleService.swift index a4fcd9940d..84c2a7aa64 100644 --- a/fearless/ApplicationLayer/Services/FeatureToggle/FeatureToggleService.swift +++ b/fearless/ApplicationLayer/Services/FeatureToggle/FeatureToggleService.swift @@ -2,6 +2,7 @@ import Foundation import SSFNetwork import RobinHood import SSFUtils +import SoraKeystore enum FeatureToggleServiceError: Error { case urlBroken @@ -19,17 +20,23 @@ final class FeatureToggleProvider { private let networkOperationFactory: NetworkOperationFactoryProtocol private let operationQueue: OperationQueue - + private let settingsManager: SettingsManagerProtocol + private let eventCenter: EventCenterProtocol + private(set) var snapshot: FeatureToggleConfig? private(set) var pendingRequests: [PendingRequest] = [] init( networkOperationFactory: NetworkOperationFactoryProtocol, - operationQueue: OperationQueue + operationQueue: OperationQueue, + settingsManager: SettingsManagerProtocol, + eventCenter: EventCenterProtocol ) { self.networkOperationFactory = networkOperationFactory self.operationQueue = operationQueue - + self.settingsManager = settingsManager + self.eventCenter = eventCenter + do { try setup() } catch { @@ -58,6 +65,10 @@ final class FeatureToggleProvider { let request = PendingRequest(resultClosure: closure, queue: queue) if let snapshot = snapshot { + settingsManager.dappEnabled = snapshot.dappEnabled.or(FeatureToggleConfig.defaultConfig.dappEnabled ?? true) + + eventCenter.notify(with: FeatureToggleConfigSyncComplete(config: snapshot)) + deliver(snapshot: snapshot, to: request) } else { pendingRequests.append(request) diff --git a/fearless/Common/EventCenter/EventVisitor.swift b/fearless/Common/EventCenter/EventVisitor.swift index 2f0fca55bb..d11935fd11 100644 --- a/fearless/Common/EventCenter/EventVisitor.swift +++ b/fearless/Common/EventCenter/EventVisitor.swift @@ -31,6 +31,7 @@ protocol EventVisitorProtocol: AnyObject { func processPricesUpdated() func processSelectedCurrencyChanged(event: SelectedCurrencyChangedEvent) func processTonConnectEstablished() + func processFeatureToggleConfigSyncComplete(event: FeatureToggleConfigSyncComplete) } extension EventVisitorProtocol { @@ -64,4 +65,5 @@ extension EventVisitorProtocol { func processPricesUpdated() {} func processSelectedCurrencyChanged(event: SelectedCurrencyChangedEvent) {} func processTonConnectEstablished() {} + func processFeatureToggleConfigSyncComplete(event: FeatureToggleConfigSyncComplete) {} } diff --git a/fearless/Common/EventCenter/Events/FeatureToggleConfigSyncComplete.swift b/fearless/Common/EventCenter/Events/FeatureToggleConfigSyncComplete.swift new file mode 100644 index 0000000000..b9c41447eb --- /dev/null +++ b/fearless/Common/EventCenter/Events/FeatureToggleConfigSyncComplete.swift @@ -0,0 +1,10 @@ +import Foundation +import SSFModels + +struct FeatureToggleConfigSyncComplete: EventProtocol { + let config: FeatureToggleConfig + + func accept(visitor: EventVisitorProtocol) { + visitor.processFeatureToggleConfigSyncComplete(event: self) + } +} diff --git a/fearless/Common/Extension/SettingsExtension.swift b/fearless/Common/Extension/SettingsExtension.swift index eed89107c2..8306de2ceb 100644 --- a/fearless/Common/Extension/SettingsExtension.swift +++ b/fearless/Common/Extension/SettingsExtension.swift @@ -16,6 +16,7 @@ enum SettingsKey: String { case shouldPlayAssetManagementAnimateKey case accountScoreEnabled case shouldShowAddWalletBanner + case dappEnabled } extension SettingsManagerProtocol { @@ -103,4 +104,14 @@ extension SettingsManagerProtocol { set(value: newValue, for: SettingsKey.shouldShowAddWalletBanner.rawValue) } } + + var dappEnabled: Bool { + get { + bool(for: SettingsKey.dappEnabled.rawValue) ?? true + } + + set { + set(value: newValue, for: SettingsKey.dappEnabled.rawValue) + } + } } diff --git a/fearless/Modules/DappBrowser/DappBrowserPresenter.swift b/fearless/Modules/DappBrowser/DappBrowserPresenter.swift index fd61da6e35..6334ab6c02 100644 --- a/fearless/Modules/DappBrowser/DappBrowserPresenter.swift +++ b/fearless/Modules/DappBrowser/DappBrowserPresenter.swift @@ -132,7 +132,36 @@ extension DappBrowserPresenter: DappBrowserViewOutput { } func didSelect(dapp: TonDapp) { - router.showDapp(from: view, dapp: dapp, wallet: wallet, moduleOutput: self) + let confirmAction = SheetAlertPresentableAction(title: R.string.localizable.commonConfirm(preferredLanguages: selectedLocale.rLanguages), style: .pinkBackgroundWhiteText ,handler: { [weak self] in + guard let self else { + return + } + + self.router.showDapp( + from: self.view, + dapp: dapp, + wallet: self.wallet, + moduleOutput: self + ) + }) + + let termsAction = SheetAlertPresentableAction(title: R.string.localizable.aboutTermsAndConditions(preferredLanguages: selectedLocale.rLanguages), style: .grayBackgroundPinkText, handler: { [weak self] in + guard let self, let view = self.view else { + return + } + + self.router.showWeb(url: ApplicationConfig.shared.termsURL, from: view, style: .modal) + }) + + let declineAction = SheetAlertPresentableAction(title: R.string.localizable.commonDecline(preferredLanguages: selectedLocale.rLanguages), style: .grayBackgroundWhiteText) + + router.present( + message: R.string.localizable.webThirdPartyWarningDescription(preferredLanguages: selectedLocale.rLanguages), + title: R.string.localizable.webThirdPartyWarningTitle(preferredLanguages: selectedLocale.rLanguages), + closeAction: nil, + from: view, + actions: [confirmAction, declineAction, termsAction] + ) } func didTapOnWalletSelectButton() { diff --git a/fearless/Modules/DappBrowser/DappBrowserProtocols.swift b/fearless/Modules/DappBrowser/DappBrowserProtocols.swift index 2f6672435c..eec88fdde0 100644 --- a/fearless/Modules/DappBrowser/DappBrowserProtocols.swift +++ b/fearless/Modules/DappBrowser/DappBrowserProtocols.swift @@ -5,7 +5,7 @@ typealias DappBrowserModuleCreationResult = ( input: DappBrowserModuleInput ) -protocol DappBrowserRouterInput: AccountManagementPresentable { +protocol DappBrowserRouterInput: AccountManagementPresentable, SheetAlertPresentable, WebPresentable { func showWalletManagment( from view: ControllerBackedProtocol?, moduleOutput: WalletsManagmentModuleOutput? diff --git a/fearless/Modules/DappBrowserList/DappBrowserListPresenter.swift b/fearless/Modules/DappBrowserList/DappBrowserListPresenter.swift index f1ddaff6ea..4cb0fcf33e 100644 --- a/fearless/Modules/DappBrowserList/DappBrowserListPresenter.swift +++ b/fearless/Modules/DappBrowserList/DappBrowserListPresenter.swift @@ -58,10 +58,34 @@ final class DappBrowserListPresenter { // MARK: - DappBrowserListViewOutput extension DappBrowserListPresenter: DappBrowserListViewOutput { func didSelect(dapp: TonDapp) { - router.showDapp( + let confirmAction = SheetAlertPresentableAction(title: R.string.localizable.commonConfirm(preferredLanguages: selectedLocale.rLanguages), style: .pinkBackgroundWhiteText ,handler: { [weak self] in + guard let self else { + return + } + + self.router.showDapp( + from: self.view, + dapp: dapp, + wallet: self.wallet + ) + }) + + let termsAction = SheetAlertPresentableAction(title: R.string.localizable.aboutTermsAndConditions(preferredLanguages: selectedLocale.rLanguages), style: .grayBackgroundPinkText, handler: { [weak self] in + guard let self, let view = self.view else { + return + } + + self.router.showWeb(url: ApplicationConfig.shared.termsURL, from: view, style: .modal) + }) + + let declineAction = SheetAlertPresentableAction(title: R.string.localizable.commonDecline(preferredLanguages: selectedLocale.rLanguages), style: .grayBackgroundWhiteText) + + router.present( + message: R.string.localizable.webThirdPartyWarningDescription(preferredLanguages: selectedLocale.rLanguages), + title: R.string.localizable.webThirdPartyWarningTitle(preferredLanguages: selectedLocale.rLanguages), + closeAction: nil, from: view, - dapp: dapp, - wallet: wallet + actions: [confirmAction, declineAction, termsAction] ) } diff --git a/fearless/Modules/DappBrowserList/DappBrowserListProtocols.swift b/fearless/Modules/DappBrowserList/DappBrowserListProtocols.swift index c6967f18cd..3f248c7b62 100644 --- a/fearless/Modules/DappBrowserList/DappBrowserListProtocols.swift +++ b/fearless/Modules/DappBrowserList/DappBrowserListProtocols.swift @@ -5,7 +5,7 @@ typealias DappBrowserListModuleCreationResult = ( input: DappBrowserListModuleInput ) -protocol DappBrowserListRouterInput: PresentDismissable { +protocol DappBrowserListRouterInput: PresentDismissable, SheetAlertPresentable, WebPresentable { func showDapp( from view: ControllerBackedProtocol?, dapp: TonDapp, diff --git a/fearless/Modules/MainTabBar/MainTabBarPresenter.swift b/fearless/Modules/MainTabBar/MainTabBarPresenter.swift index 1492e3ec42..1709d31a71 100644 --- a/fearless/Modules/MainTabBar/MainTabBarPresenter.swift +++ b/fearless/Modules/MainTabBar/MainTabBarPresenter.swift @@ -3,6 +3,7 @@ import WalletConnectSign import UIKit import SoraFoundation import SSFUtils +import SoraKeystore final class MainTabBarPresenter { private weak var view: MainTabBarViewProtocol? diff --git a/fearless/Modules/MainTabBar/MainTabBarProtocol.swift b/fearless/Modules/MainTabBar/MainTabBarProtocol.swift index 2de586fc08..96f63f32c8 100644 --- a/fearless/Modules/MainTabBar/MainTabBarProtocol.swift +++ b/fearless/Modules/MainTabBar/MainTabBarProtocol.swift @@ -21,7 +21,11 @@ protocol MainTabBarInteractorOutputProtocol: AnyObject { protocol MainTabBarWireframeProtocol: SheetAlertPresentable, AuthorizationAccessible, WarningPresentable, AppUpdatePresentable, PresentDismissable { func presentAccountImport(on view: MainTabBarViewProtocol?) - func replaceStaking(on view: MainTabBarViewProtocol?, type: AssetSelectionStakingType, moduleOutput: StakingMainModuleOutput?) + func replaceStaking( + on view: MainTabBarViewProtocol?, + type: AssetSelectionStakingType, + moduleOutput: StakingMainModuleOutput? + ) func presentPolkaswap(on view: ControllerBackedProtocol?, wallet: MetaAccountModel) } diff --git a/fearless/Modules/MainTabBar/MainTabBarViewController.swift b/fearless/Modules/MainTabBar/MainTabBarViewController.swift index a749b9338f..265ba4f824 100644 --- a/fearless/Modules/MainTabBar/MainTabBarViewController.swift +++ b/fearless/Modules/MainTabBar/MainTabBarViewController.swift @@ -1,6 +1,7 @@ import UIKit import SoraFoundation import SSFModels +import SoraKeystore final class MainTabBarViewController: UITabBarController { private var presenter: MainTabBarPresenterProtocol @@ -84,6 +85,8 @@ final class MainTabBarViewController: UITabBarController { } private func update(with wallet: MetaAccountModel) { + let isDappEnabled = SettingsManager.shared.dappEnabled + if let tabBar = self.tabBar as? TabBar { tabBar.setup(for: wallet.ecosystem) } @@ -92,7 +95,7 @@ final class MainTabBarViewController: UITabBarController { case .regular: indexes = [0, 2, 3, 4, 5] case .ton: - indexes = [0, 1, 5] + indexes = isDappEnabled ? [0, 1, 5] : [0, 5] } let tonViewControllers = indexes.map { fullViewControllersList[$0] } selectedIndex = 0 @@ -135,4 +138,8 @@ extension MainTabBarViewController: EventVisitorProtocol { self.wallet = event.account update(with: event.account) } + + func processFeatureToggleConfigSyncComplete(event: FeatureToggleConfigSyncComplete) { + update(with: wallet) + } } diff --git a/fearless/Modules/MainTabBar/MainTabBarViewFactory.swift b/fearless/Modules/MainTabBar/MainTabBarViewFactory.swift index 81fa1c65db..ca8ab3db09 100644 --- a/fearless/Modules/MainTabBar/MainTabBarViewFactory.swift +++ b/fearless/Modules/MainTabBar/MainTabBarViewFactory.swift @@ -1,4 +1,5 @@ import UIKit +import SSFNetwork import SoraFoundation import SoraKeystore import SSFModels @@ -8,6 +9,7 @@ final class MainTabBarViewFactory: MainTabBarViewFactoryProtocol { static let walletIndex: Int = 0 static let crowdloanIndex: Int = 1 static let stakingIndex: Int = 3 + static let dappIndex: Int = 1 static func createView() -> MainTabBarViewProtocol? { guard diff --git a/fearless/Modules/OnbordingMain/OnboardingMainViewFactory.swift b/fearless/Modules/OnbordingMain/OnboardingMainViewFactory.swift index 79c18fbe24..a2e2d5e612 100644 --- a/fearless/Modules/OnbordingMain/OnboardingMainViewFactory.swift +++ b/fearless/Modules/OnbordingMain/OnboardingMainViewFactory.swift @@ -57,7 +57,9 @@ final class OnboardingMainViewFactory: OnboardingMainViewFactoryProtocol { let featureToggleProvider = FeatureToggleProvider( networkOperationFactory: NetworkOperationFactory(jsonDecoder: GithubJSONDecoder()), - operationQueue: OperationQueue() + operationQueue: OperationQueue(), + settingsManager: SettingsManager.shared, + eventCenter: EventCenter.shared ) let interactor = OnboardingMainInteractor( diff --git a/fearless/Modules/WalletMainContainer/WalletMainContainerAssembly.swift b/fearless/Modules/WalletMainContainer/WalletMainContainerAssembly.swift index 03a9f4f24c..1ff8b4575d 100644 --- a/fearless/Modules/WalletMainContainer/WalletMainContainerAssembly.swift +++ b/fearless/Modules/WalletMainContainer/WalletMainContainerAssembly.swift @@ -47,7 +47,9 @@ final class WalletMainContainerAssembly { let featureToggleProvider = FeatureToggleProvider( networkOperationFactory: NetworkOperationFactory(jsonDecoder: GithubJSONDecoder()), - operationQueue: OperationQueue() + operationQueue: OperationQueue(), + settingsManager: SettingsManager.shared, + eventCenter: EventCenter.shared ) let interactor = WalletMainContainerInteractor( diff --git a/fearless/Modules/WalletsManagment/WalletsManagmentAssembly.swift b/fearless/Modules/WalletsManagment/WalletsManagmentAssembly.swift index b8aedd79cc..344adc0327 100644 --- a/fearless/Modules/WalletsManagment/WalletsManagmentAssembly.swift +++ b/fearless/Modules/WalletsManagment/WalletsManagmentAssembly.swift @@ -3,6 +3,7 @@ import SoraFoundation import RobinHood import SoraUI import SSFNetwork +import SoraKeystore final class WalletsManagmentAssembly { static func configureModule( @@ -32,7 +33,9 @@ final class WalletsManagmentAssembly { let featureToggleProvider = FeatureToggleProvider( networkOperationFactory: NetworkOperationFactory(jsonDecoder: GithubJSONDecoder()), - operationQueue: OperationQueue() + operationQueue: OperationQueue(), + settingsManager: SettingsManager.shared, + eventCenter: EventCenter.shared ) let interactor = WalletsManagmentInteractor( diff --git a/fearless/en.lproj/Localizable.strings b/fearless/en.lproj/Localizable.strings index 28a98c403a..806cfd2572 100644 --- a/fearless/en.lproj/Localizable.strings +++ b/fearless/en.lproj/Localizable.strings @@ -1256,3 +1256,6 @@ belongs to the right network"; "сurrencies.stub.text" = "Currencies"; "common.transaction.sent" = "Transaction sent"; "common.transaction.sent.description" = "Your transaction has been successfully sent to the blockchain"; +"web.third.party.warning.title" = "You’re going to visit a third-party website"; +"web.third.party.warning.description" = "Fearless Wallet isn’t liable for failures on this or any other website as stated in the Fearless Wallet terms of service.\n\nBy interacting with this or any other third-party website you agree to be subject to its Terms and Privacy Policy."; +"common.decline" = "Decline"; diff --git a/fearless/id.lproj/Localizable.strings b/fearless/id.lproj/Localizable.strings index 396053af2b..00f0b3f682 100644 --- a/fearless/id.lproj/Localizable.strings +++ b/fearless/id.lproj/Localizable.strings @@ -1240,3 +1240,6 @@ akan muncul di sini"; "сurrencies.stub.text" = "Mata uang"; "common.transaction.sent" = "Transaction sent"; "common.transaction.sent.description" = "Your transaction has been successfully sent to the blockchain"; +"web.third.party.warning.title" = "You’re going to visit a third-party website"; +"web.third.party.warning.description" = "Fearless Wallet isn’t liable for failures on this or any other website as stated in the Fearless Wallet terms of service.\n\nBy interacting with this or any other third-party website you agree to be subject to its Terms and Privacy Policy."; +"common.decline" = "Decline"; diff --git a/fearless/ja.lproj/Localizable.strings b/fearless/ja.lproj/Localizable.strings index 1a85281f60..96a17717fd 100644 --- a/fearless/ja.lproj/Localizable.strings +++ b/fearless/ja.lproj/Localizable.strings @@ -1246,3 +1246,6 @@ "сurrencies.stub.text" = "通貨"; "common.transaction.sent" = "Transaction sent"; "common.transaction.sent.description" = "Your transaction has been successfully sent to the blockchain"; +"web.third.party.warning.title" = "You’re going to visit a third-party website"; +"web.third.party.warning.description" = "Fearless Wallet isn’t liable for failures on this or any other website as stated in the Fearless Wallet terms of service.\n\nBy interacting with this or any other third-party website you agree to be subject to its Terms and Privacy Policy."; +"common.decline" = "Decline"; diff --git a/fearless/pt-PT.lproj/Localizable.strings b/fearless/pt-PT.lproj/Localizable.strings index b1dbde191f..e8d38bfb3c 100644 --- a/fearless/pt-PT.lproj/Localizable.strings +++ b/fearless/pt-PT.lproj/Localizable.strings @@ -1288,3 +1288,6 @@ To find out more, contact %@"; "scam.info.nomis.subtype.text" = "Proceed with caution"; "common.transaction.sent" = "Transaction sent"; "common.transaction.sent.description" = "Your transaction has been successfully sent to the blockchain"; +"web.third.party.warning.title" = "You’re going to visit a third-party website"; +"web.third.party.warning.description" = "Fearless Wallet isn’t liable for failures on this or any other website as stated in the Fearless Wallet terms of service.\n\nBy interacting with this or any other third-party website you agree to be subject to its Terms and Privacy Policy."; +"common.decline" = "Decline"; diff --git a/fearless/ru.lproj/Localizable.strings b/fearless/ru.lproj/Localizable.strings index 4f9a7535bf..e742a3924c 100644 --- a/fearless/ru.lproj/Localizable.strings +++ b/fearless/ru.lproj/Localizable.strings @@ -1254,3 +1254,6 @@ "сurrencies.stub.text" = "Токены"; "common.transaction.sent" = "Transaction sent"; "common.transaction.sent.description" = "Your transaction has been successfully sent to the blockchain"; +"web.third.party.warning.title" = "You’re going to visit a third-party website"; +"web.third.party.warning.description" = "Fearless Wallet isn’t liable for failures on this or any other website as stated in the Fearless Wallet terms of service.\n\nBy interacting with this or any other third-party website you agree to be subject to its Terms and Privacy Policy."; +"common.decline" = "Decline"; diff --git a/fearless/tr.lproj/Localizable.strings b/fearless/tr.lproj/Localizable.strings index 789f56d7d8..30c0702d8e 100644 --- a/fearless/tr.lproj/Localizable.strings +++ b/fearless/tr.lproj/Localizable.strings @@ -1252,3 +1252,6 @@ ait olduğundan emin olun."; "сurrencies.stub.text" = "Para birimleri"; "common.transaction.sent" = "Transaction sent"; "common.transaction.sent.description" = "Your transaction has been successfully sent to the blockchain"; +"web.third.party.warning.title" = "You’re going to visit a third-party website"; +"web.third.party.warning.description" = "Fearless Wallet isn’t liable for failures on this or any other website as stated in the Fearless Wallet terms of service.\n\nBy interacting with this or any other third-party website you agree to be subject to its Terms and Privacy Policy."; +"common.decline" = "Decline"; diff --git a/fearless/vi.lproj/Localizable.strings b/fearless/vi.lproj/Localizable.strings index 02ab3ec678..c89e5dd734 100644 --- a/fearless/vi.lproj/Localizable.strings +++ b/fearless/vi.lproj/Localizable.strings @@ -1254,3 +1254,6 @@ thuộc đúng mạng"; "сurrencies.stub.text" = "Tiền tệ"; "common.transaction.sent" = "Transaction sent"; "common.transaction.sent.description" = "Your transaction has been successfully sent to the blockchain"; +"web.third.party.warning.title" = "You’re going to visit a third-party website"; +"web.third.party.warning.description" = "Fearless Wallet isn’t liable for failures on this or any other website as stated in the Fearless Wallet terms of service.\n\nBy interacting with this or any other third-party website you agree to be subject to its Terms and Privacy Policy."; +"common.decline" = "Decline"; From 4e1998796859cacfdc49da5ea73b3100ddb4eead Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Fri, 21 Feb 2025 21:26:43 +0700 Subject: [PATCH 154/156] notify when config fetched --- .../Services/FeatureToggle/FeatureToggleService.swift | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fearless/ApplicationLayer/Services/FeatureToggle/FeatureToggleService.swift b/fearless/ApplicationLayer/Services/FeatureToggle/FeatureToggleService.swift index 84c2a7aa64..ef3db36f89 100644 --- a/fearless/ApplicationLayer/Services/FeatureToggle/FeatureToggleService.swift +++ b/fearless/ApplicationLayer/Services/FeatureToggle/FeatureToggleService.swift @@ -66,7 +66,6 @@ final class FeatureToggleProvider { if let snapshot = snapshot { settingsManager.dappEnabled = snapshot.dappEnabled.or(FeatureToggleConfig.defaultConfig.dappEnabled ?? true) - eventCenter.notify(with: FeatureToggleConfigSyncComplete(config: snapshot)) deliver(snapshot: snapshot, to: request) @@ -81,6 +80,9 @@ final class FeatureToggleProvider { if let snapshot = snapshot { self.snapshot = snapshot resolveRequests() + + settingsManager.dappEnabled = snapshot.dappEnabled.or(FeatureToggleConfig.defaultConfig.dappEnabled ?? true) + eventCenter.notify(with: FeatureToggleConfigSyncComplete(config: snapshot)) } case .failure: handleDefault() From 195b0230743fa3c5fb74fbf05f4e4ee38b2d0bcf Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Wed, 12 Mar 2025 15:58:35 +0700 Subject: [PATCH 155/156] dapp disabled by default --- fearless/Common/Extension/SettingsExtension.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fearless/Common/Extension/SettingsExtension.swift b/fearless/Common/Extension/SettingsExtension.swift index 8306de2ceb..cb64fa409b 100644 --- a/fearless/Common/Extension/SettingsExtension.swift +++ b/fearless/Common/Extension/SettingsExtension.swift @@ -107,7 +107,7 @@ extension SettingsManagerProtocol { var dappEnabled: Bool { get { - bool(for: SettingsKey.dappEnabled.rawValue) ?? true + bool(for: SettingsKey.dappEnabled.rawValue) ?? false } set { From 5589e11284cba965d7797317ab67730bd93b684f Mon Sep 17 00:00:00 2001 From: Alex Lebedko Date: Tue, 25 Mar 2025 22:32:52 +0700 Subject: [PATCH 156/156] remote config --- fearless/Common/Services/ChainRegistry/ChainSyncService.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fearless/Common/Services/ChainRegistry/ChainSyncService.swift b/fearless/Common/Services/ChainRegistry/ChainSyncService.swift index 2c46e73717..1d83b4c6ad 100644 --- a/fearless/Common/Services/ChainRegistry/ChainSyncService.swift +++ b/fearless/Common/Services/ChainRegistry/ChainSyncService.swift @@ -14,7 +14,7 @@ enum ChainSyncServiceError: Error { } final class ChainSyncService { - static let fetchLocalData = true + static let fetchLocalData = false struct SyncChanges { let newOrUpdatedItems: [ChainModel] @@ -206,6 +206,7 @@ final class ChainSyncService { }) localSaveOperation.completionBlock = { + print("save operation: ", localSaveOperation.result) DispatchQueue.global(qos: .userInitiated).async { [weak self] in self?.complete(result: .success(syncChanges)) }